summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.travis.yml2
-rw-r--r--asm/battle_anim_80A5C6C.s4
-rw-r--r--asm/battle_anim_sound_tasks.s1006
-rw-r--r--asm/battle_frontier_1.s42
-rw-r--r--asm/battle_frontier_2.s84
-rw-r--r--asm/battle_link_817C95C.s4891
-rw-r--r--asm/battle_records.s1285
-rw-r--r--asm/battle_tower.s18
-rw-r--r--asm/birch_pc.s234
-rw-r--r--asm/blit.s823
-rw-r--r--asm/cable_car.s2
-rw-r--r--asm/cable_car_util.s8
-rw-r--r--asm/cable_club.s74
-rw-r--r--asm/contest.s4
-rw-r--r--asm/contest_link_80F57C4.s6
-rw-r--r--asm/contest_link_80FC4F4.s2
-rw-r--r--asm/credits.s3903
-rw-r--r--asm/dewford_trend.s975
-rw-r--r--asm/easy_chat.s12
-rw-r--r--asm/field_camera.s1153
-rw-r--r--asm/field_control_avatar.s18
-rw-r--r--asm/field_effect.s8533
-rw-r--r--asm/field_effect_helpers.s4
-rw-r--r--asm/field_player_avatar.s2
-rw-r--r--asm/field_screen.s52
-rw-r--r--asm/field_specials.s32
-rw-r--r--asm/field_tasks.s14
-rw-r--r--asm/fieldmap.s2285
-rw-r--r--asm/fldeff_flash.s709
-rw-r--r--asm/fldeff_groundshake.s596
-rw-r--r--asm/fldeff_softboiled.s339
-rw-r--r--asm/fldeff_strength.s93
-rw-r--r--asm/fldeff_sweetscent.s220
-rw-r--r--asm/fossil_specials.s887
-rw-r--r--asm/intro.s6270
-rw-r--r--asm/intro_credits_graphics.s1077
-rw-r--r--asm/item.s1921
-rw-r--r--asm/item_menu.s6452
-rw-r--r--asm/item_menu_icons.s637
-rw-r--r--asm/learn_move.s6
-rw-r--r--asm/librfu.s1224
-rw-r--r--asm/link_rfu.s2021
-rw-r--r--asm/list_menu.s1643
-rw-r--r--asm/macros/event.inc96
-rw-r--r--asm/main_menu.s5477
-rw-r--r--asm/map_name_popup.s570
-rw-r--r--asm/map_obj_lock.s474
-rw-r--r--asm/mauville_old_man.s2519
-rw-r--r--asm/menu_helpers.s986
-rw-r--r--asm/mon_markings.s946
-rw-r--r--asm/overworld.s6825
-rw-r--r--asm/party_menu.s44
-rw-r--r--asm/player_pc.s3436
-rw-r--r--asm/pokedex.s26
-rw-r--r--asm/pokedex_area_screen.s6
-rw-r--r--asm/pokemon_1.s2016
-rw-r--r--asm/pokemon_3.s529
-rw-r--r--asm/pokemon_icon.s822
-rw-r--r--asm/pokemon_item_effect.s1967
-rw-r--r--asm/pokemon_storage_system.s10
-rw-r--r--asm/pokemon_summary_screen.s28
-rw-r--r--asm/pokenav.s1097
-rw-r--r--asm/post_battle_event_funcs.s2
-rw-r--r--asm/rom6.s451
-rw-r--r--asm/rom_8011DC0.s (renamed from asm/link.s)17865
-rw-r--r--asm/rom_8034C54.s2
-rw-r--r--asm/rotating_gate.s1152
-rw-r--r--asm/roulette.s4
-rw-r--r--asm/script_menu.s6
-rw-r--r--asm/script_movement.s577
-rw-r--r--asm/script_pokemon_util_80F87D8.s8
-rw-r--r--asm/shop.s14
-rw-r--r--asm/slot_machine.s2
-rw-r--r--asm/smokescreen.s214
-rw-r--r--asm/start_menu.s2101
-rw-r--r--asm/trade.s60
-rw-r--r--asm/trader.s558
-rw-r--r--asm/trainer_card.s16
-rw-r--r--asm/trainer_rematch.s206
-rw-r--r--common_syms/field_camera.txt3
-rw-r--r--common_syms/fieldmap.txt1
-rw-r--r--common_syms/intro.txt2
-rw-r--r--common_syms/link.txt37
-rw-r--r--common_syms/link_rfu.txt2
-rw-r--r--common_syms/list_menu.txt2
-rw-r--r--common_syms/load_save.txt4
-rw-r--r--common_syms/main.txt9
-rw-r--r--common_syms/mauville_old_man.txt1
-rw-r--r--common_syms/overworld.txt5
-rw-r--r--common_syms/random.txt2
-rw-r--r--common_syms/window.txt5
-rw-r--r--constants/battle_move_constants.inc15
-rw-r--r--constants/constants.inc2
-rw-r--r--data/battle_ai_scripts.s2828
-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_frontier_1.s42
-rw-r--r--data/battle_link_817C95C.s174
-rw-r--r--data/battle_moves.inc3906
-rw-r--r--data/battle_records.s37
-rw-r--r--data/credits.s1577
-rw-r--r--data/data2b.s50
-rw-r--r--data/data2c.s18
-rw-r--r--data/data2e.s151
-rw-r--r--data/event_scripts.s25
-rw-r--r--data/field_effect.s451
-rw-r--r--data/field_effect_scripts.s28
-rw-r--r--data/field_screen.s2
-rw-r--r--data/fieldmap.s8
-rw-r--r--data/fldeff_flash.s81
-rw-r--r--data/fossil_special_fldeff_groundshake.s98
-rw-r--r--data/graphics/berries/berry_pic_table.inc45
-rw-r--r--data/graphics/items/item_icon_table.inc1513
-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/intro.s529
-rw-r--r--data/intro_credits_graphics.s459
-rw-r--r--data/item_icon.s8
-rw-r--r--data/item_menu.s127
-rw-r--r--data/item_menu_icons.s224
-rw-r--r--data/item_use.s2
-rw-r--r--data/items.inc5656
-rw-r--r--data/main_menu.s141
-rw-r--r--data/map_name_popup.s69
-rw-r--r--data/mauville_old_man.s58
-rw-r--r--data/menu_helpers.s37
-rw-r--r--data/mon_markings.s157
-rw-r--r--data/overworld.s52
-rw-r--r--data/party_menu.s10
-rw-r--r--data/player_pc.s75
-rw-r--r--data/pokenav.s748
-rw-r--r--data/rom_8011DC0.s (renamed from data/link.s)389
-rw-r--r--data/rotating_gate.s285
-rw-r--r--data/scripts/cable_club.inc16
-rw-r--r--data/scripts/maps/AbandonedShip_Rooms2_1F.inc4
-rw-r--r--data/scripts/maps/AbandonedShip_Rooms_1F.inc2
-rw-r--r--data/scripts/maps/BattleFrontier_BattleArenaBattleRoom.inc4
-rw-r--r--data/scripts/maps/BattleFrontier_BattleArenaLobby.inc12
-rw-r--r--data/scripts/maps/BattleFrontier_BattleDomeLobby.inc20
-rw-r--r--data/scripts/maps/BattleFrontier_BattleDomePreBattleRoom.inc2
-rw-r--r--data/scripts/maps/BattleFrontier_BattleFactoryLobby.inc14
-rw-r--r--data/scripts/maps/BattleFrontier_BattleFactoryPreBattleRoom.inc2
-rw-r--r--data/scripts/maps/BattleFrontier_BattlePalaceBattleRoom.inc4
-rw-r--r--data/scripts/maps/BattleFrontier_BattlePalaceLobby.inc14
-rw-r--r--data/scripts/maps/BattleFrontier_BattlePikeLobby.inc14
-rw-r--r--data/scripts/maps/BattleFrontier_BattlePikeThreePathRoom.inc4
-rw-r--r--data/scripts/maps/BattleFrontier_BattlePyramidEmptySquare.inc8
-rw-r--r--data/scripts/maps/BattleFrontier_BattlePyramidLobby.inc14
-rw-r--r--data/scripts/maps/BattleFrontier_BattlePyramidTop.inc4
-rw-r--r--data/scripts/maps/BattleFrontier_BattleTowerBattleRoom2.inc2
-rw-r--r--data/scripts/maps/BattleFrontier_BattleTowerLobby.inc30
-rw-r--r--data/scripts/maps/BattleFrontier_RankingHall.inc2
-rw-r--r--data/scripts/maps/BirthIsland_Exterior.inc2
-rw-r--r--data/scripts/maps/DewfordTown_Hall.inc6
-rw-r--r--data/scripts/maps/FallarborTown_BattleTentBattleRoom.inc8
-rw-r--r--data/scripts/maps/FallarborTown_BattleTentLobby.inc8
-rw-r--r--data/scripts/maps/FarawayIsland_Interior.inc2
-rw-r--r--data/scripts/maps/FortreeCity_Gym.inc4
-rw-r--r--data/scripts/maps/JaggedPass.inc4
-rw-r--r--data/scripts/maps/LilycoveCity_ContestLobby.inc4
-rw-r--r--data/scripts/maps/LittlerootTown_BrendansHouse_2F.inc2
-rw-r--r--data/scripts/maps/LittlerootTown_MaysHouse_2F.inc2
-rw-r--r--data/scripts/maps/MauvilleCity.inc18
-rw-r--r--data/scripts/maps/MauvilleCity_BikeShop.inc2
-rw-r--r--data/scripts/maps/MauvilleCity_PokemonCenter_1F.inc2
-rw-r--r--data/scripts/maps/MeteorFalls_1F_2R.inc6
-rw-r--r--data/scripts/maps/MossdeepCity_SpaceCenter_2F.inc6
-rw-r--r--data/scripts/maps/MtChimney.inc4
-rw-r--r--data/scripts/maps/MtPyre_3F.inc2
-rw-r--r--data/scripts/maps/MtPyre_6F.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/PetalburgCity.inc4
-rw-r--r--data/scripts/maps/PetalburgCity_Gym.inc4
-rw-r--r--data/scripts/maps/PetalburgWoods.inc4
-rw-r--r--data/scripts/maps/Route102.inc4
-rw-r--r--data/scripts/maps/Route103.inc6
-rw-r--r--data/scripts/maps/Route104.inc12
-rw-r--r--data/scripts/maps/Route105.inc2
-rw-r--r--data/scripts/maps/Route106.inc2
-rw-r--r--data/scripts/maps/Route107.inc2
-rw-r--r--data/scripts/maps/Route108.inc2
-rw-r--r--data/scripts/maps/Route109.inc4
-rw-r--r--data/scripts/maps/Route110.inc8
-rw-r--r--data/scripts/maps/Route110_TrickHousePuzzle6.inc4
-rw-r--r--data/scripts/maps/Route111.inc6
-rw-r--r--data/scripts/maps/Route112.inc2
-rw-r--r--data/scripts/maps/Route113.inc4
-rw-r--r--data/scripts/maps/Route114.inc4
-rw-r--r--data/scripts/maps/Route115.inc6
-rw-r--r--data/scripts/maps/Route116.inc8
-rw-r--r--data/scripts/maps/Route117.inc12
-rw-r--r--data/scripts/maps/Route118.inc4
-rw-r--r--data/scripts/maps/Route119.inc8
-rw-r--r--data/scripts/maps/Route119_WeatherInstitute_1F.inc4
-rw-r--r--data/scripts/maps/Route119_WeatherInstitute_2F.inc6
-rw-r--r--data/scripts/maps/Route120.inc4
-rw-r--r--data/scripts/maps/Route121.inc6
-rw-r--r--data/scripts/maps/Route123.inc6
-rw-r--r--data/scripts/maps/Route124.inc6
-rw-r--r--data/scripts/maps/Route125.inc2
-rw-r--r--data/scripts/maps/Route126.inc2
-rw-r--r--data/scripts/maps/Route127.inc2
-rw-r--r--data/scripts/maps/Route128.inc4
-rw-r--r--data/scripts/maps/SlateportCity_BattleTentBattleRoom.inc4
-rw-r--r--data/scripts/maps/SlateportCity_BattleTentCorridor.inc2
-rw-r--r--data/scripts/maps/SlateportCity_BattleTentLobby.inc4
-rw-r--r--data/scripts/maps/SootopolisCity_MysteryEventsHouse_1F.inc10
-rw-r--r--data/scripts/maps/SootopolisCity_MysteryEventsHouse_B1F.inc2
-rw-r--r--data/scripts/maps/SouthernIsland_Interior.inc4
-rw-r--r--data/scripts/maps/TrainerHill_Entrance.inc2
-rw-r--r--data/scripts/maps/VerdanturfTown_BattleTentBattleRoom.inc8
-rw-r--r--data/scripts/maps/VerdanturfTown_BattleTentLobby.inc8
-rw-r--r--data/scripts/mauville_man.inc46
-rw-r--r--data/specials.inc82
-rw-r--r--data/strings.s80
-rw-r--r--data/text/ability_description_pointers.inc80
-rw-r--r--data/text/ability_descriptions.inc233
-rw-r--r--data/text/ability_names.inc79
-rw-r--r--data/text/birch_speech.inc18
-rw-r--r--data/text/item_descriptions.inc929
-rw-r--r--data/text/pokedex_rating.inc42
-rw-r--r--data/text/save.inc12
-rw-r--r--data/text/type_names.inc19
-rw-r--r--data/trader.s22
-rw-r--r--data/trainer_money.inc59
-rw-r--r--data/trainer_rematch.s10
-rw-r--r--data/type_effectiveness.inc119
-rw-r--r--data/unk_transition.s1
-rw-r--r--graphics/unknown/unknown_55C170.pngbin151 -> 99 bytes
-rw-r--r--graphics/unknown/unknown_55C190.pngbin0 -> 102 bytes
-rw-r--r--graphics/unknown/unknown_55C1B0.pngbin0 -> 100 bytes
-rw-r--r--graphics/unknown/unknown_55C1D0.pngbin0 -> 91 bytes
-rw-r--r--graphics/unused/intro_birch_beauty.pngbin2116 -> 2183 bytes
-rw-r--r--graphics_file_rules.mk2
-rw-r--r--include/agb_flash.h12
-rw-r--r--include/bard_music.h4
-rw-r--r--include/battle.h135
-rw-r--r--include/battle_anim.h4
-rw-r--r--include/battle_frontier_1.h1
-rw-r--r--include/battle_frontier_2.h2
-rw-r--r--include/battle_link_817C95C.h11
-rw-r--r--include/battle_main.h30
-rw-r--r--include/battle_message.h57
-rw-r--r--include/battle_records.h12
-rw-r--r--include/battle_script_commands.h8
-rw-r--r--include/battle_tv.h11
-rw-r--r--include/battle_util.h28
-rw-r--r--include/bg.h2
-rw-r--r--include/bike.h4
-rw-r--r--include/blit.h10
-rw-r--r--include/braille_puzzles.h11
-rw-r--r--include/calculate_base_damage.h6
-rw-r--r--include/clock.h2
-rw-r--r--include/constants/battle_move_effects.h2
-rw-r--r--include/constants/battle_script_commands.h2
-rw-r--r--include/constants/decorations.h1
-rw-r--r--include/constants/flags.h13
-rw-r--r--include/constants/game_stat.h5
-rw-r--r--include/constants/items.h13
-rw-r--r--include/constants/rgb.h1
-rw-r--r--include/constants/trainers.h32
-rw-r--r--include/constants/vars.h2
-rw-r--r--include/credits.h11
-rw-r--r--include/crt0.h11
-rw-r--r--include/data/battle_moves.h3913
-rw-r--r--include/data/item_icon_table.h414
-rw-r--r--include/data/items.h6079
-rw-r--r--include/data/pokemon/trainer_class_lookups.h64
-rw-r--r--include/data/text/abilities.h247
-rw-r--r--include/data/text/item_descriptions.h329
-rw-r--r--include/data2.h6
-rw-r--r--include/decoration.h4
-rw-r--r--include/easy_chat.h33
-rw-r--r--include/event_scripts.h144
-rw-r--r--include/field_camera.h16
-rw-r--r--include/field_control_avatar.h41
-rw-r--r--include/field_effect.h154
-rw-r--r--include/field_effect_helpers.h1
-rw-r--r--include/field_ground_effect.h2
-rw-r--r--include/field_map_obj.h7
-rw-r--r--include/field_map_obj_helpers.h4
-rw-r--r--include/field_player_avatar.h13
-rw-r--r--include/field_screen.h5
-rw-r--r--include/field_specials.h1
-rw-r--r--include/fieldmap.h30
-rw-r--r--include/fldeff_80F9BCC.h1
-rw-r--r--include/fldeff_cut.h7
-rw-r--r--include/fldeff_groundshake.h6
-rw-r--r--include/gba/io_reg.h35
-rw-r--r--include/global.fieldmap.h8
-rw-r--r--include/global.h213
-rw-r--r--include/global.tv.h4
-rw-r--r--include/graphics.h644
-rw-r--r--include/gym_leader_rematch.h87
-rw-r--r--include/international_string_util.h4
-rw-r--r--include/intro.h6
-rw-r--r--include/intro_credits_graphics.h30
-rw-r--r--include/item.h56
-rw-r--r--include/item_menu.h46
-rw-r--r--include/item_menu_icons.h15
-rw-r--r--include/item_use.h5
-rw-r--r--include/libgcnmultiboot.h17
-rw-r--r--include/librfu.h143
-rw-r--r--include/link.h172
-rw-r--r--include/link_rfu.h235
-rw-r--r--include/list_menu.h63
-rw-r--r--include/load_save.h26
-rw-r--r--include/m4a.h5
-rw-r--r--include/main.h16
-rw-r--r--include/malloc.h1
-rw-r--r--include/map_name_popup.h2
-rw-r--r--include/match_call.h13
-rw-r--r--include/mauville_old_man.h18
-rw-r--r--include/menu.h27
-rw-r--r--include/menu_helpers.h28
-rw-r--r--include/menu_indicators.h25
-rw-r--r--include/mon_markings.h24
-rw-r--r--include/multiboot_pokemon_colosseum.h6
-rw-r--r--include/overworld.h176
-rw-r--r--include/palette.h2
-rw-r--r--include/party_menu.h22
-rw-r--r--include/player_pc.h78
-rw-r--r--include/pokedex.h3
-rw-r--r--include/pokemon.h219
-rw-r--r--include/pokemon_3.h1
-rw-r--r--include/pokemon_icon.h15
-rw-r--r--include/pokemon_item_effects.h62
-rwxr-xr-xinclude/pokemon_summary_screen.h6
-rw-r--r--include/pokenav.h9
-rw-r--r--include/reset_save_heap.h12
-rw-r--r--include/rom6.h2
-rw-r--r--include/rom_8011DC0.h12
-rw-r--r--include/rotating_gate.h8
-rw-r--r--include/roulette_util.h17
-rw-r--r--include/save.h18
-rw-r--r--include/script_menu.h3
-rw-r--r--include/secret_base.h3
-rw-r--r--include/shop.h1
-rw-r--r--include/start_menu.h10
-rw-r--r--include/starter_choose.h5
-rw-r--r--include/strings.h211
-rw-r--r--include/text.h7
-rw-r--r--include/text_window.h4
-rw-r--r--include/trade.h12
-rw-r--r--include/trader.h2
-rw-r--r--include/trainer_card.h35
-rw-r--r--include/tv.h40
-rw-r--r--include/window.h6
-rw-r--r--ld_script.txt141
-rw-r--r--src/bard_music.c1
-rw-r--r--src/battle_ai_script_commands.c519
-rw-r--r--src/battle_ai_switch_items.c5
-rw-r--r--src/battle_anim.c246
-rw-r--r--src/battle_anim_sound_tasks.c438
-rw-r--r--src/battle_bg.c1
-rw-r--r--src/battle_controller_link_opponent.c85
-rw-r--r--src/battle_controller_link_partner.c58
-rw-r--r--src/battle_controller_opponent.c60
-rw-r--r--src/battle_controller_player.c150
-rw-r--r--src/battle_controller_player_partner.c100
-rw-r--r--src/battle_controller_recorded_opponent.c53
-rw-r--r--src/battle_controller_recorded_player.c50
-rw-r--r--src/battle_controller_safari.c5
-rw-r--r--src/battle_controller_wally.c53
-rw-r--r--src/battle_controllers.c629
-rw-r--r--src/battle_gfx_sfx_util.c10
-rw-r--r--src/battle_interface.c196
-rw-r--r--src/battle_main.c286
-rw-r--r--src/battle_message.c1948
-rw-r--r--src/battle_records.c510
-rw-r--r--src/battle_script_commands.c998
-rw-r--r--src/battle_setup.c190
-rw-r--r--src/battle_transition.c2
-rw-r--r--src/battle_tv.c1576
-rw-r--r--src/battle_util.c60
-rw-r--r--src/battle_util2.c18
-rw-r--r--src/berry.c2
-rw-r--r--src/berry_blender.c48
-rw-r--r--src/berry_tag_screen.c12
-rw-r--r--src/bg.c10
-rw-r--r--src/bike.c4
-rw-r--r--src/birch_pc.c89
-rw-r--r--src/blit.c209
-rw-r--r--src/braille_puzzles.c212
-rw-r--r--src/calculate_base_damage.c275
-rw-r--r--src/clear_save_data_screen.c2
-rw-r--r--src/clock.c2
-rw-r--r--src/credits.c2355
-rw-r--r--src/daycare.c31
-rw-r--r--src/decompress.c2
-rw-r--r--src/decoration.c159
-rw-r--r--src/dewford_trend.c340
-rw-r--r--src/egg_hatch.c24
-rw-r--r--src/evolution_scene.c16
-rw-r--r--src/field_camera.c497
-rw-r--r--src/field_effect.c3884
-rw-r--r--src/field_map_obj.c8
-rwxr-xr-xsrc/field_map_obj_helpers.c201
-rw-r--r--src/fieldmap.c1034
-rw-r--r--src/fldeff_flash.c367
-rw-r--r--src/fldeff_groundshake.c299
-rw-r--r--src/fldeff_softboiled.c109
-rw-r--r--src/fldeff_strength.c46
-rw-r--r--src/fldeff_sweetscent.c98
-rw-r--r--src/fldeff_teleport.c9
-rw-r--r--src/fossil_specials.c770
-rw-r--r--src/gym_leader_rematch.c106
-rw-r--r--src/hall_of_fame.c6
-rw-r--r--src/hof_pc.c3
-rw-r--r--src/international_string_util.c2
-rw-r--r--src/intro.c3020
-rw-r--r--src/intro_credits_graphics.c740
-rw-r--r--src/item.c1026
-rw-r--r--src/item_icon.c2
-rwxr-xr-xsrc/item_menu.c2245
-rw-r--r--src/item_menu_icons.c684
-rwxr-xr-xsrc/item_use.c30
-rw-r--r--src/librfu_rfu.c32
-rw-r--r--src/lilycove_lady.c90
-rw-r--r--src/link.c2430
-rw-r--r--src/link_rfu.c4942
-rw-r--r--src/list_menu.c633
-rw-r--r--src/load_save.c87
-rw-r--r--src/mail.c8
-rw-r--r--src/main.c94
-rw-r--r--src/main_menu.c1962
-rw-r--r--src/map_name_popup.c474
-rw-r--r--src/map_obj_lock.c187
-rw-r--r--src/match_call.c1275
-rw-r--r--src/mauville_old_man.c1247
-rw-r--r--src/menu.c128
-rw-r--r--src/menu_helpers.c455
-rw-r--r--src/mon_markings.c611
-rw-r--r--src/mystery_event_menu.c4
-rw-r--r--src/naming_screen.c132
-rw-r--r--src/new_game.c12
-rw-r--r--src/option_menu.c19
-rw-r--r--src/overworld.c3188
-rw-r--r--src/player_pc.c1364
-rw-r--r--src/pokeball.c190
-rw-r--r--src/pokeblock.c48
-rw-r--r--src/pokeblock_feed.c3
-rw-r--r--src/pokemon.c6096
-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_animation.c2
-rw-r--r--src/pokemon_icon.c304
-rw-r--r--src/pokemon_summary_screen.c136
-rw-r--r--src/random.c4
-rw-r--r--src/record_mixing.c15
-rw-r--r--src/recorded_battle.c3
-rw-r--r--src/region_map.c14
-rw-r--r--src/reset_save_heap.c6
-rw-r--r--src/reshow_battle_screen.c26
-rw-r--r--src/rom6.c209
-rw-r--r--src/rom_8011DC0.c18
-rw-r--r--src/rotating_gate.c1188
-rw-r--r--src/safari_zone.c12
-rw-r--r--src/save.c50
-rw-r--r--src/scrcmd.c191
-rw-r--r--src/script.c2
-rw-r--r--src/script_movement.c233
-rw-r--r--src/secret_base.c33
-rw-r--r--src/smokescreen.c71
-rw-r--r--src/start_menu.c1331
-rw-r--r--src/starter_choose.c6
-rw-r--r--src/text.c21
-rw-r--r--src/text_window.c40
-rw-r--r--src/time_events.c2
-rw-r--r--src/title_screen.c3
-rw-r--r--src/trader.c209
-rw-r--r--src/tv.c679
-rw-r--r--src/util.c2
-rw-r--r--src/walda_phrase.c7
-rw-r--r--src/window.c32
-rw-r--r--sym_bss.txt16
-rw-r--r--sym_common.txt280
-rw-r--r--sym_ewram.txt297
482 files changed, 71800 insertions, 129301 deletions
diff --git a/.travis.yml b/.travis.yml
index dda07ebb4..e54c14e96 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -13,7 +13,7 @@ cache:
apt: true
install:
- pushd $HOME
- - travis_retry wget http://download.sourceforge.net/devkitpro/devkitARM_r46-x86_64-linux.tar.bz2
+ - travis_retry wget https://downloads.sourceforge.net/project/devkitpro/devkitARM/devkitARM_r47/devkitARM_r47-x86_64-linux.tar.bz2
- tar xf devkitARM*.tar.bz2
- travis_retry git clone https://github.com/pret/agbcc.git
- cd agbcc && ./build.sh && ./install.sh $TRAVIS_BUILD_DIR
diff --git a/asm/battle_anim_80A5C6C.s b/asm/battle_anim_80A5C6C.s
index a3be18667..44ba33c08 100644
--- a/asm/battle_anim_80A5C6C.s
+++ b/asm/battle_anim_80A5C6C.s
@@ -554,7 +554,7 @@ _080A60E8:
ldrh r0, [r1, 0x2]
cmp r0, 0
bne _080A610C
- ldr r1, =gAnimSpeciesByBanks
+ ldr r1, =gAnimBattlerSpecies
lsls r0, r4, 1
adds r0, r1
ldrh r1, [r0]
@@ -1224,7 +1224,7 @@ _080A65D8:
bl sub_80A62DC
_080A65DE:
adds r0, r4, 0
- bl sub_80D30DC
+ bl UpdateMonIconFrame
pop {r4}
pop {r0}
bx r0
diff --git a/asm/battle_anim_sound_tasks.s b/asm/battle_anim_sound_tasks.s
deleted file mode 100644
index def934fab..000000000
--- a/asm/battle_anim_sound_tasks.s
+++ /dev/null
@@ -1,1006 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_8158B30
-sub_8158B30: @ 8158B30
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r1, =gTasks
- lsls r6, r0, 2
- adds r6, r0
- lsls r6, 3
- adds r6, r1
- ldr r1, =gBattleAnimArgs
- ldrh r0, [r1]
- strh r0, [r6, 0x8]
- ldrh r0, [r1, 0x2]
- strh r0, [r6, 0xA]
- movs r0, 0x40
- negs r0, r0
- bl BattleAnimAdjustPanning
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x3F
- bl BattleAnimAdjustPanning
- adds r5, r0, 0
- lsls r4, 24
- asrs r4, 24
- lsls r5, 24
- asrs r5, 24
- adds r0, r4, 0
- adds r1, r5, 0
- movs r2, 0x2
- bl CalculatePanIncrement
- strh r4, [r6, 0xC]
- strh r5, [r6, 0xE]
- lsls r0, 24
- asrs r0, 24
- strh r0, [r6, 0x10]
- movs r0, 0xA
- strh r0, [r6, 0x1C]
- ldr r0, =sub_8158B98
- str r0, [r6]
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8158B30
-
- thumb_func_start sub_8158B98
-sub_8158B98: @ 8158B98
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
- ldrh r5, [r4, 0xC]
- ldrb r6, [r4, 0x10]
- ldrh r0, [r4, 0x1E]
- adds r0, 0x1
- movs r1, 0
- strh r0, [r4, 0x1E]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x6F
- bne _08158BD0
- movs r0, 0x5
- strh r0, [r4, 0x1C]
- strh r1, [r4, 0x1E]
- ldr r0, =sub_8158C04
- str r0, [r4]
- b _08158BFE
- .pool
-_08158BD0:
- ldrh r0, [r4, 0x1C]
- adds r0, 0x1
- strh r0, [r4, 0x1C]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0xB
- bne _08158BEA
- strh r1, [r4, 0x1C]
- ldrh r0, [r4, 0x8]
- lsls r1, r5, 24
- asrs r1, 24
- bl PlaySE12WithPanning
-_08158BEA:
- lsls r1, r6, 24
- asrs r1, 24
- lsls r0, r5, 16
- asrs r0, 16
- adds r0, r1
- lsls r0, 16
- asrs r0, 16
- bl sub_80A52EC
- strh r0, [r4, 0xC]
-_08158BFE:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_8158B98
-
- thumb_func_start sub_8158C04
-sub_8158C04: @ 8158C04
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r1, =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r4, r0, r1
- ldrh r0, [r4, 0x1C]
- adds r0, 0x1
- strh r0, [r4, 0x1C]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x6
- bne _08158C4C
- movs r0, 0
- strh r0, [r4, 0x1C]
- movs r0, 0x3F
- bl BattleAnimAdjustPanning
- adds r1, r0, 0
- ldrh r0, [r4, 0xA]
- lsls r1, 24
- asrs r1, 24
- bl PlaySE12WithPanning
- ldrh r0, [r4, 0x1E]
- adds r0, 0x1
- strh r0, [r4, 0x1E]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x2
- bne _08158C4C
- adds r0, r5, 0
- bl DestroyAnimSoundTask
-_08158C4C:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8158C04
-
- thumb_func_start sub_8158C58
-sub_8158C58: @ 8158C58
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- mov r8, r0
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldr r0, =gBattleAnimArgs
- ldrh r1, [r0]
- str r1, [sp]
- ldrb r5, [r0, 0x4]
- ldrb r6, [r0, 0x6]
- ldrb r3, [r0, 0x8]
- mov r10, r3
- ldrb r7, [r0, 0xA]
- ldrb r1, [r0, 0xC]
- mov r9, r1
- ldrb r0, [r0, 0x2]
- lsls r0, 24
- asrs r0, 24
- bl BattleAnimAdjustPanning
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- lsls r5, 24
- asrs r5, 24
- adds r0, r5, 0
- bl BattleAnimAdjustPanning
- adds r5, r0, 0
- lsls r4, 24
- asrs r4, 24
- lsls r5, 24
- asrs r5, 24
- lsls r6, 24
- asrs r6, 24
- adds r0, r4, 0
- adds r1, r5, 0
- adds r2, r6, 0
- bl CalculatePanIncrement
- ldr r2, =gTasks
- mov r3, r8
- lsls r1, r3, 2
- add r1, r8
- lsls r1, 3
- adds r1, r2
- movs r2, 0
- mov r6, sp
- ldrh r6, [r6]
- strh r6, [r1, 0x8]
- strh r4, [r1, 0xA]
- strh r5, [r1, 0xC]
- lsls r0, 24
- asrs r0, 24
- strh r0, [r1, 0xE]
- mov r0, r10
- strh r0, [r1, 0x10]
- strh r7, [r1, 0x12]
- mov r3, r9
- strh r3, [r1, 0x14]
- strh r2, [r1, 0x1C]
- strh r4, [r1, 0x1E]
- strh r3, [r1, 0x20]
- ldr r2, =sub_8158D08
- str r2, [r1]
- mov r0, r8
- bl _call_via_r2
- 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_8158C58
-
- thumb_func_start sub_8158D08
-sub_8158D08: @ 8158D08
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r1, =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r4, r0, r1
- ldrh r0, [r4, 0x20]
- adds r1, r0, 0x1
- strh r1, [r4, 0x20]
- lsls r0, 16
- asrs r0, 16
- movs r2, 0x14
- ldrsh r1, [r4, r2]
- cmp r0, r1
- bne _08158D50
- movs r0, 0
- strh r0, [r4, 0x20]
- ldrh r0, [r4, 0x8]
- movs r1, 0x1E
- ldrsb r1, [r4, r1]
- bl PlaySE12WithPanning
- ldrh r0, [r4, 0x10]
- subs r0, 0x1
- strh r0, [r4, 0x10]
- lsls r0, 16
- cmp r0, 0
- bne _08158D50
- adds r0, r5, 0
- bl DestroyAnimSoundTask
- b _08158D82
- .pool
-_08158D50:
- ldr r1, =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r4, r0, r1
- ldrh r0, [r4, 0x1C]
- adds r1, r0, 0x1
- strh r1, [r4, 0x1C]
- lsls r0, 16
- asrs r0, 16
- movs r2, 0x12
- ldrsh r1, [r4, r2]
- cmp r0, r1
- bne _08158D82
- movs r0, 0
- strh r0, [r4, 0x1C]
- ldrh r0, [r4, 0xE]
- ldrh r1, [r4, 0x1E]
- adds r0, r1
- strh r0, [r4, 0x1E]
- movs r2, 0x1E
- ldrsh r0, [r4, r2]
- bl sub_80A52EC
- strh r0, [r4, 0x1E]
-_08158D82:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8158D08
-
- thumb_func_start sub_8158D8C
-sub_8158D8C: @ 8158D8C
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- movs r4, 0
- movs r0, 0x40
- negs r0, r0
- bl BattleAnimAdjustPanning
- lsls r0, 24
- lsrs r6, r0, 24
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- beq _08158DD0
- ldr r0, =gBattleAnimArgs
- movs r1, 0
- ldrsh r0, [r0, r1]
- cmp r0, 0
- bne _08158DC8
- ldr r0, =gContestResources
- ldr r0, [r0]
- ldr r0, [r0, 0x18]
- ldrh r4, [r0]
- b _08158E76
- .pool
-_08158DC8:
- adds r0, r5, 0
- bl DestroyAnimVisualTask
- b _08158E76
-_08158DD0:
- ldr r0, =gBattleAnimArgs
- movs r2, 0
- ldrsh r1, [r0, r2]
- adds r2, r0, 0
- cmp r1, 0
- bne _08158DEC
- ldr r0, =gBattleAnimAttacker
- ldrb r4, [r0]
- b _08158E12
- .pool
-_08158DEC:
- cmp r1, 0x1
- bne _08158DFC
- ldr r0, =gBattleAnimTarget
- ldrb r4, [r0]
- b _08158E12
- .pool
-_08158DFC:
- cmp r1, 0x2
- bne _08158E08
- ldr r0, =gBattleAnimAttacker
- b _08158E0A
- .pool
-_08158E08:
- ldr r0, =gBattleAnimTarget
-_08158E0A:
- ldrb r1, [r0]
- movs r0, 0x2
- adds r4, r0, 0
- eors r4, r1
-_08158E12:
- movs r1, 0
- ldrsh r0, [r2, r1]
- cmp r0, 0x1
- beq _08158E1E
- cmp r0, 0x3
- bne _08158E38
-_08158E1E:
- adds r0, r4, 0
- bl IsBattlerSpriteVisible
- lsls r0, 24
- cmp r0, 0
- bne _08158E38
- adds r0, r5, 0
- bl DestroyAnimVisualTask
- b _08158E8C
- .pool
-_08158E38:
- adds r0, r4, 0
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _08158E5C
- ldr r1, =gBattlerPartyIndexes
- lsls r0, r4, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, =gEnemyParty
- b _08158E6A
- .pool
-_08158E5C:
- ldr r1, =gBattlerPartyIndexes
- lsls r0, r4, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, =gPlayerParty
-_08158E6A:
- adds r0, r1
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r4, r0, 16
-_08158E76:
- cmp r4, 0
- beq _08158E86
- lsls r1, r6, 24
- asrs r1, 24
- adds r0, r4, 0
- movs r2, 0x3
- bl PlayCry3
-_08158E86:
- adds r0, r5, 0
- bl DestroyAnimVisualTask
-_08158E8C:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8158D8C
-
- thumb_func_start sub_8158E9C
-sub_8158E9C: @ 8158E9C
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- movs r4, 0
- movs r0, 0x40
- negs r0, r0
- bl BattleAnimAdjustPanning
- lsls r0, 24
- lsrs r5, r0, 24
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- beq _08158EE0
- ldr r0, =gBattleAnimArgs
- movs r1, 0
- ldrsh r0, [r0, r1]
- cmp r0, 0
- bne _08158ED8
- ldr r0, =gContestResources
- ldr r0, [r0]
- ldr r0, [r0, 0x18]
- ldrh r4, [r0]
- b _08158F86
- .pool
-_08158ED8:
- adds r0, r6, 0
- bl DestroyAnimVisualTask
- b _08158F86
-_08158EE0:
- ldr r0, =gBattleAnimArgs
- movs r2, 0
- ldrsh r1, [r0, r2]
- adds r2, r0, 0
- cmp r1, 0
- bne _08158EFC
- ldr r0, =gBattleAnimAttacker
- ldrb r4, [r0]
- b _08158F22
- .pool
-_08158EFC:
- cmp r1, 0x1
- bne _08158F0C
- ldr r0, =gBattleAnimTarget
- ldrb r4, [r0]
- b _08158F22
- .pool
-_08158F0C:
- cmp r1, 0x2
- bne _08158F18
- ldr r0, =gBattleAnimAttacker
- b _08158F1A
- .pool
-_08158F18:
- ldr r0, =gBattleAnimTarget
-_08158F1A:
- ldrb r1, [r0]
- movs r0, 0x2
- adds r4, r0, 0
- eors r4, r1
-_08158F22:
- movs r1, 0
- ldrsh r0, [r2, r1]
- cmp r0, 0x1
- beq _08158F2E
- cmp r0, 0x3
- bne _08158F48
-_08158F2E:
- adds r0, r4, 0
- bl IsBattlerSpriteVisible
- lsls r0, 24
- cmp r0, 0
- bne _08158F48
- adds r0, r6, 0
- bl DestroyAnimVisualTask
- b _08158FEE
- .pool
-_08158F48:
- adds r0, r4, 0
- bl GetBattlerSide
- lsls r0, 24
- cmp r0, 0
- beq _08158F6C
- ldr r1, =gBattlerPartyIndexes
- lsls r0, r4, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, =gEnemyParty
- b _08158F7A
- .pool
-_08158F6C:
- ldr r1, =gBattlerPartyIndexes
- lsls r0, r4, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, =gPlayerParty
-_08158F7A:
- adds r0, r1
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r4, r0, 16
-_08158F86:
- ldr r1, =gTasks
- lsls r2, r6, 2
- adds r0, r2, r6
- lsls r0, 3
- adds r0, r1
- ldr r3, =gBattleAnimArgs
- ldrh r1, [r3, 0x2]
- strh r1, [r0, 0x8]
- strh r4, [r0, 0xA]
- lsls r1, r5, 24
- asrs r1, 24
- strh r1, [r0, 0xC]
- adds r5, r2, 0
- cmp r4, 0
- beq _08158FE8
- movs r2, 0x2
- ldrsh r0, [r3, r2]
- cmp r0, 0xFF
- bne _08158FC8
- adds r0, r4, 0
- movs r2, 0x9
- bl PlayCry3
- b _08158FD0
- .pool
-_08158FC8:
- adds r0, r4, 0
- movs r2, 0x7
- bl PlayCry3
-_08158FD0:
- ldr r0, =gTasks
- adds r1, r5, r6
- lsls r1, 3
- adds r1, r0
- ldr r0, =sub_8158FF4
- str r0, [r1]
- b _08158FEE
- .pool
-_08158FE8:
- adds r0, r6, 0
- bl DestroyAnimVisualTask
-_08158FEE:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_8158E9C
-
- thumb_func_start sub_8158FF4
-sub_8158FF4: @ 8158FF4
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- lsls r0, 24
- lsrs r4, r0, 24
- mov r9, r4
- ldr r1, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r1, r0, r1
- ldrh r6, [r1, 0xA]
- mov r8, r6
- ldrb r5, [r1, 0xC]
- adds r7, r5, 0
- ldrh r2, [r1, 0x1A]
- movs r3, 0x1A
- ldrsh r0, [r1, r3]
- cmp r0, 0x1
- bgt _08159028
- adds r0, r2, 0x1
- strh r0, [r1, 0x1A]
- b _0815906A
- .pool
-_08159028:
- movs r2, 0x8
- ldrsh r0, [r1, r2]
- cmp r0, 0xFF
- bne _0815904E
- bl IsCryPlaying
- lsls r0, 24
- cmp r0, 0
- bne _0815906A
- lsls r1, r5, 24
- asrs r1, 24
- adds r0, r6, 0
- movs r2, 0xA
- bl PlayCry3
- adds r0, r4, 0
- bl DestroyAnimVisualTask
- b _0815906A
-_0815904E:
- bl IsCryPlaying
- lsls r0, 24
- cmp r0, 0
- bne _0815906A
- lsls r1, r7, 24
- asrs r1, 24
- mov r0, r8
- movs r2, 0x8
- bl PlayCry3
- mov r0, r9
- bl DestroyAnimVisualTask
-_0815906A:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8158FF4
-
- thumb_func_start sub_8159078
-sub_8159078: @ 8159078
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- adds r4, r0, 0
- ldr r1, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r1, r0, r1
- ldrh r2, [r1, 0x1A]
- movs r3, 0x1A
- ldrsh r0, [r1, r3]
- cmp r0, 0x1
- bgt _081590A0
- adds r0, r2, 0x1
- strh r0, [r1, 0x1A]
- b _081590B0
- .pool
-_081590A0:
- bl IsCryPlaying
- lsls r0, 24
- cmp r0, 0
- bne _081590B0
- adds r0, r4, 0
- bl DestroyAnimVisualTask
-_081590B0:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8159078
-
- thumb_func_start sub_81590B8
-sub_81590B8: @ 81590B8
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r1, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, =gBattleAnimArgs
- ldrh r1, [r1]
- strh r1, [r0, 0x1C]
- movs r0, 0x40
- negs r0, r0
- bl BattleAnimAdjustPanning
- lsls r0, 24
- lsrs r5, r0, 24
- bl IsContest
- lsls r0, 24
- cmp r0, 0
- beq _081590F8
- ldr r0, =gContestResources
- ldr r0, [r0]
- ldr r0, [r0, 0x18]
- b _08159102
- .pool
-_081590F8:
- ldr r1, =gAnimSpeciesByBanks
- ldr r0, =gBattleAnimAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
-_08159102:
- ldrh r2, [r0]
- ldr r0, =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- strh r2, [r1, 0xA]
- lsls r0, r5, 24
- asrs r0, 24
- strh r0, [r1, 0xC]
- cmp r2, 0
- beq _08159130
- ldr r0, =sub_815913C
- str r0, [r1]
- b _08159136
- .pool
-_08159130:
- adds r0, r4, 0
- bl DestroyAnimVisualTask
-_08159136:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_81590B8
-
- thumb_func_start sub_815913C
-sub_815913C: @ 815913C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r1, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldrh r6, [r0, 0xA]
- mov r8, r6
- ldrb r3, [r0, 0xC]
- adds r5, r3, 0
- movs r7, 0x1A
- ldrsh r2, [r0, r7]
- mov r12, r1
- cmp r2, 0x5
- bhi _081591DC
- lsls r0, r2, 2
- ldr r1, =_08159174
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_08159174:
- .4byte _081591C2
- .4byte _081591A8
- .4byte _0815918C
- .4byte _081591A8
- .4byte _081591A8
- .4byte _081591B8
-_0815918C:
- lsls r1, r5, 24
- asrs r1, 24
- mov r0, r8
- movs r2, 0x4
- bl PlayCry6
- ldr r1, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- b _081591B0
- .pool
-_081591A8:
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- add r0, r12
-_081591B0:
- ldrh r1, [r0, 0x1A]
- adds r1, 0x1
- strh r1, [r0, 0x1A]
- b _08159204
-_081591B8:
- bl IsCryPlaying
- lsls r0, 24
- cmp r0, 0
- bne _08159204
-_081591C2:
- bl StopCryAndClearCrySongs
- ldr r0, =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x1A]
- adds r0, 0x1
- strh r0, [r1, 0x1A]
- b _08159204
- .pool
-_081591DC:
- movs r1, 0x1C
- ldrsh r0, [r0, r1]
- cmp r0, 0
- bne _081591F2
- lsls r1, r3, 24
- asrs r1, 24
- adds r0, r6, 0
- movs r2, 0x6
- bl PlayCry6
- b _081591FE
-_081591F2:
- lsls r1, r5, 24
- asrs r1, 24
- mov r0, r8
- movs r2, 0x6
- bl PlayCry3
-_081591FE:
- adds r0, r4, 0
- bl DestroyAnimVisualTask
-_08159204:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_815913C
-
- thumb_func_start sub_8159210
-sub_8159210: @ 8159210
- push {r4,r5,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, =gBattleAnimArgs
- ldrh r5, [r0]
- ldrb r0, [r0, 0x2]
- lsls r0, 24
- asrs r0, 24
- bl BattleAnimAdjustPanning
- adds r1, r0, 0
- lsls r1, 24
- asrs r1, 24
- adds r0, r5, 0
- bl PlaySE1WithPanning
- adds r0, r4, 0
- bl DestroyAnimVisualTask
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8159210
-
- thumb_func_start sub_8159244
-sub_8159244: @ 8159244
- push {r4,r5,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, =gBattleAnimArgs
- ldrh r5, [r0]
- ldrb r0, [r0, 0x2]
- lsls r0, 24
- asrs r0, 24
- bl BattleAnimAdjustPanning
- adds r1, r0, 0
- lsls r1, 24
- asrs r1, 24
- adds r0, r5, 0
- bl PlaySE2WithPanning
- adds r0, r4, 0
- bl DestroyAnimVisualTask
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8159244
-
- thumb_func_start sub_8159278
-sub_8159278: @ 8159278
- push {r4-r6,lr}
- mov r6, r9
- mov r5, r8
- push {r5,r6}
- mov r8, r0
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldr r0, =gBattleAnimArgs
- ldrb r5, [r0, 0x2]
- ldrb r6, [r0, 0x4]
- ldrh r1, [r0, 0x6]
- mov r9, r1
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- bl BattleAnimAdjustPanning
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- lsls r5, 24
- asrs r5, 24
- adds r0, r5, 0
- bl BattleAnimAdjustPanning
- adds r5, r0, 0
- lsls r4, 24
- asrs r4, 24
- lsls r5, 24
- asrs r5, 24
- lsls r6, 24
- asrs r6, 24
- adds r0, r4, 0
- adds r1, r5, 0
- adds r2, r6, 0
- bl CalculatePanIncrement
- ldr r2, =gTasks
- mov r3, r8
- lsls r1, r3, 2
- add r1, r8
- lsls r1, 3
- adds r1, r2
- movs r2, 0
- strh r4, [r1, 0xA]
- strh r5, [r1, 0xC]
- lsls r0, 24
- asrs r0, 24
- strh r0, [r1, 0xE]
- mov r0, r9
- strh r0, [r1, 0x12]
- strh r2, [r1, 0x1C]
- strh r4, [r1, 0x1E]
- ldr r2, =sub_8159308
- str r2, [r1]
- mov r0, r8
- bl _call_via_r2
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8159278
-
- thumb_func_start sub_8159308
-sub_8159308: @ 8159308
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- adds r5, r0, 0
- ldr r1, =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r4, r0, r1
- ldrh r2, [r4, 0xE]
- ldrh r0, [r4, 0x1C]
- adds r1, r0, 0x1
- strh r1, [r4, 0x1C]
- lsls r0, 16
- asrs r0, 16
- movs r3, 0x12
- ldrsh r1, [r4, r3]
- cmp r0, r1
- bne _08159342
- movs r0, 0
- strh r0, [r4, 0x1C]
- ldrh r1, [r4, 0x1E]
- adds r0, r2, r1
- strh r0, [r4, 0x1E]
- movs r2, 0x1E
- ldrsh r0, [r4, r2]
- bl sub_80A52EC
- strh r0, [r4, 0x1E]
-_08159342:
- ldr r1, =gUnknown_02038440
- ldrh r0, [r4, 0x1E]
- strb r0, [r1]
- movs r3, 0x1E
- ldrsh r1, [r4, r3]
- movs r2, 0xC
- ldrsh r0, [r4, r2]
- cmp r1, r0
- bne _0815935A
- adds r0, r5, 0
- bl DestroyAnimVisualTask
-_0815935A:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8159308
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/battle_frontier_1.s b/asm/battle_frontier_1.s
index 38e0e4b0a..729140801 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
@@ -3326,7 +3326,7 @@ _0819064A:
adds r6, 0x1
cmp r6, 0xF
ble _0819064A
- bl sub_80D2F04
+ bl LoadMonIconPalettes
ldr r0, =sub_8190CD4
movs r1, 0
bl CreateTask
@@ -3695,7 +3695,7 @@ sub_8190938: @ 8190938
cmp r0, 0
bne _0819094A
adds r0, r1, 0
- bl sub_80D30DC
+ bl UpdateMonIconFrame
_0819094A:
pop {r0}
bx r0
@@ -3710,7 +3710,7 @@ sub_8190950: @ 8190950
cmp r0, 0
bne _08190962
adds r0, r4, 0
- bl sub_80D30DC
+ bl UpdateMonIconFrame
_08190962:
ldrh r0, [r4, 0x22]
adds r1, r0, 0x4
@@ -3774,7 +3774,7 @@ sub_81909CC: @ 81909CC
cmp r0, 0
bne _081909DE
adds r0, r4, 0
- bl sub_80D30DC
+ bl UpdateMonIconFrame
_081909DE:
ldrh r0, [r4, 0x22]
subs r1, r0, 0x4
@@ -3838,7 +3838,7 @@ sub_8190A48: @ 8190A48
cmp r0, 0
bne _08190A5A
adds r0, r4, 0
- bl sub_80D30DC
+ bl UpdateMonIconFrame
_08190A5A:
ldrh r0, [r4, 0x20]
adds r1, r0, 0x4
@@ -3902,7 +3902,7 @@ sub_8190AC4: @ 8190AC4
cmp r0, 0
bne _08190AD6
adds r0, r4, 0
- bl sub_80D30DC
+ bl UpdateMonIconFrame
_08190AD6:
ldrh r0, [r4, 0x20]
subs r1, r0, 0x4
@@ -6471,7 +6471,7 @@ _0819218E:
adds r6, 0x1
cmp r6, 0xF
ble _08192158
- bl sub_80D2F9C
+ bl FreeMonIconPalettes
ldr r4, =gUnknown_0203CD78
ldr r0, [r4]
bl Free
@@ -6481,7 +6481,7 @@ _0819218E:
mov r0, r9
cmp r0, 0
bne _081921C4
- ldr r0, =c2_exit_to_overworld_1_continue_scripts_restart_music
+ ldr r0, =CB2_ReturnToFieldContinueScript
bl SetMainCallback2
b _081921FC
.pool
@@ -9539,7 +9539,7 @@ _08193B84:
ldr r0, [r4]
bl Free
str r6, [r4]
- ldr r0, =c2_exit_to_overworld_1_continue_scripts_restart_music
+ ldr r0, =CB2_ReturnToFieldContinueScript
bl SetMainCallback2
ldr r1, =gTasks
lsls r0, r5, 2
@@ -11320,7 +11320,7 @@ _08194B24:
ands r0, r1
cmp r0, 0
bne _08194B3C
- ldr r0, =c2_exit_to_overworld_1_continue_scripts_restart_music
+ ldr r0, =CB2_ReturnToFieldContinueScript
bl SetMainCallback2
adds r0, r4, 0
bl DestroyTask
@@ -14665,7 +14665,7 @@ sub_819672C: @ 819672C
ldrh r2, [r0, 0xA]
ldrh r1, [r0, 0xC]
adds r0, r2, 0
- bl get_mapheader_by_bank_and_number
+ bl Overworld_GetMapHeaderByGroupAndId
ldrb r0, [r0, 0x14]
pop {r1}
bx r1
@@ -15923,11 +15923,11 @@ sub_8197080: @ 8197080
b _0819715C
_081970A2:
movs r0, 0
- bl sub_80C0844
+ bl GetHoennPokedexCount
lsls r0, 16
lsrs r4, r0, 16
movs r0, 0x1
- bl sub_80C0844
+ bl GetHoennPokedexCount
lsls r0, 16
lsrs r6, r0, 16
ldr r0, =gStringVar1
@@ -15977,11 +15977,11 @@ _081970A2:
strb r6, [r5]
adds r5, 0x1
movs r0, 0
- bl pokedex_count
+ bl GetNationalPokedexCount
lsls r0, 16
lsrs r4, r0, 16
movs r0, 0x1
- bl pokedex_count
+ bl GetNationalPokedexCount
lsls r0, 16
lsrs r6, r0, 16
mov r0, r10
diff --git a/asm/battle_frontier_2.s b/asm/battle_frontier_2.s
index 67f44a0b6..7f2dbcc73 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]
@@ -12985,7 +12985,7 @@ _081A10F4:
adds r1, r0
adds r1, 0xBA
ldrh r0, [r1]
- bl ItemId_GetItem
+ bl ItemId_GetName
adds r1, r0, 0
b _081A1174
.pool
@@ -14344,7 +14344,7 @@ sub_81A1C4C: @ 81A1C4C
adds r3, r0, 0
lsls r0, r5, 3
adds r5, r0, 0x1
- ldr r0, =gResultsWindowId
+ ldr r0, =gRecordsWindowId
ldrb r0, [r0]
lsls r3, 24
lsrs r3, 24
@@ -14370,7 +14370,7 @@ sub_81A1C90: @ 81A1C90
push {r4,lr}
sub sp, 0x34
adds r2, r0, 0
- ldr r3, =gResultsWindowId
+ ldr r3, =gRecordsWindowId
movs r1, 0xAE
mov r0, sp
adds r0, 0x2F
@@ -14425,7 +14425,7 @@ sub_81A1CD8: @ 81A1CD8
lsls r0, 24
lsrs r0, 24
adds r7, r0, 0
- ldr r0, =gResultsWindowId
+ ldr r0, =gRecordsWindowId
mov r10, r0
ldrb r0, [r0]
str r7, [sp]
@@ -14644,7 +14644,7 @@ sub_81A1EA8: @ 81A1EA8
sub sp, 0xC
lsls r0, 24
lsrs r7, r0, 24
- ldr r4, =gResultsWindowId
+ ldr r4, =gRecordsWindowId
ldr r0, =gUnknown_08611C74
bl AddWindow
strb r0, [r4]
@@ -14685,7 +14685,7 @@ _081A1F28:
ldr r0, =gStringVar4
movs r1, 0x2
bl sub_81A1C4C
- ldr r6, =gResultsWindowId
+ ldr r6, =gRecordsWindowId
ldrb r0, [r6]
ldr r2, =gText_Lv502
movs r1, 0x31
@@ -14798,7 +14798,7 @@ sub_81A2008: @ 81A2008
lsrs r6, 24
lsls r5, 24
lsrs r5, 24
- ldr r0, =gResultsWindowId
+ ldr r0, =gRecordsWindowId
mov r10, r0
ldrb r0, [r0]
str r5, [sp]
@@ -14932,7 +14932,7 @@ sub_81A2134: @ 81A2134
sub sp, 0xC
lsls r0, 24
lsrs r7, r0, 24
- ldr r4, =gResultsWindowId
+ ldr r4, =gRecordsWindowId
ldr r0, =gUnknown_08611C74
bl AddWindow
strb r0, [r4]
@@ -14957,7 +14957,7 @@ _081A2184:
ldr r0, =gStringVar4
movs r1, 0
bl sub_81A1C4C
- ldr r1, =gResultsWindowId
+ ldr r1, =gRecordsWindowId
ldrb r0, [r1]
ldr r2, =gText_Lv502
movs r6, 0x21
@@ -14969,7 +14969,7 @@ _081A2184:
movs r1, 0x1
movs r3, 0x8
bl PrintTextOnWindow
- ldr r1, =gResultsWindowId
+ ldr r1, =gRecordsWindowId
ldrb r0, [r1]
ldr r2, =gText_OpenLv
movs r1, 0x61
@@ -15052,10 +15052,10 @@ _081A2184:
mov r1, r8
movs r3, 0x40
bl sub_81A2008
- ldr r1, =gResultsWindowId
+ ldr r1, =gRecordsWindowId
ldrb r0, [r1]
bl PutWindowTilemap
- ldr r1, =gResultsWindowId
+ ldr r1, =gRecordsWindowId
ldrb r0, [r1]
movs r1, 0x3
bl CopyWindowToVram
@@ -15091,7 +15091,7 @@ sub_81A22B8: @ 81A22B8
lsls r0, 24
lsrs r0, 24
adds r7, r0, 0
- ldr r0, =gResultsWindowId
+ ldr r0, =gRecordsWindowId
mov r10, r0
ldrb r0, [r0]
str r7, [sp]
@@ -15285,7 +15285,7 @@ sub_81A2460: @ 81A2460
sub sp, 0xC
lsls r0, 24
lsrs r7, r0, 24
- ldr r4, =gResultsWindowId
+ ldr r4, =gRecordsWindowId
ldr r0, =gUnknown_08611C74
bl AddWindow
strb r0, [r4]
@@ -15310,7 +15310,7 @@ _081A24B0:
ldr r0, =gStringVar4
movs r1, 0x2
bl sub_81A1C4C
- ldr r6, =gResultsWindowId
+ ldr r6, =gRecordsWindowId
ldrb r0, [r6]
ldr r2, =gText_Lv502
movs r1, 0x31
@@ -15420,7 +15420,7 @@ sub_81A258C: @ 81A258C
lsrs r6, 24
lsls r5, 24
lsrs r5, 24
- ldr r0, =gResultsWindowId
+ ldr r0, =gRecordsWindowId
mov r10, r0
ldrb r0, [r0]
str r5, [sp]
@@ -15533,7 +15533,7 @@ sub_81A2698: @ 81A2698
mov r5, r8
push {r5-r7}
sub sp, 0xC
- ldr r6, =gResultsWindowId
+ ldr r6, =gRecordsWindowId
ldr r0, =gUnknown_08611C74
bl AddWindow
strb r0, [r6]
@@ -15672,7 +15672,7 @@ sub_81A27E8: @ 81A27E8
lsls r0, 24
lsrs r0, 24
adds r7, r0, 0
- ldr r0, =gResultsWindowId
+ ldr r0, =gRecordsWindowId
mov r10, r0
ldrb r0, [r0]
str r7, [sp]
@@ -15836,7 +15836,7 @@ _081A2956:
sub_81A2968: @ 81A2968
push {r4-r6,lr}
sub sp, 0xC
- ldr r5, =gResultsWindowId
+ ldr r5, =gRecordsWindowId
ldr r0, =gUnknown_08611C74
bl AddWindow
strb r0, [r5]
@@ -15935,7 +15935,7 @@ sub_81A2A28: @ 81A2A28
lsls r0, 24
lsrs r0, 24
adds r6, r0, 0
- ldr r0, =gResultsWindowId
+ ldr r0, =gRecordsWindowId
mov r10, r0
ldrb r0, [r0]
str r6, [sp]
@@ -16211,7 +16211,7 @@ sub_81A2C94: @ 81A2C94
sub sp, 0xC
lsls r0, 24
lsrs r7, r0, 24
- ldr r4, =gResultsWindowId
+ ldr r4, =gRecordsWindowId
ldr r0, =gUnknown_08611C74
bl AddWindow
strb r0, [r4]
@@ -16236,7 +16236,7 @@ _081A2CE0:
ldr r0, =gStringVar4
movs r1, 0
bl sub_81A1C4C
- ldr r0, =gResultsWindowId
+ ldr r0, =gRecordsWindowId
mov r8, r0
ldrb r0, [r0]
ldr r2, =gText_Lv502
@@ -16340,7 +16340,7 @@ sub_81A2DB4: @ 81A2DB4
lsls r0, 24
lsrs r0, 24
adds r7, r0, 0
- ldr r0, =gResultsWindowId
+ ldr r0, =gRecordsWindowId
mov r10, r0
ldrb r0, [r0]
str r7, [sp]
@@ -16506,7 +16506,7 @@ _081A2F26:
sub_81A2F38: @ 81A2F38
push {r4-r6,lr}
sub sp, 0xC
- ldr r5, =gResultsWindowId
+ ldr r5, =gRecordsWindowId
ldr r0, =gUnknown_08611C74
bl AddWindow
strb r0, [r5]
@@ -16584,7 +16584,7 @@ sub_81A2FF8: @ 81A2FF8
mov r6, r8
push {r6,r7}
sub sp, 0xC
- ldr r4, =gResultsWindowId
+ ldr r4, =gRecordsWindowId
ldr r0, =gUnknown_08611C7C
bl AddWindow
strb r0, [r4]
@@ -16750,7 +16750,7 @@ _081A315C:
movs r2, 0x1
movs r3, 0x4
bl ConvertIntToDecimalStringN
- ldr r6, =gResultsWindowId
+ ldr r6, =gRecordsWindowId
ldrb r0, [r6]
movs r1, 0x26
adds r3, r5, 0
@@ -18683,7 +18683,7 @@ _081A4294:
adds r0, r3, r4
ldrh r1, [r0]
movs r0, 0x20
- bl sav12_xor_set
+ bl SetGameStat
ldr r1, [r7]
adds r0, r1, r6
adds r0, r4
@@ -19026,7 +19026,7 @@ sub_81A4594: @ 81A4594
sub sp, 0x2C
mov r8, r1
adds r6, r3, 0
- ldr r1, =gResultsWindowId
+ ldr r1, =gRecordsWindowId
ldrb r5, [r1]
lsls r4, r0, 1
adds r4, r0
@@ -19062,7 +19062,7 @@ sub_81A4594: @ 81A4594
ldrb r2, [r6, 0xE]
add r0, sp, 0xC
bl TVShowConvertInternationalString
- ldr r1, =gResultsWindowId
+ ldr r1, =gRecordsWindowId
ldrb r0, [r1]
mov r3, r8
adds r3, 0x2
@@ -19102,7 +19102,7 @@ _081A4618:
adds r3, r0, 0
lsls r3, 24
lsrs r3, 24
- ldr r1, =gResultsWindowId
+ ldr r1, =gRecordsWindowId
ldrb r0, [r1]
str r7, [sp]
mov r1, r10
@@ -19136,7 +19136,7 @@ sub_81A4684: @ 81A4684
adds r7, r1, 0
mov r10, r2
adds r5, r3, 0
- ldr r1, =gResultsWindowId
+ ldr r1, =gRecordsWindowId
ldrb r0, [r1]
lsls r2, r6, 1
adds r2, r6
@@ -19176,7 +19176,7 @@ sub_81A4684: @ 81A4684
ldrb r2, [r5, 0x1A]
add r0, sp, 0xC
bl TVShowConvertInternationalString
- ldr r1, =gResultsWindowId
+ ldr r1, =gRecordsWindowId
ldrb r0, [r1]
adds r3, r7, 0x2
lsls r3, 27
@@ -19211,7 +19211,7 @@ _081A4734:
adds r1, r4, 0
bl StringCopy
_081A473C:
- ldr r2, =gResultsWindowId
+ ldr r2, =gRecordsWindowId
mov r9, r2
ldrb r0, [r2]
adds r3, r7, 0x4
@@ -19532,7 +19532,7 @@ sub_81A4998: @ 81A4998
ldr r1, [r5]
adds r0, r6, 0
bl StringExpandPlaceholders
- ldr r0, =gResultsWindowId
+ ldr r0, =gRecordsWindowId
mov r8, r0
ldrb r0, [r0]
movs r1, 0x1
@@ -19631,7 +19631,7 @@ _081A4A90:
thumb_func_start sub_81A4AA0
sub_81A4AA0: @ 81A4AA0
push {r4,lr}
- ldr r4, =gResultsWindowId
+ ldr r4, =gRecordsWindowId
ldr r0, =gUnknown_08611C84
bl AddWindow
strb r0, [r4]
@@ -19659,7 +19659,7 @@ sub_81A4AA0: @ 81A4AA0
thumb_func_start sub_81A4AE8
sub_81A4AE8: @ 81A4AE8
push {r4,lr}
- ldr r4, =gResultsWindowId
+ ldr r4, =gRecordsWindowId
ldrb r0, [r4]
movs r1, 0x11
bl FillWindowPixelBuffer
@@ -19841,7 +19841,7 @@ _081A4C4E:
ble _081A4C4E
ldr r4, =gPlayerPartyCount
ldrb r5, [r4]
- bl copy_player_party_from_sav1
+ bl LoadPlayerParty
bl sub_8076D5C
movs r0, 0x1
bl TrySavingData
@@ -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]
@@ -29770,7 +29770,7 @@ sub_81A9E90: @ 81A9E90
ldr r0, =0x0000400e
movs r1, 0
bl VarSet
- bl copy_player_party_from_sav1
+ bl LoadPlayerParty
_081A9EB8:
pop {r0}
bx r0
@@ -31002,7 +31002,7 @@ sub_81AA810: @ 81AA810
ldrb r1, [r3]
adds r1, 0x2C
movs r0, 0x19
- bl get_mapheader_by_bank_and_number
+ bl Overworld_GetMapHeaderByGroupAndId
adds r5, r0, 0
movs r7, 0
ldr r1, [r5, 0x4]
diff --git a/asm/battle_link_817C95C.s b/asm/battle_link_817C95C.s
deleted file mode 100644
index 55d0bae39..000000000
--- a/asm/battle_link_817C95C.s
+++ /dev/null
@@ -1,4891 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_817C95C
-sub_817C95C: @ 817C95C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x10
- lsls r0, 16
- lsrs r0, 16
- str r0, [sp]
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x2
- ands r0, r1
- cmp r0, 0
- bne _0817C988
- ldr r0, [sp]
- cmp r0, 0x1B
- beq _0817C988
- cmp r0, 0xDD
- beq _0817C988
- bl _0817E0A6
-_0817C988:
- ldr r0, =gBattleStruct
- ldr r0, [r0]
- movs r1, 0x81
- lsls r1, 2
- adds r7, r0, r1
- ldr r5, =gBattlerAttacker
- ldrb r0, [r5]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, =gBattlerTarget
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r0, =gEffectBattler
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- ldr r0, =gStringInfo
- ldr r0, [r0]
- ldrb r0, [r0, 0x7]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0x4]
- cmp r4, 0
- bne _0817CA00
- ldr r2, =gBattlerPartyIndexes
- ldrb r0, [r5]
- lsls r0, 1
- adds r0, r2
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, =gPlayerParty
- b _0817CA10
- .pool
-_0817CA00:
- ldr r2, =gBattlerPartyIndexes
- ldrb r0, [r5]
- lsls r0, 1
- adds r0, r2
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, =gEnemyParty
-_0817CA10:
- adds r1, r0
- str r1, [sp, 0x8]
- cmp r6, 0
- bne _0817CA3C
- ldr r0, =gBattlerTarget
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r2
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, =gPlayerParty
- b _0817CA4C
- .pool
-_0817CA3C:
- ldr r0, =gBattlerTarget
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r2
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, =gEnemyParty
-_0817CA4C:
- adds r1, r0
- str r1, [sp, 0xC]
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- ldr r1, =gStringInfo
- ldr r1, [r1]
- ldrh r1, [r1]
- bl GetBattlerMoveSlotId
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
- cmp r0, 0x3
- bls _0817CA9C
- ldr r0, [sp]
- bl sub_817E0B8
- lsls r0, 24
- cmp r0, 0
- beq _0817CA9C
- ldr r2, [sp]
- cmp r2, 0xC
- bls _0817CA9C
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r0, r7, r0
- adds r0, 0x57
- ldrb r1, [r0]
- movs r2, 0x1E
- bl _0817E0A2
- .pool
-_0817CA9C:
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- bl GetBattlerPosition
- lsls r0, 24
- lsrs r0, 25
- mov r8, r0
- ldr r0, =gBattlerTarget
- ldrb r0, [r0]
- bl GetBattlerPosition
- lsls r0, 24
- lsrs r5, r0, 25
- ldr r0, =gEffectBattler
- ldrb r0, [r0]
- bl GetBattlerPosition
- lsls r0, 24
- lsrs r3, r0, 25
- ldr r1, [sp]
- subs r1, 0x2
- movs r0, 0xB0
- lsls r0, 1
- cmp r1, r0
- bls _0817CAD2
- bl _0817E0A6
-_0817CAD2:
- lsls r0, r1, 2
- ldr r1, =_0817CAEC
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_0817CAEC:
- .4byte _0817DD7A
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817D070
- .4byte _0817DD74
- .4byte _0817DD80
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817DA68
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817D7D8
- .4byte _0817E0A6
- .4byte _0817D8A4
- .4byte _0817E0A6
- .4byte _0817D838
- .4byte _0817E0A6
- .4byte _0817D704
- .4byte _0817E0A6
- .4byte _0817D76C
- .4byte _0817DB24
- .4byte _0817E0A6
- .4byte _0817DB90
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817D9C2
- .4byte _0817E0A6
- .4byte _0817DA24
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817DBD4
- .4byte _0817E0A6
- .4byte _0817D94C
- .4byte _0817E0A6
- .4byte _0817D994
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E040
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817DE10
- .4byte _0817DDC8
- .4byte _0817DEDC
- .4byte _0817DF24
- .4byte _0817DF4E
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817D65E
- .4byte _0817D65E
- .4byte _0817D65E
- .4byte _0817D65E
- .4byte _0817D698
- .4byte _0817E0A6
- .4byte _0817E08E
- .4byte _0817DF70
- .4byte _0817DFBC
- .4byte _0817E0A6
- .4byte _0817E08E
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817D53C
- .4byte _0817E0A6
- .4byte _0817D584
- .4byte _0817DACC
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817D3A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817D296
- .4byte _0817D2E4
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817D5CE
- .4byte _0817D608
- .4byte _0817D498
- .4byte _0817D4E0
- .4byte _0817DC62
- .4byte _0817DC98
- .4byte _0817E0A6
- .4byte _0817D1B8
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817DCDC
- .4byte _0817E0A6
- .4byte _0817D0DC
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817D1E0
- .4byte _0817D314
- .4byte _0817D354
- .4byte _0817D372
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817D216
- .4byte _0817D260
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817D3C0
- .4byte _0817D3F2
- .4byte _0817D440
- .4byte _0817D45C
- .4byte _0817D3B8
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817D098
- .4byte _0817D0D4
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817DC20
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817D16C
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817DD38
- .4byte _0817DCFC
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817D65E
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817D124
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817E0A6
- .4byte _0817DE58
- .4byte _0817DDC8
- .4byte _0817DE10
- .4byte _0817DFE6
-_0817D070:
- movs r0, 0x1
- mov r1, r10
- movs r2, 0x2
- movs r3, 0
- bl sub_817E684
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0817D08C
- bl _0817E0A6
-_0817D08C:
- bl sub_817EECC
- bl _0817E0A6
- .pool
-_0817D098:
- movs r0, 0x1
- mov r1, r10
- movs r2, 0x1
- movs r3, 0
- bl sub_817E684
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0817D0B4
- bl _0817E0A6
-_0817D0B4:
- ldr r0, [sp, 0xC]
- movs r1, 0x39
- movs r2, 0
- bl GetMonData
- cmp r0, 0
- bne _0817D0C6
- bl _0817E0A6
-_0817D0C6:
- bl sub_817EECC
- bl _0817E0A6
- .pool
-_0817D0D4:
- movs r0, 0x1
- mov r1, r10
- movs r2, 0
- b _0817D48E
-_0817D0DC:
- lsls r3, r4, 1
- adds r3, r4
- lsls r3, 2
- adds r3, r7, r3
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r0, [r0]
- adds r0, 0x1
- movs r1, 0x7
- ands r0, r1
- lsls r0, 15
- ldr r1, [r3, 0x50]
- ldr r2, =0xfffc7fff
- ands r1, r2
- orrs r1, r0
- str r1, [r3, 0x50]
- adds r3, 0x55
- movs r0, 0x3
- mov r1, r10
- ands r1, r0
- lsls r1, 2
- ldrb r2, [r3]
- movs r0, 0xD
- negs r0, r0
- bl _0817DC0C
- .pool
-_0817D124:
- lsls r2, r4, 1
- adds r2, r4
- lsls r2, 2
- adds r2, r7, r2
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- adds r1, 0x1
- adds r4, r2, 0
- adds r4, 0x52
- movs r0, 0x7
- ands r1, r0
- lsls r1, 2
- ldrb r3, [r4]
- movs r0, 0x1D
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r4]
- adds r2, 0x55
- movs r0, 0x3
- mov r1, r10
- ands r1, r0
- lsls r1, 4
- ldrb r3, [r2]
- movs r0, 0x31
- negs r0, r0
- bl _0817DFAA
- .pool
-_0817D16C:
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r5, r7, r0
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- adds r1, 0x1
- adds r3, r5, 0
- adds r3, 0x52
- lsls r1, 5
- ldrb r2, [r3]
- movs r0, 0x1F
- ands r0, r2
- orrs r0, r1
- strb r0, [r3]
- adds r4, r5, 0
- adds r4, 0x55
- mov r0, r10
- lsls r2, r0, 6
- ldrb r1, [r4]
- movs r0, 0x3F
- ands r0, r1
- orrs r0, r2
- strb r0, [r4]
- adds r2, r5, 0
- adds r2, 0x58
- ldrb r0, [r2]
- movs r1, 0x40
- bl _0817DFAC
- .pool
-_0817D1B8:
- ldr r1, =gBattleTextBuff1 + 4
- ldrb r0, [r1]
- cmp r0, 0
- beq _0817D1C4
- bl _0817E0A6
-_0817D1C4:
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r0, r7, r0
- adds r0, 0x57
- ldrb r2, [r0]
- movs r1, 0x1F
- negs r1, r1
- ands r1, r2
- movs r2, 0x14
- bl _0817E0A2
- .pool
-_0817D1E0:
- lsls r0, r6, 1
- adds r0, r6
- lsls r0, 2
- adds r3, r7, r0
- adds r0, r3, 0
- adds r0, 0x53
- ldrb r0, [r0]
- lsls r0, 29
- lsrs r0, 29
- cmp r0, 0
- bne _0817D1FA
- bl _0817E0A6
-_0817D1FA:
- adds r2, r6, 0
- subs r1, r0, 0x1
- lsls r1, 2
- adds r0, r3, 0
- adds r0, 0x56
- ldrb r3, [r0]
- lsls r3, 30
- lsrs r3, 30
- adds r3, r1
- lsls r3, 24
- lsrs r3, 24
- movs r0, 0x2
- bl _0817DB10
-_0817D216:
- lsls r2, r4, 1
- adds r2, r4
- lsls r2, 2
- adds r2, r7, r2
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- adds r1, 0x1
- adds r4, r2, 0
- adds r4, 0x53
- movs r0, 0x7
- ands r1, r0
- lsls r1, 3
- ldrb r3, [r4]
- movs r0, 0x39
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r4]
- adds r2, 0x56
- movs r0, 0x3
- mov r1, r10
- ands r1, r0
- lsls r1, 2
- ldrb r3, [r2]
- movs r0, 0xD
- negs r0, r0
- bl _0817DFAA
- .pool
-_0817D260:
- lsls r0, r6, 1
- adds r0, r6
- lsls r0, 2
- adds r3, r7, r0
- adds r0, r3, 0
- adds r0, 0x53
- ldrb r0, [r0]
- lsls r0, 26
- lsrs r0, 29
- cmp r0, 0
- bne _0817D27A
- bl _0817E0A6
-_0817D27A:
- adds r2, r6, 0
- subs r1, r0, 0x1
- lsls r1, 2
- adds r0, r3, 0
- adds r0, 0x56
- ldrb r3, [r0]
- lsls r3, 28
- lsrs r3, 30
- adds r3, r1
- lsls r3, 24
- lsrs r3, 24
- movs r0, 0x2
- bl _0817DBC2
-_0817D296:
- lsls r2, r4, 1
- adds r2, r4
- lsls r2, 2
- adds r2, r7, r2
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- adds r1, 0x1
- adds r2, 0x56
- movs r0, 0x7
- ands r1, r0
- lsls r1, 4
- ldrb r3, [r2]
- movs r0, 0x71
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2]
- movs r0, 0x3
- mov r1, r10
- ands r1, r0
- lsls r1, 7
- ldrh r3, [r2]
- ldr r0, =0xfffffe7f
- ands r0, r3
- orrs r0, r1
- strh r0, [r2]
- bl _0817E0A6
- .pool
-_0817D2E4:
- lsls r0, r6, 1
- adds r0, r6
- lsls r0, 2
- adds r0, r7, r0
- adds r0, 0x56
- ldrb r0, [r0]
- lsls r0, 25
- lsrs r0, 29
- cmp r0, 0
- bne _0817D2FC
- bl _0817E0A6
-_0817D2FC:
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r0, r7, r0
- adds r0, 0x57
- ldrb r2, [r0]
- movs r1, 0x1F
- negs r1, r1
- ands r1, r2
- movs r2, 0x16
- bl _0817E0A2
-_0817D314:
- mov r2, r8
- lsls r3, r2, 3
- lsls r0, r4, 4
- adds r3, r0
- adds r3, r7, r3
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- adds r1, 0x1
- adds r3, 0x35
- movs r0, 0x7
- ands r1, r0
- ldrb r2, [r3]
- movs r0, 0x8
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- movs r2, 0x3
- mov r1, r10
- ands r1, r2
- lsls r1, 3
- movs r2, 0x19
- negs r2, r2
- bl _0817DC0C
- .pool
-_0817D354:
- mov r1, r8
- lsls r0, r1, 3
- lsls r1, r4, 4
- adds r0, r1
- adds r0, r7, r0
- adds r0, 0x35
- ldrb r1, [r0]
- lsls r0, r1, 29
- lsrs r0, 29
- cmp r0, 0
- bne _0817D36E
- bl _0817E0A6
-_0817D36E:
- adds r2, r4, 0
- b _0817D38C
-_0817D372:
- lsls r0, r5, 3
- lsls r1, r6, 4
- adds r0, r1
- adds r0, r7, r0
- adds r0, 0x35
- ldrb r1, [r0]
- lsls r0, r1, 29
- lsrs r0, 29
- cmp r0, 0
- bne _0817D38A
- bl _0817E0A6
-_0817D38A:
- adds r2, r6, 0
-_0817D38C:
- subs r0, 0x1
- lsls r0, 2
- lsls r3, r1, 27
- lsrs r3, 30
- adds r3, r0
- lsls r3, 24
- lsrs r3, 24
- movs r0, 0x2
- movs r1, 0x6
- bl sub_817E684
- bl _0817E0A6
-_0817D3A6:
- ldr r0, =gBattleStruct
- ldr r0, [r0]
- adds r0, 0xB3
- movs r1, 0x1
- bl _0817E0A4
- .pool
-_0817D3B8:
- movs r0, 0x12
- mov r1, r10
- movs r2, 0
- b _0817D48E
-_0817D3C0:
- ldr r0, =gBattleTextBuff1
- ldrb r2, [r0, 0x2]
- cmp r2, 0
- bne _0817D3CC
- bl _0817E0A6
-_0817D3CC:
- ldr r1, =gBattleTextBuff2 + 2
- ldrh r0, [r1]
- cmp r0, 0xD1
- bne _0817D3E8
- subs r2, 0x1
- lsls r2, 24
- lsrs r2, 24
- movs r0, 0x17
- b _0817D48C
- .pool
-_0817D3E8:
- subs r2, 0x1
- lsls r2, 24
- lsrs r2, 24
- movs r0, 0x16
- b _0817D48C
-_0817D3F2:
- ldr r0, =gBattleTextBuff1
- ldrb r2, [r0, 0x2]
- cmp r2, 0
- bne _0817D3FE
- bl _0817E0A6
-_0817D3FE:
- ldr r0, =gBattlerAttacker
- ldr r1, =gBattlerTarget
- ldrb r0, [r0]
- ldrb r1, [r1]
- cmp r0, r1
- bne _0817D436
- ldr r1, =gBattleTextBuff2 + 2
- ldrh r0, [r1]
- cmp r0, 0xD1
- bne _0817D42C
- subs r2, 0x1
- lsls r2, 24
- lsrs r2, 24
- movs r0, 0x17
- b _0817D48C
- .pool
-_0817D42C:
- subs r2, 0x1
- lsls r2, 24
- lsrs r2, 24
- movs r0, 0x16
- b _0817D48C
-_0817D436:
- subs r2, 0x1
- lsls r2, 24
- lsrs r2, 24
- movs r0, 0x1B
- b _0817D48C
-_0817D440:
- ldr r0, =gBattleTextBuff1
- ldrb r2, [r0, 0x2]
- cmp r2, 0
- bne _0817D44C
- bl _0817E0A6
-_0817D44C:
- subs r2, 0x1
- lsls r2, 24
- lsrs r2, 24
- movs r0, 0x18
- b _0817D48C
- .pool
-_0817D45C:
- ldr r0, =gBattleTextBuff1
- ldrb r2, [r0, 0x2]
- cmp r2, 0
- bne _0817D468
- bl _0817E0A6
-_0817D468:
- ldr r1, =gBattleTextBuff2 + 2
- ldrh r0, [r1]
- cmp r0, 0xD3
- bne _0817D484
- subs r2, 0x1
- lsls r2, 24
- lsrs r2, 24
- movs r0, 0x1A
- b _0817D48C
- .pool
-_0817D484:
- subs r2, 0x1
- lsls r2, 24
- lsrs r2, 24
- movs r0, 0x19
-_0817D48C:
- mov r1, r10
-_0817D48E:
- movs r3, 0
- bl sub_817E684
- bl _0817E0A6
-_0817D498:
- lsls r2, r5, 3
- lsls r0, r6, 4
- adds r2, r0
- adds r2, r7, r2
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- adds r1, 0x1
- adds r4, r2, 0
- adds r4, 0x30
- movs r0, 0x7
- ands r1, r0
- ldrb r3, [r4]
- movs r0, 0x8
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r4]
- adds r2, 0x32
- movs r0, 0x3
- mov r1, r10
- ands r1, r0
- lsls r1, 2
- ldrb r3, [r2]
- movs r0, 0xD
- negs r0, r0
- bl _0817DFAA
- .pool
-_0817D4E0:
- ldr r0, [sp, 0x8]
- movs r1, 0x39
- movs r2, 0
- bl GetMonData
- cmp r0, 0
- bne _0817D4F2
- bl _0817E0A6
-_0817D4F2:
- mov r2, r8
- lsls r0, r2, 3
- lsls r1, r4, 4
- adds r0, r1
- adds r1, r7, r0
- adds r0, r1, 0
- adds r0, 0x30
- ldrb r0, [r0]
- lsls r0, 29
- lsrs r0, 29
- cmp r0, 0
- bne _0817D50E
- bl _0817E0A6
-_0817D50E:
- subs r2, r0, 0x1
- lsls r2, 24
- lsrs r2, 24
- adds r0, r1, 0
- adds r0, 0x32
- ldrb r3, [r0]
- lsls r3, 28
- lsrs r3, 30
- movs r0, 0x8
- movs r1, 0
- bl sub_817E684
- lsls r1, r4, 1
- adds r1, r4
- lsls r1, 2
- adds r1, r7, r1
- adds r1, 0x57
- ldrb r2, [r1]
- movs r0, 0x1F
- negs r0, r0
- ands r0, r2
- movs r2, 0x2
- b _0817D6F2
-_0817D53C:
- lsls r2, r5, 3
- lsls r0, r6, 4
- adds r2, r0
- adds r2, r7, r2
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- adds r1, 0x1
- adds r4, r2, 0
- adds r4, 0x30
- movs r0, 0x7
- ands r1, r0
- lsls r1, 3
- ldrb r3, [r4]
- movs r0, 0x39
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r4]
- adds r2, 0x32
- movs r0, 0x3
- mov r1, r10
- ands r1, r0
- lsls r1, 4
- ldrb r3, [r2]
- movs r0, 0x31
- negs r0, r0
- bl _0817DFAA
- .pool
-_0817D584:
- mov r1, r8
- lsls r0, r1, 3
- lsls r1, r4, 4
- adds r0, r1
- adds r1, r7, r0
- adds r0, r1, 0
- adds r0, 0x30
- ldrb r0, [r0]
- lsls r0, 26
- lsrs r0, 29
- cmp r0, 0
- bne _0817D5A0
- bl _0817E0A6
-_0817D5A0:
- subs r2, r0, 0x1
- lsls r2, 24
- lsrs r2, 24
- adds r0, r1, 0
- adds r0, 0x32
- ldrb r3, [r0]
- lsls r3, 26
- lsrs r3, 30
- movs r0, 0x8
- movs r1, 0x1
- bl sub_817E684
- lsls r1, r4, 1
- adds r1, r4
- lsls r1, 2
- adds r1, r7, r1
- adds r1, 0x57
- ldrb r2, [r1]
- movs r0, 0x1F
- negs r0, r0
- ands r0, r2
- movs r2, 0x4
- b _0817D6F2
-_0817D5CE:
- lsls r2, r5, 3
- lsls r0, r6, 4
- adds r2, r0
- adds r2, r7, r2
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- adds r1, 0x1
- movs r0, 0x7
- ands r1, r0
- lsls r1, 6
- ldrh r3, [r2, 0x30]
- ldr r0, =0xfffffe3f
- ands r0, r3
- orrs r0, r1
- strh r0, [r2, 0x30]
- adds r2, 0x32
- bl _0817DF0A
- .pool
-_0817D608:
- ldr r0, [sp, 0x8]
- movs r1, 0x39
- movs r2, 0
- bl GetMonData
- cmp r0, 0
- bne _0817D61A
- bl _0817E0A6
-_0817D61A:
- mov r1, r8
- lsls r0, r1, 3
- lsls r1, r4, 4
- adds r0, r1
- adds r1, r7, r0
- ldrh r0, [r1, 0x30]
- lsls r0, 23
- lsrs r0, 29
- cmp r0, 0
- bne _0817D632
- bl _0817E0A6
-_0817D632:
- subs r2, r0, 0x1
- lsls r2, 24
- lsrs r2, 24
- adds r0, r1, 0
- adds r0, 0x32
- ldrb r3, [r0]
- lsrs r3, 6
- movs r0, 0x8
- movs r1, 0x5
- bl sub_817E684
- lsls r1, r4, 1
- adds r1, r4
- lsls r1, 2
- adds r1, r7, r1
- adds r1, 0x57
- ldrb r2, [r1]
- movs r0, 0x1F
- negs r0, r0
- ands r0, r2
- movs r2, 0xA
- b _0817D6F2
-_0817D65E:
- lsls r2, r5, 3
- lsls r0, r6, 4
- adds r2, r0
- adds r2, r7, r2
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- adds r1, 0x1
- adds r4, r2, 0
- adds r4, 0x31
- movs r0, 0x7
- ands r1, r0
- lsls r1, 1
- ldrb r3, [r4]
- movs r0, 0xF
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r4]
- adds r2, 0x33
- bl _0817DF9E
- .pool
-_0817D698:
- ldr r0, [sp, 0x8]
- movs r1, 0x39
- movs r2, 0
- bl GetMonData
- cmp r0, 0
- bne _0817D6AA
- bl _0817E0A6
-_0817D6AA:
- mov r1, r8
- lsls r0, r1, 3
- lsls r1, r4, 4
- adds r0, r1
- adds r1, r7, r0
- adds r0, r1, 0
- adds r0, 0x31
- ldrb r0, [r0]
- lsls r0, 28
- lsrs r0, 29
- cmp r0, 0
- bne _0817D6C6
- bl _0817E0A6
-_0817D6C6:
- subs r2, r0, 0x1
- lsls r2, 24
- lsrs r2, 24
- adds r0, r1, 0
- adds r0, 0x33
- ldrb r3, [r0]
- lsls r3, 30
- lsrs r3, 30
- movs r0, 0x8
- movs r1, 0x6
- bl sub_817E684
- lsls r1, r4, 1
- adds r1, r4
- lsls r1, 2
- adds r1, r7, r1
- adds r1, 0x57
- ldrb r2, [r1]
- movs r0, 0x1F
- negs r0, r0
- ands r0, r2
- movs r2, 0xC
-_0817D6F2:
- orrs r0, r2
- mov r2, r8
- lsls r3, r2, 5
- movs r2, 0x1F
- ands r0, r2
- orrs r0, r3
- strb r0, [r1]
- bl _0817E0A6
-_0817D704:
- ldr r5, =gBattlerPartyIndexes
- ldr r6, =gEffectBattler
- ldrb r0, [r6]
- lsls r0, 1
- adds r0, r5
- ldrh r2, [r0]
- lsls r2, 2
- mov r0, r9
- lsls r4, r0, 1
- add r4, r9
- lsls r4, 3
- adds r2, r4
- adds r2, r7, r2
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r5
- ldrh r1, [r0]
- adds r1, 0x1
- movs r0, 0x7
- ands r1, r0
- lsls r1, 6
- ldrh r3, [r2]
- ldr r0, =0xfffffe3f
- ands r0, r3
- orrs r0, r1
- strh r0, [r2]
- ldrb r0, [r6]
- lsls r0, 1
- adds r0, r5
- ldrh r1, [r0]
- lsls r1, 2
- adds r1, r4
- adds r1, r7, r1
- mov r2, r10
- lsls r3, r2, 6
- ldrb r2, [r1, 0x2]
- movs r0, 0x3F
- ands r0, r2
- orrs r0, r3
- strb r0, [r1, 0x2]
- bl _0817E0A6
- .pool
-_0817D76C:
- ldr r0, [sp, 0x8]
- movs r1, 0x39
- movs r2, 0
- bl GetMonData
- cmp r0, 0
- bne _0817D77E
- bl _0817E0A6
-_0817D77E:
- ldr r6, =gBattlerPartyIndexes
- ldr r5, =gBattlerAttacker
- ldrb r0, [r5]
- lsls r0, 1
- adds r0, r6
- ldrh r0, [r0]
- lsls r0, 2
- lsls r1, r4, 1
- adds r4, r1, r4
- lsls r1, r4, 3
- adds r0, r1
- adds r1, r7, r0
- ldrh r0, [r1]
- lsls r0, 23
- lsrs r0, 29
- cmp r0, 0
- beq _0817D7B2
- subs r2, r0, 0x1
- lsls r2, 24
- lsrs r2, 24
- ldrb r3, [r1, 0x2]
- lsrs r3, 6
- movs r0, 0x8
- movs r1, 0x4
- bl sub_817E684
-_0817D7B2:
- lsls r3, r4, 2
- adds r3, r7, r3
- adds r3, 0x57
- ldrb r0, [r3]
- movs r1, 0x1F
- negs r1, r1
- ands r1, r0
- movs r0, 0x8
- orrs r1, r0
- strb r1, [r3]
- ldrb r0, [r5]
- lsls r0, 1
- adds r0, r6
- b _0817D934
- .pool
-_0817D7D8:
- ldr r5, =gBattlerPartyIndexes
- ldr r6, =gEffectBattler
- ldrb r0, [r6]
- lsls r0, 1
- adds r0, r5
- ldrh r2, [r0]
- lsls r2, 2
- mov r0, r9
- lsls r4, r0, 1
- add r4, r9
- lsls r4, 3
- adds r2, r4
- adds r2, r7, r2
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r5
- ldrh r1, [r0]
- adds r1, 0x1
- movs r0, 0x7
- ands r1, r0
- ldrb r3, [r2]
- movs r0, 0x8
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2]
- ldrb r0, [r6]
- lsls r0, 1
- adds r0, r5
- ldrh r1, [r0]
- lsls r1, 2
- adds r1, r4
- adds r1, r7, r1
- movs r0, 0x3
- mov r2, r10
- ands r2, r0
- lsls r2, 2
- ldrb r3, [r1, 0x2]
- movs r0, 0xD
- negs r0, r0
- b _0817D88C
- .pool
-_0817D838:
- ldr r5, =gBattlerPartyIndexes
- ldr r6, =gEffectBattler
- ldrb r0, [r6]
- lsls r0, 1
- adds r0, r5
- ldrh r2, [r0]
- lsls r2, 2
- mov r1, r9
- lsls r4, r1, 1
- add r4, r9
- lsls r4, 3
- adds r2, r4
- adds r2, r7, r2
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r5
- ldrh r1, [r0]
- adds r1, 0x1
- movs r0, 0x7
- ands r1, r0
- lsls r1, 3
- ldrb r3, [r2]
- movs r0, 0x39
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2]
- ldrb r0, [r6]
- lsls r0, 1
- adds r0, r5
- ldrh r1, [r0]
- lsls r1, 2
- adds r1, r4
- adds r1, r7, r1
- movs r0, 0x3
- mov r2, r10
- ands r2, r0
- lsls r2, 4
- ldrb r3, [r1, 0x2]
- movs r0, 0x31
- negs r0, r0
-_0817D88C:
- ands r0, r3
- orrs r0, r2
- strb r0, [r1, 0x2]
- bl _0817E0A6
- .pool
-_0817D8A4:
- ldr r0, [sp, 0x8]
- movs r1, 0x39
- movs r2, 0
- bl GetMonData
- cmp r0, 0
- bne _0817D8B6
- bl _0817E0A6
-_0817D8B6:
- ldr r2, =gBattlerPartyIndexes
- mov r8, r2
- ldr r6, =gBattlerAttacker
- ldrb r0, [r6]
- lsls r0, 1
- add r0, r8
- ldrh r0, [r0]
- lsls r0, 2
- lsls r1, r4, 1
- adds r5, r1, r4
- lsls r4, r5, 3
- adds r0, r4
- adds r1, r7, r0
- ldrb r0, [r1]
- lsls r0, 29
- lsrs r0, 29
- cmp r0, 0
- beq _0817D8EE
- subs r2, r0, 0x1
- lsls r2, 24
- lsrs r2, 24
- ldrb r3, [r1, 0x2]
- lsls r3, 28
- lsrs r3, 30
- movs r0, 0x8
- movs r1, 0x2
- bl sub_817E684
-_0817D8EE:
- ldrb r0, [r6]
- lsls r0, 1
- add r0, r8
- ldrh r0, [r0]
- lsls r0, 2
- adds r0, r4
- adds r1, r7, r0
- ldrb r0, [r1]
- lsls r0, 26
- lsrs r0, 29
- cmp r0, 0
- beq _0817D91A
- subs r2, r0, 0x1
- lsls r2, 24
- lsrs r2, 24
- ldrb r3, [r1, 0x2]
- lsls r3, 26
- lsrs r3, 30
- movs r0, 0x8
- movs r1, 0x3
- bl sub_817E684
-_0817D91A:
- lsls r3, r5, 2
- adds r3, r7, r3
- adds r3, 0x57
- ldrb r0, [r3]
- movs r1, 0x1F
- negs r1, r1
- ands r1, r0
- movs r0, 0x6
- orrs r1, r0
- strb r1, [r3]
- ldrb r0, [r6]
- lsls r0, 1
- add r0, r8
-_0817D934:
- ldrh r0, [r0]
- lsls r0, 5
- movs r2, 0x1F
- ands r1, r2
- orrs r1, r0
- strb r1, [r3]
- b _0817E0A6
- .pool
-_0817D94C:
- lsls r2, r5, 3
- lsls r0, r6, 4
- adds r2, r0
- adds r2, r7, r2
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- adds r1, 0x1
- adds r4, r2, 0
- adds r4, 0x31
- movs r0, 0x7
- ands r1, r0
- lsls r1, 4
- ldrb r3, [r4]
- movs r0, 0x71
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r4]
- adds r2, 0x33
- movs r0, 0x3
- mov r1, r10
- ands r1, r0
- lsls r1, 2
- ldrb r3, [r2]
- movs r0, 0xD
- negs r0, r0
- b _0817DFAA
- .pool
-_0817D994:
- mov r1, r8
- lsls r0, r1, 3
- lsls r1, r4, 4
- adds r0, r1
- adds r1, r7, r0
- adds r0, r1, 0
- adds r0, 0x31
- ldrb r0, [r0]
- lsls r0, 25
- lsrs r0, 29
- cmp r0, 0
- bne _0817D9AE
- b _0817E0A6
-_0817D9AE:
- subs r2, r0, 0x1
- lsls r2, 24
- lsrs r2, 24
- adds r0, r1, 0
- adds r0, 0x33
- ldrb r3, [r0]
- lsls r3, 28
- lsrs r3, 30
- movs r0, 0x9
- b _0817E086
-_0817D9C2:
- ldr r5, =gBattlerPartyIndexes
- ldr r6, =gEffectBattler
- ldrb r0, [r6]
- lsls r0, 1
- adds r0, r5
- ldrh r2, [r0]
- lsls r2, 2
- mov r0, r9
- lsls r4, r0, 1
- add r4, r9
- lsls r4, 3
- adds r2, r4
- adds r2, r7, r2
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r5
- ldrh r1, [r0]
- adds r1, 0x1
- movs r0, 0x7
- ands r1, r0
- lsls r1, 1
- ldrb r3, [r2, 0x1]
- movs r0, 0xF
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2, 0x1]
- ldrb r0, [r6]
- lsls r0, 1
- adds r0, r5
- ldrh r1, [r0]
- lsls r1, 2
- adds r1, r4
- adds r1, r7, r1
- movs r0, 0x3
- mov r2, r10
- ands r2, r0
- ldrb r3, [r1, 0x3]
- movs r0, 0x4
- negs r0, r0
- b _0817DB76
- .pool
-_0817DA24:
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- lsls r1, 2
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 3
- adds r1, r0
- adds r1, r7, r1
- ldrb r0, [r1, 0x1]
- lsls r0, 28
- lsrs r0, 29
- cmp r0, 0
- bne _0817DA48
- b _0817E0A6
-_0817DA48:
- subs r2, r0, 0x1
- lsls r2, 24
- lsrs r2, 24
- ldrb r3, [r1, 0x3]
- lsls r3, 30
- lsrs r3, 30
- movs r0, 0x9
- movs r1, 0x2
- bl sub_817E684
- b _0817E0A6
- .pool
-_0817DA68:
- ldr r5, =gBattlerPartyIndexes
- ldr r6, =gEffectBattler
- ldrb r0, [r6]
- lsls r0, 1
- adds r0, r5
- ldrh r2, [r0]
- lsls r2, 2
- mov r1, r9
- lsls r4, r1, 1
- add r4, r9
- lsls r4, 3
- adds r2, r4
- adds r2, r7, r2
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r5
- ldrh r1, [r0]
- adds r1, 0x1
- movs r0, 0x7
- ands r1, r0
- lsls r1, 4
- ldrb r3, [r2, 0x1]
- movs r0, 0x71
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2, 0x1]
- ldrb r0, [r6]
- lsls r0, 1
- adds r0, r5
- ldrh r1, [r0]
- lsls r1, 2
- adds r1, r4
- adds r1, r7, r1
- movs r0, 0x3
- mov r2, r10
- ands r2, r0
- lsls r2, 2
- ldrb r3, [r1, 0x3]
- movs r0, 0xD
- negs r0, r0
- b _0817DB76
- .pool
-_0817DACC:
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- lsls r1, 2
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 3
- adds r1, r0
- adds r1, r7, r1
- ldrb r0, [r1, 0x1]
- lsls r0, 25
- lsrs r2, r0, 29
- cmp r2, 0
- bne _0817DAF0
- b _0817E0A6
-_0817DAF0:
- ldr r0, =gStringInfo
- ldr r0, [r0]
- ldrh r0, [r0]
- cmp r0, 0xAD
- bne _0817DAFC
- b _0817E0A6
-_0817DAFC:
- cmp r0, 0xD6
- bne _0817DB02
- b _0817E0A6
-_0817DB02:
- subs r2, 0x1
- lsls r2, 24
- lsrs r2, 24
- ldrb r3, [r1, 0x3]
- lsls r3, 28
- lsrs r3, 30
- movs r0, 0x9
-_0817DB10:
- movs r1, 0x3
- bl sub_817E684
- b _0817E0A6
- .pool
-_0817DB24:
- ldr r5, =gBattlerPartyIndexes
- ldr r6, =gEffectBattler
- ldrb r0, [r6]
- lsls r0, 1
- adds r0, r5
- ldrh r3, [r0]
- lsls r3, 2
- mov r2, r9
- lsls r4, r2, 1
- add r4, r9
- lsls r4, 3
- adds r3, r4
- adds r3, r7, r3
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r5
- ldrh r0, [r0]
- adds r0, 0x1
- movs r1, 0x7
- ands r0, r1
- lsls r0, 15
- ldr r1, [r3]
- ldr r2, =0xfffc7fff
- ands r1, r2
- orrs r1, r0
- str r1, [r3]
- ldrb r0, [r6]
- lsls r0, 1
- adds r0, r5
- ldrh r1, [r0]
- lsls r1, 2
- adds r1, r4
- adds r1, r7, r1
- movs r0, 0x3
- mov r2, r10
- ands r2, r0
- lsls r2, 4
- ldrb r3, [r1, 0x3]
- movs r0, 0x31
- negs r0, r0
-_0817DB76:
- ands r0, r3
- orrs r0, r2
- strb r0, [r1, 0x3]
- b _0817E0A6
- .pool
-_0817DB90:
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- lsls r1, 2
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 3
- adds r1, r0
- adds r1, r7, r1
- ldr r0, [r1]
- lsls r0, 14
- lsrs r0, 29
- cmp r0, 0
- bne _0817DBB4
- b _0817E0A6
-_0817DBB4:
- subs r2, r0, 0x1
- lsls r2, 24
- lsrs r2, 24
- ldrb r3, [r1, 0x3]
- lsls r3, 26
- lsrs r3, 30
- movs r0, 0x9
-_0817DBC2:
- movs r1, 0x4
- bl sub_817E684
- b _0817E0A6
- .pool
-_0817DBD4:
- lsls r3, 3
- mov r1, r9
- lsls r0, r1, 4
- adds r3, r0
- adds r3, r7, r3
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r0, [r0]
- adds r0, 0x1
- movs r1, 0x7
- ands r0, r1
- lsls r0, 15
- ldr r1, [r3, 0x30]
- ldr r2, =0xfffc7fff
- ands r1, r2
- orrs r1, r0
- str r1, [r3, 0x30]
- adds r3, 0x33
- movs r0, 0x3
- mov r1, r10
- ands r1, r0
- lsls r1, 4
- ldrb r2, [r3]
- movs r0, 0x31
- negs r0, r0
-_0817DC0C:
- ands r0, r2
- orrs r0, r1
- strb r0, [r3]
- b _0817E0A6
- .pool
-_0817DC20:
- mov r2, r8
- lsls r0, r2, 3
- lsls r1, r4, 4
- adds r0, r1
- adds r3, r7, r0
- ldr r0, [r3, 0x30]
- lsls r0, 14
- lsrs r0, 29
- cmp r0, 0
- beq _0817DC4C
- subs r2, r0, 0x1
- lsls r2, 24
- lsrs r2, 24
- adds r0, r3, 0
- adds r0, 0x33
- ldrb r3, [r0]
- lsls r3, 26
- lsrs r3, 30
- movs r0, 0x9
- movs r1, 0x1
- bl sub_817E684
-_0817DC4C:
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r0, r7, r0
- adds r0, 0x57
- ldrb r2, [r0]
- movs r1, 0x1F
- negs r1, r1
- ands r1, r2
- movs r2, 0x18
- b _0817E0A2
-_0817DC62:
- lsls r2, r6, 1
- adds r2, r6
- lsls r2, 2
- adds r2, r7, r2
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- adds r1, 0x1
- adds r4, r2, 0
- adds r4, 0x50
- movs r0, 0x7
- ands r1, r0
- ldrb r3, [r4]
- movs r0, 0x8
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r4]
- adds r2, 0x54
- b _0817DF9E
- .pool
-_0817DC98:
- ldr r1, [sp, 0x4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r4, r7, r0
- adds r0, r4, 0
- adds r0, 0x50
- ldrb r0, [r0]
- lsls r0, 29
- lsrs r2, r0, 29
- cmp r2, 0
- bne _0817DCB2
- b _0817E0A6
-_0817DCB2:
- movs r0, 0x1
- eors r1, r0
- subs r2, 0x1
- lsls r2, 24
- lsrs r2, 24
- adds r0, r4, 0
- adds r0, 0x54
- ldrb r3, [r0]
- lsls r3, 30
- lsrs r3, 30
- movs r0, 0xA
- bl sub_817E684
- adds r2, r4, 0
- adds r2, 0x57
- ldrb r1, [r2]
- movs r0, 0x1F
- negs r0, r0
- ands r0, r1
- movs r1, 0xE
- b _0817DFAC
-_0817DCDC:
- lsls r1, r4, 1
- adds r1, r4
- lsls r1, 2
- adds r1, r7, r1
- adds r3, r1, 0
- adds r3, 0x50
- ldrb r2, [r3]
- movs r0, 0x8
- negs r0, r0
- ands r0, r2
- strb r0, [r3]
- adds r1, 0x54
- ldrb r2, [r1]
- movs r0, 0x4
- negs r0, r0
- b _0817DF6A
-_0817DCFC:
- mov r0, r8
- lsls r2, r0, 3
- lsls r0, r4, 4
- adds r2, r0
- adds r2, r7, r2
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- adds r1, 0x1
- adds r4, r2, 0
- adds r4, 0x34
- movs r0, 0x7
- ands r1, r0
- ldrb r3, [r4]
- movs r0, 0x8
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r4]
- adds r2, 0x33
- mov r1, r10
- lsls r3, r1, 6
- b _0817DF0E
- .pool
-_0817DD38:
- mov r0, r8
- lsls r2, r0, 3
- lsls r0, r4, 4
- adds r2, r0
- adds r2, r7, r2
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- adds r1, 0x1
- adds r2, 0x34
- movs r0, 0x7
- ands r1, r0
- lsls r1, 3
- ldrb r3, [r2]
- movs r0, 0x39
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- mov r1, r10
- lsls r3, r1, 6
- movs r1, 0x3F
- b _0817DF12
- .pool
-_0817DD74:
- movs r0, 0
- bl sub_817EA80
-_0817DD7A:
- mov r2, r8
- lsls r0, r2, 3
- b _0817DD88
-_0817DD80:
- movs r0, 0x1
- bl sub_817EA80
- lsls r0, r5, 3
-_0817DD88:
- lsls r1, r4, 4
- adds r0, r1
- adds r1, r7, r0
- adds r4, r1, 0
- adds r4, 0x34
- ldrb r5, [r4]
- lsls r0, r5, 29
- cmp r0, 0
- beq _0817DDAE
- movs r0, 0x8
- negs r0, r0
- ands r0, r5
- strb r0, [r4]
- adds r2, r1, 0
- adds r2, 0x33
- ldrb r1, [r2]
- movs r0, 0x3F
- ands r0, r1
- strb r0, [r2]
-_0817DDAE:
- ldrb r1, [r4]
- lsls r0, r1, 26
- lsrs r0, 29
- cmp r0, 0
- bne _0817DDBA
- b _0817E0A6
-_0817DDBA:
- movs r0, 0x39
- negs r0, r0
- ands r0, r1
- movs r1, 0x3F
- ands r0, r1
- strb r0, [r4]
- b _0817E0A6
-_0817DDC8:
- lsls r2, r4, 1
- adds r2, r4
- lsls r2, 2
- adds r2, r7, r2
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- adds r1, 0x1
- adds r4, r2, 0
- adds r4, 0x50
- movs r0, 0x7
- ands r1, r0
- lsls r1, 3
- ldrb r3, [r4]
- movs r0, 0x39
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r4]
- adds r2, 0x54
- movs r0, 0x3
- mov r1, r10
- ands r1, r0
- lsls r1, 2
- ldrb r3, [r2]
- movs r0, 0xD
- negs r0, r0
- b _0817DFAA
- .pool
-_0817DE10:
- lsls r2, r4, 1
- adds r2, r4
- lsls r2, 2
- adds r2, r7, r2
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- adds r1, 0x1
- adds r4, r2, 0
- adds r4, 0x50
- movs r0, 0x7
- ands r1, r0
- lsls r1, 6
- ldrh r3, [r4]
- ldr r0, =0xfffffe3f
- ands r0, r3
- orrs r0, r1
- strh r0, [r4]
- adds r2, 0x54
- movs r0, 0x3
- mov r1, r10
- ands r1, r0
- lsls r1, 4
- ldrb r3, [r2]
- movs r0, 0x31
- negs r0, r0
- b _0817DFAA
- .pool
-_0817DE58:
- ldr r1, =gBattleTextBuff1 + 2
- ldrh r0, [r1]
- cmp r0, 0x73
- bne _0817DE82
- lsls r1, r4, 1
- adds r1, r4
- lsls r1, 2
- adds r1, r7, r1
- adds r3, r1, 0
- adds r3, 0x50
- ldrb r2, [r3]
- movs r0, 0x39
- negs r0, r0
- ands r0, r2
- strb r0, [r3]
- adds r1, 0x54
- ldrb r2, [r1]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- strb r0, [r1]
-_0817DE82:
- ldr r2, =gBattleTextBuff1 + 2
- ldrh r0, [r2]
- cmp r0, 0x71
- bne _0817DEAA
- lsls r1, r4, 1
- adds r1, r4
- lsls r1, 2
- adds r1, r7, r1
- adds r3, r1, 0
- adds r3, 0x50
- ldrh r2, [r3]
- ldr r0, =0xfffffe3f
- ands r0, r2
- strh r0, [r3]
- adds r1, 0x54
- ldrb r2, [r1]
- movs r0, 0x31
- negs r0, r0
- ands r0, r2
- strb r0, [r1]
-_0817DEAA:
- ldr r1, =gBattleTextBuff1 + 2
- ldrh r0, [r1]
- cmp r0, 0x36
- beq _0817DEB4
- b _0817E0A6
-_0817DEB4:
- lsls r1, r4, 1
- adds r1, r4
- lsls r1, 2
- adds r1, r7, r1
- adds r4, r1, 0
- adds r4, 0x51
- ldrb r2, [r4]
- movs r0, 0x71
- negs r0, r0
- ands r0, r2
- strb r0, [r4]
- adds r1, 0x55
- ldrb r2, [r1]
- movs r0, 0x4
- negs r0, r0
- b _0817DF6A
- .pool
-_0817DEDC:
- lsls r2, r4, 1
- adds r2, r4
- lsls r2, 2
- adds r2, r7, r2
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- adds r1, 0x1
- adds r4, r2, 0
- adds r4, 0x51
- movs r0, 0x7
- ands r1, r0
- lsls r1, 1
- ldrb r3, [r4]
- movs r0, 0xF
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r4]
- adds r2, 0x54
-_0817DF0A:
- mov r0, r10
- lsls r3, r0, 6
-_0817DF0E:
- ldrb r1, [r2]
- movs r0, 0x3F
-_0817DF12:
- ands r0, r1
- orrs r0, r3
- strb r0, [r2]
- b _0817E0A6
- .pool
-_0817DF24:
- lsls r0, r6, 1
- adds r0, r6
- lsls r0, 2
- adds r1, r7, r0
- adds r0, r1, 0
- adds r0, 0x51
- ldrb r0, [r0]
- lsls r0, 28
- lsrs r0, 29
- cmp r0, 0
- bne _0817DF3C
- b _0817E0A6
-_0817DF3C:
- subs r2, r0, 0x1
- lsls r2, 24
- lsrs r2, 24
- adds r0, r1, 0
- adds r0, 0x54
- ldrb r3, [r0]
- lsrs r3, 6
- movs r0, 0xF
- b _0817E086
-_0817DF4E:
- lsls r1, r4, 1
- adds r1, r4
- lsls r1, 2
- adds r1, r7, r1
- adds r4, r1, 0
- adds r4, 0x51
- ldrb r2, [r4]
- movs r0, 0xF
- negs r0, r0
- ands r0, r2
- strb r0, [r4]
- adds r1, 0x54
- ldrb r2, [r1]
- movs r0, 0x3F
-_0817DF6A:
- ands r0, r2
- strb r0, [r1]
- b _0817E0A6
-_0817DF70:
- lsls r2, r4, 1
- adds r2, r4
- lsls r2, 2
- adds r2, r7, r2
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- adds r1, 0x1
- adds r4, r2, 0
- adds r4, 0x51
- movs r0, 0x7
- ands r1, r0
- lsls r1, 4
- ldrb r3, [r4]
- movs r0, 0x71
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r4]
- adds r2, 0x55
-_0817DF9E:
- movs r0, 0x3
- mov r1, r10
- ands r1, r0
- ldrb r3, [r2]
- movs r0, 0x4
- negs r0, r0
-_0817DFAA:
- ands r0, r3
-_0817DFAC:
- orrs r0, r1
- strb r0, [r2]
- b _0817E0A6
- .pool
-_0817DFBC:
- lsls r0, r6, 1
- adds r0, r6
- lsls r0, 2
- adds r1, r7, r0
- adds r0, r1, 0
- adds r0, 0x51
- ldrb r0, [r0]
- lsls r0, 25
- lsrs r0, 29
- cmp r0, 0
- beq _0817E0A6
- subs r2, r0, 0x1
- lsls r2, 24
- lsrs r2, 24
- adds r0, r1, 0
- adds r0, 0x55
- ldrb r3, [r0]
- lsls r3, 30
- lsrs r3, 30
- movs r0, 0x10
- b _0817E086
-_0817DFE6:
- lsls r1, r6, 1
- adds r1, r6
- lsls r1, 2
- adds r1, r7, r1
- adds r3, r1, 0
- adds r3, 0x50
- ldrb r2, [r3]
- movs r0, 0x39
- negs r0, r0
- ands r0, r2
- strb r0, [r3]
- adds r1, 0x54
- ldrb r2, [r1]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- strb r0, [r1]
- ldrh r2, [r3]
- ldr r0, =0xfffffe3f
- ands r0, r2
- strh r0, [r3]
- ldrb r2, [r1]
- movs r0, 0x31
- negs r0, r0
- ands r0, r2
- strb r0, [r1]
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrb r2, [r0]
- movs r0, 0x11
- movs r1, 0
- mov r3, r10
- bl sub_817E684
- b _0817E0A6
- .pool
-_0817E040:
- lsls r0, r4, 4
- adds r4, r7, r0
- adds r0, r4, 0
- adds r0, 0x35
- ldrb r0, [r0]
- lsrs r0, 5
- cmp r0, 0
- beq _0817E068
- subs r2, r0, 0x1
- lsls r2, 24
- lsrs r2, 24
- adds r0, r4, 0
- adds r0, 0x36
- ldrb r3, [r0]
- lsls r3, 30
- lsrs r3, 30
- movs r0, 0x15
- movs r1, 0
- bl sub_817E684
-_0817E068:
- adds r0, r4, 0
- adds r0, 0x3D
- ldrb r0, [r0]
- lsrs r0, 5
- cmp r0, 0
- beq _0817E0A6
- subs r2, r0, 0x1
- lsls r2, 24
- lsrs r2, 24
- adds r0, r4, 0
- adds r0, 0x3E
- ldrb r3, [r0]
- lsls r3, 30
- lsrs r3, 30
- movs r0, 0x15
-_0817E086:
- movs r1, 0
- bl sub_817E684
- b _0817E0A6
-_0817E08E:
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r0, r7, r0
- adds r0, 0x57
- ldrb r2, [r0]
- movs r1, 0x1F
- negs r1, r1
- ands r1, r2
- movs r2, 0x1C
-_0817E0A2:
- orrs r1, r2
-_0817E0A4:
- strb r1, [r0]
-_0817E0A6:
- add sp, 0x10
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_817C95C
-
- thumb_func_start sub_817E0B8
-sub_817E0B8: @ 817E0B8
- push {r4-r6,lr}
- lsls r0, 16
- lsrs r5, r0, 16
- movs r3, 0
- ldr r4, =gUnknown_0860A8A4
- ldr r6, =0x0000ffff
- adds r2, r4, 0
- adds r1, r4, 0
-_0817E0C8:
- ldrh r0, [r1]
- cmp r0, r5
- beq _0817E0DA
- adds r2, 0x2
- adds r1, 0x2
- adds r3, 0x1
- ldrh r0, [r2]
- cmp r0, r6
- bne _0817E0C8
-_0817E0DA:
- lsls r0, r3, 1
- adds r0, r4
- ldrh r1, [r0]
- ldr r0, =0x0000ffff
- cmp r1, r0
- beq _0817E0F4
- movs r0, 0
- b _0817E0F6
- .pool
-_0817E0F4:
- movs r0, 0x1
-_0817E0F6:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_817E0B8
-
- thumb_func_start sub_817E0FC
-sub_817E0FC: @ 817E0FC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x14
- str r2, [sp, 0x4]
- lsls r0, 16
- lsrs r7, r0, 16
- lsls r1, 16
- lsrs r1, 16
- str r1, [sp]
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x2
- ands r0, r1
- cmp r0, 0
- bne _0817E122
- b _0817E310
-_0817E122:
- ldr r0, =gBattleStruct
- ldr r0, [r0]
- movs r1, 0x81
- lsls r1, 2
- adds r1, r0, r1
- str r1, [sp, 0x8]
- ldr r2, =gBattlerAttacker
- mov r10, r2
- ldrb r0, [r2]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- ldr r0, =gBattlerTarget
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r4, r0, 24
- mov r1, r10
- ldrb r0, [r1]
- adds r1, r7, 0
- bl GetBattlerMoveSlotId
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0x3
- bls _0817E184
- mov r2, r9
- lsls r0, r2, 1
- add r0, r9
- lsls r0, 2
- ldr r1, [sp, 0x8]
- adds r0, r1, r0
- adds r0, 0x57
- ldrb r1, [r0]
- movs r2, 0x1E
- orrs r1, r2
- strb r1, [r0]
- b _0817E310
- .pool
-_0817E184:
- mov r2, r10
- ldrb r0, [r2]
- bl GetBattlerPosition
- lsls r0, 24
- lsrs r0, 25
- lsls r0, 3
- lsls r4, 4
- adds r0, r4
- ldr r1, [sp, 0x8]
- adds r0, r1, r0
- mov r2, r10
- ldrb r1, [r2]
- lsls r1, 1
- ldr r2, =gBattlerPartyIndexes
- adds r1, r2
- ldrh r2, [r1]
- adds r2, 0x1
- adds r0, 0x35
- lsls r2, 5
- ldrb r3, [r0]
- movs r1, 0x1F
- ands r1, r3
- orrs r1, r2
- strb r1, [r0]
- mov r1, r10
- ldrb r0, [r1]
- bl GetBattlerPosition
- lsls r0, 24
- lsrs r0, 25
- lsls r0, 3
- adds r0, r4
- ldr r2, [sp, 0x8]
- adds r0, r2, r0
- adds r0, 0x36
- movs r1, 0x3
- mov r8, r6
- mov r2, r8
- ands r2, r1
- mov r8, r2
- ldrb r2, [r0]
- movs r1, 0x4
- negs r1, r1
- ands r1, r2
- mov r2, r8
- orrs r1, r2
- strb r1, [r0]
- mov r1, r9
- lsls r0, r1, 1
- add r0, r9
- lsls r0, 2
- ldr r2, [sp, 0x8]
- adds r0, r2, r0
- str r0, [sp, 0xC]
- adds r5, r0, 0
- adds r5, 0x53
- lsls r2, r6, 6
- ldrb r1, [r5]
- movs r0, 0x3F
- ands r0, r1
- orrs r0, r2
- strb r0, [r5]
- ldr r1, =gBattleMoves
- lsls r4, r7, 1
- adds r0, r4, r7
- lsls r0, 2
- adds r0, r1
- ldrb r2, [r0]
- movs r0, 0
- adds r1, r6, 0
- movs r3, 0
- bl sub_817E684
- ldr r0, [sp]
- adds r1, r7, 0
- adds r2, r6, 0
- bl sub_817F394
- ldr r0, [sp, 0x4]
- ldrb r1, [r0, 0x12]
- movs r0, 0xF
- ands r0, r1
- str r4, [sp, 0x10]
- cmp r0, 0
- beq _0817E23C
- movs r0, 0x7
- adds r1, r7, 0
- adds r2, r6, 0
- movs r3, 0
- bl sub_817E684
-_0817E23C:
- ldr r0, =0x00000111
- cmp r7, r0
- bne _0817E272
- mov r1, r10
- ldrb r0, [r1]
- lsls r0, 1
- ldr r2, =gBattlerPartyIndexes
- adds r0, r2
- ldrh r1, [r0]
- adds r1, 0x1
- movs r0, 0x7
- ands r1, r0
- ldrb r2, [r5]
- movs r0, 0x8
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r5]
- ldr r2, [sp, 0xC]
- adds r2, 0x56
- ldrb r1, [r2]
- movs r0, 0x4
- negs r0, r0
- ands r0, r1
- mov r1, r8
- orrs r0, r1
- strb r0, [r2]
-_0817E272:
- cmp r7, 0x78
- beq _0817E27A
- cmp r7, 0x99
- bne _0817E2D2
-_0817E27A:
- movs r0, 0x1
- mov r2, r9
- eors r0, r2
- lsls r2, r0, 1
- adds r2, r0
- lsls r2, 2
- ldr r0, [sp, 0x8]
- adds r2, r0, r2
- mov r1, r10
- ldrb r0, [r1]
- lsls r0, 1
- ldr r1, =gBattlerPartyIndexes
- adds r0, r1
- ldrh r1, [r0]
- adds r1, 0x1
- adds r4, r2, 0
- adds r4, 0x58
- movs r0, 0x7
- ands r1, r0
- lsls r1, 3
- ldrb r3, [r4]
- movs r0, 0x39
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- mov r1, r8
- lsls r3, r1, 1
- movs r1, 0x7
- negs r1, r1
- ands r0, r1
- orrs r0, r3
- strb r0, [r4]
- adds r2, 0x57
- ldrb r1, [r2]
- movs r0, 0x1F
- negs r0, r0
- ands r0, r1
- movs r1, 0x1A
- orrs r0, r1
- strb r0, [r2]
- ldrb r0, [r4]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r4]
-_0817E2D2:
- ldr r1, =gBattleMoves
- ldr r2, [sp, 0x10]
- adds r0, r2, r7
- lsls r0, 2
- adds r0, r1
- ldrb r4, [r0, 0x2]
- ldrb r5, [r0, 0x1]
- movs r0, 0xD
- adds r1, r4, 0
- adds r2, r5, 0
- movs r3, 0
- bl sub_817E684
- movs r0, 0xE
- adds r1, r4, 0
- adds r2, r5, 0
- movs r3, 0
- bl sub_817E684
- movs r0, 0xB
- adds r1, r4, 0
- movs r2, 0
- movs r3, 0
- bl sub_817E684
- movs r0, 0xC
- adds r1, r4, 0
- movs r2, 0
- movs r3, 0
- bl sub_817E684
-_0817E310:
- add sp, 0x14
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_817E0FC
-
- thumb_func_start sub_817E32C
-sub_817E32C: @ 817E32C
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0817E3EE
- ldr r0, =gBattleStruct
- ldr r0, [r0]
- movs r1, 0x81
- lsls r1, 2
- adds r4, r0, r1
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r5, 0x12
- beq _0817E36C
- cmp r5, 0x13
- beq _0817E3AA
- b _0817E3EE
- .pool
-_0817E36C:
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r4, r0
- ldr r0, [r4, 0x50]
- lsls r0, 14
- lsrs r0, 29
- cmp r0, 0
- beq _0817E3EE
- subs r0, 0x1
- lsls r0, 2
- adds r1, r4, 0
- adds r1, 0x55
- ldrb r3, [r1]
- lsls r3, 28
- lsrs r3, 30
- adds r3, r0
- lsls r3, 24
- lsrs r3, 24
- movs r0, 0x2
- movs r1, 0
- bl sub_817E684
- adds r2, r4, 0
- adds r2, 0x57
- ldrb r1, [r2]
- movs r0, 0x1F
- negs r0, r0
- ands r0, r1
- movs r1, 0x10
- b _0817E3EA
-_0817E3AA:
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r4, r0
- adds r0, r4, 0
- adds r0, 0x52
- ldrb r0, [r0]
- lsls r0, 27
- lsrs r0, 29
- cmp r0, 0
- beq _0817E3EE
- subs r0, 0x1
- lsls r0, 2
- adds r1, r4, 0
- adds r1, 0x55
- ldrb r3, [r1]
- lsls r3, 26
- lsrs r3, 30
- adds r3, r0
- lsls r3, 24
- lsrs r3, 24
- movs r0, 0x2
- movs r1, 0x1
- bl sub_817E684
- adds r2, r4, 0
- adds r2, 0x57
- ldrb r1, [r2]
- movs r0, 0x1F
- negs r0, r0
- ands r0, r1
- movs r1, 0x12
-_0817E3EA:
- orrs r0, r1
- strb r0, [r2]
-_0817E3EE:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_817E32C
-
- thumb_func_start sub_817E3F4
-sub_817E3F4: @ 817E3F4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x20
- movs r0, 0
- str r0, [sp]
- movs r1, 0
- str r1, [sp, 0x4]
- movs r2, 0
- str r2, [sp, 0x8]
- ldr r3, =0x00007fff
- str r3, [sp, 0xC]
- movs r4, 0
- str r4, [sp, 0x10]
- movs r7, 0
- str r7, [sp, 0x14]
- mov r8, r0
- ldr r0, =gBattleStruct
- ldr r1, [r0]
- adds r0, r1, 0
- adds r0, 0xB3
- ldrb r0, [r0]
- cmp r0, 0
- beq _0817E42A
- b _0817E670
-_0817E42A:
- movs r2, 0xD2
- lsls r2, 1
- adds r2, r1
- mov r10, r2
- movs r6, 0
-_0817E434:
- movs r0, 0x64
- adds r4, r6, 0
- muls r4, r0
- ldr r0, =gPlayerParty
- adds r0, r4, r0
- movs r1, 0xB
- movs r2, 0
- bl GetMonData
- cmp r0, 0
- beq _0817E454
- mov r0, r8
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
-_0817E454:
- ldr r5, =gEnemyParty
- adds r0, r4, r5
- movs r1, 0xB
- movs r2, 0
- bl GetMonData
- cmp r0, 0
- beq _0817E46A
- adds r0, r7, 0x1
- lsls r0, 24
- lsrs r7, r0, 24
-_0817E46A:
- adds r6, 0x1
- cmp r6, 0x5
- ble _0817E434
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x2
- ands r0, r1
- cmp r0, 0
- bne _0817E47E
- b _0817E670
-_0817E47E:
- cmp r8, r7
- beq _0817E484
- b _0817E670
-_0817E484:
- movs r6, 0
- lsls r3, r6, 1
- str r3, [sp, 0x18]
- movs r4, 0x64
- mov r8, r4
-_0817E48E:
- mov r1, r8
- muls r1, r6
- ldr r0, =gPlayerParty
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0xB
- movs r2, 0
- bl GetMonData
- lsls r0, 16
- lsrs r7, r0, 16
- adds r0, r6, 0x1
- mov r9, r0
- cmp r7, 0
- beq _0817E4EE
- adds r0, r4, 0
- movs r1, 0x2D
- movs r2, 0
- bl GetMonData
- cmp r0, 0
- bne _0817E4EE
- movs r4, 0
- lsls r0, r6, 3
- mov r2, r10
- adds r1, r0, r2
- movs r3, 0x3
-_0817E4C4:
- lsls r0, r4, 16
- asrs r0, 16
- ldrh r4, [r1]
- adds r0, r4
- lsls r0, 16
- lsrs r4, r0, 16
- adds r1, 0x2
- subs r3, 0x1
- cmp r3, 0
- bge _0817E4C4
- ldr r1, [sp, 0x8]
- lsls r0, r1, 16
- lsls r1, r4, 16
- cmp r0, r1
- bge _0817E4EE
- lsls r0, r6, 24
- lsrs r0, 24
- str r0, [sp, 0x10]
- lsrs r1, 16
- str r1, [sp, 0x8]
- str r7, [sp]
-_0817E4EE:
- mov r0, r8
- muls r0, r6
- ldr r2, =gEnemyParty
- adds r4, r0, r2
- adds r0, r4, 0
- movs r1, 0xB
- movs r2, 0
- bl GetMonData
- lsls r0, 16
- lsrs r7, r0, 16
- ldr r3, [sp, 0x8]
- lsls r3, 16
- str r3, [sp, 0x1C]
- cmp r7, 0
- beq _0817E5A0
- adds r0, r4, 0
- movs r1, 0x2D
- movs r2, 0
- bl GetMonData
- cmp r0, 0
- bne _0817E5A0
- movs r4, 0
- ldr r0, [sp, 0xC]
- lsls r2, r0, 16
- movs r3, 0x1
- lsls r1, r3, 1
- adds r1, 0x1
- lsls r1, 4
- lsls r0, r6, 3
- adds r0, r1
- mov r3, r10
- adds r1, r0, r3
- movs r3, 0x3
-_0817E534:
- lsls r0, r4, 16
- asrs r0, 16
- ldrh r4, [r1]
- adds r0, r4
- lsls r0, 16
- lsrs r4, r0, 16
- adds r1, 0x2
- subs r3, 0x1
- cmp r3, 0
- bge _0817E534
- asrs r1, r2, 16
- lsls r5, r4, 16
- asrs r0, r5, 16
- cmp r1, r0
- bne _0817E590
- mov r0, r8
- muls r0, r6
- ldr r1, =gEnemyParty
- adds r0, r1
- movs r1, 0x19
- movs r2, 0
- bl GetMonData
- adds r4, r0, 0
- ldr r2, [sp, 0x14]
- mov r0, r8
- muls r0, r2
- ldr r3, =gEnemyParty
- adds r0, r3
- movs r1, 0x19
- movs r2, 0
- bl GetMonData
- cmp r4, r0
- bls _0817E5A0
- b _0817E594
- .pool
-_0817E590:
- cmp r1, r0
- ble _0817E5A0
-_0817E594:
- lsls r0, r6, 24
- lsrs r0, 24
- str r0, [sp, 0x14]
- lsrs r5, 16
- str r5, [sp, 0xC]
- str r7, [sp, 0x4]
-_0817E5A0:
- mov r6, r9
- cmp r6, 0x5
- bgt _0817E5A8
- b _0817E48E
-_0817E5A8:
- movs r4, 0
- movs r6, 0
- movs r3, 0
- ldr r5, =gPlayerParty
- ldr r7, [sp, 0x10]
- lsls r0, r7, 3
- mov r1, r10
- adds r2, r0, r1
-_0817E5B8:
- lsls r0, r4, 16
- asrs r0, 16
- movs r7, 0
- ldrsh r1, [r2, r7]
- cmp r0, r1
- bge _0817E5C8
- ldrh r4, [r2]
- adds r6, r3, 0
-_0817E5C8:
- adds r2, 0x2
- adds r3, 0x1
- cmp r3, 0x3
- ble _0817E5B8
- movs r0, 0x64
- ldr r1, [sp, 0x10]
- muls r0, r1
- adds r0, r5
- adds r1, r6, 0
- adds r1, 0xD
- movs r2, 0
- bl GetMonData
- lsls r0, 16
- lsrs r4, r0, 16
- ldr r2, [sp, 0x1C]
- cmp r2, 0
- beq _0817E670
- cmp r4, 0
- beq _0817E670
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0817E65C
- ldr r3, [sp, 0x10]
- cmp r3, 0x2
- bhi _0817E620
- ldr r0, =gBattleScripting
- adds r0, 0x25
- ldrb r0, [r0]
- bl sub_806D82C
- lsls r0, 16
- cmp r0, 0
- beq _0817E630
- b _0817E670
- .pool
-_0817E620:
- ldr r0, =gBattleScripting
- adds r0, 0x25
- ldrb r0, [r0]
- bl sub_806D82C
- lsls r0, 16
- cmp r0, 0
- beq _0817E670
-_0817E630:
- movs r3, 0
- ldr r7, [sp, 0x14]
- cmp r7, 0x2
- bls _0817E63A
- movs r3, 0x1
-_0817E63A:
- lsls r0, r3, 24
- lsrs r0, 24
- ldr r1, =gBattleScripting
- adds r1, 0x25
- ldrb r1, [r1]
- bl sub_806EF84
- lsls r0, 24
- lsrs r0, 24
- adds r1, r4, 0
- ldr r2, [sp]
- ldr r3, [sp, 0x4]
- bl PutBattleUpdateOnTheAir
- b _0817E670
- .pool
-_0817E65C:
- ldr r0, =gBattleScripting
- adds r0, 0x25
- ldrb r1, [r0]
- movs r0, 0x1
- eors r0, r1
- adds r1, r4, 0
- ldr r2, [sp]
- ldr r3, [sp, 0x4]
- bl PutBattleUpdateOnTheAir
-_0817E670:
- add sp, 0x20
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_817E3F4
-
- thumb_func_start sub_817E684
-sub_817E684: @ 817E684
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
- lsls r1, 16
- lsrs r6, r1, 16
- lsls r2, 24
- lsrs r5, r2, 24
- lsls r3, 24
- lsrs r3, 24
- mov r9, r3
- ldr r0, =gBattleStruct
- ldr r0, [r0]
- movs r1, 0xD2
- lsls r1, 1
- adds r1, r0
- mov r8, r1
- movs r2, 0x81
- lsls r2, 2
- adds r7, r0, r2
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, =gBattlerTarget
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r3, r0, 24
- mov r0, r10
- cmp r0, 0x1B
- bls _0817E6D4
- b _0817EA6C
-_0817E6D4:
- lsls r0, 2
- ldr r1, =_0817E6F0
- adds r1, r0, r1
- ldr r1, [r1]
- mov r12, r0
- mov pc, r1
- .pool
- .align 2, 0
-_0817E6F0:
- .4byte _0817E760
- .4byte _0817E760
- .4byte _0817E85C
- .4byte _0817E79C
- .4byte _0817E79C
- .4byte _0817E79C
- .4byte _0817E79C
- .4byte _0817E79C
- .4byte _0817E8A0
- .4byte _0817E8A0
- .4byte _0817E8CC
- .4byte _0817E8F0
- .4byte _0817E978
- .4byte _0817E9E0
- .4byte _0817EA28
- .4byte _0817E8A0
- .4byte _0817E8A0
- .4byte _0817E880
- .4byte _0817E760
- .4byte _0817E80A
- .4byte _0817E848
- .4byte _0817E8A0
- .4byte _0817E760
- .4byte _0817E760
- .4byte _0817E760
- .4byte _0817E760
- .4byte _0817E760
- .4byte _0817E760
-_0817E760:
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- lsls r1, 2
- adds r1, r6
- lsls r1, 1
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 4
- adds r1, r0
- add r1, r8
- ldr r0, =gUnknown_0860A834
- add r0, r12
- ldr r2, [r0]
- lsls r0, r5, 1
- adds r0, r2
- ldrh r0, [r0]
- ldrh r2, [r1]
- adds r0, r2
- b _0817EA6A
- .pool
-_0817E79C:
- ldr r1, =gUnknown_0860A834
- add r1, r12
- ldr r7, =gBattlerPartyIndexes
- lsls r0, r4, 1
- adds r0, r4
- lsls r2, r0, 4
- ldr r4, =0x0000ffff
- ldr r1, [r1]
- ldr r3, =gBattlerAttacker
- ldrh r0, [r1]
- cmp r6, r0
- bne _0817E7E0
- ldrb r0, [r3]
- lsls r0, 1
- adds r0, r7
- ldrh r0, [r0]
- lsls r0, 2
- adds r0, r5
- lsls r0, 1
- adds r0, r2
- add r0, r8
- ldrh r1, [r1, 0x2]
- ldrh r2, [r0]
- adds r1, r2
- strh r1, [r0]
- b _0817EA6C
- .pool
-_0817E7E0:
- adds r1, 0x4
- ldrh r0, [r1]
- cmp r0, r4
- bne _0817E7EA
- b _0817EA6C
-_0817E7EA:
- cmp r6, r0
- bne _0817E7E0
- ldrb r0, [r3]
- lsls r0, 1
- adds r0, r7
- ldrh r0, [r0]
- lsls r0, 2
- adds r0, r5
- lsls r0, 1
- adds r0, r2
- add r0, r8
- ldrh r1, [r1, 0x2]
- ldrh r5, [r0]
- adds r1, r5
- strh r1, [r0]
- b _0817EA6C
-_0817E80A:
- movs r0, 0x1
- adds r1, r5, 0
- eors r1, r0
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r7, r0
- adds r0, 0x57
- ldrb r2, [r0]
- movs r1, 0x1F
- negs r1, r1
- ands r1, r2
- strb r1, [r0]
- mov r0, r9
- lsls r1, r0, 1
- lsls r0, r5, 1
- adds r0, r5
- lsls r0, 4
- adds r1, r0
- add r1, r8
- ldr r0, =gUnknown_0860A834
- add r0, r12
- ldr r2, [r0]
- lsls r0, r6, 1
- adds r0, r2
- ldrh r0, [r0]
- ldrh r2, [r1]
- adds r0, r2
- b _0817EA6A
- .pool
-_0817E848:
- lsls r0, r5, 1
- adds r0, r5
- lsls r0, 2
- adds r0, r7, r0
- adds r0, 0x57
- ldrb r2, [r0]
- movs r1, 0x1F
- negs r1, r1
- ands r1, r2
- strb r1, [r0]
-_0817E85C:
- mov r0, r9
- lsls r1, r0, 1
- lsls r0, r5, 1
- adds r0, r5
- lsls r0, 4
- adds r1, r0
- add r1, r8
- ldr r0, =gUnknown_0860A834
- add r0, r12
- ldr r2, [r0]
- lsls r0, r6, 1
- adds r0, r2
- ldrh r0, [r0]
- ldrh r2, [r1]
- adds r0, r2
- b _0817EA6A
- .pool
-_0817E880:
- lsls r1, r5, 2
- add r1, r9
- lsls r1, 1
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 4
- adds r1, r0
- add r1, r8
- ldr r0, =gUnknown_0860A834
- add r0, r12
- ldr r2, [r0]
- lsls r0, r6, 1
- adds r0, r2
- b _0817EA64
- .pool
-_0817E8A0:
- lsls r2, r5, 2
- add r2, r9
- lsls r2, 1
- movs r1, 0x1
- eors r1, r4
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 4
- adds r2, r0
- add r2, r8
- ldr r0, =gUnknown_0860A834
- add r0, r12
- ldr r1, [r0]
- lsls r0, r6, 1
- adds r0, r1
- ldrh r0, [r0]
- ldrh r1, [r2]
- adds r0, r1
- strh r0, [r2]
- b _0817EA6C
- .pool
-_0817E8CC:
- lsls r1, r5, 2
- add r1, r9
- lsls r1, 1
- lsls r0, r6, 1
- adds r0, r6
- lsls r0, 4
- adds r1, r0
- add r1, r8
- ldr r0, =gUnknown_0860A834
- add r0, r12
- ldr r0, [r0]
- ldrh r0, [r0]
- ldrh r2, [r1]
- adds r0, r2
- b _0817EA6A
- .pool
-_0817E8F0:
- lsls r0, r3, 4
- adds r2, r7, r0
- adds r0, r2, 0
- adds r0, 0x34
- ldrb r0, [r0]
- lsls r0, 29
- lsrs r1, r0, 29
- adds r4, r2, 0
- adds r4, 0x3C
- ldrb r0, [r4]
- lsls r0, 29
- lsrs r0, 29
- cmn r1, r0
- bne _0817E90E
- b _0817EA6C
-_0817E90E:
- cmp r6, 0xA
- beq _0817E914
- b _0817EA6C
-_0817E914:
- cmp r1, 0
- beq _0817E940
- subs r1, 0x1
- lsls r1, 2
- adds r0, r2, 0
- adds r0, 0x33
- ldrb r0, [r0]
- lsrs r0, 6
- adds r1, r0
- lsls r1, 1
- lsls r0, r3, 1
- adds r0, r3
- lsls r0, 4
- adds r1, r0
- add r1, r8
- ldr r0, =gUnknown_0860A834
- add r0, r12
- ldr r0, [r0]
- ldrh r0, [r0]
- ldrh r5, [r1]
- adds r0, r5
- strh r0, [r1]
-_0817E940:
- ldrb r0, [r4]
- lsls r0, 29
- lsrs r0, 29
- cmp r0, 0
- bne _0817E94C
- b _0817EA6C
-_0817E94C:
- subs r1, r0, 0x1
- lsls r1, 2
- adds r0, r2, 0
- adds r0, 0x3B
- ldrb r0, [r0]
- lsrs r0, 6
- adds r1, r0
- lsls r1, 1
- lsls r0, r3, 1
- adds r0, r3
- lsls r0, 4
- adds r1, r0
- add r1, r8
- ldr r0, =gUnknown_0860A834
- add r0, r12
- ldr r0, [r0]
- ldrh r0, [r0]
- ldrh r2, [r1]
- adds r0, r2
- b _0817EA6A
- .pool
-_0817E978:
- lsls r1, r3, 4
- adds r1, r7, r1
- adds r0, r1, 0
- adds r0, 0x34
- ldrb r4, [r0]
- lsls r0, r4, 26
- lsrs r2, r0, 29
- adds r5, r1, 0
- adds r5, 0x3C
- ldrb r0, [r5]
- lsls r0, 26
- lsrs r0, 29
- cmn r2, r0
- beq _0817EA6C
- cmp r6, 0xD
- bne _0817EA6C
- cmp r2, 0
- beq _0817E9BE
- subs r1, r2, 0x1
- lsls r1, 2
- lsrs r0, r4, 6
- adds r1, r0
- lsls r1, 1
- lsls r0, r3, 1
- adds r0, r3
- lsls r0, 4
- adds r1, r0
- add r1, r8
- ldr r0, =gUnknown_0860A834
- add r0, r12
- ldr r0, [r0]
- ldrh r0, [r0]
- ldrh r2, [r1]
- adds r0, r2
- strh r0, [r1]
-_0817E9BE:
- ldrb r2, [r5]
- lsls r0, r2, 26
- lsrs r0, 29
- cmp r0, 0
- beq _0817EA6C
- subs r1, r0, 0x1
- lsls r1, 2
- lsrs r0, r2, 6
- adds r1, r0
- lsls r1, 1
- lsls r0, r3, 1
- adds r0, r3
- lsls r0, 4
- b _0817EA5A
- .pool
-_0817E9E0:
- cmp r6, 0x8
- bhi _0817EA6C
- cmp r5, 0
- beq _0817EA6C
- lsls r0, r3, 1
- adds r3, r0, r3
- lsls r0, r3, 2
- adds r2, r7, r0
- adds r0, r2, 0
- adds r0, 0x50
- ldrb r0, [r0]
- lsls r0, 26
- lsrs r0, 29
- cmp r0, 0
- beq _0817EA6C
- subs r1, r0, 0x1
- lsls r1, 2
- adds r0, r2, 0
- adds r0, 0x54
- ldrb r0, [r0]
- lsls r0, 28
- lsrs r0, 30
- adds r1, r0
- lsls r1, 1
- lsls r0, r3, 4
- adds r1, r0
- add r1, r8
- ldr r0, =gUnknown_0860A834
- add r0, r12
- ldr r0, [r0]
- ldrh r0, [r0]
- ldrh r2, [r1]
- adds r0, r2
- b _0817EA6A
- .pool
-_0817EA28:
- cmp r6, 0x8
- bls _0817EA6C
- cmp r5, 0
- beq _0817EA6C
- lsls r0, r3, 1
- adds r3, r0, r3
- lsls r0, r3, 2
- adds r2, r7, r0
- adds r0, r2, 0
- adds r0, 0x50
- ldrh r0, [r0]
- lsls r0, 23
- lsrs r0, 29
- cmp r0, 0
- beq _0817EA6C
- subs r1, r0, 0x1
- lsls r1, 2
- adds r0, r2, 0
- adds r0, 0x54
- ldrb r0, [r0]
- lsls r0, 26
- lsrs r0, 30
- adds r1, r0
- lsls r1, 1
- lsls r0, r3, 4
-_0817EA5A:
- adds r1, r0
- add r1, r8
- ldr r0, =gUnknown_0860A834
- add r0, r12
- ldr r0, [r0]
-_0817EA64:
- ldrh r0, [r0]
- ldrh r5, [r1]
- adds r0, r5
-_0817EA6A:
- strh r0, [r1]
-_0817EA6C:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_817E684
-
- thumb_func_start sub_817EA80
-sub_817EA80: @ 817EA80
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r0, =gBattleStruct
- ldr r0, [r0]
- movs r1, 0x81
- lsls r1, 2
- adds r5, r0, r1
- ldr r3, =gBattlerAttacker
- mov r8, r3
- ldrb r0, [r3]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, =gBattlerTarget
- ldrb r0, [r0]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r2, r0, 24
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r6, r5, r0
- adds r0, r6, 0
- adds r0, 0x57
- ldrb r0, [r0]
- lsrs r3, r0, 5
- lsls r0, 27
- lsrs r0, 28
- cmp r0, 0
- bne _0817EAC8
- b _0817EE50
-_0817EAC8:
- subs r0, 0x1
- cmp r0, 0xE
- bls _0817EAD0
- b _0817EEBC
-_0817EAD0:
- lsls r0, 2
- ldr r1, =_0817EAEC
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_0817EAEC:
- .4byte _0817EB28
- .4byte _0817EB54
- .4byte _0817EB80
- .4byte _0817EBD4
- .4byte _0817EBFE
- .4byte _0817EC26
- .4byte _0817EC4E
- .4byte _0817EC6C
- .4byte _0817EC9A
- .4byte _0817ECCC
- .4byte _0817ED54
- .4byte _0817ED82
- .4byte _0817EDC2
- .4byte _0817EE1C
- .4byte _0817EEBC
-_0817EB28:
- lsls r0, r3, 3
- lsls r1, r4, 4
- adds r0, r1
- adds r3, r5, r0
- adds r0, r3, 0
- adds r0, 0x30
- ldrb r0, [r0]
- lsls r0, 29
- lsrs r1, r0, 29
- cmp r1, 0
- bne _0817EB40
- b _0817EEBC
-_0817EB40:
- movs r0, 0x1
- adds r2, r4, 0
- eors r2, r0
- subs r1, 0x1
- lsls r1, 2
- adds r0, r3, 0
- adds r0, 0x32
- ldrb r3, [r0]
- lsls r3, 28
- b _0817EE84
-_0817EB54:
- lsls r0, r3, 3
- lsls r1, r4, 4
- adds r0, r1
- adds r3, r5, r0
- adds r0, r3, 0
- adds r0, 0x30
- ldrb r0, [r0]
- lsls r0, 26
- lsrs r1, r0, 29
- cmp r1, 0
- bne _0817EB6C
- b _0817EEBC
-_0817EB6C:
- movs r0, 0x1
- adds r2, r4, 0
- eors r2, r0
- subs r1, 0x1
- lsls r1, 2
- adds r0, r3, 0
- adds r0, 0x32
- ldrb r3, [r0]
- lsls r3, 26
- b _0817EE84
-_0817EB80:
- lsls r0, r3, 2
- lsls r1, r4, 1
- adds r1, r4
- lsls r1, 3
- adds r0, r1
- adds r5, r0
- ldrb r0, [r5]
- lsls r0, 29
- lsrs r1, r0, 29
- cmp r1, 0
- beq _0817EBB4
- movs r0, 0x1
- adds r2, r4, 0
- eors r2, r0
- subs r0, r1, 0x1
- lsls r0, 2
- ldrb r3, [r5, 0x2]
- lsls r3, 28
- lsrs r3, 30
- adds r3, r0
- lsls r3, 24
- lsrs r3, 24
- movs r0, 0x13
- movs r1, 0
- bl sub_817E684
-_0817EBB4:
- ldrb r0, [r5]
- lsls r0, 26
- lsrs r1, r0, 29
- cmp r1, 0
- bne _0817EBC0
- b _0817EEBC
-_0817EBC0:
- movs r0, 0x1
- adds r2, r4, 0
- eors r2, r0
- subs r0, r1, 0x1
- lsls r0, 2
- ldrb r3, [r5, 0x2]
- lsls r3, 26
- lsrs r3, 30
- adds r3, r0
- b _0817EE88
-_0817EBD4:
- lsls r0, r3, 2
- lsls r1, r4, 1
- adds r1, r4
- lsls r1, 3
- adds r0, r1
- adds r1, r5, r0
- ldrh r0, [r1]
- lsls r0, 23
- lsrs r3, r0, 29
- cmp r3, 0
- bne _0817EBEC
- b _0817EEBC
-_0817EBEC:
- movs r0, 0x1
- adds r2, r4, 0
- eors r2, r0
- subs r0, r3, 0x1
- lsls r0, 2
- ldrb r3, [r1, 0x2]
- lsrs r3, 6
- adds r3, r0
- b _0817EE88
-_0817EBFE:
- lsls r0, r3, 3
- lsls r1, r4, 4
- adds r0, r1
- adds r3, r5, r0
- ldrh r0, [r3, 0x30]
- lsls r0, 23
- lsrs r1, r0, 29
- cmp r1, 0
- bne _0817EC12
- b _0817EEBC
-_0817EC12:
- movs r0, 0x1
- adds r2, r4, 0
- eors r2, r0
- subs r1, 0x1
- lsls r1, 2
- adds r0, r3, 0
- adds r0, 0x32
- ldrb r3, [r0]
- lsrs r3, 6
- b _0817EE86
-_0817EC26:
- lsls r0, r3, 3
- lsls r1, r4, 4
- adds r0, r1
- adds r3, r5, r0
- adds r0, r3, 0
- adds r0, 0x31
- ldrb r0, [r0]
- lsls r0, 28
- lsrs r1, r0, 29
- cmp r1, 0
- bne _0817EC3E
- b _0817EEBC
-_0817EC3E:
- movs r0, 0x1
- adds r2, r4, 0
- eors r2, r0
- subs r1, 0x1
- lsls r1, 2
- adds r0, r3, 0
- adds r0, 0x33
- b _0817EE80
-_0817EC4E:
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r3, r5, r0
- adds r0, r3, 0
- adds r0, 0x50
- ldrb r0, [r0]
- lsls r0, 29
- lsrs r1, r0, 29
- cmp r1, 0
- bne _0817EC66
- b _0817EEBC
-_0817EC66:
- movs r0, 0x1
- adds r2, r4, 0
- b _0817EE76
-_0817EC6C:
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r3, r5, r0
- ldr r0, [r3, 0x50]
- lsls r0, 14
- lsrs r0, 29
- cmp r0, 0
- bne _0817EC80
- b _0817EEBC
-_0817EC80:
- adds r2, r4, 0
- subs r1, r0, 0x1
- lsls r1, 2
- adds r0, r3, 0
- adds r0, 0x55
- ldrb r3, [r0]
- lsls r3, 28
- lsrs r3, 30
- adds r3, r1
- lsls r3, 24
- lsrs r3, 24
- movs r0, 0x14
- b _0817EE8E
-_0817EC9A:
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r3, r5, r0
- adds r0, r3, 0
- adds r0, 0x52
- ldrb r0, [r0]
- lsls r0, 27
- lsrs r0, 29
- cmp r0, 0
- bne _0817ECB2
- b _0817EEBC
-_0817ECB2:
- adds r2, r4, 0
- subs r1, r0, 0x1
- lsls r1, 2
- adds r0, r3, 0
- adds r0, 0x55
- ldrb r3, [r0]
- lsls r3, 26
- lsrs r3, 30
- adds r3, r1
- lsls r3, 24
- lsrs r3, 24
- movs r0, 0x14
- b _0817EE8E
-_0817ECCC:
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r3, r5, r0
- adds r0, r3, 0
- adds r0, 0x58
- ldrb r0, [r0]
- lsls r0, 25
- cmp r0, 0
- bge _0817ED14
- adds r0, r3, 0
- adds r0, 0x52
- ldrb r0, [r0]
- lsrs r0, 5
- subs r6, r0, 0x1
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r0, [r0]
- cmp r6, r0
- beq _0817ED14
- adds r2, r4, 0
- lsls r1, r6, 2
- adds r0, r3, 0
- adds r0, 0x55
- ldrb r3, [r0]
- lsrs r3, 6
- adds r3, r1
- lsls r3, 24
- lsrs r3, 24
- movs r0, 0x13
- movs r1, 0
- bl sub_817E684
-_0817ED14:
- movs r1, 0x1
- eors r1, r4
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r1, r5, r0
- adds r0, r1, 0
- adds r0, 0x58
- ldrb r0, [r0]
- lsls r0, 25
- cmp r0, 0
- blt _0817ED2E
- b _0817EEBC
-_0817ED2E:
- movs r0, 0x1
- adds r2, r4, 0
- eors r2, r0
- adds r0, r1, 0
- adds r0, 0x52
- ldrb r0, [r0]
- lsrs r0, 5
- subs r0, 0x1
- lsls r0, 2
- adds r1, 0x55
- ldrb r3, [r1]
- lsrs r3, 6
- adds r3, r0
- b _0817EE88
- .pool
-_0817ED54:
- movs r0, 0x1
- eors r0, r4
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r1, r5, r1
- adds r1, 0x56
- ldrb r0, [r1]
- lsls r0, 25
- lsrs r5, r0, 29
- cmp r5, 0
- bne _0817ED6E
- b _0817EEBC
-_0817ED6E:
- movs r0, 0x1
- adds r2, r4, 0
- eors r2, r0
- subs r0, r5, 0x1
- lsls r0, 2
- ldrh r3, [r1]
- lsls r3, 23
- lsrs r3, 30
- adds r3, r0
- b _0817EE88
-_0817ED82:
- lsls r2, r4, 4
- movs r1, 0x1
- adds r0, r4, 0
- eors r0, r1
- lsls r6, r0, 24
- adds r0, r5, 0
- adds r0, 0x30
- adds r4, r2, r0
- movs r5, 0x1
-_0817ED94:
- ldr r0, [r4]
- lsls r0, 14
- lsrs r0, 29
- cmp r0, 0
- beq _0817EDB8
- subs r0, 0x1
- lsls r0, 2
- ldrb r3, [r4, 0x3]
- lsls r3, 26
- lsrs r3, 30
- adds r3, r0
- lsls r3, 24
- lsrs r3, 24
- movs r0, 0x13
- movs r1, 0
- lsrs r2, r6, 24
- bl sub_817E684
-_0817EDB8:
- adds r4, 0x8
- subs r5, 0x1
- cmp r5, 0
- bge _0817ED94
- b _0817EEBC
-_0817EDC2:
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 2
- adds r0, r5, r0
- adds r0, 0x58
- ldrb r3, [r0]
- lsls r0, r3, 31
- cmp r0, 0
- beq _0817EDF0
- adds r2, r4, 0
- lsls r0, r3, 26
- lsrs r0, 29
- subs r0, 0x1
- lsls r0, 2
- lsls r3, 29
- lsrs r3, 30
- adds r3, r0
- lsls r3, 24
- lsrs r3, 24
- movs r0, 0x13
- movs r1, 0
- bl sub_817E684
-_0817EDF0:
- movs r0, 0x1
- eors r0, r4
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r1, r5, r1
- adds r1, 0x58
- ldrb r1, [r1]
- lsls r0, r1, 31
- cmp r0, 0
- beq _0817EEBC
- movs r0, 0x1
- adds r2, r4, 0
- eors r2, r0
- lsls r0, r1, 26
- lsrs r0, 29
- subs r0, 0x1
- lsls r0, 2
- lsls r3, r1, 29
- lsrs r3, 30
- adds r3, r0
- b _0817EE88
-_0817EE1C:
- cmp r7, 0x1
- bne _0817EEBC
- adds r2, r4, 0
- ldr r1, =gBattlerPartyIndexes
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- lsls r1, 2
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r0, r5, r0
- adds r0, 0x53
- ldrb r3, [r0]
- lsrs r3, 6
- adds r3, r1
- lsls r3, 24
- lsrs r3, 24
- movs r0, 0x14
- b _0817EE8E
- .pool
-_0817EE50:
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r3, r5, r0
- adds r0, r3, 0
- adds r0, 0x57
- ldrb r0, [r0]
- lsls r0, 27
- lsrs r0, 28
- cmp r0, 0x7
- bne _0817EE96
- adds r0, r3, 0
- adds r0, 0x50
- ldrb r0, [r0]
- lsls r0, 29
- lsrs r1, r0, 29
- cmp r1, 0
- beq _0817EEBC
- movs r0, 0x1
-_0817EE76:
- eors r2, r0
- subs r1, 0x1
- lsls r1, 2
- adds r0, r3, 0
- adds r0, 0x54
-_0817EE80:
- ldrb r3, [r0]
- lsls r3, 30
-_0817EE84:
- lsrs r3, 30
-_0817EE86:
- adds r3, r1
-_0817EE88:
- lsls r3, 24
- lsrs r3, 24
- movs r0, 0x13
-_0817EE8E:
- movs r1, 0
- bl sub_817E684
- b _0817EEBC
-_0817EE96:
- adds r2, r4, 0
- ldr r1, =gBattlerPartyIndexes
- mov r3, r8
- ldrb r0, [r3]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- lsls r1, 2
- adds r0, r6, 0
- adds r0, 0x53
- ldrb r3, [r0]
- lsrs r3, 6
- adds r3, r1
- lsls r3, 24
- lsrs r3, 24
- movs r0, 0x14
- movs r1, 0
- bl sub_817E684
-_0817EEBC:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_817EA80
-
- thumb_func_start sub_817EECC
-sub_817EECC: @ 817EECC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x28
- ldr r7, =gBattleTypeFlags
- ldr r0, [r7]
- ldr r1, =0x02000003
- ands r0, r1
- cmp r0, 0
- beq _0817EEE6
- b _0817F1FA
-_0817EEE6:
- ldr r4, =gBattlerAttacker
- ldrb r0, [r4]
- bl GetBattlerSide
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0817EEF8
- b _0817F1FA
-_0817EEF8:
- ldr r5, =gBattleMons
- ldrb r4, [r4]
- movs r1, 0x58
- adds r6, r4, 0
- muls r6, r1
- adds r0, r6, r5
- ldrb r0, [r0, 0x1E]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0x5
- bgt _0817EF10
- b _0817F1FA
-_0817EF10:
- ldr r0, =gBattlerTarget
- ldrb r0, [r0]
- muls r0, r1
- adds r0, r5
- ldrb r0, [r0, 0x1F]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0x6
- ble _0817EF24
- b _0817F1FA
-_0817EF24:
- ldr r0, =gCurrentMove
- ldrh r1, [r0]
- cmp r1, 0xED
- bne _0817EF2E
- b _0817F1FA
-_0817EF2E:
- ldr r0, =0x00000137
- cmp r1, r0
- bne _0817EF36
- b _0817F1FA
-_0817EF36:
- ldr r0, [r7]
- movs r1, 0xC8
- lsls r1, 14
- ands r0, r1
- cmp r0, 0
- beq _0817EF44
- b _0817F1FA
-_0817EF44:
- ldr r3, =gBattleMoves
- ldr r2, =gMoveSelectionCursor
- adds r0, r4, r2
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r6
- adds r1, r5, 0
- adds r1, 0xC
- adds r0, r1
- ldrh r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- ldrb r0, [r0, 0x1]
- adds r6, r2, 0
- cmp r0, 0
- bne _0817EF6A
- b _0817F1FA
-_0817EF6A:
- movs r5, 0
- str r1, [sp, 0x24]
- ldr r1, =gUnknown_0860A4AC
- ldr r4, =0x0000ffff
- adds r3, r1, 0
- adds r2, r1, 0
-_0817EF76:
- ldr r0, [sp, 0x24]
- ldrh r7, [r2]
- cmp r0, r7
- beq _0817EF8A
- adds r3, 0x2
- adds r2, 0x2
- adds r5, 0x1
- ldrh r0, [r3]
- cmp r0, r4
- bne _0817EF76
-_0817EF8A:
- lsls r0, r5, 1
- adds r0, r1
- ldrh r1, [r0]
- ldr r0, =0x0000ffff
- cmp r1, r0
- beq _0817EF98
- b _0817F1FA
-_0817EF98:
- ldr r2, =gBattlerAttacker
- ldrb r0, [r2]
- adds r0, r6
- ldrb r0, [r0]
- lsls r0, 2
- mov r1, sp
- adds r1, r0
- adds r1, 0x10
- ldr r0, =gBattleMoveDamage
- ldr r0, [r0]
- str r0, [r1]
- ldr r0, =gCurrentMove
- ldrh r1, [r0]
- str r1, [sp, 0x24]
- movs r5, 0
- add r3, sp, 0x20
- mov r10, r3
- mov r8, r0
- add r7, sp, 0x10
- ldr r4, =gBattlerTarget
- mov r9, r4
-_0817EFC2:
- lsls r1, r5, 1
- ldr r6, =gBattlerAttacker
- ldrb r0, [r6]
- movs r2, 0x58
- muls r0, r2
- adds r1, r0
- ldr r0, =gBattleMons
- adds r0, 0xC
- adds r1, r0
- ldrh r0, [r1]
- mov r3, r8
- strh r0, [r3]
- movs r6, 0
- mov r4, r10
- strh r6, [r4]
- ldrh r0, [r3]
- adds r1, r7, 0
- mov r2, r10
- bl sub_817F21C
- lsls r0, 24
- cmp r0, 0
- beq _0817F0B4
- ldr r4, =gSideStatuses
- mov r1, r9
- ldrb r0, [r1]
- bl GetBattlerPosition
- movs r1, 0x1
- ands r1, r0
- lsls r1, 1
- adds r1, r4
- ldrh r3, [r1]
- ldr r2, =gBattlerAttacker
- ldrb r0, [r2]
- movs r4, 0x58
- muls r0, r4
- ldr r6, =gBattleMons
- adds r0, r6
- mov r2, r9
- ldrb r1, [r2]
- muls r1, r4
- adds r1, r6
- mov r4, r8
- ldrh r2, [r4]
- mov r6, r10
- ldrh r4, [r6]
- str r4, [sp]
- movs r4, 0
- str r4, [sp, 0x4]
- ldr r6, =gBattlerAttacker
- ldrb r4, [r6]
- str r4, [sp, 0x8]
- mov r6, r9
- ldrb r4, [r6]
- str r4, [sp, 0xC]
- bl CalculateBaseDamage
- adds r3, r0, 0
- ldr r4, =gBattleMoveDamage
- str r3, [r4]
- ldr r1, =gStatuses3
- ldr r2, =gBattlerAttacker
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 2
- ands r0, r1
- cmp r0, 0
- beq _0817F06A
- ldr r2, =gBattleMoves
- mov r6, r8
- ldrh r1, [r6]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x2]
- cmp r0, 0xD
- bne _0817F06A
- lsls r0, r3, 1
- str r0, [r4]
-_0817F06A:
- ldr r0, =gProtectStructs
- ldr r6, =gBattlerAttacker
- ldrb r1, [r6]
- lsls r1, 4
- adds r1, r0
- ldrb r0, [r1]
- lsls r0, 28
- cmp r0, 0
- bge _0817F08C
- ldr r4, =gBattleMoveDamage
- ldr r1, [r4]
- lsls r0, r1, 4
- subs r0, r1
- movs r1, 0xA
- bl __divsi3
- str r0, [r4]
-_0817F08C:
- mov r1, r8
- ldrh r0, [r1]
- ldrb r1, [r6]
- mov r3, r9
- ldrb r2, [r3]
- bl TypeCalc
- lsls r0, 24
- lsrs r1, r0, 24
- ldr r0, =gBattleMoveDamage
- ldr r0, [r0]
- str r0, [r7]
- cmp r0, 0
- bne _0817F0B4
- movs r0, 0x29
- ands r0, r1
- cmp r0, 0
- bne _0817F0B4
- movs r0, 0x1
- str r0, [r7]
-_0817F0B4:
- adds r7, 0x4
- adds r5, 0x1
- cmp r5, 0x3
- ble _0817EFC2
- movs r5, 0
- ldr r3, =gBattlerAttacker
- ldr r6, =gMoveSelectionCursor
- ldr r4, =gBattlerPartyIndexes
- mov r8, r4
- movs r7, 0x64
- mov r9, r7
- mov r10, r6
-_0817F0CC:
- ldrb r0, [r3]
- adds r0, r6
- ldrb r2, [r0]
- cmp r5, r2
- bne _0817F0D8
- b _0817F1D4
-_0817F0D8:
- lsls r0, r5, 2
- mov r1, sp
- adds r1, r0
- adds r1, 0x10
- lsls r0, r2, 2
- add r0, sp
- adds r0, 0x10
- ldr r1, [r1]
- ldr r0, [r0]
- cmp r1, r0
- ble _0817F1D4
- movs r7, 0x1
- cmp r2, 0
- beq _0817F0F6
- movs r7, 0
-_0817F0F6:
- movs r5, 0
- ldr r4, =gBattlerTarget
- ldr r6, =gEnemyParty
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- add r0, r10
- ldrb r3, [r0]
- add r2, sp, 0x10
-_0817F106:
- cmp r5, r3
- beq _0817F11A
- lsls r0, r7, 2
- add r0, sp
- adds r0, 0x10
- ldr r1, [r2]
- ldr r0, [r0]
- cmp r1, r0
- ble _0817F11A
- adds r7, r5, 0
-_0817F11A:
- adds r2, 0x4
- adds r5, 0x1
- cmp r5, 0x3
- ble _0817F106
- ldrb r0, [r4]
- lsls r0, 1
- add r0, r8
- ldrh r0, [r0]
- mov r1, r9
- muls r1, r0
- adds r0, r1, 0
- adds r0, r6
- movs r1, 0xB
- movs r2, 0
- bl GetMonData
- adds r6, r0, 0
- lsls r6, 16
- lsrs r6, 16
- ldr r2, =gBattlerAttacker
- ldrb r0, [r2]
- lsls r0, 1
- add r0, r8
- ldrh r0, [r0]
- mov r3, r9
- muls r3, r0
- adds r0, r3, 0
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0xB
- movs r2, 0
- bl GetMonData
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- ldr r4, =gBattlerAttacker
- ldrb r3, [r4]
- mov r2, r10
- adds r0, r3, r2
- ldrb r2, [r0]
- movs r0, 0x58
- adds r4, r3, 0
- muls r4, r0
- ldr r5, =gBattleMons + 0xC
- adds r3, r4, r5
- lsls r0, r7, 1
- adds r0, r4
- adds r0, r5
- ldrh r0, [r0]
- str r0, [sp]
- adds r0, r6, 0
- bl sub_80EE35C
- b _0817F1DC
- .pool
-_0817F1D4:
- adds r5, 0x1
- cmp r5, 0x3
- bgt _0817F1DC
- b _0817F0CC
-_0817F1DC:
- ldr r2, =gBattleMoveDamage
- ldr r1, =gMoveSelectionCursor
- ldr r0, =gBattlerAttacker
- ldrb r0, [r0]
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 2
- add r0, sp
- adds r0, 0x10
- ldr r0, [r0]
- str r0, [r2]
- ldr r0, =gCurrentMove
- mov r3, sp
- ldrh r3, [r3, 0x24]
- strh r3, [r0]
-_0817F1FA:
- add sp, 0x28
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_817EECC
-
- thumb_func_start sub_817F21C
-sub_817F21C: @ 817F21C
- push {r4-r7,lr}
- adds r6, r1, 0
- mov r12, r2
- lsls r0, 16
- lsrs r2, r0, 16
- ldr r1, =gBattleMoves
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r0, r1
- ldrb r0, [r0, 0x1]
- cmp r0, 0
- beq _0817F286
- movs r4, 0
- ldr r5, =gUnknown_0860A4AC
- ldr r7, =0x0000ffff
- adds r3, r5, 0
- adds r1, r5, 0
-_0817F240:
- ldrh r0, [r1]
- cmp r2, r0
- beq _0817F252
- adds r3, 0x2
- adds r1, 0x2
- adds r4, 0x1
- ldrh r0, [r3]
- cmp r0, r7
- bne _0817F240
-_0817F252:
- lsls r0, r4, 1
- adds r0, r5
- ldrh r1, [r0]
- ldr r0, =0x0000ffff
- cmp r1, r0
- beq _0817F270
- movs r0, 0
- str r0, [r6]
- b _0817F2A0
- .pool
-_0817F270:
- cmp r2, 0x95
- bne _0817F294
- ldr r2, =gBattleMons
- ldr r0, =gBattlerAttacker
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- adds r0, 0x2A
- ldrb r0, [r0]
- asrs r0, 1
-_0817F286:
- str r0, [r6]
- movs r0, 0
- b _0817F2A0
- .pool
-_0817F294:
- cmp r2, 0xDE
- bne _0817F29E
- movs r0, 0xA
- mov r1, r12
- strh r0, [r1]
-_0817F29E:
- movs r0, 0x1
-_0817F2A0:
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_817F21C
-
- thumb_func_start sub_817F2A8
-sub_817F2A8: @ 817F2A8
- push {r4,r5,lr}
- ldr r0, =gBattleTypeFlags
- ldr r0, [r0]
- movs r1, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0817F324
- ldr r0, =gBattleStruct
- ldr r3, [r0]
- ldr r0, =0x0000025b
- adds r4, r3, r0
- ldrb r2, [r4]
- subs r1, 0x21
- adds r0, r1, 0
- ands r0, r2
- strb r0, [r4]
- ldr r0, =0x00000267
- adds r2, r3, r0
- ldrb r0, [r2]
- ands r1, r0
- strb r1, [r2]
- ldrb r5, [r4]
- movs r1, 0x1F
- adds r0, r1, 0
- ands r0, r5
- strb r0, [r4]
- ldrb r0, [r2]
- ands r1, r0
- strb r1, [r2]
- movs r0, 0x97
- lsls r0, 2
- adds r4, r3, r0
- ldrb r2, [r4]
- movs r1, 0x39
- negs r1, r1
- adds r0, r1, 0
- ands r0, r2
- strb r0, [r4]
- movs r0, 0x9A
- lsls r0, 2
- adds r3, r0
- ldrb r0, [r3]
- ands r1, r0
- strb r1, [r3]
- ldrb r2, [r4]
- movs r1, 0x7
- negs r1, r1
- adds r0, r1, 0
- ands r0, r2
- strb r0, [r4]
- ldrb r0, [r3]
- ands r1, r0
- strb r1, [r3]
- ldrb r2, [r4]
- movs r1, 0x2
- negs r1, r1
- adds r0, r1, 0
- ands r0, r2
- strb r0, [r4]
- ldrb r0, [r3]
- ands r1, r0
- strb r1, [r3]
-_0817F324:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_817F2A8
-
- thumb_func_start GetBattlerMoveSlotId
-GetBattlerMoveSlotId: @ 817F33C
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r1, 16
- lsrs r7, r1, 16
- adds r0, r5, 0
- bl GetBattlerSide
- lsls r0, 24
- ldr r6, =gEnemyParty
- cmp r0, 0
- bne _0817F356
- ldr r6, =gPlayerParty
-_0817F356:
- movs r4, 0
- ldr r1, =gBattlerPartyIndexes
- lsls r0, r5, 1
- adds r5, r0, r1
- b _0817F36E
- .pool
-_0817F36C:
- adds r4, 0x1
-_0817F36E:
- cmp r4, 0x3
- bgt _0817F388
- ldrh r1, [r5]
- movs r0, 0x64
- muls r0, r1
- adds r0, r6, r0
- adds r1, r4, 0
- adds r1, 0xD
- movs r2, 0
- bl GetMonData
- cmp r0, r7
- bne _0817F36C
-_0817F388:
- lsls r0, r4, 24
- lsrs r0, 24
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end GetBattlerMoveSlotId
-
- thumb_func_start sub_817F394
-sub_817F394: @ 817F394
- push {r4-r6,lr}
- lsls r0, 16
- lsrs r3, r0, 16
- adds r4, r3, 0
- lsls r1, 16
- lsrs r1, 16
- adds r6, r1, 0
- lsls r2, 24
- lsrs r2, 24
- adds r5, r2, 0
- movs r0, 0x7
- ands r0, r3
- cmp r0, 0
- beq _0817F3B4
- movs r0, 0x3
- b _0817F3CA
-_0817F3B4:
- movs r0, 0x60
- ands r0, r3
- cmp r0, 0
- beq _0817F3C0
- movs r0, 0x4
- b _0817F3CA
-_0817F3C0:
- movs r0, 0x18
- ands r0, r3
- cmp r0, 0
- beq _0817F3D2
- movs r0, 0x5
-_0817F3CA:
- movs r3, 0
- bl sub_817E684
- b _0817F3E6
-_0817F3D2:
- movs r0, 0x80
- ands r4, r0
- cmp r4, 0
- beq _0817F3E6
- movs r0, 0x6
- adds r1, r6, 0
- adds r2, r5, 0
- movs r3, 0
- bl sub_817E684
-_0817F3E6:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_817F394
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/battle_records.s b/asm/battle_records.s
deleted file mode 100644
index f688144d9..000000000
--- a/asm/battle_records.s
+++ /dev/null
@@ -1,1285 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_813BF94
-sub_813BF94: @ 813BF94
- push {r4,lr}
- sub sp, 0x4
- adds r4, r0, 0
- mov r1, sp
- movs r0, 0
- strh r0, [r1]
- ldr r2, =0x01000008
- mov r0, sp
- adds r1, r4, 0
- bl CpuSet
- movs r0, 0xFF
- strb r0, [r4]
- movs r0, 0
- strh r0, [r4, 0x8]
- strh r0, [r4, 0xA]
- strh r0, [r4, 0xC]
- strh r0, [r4, 0xE]
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_813BF94
-
- thumb_func_start sub_813BFC4
-sub_813BFC4: @ 813BFC4
- push {r4,r5,lr}
- adds r4, r0, 0
- movs r5, 0x4
-_0813BFCA:
- adds r0, r4, 0
- bl sub_813BF94
- adds r4, 0x10
- subs r5, 0x1
- cmp r5, 0
- bge _0813BFCA
- movs r0, 0x17
- movs r1, 0
- bl sav12_xor_set
- movs r0, 0x18
- movs r1, 0
- bl sav12_xor_set
- movs r0, 0x19
- movs r1, 0
- bl sav12_xor_set
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_813BFC4
-
- thumb_func_start sub_813BFF8
-sub_813BFF8: @ 813BFF8
- adds r1, r0, 0
- ldrh r0, [r1, 0xA]
- ldrh r2, [r1, 0xC]
- adds r0, r2
- ldrh r1, [r1, 0xE]
- adds r0, r1
- bx lr
- thumb_func_end sub_813BFF8
-
- thumb_func_start sub_813C008
-sub_813C008: @ 813C008
- push {r4-r7,lr}
- adds r7, r1, 0
- lsls r2, 16
- lsrs r6, r2, 16
- movs r5, 0
- adds r4, r0, 0
-_0813C014:
- adds r0, r4, 0
- adds r1, r7, 0
- movs r2, 0x7
- bl StringCompareN
- cmp r0, 0
- bne _0813C02C
- ldrh r0, [r4, 0x8]
- cmp r0, r6
- bne _0813C02C
- adds r0, r5, 0
- b _0813C036
-_0813C02C:
- adds r4, 0x10
- adds r5, 0x1
- cmp r5, 0x4
- ble _0813C014
- movs r0, 0x5
-_0813C036:
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_813C008
-
- thumb_func_start sub_813C03C
-sub_813C03C: @ 813C03C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x18
- mov r10, r0
- movs r1, 0x4
-_0813C04C:
- subs r3, r1, 0x1
- adds r6, r3, 0
- cmp r3, 0
- blt _0813C0BA
- lsls r0, r1, 4
- add r0, r10
- str r0, [sp, 0x14]
- lsls r0, r3, 4
- mov r2, r10
- adds r5, r0, r2
- movs r4, 0x50
- add r4, r10
- mov r9, r4
- add r1, r9
- mov r8, r1
-_0813C06A:
- ldr r0, [sp, 0x14]
- str r3, [sp, 0x10]
- bl sub_813BFF8
- adds r4, r0, 0
- adds r0, r5, 0
- bl sub_813BFF8
- ldr r3, [sp, 0x10]
- cmp r4, r0
- ble _0813C0B2
- mov r1, sp
- ldr r0, [sp, 0x14]
- ldm r0!, {r2,r4,r7}
- stm r1!, {r2,r4,r7}
- ldr r0, [r0]
- str r0, [r1]
- ldr r1, [sp, 0x14]
- adds r0, r5, 0
- ldm r0!, {r2,r4,r7}
- stm r1!, {r2,r4,r7}
- ldr r0, [r0]
- str r0, [r1]
- adds r1, r5, 0
- mov r0, sp
- ldm r0!, {r2,r4,r7}
- stm r1!, {r2,r4,r7}
- ldr r0, [r0]
- str r0, [r1]
- mov r7, r8
- ldrb r2, [r7]
- mov r0, r9
- adds r1, r0, r6
- ldrb r0, [r1]
- strb r0, [r7]
- strb r2, [r1]
-_0813C0B2:
- subs r5, 0x10
- subs r6, 0x1
- cmp r6, 0
- bge _0813C06A
-_0813C0BA:
- adds r1, r3, 0
- cmp r1, 0
- bgt _0813C04C
- 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_813C03C
-
- thumb_func_start sub_813C0D0
-sub_813C0D0: @ 813C0D0
- push {lr}
- adds r2, r0, 0
- cmp r1, 0x2
- beq _0813C100
- cmp r1, 0x2
- bgt _0813C0E2
- cmp r1, 0x1
- beq _0813C0E8
- b _0813C12A
-_0813C0E2:
- cmp r1, 0x3
- beq _0813C118
- b _0813C12A
-_0813C0E8:
- ldrh r0, [r2, 0xA]
- adds r0, 0x1
- strh r0, [r2, 0xA]
- lsls r0, 16
- lsrs r0, 16
- ldr r1, =0x0000270f
- cmp r0, r1
- bls _0813C12A
- strh r1, [r2, 0xA]
- b _0813C12A
- .pool
-_0813C100:
- ldrh r0, [r2, 0xC]
- adds r0, 0x1
- strh r0, [r2, 0xC]
- lsls r0, 16
- lsrs r0, 16
- ldr r1, =0x0000270f
- cmp r0, r1
- bls _0813C12A
- strh r1, [r2, 0xC]
- b _0813C12A
- .pool
-_0813C118:
- ldrh r0, [r2, 0xE]
- adds r0, 0x1
- strh r0, [r2, 0xE]
- lsls r0, 16
- lsrs r0, 16
- ldr r1, =0x0000270f
- cmp r0, r1
- bls _0813C12A
- strh r1, [r2, 0xE]
-_0813C12A:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_813C0D0
-
- thumb_func_start sub_813C134
-sub_813C134: @ 813C134
- push {r4,lr}
- cmp r0, 0x2
- beq _0813C14E
- cmp r0, 0x2
- bgt _0813C144
- cmp r0, 0x1
- beq _0813C14A
- b _0813C166
-_0813C144:
- cmp r0, 0x3
- beq _0813C152
- b _0813C166
-_0813C14A:
- movs r4, 0x17
- b _0813C154
-_0813C14E:
- movs r4, 0x18
- b _0813C154
-_0813C152:
- movs r4, 0x19
-_0813C154:
- adds r0, r4, 0
- bl GetGameStat
- ldr r1, =0x0000270e
- cmp r0, r1
- bhi _0813C166
- adds r0, r4, 0
- bl IncrementGameStat
-_0813C166:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_813C134
-
- thumb_func_start sub_813C170
-sub_813C170: @ 813C170
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- adds r6, r0, 0
- mov r8, r1
- mov r10, r3
- ldr r0, [sp, 0x20]
- lsls r2, 16
- lsrs r7, r2, 16
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- mov r0, r10
- bl sub_813C134
- adds r0, r6, 0
- bl sub_813C03C
- adds r0, r6, 0
- mov r1, r8
- adds r2, r7, 0
- bl sub_813C008
- adds r5, r0, 0
- cmp r5, 0x5
- bne _0813C1D4
- movs r5, 0x4
- adds r4, r6, 0
- adds r4, 0x40
- adds r0, r4, 0
- bl sub_813BF94
- adds r0, r4, 0
- mov r1, r8
- movs r2, 0x7
- bl StringCopyN
- strh r7, [r4, 0x8]
- adds r2, r6, 0
- adds r2, 0x54
- ldr r1, =gLinkPlayers
- mov r3, r9
- lsls r0, r3, 3
- subs r0, r3
- lsls r0, 2
- adds r0, r1
- ldrh r0, [r0, 0x1A]
- strb r0, [r2]
-_0813C1D4:
- lsls r0, r5, 4
- adds r0, r6, r0
- mov r1, r10
- bl sub_813C0D0
- adds r0, r6, 0
- bl sub_813C03C
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_813C170
-
- thumb_func_start InitLinkBattleRecords
-InitLinkBattleRecords: @ 813C1F8
- push {lr}
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r1, =0x00003150
- adds r0, r1
- bl sub_813BFC4
- pop {r0}
- bx r0
- .pool
- thumb_func_end InitLinkBattleRecords
-
- thumb_func_start sub_813C214
-sub_813C214: @ 813C214
- push {lr}
- movs r1, 0x64
- muls r1, r0
- ldr r0, =gUnknown_02039B6C
- adds r1, r0
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
- lsls r0, 16
- lsrs r0, 16
- ldr r2, =0x0000270f
- cmp r0, r2
- bls _0813C230
- strh r2, [r1]
-_0813C230:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_813C214
-
- thumb_func_start sub_813C23C
-sub_813C23C: @ 813C23C
- push {lr}
- movs r1, 0x64
- muls r1, r0
- ldr r0, =gUnknown_02039B6E
- adds r1, r0
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
- lsls r0, 16
- lsrs r0, 16
- ldr r2, =0x0000270f
- cmp r0, r2
- bls _0813C258
- strh r2, [r1]
-_0813C258:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_813C23C
-
- thumb_func_start sub_813C264
-sub_813C264: @ 813C264
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, =gBattleOutcome
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _0813C27C
- cmp r0, 0x2
- beq _0813C28A
- b _0813C298
- .pool
-_0813C27C:
- eors r0, r4
- bl sub_813C214
- adds r0, r4, 0
- bl sub_813C23C
- b _0813C298
-_0813C28A:
- movs r0, 0x1
- eors r0, r4
- bl sub_813C23C
- adds r0, r4, 0
- bl sub_813C214
-_0813C298:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_813C264
-
- thumb_func_start sub_813C2A0
-sub_813C2A0: @ 813C2A0
- push {r4,lr}
- sub sp, 0x4
- adds r4, r0, 0
- bl InUnionRoom
- cmp r0, 0x1
- beq _0813C2DA
- adds r0, r4, 0
- bl sub_813C264
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r1, =0x00003150
- adds r0, r1
- movs r1, 0x64
- adds r3, r4, 0
- muls r3, r1
- ldr r2, =gUnknown_02039B88
- adds r1, r3, r2
- subs r2, 0x30
- adds r3, r2
- ldrh r2, [r3, 0xE]
- ldr r3, =gBattleOutcome
- ldrb r3, [r3]
- lsls r4, 24
- lsrs r4, 24
- str r4, [sp]
- bl sub_813C170
-_0813C2DA:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_813C2A0
-
- thumb_func_start sub_813C2F4
-sub_813C2F4: @ 813C2F4
- push {r4,lr}
- sub sp, 0xC
- ldr r4, =gStringVar1
- movs r0, 0x17
- bl GetGameStat
- adds r1, r0, 0
- adds r0, r4, 0
- movs r2, 0
- movs r3, 0x4
- bl ConvertIntToDecimalStringN
- ldr r4, =gStringVar2
- movs r0, 0x18
- bl GetGameStat
- adds r1, r0, 0
- adds r0, r4, 0
- movs r2, 0
- movs r3, 0x4
- bl ConvertIntToDecimalStringN
- ldr r4, =gStringVar3
- movs r0, 0x19
- bl GetGameStat
- adds r1, r0, 0
- adds r0, r4, 0
- movs r2, 0
- movs r3, 0x4
- bl ConvertIntToDecimalStringN
- ldr r4, =gStringVar4
- ldr r1, =gText_TotalRecordWLD
- adds r0, r4, 0
- bl StringExpandPlaceholders
- movs r0, 0x1
- adds r1, r4, 0
- movs r2, 0xD0
- bl GetStringCenterAlignXOffset
- adds r3, r0, 0
- ldr r0, =gResultsWindowId
- ldrb r0, [r0]
- lsls r3, 24
- lsrs r3, 24
- movs r1, 0x11
- str r1, [sp]
- movs r1, 0
- str r1, [sp, 0x4]
- str r1, [sp, 0x8]
- movs r1, 0x1
- adds r2, r4, 0
- bl PrintTextOnWindow
- add sp, 0xC
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_813C2F4
-
- thumb_func_start sub_813C384
-sub_813C384: @ 813C384
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0xC
- adds r6, r0, 0
- adds r5, r2, 0
- lsls r1, 24
- lsrs r4, r1, 24
- ldrh r0, [r6, 0xA]
- cmp r0, 0
- bne _0813C40C
- ldr r7, [r6, 0xC]
- cmp r7, 0
- bne _0813C40C
- ldr r0, =gResultsWindowId
- mov r8, r0
- ldrb r0, [r0]
- ldr r2, =gUnknown_085B3D84
- lsls r4, 3
- adds r4, 0x1
- lsls r4, 24
- lsrs r4, 24
- str r4, [sp]
- str r7, [sp, 0x4]
- str r7, [sp, 0x8]
- movs r1, 0x1
- movs r3, 0x8
- bl PrintTextOnWindow
- mov r1, r8
- ldrb r0, [r1]
- ldr r5, =gUnknown_085B3D8C
- str r4, [sp]
- str r7, [sp, 0x4]
- str r7, [sp, 0x8]
- movs r1, 0x1
- adds r2, r5, 0
- movs r3, 0x50
- bl PrintTextOnWindow
- mov r1, r8
- ldrb r0, [r1]
- str r4, [sp]
- str r7, [sp, 0x4]
- str r7, [sp, 0x8]
- movs r1, 0x1
- adds r2, r5, 0
- movs r3, 0x80
- bl PrintTextOnWindow
- mov r1, r8
- ldrb r0, [r1]
- str r4, [sp]
- str r7, [sp, 0x4]
- str r7, [sp, 0x8]
- movs r1, 0x1
- adds r2, r5, 0
- movs r3, 0xB0
- bl PrintTextOnWindow
- b _0813C4A8
- .pool
-_0813C40C:
- ldr r0, =gStringVar1
- movs r1, 0x8
- bl StringFillWithTerminator
- ldr r0, =gStringVar1
- adds r1, r6, 0
- movs r2, 0x7
- bl StringCopyN
- lsls r1, r5, 24
- lsrs r1, 24
- ldr r0, =gStringVar1
- bl ConvertInternationalString
- ldr r0, =gResultsWindowId
- mov r8, r0
- ldrb r0, [r0]
- lsls r4, 3
- adds r4, 0x1
- lsls r4, 24
- lsrs r4, 24
- str r4, [sp]
- movs r5, 0
- str r5, [sp, 0x4]
- str r5, [sp, 0x8]
- movs r1, 0x1
- ldr r2, =gStringVar1
- movs r3, 0x8
- bl PrintTextOnWindow
- ldrh r1, [r6, 0xA]
- ldr r0, =gStringVar1
- movs r2, 0x1
- movs r3, 0x4
- bl ConvertIntToDecimalStringN
- mov r1, r8
- ldrb r0, [r1]
- str r4, [sp]
- str r5, [sp, 0x4]
- str r5, [sp, 0x8]
- movs r1, 0x1
- ldr r2, =gStringVar1
- movs r3, 0x50
- bl PrintTextOnWindow
- ldrh r1, [r6, 0xC]
- ldr r0, =gStringVar1
- movs r2, 0x1
- movs r3, 0x4
- bl ConvertIntToDecimalStringN
- mov r1, r8
- ldrb r0, [r1]
- str r4, [sp]
- str r5, [sp, 0x4]
- str r5, [sp, 0x8]
- movs r1, 0x1
- ldr r2, =gStringVar1
- movs r3, 0x80
- bl PrintTextOnWindow
- ldrh r1, [r6, 0xE]
- ldr r0, =gStringVar1
- movs r2, 0x1
- movs r3, 0x4
- bl ConvertIntToDecimalStringN
- mov r1, r8
- ldrb r0, [r1]
- str r4, [sp]
- str r5, [sp, 0x4]
- str r5, [sp, 0x8]
- movs r1, 0x1
- ldr r2, =gStringVar1
- movs r3, 0xB0
- bl PrintTextOnWindow
-_0813C4A8:
- add sp, 0xC
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_813C384
-
- thumb_func_start sub_813C4BC
-sub_813C4BC: @ 813C4BC
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0xC
- ldr r6, =gResultsWindowId
- ldr r0, =gUnknown_085B3D7C
- bl AddWindow
- strb r0, [r6]
- ldrb r0, [r6]
- movs r1, 0
- bl NewMenuHelpers_DrawStdWindowFrame
- ldrb r0, [r6]
- movs r1, 0x11
- bl FillWindowPixelBuffer
- ldr r5, =gStringVar4
- ldr r1, =gText_PlayersBattleResults
- adds r0, r5, 0
- bl StringExpandPlaceholders
- movs r0, 0x1
- adds r1, r5, 0
- movs r2, 0xD0
- bl GetStringCenterAlignXOffset
- adds r3, r0, 0
- ldrb r0, [r6]
- lsls r3, 24
- lsrs r3, 24
- movs r1, 0x1
- str r1, [sp]
- movs r4, 0
- str r4, [sp, 0x4]
- str r4, [sp, 0x8]
- adds r2, r5, 0
- bl PrintTextOnWindow
- ldr r0, =gSaveBlock1Ptr
- mov r8, r0
- ldr r0, [r0]
- ldr r1, =0x00003150
- mov r9, r1
- add r0, r9
- bl sub_813C2F4
- ldr r1, =gText_WinLoseDraw
- adds r0, r5, 0
- bl StringExpandPlaceholders
- ldrb r0, [r6]
- movs r1, 0x29
- str r1, [sp]
- str r4, [sp, 0x4]
- str r4, [sp, 0x8]
- movs r1, 0x1
- adds r2, r5, 0
- movs r3, 0
- bl PrintTextOnWindow
- mov r7, r8
- movs r6, 0xE0
- lsls r6, 19
- mov r5, r9
-_0813C540:
- ldr r2, [r7]
- adds r0, r2, r5
- lsrs r1, r6, 24
- ldr r3, =0x000031a0
- adds r2, r3
- adds r2, r4
- ldrb r2, [r2]
- bl sub_813C384
- movs r0, 0x80
- lsls r0, 18
- adds r6, r0
- adds r5, 0x10
- adds r4, 0x1
- cmp r4, 0x4
- ble _0813C540
- ldr r4, =gResultsWindowId
- ldrb r0, [r4]
- bl PutWindowTilemap
- ldrb r0, [r4]
- movs r1, 0x3
- bl CopyWindowToVram
- add sp, 0xC
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_813C4BC
-
- thumb_func_start sub_813C5A0
-sub_813C5A0: @ 813C5A0
- push {r4,lr}
- ldr r4, =gResultsWindowId
- ldrb r0, [r4]
- movs r1, 0
- bl sub_819746C
- ldrb r0, [r4]
- bl RemoveWindow
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_813C5A0
-
- thumb_func_start sub_813C5BC
-sub_813C5BC: @ 813C5BC
- push {lr}
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0813C5DC
- ldr r0, =gTasks
- lsls r1, r2, 2
- adds r1, r2
- lsls r1, 3
- adds r1, r0
- ldr r0, =sub_813C5EC
- str r0, [r1]
-_0813C5DC:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_813C5BC
-
- thumb_func_start sub_813C5EC
-sub_813C5EC: @ 813C5EC
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, =gTasks
- adds r4, r1, r0
- ldr r0, =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _0813C610
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0813C61A
-_0813C610:
- movs r0, 0x5
- bl PlaySE
- ldr r0, =sub_813C62C
- str r0, [r4]
-_0813C61A:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_813C5EC
-
- thumb_func_start sub_813C62C
-sub_813C62C: @ 813C62C
- 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, =sub_813C664
- str r1, [r0]
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_813C62C
-
- thumb_func_start sub_813C664
-sub_813C664: @ 813C664
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0813C694
- ldr r0, =c2_exit_to_overworld_1_continue_scripts_restart_music
- bl SetMainCallback2
- ldr r0, =gUnknown_0203AB78
- ldr r0, [r0]
- bl Free
- movs r0, 0
- bl sub_813C6A8
- bl FreeAllWindowBuffers
- adds r0, r4, 0
- bl DestroyTask
-_0813C694:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_813C664
-
- thumb_func_start sub_813C6A8
-sub_813C6A8: @ 813C6A8
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r4, 0
- movs r1, 0
- bl FillWindowPixelBuffer
- adds r0, r4, 0
- bl ClearWindowTilemap
- adds r0, r4, 0
- movs r1, 0x2
- bl CopyWindowToVram
- adds r0, r4, 0
- bl RemoveWindow
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_813C6A8
-
- thumb_func_start sub_813C6D4
-sub_813C6D4: @ 813C6D4
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x8
- movs r3, 0xC0
- lsls r3, 19
- movs r4, 0xC0
- lsls r4, 9
- add r0, sp, 0x4
- mov r8, r0
- mov r2, sp
- movs r6, 0
- ldr r1, =0x040000d4
- movs r5, 0x80
- lsls r5, 5
- ldr r7, =0x81000800
- movs r0, 0x81
- lsls r0, 24
- mov r12, r0
-_0813C6FA:
- strh r6, [r2]
- mov r0, sp
- str r0, [r1]
- str r3, [r1, 0x4]
- str r7, [r1, 0x8]
- ldr r0, [r1, 0x8]
- adds r3, r5
- subs r4, r5
- cmp r4, r5
- bhi _0813C6FA
- strh r6, [r2]
- mov r2, sp
- str r2, [r1]
- str r3, [r1, 0x4]
- lsrs r0, r4, 1
- mov r2, r12
- orrs r0, r2
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- movs r0, 0xE0
- lsls r0, 19
- movs r3, 0x80
- lsls r3, 3
- movs r4, 0
- str r4, [sp, 0x4]
- ldr r2, =0x040000d4
- mov r1, r8
- str r1, [r2]
- str r0, [r2, 0x4]
- lsrs r0, r3, 2
- movs r1, 0x85
- lsls r1, 24
- orrs r0, r1
- str r0, [r2, 0x8]
- ldr r0, [r2, 0x8]
- movs r1, 0xA0
- lsls r1, 19
- mov r0, sp
- strh r4, [r0]
- str r0, [r2]
- str r1, [r2, 0x4]
- lsrs r3, 1
- movs r0, 0x81
- lsls r0, 24
- orrs r3, r0
- str r3, [r2, 0x8]
- ldr r0, [r2, 0x8]
- movs r0, 0
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x8
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x10
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x12
- movs r1, 0
- bl SetGpuReg
- movs r0, 0xA
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x14
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x16
- movs r1, 0
- bl SetGpuReg
- movs r0, 0xC
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x18
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x1A
- movs r1, 0
- bl SetGpuReg
- movs r0, 0xE
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x1C
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x1E
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x40
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x44
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x48
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x4A
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x50
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x52
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x54
- movs r1, 0
- bl SetGpuReg
- add sp, 0x8
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_813C6D4
-
- thumb_func_start sub_813C80C
-sub_813C80C: @ 813C80C
- push {lr}
- bl ScanlineEffect_Stop
- bl ResetTasks
- bl ResetSpriteData
- bl ResetPaletteFade
- bl FreeAllSpritePalettes
- pop {r0}
- bx r0
- thumb_func_end sub_813C80C
-
- thumb_func_start sub_813C828
-sub_813C828: @ 813C828
- push {lr}
- movs r0, 0
- movs r1, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- movs r0, 0x1
- movs r1, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0x1
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- movs r0, 0x2
- movs r1, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0x2
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- movs r0, 0x3
- movs r1, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0x3
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- pop {r0}
- bx r0
- thumb_func_end sub_813C828
-
- thumb_func_start sub_813C880
-sub_813C880: @ 813C880
- push {lr}
- movs r1, 0x94
- lsls r1, 4
- movs r0, 0
- bl SetGpuReg
- pop {r0}
- bx r0
- thumb_func_end sub_813C880
-
- thumb_func_start sub_813C890
-sub_813C890: @ 813C890
- push {r4,lr}
- sub sp, 0x8
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r1, =gUnknown_085B3484
- adds r0, r4, 0
- movs r2, 0xC0
- movs r3, 0
- bl LoadBgTiles
- ldr r1, =gUnknown_085B3564
- movs r0, 0x20
- str r0, [sp]
- str r0, [sp, 0x4]
- adds r0, r4, 0
- movs r2, 0
- movs r3, 0
- bl CopyToBgTilemapBufferRect
- ldr r0, =gUnknown_085B3544
- movs r1, 0
- movs r2, 0x20
- bl LoadPalette
- add sp, 0x8
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_813C890
-
- thumb_func_start sub_813C8D8
-sub_813C8D8: @ 813C8D8
- push {lr}
- bl LoadOam
- bl ProcessSpriteCopyRequests
- bl TransferPlttBuffer
- pop {r0}
- bx r0
- thumb_func_end sub_813C8D8
-
- thumb_func_start sub_813C8EC
-sub_813C8EC: @ 813C8EC
- push {lr}
- bl RunTasks
- bl AnimateSprites
- bl BuildOamBuffer
- bl UpdatePaletteFade
- pop {r0}
- bx r0
- thumb_func_end sub_813C8EC
-
- thumb_func_start sub_813C904
-sub_813C904: @ 813C904
- push {lr}
- movs r0, 0
- bl SetVBlankCallback
- ldr r0, =sub_813C91C
- bl SetMainCallback2
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_813C904
-
- thumb_func_start sub_813C91C
-sub_813C91C: @ 813C91C
- push {r4,lr}
- sub sp, 0x4
- ldr r0, =gMain
- movs r1, 0x87
- lsls r1, 3
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x7
- bls _0813C930
- b _0813CA3C
-_0813C930:
- lsls r0, 2
- ldr r1, =_0813C944
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_0813C944:
- .4byte _0813C964
- .4byte _0813C970
- .4byte _0813C976
- .4byte _0813C9A8
- .4byte _0813C9BE
- .4byte _0813C9DE
- .4byte _0813C9F0
- .4byte _0813CA14
-_0813C964:
- movs r0, 0
- bl SetVBlankCallback
- bl sub_813C6D4
- b _0813CA00
-_0813C970:
- bl sub_813C80C
- b _0813CA00
-_0813C976:
- ldr r4, =gUnknown_0203AB78
- movs r0, 0x80
- lsls r0, 4
- bl AllocZeroed
- str r0, [r4]
- movs r0, 0
- bl ResetBgsAndClearDma3BusyFlags
- ldr r1, =gUnknown_085B3D64
- movs r0, 0
- movs r2, 0x2
- bl InitBgsFromTemplates
- ldr r1, [r4]
- movs r0, 0x3
- bl SetBgTilemapBuffer
- bl sub_813C828
- b _0813CA00
- .pool
-_0813C9A8:
- movs r0, 0x3
- bl sub_813C890
- movs r0, 0
- bl stdpal_get
- movs r1, 0xF0
- movs r2, 0x20
- bl LoadPalette
- b _0813CA00
-_0813C9BE:
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0813CA3C
- movs r0, 0
- bl ShowBg
- movs r0, 0x3
- bl ShowBg
- movs r0, 0x3
- bl CopyBgTilemapBufferToVram
- b _0813CA00
-_0813C9DE:
- ldr r0, =gUnknown_085B3D6C
- bl InitWindows
- bl DeactivateAllTextPrinters
- b _0813CA00
- .pool
-_0813C9F0:
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
-_0813CA00:
- ldr r1, =gMain
- movs r0, 0x87
- lsls r0, 3
- adds r1, r0
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _0813CA3C
- .pool
-_0813CA14:
- bl sub_813C880
- ldr r0, =sub_813C8D8
- bl SetVBlankCallback
- bl sub_81D5C8C
- ldr r0, =sub_813C5BC
- movs r1, 0x8
- bl CreateTask
- ldr r0, =sub_813C8EC
- bl SetMainCallback2
- ldr r0, =gMain
- movs r1, 0x87
- lsls r1, 3
- adds r0, r1
- movs r1, 0
- strb r1, [r0]
-_0813CA3C:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_813C91C
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/battle_tower.s b/asm/battle_tower.s
index d92881024..6cee2dc0a 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]
@@ -3134,7 +3134,7 @@ _081639FC:
bl __umodsi3
cmp r0, 0
bne _08163A78
- bl sub_81DA57C
+ bl UpdateGymLeaderRematch
b _08163A78
.pool
_08163A2C:
@@ -3172,7 +3172,7 @@ _08163A3C:
_08163A74:
bl sub_816537C
_08163A78:
- ldr r0, =c2_exit_to_overworld_1_continue_scripts_restart_music
+ ldr r0, =CB2_ReturnToFieldContinueScript
bl SetMainCallback2
add sp, 0x4
pop {r4-r6}
@@ -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/birch_pc.s b/asm/birch_pc.s
deleted file mode 100644
index 6665d9beb..000000000
--- a/asm/birch_pc.s
+++ /dev/null
@@ -1,234 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start ScriptGetPokedexInfo
-ScriptGetPokedexInfo: @ 8137A4C
- push {lr}
- ldr r0, =gSpecialVar_0x8004
- ldrh r0, [r0]
- cmp r0, 0
- bne _08137A70
- movs r0, 0
- bl sub_80C0844
- ldr r1, =gSpecialVar_0x8005
- strh r0, [r1]
- movs r0, 0x1
- bl sub_80C0844
- b _08137A80
- .pool
-_08137A70:
- movs r0, 0
- bl pokedex_count
- ldr r1, =gSpecialVar_0x8005
- strh r0, [r1]
- movs r0, 0x1
- bl pokedex_count
-_08137A80:
- ldr r1, =gSpecialVar_0x8006
- strh r0, [r1]
- bl IsNationalPokedexEnabled
- lsls r0, 16
- lsrs r0, 16
- pop {r1}
- bx r1
- .pool
- thumb_func_end ScriptGetPokedexInfo
-
- thumb_func_start GetPokedexRatingText
-GetPokedexRatingText: @ 8137A98
- push {lr}
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x9
- bhi _08137AA4
- b _08137BFC
-_08137AA4:
- cmp r0, 0x13
- bhi _08137AB0
- ldr r0, =gUnknown_082A5DAB
- b _08137C06
- .pool
-_08137AB0:
- cmp r0, 0x1D
- bhi _08137ABC
- ldr r0, =gUnknown_082A5DF1
- b _08137C06
- .pool
-_08137ABC:
- cmp r0, 0x27
- bhi _08137AC8
- ldr r0, =gUnknown_082A5E34
- b _08137C06
- .pool
-_08137AC8:
- cmp r0, 0x31
- bhi _08137AD4
- ldr r0, =gUnknown_082A5E83
- b _08137C06
- .pool
-_08137AD4:
- cmp r0, 0x3B
- bhi _08137AE0
- ldr r0, =gUnknown_082A5EB9
- b _08137C06
- .pool
-_08137AE0:
- cmp r0, 0x45
- bhi _08137AEC
- ldr r0, =gUnknown_082A5EF4
- b _08137C06
- .pool
-_08137AEC:
- cmp r0, 0x4F
- bhi _08137AF8
- ldr r0, =gUnknown_082A5F39
- b _08137C06
- .pool
-_08137AF8:
- cmp r0, 0x59
- bhi _08137B04
- ldr r0, =gUnknown_082A5F82
- b _08137C06
- .pool
-_08137B04:
- cmp r0, 0x63
- bhi _08137B10
- ldr r0, =gUnknown_082A5FB9
- b _08137C06
- .pool
-_08137B10:
- cmp r0, 0x6D
- bhi _08137B1C
- ldr r0, =gUnknown_082A6018
- b _08137C06
- .pool
-_08137B1C:
- cmp r0, 0x77
- bhi _08137B28
- ldr r0, =gUnknown_082A6061
- b _08137C06
- .pool
-_08137B28:
- cmp r0, 0x81
- bhi _08137B34
- ldr r0, =gUnknown_082A609C
- b _08137C06
- .pool
-_08137B34:
- cmp r0, 0x8B
- bhi _08137B40
- ldr r0, =gUnknown_082A60D5
- b _08137C06
- .pool
-_08137B40:
- cmp r0, 0x95
- bhi _08137B4C
- ldr r0, =gUnknown_082A6124
- b _08137C06
- .pool
-_08137B4C:
- cmp r0, 0x9F
- bhi _08137B58
- ldr r0, =gUnknown_082A616F
- b _08137C06
- .pool
-_08137B58:
- cmp r0, 0xA9
- bhi _08137B64
- ldr r0, =gUnknown_082A61D6
- b _08137C06
- .pool
-_08137B64:
- cmp r0, 0xB3
- bhi _08137B70
- ldr r0, =gUnknown_082A623A
- b _08137C06
- .pool
-_08137B70:
- cmp r0, 0xBD
- bhi _08137B7C
- ldr r0, =gUnknown_082A6287
- b _08137C06
- .pool
-_08137B7C:
- cmp r0, 0xC7
- bls _08137BEA
- cmp r0, 0xC8
- bne _08137BB8
- ldr r0, =0x00000199
- bl SpeciesToNationalPokedexNum
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x1
- bl GetSetPokedexFlag
- lsls r0, 24
- cmp r0, 0
- bne _08137BEA
- movs r0, 0xCD
- lsls r0, 1
- bl SpeciesToNationalPokedexNum
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x1
- bl GetSetPokedexFlag
- lsls r0, 24
- cmp r0, 0
- bne _08137BEA
- b _08137C04
- .pool
-_08137BB8:
- cmp r0, 0xC9
- bne _08137BF8
- ldr r0, =0x00000199
- bl SpeciesToNationalPokedexNum
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x1
- bl GetSetPokedexFlag
- lsls r0, 24
- cmp r0, 0
- beq _08137C04
- movs r0, 0xCD
- lsls r0, 1
- bl SpeciesToNationalPokedexNum
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x1
- bl GetSetPokedexFlag
- lsls r0, 24
- cmp r0, 0
- beq _08137C04
-_08137BEA:
- ldr r0, =gUnknown_082A62C9
- b _08137C06
- .pool
-_08137BF8:
- cmp r0, 0xCA
- beq _08137C04
-_08137BFC:
- ldr r0, =gUnknown_082A5D6C
- b _08137C06
- .pool
-_08137C04:
- ldr r0, =gUnknown_082A6312
-_08137C06:
- pop {r1}
- bx r1
- .pool
- thumb_func_end GetPokedexRatingText
-
- thumb_func_start ShowPokedexRatingMessage
-ShowPokedexRatingMessage: @ 8137C10
- push {lr}
- ldr r0, =gSpecialVar_0x8004
- ldrh r0, [r0]
- bl GetPokedexRatingText
- bl ShowFieldMessage
- pop {r0}
- bx r0
- .pool
- thumb_func_end ShowPokedexRatingMessage
diff --git a/asm/blit.s b/asm/blit.s
deleted file mode 100644
index 5df45e77e..000000000
--- a/asm/blit.s
+++ /dev/null
@@ -1,823 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start BlitBitmapRect4BitWithoutColorKey
-@ void BlitBitmapRect4BitWithoutColorKey(struct Bitmap *src, struct Bitmap *dest, u16 srcX, u16 srcY, u16 destX, u16 destY, u16 width, u16 height)
-BlitBitmapRect4BitWithoutColorKey: @ 8002BDC
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x14
- ldr r4, [sp, 0x2C]
- ldr r5, [sp, 0x30]
- ldr r6, [sp, 0x34]
- ldr r7, [sp, 0x38]
- lsls r2, 16
- lsrs r2, 16
- lsls r3, 16
- lsrs r3, 16
- lsls r4, 16
- lsrs r4, 16
- lsls r5, 16
- lsrs r5, 16
- lsls r6, 16
- lsrs r6, 16
- lsls r7, 16
- lsrs r7, 16
- str r4, [sp]
- str r5, [sp, 0x4]
- str r6, [sp, 0x8]
- str r7, [sp, 0xC]
- movs r4, 0xFF
- str r4, [sp, 0x10]
- bl BlitBitmapRect4Bit
- add sp, 0x14
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end BlitBitmapRect4BitWithoutColorKey
-
- thumb_func_start BlitBitmapRect4Bit
-@ void BlitBitmapRect4Bit(struct Bitmap *src, struct Bitmap *dest, u16 srcX, u16 srcY, u16 destX, u16 destY, u16 width, u16 height, u8 colorKey)
-BlitBitmapRect4Bit: @ 8002C20
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x2C
- str r0, [sp]
- str r1, [sp, 0x4]
- ldr r0, [sp, 0x4C]
- ldr r1, [sp, 0x50]
- ldr r4, [sp, 0x54]
- ldr r5, [sp, 0x58]
- ldr r6, [sp, 0x5C]
- lsls r2, 16
- lsrs r2, 16
- str r2, [sp, 0x8]
- lsls r3, 16
- lsrs r7, r3, 16
- lsls r0, 16
- lsrs r0, 16
- str r0, [sp, 0xC]
- lsls r1, 16
- lsrs r1, 16
- mov r9, r1
- lsls r4, 16
- lsrs r4, 16
- lsls r5, 16
- lsrs r5, 16
- lsls r6, 24
- lsrs r6, 24
- str r6, [sp, 0x10]
- ldr r0, [sp, 0x4]
- ldrh r3, [r0, 0x4]
- ldr r1, [sp, 0xC]
- subs r0, r3, r1
- adds r2, r4
- mov r8, r2
- cmp r0, r4
- bge _08002C74
- ldr r2, [sp, 0x8]
- adds r0, r2
- mov r8, r0
-_08002C74:
- ldr r4, [sp, 0x4]
- ldrh r0, [r4, 0x6]
- mov r1, r9
- subs r0, r1
- adds r2, r5, r7
- str r2, [sp, 0x14]
- cmp r0, r5
- bge _08002C88
- adds r0, r7
- str r0, [sp, 0x14]
-_08002C88:
- ldr r4, [sp]
- ldrh r1, [r4, 0x4]
- movs r2, 0x7
- adds r0, r1, 0
- ands r0, r2
- adds r1, r0
- asrs r1, 3
- str r1, [sp, 0x18]
- adds r0, r3, 0
- ands r0, r2
- adds r0, r3, r0
- asrs r0, 3
- str r0, [sp, 0x1C]
- ldr r0, [sp, 0x10]
- cmp r0, 0xFF
- bne _08002D46
- adds r3, r7, 0
- mov r1, r9
- ldr r2, [sp, 0x14]
- cmp r3, r2
- blt _08002CB4
- b _08002DEE
-_08002CB4:
- ldr r5, [sp, 0x8]
- ldr r6, [sp, 0xC]
- adds r4, r3, 0x1
- str r4, [sp, 0x24]
- adds r0, r1, 0x1
- str r0, [sp, 0x28]
- cmp r5, r8
- bge _08002D3A
- movs r7, 0x3
- asrs r0, r3, 3
- ldr r2, [sp, 0x18]
- muls r0, r2
- lsls r0, 5
- mov r10, r0
- lsls r0, r3, 29
- lsrs r0, 27
- mov r9, r0
- asrs r0, r1, 3
- ldr r4, [sp, 0x1C]
- muls r0, r4
- lsls r0, 5
- mov r12, r0
- lsls r0, r1, 29
- lsrs r3, r0, 27
-_08002CE4:
- asrs r0, r5, 1
- ands r0, r7
- ldr r2, [sp]
- ldr r1, [r2]
- adds r1, r0
- asrs r0, r5, 3
- lsls r0, 5
- adds r1, r0
- add r1, r10
- mov r4, r9
- adds r2, r1, r4
- asrs r0, r6, 1
- ands r0, r7
- ldr r4, [sp, 0x4]
- ldr r1, [r4]
- adds r1, r0
- asrs r0, r6, 3
- lsls r0, 5
- adds r1, r0
- add r1, r12
- adds r4, r1, r3
- ldrb r2, [r2]
- adds r0, r5, 0
- movs r1, 0x1
- ands r0, r1
- lsls r0, 2
- asrs r2, r0
- movs r0, 0xF
- ands r2, r0
- adds r0, r6, 0
- ands r0, r1
- lsls r1, r0, 2
- lsls r2, r1
- movs r0, 0xF0
- asrs r0, r1
- ldrb r1, [r4]
- ands r0, r1
- orrs r2, r0
- strb r2, [r4]
- adds r5, 0x1
- adds r6, 0x1
- cmp r5, r8
- blt _08002CE4
-_08002D3A:
- ldr r3, [sp, 0x24]
- ldr r1, [sp, 0x28]
- ldr r2, [sp, 0x14]
- cmp r3, r2
- blt _08002CB4
- b _08002DEE
-_08002D46:
- adds r3, r7, 0
- mov r1, r9
- ldr r4, [sp, 0x14]
- cmp r3, r4
- bge _08002DEE
-_08002D50:
- ldr r5, [sp, 0x8]
- ldr r6, [sp, 0xC]
- adds r0, r3, 0x1
- str r0, [sp, 0x24]
- adds r2, r1, 0x1
- str r2, [sp, 0x28]
- cmp r5, r8
- bge _08002DE4
- movs r4, 0x3
- mov r9, r4
- asrs r0, r3, 3
- ldr r2, [sp, 0x18]
- muls r0, r2
- lsls r0, 5
- str r0, [sp, 0x20]
- lsls r0, r3, 29
- lsrs r0, 27
- mov r10, r0
- movs r3, 0x1
- asrs r0, r1, 3
- ldr r4, [sp, 0x1C]
- muls r0, r4
- lsls r0, 5
- mov r12, r0
- lsls r0, r1, 29
- lsrs r7, r0, 27
-_08002D84:
- asrs r0, r5, 1
- mov r1, r9
- ands r0, r1
- ldr r2, [sp]
- ldr r1, [r2]
- adds r1, r0
- asrs r0, r5, 3
- lsls r0, 5
- adds r1, r0
- ldr r4, [sp, 0x20]
- adds r1, r4
- mov r0, r10
- adds r2, r1, r0
- asrs r0, r6, 1
- mov r1, r9
- ands r0, r1
- ldr r4, [sp, 0x4]
- ldr r1, [r4]
- adds r1, r0
- asrs r0, r6, 3
- lsls r0, 5
- adds r1, r0
- add r1, r12
- adds r4, r1, r7
- ldrb r2, [r2]
- adds r0, r5, 0
- ands r0, r3
- lsls r0, 2
- asrs r2, r0
- movs r0, 0xF
- ands r2, r0
- ldr r0, [sp, 0x10]
- cmp r2, r0
- beq _08002DDC
- adds r0, r6, 0
- ands r0, r3
- lsls r1, r0, 2
- lsls r2, r1
- movs r0, 0xF0
- asrs r0, r1
- ldrb r1, [r4]
- ands r0, r1
- orrs r2, r0
- strb r2, [r4]
-_08002DDC:
- adds r5, 0x1
- adds r6, 0x1
- cmp r5, r8
- blt _08002D84
-_08002DE4:
- ldr r3, [sp, 0x24]
- ldr r1, [sp, 0x28]
- ldr r2, [sp, 0x14]
- cmp r3, r2
- blt _08002D50
-_08002DEE:
- add sp, 0x2C
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end BlitBitmapRect4Bit
-
- thumb_func_start FillBitmapRect4Bit
-@ void FillBitmapRect4Bit(struct Bitmap *surface, u16 x, u16 y, u16 width, u16 height, u8 fillValue)
-FillBitmapRect4Bit: @ 8002E00
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- mov r9, r0
- ldr r0, [sp, 0x28]
- ldr r4, [sp, 0x2C]
- lsls r1, 16
- lsrs r1, 16
- str r1, [sp]
- lsls r2, 16
- lsrs r2, 16
- adds r6, r2, 0
- lsls r3, 16
- lsrs r3, 16
- lsls r0, 16
- lsrs r0, 16
- lsls r4, 24
- lsrs r5, r4, 24
- adds r4, r1, r3
- mov r3, r9
- ldrh r1, [r3, 0x4]
- cmp r4, r1
- ble _08002E36
- adds r4, r1, 0
-_08002E36:
- adds r2, r0
- mov r12, r2
- mov r2, r9
- ldrh r0, [r2, 0x6]
- cmp r12, r0
- ble _08002E44
- mov r12, r0
-_08002E44:
- movs r0, 0x7
- ands r0, r1
- adds r0, r1, r0
- asrs r0, 3
- str r0, [sp, 0x4]
- lsls r0, r5, 28
- lsrs r0, 24
- mov r8, r0
- movs r3, 0xF
- mov r10, r3
- mov r0, r10
- ands r0, r5
- mov r10, r0
- adds r1, r6, 0
- cmp r1, r12
- bge _08002EB6
-_08002E64:
- ldr r3, [sp]
- adds r7, r1, 0x1
- cmp r3, r4
- bge _08002EB0
- asrs r0, r1, 3
- ldr r2, [sp, 0x4]
- muls r0, r2
- lsls r6, r0, 5
- lsls r0, r1, 29
- lsrs r5, r0, 27
-_08002E78:
- asrs r2, r3, 1
- movs r0, 0x3
- ands r2, r0
- mov r0, r9
- ldr r1, [r0]
- adds r1, r2
- asrs r0, r3, 3
- lsls r0, 5
- adds r1, r0
- adds r1, r6
- adds r2, r1, r5
- lsls r0, r3, 31
- cmp r0, 0
- beq _08002E9E
- ldrb r1, [r2]
- movs r0, 0xF
- ands r0, r1
- mov r1, r8
- b _08002EA6
-_08002E9E:
- ldrb r1, [r2]
- movs r0, 0xF0
- ands r0, r1
- mov r1, r10
-_08002EA6:
- orrs r0, r1
- strb r0, [r2]
- adds r3, 0x1
- cmp r3, r4
- blt _08002E78
-_08002EB0:
- adds r1, r7, 0
- cmp r1, r12
- blt _08002E64
-_08002EB6:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end FillBitmapRect4Bit
-
- thumb_func_start BlitBitmapRect4BitTo8Bit
-@ void BlitBitmapRect4BitTo8Bit(struct Bitmap *src, struct Bitmap *dest, u16 srcX, u16 srcY, u16 destX, u16 destY, u16 width, u16 height, u8 colorKey, u8 paletteOffset)
-BlitBitmapRect4BitTo8Bit: @ 8002EC8
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x3C
- str r0, [sp]
- str r1, [sp, 0x4]
- ldr r0, [sp, 0x5C]
- ldr r1, [sp, 0x60]
- ldr r5, [sp, 0x64]
- ldr r4, [sp, 0x68]
- ldr r6, [sp, 0x6C]
- ldr r7, [sp, 0x70]
- mov r8, r7
- lsls r2, 16
- lsrs r2, 16
- str r2, [sp, 0x8]
- lsls r3, 16
- lsrs r3, 16
- lsls r0, 16
- lsrs r0, 16
- str r0, [sp, 0xC]
- lsls r1, 16
- lsrs r7, r1, 16
- lsls r5, 16
- lsrs r5, 16
- lsls r4, 16
- lsrs r4, 16
- lsls r6, 24
- lsrs r6, 24
- str r6, [sp, 0x10]
- mov r0, r8
- lsls r0, 28
- lsrs r0, 24
- str r0, [sp, 0x14]
- lsls r0, r6, 28
- lsrs r0, 24
- str r0, [sp, 0x28]
- ldr r1, [sp, 0x4]
- ldrh r0, [r1, 0x4]
- ldr r2, [sp, 0xC]
- subs r0, r2
- ldr r1, [sp, 0x8]
- adds r1, r5, r1
- str r1, [sp, 0x18]
- cmp r0, r5
- bge _08002F2E
- ldr r2, [sp, 0x8]
- adds r0, r2
- str r0, [sp, 0x18]
-_08002F2E:
- ldr r5, [sp, 0x4]
- ldrh r1, [r5, 0x6]
- subs r0, r1, r7
- cmp r0, r4
- bge _08002F40
- adds r0, r3, r1
- subs r0, r7
- str r0, [sp, 0x1C]
- b _08002F44
-_08002F40:
- adds r4, r3, r4
- str r4, [sp, 0x1C]
-_08002F44:
- ldr r0, [sp]
- ldrh r1, [r0, 0x4]
- movs r2, 0x7
- adds r0, r1, 0
- ands r0, r2
- adds r1, r0
- asrs r1, 3
- str r1, [sp, 0x20]
- ldr r5, [sp, 0x4]
- ldrh r1, [r5, 0x4]
- adds r0, r1, 0
- ands r0, r2
- adds r1, r0
- asrs r1, 3
- str r1, [sp, 0x24]
- ldr r0, [sp, 0x10]
- cmp r0, 0xFF
- bne _08003024
- adds r2, r3, 0
- adds r5, r7, 0
- ldr r1, [sp, 0x1C]
- cmp r2, r1
- blt _08002F74
- b _08003106
-_08002F74:
- ldr r3, [sp, 0x8]
- lsrs r3, 1
- str r3, [sp, 0x2C]
- movs r0, 0x3
- ands r3, r0
- str r3, [sp, 0x2C]
- ldr r7, [sp, 0x8]
- lsrs r0, r7, 3
- lsls r0, 5
- str r0, [sp, 0x30]
-_08002F88:
- ldr r0, [sp]
- ldr r1, [r0]
- ldr r3, [sp, 0x2C]
- adds r1, r3
- ldr r7, [sp, 0x30]
- adds r1, r7
- asrs r0, r2, 3
- ldr r3, [sp, 0x20]
- muls r0, r3
- lsls r0, 5
- mov r8, r0
- add r1, r8
- lsls r0, r2, 29
- lsrs r7, r0, 27
- adds r6, r1, r7
- ldr r3, [sp, 0x8]
- ldr r4, [sp, 0xC]
- adds r2, 0x1
- mov r10, r2
- adds r0, r5, 0x1
- str r0, [sp, 0x38]
- ldr r1, [sp, 0x18]
- cmp r3, r1
- bge _08003018
- asrs r0, r5, 3
- ldr r2, [sp, 0x24]
- muls r0, r2
- lsls r0, 6
- mov r12, r0
- lsls r0, r5, 29
- lsrs r0, 26
- mov r9, r0
-_08002FC8:
- movs r0, 0x7
- ands r0, r4
- ldr r5, [sp, 0x4]
- ldr r1, [r5]
- adds r1, r0
- asrs r0, r4, 3
- lsls r0, 6
- adds r1, r0
- add r1, r12
- mov r0, r9
- adds r5, r1, r0
- movs r0, 0x1
- ands r0, r3
- cmp r0, 0
- beq _08002FEC
- ldrb r0, [r6]
- lsrs r0, 4
- b _08003008
-_08002FEC:
- asrs r2, r3, 1
- movs r0, 0x3
- ands r2, r0
- ldr r0, [sp]
- ldr r1, [r0]
- adds r1, r2
- asrs r0, r3, 3
- lsls r0, 5
- adds r1, r0
- add r1, r8
- adds r6, r1, r7
- ldrb r1, [r6]
- movs r0, 0xF
- ands r0, r1
-_08003008:
- ldr r1, [sp, 0x14]
- adds r0, r1, r0
- strb r0, [r5]
- adds r3, 0x1
- adds r4, 0x1
- ldr r2, [sp, 0x18]
- cmp r3, r2
- blt _08002FC8
-_08003018:
- mov r2, r10
- ldr r5, [sp, 0x38]
- ldr r3, [sp, 0x1C]
- cmp r2, r3
- blt _08002F88
- b _08003106
-_08003024:
- adds r2, r3, 0
- adds r5, r7, 0
- ldr r7, [sp, 0x1C]
- cmp r2, r7
- bge _08003106
- ldr r0, [sp, 0x8]
- lsrs r0, 1
- str r0, [sp, 0x34]
- movs r0, 0x3
- ldr r1, [sp, 0x34]
- ands r1, r0
- str r1, [sp, 0x34]
-_0800303C:
- ldr r3, [sp]
- ldr r1, [r3]
- ldr r7, [sp, 0x34]
- adds r1, r7
- ldr r3, [sp, 0x8]
- lsrs r0, r3, 3
- lsls r0, 5
- adds r1, r0
- asrs r0, r2, 3
- ldr r7, [sp, 0x20]
- muls r0, r7
- lsls r0, 5
- mov r8, r0
- add r1, r8
- lsls r0, r2, 29
- lsrs r7, r0, 27
- adds r6, r1, r7
- ldr r4, [sp, 0xC]
- adds r2, 0x1
- mov r10, r2
- adds r0, r5, 0x1
- str r0, [sp, 0x38]
- ldr r1, [sp, 0x18]
- cmp r3, r1
- bge _080030FC
- asrs r0, r5, 3
- ldr r2, [sp, 0x24]
- muls r0, r2
- lsls r0, 6
- mov r9, r0
- lsls r0, r5, 29
- lsrs r0, 26
- mov r12, r0
-_0800307E:
- movs r0, 0x1
- ands r0, r3
- cmp r0, 0
- beq _080030B2
- ldrb r2, [r6]
- movs r0, 0xF0
- ands r0, r2
- ldr r5, [sp, 0x28]
- cmp r0, r5
- beq _080030F2
- adds r0, r4, 0
- movs r1, 0x7
- ands r0, r1
- ldr r5, [sp, 0x4]
- ldr r1, [r5]
- adds r1, r0
- asrs r0, r4, 3
- lsls r0, 6
- adds r1, r0
- add r1, r9
- mov r0, r12
- adds r5, r1, r0
- lsrs r0, r2, 4
- ldr r1, [sp, 0x14]
- adds r0, r1, r0
- b _080030F0
-_080030B2:
- asrs r2, r3, 1
- movs r0, 0x3
- ands r2, r0
- ldr r5, [sp]
- ldr r1, [r5]
- adds r1, r2
- asrs r0, r3, 3
- lsls r0, 5
- adds r1, r0
- add r1, r8
- adds r6, r1, r7
- ldrb r0, [r6]
- movs r2, 0xF
- ands r2, r0
- ldr r0, [sp, 0x10]
- cmp r2, r0
- beq _080030F2
- adds r0, r4, 0
- movs r1, 0x7
- ands r0, r1
- ldr r5, [sp, 0x4]
- ldr r1, [r5]
- adds r1, r0
- asrs r0, r4, 3
- lsls r0, 6
- adds r1, r0
- add r1, r9
- mov r0, r12
- adds r5, r1, r0
- ldr r1, [sp, 0x14]
- adds r0, r1, r2
-_080030F0:
- strb r0, [r5]
-_080030F2:
- adds r3, 0x1
- adds r4, 0x1
- ldr r2, [sp, 0x18]
- cmp r3, r2
- blt _0800307E
-_080030FC:
- mov r2, r10
- ldr r5, [sp, 0x38]
- ldr r3, [sp, 0x1C]
- cmp r2, r3
- blt _0800303C
-_08003106:
- add sp, 0x3C
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end BlitBitmapRect4BitTo8Bit
-
- thumb_func_start FillBitmapRect8Bit
-@ void FillBitmapRect8Bit(struct Bitmap *surface, u16 x, u16 y, u16 width, u16 height, u8 fillValue)
-FillBitmapRect8Bit: @ 8003118
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- mov r8, r0
- ldr r0, [sp, 0x28]
- ldr r4, [sp, 0x2C]
- lsls r1, 16
- lsrs r1, 16
- mov r10, r1
- lsls r2, 16
- lsrs r2, 16
- adds r6, r2, 0
- lsls r3, 16
- lsrs r3, 16
- lsls r0, 16
- lsrs r0, 16
- lsls r4, 24
- lsrs r4, 24
- mov r9, r4
- adds r5, r1, r3
- mov r3, r8
- ldrh r1, [r3, 0x4]
- cmp r5, r1
- ble _08003150
- adds r5, r1, 0
-_08003150:
- adds r7, r2, r0
- mov r2, r8
- ldrh r0, [r2, 0x6]
- cmp r7, r0
- ble _0800315C
- adds r7, r0, 0
-_0800315C:
- movs r0, 0x7
- ands r0, r1
- adds r0, r1, r0
- asrs r0, 3
- str r0, [sp]
- adds r1, r6, 0
- cmp r1, r7
- bge _080031AC
-_0800316C:
- mov r3, r10
- adds r6, r1, 0x1
- str r6, [sp, 0x4]
- cmp r3, r5
- bge _080031A6
- movs r0, 0x7
- mov r12, r0
- asrs r0, r1, 3
- ldr r2, [sp]
- muls r0, r2
- lsls r4, r0, 6
- lsls r0, r1, 29
- lsrs r2, r0, 26
-_08003186:
- adds r0, r3, 0
- mov r6, r12
- ands r0, r6
- mov r6, r8
- ldr r1, [r6]
- adds r1, r0
- asrs r0, r3, 3
- lsls r0, 6
- adds r1, r0
- adds r1, r4
- adds r1, r2
- mov r0, r9
- strb r0, [r1]
- adds r3, 0x1
- cmp r3, r5
- blt _08003186
-_080031A6:
- ldr r1, [sp, 0x4]
- cmp r1, r7
- blt _0800316C
-_080031AC:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end FillBitmapRect8Bit
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/cable_car.s b/asm/cable_car.s
index 6fd44dd9f..bfb96cb9b 100644
--- a/asm/cable_car.s
+++ b/asm/cable_car.s
@@ -777,7 +777,7 @@ _08150340:
bl warp_in
ldr r0, =gFieldCallback
str r4, [r0]
- ldr r0, =c2_load_new_map
+ ldr r0, =CB2_LoadMap
bl SetMainCallback2
add sp, 0x8
pop {r3}
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 808829c9a..201f23c17 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
@@ -736,7 +736,7 @@ _080B2984:
.pool
_080B2994:
bl GetLinkPlayerCount_2
- ldr r4, =gUnknown_03005DB8
+ ldr r4, =gFieldLinkPlayerCount
strb r0, [r4]
bl GetMultiplayerId
ldr r1, =gUnknown_03005DB4
@@ -826,7 +826,7 @@ _080B2A4E:
.pool
_080B2A6C:
bl GetLinkPlayerCount_2
- ldr r4, =gUnknown_03005DB8
+ ldr r4, =gFieldLinkPlayerCount
strb r0, [r4]
bl GetMultiplayerId
ldr r1, =gUnknown_03005DB4
@@ -960,7 +960,7 @@ task_map_chg_seq_0807EC34: @ 80B2B94
push {r4,r5,lr}
adds r5, r0, 0
adds r4, r1, 0
- ldr r1, =gUnknown_02039B58
+ ldr r1, =gTrainerCards
ldrh r0, [r5]
cmp r0, 0x1
bne _080B2C10
@@ -1044,7 +1044,7 @@ sub_80B2C30: @ 80B2C30
_080B2C5C:
movs r0, 0x64
muls r0, r4
- ldr r1, =gUnknown_02039B58
+ ldr r1, =gTrainerCards
adds r0, r1
lsls r1, r4, 8
ldr r2, =gBlockRecvBuffer
@@ -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
@@ -1729,7 +1729,7 @@ _080B3248:
thumb_func_start sub_80B3254
sub_80B3254: @ 80B3254
push {lr}
- bl sub_809FF80
+ bl SaveGame
pop {r0}
bx r0
thumb_func_end sub_80B3254
@@ -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
@@ -2132,12 +2132,12 @@ _080B35E0:
ldrb r0, [r0]
cmp r0, 0
bne _080B35FE
- ldr r0, =c2_exit_to_overworld_2_switch
+ ldr r0, =CB2_ReturnToField
bl SetMainCallback2
b _080B35FE
.pool
_080B35F8:
- ldr r0, =c2_exit_to_overworld_2_switch
+ ldr r0, =CB2_ReturnToField
bl SetMainCallback2
_080B35FE:
bl RunTasks
@@ -2156,9 +2156,9 @@ sub_80B360C: @ 80B360C
negs r1, r1
ands r0, r1
str r0, [r2]
- bl call_ResetMapMusic
- bl copy_player_party_from_sav1
- bl copy_bags_and_unk_data_to_save_blocks
+ bl Overworld_ResetMapMusic
+ bl LoadPlayerParty
+ bl SavePlayerBag
bl sub_813BF10
ldr r0, =gSpecialVar_0x8004
ldrh r0, [r0]
@@ -2171,8 +2171,8 @@ sub_80B360C: @ 80B360C
ldrb r0, [r0]
movs r5, 0x1
eors r0, r5
- bl sub_813C2A0
- ldr r0, =gLinkVSyncDisabled
+ bl UpdatePlayerLinkBattleRecords
+ ldr r0, =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0
beq _080B36B2
@@ -2251,8 +2251,8 @@ sub_80B36EC: @ 80B36EC
cmp r0, 0x9
bne _080B370E
_080B3706:
- bl copy_player_party_from_sav1
- bl copy_bags_and_unk_data_to_save_blocks
+ bl LoadPlayerParty
+ bl SavePlayerBag
_080B370E:
movs r0, 0x7F
bl copy_saved_warp2_bank_and_enter_x_to_warp1
@@ -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
@@ -2586,7 +2586,7 @@ sp02A_crash_sound: @ 80B39BC
push {lr}
ldr r0, =gSpecialVar_0x8006
ldrb r0, [r0]
- ldr r1, =c2_exit_to_overworld_1_continue_scripts_restart_music
+ ldr r1, =CB2_ReturnToFieldContinueScript
bl sub_80C4E74
pop {r0}
bx r0
@@ -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..327a80d75 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}
@@ -5588,7 +5588,7 @@ sub_80DA830: @ 80DA830
bl FreeAllWindowBuffers
bl sub_80D7A5C
bl FreeMonSpritesGfx
- ldr r0, =c2_exit_to_overworld_2_switch
+ ldr r0, =CB2_ReturnToField
bl SetMainCallback2
_080DA860:
pop {r0}
diff --git a/asm/contest_link_80F57C4.s b/asm/contest_link_80F57C4.s
index e73c657a9..450a235d5 100644
--- a/asm/contest_link_80F57C4.s
+++ b/asm/contest_link_80F57C4.s
@@ -1825,7 +1825,7 @@ _080F6884:
adds r0, r5, 0
bl DestroyTask
bl FreeAllWindowBuffers
- ldr r0, =c2_exit_to_overworld_1_continue_scripts_restart_music
+ ldr r0, =CB2_ReturnToFieldContinueScript
bl SetMainCallback2
bl sub_80F7E64
_080F68A8:
@@ -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/credits.s b/asm/credits.s
deleted file mode 100644
index a8a665b06..000000000
--- a/asm/credits.s
+++ /dev/null
@@ -1,3903 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_81754C8
-sub_81754C8: @ 81754C8
- push {lr}
- bl LoadOam
- bl ProcessSpriteCopyRequests
- bl TransferPlttBuffer
- pop {r0}
- bx r0
- thumb_func_end sub_81754C8
-
- thumb_func_start sub_81754DC
-sub_81754DC: @ 81754DC
- push {lr}
- bl RunTasks
- bl AnimateSprites
- ldr r0, =gMain
- ldrh r1, [r0, 0x2C]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _08175522
- ldr r0, =gHasHallOfFameRecords
- ldrb r0, [r0]
- cmp r0, 0
- beq _08175522
- ldr r2, =gTasks
- ldr r0, =gUnknown_0203BCE2
- ldrh r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- ldr r1, [r0]
- ldr r0, =sub_8175774
- cmp r1, r0
- bne _08175522
- bl sub_81754C8
- bl RunTasks
- bl AnimateSprites
- ldr r1, =gUnknown_0203BCE5
- movs r0, 0x1
- strb r0, [r1]
-_08175522:
- bl BuildOamBuffer
- bl UpdatePaletteFade
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81754DC
-
- thumb_func_start sub_8175548
-sub_8175548: @ 8175548
- push {lr}
- movs r0, 0
- bl ResetBgsAndClearDma3BusyFlags
- ldr r1, =gUnknown_085E6F68
- movs r0, 0
- movs r2, 0x1
- bl InitBgsFromTemplates
- movs r0, 0x80
- lsls r0, 4
- bl AllocZeroed
- adds r1, r0, 0
- movs r0, 0
- bl SetBgTilemapBuffer
- ldr r0, =gUnknown_085E56F0
- movs r1, 0x80
- movs r2, 0x40
- bl LoadPalette
- ldr r0, =gUnknown_085E6F6C
- bl InitWindows
- bl DeactivateAllTextPrinters
- movs r0, 0
- bl PutWindowTilemap
- movs r0, 0
- movs r1, 0x3
- bl CopyWindowToVram
- movs r0, 0
- bl ShowBg
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8175548
-
- thumb_func_start sub_81755A4
-sub_81755A4: @ 81755A4
- push {lr}
- bl FreeAllWindowBuffers
- movs r0, 0
- bl GetBgTilemapBuffer
- cmp r0, 0
- beq _081755B8
- bl Free
-_081755B8:
- pop {r0}
- bx r0
- thumb_func_end sub_81755A4
-
- thumb_func_start sub_81755BC
-sub_81755BC: @ 81755BC
- push {r4,r5,lr}
- sub sp, 0x18
- adds r4, r0, 0
- lsls r1, 24
- lsrs r5, r1, 24
- lsls r2, 24
- lsrs r2, 24
- add r1, sp, 0x14
- movs r0, 0
- strb r0, [r1]
- cmp r2, 0x1
- bne _081755DC
- movs r0, 0x3
- strb r0, [r1, 0x1]
- movs r0, 0x4
- b _081755E4
-_081755DC:
- add r1, sp, 0x14
- movs r0, 0x1
- strb r0, [r1, 0x1]
- movs r0, 0x2
-_081755E4:
- strb r0, [r1, 0x2]
- movs r0, 0x1
- adds r1, r4, 0
- movs r2, 0xF0
- movs r3, 0x1
- bl GetStringCenterAlignXOffsetWithLetterSpacing
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- movs r0, 0x1
- str r0, [sp]
- movs r0, 0
- str r0, [sp, 0x4]
- add r0, sp, 0x14
- str r0, [sp, 0x8]
- movs r0, 0x1
- negs r0, r0
- str r0, [sp, 0xC]
- str r4, [sp, 0x10]
- movs r0, 0
- movs r1, 0x1
- adds r3, r5, 0
- bl AddTextPrinterParameterized2
- add sp, 0x18
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_81755BC
-
- thumb_func_start sub_8175620
-sub_8175620: @ 8175620
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- bl sub_8175CE4
- movs r0, 0
- bl SetVBlankCallback
- ldr r0, =0x02000000
- movs r1, 0xE0
- lsls r1, 9
- bl InitHeap
- bl ResetPaletteFade
- bl ResetTasks
- bl sub_8175548
- ldr r0, =sub_8175744
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r1, =gTasks
- lsls r0, r7, 2
- adds r0, r7
- lsls r0, 3
- adds r0, r1
- movs r1, 0
- strh r1, [r0, 0x10]
- strh r1, [r0, 0x16]
- strh r1, [r0, 0x1E]
- movs r1, 0x1
- strh r1, [r0, 0x22]
-_0817566A:
- movs r0, 0
- adds r1, r7, 0
- bl sub_8176AB0
- lsls r0, 24
- cmp r0, 0
- beq _0817566A
- ldr r5, =gTasks
- lsls r4, r7, 2
- adds r4, r7
- lsls r4, 3
- adds r4, r5
- movs r0, 0xA
- ldrsh r1, [r4, r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r5
- movs r1, 0
- mov r8, r1
- movs r6, 0
- movs r1, 0x28
- strh r1, [r0, 0x8]
- ldr r1, =0x0000fffc
- movs r0, 0x12
- bl SetGpuReg
- ldr r0, =sub_8175DA0
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r5
- strh r7, [r1, 0xA]
- strh r0, [r4, 0x26]
- movs r0, 0x1
- negs r0, r0
- str r6, [sp]
- movs r1, 0
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- movs r0, 0x1
- bl EnableInterrupts
- ldr r0, =sub_81754C8
- bl SetVBlankCallback
- ldr r0, =0x000001c7
- bl m4aSongNumStart
- ldr r0, =sub_81754DC
- bl SetMainCallback2
- ldr r0, =gUnknown_0203BCE5
- mov r1, r8
- strb r1, [r0]
- ldr r4, =gUnknown_0203BCE8
- movs r0, 0xEB
- lsls r0, 2
- bl AllocZeroed
- str r0, [r4]
- bl sub_8177388
- ldr r1, [r4]
- adds r0, r1, 0
- adds r0, 0x8E
- strh r6, [r0]
- adds r0, 0x2
- strh r6, [r0]
- adds r0, 0x2
- strh r6, [r0]
- ldr r0, =gUnknown_0203BCE2
- strh r7, [r0]
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8175620
-
- thumb_func_start sub_8175744
-sub_8175744: @ 8175744
- push {lr}
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08175764
- ldr r0, =gTasks
- lsls r1, r2, 2
- adds r1, r2
- lsls r1, 3
- adds r1, r0
- ldr r0, =sub_8175774
- str r0, [r1]
-_08175764:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8175744
-
- thumb_func_start sub_8175774
-sub_8175774: @ 8175774
- push {r4,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
- movs r0, 0x10
- ldrsh r1, [r4, r0]
- cmp r1, 0
- beq _081757B0
- movs r3, 0xA
- ldrsh r1, [r4, r3]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- movs r1, 0x1E
- strh r1, [r0, 0x8]
- movs r0, 0x80
- lsls r0, 1
- strh r0, [r4, 0x20]
- ldr r0, =sub_8175A9C
- b _081757FA
- .pool
-_081757B0:
- ldr r0, =gUnknown_0203BCE0
- strh r1, [r0]
- ldrh r2, [r4, 0x1E]
- movs r3, 0x1E
- ldrsh r0, [r4, r3]
- cmp r0, 0x1
- bne _081757E0
- strh r2, [r4, 0x22]
- strh r1, [r4, 0x1E]
- movs r0, 0x1
- negs r0, r0
- str r1, [sp]
- movs r1, 0
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r0, =sub_8175808
- b _081757FA
- .pool
-_081757E0:
- cmp r0, 0x2
- bne _081757FC
- strh r2, [r4, 0x22]
- strh r1, [r4, 0x1E]
- movs r0, 0x1
- negs r0, r0
- str r1, [sp]
- movs r1, 0
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r0, =sub_81758A4
-_081757FA:
- str r0, [r4]
-_081757FC:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8175774
-
- thumb_func_start sub_8175808
-sub_8175808: @ 8175808
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08175836
- movs r0, 0
- movs r1, 0
- bl SetGpuReg
- adds r0, r4, 0
- bl sub_8176CA0
- ldr r0, =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, =c2_080C9BFC
- str r0, [r1]
-_08175836:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8175808
-
- thumb_func_start c2_080C9BFC
-c2_080C9BFC: @ 8175848
- push {r4,r5,lr}
- sub sp, 0x4
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0
- bl SetVBlankCallback
- ldr r1, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r5, r0, r1
- ldrb r0, [r5, 0x16]
- adds r1, r4, 0
- bl sub_8176AB0
- lsls r0, 24
- cmp r0, 0
- beq _08175890
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- movs r0, 0x1
- bl EnableInterrupts
- ldr r0, =sub_81754C8
- bl SetVBlankCallback
- ldr r0, =sub_8175744
- str r0, [r5]
-_08175890:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end c2_080C9BFC
-
- thumb_func_start sub_81758A4
-sub_81758A4: @ 81758A4
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _081758D2
- movs r0, 0
- movs r1, 0
- bl SetGpuReg
- adds r0, r4, 0
- bl sub_8176CA0
- ldr r0, =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, =sub_81758E4
- str r0, [r1]
-_081758D2:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81758A4
-
- thumb_func_start sub_81758E4
-sub_81758E4: @ 81758E4
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x4
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r0, =gMain
- movs r1, 0x87
- lsls r1, 3
- adds r1, r0
- mov r8, r1
- ldrb r7, [r1]
- cmp r7, 0
- beq _08175906
- cmp r7, 0x1
- beq _081759F0
-_08175906:
- bl ResetSpriteData
- bl dp13_810BB8C
- bl FreeAllSpritePalettes
- ldr r1, =gReservedSpritePaletteCount
- movs r0, 0x8
- strb r0, [r1]
- ldr r0, =gBirchHelpGfx
- movs r1, 0xC0
- lsls r1, 19
- bl LZ77UnCompVram
- ldr r0, =gBirchGrassTilemap
- ldr r1, =0x06003800
- bl LZ77UnCompVram
- ldr r0, =gBirchBagGrassPal + 0x2
- movs r1, 0x1
- movs r2, 0x3E
- bl LoadPalette
- movs r1, 0
- ldr r4, =0x0201c000
- movs r3, 0x11
- ldr r2, =0x000007ff
-_0817593C:
- adds r0, r1, r4
- strb r3, [r0]
- adds r0, r1, 0x1
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, r2
- bls _0817593C
- movs r1, 0
- ldr r2, =0x0201d800
- ldr r6, =gUnknown_085E701C
- ldr r0, =0xfffff000
- adds r5, r2, r0
- movs r4, 0x22
- ldr r3, =0x000007ff
-_08175958:
- adds r0, r1, r5
- strb r4, [r0]
- adds r0, r1, 0x1
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, r3
- bls _08175958
- movs r1, 0
- ldr r5, =0x0201d000
- movs r4, 0x33
- ldr r3, =0x000007ff
-_0817596E:
- adds r0, r1, r5
- strb r4, [r0]
- adds r0, r1, 0x1
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, r3
- bls _0817596E
- movs r0, 0
- strh r0, [r2]
- ldr r1, =0x000053ff
- adds r0, r1, 0
- strh r0, [r2, 0x2]
- ldr r1, =0x0000529f
- adds r0, r1, 0
- strh r0, [r2, 0x4]
- ldr r1, =0x00007e94
- adds r0, r1, 0
- strh r0, [r2, 0x6]
- adds r0, r6, 0
- bl LoadSpriteSheet
- ldr r0, =gUnknown_085E702C
- bl LoadSpritePalette
- ldr r1, =gMain
- movs r0, 0x87
- lsls r0, 3
- adds r1, r0
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _08175A7A
- .pool
-_081759F0:
- ldr r0, =sub_81760FC
- movs r1, 0
- bl CreateTask
- ldr r2, =gTasks
- lsls r4, r6, 2
- adds r4, r6
- lsls r4, 3
- adds r4, r2
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0
- mov r9, r1
- movs r5, 0
- strh r0, [r4, 0xE]
- movs r0, 0xE
- ldrsh r1, [r4, r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- strh r7, [r0, 0x8]
- movs r0, 0xE
- ldrsh r1, [r4, r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- strh r6, [r0, 0xA]
- movs r0, 0xE
- ldrsh r1, [r4, r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- ldrh r1, [r4, 0x16]
- strh r1, [r0, 0xC]
- movs r0, 0x1
- negs r0, r0
- str r5, [sp]
- movs r1, 0
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- movs r0, 0x1C
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x1E
- movs r1, 0x20
- bl SetGpuReg
- ldr r1, =0x00000703
- movs r0, 0xE
- bl SetGpuReg
- movs r1, 0xCA
- lsls r1, 5
- movs r0, 0
- bl SetGpuReg
- mov r0, r9
- mov r1, r8
- strb r0, [r1]
- ldr r0, =gUnknown_0203BD28
- strh r5, [r0]
- ldr r0, =sub_8175744
- str r0, [r4]
-_08175A7A:
- add sp, 0x4
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81758E4
-
- thumb_func_start sub_8175A9C
-sub_8175A9C: @ 8175A9C
- push {r4,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
- ldrh r0, [r4, 0x20]
- movs r2, 0x20
- ldrsh r1, [r4, r2]
- cmp r1, 0
- beq _08175AC4
- subs r0, 0x1
- strh r0, [r4, 0x20]
- b _08175AD8
- .pool
-_08175AC4:
- movs r0, 0x1
- negs r0, r0
- str r1, [sp]
- movs r1, 0xC
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r0, =sub_8175AE4
- str r0, [r4]
-_08175AD8:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8175A9C
-
- thumb_func_start sub_8175AE4
-sub_8175AE4: @ 8175AE4
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08175B0A
- adds r0, r4, 0
- bl sub_8176CA0
- ldr r0, =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, =sub_8175B1C
- str r0, [r1]
-_08175B0A:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8175AE4
-
- thumb_func_start sub_8175B1C
-sub_8175B1C: @ 8175B1C
- push {r4,lr}
- sub sp, 0x4
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl sub_8175CE4
- bl ResetPaletteFade
- movs r1, 0xE0
- lsls r1, 6
- movs r0, 0
- movs r2, 0
- bl sub_8176D1C
- bl ResetSpriteData
- bl FreeAllSpritePalettes
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r1, 0x8
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- movs r1, 0xE0
- lsls r1, 3
- movs r0, 0x8
- bl SetGpuReg
- movs r0, 0x1
- bl EnableInterrupts
- movs r1, 0xA0
- lsls r1, 1
- movs r0, 0
- bl SetGpuReg
- ldr r1, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- movs r1, 0xEB
- strh r1, [r0, 0x8]
- ldr r1, =sub_8175B90
- str r1, [r0]
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8175B1C
-
- thumb_func_start sub_8175B90
-sub_8175B90: @ 8175B90
- push {r4,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
- ldrh r0, [r4, 0x8]
- movs r2, 0x8
- ldrsh r1, [r4, r2]
- cmp r1, 0
- beq _08175BB8
- subs r0, 0x1
- strh r0, [r4, 0x8]
- b _08175BCC
- .pool
-_08175BB8:
- movs r0, 0x1
- negs r0, r0
- str r1, [sp]
- movs r1, 0x6
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r0, =sub_8175BD8
- str r0, [r4]
-_08175BCC:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8175B90
-
- thumb_func_start sub_8175BD8
-sub_8175BD8: @ 8175BD8
- push {r4,r5,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- bne _08175C1E
- movs r0, 0xE0
- lsls r0, 6
- movs r1, 0
- bl sub_8176E40
- movs r0, 0x1
- negs r0, r0
- str r4, [sp]
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl BeginNormalPaletteFade
- ldr r1, =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- movs r1, 0xE1
- lsls r1, 5
- strh r1, [r0, 0x8]
- ldr r1, =sub_8175C34
- str r1, [r0]
-_08175C1E:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8175BD8
-
- thumb_func_start sub_8175C34
-sub_8175C34: @ 8175C34
- push {r4,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08175CB8
- ldr r1, =gTasks
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- adds r4, r0, r1
- movs r0, 0x8
- ldrsh r1, [r4, r0]
- cmp r1, 0
- beq _08175C62
- ldr r0, =gMain
- ldrh r0, [r0, 0x2E]
- cmp r0, 0
- beq _08175C94
-_08175C62:
- movs r0, 0x4
- bl FadeOutBGM
- movs r0, 0x1
- negs r0, r0
- ldr r1, =0x0000ffff
- str r1, [sp]
- movs r1, 0x8
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r0, =sub_8175CC8
- str r0, [r4]
- b _08175CB8
- .pool
-_08175C94:
- ldr r0, =0x00001be8
- cmp r1, r0
- bne _08175CA0
- movs r0, 0x8
- bl FadeOutBGM
-_08175CA0:
- movs r0, 0x8
- ldrsh r1, [r4, r0]
- ldr r0, =0x00001ab8
- cmp r1, r0
- bne _08175CB2
- movs r0, 0xE4
- lsls r0, 1
- bl m4aSongNumStart
-_08175CB2:
- ldrh r0, [r4, 0x8]
- subs r0, 0x1
- strh r0, [r4, 0x8]
-_08175CB8:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8175C34
-
- thumb_func_start sub_8175CC8
-sub_8175CC8: @ 8175CC8
- push {lr}
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08175CDC
- movs r0, 0xFF
- bl SoftReset
-_08175CDC:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8175CC8
-
- thumb_func_start sub_8175CE4
-sub_8175CE4: @ 8175CE4
- push {lr}
- sub sp, 0x8
- movs r0, 0
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x1C
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x1E
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x18
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x1A
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x14
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x16
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x10
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x12
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x50
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x52
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x54
- movs r1, 0
- bl SetGpuReg
- mov r1, sp
- movs r0, 0
- strh r0, [r1]
- ldr r1, =0x040000d4
- mov r0, sp
- str r0, [r1]
- movs r0, 0xC0
- lsls r0, 19
- str r0, [r1, 0x4]
- ldr r0, =0x8100c000
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- movs r2, 0
- str r2, [sp, 0x4]
- add r0, sp, 0x4
- str r0, [r1]
- movs r0, 0xE0
- lsls r0, 19
- str r0, [r1, 0x4]
- ldr r0, =0x85000100
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- mov r0, sp
- strh r2, [r0]
- str r0, [r1]
- ldr r0, =0x05000002
- str r0, [r1, 0x4]
- ldr r0, =0x810001ff
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- add sp, 0x8
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8175CE4
-
- thumb_func_start sub_8175DA0
-sub_8175DA0: @ 8175DA0
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x4
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r1, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- movs r2, 0x8
- ldrsh r0, [r0, r2]
- adds r5, r1, 0
- cmp r0, 0xA
- bhi _08175E00
- lsls r0, 2
- ldr r1, =_08175DD4
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_08175DD4:
- .4byte _08175E00
- .4byte _08175E40
- .4byte _08175E60
- .4byte _08175F38
- .4byte _08175F5C
- .4byte _08175FC8
- .4byte _08175E00
- .4byte _08175E00
- .4byte _08175E00
- .4byte _08175E00
- .4byte _08175FFC
-_08175E00:
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0
- beq _08175E12
- b _0817602A
-_08175E12:
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r5
- movs r1, 0x1
- strh r1, [r0, 0x8]
- movs r1, 0x48
- strh r1, [r0, 0xE]
- movs r3, 0xA
- ldrsh r1, [r0, r3]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r5
- strh r2, [r0, 0x24]
- ldr r0, =gUnknown_0203BCE0
- strh r2, [r0]
- b _0817602A
- .pool
-_08175E40:
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r1, r0, r5
- ldrh r2, [r1, 0xE]
- movs r3, 0xE
- ldrsh r0, [r1, r3]
- cmp r0, 0
- beq _08175E58
- subs r0, r2, 0x1
- strh r0, [r1, 0xE]
- b _0817602A
-_08175E58:
- ldrh r0, [r1, 0x8]
- adds r0, 0x1
- strh r0, [r1, 0x8]
- b _0817602A
-_08175E60:
- lsls r2, r4, 2
- adds r0, r2, r4
- lsls r0, 3
- adds r3, r0, r5
- movs r0, 0xA
- ldrsh r1, [r3, r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r5, r0, r5
- ldr r1, [r5]
- ldr r0, =sub_8175774
- mov r9, r2
- cmp r1, r0
- bne _08175F32
- movs r1, 0xC
- ldrsh r0, [r3, r1]
- cmp r0, 0x38
- bgt _08175F2C
- movs r5, 0
- ldr r2, =gUnknown_085E6AF4
- mov r8, r2
- adds r7, r3, 0
- movs r6, 0xA0
- lsls r6, 19
-_08175E92:
- movs r3, 0xC
- ldrsh r1, [r7, r3]
- lsls r0, r1, 2
- adds r0, r1
- adds r0, r5
- lsls r0, 2
- add r0, r8
- ldr r2, [r0]
- ldr r0, [r2, 0x4]
- lsrs r1, r6, 24
- ldrb r2, [r2, 0x1]
- bl sub_81755BC
- movs r0, 0x80
- lsls r0, 21
- adds r6, r0
- adds r5, 0x1
- cmp r5, 0x4
- ble _08175E92
- movs r0, 0
- movs r1, 0x2
- bl CopyWindowToVram
- ldr r3, =gTasks
- mov r2, r9
- adds r1, r2, r4
- lsls r1, 3
- adds r1, r3
- ldrh r0, [r1, 0xC]
- adds r0, 0x1
- strh r0, [r1, 0xC]
- ldrh r0, [r1, 0x8]
- adds r0, 0x1
- strh r0, [r1, 0x8]
- movs r0, 0xA
- ldrsh r2, [r1, r0]
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- adds r0, r3
- movs r2, 0x1
- strh r2, [r0, 0x24]
- movs r2, 0xA
- ldrsh r1, [r1, r2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r3
- movs r3, 0x22
- ldrsh r0, [r0, r3]
- cmp r0, 0x1
- bne _08175F14
- movs r0, 0xC0
- lsls r0, 2
- ldr r1, =0x0000328d
- b _08175F1A
- .pool
-_08175F14:
- movs r0, 0xC0
- lsls r0, 2
- ldr r1, =0x00001967
-_08175F1A:
- str r1, [sp]
- movs r1, 0
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- b _0817602A
- .pool
-_08175F2C:
- movs r0, 0xA
- strh r0, [r3, 0x8]
- b _0817602A
-_08175F32:
- movs r0, 0
- strh r0, [r5, 0x24]
- b _0817602A
-_08175F38:
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0817602A
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r5
- movs r1, 0x73
- strh r1, [r0, 0xE]
- ldrh r1, [r0, 0x8]
- adds r1, 0x1
- strh r1, [r0, 0x8]
- b _0817602A
- .pool
-_08175F5C:
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r4, r0, r5
- ldrh r1, [r4, 0xE]
- movs r2, 0xE
- ldrsh r0, [r4, r2]
- cmp r0, 0
- beq _08175F74
- subs r0, r1, 0x1
- strh r0, [r4, 0xE]
- b _0817602A
-_08175F74:
- ldrb r0, [r4, 0xC]
- ldrb r1, [r4, 0xA]
- bl sub_817603C
- lsls r0, 24
- cmp r0, 0
- beq _08175F8A
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- b _0817602A
-_08175F8A:
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r3, 0xA
- ldrsh r1, [r4, r3]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r5
- movs r1, 0x22
- ldrsh r0, [r0, r1]
- cmp r0, 0x1
- bne _08175FB0
- movs r0, 0xC0
- lsls r0, 2
- ldr r1, =0x0000328d
- b _08175FB6
- .pool
-_08175FB0:
- movs r0, 0xC0
- lsls r0, 2
- ldr r1, =0x00001967
-_08175FB6:
- str r1, [sp]
- movs r1, 0
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- b _0817602A
- .pool
-_08175FC8:
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0817602A
- movs r0, 0
- movs r1, 0
- bl FillWindowPixelBuffer
- movs r0, 0
- movs r1, 0x2
- bl CopyWindowToVram
- ldr r0, =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- movs r0, 0x2
- strh r0, [r1, 0x8]
- b _0817602A
- .pool
-_08175FFC:
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r5
- movs r2, 0xA
- ldrsh r1, [r0, r2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r5
- movs r5, 0
- movs r1, 0x1
- strh r1, [r0, 0x10]
- adds r0, r4, 0
- bl DestroyTask
- bl sub_81755A4
- ldr r4, =gUnknown_0203BCE8
- ldr r0, [r4]
- bl Free
- str r5, [r4]
-_0817602A:
- add sp, 0x4
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8175DA0
-
- thumb_func_start sub_817603C
-sub_817603C: @ 817603C
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r3, r0, 24
- adds r6, r3, 0
- lsls r1, 24
- lsrs r2, r1, 24
- adds r5, r2, 0
- ldr r4, =gTasks
- cmp r3, 0x6
- bne _0817605C
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- adds r0, r4
- movs r1, 0x2
- strh r1, [r0, 0x1E]
-_0817605C:
- cmp r3, 0xC
- bne _0817606E
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- adds r0, r4
- movs r1, 0x1
- strh r1, [r0, 0x16]
- strh r1, [r0, 0x1E]
-_0817606E:
- cmp r3, 0x12
- bne _0817607E
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- adds r0, r4
- movs r1, 0x2
- strh r1, [r0, 0x1E]
-_0817607E:
- cmp r3, 0x18
- bne _08176092
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- adds r0, r4
- movs r1, 0x2
- strh r1, [r0, 0x16]
- movs r1, 0x1
- strh r1, [r0, 0x1E]
-_08176092:
- cmp r3, 0x1E
- bne _081760A2
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- adds r0, r4
- movs r1, 0x2
- strh r1, [r0, 0x1E]
-_081760A2:
- cmp r3, 0x24
- bne _081760B6
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- adds r0, r4
- movs r1, 0x3
- strh r1, [r0, 0x16]
- movs r1, 0x1
- strh r1, [r0, 0x1E]
-_081760B6:
- cmp r3, 0x2A
- bne _081760C6
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- adds r0, r4
- movs r1, 0x2
- strh r1, [r0, 0x1E]
-_081760C6:
- cmp r6, 0x30
- bne _081760DA
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- adds r0, r4
- movs r1, 0x4
- strh r1, [r0, 0x16]
- movs r1, 0x1
- strh r1, [r0, 0x1E]
-_081760DA:
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r4
- movs r1, 0x1E
- ldrsh r0, [r0, r1]
- cmp r0, 0
- bne _081760F4
- movs r0, 0
- b _081760F6
- .pool
-_081760F4:
- movs r0, 0x1
-_081760F6:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_817603C
-
- thumb_func_start sub_81760FC
-sub_81760FC: @ 81760FC
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r4, =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r2, r0, r4
- movs r1, 0x8
- ldrsh r0, [r2, r1]
- cmp r0, 0x1
- beq _0817612C
- cmp r0, 0x1
- bgt _0817611A
- b _08176244
-_0817611A:
- cmp r0, 0x2
- beq _08176158
- cmp r0, 0x3
- bne _08176124
- b _08176230
-_08176124:
- b _08176244
- .pool
-_0817612C:
- ldr r0, =gUnknown_0203BCE8
- ldr r0, [r0]
- adds r0, 0x90
- ldrh r0, [r0]
- cmp r0, 0
- bne _0817614E
- movs r3, 0xA
- ldrsh r0, [r2, r3]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r4
- movs r3, 0x24
- ldrsh r0, [r1, r3]
- cmp r0, 0
- bne _0817614E
- b _08176244
-_0817614E:
- ldrh r0, [r2, 0x8]
- adds r0, 0x1
- b _08176242
- .pool
-_08176158:
- ldr r6, =gUnknown_0203BCE8
- ldr r3, [r6]
- adds r0, r3, 0
- adds r0, 0x8E
- ldrh r0, [r0]
- cmp r0, 0x47
- beq _08176244
- movs r0, 0xA
- ldrsh r1, [r2, r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r4
- ldr r1, [r0]
- ldr r0, =sub_8175774
- cmp r1, r0
- bne _08176244
- adds r0, r3, 0
- adds r0, 0x92
- ldrh r0, [r0]
- lsls r0, 1
- adds r0, r3, r0
- ldrh r0, [r0]
- ldr r4, =gUnknown_085E6F7C
- adds r1, r3, 0
- adds r1, 0x90
- ldrh r3, [r1]
- lsls r2, r3, 1
- adds r1, r2, r4
- ldrb r1, [r1]
- adds r4, 0x1
- adds r2, r4
- ldrb r2, [r2]
- bl sub_8177224
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r0, [r6]
- adds r1, r0, 0
- adds r1, 0x92
- ldrh r3, [r1]
- adds r0, 0x94
- ldrh r0, [r0]
- subs r0, 0x1
- cmp r3, r0
- bge _081761D8
- adds r0, r3, 0x1
- strh r0, [r1]
- ldr r1, =gSprites
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r0, r1
- movs r1, 0x32
- b _081761EA
- .pool
-_081761D8:
- movs r0, 0
- strh r0, [r1]
- ldr r1, =gSprites
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r0, r1
- movs r1, 0x80
- lsls r1, 2
-_081761EA:
- strh r1, [r0, 0x34]
- ldr r0, =gUnknown_0203BCE8
- ldr r1, [r0]
- adds r2, r1, 0
- adds r2, 0x8E
- ldrh r0, [r2]
- adds r0, 0x1
- strh r0, [r2]
- adds r1, 0x90
- ldrh r0, [r1]
- cmp r0, 0x2
- bne _08176210
- movs r0, 0
- b _08176212
- .pool
-_08176210:
- adds r0, 0x1
-_08176212:
- strh r0, [r1]
- ldr r0, =gTasks
- lsls r1, r5, 2
- adds r1, r5
- lsls r1, 3
- adds r1, r0
- movs r0, 0x32
- strh r0, [r1, 0xE]
- ldrh r0, [r1, 0x8]
- adds r0, 0x1
- strh r0, [r1, 0x8]
- b _08176244
- .pool
-_08176230:
- ldrh r1, [r2, 0xE]
- movs r3, 0xE
- ldrsh r0, [r2, r3]
- cmp r0, 0
- beq _08176240
- subs r0, r1, 0x1
- strh r0, [r2, 0xE]
- b _08176244
-_08176240:
- movs r0, 0x1
-_08176242:
- strh r0, [r2, 0x8]
-_08176244:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_81760FC
-
- thumb_func_start sub_817624C
-sub_817624C: @ 817624C
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r1, =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- movs r2, 0x8
- ldrsh r0, [r0, r2]
- adds r6, r1, 0
- cmp r0, 0x32
- bls _08176268
- b _08176514
-_08176268:
- lsls r0, 2
- ldr r1, =_0817627C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_0817627C:
- .4byte _08176348
- .4byte _0817636C
- .4byte _081763C0
- .4byte _081763D8
- .4byte _08176414
- .4byte _08176438
- .4byte _08176484
- .4byte _08176514
- .4byte _08176514
- .4byte _08176514
- .4byte _08176490
- .4byte _08176514
- .4byte _08176514
- .4byte _08176514
- .4byte _08176514
- .4byte _08176514
- .4byte _08176514
- .4byte _08176514
- .4byte _08176514
- .4byte _08176514
- .4byte _081764B0
- .4byte _08176514
- .4byte _08176514
- .4byte _08176514
- .4byte _08176514
- .4byte _08176514
- .4byte _08176514
- .4byte _08176514
- .4byte _08176514
- .4byte _08176514
- .4byte _081764D4
- .4byte _08176514
- .4byte _08176514
- .4byte _08176514
- .4byte _08176514
- .4byte _08176514
- .4byte _08176514
- .4byte _08176514
- .4byte _08176514
- .4byte _08176514
- .4byte _08176514
- .4byte _08176514
- .4byte _08176514
- .4byte _08176514
- .4byte _08176514
- .4byte _08176514
- .4byte _08176514
- .4byte _08176514
- .4byte _08176514
- .4byte _08176514
- .4byte _08176508
-_08176348:
- lsls r4, r5, 2
- adds r4, r5
- lsls r4, 3
- adds r4, r6
- ldrh r0, [r4, 0x12]
- lsls r0, 16
- asrs r0, 17
- movs r1, 0x7F
- ands r0, r1
- movs r1, 0xC
- bl Sin
- ldr r1, =gUnknown_0203BD26
- strh r0, [r1]
- b _08176390
- .pool
-_0817636C:
- ldr r7, =gUnknown_0203BD26
- movs r3, 0
- ldrsh r4, [r7, r3]
- cmp r4, 0
- beq _0817639C
- lsls r4, r5, 2
- adds r4, r5
- lsls r4, 3
- adds r4, r6
- ldrh r0, [r4, 0x12]
- lsls r0, 16
- asrs r0, 17
- movs r1, 0x7F
- ands r0, r1
- movs r1, 0xC
- bl Sin
- strh r0, [r7]
-_08176390:
- ldrh r0, [r4, 0x12]
- adds r0, 0x1
- strh r0, [r4, 0x12]
- b _08176514
- .pool
-_0817639C:
- ldr r3, =gSprites
- lsls r1, r5, 2
- adds r1, r5
- lsls r1, 3
- adds r1, r6
- movs r0, 0xC
- ldrsh r2, [r1, r0]
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r0, r3
- movs r2, 0x2
- strh r2, [r0, 0x2E]
- strh r4, [r1, 0x12]
- b _08176430
- .pool
-_081763C0:
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r1, r0, r6
- ldrh r2, [r1, 0x12]
- movs r3, 0x12
- ldrsh r0, [r1, r3]
- cmp r0, 0x3F
- bgt _08176430
- adds r0, r2, 0x1
- strh r0, [r1, 0x12]
- b _0817644E
-_081763D8:
- ldr r3, =gSprites
- lsls r2, r5, 2
- adds r2, r5
- lsls r2, 3
- adds r2, r6
- movs r0, 0xC
- ldrsh r1, [r2, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- movs r1, 0x3
- strh r1, [r0, 0x2E]
- movs r0, 0xE
- ldrsh r1, [r2, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- movs r1, 0x1
- strh r1, [r0, 0x2E]
- movs r0, 0x78
- strh r0, [r2, 0x10]
- ldrh r0, [r2, 0x8]
- adds r0, 0x1
- strh r0, [r2, 0x8]
- b _08176514
- .pool
-_08176414:
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r1, r0, r6
- ldrh r2, [r1, 0x10]
- movs r3, 0x10
- ldrsh r0, [r1, r3]
- cmp r0, 0
- beq _0817642C
- subs r0, r2, 0x1
- strh r0, [r1, 0x10]
- b _08176514
-_0817642C:
- movs r0, 0x40
- strh r0, [r1, 0x12]
-_08176430:
- ldrh r0, [r1, 0x8]
- adds r0, 0x1
- strh r0, [r1, 0x8]
- b _08176514
-_08176438:
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r4, r0, r6
- ldrh r1, [r4, 0x12]
- movs r2, 0x12
- ldrsh r0, [r4, r2]
- cmp r0, 0
- ble _08176464
- subs r0, r1, 0x1
- strh r0, [r4, 0x12]
-_0817644E:
- movs r1, 0x7F
- ands r0, r1
- movs r1, 0x14
- bl Sin
- ldr r1, =gUnknown_0203BD26
- strh r0, [r1]
- b _08176514
- .pool
-_08176464:
- ldr r2, =gSprites
- movs r3, 0xC
- ldrsh r1, [r4, r3]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x1
- strh r1, [r0, 0x2E]
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- b _08176514
- .pool
-_08176484:
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r6
- movs r1, 0x32
- b _08176512
-_08176490:
- ldr r3, =gSprites
- lsls r1, r5, 2
- adds r1, r5
- lsls r1, 3
- adds r1, r6
- movs r0, 0xE
- ldrsh r2, [r1, r0]
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r0, r3
- movs r2, 0x2
- b _081764C8
- .pool
-_081764B0:
- ldr r3, =gSprites
- lsls r1, r5, 2
- adds r1, r5
- lsls r1, 3
- adds r1, r6
- movs r0, 0xC
- ldrsh r2, [r1, r0]
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r0, r3
- movs r2, 0x4
-_081764C8:
- strh r2, [r0, 0x2E]
- movs r0, 0x32
- strh r0, [r1, 0x8]
- b _08176514
- .pool
-_081764D4:
- ldr r3, =gSprites
- lsls r2, r5, 2
- adds r2, r5
- lsls r2, 3
- adds r2, r6
- movs r0, 0xC
- ldrsh r1, [r2, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- movs r1, 0x5
- strh r1, [r0, 0x2E]
- movs r0, 0xE
- ldrsh r1, [r2, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- movs r1, 0x3
- strh r1, [r0, 0x2E]
- movs r0, 0x32
- strh r0, [r2, 0x8]
- b _08176514
- .pool
-_08176508:
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r6
- movs r1, 0
-_08176512:
- strh r1, [r0, 0x8]
-_08176514:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_817624C
-
- thumb_func_start sub_817651C
-sub_817651C: @ 817651C
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r1, =gTasks
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- adds r0, r1
- movs r3, 0x8
- ldrsh r0, [r0, r3]
- adds r4, r1, 0
- cmp r0, 0x4
- bhi _0817655C
- lsls r0, 2
- ldr r1, =_08176548
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_08176548:
- .4byte _0817655C
- .4byte _081765A0
- .4byte _081765AC
- .4byte _081765F4
- .4byte _08176640
-_0817655C:
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- adds r2, r0, r4
- movs r1, 0xA
- ldrsh r0, [r2, r1]
- ldr r5, =0x00007fff
- cmp r0, r5
- beq _081765A0
- movs r3, 0xC
- ldrsh r1, [r2, r3]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r3, r0, r4
- movs r0, 0x26
- ldrsh r1, [r3, r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r4
- movs r1, 0xC
- ldrsh r0, [r0, r1]
- cmp r0, 0x2
- bne _081765A0
- movs r1, 0xA
- ldrsh r0, [r3, r1]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r4
- movs r0, 0x14
- strh r0, [r1, 0x8]
- strh r5, [r2, 0xA]
-_081765A0:
- movs r0, 0
- bl sub_817B540
- b _08176646
- .pool
-_081765AC:
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- adds r2, r0, r4
- movs r3, 0xA
- ldrsh r0, [r2, r3]
- ldr r5, =0x00007fff
- cmp r0, r5
- beq _08176638
- movs r0, 0xC
- ldrsh r1, [r2, r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r4
- movs r3, 0xA
- ldrsh r1, [r0, r3]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r3, r0, r4
- ldrh r1, [r3, 0x12]
- movs r0, 0x80
- negs r0, r0
- ands r0, r1
- movs r1, 0xA0
- lsls r1, 2
- cmp r0, r1
- bne _08176638
- movs r0, 0x1
- strh r0, [r3, 0x8]
- strh r5, [r2, 0xA]
- b _08176638
- .pool
-_081765F4:
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- adds r2, r0, r4
- ldrh r3, [r2, 0xA]
- movs r0, 0xA
- ldrsh r1, [r2, r0]
- ldr r5, =0x00007fff
- cmp r1, r5
- beq _08176638
- movs r0, 0x92
- lsls r0, 2
- cmp r1, r0
- bne _08176634
- movs r3, 0xC
- ldrsh r1, [r2, r3]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r4
- movs r3, 0xA
- ldrsh r1, [r0, r3]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r4
- movs r1, 0xA
- strh r1, [r0, 0x8]
- strh r5, [r2, 0xA]
- b _08176638
- .pool
-_08176634:
- adds r0, r3, 0x1
- strh r0, [r2, 0xA]
-_08176638:
- movs r0, 0x1
- bl sub_817B540
- b _08176646
-_08176640:
- movs r0, 0x2
- bl sub_817B540
-_08176646:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_817651C
-
- thumb_func_start sub_817664C
-sub_817664C: @ 817664C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- lsls r1, 24
- lsrs r7, r1, 24
- cmp r0, 0x4
- bls _08176662
- b _081769E0
-_08176662:
- lsls r0, 2
- ldr r1, =_08176670
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_08176670:
- .4byte _08176684
- .4byte _0817672C
- .4byte _081767D8
- .4byte _08176884
- .4byte _08176934
-_08176684:
- ldr r5, =gSprites
- ldr r0, =gTasks
- lsls r4, r7, 2
- adds r4, r7
- lsls r4, 3
- adds r4, r0
- movs r1, 0x12
- ldrsh r0, [r4, r1]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r5
- adds r1, 0x3E
- ldrb r3, [r1]
- movs r2, 0x5
- negs r2, r2
- adds r0, r2, 0
- ands r0, r3
- strb r0, [r1]
- movs r0, 0x14
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- adds r0, 0x3E
- ldrb r1, [r0]
- ands r2, r1
- strb r2, [r0]
- movs r0, 0x12
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- movs r3, 0
- movs r2, 0x88
- lsls r2, 1
- strh r2, [r0, 0x20]
- movs r0, 0x14
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- strh r2, [r0, 0x20]
- movs r0, 0x12
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- movs r2, 0x2E
- strh r2, [r0, 0x22]
- movs r0, 0x14
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- strh r2, [r0, 0x22]
- movs r0, 0x12
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- strh r3, [r0, 0x2E]
- movs r0, 0x14
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- strh r3, [r0, 0x2E]
- movs r1, 0x80
- lsls r1, 6
- movs r0, 0
- movs r2, 0x20
- b _081769D4
- .pool
-_0817672C:
- ldr r5, =gSprites
- ldr r0, =gTasks
- lsls r4, r7, 2
- adds r4, r7
- lsls r4, 3
- adds r4, r0
- movs r1, 0x12
- ldrsh r0, [r4, r1]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r5
- adds r1, 0x3E
- ldrb r3, [r1]
- movs r2, 0x5
- negs r2, r2
- adds r0, r2, 0
- ands r0, r3
- strb r0, [r1]
- movs r0, 0x14
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- adds r0, 0x3E
- ldrb r1, [r0]
- ands r2, r1
- strb r2, [r0]
- movs r0, 0x12
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- movs r3, 0
- movs r1, 0x78
- strh r1, [r0, 0x20]
- movs r0, 0x14
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- movs r1, 0x88
- lsls r1, 1
- strh r1, [r0, 0x20]
- movs r0, 0x12
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- movs r2, 0x2E
- strh r2, [r0, 0x22]
- movs r0, 0x14
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- strh r2, [r0, 0x22]
- movs r0, 0x12
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- strh r3, [r0, 0x2E]
- movs r0, 0x14
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- strh r3, [r0, 0x2E]
- movs r1, 0x80
- lsls r1, 6
- movs r0, 0
- movs r2, 0x20
- b _081769D4
- .pool
-_081767D8:
- ldr r5, =gSprites
- ldr r0, =gTasks
- lsls r4, r7, 2
- adds r4, r7
- lsls r4, 3
- adds r4, r0
- movs r1, 0x12
- ldrsh r0, [r4, r1]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r5
- adds r1, 0x3E
- ldrb r3, [r1]
- movs r2, 0x5
- negs r2, r2
- adds r0, r2, 0
- ands r0, r3
- strb r0, [r1]
- movs r0, 0x14
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- adds r0, 0x3E
- ldrb r1, [r0]
- ands r2, r1
- strb r2, [r0]
- movs r0, 0x12
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- movs r3, 0
- movs r1, 0x78
- strh r1, [r0, 0x20]
- movs r0, 0x14
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- movs r1, 0x88
- lsls r1, 1
- strh r1, [r0, 0x20]
- movs r0, 0x12
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- movs r2, 0x2E
- strh r2, [r0, 0x22]
- movs r0, 0x14
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- strh r2, [r0, 0x22]
- movs r0, 0x12
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- strh r3, [r0, 0x2E]
- movs r0, 0x14
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- strh r3, [r0, 0x2E]
- movs r1, 0x80
- lsls r1, 6
- movs r2, 0x80
- lsls r2, 2
- movs r0, 0x1
- b _081769D4
- .pool
-_08176884:
- ldr r5, =gSprites
- ldr r0, =gTasks
- lsls r4, r7, 2
- adds r4, r7
- lsls r4, 3
- adds r4, r0
- movs r1, 0x12
- ldrsh r0, [r4, r1]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r5
- adds r1, 0x3E
- ldrb r3, [r1]
- movs r2, 0x5
- negs r2, r2
- adds r0, r2, 0
- ands r0, r3
- strb r0, [r1]
- movs r0, 0x14
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- adds r0, 0x3E
- ldrb r1, [r0]
- ands r2, r1
- strb r2, [r0]
- movs r0, 0x12
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- movs r3, 0
- movs r1, 0x78
- strh r1, [r0, 0x20]
- movs r0, 0x14
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldr r1, =0x0000ffe0
- strh r1, [r0, 0x20]
- movs r0, 0x12
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- movs r2, 0x2E
- strh r2, [r0, 0x22]
- movs r0, 0x14
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- strh r2, [r0, 0x22]
- movs r0, 0x12
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- strh r3, [r0, 0x2E]
- movs r0, 0x14
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- strh r3, [r0, 0x2E]
- movs r1, 0x80
- lsls r1, 6
- movs r2, 0x80
- lsls r2, 2
- movs r0, 0x1
- b _081769D4
- .pool
-_08176934:
- ldr r5, =gSprites
- ldr r0, =gTasks
- lsls r4, r7, 2
- adds r4, r7
- lsls r4, 3
- adds r4, r0
- movs r1, 0x12
- ldrsh r0, [r4, r1]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r5
- adds r1, 0x3E
- ldrb r3, [r1]
- movs r2, 0x5
- negs r2, r2
- adds r0, r2, 0
- ands r0, r3
- strb r0, [r1]
- movs r0, 0x14
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- adds r0, 0x3E
- ldrb r1, [r0]
- ands r2, r1
- strb r2, [r0]
- movs r0, 0x12
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- movs r3, 0
- movs r1, 0x58
- strh r1, [r0, 0x20]
- movs r0, 0x14
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- movs r1, 0x98
- strh r1, [r0, 0x20]
- movs r0, 0x12
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- movs r2, 0x2E
- strh r2, [r0, 0x22]
- movs r0, 0x14
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- strh r2, [r0, 0x22]
- movs r0, 0x12
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- strh r3, [r0, 0x2E]
- movs r0, 0x14
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- strh r3, [r0, 0x2E]
- movs r1, 0x80
- lsls r1, 6
- movs r2, 0x80
- lsls r2, 2
- movs r0, 0x2
-_081769D4:
- movs r3, 0x8
- bl sub_817B3DC
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x8]
-_081769E0:
- ldr r0, =sub_817651C
- movs r1, 0
- bl CreateTask
- ldr r6, =gTasks
- lsls r1, r7, 2
- adds r1, r7
- lsls r1, 3
- adds r5, r1, r6
- lsls r0, 24
- lsrs r0, 24
- movs r4, 0
- strh r0, [r5, 0xC]
- movs r0, 0xC
- ldrsh r1, [r5, r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r6
- mov r1, r8
- strh r1, [r0, 0x8]
- movs r0, 0xC
- ldrsh r1, [r5, r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r6
- strh r4, [r0, 0xA]
- movs r0, 0xC
- ldrsh r1, [r5, r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r6
- strh r7, [r0, 0xC]
- ldr r0, =sub_817624C
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0xA]
- movs r0, 0xA
- ldrsh r1, [r5, r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r6
- strh r4, [r0, 0x8]
- movs r0, 0xA
- ldrsh r1, [r5, r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r6
- strh r7, [r0, 0xA]
- movs r0, 0xA
- ldrsh r1, [r5, r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r6
- ldrh r1, [r5, 0x12]
- strh r1, [r0, 0xC]
- movs r0, 0xA
- ldrsh r1, [r5, r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r6
- ldrh r1, [r5, 0x14]
- strh r1, [r0, 0xE]
- movs r0, 0xA
- ldrsh r1, [r5, r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r6
- strh r4, [r0, 0x10]
- mov r1, r8
- cmp r1, 0x2
- bne _08176A94
- movs r1, 0xA
- ldrsh r0, [r5, r1]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r6
- movs r0, 0x45
- strh r0, [r1, 0x12]
-_08176A94:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_817664C
-
- thumb_func_start sub_8176AB0
-sub_8176AB0: @ 8176AB0
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r1, 24
- lsrs r5, r1, 24
- ldr r0, =gMain
- movs r1, 0x87
- lsls r1, 3
- adds r6, r0, r1
- ldrb r0, [r6]
- cmp r0, 0x1
- beq _08176B30
- cmp r0, 0x1
- ble _08176AD6
- cmp r0, 0x2
- beq _08176B54
- cmp r0, 0x3
- bne _08176AD6
- b _08176C80
-_08176AD6:
- movs r0, 0
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x1C
- movs r1, 0x8
- bl SetGpuReg
- movs r0, 0x1E
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x18
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x1A
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x14
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x16
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x50
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x52
- movs r1, 0
- bl SetGpuReg
- bl ResetSpriteData
- bl FreeAllSpritePalettes
- movs r0, 0x1
- strb r0, [r6]
- b _08176C96
- .pool
-_08176B30:
- ldr r1, =gUnknown_0203BD24
- movs r0, 0x22
- strh r0, [r1]
- ldr r1, =gUnknown_0203BD26
- movs r0, 0
- strh r0, [r1]
- adds r0, r4, 0
- bl sub_817B1C8
- ldrb r0, [r6]
- adds r0, 0x1
- strb r0, [r6]
- b _08176C96
- .pool
-_08176B54:
- ldr r0, =gSaveBlock2Ptr
- ldr r0, [r0]
- ldrb r0, [r0, 0x8]
- cmp r0, 0
- bne _08176BD8
- ldr r0, =gUnknown_085F5334
- bl LoadCompressedObjectPic
- ldr r0, =gUnknown_085F53BC
- bl LoadCompressedObjectPic
- ldr r0, =gUnknown_085F5354
- bl LoadCompressedObjectPic
- ldr r0, =gUnknown_085F5384
- bl LoadSpritePalettes
- movs r0, 0x78
- movs r1, 0x2E
- bl sub_817B834
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r0, =gTasks
- lsls r4, r5, 2
- adds r4, r5
- lsls r4, 3
- adds r4, r0
- strh r2, [r4, 0x12]
- ldr r6, =gSprites
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r5, r6, 0
- adds r5, 0x1C
- adds r2, r0, r5
- ldr r1, =sub_8176EE8
- str r1, [r2]
- adds r6, 0x8
- adds r0, r6
- ldr r1, =gUnknown_085E6FD0
- str r1, [r0]
- movs r0, 0x88
- lsls r0, 1
- movs r1, 0x2E
- bl sub_817B88C
- b _08176C2C
- .pool
-_08176BD8:
- ldr r0, =gUnknown_085F5344
- bl LoadCompressedObjectPic
- ldr r0, =gUnknown_085F53AC
- bl LoadCompressedObjectPic
- ldr r0, =gUnknown_085F5354
- bl LoadCompressedObjectPic
- ldr r0, =gUnknown_085F5384
- bl LoadSpritePalettes
- movs r0, 0x78
- movs r1, 0x2E
- bl sub_817B88C
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r0, =gTasks
- lsls r4, r5, 2
- adds r4, r5
- lsls r4, 3
- adds r4, r0
- strh r2, [r4, 0x12]
- ldr r6, =gSprites
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r5, r6, 0
- adds r5, 0x1C
- adds r2, r0, r5
- ldr r1, =sub_8176EE8
- str r1, [r2]
- adds r6, 0x8
- adds r0, r6
- ldr r1, =gUnknown_085E6FD0
- str r1, [r0]
- movs r0, 0x88
- lsls r0, 1
- movs r1, 0x2E
- bl sub_817B834
-_08176C2C:
- lsls r0, 24
- lsrs r2, r0, 24
- strh r2, [r4, 0x14]
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r5, r0, r5
- ldr r1, =sub_8176F90
- str r1, [r5]
- adds r0, r6
- ldr r1, =gUnknown_085E7010
- str r1, [r0]
- ldr r1, =gMain
- movs r0, 0x87
- lsls r0, 3
- adds r1, r0
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _08176C96
- .pool
-_08176C80:
- adds r0, r4, 0
- adds r1, r5, 0
- bl sub_817664C
- adds r0, r4, 0
- bl sub_817B3A8
- movs r0, 0
- strb r0, [r6]
- movs r0, 0x1
- b _08176C98
-_08176C96:
- movs r0, 0
-_08176C98:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_8176AB0
-
- thumb_func_start sub_8176CA0
-sub_8176CA0: @ 8176CA0
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
- ldrh r1, [r4, 0x8]
- movs r2, 0x8
- ldrsh r0, [r4, r2]
- cmp r0, 0
- beq _08176CC6
- lsls r0, r1, 24
- lsrs r0, 24
- bl DestroyTask
- movs r0, 0
- strh r0, [r4, 0x8]
-_08176CC6:
- ldrh r1, [r4, 0xA]
- movs r2, 0xA
- ldrsh r0, [r4, r2]
- cmp r0, 0
- beq _08176CDC
- lsls r0, r1, 24
- lsrs r0, 24
- bl DestroyTask
- movs r0, 0
- strh r0, [r4, 0xA]
-_08176CDC:
- ldrh r1, [r4, 0xC]
- movs r2, 0xC
- ldrsh r0, [r4, r2]
- cmp r0, 0
- beq _08176CF2
- lsls r0, r1, 24
- lsrs r0, 24
- bl DestroyTask
- movs r0, 0
- strh r0, [r4, 0xC]
-_08176CF2:
- ldrh r1, [r4, 0xE]
- movs r2, 0xE
- ldrsh r0, [r4, r2]
- cmp r0, 0
- beq _08176D08
- lsls r0, r1, 24
- lsrs r0, 24
- bl DestroyTask
- movs r0, 0
- strh r0, [r4, 0xE]
-_08176D08:
- ldr r1, =gUnknown_0203BD28
- movs r0, 0x1
- strh r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8176CA0
-
- thumb_func_start sub_8176D1C
-sub_8176D1C: @ 8176D1C
- push {r4-r7,lr}
- adds r3, r0, 0
- adds r4, r2, 0
- lsls r3, 16
- lsrs r3, 16
- lsls r1, 16
- lsrs r7, r1, 16
- lsls r4, 16
- lsrs r5, r4, 16
- ldr r0, =gUnknown_085E5770
- movs r6, 0xC0
- lsls r6, 19
- adds r3, r6
- adds r1, r3, 0
- bl LZ77UnCompVram
- ldr r0, =gIntroCopyright_Pal
- adds r1, r5, 0
- movs r2, 0x20
- bl LoadPalette
- lsrs r4, 20
- lsls r4, 28
- lsrs r4, 16
- movs r1, 0
- adds r4, 0x1
- ldr r2, =0x000003ff
-_08176D52:
- lsls r0, r1, 1
- adds r0, r7
- adds r0, r6
- strh r4, [r0]
- adds r0, r1, 0x1
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, r2
- bls _08176D52
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8176D1C
-
- thumb_func_start sub_8176D78
-sub_8176D78: @ 8176D78
- push {lr}
- lsls r0, 24
- lsrs r2, r0, 24
- adds r3, r2, 0
- movs r0, 0x3F
- ands r0, r2
- adds r1, r0, 0
- adds r1, 0x50
- cmp r2, 0xFF
- bne _08176D90
- movs r0, 0x1
- b _08176DB6
-_08176D90:
- movs r0, 0x80
- ands r0, r2
- cmp r0, 0
- beq _08176DA0
- movs r2, 0x80
- lsls r2, 4
- adds r0, r2, 0
- orrs r1, r0
-_08176DA0:
- movs r0, 0x40
- ands r3, r0
- cmp r3, 0
- beq _08176DB4
- movs r2, 0x80
- lsls r2, 3
- adds r0, r2, 0
- orrs r1, r0
- lsls r0, r1, 16
- lsrs r1, r0, 16
-_08176DB4:
- adds r0, r1, 0
-_08176DB6:
- pop {r1}
- bx r1
- thumb_func_end sub_8176D78
-
- thumb_func_start sub_8176DBC
-sub_8176DBC: @ 8176DBC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0xC
- str r0, [sp]
- ldr r0, [sp, 0x2C]
- lsls r1, 24
- lsrs r1, 24
- mov r10, r1
- lsls r2, 24
- lsrs r2, 24
- str r2, [sp, 0x4]
- lsls r3, 16
- lsrs r3, 16
- str r3, [sp, 0x8]
- lsls r0, 16
- lsrs r0, 20
- lsls r0, 28
- lsrs r0, 16
- mov r9, r0
- movs r5, 0
-_08176DEA:
- movs r4, 0
- lsls r7, r5, 1
- ldr r1, [sp, 0x4]
- adds r0, r1, r5
- adds r2, r5, 0x1
- mov r8, r2
- lsls r0, 6
- ldr r1, [sp, 0x8]
- adds r6, r0, r1
-_08176DFC:
- adds r0, r7, r5
- adds r0, r4
- ldr r2, [sp]
- adds r0, r2, r0
- ldrb r0, [r0]
- bl sub_8176D78
- mov r2, r10
- adds r1, r2, r4
- lsls r1, 1
- adds r1, r6
- movs r2, 0xC0
- lsls r2, 19
- adds r1, r2
- add r0, r9
- strh r0, [r1]
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x2
- bls _08176DFC
- mov r1, r8
- lsls r0, r1, 24
- lsrs r5, r0, 24
- cmp r5, 0x4
- bls _08176DEA
- add sp, 0xC
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8176DBC
-
- thumb_func_start sub_8176E40
-sub_8176E40: @ 8176E40
- push {r4-r7,lr}
- sub sp, 0x4
- lsls r0, 16
- lsrs r5, r0, 16
- lsls r1, 16
- lsrs r6, r1, 16
- lsrs r1, 20
- lsls r1, 28
- lsrs r1, 16
- movs r2, 0
- ldr r7, =gUnknown_085E5BAC
- movs r4, 0xC0
- lsls r4, 19
- adds r1, 0x1
- ldr r3, =0x000003ff
-_08176E5E:
- lsls r0, r2, 1
- adds r0, r5
- adds r0, r4
- strh r1, [r0]
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- cmp r2, r3
- bls _08176E5E
- str r6, [sp]
- adds r0, r7, 0
- movs r1, 0x3
- movs r2, 0x7
- adds r3, r5, 0
- bl sub_8176DBC
- ldr r0, =gUnknown_085E5BBB
- str r6, [sp]
- movs r1, 0x7
- movs r2, 0x7
- adds r3, r5, 0
- bl sub_8176DBC
- ldr r4, =gUnknown_085E5BCA
- str r6, [sp]
- adds r0, r4, 0
- movs r1, 0xB
- movs r2, 0x7
- adds r3, r5, 0
- bl sub_8176DBC
- str r6, [sp]
- adds r0, r4, 0
- movs r1, 0x10
- movs r2, 0x7
- adds r3, r5, 0
- bl sub_8176DBC
- ldr r0, =gUnknown_085E5BD9
- str r6, [sp]
- movs r1, 0x14
- movs r2, 0x7
- adds r3, r5, 0
- bl sub_8176DBC
- ldr r0, =gUnknown_085E5BE8
- str r6, [sp]
- movs r1, 0x18
- movs r2, 0x7
- adds r3, r5, 0
- bl sub_8176DBC
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8176E40
-
- thumb_func_start sub_8176EE8
-sub_8176EE8: @ 8176EE8
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, =gUnknown_0203BD28
- movs r1, 0
- ldrsh r0, [r0, r1]
- cmp r0, 0
- beq _08176F04
- adds r0, r4, 0
- bl DestroySprite
- b _08176F88
- .pool
-_08176F04:
- movs r2, 0x2E
- ldrsh r0, [r4, r2]
- cmp r0, 0x5
- bhi _08176F88
- lsls r0, 2
- ldr r1, =_08176F1C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_08176F1C:
- .4byte _08176F34
- .4byte _08176F3E
- .4byte _08176F44
- .4byte _08176F4E
- .4byte _08176F58
- .4byte _08176F6E
-_08176F34:
- adds r0, r4, 0
- movs r1, 0
- bl StartSpriteAnimIfDifferent
- b _08176F88
-_08176F3E:
- adds r0, r4, 0
- movs r1, 0x1
- b _08176F72
-_08176F44:
- adds r0, r4, 0
- movs r1, 0x2
- bl StartSpriteAnimIfDifferent
- b _08176F88
-_08176F4E:
- adds r0, r4, 0
- movs r1, 0x3
- bl StartSpriteAnimIfDifferent
- b _08176F88
-_08176F58:
- adds r0, r4, 0
- movs r1, 0
- bl StartSpriteAnimIfDifferent
- ldrh r1, [r4, 0x20]
- movs r2, 0x20
- ldrsh r0, [r4, r2]
- cmp r0, 0x78
- ble _08176F88
- subs r0, r1, 0x1
- b _08176F86
-_08176F6E:
- adds r0, r4, 0
- movs r1, 0
-_08176F72:
- bl StartSpriteAnimIfDifferent
- ldrh r2, [r4, 0x20]
- movs r0, 0x20
- ldrsh r1, [r4, r0]
- movs r0, 0x20
- negs r0, r0
- cmp r1, r0
- ble _08176F88
- subs r0, r2, 0x1
-_08176F86:
- strh r0, [r4, 0x20]
-_08176F88:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8176EE8
-
- thumb_func_start sub_8176F90
-sub_8176F90: @ 8176F90
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, =gUnknown_0203BD28
- movs r1, 0
- ldrsh r0, [r0, r1]
- cmp r0, 0
- beq _08176FAC
- adds r0, r4, 0
- bl DestroySprite
- b _08177048
- .pool
-_08176FAC:
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- cmp r0, 0x1
- beq _08176FD4
- cmp r0, 0x1
- bgt _08176FBE
- cmp r0, 0
- beq _08176FC8
- b _08177048
-_08176FBE:
- cmp r0, 0x2
- beq _08177010
- cmp r0, 0x3
- beq _0817702E
- b _08177048
-_08176FC8:
- strh r0, [r4, 0x26]
- adds r0, r4, 0
- movs r1, 0
- bl StartSpriteAnimIfDifferent
- b _08177048
-_08176FD4:
- movs r1, 0x20
- ldrsh r0, [r4, r1]
- cmp r0, 0xC8
- ble _08176FE6
- adds r0, r4, 0
- movs r1, 0x1
- bl StartSpriteAnimIfDifferent
- b _08176FEE
-_08176FE6:
- adds r0, r4, 0
- movs r1, 0x2
- bl StartSpriteAnimIfDifferent
-_08176FEE:
- ldrh r2, [r4, 0x20]
- movs r0, 0x20
- ldrsh r1, [r4, r0]
- movs r0, 0x20
- negs r0, r0
- cmp r1, r0
- ble _08177000
- subs r0, r2, 0x2
- strh r0, [r4, 0x20]
-_08177000:
- ldr r0, =gUnknown_0203BD26
- ldrh r0, [r0]
- negs r0, r0
- strh r0, [r4, 0x26]
- b _08177048
- .pool
-_08177010:
- ldrh r0, [r4, 0x3C]
- adds r0, 0x1
- strh r0, [r4, 0x3C]
- adds r0, r4, 0
- movs r1, 0
- bl StartSpriteAnimIfDifferent
- ldrh r1, [r4, 0x3C]
- movs r0, 0x3
- ands r0, r1
- cmp r0, 0
- bne _08177048
- ldrh r0, [r4, 0x20]
- adds r0, 0x1
- b _08177046
-_0817702E:
- adds r0, r4, 0
- movs r1, 0
- bl StartSpriteAnimIfDifferent
- ldrh r2, [r4, 0x20]
- movs r0, 0x20
- ldrsh r1, [r4, r0]
- movs r0, 0x20
- negs r0, r0
- cmp r1, r0
- ble _08177048
- subs r0, r2, 0x1
-_08177046:
- strh r0, [r4, 0x20]
-_08177048:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8176F90
-
- thumb_func_start sub_8177050
-sub_8177050: @ 8177050
- push {r4,r5,lr}
- sub sp, 0x4
- adds r5, r0, 0
- ldr r0, =gUnknown_0203BD28
- movs r1, 0
- ldrsh r0, [r0, r1]
- cmp r0, 0
- beq _0817706C
- ldrh r0, [r5, 0x3A]
- bl sub_818D820
- b _0817721C
- .pool
-_0817706C:
- ldrh r0, [r5, 0x3C]
- adds r0, 0x1
- strh r0, [r5, 0x3C]
- movs r2, 0x2E
- ldrsh r0, [r5, r2]
- cmp r0, 0xA
- bhi _081770B4
- lsls r0, 2
- ldr r1, =_08177088
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_08177088:
- .4byte _081770B4
- .4byte _0817710E
- .4byte _08177190
- .4byte _081771C6
- .4byte _081770B4
- .4byte _081770B4
- .4byte _081770B4
- .4byte _081770B4
- .4byte _081770B4
- .4byte _081771FE
- .4byte _08177206
-_081770B4:
- ldrb r1, [r5, 0x1]
- movs r0, 0x4
- negs r0, r0
- ands r0, r1
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r5, 0x1]
- movs r0, 0x30
- ldrsh r1, [r5, r0]
- movs r0, 0x1F
- ands r1, r0
- lsls r1, 1
- ldrb r2, [r5, 0x3]
- movs r0, 0x3F
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r5, 0x3]
- movs r0, 0x10
- strh r0, [r5, 0x32]
- ldrh r4, [r5, 0x30]
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x80
- lsls r0, 9
- movs r1, 0x10
- bl __divsi3
- adds r1, r0, 0
- str r1, [sp]
- adds r0, r4, 0
- movs r2, 0
- movs r3, 0
- bl SetOamMatrix
- adds r2, r5, 0
- adds r2, 0x3E
- ldrb r1, [r2]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
- movs r0, 0x1
- strh r0, [r5, 0x2E]
- b _0817721C
-_0817710E:
- ldrh r1, [r5, 0x32]
- movs r2, 0x32
- ldrsh r0, [r5, r2]
- cmp r0, 0xFF
- bgt _08177144
- adds r0, r1, 0
- adds r0, 0x8
- strh r0, [r5, 0x32]
- ldrh r4, [r5, 0x30]
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x32
- ldrsh r1, [r5, r0]
- movs r0, 0x80
- lsls r0, 9
- bl __divsi3
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- str r1, [sp]
- adds r0, r4, 0
- movs r2, 0
- movs r3, 0
- bl SetOamMatrix
- b _0817714A
-_08177144:
- ldrh r0, [r5, 0x2E]
- adds r0, 0x1
- strh r0, [r5, 0x2E]
-_0817714A:
- movs r2, 0x30
- ldrsh r1, [r5, r2]
- cmp r1, 0x2
- beq _0817721C
- cmp r1, 0x2
- bgt _0817715C
- cmp r1, 0x1
- beq _08177162
- b _0817721C
-_0817715C:
- cmp r1, 0x3
- beq _0817717A
- b _0817721C
-_08177162:
- ldrh r1, [r5, 0x3C]
- movs r0, 0x3
- ands r0, r1
- cmp r0, 0
- bne _08177172
- ldrh r0, [r5, 0x22]
- adds r0, 0x1
- strh r0, [r5, 0x22]
-_08177172:
- ldrh r0, [r5, 0x20]
- subs r0, 0x2
- strh r0, [r5, 0x20]
- b _0817721C
-_0817717A:
- ldrh r0, [r5, 0x3C]
- ands r1, r0
- cmp r1, 0
- bne _08177188
- ldrh r0, [r5, 0x22]
- adds r0, 0x1
- strh r0, [r5, 0x22]
-_08177188:
- ldrh r0, [r5, 0x20]
- adds r0, 0x2
- strh r0, [r5, 0x20]
- b _0817721C
-_08177190:
- ldrh r1, [r5, 0x34]
- movs r2, 0x34
- ldrsh r0, [r5, r2]
- cmp r0, 0
- beq _081771A0
- subs r0, r1, 0x1
- strh r0, [r5, 0x34]
- b _0817721C
-_081771A0:
- movs r1, 0xF4
- lsls r1, 4
- movs r0, 0x50
- bl SetGpuReg
- movs r0, 0x52
- movs r1, 0x10
- bl SetGpuReg
- ldrb r1, [r5, 0x1]
- movs r0, 0xD
- negs r0, r0
- ands r0, r1
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r5, 0x1]
- movs r0, 0x10
- strh r0, [r5, 0x34]
- b _081771FE
-_081771C6:
- ldrh r1, [r5, 0x34]
- movs r2, 0x34
- ldrsh r0, [r5, r2]
- cmp r0, 0
- beq _081771EC
- subs r1, 0x1
- strh r1, [r5, 0x34]
- movs r0, 0x34
- ldrsh r2, [r5, r0]
- movs r0, 0x10
- subs r0, r2
- lsls r0, 8
- adds r1, r0
- lsls r1, 16
- lsrs r1, 16
- movs r0, 0x52
- bl SetGpuReg
- b _0817721C
-_081771EC:
- adds r2, r5, 0
- adds r2, 0x3E
- ldrb r0, [r2]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r2]
- movs r0, 0x9
- strh r0, [r5, 0x2E]
- b _0817721C
-_081771FE:
- ldrh r0, [r5, 0x2E]
- adds r0, 0x1
- strh r0, [r5, 0x2E]
- b _0817721C
-_08177206:
- movs r0, 0x50
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x52
- movs r1, 0
- bl SetGpuReg
- ldrh r0, [r5, 0x3A]
- bl sub_818D820
-_0817721C:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_8177050
-
- thumb_func_start sub_8177224
-sub_8177224: @ 8177224
- push {r4-r7,lr}
- adds r5, r3, 0
- lsls r0, 16
- lsrs r0, 16
- lsls r5, 16
- lsrs r5, 16
- lsls r1, 16
- asrs r1, 16
- lsls r2, 16
- asrs r2, 16
- adds r3, r5, 0
- bl sub_80C0E9C
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r6, =gSprites
- lsls r1, r4, 4
- adds r1, r4
- lsls r1, 2
- adds r2, r1, r6
- ldrb r3, [r2, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r3
- movs r3, 0x4
- orrs r0, r3
- strb r0, [r2, 0x5]
- adds r0, r5, 0x1
- strh r0, [r2, 0x30]
- movs r0, 0x3E
- adds r0, r2
- mov r12, r0
- ldrb r0, [r0]
- orrs r0, r3
- mov r3, r12
- strb r0, [r3]
- adds r0, r6, 0
- adds r0, 0x1C
- adds r1, r0
- ldr r0, =sub_8177050
- str r0, [r1]
- strh r4, [r2, 0x3A]
- ldr r0, =gUnknown_085E7068
- movs r7, 0x20
- ldrsh r1, [r2, r7]
- movs r3, 0x22
- ldrsh r2, [r2, r3]
- movs r3, 0x1
- bl CreateSprite
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- strh r4, [r0, 0x2E]
- lsls r5, 24
- lsrs r5, 24
- adds r1, r5, 0
- bl StartSpriteAnimIfDifferent
- adds r0, r4, 0
- pop {r4-r7}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_8177224
-
- thumb_func_start sub_81772B8
-sub_81772B8: @ 81772B8
- push {r4,lr}
- adds r3, r0, 0
- ldr r4, =gSprites
- movs r1, 0x2E
- ldrsh r0, [r3, r1]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r4
- movs r2, 0x2E
- ldrsh r0, [r1, r2]
- cmp r0, 0xA
- beq _081772DC
- ldr r0, =gUnknown_0203BD28
- movs r2, 0
- ldrsh r0, [r0, r2]
- cmp r0, 0
- beq _081772EC
-_081772DC:
- adds r0, r3, 0
- bl DestroySprite
- b _08177380
- .pool
-_081772EC:
- adds r0, r1, 0
- adds r0, 0x3E
- ldrb r0, [r0]
- movs r1, 0x3E
- adds r1, r3
- mov r12, r1
- movs r1, 0x4
- ands r1, r0
- mov r0, r12
- ldrb r2, [r0]
- movs r0, 0x5
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- mov r1, r12
- strb r0, [r1]
- movs r2, 0x2E
- ldrsh r1, [r3, r2]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrb r1, [r0, 0x1]
- movs r0, 0xC
- ands r0, r1
- ldrb r2, [r3, 0x1]
- movs r1, 0xD
- negs r1, r1
- ands r1, r2
- orrs r1, r0
- strb r1, [r3, 0x1]
- movs r0, 0x2E
- ldrsh r2, [r3, r0]
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r0, r4
- ldrb r0, [r0, 0x1]
- lsls r0, 30
- lsrs r0, 30
- movs r2, 0x4
- negs r2, r2
- ands r1, r2
- orrs r1, r0
- strb r1, [r3, 0x1]
- movs r2, 0x2E
- ldrsh r1, [r3, r2]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrb r0, [r0, 0x3]
- movs r1, 0x3E
- ands r1, r0
- ldrb r2, [r3, 0x3]
- movs r0, 0x3F
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r3, 0x3]
- movs r0, 0x2E
- ldrsh r1, [r3, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrh r0, [r0, 0x20]
- strh r0, [r3, 0x20]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrh r0, [r0, 0x22]
- strh r0, [r3, 0x22]
-_08177380:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_81772B8
-
- thumb_func_start sub_8177388
-sub_8177388: @ 8177388
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r0, =0x00004023
- bl VarGet
- lsls r0, 16
- lsrs r0, 16
- bl GetStarterPokemon
- lsls r0, 16
- lsrs r0, 16
- bl SpeciesToNationalPokedexNum
- lsls r0, 16
- lsrs r0, 16
- mov r10, r0
- movs r4, 0x1
- movs r6, 0
- ldr r5, =0x00000181
-_081773B4:
- adds r0, r4, 0
- movs r1, 0x1
- bl GetSetPokedexFlag
- lsls r0, 24
- cmp r0, 0
- beq _081773D4
- ldr r0, =gUnknown_0203BCE8
- ldr r0, [r0]
- lsls r1, r6, 1
- adds r0, 0x96
- adds r0, r1
- strh r4, [r0]
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
-_081773D4:
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, r5
- bls _081773B4
- adds r4, r6, 0
- ldr r0, =0x00000181
- ldr r1, =gUnknown_0203BCE8
- mov r8, r1
- lsls r7, r4, 16
- cmp r4, r0
- bhi _08177406
- mov r5, r8
- movs r3, 0
- adds r2, r0, 0
-_081773F2:
- ldr r0, [r5]
- lsls r1, r4, 1
- adds r0, 0x96
- adds r0, r1
- strh r3, [r0]
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, r2
- bls _081773F2
-_08177406:
- mov r2, r8
- ldr r1, [r2]
- ldr r2, =0x0000039a
- adds r0, r1, r2
- strh r6, [r0]
- lsrs r0, r7, 16
- cmp r0, 0x46
- bhi _08177430
- adds r0, r1, 0
- adds r0, 0x94
- strh r6, [r0]
- b _08177436
- .pool
-_08177430:
- adds r1, 0x94
- movs r0, 0x47
- strh r0, [r1]
-_08177436:
- movs r6, 0
- ldr r0, =gUnknown_0203BCE8
- mov r9, r0
- ldr r1, =0x0000039a
- mov r8, r1
- movs r7, 0
- b _08177450
- .pool
-_0817744C:
- cmp r6, 0x46
- bhi _081774AC
-_08177450:
- bl Random
- mov r2, r9
- ldr r4, [r2]
- mov r1, r8
- adds r5, r4, r1
- lsls r0, 16
- lsrs r0, 16
- ldrh r1, [r5]
- bl __umodsi3
- lsls r0, 16
- lsrs r3, r0, 16
- lsls r1, r6, 1
- adds r1, r4, r1
- lsls r0, r3, 1
- adds r4, 0x96
- adds r2, r4, r0
- ldrh r0, [r2]
- strh r0, [r1]
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- strh r7, [r2]
- ldrh r0, [r5]
- subs r0, 0x1
- strh r0, [r5]
- lsls r0, 16
- lsrs r0, 16
- cmp r3, r0
- beq _081774A0
- ldrh r0, [r5]
- lsls r0, 1
- adds r0, r4, r0
- ldrh r0, [r0]
- strh r0, [r2]
- ldrh r0, [r5]
- lsls r0, 1
- adds r0, r4, r0
- strh r7, [r0]
-_081774A0:
- mov r2, r9
- ldr r0, [r2]
- add r0, r8
- ldrh r0, [r0]
- cmp r0, 0
- bne _0817744C
-_081774AC:
- ldr r1, =gUnknown_0203BCE8
- ldr r2, [r1]
- adds r3, r2, 0
- adds r3, 0x94
- ldrh r0, [r3]
- mov r8, r1
- cmp r0, 0x46
- bhi _081774F8
- adds r6, r0, 0
- movs r3, 0
- cmp r6, 0x46
- bhi _081774EE
- mov r4, r8
-_081774C6:
- ldr r2, [r4]
- lsls r1, r6, 1
- adds r1, r2, r1
- lsls r0, r3, 1
- adds r0, r2, r0
- ldrh r0, [r0]
- strh r0, [r1]
- adds r0, r3, 0x1
- lsls r0, 16
- lsrs r3, r0, 16
- adds r2, 0x94
- ldrh r2, [r2]
- cmp r3, r2
- bne _081774E4
- movs r3, 0
-_081774E4:
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- cmp r6, 0x46
- bls _081774C6
-_081774EE:
- mov r1, r8
- ldr r0, [r1]
- b _08177538
- .pool
-_081774F8:
- movs r4, 0
- ldrh r0, [r2]
- cmp r0, r10
- beq _08177516
- adds r1, r2, 0
-_08177502:
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- lsls r0, r4, 1
- adds r0, r1, r0
- ldrh r0, [r0]
- cmp r0, r10
- beq _08177516
- cmp r4, 0x46
- bls _08177502
-_08177516:
- mov r0, r8
- ldr r2, [r0]
- adds r0, r2, 0
- adds r0, 0x94
- ldrh r0, [r0]
- subs r0, 0x1
- cmp r4, r0
- bge _08177536
- lsls r0, r4, 1
- adds r0, r2, r0
- adds r2, 0x8C
- ldrh r1, [r2]
- strh r1, [r0]
- mov r1, r10
- strh r1, [r2]
- b _0817753E
-_08177536:
- adds r0, r2, 0
-_08177538:
- adds r0, 0x8C
- mov r2, r10
- strh r2, [r0]
-_0817753E:
- mov r1, r8
- ldr r0, [r1]
- adds r0, 0x94
- movs r1, 0x47
- strh r1, [r0]
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8177388
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/dewford_trend.s b/asm/dewford_trend.s
deleted file mode 100644
index 7d9d67902..000000000
--- a/asm/dewford_trend.s
+++ /dev/null
@@ -1,975 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start InitDewfordTrend
-InitDewfordTrend: @ 81224D4
- push {r4-r7,lr}
- movs r6, 0
- ldr r5, =gSaveBlock1Ptr
-_081224DA:
- movs r0, 0xA
- bl sub_811EE38
- ldr r1, [r5]
- lsls r4, r6, 3
- adds r1, r4
- ldr r2, =0x00002e6c
- adds r1, r2
- strh r0, [r1]
- bl Random
- movs r1, 0x1
- ands r1, r0
- cmp r1, 0
- beq _08122514
- movs r0, 0xC
- bl sub_811EE38
- ldr r1, [r5]
- adds r1, r4
- ldr r7, =0x00002e6e
- adds r1, r7
- b _08122522
- .pool
-_08122514:
- movs r0, 0xD
- bl sub_811EE38
- ldr r1, [r5]
- adds r1, r4
- ldr r2, =0x00002e6e
- adds r1, r2
-_08122522:
- strh r0, [r1]
- bl Random
- ldr r3, [r5]
- adds r3, r4
- movs r2, 0x1
- ands r2, r0
- ldr r7, =0x00002e69
- adds r3, r7
- lsls r2, 6
- ldrb r0, [r3]
- movs r7, 0x41
- negs r7, r7
- adds r1, r7, 0
- ands r0, r1
- orrs r0, r2
- strb r0, [r3]
- ldr r0, =0x00002e68
- adds r1, r4, r0
- ldr r0, [r5]
- adds r0, r1
- bl sub_8122B28
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- cmp r6, 0x4
- bls _081224DA
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r1, =0x00002e68
- adds r0, r1
- movs r1, 0x5
- movs r2, 0
- bl sub_8122804
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end InitDewfordTrend
-
- thumb_func_start UpdateDewfordTrendPerDay
-UpdateDewfordTrendPerDay: @ 8122580
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, 0
- bne _08122596
- b _081226BE
-_08122596:
- lsls r0, r1, 2
- adds r0, r1
- str r0, [sp]
- movs r0, 0
- mov r10, r0
- movs r1, 0x7F
- mov r9, r1
- movs r2, 0x80
- negs r2, r2
- mov r8, r2
-_081225AA:
- ldr r2, [sp]
- mov r3, r10
- lsls r0, r3, 3
- ldr r4, =0x00002e68
- adds r0, r4
- ldr r3, =gSaveBlock1Ptr
- ldr r1, [r3]
- adds r5, r1, r0
- ldrb r6, [r5, 0x1]
- movs r0, 0x40
- ands r0, r6
- cmp r0, 0
- bne _08122608
- ldrb r4, [r5]
- lsls r3, r4, 25
- lsrs r1, r3, 25
- lsls r0, r2, 16
- lsrs r0, 16
- cmp r1, r0
- bcc _081225F8
- adds r0, r1, 0
- subs r0, r2
- mov r1, r9
- ands r0, r1
- mov r1, r8
- ands r1, r4
- orrs r1, r0
- strb r1, [r5]
- movs r0, 0x7F
- ands r1, r0
- cmp r1, 0
- bne _0812269E
- movs r0, 0x40
- orrs r0, r6
- b _0812269C
- .pool
-_081225F8:
- lsrs r0, r3, 25
- subs r2, r0
- mov r0, r8
- ands r0, r4
- strb r0, [r5]
- movs r0, 0x40
- orrs r0, r6
- strb r0, [r5, 0x1]
-_08122608:
- ldrb r7, [r5]
- lsls r0, r7, 25
- lsrs r0, 25
- adds r4, r0, r2
- ldrh r0, [r5]
- lsls r6, r0, 18
- lsls r0, r4, 16
- lsrs r0, 16
- lsrs r1, r6, 25
- cmp r0, r1
- bls _08122678
- adds r0, r4, 0
- bl __umodsi3
- adds r3, r0, 0
- lsrs r1, r6, 25
- adds r0, r4, 0
- str r3, [sp, 0x4]
- bl __udivsi3
- adds r4, r0, 0
- movs r0, 0x1
- eors r4, r0
- ands r4, r0
- lsls r2, r4, 6
- ldrb r0, [r5, 0x1]
- movs r4, 0x41
- negs r4, r4
- adds r1, r4, 0
- ands r0, r1
- orrs r0, r2
- strb r0, [r5, 0x1]
- movs r1, 0x40
- ands r0, r1
- ldr r3, [sp, 0x4]
- cmp r0, 0
- beq _08122662
- adds r1, r3, 0
- mov r0, r9
- ands r1, r0
- mov r0, r8
- ands r0, r7
- orrs r0, r1
- strb r0, [r5]
- b _0812269E
-_08122662:
- ldrh r0, [r5]
- lsls r0, 18
- lsrs r0, 25
- subs r0, r3
- mov r1, r9
- ands r0, r1
- mov r1, r8
- ands r1, r7
- orrs r1, r0
- strb r1, [r5]
- b _0812269E
-_08122678:
- mov r2, r9
- ands r4, r2
- mov r0, r8
- ands r0, r7
- orrs r0, r4
- strb r0, [r5]
- lsls r0, 25
- ldrh r1, [r5]
- lsls r1, 18
- lsrs r0, 25
- lsrs r1, 25
- cmp r0, r1
- bne _0812269E
- ldrb r0, [r5, 0x1]
- movs r3, 0x41
- negs r3, r3
- adds r1, r3, 0
- ands r0, r1
-_0812269C:
- strb r0, [r5, 0x1]
-_0812269E:
- mov r0, r10
- adds r0, 0x1
- lsls r0, 16
- lsrs r0, 16
- mov r10, r0
- cmp r0, 0x4
- bhi _081226AE
- b _081225AA
-_081226AE:
- ldr r4, =gSaveBlock1Ptr
- ldr r0, [r4]
- ldr r1, =0x00002e68
- adds r0, r1
- movs r1, 0x5
- movs r2, 0
- bl sub_8122804
-_081226BE:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end UpdateDewfordTrendPerDay
-
- thumb_func_start sub_81226D8
-sub_81226D8: @ 81226D8
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x8
- mov r8, r0
- movs r0, 0
- movs r1, 0
- str r0, [sp]
- str r1, [sp, 0x4]
- mov r0, r8
- bl sub_8122BB0
- lsls r0, 24
- cmp r0, 0
- beq _081226F8
- b _081227F2
-_081226F8:
- ldr r4, =0x00000893
- adds r0, r4, 0
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- bne _08122744
- adds r0, r4, 0
- bl FlagSet
- ldr r0, =0x00000894
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- bne _08122744
- ldr r0, =gSaveBlock1Ptr
- ldr r1, [r0]
- mov r0, r8
- ldrh r2, [r0]
- ldr r3, =0x00002e6c
- adds r0, r1, r3
- strh r2, [r0]
- mov r2, r8
- ldrh r0, [r2, 0x2]
- adds r3, 0x2
- adds r1, r3
- strh r0, [r1]
- movs r0, 0x1
- b _081227F4
- .pool
-_08122744:
- mov r0, r8
- ldrh r1, [r0, 0x2]
- lsls r1, 16
- ldrh r0, [r0]
- orrs r0, r1
- str r0, [sp, 0x4]
- movs r1, 0x80
- lsls r1, 7
- ldr r0, [sp]
- orrs r0, r1
- str r0, [sp]
- mov r0, sp
- bl sub_8122B28
- movs r5, 0
-_08122762:
- ldr r6, =gSaveBlock1Ptr
- lsls r4, r5, 3
- ldr r1, =0x00002e68
- adds r0, r4, r1
- ldr r1, [r6]
- adds r1, r0
- mov r0, sp
- movs r2, 0
- bl atk90_changetypestoenemyattacktype
- lsls r0, 24
- adds r7, r4, 0
- cmp r0, 0
- beq _081227D4
- movs r2, 0x4
- mov r12, r6
- cmp r2, r5
- bls _081227A6
- ldr r4, =0x00002e68
-_08122788:
- ldr r0, [r6]
- lsls r3, r2, 3
- adds r0, r4
- adds r3, r0, r3
- subs r2, 0x1
- lsls r1, r2, 3
- adds r0, r1
- ldr r1, [r0, 0x4]
- ldr r0, [r0]
- str r0, [r3]
- str r1, [r3, 0x4]
- lsls r2, 16
- lsrs r2, 16
- cmp r2, r5
- bhi _08122788
-_081227A6:
- mov r3, r12
- ldr r2, [r3]
- ldr r0, =0x00002e68
- adds r2, r0
- adds r2, r7
- ldr r0, [sp]
- ldr r1, [sp, 0x4]
- str r0, [r2]
- str r1, [r2, 0x4]
- cmp r5, 0x4
- bne _081227C2
- mov r0, r8
- bl sub_80EDC60
-_081227C2:
- movs r0, 0
- cmp r5, 0
- bne _081227F4
- movs r0, 0x1
- b _081227F4
- .pool
-_081227D4:
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, 0x4
- bls _08122762
- ldr r2, [r6]
- ldr r1, =0x00002e88
- adds r2, r1
- ldr r0, [sp]
- ldr r1, [sp, 0x4]
- str r0, [r2]
- str r1, [r2, 0x4]
- mov r0, r8
- bl sub_80EDC60
-_081227F2:
- movs r0, 0
-_081227F4:
- add sp, 0x8
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_81226D8
-
- thumb_func_start sub_8122804
-sub_8122804: @ 8122804
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- mov r9, r0
- lsls r1, 16
- lsrs r7, r1, 16
- lsls r2, 24
- lsrs r2, 24
- mov r10, r2
- movs r2, 0
- cmp r2, r7
- bcs _0812286C
-_08122820:
- adds r1, r2, 0x1
- lsls r0, r1, 16
- lsrs r5, r0, 16
- mov r8, r1
- cmp r5, r7
- bcs _08122862
- lsls r0, r2, 3
- mov r1, r9
- adds r6, r1, r0
-_08122832:
- lsls r0, r5, 3
- mov r1, r9
- adds r4, r1, r0
- adds r0, r4, 0
- adds r1, r6, 0
- mov r2, r10
- bl atk90_changetypestoenemyattacktype
- lsls r0, 24
- cmp r0, 0
- beq _08122858
- ldr r2, [r4]
- ldr r3, [r4, 0x4]
- ldr r0, [r6]
- ldr r1, [r6, 0x4]
- str r0, [r4]
- str r1, [r4, 0x4]
- str r2, [r6]
- str r3, [r6, 0x4]
-_08122858:
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, r7
- bcc _08122832
-_08122862:
- mov r1, r8
- lsls r0, r1, 16
- lsrs r2, r0, 16
- cmp r2, r7
- bcc _08122820
-_0812286C:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8122804
-
- thumb_func_start sub_812287C
-sub_812287C: @ 812287C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- mov r8, r0
- adds r6, r1, 0
- movs r4, 0x80
- lsls r4, 1
- adds r0, r4, 0
- bl Alloc
- mov r10, r0
- cmp r0, 0
- beq _08122980
- adds r0, r4, 0
- bl Alloc
- adds r7, r0, 0
- cmp r7, 0
- bne _081228B0
- mov r0, r10
- bl Free
- b _08122980
-_081228B0:
- bl GetLinkPlayerCount
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- movs r5, 0
- cmp r5, r9
- bcs _081228DE
-_081228C0:
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- add r0, r10
- adds r1, r5, 0
- muls r1, r6
- add r1, r8
- movs r2, 0x28
- bl memcpy
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, r9
- bcc _081228C0
-_081228DE:
- mov r4, r10
- mov r8, r7
- movs r3, 0
- movs r5, 0
- cmp r5, r9
- bcs _08122946
-_081228EA:
- movs r6, 0
-_081228EC:
- adds r0, r7, 0
- adds r1, r4, 0
- adds r2, r3, 0
- str r3, [sp]
- bl sub_8122C1C
- lsls r0, 16
- asrs r0, 16
- ldr r3, [sp]
- cmp r0, 0
- bge _08122918
- ldr r0, [r4]
- ldr r1, [r4, 0x4]
- mov r2, r8
- adds r2, 0x8
- mov r8, r2
- subs r2, 0x8
- stm r2!, {r0,r1}
- adds r0, r3, 0x1
- lsls r0, 16
- lsrs r3, r0, 16
- b _08122930
-_08122918:
- lsls r0, 3
- adds r2, r7, r0
- ldrb r1, [r2]
- lsls r1, 25
- ldrb r0, [r4]
- lsls r0, 25
- cmp r1, r0
- bcs _08122930
- ldr r0, [r4]
- ldr r1, [r4, 0x4]
- str r0, [r2]
- str r1, [r2, 0x4]
-_08122930:
- adds r4, 0x8
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- cmp r6, 0x4
- bls _081228EC
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, r9
- bcc _081228EA
-_08122946:
- adds r0, r7, 0
- adds r1, r3, 0
- movs r2, 0x2
- bl sub_8122804
- adds r4, r7, 0
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r1, =0x00002e68
- adds r1, r0
- mov r8, r1
- movs r5, 0
-_0812295E:
- ldm r4!, {r0,r1}
- mov r2, r8
- adds r2, 0x8
- mov r8, r2
- subs r2, 0x8
- stm r2!, {r0,r1}
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, 0x4
- bls _0812295E
- mov r0, r10
- bl Free
- adds r0, r7, 0
- bl Free
-_08122980:
- 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_812287C
-
- thumb_func_start sub_8122998
-sub_8122998: @ 8122998
- push {lr}
- ldr r2, =gSaveBlock1Ptr
- ldr r0, =gSpecialVar_0x8004
- ldrh r1, [r0]
- lsls r1, 3
- ldr r0, [r2]
- adds r1, r0
- ldr r0, =gStringVar1
- ldr r2, =0x00002e6c
- adds r1, r2
- movs r2, 0x2
- movs r3, 0x1
- bl ConvertEasyChatWordsToString
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8122998
-
- thumb_func_start sub_81229C8
-sub_81229C8: @ 81229C8
- push {r4,lr}
- movs r4, 0
- ldr r0, =gSaveBlock1Ptr
- ldr r3, [r0]
- ldr r1, =0x00002e68
- adds r0, r3, r1
- ldrb r1, [r0]
- lsls r1, 25
- lsrs r1, 25
- ldr r2, =0x00002e70
- adds r0, r3, r2
- ldrb r0, [r0]
- lsls r0, 25
- lsrs r0, 25
- subs r1, r0
- cmp r1, 0x1
- bgt _08122A0C
- ldr r1, =0x00002e69
- adds r0, r3, r1
- ldrb r1, [r0]
- movs r2, 0x40
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- bne _08122A0C
- ldr r1, =0x00002e71
- adds r0, r3, r1
- ldrb r1, [r0]
- adds r0, r2, 0
- ands r0, r1
- lsls r0, 24
- lsrs r0, 24
- negs r0, r0
- lsrs r4, r0, 31
-_08122A0C:
- ldr r0, =gSpecialVar_Result
- strh r4, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81229C8
-
- thumb_func_start sub_8122A30
-sub_8122A30: @ 8122A30
- ldr r2, =gSpecialVar_Result
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r3, =0x00002e6c
- adds r1, r0, r3
- adds r3, 0x2
- adds r0, r3
- ldrh r0, [r0]
- ldrh r1, [r1]
- adds r0, r1
- movs r1, 0x7
- ands r0, r1
- strh r0, [r2]
- bx lr
- .pool
- thumb_func_end sub_8122A30
-
- thumb_func_start atk90_changetypestoenemyattacktype
-atk90_changetypestoenemyattacktype: @ 8122A58
- push {r4,r5,lr}
- adds r3, r0, 0
- adds r5, r1, 0
- lsls r2, 24
- lsrs r2, 24
- adds r0, r2, 0
- cmp r2, 0x1
- beq _08122A9E
- cmp r2, 0x1
- bgt _08122A72
- cmp r2, 0
- beq _08122A78
- b _08122B1A
-_08122A72:
- cmp r0, 0x2
- beq _08122ACA
- b _08122B1A
-_08122A78:
- ldrb r0, [r3]
- lsls r1, r0, 25
- ldrb r0, [r5]
- lsls r0, 25
- cmp r1, r0
- bhi _08122B16
- cmp r1, r0
- bcc _08122AC6
- ldrh r0, [r3]
- lsls r3, r0, 18
- ldrh r0, [r5]
- lsls r2, r0, 18
- lsrs r1, r3, 25
- lsrs r0, r2, 25
- cmp r1, r0
- bhi _08122B16
- lsrs r1, r3, 25
- lsrs r0, r2, 25
- b _08122AC2
-_08122A9E:
- ldrh r0, [r3]
- lsls r4, r0, 18
- ldrh r0, [r5]
- lsls r2, r0, 18
- lsrs r1, r4, 25
- lsrs r0, r2, 25
- cmp r1, r0
- bhi _08122B16
- lsrs r1, r4, 25
- lsrs r0, r2, 25
- cmp r1, r0
- bcc _08122AC6
- ldrb r0, [r3]
- lsls r1, r0, 25
- ldrb r0, [r5]
- lsls r0, 25
- cmp r1, r0
- bhi _08122B16
-_08122AC2:
- cmp r1, r0
- bcs _08122B1A
-_08122AC6:
- movs r0, 0
- b _08122B22
-_08122ACA:
- ldrb r0, [r3]
- lsls r1, r0, 25
- ldrb r0, [r5]
- lsls r0, 25
- cmp r1, r0
- bhi _08122B16
- cmp r1, r0
- bcc _08122AC6
- ldrh r0, [r3]
- lsls r4, r0, 18
- ldrh r0, [r5]
- lsls r2, r0, 18
- lsrs r1, r4, 25
- lsrs r0, r2, 25
- cmp r1, r0
- bhi _08122B16
- lsrs r1, r4, 25
- lsrs r0, r2, 25
- cmp r1, r0
- bcc _08122AC6
- ldrh r1, [r3, 0x2]
- ldrh r0, [r5, 0x2]
- cmp r1, r0
- bhi _08122B16
- cmp r1, r0
- bcc _08122AC6
- ldrh r1, [r3, 0x4]
- ldrh r0, [r5, 0x4]
- cmp r1, r0
- bhi _08122B16
- cmp r1, r0
- bcc _08122AC6
- ldrh r1, [r3, 0x6]
- ldrh r0, [r5, 0x6]
- cmp r1, r0
- bhi _08122B16
- cmp r1, r0
- bcc _08122AC6
-_08122B16:
- movs r0, 0x1
- b _08122B22
-_08122B1A:
- bl Random
- movs r1, 0x1
- ands r0, r1
-_08122B22:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end atk90_changetypestoenemyattacktype
-
- thumb_func_start sub_8122B28
-sub_8122B28: @ 8122B28
- push {r4,r5,lr}
- adds r5, r0, 0
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x62
- bl __umodsi3
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x32
- bls _08122B6A
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x62
- bl __umodsi3
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x50
- bls _08122B6A
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x62
- bl __umodsi3
- lsls r0, 16
- lsrs r4, r0, 16
-_08122B6A:
- adds r1, r4, 0
- adds r1, 0x1E
- movs r0, 0x7F
- ands r1, r0
- lsls r1, 7
- ldrh r2, [r5]
- ldr r0, =0xffffc07f
- ands r0, r2
- orrs r0, r1
- strh r0, [r5]
- bl Random
- lsls r0, 16
- lsrs r0, 16
- adds r1, r4, 0x1
- bl __modsi3
- adds r0, 0x1E
- movs r1, 0x7F
- ands r0, r1
- ldrb r2, [r5]
- movs r1, 0x80
- negs r1, r1
- ands r1, r2
- orrs r1, r0
- strb r1, [r5]
- bl Random
- strh r0, [r5, 0x2]
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8122B28
-
- thumb_func_start sub_8122BB0
-sub_8122BB0: @ 8122BB0
- push {r4-r6,lr}
- adds r5, r0, 0
- movs r4, 0
- ldr r6, =gSaveBlock1Ptr
-_08122BB8:
- lsls r1, r4, 3
- ldr r0, [r6]
- adds r1, r0
- ldr r0, =0x00002e6c
- adds r1, r0
- adds r0, r5, 0
- bl sub_8122BF0
- lsls r0, 24
- cmp r0, 0
- beq _08122BDC
- movs r0, 0x1
- b _08122BE8
- .pool
-_08122BDC:
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x4
- bls _08122BB8
- movs r0, 0
-_08122BE8:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_8122BB0
-
- thumb_func_start sub_8122BF0
-sub_8122BF0: @ 8122BF0
- push {r4,lr}
- adds r3, r0, 0
- adds r2, r1, 0
- movs r4, 0
-_08122BF8:
- ldrh r1, [r3]
- ldrh r0, [r2]
- adds r2, 0x2
- adds r3, 0x2
- cmp r1, r0
- beq _08122C08
- movs r0, 0
- b _08122C14
-_08122C08:
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x1
- bls _08122BF8
- movs r0, 0x1
-_08122C14:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8122BF0
-
- thumb_func_start sub_8122C1C
-sub_8122C1C: @ 8122C1C
- push {r4-r7,lr}
- adds r5, r0, 0
- adds r7, r1, 0
- lsls r2, 16
- lsrs r6, r2, 16
- movs r4, 0
- cmp r4, r6
- bge _08122C52
-_08122C2C:
- adds r1, r5, 0x4
- adds r0, r7, 0x4
- bl sub_8122BF0
- lsls r0, 24
- cmp r0, 0
- beq _08122C40
- lsls r0, r4, 16
- asrs r0, 16
- b _08122C56
-_08122C40:
- adds r5, 0x8
- lsls r0, r4, 16
- movs r1, 0x80
- lsls r1, 9
- adds r0, r1
- lsrs r4, r0, 16
- asrs r0, 16
- cmp r0, r6
- blt _08122C2C
-_08122C52:
- movs r0, 0x1
- negs r0, r0
-_08122C56:
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_8122C1C
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/easy_chat.s b/asm/easy_chat.s
index db2ffac14..7f2a7ca88 100644
--- a/asm/easy_chat.s
+++ b/asm/easy_chat.s
@@ -9243,8 +9243,8 @@ _0811EA68:
bx r1
thumb_func_end sub_811EA28
- thumb_func_start start_menu_is_selected_item_valid
-start_menu_is_selected_item_valid: @ 811EA6C
+ thumb_func_start EasyChat_GetNumWordsInGroup
+EasyChat_GetNumWordsInGroup: @ 811EA6C
push {r4,lr}
lsls r0, 24
lsrs r0, 24
@@ -9252,7 +9252,7 @@ start_menu_is_selected_item_valid: @ 811EA6C
cmp r0, 0
bne _0811EA84
movs r0, 0
- bl pokedex_count
+ bl GetNationalPokedexCount
lsls r0, 16
lsrs r0, 16
b _0811EA9A
@@ -9273,7 +9273,7 @@ _0811EA9A:
pop {r1}
bx r1
.pool
- thumb_func_end start_menu_is_selected_item_valid
+ thumb_func_end EasyChat_GetNumWordsInGroup
thumb_func_start sub_811EAA4
sub_811EAA4: @ 811EAA4
@@ -10145,7 +10145,7 @@ sub_811F0F8: @ 811F0F8
sub_811F108: @ 811F108
push {r4-r7,lr}
movs r0, 0
- bl start_menu_is_selected_item_valid
+ bl EasyChat_GetNumWordsInGroup
lsls r0, 16
lsrs r4, r0, 16
cmp r4, 0
@@ -10369,7 +10369,7 @@ sub_811F2D4: @ 811F2D4
movs r5, 0
strh r5, [r0]
movs r0, 0
- bl pokedex_count
+ bl GetNationalPokedexCount
lsls r0, 16
cmp r0, 0
beq _0811F2FC
diff --git a/asm/field_camera.s b/asm/field_camera.s
deleted file mode 100644
index 35359f444..000000000
--- a/asm/field_camera.s
+++ /dev/null
@@ -1,1153 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start move_tilemap_camera_to_upper_left_corner_
-@ void move_tilemap_camera_to_upper_left_corner_(struc_28 *a1)
-move_tilemap_camera_to_upper_left_corner_: @ 8089B58
- movs r1, 0
- strb r1, [r0, 0x2]
- strb r1, [r0, 0x3]
- strb r1, [r0]
- strb r1, [r0, 0x1]
- movs r1, 0x1
- strb r1, [r0, 0x4]
- bx lr
- thumb_func_end move_tilemap_camera_to_upper_left_corner_
-
- thumb_func_start tilemap_move_something
-@ void tilemap_move_something(struct struc_28 *, u8 deltaX, u8 deltaY)
-tilemap_move_something: @ 8089B68
- ldrb r3, [r0, 0x2]
- adds r3, r1
- strb r3, [r0, 0x2]
- ldrb r1, [r0, 0x2]
- movs r3, 0x1F
- ands r1, r3
- strb r1, [r0, 0x2]
- ldrb r1, [r0, 0x3]
- adds r1, r2
- strb r1, [r0, 0x3]
- ldrb r1, [r0, 0x3]
- ands r1, r3
- strb r1, [r0, 0x3]
- bx lr
- thumb_func_end tilemap_move_something
-
- thumb_func_start coords8_add
-@ void coords8_add(struct coords8 *coords, u8 x, u8 y)
-coords8_add: @ 8089B84
- ldrb r3, [r0]
- adds r3, r1
- strb r3, [r0]
- ldrb r1, [r0, 0x1]
- adds r1, r2
- strb r1, [r0, 0x1]
- bx lr
- thumb_func_end coords8_add
-
- thumb_func_start move_tilemap_camera_to_upper_left_corner
-@ void move_tilemap_camera_to_upper_left_corner()
-move_tilemap_camera_to_upper_left_corner: @ 8089B94
- push {lr}
- ldr r0, =gUnknown_03000E20
- bl move_tilemap_camera_to_upper_left_corner_
- pop {r0}
- bx r0
- .pool
- thumb_func_end move_tilemap_camera_to_upper_left_corner
-
- thumb_func_start FieldUpdateBgTilemapScroll
-@ void FieldUpdateBgTilemapScroll()
-FieldUpdateBgTilemapScroll: @ 8089BA4
- push {r4,r5,lr}
- ldr r1, =gUnknown_03000E20
- ldr r0, =gUnknown_03000E28
- movs r2, 0
- ldrsh r5, [r0, r2]
- ldrb r0, [r1]
- adds r5, r0
- ldr r0, =gUnknown_03000E2A
- movs r2, 0
- ldrsh r4, [r0, r2]
- ldrb r1, [r1, 0x1]
- adds r4, r1
- adds r4, 0x8
- lsls r5, 16
- lsrs r5, 16
- movs r0, 0x14
- adds r1, r5, 0
- bl SetGpuReg
- lsls r4, 16
- lsrs r4, 16
- movs r0, 0x16
- adds r1, r4, 0
- bl SetGpuReg
- movs r0, 0x18
- adds r1, r5, 0
- bl SetGpuReg
- movs r0, 0x1A
- adds r1, r4, 0
- bl SetGpuReg
- movs r0, 0x1C
- adds r1, r5, 0
- bl SetGpuReg
- movs r0, 0x1E
- adds r1, r4, 0
- bl SetGpuReg
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end FieldUpdateBgTilemapScroll
-
- thumb_func_start sub_8089C08
-sub_8089C08: @ 8089C08
- push {r4,lr}
- ldr r3, =gUnknown_03000E20
- ldr r2, =gUnknown_03000E28
- ldrh r2, [r2]
- ldrb r4, [r3]
- adds r2, r4
- strh r2, [r0]
- ldr r0, =gUnknown_03000E2A
- ldrh r0, [r0]
- ldrb r3, [r3, 0x1]
- adds r0, r3
- adds r0, 0x8
- strh r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8089C08
-
- thumb_func_start DrawWholeMapView
-@ void DrawWholeMapView()
-DrawWholeMapView: @ 8089C34
- push {lr}
- ldr r0, =gSaveBlock1Ptr
- ldr r1, [r0]
- movs r2, 0
- ldrsh r0, [r1, r2]
- movs r2, 0x2
- ldrsh r1, [r1, r2]
- ldr r2, =gMapHeader
- ldr r2, [r2]
- bl DrawWholeMapViewInternal
- ldr r1, =gUnknown_03000E20
- movs r0, 0x1
- strb r0, [r1, 0x4]
- pop {r0}
- bx r0
- .pool
- thumb_func_end DrawWholeMapView
-
- thumb_func_start DrawWholeMapViewInternal
-@ void DrawWholeMapViewInternal(s32 x, s32 y, struct mapdata_header *mapGrid)
-DrawWholeMapViewInternal: @ 8089C60
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- mov r10, r0
- mov r9, r1
- mov r8, r2
- movs r1, 0
-_08089C74:
- ldr r2, =gUnknown_03000E20
- ldrb r0, [r2, 0x3]
- adds r0, r1, r0
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1F
- bls _08089C88
- subs r0, 0x20
- lsls r0, 24
- lsrs r0, 24
-_08089C88:
- lsls r6, r0, 5
- movs r4, 0
- adds r7, r1, 0x2
- str r7, [sp]
- lsrs r5, r1, 1
-_08089C92:
- ldr r1, =gUnknown_03000E20
- ldrb r0, [r1, 0x2]
- adds r0, r4, r0
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1F
- bls _08089CA6
- subs r0, 0x20
- lsls r0, 24
- lsrs r0, 24
-_08089CA6:
- adds r1, r6, r0
- lsls r1, 16
- lsrs r1, 16
- lsrs r2, r4, 1
- add r2, r10
- mov r0, r8
- mov r7, r9
- adds r3, r7, r5
- bl DrawMetatileAt
- adds r0, r4, 0x2
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x1F
- bls _08089C92
- ldr r1, [sp]
- lsls r0, r1, 24
- lsrs r1, r0, 24
- cmp r1, 0x1F
- bls _08089C74
- 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 DrawWholeMapViewInternal
-
- thumb_func_start RedrawMapSlicesForCameraUpdate
-@ void RedrawMapSlicesForCameraUpdate(struct struc_28 *, u8 deltaX, u8 deltaY)
-RedrawMapSlicesForCameraUpdate: @ 8089CE4
- push {r4-r7,lr}
- adds r5, r0, 0
- adds r6, r1, 0
- adds r7, r2, 0
- ldr r0, =gMapHeader
- ldr r4, [r0]
- cmp r6, 0
- ble _08089CFC
- adds r0, r5, 0
- adds r1, r4, 0
- bl RedrawMapSliceWest
-_08089CFC:
- cmp r6, 0
- bge _08089D08
- adds r0, r5, 0
- adds r1, r4, 0
- bl RedrawMapSliceEast
-_08089D08:
- cmp r7, 0
- ble _08089D14
- adds r0, r5, 0
- adds r1, r4, 0
- bl RedrawMapSliceNorth
-_08089D14:
- cmp r7, 0
- bge _08089D20
- adds r0, r5, 0
- adds r1, r4, 0
- bl RedrawMapSliceSouth
-_08089D20:
- movs r0, 0x1
- strb r0, [r5, 0x4]
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end RedrawMapSlicesForCameraUpdate
-
- thumb_func_start RedrawMapSliceNorth
-@ void RedrawMapSliceNorth(struct struc_28 *, struct mapdata_header *mapGrid)
-RedrawMapSliceNorth: @ 8089D30
- push {r4-r7,lr}
- adds r5, r0, 0
- adds r7, r1, 0
- ldrb r0, [r5, 0x3]
- adds r0, 0x1C
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1F
- bls _08089D48
- subs r0, 0x20
- lsls r0, 24
- lsrs r0, 24
-_08089D48:
- lsls r6, r0, 5
- movs r4, 0
-_08089D4C:
- ldrb r0, [r5, 0x2]
- adds r0, r4, r0
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1F
- bls _08089D5E
- subs r0, 0x20
- lsls r0, 24
- lsrs r0, 24
-_08089D5E:
- adds r1, r6, r0
- lsls r1, 16
- lsrs r1, 16
- ldr r0, =gSaveBlock1Ptr
- ldr r3, [r0]
- movs r0, 0
- ldrsh r2, [r3, r0]
- lsrs r0, r4, 1
- adds r2, r0
- movs r0, 0x2
- ldrsh r3, [r3, r0]
- adds r3, 0xE
- adds r0, r7, 0
- bl DrawMetatileAt
- adds r0, r4, 0x2
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x1F
- bls _08089D4C
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end RedrawMapSliceNorth
-
- thumb_func_start RedrawMapSliceSouth
-@ void RedrawMapSliceSouth(struct struc_28 *, struct mapdata_header *mapGrid)
-RedrawMapSliceSouth: @ 8089D90
- push {r4-r7,lr}
- adds r5, r0, 0
- adds r7, r1, 0
- ldrb r0, [r5, 0x3]
- lsls r6, r0, 5
- movs r4, 0
-_08089D9C:
- ldrb r0, [r5, 0x2]
- adds r0, r4, r0
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1F
- bls _08089DAE
- subs r0, 0x20
- lsls r0, 24
- lsrs r0, 24
-_08089DAE:
- adds r1, r6, r0
- ldr r0, =gSaveBlock1Ptr
- ldr r3, [r0]
- movs r0, 0
- ldrsh r2, [r3, r0]
- lsrs r0, r4, 1
- adds r2, r0
- movs r0, 0x2
- ldrsh r3, [r3, r0]
- adds r0, r7, 0
- bl DrawMetatileAt
- adds r0, r4, 0x2
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x1F
- bls _08089D9C
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end RedrawMapSliceSouth
-
- thumb_func_start RedrawMapSliceEast
-@ void RedrawMapSliceEast(struct struc_28 *, struct mapdata_header *mapGrid)
-RedrawMapSliceEast: @ 8089DDC
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r5, r0, 0
- mov r8, r1
- ldrb r6, [r5, 0x2]
- movs r4, 0
-_08089DEA:
- ldrb r0, [r5, 0x3]
- adds r0, r4, r0
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1F
- bls _08089DFC
- subs r0, 0x20
- lsls r0, 24
- lsrs r0, 24
-_08089DFC:
- lsls r1, r0, 5
- adds r1, r6
- lsls r1, 16
- lsrs r1, 16
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- movs r3, 0
- ldrsh r2, [r0, r3]
- movs r7, 0x2
- ldrsh r3, [r0, r7]
- lsrs r0, r4, 1
- adds r3, r0
- mov r0, r8
- bl DrawMetatileAt
- adds r0, r4, 0x2
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x1F
- bls _08089DEA
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end RedrawMapSliceEast
-
- thumb_func_start RedrawMapSliceWest
-@ void RedrawMapSliceWest(struct struc_28 *, struct mapdata_header *mapGrid)
-RedrawMapSliceWest: @ 8089E34
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r6, r0, 0
- mov r8, r1
- ldrb r0, [r6, 0x2]
- adds r0, 0x1C
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x1F
- bls _08089E52
- adds r0, r5, 0
- subs r0, 0x20
- lsls r0, 24
- lsrs r5, r0, 24
-_08089E52:
- movs r4, 0
-_08089E54:
- ldrb r0, [r6, 0x3]
- adds r0, r4, r0
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1F
- bls _08089E66
- subs r0, 0x20
- lsls r0, 24
- lsrs r0, 24
-_08089E66:
- lsls r1, r0, 5
- adds r1, r5
- lsls r1, 16
- lsrs r1, 16
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- movs r3, 0
- ldrsh r2, [r0, r3]
- adds r2, 0xE
- movs r7, 0x2
- ldrsh r3, [r0, r7]
- lsrs r0, r4, 1
- adds r3, r0
- mov r0, r8
- bl DrawMetatileAt
- adds r0, r4, 0x2
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x1F
- bls _08089E54
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end RedrawMapSliceWest
-
- thumb_func_start CurrentMapDrawMetatileAt
-@ void CurrentMapDrawMetatileAt(u32 x, u32 y)
-CurrentMapDrawMetatileAt: @ 8089EA0
- push {r4-r6,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- ldr r6, =gUnknown_03000E20
- adds r0, r6, 0
- adds r1, r4, 0
- adds r2, r5, 0
- bl MapPosToBgTilemapOffset
- adds r1, r0, 0
- cmp r1, 0
- blt _08089ECC
- ldr r0, =gMapHeader
- ldr r0, [r0]
- lsls r1, 16
- lsrs r1, 16
- adds r2, r4, 0
- adds r3, r5, 0
- bl DrawMetatileAt
- movs r0, 0x1
- strb r0, [r6, 0x4]
-_08089ECC:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end CurrentMapDrawMetatileAt
-
- thumb_func_start DrawDoorMetatileAt
-@ void DrawDoorMetatileAt(u32 x, u32 y, u16 *metatile)
-DrawDoorMetatileAt: @ 8089EDC
- push {r4-r6,lr}
- adds r3, r0, 0
- adds r4, r1, 0
- adds r5, r2, 0
- ldr r6, =gUnknown_03000E20
- adds r0, r6, 0
- adds r1, r3, 0
- adds r2, r4, 0
- bl MapPosToBgTilemapOffset
- cmp r0, 0
- blt _08089F04
- lsls r2, r0, 16
- lsrs r2, 16
- movs r0, 0x1
- adds r1, r5, 0
- bl DrawMetatile
- movs r0, 0x1
- strb r0, [r6, 0x4]
-_08089F04:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end DrawDoorMetatileAt
-
- thumb_func_start DrawMetatileAt
-@ void DrawMetatileAt(struct mapdata_header *mapGrid, u16 offset, s32 x, s32 y)
-DrawMetatileAt: @ 8089F10
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r5, r0, 0
- adds r6, r2, 0
- adds r7, r3, 0
- lsls r1, 16
- lsrs r1, 16
- mov r8, r1
- adds r0, r6, 0
- adds r1, r7, 0
- bl MapGridGetMetatileIdAt
- lsls r0, 16
- lsrs r4, r0, 16
- movs r0, 0x80
- lsls r0, 3
- cmp r4, r0
- bls _08089F38
- movs r4, 0
-_08089F38:
- ldr r0, =0x000001ff
- cmp r4, r0
- bhi _08089F48
- ldr r0, [r5, 0x10]
- ldr r5, [r0, 0xC]
- b _08089F54
- .pool
-_08089F48:
- ldr r0, [r5, 0x14]
- ldr r5, [r0, 0xC]
- ldr r1, =0xfffffe00
- adds r0, r4, r1
- lsls r0, 16
- lsrs r4, r0, 16
-_08089F54:
- adds r0, r6, 0
- adds r1, r7, 0
- bl MapGridGetMetatileLayerTypeAt
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r4, 4
- adds r1, r5, r1
- mov r2, r8
- bl DrawMetatile
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end DrawMetatileAt
-
- thumb_func_start DrawMetatile
-@ void DrawMetatile(u32 layerType, u16 *metatile, u16 offset)
-DrawMetatile: @ 8089F78
- push {r4,lr}
- adds r4, r1, 0
- lsls r2, 16
- lsrs r2, 16
- cmp r0, 0x1
- beq _08089FD0
- cmp r0, 0x1
- bgt _08089F8E
- cmp r0, 0
- beq _0808A030
- b _0808A082
-_08089F8E:
- cmp r0, 0x2
- bne _0808A082
- ldr r0, =gUnknown_03005DA4
- ldr r0, [r0]
- lsls r3, r2, 1
- adds r0, r3, r0
- ldrh r1, [r4]
- strh r1, [r0]
- ldrh r1, [r4, 0x2]
- strh r1, [r0, 0x2]
- adds r2, r0, 0
- adds r2, 0x40
- ldrh r1, [r4, 0x4]
- strh r1, [r2]
- adds r0, 0x42
- ldrh r1, [r4, 0x6]
- strh r1, [r0]
- ldr r0, =gUnknown_03005D9C
- ldr r0, [r0]
- adds r0, r3, r0
- movs r2, 0
- strh r2, [r0]
- strh r2, [r0, 0x2]
- adds r1, r0, 0
- adds r1, 0x40
- strh r2, [r1]
- adds r0, 0x42
- strh r2, [r0]
- b _0808A066
- .pool
-_08089FD0:
- ldr r0, =gUnknown_03005DA4
- ldr r0, [r0]
- lsls r3, r2, 1
- adds r0, r3, r0
- ldrh r1, [r4]
- strh r1, [r0]
- ldrh r1, [r4, 0x2]
- strh r1, [r0, 0x2]
- adds r2, r0, 0
- adds r2, 0x40
- ldrh r1, [r4, 0x4]
- strh r1, [r2]
- adds r0, 0x42
- ldrh r1, [r4, 0x6]
- strh r1, [r0]
- ldr r0, =gUnknown_03005D9C
- ldr r0, [r0]
- adds r0, r3, r0
- ldrh r1, [r4, 0x8]
- strh r1, [r0]
- ldrh r1, [r4, 0xA]
- strh r1, [r0, 0x2]
- adds r2, r0, 0
- adds r2, 0x40
- ldrh r1, [r4, 0xC]
- strh r1, [r2]
- adds r0, 0x42
- ldrh r1, [r4, 0xE]
- strh r1, [r0]
- ldr r0, =gUnknown_03005DA0
- ldr r0, [r0]
- adds r3, r0
- movs r1, 0
- strh r1, [r3]
- strh r1, [r3, 0x2]
- adds r0, r3, 0
- adds r0, 0x40
- strh r1, [r0]
- adds r3, 0x42
- strh r1, [r3]
- b _0808A082
- .pool
-_0808A030:
- ldr r0, =gUnknown_03005DA4
- ldr r0, [r0]
- lsls r3, r2, 1
- adds r0, r3, r0
- ldr r1, =0x00003014
- adds r2, r1, 0
- strh r2, [r0]
- strh r2, [r0, 0x2]
- adds r1, r0, 0
- adds r1, 0x40
- strh r2, [r1]
- adds r0, 0x42
- strh r2, [r0]
- ldr r0, =gUnknown_03005D9C
- ldr r0, [r0]
- adds r0, r3, r0
- ldrh r1, [r4]
- strh r1, [r0]
- ldrh r1, [r4, 0x2]
- strh r1, [r0, 0x2]
- adds r2, r0, 0
- adds r2, 0x40
- ldrh r1, [r4, 0x4]
- strh r1, [r2]
- adds r0, 0x42
- ldrh r1, [r4, 0x6]
- strh r1, [r0]
-_0808A066:
- ldr r0, =gUnknown_03005DA0
- ldr r0, [r0]
- adds r3, r0
- ldrh r0, [r4, 0x8]
- strh r0, [r3]
- ldrh r0, [r4, 0xA]
- strh r0, [r3, 0x2]
- adds r1, r3, 0
- adds r1, 0x40
- ldrh r0, [r4, 0xC]
- strh r0, [r1]
- adds r3, 0x42
- ldrh r0, [r4, 0xE]
- strh r0, [r3]
-_0808A082:
- movs r0, 0x1
- bl schedule_bg_copy_tilemap_to_vram
- movs r0, 0x2
- bl schedule_bg_copy_tilemap_to_vram
- movs r0, 0x3
- bl schedule_bg_copy_tilemap_to_vram
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end DrawMetatile
-
- thumb_func_start MapPosToBgTilemapOffset
-@ u32 MapPosToBgTilemapOffset(struct struc_28 *, u32 x, u32 y)
-MapPosToBgTilemapOffset: @ 808A0AC
- push {r4,r5,lr}
- adds r4, r0, 0
- ldr r0, =gSaveBlock1Ptr
- ldr r3, [r0]
- movs r5, 0
- ldrsh r0, [r3, r5]
- subs r1, r0
- lsls r1, 1
- cmp r1, 0x1F
- bhi _0808A0D6
- ldrb r0, [r4, 0x2]
- adds r1, r0
- cmp r1, 0x1F
- ble _0808A0CA
- subs r1, 0x20
-_0808A0CA:
- movs r5, 0x2
- ldrsh r0, [r3, r5]
- subs r0, r2, r0
- lsls r2, r0, 1
- cmp r2, 0x1F
- bls _0808A0E0
-_0808A0D6:
- movs r0, 0x1
- negs r0, r0
- b _0808A0EE
- .pool
-_0808A0E0:
- ldrb r0, [r4, 0x3]
- adds r2, r0
- cmp r2, 0x1F
- ble _0808A0EA
- subs r2, 0x20
-_0808A0EA:
- lsls r0, r2, 5
- adds r0, r1
-_0808A0EE:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end MapPosToBgTilemapOffset
-
- thumb_func_start CameraUpdateCallback
-@ void CameraUpdateCallback(struct CameraUpdateInfo *info)
-CameraUpdateCallback: @ 808A0F4
- push {lr}
- adds r3, r0, 0
- ldr r2, [r3, 0x4]
- cmp r2, 0
- beq _0808A114
- ldr r1, =gSprites
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r0, r1
- movs r2, 0x32
- ldrsh r1, [r0, r2]
- str r1, [r3, 0x8]
- movs r1, 0x34
- ldrsh r0, [r0, r1]
- str r0, [r3, 0xC]
-_0808A114:
- pop {r0}
- bx r0
- .pool
- thumb_func_end CameraUpdateCallback
-
- thumb_func_start ResetCameraUpdateInfo
-@ void ResetCameraUpdateInfo()
-ResetCameraUpdateInfo: @ 808A11C
- ldr r1, =gUnknown_03005DD0
- movs r0, 0
- str r0, [r1, 0x8]
- str r0, [r1, 0xC]
- str r0, [r1, 0x10]
- str r0, [r1, 0x14]
- str r0, [r1, 0x4]
- str r0, [r1]
- bx lr
- .pool
- thumb_func_end ResetCameraUpdateInfo
-
- thumb_func_start InitCameraUpdateCallback
-@ u8 InitCameraUpdateCallback(u8 followedObjectId)
-InitCameraUpdateCallback: @ 808A134
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r4, =gUnknown_03005DD0
- ldr r1, [r4, 0x4]
- cmp r1, 0
- beq _0808A150
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, =gSprites
- adds r0, r1
- bl DestroySprite
-_0808A150:
- adds r0, r5, 0
- bl AddCameraObject
- lsls r0, 24
- lsrs r0, 24
- str r0, [r4, 0x4]
- ldr r0, =CameraUpdateCallback
- str r0, [r4]
- movs r0, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- .pool
- thumb_func_end InitCameraUpdateCallback
-
- thumb_func_start CameraUpdate
-@ void CameraUpdate()
-CameraUpdate: @ 808A174
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r6, =gUnknown_03005DD0
- ldr r1, [r6]
- cmp r1, 0
- beq _0808A188
- adds r0, r6, 0
- bl _call_via_r1
-_0808A188:
- ldr r7, [r6, 0x8]
- ldr r0, [r6, 0xC]
- mov r8, r0
- movs r4, 0
- movs r5, 0
- ldr r1, [r6, 0x10]
- ldr r0, [r6, 0x14]
- cmp r1, 0
- bne _0808A1A6
- cmp r7, 0
- beq _0808A1A6
- subs r4, 0x1
- cmp r7, 0
- ble _0808A1A6
- movs r4, 0x1
-_0808A1A6:
- cmp r0, 0
- bne _0808A1BA
- mov r2, r8
- cmp r2, 0
- beq _0808A1BA
- movs r5, 0x1
- negs r5, r5
- cmp r2, 0
- ble _0808A1BA
- movs r5, 0x1
-_0808A1BA:
- cmp r1, 0
- beq _0808A1CC
- cmn r1, r7
- bne _0808A1CC
- movs r4, 0x1
- negs r4, r4
- cmp r7, 0
- ble _0808A1CC
- movs r4, 0x1
-_0808A1CC:
- cmp r0, 0
- beq _0808A1E0
- mov r3, r8
- cmn r0, r3
- bne _0808A1E0
- movs r4, 0x1
- negs r4, r4
- cmp r3, 0
- ble _0808A1E0
- movs r4, 0x1
-_0808A1E0:
- ldr r2, =gUnknown_03005DD0
- ldr r0, [r2, 0x10]
- adds r1, r0, r7
- str r1, [r2, 0x10]
- adds r0, r1, 0
- cmp r1, 0
- bge _0808A1F0
- adds r0, 0xF
-_0808A1F0:
- asrs r0, 4
- lsls r0, 4
- subs r0, r1, r0
- str r0, [r2, 0x10]
- ldr r0, [r2, 0x14]
- mov r3, r8
- adds r1, r0, r3
- str r1, [r2, 0x14]
- adds r0, r1, 0
- cmp r1, 0
- bge _0808A208
- adds r0, 0xF
-_0808A208:
- asrs r0, 4
- lsls r0, 4
- subs r0, r1, r0
- str r0, [r2, 0x14]
- cmp r4, 0
- bne _0808A218
- cmp r5, 0
- beq _0808A24E
-_0808A218:
- adds r0, r4, 0
- adds r1, r5, 0
- bl CameraMove
- adds r0, r4, 0
- adds r1, r5, 0
- bl UpdateFieldObjectsForCameraUpdate
- adds r0, r4, 0
- adds r1, r5, 0
- bl RotatingGatePuzzleCameraUpdate
- bl ResetBerryTreeSparkleFlags
- ldr r6, =gUnknown_03000E20
- lsls r4, 1
- lsls r5, 1
- adds r0, r6, 0
- adds r1, r4, 0
- adds r2, r5, 0
- bl tilemap_move_something
- adds r0, r6, 0
- adds r1, r4, 0
- adds r2, r5, 0
- bl RedrawMapSlicesForCameraUpdate
-_0808A24E:
- ldr r0, =gUnknown_03000E20
- adds r1, r7, 0
- mov r2, r8
- bl coords8_add
- ldr r1, =gUnknown_03005DEC
- ldrh r0, [r1]
- subs r0, r7
- strh r0, [r1]
- ldr r1, =gUnknown_03005DE8
- ldrh r0, [r1]
- mov r2, r8
- subs r0, r2
- strh r0, [r1]
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end CameraUpdate
-
- thumb_func_start sub_808A284
-sub_808A284: @ 808A284
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- bl CameraMove
- lsls r0, r4, 16
- asrs r0, 16
- lsls r1, r5, 16
- asrs r1, 16
- bl UpdateFieldObjectsForCameraUpdate
- bl DrawWholeMapView
- ldr r1, =gUnknown_03005DEC
- lsls r4, 4
- ldrh r0, [r1]
- subs r0, r4
- strh r0, [r1]
- ldr r1, =gUnknown_03005DE8
- lsls r5, 4
- ldrh r0, [r1]
- subs r0, r5
- strh r0, [r1]
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_808A284
-
- thumb_func_start SetCameraPanningCallback
-@ void SetCameraPanningCallback(void ( *callback)())
-SetCameraPanningCallback: @ 808A2C0
- ldr r1, =gUnknown_03000E30
- str r0, [r1]
- bx lr
- .pool
- thumb_func_end SetCameraPanningCallback
-
- thumb_func_start SetCameraPanning
-@ void SetCameraPanning(s16 x, s16 y)
-SetCameraPanning: @ 808A2CC
- ldr r2, =gUnknown_03000E28
- strh r0, [r2]
- ldr r0, =gUnknown_03000E2A
- lsls r1, 16
- asrs r1, 16
- adds r1, 0x20
- strh r1, [r0]
- bx lr
- .pool
- thumb_func_end SetCameraPanning
-
- thumb_func_start InstallCameraPanAheadCallback
-@ void InstallCameraPanAheadCallback()
-InstallCameraPanAheadCallback: @ 808A2E4
- ldr r1, =gUnknown_03000E30
- ldr r0, =CameraPanningCB_PanAhead
- str r0, [r1]
- ldr r1, =gUnknown_03000E2C
- movs r0, 0
- strb r0, [r1]
- ldr r1, =gUnknown_03000E28
- movs r0, 0
- strh r0, [r1]
- ldr r1, =gUnknown_03000E2A
- movs r0, 0x20
- strh r0, [r1]
- bx lr
- .pool
- thumb_func_end InstallCameraPanAheadCallback
-
- thumb_func_start UpdateCameraPanning
-@ void UpdateCameraPanning()
-UpdateCameraPanning: @ 808A314
- push {lr}
- ldr r0, =gUnknown_03000E30
- ldr r0, [r0]
- cmp r0, 0
- beq _0808A322
- bl _call_via_r0
-_0808A322:
- ldr r2, =gSpriteCoordOffsetX
- ldr r0, =gUnknown_03005DEC
- ldr r1, =gUnknown_03000E28
- ldrh r0, [r0]
- ldrh r1, [r1]
- subs r0, r1
- strh r0, [r2]
- ldr r2, =gSpriteCoordOffsetY
- ldr r0, =gUnknown_03005DE8
- ldr r1, =gUnknown_03000E2A
- ldrh r0, [r0]
- ldrh r1, [r1]
- subs r0, r1
- subs r0, 0x8
- strh r0, [r2]
- pop {r0}
- bx r0
- .pool
- thumb_func_end UpdateCameraPanning
-
- thumb_func_start CameraPanningCB_PanAhead
-@ void CameraPanningCB_PanAhead()
-CameraPanningCB_PanAhead: @ 808A360
- push {lr}
- ldr r0, =gUnknown_02037348
- ldrb r0, [r0]
- cmp r0, 0
- bne _0808A374
- bl InstallCameraPanAheadCallback
- b _0808A3FC
- .pool
-_0808A374:
- ldr r0, =gPlayerAvatar
- ldrb r0, [r0, 0x3]
- cmp r0, 0x1
- bne _0808A394
- ldr r0, =gUnknown_03000E2C
- ldrb r1, [r0]
- movs r2, 0x1
- eors r1, r2
- strb r1, [r0]
- cmp r1, 0
- beq _0808A3FC
- b _0808A39A
- .pool
-_0808A394:
- ldr r1, =gUnknown_03000E2C
- movs r0, 0
- strb r0, [r1]
-_0808A39A:
- bl player_get_direction_upper_nybble
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- bne _0808A3C4
- ldr r2, =gUnknown_03000E2A
- ldrh r3, [r2]
- movs r0, 0
- ldrsh r1, [r2, r0]
- movs r0, 0x8
- negs r0, r0
- cmp r1, r0
- ble _0808A3FC
- subs r0, r3, 0x2
- b _0808A3FA
- .pool
-_0808A3C4:
- cmp r0, 0x1
- bne _0808A3E0
- ldr r1, =gUnknown_03000E2A
- ldrh r2, [r1]
- movs r3, 0
- ldrsh r0, [r1, r3]
- cmp r0, 0x47
- bgt _0808A3FC
- adds r0, r2, 0x2
- strh r0, [r1]
- b _0808A3FC
- .pool
-_0808A3E0:
- ldr r2, =gUnknown_03000E2A
- ldrh r0, [r2]
- movs r3, 0
- ldrsh r1, [r2, r3]
- cmp r1, 0x1F
- bgt _0808A3F4
- adds r0, 0x2
- b _0808A3FA
- .pool
-_0808A3F4:
- cmp r1, 0x20
- ble _0808A3FC
- subs r0, 0x2
-_0808A3FA:
- strh r0, [r2]
-_0808A3FC:
- pop {r0}
- bx r0
- thumb_func_end CameraPanningCB_PanAhead
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/field_control_avatar.s b/asm/field_control_avatar.s
index 89e6efa6a..7e25c45da 100644
--- a/asm/field_control_avatar.s
+++ b/asm/field_control_avatar.s
@@ -5,8 +5,8 @@
.text
- thumb_func_start sub_809BEDC
-sub_809BEDC: @ 809BEDC
+ thumb_func_start FieldClearPlayerInput
+FieldClearPlayerInput: @ 809BEDC
push {r4,r5,lr}
movs r1, 0x2
negs r1, r1
@@ -29,11 +29,11 @@ sub_809BEDC: @ 809BEDC
pop {r4,r5}
pop {r0}
bx r0
- thumb_func_end sub_809BEDC
+ thumb_func_end FieldClearPlayerInput
- thumb_func_start process_overworld_input
-@ void process_overworld_input(overworld_input_data *input_data, char buttons_new, char buttons_held)
-process_overworld_input: @ 809BF08
+ thumb_func_start FieldGetPlayerInput
+@ void FieldGetPlayerInput(overworld_input_data *input_data, char buttons_new, char buttons_held)
+FieldGetPlayerInput: @ 809BF08
push {r4-r7,lr}
mov r7, r9
mov r6, r8
@@ -176,7 +176,7 @@ _0809C006:
pop {r4-r7}
pop {r0}
bx r0
- thumb_func_end process_overworld_input
+ thumb_func_end FieldGetPlayerInput
thumb_func_start sub_809C014
@ int sub_809C014(overworld_input_data *input_data)
@@ -326,7 +326,7 @@ _0809C13A:
beq _0809C15C
movs r0, 0x6
bl PlaySE
- bl sub_809FA9C
+ bl ShowStartMenu
_0809C14E:
movs r0, 0x1
b _0809C172
@@ -2006,7 +2006,7 @@ _0809CF20:
bl sub_8084D5C
ldrb r0, [r5, 0x7]
ldrb r1, [r5, 0x6]
- bl get_mapheader_by_bank_and_number
+ bl Overworld_GetMapHeaderByGroupAndId
ldr r1, [r0, 0x4]
ldrb r0, [r5, 0x5]
ldr r1, [r1, 0x8]
diff --git a/asm/field_effect.s b/asm/field_effect.s
deleted file mode 100644
index 80f2030aa..000000000
--- a/asm/field_effect.s
+++ /dev/null
@@ -1,8533 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start FieldEffectStart
-@ u8 FieldEffectStart(u8 id)
-FieldEffectStart: @ 80B5B18
- push {r4,r5,lr}
- sub sp, 0x8
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r4, 0
- bl FieldEffectActiveListAdd
- ldr r0, =gFieldEffectScriptPointers
- lsls r4, 2
- adds r4, r0
- ldr r0, [r4]
- str r0, [sp]
- add r4, sp, 0x4
- ldr r5, =gUnknown_0855C1F0
-_080B5B36:
- ldr r0, [sp]
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r5
- ldr r2, [r0]
- mov r0, sp
- adds r1, r4, 0
- bl _call_via_r2
- lsls r0, 24
- cmp r0, 0
- bne _080B5B36
- ldr r0, [sp, 0x4]
- add sp, 0x8
- pop {r4,r5}
- pop {r1}
- bx r1
- .pool
- thumb_func_end FieldEffectStart
-
- thumb_func_start FieldEffectCmd_loadtiles
-@ bool8 FieldEffectCmd_loadtiles(u8 **script, u8 *returnValue)
-FieldEffectCmd_loadtiles: @ 80B5B60
- push {lr}
- ldr r1, [r0]
- adds r1, 0x1
- str r1, [r0]
- bl FieldEffectScript_LoadTiles
- movs r0, 0x1
- pop {r1}
- bx r1
- thumb_func_end FieldEffectCmd_loadtiles
-
- thumb_func_start FieldEffectCmd_loadfadedpal
-@ bool8 FieldEffectCmd_loadfadedpal(u8 **script, u8 *returnValue)
-FieldEffectCmd_loadfadedpal: @ 80B5B74
- push {lr}
- ldr r1, [r0]
- adds r1, 0x1
- str r1, [r0]
- bl FieldEffectScript_LoadFadedPalette
- movs r0, 0x1
- pop {r1}
- bx r1
- thumb_func_end FieldEffectCmd_loadfadedpal
-
- thumb_func_start FieldEffectCmd_loadpal
-@ bool8 FieldEffectCmd_loadpal(u8 **script, u8 *returnValue)
-FieldEffectCmd_loadpal: @ 80B5B88
- push {lr}
- ldr r1, [r0]
- adds r1, 0x1
- str r1, [r0]
- bl FieldEffectScript_LoadPalette
- movs r0, 0x1
- pop {r1}
- bx r1
- thumb_func_end FieldEffectCmd_loadpal
-
- thumb_func_start FieldEffectCmd_callnative
-@ bool8 FieldEffectCmd_callnative(u8 **script, u8 *returnValue)
-FieldEffectCmd_callnative: @ 80B5B9C
- push {lr}
- ldr r2, [r0]
- adds r2, 0x1
- str r2, [r0]
- bl FieldEffectScript_CallNative
- movs r0, 0x1
- pop {r1}
- bx r1
- thumb_func_end FieldEffectCmd_callnative
-
- thumb_func_start FieldEffectCmd_end
-@ bool8 FieldEffectCmd_end(u8 **script, u8 *returnValue)
-FieldEffectCmd_end: @ 80B5BB0
- movs r0, 0
- bx lr
- thumb_func_end FieldEffectCmd_end
-
- thumb_func_start FieldEffectCmd_loadgfx_callnative
-@ bool8 FieldEffectCmd_loadgfx_callnative(u8 **script, u8 *returnValue)
-FieldEffectCmd_loadgfx_callnative: @ 80B5BB4
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- ldr r0, [r4]
- adds r0, 0x1
- str r0, [r4]
- adds r0, r4, 0
- bl FieldEffectScript_LoadTiles
- adds r0, r4, 0
- bl FieldEffectScript_LoadFadedPalette
- adds r0, r4, 0
- adds r1, r5, 0
- bl FieldEffectScript_CallNative
- movs r0, 0x1
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end FieldEffectCmd_loadgfx_callnative
-
- thumb_func_start FieldEffectCmd_loadtiles_callnative
-@ bool8 FieldEffectCmd_loadtiles_callnative(u8 **script, u8 *returnValue)
-FieldEffectCmd_loadtiles_callnative: @ 80B5BDC
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- ldr r0, [r4]
- adds r0, 0x1
- str r0, [r4]
- adds r0, r4, 0
- bl FieldEffectScript_LoadTiles
- adds r0, r4, 0
- adds r1, r5, 0
- bl FieldEffectScript_CallNative
- movs r0, 0x1
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end FieldEffectCmd_loadtiles_callnative
-
- thumb_func_start FieldEffectCmd_loadfadedpal_callnative
-@ bool8 FieldEffectCmd_loadfadedpal_callnative(u8 **script, u8 *returnValue)
-FieldEffectCmd_loadfadedpal_callnative: @ 80B5C00
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- ldr r0, [r4]
- adds r0, 0x1
- str r0, [r4]
- adds r0, r4, 0
- bl FieldEffectScript_LoadFadedPalette
- adds r0, r4, 0
- adds r1, r5, 0
- bl FieldEffectScript_CallNative
- movs r0, 0x1
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end FieldEffectCmd_loadfadedpal_callnative
-
- thumb_func_start FieldEffectScript_ReadWord
-@ u32 FieldEffectScript_ReadWord(u8 **script)
-FieldEffectScript_ReadWord: @ 80B5C24
- ldr r2, [r0]
- ldrb r0, [r2]
- ldrb r1, [r2, 0x1]
- lsls r1, 8
- adds r0, r1
- ldrb r1, [r2, 0x2]
- lsls r1, 16
- adds r0, r1
- ldrb r1, [r2, 0x3]
- lsls r1, 24
- adds r0, r1
- bx lr
- thumb_func_end FieldEffectScript_ReadWord
-
- thumb_func_start FieldEffectScript_LoadTiles
-@ void FieldEffectScript_LoadTiles(u8 **script)
-FieldEffectScript_LoadTiles: @ 80B5C3C
- push {r4,r5,lr}
- adds r4, r0, 0
- bl FieldEffectScript_ReadWord
- adds r5, r0, 0
- ldrh r0, [r5, 0x6]
- bl GetSpriteTileStartByTag
- lsls r0, 16
- ldr r1, =0xffff0000
- cmp r0, r1
- bne _080B5C5A
- adds r0, r5, 0
- bl LoadSpriteSheet
-_080B5C5A:
- ldr r0, [r4]
- adds r0, 0x4
- str r0, [r4]
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end FieldEffectScript_LoadTiles
-
- thumb_func_start FieldEffectScript_LoadFadedPalette
-@ void FieldEffectScript_LoadFadedPalette(u8 **script)
-FieldEffectScript_LoadFadedPalette: @ 80B5C6C
- push {r4,r5,lr}
- adds r5, r0, 0
- bl FieldEffectScript_ReadWord
- adds r4, r0, 0
- bl LoadSpritePalette
- ldrh r0, [r4, 0x4]
- bl IndexOfSpritePaletteTag
- lsls r0, 24
- lsrs r0, 24
- bl sub_80ABE18
- ldr r0, [r5]
- adds r0, 0x4
- str r0, [r5]
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end FieldEffectScript_LoadFadedPalette
-
- thumb_func_start FieldEffectScript_LoadPalette
-@ void FieldEffectScript_LoadPalette(u8 **script)
-FieldEffectScript_LoadPalette: @ 80B5C94
- push {r4,lr}
- adds r4, r0, 0
- bl FieldEffectScript_ReadWord
- bl LoadSpritePalette
- ldr r0, [r4]
- adds r0, 0x4
- str r0, [r4]
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end FieldEffectScript_LoadPalette
-
- thumb_func_start FieldEffectScript_CallNative
-@ void FieldEffectScript_CallNative(u8 **script, u8 *returnValue)
-FieldEffectScript_CallNative: @ 80B5CAC
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- bl FieldEffectScript_ReadWord
- bl _call_via_r0
- str r0, [r5]
- ldr r0, [r4]
- adds r0, 0x4
- str r0, [r4]
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end FieldEffectScript_CallNative
-
- thumb_func_start FieldEffectFreeGraphicsResources
-@ void FieldEffectFreeGraphicsResources(struct obj *object)
-FieldEffectFreeGraphicsResources: @ 80B5CC8
- push {r4,r5,lr}
- adds r1, r0, 0
- adds r1, 0x40
- ldrh r5, [r1]
- ldrb r4, [r0, 0x5]
- lsrs r4, 4
- bl DestroySprite
- adds r0, r5, 0
- bl FieldEffectFreeTilesIfUnused
- adds r0, r4, 0
- bl FieldEffectFreePaletteIfUnused
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end FieldEffectFreeGraphicsResources
-
- thumb_func_start FieldEffectStop
-@ void FieldEffectStop(struct obj *object, u8 id)
-FieldEffectStop: @ 80B5CEC
- push {r4,lr}
- lsls r4, r1, 24
- lsrs r4, 24
- bl FieldEffectFreeGraphicsResources
- adds r0, r4, 0
- bl FieldEffectActiveListRemove
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end FieldEffectStop
-
- thumb_func_start FieldEffectFreeTilesIfUnused
-@ void FieldEffectFreeTilesIfUnused(u16 tileRangeStart)
-FieldEffectFreeTilesIfUnused: @ 80B5D04
- push {r4,r5,lr}
- lsls r0, 16
- lsrs r4, r0, 16
- adds r0, r4, 0
- bl GetSpriteTileTagByTileStart
- lsls r0, 16
- lsrs r3, r0, 16
- ldr r0, =0x0000ffff
- cmp r3, r0
- beq _080B5D58
- movs r2, 0
- ldr r5, =gSprites
-_080B5D1E:
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r1, r0, r5
- adds r0, r1, 0
- adds r0, 0x3E
- ldrb r0, [r0]
- lsls r0, 31
- cmp r0, 0
- beq _080B5D48
- adds r0, r1, 0
- adds r0, 0x3F
- ldrb r0, [r0]
- lsls r0, 25
- cmp r0, 0
- bge _080B5D48
- adds r0, r1, 0
- adds r0, 0x40
- ldrh r0, [r0]
- cmp r4, r0
- beq _080B5D58
-_080B5D48:
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x3F
- bls _080B5D1E
- adds r0, r3, 0
- bl FreeSpriteTilesByTag
-_080B5D58:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end FieldEffectFreeTilesIfUnused
-
- thumb_func_start FieldEffectFreePaletteIfUnused
-@ void FieldEffectFreePaletteIfUnused(u8 paletteSlot)
-FieldEffectFreePaletteIfUnused: @ 80B5D68
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- adds r0, r4, 0
- bl GetSpritePaletteTagByPaletteNum
- lsls r0, 16
- lsrs r5, r0, 16
- ldr r0, =0x0000ffff
- cmp r5, r0
- beq _080B5DB0
- movs r2, 0
- ldr r6, =gSprites
- adds r3, r4, 0
-_080B5D84:
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r1, r0, r6
- adds r0, r1, 0
- adds r0, 0x3E
- ldrb r0, [r0]
- lsls r0, 31
- cmp r0, 0
- beq _080B5DA0
- ldrb r0, [r1, 0x5]
- lsrs r0, 4
- cmp r0, r3
- beq _080B5DB0
-_080B5DA0:
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x3F
- bls _080B5D84
- adds r0, r5, 0
- bl FreeSpritePaletteByTag
-_080B5DB0:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end FieldEffectFreePaletteIfUnused
-
- thumb_func_start FieldEffectActiveListClear
-@ void FieldEffectActiveListClear()
-FieldEffectActiveListClear: @ 80B5DC0
- push {r4,lr}
- movs r2, 0
- ldr r4, =gUnknown_03000F58
- movs r3, 0xFF
-_080B5DC8:
- adds r0, r2, r4
- ldrb r1, [r0]
- orrs r1, r3
- strb r1, [r0]
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x1F
- bls _080B5DC8
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end FieldEffectActiveListClear
-
- thumb_func_start FieldEffectActiveListAdd
-@ void FieldEffectActiveListAdd(u8 id)
-FieldEffectActiveListAdd: @ 80B5DE4
- push {r4,lr}
- lsls r0, 24
- lsrs r3, r0, 24
- movs r2, 0
- ldr r4, =gUnknown_03000F58
-_080B5DEE:
- adds r1, r2, r4
- ldrb r0, [r1]
- cmp r0, 0xFF
- bne _080B5E00
- strb r3, [r1]
- b _080B5E0A
- .pool
-_080B5E00:
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x1F
- bls _080B5DEE
-_080B5E0A:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end FieldEffectActiveListAdd
-
- thumb_func_start FieldEffectActiveListRemove
-@ void FieldEffectActiveListRemove(u8 id)
-FieldEffectActiveListRemove: @ 80B5E10
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r3, r0, 24
- movs r2, 0
- ldr r4, =gUnknown_03000F58
- movs r5, 0xFF
-_080B5E1C:
- adds r1, r2, r4
- ldrb r0, [r1]
- cmp r0, r3
- bne _080B5E30
- orrs r0, r5
- strb r0, [r1]
- b _080B5E3A
- .pool
-_080B5E30:
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x1F
- bls _080B5E1C
-_080B5E3A:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end FieldEffectActiveListRemove
-
- thumb_func_start FieldEffectActiveListContains
-@ void FieldEffectActiveListContains(u8 id)
-FieldEffectActiveListContains: @ 80B5E40
- push {lr}
- lsls r0, 24
- lsrs r2, r0, 24
- movs r1, 0
- ldr r3, =gUnknown_03000F58
-_080B5E4A:
- adds r0, r1, r3
- ldrb r0, [r0]
- cmp r0, r2
- bne _080B5E5C
- movs r0, 0x1
- b _080B5E68
- .pool
-_080B5E5C:
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x1F
- bls _080B5E4A
- movs r0, 0
-_080B5E68:
- pop {r1}
- bx r1
- thumb_func_end FieldEffectActiveListContains
-
- thumb_func_start CreateTrainerSprite
-CreateTrainerSprite: @ 80B5E6C
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x18
- adds r4, r0, 0
- adds r5, r1, 0
- adds r6, r2, 0
- mov r9, r3
- ldr r7, [sp, 0x34]
- lsls r4, 24
- lsls r5, 16
- lsrs r5, 16
- lsls r6, 16
- lsrs r6, 16
- mov r0, r9
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- lsrs r4, 21
- ldr r3, =gTrainerFrontPicPaletteTable
- mov r8, r3
- add r8, r4
- mov r0, r8
- adds r1, r7, 0
- bl LoadCompressedObjectPaletteOverrideBuffer
- ldr r0, =gTrainerFrontPicTable
- adds r4, r0
- adds r0, r4, 0
- adds r1, r7, 0
- bl LoadCompressedObjectPicOverrideBuffer
- mov r1, sp
- ldrh r0, [r4, 0x6]
- movs r2, 0
- strh r0, [r1]
- mov r3, r8
- ldrh r0, [r3, 0x4]
- strh r0, [r1, 0x2]
- ldr r0, =gNewGameBirchOamAttributes
- str r0, [sp, 0x4]
- ldr r0, =gDummySpriteAnimTable
- str r0, [sp, 0x8]
- str r2, [sp, 0xC]
- ldr r0, =gDummySpriteAffineAnimTable
- str r0, [sp, 0x10]
- ldr r0, =SpriteCallbackDummy
- str r0, [sp, 0x14]
- lsls r5, 16
- asrs r5, 16
- lsls r6, 16
- asrs r6, 16
- mov r0, sp
- adds r1, r5, 0
- adds r2, r6, 0
- mov r3, r9
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- add sp, 0x18
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- .pool
- thumb_func_end CreateTrainerSprite
-
- thumb_func_start sub_80B5F0C
-sub_80B5F0C: @ 80B5F0C
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- adds r1, r2, 0
- lsls r4, 24
- lsls r5, 16
- lsrs r5, 16
- ldr r0, =gTrainerFrontPicTable
- lsrs r4, 21
- adds r0, r4, r0
- ldr r0, [r0]
- bl LZDecompressVram
- ldr r0, =gTrainerFrontPicPaletteTable
- adds r4, r0
- ldr r0, [r4]
- adds r1, r5, 0
- movs r2, 0x20
- bl LoadCompressedPalette
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B5F0C
-
- thumb_func_start AddNewGameBirchObject
-AddNewGameBirchObject: @ 80B5F44
- push {r4-r6,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- adds r6, r2, 0
- lsls r4, 16
- lsrs r4, 16
- lsls r5, 16
- lsrs r5, 16
- lsls r6, 24
- lsrs r6, 24
- ldr r0, =gNewGameBirchObjectPaletteInfo
- bl LoadSpritePalette
- ldr r0, =gNewGameBirchObjectTemplate
- lsls r4, 16
- asrs r4, 16
- lsls r5, 16
- asrs r5, 16
- adds r1, r4, 0
- adds r2, r5, 0
- adds r3, r6, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- pop {r4-r6}
- pop {r1}
- bx r1
- .pool
- thumb_func_end AddNewGameBirchObject
-
- thumb_func_start sub_80B5F84
-sub_80B5F84: @ 80B5F84
- push {r4,r5,lr}
- sub sp, 0x10
- lsls r0, 16
- lsrs r0, 16
- movs r3, 0x80
- lsls r3, 8
- lsls r1, 16
- asrs r1, 16
- str r1, [sp]
- lsls r2, 16
- asrs r2, 16
- str r2, [sp, 0x4]
- movs r1, 0
- str r1, [sp, 0x8]
- ldr r1, =gMonPaletteTable
- lsls r4, r0, 3
- adds r4, r1
- ldrh r1, [r4, 0x4]
- str r1, [sp, 0xC]
- movs r1, 0
- adds r2, r3, 0
- movs r3, 0x1
- bl sub_818D7D8
- lsls r0, 16
- lsrs r5, r0, 16
- ldrh r0, [r4, 0x4]
- bl IndexOfSpritePaletteTag
- adds r0, 0x10
- lsls r0, 24
- lsrs r0, 24
- bl sub_80AC3F8
- ldr r0, =0x0000ffff
- cmp r5, r0
- beq _080B5FDC
- lsls r0, r5, 24
- lsrs r0, 24
- b _080B5FDE
- .pool
-_080B5FDC:
- movs r0, 0x40
-_080B5FDE:
- add sp, 0x10
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_80B5F84
-
- thumb_func_start sub_80B5FE8
-sub_80B5FE8: @ 80B5FE8
- push {r4-r6,lr}
- mov r6, r10
- mov r5, r9
- mov r4, r8
- push {r4-r6}
- sub sp, 0x10
- adds r6, r0, 0
- mov r9, r1
- mov r10, r2
- adds r4, r3, 0
- ldr r5, [sp, 0x2C]
- lsls r6, 16
- lsrs r6, 16
- lsls r4, 16
- lsrs r4, 16
- lsls r5, 16
- lsrs r5, 16
- adds r0, r6, 0
- bl GetMonSpritePalStructFromOtIdPersonality
- mov r8, r0
- lsls r4, 16
- asrs r4, 16
- str r4, [sp]
- lsls r5, 16
- asrs r5, 16
- str r5, [sp, 0x4]
- movs r0, 0
- str r0, [sp, 0x8]
- mov r1, r8
- ldrh r0, [r1, 0x4]
- str r0, [sp, 0xC]
- adds r0, r6, 0
- mov r1, r9
- mov r2, r10
- movs r3, 0x1
- bl sub_818D7D8
- lsls r0, 16
- lsrs r4, r0, 16
- mov r1, r8
- ldrh r0, [r1, 0x4]
- bl IndexOfSpritePaletteTag
- adds r0, 0x10
- lsls r0, 24
- lsrs r0, 24
- bl sub_80AC3F8
- ldr r0, =0x0000ffff
- cmp r4, r0
- beq _080B605C
- lsls r0, r4, 24
- lsrs r0, 24
- b _080B605E
- .pool
-_080B605C:
- movs r0, 0x40
-_080B605E:
- add sp, 0x10
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_80B5FE8
-
- thumb_func_start sub_80B6070
-sub_80B6070: @ 80B6070
- push {r4,r5,lr}
- adds r4, r0, 0
- lsls r1, 24
- lsrs r5, r1, 24
- bl sub_80AC428
- ldrb r0, [r4, 0x1]
- lsls r0, 30
- cmp r0, 0
- beq _080B608E
- ldrb r0, [r4, 0x3]
- lsls r0, 26
- lsrs r0, 27
- bl FreeOamMatrix
-_080B608E:
- adds r0, r5, 0
- bl sub_818D820
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_80B6070
-
- thumb_func_start MultiplyInvertedPaletteRGBComponents
-MultiplyInvertedPaletteRGBComponents: @ 80B609C
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- lsls r0, 16
- lsls r1, 24
- lsrs r1, 24
- lsls r2, 24
- lsrs r2, 24
- lsls r3, 24
- lsrs r3, 24
- ldr r4, =gPlttBufferUnfaded
- lsrs r0, 15
- adds r4, r0, r4
- ldrh r4, [r4]
- movs r5, 0x1F
- mov r9, r5
- mov r8, r4
- mov r6, r8
- ands r6, r5
- mov r8, r6
- movs r6, 0xF8
- lsls r6, 2
- ands r6, r4
- lsrs r6, 5
- movs r5, 0xF8
- lsls r5, 7
- ands r4, r5
- lsrs r4, 10
- mov r7, r9
- mov r5, r8
- subs r7, r5
- mov r12, r7
- mov r7, r12
- muls r7, r1
- adds r1, r7, 0
- asrs r1, 4
- add r8, r1
- mov r5, r9
- subs r1, r5, r6
- muls r1, r2
- asrs r1, 4
- adds r6, r1
- subs r5, r4
- mov r9, r5
- mov r1, r9
- muls r1, r3
- asrs r1, 4
- adds r4, r1
- mov r7, r8
- lsls r7, 16
- lsls r6, 21
- orrs r6, r7
- lsls r4, 26
- orrs r4, r6
- lsrs r4, 16
- ldr r1, =gPlttBufferFaded
- adds r0, r1
- strh r4, [r0]
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end MultiplyInvertedPaletteRGBComponents
-
- thumb_func_start sub_80B6128
-sub_80B6128: @ 80B6128
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- lsls r0, 16
- lsls r1, 24
- lsrs r1, 24
- lsls r2, 24
- lsrs r2, 24
- lsls r3, 24
- lsrs r3, 24
- ldr r4, =gPlttBufferUnfaded
- lsrs r0, 15
- adds r4, r0, r4
- ldrh r4, [r4]
- movs r5, 0x1F
- mov r8, r5
- mov r6, r8
- ands r6, r4
- mov r8, r6
- movs r5, 0xF8
- lsls r5, 2
- ands r5, r4
- lsrs r5, 5
- movs r6, 0xF8
- lsls r6, 7
- ands r4, r6
- lsrs r4, 10
- mov r6, r8
- muls r6, r1
- adds r1, r6, 0
- asrs r1, 4
- mov r6, r8
- subs r6, r1
- adds r1, r5, 0
- muls r1, r2
- asrs r1, 4
- subs r5, r1
- adds r1, r4, 0
- muls r1, r3
- asrs r1, 4
- subs r4, r1
- lsls r6, 16
- lsls r5, 21
- orrs r5, r6
- lsls r4, 26
- orrs r4, r5
- lsrs r4, 16
- ldr r1, =gPlttBufferFaded
- adds r0, r1
- strh r4, [r0]
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B6128
-
- thumb_func_start sub_80B61A0
-sub_80B61A0: @ 80B61A0
- push {r4,lr}
- bl CalculatePlayerPartyCount
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, =sub_80B61E4
- movs r1, 0xFF
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, =gTasks
- adds r1, r0
- strh r4, [r1, 0xA]
- movs r0, 0x5D
- strh r0, [r1, 0xC]
- movs r0, 0x24
- strh r0, [r1, 0xE]
- movs r0, 0x7C
- strh r0, [r1, 0x10]
- movs r0, 0x18
- strh r0, [r1, 0x12]
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80B61A0
-
- thumb_func_start sub_80B61E4
-sub_80B61E4: @ 80B61E4
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, =gTasks
- adds r1, r0
- ldr r2, =gUnknown_0855C364
- movs r3, 0x8
- ldrsh r0, [r1, r3]
- lsls r0, 2
- adds r0, r2
- ldr r2, [r0]
- adds r0, r1, 0
- bl _call_via_r2
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B61E4
-
- thumb_func_start sub_80B6214
-sub_80B6214: @ 80B6214
- push {r4,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r1, 0xA
- ldrsh r0, [r4, r1]
- movs r2, 0xC
- ldrsh r1, [r4, r2]
- movs r3, 0xE
- ldrsh r2, [r4, r3]
- movs r3, 0x1
- bl sub_80B646C
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x14]
- movs r1, 0x10
- ldrsh r0, [r4, r1]
- movs r2, 0x12
- ldrsh r1, [r4, r2]
- bl sub_80B6850
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x16]
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80B6214
-
- thumb_func_start sub_80B6250
-sub_80B6250: @ 80B6250
- push {r4,lr}
- adds r2, r0, 0
- ldr r3, =gSprites
- movs r1, 0x14
- ldrsh r0, [r2, r1]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r3
- movs r4, 0x2E
- ldrsh r0, [r1, r4]
- cmp r0, 0x1
- ble _080B6282
- movs r0, 0x16
- ldrsh r1, [r2, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- ldrh r1, [r0, 0x2E]
- adds r1, 0x1
- strh r1, [r0, 0x2E]
- ldrh r0, [r2, 0x8]
- adds r0, 0x1
- strh r0, [r2, 0x8]
-_080B6282:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B6250
-
- thumb_func_start sub_80B628C
-sub_80B628C: @ 80B628C
- push {lr}
- adds r3, r0, 0
- ldr r2, =gSprites
- movs r0, 0x14
- ldrsh r1, [r3, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x2E
- ldrsh r0, [r0, r1]
- cmp r0, 0x4
- ble _080B62AC
- ldrh r0, [r3, 0x8]
- adds r0, 0x1
- strh r0, [r3, 0x8]
-_080B62AC:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B628C
-
- thumb_func_start sub_80B62B4
-sub_80B62B4: @ 80B62B4
- push {lr}
- ldr r2, =gSprites
- movs r3, 0x14
- ldrsh r1, [r0, r3]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r1, r0, r2
- movs r2, 0x2E
- ldrsh r0, [r1, r2]
- cmp r0, 0x6
- ble _080B62E6
- adds r0, r1, 0
- bl DestroySprite
- movs r0, 0x19
- bl FieldEffectActiveListRemove
- ldr r0, =sub_80B61E4
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_080B62E6:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B62B4
-
- thumb_func_start sub_80B62F4
-sub_80B62F4: @ 80B62F4
- push {r4,lr}
- bl CalculatePlayerPartyCount
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, =sub_80B6330
- movs r1, 0xFF
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, =gTasks
- adds r1, r0
- strh r4, [r1, 0xA]
- movs r0, 0x75
- strh r0, [r1, 0xC]
- movs r0, 0x34
- strh r0, [r1, 0xE]
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80B62F4
-
- thumb_func_start sub_80B6330
-sub_80B6330: @ 80B6330
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, =gTasks
- adds r1, r0
- ldr r2, =gUnknown_0855C374
- movs r3, 0x8
- ldrsh r0, [r1, r3]
- lsls r0, 2
- adds r0, r2
- ldr r2, [r0]
- adds r0, r1, 0
- bl _call_via_r2
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B6330
-
- thumb_func_start sub_80B6360
-sub_80B6360: @ 80B6360
- push {r4,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r1, 0xA
- ldrsh r0, [r4, r1]
- movs r2, 0xC
- ldrsh r1, [r4, r2]
- movs r3, 0xE
- ldrsh r2, [r4, r3]
- movs r3, 0
- bl sub_80B646C
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x14]
- ldr r0, =sub_80B6330
- bl FindTaskIdByFunc
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r4, 0
- movs r1, 0x78
- movs r2, 0x18
- movs r3, 0
- bl sub_80B68EC
- adds r0, r4, 0
- movs r1, 0x28
- movs r2, 0x8
- movs r3, 0x1
- bl sub_80B68EC
- adds r0, r4, 0
- movs r1, 0x48
- movs r2, 0x8
- movs r3, 0x1
- bl sub_80B68EC
- adds r0, r4, 0
- movs r1, 0xA8
- movs r2, 0x8
- movs r3, 0x1
- bl sub_80B68EC
- adds r0, r4, 0
- movs r1, 0xC8
- movs r2, 0x8
- movs r3, 0x1
- bl sub_80B68EC
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B6360
-
- thumb_func_start sub_80B63D4
-sub_80B63D4: @ 80B63D4
- push {lr}
- adds r3, r0, 0
- ldr r2, =gSprites
- movs r0, 0x14
- ldrsh r1, [r3, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x2E
- ldrsh r0, [r0, r1]
- cmp r0, 0x1
- ble _080B63FA
- ldrh r0, [r3, 0x26]
- adds r0, 0x1
- strh r0, [r3, 0x26]
- ldrh r0, [r3, 0x8]
- adds r0, 0x1
- strh r0, [r3, 0x8]
-_080B63FA:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B63D4
-
- thumb_func_start sub_80B6404
-sub_80B6404: @ 80B6404
- push {lr}
- adds r3, r0, 0
- ldr r2, =gSprites
- movs r0, 0x14
- ldrsh r1, [r3, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x2E
- ldrsh r0, [r0, r1]
- cmp r0, 0x4
- ble _080B6424
- ldrh r0, [r3, 0x8]
- adds r0, 0x1
- strh r0, [r3, 0x8]
-_080B6424:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B6404
-
- thumb_func_start sub_80B642C
-sub_80B642C: @ 80B642C
- push {lr}
- ldr r2, =gSprites
- movs r3, 0x14
- ldrsh r1, [r0, r3]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r1, r0, r2
- movs r2, 0x2E
- ldrsh r0, [r1, r2]
- cmp r0, 0x6
- ble _080B645E
- adds r0, r1, 0
- bl DestroySprite
- movs r0, 0x3E
- bl FieldEffectActiveListRemove
- ldr r0, =sub_80B6330
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_080B645E:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B642C
-
- thumb_func_start sub_80B646C
-sub_80B646C: @ 80B646C
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- mov r8, r0
- adds r4, r1, 0
- adds r5, r2, 0
- adds r6, r3, 0
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- lsls r4, 16
- lsrs r4, 16
- lsls r5, 16
- lsrs r5, 16
- lsls r6, 16
- lsrs r6, 16
- ldr r0, =sub_80B64C0
- bl CreateInvisibleSprite
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- ldr r2, =gSprites
- adds r1, r2
- strh r4, [r1, 0x24]
- strh r5, [r1, 0x26]
- strh r6, [r1, 0x38]
- mov r2, r8
- strh r2, [r1, 0x3A]
- strh r0, [r1, 0x3C]
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80B646C
-
- thumb_func_start sub_80B64C0
-sub_80B64C0: @ 80B64C0
- push {lr}
- ldr r2, =gUnknown_0855C384
- movs r3, 0x2E
- ldrsh r1, [r0, r3]
- lsls r1, 2
- adds r1, r2
- ldr r1, [r1]
- bl _call_via_r1
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B64C0
-
- thumb_func_start sub_80B64DC
-sub_80B64DC: @ 80B64DC
- push {r4,lr}
- adds r4, r0, 0
- ldrh r1, [r4, 0x30]
- movs r2, 0x30
- ldrsh r0, [r4, r2]
- cmp r0, 0
- beq _080B64F4
- subs r0, r1, 0x1
- strh r0, [r4, 0x30]
- lsls r0, 16
- cmp r0, 0
- bne _080B6550
-_080B64F4:
- movs r0, 0x19
- strh r0, [r4, 0x30]
- ldr r0, =gUnknown_0855C304
- ldr r1, =gUnknown_0855C3A4
- movs r2, 0x32
- ldrsh r3, [r4, r2]
- lsls r3, 2
- adds r3, r1
- ldrh r1, [r4, 0x24]
- ldrh r2, [r3]
- adds r1, r2
- lsls r1, 16
- asrs r1, 16
- ldrh r2, [r4, 0x26]
- ldrh r3, [r3, 0x2]
- adds r2, r3
- lsls r2, 16
- asrs r2, 16
- movs r3, 0
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gSprites
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r2, [r1, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- movs r2, 0x8
- orrs r0, r2
- strb r0, [r1, 0x5]
- ldrh r0, [r4, 0x3C]
- strh r0, [r1, 0x2E]
- ldrh r0, [r4, 0x32]
- adds r0, 0x1
- strh r0, [r4, 0x32]
- ldrh r0, [r4, 0x3A]
- subs r0, 0x1
- strh r0, [r4, 0x3A]
- movs r0, 0x17
- bl PlaySE
-_080B6550:
- movs r1, 0x3A
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _080B6562
- movs r0, 0x20
- strh r0, [r4, 0x30]
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
-_080B6562:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B64DC
-
- thumb_func_start sub_80B6574
-sub_80B6574: @ 80B6574
- push {lr}
- adds r1, r0, 0
- ldrh r0, [r1, 0x30]
- subs r0, 0x1
- strh r0, [r1, 0x30]
- lsls r0, 16
- asrs r2, r0, 16
- cmp r2, 0
- bne _080B65A4
- ldrh r0, [r1, 0x2E]
- adds r0, 0x1
- strh r0, [r1, 0x2E]
- movs r0, 0x8
- strh r0, [r1, 0x30]
- strh r2, [r1, 0x32]
- strh r2, [r1, 0x34]
- movs r2, 0x38
- ldrsh r0, [r1, r2]
- cmp r0, 0
- beq _080B65A4
- movs r0, 0xB8
- lsls r0, 1
- bl PlayFanfare
-_080B65A4:
- pop {r0}
- bx r0
- thumb_func_end sub_80B6574
-
- thumb_func_start sub_80B65A8
-sub_80B65A8: @ 80B65A8
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- adds r7, r0, 0
- ldrh r0, [r7, 0x30]
- subs r0, 0x1
- strh r0, [r7, 0x30]
- lsls r0, 16
- cmp r0, 0
- bne _080B65D8
- movs r0, 0x8
- strh r0, [r7, 0x30]
- ldrh r0, [r7, 0x32]
- adds r0, 0x1
- movs r1, 0x3
- ands r0, r1
- strh r0, [r7, 0x32]
- cmp r0, 0
- bne _080B65D8
- ldrh r0, [r7, 0x34]
- adds r0, 0x1
- strh r0, [r7, 0x34]
-_080B65D8:
- ldrh r4, [r7, 0x32]
- adds r4, 0x3
- movs r0, 0x3
- mov r8, r0
- mov r1, r8
- ands r4, r1
- ldr r3, =0x00001007
- mov r10, r3
- mov r0, r10
- bl IndexOfSpritePaletteTag
- lsls r0, 24
- lsrs r0, 4
- movs r1, 0x84
- lsls r1, 17
- adds r0, r1
- lsrs r0, 16
- ldr r6, =gUnknown_0855C3BC
- adds r1, r4, r6
- ldrb r1, [r1]
- ldr r5, =gUnknown_0855C3C0
- adds r2, r4, r5
- ldrb r2, [r2]
- ldr r3, =gUnknown_0855C3C4
- mov r9, r3
- add r4, r9
- ldrb r3, [r4]
- bl MultiplyInvertedPaletteRGBComponents
- ldrh r4, [r7, 0x32]
- adds r4, 0x2
- mov r0, r8
- ands r4, r0
- mov r0, r10
- bl IndexOfSpritePaletteTag
- lsls r0, 24
- lsrs r0, 4
- movs r1, 0x83
- lsls r1, 17
- adds r0, r1
- lsrs r0, 16
- adds r1, r4, r6
- ldrb r1, [r1]
- adds r2, r4, r5
- ldrb r2, [r2]
- add r4, r9
- ldrb r3, [r4]
- bl MultiplyInvertedPaletteRGBComponents
- ldrh r4, [r7, 0x32]
- adds r4, 0x1
- mov r3, r8
- ands r4, r3
- mov r0, r10
- bl IndexOfSpritePaletteTag
- lsls r0, 24
- lsrs r0, 4
- movs r1, 0x81
- lsls r1, 17
- adds r0, r1
- lsrs r0, 16
- adds r1, r4, r6
- ldrb r1, [r1]
- adds r2, r4, r5
- ldrb r2, [r2]
- add r4, r9
- ldrb r3, [r4]
- bl MultiplyInvertedPaletteRGBComponents
- ldrh r4, [r7, 0x32]
- lsls r4, 24
- lsrs r4, 24
- mov r0, r10
- bl IndexOfSpritePaletteTag
- lsls r0, 24
- lsrs r0, 4
- ldr r3, =0x01050000
- adds r0, r3
- lsrs r0, 16
- adds r6, r4, r6
- ldrb r6, [r6]
- adds r5, r4, r5
- ldrb r5, [r5]
- add r4, r9
- ldrb r4, [r4]
- adds r1, r6, 0
- adds r2, r5, 0
- adds r3, r4, 0
- bl MultiplyInvertedPaletteRGBComponents
- mov r0, r10
- bl IndexOfSpritePaletteTag
- lsls r0, 24
- lsrs r0, 4
- ldr r1, =0x01030000
- adds r0, r1
- lsrs r0, 16
- adds r1, r6, 0
- adds r2, r5, 0
- adds r3, r4, 0
- bl MultiplyInvertedPaletteRGBComponents
- movs r3, 0x34
- ldrsh r0, [r7, r3]
- cmp r0, 0x2
- ble _080B66C2
- ldrh r0, [r7, 0x2E]
- adds r0, 0x1
- movs r1, 0
- strh r0, [r7, 0x2E]
- movs r0, 0x8
- strh r0, [r7, 0x30]
- strh r1, [r7, 0x32]
-_080B66C2:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B65A8
-
- thumb_func_start sub_80B66E8
-sub_80B66E8: @ 80B66E8
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- adds r2, r0, 0
- ldrh r0, [r2, 0x30]
- subs r0, 0x1
- strh r0, [r2, 0x30]
- lsls r0, 16
- cmp r0, 0
- bne _080B6718
- movs r0, 0x8
- strh r0, [r2, 0x30]
- ldrh r0, [r2, 0x32]
- adds r0, 0x1
- movs r1, 0x3
- ands r0, r1
- strh r0, [r2, 0x32]
- cmp r0, 0x3
- bne _080B6718
- ldrh r0, [r2, 0x2E]
- adds r0, 0x1
- strh r0, [r2, 0x2E]
- movs r0, 0x1E
- strh r0, [r2, 0x30]
-_080B6718:
- ldrh r4, [r2, 0x32]
- lsls r4, 24
- lsrs r4, 24
- ldr r0, =0x00001007
- mov r8, r0
- bl IndexOfSpritePaletteTag
- lsls r0, 24
- lsrs r0, 4
- movs r1, 0x84
- lsls r1, 17
- adds r0, r1
- lsrs r0, 16
- ldr r1, =gUnknown_0855C3BC
- adds r1, r4, r1
- ldrb r6, [r1]
- ldr r1, =gUnknown_0855C3C0
- adds r1, r4, r1
- ldrb r5, [r1]
- ldr r1, =gUnknown_0855C3C4
- adds r4, r1
- ldrb r4, [r4]
- adds r1, r6, 0
- adds r2, r5, 0
- adds r3, r4, 0
- bl MultiplyInvertedPaletteRGBComponents
- mov r0, r8
- bl IndexOfSpritePaletteTag
- lsls r0, 24
- lsrs r0, 4
- movs r1, 0x83
- lsls r1, 17
- adds r0, r1
- lsrs r0, 16
- adds r1, r6, 0
- adds r2, r5, 0
- adds r3, r4, 0
- bl MultiplyInvertedPaletteRGBComponents
- mov r0, r8
- bl IndexOfSpritePaletteTag
- lsls r0, 24
- lsrs r0, 4
- movs r1, 0x81
- lsls r1, 17
- adds r0, r1
- lsrs r0, 16
- adds r1, r6, 0
- adds r2, r5, 0
- adds r3, r4, 0
- bl MultiplyInvertedPaletteRGBComponents
- mov r0, r8
- bl IndexOfSpritePaletteTag
- lsls r0, 24
- lsrs r0, 4
- ldr r1, =0x01050000
- adds r0, r1
- lsrs r0, 16
- adds r1, r6, 0
- adds r2, r5, 0
- adds r3, r4, 0
- bl MultiplyInvertedPaletteRGBComponents
- mov r0, r8
- bl IndexOfSpritePaletteTag
- lsls r0, 24
- lsrs r0, 4
- ldr r1, =0x01030000
- adds r0, r1
- lsrs r0, 16
- adds r1, r6, 0
- adds r2, r5, 0
- adds r3, r4, 0
- bl MultiplyInvertedPaletteRGBComponents
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B66E8
-
- thumb_func_start sub_80B67DC
-sub_80B67DC: @ 80B67DC
- push {lr}
- adds r1, r0, 0
- ldrh r0, [r1, 0x30]
- subs r0, 0x1
- strh r0, [r1, 0x30]
- lsls r0, 16
- cmp r0, 0
- bne _080B67F2
- ldrh r0, [r1, 0x2E]
- adds r0, 0x1
- strh r0, [r1, 0x2E]
-_080B67F2:
- pop {r0}
- bx r0
- thumb_func_end sub_80B67DC
-
- thumb_func_start sub_80B67F8
-sub_80B67F8: @ 80B67F8
- ldrh r1, [r0, 0x2E]
- adds r1, 0x1
- strh r1, [r0, 0x2E]
- bx lr
- thumb_func_end sub_80B67F8
-
- thumb_func_start sub_80B6800
-sub_80B6800: @ 80B6800
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x38
- ldrsh r0, [r4, r1]
- cmp r0, 0
- beq _080B6816
- bl IsFanfareTaskInactive
- lsls r0, 24
- cmp r0, 0
- beq _080B681C
-_080B6816:
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
-_080B681C:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80B6800
-
- thumb_func_start nullsub_97
-nullsub_97: @ 80B6824
- bx lr
- thumb_func_end nullsub_97
-
- thumb_func_start sub_80B6828
-sub_80B6828: @ 80B6828
- push {lr}
- adds r3, r0, 0
- ldr r2, =gSprites
- movs r0, 0x2E
- ldrsh r1, [r3, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x2E
- ldrsh r0, [r0, r1]
- cmp r0, 0x4
- ble _080B6848
- adds r0, r3, 0
- bl FieldEffectFreeGraphicsResources
-_080B6848:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B6828
-
- thumb_func_start sub_80B6850
-sub_80B6850: @ 80B6850
- push {r4,lr}
- adds r3, r0, 0
- adds r2, r1, 0
- ldr r0, =gUnknown_0855C31C
- lsls r3, 16
- asrs r3, 16
- lsls r2, 16
- asrs r2, 16
- adds r1, r3, 0
- movs r3, 0
- bl CreateSpriteAtEnd
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- lsls r0, r4, 4
- adds r0, r4
- lsls r0, 2
- ldr r1, =gSprites
- adds r0, r1
- ldrb r2, [r0, 0x5]
- movs r1, 0xD
- negs r1, r1
- ands r1, r2
- movs r2, 0x8
- orrs r1, r2
- strb r1, [r0, 0x5]
- adds r3, r0, 0
- adds r3, 0x3E
- ldrb r1, [r3]
- movs r2, 0x4
- orrs r1, r2
- strb r1, [r3]
- ldr r1, =gUnknown_0855C2AC
- bl SetSubspriteTables
- adds r0, r4, 0
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80B6850
-
- thumb_func_start sub_80B68AC
-sub_80B68AC: @ 80B68AC
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- cmp r0, 0
- beq _080B68D0
- movs r0, 0
- strh r0, [r4, 0x2E]
- adds r2, r4, 0
- adds r2, 0x3E
- ldrb r1, [r2]
- subs r0, 0x5
- ands r0, r1
- strb r0, [r2]
- adds r0, r4, 0
- movs r1, 0x1
- bl StartSpriteAnim
-_080B68D0:
- adds r0, r4, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _080B68E4
- adds r0, r4, 0
- bl FieldEffectFreeGraphicsResources
-_080B68E4:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80B68AC
-
- thumb_func_start sub_80B68EC
-sub_80B68EC: @ 80B68EC
- push {r4,r5,lr}
- lsls r0, 16
- lsrs r5, r0, 16
- lsls r1, 16
- lsrs r1, 16
- lsls r2, 16
- lsrs r2, 16
- lsls r3, 24
- cmp r3, 0
- bne _080B6934
- ldr r0, =gUnknown_0855C334
- lsls r1, 16
- asrs r1, 16
- lsls r2, 16
- asrs r2, 16
- movs r3, 0
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r0, r4, 4
- adds r0, r4
- lsls r0, 2
- ldr r1, =gSprites
- adds r0, r1
- ldr r1, =gUnknown_0855C2C4
- bl SetSubspriteTables
- b _080B6948
- .pool
-_080B6934:
- ldr r0, =gUnknown_0855C34C
- lsls r1, 16
- asrs r1, 16
- lsls r2, 16
- asrs r2, 16
- movs r3, 0
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r4, r0, 24
-_080B6948:
- ldr r1, =gSprites
- lsls r0, r4, 4
- adds r0, r4
- lsls r0, 2
- adds r0, r1
- adds r3, r0, 0
- adds r3, 0x3E
- ldrb r1, [r3]
- movs r2, 0x4
- orrs r1, r2
- strb r1, [r3]
- strh r5, [r0, 0x2E]
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B68EC
-
- thumb_func_start sub_80B6970
-sub_80B6970: @ 80B6970
- push {lr}
- adds r3, r0, 0
- ldr r2, =gTasks
- movs r0, 0x2E
- ldrsh r1, [r3, r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- movs r1, 0x26
- ldrsh r0, [r0, r1]
- cmp r0, 0
- beq _080B69C6
- ldrh r1, [r3, 0x30]
- movs r2, 0x30
- ldrsh r0, [r3, r2]
- cmp r0, 0
- beq _080B699E
- subs r0, r1, 0x1
- strh r0, [r3, 0x30]
- lsls r0, 16
- cmp r0, 0
- bne _080B69C0
-_080B699E:
- movs r0, 0x10
- strh r0, [r3, 0x30]
- movs r0, 0x3E
- adds r0, r3
- mov r12, r0
- ldrb r2, [r0]
- lsls r0, r2, 29
- lsrs r0, 31
- movs r1, 0x1
- eors r1, r0
- lsls r1, 2
- movs r0, 0x5
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- mov r1, r12
- strb r0, [r1]
-_080B69C0:
- ldrh r0, [r3, 0x32]
- adds r0, 0x1
- strh r0, [r3, 0x32]
-_080B69C6:
- movs r2, 0x32
- ldrsh r0, [r3, r2]
- cmp r0, 0x7F
- ble _080B69D4
- adds r0, r3, 0
- bl FieldEffectFreeGraphicsResources
-_080B69D4:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B6970
-
- thumb_func_start sub_80B69DC
-sub_80B69DC: @ 80B69DC
- push {lr}
- ldr r0, =c2_exit_to_overworld_2_switch
- bl SetMainCallback2
- ldr r1, =gFieldCallback
- ldr r0, =mapldr_080842E8
- str r0, [r1]
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B69DC
-
- thumb_func_start mapldr_080842E8
-mapldr_080842E8: @ 80B69FC
- push {lr}
- bl pal_fill_black
- ldr r0, =task00_8084310
- movs r1, 0
- bl CreateTask
- bl ScriptContext2_Enable
- bl FreezeMapObjects
- ldr r1, =gFieldCallback
- movs r0, 0
- str r0, [r1]
- pop {r0}
- bx r0
- .pool
- thumb_func_end mapldr_080842E8
-
- thumb_func_start task00_8084310
-task00_8084310: @ 80B6A24
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- ldr r1, =gTasks
- adds r4, r0, r1
- movs r0, 0x8
- ldrsh r6, [r4, r0]
- cmp r6, 0
- bne _080B6A64
- bl sub_80ABDFC
- lsls r0, 24
- cmp r0, 0
- beq _080B6A8A
- bl GetCursorSelectionMonId
- ldr r1, =gFieldEffectArguments
- lsls r0, 24
- lsrs r0, 24
- str r0, [r1]
- cmp r0, 0x5
- ble _080B6A58
- str r6, [r1]
-_080B6A58:
- movs r0, 0x1F
- bl FieldEffectStart
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_080B6A64:
- movs r0, 0x1F
- bl FieldEffectActiveListContains
- lsls r0, 24
- cmp r0, 0
- bne _080B6A8A
- bl flag_var_implications_of_teleport_
- bl warp_in
- ldr r0, =c2_load_new_map
- bl SetMainCallback2
- ldr r1, =gFieldCallback
- ldr r0, =mapldr_08084390
- str r0, [r1]
- adds r0, r5, 0
- bl DestroyTask
-_080B6A8A:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end task00_8084310
-
- thumb_func_start mapldr_08084390
-mapldr_08084390: @ 80B6AA4
- push {r4,lr}
- bl Overworld_PlaySpecialMapMusic
- bl pal_fill_black
- ldr r0, =c3_080843F8
- movs r1, 0
- bl CreateTask
- ldr r4, =gMapObjects
- ldr r3, =gPlayerAvatar
- ldrb r1, [r3, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrb r1, [r0, 0x1]
- movs r2, 0x20
- orrs r1, r2
- strb r1, [r0, 0x1]
- ldrb r1, [r3]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _080B6AE6
- ldrb r1, [r3, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- movs r1, 0x3
- bl FieldObjectTurn
-_080B6AE6:
- bl ScriptContext2_Enable
- bl FreezeMapObjects
- ldr r1, =gFieldCallback
- movs r0, 0
- str r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end mapldr_08084390
-
- thumb_func_start c3_080843F8
-c3_080843F8: @ 80B6B0C
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- adds r5, r0, 0
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- ldr r1, =gTasks
- adds r4, r0, r1
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _080B6B3E
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _080B6B58
- movs r0, 0x20
- bl FieldEffectStart
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_080B6B3E:
- movs r0, 0x20
- bl FieldEffectActiveListContains
- lsls r0, 24
- cmp r0, 0
- bne _080B6B58
- bl ScriptContext2_Disable
- bl UnfreezeMapObjects
- adds r0, r5, 0
- bl DestroyTask
-_080B6B58:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end c3_080843F8
-
- thumb_func_start sub_80B6B68
-sub_80B6B68: @ 80B6B68
- push {lr}
- bl Overworld_PlaySpecialMapMusic
- bl pal_fill_for_maplights
- bl ScriptContext2_Enable
- bl FreezeMapObjects
- ldr r0, =sub_80B6B94
- movs r1, 0
- bl CreateTask
- ldr r1, =gFieldCallback
- movs r0, 0
- str r0, [r1]
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B6B68
-
- thumb_func_start sub_80B6B94
-sub_80B6B94: @ 80B6B94
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, =gTasks
- adds r4, r1, r0
- ldr r5, =gUnknown_0855C3C8
-_080B6BA6:
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- lsls r0, 2
- adds r0, r5
- ldr r1, [r0]
- adds r0, r4, 0
- bl _call_via_r1
- lsls r0, 24
- cmp r0, 0
- bne _080B6BA6
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B6B94
-
- thumb_func_start sub_80B6BCC
-sub_80B6BCC: @ 80B6BCC
- push {r4-r6,lr}
- mov r6, r9
- mov r5, r8
- push {r5,r6}
- mov r9, r0
- ldr r6, =gPlayerAvatar
- ldrb r0, [r6, 0x5]
- lsls r5, r0, 3
- adds r5, r0
- lsls r5, 2
- ldr r0, =gMapObjects
- mov r8, r0
- add r5, r8
- ldrb r0, [r6, 0x4]
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- ldr r0, =gSprites
- adds r4, r0
- bl CameraObjectReset2
- ldrb r1, [r6, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- add r0, r8
- ldrb r1, [r0, 0x1]
- movs r2, 0x20
- orrs r1, r2
- strb r1, [r0, 0x1]
- movs r0, 0x1
- strb r0, [r6, 0x6]
- bl player_get_direction_lower_nybble
- lsls r0, 24
- lsrs r0, 24
- bl GetFaceDirectionAnimId
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r5, 0
- bl FieldObjectSetSpecialAnim
- adds r3, r4, 0
- adds r3, 0x42
- ldrb r0, [r3]
- lsrs r0, 6
- mov r1, r9
- strh r0, [r1, 0x10]
- ldrb r0, [r5, 0x3]
- movs r2, 0x4
- orrs r0, r2
- strb r0, [r5, 0x3]
- ldrb r1, [r4, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r1
- orrs r0, r2
- strb r0, [r4, 0x5]
- ldrb r1, [r3]
- movs r0, 0x3F
- ands r0, r1
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r3]
- mov r1, r9
- ldrh r0, [r1, 0x8]
- adds r0, 0x1
- strh r0, [r1, 0x8]
- movs r0, 0x1
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r6}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80B6BCC
-
- thumb_func_start sub_80B6C74
-sub_80B6C74: @ 80B6C74
- push {r4,lr}
- adds r4, r0, 0
- bl sub_80ABDFC
- lsls r0, 24
- cmp r0, 0
- beq _080B6C88
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_080B6C88:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80B6C74
-
- thumb_func_start sub_80B6C90
-sub_80B6C90: @ 80B6C90
- push {r4-r6,lr}
- adds r5, r0, 0
- ldr r6, =gPlayerAvatar
- ldrb r0, [r6, 0x4]
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- ldr r0, =gSprites
- adds r2, r0
- adds r0, r2, 0
- adds r0, 0x29
- movs r4, 0
- ldrsb r4, [r0, r4]
- lsls r0, r4, 17
- negs r0, r0
- ldrh r1, [r2, 0x22]
- ldr r3, =gSpriteCoordOffsetY
- adds r1, r4
- ldrh r3, [r3]
- adds r1, r3
- asrs r0, 16
- adds r0, r1
- negs r0, r0
- movs r1, 0
- strh r0, [r2, 0x26]
- movs r0, 0x1
- strh r0, [r5, 0xA]
- strh r1, [r5, 0xC]
- ldr r2, =gMapObjects
- ldrb r0, [r6, 0x5]
- lsls r1, r0, 3
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r2, [r1, 0x1]
- movs r0, 0x21
- negs r0, r0
- ands r0, r2
- strb r0, [r1, 0x1]
- movs r0, 0x2B
- bl PlaySE
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- strh r0, [r5, 0x8]
- movs r0, 0
- pop {r4-r6}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80B6C90
-
- thumb_func_start sub_80B6D04
-sub_80B6D04: @ 80B6D04
- push {r4-r6,lr}
- adds r4, r0, 0
- ldr r2, =gPlayerAvatar
- ldrb r1, [r2, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, =gMapObjects
- adds r6, r0, r1
- ldrb r1, [r2, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, =gSprites
- adds r5, r0, r1
- ldrh r0, [r4, 0xA]
- ldrh r1, [r5, 0x26]
- adds r0, r1
- strh r0, [r5, 0x26]
- ldrh r2, [r4, 0xA]
- movs r1, 0xA
- ldrsh r0, [r4, r1]
- cmp r0, 0x7
- bgt _080B6D46
- ldrh r1, [r4, 0xC]
- adds r0, r2, r1
- strh r0, [r4, 0xC]
- movs r1, 0xF
- ands r0, r1
- cmp r0, 0
- beq _080B6D46
- lsls r0, r2, 1
- strh r0, [r4, 0xA]
-_080B6D46:
- ldrh r2, [r4, 0xE]
- movs r1, 0xE
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _080B6D84
- movs r0, 0x26
- ldrsh r1, [r5, r0]
- movs r0, 0x10
- negs r0, r0
- cmp r1, r0
- blt _080B6D84
- adds r0, r2, 0x1
- strh r0, [r4, 0xE]
- ldrb r1, [r6, 0x3]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- strb r0, [r6, 0x3]
- ldrb r1, [r4, 0x10]
- adds r3, r5, 0
- adds r3, 0x42
- lsls r1, 6
- ldrb r2, [r3]
- movs r0, 0x3F
- ands r0, r2
- orrs r0, r1
- strb r0, [r3]
- ldrb r0, [r6]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r6]
-_080B6D84:
- movs r1, 0x26
- ldrsh r0, [r5, r1]
- cmp r0, 0
- blt _080B6DA8
- movs r0, 0xD6
- bl PlaySE
- ldrb r0, [r6]
- movs r1, 0x8
- orrs r0, r1
- movs r1, 0x20
- orrs r0, r1
- strb r0, [r6]
- movs r0, 0
- strh r0, [r5, 0x26]
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_080B6DA8:
- movs r0, 0
- pop {r4-r6}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80B6D04
-
- thumb_func_start sub_80B6DBC
-sub_80B6DBC: @ 80B6DBC
- push {lr}
- ldrh r1, [r0, 0x8]
- adds r1, 0x1
- movs r2, 0
- strh r1, [r0, 0x8]
- movs r1, 0x4
- strh r1, [r0, 0xA]
- strh r2, [r0, 0xC]
- movs r0, 0
- bl SetCameraPanningCallback
- movs r0, 0x1
- pop {r1}
- bx r1
- thumb_func_end sub_80B6DBC
-
- thumb_func_start sub_80B6DD8
-sub_80B6DD8: @ 80B6DD8
- push {r4,lr}
- adds r4, r0, 0
- movs r0, 0xA
- ldrsh r1, [r4, r0]
- movs r0, 0
- bl SetCameraPanning
- ldrh r0, [r4, 0xA]
- negs r2, r0
- strh r2, [r4, 0xA]
- ldrh r0, [r4, 0xC]
- adds r0, 0x1
- strh r0, [r4, 0xC]
- movs r1, 0x3
- ands r0, r1
- cmp r0, 0
- bne _080B6E00
- lsls r0, r2, 16
- asrs r0, 17
- strh r0, [r4, 0xA]
-_080B6E00:
- movs r1, 0xA
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _080B6E0E
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_080B6E0E:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80B6DD8
-
- thumb_func_start sub_80B6E18
-sub_80B6E18: @ 80B6E18
- push {lr}
- ldr r1, =gPlayerAvatar
- movs r0, 0
- strb r0, [r1, 0x6]
- bl ScriptContext2_Disable
- bl CameraObjectReset1
- bl UnfreezeMapObjects
- bl InstallCameraPanAheadCallback
- ldr r0, =sub_80B6B94
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
- movs r0, 0
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80B6E18
-
- thumb_func_start sub_80B6E4C
-sub_80B6E4C: @ 80B6E4C
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- lsls r1, 24
- lsrs r1, 24
- ldr r0, =sub_80B6E88
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- movs r0, 0
- strh r0, [r1, 0xA]
- cmp r4, 0x6A
- bne _080B6E78
- movs r0, 0x1
- strh r0, [r1, 0xA]
-_080B6E78:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B6E4C
-
- thumb_func_start sub_80B6E88
-sub_80B6E88: @ 80B6E88
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, =gTasks
- adds r4, r1, r0
- ldr r5, =gUnknown_0855C3E4
-_080B6E9A:
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- lsls r0, 2
- adds r0, r5
- ldr r1, [r0]
- adds r0, r4, 0
- bl _call_via_r1
- lsls r0, 24
- cmp r0, 0
- bne _080B6E9A
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B6E88
-
- thumb_func_start sub_80B6EC0
-sub_80B6EC0: @ 80B6EC0
- push {r4,lr}
- adds r4, r0, 0
- bl FreezeMapObjects
- bl CameraObjectReset2
- ldrb r0, [r4, 0xA]
- bl sub_80E1558
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80B6EC0
-
- thumb_func_start sub_80B6EE0
-sub_80B6EE0: @ 80B6EE0
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r0, =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, =gMapObjects
- adds r4, r0, r1
- adds r0, r4, 0
- bl FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive
- lsls r0, 24
- cmp r0, 0
- beq _080B6F0A
- adds r0, r4, 0
- bl FieldObjectClearAnimIfSpecialAnimFinished
- lsls r0, 24
- cmp r0, 0
- beq _080B6F3E
-_080B6F0A:
- bl player_get_direction_lower_nybble
- lsls r0, 24
- lsrs r0, 24
- bl GetFaceDirectionAnimId
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl FieldObjectSetSpecialAnim
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- movs r1, 0
- strh r0, [r5, 0x8]
- strh r1, [r5, 0xC]
- strh r1, [r5, 0xE]
- ldrb r0, [r5, 0xA]
- cmp r0, 0
- bne _080B6F38
- movs r0, 0x4
- strh r0, [r5, 0x8]
-_080B6F38:
- movs r0, 0x50
- bl PlaySE
-_080B6F3E:
- movs r0, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80B6EE0
-
- thumb_func_start sub_80B6F50
-sub_80B6F50: @ 80B6F50
- push {r4,lr}
- adds r4, r0, 0
- bl sub_80B6FB8
- movs r1, 0xC
- ldrsh r0, [r4, r1]
- cmp r0, 0x3
- ble _080B6F6A
- bl sub_80B7050
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_080B6F6A:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80B6F50
-
- thumb_func_start sub_80B6F74
-sub_80B6F74: @ 80B6F74
- push {lr}
- bl sub_80B6FB8
- bl sub_80B7060
- movs r0, 0
- pop {r1}
- bx r1
- thumb_func_end sub_80B6F74
-
- thumb_func_start sub_80B6F84
-sub_80B6F84: @ 80B6F84
- push {r4,lr}
- adds r4, r0, 0
- bl sub_80B7004
- movs r1, 0xC
- ldrsh r0, [r4, r1]
- cmp r0, 0x3
- ble _080B6F9E
- bl sub_80B7050
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_080B6F9E:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80B6F84
-
- thumb_func_start sub_80B6FA8
-sub_80B6FA8: @ 80B6FA8
- push {lr}
- bl sub_80B7004
- bl sub_80B7060
- movs r0, 0
- pop {r1}
- bx r1
- thumb_func_end sub_80B6FA8
-
- thumb_func_start sub_80B6FB8
-sub_80B6FB8: @ 80B6FB8
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r0, =gPlayerAvatar
- ldrb r0, [r0, 0x4]
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- ldr r0, =gSprites
- adds r4, r0
- movs r0, 0xC
- ldrsh r1, [r5, r0]
- movs r0, 0x84
- bl Cos
- strh r0, [r4, 0x24]
- movs r0, 0xC
- ldrsh r1, [r5, r0]
- movs r0, 0x94
- bl Sin
- strh r0, [r4, 0x26]
- ldrh r0, [r5, 0xE]
- adds r0, 0x1
- strh r0, [r5, 0xE]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080B6FF6
- ldrh r0, [r5, 0xC]
- adds r0, 0x1
- strh r0, [r5, 0xC]
-_080B6FF6:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B6FB8
-
- thumb_func_start sub_80B7004
-sub_80B7004: @ 80B7004
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r0, =gPlayerAvatar
- ldrb r0, [r0, 0x4]
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- ldr r0, =gSprites
- adds r4, r0
- movs r0, 0xC
- ldrsh r1, [r5, r0]
- movs r0, 0x7C
- bl Cos
- strh r0, [r4, 0x24]
- movs r0, 0xC
- ldrsh r1, [r5, r0]
- movs r0, 0x76
- bl Sin
- strh r0, [r4, 0x26]
- ldrh r0, [r5, 0xE]
- adds r0, 0x1
- strh r0, [r5, 0xE]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080B7042
- ldrh r0, [r5, 0xC]
- adds r0, 0x1
- strh r0, [r5, 0xC]
-_080B7042:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B7004
-
- thumb_func_start sub_80B7050
-sub_80B7050: @ 80B7050
- push {lr}
- bl music_something
- bl sub_80AF0B4
- pop {r0}
- bx r0
- thumb_func_end sub_80B7050
-
- thumb_func_start sub_80B7060
-sub_80B7060: @ 80B7060
- push {lr}
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _080B709C
- bl sub_80859A0
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080B709C
- bl sub_80E1570
- bl warp_in
- ldr r1, =gFieldCallback
- ldr r0, =sub_80B70B4
- str r0, [r1]
- ldr r0, =c2_load_new_map
- bl SetMainCallback2
- ldr r0, =sub_80B6E88
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_080B709C:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B7060
-
- thumb_func_start sub_80B70B4
-sub_80B70B4: @ 80B70B4
- push {lr}
- bl Overworld_PlaySpecialMapMusic
- bl pal_fill_for_maplights
- bl ScriptContext2_Enable
- ldr r0, =sub_80B70DC
- movs r1, 0
- bl CreateTask
- ldr r1, =gFieldCallback
- movs r0, 0
- str r0, [r1]
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B70B4
-
- thumb_func_start sub_80B70DC
-sub_80B70DC: @ 80B70DC
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, =gTasks
- adds r4, r1, r0
- ldr r5, =gUnknown_0855C3FC
-_080B70EE:
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- lsls r0, 2
- adds r0, r5
- ldr r1, [r0]
- adds r0, r4, 0
- bl _call_via_r1
- lsls r0, 24
- cmp r0, 0
- bne _080B70EE
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B70DC
-
- thumb_func_start sub_80B7114
-sub_80B7114: @ 80B7114
- push {r4,r5,lr}
- sub sp, 0x4
- adds r5, r0, 0
- bl CameraObjectReset2
- ldr r0, =gPlayerAvatar
- ldrb r0, [r0, 0x5]
- lsls r4, r0, 3
- adds r4, r0
- lsls r4, 2
- ldr r0, =gMapObjects
- adds r4, r0
- movs r0, 0x4
- bl GetFaceDirectionAnimId
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl FieldObjectSetSpecialAnim
- mov r4, sp
- adds r4, 0x2
- mov r0, sp
- adds r1, r4, 0
- bl PlayerGetDestCoords
- mov r0, sp
- movs r1, 0
- ldrsh r0, [r0, r1]
- movs r2, 0
- ldrsh r1, [r4, r2]
- bl MapGridGetMetatileBehaviorAt
- lsls r0, 24
- lsrs r1, r0, 24
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- strh r0, [r5, 0x8]
- movs r0, 0x10
- strh r0, [r5, 0xA]
- cmp r1, 0x6B
- bne _080B717C
- movs r1, 0x1
- movs r0, 0x3
- strh r0, [r5, 0x8]
- b _080B717E
- .pool
-_080B717C:
- movs r1, 0
-_080B717E:
- adds r0, r1, 0
- bl sub_80E1558
- movs r0, 0x1
- add sp, 0x4
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_80B7114
-
- thumb_func_start sub_80B7190
-sub_80B7190: @ 80B7190
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r0, =gPlayerAvatar
- ldrb r0, [r0, 0x4]
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- ldr r0, =gSprites
- adds r4, r0
- movs r0, 0xA
- ldrsh r1, [r5, r0]
- movs r0, 0x84
- bl Cos
- strh r0, [r4, 0x24]
- movs r0, 0xA
- ldrsh r1, [r5, r0]
- movs r0, 0x94
- bl Sin
- strh r0, [r4, 0x26]
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- strh r0, [r5, 0x8]
- movs r0, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80B7190
-
- thumb_func_start sub_80B71D0
-sub_80B71D0: @ 80B71D0
- push {r4,r5,lr}
- adds r4, r0, 0
- ldr r0, =gPlayerAvatar
- ldrb r1, [r0, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, =gSprites
- adds r5, r0, r1
- movs r0, 0xA
- ldrsh r1, [r4, r0]
- movs r0, 0x84
- bl Cos
- strh r0, [r5, 0x24]
- movs r0, 0xA
- ldrsh r1, [r4, r0]
- movs r0, 0x94
- bl Sin
- strh r0, [r5, 0x26]
- ldrh r0, [r4, 0xC]
- adds r0, 0x1
- strh r0, [r4, 0xC]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080B720E
- ldrh r0, [r4, 0xA]
- subs r0, 0x1
- strh r0, [r4, 0xA]
-_080B720E:
- movs r1, 0xA
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _080B721E
- strh r0, [r5, 0x24]
- strh r0, [r5, 0x26]
- movs r0, 0x5
- strh r0, [r4, 0x8]
-_080B721E:
- movs r0, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80B71D0
-
- thumb_func_start sub_80B7230
-sub_80B7230: @ 80B7230
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r0, =gPlayerAvatar
- ldrb r0, [r0, 0x4]
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- ldr r0, =gSprites
- adds r4, r0
- movs r0, 0xA
- ldrsh r1, [r5, r0]
- movs r0, 0x7C
- bl Cos
- strh r0, [r4, 0x24]
- movs r0, 0xA
- ldrsh r1, [r5, r0]
- movs r0, 0x76
- bl Sin
- strh r0, [r4, 0x26]
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- strh r0, [r5, 0x8]
- movs r0, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80B7230
-
- thumb_func_start sub_80B7270
-sub_80B7270: @ 80B7270
- push {r4,r5,lr}
- adds r4, r0, 0
- ldr r0, =gPlayerAvatar
- ldrb r1, [r0, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, =gSprites
- adds r5, r0, r1
- movs r0, 0xA
- ldrsh r1, [r4, r0]
- movs r0, 0x7C
- bl Cos
- strh r0, [r5, 0x24]
- movs r0, 0xA
- ldrsh r1, [r4, r0]
- movs r0, 0x76
- bl Sin
- strh r0, [r5, 0x26]
- ldrh r0, [r4, 0xC]
- adds r0, 0x1
- strh r0, [r4, 0xC]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080B72AE
- ldrh r0, [r4, 0xA]
- subs r0, 0x1
- strh r0, [r4, 0xA]
-_080B72AE:
- movs r1, 0xA
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _080B72C0
- strh r0, [r5, 0x24]
- strh r0, [r5, 0x26]
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_080B72C0:
- movs r0, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80B7270
-
- thumb_func_start sub_80B72D0
-sub_80B72D0: @ 80B72D0
- push {r4,lr}
- adds r4, r0, 0
- bl sub_80E1584
- lsls r0, 24
- cmp r0, 0
- bne _080B72EC
- bl sub_80E1570
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r0, 0x1
- b _080B72EE
-_080B72EC:
- movs r0, 0
-_080B72EE:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80B72D0
-
- thumb_func_start sub_80B72F4
-sub_80B72F4: @ 80B72F4
- push {r4,lr}
- ldr r0, =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, =gMapObjects
- adds r4, r0, r1
- adds r0, r4, 0
- bl FieldObjectClearAnimIfSpecialAnimFinished
- lsls r0, 24
- cmp r0, 0
- beq _080B7338
- bl CameraObjectReset1
- bl ScriptContext2_Disable
- movs r0, 0x4
- bl GetGoSpeed0AnimId
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl FieldObjectSetSpecialAnim
- ldr r0, =sub_80B70DC
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_080B7338:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80B72F4
-
- thumb_func_start oei_waterfall
-oei_waterfall: @ 80B734C
- push {r4,lr}
- ldr r4, =sub_80B7384
- adds r0, r4, 0
- movs r1, 0xFF
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- ldr r2, =gFieldEffectArguments
- ldr r2, [r2]
- strh r2, [r1, 0xA]
- bl _call_via_r4
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end oei_waterfall
-
- thumb_func_start sub_80B7384
-sub_80B7384: @ 80B7384
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r5, =gUnknown_0855C418
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
-_080B7396:
- movs r0, 0x8
- ldrsh r2, [r4, r0]
- lsls r2, 2
- adds r2, r5
- ldr r0, =gPlayerAvatar
- ldrb r0, [r0, 0x5]
- lsls r1, r0, 3
- adds r1, r0
- lsls r1, 2
- ldr r0, =gMapObjects
- adds r1, r0
- ldr r2, [r2]
- adds r0, r4, 0
- bl _call_via_r2
- lsls r0, 24
- cmp r0, 0
- bne _080B7396
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B7384
-
- thumb_func_start sub_80B73D0
-sub_80B73D0: @ 80B73D0
- push {r4,lr}
- adds r4, r0, 0
- bl ScriptContext2_Enable
- ldr r1, =gPlayerAvatar
- movs r0, 0x1
- strb r0, [r1, 0x6]
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80B73D0
-
- thumb_func_start waterfall_1_do_anim_probably
-waterfall_1_do_anim_probably: @ 80B73F0
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- bl ScriptContext2_Enable
- adds r0, r5, 0
- bl FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive
- lsls r0, 24
- cmp r0, 0
- bne _080B7420
- adds r0, r5, 0
- bl FieldObjectClearAnimIfSpecialAnimFinished
- ldr r1, =gFieldEffectArguments
- movs r2, 0xA
- ldrsh r0, [r4, r2]
- str r0, [r1]
- movs r0, 0x3B
- bl FieldEffectStart
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_080B7420:
- movs r0, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- .pool
- thumb_func_end waterfall_1_do_anim_probably
-
- thumb_func_start waterfall_2_wait_anim_finish_probably
-waterfall_2_wait_anim_finish_probably: @ 80B742C
- push {r4,lr}
- adds r4, r0, 0
- movs r0, 0x6
- bl FieldEffectActiveListContains
- lsls r0, 24
- cmp r0, 0
- bne _080B7446
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r0, 0x1
- b _080B7448
-_080B7446:
- movs r0, 0
-_080B7448:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end waterfall_2_wait_anim_finish_probably
-
- thumb_func_start sub_80B7450
-sub_80B7450: @ 80B7450
- push {r4,r5,lr}
- adds r5, r0, 0
- adds r4, r1, 0
- movs r0, 0x2
- bl GetSimpleGoAnimId
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl FieldObjectSetSpecialAnim
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- strh r0, [r5, 0x8]
- movs r0, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_80B7450
-
- thumb_func_start sub_80B7478
-sub_80B7478: @ 80B7478
- push {r4,r5,lr}
- adds r5, r0, 0
- adds r4, r1, 0
- adds r0, r4, 0
- bl FieldObjectClearAnimIfSpecialAnimFinished
- lsls r0, 24
- cmp r0, 0
- bne _080B748E
- movs r0, 0
- b _080B74CA
-_080B748E:
- ldrb r0, [r4, 0x1E]
- bl MetatileBehavior_IsWaterfall
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- bne _080B74C4
- bl ScriptContext2_Disable
- ldr r0, =gPlayerAvatar
- strb r4, [r0, 0x6]
- ldr r0, =sub_80B7384
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
- movs r0, 0x2B
- bl FieldEffectActiveListRemove
- movs r0, 0
- b _080B74CA
- .pool
-_080B74C4:
- movs r0, 0x3
- strh r0, [r5, 0x8]
- movs r0, 0x1
-_080B74CA:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_80B7478
-
- thumb_func_start sub_80B74D0
-sub_80B74D0: @ 80B74D0
- push {r4,lr}
- ldr r4, =sub_80B750C
- adds r0, r4, 0
- movs r1, 0xFF
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- ldr r3, =gFieldEffectArguments
- ldr r2, [r3]
- strh r2, [r1, 0x26]
- ldr r2, [r3, 0x4]
- strh r2, [r1, 0x24]
- bl _call_via_r4
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80B74D0
-
- thumb_func_start sub_80B750C
-sub_80B750C: @ 80B750C
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r5, =gUnknown_0855C42C
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
-_080B751E:
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- lsls r0, 2
- adds r0, r5
- ldr r1, [r0]
- adds r0, r4, 0
- bl _call_via_r1
- lsls r0, 24
- cmp r0, 0
- bne _080B751E
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B750C
-
- thumb_func_start dive_1_lock
-dive_1_lock: @ 80B7544
- ldr r2, =gPlayerAvatar
- movs r1, 0x1
- strb r1, [r2, 0x6]
- ldrh r1, [r0, 0x8]
- adds r1, 0x1
- strh r1, [r0, 0x8]
- movs r0, 0
- bx lr
- .pool
- thumb_func_end dive_1_lock
-
- thumb_func_start dive_2_unknown
-dive_2_unknown: @ 80B7558
- push {r4,lr}
- adds r4, r0, 0
- bl ScriptContext2_Enable
- ldr r1, =gFieldEffectArguments
- movs r2, 0x26
- ldrsh r0, [r4, r2]
- str r0, [r1]
- movs r0, 0x3B
- bl FieldEffectStart
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end dive_2_unknown
-
- thumb_func_start dive_3_unknown
-dive_3_unknown: @ 80B7580
- push {lr}
- sub sp, 0x8
- mov r1, sp
- adds r1, 0x2
- mov r0, sp
- bl PlayerGetDestCoords
- movs r0, 0x6
- bl FieldEffectActiveListContains
- lsls r0, 24
- cmp r0, 0
- bne _080B75C4
- ldr r2, =gMapObjects
- ldr r0, =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x1E]
- mov r0, sp
- bl dive_warp
- ldr r0, =sub_80B750C
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
- movs r0, 0x2C
- bl FieldEffectActiveListRemove
-_080B75C4:
- movs r0, 0
- add sp, 0x8
- pop {r1}
- bx r1
- .pool
- thumb_func_end dive_3_unknown
-
- thumb_func_start sub_80B75D8
-sub_80B75D8: @ 80B75D8
- push {lr}
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldr r0, =sub_80B75F0
- bl CreateTask
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B75D8
-
- thumb_func_start sub_80B75F0
-sub_80B75F0: @ 80B75F0
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r6, =gUnknown_0855C438
- ldr r2, =gTasks
- ldr r5, =gPlayerAvatar
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
-_080B7604:
- movs r0, 0x8
- ldrsh r3, [r4, r0]
- lsls r3, 2
- adds r3, r6
- ldrb r0, [r5, 0x5]
- lsls r1, r0, 3
- adds r1, r0
- lsls r1, 2
- ldr r0, =gMapObjects
- adds r1, r0
- ldrb r0, [r5, 0x4]
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- ldr r0, =gSprites
- adds r2, r0
- ldr r3, [r3]
- adds r0, r4, 0
- bl _call_via_r3
- lsls r0, 24
- cmp r0, 0
- bne _080B7604
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B75F0
-
- thumb_func_start sub_80B764C
-sub_80B764C: @ 80B764C
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- bl FreezeMapObjects
- bl CameraObjectReset2
- movs r0, 0
- bl SetCameraPanningCallback
- ldr r0, =gPlayerAvatar
- movs r2, 0x1
- strb r2, [r0, 0x6]
- ldrb r0, [r5, 0x3]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r5, 0x3]
- strh r2, [r4, 0xA]
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r0, 0x1
- pop {r4,r5}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80B764C
-
- thumb_func_start sub_80B7684
-sub_80B7684: @ 80B7684
- push {r4,lr}
- adds r4, r0, 0
- movs r0, 0xA
- ldrsh r1, [r4, r0]
- movs r0, 0
- bl SetCameraPanning
- ldrh r0, [r4, 0xA]
- negs r0, r0
- strh r0, [r4, 0xA]
- ldrh r0, [r4, 0xC]
- adds r0, 0x1
- strh r0, [r4, 0xC]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x7
- ble _080B76B0
- movs r0, 0
- strh r0, [r4, 0xC]
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_080B76B0:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80B7684
-
- thumb_func_start sub_80B76B8
-sub_80B76B8: @ 80B76B8
- push {r4,r5,lr}
- adds r4, r0, 0
- movs r0, 0
- strh r0, [r2, 0x26]
- movs r0, 0x1
- strh r0, [r4, 0xE]
- ldr r3, =gFieldEffectArguments
- movs r5, 0x10
- ldrsh r0, [r1, r5]
- str r0, [r3]
- movs r5, 0x12
- ldrsh r0, [r1, r5]
- str r0, [r3, 0x4]
- adds r0, r2, 0
- adds r0, 0x43
- ldrb r0, [r0]
- subs r0, 0x1
- str r0, [r3, 0x8]
- ldrb r0, [r2, 0x5]
- lsls r0, 28
- lsrs r0, 30
- str r0, [r3, 0xC]
- movs r0, 0x32
- bl FieldEffectStart
- movs r0, 0xB2
- bl PlaySE
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r0, 0x1
- pop {r4,r5}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80B76B8
-
- thumb_func_start sub_80B7704
-sub_80B7704: @ 80B7704
- push {r4-r7,lr}
- adds r4, r0, 0
- adds r6, r1, 0
- adds r5, r2, 0
- movs r0, 0xA
- ldrsh r1, [r4, r0]
- movs r0, 0
- bl SetCameraPanning
- ldrh r0, [r4, 0xA]
- negs r2, r0
- strh r2, [r4, 0xA]
- ldrh r0, [r4, 0xC]
- adds r1, r0, 0x1
- strh r1, [r4, 0xC]
- lsls r0, r1, 16
- asrs r0, 16
- cmp r0, 0x11
- bgt _080B773E
- movs r0, 0x1
- ands r1, r0
- cmp r1, 0
- bne _080B7750
- lsls r0, r2, 16
- asrs r0, 16
- cmp r0, 0x3
- bgt _080B7750
- lsls r0, r2, 1
- b _080B774E
-_080B773E:
- movs r0, 0x4
- ands r1, r0
- cmp r1, 0
- bne _080B7750
- lsls r0, r2, 16
- cmp r0, 0
- ble _080B7750
- asrs r0, 17
-_080B774E:
- strh r0, [r4, 0xA]
-_080B7750:
- movs r1, 0xC
- ldrsh r0, [r4, r1]
- cmp r0, 0x6
- ble _080B779C
- adds r0, r5, 0
- adds r0, 0x29
- movs r1, 0
- ldrsb r1, [r0, r1]
- lsls r2, r1, 17
- negs r2, r2
- movs r7, 0x26
- ldrsh r3, [r5, r7]
- movs r7, 0x22
- ldrsh r0, [r5, r7]
- adds r0, r1
- ldr r1, =gSpriteCoordOffsetY
- movs r7, 0
- ldrsh r1, [r1, r7]
- adds r0, r1
- asrs r2, 16
- adds r0, r2
- cmn r3, r0
- ble _080B7798
- ldrh r0, [r5, 0x26]
- ldrh r1, [r4, 0xE]
- subs r0, r1
- strh r0, [r5, 0x26]
- lsls r0, r1, 16
- asrs r0, 16
- cmp r0, 0x7
- bgt _080B779C
- adds r0, r1, 0x1
- strh r0, [r4, 0xE]
- b _080B779C
- .pool
-_080B7798:
- movs r0, 0x1
- strh r0, [r4, 0x10]
-_080B779C:
- ldrh r2, [r4, 0x12]
- movs r1, 0x12
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _080B77DA
- movs r7, 0x26
- ldrsh r1, [r5, r7]
- movs r0, 0x10
- negs r0, r0
- cmp r1, r0
- bge _080B77DA
- adds r0, r2, 0x1
- strh r0, [r4, 0x12]
- ldrb r0, [r6, 0x3]
- movs r2, 0x4
- orrs r0, r2
- strb r0, [r6, 0x3]
- ldrb r1, [r5, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r1
- orrs r0, r2
- strb r0, [r5, 0x5]
- adds r2, r5, 0
- adds r2, 0x42
- ldrb r1, [r2]
- movs r0, 0x3F
- ands r0, r1
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r2]
-_080B77DA:
- movs r1, 0xA
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _080B77F0
- movs r7, 0x10
- ldrsh r0, [r4, r7]
- cmp r0, 0
- beq _080B77F0
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_080B77F0:
- movs r0, 0
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_80B7704
-
- thumb_func_start sub_80B77F8
-sub_80B77F8: @ 80B77F8
- push {r4,lr}
- adds r4, r0, 0
- bl music_something
- bl sub_80AF0B4
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80B77F8
-
- thumb_func_start sub_80B7814
-sub_80B7814: @ 80B7814
- push {lr}
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _080B784C
- bl sub_80859A0
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080B784C
- bl warp_in
- ldr r1, =gFieldCallback
- ldr r0, =mapldr_080851BC
- str r0, [r1]
- ldr r0, =c2_load_new_map
- bl SetMainCallback2
- ldr r0, =sub_80B75F0
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_080B784C:
- movs r0, 0
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80B7814
-
- thumb_func_start mapldr_080851BC
-mapldr_080851BC: @ 80B7868
- push {lr}
- bl Overworld_PlaySpecialMapMusic
- bl pal_fill_for_maplights
- bl ScriptContext2_Enable
- ldr r0, =gFieldCallback
- movs r1, 0
- str r1, [r0]
- ldr r0, =sub_80B7890
- bl CreateTask
- pop {r0}
- bx r0
- .pool
- thumb_func_end mapldr_080851BC
-
- thumb_func_start sub_80B7890
-sub_80B7890: @ 80B7890
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r6, =gUnknown_0855C450
- ldr r2, =gTasks
- ldr r5, =gPlayerAvatar
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
-_080B78A4:
- movs r0, 0x8
- ldrsh r3, [r4, r0]
- lsls r3, 2
- adds r3, r6
- ldrb r0, [r5, 0x5]
- lsls r1, r0, 3
- adds r1, r0
- lsls r1, 2
- ldr r0, =gMapObjects
- adds r1, r0
- ldrb r0, [r5, 0x4]
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- ldr r0, =gSprites
- adds r2, r0
- ldr r3, [r3]
- adds r0, r4, 0
- bl _call_via_r3
- lsls r0, 24
- cmp r0, 0
- bne _080B78A4
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B7890
-
- thumb_func_start sub_80B78EC
-sub_80B78EC: @ 80B78EC
- push {r4,r5,lr}
- adds r5, r0, 0
- adds r4, r1, 0
- bl CameraObjectReset2
- bl FreezeMapObjects
- ldr r1, =gPlayerAvatar
- movs r0, 0x1
- strb r0, [r1, 0x6]
- ldrb r0, [r4, 0x1]
- movs r1, 0x20
- orrs r0, r1
- strb r0, [r4, 0x1]
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- strh r0, [r5, 0x8]
- movs r0, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80B78EC
-
- thumb_func_start sub_80B791C
-sub_80B791C: @ 80B791C
- push {r4-r6,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- adds r6, r2, 0
- bl sub_80ABDFC
- lsls r0, 24
- cmp r0, 0
- beq _080B795C
- ldr r1, =gFieldEffectArguments
- movs r2, 0x10
- ldrsh r0, [r5, r2]
- str r0, [r1]
- movs r2, 0x12
- ldrsh r0, [r5, r2]
- str r0, [r1, 0x4]
- adds r0, r6, 0
- adds r0, 0x43
- ldrb r0, [r0]
- subs r0, 0x1
- str r0, [r1, 0x8]
- ldrb r0, [r6, 0x5]
- lsls r0, 28
- lsrs r0, 30
- str r0, [r1, 0xC]
- movs r0, 0x31
- bl FieldEffectStart
- strh r0, [r4, 0xA]
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_080B795C:
- movs r0, 0
- pop {r4-r6}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80B791C
-
- thumb_func_start sub_80B7968
-sub_80B7968: @ 80B7968
- push {r4,lr}
- adds r2, r0, 0
- adds r4, r1, 0
- movs r0, 0xA
- ldrsh r1, [r2, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, =gSprites
- adds r0, r1
- adds r0, 0x2B
- ldrb r0, [r0]
- cmp r0, 0x1
- bls _080B79B0
- ldrh r0, [r2, 0x8]
- adds r0, 0x1
- strh r0, [r2, 0x8]
- ldrb r1, [r4, 0x1]
- movs r0, 0x21
- negs r0, r0
- ands r0, r1
- strb r0, [r4, 0x1]
- bl CameraObjectReset1
- movs r0, 0xAF
- bl PlaySE
- movs r0, 0x4
- bl sub_8093514
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl FieldObjectSetSpecialAnim
-_080B79B0:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80B7968
-
- thumb_func_start sub_80B79BC
-sub_80B79BC: @ 80B79BC
- push {lr}
- adds r0, r1, 0
- bl FieldObjectClearAnimIfSpecialAnimFinished
- lsls r0, 24
- cmp r0, 0
- beq _080B79E6
- ldr r1, =gPlayerAvatar
- movs r0, 0
- strb r0, [r1, 0x6]
- bl ScriptContext2_Disable
- bl UnfreezeMapObjects
- ldr r0, =sub_80B7890
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_080B79E6:
- movs r0, 0
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80B79BC
-
- thumb_func_start sub_80B79F4
-sub_80B79F4: @ 80B79F4
- push {r4,lr}
- ldr r4, =gFieldEffectArguments
- adds r1, r4, 0x4
- adds r0, r4, 0
- movs r2, 0x8
- movs r3, 0x8
- bl sub_80930E0
- ldr r0, =gFieldEffectObjectTemplatePointers
- adds r0, 0x84
- ldr r0, [r0]
- movs r2, 0
- ldrsh r1, [r4, r2]
- movs r3, 0x4
- ldrsh r2, [r4, r3]
- ldrb r3, [r4, 0x8]
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r0, 24
- ldr r1, =gSprites
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r1
- movs r1, 0x3
- ldrb r3, [r4, 0xC]
- ands r3, r1
- lsls r3, 2
- ldrb r4, [r2, 0x5]
- movs r1, 0xD
- negs r1, r1
- ands r1, r4
- orrs r1, r3
- strb r1, [r2, 0x5]
- adds r2, 0x3E
- ldrb r1, [r2]
- movs r3, 0x2
- orrs r1, r3
- strb r1, [r2]
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80B79F4
-
- thumb_func_start sub_80B7A58
-sub_80B7A58: @ 80B7A58
- push {lr}
- adds r2, r0, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _080B7A70
- adds r0, r2, 0
- movs r1, 0x32
- bl FieldEffectStop
-_080B7A70:
- pop {r0}
- bx r0
- thumb_func_end sub_80B7A58
-
- thumb_func_start sub_80B7A74
-sub_80B7A74: @ 80B7A74
- push {lr}
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldr r0, =sub_80B7A8C
- bl CreateTask
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B7A74
-
- thumb_func_start sub_80B7A8C
-sub_80B7A8C: @ 80B7A8C
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r6, =gUnknown_0855C460
- ldr r2, =gTasks
- ldr r5, =gPlayerAvatar
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
-_080B7AA0:
- movs r0, 0x8
- ldrsh r3, [r4, r0]
- lsls r3, 2
- adds r3, r6
- ldrb r0, [r5, 0x5]
- lsls r1, r0, 3
- adds r1, r0
- lsls r1, 2
- ldr r0, =gMapObjects
- adds r1, r0
- ldrb r0, [r5, 0x4]
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- ldr r0, =gSprites
- adds r2, r0
- ldr r3, [r3]
- adds r0, r4, 0
- bl _call_via_r3
- lsls r0, 24
- cmp r0, 0
- bne _080B7AA0
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B7A8C
-
- thumb_func_start sub_80B7AE8
-sub_80B7AE8: @ 80B7AE8
- push {r4,r5,lr}
- adds r5, r0, 0
- adds r4, r1, 0
- bl FreezeMapObjects
- bl CameraObjectReset2
- ldr r1, =gPlayerAvatar
- movs r0, 0x1
- strb r0, [r1, 0x6]
- ldrb r0, [r4, 0x3]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r4, 0x3]
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- strh r0, [r5, 0x8]
- movs r0, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80B7AE8
-
- thumb_func_start sub_80B7B18
-sub_80B7B18: @ 80B7B18
- push {r4-r6,lr}
- adds r5, r0, 0
- adds r4, r1, 0
- adds r6, r2, 0
- adds r0, r4, 0
- bl FieldObjectClearAnimIfSpecialAnimFinished
- lsls r0, 24
- cmp r0, 0
- beq _080B7B8C
- ldrh r1, [r5, 0xA]
- movs r2, 0xA
- ldrsh r0, [r5, r2]
- cmp r0, 0x3
- ble _080B7B6C
- ldr r1, =gFieldEffectArguments
- movs r2, 0x10
- ldrsh r0, [r4, r2]
- str r0, [r1]
- movs r2, 0x12
- ldrsh r0, [r4, r2]
- str r0, [r1, 0x4]
- adds r0, r6, 0
- adds r0, 0x43
- ldrb r0, [r0]
- subs r0, 0x1
- str r0, [r1, 0x8]
- ldrb r0, [r6, 0x5]
- lsls r0, 28
- lsrs r0, 30
- str r0, [r1, 0xC]
- movs r0, 0x31
- bl FieldEffectStart
- strh r0, [r5, 0xA]
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- strh r0, [r5, 0x8]
- b _080B7B8C
- .pool
-_080B7B6C:
- adds r0, r1, 0x1
- strh r0, [r5, 0xA]
- ldrb r0, [r4, 0x18]
- lsls r0, 28
- lsrs r0, 28
- bl GetStepInPlaceDelay4AnimId
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl FieldObjectSetSpecialAnim
- movs r0, 0x27
- bl PlaySE
-_080B7B8C:
- movs r0, 0
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_80B7B18
-
- thumb_func_start sub_80B7B94
-sub_80B7B94: @ 80B7B94
- push {r4,lr}
- adds r3, r0, 0
- adds r4, r1, 0
- ldr r2, =gSprites
- movs r0, 0xA
- ldrsh r1, [r3, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- adds r0, 0x2B
- ldrb r0, [r0]
- cmp r0, 0x2
- bne _080B7BBE
- ldrb r0, [r4, 0x1]
- movs r1, 0x20
- orrs r0, r1
- strb r0, [r4, 0x1]
- ldrh r0, [r3, 0x8]
- adds r0, 0x1
- strh r0, [r3, 0x8]
-_080B7BBE:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80B7B94
-
- thumb_func_start sub_80B7BCC
-sub_80B7BCC: @ 80B7BCC
- push {r4,lr}
- adds r4, r0, 0
- movs r0, 0x31
- bl FieldEffectActiveListContains
- lsls r0, 24
- cmp r0, 0
- bne _080B7BEA
- bl music_something
- bl sub_80AF0B4
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_080B7BEA:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80B7BCC
-
- thumb_func_start sub_80B7BF4
-sub_80B7BF4: @ 80B7BF4
- push {lr}
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _080B7C2C
- bl sub_80859A0
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080B7C2C
- bl warp_in
- ldr r1, =gFieldCallback
- ldr r0, =sub_80B6B68
- str r0, [r1]
- ldr r0, =c2_load_new_map
- bl SetMainCallback2
- ldr r0, =sub_80B7A8C
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_080B7C2C:
- movs r0, 0
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80B7BF4
-
- thumb_func_start sub_80B7C48
-sub_80B7C48: @ 80B7C48
- push {r4,lr}
- ldr r4, =gFieldEffectArguments
- adds r1, r4, 0x4
- adds r0, r4, 0
- movs r2, 0x8
- movs r3, 0x8
- bl sub_80930E0
- ldr r0, =gFieldEffectObjectTemplatePointers
- adds r0, 0x80
- ldr r0, [r0]
- movs r2, 0
- ldrsh r1, [r4, r2]
- movs r3, 0x4
- ldrsh r2, [r4, r3]
- ldrb r3, [r4, 0x8]
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r0, 24
- ldr r1, =gSprites
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r1
- movs r1, 0x3
- ldrb r3, [r4, 0xC]
- ands r3, r1
- lsls r3, 2
- ldrb r4, [r2, 0x5]
- movs r1, 0xD
- negs r1, r1
- ands r1, r4
- orrs r1, r3
- strb r1, [r2, 0x5]
- adds r2, 0x3E
- ldrb r1, [r2]
- movs r3, 0x2
- orrs r1, r3
- strb r1, [r2]
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80B7C48
-
- thumb_func_start sub_80B7CAC
-sub_80B7CAC: @ 80B7CAC
- push {lr}
- adds r2, r0, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _080B7CC4
- adds r0, r2, 0
- movs r1, 0x31
- bl FieldEffectStop
-_080B7CC4:
- pop {r0}
- bx r0
- thumb_func_end sub_80B7CAC
-
- thumb_func_start sub_80B7CC8
-sub_80B7CC8: @ 80B7CC8
- push {lr}
- bl ScriptContext2_Enable
- bl FreezeMapObjects
- ldr r0, =sub_80B7CE4
- movs r1, 0x50
- bl CreateTask
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B7CC8
-
- thumb_func_start sub_80B7CE4
-sub_80B7CE4: @ 80B7CE4
- push {lr}
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldr r3, =gUnknown_0855C474
- ldr r2, =gTasks
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- movs r2, 0x8
- ldrsh r1, [r0, r2]
- lsls r1, 2
- adds r1, r3
- ldr r1, [r1]
- bl _call_via_r1
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B7CE4
-
- thumb_func_start sub_80B7D14
-sub_80B7D14: @ 80B7D14
- push {r4,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r0, 0x40
- strh r0, [r4, 0x24]
- bl player_get_direction_lower_nybble
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x26]
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80B7D14
-
- thumb_func_start sub_80B7D34
-sub_80B7D34: @ 80B7D34
- push {r4,r5,lr}
- sub sp, 0x8
- adds r4, r0, 0
- ldr r1, =gUnknown_0855C47C
- mov r0, sp
- movs r2, 0x5
- bl memcpy
- ldrh r1, [r4, 0x24]
- movs r2, 0x24
- ldrsh r0, [r4, r2]
- cmp r0, 0
- beq _080B7D60
- subs r0, r1, 0x1
- strh r0, [r4, 0x24]
- lsls r0, 16
- cmp r0, 0
- bne _080B7D60
- bl music_something
- bl sub_80AF0B4
-_080B7D60:
- ldr r0, =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, =gMapObjects
- adds r5, r0, r1
- adds r0, r5, 0
- bl FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive
- lsls r0, 24
- cmp r0, 0
- beq _080B7D86
- adds r0, r5, 0
- bl FieldObjectClearAnimIfSpecialAnimFinished
- lsls r0, 24
- cmp r0, 0
- beq _080B7E40
-_080B7D86:
- movs r1, 0x24
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _080B7DF8
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _080B7DF8
- bl sub_80859A0
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080B7DF8
- ldrh r1, [r4, 0x26]
- lsls r1, 24
- lsrs r1, 24
- adds r0, r5, 0
- bl FieldObjectSetDirection
- bl sub_8084E14
- bl warp_in
- ldr r1, =gFieldCallback
- ldr r0, =mapldr_080859D4
- str r0, [r1]
- ldr r0, =c2_load_new_map
- bl SetMainCallback2
- ldr r0, =sub_80B7CE4
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
- b _080B7E40
- .pool
-_080B7DF8:
- ldrh r1, [r4, 0xA]
- movs r2, 0xA
- ldrsh r0, [r4, r2]
- cmp r0, 0
- beq _080B7E0C
- subs r0, r1, 0x1
- strh r0, [r4, 0xA]
- lsls r0, 16
- cmp r0, 0
- bne _080B7E40
-_080B7E0C:
- ldrb r0, [r5, 0x18]
- lsls r0, 28
- lsrs r0, 28
- add r0, sp
- ldrb r0, [r0]
- bl GetFaceDirectionAnimId
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r5, 0
- bl FieldObjectSetSpecialAnim
- ldrh r1, [r4, 0xC]
- movs r2, 0xC
- ldrsh r0, [r4, r2]
- cmp r0, 0xB
- bgt _080B7E34
- adds r0, r1, 0x1
- strh r0, [r4, 0xC]
-_080B7E34:
- ldrh r1, [r4, 0xC]
- lsls r1, 16
- asrs r1, 18
- movs r0, 0x8
- asrs r0, r1
- strh r0, [r4, 0xA]
-_080B7E40:
- add sp, 0x8
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_80B7D34
-
- thumb_func_start mapldr_080859D4
-mapldr_080859D4: @ 80B7E48
- push {lr}
- bl Overworld_PlaySpecialMapMusic
- bl pal_fill_for_maplights
- bl ScriptContext2_Enable
- bl FreezeMapObjects
- ldr r1, =gFieldCallback
- movs r0, 0
- str r0, [r1]
- ldr r2, =gMapObjects
- ldr r0, =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x1]
- movs r2, 0x20
- orrs r1, r2
- strb r1, [r0, 0x1]
- ldr r0, =sub_80B7E94
- movs r1, 0
- bl CreateTask
- pop {r0}
- bx r0
- .pool
- thumb_func_end mapldr_080859D4
-
- thumb_func_start sub_80B7E94
-sub_80B7E94: @ 80B7E94
- push {lr}
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldr r3, =gUnknown_0855C484
- ldr r2, =gTasks
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- movs r2, 0x8
- ldrsh r1, [r0, r2]
- lsls r1, 2
- adds r1, r3
- ldr r1, [r1]
- bl _call_via_r1
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B7E94
-
- thumb_func_start sub_80B7EC4
-sub_80B7EC4: @ 80B7EC4
- push {r4,lr}
- adds r4, r0, 0
- bl sub_80ABDFC
- lsls r0, 24
- cmp r0, 0
- beq _080B7EE2
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- bl player_get_direction_lower_nybble
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x26]
-_080B7EE2:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80B7EC4
-
- thumb_func_start sub_80B7EE8
-sub_80B7EE8: @ 80B7EE8
- push {r4-r6,lr}
- sub sp, 0x8
- adds r5, r0, 0
- ldr r1, =gUnknown_0855C47C
- mov r0, sp
- movs r2, 0x5
- bl memcpy
- ldr r0, =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, =gMapObjects
- adds r6, r0, r1
- ldrh r1, [r5, 0xA]
- movs r2, 0xA
- ldrsh r0, [r5, r2]
- cmp r0, 0
- beq _080B7F1A
- subs r0, r1, 0x1
- strh r0, [r5, 0xA]
- lsls r0, 16
- cmp r0, 0
- bne _080B7FAC
-_080B7F1A:
- adds r0, r6, 0
- bl FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive
- lsls r0, 24
- cmp r0, 0
- beq _080B7F32
- adds r0, r6, 0
- bl FieldObjectClearAnimIfSpecialAnimFinished
- lsls r0, 24
- cmp r0, 0
- beq _080B7FC0
-_080B7F32:
- movs r1, 0xC
- ldrsh r0, [r5, r1]
- cmp r0, 0x1F
- ble _080B7F7C
- movs r2, 0x26
- ldrsh r4, [r5, r2]
- bl player_get_direction_lower_nybble
- lsls r0, 24
- lsrs r0, 24
- cmp r4, r0
- bne _080B7F7C
- ldrb r1, [r6, 0x1]
- movs r0, 0x21
- negs r0, r0
- ands r0, r1
- strb r0, [r6, 0x1]
- bl ScriptContext2_Disable
- bl UnfreezeMapObjects
- ldr r0, =sub_80B7E94
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
- b _080B7FC0
- .pool
-_080B7F7C:
- ldrb r0, [r6, 0x18]
- lsls r0, 28
- lsrs r0, 28
- add r0, sp
- ldrb r0, [r0]
- bl GetFaceDirectionAnimId
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r6, 0
- bl FieldObjectSetSpecialAnim
- ldrh r1, [r5, 0xC]
- movs r2, 0xC
- ldrsh r0, [r5, r2]
- cmp r0, 0x1F
- bgt _080B7FA4
- adds r0, r1, 0x1
- strh r0, [r5, 0xC]
-_080B7FA4:
- ldrh r0, [r5, 0xC]
- lsls r0, 16
- asrs r0, 18
- strh r0, [r5, 0xA]
-_080B7FAC:
- ldrb r2, [r6, 0x1]
- lsls r1, r2, 26
- lsrs r1, 31
- movs r0, 0x1
- eors r1, r0
- lsls r1, 5
- subs r0, 0x22
- ands r0, r2
- orrs r0, r1
- strb r0, [r6, 0x1]
-_080B7FC0:
- add sp, 0x8
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_80B7EE8
-
- thumb_func_start sub_80B7FC8
-sub_80B7FC8: @ 80B7FC8
- push {lr}
- ldr r0, =sub_80B7FDC
- movs r1, 0
- bl CreateTask
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B7FC8
-
- thumb_func_start sub_80B7FDC
-sub_80B7FDC: @ 80B7FDC
- push {lr}
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldr r3, =gUnknown_0855C48C
- ldr r2, =gTasks
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- movs r2, 0x8
- ldrsh r1, [r0, r2]
- lsls r1, 2
- adds r1, r3
- ldr r1, [r1]
- bl _call_via_r1
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B7FDC
-
- thumb_func_start sub_80B800C
-sub_80B800C: @ 80B800C
- push {r4,lr}
- adds r4, r0, 0
- bl ScriptContext2_Enable
- bl FreezeMapObjects
- bl CameraObjectReset2
- bl player_get_direction_lower_nybble
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x26]
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80B800C
-
- thumb_func_start sub_80B8034
-sub_80B8034: @ 80B8034
- push {r4,r5,lr}
- sub sp, 0x8
- adds r4, r0, 0
- ldr r1, =gUnknown_0855C47C
- mov r0, sp
- movs r2, 0x5
- bl memcpy
- ldr r0, =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, =gMapObjects
- adds r5, r0, r1
- ldrh r1, [r4, 0xA]
- movs r2, 0xA
- ldrsh r0, [r4, r2]
- cmp r0, 0
- beq _080B8066
- subs r0, r1, 0x1
- strh r0, [r4, 0xA]
- lsls r0, 16
- cmp r0, 0
- bne _080B8080
-_080B8066:
- ldrb r0, [r5, 0x18]
- lsls r0, 28
- lsrs r0, 28
- add r0, sp
- ldrb r1, [r0]
- adds r0, r5, 0
- bl FieldObjectTurn
- movs r0, 0x8
- strh r0, [r4, 0xA]
- ldrh r0, [r4, 0xC]
- adds r0, 0x1
- strh r0, [r4, 0xC]
-_080B8080:
- movs r1, 0xC
- ldrsh r0, [r4, r1]
- cmp r0, 0x7
- ble _080B80AE
- movs r2, 0x26
- ldrsh r1, [r4, r2]
- ldrb r0, [r5, 0x18]
- lsls r0, 28
- lsrs r0, 28
- cmp r1, r0
- bne _080B80AE
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r0, 0x4
- strh r0, [r4, 0xA]
- movs r0, 0x8
- strh r0, [r4, 0xC]
- movs r0, 0x1
- strh r0, [r4, 0xE]
- movs r0, 0x2D
- bl PlaySE
-_080B80AE:
- add sp, 0x8
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B8034
-
- thumb_func_start sub_80B80C4
-sub_80B80C4: @ 80B80C4
- push {r4,r5,lr}
- sub sp, 0x8
- adds r4, r0, 0
- ldr r1, =gUnknown_0855C47C
- mov r0, sp
- movs r2, 0x5
- bl memcpy
- ldr r2, =gPlayerAvatar
- ldrb r1, [r2, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, =gMapObjects
- adds r3, r0, r1
- ldrb r1, [r2, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, =gSprites
- adds r5, r0, r1
- ldrh r0, [r4, 0xA]
- subs r0, 0x1
- strh r0, [r4, 0xA]
- lsls r0, 16
- cmp r0, 0
- bgt _080B810E
- movs r0, 0x4
- strh r0, [r4, 0xA]
- ldrb r0, [r3, 0x18]
- lsls r0, 28
- lsrs r0, 28
- add r0, sp
- ldrb r1, [r0]
- adds r0, r3, 0
- bl FieldObjectTurn
-_080B810E:
- ldrh r0, [r5, 0x22]
- ldrh r1, [r4, 0xE]
- subs r0, r1
- strh r0, [r5, 0x22]
- ldrh r1, [r4, 0xE]
- ldrh r2, [r4, 0x10]
- adds r0, r1, r2
- strh r0, [r4, 0x10]
- ldrh r0, [r4, 0xC]
- subs r0, 0x1
- strh r0, [r4, 0xC]
- lsls r0, 16
- cmp r0, 0
- bgt _080B813A
- movs r0, 0x4
- strh r0, [r4, 0xC]
- lsls r0, r1, 16
- asrs r0, 16
- cmp r0, 0x7
- bgt _080B813A
- lsls r0, r1, 1
- strh r0, [r4, 0xE]
-_080B813A:
- movs r1, 0x10
- ldrsh r0, [r4, r1]
- cmp r0, 0x8
- ble _080B8168
- ldrb r1, [r5, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r1
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r5, 0x5]
- adds r2, r5, 0
- adds r2, 0x42
- ldrb r1, [r2]
- movs r0, 0xC0
- ands r0, r1
- cmp r0, 0
- beq _080B8168
- movs r0, 0x3F
- ands r0, r1
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r2]
-_080B8168:
- movs r2, 0x10
- ldrsh r0, [r4, r2]
- cmp r0, 0xA7
- ble _080B817E
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- bl music_something
- bl sub_80AF0B4
-_080B817E:
- add sp, 0x8
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B80C4
-
- thumb_func_start sub_80B8198
-sub_80B8198: @ 80B8198
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _080B81E6
- movs r1, 0x12
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _080B81B8
- bl sub_81BE72C
- movs r0, 0x1
- strh r0, [r4, 0x12]
-_080B81B8:
- bl sub_80859A0
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080B81E6
- bl copy_saved_warp3_bank_and_enter_x_to_warp1
- bl warp_in
- ldr r0, =c2_load_new_map
- bl SetMainCallback2
- ldr r1, =gFieldCallback
- ldr r0, =mapldr_08085D88
- str r0, [r1]
- ldr r0, =sub_80B7FDC
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_080B81E6:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B8198
-
- thumb_func_start mapldr_08085D88
-mapldr_08085D88: @ 80B8200
- push {lr}
- bl Overworld_PlaySpecialMapMusic
- bl pal_fill_for_maplights
- bl ScriptContext2_Enable
- bl FreezeMapObjects
- ldr r1, =gFieldCallback
- movs r0, 0
- str r0, [r1]
- ldr r2, =gMapObjects
- ldr r0, =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x1]
- movs r2, 0x20
- orrs r1, r2
- strb r1, [r0, 0x1]
- bl CameraObjectReset2
- ldr r0, =sub_80B8250
- movs r1, 0
- bl CreateTask
- pop {r0}
- bx r0
- .pool
- thumb_func_end mapldr_08085D88
-
- thumb_func_start sub_80B8250
-sub_80B8250: @ 80B8250
- push {lr}
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldr r3, =gUnknown_0855C49C
- ldr r2, =gTasks
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- movs r2, 0x8
- ldrsh r1, [r0, r2]
- lsls r1, 2
- adds r1, r3
- ldr r1, [r1]
- bl _call_via_r1
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B8250
-
- thumb_func_start sub_80B8280
-sub_80B8280: @ 80B8280
- push {r4-r6,lr}
- adds r6, r0, 0
- bl sub_80ABDFC
- lsls r0, 24
- cmp r0, 0
- beq _080B82F6
- ldr r5, =gPlayerAvatar
- ldrb r0, [r5, 0x4]
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- ldr r0, =gSprites
- adds r2, r0
- adds r0, r2, 0
- adds r0, 0x29
- movs r4, 0
- ldrsb r4, [r0, r4]
- lsls r0, r4, 17
- negs r0, r0
- ldrh r1, [r2, 0x22]
- ldr r3, =gSpriteCoordOffsetY
- adds r1, r4
- ldrh r3, [r3]
- adds r1, r3
- asrs r0, 16
- adds r0, r1
- negs r0, r0
- strh r0, [r2, 0x26]
- ldr r3, =gMapObjects
- ldrb r0, [r5, 0x5]
- lsls r1, r0, 3
- adds r1, r0
- lsls r1, 2
- adds r1, r3
- ldrb r3, [r1, 0x1]
- movs r0, 0x21
- negs r0, r0
- ands r0, r3
- strb r0, [r1, 0x1]
- ldrh r0, [r6, 0x8]
- adds r0, 0x1
- strh r0, [r6, 0x8]
- movs r0, 0x8
- strh r0, [r6, 0xA]
- movs r0, 0x1
- strh r0, [r6, 0xC]
- adds r2, 0x42
- ldrb r0, [r2]
- lsrs r0, 6
- strh r0, [r6, 0x24]
- bl player_get_direction_lower_nybble
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r6, 0x26]
- movs r0, 0x2D
- bl PlaySE
-_080B82F6:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B8280
-
- thumb_func_start sub_80B830C
-sub_80B830C: @ 80B830C
- push {r4-r7,lr}
- sub sp, 0x8
- adds r4, r0, 0
- ldr r1, =gUnknown_0855C47C
- mov r0, sp
- movs r2, 0x5
- bl memcpy
- ldr r2, =gPlayerAvatar
- ldrb r1, [r2, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, =gMapObjects
- adds r6, r0, r1
- ldrb r1, [r2, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, =gSprites
- adds r5, r0, r1
- ldrh r0, [r4, 0xA]
- ldrh r1, [r5, 0x26]
- adds r0, r1
- strh r0, [r5, 0x26]
- lsls r0, 16
- asrs r0, 16
- movs r1, 0x8
- negs r1, r1
- cmp r0, r1
- blt _080B8384
- ldrh r1, [r4, 0x22]
- movs r2, 0x22
- ldrsh r0, [r4, r2]
- cmp r0, 0
- bne _080B83AA
- adds r0, r1, 0x1
- strh r0, [r4, 0x22]
- ldrb r0, [r6]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r6]
- ldrh r1, [r4, 0x24]
- adds r3, r5, 0
- adds r3, 0x42
- lsls r1, 6
- ldrb r2, [r3]
- movs r0, 0x3F
- ands r0, r2
- orrs r0, r1
- strb r0, [r3]
- b _080B83AA
- .pool
-_080B8384:
- ldrb r1, [r5, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r1
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r5, 0x5]
- adds r2, r5, 0
- adds r2, 0x42
- ldrb r1, [r2]
- movs r0, 0xC0
- ands r0, r1
- cmp r0, 0
- beq _080B83AA
- movs r0, 0x3F
- ands r0, r1
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r2]
-_080B83AA:
- ldrh r2, [r5, 0x26]
- movs r3, 0x26
- ldrsh r1, [r5, r3]
- movs r0, 0x30
- negs r0, r0
- cmp r1, r0
- blt _080B83CE
- ldrh r1, [r4, 0xA]
- movs r3, 0xA
- ldrsh r0, [r4, r3]
- cmp r0, 0x1
- ble _080B83CE
- movs r0, 0x1
- ands r0, r2
- cmp r0, 0
- bne _080B83CE
- subs r0, r1, 0x1
- strh r0, [r4, 0xA]
-_080B83CE:
- ldrh r0, [r4, 0xC]
- subs r0, 0x1
- movs r7, 0
- strh r0, [r4, 0xC]
- lsls r0, 16
- cmp r0, 0
- bne _080B83F0
- movs r0, 0x4
- strh r0, [r4, 0xC]
- ldrb r0, [r6, 0x18]
- lsls r0, 28
- lsrs r0, 28
- add r0, sp
- ldrb r1, [r0]
- adds r0, r6, 0
- bl FieldObjectTurn
-_080B83F0:
- movs r1, 0x26
- ldrsh r0, [r5, r1]
- cmp r0, 0
- blt _080B8406
- strh r7, [r5, 0x26]
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r0, 0x1
- strh r0, [r4, 0xA]
- strh r7, [r4, 0xC]
-_080B8406:
- add sp, 0x8
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_80B830C
-
- thumb_func_start sub_80B8410
-sub_80B8410: @ 80B8410
- push {r4,r5,lr}
- sub sp, 0x8
- adds r4, r0, 0
- ldr r1, =gUnknown_0855C47C
- mov r0, sp
- movs r2, 0x5
- bl memcpy
- ldr r0, =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, =gMapObjects
- adds r5, r0, r1
- ldrh r0, [r4, 0xA]
- subs r0, 0x1
- strh r0, [r4, 0xA]
- lsls r0, 16
- cmp r0, 0
- bne _080B8484
- ldrb r0, [r5, 0x18]
- lsls r0, 28
- lsrs r0, 28
- add r0, sp
- ldrb r1, [r0]
- adds r0, r5, 0
- bl FieldObjectTurn
- movs r0, 0x8
- strh r0, [r4, 0xA]
- ldrh r0, [r4, 0xC]
- adds r0, 0x1
- strh r0, [r4, 0xC]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x4
- ble _080B8484
- movs r0, 0x24
- ldrsh r1, [r4, r0]
- ldrb r0, [r5, 0x18]
- lsls r0, 28
- lsrs r0, 28
- cmp r1, r0
- bne _080B8484
- bl ScriptContext2_Disable
- bl CameraObjectReset1
- bl UnfreezeMapObjects
- ldr r0, =sub_80B8250
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_080B8484:
- add sp, 0x8
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B8410
-
- thumb_func_start sub_80B849C
-sub_80B849C: @ 80B849C
- push {r4,lr}
- bl sav1_map_get_light_level
- lsls r0, 24
- lsrs r0, 24
- bl is_light_level_1_2_3_5_or_6
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080B84BC
- ldr r0, =sub_80B8554
- b _080B84BE
- .pool
-_080B84BC:
- ldr r0, =sub_80B88B4
-_080B84BE:
- movs r1, 0xFF
- bl CreateTask
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r2, =gFieldEffectArguments
- ldr r0, [r2]
- ldr r1, [r2, 0x4]
- ldr r2, [r2, 0x8]
- bl sub_80B8C60
- ldr r2, =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r2
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r1, 0x26]
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80B849C
-
- thumb_func_start sub_80B84F8
-sub_80B84F8: @ 80B84F8
- push {r4-r6,lr}
- ldr r5, =gFieldEffectArguments
- ldr r0, [r5]
- movs r6, 0x80
- lsls r6, 24
- ands r6, r0
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x64
- adds r4, r0, 0
- muls r4, r1
- ldr r0, =gPlayerParty
- adds r4, r0
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- str r0, [r5]
- adds r0, r4, 0
- movs r1, 0x1
- bl GetMonData
- str r0, [r5, 0x4]
- adds r0, r4, 0
- movs r1, 0
- bl GetMonData
- str r0, [r5, 0x8]
- ldr r0, [r5]
- orrs r0, r6
- str r0, [r5]
- movs r0, 0x6
- bl FieldEffectStart
- movs r0, 0x3B
- bl FieldEffectActiveListRemove
- movs r0, 0
- pop {r4-r6}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80B84F8
-
- thumb_func_start sub_80B8554
-sub_80B8554: @ 80B8554
- push {lr}
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldr r3, =gUnknown_0855C4A8
- ldr r2, =gTasks
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- movs r2, 0x8
- ldrsh r1, [r0, r2]
- lsls r1, 2
- adds r1, r3
- ldr r1, [r1]
- bl _call_via_r1
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B8554
-
- thumb_func_start sub_80B8584
-sub_80B8584: @ 80B8584
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, =0x04000048
- ldrh r0, [r0]
- strh r0, [r4, 0x1E]
- ldr r0, =0x0400004a
- ldrh r0, [r0]
- strh r0, [r4, 0x20]
- adds r0, r4, 0
- adds r0, 0x22
- ldr r1, =gMain
- ldr r1, [r1, 0xC]
- bl StoreWordInTwoHalfwords
- ldr r1, =0x0000f0f1
- strh r1, [r4, 0xA]
- ldr r0, =0x00005051
- strh r0, [r4, 0xC]
- movs r0, 0x3F
- strh r0, [r4, 0xE]
- movs r0, 0x3E
- strh r0, [r4, 0x10]
- movs r0, 0x40
- bl SetGpuReg
- ldrh r1, [r4, 0xC]
- movs r0, 0x44
- bl SetGpuReg
- ldrh r1, [r4, 0xE]
- movs r0, 0x48
- bl SetGpuReg
- ldrh r1, [r4, 0x10]
- movs r0, 0x4A
- bl SetGpuReg
- ldr r0, =sub_80B880C
- bl SetVBlankCallback
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B8584
-
- thumb_func_start sub_80B85F8
-sub_80B85F8: @ 80B85F8
- push {r4-r6,lr}
- sub sp, 0x4
- adds r6, r0, 0
- ldr r0, =0x04000008
- ldrh r1, [r0]
- lsrs r1, 2
- lsls r1, 30
- lsrs r1, 16
- ldrh r4, [r0]
- lsrs r4, 8
- lsls r4, 27
- lsrs r4, 16
- ldr r0, =gUnknown_0855AE50
- movs r5, 0xC0
- lsls r5, 19
- adds r1, r5
- movs r2, 0x80
- lsls r2, 1
- bl CpuSet
- movs r0, 0
- str r0, [sp]
- adds r5, r4, r5
- ldr r2, =0x05000200
- mov r0, sp
- adds r1, r5, 0
- bl CpuSet
- ldr r0, =gUnknown_0855B050
- movs r1, 0xF0
- movs r2, 0x20
- bl LoadPalette
- adds r0, r4, 0
- bl sub_80B8874
- ldrh r0, [r6, 0x8]
- adds r0, 0x1
- strh r0, [r6, 0x8]
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B85F8
-
- thumb_func_start sub_80B8660
-sub_80B8660: @ 80B8660
- push {r4-r7,lr}
- adds r3, r0, 0
- ldrh r0, [r3, 0x12]
- subs r0, 0x10
- strh r0, [r3, 0x12]
- ldrh r6, [r3, 0xA]
- ldrh r2, [r3, 0xC]
- movs r7, 0xFF
- lsrs r1, r6, 8
- subs r1, 0x10
- lsls r1, 16
- lsrs r0, r2, 8
- subs r0, 0x2
- lsls r0, 16
- lsrs r4, r0, 16
- adds r0, r7, 0
- ands r0, r2
- adds r5, r0, 0x2
- lsrs r2, r1, 16
- cmp r1, 0
- bge _080B868C
- movs r2, 0
-_080B868C:
- lsls r0, r4, 16
- asrs r0, 16
- cmp r0, 0x27
- bgt _080B8696
- movs r4, 0x28
-_080B8696:
- cmp r5, 0x78
- ble _080B869C
- movs r5, 0x78
-_080B869C:
- lsls r2, 16
- asrs r2, 16
- lsls r1, r2, 8
- adds r0, r7, 0
- ands r0, r6
- orrs r1, r0
- strh r1, [r3, 0xA]
- lsls r0, r4, 16
- asrs r4, r0, 16
- lsls r0, r4, 8
- adds r1, r5, 0
- orrs r0, r1
- strh r0, [r3, 0xC]
- cmp r2, 0
- bne _080B86DC
- cmp r4, 0x28
- bne _080B86DC
- cmp r1, 0x78
- bne _080B86DC
- ldr r2, =gSprites
- movs r0, 0x26
- ldrsh r1, [r3, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, =sub_80B8CC0
- str r1, [r0]
- ldrh r0, [r3, 0x8]
- adds r0, 0x1
- strh r0, [r3, 0x8]
-_080B86DC:
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B8660
-
- thumb_func_start sub_80B86EC
-sub_80B86EC: @ 80B86EC
- push {lr}
- adds r3, r0, 0
- ldrh r0, [r3, 0x12]
- subs r0, 0x10
- strh r0, [r3, 0x12]
- ldr r2, =gSprites
- movs r0, 0x26
- ldrsh r1, [r3, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x3C
- ldrsh r0, [r0, r1]
- cmp r0, 0
- beq _080B8712
- ldrh r0, [r3, 0x8]
- adds r0, 0x1
- strh r0, [r3, 0x8]
-_080B8712:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B86EC
-
- thumb_func_start sub_80B871C
-sub_80B871C: @ 80B871C
- push {r4,lr}
- adds r3, r0, 0
- ldrh r0, [r3, 0x12]
- subs r0, 0x10
- strh r0, [r3, 0x12]
- ldrh r2, [r3, 0xC]
- lsls r1, r2, 16
- movs r0, 0xFF
- asrs r1, 24
- adds r1, 0x6
- lsls r1, 16
- ands r0, r2
- subs r0, 0x6
- lsls r0, 16
- lsrs r2, r0, 16
- lsrs r4, r1, 16
- asrs r1, 16
- cmp r1, 0x50
- ble _080B8744
- movs r4, 0x50
-_080B8744:
- lsls r0, r2, 16
- asrs r0, 16
- cmp r0, 0x50
- bgt _080B874E
- movs r2, 0x51
-_080B874E:
- lsls r0, r4, 16
- asrs r0, 16
- lsls r1, r0, 8
- lsls r2, 16
- asrs r2, 16
- orrs r1, r2
- strh r1, [r3, 0xC]
- cmp r0, 0x50
- bne _080B876A
- cmp r2, 0x51
- bne _080B876A
- ldrh r0, [r3, 0x8]
- adds r0, 0x1
- strh r0, [r3, 0x8]
-_080B876A:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80B871C
-
- thumb_func_start sub_80B8770
-sub_80B8770: @ 80B8770
- push {r4,lr}
- sub sp, 0x4
- adds r4, r0, 0
- ldr r0, =0x04000008
- ldrh r1, [r0]
- lsrs r1, 8
- lsls r1, 27
- lsrs r1, 16
- movs r0, 0
- str r0, [sp]
- movs r0, 0xC0
- lsls r0, 19
- adds r1, r0
- ldr r2, =0x05000200
- mov r0, sp
- bl CpuSet
- movs r0, 0xF1
- strh r0, [r4, 0xA]
- movs r0, 0xA1
- strh r0, [r4, 0xC]
- ldrh r0, [r4, 0x1E]
- strh r0, [r4, 0xE]
- ldrh r0, [r4, 0x20]
- strh r0, [r4, 0x10]
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B8770
-
- thumb_func_start overworld_bg_setup_2
-overworld_bg_setup_2: @ 80B87B8
- push {r4,lr}
- sub sp, 0x4
- adds r4, r0, 0
- adds r0, 0x22
- mov r1, sp
- bl LoadWordFromTwoHalfwords
- ldr r0, [sp]
- bl SetVBlankCallback
- bl sub_8197200
- movs r0, 0x26
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, =gSprites
- adds r0, r1
- ldrh r1, [r4, 0x26]
- lsls r1, 24
- lsrs r1, 24
- bl sub_80B6070
- movs r0, 0x6
- bl FieldEffectActiveListRemove
- ldr r0, =sub_80B8554
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end overworld_bg_setup_2
-
- thumb_func_start sub_80B880C
-sub_80B880C: @ 80B880C
- push {r4,lr}
- sub sp, 0x4
- ldr r0, =sub_80B8554
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- lsls r4, r0, 2
- adds r4, r0
- lsls r4, 3
- ldr r0, =gTasks
- adds r4, r0
- adds r0, r4, 0
- adds r0, 0x22
- mov r1, sp
- bl LoadWordFromTwoHalfwords
- ldr r0, [sp]
- bl _call_via_r0
- ldrh r1, [r4, 0xA]
- movs r0, 0x40
- bl SetGpuReg
- ldrh r1, [r4, 0xC]
- movs r0, 0x44
- bl SetGpuReg
- ldrh r1, [r4, 0xE]
- movs r0, 0x48
- bl SetGpuReg
- ldrh r1, [r4, 0x10]
- movs r0, 0x4A
- bl SetGpuReg
- ldrh r1, [r4, 0x12]
- movs r0, 0x10
- bl SetGpuReg
- ldrh r1, [r4, 0x14]
- movs r0, 0x12
- bl SetGpuReg
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B880C
-
- thumb_func_start sub_80B8874
-sub_80B8874: @ 80B8874
- push {r4,r5,lr}
- lsls r0, 16
- lsrs r0, 16
- ldr r1, =0x06000140
- adds r2, r0, r1
- movs r1, 0
- ldr r5, =gUnknown_0855B070
- movs r0, 0xF0
- lsls r0, 8
- adds r4, r0, 0
- ldr r3, =0x0000013f
-_080B888A:
- lsls r0, r1, 1
- adds r0, r5
- ldrh r0, [r0]
- orrs r0, r4
- strh r0, [r2]
- adds r0, r1, 0x1
- lsls r0, 16
- lsrs r1, r0, 16
- adds r2, 0x2
- cmp r1, r3
- bls _080B888A
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B8874
-
- thumb_func_start sub_80B88B4
-sub_80B88B4: @ 80B88B4
- push {lr}
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldr r3, =gUnknown_0855C4C4
- ldr r2, =gTasks
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- movs r2, 0x8
- ldrsh r1, [r0, r2]
- lsls r1, 2
- adds r1, r3
- ldr r1, [r1]
- bl _call_via_r1
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B88B4
-
- thumb_func_start sub_80B88E4
-sub_80B88E4: @ 80B88E4
- push {r4,lr}
- adds r4, r0, 0
- ldrh r1, [r4, 0xA]
- movs r0, 0x10
- bl SetGpuReg
- ldrh r1, [r4, 0xC]
- movs r0, 0x12
- bl SetGpuReg
- adds r0, r4, 0
- adds r0, 0x22
- ldr r1, =gMain
- ldr r1, [r1, 0xC]
- bl StoreWordInTwoHalfwords
- ldr r0, =sub_80B8AE0
- bl SetVBlankCallback
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B88E4
-
- thumb_func_start sub_80B8920
-sub_80B8920: @ 80B8920
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- sub sp, 0x4
- adds r6, r0, 0
- ldr r0, =0x04000008
- ldrh r1, [r0]
- lsrs r1, 2
- lsls r1, 30
- lsrs r1, 16
- ldrh r4, [r0]
- lsrs r4, 8
- lsls r4, 27
- lsrs r4, 16
- movs r0, 0
- mov r8, r0
- strh r4, [r6, 0x20]
- ldr r0, =gUnknown_0855B2F0
- movs r5, 0xC0
- lsls r5, 19
- adds r1, r5
- movs r2, 0x40
- bl CpuSet
- mov r0, r8
- str r0, [sp]
- adds r4, r5
- ldr r2, =0x05000200
- mov r0, sp
- adds r1, r4, 0
- bl CpuSet
- ldr r0, =gUnknown_0855B370
- movs r1, 0xF0
- movs r2, 0x20
- bl LoadPalette
- ldrh r0, [r6, 0x8]
- adds r0, 0x1
- strh r0, [r6, 0x8]
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B8920
-
- thumb_func_start sub_80B898C
-sub_80B898C: @ 80B898C
- push {r4,lr}
- adds r4, r0, 0
- bl sub_80B8B38
- lsls r0, 24
- cmp r0, 0
- beq _080B89C4
- movs r0, 0x42
- movs r1, 0xF0
- bl SetGpuReg
- ldr r1, =0x00002878
- movs r0, 0x46
- bl SetGpuReg
- ldr r2, =gSprites
- movs r0, 0x26
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, =sub_80B8CC0
- str r1, [r0]
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_080B89C4:
- adds r0, r4, 0
- bl sub_80B8B28
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B898C
-
- thumb_func_start sub_80B89DC
-sub_80B89DC: @ 80B89DC
- push {r4,lr}
- adds r4, r0, 0
- bl sub_80B8B28
- ldr r2, =gSprites
- movs r0, 0x26
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x3C
- ldrsh r0, [r0, r1]
- cmp r0, 0
- beq _080B8A00
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_080B8A00:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B89DC
-
- thumb_func_start sub_80B8A0C
-sub_80B8A0C: @ 80B8A0C
- push {r4,r5,lr}
- adds r4, r0, 0
- bl sub_80B8B28
- ldrh r1, [r4, 0xA]
- movs r0, 0x7
- ands r0, r1
- movs r1, 0
- strh r0, [r4, 0xE]
- strh r1, [r4, 0x10]
- ldr r5, =0x0000ffff
- movs r0, 0x42
- adds r1, r5, 0
- bl SetGpuReg
- movs r0, 0x46
- adds r1, r5, 0
- bl SetGpuReg
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B8A0C
-
- thumb_func_start sub_80B8A44
-sub_80B8A44: @ 80B8A44
- push {r4,lr}
- adds r4, r0, 0
- bl sub_80B8B28
- adds r0, r4, 0
- bl sub_80B8BF0
- lsls r0, 24
- cmp r0, 0
- beq _080B8A5E
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_080B8A5E:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80B8A44
-
- thumb_func_start sub_80B8A64
-sub_80B8A64: @ 80B8A64
- push {r4,lr}
- sub sp, 0x8
- adds r4, r0, 0
- ldr r0, =0x04000008
- ldrh r1, [r0]
- lsrs r1, 8
- lsls r1, 27
- lsrs r1, 16
- movs r0, 0
- str r0, [sp]
- movs r0, 0xC0
- lsls r0, 19
- adds r1, r0
- ldr r2, =0x05000200
- mov r0, sp
- bl CpuSet
- adds r0, r4, 0
- adds r0, 0x22
- add r1, sp, 0x4
- bl LoadWordFromTwoHalfwords
- ldr r0, [sp, 0x4]
- bl SetVBlankCallback
- bl sub_8197200
- movs r0, 0x26
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, =gSprites
- adds r0, r1
- ldrh r1, [r4, 0x26]
- lsls r1, 24
- lsrs r1, 24
- bl sub_80B6070
- movs r0, 0x6
- bl FieldEffectActiveListRemove
- ldr r0, =sub_80B88B4
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
- add sp, 0x8
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B8A64
-
- thumb_func_start sub_80B8AE0
-sub_80B8AE0: @ 80B8AE0
- push {r4,lr}
- sub sp, 0x4
- ldr r0, =sub_80B88B4
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- lsls r4, r0, 2
- adds r4, r0
- lsls r4, 3
- ldr r0, =gTasks
- adds r4, r0
- adds r0, r4, 0
- adds r0, 0x22
- mov r1, sp
- bl LoadWordFromTwoHalfwords
- ldr r0, [sp]
- bl _call_via_r0
- ldrh r1, [r4, 0xA]
- movs r0, 0x10
- bl SetGpuReg
- ldrh r1, [r4, 0xC]
- movs r0, 0x12
- bl SetGpuReg
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B8AE0
-
- thumb_func_start sub_80B8B28
-sub_80B8B28: @ 80B8B28
- ldrh r1, [r0, 0xA]
- subs r1, 0x10
- strh r1, [r0, 0xA]
- ldrh r1, [r0, 0xE]
- adds r1, 0x10
- strh r1, [r0, 0xE]
- bx lr
- thumb_func_end sub_80B8B28
-
- thumb_func_start sub_80B8B38
-sub_80B8B38: @ 80B8B38
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- adds r5, r0, 0
- ldrh r2, [r5, 0x10]
- movs r1, 0x10
- ldrsh r0, [r5, r1]
- cmp r0, 0x1F
- ble _080B8B54
- movs r0, 0x1
- b _080B8BD8
-_080B8B54:
- ldrh r0, [r5, 0xE]
- lsls r0, 16
- asrs r3, r0, 19
- movs r1, 0x1F
- ands r3, r1
- movs r4, 0x10
- ldrsh r0, [r5, r4]
- cmp r3, r0
- blt _080B8BD6
- movs r0, 0x20
- subs r3, r0, r3
- ands r3, r1
- subs r0, r2
- mov r12, r0
- mov r7, r12
- ands r7, r1
- mov r12, r7
- ldrh r0, [r5, 0x20]
- ldr r1, =0x06000140
- adds r1, r0
- mov r8, r1
- movs r4, 0
- ldr r7, =gUnknown_0855B390
- mov r10, r7
- movs r0, 0xF0
- lsls r0, 8
- mov r9, r0
- adds r1, r3, 0x1
- movs r0, 0x1F
- ands r1, r0
- str r1, [sp]
- mov r6, r12
- adds r6, 0x1
- ands r6, r0
-_080B8B98:
- lsls r1, r4, 5
- adds r2, r1, r3
- lsls r2, 1
- add r2, r8
- mov r7, r12
- adds r0, r7, r1
- lsls r0, 1
- add r0, r10
- ldrh r0, [r0]
- mov r7, r9
- orrs r0, r7
- strh r0, [r2]
- ldr r0, [sp]
- adds r2, r1, r0
- lsls r2, 1
- add r2, r8
- adds r1, r6, r1
- lsls r1, 1
- add r1, r10
- ldrh r0, [r1]
- mov r1, r9
- orrs r0, r1
- strh r0, [r2]
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x9
- bls _080B8B98
- ldrh r0, [r5, 0x10]
- adds r0, 0x2
- strh r0, [r5, 0x10]
-_080B8BD6:
- movs r0, 0
-_080B8BD8:
- 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_80B8B38
-
- thumb_func_start sub_80B8BF0
-sub_80B8BF0: @ 80B8BF0
- push {r4-r7,lr}
- adds r5, r0, 0
- movs r1, 0x10
- ldrsh r0, [r5, r1]
- cmp r0, 0x1F
- ble _080B8C00
- movs r0, 0x1
- b _080B8C54
-_080B8C00:
- ldrh r0, [r5, 0xE]
- lsls r0, 16
- asrs r0, 19
- lsls r0, 16
- lsrs r2, r0, 16
- movs r1, 0x10
- ldrsh r0, [r5, r1]
- cmp r2, r0
- blt _080B8C52
- ldrh r0, [r5, 0xA]
- lsls r0, 16
- asrs r2, r0, 19
- movs r0, 0x1F
- ands r2, r0
- ldrh r0, [r5, 0x20]
- ldr r1, =0x06000140
- adds r6, r0, r1
- movs r3, 0
- movs r0, 0xF0
- lsls r0, 8
- adds r7, r0, 0
- adds r4, r2, 0x1
- movs r0, 0x1F
- ands r4, r0
-_080B8C30:
- lsls r0, r3, 5
- adds r1, r0, r2
- lsls r1, 1
- adds r1, r6
- strh r7, [r1]
- adds r0, r4
- lsls r0, 1
- adds r0, r6
- strh r7, [r0]
- adds r0, r3, 0x1
- lsls r0, 16
- lsrs r3, r0, 16
- cmp r3, 0x9
- bls _080B8C30
- ldrh r0, [r5, 0x10]
- adds r0, 0x2
- strh r0, [r5, 0x10]
-_080B8C52:
- movs r0, 0
-_080B8C54:
- pop {r4-r7}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80B8BF0
-
- thumb_func_start sub_80B8C60
-sub_80B8C60: @ 80B8C60
- push {r4-r6,lr}
- sub sp, 0x8
- adds r6, r0, 0
- movs r5, 0x80
- lsls r5, 24
- ands r5, r6
- lsrs r5, 16
- lsls r5, 16
- lsrs r5, 16
- ldr r0, =0x7fffffff
- ands r6, r0
- lsls r0, r6, 16
- lsrs r0, 16
- movs r3, 0xA0
- lsls r3, 1
- movs r4, 0x50
- str r4, [sp]
- movs r4, 0
- str r4, [sp, 0x4]
- bl sub_80B5FE8
- lsls r0, 24
- lsrs r0, 24
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- ldr r1, =gSprites
- adds r2, r1
- ldr r1, =SpriteCallbackDummy
- str r1, [r2, 0x1C]
- ldrb r3, [r2, 0x5]
- movs r1, 0xD
- negs r1, r1
- ands r1, r3
- strb r1, [r2, 0x5]
- strh r6, [r2, 0x2E]
- strh r5, [r2, 0x3A]
- add sp, 0x8
- pop {r4-r6}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80B8C60
-
- thumb_func_start sub_80B8CC0
-sub_80B8CC0: @ 80B8CC0
- push {lr}
- adds r1, r0, 0
- ldrh r0, [r1, 0x20]
- subs r0, 0x14
- strh r0, [r1, 0x20]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x78
- bgt _080B8D00
- movs r0, 0x78
- strh r0, [r1, 0x20]
- movs r0, 0x1E
- strh r0, [r1, 0x30]
- ldr r0, =sub_80B8D04
- str r0, [r1, 0x1C]
- movs r2, 0x3A
- ldrsh r0, [r1, r2]
- cmp r0, 0
- beq _080B8CF8
- ldrh r0, [r1, 0x2E]
- movs r1, 0
- movs r2, 0x7D
- movs r3, 0xA
- bl PlayCry2
- b _080B8D00
- .pool
-_080B8CF8:
- ldrh r0, [r1, 0x2E]
- movs r1, 0
- bl PlayCry1
-_080B8D00:
- pop {r0}
- bx r0
- thumb_func_end sub_80B8CC0
-
- thumb_func_start sub_80B8D04
-sub_80B8D04: @ 80B8D04
- push {lr}
- adds r1, r0, 0
- ldrh r0, [r1, 0x30]
- subs r0, 0x1
- strh r0, [r1, 0x30]
- lsls r0, 16
- cmp r0, 0
- bne _080B8D18
- ldr r0, =sub_80B8D20
- str r0, [r1, 0x1C]
-_080B8D18:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B8D04
-
- thumb_func_start sub_80B8D20
-sub_80B8D20: @ 80B8D20
- push {lr}
- adds r2, r0, 0
- ldrh r3, [r2, 0x20]
- movs r0, 0x20
- ldrsh r1, [r2, r0]
- movs r0, 0x40
- negs r0, r0
- cmp r1, r0
- bge _080B8D38
- movs r0, 0x1
- strh r0, [r2, 0x3C]
- b _080B8D3E
-_080B8D38:
- adds r0, r3, 0
- subs r0, 0x14
- strh r0, [r2, 0x20]
-_080B8D3E:
- pop {r0}
- bx r0
- thumb_func_end sub_80B8D20
-
- thumb_func_start sub_80B8D44
-sub_80B8D44: @ 80B8D44
- push {lr}
- ldr r0, =sub_80B8D84
- movs r1, 0xFF
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- ldr r0, =gFieldEffectArguments
- ldr r0, [r0]
- strh r0, [r1, 0x26]
- bl Overworld_ClearSavedMusic
- ldr r0, =0x0000016d
- bl Overworld_ChangeMusicTo
- movs r0, 0
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80B8D44
-
- thumb_func_start sub_80B8D84
-sub_80B8D84: @ 80B8D84
- push {lr}
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldr r3, =gUnknown_0855C4E0
- ldr r2, =gTasks
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- movs r2, 0x8
- ldrsh r1, [r0, r2]
- lsls r1, 2
- adds r1, r3
- ldr r1, [r1]
- bl _call_via_r1
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B8D84
-
- thumb_func_start sub_80B8DB4
-sub_80B8DB4: @ 80B8DB4
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- adds r4, r0, 0
- bl ScriptContext2_Enable
- bl FreezeMapObjects
- ldr r5, =gPlayerAvatar
- movs r0, 0x1
- strb r0, [r5, 0x6]
- movs r0, 0x8
- bl SetPlayerAvatarStateMask
- adds r6, r4, 0
- adds r6, 0xA
- movs r0, 0xC
- adds r0, r4
- mov r8, r0
- adds r0, r6, 0
- mov r1, r8
- bl PlayerGetDestCoords
- ldr r2, =gMapObjects
- ldrb r1, [r5, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x18]
- lsrs r0, 4
- adds r1, r6, 0
- mov r2, r8
- bl MoveCoords
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B8DB4
-
- thumb_func_start sub_80B8E14
-sub_80B8E14: @ 80B8E14
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r0, =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, =gMapObjects
- adds r4, r0, r1
- adds r0, r4, 0
- bl FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive
- lsls r0, 24
- cmp r0, 0
- beq _080B8E3E
- adds r0, r4, 0
- bl FieldObjectClearAnimIfSpecialAnimFinished
- lsls r0, 24
- cmp r0, 0
- beq _080B8E50
-_080B8E3E:
- bl sub_808C114
- adds r0, r4, 0
- movs r1, 0x39
- bl FieldObjectSetSpecialAnim
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- strh r0, [r5, 0x8]
-_080B8E50:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B8E14
-
- thumb_func_start sub_80B8E60
-sub_80B8E60: @ 80B8E60
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, =gMapObjects
- adds r0, r1
- bl FieldObjectCheckIfSpecialAnimFinishedOrInactive
- lsls r0, 24
- cmp r0, 0
- beq _080B8E96
- ldr r2, =gFieldEffectArguments
- movs r1, 0x26
- ldrsh r0, [r4, r1]
- movs r1, 0x80
- lsls r1, 24
- orrs r0, r1
- str r0, [r2]
- movs r0, 0x3B
- bl FieldEffectStart
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_080B8E96:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B8E60
-
- thumb_func_start sub_80B8EA8
-sub_80B8EA8: @ 80B8EA8
- push {r4-r6,lr}
- adds r6, r0, 0
- movs r0, 0x6
- bl FieldEffectActiveListContains
- lsls r0, 24
- cmp r0, 0
- bne _080B8F12
- ldr r5, =gPlayerAvatar
- ldrb r0, [r5, 0x5]
- lsls r4, r0, 3
- adds r4, r0
- lsls r4, 2
- ldr r0, =gMapObjects
- adds r4, r0
- movs r0, 0x3
- bl GetPlayerAvatarGraphicsIdByStateId
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl FieldObjectSetGraphicsId
- adds r0, r4, 0
- bl FieldObjectClearAnimIfSpecialAnimFinished
- ldrb r0, [r4, 0x18]
- lsrs r0, 4
- bl sub_8093540
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl FieldObjectSetSpecialAnim
- ldr r1, =gFieldEffectArguments
- movs r2, 0xA
- ldrsh r0, [r6, r2]
- str r0, [r1]
- movs r2, 0xC
- ldrsh r0, [r6, r2]
- str r0, [r1, 0x4]
- ldrb r0, [r5, 0x5]
- str r0, [r1, 0x8]
- movs r0, 0x8
- bl FieldEffectStart
- strb r0, [r4, 0x1A]
- ldrh r0, [r6, 0x8]
- adds r0, 0x1
- strh r0, [r6, 0x8]
-_080B8F12:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B8EA8
-
- thumb_func_start sub_80B8F24
-sub_80B8F24: @ 80B8F24
- push {r4,r5,lr}
- ldr r5, =gPlayerAvatar
- ldrb r1, [r5, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, =gMapObjects
- adds r4, r0, r1
- adds r0, r4, 0
- bl FieldObjectClearAnimIfSpecialAnimFinished
- lsls r0, 24
- cmp r0, 0
- beq _080B8F84
- movs r0, 0
- strb r0, [r5, 0x6]
- ldrb r1, [r5]
- movs r0, 0xDF
- ands r0, r1
- strb r0, [r5]
- ldrb r0, [r4, 0x18]
- lsrs r0, 4
- bl GetFaceDirectionAnimId
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl FieldObjectSetSpecialAnim
- ldrb r0, [r4, 0x1A]
- movs r1, 0x1
- bl sub_81555AC
- bl UnfreezeMapObjects
- bl ScriptContext2_Disable
- movs r0, 0x9
- bl FieldEffectActiveListRemove
- ldr r0, =sub_80B8D84
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_080B8F84:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B8F24
-
- thumb_func_start sub_80B8F98
-sub_80B8F98: @ 80B8F98
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r0, =gFieldEffectObjectTemplatePointers
- adds r0, 0x90
- ldr r0, [r0]
- movs r2, 0x18
- negs r2, r2
- movs r1, 0x78
- movs r3, 0x1
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- lsls r1, r0, 4
- add r1, r8
- lsls r1, 2
- ldr r0, =gSprites
- adds r1, r0
- ldrb r2, [r1, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- movs r2, 0x4
- orrs r0, r2
- movs r2, 0xF
- ands r0, r2
- movs r2, 0x40
- orrs r0, r2
- strb r0, [r1, 0x5]
- movs r2, 0
- strh r2, [r1, 0x2E]
- strh r2, [r1, 0x30]
- strh r2, [r1, 0x32]
- ldr r0, =0x0000ffff
- strh r0, [r1, 0x34]
- ldrh r0, [r1, 0x22]
- strh r0, [r1, 0x36]
- strh r2, [r1, 0x38]
- ldr r1, =0x00003e41
- movs r0, 0x50
- bl SetGpuReg
- ldr r1, =0x00000e0e
- movs r0, 0x52
- bl SetGpuReg
- ldr r1, =0x00003f3f
- movs r0, 0x48
- bl SetGpuReg
- ldr r0, =gUnknown_0855B610
- movs r1, 0xC0
- movs r2, 0x20
- bl LoadPalette
- movs r0, 0x12
- movs r1, 0x78
- bl SetGpuReg
- movs r4, 0x3
- ldr r7, =0x0600f800
- ldr r0, =0x0000bff4
- adds r6, r0, 0
-_080B901A:
- movs r2, 0xC
- lsls r0, r4, 1
- lsls r5, r4, 5
- adds r0, r4
- lsls r3, r0, 1
-_080B9024:
- adds r0, r5, r2
- lsls r0, 1
- adds r0, r7
- adds r1, r2, r6
- adds r1, r3, r1
- adds r1, 0x1
- strh r1, [r0]
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x11
- bls _080B9024
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0xE
- bls _080B901A
- movs r0, 0
- ldr r5, =gUnknown_0855B630
-_080B904A:
- movs r4, 0
- adds r7, r0, 0x1
- lsls r6, r0, 5
-_080B9050:
- lsls r1, r4, 2
- adds r1, r6, r1
- ldr r0, =0x06008020
- adds r3, r1, r0
- adds r0, r1, 0x1
- adds r0, r5
- ldrb r2, [r0]
- lsls r2, 8
- adds r0, r1, r5
- ldrb r0, [r0]
- adds r0, r2
- strh r0, [r3]
- ldr r0, =0x06008022
- adds r3, r1, r0
- adds r0, r1, 0x3
- adds r0, r5
- ldrb r2, [r0]
- lsls r2, 8
- adds r1, 0x2
- adds r1, r5
- ldrb r0, [r1]
- adds r0, r2
- strh r0, [r3]
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x7
- bls _080B9050
- lsls r0, r7, 24
- lsrs r0, 24
- cmp r0, 0x59
- bls _080B904A
- mov r0, r8
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80B8F98
-
- thumb_func_start sub_80B90CC
-sub_80B90CC: @ 80B90CC
- push {r4,lr}
- ldr r0, =gFieldEffectObjectTemplatePointers
- ldr r0, [r0, 0x68]
- movs r1, 0x78
- movs r2, 0
- movs r3, 0x1
- bl CreateSprite
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- lsls r2, r4, 4
- adds r2, r4
- lsls r2, 2
- ldr r0, =gSprites
- adds r2, r0
- ldrb r1, [r2, 0x5]
- movs r0, 0xF
- ands r0, r1
- movs r1, 0xD
- negs r1, r1
- ands r0, r1
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r2, 0x5]
- ldr r0, =sub_80B9128
- str r0, [r2, 0x1C]
- ldr r0, =gFieldEffectArguments
- ldr r0, [r0]
- strh r0, [r2, 0x30]
- movs r0, 0x9E
- bl PlaySE
- adds r0, r4, 0
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80B90CC
-
- thumb_func_start sub_80B9128
-sub_80B9128: @ 80B9128
- push {r4,r5,lr}
- adds r4, r0, 0
- movs r1, 0x32
- ldrsh r0, [r4, r1]
- movs r1, 0x8C
- bl Cos
- movs r5, 0
- strh r0, [r4, 0x24]
- movs r2, 0x32
- ldrsh r0, [r4, r2]
- movs r1, 0x48
- bl Sin
- strh r0, [r4, 0x26]
- ldrh r0, [r4, 0x32]
- adds r0, 0x4
- movs r1, 0xFF
- ands r0, r1
- strh r0, [r4, 0x32]
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- cmp r0, 0
- beq _080B918A
- movs r2, 0x30
- ldrsh r0, [r4, r2]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- ldr r0, =gSprites
- adds r1, r0
- adds r3, r1, 0
- adds r3, 0x3E
- ldrb r2, [r3]
- movs r0, 0x3
- negs r0, r0
- ands r0, r2
- strb r0, [r3]
- ldrh r0, [r4, 0x24]
- ldrh r2, [r4, 0x20]
- adds r0, r2
- strh r0, [r1, 0x20]
- ldrh r0, [r4, 0x26]
- ldrh r2, [r4, 0x22]
- adds r0, r2
- subs r0, 0x8
- strh r0, [r1, 0x22]
- strh r5, [r1, 0x24]
- strh r5, [r1, 0x26]
-_080B918A:
- movs r1, 0x32
- ldrsh r0, [r4, r1]
- cmp r0, 0x7F
- ble _080B919A
- adds r0, r4, 0
- movs r1, 0x1E
- bl FieldEffectStop
-_080B919A:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B9128
-
- thumb_func_start sub_80B91A4
-sub_80B91A4: @ 80B91A4
- push {lr}
- ldr r0, =sub_80B91D4
- movs r1, 0xFE
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- ldr r0, =gFieldEffectArguments
- ldr r0, [r0]
- strh r0, [r1, 0xA]
- movs r0, 0
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80B91A4
-
- thumb_func_start sub_80B91D4
-sub_80B91D4: @ 80B91D4
- push {lr}
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldr r3, =gUnknown_0855C4F4
- ldr r2, =gTasks
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- movs r2, 0x8
- ldrsh r1, [r0, r2]
- lsls r1, 2
- adds r1, r3
- ldr r1, [r1]
- bl _call_via_r1
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B91D4
-
- thumb_func_start sub_80B9204
-sub_80B9204: @ 80B9204
- push {r4-r6,lr}
- adds r5, r0, 0
- ldr r6, =gPlayerAvatar
- ldrb r1, [r6, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, =gMapObjects
- adds r4, r0, r1
- adds r0, r4, 0
- bl FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive
- lsls r0, 24
- cmp r0, 0
- beq _080B922E
- adds r0, r4, 0
- bl FieldObjectClearAnimIfSpecialAnimFinished
- lsls r0, 24
- cmp r0, 0
- beq _080B924C
-_080B922E:
- ldrb r0, [r6]
- strh r0, [r5, 0x26]
- movs r0, 0x1
- strb r0, [r6, 0x6]
- bl SetPlayerAvatarStateMask
- bl sub_808C114
- adds r0, r4, 0
- movs r1, 0x39
- bl FieldObjectSetSpecialAnim
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- strh r0, [r5, 0x8]
-_080B924C:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B9204
-
- thumb_func_start sub_80B925C
-sub_80B925C: @ 80B925C
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, =gMapObjects
- adds r0, r1
- bl FieldObjectClearAnimIfSpecialAnimFinished
- lsls r0, 24
- cmp r0, 0
- beq _080B928C
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- ldr r1, =gFieldEffectArguments
- movs r2, 0xA
- ldrsh r0, [r4, r2]
- str r0, [r1]
- movs r0, 0x3B
- bl FieldEffectStart
-_080B928C:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B925C
-
- thumb_func_start sub_80B92A0
-sub_80B92A0: @ 80B92A0
- push {r4,r5,lr}
- adds r4, r0, 0
- movs r0, 0x6
- bl FieldEffectActiveListContains
- lsls r0, 24
- cmp r0, 0
- bne _080B92E8
- ldr r0, =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, =gMapObjects
- adds r5, r0, r1
- ldrh r1, [r4, 0x26]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _080B92D8
- ldrb r0, [r5, 0x1A]
- movs r1, 0x2
- bl sub_81555AC
- ldrb r0, [r5, 0x1A]
- movs r1, 0
- bl sub_81555D8
-_080B92D8:
- bl sub_80B94C4
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0xA]
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_080B92E8:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B92A0
-
- thumb_func_start sub_80B92F8
-sub_80B92F8: @ 80B92F8
- push {r4,lr}
- adds r4, r0, 0
- ldrb r0, [r4, 0xA]
- bl sub_80B9508
- lsls r0, 24
- cmp r0, 0
- beq _080B932C
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r0, 0x10
- strh r0, [r4, 0xC]
- movs r0, 0x1
- bl SetPlayerAvatarTransitionFlags
- ldr r0, =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, =gMapObjects
- adds r0, r1
- movs r1, 0x2
- bl FieldObjectSetSpecialAnim
-_080B932C:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B92F8
-
- thumb_func_start sub_80B933C
-sub_80B933C: @ 80B933C
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, =gMapObjects
- adds r2, r0, r1
- ldrh r1, [r4, 0xC]
- movs r3, 0xC
- ldrsh r0, [r4, r3]
- cmp r0, 0
- beq _080B9362
- subs r0, r1, 0x1
- strh r0, [r4, 0xC]
- lsls r0, 16
- cmp r0, 0
- bne _080B9380
-_080B9362:
- adds r0, r2, 0
- bl FieldObjectClearAnimIfSpecialAnimFinished
- lsls r0, 24
- cmp r0, 0
- beq _080B9380
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r0, 0x9E
- bl PlaySE
- ldrb r0, [r4, 0xA]
- bl sub_80B9524
-_080B9380:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B933C
-
- thumb_func_start sub_80B9390
-sub_80B9390: @ 80B9390
- push {r4-r6,lr}
- adds r5, r0, 0
- ldrh r0, [r5, 0xC]
- adds r0, 0x1
- strh r0, [r5, 0xC]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x7
- ble _080B9406
- ldr r0, =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, =gMapObjects
- adds r4, r0, r1
- movs r0, 0x3
- bl GetPlayerAvatarGraphicsIdByStateId
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl FieldObjectSetGraphicsId
- ldrb r1, [r4, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r6, =gSprites
- adds r0, r6
- movs r1, 0x16
- bl StartSpriteAnim
- ldrb r0, [r4, 0x1]
- movs r1, 0x10
- orrs r0, r1
- strb r0, [r4, 0x1]
- adds r0, r4, 0
- movs r1, 0x48
- bl FieldObjectSetSpecialAnim
- ldrh r1, [r5, 0x26]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _080B93FC
- ldrb r1, [r4, 0x1A]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- bl DestroySprite
-_080B93FC:
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- strh r0, [r5, 0x8]
- movs r0, 0
- strh r0, [r5, 0xC]
-_080B9406:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B9390
-
- thumb_func_start sub_80B9418
-sub_80B9418: @ 80B9418
- push {r4,r5,lr}
- adds r5, r0, 0
- ldrh r0, [r5, 0xC]
- adds r0, 0x1
- strh r0, [r5, 0xC]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x9
- ble _080B9464
- ldr r0, =gPlayerAvatar
- ldrb r0, [r0, 0x5]
- lsls r4, r0, 3
- adds r4, r0
- lsls r4, 2
- ldr r0, =gMapObjects
- adds r4, r0
- adds r0, r4, 0
- bl FieldObjectClearAnimIfSpecialAnimActive
- ldrb r1, [r4, 0x1]
- movs r0, 0x11
- negs r0, r0
- ands r0, r1
- strb r0, [r4, 0x1]
- ldrb r1, [r4, 0x2]
- movs r0, 0x41
- negs r0, r0
- ands r0, r1
- strb r0, [r4, 0x2]
- ldrb r0, [r5, 0xA]
- ldrb r1, [r4, 0x4]
- bl sub_80B9560
- bl CameraObjectReset2
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- strh r0, [r5, 0x8]
-_080B9464:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B9418
-
- thumb_func_start sub_80B9474
-sub_80B9474: @ 80B9474
- push {r4,lr}
- adds r4, r0, 0
- ldrb r0, [r4, 0xA]
- bl sub_80B9508
- lsls r0, 24
- cmp r0, 0
- beq _080B948E
- bl sub_80AF0B4
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_080B948E:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80B9474
-
- thumb_func_start sub_80B9494
-sub_80B9494: @ 80B9494
- push {lr}
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _080B94B6
- movs r0, 0x1F
- bl FieldEffectActiveListRemove
- ldr r0, =sub_80B91D4
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_080B94B6:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B9494
-
- thumb_func_start sub_80B94C4
-sub_80B94C4: @ 80B94C4
- push {lr}
- ldr r0, =gFieldEffectObjectTemplatePointers
- ldr r0, [r0, 0x68]
- movs r1, 0xFF
- movs r2, 0xB4
- movs r3, 0x1
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- ldr r1, =gSprites
- adds r2, r1
- ldrb r3, [r2, 0x5]
- movs r1, 0xF
- ands r1, r3
- movs r3, 0xD
- negs r3, r3
- ands r1, r3
- movs r3, 0x4
- orrs r1, r3
- strb r1, [r2, 0x5]
- ldr r1, =sub_80B957C
- str r1, [r2, 0x1C]
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80B94C4
-
- thumb_func_start sub_80B9508
-sub_80B9508: @ 80B9508
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gSprites
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrh r0, [r1, 0x3C]
- lsls r0, 24
- lsrs r0, 24
- bx lr
- .pool
- thumb_func_end sub_80B9508
-
- thumb_func_start sub_80B9524
-sub_80B9524: @ 80B9524
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- ldr r0, =gSprites
- adds r4, r0
- ldr r0, =sub_80B963C
- str r0, [r4, 0x1C]
- movs r1, 0
- movs r0, 0x78
- strh r0, [r4, 0x20]
- strh r1, [r4, 0x22]
- strh r1, [r4, 0x24]
- strh r1, [r4, 0x26]
- adds r0, r4, 0
- adds r0, 0x2E
- movs r2, 0x10
- bl memset
- movs r0, 0x40
- strh r0, [r4, 0x3A]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B9524
-
- thumb_func_start sub_80B9560
-sub_80B9560: @ 80B9560
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 24
- ldr r3, =gSprites
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r3
- strh r1, [r2, 0x3A]
- bx lr
- .pool
- thumb_func_end sub_80B9560
-
- thumb_func_start sub_80B957C
-sub_80B957C: @ 80B957C
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x3C
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _080B9628
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _080B95C0
- ldrb r0, [r4, 0x1]
- movs r1, 0x3
- orrs r0, r1
- strb r0, [r4, 0x1]
- ldr r0, =gUnknown_0855C548
- str r0, [r4, 0x10]
- adds r0, r4, 0
- bl InitSpriteAffineAnim
- adds r0, r4, 0
- movs r1, 0
- bl StartSpriteAffineAnim
- movs r0, 0x76
- strh r0, [r4, 0x20]
- ldr r0, =0x0000ffd0
- strh r0, [r4, 0x22]
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
- movs r0, 0x40
- strh r0, [r4, 0x30]
- adds r0, 0xC0
- strh r0, [r4, 0x32]
-_080B95C0:
- ldrh r0, [r4, 0x32]
- lsls r0, 16
- asrs r0, 24
- ldrh r1, [r4, 0x30]
- adds r0, r1
- strh r0, [r4, 0x30]
- movs r1, 0x30
- ldrsh r0, [r4, r1]
- movs r1, 0x78
- bl Cos
- strh r0, [r4, 0x24]
- movs r1, 0x30
- ldrsh r0, [r4, r1]
- movs r1, 0x78
- bl Sin
- strh r0, [r4, 0x26]
- ldrh r2, [r4, 0x32]
- movs r0, 0x32
- ldrsh r1, [r4, r0]
- ldr r0, =0x000007ff
- cmp r1, r0
- bgt _080B95F6
- adds r0, r2, 0
- adds r0, 0x60
- strh r0, [r4, 0x32]
-_080B95F6:
- movs r1, 0x30
- ldrsh r0, [r4, r1]
- cmp r0, 0x81
- ble _080B9628
- ldrh r0, [r4, 0x3C]
- adds r0, 0x1
- strh r0, [r4, 0x3C]
- ldrb r1, [r4, 0x1]
- movs r0, 0x4
- negs r0, r0
- ands r0, r1
- strb r0, [r4, 0x1]
- ldrb r0, [r4, 0x3]
- lsls r0, 26
- lsrs r0, 27
- bl FreeOamMatrix
- ldrb r1, [r4, 0x1]
- lsrs r1, 6
- ldrb r2, [r4, 0x3]
- lsrs r2, 6
- adds r0, r4, 0
- movs r3, 0
- bl CalcCenterToCornerVec
-_080B9628:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B957C
-
- thumb_func_start sub_80B963C
-sub_80B963C: @ 80B963C
- push {r4,r5,lr}
- adds r4, r0, 0
- movs r1, 0x32
- ldrsh r0, [r4, r1]
- movs r1, 0x8C
- bl Cos
- movs r5, 0
- strh r0, [r4, 0x24]
- movs r2, 0x32
- ldrsh r0, [r4, r2]
- movs r1, 0x48
- bl Sin
- strh r0, [r4, 0x26]
- ldrh r0, [r4, 0x32]
- adds r0, 0x4
- movs r1, 0xFF
- ands r0, r1
- strh r0, [r4, 0x32]
- movs r1, 0x3A
- ldrsh r0, [r4, r1]
- cmp r0, 0x40
- beq _080B969A
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- ldr r0, =gSprites
- adds r1, r0
- adds r3, r1, 0
- adds r3, 0x3E
- ldrb r2, [r3]
- movs r0, 0x3
- negs r0, r0
- ands r0, r2
- strb r0, [r3]
- ldrh r0, [r4, 0x24]
- ldrh r2, [r4, 0x20]
- adds r0, r2
- strh r0, [r1, 0x20]
- ldrh r0, [r4, 0x26]
- ldrh r2, [r4, 0x22]
- adds r0, r2
- subs r0, 0x8
- strh r0, [r1, 0x22]
- strh r5, [r1, 0x24]
- strh r5, [r1, 0x26]
-_080B969A:
- movs r1, 0x32
- ldrsh r0, [r4, r1]
- cmp r0, 0x7F
- ble _080B96A6
- movs r0, 0x1
- strh r0, [r4, 0x3C]
-_080B96A6:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B963C
-
- thumb_func_start sub_80B96B0
-sub_80B96B0: @ 80B96B0
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x3C
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _080B9784
- movs r2, 0x2E
- ldrsh r0, [r4, r2]
- cmp r0, 0
- bne _080B96FA
- ldrb r0, [r4, 0x1]
- movs r1, 0x3
- orrs r0, r1
- strb r0, [r4, 0x1]
- ldr r0, =gUnknown_0855C548
- str r0, [r4, 0x10]
- adds r0, r4, 0
- bl InitSpriteAffineAnim
- adds r0, r4, 0
- movs r1, 0x1
- bl StartSpriteAffineAnim
- movs r0, 0x5E
- strh r0, [r4, 0x20]
- ldr r0, =0x0000ffe0
- strh r0, [r4, 0x22]
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
- movs r0, 0xF0
- strh r0, [r4, 0x30]
- movs r0, 0x80
- lsls r0, 4
- strh r0, [r4, 0x32]
- movs r0, 0x80
- strh r0, [r4, 0x36]
-_080B96FA:
- ldrh r1, [r4, 0x32]
- lsls r1, 16
- asrs r1, 24
- ldrh r2, [r4, 0x30]
- adds r2, r1
- ldrh r0, [r4, 0x34]
- adds r0, r1
- strh r0, [r4, 0x34]
- movs r0, 0xFF
- ands r2, r0
- strh r2, [r4, 0x30]
- movs r3, 0x30
- ldrsh r0, [r4, r3]
- movs r1, 0x20
- bl Cos
- strh r0, [r4, 0x24]
- movs r1, 0x30
- ldrsh r0, [r4, r1]
- movs r1, 0x78
- bl Sin
- strh r0, [r4, 0x26]
- ldrh r1, [r4, 0x32]
- movs r2, 0x32
- ldrsh r0, [r4, r2]
- movs r2, 0x80
- lsls r2, 1
- cmp r0, r2
- ble _080B973C
- ldrh r0, [r4, 0x36]
- subs r0, r1, r0
- strh r0, [r4, 0x32]
-_080B973C:
- ldrh r1, [r4, 0x36]
- movs r3, 0x36
- ldrsh r0, [r4, r3]
- cmp r0, 0xFF
- bgt _080B974C
- adds r0, r1, 0
- adds r0, 0x18
- strh r0, [r4, 0x36]
-_080B974C:
- movs r1, 0x32
- ldrsh r0, [r4, r1]
- cmp r0, 0xFF
- bgt _080B9756
- strh r2, [r4, 0x32]
-_080B9756:
- movs r2, 0x34
- ldrsh r0, [r4, r2]
- cmp r0, 0x3B
- ble _080B9784
- ldrh r0, [r4, 0x3C]
- adds r0, 0x1
- strh r0, [r4, 0x3C]
- ldrb r1, [r4, 0x1]
- movs r0, 0x4
- negs r0, r0
- ands r0, r1
- strb r0, [r4, 0x1]
- ldrb r0, [r4, 0x3]
- lsls r0, 26
- lsrs r0, 27
- bl FreeOamMatrix
- adds r2, r4, 0
- adds r2, 0x3E
- ldrb r0, [r2]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r2]
-_080B9784:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B96B0
-
- thumb_func_start sub_80B9794
-sub_80B9794: @ 80B9794
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r4, 0
- bl sub_80B9524
- ldr r1, =gSprites
- lsls r0, r4, 4
- adds r0, r4
- lsls r0, 2
- adds r1, 0x1C
- adds r0, r1
- ldr r1, =sub_80B96B0
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B9794
-
- thumb_func_start sub_80B97C0
-sub_80B97C0: @ 80B97C0
- push {lr}
- ldr r0, =sub_80B97D4
- movs r1, 0xFE
- bl CreateTask
- movs r0, 0
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80B97C0
-
- thumb_func_start sub_80B97D4
-sub_80B97D4: @ 80B97D4
- push {lr}
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldr r3, =gUnknown_0855C550
- ldr r2, =gTasks
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- movs r2, 0x8
- ldrsh r1, [r0, r2]
- lsls r1, 2
- adds r1, r3
- ldr r1, [r1]
- bl _call_via_r1
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B97D4
-
- thumb_func_start sub_80B9804
-sub_80B9804: @ 80B9804
- push {r4-r6,lr}
- adds r5, r0, 0
- ldr r6, =gPlayerAvatar
- ldrb r1, [r6, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, =gMapObjects
- adds r4, r0, r1
- adds r0, r4, 0
- bl FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive
- lsls r0, 24
- cmp r0, 0
- beq _080B982E
- adds r0, r4, 0
- bl FieldObjectClearAnimIfSpecialAnimFinished
- lsls r0, 24
- cmp r0, 0
- beq _080B98A6
-_080B982E:
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- strh r0, [r5, 0x8]
- movs r0, 0x11
- strh r0, [r5, 0xC]
- ldrb r0, [r6]
- strh r0, [r5, 0x26]
- movs r0, 0x1
- strb r0, [r6, 0x6]
- bl SetPlayerAvatarStateMask
- ldrh r1, [r5, 0x26]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _080B9856
- ldrb r0, [r4, 0x1A]
- movs r1, 0
- bl sub_81555AC
-_080B9856:
- movs r0, 0x3
- bl GetPlayerAvatarGraphicsIdByStateId
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl FieldObjectSetGraphicsId
- bl CameraObjectReset2
- adds r0, r4, 0
- movs r1, 0x3
- bl FieldObjectTurn
- ldrb r1, [r4, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, =gSprites
- adds r0, r1
- movs r1, 0x16
- bl StartSpriteAnim
- ldrb r1, [r4, 0x1]
- movs r0, 0x21
- negs r0, r0
- ands r0, r1
- strb r0, [r4, 0x1]
- bl sub_80B94C4
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0xA]
- bl sub_80B9524
- ldrb r0, [r5, 0xA]
- ldrb r1, [r4, 0x4]
- bl sub_80B9560
-_080B98A6:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B9804
-
- thumb_func_start sub_80B98B8
-sub_80B98B8: @ 80B98B8
- push {r4,r5,lr}
- adds r5, r0, 0
- ldrh r1, [r5, 0xC]
- movs r2, 0xC
- ldrsh r0, [r5, r2]
- cmp r0, 0
- beq _080B98D0
- subs r0, r1, 0x1
- strh r0, [r5, 0xC]
- lsls r0, 16
- cmp r0, 0
- bne _080B9910
-_080B98D0:
- ldr r0, =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, =gMapObjects
- adds r0, r1
- ldrb r0, [r0, 0x4]
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- ldr r0, =gSprites
- adds r4, r0
- ldrb r0, [r5, 0xA]
- movs r1, 0x40
- bl sub_80B9560
- ldrh r0, [r4, 0x24]
- ldrh r1, [r4, 0x20]
- adds r0, r1
- movs r1, 0
- strh r0, [r4, 0x20]
- ldrh r0, [r4, 0x26]
- ldrh r2, [r4, 0x22]
- adds r0, r2
- strh r0, [r4, 0x22]
- strh r1, [r4, 0x24]
- strh r1, [r4, 0x26]
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- strh r0, [r5, 0x8]
- strh r1, [r5, 0xC]
-_080B9910:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B98B8
-
- thumb_func_start sub_80B9924
-sub_80B9924: @ 80B9924
- push {r4,lr}
- sub sp, 0x24
- adds r4, r0, 0
- ldr r1, =gUnknown_0855C56C
- mov r0, sp
- movs r2, 0x24
- bl memcpy
- ldr r0, =gPlayerAvatar
- ldrb r0, [r0, 0x4]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- ldr r0, =gSprites
- adds r1, r0
- movs r2, 0xC
- ldrsh r0, [r4, r2]
- lsls r0, 1
- add r0, sp
- ldrh r0, [r0]
- strh r0, [r1, 0x26]
- ldrh r0, [r4, 0xC]
- adds r0, 0x1
- strh r0, [r4, 0xC]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x11
- ble _080B9962
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_080B9962:
- add sp, 0x24
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B9924
-
- thumb_func_start sub_80B9978
-sub_80B9978: @ 80B9978
- push {r4-r6,lr}
- adds r6, r0, 0
- ldrb r0, [r6, 0xA]
- bl sub_80B9508
- lsls r0, 24
- cmp r0, 0
- beq _080B99DC
- ldr r0, =gPlayerAvatar
- ldrb r0, [r0, 0x5]
- lsls r5, r0, 3
- adds r5, r0
- lsls r5, 2
- ldr r0, =gMapObjects
- adds r5, r0
- ldrb r0, [r5, 0x4]
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- ldr r0, =gSprites
- adds r4, r0
- ldrb r1, [r5, 0x1]
- movs r0, 0x11
- negs r0, r0
- ands r0, r1
- strb r0, [r5, 0x1]
- movs r0, 0x10
- ldrsh r1, [r5, r0]
- movs r0, 0x12
- ldrsh r2, [r5, r0]
- adds r0, r5, 0
- bl sub_808EB08
- movs r0, 0
- strh r0, [r4, 0x24]
- strh r0, [r4, 0x26]
- adds r4, 0x3E
- ldrb r0, [r4]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r4]
- bl sub_808C114
- adds r0, r5, 0
- movs r1, 0x39
- bl FieldObjectSetSpecialAnim
- ldrh r0, [r6, 0x8]
- adds r0, 0x1
- strh r0, [r6, 0x8]
-_080B99DC:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B9978
-
- thumb_func_start sub_80B99F0
-sub_80B99F0: @ 80B99F0
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, =gMapObjects
- adds r0, r1
- bl FieldObjectClearAnimIfSpecialAnimFinished
- lsls r0, 24
- cmp r0, 0
- beq _080B9A18
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- ldrb r0, [r4, 0xA]
- bl sub_80B9794
-_080B9A18:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B99F0
-
- thumb_func_start sub_80B9A28
-sub_80B9A28: @ 80B9A28
- push {r4,lr}
- adds r4, r0, 0
- ldrb r0, [r4, 0xA]
- bl sub_80B9508
- lsls r0, 24
- cmp r0, 0
- beq _080B9A54
- movs r0, 0xA
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, =gSprites
- adds r0, r1
- bl DestroySprite
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r0, 0x10
- strh r0, [r4, 0xA]
-_080B9A54:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B9A28
-
- thumb_func_start sub_80B9A60
-sub_80B9A60: @ 80B9A60
- push {r4-r7,lr}
- adds r5, r0, 0
- ldrh r0, [r5, 0xA]
- subs r0, 0x1
- strh r0, [r5, 0xA]
- lsls r0, 16
- cmp r0, 0
- bne _080B9ACA
- ldr r6, =gPlayerAvatar
- ldrb r1, [r6, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, =gMapObjects
- adds r4, r0, r1
- movs r7, 0
- ldrh r1, [r5, 0x26]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _080B9A94
- movs r7, 0x3
- ldrb r0, [r4, 0x1A]
- movs r1, 0x1
- bl sub_81555AC
-_080B9A94:
- adds r0, r7, 0
- bl GetPlayerAvatarGraphicsIdByStateId
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl FieldObjectSetGraphicsId
- adds r0, r4, 0
- movs r1, 0x1
- bl FieldObjectTurn
- ldrh r0, [r5, 0x26]
- strb r0, [r6]
- movs r0, 0
- strb r0, [r6, 0x6]
- movs r0, 0x20
- bl FieldEffectActiveListRemove
- ldr r0, =sub_80B97D4
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_080B9ACA:
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B9A60
-
- thumb_func_start sub_80B9ADC
-sub_80B9ADC: @ 80B9ADC
- push {r4,lr}
- sub sp, 0x4
- ldr r4, =gFieldEffectArguments
- ldrb r0, [r4]
- ldrb r1, [r4, 0x4]
- ldrb r2, [r4, 0x8]
- mov r3, sp
- bl TryGetFieldObjectIdByLocalIdAndMap
- lsls r0, 24
- cmp r0, 0
- bne _080B9B2C
- ldr r0, =sub_80B9BE8
- movs r1, 0x50
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- mov r0, sp
- ldrb r0, [r0]
- strh r0, [r1, 0xC]
- ldr r0, [r4]
- strh r0, [r1, 0x14]
- ldr r0, [r4, 0x4]
- strh r0, [r1, 0x16]
- ldr r0, [r4, 0x8]
- strh r0, [r1, 0x18]
- b _080B9B32
- .pool
-_080B9B2C:
- movs r0, 0x41
- bl FieldEffectActiveListRemove
-_080B9B32:
- movs r0, 0
- add sp, 0x4
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80B9ADC
-
- thumb_func_start sub_80B9B3C
-sub_80B9B3C: @ 80B9B3C
- 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
- movs r1, 0xE
- ldrsh r0, [r4, r1]
- cmp r0, 0
- beq _080B9B78
- ldrh r0, [r4, 0xC]
- adds r0, 0x1
- strh r0, [r4, 0xC]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x14
- ble _080B9B7C
- movs r0, 0
- strh r0, [r4, 0xC]
- ldrh r1, [r4, 0xA]
- movs r2, 0xA
- ldrsh r0, [r4, r2]
- cmp r0, 0
- beq _080B9B7C
- subs r0, r1, 0x1
- b _080B9B7A
- .pool
-_080B9B78:
- movs r0, 0x4
-_080B9B7A:
- strh r0, [r4, 0xA]
-_080B9B7C:
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x1
- ble _080B9BB6
- movs r0, 0
- strh r0, [r4]
- ldrh r0, [r4, 0x2]
- adds r0, 0x1
- strh r0, [r4, 0x2]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080B9BAC
- ldrh r1, [r4, 0xA]
- negs r1, r1
- lsls r1, 16
- asrs r1, 16
- movs r0, 0
- bl SetCameraPanning
- b _080B9BB6
-_080B9BAC:
- movs r0, 0xA
- ldrsh r1, [r4, r0]
- movs r0, 0
- bl SetCameraPanning
-_080B9BB6:
- bl UpdateCameraPanning
- movs r1, 0xA
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _080B9BC8
- adds r0, r5, 0
- bl DestroyTask
-_080B9BC8:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_80B9B3C
-
- thumb_func_start sub_80B9BD0
-sub_80B9BD0: @ 80B9BD0
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- movs r0, 0x1
- strh r0, [r1, 0x16]
- bx lr
- .pool
- thumb_func_end sub_80B9BD0
-
- thumb_func_start sub_80B9BE8
-sub_80B9BE8: @ 80B9BE8
- 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 InstallCameraPanAheadCallback
- movs r0, 0
- bl SetCameraPanningCallback
- ldr r1, =gUnknown_0855C590
- movs r2, 0x2
- ldrsh r0, [r4, r2]
- lsls r0, 2
- adds r0, r1
- ldr r2, [r0]
- adds r0, r4, 0
- adds r1, r5, 0
- bl _call_via_r2
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B9BE8
-
- thumb_func_start sub_80B9C28
-sub_80B9C28: @ 80B9C28
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r0, =sub_80B9B3C
- movs r1, 0x5A
- bl CreateTask
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x58
- bl PlaySE
- strh r4, [r5, 0xA]
- ldrh r0, [r5, 0x2]
- adds r0, 0x1
- strh r0, [r5, 0x2]
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B9C28
-
- thumb_func_start sub_80B9C54
-sub_80B9C54: @ 80B9C54
- push {r4-r7,lr}
- sub sp, 0x4
- adds r7, r0, 0
- ldrh r0, [r7, 0x6]
- adds r0, 0x1
- strh r0, [r7, 0x6]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x78
- ble _080B9CC2
- ldr r2, =gMapObjects
- movs r1, 0x4
- ldrsh r0, [r7, r1]
- lsls r1, r0, 3
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r0, [r1, 0x4]
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- ldr r0, =gSprites
- adds r4, r0
- ldrb r0, [r1, 0x1]
- movs r2, 0x20
- orrs r0, r2
- strb r0, [r1, 0x1]
- ldr r6, =0x0000ffff
- ldr r5, =0x00007fff
- adds r0, r6, 0
- movs r1, 0x10
- adds r2, r5, 0
- bl BlendPalettes
- str r5, [sp]
- adds r0, r6, 0
- movs r1, 0
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- adds r0, r4, 0
- bl sub_80B9D24
- movs r0, 0x57
- bl PlaySE
- ldrb r0, [r7, 0xA]
- bl sub_80B9BD0
- movs r0, 0
- strh r0, [r7, 0x6]
- ldrh r0, [r7, 0x2]
- adds r0, 0x1
- strh r0, [r7, 0x2]
-_080B9CC2:
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B9C54
-
- thumb_func_start sub_80B9CDC
-sub_80B9CDC: @ 80B9CDC
- push {r4,r5,lr}
- adds r4, r0, 0
- lsls r1, 24
- lsrs r5, r1, 24
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _080B9D16
- ldr r0, =sub_80B9B3C
- bl FuncIsActiveTask
- lsls r0, 24
- cmp r0, 0
- bne _080B9D16
- bl InstallCameraPanAheadCallback
- ldrb r0, [r4, 0xC]
- ldrb r1, [r4, 0xE]
- ldrb r2, [r4, 0x10]
- bl RemoveFieldObjectByLocalIdAndMap
- movs r0, 0x41
- bl FieldEffectActiveListRemove
- adds r0, r5, 0
- bl DestroyTask
-_080B9D16:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B9CDC
-
- thumb_func_start sub_80B9D24
-sub_80B9D24: @ 80B9D24
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r6, r0, 0
- ldr r0, =gUnknown_03005DEC
- movs r1, 0
- ldrsh r2, [r0, r1]
- movs r3, 0x20
- ldrsh r0, [r6, r3]
- adds r2, r0
- movs r1, 0x24
- ldrsh r0, [r6, r1]
- adds r2, r0
- ldr r0, =gUnknown_03005DE8
- movs r3, 0
- ldrsh r0, [r0, r3]
- movs r3, 0x22
- ldrsh r1, [r6, r3]
- adds r0, r1
- movs r3, 0x26
- ldrsh r1, [r6, r3]
- adds r0, r1
- subs r0, 0x4
- movs r5, 0
- lsls r2, 16
- mov r8, r2
- lsls r7, r0, 16
-_080B9D5A:
- ldr r0, =gUnknown_0855C5EC
- mov r2, r8
- asrs r1, r2, 16
- asrs r2, r7, 16
- movs r3, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x40
- beq _080B9D96
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- ldr r0, =gSprites
- adds r4, r0
- lsls r1, r5, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl StartSpriteAnim
- strh r5, [r4, 0x2E]
- ldrb r1, [r6, 0x5]
- lsrs r1, 4
- lsls r1, 4
- ldrb r2, [r4, 0x5]
- movs r0, 0xF
- ands r0, r2
- orrs r0, r1
- strb r0, [r4, 0x5]
-_080B9D96:
- adds r5, 0x1
- cmp r5, 0x3
- ble _080B9D5A
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B9D24
-
- thumb_func_start sub_80B9DB8
-sub_80B9DB8: @ 80B9DB8
- push {lr}
- adds r1, r0, 0
- movs r2, 0x2E
- ldrsh r0, [r1, r2]
- cmp r0, 0x1
- beq _080B9DE4
- cmp r0, 0x1
- bgt _080B9DCE
- cmp r0, 0
- beq _080B9DD8
- b _080B9E02
-_080B9DCE:
- cmp r0, 0x2
- beq _080B9DF0
- cmp r0, 0x3
- beq _080B9DF6
- b _080B9E02
-_080B9DD8:
- ldrh r0, [r1, 0x20]
- subs r0, 0x10
- strh r0, [r1, 0x20]
- ldrh r0, [r1, 0x22]
- subs r0, 0xC
- b _080B9E00
-_080B9DE4:
- ldrh r0, [r1, 0x20]
- adds r0, 0x10
- strh r0, [r1, 0x20]
- ldrh r0, [r1, 0x22]
- subs r0, 0xC
- b _080B9E00
-_080B9DF0:
- ldrh r0, [r1, 0x20]
- subs r0, 0x10
- b _080B9DFA
-_080B9DF6:
- ldrh r0, [r1, 0x20]
- adds r0, 0x10
-_080B9DFA:
- strh r0, [r1, 0x20]
- ldrh r0, [r1, 0x22]
- adds r0, 0xC
-_080B9E00:
- strh r0, [r1, 0x22]
-_080B9E02:
- ldrh r0, [r1, 0x20]
- adds r0, 0x4
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0xF8
- bhi _080B9E1E
- movs r0, 0x22
- ldrsh r2, [r1, r0]
- movs r0, 0x4
- negs r0, r0
- cmp r2, r0
- blt _080B9E1E
- cmp r2, 0xA4
- ble _080B9E24
-_080B9E1E:
- adds r0, r1, 0
- bl DestroySprite
-_080B9E24:
- pop {r0}
- bx r0
- thumb_func_end sub_80B9DB8
-
- thumb_func_start sub_80B9E28
-sub_80B9E28: @ 80B9E28
- push {r4-r7,lr}
- sub sp, 0x4
- ldr r7, =gFieldEffectArguments
- ldrb r0, [r7]
- ldrb r1, [r7, 0x4]
- ldrb r2, [r7, 0x8]
- mov r3, sp
- bl TryGetFieldObjectIdByLocalIdAndMap
- lsls r0, 24
- cmp r0, 0
- bne _080B9EBE
- mov r0, sp
- ldrb r0, [r0]
- lsls r4, r0, 3
- adds r4, r0
- lsls r4, 2
- ldr r0, =gMapObjects
- adds r4, r0
- movs r0, 0x10
- ldrsh r5, [r4, r0]
- subs r5, 0x7
- movs r0, 0x12
- ldrsh r6, [r4, r0]
- subs r6, 0x7
- ldr r1, [r7, 0xC]
- subs r5, r1, r5
- lsls r5, 4
- ldr r2, [r7, 0x10]
- subs r6, r2, r6
- lsls r6, 4
- adds r1, 0x7
- lsls r1, 16
- asrs r1, 16
- adds r2, 0x7
- lsls r2, 16
- asrs r2, 16
- adds r0, r4, 0
- bl npc_coords_shift
- ldr r0, =sub_80B9EDC
- movs r1, 0x50
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r1, =gTasks
- lsls r2, r0, 2
- adds r2, r0
- lsls r2, 3
- adds r2, r1
- ldrb r0, [r4, 0x4]
- strh r0, [r2, 0xA]
- ldr r3, =gSprites
- ldrb r1, [r4, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- ldrh r0, [r0, 0x20]
- adds r0, r5
- strh r0, [r2, 0xC]
- ldrb r1, [r4, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- ldrh r0, [r0, 0x22]
- adds r0, r6
- strh r0, [r2, 0xE]
- ldr r0, [r7, 0x14]
- strh r0, [r2, 0x18]
- mov r0, sp
- ldrb r0, [r0]
- strh r0, [r2, 0x1A]
-_080B9EBE:
- movs r0, 0
- add sp, 0x4
- pop {r4-r7}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80B9E28
-
- thumb_func_start sub_80B9EDC
-sub_80B9EDC: @ 80B9EDC
- 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 r5, r0, r1
- movs r0, 0x2
- ldrsh r1, [r5, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, =gSprites
- adds r6, r0, r1
- movs r1, 0
- ldrsh r0, [r5, r1]
- cmp r0, 0
- beq _080B9F10
- cmp r0, 0x1
- beq _080B9F4E
- b _080B9FAC
- .pool
-_080B9F10:
- ldrh r0, [r6, 0x20]
- lsls r0, 4
- strh r0, [r5, 0x8]
- ldrh r0, [r6, 0x22]
- lsls r0, 4
- strh r0, [r5, 0xA]
- movs r2, 0x4
- ldrsh r0, [r5, r2]
- lsls r0, 4
- movs r2, 0x8
- ldrsh r1, [r5, r2]
- subs r0, r1
- movs r2, 0x10
- ldrsh r1, [r5, r2]
- bl __divsi3
- strh r0, [r5, 0xC]
- movs r1, 0x6
- ldrsh r0, [r5, r1]
- lsls r0, 4
- movs r2, 0xA
- ldrsh r1, [r5, r2]
- subs r0, r1
- movs r2, 0x10
- ldrsh r1, [r5, r2]
- bl __divsi3
- strh r0, [r5, 0xE]
- ldrh r0, [r5]
- adds r0, 0x1
- strh r0, [r5]
-_080B9F4E:
- ldrh r1, [r5, 0x10]
- movs r2, 0x10
- ldrsh r0, [r5, r2]
- cmp r0, 0
- beq _080B9F7C
- subs r0, r1, 0x1
- strh r0, [r5, 0x10]
- ldrh r1, [r5, 0xC]
- ldrh r0, [r5, 0x8]
- adds r1, r0
- strh r1, [r5, 0x8]
- ldrh r0, [r5, 0xE]
- ldrh r2, [r5, 0xA]
- adds r0, r2
- strh r0, [r5, 0xA]
- lsls r1, 16
- asrs r1, 20
- strh r1, [r6, 0x20]
- ldrh r0, [r5, 0xA]
- lsls r0, 16
- asrs r0, 20
- strh r0, [r6, 0x22]
- b _080B9FAC
-_080B9F7C:
- movs r1, 0x12
- ldrsh r0, [r5, r1]
- lsls r4, r0, 3
- adds r4, r0
- lsls r4, 2
- ldr r0, =gMapObjects
- adds r4, r0
- ldrh r0, [r5, 0x4]
- strh r0, [r6, 0x20]
- ldrh r0, [r5, 0x6]
- strh r0, [r6, 0x22]
- adds r0, r4, 0
- bl npc_coords_shift_still
- ldrb r0, [r4]
- movs r1, 0x8
- orrs r0, r1
- strb r0, [r4]
- movs r0, 0x42
- bl FieldEffectActiveListRemove
- adds r0, r7, 0
- bl DestroyTask
-_080B9FAC:
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80B9EDC
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s
index 754a8f7ff..77f8213b3 100644
--- a/asm/field_effect_helpers.s
+++ b/asm/field_effect_helpers.s
@@ -204,7 +204,7 @@ _0815405A:
bl pal_patch_for_npc
_0815406A:
adds r0, r4, 0
- bl sub_80ABE18
+ bl UpdateSpritePaletteWithWeather
_08154070:
pop {r4}
pop {r0}
@@ -227,7 +227,7 @@ npc_pal_op_A: @ 8154078
adds r1, r4, 0
bl pal_patch_for_npc
adds r0, r4, 0
- bl sub_80ABE18
+ bl UpdateSpritePaletteWithWeather
_0815409C:
pop {r4}
pop {r0}
diff --git a/asm/field_player_avatar.s b/asm/field_player_avatar.s
index cd4f83681..f5acc1e3e 100644
--- a/asm/field_player_avatar.s
+++ b/asm/field_player_avatar.s
@@ -1071,7 +1071,7 @@ sub_808B164: @ 808B164
adds r0, r6, 0
adds r1, r5, 0
adds r2, r4, 0
- bl sub_80FBFD4
+ bl CheckForRotatingGatePuzzleCollisionWithoutAnimation
cmp r0, 0
beq _0808B1A2
movs r0, 0x8
diff --git a/asm/field_screen.s b/asm/field_screen.s
index d05028cc6..e35c768dd 100644
--- a/asm/field_screen.s
+++ b/asm/field_screen.s
@@ -1764,8 +1764,8 @@ _080ABDE4:
.pool
thumb_func_end FadeScreen
- thumb_func_start sub_80ABDFC
-sub_80ABDFC: @ 80ABDFC
+ thumb_func_start IsWeatherNotFadingIn
+IsWeatherNotFadingIn: @ 80ABDFC
ldr r0, =gUnknown_02038454
ldr r1, =0x000006c6
adds r0, r1
@@ -1777,11 +1777,11 @@ sub_80ABDFC: @ 80ABDFC
lsrs r0, 31
bx lr
.pool
- thumb_func_end sub_80ABDFC
+ thumb_func_end IsWeatherNotFadingIn
- thumb_func_start sub_80ABE18
-@ void sub_80ABE18(u8 a1)
-sub_80ABE18: @ 80ABE18
+ thumb_func_start UpdateSpritePaletteWithWeather
+@ void UpdateSpritePaletteWithWeather(u8 a1)
+UpdateSpritePaletteWithWeather: @ 80ABE18
push {r4-r6,lr}
lsls r0, 24
lsrs r0, 8
@@ -1882,10 +1882,10 @@ _080ABEF4:
pop {r0}
bx r0
.pool
- thumb_func_end sub_80ABE18
+ thumb_func_end UpdateSpritePaletteWithWeather
- thumb_func_start sub_80ABF00
-sub_80ABF00: @ 80ABF00
+ thumb_func_start ApplyWeatherGammaShiftToPal
+ApplyWeatherGammaShiftToPal: @ 80ABF00
push {lr}
lsls r0, 24
lsrs r0, 24
@@ -1900,7 +1900,7 @@ sub_80ABF00: @ 80ABF00
pop {r0}
bx r0
.pool
- thumb_func_end sub_80ABF00
+ thumb_func_end ApplyWeatherGammaShiftToPal
thumb_func_start sub_80ABF20
sub_80ABF20: @ 80ABF20
@@ -1939,7 +1939,7 @@ sub_80ABF4C: @ 80ABF4C
movs r2, 0x20
bl LoadPalette
ldrb r0, [r4]
- bl sub_80ABE18
+ bl UpdateSpritePaletteWithWeather
pop {r4}
pop {r0}
bx r0
@@ -2504,8 +2504,8 @@ sub_80AC3E4: @ 80AC3E4
.pool
thumb_func_end sub_80AC3E4
- thumb_func_start sub_80AC3F8
-sub_80AC3F8: @ 80AC3F8
+ thumb_func_start PreservePaletteInWeather
+PreservePaletteInWeather: @ 80AC3F8
push {r4,r5,lr}
adds r4, r0, 0
lsls r4, 24
@@ -2524,16 +2524,16 @@ sub_80AC3F8: @ 80AC3F8
pop {r0}
bx r0
.pool
- thumb_func_end sub_80AC3F8
+ thumb_func_end PreservePaletteInWeather
- thumb_func_start sub_80AC428
-sub_80AC428: @ 80AC428
+ thumb_func_start ResetPreservedPalettesInWeather
+ResetPreservedPalettesInWeather: @ 80AC428
ldr r1, =gUnknown_03000F50
ldr r0, =gUnknown_0854C250
str r0, [r1]
bx lr
.pool
- thumb_func_end sub_80AC428
+ thumb_func_end ResetPreservedPalettesInWeather
thumb_func_start sub_80AC438
sub_80AC438: @ 80AC438
@@ -7855,7 +7855,7 @@ pal_fill_for_maplights: @ 80AF040
adds r4, r0, 0
lsls r4, 24
lsrs r4, 24
- bl sav1_map_get_light_level
+ bl Overworld_GetMapTypeOfSaveblockLocation
adds r1, r0, 0
lsls r1, 24
lsrs r1, 24
@@ -7910,7 +7910,7 @@ pal_fill_black: @ 80AF0A0
thumb_func_start sub_80AF0B4
sub_80AF0B4: @ 80AF0B4
push {r4,lr}
- bl sav1_map_get_light_level
+ bl Overworld_GetMapTypeOfSaveblockLocation
adds r4, r0, 0
lsls r4, 24
lsrs r4, 24
@@ -8702,7 +8702,7 @@ sub_80AF710: @ 80AF710
thumb_func_start sub_80AF71C
sub_80AF71C: @ 80AF71C
push {lr}
- bl sub_80ABDFC
+ bl IsWeatherNotFadingIn
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
@@ -8861,7 +8861,7 @@ sub_80AF87C: @ 80AF87C
movs r0, 0x1
bl sub_8085540
bl ScriptContext2_Enable
- bl save_serialize_npcs
+ bl SaveMapObjects
bl music_something
bl sub_80AF0B4
movs r0, 0x2D
@@ -8987,7 +8987,7 @@ _080AF994:
beq _080AF9D0
b _080AF9E8
_080AF99A:
- bl sub_8009FAC
+ bl ClearLinkCallback_2
movs r0, 0x1
movs r1, 0
bl FadeScreen
@@ -9015,7 +9015,7 @@ _080AF9D0:
cmp r0, 0
bne _080AF9E8
bl warp_in
- ldr r0, =c2_load_new_map
+ ldr r0, =CB2_LoadMap
bl SetMainCallback2
adds r0, r5, 0
bl DestroyTask
@@ -9087,7 +9087,7 @@ _080AFA64:
b _080AFA7C
_080AFA6C:
bl warp_in
- ldr r0, =c2_load_new_map
+ ldr r0, =CB2_LoadMap
bl SetMainCallback2
adds r0, r6, 0
bl DestroyTask
@@ -10060,7 +10060,7 @@ _080B0222:
b _080B023A
_080B022A:
bl warp_in
- ldr r0, =c2_load_new_map
+ ldr r0, =CB2_LoadMap
bl SetMainCallback2
adds r0, r5, 0
bl DestroyTask
@@ -10478,7 +10478,7 @@ sub_80B058C: @ 80B058C
thumb_func_start sub_80B05B4
sub_80B05B4: @ 80B05B4
push {lr}
- bl sub_80859B0
+ bl Overworld_FadeOutMapMusic
ldr r0, =task50_0807F0C8
movs r1, 0x50
bl CreateTask
diff --git a/asm/field_specials.s b/asm/field_specials.s
index 29aca304f..852d5ce7c 100644
--- a/asm/field_specials.s
+++ b/asm/field_specials.s
@@ -20,7 +20,7 @@ Special_ShowDiploma: @ 8137CB4
Special_ViewWallClock: @ 8137CC8
push {lr}
ldr r0, =gMain
- ldr r1, =c2_exit_to_overworld_2_switch
+ ldr r1, =CB2_ReturnToField
str r1, [r0, 0x8]
ldr r0, =Cb2_ViewWallClock
bl SetMainCallback2
@@ -1906,7 +1906,7 @@ _08138C7E:
thumb_func_start CB2_FieldShowRegionMap
CB2_FieldShowRegionMap: @ 8138C84
push {lr}
- ldr r0, =c2_exit_to_overworld_1_continue_scripts_restart_music
+ ldr r0, =CB2_ReturnToFieldContinueScript
bl sub_817018C
pop {r0}
bx r0
@@ -3155,7 +3155,7 @@ SetRoute119Weather: @ 8139648
bl get_map_light_from_warp0
lsls r0, 24
lsrs r0, 24
- bl is_light_level_1_2_3_5_or_6
+ bl is_map_type_1_2_3_5_or_6
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
@@ -3173,7 +3173,7 @@ SetRoute123Weather: @ 8139668
bl get_map_light_from_warp0
lsls r0, 24
lsrs r0, 24
- bl is_light_level_1_2_3_5_or_6
+ bl is_map_type_1_2_3_5_or_6
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
@@ -3388,7 +3388,7 @@ _0813980C:
_0813981C:
ldrh r5, [r2]
adds r0, r5, 0
- bl sub_80EF370
+ bl CountDigits
adds r3, r0, 0
lsls r3, 24
lsrs r3, 24
@@ -3408,7 +3408,7 @@ _0813983C:
adds r4, 0x4
ldrh r5, [r2]
adds r0, r5, 0
- bl sub_80EF370
+ bl CountDigits
adds r3, r0, 0
lsls r3, 24
lsrs r3, 24
@@ -4894,7 +4894,7 @@ sub_813A46C: @ 813A46C
lsrs r0, 24
mov r1, sp
movs r2, 0
- bl sub_81AE860
+ bl ListMenuGetScrollAndRow
ldr r1, =gUnknown_0203AB68
mov r0, sp
ldrh r0, [r0]
@@ -4903,7 +4903,7 @@ sub_813A46C: @ 813A46C
lsls r0, 24
lsrs r0, 24
mov r1, sp
- bl sub_81AE838
+ bl ListMenuGetCurrentItemArrayId
ldrh r0, [r4, 0x1E]
ldr r5, =gUnknown_0203AB6A
ldrh r1, [r5]
@@ -5007,7 +5007,7 @@ sub_813A570: @ 813A570
lsls r0, 24
lsrs r0, 24
mov r1, sp
- bl sub_81AE838
+ bl ListMenuGetCurrentItemArrayId
ldrh r0, [r4, 0x1E]
mov r1, sp
ldrh r1, [r1]
@@ -5019,7 +5019,7 @@ sub_813A570: @ 813A570
lsrs r0, 24
movs r1, 0
movs r2, 0
- bl sub_81AE6C8
+ bl DestroyListMenuTask
ldr r0, =gUnknown_0203AB64
ldr r0, [r0]
bl Free
@@ -6012,7 +6012,7 @@ sub_813ADD4: @ 813ADD4
adds r4, 0x16
add r1, sp, 0x14
adds r2, r4, 0
- bl sub_81AE860
+ bl ListMenuGetScrollAndRow
ldrh r0, [r6, 0x22]
lsls r0, 24
lsrs r0, 24
@@ -6173,7 +6173,7 @@ sub_813AF48: @ 813AF48
lsrs r0, 24
movs r1, 0
movs r2, 0
- bl sub_81AE6C8
+ bl DestroyListMenuTask
ldr r0, =gUnknown_0203AB64
ldr r0, [r0]
bl Free
@@ -6817,7 +6817,7 @@ sub_813B4E0: @ 813B4E0
push {lr}
ldr r0, =gSpecialVar_0x8004
ldrh r0, [r0]
- bl sub_81D15CC
+ bl GetRematchIdxByTrainerIdx
cmp r0, 0
blt _0813B50C
movs r1, 0xAE
@@ -7126,7 +7126,7 @@ _0813B790:
b _0813B7C6
.pool
_0813B7A8:
- ldr r0, =gLinkVSyncDisabled
+ ldr r0, =gWirelessCommType
ldrb r0, [r0]
cmp r0, 0
bne _0813B7B4
@@ -7153,14 +7153,14 @@ sub_813B7D8: @ 813B7D8
ldrh r0, [r0]
cmp r0, 0
bne _0813B7F8
- ldr r2, =c2_exit_to_overworld_1_continue_scripts_restart_music
+ ldr r2, =CB2_ReturnToFieldContinueScript
movs r0, 0
movs r1, 0x1
bl DoRayquazaScene
b _0813B802
.pool
_0813B7F8:
- ldr r2, =c2_exit_to_overworld_1_continue_scripts_restart_music
+ ldr r2, =CB2_ReturnToFieldContinueScript
movs r0, 0x1
movs r1, 0
bl DoRayquazaScene
diff --git a/asm/field_tasks.s b/asm/field_tasks.s
index 4befe0ca7..09f5bbc9b 100644
--- a/asm/field_tasks.s
+++ b/asm/field_tasks.s
@@ -88,7 +88,7 @@ sub_809D908: @ 809D908
bl sub_809D8B8
adds r0, r4, 0x2
adds r1, r4, 0x4
- bl wild_encounter_related
+ bl UpdateAmbientCry
_0809D930:
pop {r4}
pop {r0}
@@ -96,8 +96,8 @@ _0809D930:
.pool
thumb_func_end sub_809D908
- thumb_func_start overworld_ensure_per_step_coros_running
-overworld_ensure_per_step_coros_running: @ 809D93C
+ thumb_func_start SetUpFieldTasks
+SetUpFieldTasks: @ 809D93C
push {r4,r5,lr}
ldr r5, =task_per_step_callback_manager
adds r0, r5, 0
@@ -142,7 +142,7 @@ _0809D992:
pop {r0}
bx r0
.pool
- thumb_func_end overworld_ensure_per_step_coros_running
+ thumb_func_end SetUpFieldTasks
thumb_func_start ActivatePerStepCallback
ActivatePerStepCallback: @ 809D9A8
@@ -182,8 +182,8 @@ _0809D9EA:
bx r0
thumb_func_end ActivatePerStepCallback
- thumb_func_start wild_encounter_reset_coro_args
-wild_encounter_reset_coro_args: @ 809D9F0
+ thumb_func_start ResetFieldTasksArgs
+ResetFieldTasksArgs: @ 809D9F0
push {lr}
ldr r0, =task_per_step_callback_manager
bl FindTaskIdByFunc
@@ -207,7 +207,7 @@ _0809DA1A:
pop {r0}
bx r0
.pool
- thumb_func_end wild_encounter_reset_coro_args
+ thumb_func_end ResetFieldTasksArgs
thumb_func_start nullsub_34
nullsub_34: @ 809DA2C
diff --git a/asm/fieldmap.s b/asm/fieldmap.s
deleted file mode 100644
index dbb8a3fa3..000000000
--- a/asm/fieldmap.s
+++ /dev/null
@@ -1,2285 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start mapconnection_get_mapheader
-mapconnection_get_mapheader: @ 8087D44
- push {lr}
- ldrb r2, [r0, 0x8]
- ldrb r1, [r0, 0x9]
- adds r0, r2, 0
- bl get_mapheader_by_bank_and_number
- pop {r1}
- bx r1
- thumb_func_end mapconnection_get_mapheader
-
- thumb_func_start not_trainer_hill_battle_pyramid
-not_trainer_hill_battle_pyramid: @ 8087D54
- push {r4,lr}
- ldr r4, =gMapHeader
- adds r0, r4, 0
- bl mapheader_copy_mapdata_with_padding
- ldr r0, [r4, 0x4]
- bl sub_80E8EE0
- bl mapheader_run_script_with_tag_x1
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end not_trainer_hill_battle_pyramid
-
- thumb_func_start sub_8087D74
-sub_8087D74: @ 8087D74
- push {r4,lr}
- ldr r4, =gMapHeader
- adds r0, r4, 0
- bl mapheader_copy_mapdata_with_padding
- movs r0, 0
- bl sub_80E9238
- ldr r0, [r4, 0x4]
- bl sub_80E8EE0
- bl mapdata_from_sav2
- bl mapheader_run_script_with_tag_x1
- ldr r1, =gUnknown_03005DC0
- ldr r0, [r1]
- ldr r1, [r1, 0x4]
- bl UpdateTVScreensOnMap
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8087D74
-
- thumb_func_start battle_pyramid_map_load_related
-battle_pyramid_map_load_related: @ 8087DAC
- push {r4,r5,lr}
- sub sp, 0x4
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, =0x03ff03ff
- str r0, [sp]
- ldr r5, =gUnknown_02032318
- ldr r2, =0x01001400
- mov r0, sp
- adds r1, r5, 0
- bl CpuFastSet
- adds r0, r5, 0
- adds r1, r4, 0
- bl sub_81AA078
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end battle_pyramid_map_load_related
-
- thumb_func_start trainer_hill_map_load_related
-trainer_hill_map_load_related: @ 8087DE4
- push {r4,lr}
- sub sp, 0x4
- ldr r0, =0x03ff03ff
- str r0, [sp]
- ldr r4, =gUnknown_02032318
- ldr r2, =0x01001400
- mov r0, sp
- adds r1, r4, 0
- bl CpuFastSet
- adds r0, r4, 0
- bl sub_81D5FB4
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end trainer_hill_map_load_related
-
- thumb_func_start mapheader_copy_mapdata_with_padding
-@ void mapheader_copy_mapdata_with_padding(struct mapheader *mapHeader)
-mapheader_copy_mapdata_with_padding: @ 8087E14
- push {r4-r6,lr}
- sub sp, 0x4
- adds r6, r0, 0
- ldr r5, [r6]
- ldr r0, =0x03ff03ff
- str r0, [sp]
- ldr r4, =gUnknown_02032318
- ldr r2, =0x01001400
- mov r0, sp
- adds r1, r4, 0
- bl CpuFastSet
- ldr r2, =gUnknown_03005DC0
- str r4, [r2, 0x8]
- ldr r1, [r5]
- adds r1, 0xF
- str r1, [r2]
- ldr r0, [r5, 0x4]
- adds r0, 0xE
- str r0, [r2, 0x4]
- muls r1, r0
- movs r0, 0xA0
- lsls r0, 6
- cmp r1, r0
- bgt _08087E56
- ldr r0, [r5, 0xC]
- ldrh r1, [r5]
- ldrh r2, [r5, 0x4]
- bl map_copy_with_padding
- adds r0, r6, 0
- bl mapheader_copy_mapdata_of_adjacent_maps
-_08087E56:
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end mapheader_copy_mapdata_with_padding
-
- thumb_func_start map_copy_with_padding
-@ int map_copy_with_padding(void *src)
-map_copy_with_padding: @ 8087E70
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- adds r7, r0, 0
- lsls r1, 16
- lsrs r1, 16
- mov r8, r1
- lsls r2, 16
- lsrs r2, 16
- ldr r0, =gUnknown_03005DC0
- ldr r4, [r0, 0x8]
- ldr r1, [r0]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 1
- adds r0, 0xE
- adds r4, r0
- cmp r2, 0
- beq _08087EB8
- mov r0, r8
- lsls r6, r0, 1
- adds r5, r2, 0
- movs r0, 0x1E
- adds r0, r6
- mov r9, r0
-_08087EA4:
- adds r0, r7, 0
- adds r1, r4, 0
- mov r2, r8
- bl CpuSet
- add r4, r9
- adds r7, r6
- subs r5, 0x1
- cmp r5, 0
- bne _08087EA4
-_08087EB8:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end map_copy_with_padding
-
- thumb_func_start mapheader_copy_mapdata_of_adjacent_maps
-@ void mapheader_copy_mapdata_of_adjacent_maps(struct mapheader *mapHeader)
-mapheader_copy_mapdata_of_adjacent_maps: @ 8087EC8
- push {r4-r7,lr}
- adds r6, r0, 0
- ldr r0, [r6, 0xC]
- cmp r0, 0
- beq _08087F4C
- ldr r1, [r0]
- ldr r5, [r0, 0x4]
- ldr r2, =gUnknown_02037340
- ldr r0, =gUnknown_08486EF8
- ldr r0, [r0]
- str r0, [r2]
- cmp r1, 0
- ble _08087F4C
- adds r4, r2, 0
- adds r7, r1, 0
-_08087EE6:
- adds r0, r5, 0
- bl mapconnection_get_mapheader
- adds r1, r0, 0
- ldr r2, [r5, 0x4]
- ldrb r0, [r5]
- cmp r0, 0x2
- beq _08087F1E
- cmp r0, 0x2
- bgt _08087F08
- cmp r0, 0x1
- beq _08087F12
- b _08087F44
- .pool
-_08087F08:
- cmp r0, 0x3
- beq _08087F2A
- cmp r0, 0x4
- beq _08087F36
- b _08087F44
-_08087F12:
- adds r0, r6, 0
- bl sub_8087FB8
- ldrb r0, [r4]
- movs r1, 0x1
- b _08087F40
-_08087F1E:
- adds r0, r6, 0
- bl sub_8088020
- ldrb r0, [r4]
- movs r1, 0x2
- b _08087F40
-_08087F2A:
- adds r0, r6, 0
- bl sub_8088080
- ldrb r0, [r4]
- movs r1, 0x4
- b _08087F40
-_08087F36:
- adds r0, r6, 0
- bl sub_80880E0
- ldrb r0, [r4]
- movs r1, 0x8
-_08087F40:
- orrs r0, r1
- strb r0, [r4]
-_08087F44:
- subs r7, 0x1
- adds r5, 0xC
- cmp r7, 0
- bne _08087EE6
-_08087F4C:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end mapheader_copy_mapdata_of_adjacent_maps
-
- thumb_func_start sub_8087F54
-sub_8087F54: @ 8087F54
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r5, [sp, 0x18]
- ldr r4, [r2]
- ldr r7, [r4]
- adds r2, r7, 0
- muls r2, r5
- adds r2, r3
- lsls r2, 1
- ldr r3, [r4, 0xC]
- adds r6, r3, r2
- ldr r3, =gUnknown_03005DC0
- ldr r2, [r3]
- muls r1, r2
- adds r1, r0
- lsls r1, 1
- ldr r0, [r3, 0x8]
- adds r5, r0, r1
- ldr r0, [sp, 0x20]
- cmp r0, 0
- ble _08087FA6
- adds r4, r0, 0
- ldr r3, =0x001fffff
- mov r8, r3
-_08087F86:
- adds r0, r6, 0
- adds r1, r5, 0
- ldr r2, [sp, 0x1C]
- mov r3, r8
- ands r2, r3
- bl CpuSet
- ldr r0, =gUnknown_03005DC0
- ldr r0, [r0]
- lsls r0, 1
- adds r5, r0
- lsls r0, r7, 1
- adds r6, r0
- subs r4, 0x1
- cmp r4, 0
- bne _08087F86
-_08087FA6:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8087F54
-
- thumb_func_start sub_8087FB8
-sub_8087FB8: @ 8087FB8
- push {r4-r7,lr}
- sub sp, 0xC
- adds r3, r0, 0
- adds r5, r1, 0
- cmp r5, 0
- beq _08088012
- ldr r0, [r5]
- ldr r4, [r0]
- adds r2, 0x7
- ldr r0, [r3]
- ldr r0, [r0, 0x4]
- adds r7, r0, 0x7
- cmp r2, 0
- bge _08087FEC
- negs r6, r2
- adds r2, r4
- ldr r0, =gUnknown_03005DC0
- ldr r3, [r0]
- cmp r2, r3
- bge _08087FE2
- adds r3, r2, 0
-_08087FE2:
- movs r2, 0
- b _08087FFC
- .pool
-_08087FEC:
- movs r6, 0
- adds r0, r2, r4
- ldr r1, =gUnknown_03005DC0
- ldr r1, [r1]
- subs r3, r1, r2
- cmp r0, r1
- bge _08087FFC
- adds r3, r4, 0
-_08087FFC:
- movs r0, 0
- str r0, [sp]
- str r3, [sp, 0x4]
- movs r0, 0x7
- str r0, [sp, 0x8]
- adds r0, r2, 0
- adds r1, r7, 0
- adds r2, r5, 0
- adds r3, r6, 0
- bl sub_8087F54
-_08088012:
- add sp, 0xC
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8087FB8
-
- thumb_func_start sub_8088020
-sub_8088020: @ 8088020
- push {r4-r7,lr}
- sub sp, 0xC
- adds r5, r1, 0
- cmp r5, 0
- beq _08088074
- ldr r0, [r5]
- ldr r4, [r0]
- ldr r0, [r0, 0x4]
- adds r2, 0x7
- subs r7, r0, 0x7
- cmp r2, 0
- bge _08088050
- negs r6, r2
- adds r2, r4
- ldr r0, =gUnknown_03005DC0
- ldr r3, [r0]
- cmp r2, r3
- bge _08088046
- adds r3, r2, 0
-_08088046:
- movs r2, 0
- b _08088060
- .pool
-_08088050:
- movs r6, 0
- adds r0, r2, r4
- ldr r1, =gUnknown_03005DC0
- ldr r1, [r1]
- subs r3, r1, r2
- cmp r0, r1
- bge _08088060
- adds r3, r4, 0
-_08088060:
- str r7, [sp]
- str r3, [sp, 0x4]
- movs r0, 0x7
- str r0, [sp, 0x8]
- adds r0, r2, 0
- movs r1, 0
- adds r2, r5, 0
- adds r3, r6, 0
- bl sub_8087F54
-_08088074:
- add sp, 0xC
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8088020
-
- thumb_func_start sub_8088080
-sub_8088080: @ 8088080
- push {r4-r7,lr}
- sub sp, 0xC
- adds r5, r1, 0
- cmp r5, 0
- beq _080880D4
- ldr r0, [r5]
- ldr r1, [r0]
- ldr r4, [r0, 0x4]
- adds r2, 0x7
- subs r7, r1, 0x7
- cmp r2, 0
- bge _080880B0
- negs r6, r2
- adds r1, r2, r4
- ldr r0, =gUnknown_03005DC0
- ldr r3, [r0, 0x4]
- cmp r1, r3
- bge _080880A6
- adds r3, r1, 0
-_080880A6:
- movs r2, 0
- b _080880C0
- .pool
-_080880B0:
- movs r6, 0
- adds r0, r2, r4
- ldr r1, =gUnknown_03005DC0
- ldr r1, [r1, 0x4]
- subs r3, r1, r2
- cmp r0, r1
- bge _080880C0
- adds r3, r4, 0
-_080880C0:
- str r6, [sp]
- movs r0, 0x7
- str r0, [sp, 0x4]
- str r3, [sp, 0x8]
- movs r0, 0
- adds r1, r2, 0
- adds r2, r5, 0
- adds r3, r7, 0
- bl sub_8087F54
-_080880D4:
- add sp, 0xC
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8088080
-
- thumb_func_start sub_80880E0
-sub_80880E0: @ 80880E0
- push {r4-r7,lr}
- sub sp, 0xC
- adds r3, r0, 0
- adds r5, r1, 0
- cmp r5, 0
- beq _08088138
- ldr r0, [r5]
- ldr r4, [r0, 0x4]
- ldr r0, [r3]
- ldr r0, [r0]
- adds r7, r0, 0x7
- adds r2, 0x7
- cmp r2, 0
- bge _08088114
- negs r6, r2
- adds r1, r2, r4
- ldr r0, =gUnknown_03005DC0
- ldr r3, [r0, 0x4]
- cmp r1, r3
- bge _0808810A
- adds r3, r1, 0
-_0808810A:
- movs r2, 0
- b _08088124
- .pool
-_08088114:
- movs r6, 0
- adds r0, r2, r4
- ldr r1, =gUnknown_03005DC0
- ldr r1, [r1, 0x4]
- subs r3, r1, r2
- cmp r0, r1
- bge _08088124
- adds r3, r4, 0
-_08088124:
- str r6, [sp]
- movs r0, 0x8
- str r0, [sp, 0x4]
- str r3, [sp, 0x8]
- adds r0, r7, 0
- adds r1, r2, 0
- adds r2, r5, 0
- movs r3, 0
- bl sub_8087F54
-_08088138:
- add sp, 0xC
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80880E0
-
- thumb_func_start MapGridGetZCoordAt
-@ u8 MapGridGetZCoordAt(s32 x, s32 y)
-MapGridGetZCoordAt: @ 8088144
- push {r4,lr}
- adds r2, r0, 0
- adds r4, r1, 0
- cmp r2, 0
- blt _08088174
- ldr r1, =gUnknown_03005DC0
- ldr r3, [r1]
- cmp r2, r3
- bge _08088174
- cmp r4, 0
- blt _08088174
- ldr r0, [r1, 0x4]
- cmp r4, r0
- bge _08088174
- adds r0, r3, 0
- muls r0, r4
- adds r0, r2, r0
- ldr r1, [r1, 0x8]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- b _08088196
- .pool
-_08088174:
- ldr r0, =gMapHeader
- ldr r3, [r0]
- adds r1, r2, 0x1
- movs r2, 0x1
- ands r1, r2
- adds r0, r4, 0x1
- ands r0, r2
- lsls r0, 1
- adds r1, r0
- ldr r0, [r3, 0x8]
- lsls r1, 1
- adds r1, r0
- ldrh r1, [r1]
- movs r2, 0xC0
- lsls r2, 4
- adds r0, r2, 0
- orrs r1, r0
-_08088196:
- ldr r0, =0x000003ff
- cmp r1, r0
- beq _080881A8
- lsrs r0, r1, 12
- b _080881AA
- .pool
-_080881A8:
- movs r0, 0
-_080881AA:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end MapGridGetZCoordAt
-
- thumb_func_start MapGridIsImpassableAt
-@ u8 MapGridIsImpassableAt(s32 x, s32 y)
-MapGridIsImpassableAt: @ 80881B0
- push {r4,lr}
- adds r2, r0, 0
- adds r4, r1, 0
- cmp r2, 0
- blt _080881E0
- ldr r1, =gUnknown_03005DC0
- ldr r3, [r1]
- cmp r2, r3
- bge _080881E0
- cmp r4, 0
- blt _080881E0
- ldr r0, [r1, 0x4]
- cmp r4, r0
- bge _080881E0
- adds r0, r3, 0
- muls r0, r4
- adds r0, r2, r0
- ldr r1, [r1, 0x8]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- b _08088202
- .pool
-_080881E0:
- ldr r0, =gMapHeader
- ldr r3, [r0]
- adds r1, r2, 0x1
- movs r2, 0x1
- ands r1, r2
- adds r0, r4, 0x1
- ands r0, r2
- lsls r0, 1
- adds r1, r0
- ldr r0, [r3, 0x8]
- lsls r1, 1
- adds r1, r0
- ldrh r1, [r1]
- movs r2, 0xC0
- lsls r2, 4
- adds r0, r2, 0
- orrs r1, r0
-_08088202:
- ldr r0, =0x000003ff
- cmp r1, r0
- beq _0808821C
- movs r0, 0xC0
- lsls r0, 4
- ands r1, r0
- lsrs r0, r1, 10
- b _0808821E
- .pool
-_0808821C:
- movs r0, 0x1
-_0808821E:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end MapGridIsImpassableAt
-
- thumb_func_start MapGridGetMetatileIdAt
-@ u16 MapGridGetMetatileIdAt(s32 x, s32 y)
-MapGridGetMetatileIdAt: @ 8088224
- push {r4-r6,lr}
- adds r5, r0, 0
- adds r6, r1, 0
- cmp r5, 0
- blt _08088254
- ldr r1, =gUnknown_03005DC0
- ldr r2, [r1]
- cmp r5, r2
- bge _08088254
- cmp r6, 0
- blt _08088254
- ldr r0, [r1, 0x4]
- cmp r6, r0
- bge _08088254
- adds r0, r2, 0
- muls r0, r6
- adds r0, r5, r0
- ldr r1, [r1, 0x8]
- lsls r0, 1
- adds r0, r1
- ldrh r4, [r0]
- b _08088278
- .pool
-_08088254:
- ldr r0, =gMapHeader
- ldr r3, [r0]
- adds r1, r5, 0x1
- movs r2, 0x1
- ands r1, r2
- adds r0, r6, 0x1
- ands r0, r2
- lsls r0, 1
- adds r1, r0
- ldr r0, [r3, 0x8]
- lsls r1, 1
- adds r1, r0
- ldrh r1, [r1]
- movs r2, 0xC0
- lsls r2, 4
- adds r0, r2, 0
- adds r4, r0, 0
- orrs r4, r1
-_08088278:
- ldr r0, =0x000003ff
- cmp r4, r0
- beq _0808828C
- ands r4, r0
- adds r0, r4, 0
- b _080882B0
- .pool
-_0808828C:
- ldr r0, =gMapHeader
- ldr r3, [r0]
- adds r1, r5, 0x1
- movs r2, 0x1
- ands r1, r2
- adds r0, r6, 0x1
- ands r0, r2
- lsls r0, 1
- adds r1, r0
- ldr r0, [r3, 0x8]
- lsls r1, 1
- adds r1, r0
- ldrh r0, [r1]
- movs r2, 0xC0
- lsls r2, 4
- adds r1, r2, 0
- orrs r0, r1
- ands r0, r4
-_080882B0:
- pop {r4-r6}
- pop {r1}
- bx r1
- .pool
- thumb_func_end MapGridGetMetatileIdAt
-
- thumb_func_start MapGridGetMetatileBehaviorAt
-@ u8 MapGridGetMetatileBehaviorAt(s32 x, s32 y)
-MapGridGetMetatileBehaviorAt: @ 80882BC
- push {lr}
- bl MapGridGetMetatileIdAt
- lsls r0, 16
- lsrs r0, 16
- bl GetBehaviorByMetatileId
- adds r1, r0, 0
- movs r0, 0xFF
- ands r0, r1
- pop {r1}
- bx r1
- thumb_func_end MapGridGetMetatileBehaviorAt
-
- thumb_func_start MapGridGetMetatileLayerTypeAt
-@ u8 MapGridGetMetatileLayerTypeAt(s32 x, s32 y)
-MapGridGetMetatileLayerTypeAt: @ 80882D4
- push {lr}
- bl MapGridGetMetatileIdAt
- lsls r0, 16
- lsrs r0, 16
- bl GetBehaviorByMetatileId
- adds r1, r0, 0
- movs r0, 0xF0
- lsls r0, 8
- ands r0, r1
- lsrs r0, 12
- pop {r1}
- bx r1
- thumb_func_end MapGridGetMetatileLayerTypeAt
-
- thumb_func_start MapGridSetMetatileIdAt
-@ void MapGridSetMetatileIdAt(s32 x, s32 y, u16 metatileId)
-MapGridSetMetatileIdAt: @ 80882F0
- push {r4,r5,lr}
- adds r3, r0, 0
- lsls r2, 16
- lsrs r5, r2, 16
- cmp r3, 0
- blt _08088328
- ldr r2, =gUnknown_03005DC0
- ldr r4, [r2]
- cmp r3, r4
- bge _08088328
- cmp r1, 0
- blt _08088328
- ldr r0, [r2, 0x4]
- cmp r1, r0
- bge _08088328
- muls r1, r4
- adds r1, r3, r1
- ldr r0, [r2, 0x8]
- lsls r1, 1
- adds r1, r0
- ldrh r0, [r1]
- movs r2, 0xF0
- lsls r2, 8
- ands r2, r0
- ldr r0, =0x00000fff
- ands r0, r5
- orrs r2, r0
- strh r2, [r1]
-_08088328:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end MapGridSetMetatileIdAt
-
- thumb_func_start MapGridSetMetatileEntryAt
-@ void MapGridSetMetatileEntryAt(s32 x, s32 y, u16 metatileEntry)
-MapGridSetMetatileEntryAt: @ 8088338
- push {r4,r5,lr}
- adds r3, r0, 0
- lsls r2, 16
- lsrs r5, r2, 16
- cmp r3, 0
- blt _08088364
- ldr r2, =gUnknown_03005DC0
- ldr r4, [r2]
- cmp r3, r4
- bge _08088364
- cmp r1, 0
- blt _08088364
- ldr r0, [r2, 0x4]
- cmp r1, r0
- bge _08088364
- adds r0, r4, 0
- muls r0, r1
- adds r0, r3, r0
- ldr r1, [r2, 0x8]
- lsls r0, 1
- adds r0, r1
- strh r5, [r0]
-_08088364:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end MapGridSetMetatileEntryAt
-
- thumb_func_start GetBehaviorByMetatileId
-@ u16 GetBehaviorByMetatileId(u16 metatileId)
-GetBehaviorByMetatileId: @ 8088370
- push {lr}
- lsls r0, 16
- lsrs r2, r0, 16
- adds r3, r2, 0
- ldr r0, =0x000001ff
- cmp r2, r0
- bhi _08088394
- ldr r0, =gMapHeader
- ldr r0, [r0]
- ldr r0, [r0, 0x10]
- ldr r1, [r0, 0x10]
- lsls r0, r2, 1
- b _080883B2
- .pool
-_08088394:
- ldr r0, =0x000003ff
- cmp r2, r0
- bls _080883A4
- movs r0, 0xFF
- b _080883B6
- .pool
-_080883A4:
- ldr r0, =gMapHeader
- ldr r0, [r0]
- ldr r0, [r0, 0x14]
- ldr r1, [r0, 0x10]
- lsls r0, r3, 1
- adds r0, r1
- ldr r1, =0xfffffc00
-_080883B2:
- adds r0, r1
- ldrh r0, [r0]
-_080883B6:
- pop {r1}
- bx r1
- .pool
- thumb_func_end GetBehaviorByMetatileId
-
- thumb_func_start save_serialize_map
-save_serialize_map: @ 80883C4
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- ldr r0, =gSaveBlock1Ptr
- ldr r1, [r0]
- adds r4, r1, 0
- adds r4, 0x34
- ldr r0, =gUnknown_03005DC0
- ldr r0, [r0]
- mov r8, r0
- movs r0, 0
- ldrsh r6, [r1, r0]
- movs r2, 0x2
- ldrsh r0, [r1, r2]
- adds r1, r0, 0
- adds r1, 0xE
- cmp r0, r1
- bge _08088420
- mov r12, r1
- ldr r1, =gUnknown_02032318
- mov r9, r1
- lsls r7, r6, 1
-_080883F2:
- adds r1, r6, 0
- adds r3, r1, 0
- adds r3, 0xF
- adds r5, r0, 0x1
- cmp r1, r3
- bge _0808841A
- mov r2, r8
- muls r2, r0
- adds r0, r2, 0
- lsls r0, 1
- add r0, r9
- adds r2, r7, r0
- subs r1, r3, r1
-_0808840C:
- ldrh r0, [r2]
- strh r0, [r4]
- adds r4, 0x2
- adds r2, 0x2
- subs r1, 0x1
- cmp r1, 0
- bne _0808840C
-_0808841A:
- adds r0, r5, 0
- cmp r0, r12
- blt _080883F2
-_08088420:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end save_serialize_map
-
- thumb_func_start sub_8088438
-sub_8088438: @ 8088438
- push {r4,lr}
- movs r2, 0
- movs r1, 0
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- adds r3, r0, 0
- adds r3, 0x34
- ldr r4, =0x000001ff
-_08088448:
- lsls r0, r1, 1
- adds r0, r3, r0
- ldrh r0, [r0]
- orrs r2, r0
- adds r0, r1, 0x1
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, r4
- bls _08088448
- cmp r2, 0
- beq _0808846C
- movs r0, 0
- b _0808846E
- .pool
-_0808846C:
- movs r0, 0x1
-_0808846E:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8088438
-
- thumb_func_start sav2_mapdata_clear
-sav2_mapdata_clear: @ 8088474
- push {lr}
- sub sp, 0x4
- mov r1, sp
- movs r0, 0
- strh r0, [r1]
- ldr r0, =gSaveBlock1Ptr
- ldr r1, [r0]
- adds r1, 0x34
- ldr r2, =0x01000100
- mov r0, sp
- bl CpuSet
- add sp, 0x4
- pop {r0}
- bx r0
- .pool
- thumb_func_end sav2_mapdata_clear
-
- thumb_func_start mapdata_from_sav2
-mapdata_from_sav2: @ 808849C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x10
- ldr r4, =gSaveBlock1Ptr
- ldr r0, [r4]
- adds r7, r0, 0
- adds r7, 0x34
- bl sub_8088438
- cmp r0, 0
- bne _080885AC
- ldr r0, =gUnknown_03005DC0
- ldr r0, [r0]
- str r0, [sp]
- ldr r0, [r4]
- movs r2, 0
- ldrsh r1, [r0, r2]
- mov r10, r1
- movs r2, 0x2
- ldrsh r1, [r0, r2]
- mov r8, r1
- mov r6, r8
- adds r0, r6, 0
- adds r0, 0xE
- cmp r6, r0
- bge _0808855A
-_080884D6:
- cmp r6, r8
- bne _080884EC
- cmp r6, 0
- beq _080884EC
- movs r0, 0
- mov r9, r0
- b _08088508
- .pool
-_080884EC:
- mov r0, r8
- adds r0, 0xD
- movs r1, 0xFF
- mov r9, r1
- cmp r6, r0
- bne _08088508
- ldr r0, =gMapHeader
- ldr r0, [r0]
- ldr r0, [r0, 0x4]
- subs r0, 0x1
- cmp r6, r0
- beq _08088508
- movs r2, 0x1
- mov r9, r2
-_08088508:
- mov r5, r10
- adds r0, r5, 0
- adds r0, 0xF
- mov r1, r8
- adds r1, 0xE
- str r1, [sp, 0x8]
- adds r2, r6, 0x1
- str r2, [sp, 0x4]
- cmp r5, r0
- bge _08088552
- ldr r0, [sp]
- lsls r3, r0, 16
-_08088520:
- ldr r1, [sp]
- adds r0, r1, 0
- muls r0, r6
- adds r0, r5, r0
- lsls r0, 1
- ldr r1, =gUnknown_02032318
- adds r4, r0, r1
- adds r0, r4, 0
- lsrs r1, r3, 16
- mov r2, r9
- str r3, [sp, 0xC]
- bl sub_8088BF0
- lsls r0, 24
- ldr r3, [sp, 0xC]
- cmp r0, 0
- bne _08088546
- ldrh r0, [r7]
- strh r0, [r4]
-_08088546:
- adds r7, 0x2
- adds r5, 0x1
- mov r0, r10
- adds r0, 0xF
- cmp r5, r0
- blt _08088520
-_08088552:
- ldr r6, [sp, 0x4]
- ldr r2, [sp, 0x8]
- cmp r6, r2
- blt _080884D6
-_0808855A:
- mov r5, r10
- adds r0, r5, 0
- adds r0, 0xF
- cmp r5, r0
- bge _080885A8
- mov r0, r8
- subs r0, 0x1
- lsls r0, 16
- mov r9, r0
- lsls r4, r5, 16
- mov r0, r8
- adds r0, 0xD
- lsls r7, r0, 16
-_08088574:
- mov r0, r8
- cmp r0, 0
- beq _08088584
- asrs r0, r4, 16
- mov r2, r9
- asrs r1, r2, 16
- bl sub_80D423C
-_08088584:
- ldr r0, =gMapHeader
- ldr r0, [r0]
- ldr r0, [r0, 0x4]
- subs r0, 0x1
- cmp r6, r0
- bge _08088598
- asrs r0, r4, 16
- asrs r1, r7, 16
- bl sub_80D42B8
-_08088598:
- movs r0, 0x80
- lsls r0, 9
- adds r4, r0
- adds r5, 0x1
- mov r0, r10
- adds r0, 0xF
- cmp r5, r0
- blt _08088574
-_080885A8:
- bl sav2_mapdata_clear
-_080885AC:
- add sp, 0x10
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end mapdata_from_sav2
-
- thumb_func_start sub_80885C4
-sub_80885C4: @ 80885C4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0xC
- lsls r0, 24
- lsrs r3, r0, 24
- adds r2, r3, 0
- ldr r0, =gSaveBlock1Ptr
- ldr r1, [r0]
- adds r0, r1, 0
- adds r0, 0x34
- str r0, [sp, 0x4]
- ldr r0, =gUnknown_03005DC0
- ldr r0, [r0]
- str r0, [sp]
- movs r4, 0
- mov r9, r4
- mov r8, r4
- movs r0, 0
- ldrsh r6, [r1, r0]
- str r6, [sp, 0x8]
- movs r4, 0x2
- ldrsh r5, [r1, r4]
- movs r7, 0xF
- movs r6, 0xE
- mov r12, r6
- cmp r3, 0x2
- beq _0808861E
- cmp r3, 0x2
- bgt _08088614
- cmp r3, 0x1
- beq _08088626
- b _0808863E
- .pool
-_08088614:
- cmp r2, 0x3
- beq _08088630
- cmp r2, 0x4
- beq _08088638
- b _0808863E
-_0808861E:
- adds r5, 0x1
- movs r0, 0xD
- mov r12, r0
- b _0808863E
-_08088626:
- movs r1, 0x1
- mov r8, r1
- movs r3, 0xD
- mov r12, r3
- b _0808863E
-_08088630:
- ldr r4, [sp, 0x8]
- adds r4, 0x1
- str r4, [sp, 0x8]
- b _0808863C
-_08088638:
- movs r6, 0x1
- mov r9, r6
-_0808863C:
- movs r7, 0xE
-_0808863E:
- movs r1, 0
- cmp r1, r12
- bge _08088682
- ldr r0, =gUnknown_02032318
- mov r10, r0
-_08088648:
- adds r4, r1, 0x1
- cmp r7, 0
- beq _0808867C
- adds r0, r1, r5
- ldr r3, [sp]
- adds r2, r3, 0
- muls r2, r0
- add r1, r8
- lsls r0, r1, 4
- subs r0, r1
- add r0, r9
- ldr r6, [sp, 0x8]
- adds r2, r6, r2
- adds r3, r7, 0
- lsls r2, 1
- add r2, r10
- lsls r0, 1
- ldr r6, [sp, 0x4]
- adds r1, r0, r6
-_0808866E:
- ldrh r0, [r1]
- strh r0, [r2]
- adds r1, 0x2
- adds r2, 0x2
- subs r3, 0x1
- cmp r3, 0
- bne _0808866E
-_0808867C:
- adds r1, r4, 0
- cmp r1, r12
- blt _08088648
-_08088682:
- bl sav2_mapdata_clear
- add sp, 0xC
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80885C4
-
- thumb_func_start GetMapBorderIdAt
-@ u32 GetMapBorderIdAt(s32 x, s32 y)
-GetMapBorderIdAt: @ 808869C
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- cmp r4, 0
- blt _080886D8
- ldr r1, =gUnknown_03005DC0
- ldr r2, [r1]
- cmp r4, r2
- bge _080886D8
- cmp r5, 0
- blt _080886D8
- ldr r0, [r1, 0x4]
- cmp r5, r0
- bge _080886D8
- adds r0, r2, 0
- muls r0, r5
- adds r0, r4, r0
- ldr r1, [r1, 0x8]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- ldr r0, =0x000003ff
- cmp r1, r0
- beq _08088770
- b _08088700
- .pool
-_080886D8:
- ldr r0, =gMapHeader
- ldr r3, [r0]
- adds r1, r4, 0x1
- movs r2, 0x1
- ands r1, r2
- adds r0, r5, 0x1
- ands r0, r2
- lsls r0, 1
- adds r1, r0
- ldr r0, [r3, 0x8]
- lsls r1, 1
- adds r1, r0
- ldrh r1, [r1]
- movs r2, 0xC0
- lsls r2, 4
- adds r0, r2, 0
- orrs r0, r1
- ldr r1, =0x000003ff
- cmp r0, r1
- beq _08088770
-_08088700:
- ldr r1, =gUnknown_03005DC0
- ldr r0, [r1]
- subs r0, 0x8
- cmp r4, r0
- blt _0808872C
- ldr r0, =gUnknown_02037340
- ldrb r1, [r0]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _08088770
- movs r0, 0x4
- b _08088782
- .pool
-_0808872C:
- cmp r4, 0x6
- bgt _08088744
- ldr r0, =gUnknown_02037340
- ldrb r1, [r0]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _08088770
- movs r0, 0x3
- b _08088782
- .pool
-_08088744:
- ldr r0, [r1, 0x4]
- subs r0, 0x7
- cmp r5, r0
- blt _08088760
- ldr r0, =gUnknown_02037340
- ldrb r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08088770
- movs r0, 0x1
- b _08088782
- .pool
-_08088760:
- cmp r5, 0x6
- bgt _08088780
- ldr r0, =gUnknown_02037340
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- bne _0808877C
-_08088770:
- movs r0, 0x1
- negs r0, r0
- b _08088782
- .pool
-_0808877C:
- movs r0, 0x2
- b _08088782
-_08088780:
- movs r0, 0
-_08088782:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end GetMapBorderIdAt
-
- thumb_func_start GetPostCameraMoveMapBorderId
-@ u32 GetPostCameraMoveMapBorderId(s32 deltaX, s32 deltaY)
-GetPostCameraMoveMapBorderId: @ 8088788
- push {r4,lr}
- adds r3, r1, 0
- ldr r1, =gSaveBlock1Ptr
- ldr r1, [r1]
- movs r4, 0
- ldrsh r2, [r1, r4]
- adds r0, 0x7
- adds r2, r0
- movs r0, 0x2
- ldrsh r1, [r1, r0]
- adds r3, 0x7
- adds r1, r3
- adds r0, r2, 0
- bl GetMapBorderIdAt
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end GetPostCameraMoveMapBorderId
-
- thumb_func_start CanCameraMoveInDirection
-@ bool32 CanCameraMoveInDirection(u8 direction)
-CanCameraMoveInDirection: @ 80887B0
- push {r4,r5,lr}
- ldr r1, =gSaveBlock1Ptr
- ldr r4, [r1]
- movs r1, 0
- ldrsh r3, [r4, r1]
- ldr r2, =gUnknown_08339D64
- lsls r0, 3
- adds r1, r0, r2
- ldr r1, [r1]
- adds r1, 0x7
- adds r3, r1
- movs r5, 0x2
- ldrsh r1, [r4, r5]
- adds r2, 0x4
- adds r0, r2
- ldr r0, [r0]
- adds r0, 0x7
- adds r1, r0
- adds r0, r3, 0
- bl GetMapBorderIdAt
- movs r1, 0x1
- negs r1, r1
- cmp r0, r1
- beq _080887F0
- movs r0, 0x1
- b _080887F2
- .pool
-_080887F0:
- movs r0, 0
-_080887F2:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end CanCameraMoveInDirection
-
- thumb_func_start sub_80887F8
-sub_80887F8: @ 80887F8
- push {r4-r7,lr}
- adds r5, r0, 0
- adds r4, r1, 0
- adds r6, r2, 0
- adds r7, r3, 0
- bl mapconnection_get_mapheader
- adds r3, r0, 0
- cmp r4, 0x2
- beq _08088860
- cmp r4, 0x2
- bgt _08088816
- cmp r4, 0x1
- beq _0808884C
- b _08088872
-_08088816:
- cmp r4, 0x3
- beq _08088834
- cmp r4, 0x4
- bne _08088872
- ldr r0, =gSaveBlock1Ptr
- ldr r1, [r0]
- negs r0, r6
- strh r0, [r1]
- ldr r2, [r5, 0x4]
- ldrh r0, [r1, 0x2]
- subs r0, r2
- b _08088870
- .pool
-_08088834:
- ldr r0, =gSaveBlock1Ptr
- ldr r1, [r0]
- ldr r0, [r3]
- ldr r0, [r0]
- strh r0, [r1]
- ldr r2, [r5, 0x4]
- ldrh r0, [r1, 0x2]
- subs r0, r2
- b _08088870
- .pool
-_0808884C:
- ldr r0, =gSaveBlock1Ptr
- ldr r1, [r0]
- ldr r2, [r5, 0x4]
- ldrh r0, [r1]
- subs r0, r2
- strh r0, [r1]
- negs r0, r7
- b _08088870
- .pool
-_08088860:
- ldr r0, =gSaveBlock1Ptr
- ldr r1, [r0]
- ldr r2, [r5, 0x4]
- ldrh r0, [r1]
- subs r0, r2
- strh r0, [r1]
- ldr r0, [r3]
- ldr r0, [r0, 0x4]
-_08088870:
- strh r0, [r1, 0x2]
-_08088872:
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80887F8
-
- thumb_func_start CameraMove
-@ u8 CameraMove(s32 deltaX, s32 deltaY)
-CameraMove: @ 808887C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- mov r10, r0
- mov r9, r1
- ldr r1, =gCamera
- ldrb r0, [r1]
- movs r1, 0x2
- negs r1, r1
- ands r1, r0
- ldr r2, =gCamera
- strb r1, [r2]
- mov r0, r10
- mov r1, r9
- bl GetPostCameraMoveMapBorderId
- adds r7, r0, 0
- adds r0, r7, 0x1
- cmp r0, 0x1
- bhi _080888C4
- ldr r0, =gSaveBlock1Ptr
- ldr r1, [r0]
- ldrh r0, [r1]
- add r0, r10
- strh r0, [r1]
- ldrh r0, [r1, 0x2]
- add r0, r9
- strh r0, [r1, 0x2]
- b _08088932
- .pool
-_080888C4:
- bl save_serialize_map
- bl sub_81BE72C
- ldr r1, =gSaveBlock1Ptr
- ldr r0, [r1]
- movs r2, 0
- ldrsh r5, [r0, r2]
- movs r1, 0x2
- ldrsh r6, [r0, r1]
- lsls r2, r7, 24
- lsrs r2, 24
- mov r8, r2
- mov r0, r8
- adds r1, r5, 0
- adds r2, r6, 0
- bl sub_8088950
- adds r4, r0, 0
- adds r1, r7, 0
- mov r2, r10
- mov r3, r9
- bl sub_80887F8
- ldrb r0, [r4, 0x8]
- ldrb r1, [r4, 0x9]
- bl mliX_load_map
- ldr r1, =gCamera
- ldrb r0, [r1]
- movs r1, 0x1
- orrs r0, r1
- ldr r2, =gCamera
- strb r0, [r2]
- ldr r0, =gSaveBlock1Ptr
- ldr r1, [r0]
- movs r2, 0
- ldrsh r0, [r1, r2]
- subs r5, r0
- ldr r0, =gCamera
- str r5, [r0, 0x4]
- movs r2, 0x2
- ldrsh r0, [r1, r2]
- subs r6, r0
- ldr r0, =gCamera
- str r6, [r0, 0x8]
- ldrh r0, [r1]
- add r0, r10
- strh r0, [r1]
- ldrh r0, [r1, 0x2]
- add r0, r9
- strh r0, [r1, 0x2]
- mov r0, r8
- bl sub_80885C4
-_08088932:
- ldr r0, =gCamera
- ldrb r0, [r0]
- lsls r0, 31
- lsrs r0, 31
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .pool
- thumb_func_end CameraMove
-
- thumb_func_start sub_8088950
-sub_8088950: @ 8088950
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- mov r9, r1
- mov r8, r2
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r0, =gMapHeader
- ldr r0, [r0, 0xC]
- ldr r7, [r0]
- ldr r4, [r0, 0x4]
- movs r5, 0
- cmp r5, r7
- bge _08088998
-_0808896E:
- ldrb r0, [r4]
- cmp r0, r6
- bne _08088990
- adds r0, r6, 0
- mov r1, r9
- mov r2, r8
- adds r3, r4, 0
- bl sub_80889A8
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08088990
- adds r0, r4, 0
- b _0808899A
- .pool
-_08088990:
- adds r5, 0x1
- adds r4, 0xC
- cmp r5, r7
- blt _0808896E
-_08088998:
- movs r0, 0
-_0808899A:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_8088950
-
- thumb_func_start sub_80889A8
-sub_80889A8: @ 80889A8
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r7, r1, 0
- mov r8, r2
- adds r5, r3, 0
- lsls r0, 24
- lsrs r4, r0, 24
- adds r6, r4, 0
- adds r0, r5, 0
- bl mapconnection_get_mapheader
- adds r2, r0, 0
- cmp r4, 0x1
- blt _08088A00
- cmp r4, 0x2
- bgt _080889E0
- ldr r0, =gMapHeader
- ldr r0, [r0]
- ldr r1, [r0]
- ldr r0, [r2]
- ldr r2, [r0]
- ldr r3, [r5, 0x4]
- adds r0, r7, 0
- b _080889F2
- .pool
-_080889E0:
- cmp r6, 0x4
- bgt _08088A00
- ldr r0, =gMapHeader
- ldr r0, [r0]
- ldr r1, [r0, 0x4]
- ldr r0, [r2]
- ldr r2, [r0, 0x4]
- ldr r3, [r5, 0x4]
- mov r0, r8
-_080889F2:
- bl sub_8088A0C
- lsls r0, 24
- lsrs r0, 24
- b _08088A02
- .pool
-_08088A00:
- movs r0, 0
-_08088A02:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_80889A8
-
- thumb_func_start sub_8088A0C
-sub_8088A0C: @ 8088A0C
- push {r4,lr}
- adds r4, r0, 0
- adds r0, r2, 0
- adds r2, r3, 0
- cmp r3, 0
- bge _08088A1A
- movs r3, 0
-_08088A1A:
- adds r2, r0, r2
- cmp r2, r1
- bge _08088A22
- adds r1, r2, 0
-_08088A22:
- cmp r3, r4
- bgt _08088A2E
- cmp r4, r1
- bgt _08088A2E
- movs r0, 0x1
- b _08088A30
-_08088A2E:
- movs r0, 0
-_08088A30:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8088A0C
-
- thumb_func_start sub_8088A38
-sub_8088A38: @ 8088A38
- push {lr}
- cmp r0, 0
- blt _08088A46
- cmp r0, r1
- bge _08088A46
- movs r0, 0x1
- b _08088A48
-_08088A46:
- movs r0, 0
-_08088A48:
- pop {r1}
- bx r1
- thumb_func_end sub_8088A38
-
- thumb_func_start sub_8088A4C
-sub_8088A4C: @ 8088A4C
- push {r4-r6,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- adds r6, r2, 0
- bl mapconnection_get_mapheader
- adds r1, r0, 0
- ldrb r0, [r4]
- cmp r0, 0x1
- blt _08088A84
- cmp r0, 0x2
- bgt _08088A72
- ldr r0, [r4, 0x4]
- subs r0, r5, r0
- ldr r1, [r1]
- ldr r1, [r1]
- bl sub_8088A38
- b _08088A86
-_08088A72:
- cmp r0, 0x4
- bgt _08088A84
- ldr r0, [r4, 0x4]
- subs r0, r6, r0
- ldr r1, [r1]
- ldr r1, [r1, 0x4]
- bl sub_8088A38
- b _08088A86
-_08088A84:
- movs r0, 0
-_08088A86:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_8088A4C
-
- thumb_func_start sub_8088A8C
-sub_8088A8C: @ 8088A8C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- lsls r1, 16
- lsrs r1, 16
- ldr r2, =gMapHeader
- ldr r0, [r2, 0xC]
- cmp r0, 0
- bne _08088AB4
- b _08088B2A
- .pool
-_08088AB0:
- adds r0, r4, 0
- b _08088B2C
-_08088AB4:
- ldr r7, [r0]
- ldr r4, [r0, 0x4]
- movs r6, 0
- cmp r6, r7
- bge _08088B2A
- lsls r0, r1, 16
- asrs r5, r0, 16
- mov r9, r2
- mov r1, r8
- lsls r0, r1, 16
- asrs r0, 16
- mov r10, r0
-_08088ACC:
- ldrb r1, [r4]
- adds r3, r1, 0
- subs r0, r1, 0x5
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bls _08088B22
- cmp r1, 0x2
- bne _08088AE2
- cmp r5, 0x6
- bgt _08088B22
-_08088AE2:
- cmp r1, 0x1
- bne _08088AF2
- mov r2, r9
- ldr r0, [r2]
- ldr r0, [r0, 0x4]
- adds r0, 0x7
- cmp r5, r0
- blt _08088B22
-_08088AF2:
- mov r0, r8
- lsls r2, r0, 16
- cmp r1, 0x3
- bne _08088B00
- mov r1, r10
- cmp r1, 0x6
- bgt _08088B22
-_08088B00:
- cmp r3, 0x4
- bne _08088B12
- asrs r1, r2, 16
- mov r3, r9
- ldr r0, [r3]
- ldr r0, [r0]
- adds r0, 0x7
- cmp r1, r0
- blt _08088B22
-_08088B12:
- asrs r1, r2, 16
- subs r1, 0x7
- adds r0, r4, 0
- subs r2, r5, 0x7
- bl sub_8088A4C
- cmp r0, 0x1
- beq _08088AB0
-_08088B22:
- adds r6, 0x1
- adds r4, 0xC
- cmp r6, r7
- blt _08088ACC
-_08088B2A:
- movs r0, 0
-_08088B2C:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_8088A8C
-
- thumb_func_start sub_8088B3C
-sub_8088B3C: @ 8088B3C
- lsls r0, 16
- lsrs r0, 16
- lsls r1, 16
- lsrs r1, 16
- ldr r2, =gSaveBlock1Ptr
- ldr r2, [r2]
- subs r0, 0x7
- strh r0, [r2]
- subs r1, 0x7
- strh r1, [r2, 0x2]
- bx lr
- .pool
- thumb_func_end sub_8088B3C
-
- thumb_func_start sav1_camera_get_focus_coords
-sav1_camera_get_focus_coords: @ 8088B58
- ldr r2, =gSaveBlock1Ptr
- ldr r3, [r2]
- ldrh r2, [r3]
- adds r2, 0x7
- strh r2, [r0]
- ldrh r0, [r3, 0x2]
- adds r0, 0x7
- strh r0, [r1]
- bx lr
- .pool
- thumb_func_end sav1_camera_get_focus_coords
-
- thumb_func_start SetCameraCoords
-@ void SetCameraCoords(u16 x, u16 y)
-SetCameraCoords: @ 8088B70
- ldr r2, =gSaveBlock1Ptr
- ldr r2, [r2]
- strh r0, [r2]
- strh r1, [r2, 0x2]
- bx lr
- .pool
- thumb_func_end SetCameraCoords
-
- thumb_func_start GetCameraCoords
-@ void GetCameraCoords(u16 *x, u16 *y)
-GetCameraCoords: @ 8088B80
- ldr r2, =gSaveBlock1Ptr
- ldr r3, [r2]
- ldrh r2, [r3]
- strh r2, [r0]
- ldrh r0, [r3, 0x2]
- strh r0, [r1]
- bx lr
- .pool
- thumb_func_end GetCameraCoords
-
- thumb_func_start sub_8088B94
-sub_8088B94: @ 8088B94
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r3, r1, 0
- adds r5, r2, 0
- cmp r4, 0
- blt _08088BE6
- ldr r2, =gUnknown_03005DC0
- ldr r1, [r2]
- cmp r4, r1
- bge _08088BE6
- cmp r3, 0
- blt _08088BE6
- ldr r0, [r2, 0x4]
- cmp r3, r0
- bge _08088BE6
- cmp r5, 0
- beq _08088BD4
- adds r0, r1, 0
- muls r0, r3
- adds r0, r4, r0
- ldr r1, [r2, 0x8]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r3, 0xC0
- lsls r3, 4
- adds r2, r3, 0
- orrs r1, r2
- strh r1, [r0]
- b _08088BE6
- .pool
-_08088BD4:
- muls r1, r3
- adds r1, r4, r1
- ldr r0, [r2, 0x8]
- lsls r1, 1
- adds r1, r0
- ldrh r2, [r1]
- ldr r0, =0x0000f3ff
- ands r0, r2
- strh r0, [r1]
-_08088BE6:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8088B94
-
- thumb_func_start sub_8088BF0
-sub_8088BF0: @ 8088BF0
- push {lr}
- adds r3, r0, 0
- lsls r1, 16
- lsrs r0, r1, 16
- adds r1, r0, 0
- lsls r2, 24
- lsrs r2, 24
- cmp r2, 0xFF
- beq _08088C24
- cmp r2, 0
- bne _08088C0C
- lsls r0, 1
- subs r3, r0
- b _08088C10
-_08088C0C:
- lsls r0, r1, 1
- adds r3, r0
-_08088C10:
- ldrh r1, [r3]
- ldr r0, =0x000003ff
- ands r0, r1
- adds r1, r2, 0
- bl sub_80FADE4
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08088C2C
-_08088C24:
- movs r0, 0
- b _08088C2E
- .pool
-_08088C2C:
- movs r0, 0x1
-_08088C2E:
- pop {r1}
- bx r1
- thumb_func_end sub_8088BF0
-
- thumb_func_start copy_tileset_patterns_to_vram
-@ void copy_tileset_patterns_to_vram(tileset *tileset, int num_tiles, int offset)
-copy_tileset_patterns_to_vram: @ 8088C34
- push {r4-r7,lr}
- sub sp, 0x4
- adds r3, r0, 0
- lsls r1, 16
- lsrs r4, r1, 16
- adds r6, r4, 0
- lsls r2, 16
- lsrs r5, r2, 16
- adds r7, r5, 0
- cmp r3, 0
- beq _08088C70
- ldrb r0, [r3]
- cmp r0, 0
- bne _08088C60
- ldr r1, [r3, 0x4]
- lsls r2, r4, 21
- lsrs r2, 16
- movs r0, 0x2
- adds r3, r5, 0
- bl LoadBgTiles
- b _08088C70
-_08088C60:
- ldr r1, [r3, 0x4]
- lsls r2, r6, 5
- movs r0, 0
- str r0, [sp]
- movs r0, 0x2
- adds r3, r7, 0
- bl decompress_and_copy_tile_data_to_vram
-_08088C70:
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end copy_tileset_patterns_to_vram
-
- thumb_func_start copy_tileset_patterns_to_vram2
-@ void copy_tileset_patterns_to_vram2(tileset *tileset, int num_tiles, int offset)
-copy_tileset_patterns_to_vram2: @ 8088C78
- push {r4-r7,lr}
- sub sp, 0x4
- adds r3, r0, 0
- lsls r1, 16
- lsrs r4, r1, 16
- adds r6, r4, 0
- lsls r2, 16
- lsrs r5, r2, 16
- adds r7, r5, 0
- cmp r3, 0
- beq _08088CB4
- ldrb r0, [r3]
- cmp r0, 0
- bne _08088CA4
- ldr r1, [r3, 0x4]
- lsls r2, r4, 21
- lsrs r2, 16
- movs r0, 0x2
- adds r3, r5, 0
- bl LoadBgTiles
- b _08088CB4
-_08088CA4:
- ldr r1, [r3, 0x4]
- lsls r2, r6, 5
- movs r0, 0
- str r0, [sp]
- movs r0, 0x2
- adds r3, r7, 0
- bl copy_decompressed_tile_data_to_vram_autofree
-_08088CB4:
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end copy_tileset_patterns_to_vram2
-
- thumb_func_start nullsub_3
-nullsub_3: @ 8088CBC
- bx lr
- thumb_func_end nullsub_3
-
- thumb_func_start nullsub_90
-nullsub_90: @ 8088CC0
- bx lr
- thumb_func_end nullsub_90
-
- thumb_func_start apply_map_tileset_palette
-@ void apply_map_tileset_palette(tileset *tileset, int dest_offset, int size)
-apply_map_tileset_palette: @ 8088CC4
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- adds r4, r0, 0
- lsls r1, 16
- lsrs r5, r1, 16
- mov r8, r5
- lsls r6, r2, 16
- lsrs r7, r6, 16
- adds r2, r7, 0
- movs r1, 0
- mov r0, sp
- strh r1, [r0]
- cmp r4, 0
- beq _08088D42
- ldrb r0, [r4, 0x1]
- cmp r0, 0
- bne _08088D18
- mov r0, sp
- adds r1, r5, 0
- movs r2, 0x2
- bl LoadPalette
- ldr r0, [r4, 0x8]
- adds r0, 0x2
- adds r5, 0x1
- lsls r5, 16
- lsrs r5, 16
- subs r4, r7, 0x2
- lsls r2, r4, 16
- lsrs r2, 16
- adds r1, r5, 0
- bl LoadPalette
- lsls r4, 15
- lsrs r4, 16
- adds r0, r5, 0
- adds r1, r4, 0
- bl nullsub_3
- b _08088D42
-_08088D18:
- cmp r0, 0x1
- bne _08088D32
- ldr r0, [r4, 0x8]
- adds r0, 0xC0
- adds r1, r5, 0
- adds r2, r7, 0
- bl LoadPalette
- lsrs r1, r6, 17
- adds r0, r5, 0
- bl nullsub_3
- b _08088D42
-_08088D32:
- ldr r0, [r4, 0x8]
- mov r1, r8
- bl LoadCompressedPalette
- lsrs r1, r6, 17
- mov r0, r8
- bl nullsub_3
-_08088D42:
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end apply_map_tileset_palette
-
- thumb_func_start copy_map_tileset1_to_vram
-@ void copy_map_tileset1_to_vram(mapdata_header *a1)
-copy_map_tileset1_to_vram: @ 8088D50
- push {lr}
- ldr r0, [r0, 0x10]
- movs r1, 0x80
- lsls r1, 2
- movs r2, 0
- bl copy_tileset_patterns_to_vram
- pop {r0}
- bx r0
- thumb_func_end copy_map_tileset1_to_vram
-
- thumb_func_start copy_map_tileset2_to_vram
-@ void copy_map_tileset2_to_vram(mapdata_header *a1)
-copy_map_tileset2_to_vram: @ 8088D64
- push {lr}
- ldr r0, [r0, 0x14]
- movs r2, 0x80
- lsls r2, 2
- adds r1, r2, 0
- bl copy_tileset_patterns_to_vram
- pop {r0}
- bx r0
- thumb_func_end copy_map_tileset2_to_vram
-
- thumb_func_start copy_map_tileset2_to_vram_2
-@ void copy_map_tileset2_to_vram_2(mapdata_header *a1)
-copy_map_tileset2_to_vram_2: @ 8088D78
- push {lr}
- ldr r0, [r0, 0x14]
- movs r2, 0x80
- lsls r2, 2
- adds r1, r2, 0
- bl copy_tileset_patterns_to_vram2
- pop {r0}
- bx r0
- thumb_func_end copy_map_tileset2_to_vram_2
-
- thumb_func_start apply_map_tileset1_palette
-@ void apply_map_tileset1_palette(mapdata_header *a1)
-apply_map_tileset1_palette: @ 8088D8C
- push {lr}
- ldr r0, [r0, 0x10]
- movs r1, 0
- movs r2, 0xC0
- bl apply_map_tileset_palette
- pop {r0}
- bx r0
- thumb_func_end apply_map_tileset1_palette
-
- thumb_func_start apply_map_tileset2_palette
-@ void apply_map_tileset2_palette(mapdata_header *a1)
-apply_map_tileset2_palette: @ 8088D9C
- push {lr}
- ldr r0, [r0, 0x14]
- movs r1, 0x60
- movs r2, 0xE0
- bl apply_map_tileset_palette
- pop {r0}
- bx r0
- thumb_func_end apply_map_tileset2_palette
-
- thumb_func_start copy_map_tileset1_tileset2_to_vram
-@ void copy_map_tileset1_tileset2_to_vram(mapdata_header *a1)
-copy_map_tileset1_tileset2_to_vram: @ 8088DAC
- push {r4,r5,lr}
- adds r5, r0, 0
- cmp r5, 0
- beq _08088DCC
- ldr r0, [r5, 0x10]
- movs r4, 0x80
- lsls r4, 2
- adds r1, r4, 0
- movs r2, 0
- bl copy_tileset_patterns_to_vram2
- ldr r0, [r5, 0x14]
- adds r1, r4, 0
- adds r2, r4, 0
- bl copy_tileset_patterns_to_vram2
-_08088DCC:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end copy_map_tileset1_tileset2_to_vram
-
- thumb_func_start apply_map_tileset1_tileset2_palette
-@ void apply_map_tileset1_tileset2_palette(mapdata_header *a1)
-apply_map_tileset1_tileset2_palette: @ 8088DD4
- push {r4,lr}
- adds r4, r0, 0
- cmp r4, 0
- beq _08088DE6
- bl apply_map_tileset1_palette
- adds r0, r4, 0
- bl apply_map_tileset2_palette
-_08088DE6:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end apply_map_tileset1_tileset2_palette
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/fldeff_flash.s b/asm/fldeff_flash.s
deleted file mode 100644
index d52ee34fc..000000000
--- a/asm/fldeff_flash.s
+++ /dev/null
@@ -1,709 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start SetUpFieldMove_Flash
-SetUpFieldMove_Flash: @ 81370FC
- push {r4,lr}
- bl ShouldDoBrailleFlyEffect
- lsls r0, 24
- cmp r0, 0
- beq _08137134
- ldr r4, =gSpecialVar_Result
- bl GetCursorSelectionMonId
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4]
- ldr r1, =gUnknown_03005DB0
- ldr r0, =FieldCallback_Teleport
- str r0, [r1]
- ldr r1, =gUnknown_0203CEEC
- ldr r0, =sub_8179918
- b _08137152
- .pool
-_08137134:
- ldr r0, =gMapHeader
- ldrb r0, [r0, 0x15]
- cmp r0, 0x1
- bne _08137170
- ldr r0, =0x00000888
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- bne _08137170
- ldr r1, =gUnknown_03005DB0
- ldr r0, =FieldCallback_Teleport
- str r0, [r1]
- ldr r1, =gUnknown_0203CEEC
- ldr r0, =hm2_flash
-_08137152:
- str r0, [r1]
- movs r0, 0x1
- b _08137172
- .pool
-_08137170:
- movs r0, 0
-_08137172:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end SetUpFieldMove_Flash
-
- thumb_func_start hm2_flash
-hm2_flash: @ 8137178
- push {r4,lr}
- bl oei_task_add
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl GetCursorSelectionMonId
- ldr r1, =gFieldEffectArguments
- lsls r0, 24
- lsrs r0, 24
- str r0, [r1]
- ldr r1, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r2, =sub_81371B4
- lsrs r1, r2, 16
- strh r1, [r0, 0x18]
- strh r2, [r0, 0x1A]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end hm2_flash
-
- thumb_func_start sub_81371B4
-sub_81371B4: @ 81371B4
- push {lr}
- movs r0, 0xCF
- bl PlaySE
- ldr r0, =0x00000888
- bl FlagSet
- ldr r0, =EventScript_2926F8
- bl ScriptContext1_SetupScript
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81371B4
-
- thumb_func_start sub_81371D4
-sub_81371D4: @ 81371D4
- push {lr}
- bl RunTasks
- bl AnimateSprites
- bl BuildOamBuffer
- bl UpdatePaletteFade
- pop {r0}
- bx r0
- thumb_func_end sub_81371D4
-
- thumb_func_start sub_81371EC
-sub_81371EC: @ 81371EC
- push {lr}
- bl LoadOam
- bl ProcessSpriteCopyRequests
- bl TransferPlttBuffer
- pop {r0}
- bx r0
- thumb_func_end sub_81371EC
-
- thumb_func_start c2_change_map
-c2_change_map: @ 8137200
- push {r4,lr}
- sub sp, 0x8
- movs r0, 0
- bl SetVBlankCallback
- movs r0, 0
- movs r1, 0
- bl SetGpuReg
- movs r0, 0xC
- movs r1, 0
- bl SetGpuReg
- movs r0, 0xA
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x8
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x18
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x1A
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x14
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x16
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x10
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x12
- movs r1, 0
- bl SetGpuReg
- mov r1, sp
- movs r0, 0
- strh r0, [r1]
- ldr r1, =0x040000d4
- mov r0, sp
- str r0, [r1]
- movs r0, 0xC0
- lsls r0, 19
- str r0, [r1, 0x4]
- ldr r0, =0x8100c000
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- movs r4, 0
- str r4, [sp, 0x4]
- add r0, sp, 0x4
- str r0, [r1]
- movs r0, 0xE0
- lsls r0, 19
- str r0, [r1, 0x4]
- ldr r0, =0x85000100
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- mov r0, sp
- strh r4, [r0]
- str r0, [r1]
- ldr r0, =0x05000002
- str r0, [r1, 0x4]
- ldr r0, =0x810001ff
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- bl ResetPaletteFade
- bl ResetTasks
- bl ResetSpriteData
- ldr r3, =0x04000208
- ldrh r2, [r3]
- strh r4, [r3]
- ldr r4, =0x04000200
- ldrh r0, [r4]
- movs r1, 0x1
- orrs r0, r1
- strh r0, [r4]
- strh r2, [r3]
- ldr r0, =sub_81371EC
- bl SetVBlankCallback
- ldr r0, =sub_81371D4
- bl SetMainCallback2
- bl sub_8137304
- lsls r0, 24
- cmp r0, 0
- bne _081372D2
- ldr r0, =gMain
- ldr r0, [r0, 0x8]
- bl SetMainCallback2
-_081372D2:
- add sp, 0x8
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end c2_change_map
-
- thumb_func_start sub_8137304
-sub_8137304: @ 8137304
- push {r4-r7,lr}
- bl get_map_light_from_warp0
- lsls r0, 24
- lsrs r6, r0, 24
- bl sav1_map_get_light_level
- lsls r0, 24
- lsrs r5, r0, 24
- movs r3, 0
- ldr r4, =gUnknown_085B27C8
- ldrb r0, [r4]
- cmp r0, 0
- beq _08137358
- adds r7, r4, 0
- adds r0, r4, 0x4
- mov r12, r0
-_08137326:
- lsls r2, r3, 3
- adds r1, r2, r7
- ldrb r0, [r1]
- cmp r0, r6
- bne _08137348
- ldrb r0, [r1, 0x1]
- cmp r0, r5
- bne _08137348
- mov r1, r12
- adds r0, r2, r1
- ldr r0, [r0]
- bl _call_via_r0
- movs r0, 0x1
- b _0813735A
- .pool
-_08137348:
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- lsls r0, r3, 3
- adds r0, r4
- ldrb r0, [r0]
- cmp r0, 0
- bne _08137326
-_08137358:
- movs r0, 0
-_0813735A:
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_8137304
-
- thumb_func_start sub_8137360
-sub_8137360: @ 8137360
- push {r4-r6,lr}
- lsls r0, 24
- lsls r1, 24
- lsrs r5, r0, 24
- lsrs r4, r1, 24
- movs r3, 0
- ldr r1, =gUnknown_085B27C8
- ldrb r0, [r1]
- cmp r0, 0
- beq _081373A0
- adds r6, r1, 0
-_08137376:
- lsls r0, r3, 3
- adds r2, r0, r6
- ldrb r0, [r2]
- cmp r0, r5
- bne _08137390
- ldrb r0, [r2, 0x1]
- cmp r0, r4
- bne _08137390
- ldrb r0, [r2, 0x2]
- b _081373A2
- .pool
-_08137390:
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- lsls r0, r3, 3
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _08137376
-_081373A0:
- movs r0, 0
-_081373A2:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_8137360
-
- thumb_func_start fade_type_for_given_maplight_pair
-fade_type_for_given_maplight_pair: @ 81373A8
- push {r4-r6,lr}
- lsls r0, 24
- lsls r1, 24
- lsrs r5, r0, 24
- lsrs r4, r1, 24
- movs r3, 0
- ldr r1, =gUnknown_085B27C8
- ldrb r0, [r1]
- cmp r0, 0
- beq _081373E8
- adds r6, r1, 0
-_081373BE:
- lsls r0, r3, 3
- adds r2, r0, r6
- ldrb r0, [r2]
- cmp r0, r5
- bne _081373D8
- ldrb r0, [r2, 0x1]
- cmp r0, r4
- bne _081373D8
- ldrb r0, [r2, 0x3]
- b _081373EA
- .pool
-_081373D8:
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- lsls r0, r3, 3
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _081373BE
-_081373E8:
- movs r0, 0
-_081373EA:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end fade_type_for_given_maplight_pair
-
- thumb_func_start sub_81373F0
-sub_81373F0: @ 81373F0
- push {lr}
- ldr r0, =sub_8137404
- movs r1, 0
- bl CreateTask
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81373F0
-
- thumb_func_start sub_8137404
-sub_8137404: @ 8137404
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- ldr r0, =sub_8137420
- str r0, [r1]
- bx lr
- .pool
- thumb_func_end sub_8137404
-
- thumb_func_start sub_8137420
-sub_8137420: @ 8137420
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0
- movs r1, 0
- bl SetGpuReg
- ldr r0, =gCaveTransitionTiles
- ldr r1, =0x0600c000
- bl LZ77UnCompVram
- ldr r0, =gCaveTransitionTilemap
- ldr r1, =0x0600f800
- bl LZ77UnCompVram
- ldr r0, =gCaveTransitionPalette_White
- movs r1, 0xE0
- movs r2, 0x20
- bl LoadPalette
- ldr r0, =gUnknown_085B28A0
- movs r1, 0xE0
- movs r2, 0x10
- bl LoadPalette
- ldr r1, =0x00003e41
- movs r0, 0x50
- bl SetGpuReg
- movs r0, 0x52
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x54
- movs r1, 0
- bl SetGpuReg
- ldr r1, =0x00001f0c
- movs r0, 0x8
- bl SetGpuReg
- movs r1, 0x8A
- lsls r1, 5
- movs r0, 0
- bl SetGpuReg
- ldr r1, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, =sub_81374C4
- str r1, [r0]
- movs r2, 0
- movs r1, 0x10
- strh r1, [r0, 0x8]
- strh r2, [r0, 0xA]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8137420
-
- thumb_func_start sub_81374C4
-sub_81374C4: @ 81374C4
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r5, r1, r2
- ldrh r4, [r5, 0xA]
- movs r0, 0x80
- lsls r0, 5
- adds r1, r4, r0
- lsls r1, 16
- lsrs r1, 16
- movs r0, 0x52
- bl SetGpuReg
- cmp r4, 0x10
- bhi _081374F8
- ldrh r0, [r5, 0xA]
- adds r0, 0x1
- strh r0, [r5, 0xA]
- b _08137500
- .pool
-_081374F8:
- movs r0, 0
- strh r0, [r5, 0xC]
- ldr r0, =sub_813750C
- str r0, [r5]
-_08137500:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81374C4
-
- thumb_func_start sub_813750C
-sub_813750C: @ 813750C
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r1, =0x00001010
- movs r0, 0x52
- bl SetGpuReg
- ldr r1, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r4, r0, r1
- ldrh r1, [r4, 0xC]
- cmp r1, 0x7
- bhi _08137554
- adds r0, r1, 0x1
- strh r0, [r4, 0xC]
- lsls r1, 1
- ldr r0, =gUnknown_085B28A0
- adds r0, r1, r0
- movs r2, 0x10
- subs r2, r1
- lsls r2, 16
- lsrs r2, 16
- movs r1, 0xE0
- bl LoadPalette
- b _08137566
- .pool
-_08137554:
- ldr r0, =gCaveTransitionPalette_White
- movs r1, 0
- movs r2, 0x20
- bl LoadPalette
- ldr r0, =sub_8137574
- str r0, [r4]
- movs r0, 0x8
- strh r0, [r4, 0xC]
-_08137566:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_813750C
-
- thumb_func_start sub_8137574
-sub_8137574: @ 8137574
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- ldrh r2, [r1, 0xC]
- movs r3, 0xC
- ldrsh r0, [r1, r3]
- cmp r0, 0
- beq _08137598
- subs r0, r2, 0x1
- strh r0, [r1, 0xC]
- b _081375A0
- .pool
-_08137598:
- ldr r0, =gMain
- ldr r0, [r0, 0x8]
- bl SetMainCallback2
-_081375A0:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8137574
-
- thumb_func_start sub_81375A8
-sub_81375A8: @ 81375A8
- push {lr}
- ldr r0, =sub_81375BC
- movs r1, 0
- bl CreateTask
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81375A8
-
- thumb_func_start sub_81375BC
-sub_81375BC: @ 81375BC
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- ldr r0, =sub_81375D8
- str r0, [r1]
- bx lr
- .pool
- thumb_func_end sub_81375BC
-
- thumb_func_start sub_81375D8
-sub_81375D8: @ 81375D8
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0
- movs r1, 0
- bl SetGpuReg
- ldr r0, =gCaveTransitionTiles
- ldr r1, =0x0600c000
- bl LZ77UnCompVram
- ldr r0, =gCaveTransitionTilemap
- ldr r1, =0x0600f800
- bl LZ77UnCompVram
- movs r0, 0x50
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x52
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x54
- movs r1, 0
- bl SetGpuReg
- ldr r1, =0x00001f0c
- movs r0, 0x8
- bl SetGpuReg
- movs r1, 0x8A
- lsls r1, 5
- movs r0, 0
- bl SetGpuReg
- ldr r0, =gCaveTransitionPalette_White
- movs r1, 0xE0
- movs r2, 0x20
- bl LoadPalette
- ldr r0, =gCaveTransitionPalette_Black
- movs r1, 0
- movs r2, 0x20
- bl LoadPalette
- ldr r1, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, =sub_8137678
- str r1, [r0]
- movs r2, 0
- movs r1, 0x10
- strh r1, [r0, 0x8]
- strh r2, [r0, 0xA]
- strh r2, [r0, 0xC]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81375D8
-
- thumb_func_start sub_8137678
-sub_8137678: @ 8137678
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
- ldrh r1, [r4, 0xC]
- cmp r1, 0xF
- bhi _081376B4
- adds r2, r1, 0x1
- adds r0, r2, 0x1
- strh r0, [r4, 0xC]
- movs r0, 0xF
- subs r0, r1
- lsls r0, 1
- ldr r1, =gUnknown_085B2890
- adds r0, r1
- lsls r2, 17
- lsrs r2, 16
- movs r1, 0xE0
- bl LoadPalette
- b _081376C8
- .pool
-_081376B4:
- ldr r1, =0x00001010
- movs r0, 0x52
- bl SetGpuReg
- ldr r1, =0x00003e41
- movs r0, 0x50
- bl SetGpuReg
- ldr r0, =sub_81376DC
- str r0, [r4]
-_081376C8:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8137678
-
- thumb_func_start sub_81376DC
-sub_81376DC: @ 81376DC
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r5, r1, r2
- ldrh r0, [r5, 0xA]
- movs r1, 0x10
- subs r1, r0
- lsls r1, 16
- lsrs r4, r1, 16
- movs r0, 0x80
- lsls r0, 21
- adds r1, r0
- lsrs r1, 16
- movs r0, 0x52
- bl SetGpuReg
- cmp r4, 0
- beq _08137714
- ldrh r0, [r5, 0xA]
- adds r0, 0x1
- strh r0, [r5, 0xA]
- b _08137726
- .pool
-_08137714:
- ldr r0, =gCaveTransitionPalette_Black
- movs r1, 0
- movs r2, 0x20
- bl LoadPalette
- ldr r0, =gMain
- ldr r0, [r0, 0x8]
- bl SetMainCallback2
-_08137726:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81376DC
diff --git a/asm/fldeff_groundshake.s b/asm/fldeff_groundshake.s
deleted file mode 100644
index 81d92430e..000000000
--- a/asm/fldeff_groundshake.s
+++ /dev/null
@@ -1,596 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_81BE66C
-sub_81BE66C: @ 81BE66C
- push {lr}
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldrh r1, [r0, 0x4]
- movs r0, 0xD0
- lsls r0, 5
- cmp r1, r0
- bne _081BE690
- movs r0, 0xA7
- lsls r0, 1
- bl FlagGet
- lsls r0, 24
- lsrs r0, 24
- b _081BE692
- .pool
-_081BE690:
- movs r0, 0
-_081BE692:
- pop {r1}
- bx r1
- thumb_func_end sub_81BE66C
-
- thumb_func_start sub_81BE698
-sub_81BE698: @ 81BE698
- push {lr}
- ldr r0, =gUnknown_0203CF18
- ldr r0, [r0]
- adds r0, 0x4
- bl sub_8151E50
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BE698
-
- thumb_func_start sub_81BE6AC
-sub_81BE6AC: @ 81BE6AC
- ldr r1, =gUnknown_0203CF18
- movs r0, 0
- str r0, [r1]
- bx lr
- .pool
- thumb_func_end sub_81BE6AC
-
- thumb_func_start sub_81BE6B8
-sub_81BE6B8: @ 81BE6B8
- push {r4,lr}
- ldr r4, =gUnknown_0203CF18
- ldr r0, [r4]
- cmp r0, 0
- beq _081BE6CC
- movs r0, 0
- str r0, [r4]
- b _081BE718
- .pool
-_081BE6CC:
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldrh r1, [r0, 0x4]
- movs r0, 0xD0
- lsls r0, 5
- cmp r1, r0
- bne _081BE718
- movs r0, 0xA7
- lsls r0, 1
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- beq _081BE718
- movs r0, 0xC8
- bl AllocZeroed
- str r0, [r4]
- adds r0, 0x4
- bl sub_8151B3C
- ldr r0, [r4]
- adds r0, 0x4
- ldr r1, =gUnknown_08617E18
- bl sub_8151B68
- ldr r0, [r4]
- adds r0, 0x4
- movs r1, 0x1
- movs r2, 0x1
- bl sub_8151CA8
- ldr r0, =sub_81BE698
- movs r1, 0xFF
- bl CreateTask
- ldr r1, [r4]
- strb r0, [r1]
-_081BE718:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BE6B8
-
- thumb_func_start sub_81BE72C
-sub_81BE72C: @ 81BE72C
- push {r4,lr}
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldrh r1, [r0, 0x4]
- movs r0, 0xD0
- lsls r0, 5
- cmp r1, r0
- bne _081BE788
- movs r0, 0xA7
- lsls r0, 1
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- beq _081BE788
- ldr r4, =gUnknown_0203CF18
- ldr r0, [r4]
- cmp r0, 0
- beq _081BE788
- ldr r0, =sub_81BE698
- bl FuncIsActiveTask
- lsls r0, 24
- cmp r0, 0
- beq _081BE766
- ldr r0, [r4]
- ldrb r0, [r0]
- bl DestroyTask
-_081BE766:
- ldr r0, [r4]
- adds r0, 0x4
- movs r1, 0x1
- movs r2, 0x1
- bl sub_8151D28
- ldr r0, [r4]
- adds r0, 0x4
- movs r1, 0x1
- movs r2, 0x1
- bl sub_8151C50
- ldr r0, [r4]
- bl Free
- movs r0, 0
- str r0, [r4]
-_081BE788:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BE72C
-
- thumb_func_start sub_81BE79C
-sub_81BE79C: @ 81BE79C
- push {r4,lr}
- ldr r0, =0x000040cb
- bl VarGet
- lsls r0, 16
- cmp r0, 0
- beq _081BE7B8
- movs r0, 0xA7
- lsls r0, 1
- bl FlagClear
- b _081BE7EE
- .pool
-_081BE7B8:
- bl Random
- lsls r0, 16
- lsrs r4, r0, 16
- movs r0, 0x1
- ands r4, r0
- movs r0, 0x9D
- bl FlagGet
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _081BE7D4
- movs r4, 0x1
-_081BE7D4:
- cmp r4, 0
- beq _081BE7E6
- movs r0, 0xA7
- lsls r0, 1
- bl FlagSet
- bl sub_81BE6B8
- b _081BE7EE
-_081BE7E6:
- movs r0, 0xA7
- lsls r0, 1
- bl FlagClear
-_081BE7EE:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_81BE79C
-
- thumb_func_start sub_81BE7F4
-sub_81BE7F4: @ 81BE7F4
- push {lr}
- ldr r0, =sub_81BE808
- movs r1, 0x8
- bl CreateTask
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BE7F4
-
- thumb_func_start sub_81BE808
-sub_81BE808: @ 81BE808
- push {r4,r5,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldrb r1, [r0, 0x5]
- ldrb r2, [r0, 0x4]
- movs r0, 0x2D
- mov r3, sp
- bl TryGetFieldObjectIdByLocalIdAndMap
- mov r0, sp
- ldrb r0, [r0]
- lsls r2, r0, 3
- adds r2, r0
- lsls r2, 2
- ldr r4, =gMapObjects
- adds r2, r4
- ldr r3, =gSprites
- ldrb r1, [r2, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- ldrh r1, [r0, 0x26]
- adds r1, 0x4
- strh r1, [r0, 0x26]
- ldr r0, =gPlayerAvatar
- ldrb r0, [r0, 0x5]
- lsls r1, r0, 3
- adds r1, r0
- lsls r1, 2
- adds r1, r4
- ldrb r2, [r2, 0x4]
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r0, r3
- movs r4, 0x22
- ldrsh r2, [r0, r4]
- movs r4, 0x26
- ldrsh r0, [r0, r4]
- adds r2, r0
- ldrb r1, [r1, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- movs r3, 0x22
- ldrsh r1, [r0, r3]
- movs r4, 0x26
- ldrsh r0, [r0, r4]
- adds r1, r0
- cmp r2, r1
- blt _081BE882
- adds r0, r5, 0
- bl DestroyTask
- bl EnableBothScriptContexts
-_081BE882:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BE808
-
- thumb_func_start sp136_strengh_sound
-sp136_strengh_sound: @ 81BE89C
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- mov r8, r0
- adds r4, r1, 0
- adds r5, r2, 0
- adds r6, r3, 0
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- lsls r4, 24
- lsrs r4, 24
- lsls r5, 24
- lsrs r5, 24
- lsls r6, 24
- lsrs r6, 24
- ldr r0, =sub_81BE900
- movs r1, 0x9
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- movs r0, 0
- strh r4, [r1, 0x8]
- strh r0, [r1, 0xA]
- strh r5, [r1, 0xC]
- strh r6, [r1, 0xE]
- mov r0, r8
- strh r0, [r1, 0x10]
- movs r0, 0
- bl SetCameraPanningCallback
- movs r0, 0xD6
- bl PlaySE
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sp136_strengh_sound
-
- thumb_func_start sub_81BE900
-sub_81BE900: @ 81BE900
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- ldr r1, =gTasks + 0x8
- adds r4, r0, r1
- ldrh r0, [r4, 0x2]
- adds r0, 0x1
- strh r0, [r4, 0x2]
- movs r1, 0x2
- ldrsh r0, [r4, r1]
- movs r2, 0x6
- ldrsh r1, [r4, r2]
- bl __modsi3
- cmp r0, 0
- bne _081BE95C
- strh r0, [r4, 0x2]
- ldrh r0, [r4, 0x4]
- subs r0, 0x1
- strh r0, [r4, 0x4]
- ldrh r0, [r4]
- negs r0, r0
- strh r0, [r4]
- ldrh r0, [r4, 0x8]
- negs r0, r0
- strh r0, [r4, 0x8]
- movs r1, 0
- ldrsh r0, [r4, r1]
- movs r2, 0x8
- ldrsh r1, [r4, r2]
- bl SetCameraPanning
- movs r1, 0x4
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _081BE95C
- bl sub_81BE968
- adds r0, r5, 0
- bl DestroyTask
- bl InstallCameraPanAheadCallback
-_081BE95C:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BE900
-
- thumb_func_start sub_81BE968
-sub_81BE968: @ 81BE968
- push {lr}
- ldr r0, =sub_81BE9C0
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0xFF
- beq _081BE988
- ldr r0, =gTasks
- lsls r1, r2, 2
- adds r1, r2
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x8]
- adds r0, 0x1
- strh r0, [r1, 0x8]
-_081BE988:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BE968
-
- thumb_func_start sub_81BE994
-sub_81BE994: @ 81BE994
- push {lr}
- ldr r0, =gUnknown_08617D94
- bl LoadSpriteSheets
- bl sub_81BEA20
- ldr r0, =sub_81BE9C0
- movs r1, 0x8
- bl CreateTask
- movs r0, 0x2
- movs r1, 0x1
- movs r2, 0x10
- movs r3, 0x3
- bl sp136_strengh_sound
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BE994
-
- thumb_func_start sub_81BE9C0
-sub_81BE9C0: @ 81BE9C0
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r3, r1, 3
- ldr r4, =gTasks + 0x8
- adds r2, r3, r4
- ldrh r0, [r2, 0x2]
- adds r0, 0x1
- strh r0, [r2, 0x2]
- lsls r0, 16
- movs r1, 0xFA
- lsls r1, 18
- cmp r0, r1
- beq _081BE9E6
- ldrh r0, [r2]
- cmp r0, 0x11
- bne _081BE9F0
-_081BE9E6:
- adds r0, r4, 0
- subs r0, 0x8
- adds r0, r3, r0
- ldr r1, =sub_81BEA00
- str r1, [r0]
-_081BE9F0:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BE9C0
-
- thumb_func_start sub_81BEA00
-sub_81BEA00: @ 81BEA00
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0xFA
- lsls r0, 4
- bl FreeSpriteTilesByTag
- adds r0, r4, 0
- bl DestroyTask
- bl EnableBothScriptContexts
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_81BEA00
-
- thumb_func_start sub_81BEA20
-sub_81BEA20: @ 81BEA20
- push {r4-r7,lr}
- movs r4, 0
- ldr r5, =gUnknown_08617D64
- adds r7, r5, 0x2
- ldr r6, =gSprites
-_081BEA2A:
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 1
- adds r1, r0, r5
- ldrh r1, [r1]
- adds r1, 0x78
- lsls r1, 16
- asrs r1, 16
- adds r0, r7
- movs r3, 0
- ldrsh r2, [r0, r3]
- ldr r0, =gUnknown_08617E60
- movs r3, 0x8
- bl CreateSprite
- lsls r0, 24
- lsrs r1, r0, 24
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- ldrb r2, [r0, 0x5]
- movs r3, 0xD
- negs r3, r3
- adds r1, r3, 0
- ands r2, r1
- movs r1, 0xF
- ands r2, r1
- strb r2, [r0, 0x5]
- strh r4, [r0, 0x2E]
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x7
- bls _081BEA2A
- movs r4, 0
- ldr r5, =gUnknown_08617D64
- adds r7, r5, 0x2
- ldr r6, =gSprites
-_081BEA78:
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 1
- adds r1, r0, r5
- ldrh r1, [r1]
- adds r1, 0x73
- lsls r1, 16
- asrs r1, 16
- adds r0, r7
- ldrh r2, [r0]
- subs r2, 0x3
- lsls r2, 16
- asrs r2, 16
- ldr r0, =gUnknown_08617E34
- movs r3, 0x8
- bl CreateSprite
- lsls r0, 24
- lsrs r1, r0, 24
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- ldrb r2, [r0, 0x5]
- movs r3, 0xD
- negs r3, r3
- adds r1, r3, 0
- ands r2, r1
- movs r1, 0xF
- ands r2, r1
- strb r2, [r0, 0x5]
- strh r4, [r0, 0x2E]
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x7
- bls _081BEA78
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BEA20
-
- thumb_func_start sub_81BEAD8
-sub_81BEAD8: @ 81BEAD8
- push {r4,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x30]
- adds r0, 0x2
- strh r0, [r4, 0x30]
- movs r1, 0x30
- ldrsh r0, [r4, r1]
- lsrs r1, r0, 31
- adds r0, r1
- asrs r0, 1
- strh r0, [r4, 0x26]
- movs r0, 0x22
- ldrsh r3, [r4, r0]
- movs r1, 0x26
- ldrsh r0, [r4, r1]
- adds r3, r0
- ldr r2, =gUnknown_08617D64
- movs r0, 0x2E
- ldrsh r1, [r4, r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 1
- adds r2, 0x4
- adds r0, r2
- movs r1, 0
- ldrsh r0, [r0, r1]
- cmp r3, r0
- ble _081BEB1A
- adds r0, r4, 0
- bl DestroySprite
- bl sub_81BE968
-_081BEB1A:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BEAD8
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/fldeff_softboiled.s b/asm/fldeff_softboiled.s
deleted file mode 100644
index c3aa4f1ed..000000000
--- a/asm/fldeff_softboiled.s
+++ /dev/null
@@ -1,339 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start hm_prepare_dive_probably
-hm_prepare_dive_probably: @ 8161508
- push {r4-r6,lr}
- bl GetCursorSelectionMonId
- lsls r0, 24
- lsrs r0, 24
- movs r6, 0x64
- muls r0, r6
- ldr r4, =gPlayerParty
- adds r0, r4
- movs r1, 0x3A
- bl GetMonData
- adds r5, r0, 0
- lsls r5, 16
- lsrs r5, 16
- bl GetCursorSelectionMonId
- lsls r0, 24
- lsrs r0, 24
- muls r0, r6
- adds r0, r4
- movs r1, 0x39
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- adds r0, r5, 0
- movs r1, 0x5
- bl __udivsi3
- lsls r0, 16
- lsrs r0, 16
- cmp r4, r0
- bhi _08161558
- movs r0, 0
- b _0816155A
- .pool
-_08161558:
- movs r0, 0x1
-_0816155A:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end hm_prepare_dive_probably
-
- thumb_func_start sub_8161560
-sub_8161560: @ 8161560
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, =gUnknown_0203CEC8
- movs r1, 0xA
- strb r1, [r0, 0xB]
- ldrb r1, [r0, 0x9]
- strb r1, [r0, 0xA]
- bl GetCursorSelectionMonId
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x1
- bl sub_81B0FCC
- movs r0, 0x5
- bl display_pokemon_menu_message
- ldr r1, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, =sub_81B1370
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8161560
-
- thumb_func_start sub_81615A8
-sub_81615A8: @ 81615A8
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- lsls r0, 24
- lsrs r4, r0, 24
- str r4, [sp, 0x4]
- ldr r1, =gUnknown_0203CEC8
- ldrb r7, [r1, 0x9]
- mov r8, r7
- ldrb r0, [r1, 0xA]
- adds r5, r0, 0
- cmp r5, 0x6
- bls _081615EC
- movs r0, 0
- strb r0, [r1, 0xB]
- bl display_pokemon_menu_message
- ldr r1, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, =sub_81B1370
- str r1, [r0]
- b _08161658
- .pool
-_081615EC:
- movs r0, 0x64
- mov r10, r0
- mov r0, r10
- muls r0, r5
- ldr r1, =gPlayerParty
- mov r9, r1
- adds r6, r0, r1
- adds r0, r6, 0
- movs r1, 0x39
- bl GetMonData
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0
- beq _0816161A
- cmp r7, r5
- beq _0816161A
- adds r0, r6, 0
- movs r1, 0x3A
- bl GetMonData
- cmp r0, r4
- bne _08161628
-_0816161A:
- ldr r0, [sp, 0x4]
- bl sub_81617B8
- b _08161658
- .pool
-_08161628:
- movs r0, 0x1
- bl PlaySE
- mov r1, r10
- mov r0, r8
- muls r0, r1
- add r0, r9
- movs r1, 0x3A
- bl GetMonData
- movs r1, 0x5
- bl __udivsi3
- adds r3, r0, 0
- lsls r3, 16
- asrs r3, 16
- movs r2, 0x1
- negs r2, r2
- ldr r0, =sub_816166C
- str r0, [sp]
- ldr r0, [sp, 0x4]
- mov r1, r8
- bl sub_81B1F18
-_08161658:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81615A8
-
- thumb_func_start sub_816166C
-sub_816166C: @ 816166C
- push {r4,r5,lr}
- sub sp, 0x4
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x1
- bl PlaySE
- ldr r5, =gUnknown_0203CEC8
- movs r1, 0x9
- ldrsb r1, [r5, r1]
- movs r0, 0x64
- muls r0, r1
- ldr r1, =gPlayerParty
- adds r0, r1
- movs r1, 0x3A
- bl GetMonData
- movs r1, 0x5
- bl __udivsi3
- adds r3, r0, 0
- lsls r3, 16
- asrs r3, 16
- ldrb r1, [r5, 0xA]
- ldr r0, =sub_81616C0
- str r0, [sp]
- adds r0, r4, 0
- movs r2, 0x1
- bl sub_81B1F18
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816166C
-
- thumb_func_start sub_81616C0
-sub_81616C0: @ 81616C0
- push {r4,r5,lr}
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- ldr r0, =gUnknown_0203CEC8
- movs r1, 0xA
- ldrsb r1, [r0, r1]
- movs r0, 0x64
- muls r0, r1
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gStringVar1
- bl GetMonNickname
- ldr r4, =gStringVar4
- ldr r1, =gText_PkmnHPRestoredByVar2
- adds r0, r4, 0
- bl StringExpandPlaceholders
- adds r0, r4, 0
- movs r1, 0
- bl sub_81B1B5C
- movs r0, 0x2
- bl schedule_bg_copy_tilemap_to_vram
- ldr r1, =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- ldr r1, =sub_8161724
- str r1, [r0]
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81616C0
-
- thumb_func_start sub_8161724
-sub_8161724: @ 8161724
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- bl sub_81B1BD4
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08161772
- ldr r4, =gUnknown_0203CEC8
- movs r0, 0
- strb r0, [r4, 0xB]
- ldrb r0, [r4, 0x9]
- movs r1, 0
- bl sub_81B0FCC
- ldrb r0, [r4, 0xA]
- strb r0, [r4, 0x9]
- ldrb r0, [r4, 0xA]
- movs r1, 0x1
- bl sub_81B0FCC
- movs r0, 0x6
- movs r1, 0
- bl sub_8198070
- movs r0, 0x6
- bl ClearWindowTilemap
- movs r0, 0
- bl display_pokemon_menu_message
- ldr r1, =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- ldr r1, =sub_81B1370
- str r1, [r0]
-_08161772:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8161724
-
- thumb_func_start sub_8161784
-sub_8161784: @ 8161784
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl sub_81B1BD4
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _081617AA
- movs r0, 0x5
- bl display_pokemon_menu_message
- ldr r0, =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, =sub_81B1370
- str r0, [r1]
-_081617AA:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8161784
-
- thumb_func_start sub_81617B8
-sub_81617B8: @ 81617B8
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x5
- bl PlaySE
- ldr r0, =gText_CantBeUsedOnPkmn
- movs r1, 0
- bl sub_81B1B5C
- movs r0, 0x2
- 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, =sub_8161784
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81617B8
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/fldeff_strength.s b/asm/fldeff_strength.s
deleted file mode 100644
index fdadd2aac..000000000
--- a/asm/fldeff_strength.s
+++ /dev/null
@@ -1,93 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start hm_prepare_rocksmash
-hm_prepare_rocksmash: @ 8145DC4
- push {r4,lr}
- movs r0, 0x57
- bl npc_before_player_of_type
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08145DD8
- movs r0, 0
- b _08145DF2
-_08145DD8:
- ldr r4, =gSpecialVar_Result
- bl GetCursorSelectionMonId
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4]
- ldr r1, =gUnknown_03005DB0
- ldr r0, =FieldCallback_Teleport
- str r0, [r1]
- ldr r1, =gUnknown_0203CEEC
- ldr r0, =sub_8145E0C
- str r0, [r1]
- movs r0, 0x1
-_08145DF2:
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end hm_prepare_rocksmash
-
- thumb_func_start sub_8145E0C
-sub_8145E0C: @ 8145E0C
- push {lr}
- bl GetCursorSelectionMonId
- ldr r1, =gFieldEffectArguments
- lsls r0, 24
- lsrs r0, 24
- str r0, [r1]
- ldr r0, =FieryPath_EventScript_2908FD
- bl ScriptContext1_SetupScript
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8145E0C
-
- thumb_func_start sub_8145E2C
-sub_8145E2C: @ 8145E2C
- push {lr}
- bl oei_task_add
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- ldr r2, =sub_8145E74
- lsrs r0, r2, 16
- strh r0, [r1, 0x18]
- strh r2, [r1, 0x1A]
- ldr r0, =gFieldEffectArguments
- ldr r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, =gPlayerParty
- adds r0, r1
- ldr r1, =gStringVar1
- bl GetMonNickname
- movs r0, 0
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_8145E2C
-
- thumb_func_start sub_8145E74
-sub_8145E74: @ 8145E74
- push {lr}
- movs r0, 0x28
- bl FieldEffectActiveListRemove
- bl EnableBothScriptContexts
- pop {r0}
- bx r0
- thumb_func_end sub_8145E74
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/fldeff_sweetscent.s b/asm/fldeff_sweetscent.s
deleted file mode 100644
index 2055f7069..000000000
--- a/asm/fldeff_sweetscent.s
+++ /dev/null
@@ -1,220 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start SetUpFieldMove_SweetScent
-SetUpFieldMove_SweetScent: @ 8159EF0
- ldr r1, =gUnknown_03005DB0
- ldr r0, =FieldCallback_Teleport
- str r0, [r1]
- ldr r1, =gUnknown_0203CEEC
- ldr r0, =hm2_sweet_scent
- str r0, [r1]
- movs r0, 0x1
- bx lr
- .pool
- thumb_func_end SetUpFieldMove_SweetScent
-
- thumb_func_start hm2_sweet_scent
-hm2_sweet_scent: @ 8159F10
- push {lr}
- movs r0, 0x33
- bl FieldEffectStart
- bl GetCursorSelectionMonId
- ldr r1, =gFieldEffectArguments
- lsls r0, 24
- lsrs r0, 24
- str r0, [r1]
- pop {r0}
- bx r0
- .pool
- thumb_func_end hm2_sweet_scent
-
- thumb_func_start FldEff_SweetScent
-FldEff_SweetScent: @ 8159F2C
- push {lr}
- bl sub_80AC3D0
- bl oei_task_add
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- ldr r2, =sub_8159F5C
- lsrs r0, r2, 16
- strh r0, [r1, 0x18]
- strh r2, [r1, 0x1A]
- movs r0, 0
- pop {r1}
- bx r1
- .pool
- thumb_func_end FldEff_SweetScent
-
- thumb_func_start sub_8159F5C
-sub_8159F5C: @ 8159F5C
- push {r4,r5,lr}
- sub sp, 0x4
- movs r0, 0xEC
- bl PlaySE
- ldr r5, =gPlttBufferUnfaded
- ldr r1, =gPaletteDecompressionBuffer
- movs r4, 0x80
- lsls r4, 1
- adds r0, r5, 0
- adds r2, r4, 0
- bl CpuFastSet
- ldr r0, =gPlttBufferFaded
- adds r1, r5, 0
- adds r2, r4, 0
- bl CpuFastSet
- bl GetPlayerAvatarObjectId
- ldr r2, =gSprites
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r1, [r1, 0x5]
- lsrs r1, 4
- adds r1, 0x10
- movs r0, 0x1
- lsls r0, r1
- mvns r0, r0
- movs r1, 0x1F
- str r1, [sp]
- movs r1, 0x4
- movs r2, 0
- movs r3, 0x8
- bl BeginNormalPaletteFade
- ldr r0, =sub_8159FEC
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- movs r0, 0
- strh r0, [r1, 0x8]
- movs r0, 0x33
- bl FieldEffectActiveListRemove
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8159F5C
-
- thumb_func_start sub_8159FEC
-sub_8159FEC: @ 8159FEC
- push {r4-r6,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0
- bne _0815A088
- bl sub_81BE72C
- movs r0, 0x40
- movs r1, 0x8
- movs r2, 0x1F
- bl BlendPalettes
- ldr r0, =gTasks
- lsls r1, r5, 2
- adds r1, r5
- lsls r1, 3
- adds r4, r1, r0
- ldrh r1, [r4, 0x8]
- movs r2, 0x8
- ldrsh r0, [r4, r2]
- cmp r0, 0x40
- bne _0815A084
- strh r6, [r4, 0x8]
- bl SweetScentWildEncounter
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0815A044
- adds r0, r5, 0
- bl DestroyTask
- b _0815A088
- .pool
-_0815A044:
- ldr r0, =sub_815A090
- str r0, [r4]
- bl GetPlayerAvatarObjectId
- ldr r2, =gSprites
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r1, [r1, 0x5]
- lsrs r1, 4
- adds r1, 0x10
- movs r0, 0x1
- lsls r0, r1
- mvns r0, r0
- movs r1, 0x1F
- str r1, [sp]
- movs r1, 0x4
- movs r2, 0x8
- movs r3, 0
- bl BeginNormalPaletteFade
- bl sub_81BE6B8
- b _0815A088
- .pool
-_0815A084:
- adds r0, r1, 0x1
- strh r0, [r4, 0x8]
-_0815A088:
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_8159FEC
-
- thumb_func_start sub_815A090
-sub_815A090: @ 815A090
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0815A0BE
- ldr r0, =gPaletteDecompressionBuffer
- ldr r1, =gPlttBufferUnfaded
- movs r2, 0x80
- lsls r2, 1
- bl CpuFastSet
- bl sub_80AC3E4
- ldr r0, =EventScript_290CAE
- bl ScriptContext1_SetupScript
- adds r0, r4, 0
- bl DestroyTask
-_0815A0BE:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_815A090
-
- .align 2, 0 @ Don't pad with nop.
-
diff --git a/asm/fossil_specials.s b/asm/fossil_specials.s
index 7956f814a..eb7cb8ada 100644
--- a/asm/fossil_specials.s
+++ b/asm/fossil_specials.s
@@ -5,893 +5,6 @@
.text
- thumb_func_start sub_81BEB24
-sub_81BEB24: @ 81BEB24
- push {r4,r5,lr}
- movs r4, 0
- ldr r5, =gUnknown_08617DA4
-_081BEB2A:
- lsls r2, r4, 2
- adds r2, r5
- ldrb r0, [r2]
- adds r0, 0x7
- ldrb r1, [r2, 0x1]
- adds r1, 0x7
- ldrh r2, [r2, 0x2]
- bl MapGridSetMetatileIdAt
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x11
- bls _081BEB2A
- bl DrawWholeMapView
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BEB24
-
- thumb_func_start sub_81BEB54
-sub_81BEB54: @ 81BEB54
- push {lr}
- ldr r0, =sub_81BED50
- movs r1, 0x9
- bl CreateTask
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BEB54
-
- thumb_func_start sub_81BEB68
-sub_81BEB68: @ 81BEB68
- push {lr}
- ldr r0, =sub_81BEBF4
- movs r1, 0x9
- bl CreateTask
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BEB68
-
- thumb_func_start sub_81BEB7C
-sub_81BEB7C: @ 81BEB7C
- push {lr}
- ldr r0, =sub_81BF028
- movs r1, 0x9
- bl CreateTask
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BEB7C
-
- thumb_func_start sub_81BEB90
-sub_81BEB90: @ 81BEB90
- push {r4,lr}
- ldr r4, =gUnknown_0203CF14
- ldr r0, [r4]
- ldrh r1, [r0]
- movs r0, 0x10
- bl SetGpuReg
- ldr r0, [r4]
- ldrh r1, [r0, 0x2]
- movs r0, 0x12
- bl SetGpuReg
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BEB90
-
- thumb_func_start sub_81BEBB4
-sub_81BEBB4: @ 81BEBB4
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r2, r1, r2
- ldrh r1, [r2, 0x8]
- movs r3, 0x8
- ldrsh r0, [r2, r3]
- cmp r0, 0
- bne _081BEBEC
- ldr r0, =gUnknown_0203CF14
- ldr r1, [r0]
- ldrh r0, [r1]
- negs r0, r0
- strh r0, [r1]
- movs r0, 0x2
- strh r0, [r2, 0x8]
- bl sub_81BEB90
- b _081BEBF0
- .pool
-_081BEBEC:
- subs r0, r1, 0x1
- strh r0, [r2, 0x8]
-_081BEBF0:
- pop {r0}
- bx r0
- thumb_func_end sub_81BEBB4
-
- thumb_func_start sub_81BEBF4
-sub_81BEBF4: @ 81BEBF4
- push {r4,r5,lr}
- sub sp, 0xC
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r1, =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- movs r1, 0x8
- ldrsh r0, [r0, r1]
- cmp r0, 0x6
- bls _081BEC10
- b _081BED40
-_081BEC10:
- lsls r0, 2
- ldr r1, =_081BEC24
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_081BEC24:
- .4byte _081BEC40
- .4byte _081BEC50
- .4byte _081BEC88
- .4byte _081BECB0
- .4byte _081BECF8
- .4byte _081BED00
- .4byte _081BED1C
-_081BEC40:
- bl FreeAllWindowBuffers
- movs r0, 0
- movs r1, 0x7
- movs r2, 0x2
- bl SetBgAttribute
- b _081BED04
-_081BEC50:
- ldr r4, =gUnknown_0203CF04
- movs r0, 0x92
- lsls r0, 4
- bl AllocZeroed
- str r0, [r4]
- ldr r4, =gUnknown_0203CF08
- movs r0, 0x80
- lsls r0, 4
- bl AllocZeroed
- str r0, [r4]
- movs r0, 0
- movs r1, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- b _081BECD8
- .pool
-_081BEC88:
- ldr r0, =gUnknown_08617274
- ldr r4, =gUnknown_0203CF04
- ldr r1, [r4]
- movs r2, 0x92
- lsls r2, 3
- bl CpuSet
- ldr r1, [r4]
- movs r2, 0x92
- lsls r2, 4
- movs r0, 0
- movs r3, 0
- bl LoadBgTiles
- b _081BECD8
- .pool
-_081BECB0:
- ldr r0, =gUnknown_0203CF08
- ldr r1, [r0]
- movs r0, 0
- bl SetBgTilemapBuffer
- ldr r1, =gUnknown_08617B94
- movs r0, 0x6
- str r0, [sp]
- movs r0, 0xC
- str r0, [sp, 0x4]
- movs r0, 0x11
- str r0, [sp, 0x8]
- movs r0, 0
- movs r2, 0xC
- movs r3, 0x1D
- bl CopyToBgTilemapBufferRect_ChangePalette
- movs r0, 0
- bl CopyBgTilemapBufferToVram
-_081BECD8:
- ldr r1, =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- ldrh r1, [r0, 0x8]
- adds r1, 0x1
- strh r1, [r0, 0x8]
- b _081BED40
- .pool
-_081BECF8:
- movs r0, 0
- bl ShowBg
- b _081BED04
-_081BED00:
- bl sub_81BEB24
-_081BED04:
- ldr r0, =gTasks
- lsls r1, r5, 2
- adds r1, r5
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x8]
- adds r0, 0x1
- strh r0, [r1, 0x8]
- b _081BED40
- .pool
-_081BED1C:
- ldr r4, =gUnknown_0203CF14
- movs r0, 0x4
- bl Alloc
- str r0, [r4]
- movs r2, 0
- movs r1, 0x2
- strh r1, [r0]
- strh r2, [r0, 0x2]
- ldr r0, =sub_81BEBB4
- movs r1, 0xA
- bl CreateTask
- adds r0, r5, 0
- bl DestroyTask
- bl EnableBothScriptContexts
-_081BED40:
- add sp, 0xC
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BEBF4
-
- thumb_func_start sub_81BED50
-sub_81BED50: @ 81BED50
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x10
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
- ldr r1, =gTasks
- lsls r0, 2
- add r0, r10
- lsls r0, 3
- adds r0, r1
- ldrh r0, [r0, 0x8]
- subs r0, 0x1
- lsls r0, 16
- asrs r0, 16
- adds r6, r1, 0
- cmp r0, 0x7
- bls _081BED7C
- b _081BF002
-_081BED7C:
- lsls r0, 2
- ldr r1, =_081BED90
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_081BED90:
- .4byte _081BEDB0
- .4byte _081BF002
- .4byte _081BEDC4
- .4byte _081BEF64
- .4byte _081BEF94
- .4byte _081BEFD0
- .4byte _081BEFF0
- .4byte _081BEFF8
-_081BEDB0:
- ldr r4, =gUnknown_0203CF10
- movs r0, 0xC0
- lsls r0, 2
- bl AllocZeroed
- str r0, [r4]
- b _081BF002
- .pool
-_081BEDC4:
- mov r1, r10
- lsls r0, r1, 2
- adds r1, r0, r1
- lsls r1, 3
- adds r2, r1, r6
- ldrh r3, [r2, 0xE]
- movs r4, 0xE
- ldrsh r1, [r2, r4]
- str r0, [sp, 0x8]
- cmp r1, 0x5F
- bgt _081BEE8A
- movs r1, 0xA
- ldrsh r0, [r2, r1]
- cmp r0, 0x1
- ble _081BEE7C
- lsls r0, r3, 24
- lsrs r4, r0, 24
- movs r0, 0x30
- bl Alloc
- ldr r3, =gUnknown_0203CF10
- ldr r1, [r3]
- lsls r2, r4, 3
- adds r1, r2, r1
- str r0, [r1]
- movs r5, 0
- adds r4, r2, 0
-_081BEDFA:
- ldr r0, [r3]
- adds r0, r4, r0
- ldr r0, [r0]
- adds r0, r5
- strb r5, [r0]
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, 0x2F
- bls _081BEDFA
- movs r5, 0
- ldr r7, =gUnknown_0203CF10
- adds r6, r2, 0
-_081BEE14:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x30
- bl __umodsi3
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x30
- bl __umodsi3
- lsls r0, 16
- lsrs r0, 16
- ldr r1, [r7]
- adds r1, r6, r1
- ldr r1, [r1]
- adds r0, r1, r0
- ldrb r2, [r0]
- adds r1, r4
- ldrb r1, [r1]
- strb r1, [r0]
- ldr r0, [r7]
- adds r0, r6, r0
- ldr r0, [r0]
- adds r0, r4
- strb r2, [r0]
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, 0x2F
- bls _081BEE14
- ldr r0, =gTasks
- ldr r1, [sp, 0x8]
- add r1, r10
- lsls r1, 3
- adds r2, r1, r0
- ldrh r3, [r2, 0xE]
- movs r4, 0xE
- ldrsh r1, [r2, r4]
- adds r6, r0, 0
- cmp r1, 0x5F
- bgt _081BEE78
- adds r0, r3, 0x1
- strh r0, [r2, 0xE]
-_081BEE78:
- movs r0, 0
- strh r0, [r2, 0xA]
-_081BEE7C:
- ldr r1, [sp, 0x8]
- add r1, r10
- lsls r1, 3
- adds r1, r6
- ldrh r0, [r1, 0xA]
- adds r0, 0x1
- strh r0, [r1, 0xA]
-_081BEE8A:
- ldr r0, [sp, 0x8]
- add r0, r10
- lsls r0, 3
- adds r0, r6
- ldrb r4, [r0, 0xE]
- ldrb r5, [r0, 0xC]
- lsls r0, r4, 16
- cmp r5, r4
- bcs _081BEF32
- str r0, [sp, 0xC]
-_081BEE9E:
- movs r6, 0
- adds r0, r5, 0x1
- str r0, [sp, 0x4]
- lsls r4, r5, 3
- movs r2, 0x5F
- subs r1, r2, r5
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 4
- mov r9, r0
-_081BEEB2:
- ldr r0, =gUnknown_0203CF04
- ldr r0, [r0]
- ldr r7, =gUnknown_0203CF10
- ldr r3, [r7]
- adds r3, r4, r3
- ldrb r2, [r3, 0x4]
- adds r1, r2, 0x1
- strb r1, [r3, 0x4]
- lsls r2, 24
- lsrs r2, 24
- ldr r1, [r3]
- adds r1, r2
- ldrb r1, [r1]
- add r1, r9
- lsls r1, 16
- lsrs r1, 16
- movs r2, 0x1
- mov r8, r2
- str r2, [sp]
- movs r2, 0
- movs r3, 0x30
- bl sub_81BF2B8
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0
- beq _081BEEB2
- ldr r0, [r7]
- adds r1, r4, r0
- ldrb r0, [r1, 0x4]
- cmp r0, 0x2F
- bls _081BEF24
- ldr r0, [r1]
- bl Free
- ldr r0, [r7]
- adds r0, r4, r0
- movs r1, 0
- str r1, [r0]
- ldr r1, [sp, 0x8]
- add r1, r10
- lsls r1, 3
- ldr r4, =gTasks
- adds r1, r4
- ldrh r0, [r1, 0xC]
- adds r0, 0x1
- strh r0, [r1, 0xC]
- mov r0, r8
- ands r5, r0
- cmp r5, 0x1
- bne _081BEF24
- ldr r0, =gUnknown_0203CF14
- ldr r1, [r0]
- ldrh r0, [r1, 0x2]
- subs r0, 0x1
- strh r0, [r1, 0x2]
-_081BEF24:
- ldr r1, [sp, 0x4]
- lsls r0, r1, 16
- lsrs r5, r0, 16
- ldr r2, [sp, 0xC]
- lsrs r0, r2, 16
- cmp r5, r0
- bcc _081BEE9E
-_081BEF32:
- ldr r0, =gUnknown_0203CF04
- ldr r1, [r0]
- movs r2, 0x92
- lsls r2, 4
- movs r0, 0
- movs r3, 0
- bl LoadBgTiles
- ldr r0, =gUnknown_0203CF10
- ldr r0, [r0]
- movs r4, 0xBE
- lsls r4, 2
- adds r0, r4
- ldrb r0, [r0, 0x4]
- cmp r0, 0x2F
- bhi _081BF002
- b _081BF014
- .pool
-_081BEF64:
- movs r0, 0
- bl UnsetBgTilemapBuffer
- ldr r0, =sub_81BEBB4
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFF
- beq _081BEF7C
- bl DestroyTask
-_081BEF7C:
- ldr r0, =gUnknown_0203CF14
- ldr r1, [r0]
- movs r0, 0
- strh r0, [r1]
- strh r0, [r1, 0x2]
- bl sub_81BEB90
- b _081BF002
- .pool
-_081BEF94:
- ldr r4, =gUnknown_0203CF14
- ldr r0, [r4]
- bl Free
- movs r5, 0
- str r5, [r4]
- ldr r4, =gUnknown_0203CF10
- ldr r0, [r4]
- bl Free
- str r5, [r4]
- ldr r4, =gUnknown_0203CF04
- ldr r0, [r4]
- bl Free
- str r5, [r4]
- ldr r4, =gUnknown_0203CF08
- ldr r0, [r4]
- bl Free
- str r5, [r4]
- b _081BF002
- .pool
-_081BEFD0:
- movs r0, 0xC
- movs r1, 0x2
- bl SetGpuRegBits
- movs r0, 0x8
- movs r1, 0
- bl SetGpuRegBits
- movs r0, 0
- movs r1, 0x7
- movs r2, 0
- bl SetBgAttribute
- bl sub_81971D0
- b _081BF002
-_081BEFF0:
- movs r0, 0
- bl ShowBg
- b _081BF002
-_081BEFF8:
- mov r0, r10
- bl DestroyTask
- bl EnableBothScriptContexts
-_081BF002:
- ldr r0, =gTasks
- mov r2, r10
- lsls r1, r2, 2
- add r1, r10
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x8]
- adds r0, 0x1
- strh r0, [r1, 0x8]
-_081BF014:
- add sp, 0x10
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BED50
-
- thumb_func_start sub_81BF028
-sub_81BF028: @ 81BF028
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x18
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r1, =gTasks
- lsls r0, r7, 2
- adds r0, r7
- lsls r0, 3
- adds r0, r1
- ldrh r0, [r0, 0x8]
- subs r0, 0x1
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x7
- bls _081BF04C
- b _081BF228
-_081BF04C:
- lsls r0, 2
- ldr r1, =_081BF060
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_081BF060:
- .4byte _081BF080
- .4byte _081BF0B4
- .4byte _081BF0DC
- .4byte _081BF0F0
- .4byte _081BF148
- .4byte _081BF170
- .4byte _081BF1CC
- .4byte _081BF224
-_081BF080:
- ldr r4, =gUnknown_0203CF0C
- movs r0, 0x14
- bl AllocZeroed
- str r0, [r4]
- movs r0, 0x80
- bl AllocZeroed
- ldr r1, [r4]
- str r0, [r1]
- movs r0, 0x8
- bl AllocZeroed
- ldr r1, [r4]
- str r0, [r1, 0x4]
- movs r0, 0x80
- lsls r0, 2
- bl AllocZeroed
- ldr r1, [r4]
- str r0, [r1, 0xC]
- movs r0, 0
- strh r0, [r1, 0x10]
- b _081BF228
- .pool
-_081BF0B4:
- ldr r0, =gUnknown_0203CF0C
- ldr r0, [r0]
- ldr r1, [r0]
- movs r5, 0
- ldr r2, =gRootFossil_Gfx
-_081BF0BE:
- adds r0, r5, r2
- ldrb r0, [r0]
- strb r0, [r1]
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- adds r1, 0x1
- cmp r5, 0x7F
- bls _081BF0BE
- b _081BF228
- .pool
-_081BF0DC:
- ldr r0, =gUnknown_0203CF0C
- ldr r0, [r0]
- ldr r1, [r0, 0x4]
- ldr r0, [r0]
- str r0, [r1]
- movs r0, 0x80
- strh r0, [r1, 0x4]
- b _081BF228
- .pool
-_081BF0F0:
- mov r1, sp
- ldr r0, =gUnknown_08617E00
- ldm r0!, {r2-r4}
- stm r1!, {r2-r4}
- ldm r0!, {r2-r4}
- stm r1!, {r2-r4}
- ldr r4, =gUnknown_0203CF0C
- ldr r0, [r4]
- ldr r0, [r0, 0x4]
- str r0, [sp, 0xC]
- movs r2, 0x10
- negs r2, r2
- mov r0, sp
- movs r1, 0x80
- movs r3, 0x1
- bl CreateSprite
- ldr r1, [r4]
- movs r3, 0
- strb r0, [r1, 0x8]
- ldr r2, =gSprites
- ldr r0, [r4]
- ldrb r1, [r0, 0x8]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- adds r0, 0x28
- strb r3, [r0]
- ldr r3, [r4]
- ldrb r1, [r3, 0x8]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrh r1, [r0, 0x20]
- strh r1, [r0, 0x2E]
- ldrb r1, [r3, 0x8]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x1
- strh r1, [r0, 0x30]
-_081BF148:
- movs r5, 0
- ldr r2, =gUnknown_0203CF0C
-_081BF14C:
- ldr r0, [r2]
- ldr r1, [r0, 0xC]
- lsls r0, r5, 1
- adds r0, r1
- strh r5, [r0]
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, 0xFF
- bls _081BF14C
- b _081BF228
- .pool
-_081BF170:
- movs r5, 0
- movs r6, 0xFF
- ldr r0, =0x000001ff
- mov r8, r0
-_081BF178:
- bl Random
- adds r4, r6, 0
- ands r4, r0
- bl Random
- adds r1, r6, 0
- ands r1, r0
- ldr r0, =gUnknown_0203CF0C
- ldr r3, [r0]
- ldr r0, [r3, 0xC]
- lsls r1, 1
- adds r1, r0
- ldrh r2, [r1]
- lsls r4, 1
- adds r4, r0
- ldrh r0, [r4]
- strh r0, [r1]
- strh r2, [r4]
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, r8
- bls _081BF178
- ldr r2, =gSprites
- ldrb r1, [r3, 0x8]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, =sub_81BF248
- str r1, [r0]
- b _081BF228
- .pool
-_081BF1CC:
- ldr r3, =gSprites
- ldr r5, =gUnknown_0203CF0C
- ldr r0, [r5]
- ldrb r1, [r0, 0x8]
- lsls r0, r1, 4
- adds r0, r1
- lsls r2, r0, 2
- adds r0, r3, 0
- adds r0, 0x1C
- adds r0, r2, r0
- ldr r1, [r0]
- ldr r0, =SpriteCallbackDummy
- cmp r1, r0
- bne _081BF238
- adds r0, r2, r3
- bl DestroySprite
- ldr r0, [r5]
- ldr r0, [r0, 0xC]
- bl Free
- ldr r0, [r5]
- movs r4, 0
- str r4, [r0, 0xC]
- ldr r0, [r0, 0x4]
- bl Free
- ldr r0, [r5]
- str r4, [r0, 0x4]
- ldr r0, [r0]
- bl Free
- ldr r0, [r5]
- str r4, [r0]
- bl Free
- str r4, [r5]
- b _081BF228
- .pool
-_081BF224:
- bl EnableBothScriptContexts
-_081BF228:
- ldr r0, =gTasks
- lsls r1, r7, 2
- adds r1, r7
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x8]
- adds r0, 0x1
- strh r0, [r1, 0x8]
-_081BF238:
- add sp, 0x18
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81BF028
-
- thumb_func_start sub_81BF248
-sub_81BF248: @ 81BF248
- push {r4,r5,lr}
- sub sp, 0x4
- adds r5, r0, 0
- ldr r0, =gUnknown_0203CF0C
- ldr r0, [r0]
- ldrh r0, [r0, 0x10]
- cmp r0, 0xFF
- bls _081BF268
- ldr r0, =SpriteCallbackDummy
- str r0, [r5, 0x1C]
- b _081BF2B0
- .pool
-_081BF268:
- ldrh r1, [r5, 0x22]
- movs r2, 0x22
- ldrsh r0, [r5, r2]
- cmp r0, 0x5F
- ble _081BF2AC
- movs r4, 0
-_081BF274:
- ldr r0, =gUnknown_0203CF0C
- ldr r3, [r0]
- ldr r0, [r3]
- ldrh r1, [r3, 0x10]
- adds r2, r1, 0x1
- strh r2, [r3, 0x10]
- lsls r1, 16
- ldr r2, [r3, 0xC]
- lsrs r1, 15
- adds r1, r2
- ldrh r1, [r1]
- movs r2, 0
- str r2, [sp]
- movs r3, 0x10
- bl sub_81BF2B8
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x1
- bls _081BF274
- adds r0, r5, 0
- movs r1, 0
- bl StartSpriteAnim
- b _081BF2B0
- .pool
-_081BF2AC:
- adds r0, r1, 0x1
- strh r0, [r5, 0x22]
-_081BF2B0:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_81BF248
-
thumb_func_start sub_81BF2B8
sub_81BF2B8: @ 81BF2B8
push {r4-r7,lr}
diff --git a/asm/intro.s b/asm/intro.s
deleted file mode 100644
index a0149851e..000000000
--- a/asm/intro.s
+++ /dev/null
@@ -1,6270 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_816CBE8
-sub_816CBE8: @ 816CBE8
- push {lr}
- bl LoadOam
- bl ProcessSpriteCopyRequests
- bl TransferPlttBuffer
- bl ScanlineEffect_InitHBlankDmaTransfer
- pop {r0}
- bx r0
- thumb_func_end sub_816CBE8
-
- thumb_func_start sub_816CC00
-sub_816CC00: @ 816CC00
- push {lr}
- bl RunTasks
- bl AnimateSprites
- bl BuildOamBuffer
- bl UpdatePaletteFade
- ldr r0, =gMain
- ldrh r0, [r0, 0x2E]
- cmp r0, 0
- beq _0816CC3C
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0816CC3C
- ldr r0, =sub_816CC54
- bl SetMainCallback2
- b _0816CC4C
- .pool
-_0816CC3C:
- ldr r2, =gUnknown_030062A0
- ldr r1, [r2]
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _0816CC4C
- adds r0, r1, 0x1
- str r0, [r2]
-_0816CC4C:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816CC00
-
- thumb_func_start sub_816CC54
-sub_816CC54: @ 816CC54
- push {lr}
- bl UpdatePaletteFade
- lsls r0, 24
- cmp r0, 0
- bne _0816CC66
- ldr r0, =CB2_InitTitleScreen
- bl SetMainCallback2
-_0816CC66:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816CC54
-
- thumb_func_start load_copyright_graphics
-@ void load_copyright_graphics(u16 tile_patterns_dest, u16 tilemap_dest, u16 unknown_dest)
-load_copyright_graphics: @ 816CC70
- push {r4-r6,lr}
- adds r3, r0, 0
- adds r4, r1, 0
- adds r5, r2, 0
- lsls r3, 16
- lsrs r3, 16
- lsls r4, 16
- lsrs r4, 16
- lsls r5, 16
- lsrs r5, 16
- ldr r0, =gIntroCopyright_Gfx
- movs r6, 0xC0
- lsls r6, 19
- adds r3, r6
- adds r1, r3, 0
- bl LZ77UnCompVram
- ldr r0, =gIntroCopyright_Tilemap
- adds r4, r6
- adds r1, r4, 0
- bl LZ77UnCompVram
- ldr r0, =gIntroCopyright_Pal
- adds r1, r5, 0
- movs r2, 0x20
- bl LoadPalette
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end load_copyright_graphics
-
- thumb_func_start SerialCb_CopyrightScreen
-SerialCb_CopyrightScreen: @ 816CCB8
- push {lr}
- ldr r0, =gUnknown_030062B0
- bl GameCubeMultiBoot_HandleSerialInterrupt
- pop {r0}
- bx r0
- .pool
- thumb_func_end SerialCb_CopyrightScreen
-
- thumb_func_start do_copyright_screen
-do_copyright_screen: @ 816CCC8
- push {r4-r6,lr}
- sub sp, 0x10
- ldr r0, =gMain
- movs r1, 0x87
- lsls r1, 3
- adds r5, r0, r1
- ldrb r4, [r5]
- cmp r4, 0x8C
- bne _0816CCDC
- b _0816CE00
-_0816CCDC:
- cmp r4, 0x8C
- bgt _0816CCEC
- cmp r4, 0
- beq _0816CCF4
- b _0816CDBC
- .pool
-_0816CCEC:
- cmp r4, 0x8D
- bne _0816CCF2
- b _0816CE2C
-_0816CCF2:
- b _0816CDBC
-_0816CCF4:
- movs r0, 0
- bl SetVBlankCallback
- movs r0, 0x50
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x52
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x54
- movs r1, 0
- bl SetGpuReg
- movs r1, 0xA0
- lsls r1, 19
- ldr r2, =0x00007fff
- adds r0, r2, 0
- strh r0, [r1]
- movs r0, 0
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x10
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x12
- movs r1, 0
- bl SetGpuReg
- str r4, [sp, 0x4]
- movs r1, 0xC0
- lsls r1, 19
- ldr r2, =0x05006000
- add r0, sp, 0x4
- bl CpuSet
- str r4, [sp, 0x8]
- add r0, sp, 0x8
- movs r1, 0xE0
- lsls r1, 19
- ldr r2, =0x05000100
- bl CpuSet
- add r0, sp, 0xC
- strh r4, [r0]
- ldr r1, =0x05000002
- ldr r2, =0x010001ff
- bl CpuSet
- bl ResetPaletteFade
- movs r1, 0xE0
- lsls r1, 6
- movs r0, 0
- movs r2, 0
- bl load_copyright_graphics
- bl ScanlineEffect_Stop
- bl ResetTasks
- bl ResetSpriteData
- bl FreeAllSpritePalettes
- movs r0, 0x1
- negs r0, r0
- ldr r1, =0x0000ffff
- str r1, [sp]
- movs r1, 0
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- movs r1, 0xE0
- lsls r1, 3
- movs r0, 0x8
- bl SetGpuReg
- movs r0, 0x1
- bl EnableInterrupts
- ldr r0, =sub_816CBE8
- bl SetVBlankCallback
- movs r1, 0x80
- lsls r1, 19
- movs r2, 0xA0
- lsls r2, 1
- adds r0, r2, 0
- strh r0, [r1]
- ldr r0, =SerialCb_CopyrightScreen
- bl SetSerialCallback
- ldr r0, =gUnknown_030062B0
- bl GameCubeMultiBoot_Init
-_0816CDBC:
- bl UpdatePaletteFade
- ldr r0, =gMain
- movs r1, 0x87
- lsls r1, 3
- adds r0, r1
- ldrb r1, [r0]
- adds r1, 0x1
- strb r1, [r0]
- ldr r0, =gUnknown_030062B0
- bl GameCubeMultiBoot_Main
- b _0816CEA0
- .pool
-_0816CE00:
- ldr r4, =gUnknown_030062B0
- adds r0, r4, 0
- bl GameCubeMultiBoot_Main
- ldrb r0, [r4, 0x2]
- cmp r0, 0x1
- beq _0816CEA0
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldrb r0, [r5]
- adds r0, 0x1
- strb r0, [r5]
- b _0816CEA0
- .pool
-_0816CE2C:
- bl UpdatePaletteFade
- lsls r0, 24
- cmp r0, 0
- bne _0816CEA0
- ldr r0, =task_intro_1
- movs r1, 0
- bl CreateTask
- ldr r0, =sub_816CC00
- bl SetMainCallback2
- ldr r5, =gUnknown_030062B0
- ldrb r0, [r5, 0x2]
- cmp r0, 0
- beq _0816CE8C
- ldrb r0, [r5, 0x2]
- cmp r0, 0x2
- bne _0816CE96
- ldr r6, =0x020000ac
- ldr r4, [r6]
- ldr r0, =0x65366347
- cmp r4, r0
- bne _0816CE6C
- ldr r0, =gMultiBootProgram_PokemonColosseum_Start
- movs r1, 0x80
- lsls r1, 18
- movs r2, 0xA0
- lsls r2, 9
- bl CpuSet
- str r4, [r6]
-_0816CE6C:
- adds r0, r5, 0
- bl GameCubeMultiBoot_ExecuteProgram
- b _0816CE96
- .pool
-_0816CE8C:
- bl GameCubeMultiBoot_Quit
- ldr r0, =sub_800BA38
- bl SetSerialCallback
-_0816CE96:
- movs r0, 0
- b _0816CEA2
- .pool
-_0816CEA0:
- movs r0, 0x1
-_0816CEA2:
- add sp, 0x10
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end do_copyright_screen
-
- thumb_func_start c2_copyright_1
-c2_copyright_1: @ 816CEAC
- push {lr}
- bl do_copyright_screen
- lsls r0, 24
- cmp r0, 0
- bne _0816CEFA
- bl sub_815355C
- lsls r0, 16
- lsrs r0, 16
- bl SetSaveBlocksPointers
- bl sub_808447C
- bl ResetSaveCounters
- movs r0, 0
- bl sub_81534D0
- ldr r0, =gSaveFileStatus
- ldrh r0, [r0]
- cmp r0, 0
- beq _0816CEDE
- cmp r0, 0x2
- bne _0816CEE2
-_0816CEDE:
- bl Sav2_ClearSetDefault
-_0816CEE2:
- ldr r0, =gSaveBlock2Ptr
- ldr r0, [r0]
- ldrb r0, [r0, 0x15]
- lsls r0, 31
- lsrs r0, 31
- bl SetPokemonCryStereo
- ldr r0, =0x02000000
- movs r1, 0xE0
- lsls r1, 9
- bl InitHeap
-_0816CEFA:
- pop {r0}
- bx r0
- .pool
- thumb_func_end c2_copyright_1
-
- thumb_func_start CB2_InitCopyrightScreenAfterTitleScreen
-CB2_InitCopyrightScreenAfterTitleScreen: @ 816CF0C
- push {lr}
- bl do_copyright_screen
- pop {r0}
- bx r0
- thumb_func_end CB2_InitCopyrightScreenAfterTitleScreen
-
- thumb_func_start task_intro_1
-@ void task_intro_1(int task_id)
-task_intro_1: @ 816CF18
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- sub sp, 0xC
- mov r8, r0
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- movs r0, 0
- bl SetVBlankCallback
- ldr r4, =gUnknown_0203BCC8
- bl Random
- movs r1, 0x1
- ands r1, r0
- strh r1, [r4]
- bl intro_reset_and_hide_bgs
- movs r0, 0x1E
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x1A
- movs r1, 0x50
- bl SetGpuReg
- movs r0, 0x16
- movs r1, 0x18
- bl SetGpuReg
- movs r0, 0x12
- movs r1, 0x28
- bl SetGpuReg
- ldr r0, =gIntro1BGLeavesGfx
- movs r1, 0xC0
- lsls r1, 19
- bl LZ77UnCompVram
- ldr r0, =gIntro1BG0_Tilemap
- ldr r1, =0x06008000
- bl LZ77UnCompVram
- ldr r1, =0x06008800
- add r0, sp, 0x8
- movs r6, 0
- strh r6, [r0]
- ldr r4, =0x040000d4
- str r0, [r4]
- str r1, [r4, 0x4]
- ldr r5, =0x81000400
- str r5, [r4, 0x8]
- ldr r0, [r4, 0x8]
- ldr r0, =gIntro1BG1_Tilemap
- ldr r1, =0x06009000
- bl LZ77UnCompVram
- ldr r1, =0x06009800
- add r0, sp, 0x8
- strh r6, [r0]
- str r0, [r4]
- str r1, [r4, 0x4]
- str r5, [r4, 0x8]
- ldr r0, [r4, 0x8]
- ldr r0, =gIntro1BG2_Tilemap
- ldr r1, =0x0600a000
- bl LZ77UnCompVram
- ldr r1, =0x0600a800
- add r0, sp, 0x8
- strh r6, [r0]
- str r0, [r4]
- str r1, [r4, 0x4]
- str r5, [r4, 0x8]
- ldr r0, [r4, 0x8]
- ldr r0, =gIntro1BG3_Tilemap
- ldr r1, =0x0600b000
- bl LZ77UnCompVram
- ldr r1, =0x0600b800
- add r0, sp, 0x8
- strh r6, [r0]
- str r0, [r4]
- str r1, [r4, 0x4]
- str r5, [r4, 0x8]
- ldr r0, [r4, 0x8]
- ldr r0, =gIntro1BGPals
- movs r5, 0x80
- lsls r5, 2
- movs r1, 0
- adds r2, r5, 0
- bl LoadPalette
- ldr r1, =0x00009603
- movs r0, 0xE
- bl SetGpuReg
- ldr r1, =0x00009402
- movs r0, 0xC
- bl SetGpuReg
- ldr r1, =0x00009201
- movs r0, 0xA
- bl SetGpuReg
- movs r1, 0x90
- lsls r1, 8
- movs r0, 0x8
- bl SetGpuReg
- ldr r0, =gUnknown_085E4FDC
- bl LoadCompressedObjectPic
- ldr r0, =gUnknown_085E4FEC
- bl LoadCompressedObjectPic
- ldr r0, =gUnknown_085E4FFC
- bl LoadSpritePalettes
- ldr r0, =gUnknown_085E4A74
- bl LoadCompressedObjectPic
- ldr r0, =gUnknown_085E4A84
- bl LoadSpritePalettes
- ldr r4, =gPlttBufferUnfaded + 0x200
- movs r3, 0xF0
- lsls r3, 1
- adds r1, r4, r3
- adds r0, r4, 0
- movs r2, 0x10
- bl CpuSet
- movs r0, 0xE1
- lsls r0, 1
- adds r1, r4, r0
- adds r0, r4, 0
- movs r2, 0xF
- bl CpuSet
- movs r3, 0xD2
- lsls r3, 1
- adds r1, r4, r3
- adds r0, r4, 0
- movs r2, 0xE
- bl CpuSet
- movs r0, 0xC3
- lsls r0, 1
- adds r1, r4, r0
- adds r0, r4, 0
- movs r2, 0xD
- bl CpuSet
- movs r3, 0xB4
- lsls r3, 1
- adds r1, r4, r3
- adds r0, r4, 0
- movs r2, 0xC
- bl CpuSet
- movs r0, 0xA5
- lsls r0, 1
- adds r1, r4, r0
- adds r0, r4, 0
- movs r2, 0xB
- bl CpuSet
- movs r3, 0x96
- lsls r3, 1
- adds r1, r4, r3
- adds r0, r4, 0
- movs r2, 0xA
- bl CpuSet
- movs r0, 0x78
- movs r1, 0x50
- movs r2, 0
- bl sub_816FDB8
- movs r1, 0xE
- negs r1, r1
- movs r0, 0x78
- str r0, [sp]
- movs r0, 0
- str r0, [sp, 0x4]
- movs r0, 0xEC
- adds r2, r5, 0
- movs r3, 0x1
- bl sub_816F7D0
- ldr r2, =gTasks
- mov r3, r8
- lsls r1, r3, 2
- add r1, r8
- lsls r1, 3
- adds r1, r2
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r1, 0x8]
- ldr r0, =task_intro_2
- str r0, [r1]
- add sp, 0xC
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end task_intro_1
-
- thumb_func_start task_intro_2
-task_intro_2: @ 816D12C
- push {r4,r5,lr}
- sub sp, 0x4
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x1
- negs r0, r0
- movs r5, 0
- str r5, [sp]
- movs r1, 0
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- ldr r0, =sub_816CBE8
- bl SetVBlankCallback
- movs r1, 0xFA
- lsls r1, 5
- movs r0, 0
- bl SetGpuReg
- ldr r1, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, =task_intro_3
- str r1, [r0]
- ldr r0, =gUnknown_030062A0
- str r5, [r0]
- movs r0, 0xCF
- lsls r0, 1
- bl m4aSongNumStart
- bl sub_800B628
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end task_intro_2
-
- thumb_func_start task_intro_3
-task_intro_3: @ 816D190
- push {r4-r6,lr}
- sub sp, 0x8
- lsls r0, 24
- lsrs r4, r0, 24
- adds r6, r4, 0
- ldr r5, =gUnknown_030062A0
- ldr r0, [r5]
- cmp r0, 0x4C
- bne _0816D1BE
- ldr r2, =gSprites
- ldr r1, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- movs r3, 0x8
- ldrsh r1, [r0, r3]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x1
- strh r1, [r0, 0x2E]
-_0816D1BE:
- ldr r0, [r5]
- cmp r0, 0x80
- bne _0816D1CC
- ldr r0, =task_intro_3_1
- movs r1, 0
- bl CreateTask
-_0816D1CC:
- ldr r0, [r5]
- cmp r0, 0xFB
- bne _0816D1EE
- ldr r2, =gSprites
- ldr r1, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- movs r3, 0x8
- ldrsh r1, [r0, r3]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x2
- strh r1, [r0, 0x2E]
-_0816D1EE:
- ldr r1, [r5]
- movs r0, 0x80
- lsls r0, 1
- cmp r1, r0
- bne _0816D200
- ldr r0, =task_intro_3_2
- movs r1, 0
- bl CreateTask
-_0816D200:
- ldr r1, [r5]
- movs r0, 0xB8
- lsls r0, 1
- cmp r1, r0
- bne _0816D220
- movs r2, 0x80
- lsls r2, 3
- movs r0, 0x70
- str r0, [sp]
- movs r0, 0x1
- str r0, [sp, 0x4]
- movs r0, 0x30
- movs r1, 0
- movs r3, 0x5
- bl sub_816F7D0
-_0816D220:
- ldr r1, [r5]
- movs r0, 0xC0
- lsls r0, 1
- cmp r1, r0
- bne _0816D240
- movs r2, 0x80
- lsls r2, 3
- movs r0, 0x80
- str r0, [sp]
- movs r0, 0x1
- str r0, [sp, 0x4]
- movs r0, 0xC8
- movs r1, 0x3C
- movs r3, 0x9
- bl sub_816F7D0
-_0816D240:
- ldr r0, [r5]
- movs r4, 0x8C
- lsls r4, 2
- cmp r0, r4
- bne _0816D252
- ldr r0, =task_intro_3_3
- movs r1, 0
- bl CreateTask
-_0816D252:
- ldr r0, [r5]
- cmp r0, r4
- bls _0816D27A
- ldr r1, =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r0, r1
- movs r2, 0
- movs r1, 0x50
- strh r1, [r0, 0xA]
- strh r2, [r0, 0xC]
- movs r1, 0x18
- strh r1, [r0, 0xE]
- strh r2, [r0, 0x10]
- movs r1, 0x28
- strh r1, [r0, 0x12]
- strh r2, [r0, 0x14]
- ldr r1, =task_intro_4
- str r1, [r0]
-_0816D27A:
- add sp, 0x8
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end task_intro_3
-
- thumb_func_start task_intro_3_3
-task_intro_3_3: @ 816D2A0
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- ldr r1, =gTasks + 0x8
- adds r4, r0, r1
- ldrh r0, [r4, 0x4]
- adds r0, 0x1
- strh r0, [r4, 0x4]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0816D2C4
- ldrh r0, [r4, 0x6]
- adds r0, 0x1
- strh r0, [r4, 0x6]
-_0816D2C4:
- movs r1, 0
- ldrsh r0, [r4, r1]
- cmp r0, 0
- beq _0816D2D8
- cmp r0, 0x1
- beq _0816D314
- b _0816D324
- .pool
-_0816D2D8:
- ldr r0, =gUnknown_085E4AB8
- ldr r2, =gUnknown_085E4AD0
- movs r1, 0x8
- ldrsh r3, [r4, r1]
- lsls r3, 1
- adds r1, r3, r2
- ldrb r1, [r1]
- adds r2, 0x1
- adds r3, r2
- ldrh r2, [r4, 0x6]
- ldrb r3, [r3]
- adds r2, r3
- lsls r2, 16
- asrs r2, 16
- movs r3, 0
- bl CreateSprite
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
- movs r0, 0xC
- strh r0, [r4, 0x2]
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- b _0816D324
- .pool
-_0816D314:
- ldrh r0, [r4, 0x2]
- subs r0, 0x1
- strh r0, [r4, 0x2]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0
- bne _0816D324
- strh r0, [r4]
-_0816D324:
- movs r1, 0x6
- ldrsh r0, [r4, r1]
- cmp r0, 0x3C
- ble _0816D332
- adds r0, r5, 0
- bl DestroyTask
-_0816D332:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end task_intro_3_3
-
- thumb_func_start sub_816D338
-sub_816D338: @ 816D338
- push {lr}
- adds r1, r0, 0
- ldrh r0, [r1, 0x2E]
- adds r0, 0x1
- strh r0, [r1, 0x2E]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0xC
- bne _0816D350
- adds r0, r1, 0
- bl DestroySprite
-_0816D350:
- pop {r0}
- bx r0
- thumb_func_end sub_816D338
-
- thumb_func_start task_intro_4
-task_intro_4: @ 816D354
- push {r4,r5,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r1, r0, 24
- adds r4, r1, 0
- ldr r5, =gUnknown_030062A0
- ldr r2, [r5]
- ldr r0, =0x00000387
- cmp r2, r0
- bhi _0816D418
- ldr r0, =gTasks
- lsls r4, r1, 2
- adds r4, r1
- lsls r4, 3
- adds r4, r0
- movs r1, 0xA
- ldrsh r0, [r4, r1]
- lsls r0, 16
- ldrh r1, [r4, 0xC]
- adds r1, r0, r1
- ldr r0, =0xffffa000
- adds r1, r0
- asrs r0, r1, 16
- strh r0, [r4, 0xA]
- strh r1, [r4, 0xC]
- ldrh r1, [r4, 0xA]
- movs r0, 0x1A
- bl SetGpuReg
- movs r1, 0xE
- ldrsh r0, [r4, r1]
- lsls r0, 16
- ldrh r1, [r4, 0x10]
- adds r1, r0, r1
- ldr r0, =0xffff8000
- adds r1, r0
- asrs r0, r1, 16
- strh r0, [r4, 0xE]
- strh r1, [r4, 0x10]
- ldrh r1, [r4, 0xE]
- movs r0, 0x16
- bl SetGpuReg
- movs r1, 0x12
- ldrsh r0, [r4, r1]
- lsls r0, 16
- ldrh r1, [r4, 0x14]
- adds r1, r0, r1
- ldr r0, =0xffff4000
- adds r1, r0
- asrs r0, r1, 16
- strh r0, [r4, 0x12]
- strh r1, [r4, 0x14]
- ldrh r1, [r4, 0x12]
- movs r0, 0x12
- bl SetGpuReg
- ldr r1, [r5]
- movs r0, 0xD0
- lsls r0, 2
- cmp r1, r0
- bne _0816D43E
- ldr r0, =gUnknown_085E4FC4
- movs r1, 0x78
- movs r2, 0xA0
- movs r3, 0xA
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gSprites
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- adds r1, 0x3E
- ldrb r0, [r1]
- movs r2, 0x4
- orrs r0, r2
- strb r0, [r1]
- b _0816D43E
- .pool
-_0816D418:
- ldr r0, =0x000003ef
- cmp r2, r0
- bls _0816D43E
- movs r0, 0x1
- negs r0, r0
- ldr r1, =0x0000ffff
- str r1, [sp]
- movs r1, 0
- 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_intro_5
- str r1, [r0]
-_0816D43E:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end task_intro_4
-
- thumb_func_start task_intro_5
-task_intro_5: @ 816D458
- push {lr}
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r0, =gUnknown_030062A0
- ldr r1, [r0]
- ldr r0, =0x00000402
- cmp r1, r0
- bls _0816D476
- ldr r0, =gTasks
- lsls r1, r2, 2
- adds r1, r2
- lsls r1, 3
- adds r1, r0
- ldr r0, =task_intro_6
- str r0, [r1]
-_0816D476:
- pop {r0}
- bx r0
- .pool
- thumb_func_end task_intro_5
-
- thumb_func_start task_intro_6
-task_intro_6: @ 816D48C
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl intro_reset_and_hide_bgs
- movs r0, 0
- bl SetVBlankCallback
- bl ResetSpriteData
- bl FreeAllSpritePalettes
- ldr r0, =gUnknown_0203BD24
- movs r1, 0
- strh r1, [r0]
- ldr r0, =gUnknown_0203BD26
- strh r1, [r0]
- ldr r0, =gUnknown_0203BCCC
- strh r1, [r0]
- movs r0, 0x1
- bl load_intro_part2_graphics
- ldr r1, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, =task_intro_7
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end task_intro_6
-
- thumb_func_start task_intro_7
-task_intro_7: @ 816D4E4
- push {r4-r7,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, =gUnknown_0203BCC8
- ldrh r0, [r0]
- cmp r0, 0
- bne _0816D504
- ldr r0, =gUnknown_085F52BC
- bl LoadCompressedObjectPic
- b _0816D50A
- .pool
-_0816D504:
- ldr r0, =gUnknown_085F52CC
- bl LoadCompressedObjectPic
-_0816D50A:
- ldr r0, =gUnknown_085F52DC
- bl LoadCompressedObjectPic
- ldr r0, =gUnknown_085F52FC
- bl LoadCompressedObjectPic
- movs r6, 0
- lsls r7, r4, 2
- ldr r5, =gUnknown_085E4AE8
-_0816D51C:
- lsls r0, r6, 3
- adds r0, r5
- bl LoadCompressedObjectPic
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0x2
- bls _0816D51C
- ldr r0, =gUnknown_085F530C
- bl LoadSpritePalettes
- ldr r0, =gUnknown_085E4B08
- bl LoadSpritePalettes
- ldr r0, =gUnknown_085E4BDC
- movs r5, 0x88
- lsls r5, 1
- adds r1, r5, 0
- movs r2, 0x80
- movs r3, 0
- bl CreateSprite
- ldr r0, =gUnknown_085E4BA4
- movs r1, 0x90
- lsls r1, 1
- movs r2, 0x6E
- movs r3, 0x1
- bl CreateSprite
- ldr r0, =gUnknown_0203BCC8
- ldrh r0, [r0]
- cmp r0, 0
- bne _0816D590
- adds r0, r5, 0
- movs r1, 0x64
- bl sub_817B834
- b _0816D598
- .pool
-_0816D590:
- adds r0, r5, 0
- movs r1, 0x64
- bl sub_817B88C
-_0816D598:
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r2, =gSprites
- lsls r0, r6, 4
- adds r0, r6
- lsls r0, 2
- adds r5, r2, 0
- adds r5, 0x1C
- adds r3, r0, r5
- ldr r1, =sub_816F9D4
- str r1, [r3]
- adds r2, 0x8
- adds r0, r2
- ldr r1, =gUnknown_085E4DC4
- str r1, [r0]
- ldr r0, =gTasks
- adds r4, r7, r4
- lsls r4, 3
- adds r4, r0
- strh r6, [r4, 0xA]
- ldr r0, =gUnknown_085E4B40
- movs r1, 0x88
- lsls r1, 1
- movs r2, 0x50
- movs r3, 0x4
- bl CreateSprite
- movs r0, 0x40
- negs r0, r0
- movs r1, 0x3C
- bl sub_817B9C4
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r0, r6, 4
- adds r0, r6
- lsls r0, 2
- adds r0, r5
- ldr r1, =sub_816FAB0
- str r1, [r0]
- strh r6, [r4, 0xC]
- movs r0, 0x1
- negs r0, r0
- ldr r1, =0x0000ffff
- str r1, [sp]
- movs r1, 0
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- ldr r0, =sub_816CBE8
- bl SetVBlankCallback
- movs r1, 0x80
- lsls r1, 7
- movs r2, 0x80
- lsls r2, 3
- movs r0, 0x1
- movs r3, 0x10
- bl sub_817B3DC
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x8]
- movs r0, 0x1
- bl sub_817B150
- ldr r0, =task_intro_8
- str r0, [r4]
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end task_intro_7
-
- thumb_func_start task_intro_8
-@ void task_intro_8(int task_id)
-task_intro_8: @ 816D650
- push {r4-r7,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r4, r0, 24
- adds r6, r4, 0
- ldr r5, =gUnknown_030062A0
- ldr r1, [r5]
- movs r0, 0xE8
- lsls r0, 3
- cmp r1, r0
- bne _0816D67C
- ldr r1, =gUnknown_0203BD28
- movs r0, 0x2
- strh r0, [r1]
- ldr r1, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldrb r0, [r0, 0x8]
- bl DestroyTask
-_0816D67C:
- ldr r1, [r5]
- ldr r0, =0x0000079a
- cmp r1, r0
- bls _0816D6A4
- movs r0, 0x1
- negs r0, r0
- ldr r1, =0x0000ffff
- str r1, [sp]
- movs r1, 0x8
- 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_intro_9
- str r1, [r0]
-_0816D6A4:
- ldr r1, [r5]
- ldr r0, =0x00000455
- ldr r3, =gTasks
- cmp r1, r0
- bne _0816D6C8
- ldr r2, =gSprites
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r3
- movs r7, 0xA
- ldrsh r1, [r0, r7]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x1
- strh r1, [r0, 0x2E]
-_0816D6C8:
- ldr r1, [r5]
- ldr r0, =0x000004be
- cmp r1, r0
- bne _0816D6EA
- ldr r2, =gSprites
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r3
- movs r7, 0xA
- ldrsh r1, [r0, r7]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0
- strh r1, [r0, 0x2E]
-_0816D6EA:
- ldr r1, [r5]
- ldr r0, =0x00000572
- cmp r1, r0
- bne _0816D70C
- ldr r2, =gSprites
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r3
- movs r7, 0xC
- ldrsh r1, [r0, r7]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x1
- strh r1, [r0, 0x2E]
-_0816D70C:
- ldr r1, [r5]
- ldr r0, =0x00000576
- cmp r1, r0
- bne _0816D72E
- ldr r2, =gSprites
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r3
- movs r7, 0xA
- ldrsh r1, [r0, r7]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x2
- strh r1, [r0, 0x2E]
-_0816D72E:
- ldr r1, [r5]
- movs r0, 0xC5
- lsls r0, 3
- cmp r1, r0
- bne _0816D752
- ldr r2, =gSprites
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r3
- movs r7, 0xA
- ldrsh r1, [r0, r7]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x3
- strh r1, [r0, 0x2E]
-_0816D752:
- ldr r1, [r5]
- ldr r0, =0x000006bf
- cmp r1, r0
- bne _0816D774
- ldr r2, =gSprites
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r3
- movs r4, 0xA
- ldrsh r1, [r0, r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x4
- strh r1, [r0, 0x2E]
-_0816D774:
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r4, r0, r3
- ldrh r0, [r4, 0xE]
- lsls r0, 16
- asrs r0, 18
- movs r1, 0x7F
- ands r0, r1
- movs r1, 0x30
- bl Sin
- ldr r1, =gUnknown_0203BCCC
- strh r0, [r1]
- ldrh r2, [r4, 0xE]
- movs r7, 0xE
- ldrsh r1, [r4, r7]
- ldr r0, =0x000001ff
- cmp r1, r0
- bgt _0816D7A0
- adds r0, r2, 0x1
- strh r0, [r4, 0xE]
-_0816D7A0:
- movs r0, 0
- bl sub_817B540
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end task_intro_8
-
- thumb_func_start task_intro_9
-task_intro_9: @ 816D7E8
- push {lr}
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r0, =gUnknown_030062A0
- ldr r1, [r0]
- ldr r0, =0x00000814
- cmp r1, r0
- bls _0816D806
- ldr r0, =gTasks
- lsls r1, r2, 2
- adds r1, r2
- lsls r1, 3
- adds r1, r0
- ldr r0, =task_intro_10
- str r0, [r1]
-_0816D806:
- pop {r0}
- bx r0
- .pool
- thumb_func_end task_intro_9
-
- thumb_func_start sub_816D81C
-sub_816D81C: @ 816D81C
- push {r4,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x34]
- adds r0, 0x4
- strh r0, [r4, 0x34]
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- cmp r0, 0x8
- bls _0816D830
- b _0816D9BA
-_0816D830:
- lsls r0, 2
- ldr r1, =_0816D840
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_0816D840:
- .4byte _0816D864
- .4byte _0816D87A
- .4byte _0816D898
- .4byte _0816D8BC
- .4byte _0816D8D8
- .4byte _0816D8FA
- .4byte _0816D912
- .4byte _0816D96E
- .4byte _0816D99C
-_0816D864:
- ldrh r0, [r4, 0x30]
- adds r0, 0x1
- strh r0, [r4, 0x30]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0xB3
- bgt _0816D874
- b _0816D9BA
-_0816D874:
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
-_0816D87A:
- ldrh r0, [r4, 0x20]
- subs r0, 0x4
- strh r0, [r4, 0x20]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x3C
- beq _0816D88A
- b _0816D9BA
-_0816D88A:
- movs r0, 0x8
- strh r0, [r4, 0x2E]
- movs r0, 0x14
- strh r0, [r4, 0x30]
- movs r0, 0x2
- strh r0, [r4, 0x32]
- b _0816D9BA
-_0816D898:
- ldrh r1, [r4, 0x20]
- adds r1, 0x8
- strh r1, [r4, 0x20]
- ldrh r0, [r4, 0x22]
- subs r0, 0x2
- strh r0, [r4, 0x22]
- lsls r1, 16
- asrs r1, 16
- cmp r1, 0x7C
- beq _0816D8AE
- b _0816D9BA
-_0816D8AE:
- movs r0, 0x8
- strh r0, [r4, 0x2E]
- movs r0, 0x14
- strh r0, [r4, 0x30]
- movs r0, 0x3
- strh r0, [r4, 0x32]
- b _0816D9BA
-_0816D8BC:
- ldrh r0, [r4, 0x22]
- adds r0, 0x4
- strh r0, [r4, 0x22]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x50
- bne _0816D9BA
- movs r0, 0x8
- strh r0, [r4, 0x2E]
- movs r0, 0xA
- strh r0, [r4, 0x30]
- movs r0, 0x4
- strh r0, [r4, 0x32]
- b _0816D9BA
-_0816D8D8:
- ldrh r1, [r4, 0x20]
- subs r1, 0x8
- strh r1, [r4, 0x20]
- ldrh r0, [r4, 0x22]
- subs r0, 0x2
- strh r0, [r4, 0x22]
- lsls r1, 16
- asrs r1, 16
- cmp r1, 0x3C
- bne _0816D9BA
- movs r0, 0x8
- strh r0, [r4, 0x2E]
- movs r0, 0xA
- strh r0, [r4, 0x30]
- movs r0, 0x5
- strh r0, [r4, 0x32]
- b _0816D9BA
-_0816D8FA:
- ldrh r0, [r4, 0x20]
- adds r0, 0x3C
- strh r0, [r4, 0x20]
- movs r0, 0xC0
- strh r0, [r4, 0x36]
- movs r0, 0x80
- strh r0, [r4, 0x38]
- movs r0, 0x3
- strh r0, [r4, 0x3A]
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
-_0816D912:
- ldrh r0, [r4, 0x36]
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x3C
- bl Sin
- strh r0, [r4, 0x24]
- ldrh r0, [r4, 0x38]
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x14
- bl Sin
- strh r0, [r4, 0x26]
- ldrh r1, [r4, 0x36]
- adds r1, 0x2
- strh r1, [r4, 0x36]
- ldrh r0, [r4, 0x38]
- adds r0, 0x4
- strh r0, [r4, 0x38]
- movs r0, 0xFF
- ands r1, r0
- cmp r1, 0x40
- bne _0816D9BA
- adds r2, r4, 0
- adds r2, 0x3F
- ldrb r0, [r2]
- movs r1, 0x2
- negs r1, r1
- ands r1, r0
- strb r1, [r2]
- ldrh r0, [r4, 0x3A]
- subs r0, 0x1
- strh r0, [r4, 0x3A]
- lsls r0, 16
- asrs r1, r0, 16
- cmp r1, 0
- bne _0816D9BA
- ldrh r0, [r4, 0x24]
- ldrh r2, [r4, 0x20]
- adds r0, r2
- strh r0, [r4, 0x20]
- strh r1, [r4, 0x24]
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- b _0816D9B8
-_0816D96E:
- ldrh r0, [r4, 0x20]
- subs r0, 0x2
- strh r0, [r4, 0x20]
- ldrh r0, [r4, 0x38]
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x14
- bl Sin
- strh r0, [r4, 0x26]
- ldrh r0, [r4, 0x38]
- adds r0, 0x4
- strh r0, [r4, 0x38]
- movs r0, 0x20
- ldrsh r1, [r4, r0]
- movs r0, 0x10
- negs r0, r0
- cmp r1, r0
- bge _0816D9BA
- adds r0, r4, 0
- bl DestroySprite
- b _0816D9BA
-_0816D99C:
- ldrh r0, [r4, 0x34]
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x2
- bl Cos
- strh r0, [r4, 0x26]
- ldrh r0, [r4, 0x30]
- subs r0, 0x1
- strh r0, [r4, 0x30]
- lsls r0, 16
- cmp r0, 0
- bne _0816D9BA
- ldrh r0, [r4, 0x32]
-_0816D9B8:
- strh r0, [r4, 0x2E]
-_0816D9BA:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_816D81C
-
- thumb_func_start sub_816D9C0
-sub_816D9C0: @ 816D9C0
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- cmp r0, 0x5
- bls _0816D9CE
- b _0816DADA
-_0816D9CE:
- lsls r0, 2
- ldr r1, =_0816D9DC
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_0816D9DC:
- .4byte _0816D9F4
- .4byte _0816DA08
- .4byte _0816DA20
- .4byte _0816DA64
- .4byte _0816DA9A
- .4byte _0816DACA
-_0816D9F4:
- ldr r0, =gUnknown_030062A0
- ldr r1, [r0]
- movs r0, 0x99
- lsls r0, 3
- cmp r1, r0
- bne _0816DADA
- b _0816DABA
- .pool
-_0816DA08:
- ldr r0, =gUnknown_030062A0
- ldr r1, [r0]
- movs r0, 0xC5
- lsls r0, 3
- cmp r1, r0
- bne _0816DA70
- adds r0, r4, 0
- movs r1, 0
- b _0816DABE
- .pool
-_0816DA20:
- ldr r0, =gUnknown_030062A0
- ldr r1, [r0]
- ldr r0, =0x000006c7
- cmp r1, r0
- beq _0816DA50
- ldrh r0, [r4, 0x30]
- adds r2, r0, 0
- adds r2, 0x20
- strh r2, [r4, 0x30]
- movs r1, 0x30
- ldrsh r0, [r4, r1]
- movs r1, 0xFF
- lsls r1, 8
- ands r0, r1
- cmp r0, 0
- beq _0816DADA
- ldrh r0, [r4, 0x20]
- adds r0, 0x1
- b _0816DA8A
- .pool
-_0816DA50:
- adds r0, r4, 0
- movs r1, 0x1
- bl StartSpriteAnim
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
- movs r0, 0x50
- strh r0, [r4, 0x32]
- b _0816DADA
-_0816DA64:
- ldrh r0, [r4, 0x32]
- subs r0, 0x1
- strh r0, [r4, 0x32]
- lsls r0, 16
- cmp r0, 0
- beq _0816DA94
-_0816DA70:
- ldrh r0, [r4, 0x30]
- adds r2, r0, 0
- adds r2, 0x40
- strh r2, [r4, 0x30]
- movs r1, 0x30
- ldrsh r0, [r4, r1]
- movs r1, 0xFF
- lsls r1, 8
- ands r0, r1
- cmp r0, 0
- beq _0816DADA
- ldrh r0, [r4, 0x20]
- subs r0, 0x1
-_0816DA8A:
- strh r0, [r4, 0x20]
- movs r0, 0xFF
- ands r2, r0
- strh r2, [r4, 0x30]
- b _0816DADA
-_0816DA94:
- adds r0, r4, 0
- movs r1, 0x2
- b _0816DABE
-_0816DA9A:
- adds r0, r4, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _0816DAAE
- ldrh r0, [r4, 0x20]
- adds r0, 0x4
- strh r0, [r4, 0x20]
-_0816DAAE:
- movs r0, 0x20
- ldrsh r1, [r4, r0]
- movs r0, 0xA8
- lsls r0, 1
- cmp r1, r0
- ble _0816DADA
-_0816DABA:
- adds r0, r4, 0
- movs r1, 0x1
-_0816DABE:
- bl StartSpriteAnim
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
- b _0816DADA
-_0816DACA:
- ldr r0, =gUnknown_030062A0
- ldr r1, [r0]
- ldr r0, =0x0000073f
- cmp r1, r0
- bls _0816DADA
- ldrh r0, [r4, 0x20]
- subs r0, 0x2
- strh r0, [r4, 0x20]
-_0816DADA:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816D9C0
-
- thumb_func_start sub_816DAE8
-sub_816DAE8: @ 816DAE8
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- cmp r0, 0x1
- beq _0816DB1C
- cmp r0, 0x1
- bgt _0816DAFE
- cmp r0, 0
- beq _0816DB04
- b _0816DBA4
-_0816DAFE:
- cmp r0, 0x2
- beq _0816DB42
- b _0816DBA4
-_0816DB04:
- ldr r0, =gUnknown_030062A0
- ldr r1, [r0]
- movs r0, 0x88
- lsls r0, 3
- cmp r1, r0
- bne _0816DBA4
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
- b _0816DBA4
- .pool
-_0816DB1C:
- ldrh r0, [r4, 0x20]
- subs r0, 0x2
- strh r0, [r4, 0x20]
- ldr r0, =gUnknown_030062A0
- ldr r1, [r0]
- movs r0, 0x92
- lsls r0, 3
- cmp r1, r0
- bne _0816DBA4
- ldrh r0, [r4, 0x22]
- subs r0, 0xC
- strh r0, [r4, 0x22]
- movs r0, 0x80
- strh r0, [r4, 0x30]
- movs r0, 0
- strh r0, [r4, 0x32]
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
-_0816DB42:
- movs r2, 0x20
- ldrsh r0, [r4, r2]
- movs r2, 0x24
- ldrsh r1, [r4, r2]
- adds r0, r1
- movs r1, 0x20
- negs r1, r1
- cmp r0, r1
- bgt _0816DB60
- adds r0, r4, 0
- bl DestroySprite
- b _0816DBA4
- .pool
-_0816DB60:
- ldrh r0, [r4, 0x30]
- movs r1, 0xFF
- ands r1, r0
- cmp r1, 0x3F
- bgt _0816DB72
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x10
- b _0816DB84
-_0816DB72:
- cmp r1, 0x40
- bne _0816DB7C
- ldrh r0, [r4, 0x20]
- subs r0, 0x30
- strh r0, [r4, 0x20]
-_0816DB7C:
- ldrh r0, [r4, 0x30]
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x40
-_0816DB84:
- bl Sin
- strh r0, [r4, 0x24]
- ldrh r0, [r4, 0x30]
- adds r0, 0x1
- strh r0, [r4, 0x30]
- ldrh r0, [r4, 0x32]
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0xC
- bl Cos
- strh r0, [r4, 0x26]
- ldrh r0, [r4, 0x32]
- adds r0, 0x1
- strh r0, [r4, 0x32]
-_0816DBA4:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_816DAE8
-
- thumb_func_start task_intro_10
-task_intro_10: @ 816DBAC
- push {r4,r5,lr}
- sub sp, 0x4
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- bl intro_reset_and_hide_bgs
- ldr r0, =gIntro3Pokeball_Gfx
- movs r1, 0xC0
- lsls r1, 19
- bl LZ77UnCompVram
- ldr r0, =gIntro3Pokeball_Tilemap
- ldr r1, =0x06004000
- bl LZ77UnCompVram
- ldr r0, =gIntro3PokeballPal
- movs r2, 0x80
- lsls r2, 2
- movs r1, 0
- bl LoadPalette
- ldr r0, =gTasks
- lsls r4, r5, 2
- adds r4, r5
- lsls r4, 3
- adds r4, r0
- movs r5, 0
- strh r5, [r4, 0x8]
- strh r5, [r4, 0xA]
- strh r5, [r4, 0xC]
- strh r5, [r4, 0xE]
- movs r0, 0x78
- movs r1, 0x50
- movs r2, 0
- movs r3, 0
- bl sub_816F2A8
- bl ResetSpriteData
- bl FreeAllSpritePalettes
- movs r0, 0x1
- negs r0, r0
- ldr r1, =0x0000ffff
- str r1, [sp]
- movs r1, 0
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- ldr r1, =0x00004883
- movs r0, 0xC
- bl SetGpuReg
- ldr r1, =0x00001441
- movs r0, 0
- bl SetGpuReg
- ldr r0, =task_intro_11
- str r0, [r4]
- ldr r0, =gUnknown_030062A0
- str r5, [r0]
- movs r0, 0xDD
- lsls r0, 1
- bl m4aSongNumStart
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end task_intro_10
-
- thumb_func_start task_intro_11
-task_intro_11: @ 816DC64
- push {r4,r5,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r2, =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r3, r0, r2
- movs r1, 0x80
- lsls r1, 3
- adds r0, r1, 0
- ldrh r1, [r3, 0x8]
- adds r0, r1
- strh r0, [r3, 0x8]
- ldrh r4, [r3, 0xA]
- movs r0, 0xA
- ldrsh r1, [r3, r0]
- ldr r0, =0x000006bf
- cmp r1, r0
- bgt _0816DCA4
- ldrh r0, [r3, 0xC]
- adds r1, r4, r0
- strh r1, [r3, 0xA]
- adds r0, 0x2
- strh r0, [r3, 0xC]
- b _0816DCA8
- .pool
-_0816DCA4:
- ldr r0, =task_intro_12
- str r0, [r3]
-_0816DCA8:
- lsls r4, r5, 2
- adds r4, r5
- lsls r4, 3
- adds r4, r2
- movs r0, 0xA
- ldrsh r1, [r4, r0]
- movs r0, 0x80
- lsls r0, 9
- bl __divsi3
- adds r2, r0, 0
- lsls r2, 16
- lsrs r2, 16
- ldrh r3, [r4, 0x8]
- movs r0, 0x78
- movs r1, 0x50
- bl sub_816F2A8
- ldr r0, =gUnknown_030062A0
- ldr r0, [r0]
- cmp r0, 0x1C
- bne _0816DCE6
- movs r0, 0x1
- negs r0, r0
- ldr r1, =0x0000ffff
- str r1, [sp]
- movs r1, 0
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
-_0816DCE6:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end task_intro_11
-
- thumb_func_start task_intro_12
-task_intro_12: @ 816DCFC
- push {lr}
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r0, =gUnknown_030062A0
- ldr r0, [r0]
- cmp r0, 0x2B
- bls _0816DD18
- ldr r0, =gTasks
- lsls r1, r2, 2
- adds r1, r2
- lsls r1, 3
- adds r1, r0
- ldr r0, =task_intro_13
- str r0, [r1]
-_0816DD18:
- pop {r0}
- bx r0
- .pool
- thumb_func_end task_intro_12
-
- thumb_func_start task_intro_13
-task_intro_13: @ 816DD28
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0816DD94
- bl intro_reset_and_hide_bgs
- bl ResetSpriteData
- bl FreeAllSpritePalettes
- ldr r1, =gReservedSpritePaletteCount
- movs r0, 0x8
- strb r0, [r1]
- ldr r0, =gIntro3GroudonGfx
- movs r1, 0xC0
- lsls r1, 19
- bl LZDecompressVram
- ldr r0, =gIntro3GroudonTilemap
- ldr r1, =0x0600c000
- bl LZDecompressVram
- ldr r0, =gIntro3LegendBgGfx
- ldr r1, =0x06004000
- bl LZDecompressVram
- ldr r0, =gIntro3GroudonBgTilemap
- ldr r1, =0x0600e000
- bl LZDecompressVram
- ldr r0, =gBattleAnimPicTable + 0x1D0
- bl LoadCompressedObjectPicUsingHeap
- ldr r0, =gBattleAnimPaletteTable + 0x1D0
- bl LoadCompressedObjectPaletteUsingHeap
- ldr r0, =gIntro3BgPal
- ldr r1, =gPlttBufferUnfaded
- movs r2, 0x80
- lsls r2, 1
- bl CpuSet
- ldr r1, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, =task_intro_14
- str r1, [r0]
-_0816DD94:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end task_intro_13
-
- thumb_func_start task_intro_14
-task_intro_14: @ 816DDD8
- push {r4,r5,lr}
- sub sp, 0x4
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- movs r0, 0x40
- movs r1, 0xF0
- bl SetGpuReg
- movs r0, 0x44
- movs r1, 0xA0
- bl SetGpuReg
- movs r0, 0x48
- movs r1, 0x3F
- bl SetGpuReg
- movs r0, 0x4A
- movs r1, 0
- bl SetGpuReg
- ldr r1, =0x0000b880
- movs r0, 0xC
- bl SetGpuReg
- ldr r1, =0x00001c05
- movs r0, 0xA
- bl SetGpuReg
- ldr r1, =0x00003641
- movs r0, 0
- bl SetGpuReg
- movs r0, 0x1
- negs r0, r0
- ldr r1, =0x0000ffff
- str r1, [sp]
- movs r1, 0
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- ldr r0, =gTasks
- lsls r4, r5, 2
- adds r4, r5
- lsls r4, 3
- adds r4, r0
- movs r0, 0
- strh r0, [r4, 0x8]
- ldr r0, =0x0000ffa0
- strh r0, [r4, 0xA]
- ldr r1, =0x0000ff51
- strh r1, [r4, 0xC]
- movs r2, 0x80
- lsls r2, 1
- strh r2, [r4, 0xE]
- movs r3, 0
- bl sub_816F2A8
- ldr r0, =task_intro_15
- str r0, [r4]
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end task_intro_14
-
- thumb_func_start task_intro_15
-task_intro_15: @ 816DE7C
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
- ldrh r2, [r4, 0x8]
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- cmp r0, 0x20
- beq _0816DEB8
- adds r0, r2, 0x4
- strh r0, [r4, 0x8]
- movs r0, 0x8
- ldrsh r1, [r4, r0]
- lsls r1, 8
- adds r0, r2, 0
- subs r0, 0x9C
- subs r1, r0
- lsls r1, 16
- lsrs r1, 16
- movs r0, 0x44
- bl SetGpuReg
- b _0816DEC6
- .pool
-_0816DEB8:
- movs r1, 0x82
- lsls r1, 6
- movs r0, 0x44
- bl SetGpuReg
- ldr r0, =task_intro_16
- str r0, [r4]
-_0816DEC6:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end task_intro_15
-
- thumb_func_start task_intro_16
-task_intro_16: @ 816DED0
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- ldr r0, =task_intro_17
- str r0, [r1]
- bx lr
- .pool
- thumb_func_end task_intro_16
-
- thumb_func_start task_intro_17
-task_intro_17: @ 816DEEC
- push {lr}
- sub sp, 0xC
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- movs r2, 0
- strh r2, [r1, 0x8]
- ldr r0, =task_intro_18
- str r0, [r1]
- movs r0, 0x1
- str r0, [sp]
- movs r0, 0x4
- str r0, [sp, 0x4]
- str r2, [sp, 0x8]
- movs r0, 0
- movs r1, 0xA0
- movs r2, 0x4
- movs r3, 0x4
- bl ScanlineEffect_InitWave
- add sp, 0xC
- pop {r0}
- bx r0
- .pool
- thumb_func_end task_intro_17
-
- thumb_func_start task_intro_18
-task_intro_18: @ 816DF2C
- push {r4,r5,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- ldr r1, =gTasks + 0x8
- adds r4, r0, r1
- ldrh r0, [r4, 0xA]
- adds r0, 0x1
- strh r0, [r4, 0xA]
- ldrh r0, [r4]
- subs r0, 0x1
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x6
- bhi _0816DF62
- ldrh r0, [r4, 0xA]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- bne _0816DF62
- ldrh r0, [r4, 0x8]
- movs r1, 0x3
- eors r0, r1
- strh r0, [r4, 0x8]
-_0816DF62:
- ldrh r0, [r4, 0x2]
- ldrh r1, [r4, 0x8]
- ldrh r2, [r4, 0x4]
- adds r1, r2
- lsls r1, 16
- lsrs r1, 16
- ldrh r2, [r4, 0x6]
- movs r3, 0
- bl sub_816F2A8
- movs r1, 0
- ldrsh r0, [r4, r1]
- cmp r0, 0x9
- bls _0816DF80
- b _0816E176
-_0816DF80:
- lsls r0, 2
- ldr r1, =_0816DF94
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_0816DF94:
- .4byte _0816DFBC
- .4byte _0816DFE6
- .4byte _0816E024
- .4byte _0816E038
- .4byte _0816E07C
- .4byte _0816E09A
- .4byte _0816E0C8
- .4byte _0816E0DE
- .4byte _0816E13C
- .4byte _0816E156
-_0816DFBC:
- ldrh r0, [r4, 0x2]
- adds r0, 0x10
- strh r0, [r4, 0x2]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0xA0
- beq _0816DFCC
- b _0816E176
-_0816DFCC:
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
- movs r0, 0x2
- strh r0, [r4, 0xC]
- movs r2, 0xF1
- lsls r2, 1
- adds r0, r2, 0
- strh r0, [r4, 0xE]
- adds r0, r5, 0
- bl sub_816E190
- b _0816E176
-_0816DFE6:
- ldrh r0, [r4, 0xC]
- subs r0, 0x1
- strh r0, [r4, 0xC]
- lsls r0, 16
- cmp r0, 0
- beq _0816DFF4
- b _0816E176
-_0816DFF4:
- movs r0, 0x2
- strh r0, [r4, 0xC]
- movs r1, 0xE
- ldrsh r0, [r4, r1]
- ldr r1, =gIntro3BgPal
- adds r0, r1
- ldr r1, =gPlttBufferFaded + 0x3E
- movs r2, 0x1
- bl CpuSet
- ldrh r0, [r4, 0xE]
- adds r0, 0x2
- strh r0, [r4, 0xE]
- lsls r0, 16
- movs r1, 0xF6
- lsls r1, 17
- cmp r0, r1
- beq _0816E01A
- b _0816E176
-_0816E01A:
- b _0816E14E
- .pool
-_0816E024:
- ldrh r0, [r4, 0xC]
- subs r0, 0x1
- strh r0, [r4, 0xC]
- lsls r0, 16
- cmp r0, 0
- beq _0816E032
- b _0816E176
-_0816E032:
- movs r0, 0x2
- strh r0, [r4, 0xC]
- b _0816E14E
-_0816E038:
- ldrh r0, [r4, 0xC]
- subs r0, 0x1
- strh r0, [r4, 0xC]
- lsls r0, 16
- cmp r0, 0
- beq _0816E046
- b _0816E176
-_0816E046:
- movs r0, 0x2
- strh r0, [r4, 0xC]
- movs r2, 0xE
- ldrsh r0, [r4, r2]
- ldr r1, =gIntro3BgPal
- adds r0, r1
- ldr r1, =gPlttBufferFaded + 0x3E
- movs r2, 0x1
- bl CpuSet
- ldrh r0, [r4, 0xE]
- subs r0, 0x2
- strh r0, [r4, 0xE]
- lsls r0, 16
- movs r1, 0xF0
- lsls r1, 17
- cmp r0, r1
- beq _0816E06C
- b _0816E176
-_0816E06C:
- movs r0, 0x8
- strh r0, [r4, 0xC]
- b _0816E14E
- .pool
-_0816E07C:
- ldrh r0, [r4, 0xC]
- subs r0, 0x1
- strh r0, [r4, 0xC]
- lsls r0, 16
- cmp r0, 0
- bne _0816E176
- movs r1, 0x60
- negs r1, r1
- adds r0, r1, 0
- strh r0, [r4, 0x2]
- movs r0, 0xA9
- strh r0, [r4, 0x4]
- movs r0, 0x3
- strh r0, [r4, 0xC]
- b _0816E14E
-_0816E09A:
- ldrh r0, [r4, 0xC]
- subs r0, 0x1
- strh r0, [r4, 0xC]
- lsls r0, 16
- asrs r1, r0, 16
- cmp r1, 0
- bne _0816E176
- movs r0, 0x50
- strh r0, [r4, 0x2]
- movs r0, 0x29
- strh r0, [r4, 0x4]
- movs r0, 0x10
- strh r0, [r4, 0xC]
- ldr r0, =0x00000195
- str r1, [sp]
- movs r1, 0
- movs r2, 0x64
- movs r3, 0xA
- bl PlayCryInternal
- b _0816E14E
- .pool
-_0816E0C8:
- ldrh r0, [r4, 0xC]
- subs r0, 0x1
- strh r0, [r4, 0xC]
- lsls r0, 16
- cmp r0, 0
- bne _0816E176
- movs r0, 0x50
- strh r0, [r4, 0x2]
- movs r0, 0x28
- strh r0, [r4, 0x4]
- b _0816E14E
-_0816E0DE:
- ldrh r0, [r4, 0x2]
- adds r0, 0x4
- strh r0, [r4, 0x2]
- ldrh r0, [r4, 0x4]
- adds r0, 0x4
- strh r0, [r4, 0x4]
- ldr r2, =0x00000666
- adds r0, r2, 0
- ldrh r1, [r4, 0xC]
- adds r0, r1
- strh r0, [r4, 0xC]
- movs r2, 0xC
- ldrsh r0, [r4, r2]
- movs r1, 0xFF
- lsls r1, 8
- ands r0, r1
- lsrs r0, 8
- movs r1, 0x40
- bl Sin
- movs r1, 0x80
- lsls r1, 1
- adds r5, r1, 0
- adds r0, r5
- strh r0, [r4, 0x6]
- movs r2, 0x2
- ldrsh r0, [r4, r2]
- cmp r0, 0x78
- bne _0816E176
- movs r0, 0x2
- negs r0, r0
- ldr r1, =0x00007fff
- str r1, [sp]
- movs r1, 0x3
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- strh r5, [r4, 0x6]
- movs r0, 0
- strh r0, [r4, 0x8]
- b _0816E14E
- .pool
-_0816E13C:
- ldrh r1, [r4, 0x6]
- movs r2, 0x6
- ldrsh r0, [r4, r2]
- cmp r0, 0
- beq _0816E14E
- adds r0, r1, 0
- subs r0, 0x8
- strh r0, [r4, 0x6]
- b _0816E176
-_0816E14E:
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
- b _0816E176
-_0816E156:
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0816E176
- ldr r1, =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- ldr r1, =task_intro_19
- str r1, [r0]
- ldr r1, =gScanlineEffect
- movs r0, 0x3
- strb r0, [r1, 0x15]
-_0816E176:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end task_intro_18
-
- thumb_func_start sub_816E190
-sub_816E190: @ 816E190
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r7, r0, 24
- movs r4, 0
- ldr r6, =gSprites
- ldr r5, =gUnknown_085E4C64
-_0816E19C:
- movs r0, 0
- ldrsh r1, [r5, r0]
- lsls r3, r4, 24
- lsrs r3, 24
- ldr r0, =gUnknown_08596C10
- movs r2, 0xA0
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r0, r6, 0
- adds r0, 0x1C
- adds r0, r2, r0
- ldr r1, =sub_816E1F8
- str r1, [r0]
- adds r2, r6
- ldrb r0, [r2, 0x5]
- movs r3, 0xD
- negs r3, r3
- adds r1, r3, 0
- ands r0, r1
- strb r0, [r2, 0x5]
- strh r4, [r2, 0x30]
- strh r7, [r2, 0x36]
- ldrb r1, [r5, 0x2]
- adds r0, r2, 0
- bl StartSpriteAnim
- adds r5, 0x6
- adds r4, 0x1
- cmp r4, 0x5
- ble _0816E19C
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816E190
-
- thumb_func_start sub_816E1F8
-sub_816E1F8: @ 816E1F8
- push {lr}
- adds r3, r0, 0
- ldrh r0, [r3, 0x34]
- adds r0, 0x1
- strh r0, [r3, 0x34]
- ldrh r0, [r3, 0x34]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- bne _0816E214
- ldrh r0, [r3, 0x26]
- movs r1, 0x3
- eors r0, r1
- strh r0, [r3, 0x26]
-_0816E214:
- movs r1, 0x2E
- ldrsh r0, [r3, r1]
- cmp r0, 0
- beq _0816E222
- cmp r0, 0x1
- beq _0816E278
- b _0816E29C
-_0816E222:
- ldr r2, =gUnknown_085E4C64
- movs r0, 0x30
- ldrsh r1, [r3, r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 1
- adds r2, 0x4
- adds r0, r2
- ldrh r2, [r0]
- ldrh r1, [r3, 0x32]
- adds r2, r1
- strh r2, [r3, 0x32]
- movs r0, 0x32
- ldrsh r1, [r3, r0]
- movs r0, 0xFF
- lsls r0, 8
- ands r1, r0
- asrs r1, 8
- ldrh r0, [r3, 0x22]
- subs r0, r1
- strh r0, [r3, 0x22]
- movs r0, 0xFF
- ands r2, r0
- strh r2, [r3, 0x32]
- ldr r2, =gTasks
- movs r0, 0x36
- ldrsh r1, [r3, r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- movs r1, 0x8
- ldrsh r0, [r0, r1]
- cmp r0, 0x7
- ble _0816E29C
- ldrh r0, [r3, 0x2E]
- adds r0, 0x1
- strh r0, [r3, 0x2E]
- b _0816E29C
- .pool
-_0816E278:
- ldrh r1, [r3, 0x20]
- movs r2, 0x20
- ldrsh r0, [r3, r2]
- cmp r0, 0x77
- bgt _0816E286
- subs r0, r1, 0x2
- b _0816E288
-_0816E286:
- adds r0, r1, 0x2
-_0816E288:
- strh r0, [r3, 0x20]
- ldrh r1, [r3, 0x22]
- movs r2, 0x22
- ldrsh r0, [r3, r2]
- cmp r0, 0x4F
- bgt _0816E298
- subs r0, r1, 0x2
- b _0816E29A
-_0816E298:
- adds r0, r1, 0x2
-_0816E29A:
- strh r0, [r3, 0x22]
-_0816E29C:
- pop {r0}
- bx r0
- thumb_func_end sub_816E1F8
-
- thumb_func_start task_intro_19
-task_intro_19: @ 816E2A0
- push {r4,lr}
- sub sp, 0xC
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl ResetSpriteData
- ldr r0, =gIntro3KyogreGfx
- movs r1, 0xC0
- lsls r1, 19
- bl LZDecompressVram
- ldr r0, =gIntro3KyogreTilemap
- ldr r1, =0x0600c000
- bl LZDecompressVram
- ldr r0, =gIntro3KyogreBgTilemap
- ldr r1, =0x0600e000
- bl LZDecompressVram
- ldr r0, =gUnknown_085E4C88
- bl LoadCompressedObjectPic
- ldr r0, =gUnknown_085E4C98
- bl LoadSpritePalette
- movs r0, 0x2
- negs r0, r0
- ldr r1, =0x0000ffff
- str r1, [sp]
- movs r1, 0
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- ldr r0, =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, =task_intro_20
- str r0, [r1]
- movs r4, 0
- strh r4, [r1, 0x8]
- movs r0, 0xA8
- lsls r0, 1
- strh r0, [r1, 0xA]
- movs r2, 0x50
- strh r2, [r1, 0xC]
- movs r2, 0x10
- strh r2, [r1, 0x14]
- adds r2, 0xF0
- strh r2, [r1, 0xE]
- movs r1, 0x50
- movs r3, 0
- bl sub_816F2A8
- movs r0, 0x1
- str r0, [sp]
- movs r0, 0x6
- str r0, [sp, 0x4]
- str r4, [sp, 0x8]
- movs r0, 0
- movs r1, 0xA0
- movs r2, 0x4
- movs r3, 0x4
- bl ScanlineEffect_InitWave
- add sp, 0xC
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end task_intro_19
-
- thumb_func_start task_intro_20
-task_intro_20: @ 816E358
- push {r4-r6,lr}
- sub sp, 0x4
- 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
- ldrh r0, [r5, 0x2]
- ldrh r1, [r5, 0x4]
- ldrh r2, [r5, 0x6]
- movs r3, 0
- bl sub_816F2A8
- movs r1, 0
- ldrsh r0, [r5, r1]
- cmp r0, 0xD
- bls _0816E380
- b _0816E6BC
-_0816E380:
- lsls r0, 2
- ldr r1, =_0816E394
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_0816E394:
- .4byte _0816E3CC
- .4byte _0816E3E0
- .4byte _0816E43C
- .4byte _0816E488
- .4byte _0816E4C4
- .4byte _0816E4EC
- .4byte _0816E544
- .4byte _0816E560
- .4byte _0816E5A0
- .4byte _0816E5BC
- .4byte _0816E5FC
- .4byte _0816E61A
- .4byte _0816E664
- .4byte _0816E69C
-_0816E3CC:
- ldrh r0, [r5, 0xC]
- subs r0, 0x1
- strh r0, [r5, 0xC]
- lsls r0, 16
- cmp r0, 0
- beq _0816E3DA
- b _0816E6BC
-_0816E3DA:
- ldrh r0, [r5]
- adds r0, 0x1
- strh r0, [r5]
-_0816E3E0:
- ldrh r0, [r5, 0xC]
- adds r0, 0x4
- strh r0, [r5, 0xC]
- movs r2, 0xC
- ldrsh r0, [r5, r2]
- movs r1, 0x80
- lsls r1, 1
- bl Sin
- ldr r1, =gTasks
- lsls r4, r6, 2
- adds r4, r6
- lsls r4, 3
- adds r4, r1
- movs r2, 0xAC
- lsls r2, 1
- adds r1, r2, 0
- subs r1, r0
- strh r1, [r4, 0xA]
- movs r1, 0xC
- ldrsh r0, [r5, r1]
- movs r1, 0x40
- bl Cos
- movs r1, 0x54
- subs r1, r0
- strh r1, [r4, 0xC]
- movs r2, 0xC
- ldrsh r0, [r5, r2]
- cmp r0, 0x40
- beq _0816E420
- b _0816E6BC
-_0816E420:
- movs r0, 0x19
- strh r0, [r5, 0xC]
- movs r0, 0x1
- strh r0, [r5, 0xE]
- ldrh r0, [r5]
- adds r0, 0x1
- strh r0, [r5]
- movs r0, 0
- bl sub_816E6D4
- b _0816E6BC
- .pool
-_0816E43C:
- ldrh r0, [r5, 0xC]
- subs r0, 0x1
- strh r0, [r5, 0xC]
- lsls r0, 16
- cmp r0, 0
- beq _0816E44A
- b _0816E6BC
-_0816E44A:
- ldr r0, =gTasks
- lsls r1, r6, 2
- adds r1, r6
- lsls r1, 3
- adds r1, r0
- movs r2, 0x80
- lsls r2, 1
- adds r0, r2, 0
- ldrh r2, [r1, 0xA]
- adds r0, r2
- strh r0, [r1, 0xA]
- ldr r2, =0xfffffefe
- adds r0, r2, 0
- ldrh r2, [r1, 0xC]
- adds r0, r2
- strh r0, [r1, 0xC]
- movs r0, 0x8
- strh r0, [r5, 0xC]
- ldrh r0, [r5]
- adds r0, 0x1
- strh r0, [r5]
- movs r0, 0
- bl sub_816E6D4
- bl sub_816E74C
- b _0816E6BC
- .pool
-_0816E488:
- ldrh r0, [r5, 0xC]
- subs r0, 0x1
- strh r0, [r5, 0xC]
- lsls r0, 16
- cmp r0, 0
- beq _0816E496
- b _0816E6BC
-_0816E496:
- ldr r0, =gTasks
- lsls r1, r6, 2
- adds r1, r6
- lsls r1, 3
- adds r1, r0
- ldr r2, =0xffffff00
- adds r0, r2, 0
- ldrh r2, [r1, 0xA]
- adds r0, r2
- strh r0, [r1, 0xA]
- movs r2, 0x81
- lsls r2, 1
- adds r0, r2, 0
- ldrh r2, [r1, 0xC]
- adds r0, r2
- strh r0, [r1, 0xC]
- movs r0, 0x8
- strh r0, [r5, 0xC]
- b _0816E690
- .pool
-_0816E4C4:
- ldrh r0, [r5, 0xC]
- subs r0, 0x1
- strh r0, [r5, 0xC]
- lsls r0, 16
- cmp r0, 0
- beq _0816E4D2
- b _0816E6BC
-_0816E4D2:
- ldr r1, =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r0, r1
- ldrh r1, [r0, 0xC]
- subs r1, 0xFC
- strh r1, [r0, 0xC]
- movs r0, 0x8
- strh r0, [r5, 0xC]
- b _0816E690
- .pool
-_0816E4EC:
- ldrh r0, [r5, 0xC]
- subs r0, 0x1
- strh r0, [r5, 0xC]
- lsls r0, 16
- cmp r0, 0
- beq _0816E4FA
- b _0816E6BC
-_0816E4FA:
- ldr r0, =gTasks
- lsls r1, r6, 2
- adds r1, r6
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0xC]
- adds r0, 0xFC
- strh r0, [r1, 0xC]
- ldrh r2, [r5, 0xE]
- movs r0, 0xE
- ldrsh r1, [r5, r0]
- cmp r1, 0
- beq _0816E528
- movs r0, 0xC
- strh r0, [r5, 0xC]
- subs r0, r2, 0x1
- strh r0, [r5, 0xE]
- movs r0, 0x2
- strh r0, [r5]
- b _0816E6BC
- .pool
-_0816E528:
- movs r0, 0x1
- strh r0, [r5, 0xC]
- ldrh r0, [r5]
- adds r0, 0x1
- strh r0, [r5]
- movs r0, 0xCA
- lsls r0, 1
- str r1, [sp]
- movs r1, 0
- movs r2, 0x78
- movs r3, 0xA
- bl PlayCryInternal
- b _0816E6BC
-_0816E544:
- ldrh r0, [r5, 0xC]
- subs r0, 0x1
- strh r0, [r5, 0xC]
- lsls r0, 16
- cmp r0, 0
- beq _0816E552
- b _0816E6BC
-_0816E552:
- movs r0, 0x4
- strh r0, [r5, 0xC]
- movs r1, 0xF5
- lsls r1, 1
- adds r0, r1, 0
- strh r0, [r5, 0xE]
- b _0816E690
-_0816E560:
- ldrh r0, [r5, 0xC]
- subs r0, 0x1
- strh r0, [r5, 0xC]
- lsls r0, 16
- cmp r0, 0
- beq _0816E56E
- b _0816E6BC
-_0816E56E:
- movs r0, 0x4
- strh r0, [r5, 0xC]
- movs r2, 0xE
- ldrsh r0, [r5, r2]
- ldr r1, =gIntro3BgPal
- adds r0, r1
- ldr r1, =gPlttBufferFaded + 0x5E
- movs r2, 0x1
- bl CpuSet
- ldrh r0, [r5, 0xE]
- subs r0, 0x2
- strh r0, [r5, 0xE]
- lsls r0, 16
- movs r1, 0xF0
- lsls r1, 17
- cmp r0, r1
- beq _0816E594
- b _0816E6BC
-_0816E594:
- b _0816E690
- .pool
-_0816E5A0:
- ldrh r0, [r5, 0xC]
- subs r0, 0x1
- strh r0, [r5, 0xC]
- lsls r0, 16
- cmp r0, 0
- beq _0816E5AE
- b _0816E6BC
-_0816E5AE:
- movs r0, 0x4
- strh r0, [r5, 0xC]
- movs r1, 0xF1
- lsls r1, 1
- adds r0, r1, 0
- strh r0, [r5, 0xE]
- b _0816E690
-_0816E5BC:
- ldrh r0, [r5, 0xC]
- subs r0, 0x1
- strh r0, [r5, 0xC]
- lsls r0, 16
- cmp r0, 0
- bne _0816E6BC
- movs r0, 0x4
- strh r0, [r5, 0xC]
- movs r2, 0xE
- ldrsh r0, [r5, r2]
- ldr r1, =gIntro3BgPal
- adds r0, r1
- ldr r1, =gPlttBufferFaded + 0x5E
- movs r2, 0x1
- bl CpuSet
- ldrh r0, [r5, 0xE]
- adds r0, 0x2
- strh r0, [r5, 0xE]
- lsls r0, 16
- movs r1, 0xF7
- lsls r1, 17
- cmp r0, r1
- bne _0816E6BC
- movs r0, 0x10
- strh r0, [r5, 0xC]
- b _0816E690
- .pool
-_0816E5FC:
- ldrh r0, [r5, 0xC]
- subs r0, 0x1
- strh r0, [r5, 0xC]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0
- bne _0816E6BC
- strh r0, [r5, 0xC]
- ldrh r0, [r5]
- adds r0, 0x1
- strh r0, [r5]
- adds r0, r6, 0
- bl sub_816E6D4
- b _0816E6BC
-_0816E61A:
- ldrh r0, [r5, 0xC]
- adds r0, 0x4
- strh r0, [r5, 0xC]
- ldrh r0, [r5, 0x6]
- subs r0, 0x8
- strh r0, [r5, 0x6]
- movs r1, 0xC
- ldrsh r0, [r5, r1]
- movs r1, 0x3C
- bl Sin
- ldr r2, =gTasks
- lsls r1, r6, 2
- adds r1, r6
- lsls r1, 3
- adds r1, r2
- adds r0, 0x58
- strh r0, [r1, 0xA]
- movs r2, 0xC
- ldrsh r0, [r5, r2]
- cmp r0, 0x40
- bne _0816E6BC
- movs r0, 0x2
- negs r0, r0
- ldr r1, =0x00007fff
- str r1, [sp]
- movs r1, 0x3
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- b _0816E690
- .pool
-_0816E664:
- ldrh r0, [r5, 0xC]
- adds r0, 0x4
- strh r0, [r5, 0xC]
- ldrh r0, [r5, 0x6]
- subs r0, 0x8
- strh r0, [r5, 0x6]
- movs r1, 0xC
- ldrsh r0, [r5, r1]
- movs r1, 0x14
- bl Sin
- ldr r2, =gTasks
- lsls r1, r6, 2
- adds r1, r6
- lsls r1, 3
- adds r1, r2
- adds r0, 0x80
- strh r0, [r1, 0xA]
- movs r2, 0xC
- ldrsh r0, [r5, r2]
- cmp r0, 0x80
- bne _0816E6BC
-_0816E690:
- ldrh r0, [r5]
- adds r0, 0x1
- strh r0, [r5]
- b _0816E6BC
- .pool
-_0816E69C:
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0816E6BC
- ldr r1, =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r0, r1
- ldr r1, =task_intro_21
- str r1, [r0]
- ldr r1, =gScanlineEffect
- movs r0, 0x3
- strb r0, [r1, 0x15]
-_0816E6BC:
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end task_intro_20
-
- thumb_func_start sub_816E6D4
-sub_816E6D4: @ 816E6D4
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- movs r5, 0
- ldr r7, =gUnknown_085E4CA8
- ldr r0, =gSprites
- mov r9, r0
- adds r4, r7, 0
- movs r6, 0
-_0816E6EE:
- movs r3, 0
- ldrsh r1, [r4, r3]
- adds r0, r7, 0x2
- adds r0, r6, r0
- movs r3, 0
- ldrsh r2, [r0, r3]
- lsls r3, r5, 24
- lsrs r3, 24
- ldr r0, =gUnknown_085E4D14
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- add r2, r9
- adds r3, r2, 0
- adds r3, 0x3E
- ldrb r0, [r3]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r3]
- mov r0, r8
- strh r0, [r2, 0x38]
- ldrh r0, [r4, 0x4]
- strh r0, [r2, 0x3A]
- movs r0, 0x40
- strh r0, [r2, 0x3C]
- adds r4, 0x6
- adds r6, 0x6
- adds r5, 0x1
- cmp r5, 0x5
- ble _0816E6EE
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816E6D4
-
- thumb_func_start sub_816E74C
-sub_816E74C: @ 816E74C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- movs r5, 0
- ldr r7, =gUnknown_085E4CA8
- adds r4, r7, 0x4
- movs r6, 0x24
- ldr r0, =gSprites
- mov r8, r0
-_0816E75E:
- movs r3, 0x20
- ldrsh r1, [r4, r3]
- adds r0, r7, 0x2
- adds r0, r6, r0
- movs r3, 0
- ldrsh r2, [r0, r3]
- lsls r3, r5, 24
- lsrs r3, 24
- ldr r0, =gUnknown_085E4D14
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- add r2, r8
- adds r3, r2, 0
- adds r3, 0x3E
- ldrb r0, [r3]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r3]
- ldrh r0, [r4]
- strh r0, [r2, 0x3A]
- movs r0, 0x40
- strh r0, [r2, 0x3C]
- adds r4, 0x6
- adds r6, 0x6
- adds r5, 0x1
- cmp r5, 0x5
- ble _0816E75E
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816E74C
-
- thumb_func_start sub_816E7B4
-sub_816E7B4: @ 816E7B4
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- cmp r0, 0
- beq _0816E7C6
- cmp r0, 0x1
- beq _0816E84C
- b _0816E882
-_0816E7C6:
- ldrh r1, [r4, 0x3A]
- movs r2, 0x3A
- ldrsh r0, [r4, r2]
- cmp r0, 0
- bne _0816E80A
- ldrh r0, [r4, 0x30]
- adds r0, 0xB
- movs r1, 0xFF
- ands r0, r1
- strh r0, [r4, 0x30]
- movs r1, 0x30
- ldrsh r0, [r4, r1]
- movs r1, 0x4
- bl Sin
- strh r0, [r4, 0x24]
- ldrh r0, [r4, 0x32]
- adds r0, 0x30
- strh r0, [r4, 0x32]
- lsls r0, 16
- asrs r0, 24
- negs r0, r0
- strh r0, [r4, 0x26]
- adds r0, r4, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _0816E82A
- adds r0, r4, 0
- bl DestroySprite
- b _0816E82A
-_0816E80A:
- subs r0, r1, 0x1
- strh r0, [r4, 0x3A]
- lsls r0, 16
- cmp r0, 0
- bne _0816E82A
- adds r0, r4, 0
- movs r1, 0
- bl StartSpriteAnim
- adds r2, r4, 0
- adds r2, 0x3E
- ldrb r1, [r2]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
-_0816E82A:
- ldr r2, =gTasks
- movs r0, 0x38
- ldrsh r1, [r4, r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- movs r1, 0x8
- ldrsh r0, [r0, r1]
- cmp r0, 0xB
- ble _0816E882
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
- b _0816E882
- .pool
-_0816E84C:
- ldrh r1, [r4, 0x20]
- movs r2, 0x20
- ldrsh r0, [r4, r2]
- cmp r0, 0x77
- bgt _0816E85A
- subs r0, r1, 0x3
- b _0816E85C
-_0816E85A:
- adds r0, r1, 0x3
-_0816E85C:
- strh r0, [r4, 0x20]
- ldrh r1, [r4, 0x22]
- movs r2, 0x22
- ldrsh r0, [r4, r2]
- cmp r0, 0x4F
- bgt _0816E86C
- subs r0, r1, 0x3
- b _0816E86E
-_0816E86C:
- adds r0, r1, 0x3
-_0816E86E:
- strh r0, [r4, 0x22]
- ldrh r0, [r4, 0x22]
- subs r0, 0x14
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x8C
- bls _0816E882
- adds r0, r4, 0
- bl DestroySprite
-_0816E882:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_816E7B4
-
- thumb_func_start task_intro_21
-task_intro_21: @ 816E888
- push {r4,r5,lr}
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- movs r0, 0x50
- movs r1, 0x87
- bl SetGpuReg
- ldr r1, =0x00001f1f
- movs r0, 0x52
- bl SetGpuReg
- movs r0, 0x54
- movs r1, 0x1F
- bl SetGpuReg
- movs r1, 0xB0
- lsls r1, 7
- movs r0, 0x8
- bl SetGpuReg
- ldr r1, =0x00005a04
- movs r0, 0xA
- bl SetGpuReg
- ldr r1, =0x00001c06
- movs r0, 0xC
- bl SetGpuReg
- movs r1, 0xDD
- lsls r1, 6
- movs r0, 0
- bl SetGpuReg
- movs r0, 0x10
- movs r1, 0x50
- bl SetGpuReg
- movs r0, 0x12
- movs r1, 0
- bl SetGpuReg
- ldr r1, =0x0000ffb0
- movs r0, 0x14
- bl SetGpuReg
- movs r0, 0x16
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x18
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x1A
- movs r1, 0
- bl SetGpuReg
- ldr r4, =gIntro3CloudsGfx
- movs r1, 0xC0
- lsls r1, 19
- adds r0, r4, 0
- bl LZDecompressVram
- ldr r1, =0x06004000
- adds r0, r4, 0
- bl LZDecompressVram
- ldr r0, =gIntro3Clouds3Tilemap
- ldr r1, =0x0600e000
- bl LZDecompressVram
- ldr r1, =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- ldr r1, =task_intro_22
- str r1, [r0]
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end task_intro_21
-
- thumb_func_start task_intro_22
-task_intro_22: @ 816E954
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, =gIntro3Clouds1Tilemap
- ldr r1, =0x0600c000
- bl LZDecompressVram
- ldr r0, =gIntro3Clouds2Tilemap
- ldr r1, =0x0600d000
- bl LZDecompressVram
- ldr r1, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, =task_intro_23
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end task_intro_22
-
- thumb_func_start task_intro_23
-task_intro_23: @ 816E998
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x50
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x52
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x54
- movs r1, 0
- bl SetGpuReg
- ldr r1, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, =task_intro_24
- str r1, [r0]
- movs r1, 0
- strh r1, [r0, 0x8]
- movs r1, 0x10
- strh r1, [r0, 0x14]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end task_intro_23
-
- thumb_func_start task_intro_24
-task_intro_24: @ 816E9DC
- push {r4-r6,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r5, r1, 3
- ldr r6, =gTasks + 0x8
- adds r4, r5, r6
- ldrh r1, [r4, 0xC]
- lsls r1, 16
- asrs r1, 24
- lsls r1, 16
- lsrs r1, 16
- movs r0, 0x10
- bl SetGpuReg
- ldrh r1, [r4, 0xC]
- lsls r1, 16
- asrs r1, 24
- negs r1, r1
- lsls r1, 16
- lsrs r1, 16
- movs r0, 0x14
- bl SetGpuReg
- movs r1, 0
- ldrsh r0, [r4, r1]
- cmp r0, 0
- beq _0816EA24
- cmp r0, 0x1
- beq _0816EA58
- b _0816EAA6
- .pool
-_0816EA24:
- ldrh r0, [r4, 0xC]
- subs r0, 0x1
- strh r0, [r4, 0xC]
- lsls r0, 16
- cmp r0, 0
- bne _0816EAA6
- movs r0, 0x2
- negs r0, r0
- ldr r1, =0x0000ffff
- str r1, [sp]
- movs r1, 0
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- movs r2, 0xA0
- lsls r2, 7
- adds r0, r2, 0
- strh r0, [r4, 0xC]
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
- b _0816EAA6
- .pool
-_0816EA58:
- movs r0, 0xC
- ldrsh r1, [r4, r0]
- movs r0, 0xA0
- lsls r0, 6
- cmp r1, r0
- bne _0816EA74
- ldr r0, =0x0000fffe
- ldr r1, =0x00002949
- str r1, [sp]
- movs r1, 0x3
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
-_0816EA74:
- ldrh r1, [r4, 0xC]
- movs r2, 0xC
- ldrsh r0, [r4, r2]
- cmp r0, 0
- beq _0816EA90
- adds r0, r1, 0
- subs r0, 0x80
- strh r0, [r4, 0xC]
- b _0816EAA6
- .pool
-_0816EA90:
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0816EAA6
- adds r0, r6, 0
- subs r0, 0x8
- adds r0, r5, r0
- ldr r1, =task_intro_25
- str r1, [r0]
-_0816EAA6:
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end task_intro_24
-
- thumb_func_start task_intro_25
-task_intro_25: @ 816EAB8
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, =gIntro3RayquazaTilemap
- ldr r1, =0x0600e000
- bl LZDecompressVram
- ldr r0, =gIntro3Clouds4Tilemap
- ldr r1, =0x0600c000
- bl LZDecompressVram
- ldr r0, =gIntro3RayquazaGfx
- ldr r1, =0x06004000
- bl LZDecompressVram
- ldr r0, =gIntro3Clouds2Gfx
- movs r1, 0xC0
- lsls r1, 19
- bl LZDecompressVram
- movs r1, 0xD5
- lsls r1, 6
- movs r0, 0
- bl SetGpuReg
- ldr r1, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, =task_intro_26
- str r1, [r0]
- movs r2, 0
- strh r2, [r0, 0x8]
- movs r1, 0x1
- strh r1, [r0, 0x14]
- strh r2, [r0, 0x16]
- ldr r0, =gUnknown_085E4BF4
- bl LoadCompressedObjectPicUsingHeap
- ldr r0, =gUnknown_085E4C04
- bl LoadSpritePalettes
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end task_intro_25
-
- thumb_func_start task_intro_26
-task_intro_26: @ 816EB44
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r2, =gTasks + 0x8
- adds r6, r1, r2
- movs r3, 0
- ldrsh r0, [r6, r3]
- cmp r0, 0x1
- beq _0816EBE0
- cmp r0, 0x1
- bgt _0816EB6C
- cmp r0, 0
- beq _0816EB72
- b _0816EC62
- .pool
-_0816EB6C:
- cmp r0, 0x2
- beq _0816EC4C
- b _0816EC62
-_0816EB72:
- ldrh r0, [r6, 0xC]
- subs r0, 0x1
- strh r0, [r6, 0xC]
- lsls r0, 16
- cmp r0, 0
- bne _0816EC62
- ldr r4, =gUnknown_085E4C4C
- adds r0, r4, 0
- movs r1, 0xC8
- movs r2, 0x30
- movs r3, 0
- bl CreateSprite
- adds r0, r4, 0
- movs r1, 0xC8
- movs r2, 0x50
- movs r3, 0x1
- bl CreateSprite
- lsls r0, 24
- lsrs r1, r0, 24
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r5, =gSprites
- adds r0, r5
- movs r1, 0x1
- bl StartSpriteAnim
- adds r0, r4, 0
- movs r1, 0xC8
- movs r2, 0x70
- movs r3, 0x2
- bl CreateSprite
- lsls r0, 24
- lsrs r1, r0, 24
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- movs r1, 0x2
- bl StartSpriteAnim
- ldrh r0, [r6]
- adds r0, 0x1
- strh r0, [r6]
- movs r0, 0x48
- strh r0, [r6, 0xC]
- b _0816EC62
- .pool
-_0816EBE0:
- ldrh r0, [r6, 0xC]
- subs r0, 0x1
- strh r0, [r6, 0xC]
- lsls r0, 16
- cmp r0, 0
- bne _0816EC62
- ldr r4, =gUnknown_085E4C4C
- adds r0, r4, 0
- movs r1, 0x28
- movs r2, 0x30
- movs r3, 0
- bl CreateSprite
- adds r0, r4, 0
- movs r1, 0x28
- movs r2, 0x50
- movs r3, 0x1
- bl CreateSprite
- lsls r0, 24
- lsrs r1, r0, 24
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r5, =gSprites
- adds r0, r5
- movs r1, 0x1
- bl StartSpriteAnim
- adds r0, r4, 0
- movs r1, 0x28
- movs r2, 0x70
- movs r3, 0x2
- bl CreateSprite
- lsls r0, 24
- lsrs r1, r0, 24
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- movs r1, 0x2
- bl StartSpriteAnim
- ldrh r0, [r6]
- adds r0, 0x1
- strh r0, [r6]
- movs r0, 0x30
- strh r0, [r6, 0xC]
- b _0816EC62
- .pool
-_0816EC4C:
- ldrh r0, [r6, 0xC]
- subs r0, 0x1
- strh r0, [r6, 0xC]
- lsls r0, 16
- cmp r0, 0
- bne _0816EC62
- adds r0, r2, 0
- subs r0, 0x8
- adds r0, r1, r0
- ldr r1, =task_intro_27
- str r1, [r0]
-_0816EC62:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end task_intro_26
-
- thumb_func_start sub_816EC6C
-sub_816EC6C: @ 816EC6C
- push {r4,lr}
- adds r4, r0, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _0816EC88
- adds r2, r4, 0
- adds r2, 0x3E
- ldrb r0, [r2]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r2]
-_0816EC88:
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- cmp r0, 0x1
- beq _0816ECAC
- cmp r0, 0x1
- bgt _0816EC9A
- cmp r0, 0
- beq _0816ECA0
- b _0816ED12
-_0816EC9A:
- cmp r0, 0x2
- beq _0816ECDC
- b _0816ED12
-_0816ECA0:
- movs r0, 0xE1
- lsls r0, 1
- strh r0, [r4, 0x30]
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
-_0816ECAC:
- movs r1, 0x30
- ldrsh r0, [r4, r1]
- ldr r1, =gIntro3BgPal
- adds r0, r1
- ldr r1, =gPlttBufferFaded + 0xBA
- movs r2, 0x1
- bl CpuSet
- ldrh r0, [r4, 0x30]
- adds r0, 0x2
- strh r0, [r4, 0x30]
- lsls r0, 16
- movs r1, 0xE7
- lsls r1, 17
- cmp r0, r1
- bne _0816ED12
- movs r0, 0xE6
- lsls r0, 1
- strh r0, [r4, 0x30]
- movs r0, 0x4
- strh r0, [r4, 0x32]
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
-_0816ECDC:
- ldrh r0, [r4, 0x32]
- subs r0, 0x1
- strh r0, [r4, 0x32]
- lsls r0, 16
- cmp r0, 0
- bne _0816ED12
- movs r0, 0x4
- strh r0, [r4, 0x32]
- movs r1, 0x30
- ldrsh r0, [r4, r1]
- ldr r1, =gIntro3BgPal
- adds r0, r1
- ldr r1, =gPlttBufferFaded + 0xBA
- movs r2, 0x1
- bl CpuSet
- ldrh r0, [r4, 0x30]
- subs r0, 0x2
- strh r0, [r4, 0x30]
- lsls r0, 16
- movs r1, 0xE0
- lsls r1, 17
- cmp r0, r1
- bne _0816ED12
- adds r0, r4, 0
- bl DestroySprite
-_0816ED12:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816EC6C
-
- thumb_func_start task_intro_27
-task_intro_27: @ 816ED20
- push {r4-r6,lr}
- sub sp, 0x4
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- ldr r0, =gUnknown_085E5048
- bl LoadCompressedObjectPic
- ldr r0, =gUnknown_085E5058
- bl LoadSpritePalettes
- movs r1, 0xD5
- lsls r1, 6
- movs r0, 0
- bl SetGpuReg
- ldr r6, =gTasks
- lsls r4, r5, 2
- adds r4, r5
- lsls r4, 3
- adds r4, r6
- ldr r0, =task_intro_28
- str r0, [r4]
- ldr r0, =0x0000ffde
- ldr r1, =0x00002949
- str r1, [sp]
- movs r1, 0
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- movs r0, 0
- strh r0, [r4, 0x8]
- movs r0, 0xA8
- strh r0, [r4, 0xA]
- ldr r1, =0x0000fff0
- strh r1, [r4, 0xC]
- ldr r0, =0x0000ff78
- strh r0, [r4, 0xE]
- strh r1, [r4, 0x10]
- ldr r0, =sub_816EEA8
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r6
- strh r5, [r1, 0x10]
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end task_intro_27
-
- thumb_func_start task_intro_28
-task_intro_28: @ 816EDB4
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r4, r1, 3
- ldr r5, =gTasks + 0x8
- adds r2, r4, r5
- ldrh r0, [r2, 0xE]
- movs r3, 0x1
- ands r0, r3
- cmp r0, 0
- bne _0816EDD6
- ldrh r0, [r2, 0xC]
- movs r1, 0x2
- eors r0, r1
- strh r0, [r2, 0xC]
-_0816EDD6:
- ldrh r0, [r2, 0xE]
- adds r0, 0x1
- strh r0, [r2, 0xE]
- movs r6, 0
- ldrsh r1, [r2, r6]
- cmp r1, 0x1
- beq _0816EE2E
- cmp r1, 0x1
- bgt _0816EDF4
- cmp r1, 0
- beq _0816EDFE
- b _0816EE86
- .pool
-_0816EDF4:
- cmp r1, 0x2
- beq _0816EE3A
- cmp r1, 0x3
- beq _0816EE70
- b _0816EE86
-_0816EDFE:
- ands r0, r3
- cmp r0, 0
- beq _0816EE1C
- ldrh r0, [r2, 0x2]
- subs r0, 0x2
- strh r0, [r2, 0x2]
- ldrh r0, [r2, 0x4]
- adds r0, 0x1
- strh r0, [r2, 0x4]
- ldrh r0, [r2, 0x6]
- adds r0, 0x2
- strh r0, [r2, 0x6]
- ldrh r0, [r2, 0x8]
- adds r0, 0x1
- strh r0, [r2, 0x8]
-_0816EE1C:
- movs r1, 0x2
- ldrsh r0, [r2, r1]
- cmp r0, 0x68
- bne _0816EE86
- ldrh r0, [r2]
- adds r0, 0x1
- strh r0, [r2]
- strh r3, [r2, 0xA]
- b _0816EE86
-_0816EE2E:
- ldrh r0, [r2]
- adds r0, 0x1
- strh r0, [r2]
- movs r0, 0x4
- strh r0, [r2, 0xA]
- b _0816EE86
-_0816EE3A:
- ldrh r0, [r2, 0x2]
- adds r0, 0x4
- strh r0, [r2, 0x2]
- ldrh r0, [r2, 0x4]
- subs r0, 0x2
- strh r0, [r2, 0x4]
- ldrh r0, [r2, 0x6]
- subs r0, 0x4
- strh r0, [r2, 0x6]
- ldrh r0, [r2, 0x8]
- subs r0, 0x2
- strh r0, [r2, 0x8]
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0816EE86
- movs r0, 0x8C
- strh r0, [r2, 0xA]
- ldrh r0, [r2]
- adds r0, 0x1
- strh r0, [r2]
- b _0816EE86
- .pool
-_0816EE70:
- ldrh r0, [r2, 0xA]
- subs r0, 0x1
- strh r0, [r2, 0xA]
- lsls r0, 16
- cmp r0, 0
- bne _0816EE86
- adds r0, r5, 0
- subs r0, 0x8
- adds r0, r4, r0
- ldr r1, =task_intro_29
- str r1, [r0]
-_0816EE86:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end task_intro_28
-
- thumb_func_start task_intro_29
-task_intro_29: @ 816EE90
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
- ldr r0, =sub_816CC54
- bl SetMainCallback2
- pop {r0}
- bx r0
- .pool
- thumb_func_end task_intro_29
-
- thumb_func_start sub_816EEA8
-sub_816EEA8: @ 816EEA8
- push {r4,r5,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r2, r0, 24
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- ldr r1, =gTasks + 0x8
- adds r5, r0, r1
- ldrh r0, [r5, 0x4]
- adds r0, 0x1
- strh r0, [r5, 0x4]
- movs r1, 0
- ldrsh r0, [r5, r1]
- cmp r0, 0x5
- bls _0816EECA
- b _0816F0B2
-_0816EECA:
- lsls r0, 2
- ldr r1, =_0816EEDC
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_0816EEDC:
- .4byte _0816EEF4
- .4byte _0816EF34
- .4byte _0816EF80
- .4byte _0816F00A
- .4byte _0816F074
- .4byte _0816F0A0
-_0816EEF4:
- ldrh r1, [r5, 0x4]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0816EF16
- movs r2, 0x2
- ldrsh r0, [r5, r2]
- lsls r0, 1
- ldr r1, =gIntro3BgPal + 0x1A2
- adds r0, r1
- ldr r1, =gPlttBufferFaded + 0xBC
- movs r2, 0x1
- bl CpuSet
- ldrh r0, [r5, 0x2]
- adds r0, 0x1
- strh r0, [r5, 0x2]
-_0816EF16:
- movs r1, 0x2
- ldrsh r0, [r5, r1]
- cmp r0, 0x6
- beq _0816EF20
- b _0816F0B2
-_0816EF20:
- ldrh r0, [r5]
- adds r0, 0x1
- strh r0, [r5]
- movs r0, 0
- strh r0, [r5, 0x2]
- b _0816EF70
- .pool
-_0816EF34:
- ldrh r1, [r5, 0x6]
- movs r2, 0x6
- ldrsh r0, [r5, r2]
- cmp r0, 0
- bne _0816F004
- ldrh r1, [r5, 0x4]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0816EF60
- movs r1, 0x2
- ldrsh r0, [r5, r1]
- lsls r0, 1
- ldr r1, =gIntro3BgPal + 0x1A2
- adds r0, r1
- ldr r1, =gPlttBufferFaded + 0xB0
- movs r2, 0x1
- bl CpuSet
- ldrh r0, [r5, 0x2]
- adds r0, 0x1
- strh r0, [r5, 0x2]
-_0816EF60:
- movs r2, 0x2
- ldrsh r0, [r5, r2]
- cmp r0, 0x6
- beq _0816EF6A
- b _0816F0B2
-_0816EF6A:
- ldrh r0, [r5]
- adds r0, 0x1
- strh r0, [r5]
-_0816EF70:
- movs r0, 0xA
- strh r0, [r5, 0x6]
- b _0816F0B2
- .pool
-_0816EF80:
- ldrh r1, [r5, 0x6]
- movs r2, 0x6
- ldrsh r0, [r5, r2]
- cmp r0, 0
- bne _0816F004
- ldrh r1, [r5, 0x4]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0816EFAC
- movs r1, 0x2
- ldrsh r0, [r5, r1]
- lsls r0, 1
- ldr r1, =gIntro3BgPal + 0x182
- adds r0, r1
- ldr r1, =gPlttBufferFaded + 0xB8
- movs r2, 0x1
- bl CpuSet
- ldrh r0, [r5, 0x2]
- adds r0, 0x1
- strh r0, [r5, 0x2]
-_0816EFAC:
- movs r2, 0x2
- ldrsh r0, [r5, r2]
- cmp r0, 0x6
- beq _0816EFB6
- b _0816F0B2
-_0816EFB6:
- ldr r0, =gUnknown_085E5030
- movs r1, 0x78
- movs r2, 0x58
- movs r3, 0xF
- bl CreateSprite
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x67
- bl PlaySE
- ldr r1, =gSprites
- lsls r0, r4, 4
- adds r0, r4
- lsls r0, 2
- adds r0, r1
- adds r3, r0, 0
- adds r3, 0x3E
- ldrb r1, [r3]
- movs r2, 0x4
- orrs r1, r2
- strb r1, [r3]
- ldrh r1, [r5, 0x8]
- strh r1, [r0, 0x34]
- ldrh r0, [r5]
- adds r0, 0x1
- strh r0, [r5]
- movs r0, 0x10
- strh r0, [r5, 0x6]
- b _0816F0B2
- .pool
-_0816F004:
- subs r0, r1, 0x1
- strh r0, [r5, 0x6]
- b _0816F0B2
-_0816F00A:
- ldrh r1, [r5, 0x4]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0816F0B2
- ldrh r0, [r5, 0x6]
- subs r0, 0x1
- adds r2, r0, 0
- strh r0, [r5, 0x6]
- lsls r0, 16
- cmp r0, 0
- beq _0816F068
- lsls r2, 24
- lsrs r2, 24
- ldr r3, =0x00002949
- movs r0, 0x50
- movs r1, 0x10
- bl BlendPalette
- ldr r4, =gIntro3BgPal + 0x1AC
- ldr r5, =gPlttBufferFaded + 0xBC
- adds r0, r4, 0
- adds r1, r5, 0
- movs r2, 0x1
- bl CpuSet
- adds r1, r5, 0
- subs r1, 0xC
- adds r0, r4, 0
- movs r2, 0x1
- bl CpuSet
- subs r4, 0x20
- subs r5, 0x4
- adds r0, r4, 0
- adds r1, r5, 0
- movs r2, 0x1
- bl CpuSet
- b _0816F0B2
- .pool
-_0816F068:
- ldrh r0, [r5]
- adds r0, 0x1
- strh r0, [r5]
- movs r0, 0x35
- strh r0, [r5, 0x6]
- b _0816F0B2
-_0816F074:
- ldrh r0, [r5, 0x6]
- subs r0, 0x1
- strh r0, [r5, 0x6]
- lsls r0, 16
- cmp r0, 0
- bne _0816F0B2
- movs r0, 0x1
- negs r0, r0
- ldr r1, =0x00007fff
- str r1, [sp]
- movs r1, 0
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldrh r0, [r5]
- adds r0, 0x1
- strh r0, [r5]
- b _0816F0B2
- .pool
-_0816F0A0:
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0816F0B2
- adds r0, r2, 0
- bl DestroyTask
-_0816F0B2:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816EEA8
-
- thumb_func_start intro_reset_and_hide_bgs
-@ void intro_reset_and_hide_bgs()
-intro_reset_and_hide_bgs: @ 816F0C0
- push {lr}
- movs r0, 0
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x1C
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x1E
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x18
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x1A
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x14
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x16
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x10
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x12
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x50
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x52
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x54
- movs r1, 0
- bl SetGpuReg
- pop {r0}
- bx r0
- thumb_func_end intro_reset_and_hide_bgs
-
- thumb_func_start task_intro_3_1
-task_intro_3_1: @ 816F128
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- 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 _0816F170
- cmp r0, 0x1
- ble _0816F148
- cmp r0, 0x2
- beq _0816F1BC
-_0816F148:
- movs r1, 0xFD
- lsls r1, 6
- movs r0, 0x50
- bl SetGpuReg
- ldr r0, =gUnknown_0853FF70
- ldrh r1, [r0, 0x3E]
- movs r0, 0x52
- bl SetGpuReg
- movs r0, 0x54
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x40
- b _0816F1AC
- .pool
-_0816F170:
- ldrh r1, [r4, 0xA]
- movs r2, 0xA
- ldrsh r0, [r4, r2]
- cmp r0, 0
- beq _0816F1A0
- subs r0, r1, 0x1
- strh r0, [r4, 0xA]
- movs r1, 0xA
- ldrsh r0, [r4, r1]
- lsrs r1, r0, 31
- adds r0, r1
- movs r1, 0xFF
- lsls r1, 1
- ldr r2, =gUnknown_0853FF70
- ands r0, r1
- adds r0, r2
- ldrh r1, [r0]
- movs r0, 0x52
- bl SetGpuReg
- b _0816F1DA
- .pool
-_0816F1A0:
- ldr r0, =gUnknown_0853FF70
- ldrh r1, [r0]
- movs r0, 0x52
- bl SetGpuReg
- movs r0, 0x10
-_0816F1AC:
- strh r0, [r4, 0xA]
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- b _0816F1DA
- .pool
-_0816F1BC:
- movs r0, 0x50
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x52
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x54
- movs r1, 0
- bl SetGpuReg
- adds r0, r5, 0
- bl DestroyTask
-_0816F1DA:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end task_intro_3_1
-
- thumb_func_start task_intro_3_2
-task_intro_3_2: @ 816F1E0
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- 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 _0816F228
- cmp r0, 0x1
- ble _0816F200
- cmp r0, 0x2
- beq _0816F274
-_0816F200:
- movs r1, 0xFD
- lsls r1, 6
- movs r0, 0x50
- bl SetGpuReg
- ldr r0, =gUnknown_0853FF70
- ldrh r1, [r0]
- movs r0, 0x52
- bl SetGpuReg
- movs r0, 0x54
- movs r1, 0
- bl SetGpuReg
- movs r0, 0
- b _0816F264
- .pool
-_0816F228:
- ldrh r1, [r4, 0xA]
- movs r2, 0xA
- ldrsh r0, [r4, r2]
- cmp r0, 0x3D
- bgt _0816F258
- adds r0, r1, 0x1
- strh r0, [r4, 0xA]
- movs r1, 0xA
- ldrsh r0, [r4, r1]
- lsrs r1, r0, 31
- adds r0, r1
- movs r1, 0xFF
- lsls r1, 1
- ldr r2, =gUnknown_0853FF70
- ands r0, r1
- adds r0, r2
- ldrh r1, [r0]
- movs r0, 0x52
- bl SetGpuReg
- b _0816F2A2
- .pool
-_0816F258:
- ldr r0, =gUnknown_0853FF70
- ldrh r1, [r0, 0x3E]
- movs r0, 0x52
- bl SetGpuReg
- movs r0, 0x10
-_0816F264:
- strh r0, [r4, 0xA]
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- b _0816F2A2
- .pool
-_0816F274:
- ldrh r1, [r4, 0xA]
- movs r2, 0xA
- ldrsh r0, [r4, r2]
- cmp r0, 0
- beq _0816F284
- subs r0, r1, 0x1
- strh r0, [r4, 0xA]
- b _0816F2A2
-_0816F284:
- movs r0, 0x50
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x52
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x54
- movs r1, 0
- bl SetGpuReg
- adds r0, r5, 0
- bl DestroyTask
-_0816F2A2:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end task_intro_3_2
-
- thumb_func_start sub_816F2A8
-sub_816F2A8: @ 816F2A8
- push {r4,lr}
- sub sp, 0x24
- lsls r2, 16
- lsrs r2, 16
- movs r4, 0x80
- lsls r4, 8
- str r4, [sp]
- str r4, [sp, 0x4]
- mov r4, sp
- strh r0, [r4, 0x8]
- mov r0, sp
- strh r1, [r0, 0xA]
- strh r2, [r0, 0xC]
- strh r2, [r0, 0xE]
- strh r3, [r0, 0x10]
- add r4, sp, 0x14
- adds r1, r4, 0
- movs r2, 0x1
- bl BgAffineSet
- ldrh r1, [r4]
- movs r0, 0x20
- bl SetGpuReg
- ldrh r1, [r4, 0x2]
- movs r0, 0x22
- bl SetGpuReg
- ldrh r1, [r4, 0x4]
- movs r0, 0x24
- bl SetGpuReg
- ldrh r1, [r4, 0x6]
- movs r0, 0x26
- bl SetGpuReg
- ldrh r1, [r4, 0x8]
- movs r0, 0x28
- bl SetGpuReg
- ldrh r1, [r4, 0xA]
- movs r0, 0x2A
- bl SetGpuReg
- ldrh r1, [r4, 0xC]
- movs r0, 0x2C
- bl SetGpuReg
- ldrh r1, [r4, 0xE]
- movs r0, 0x2E
- bl SetGpuReg
- add sp, 0x24
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_816F2A8
-
- thumb_func_start sub_816F318
-sub_816F318: @ 816F318
- push {r4,lr}
- sub sp, 0x4
- adds r4, r0, 0
- movs r1, 0x32
- ldrsh r0, [r4, r1]
- cmp r0, 0xBF
- ble _0816F394
- ldrh r1, [r4, 0x34]
- movs r2, 0x34
- ldrsh r0, [r4, r2]
- cmp r0, 0
- beq _0816F336
- subs r0, r1, 0x1
- strh r0, [r4, 0x34]
- b _0816F39A
-_0816F336:
- adds r2, r4, 0
- adds r2, 0x3E
- ldrb r1, [r2]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
- ldrh r0, [r4, 0x30]
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r4, 0x32]
- str r1, [sp]
- movs r2, 0
- movs r3, 0
- bl SetOamMatrix
- movs r0, 0x32
- ldrsh r1, [r4, r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 5
- subs r0, r1
- movs r1, 0x64
- bl __divsi3
- strh r0, [r4, 0x32]
- movs r2, 0x32
- ldrsh r1, [r4, r2]
- adds r0, r1, 0
- subs r0, 0xC0
- cmp r0, 0
- bge _0816F378
- adds r0, 0x7F
-_0816F378:
- asrs r0, 7
- adds r0, 0x9
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xF
- bls _0816F386
- movs r0, 0xF
-_0816F386:
- lsls r2, r0, 4
- ldrb r1, [r4, 0x5]
- movs r0, 0xF
- ands r0, r1
- orrs r0, r2
- strb r0, [r4, 0x5]
- b _0816F39A
-_0816F394:
- adds r0, r4, 0
- bl DestroySprite
-_0816F39A:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_816F318
-
- thumb_func_start sub_816F3A4
-sub_816F3A4: @ 816F3A4
- push {r4,lr}
- adds r4, r0, 0
- ldr r2, =gSprites
- movs r1, 0x3C
- ldrsh r0, [r4, r1]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- movs r3, 0x3C
- ldrsh r0, [r1, r3]
- cmp r0, 0
- beq _0816F420
- adds r2, r4, 0
- adds r2, 0x3E
- ldrb r0, [r2]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r2]
- ldrh r0, [r4, 0x24]
- ldrh r1, [r4, 0x20]
- adds r0, r1
- strh r0, [r4, 0x20]
- ldrh r0, [r4, 0x26]
- ldrh r3, [r4, 0x22]
- adds r0, r3
- strh r0, [r4, 0x22]
- adds r0, r4, 0
- movs r1, 0x3
- bl StartSpriteAnim
- movs r0, 0x80
- lsls r0, 3
- strh r0, [r4, 0x32]
- ldrh r1, [r4, 0x30]
- movs r0, 0x3
- ands r0, r1
- lsls r0, 3
- strh r0, [r4, 0x34]
- ldr r0, =sub_816F318
- str r0, [r4, 0x1C]
- ldrb r1, [r4, 0x1]
- movs r0, 0x3F
- ands r0, r1
- movs r1, 0x40
- orrs r0, r1
- strb r0, [r4, 0x1]
- ldrb r0, [r4, 0x3]
- movs r1, 0xC0
- orrs r0, r1
- strb r0, [r4, 0x3]
- adds r0, r4, 0
- movs r1, 0x1
- movs r2, 0x3
- movs r3, 0x2
- bl CalcCenterToCornerVec
- b _0816F44C
- .pool
-_0816F420:
- ldrh r0, [r1, 0x24]
- strh r0, [r4, 0x24]
- movs r0, 0x3C
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrh r0, [r0, 0x26]
- strh r0, [r4, 0x26]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrh r0, [r0, 0x20]
- strh r0, [r4, 0x20]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrh r0, [r0, 0x22]
- strh r0, [r4, 0x22]
-_0816F44C:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_816F3A4
-
- thumb_func_start sub_816F454
-sub_816F454: @ 816F454
- push {lr}
- adds r1, r0, 0
- movs r2, 0x2E
- ldrsh r0, [r1, r2]
- cmp r0, 0
- beq _0816F464
- ldr r0, =sub_816F46C
- str r0, [r1, 0x1C]
-_0816F464:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816F454
-
- thumb_func_start sub_816F46C
-sub_816F46C: @ 816F46C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- adds r7, r0, 0
- ldrh r4, [r7, 0x20]
- movs r1, 0x20
- ldrsh r0, [r7, r1]
- cmp r0, 0x74
- bgt _0816F4AC
- ldrh r0, [r7, 0x26]
- ldrh r1, [r7, 0x22]
- adds r0, r1
- movs r1, 0
- strh r0, [r7, 0x22]
- strh r1, [r7, 0x26]
- adds r0, r4, 0x4
- strh r0, [r7, 0x20]
- ldr r0, =0x0000fffc
- strh r0, [r7, 0x24]
- movs r0, 0x80
- strh r0, [r7, 0x36]
- ldr r0, =sub_816F5B4
- str r0, [r7, 0x1C]
- b _0816F59E
- .pool
-_0816F4AC:
- ldrh r1, [r7, 0x36]
- ldr r5, =gSineTable
- lsls r0, r1, 24
- lsrs r0, 23
- adds r0, r5
- ldrh r2, [r0]
- adds r0, r1, 0
- adds r0, 0x40
- lsls r0, 24
- lsrs r0, 23
- adds r0, r5
- ldrh r3, [r0]
- adds r1, 0x2
- strh r1, [r7, 0x36]
- lsls r2, 16
- asrs r0, r2, 16
- cmp r0, 0
- bge _0816F4D2
- adds r0, 0x1F
-_0816F4D2:
- asrs r0, 5
- strh r0, [r7, 0x26]
- subs r0, r4, 0x1
- strh r0, [r7, 0x20]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0816F4E8
- ldrh r0, [r7, 0x22]
- adds r0, 0x1
- strh r0, [r7, 0x22]
-_0816F4E8:
- lsls r0, r3, 16
- asrs r0, 16
- negs r0, r0
- cmp r0, 0
- bge _0816F4F4
- adds r0, 0xF
-_0816F4F4:
- lsls r1, r0, 12
- lsrs r1, 16
- ldrh r4, [r7, 0x32]
- ldrh r3, [r7, 0x34]
- adds r0, r1, 0
- subs r0, 0x10
- lsls r0, 24
- lsrs r0, 23
- adds r0, r5
- ldrh r2, [r0]
- adds r1, 0x30
- lsls r1, 24
- lsrs r1, 23
- adds r1, r5
- movs r0, 0
- ldrsh r1, [r1, r0]
- adds r0, r1, 0
- muls r0, r4
- cmp r0, 0
- bge _0816F51E
- adds r0, 0xFF
-_0816F51E:
- lsls r0, 8
- lsrs r0, 16
- mov r8, r0
- lsls r0, r2, 16
- asrs r2, r0, 16
- negs r0, r2
- muls r0, r3
- cmp r0, 0
- bge _0816F532
- adds r0, 0xFF
-_0816F532:
- lsls r0, 8
- lsrs r0, 16
- mov r10, r0
- adds r0, r2, 0
- muls r0, r4
- cmp r0, 0
- bge _0816F542
- adds r0, 0xFF
-_0816F542:
- lsls r0, 8
- lsrs r5, r0, 16
- adds r0, r1, 0
- muls r0, r3
- cmp r0, 0
- bge _0816F550
- adds r0, 0xFF
-_0816F550:
- lsls r6, r0, 8
- lsrs r6, 16
- ldrh r0, [r7, 0x30]
- lsls r0, 24
- lsrs r0, 24
- str r3, [sp]
- adds r1, r4, 0
- movs r2, 0
- movs r3, 0
- bl SetOamMatrix
- ldrh r0, [r7, 0x30]
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r5
- mov r1, r10
- lsls r5, r1, 16
- lsrs r3, r5, 16
- lsls r4, r6, 16
- str r6, [sp]
- mov r1, r8
- mov r2, r9
- bl SetOamMatrix
- ldrh r0, [r7, 0x30]
- adds r0, 0x2
- lsls r0, 24
- lsrs r0, 24
- lsls r5, 1
- lsrs r5, 16
- lsls r4, 1
- lsrs r4, 16
- str r4, [sp]
- mov r1, r8
- mov r2, r9
- adds r3, r5, 0
- bl SetOamMatrix
-_0816F59E:
- 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_816F46C
-
- thumb_func_start sub_816F5B4
-sub_816F5B4: @ 816F5B4
- push {r4,lr}
- sub sp, 0x4
- adds r4, r0, 0
- ldrh r0, [r4, 0x30]
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r4, 0x3A]
- adds r1, 0x40
- lsls r1, 16
- lsrs r1, 16
- str r1, [sp]
- movs r2, 0
- movs r3, 0
- bl SetOamMatrix
- ldrh r0, [r4, 0x30]
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r4, 0x3A]
- adds r1, 0x40
- lsls r1, 16
- lsrs r1, 16
- str r1, [sp]
- movs r2, 0
- movs r3, 0
- bl SetOamMatrix
- ldrh r0, [r4, 0x30]
- adds r0, 0x2
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r4, 0x3A]
- adds r1, 0x40
- lsls r1, 16
- lsrs r1, 16
- str r1, [sp]
- movs r2, 0
- movs r3, 0
- bl SetOamMatrix
- ldrh r1, [r4, 0x36]
- movs r2, 0x36
- ldrsh r0, [r4, r2]
- cmp r0, 0x40
- beq _0816F64C
- adds r0, r1, 0
- subs r0, 0x8
- strh r0, [r4, 0x36]
- ldrh r0, [r4, 0x36]
- adds r1, r0, 0
- ldr r2, =gSineTable
- adds r0, 0x40
- lsls r0, 24
- lsrs r0, 23
- adds r0, r2
- movs r3, 0
- ldrsh r0, [r0, r3]
- cmp r0, 0
- bge _0816F62E
- adds r0, 0x3F
-_0816F62E:
- asrs r0, 6
- strh r0, [r4, 0x24]
- lsls r0, r1, 24
- lsrs r0, 23
- adds r0, r2
- movs r1, 0
- ldrsh r0, [r0, r1]
- cmp r0, 0
- bge _0816F642
- adds r0, 0x3F
-_0816F642:
- asrs r0, 6
- strh r0, [r4, 0x26]
- b _0816F654
- .pool
-_0816F64C:
- movs r0, 0
- strh r0, [r4, 0x36]
- ldr r0, =sub_816F660
- str r0, [r4, 0x1C]
-_0816F654:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816F5B4
-
- thumb_func_start sub_816F660
-sub_816F660: @ 816F660
- push {r4,lr}
- adds r1, r0, 0
- movs r2, 0x2E
- ldrsh r0, [r1, r2]
- cmp r0, 0x2
- beq _0816F6C0
- ldrh r0, [r1, 0x36]
- adds r0, 0x8
- strh r0, [r1, 0x36]
- ldr r3, =gSineTable
- lsls r0, 24
- lsrs r0, 23
- adds r0, r3
- movs r4, 0
- ldrsh r0, [r0, r4]
- cmp r0, 0
- bge _0816F684
- adds r0, 0xF
-_0816F684:
- asrs r0, 4
- adds r0, 0x40
- lsls r0, 16
- lsrs r2, r0, 16
- adds r0, r2, 0
- adds r0, 0x40
- lsls r0, 24
- lsrs r0, 23
- adds r0, r3
- movs r4, 0
- ldrsh r0, [r0, r4]
- cmp r0, 0
- bge _0816F6A0
- adds r0, 0x3F
-_0816F6A0:
- asrs r0, 6
- strh r0, [r1, 0x24]
- lsls r0, r2, 24
- lsrs r0, 23
- adds r0, r3
- movs r2, 0
- ldrsh r0, [r0, r2]
- cmp r0, 0
- bge _0816F6B4
- adds r0, 0x3F
-_0816F6B4:
- asrs r0, 6
- strh r0, [r1, 0x26]
- b _0816F6C4
- .pool
-_0816F6C0:
- ldr r0, =sub_816F6D0
- str r0, [r1, 0x1C]
-_0816F6C4:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816F660
-
- thumb_func_start sub_816F6D0
-sub_816F6D0: @ 816F6D0
- push {r4,lr}
- adds r4, r0, 0
- ldrh r2, [r4, 0x22]
- movs r0, 0x22
- ldrsh r1, [r4, r0]
- movs r3, 0x38
- ldrsh r0, [r4, r3]
- cmp r1, r0
- bge _0816F6E8
- adds r0, r2, 0x4
- strh r0, [r4, 0x22]
- b _0816F744
-_0816F6E8:
- movs r0, 0x1
- strh r0, [r4, 0x3C]
- adds r2, r4, 0
- adds r2, 0x3E
- ldrb r0, [r2]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r2]
- ldrh r0, [r4, 0x24]
- ldrh r1, [r4, 0x20]
- adds r0, r1
- strh r0, [r4, 0x20]
- ldrh r0, [r4, 0x26]
- ldrh r3, [r4, 0x22]
- adds r0, r3
- strh r0, [r4, 0x22]
- adds r0, r4, 0
- movs r1, 0x3
- bl StartSpriteAnim
- movs r0, 0x80
- lsls r0, 3
- strh r0, [r4, 0x32]
- ldrh r1, [r4, 0x30]
- movs r0, 0x3
- ands r0, r1
- lsls r0, 3
- strh r0, [r4, 0x34]
- ldr r0, =sub_816F318
- str r0, [r4, 0x1C]
- ldrb r1, [r4, 0x1]
- movs r0, 0x3F
- ands r0, r1
- movs r1, 0x40
- orrs r0, r1
- strb r0, [r4, 0x1]
- ldrb r0, [r4, 0x3]
- movs r1, 0xC0
- orrs r0, r1
- strb r0, [r4, 0x3]
- adds r0, r4, 0
- movs r1, 0x1
- movs r2, 0x3
- movs r3, 0x2
- bl CalcCenterToCornerVec
-_0816F744:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816F6D0
-
- thumb_func_start sub_816F750
-sub_816F750: @ 816F750
- push {r4,lr}
- adds r4, r0, 0
- ldrh r2, [r4, 0x22]
- movs r0, 0x22
- ldrsh r1, [r4, r0]
- movs r3, 0x38
- ldrsh r0, [r4, r3]
- cmp r1, r0
- bge _0816F768
- adds r0, r2, 0x4
- strh r0, [r4, 0x22]
- b _0816F7C4
-_0816F768:
- movs r0, 0x1
- strh r0, [r4, 0x3C]
- adds r2, r4, 0
- adds r2, 0x3E
- ldrb r0, [r2]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r2]
- ldrh r0, [r4, 0x24]
- ldrh r1, [r4, 0x20]
- adds r0, r1
- strh r0, [r4, 0x20]
- ldrh r0, [r4, 0x26]
- ldrh r3, [r4, 0x22]
- adds r0, r3
- strh r0, [r4, 0x22]
- adds r0, r4, 0
- movs r1, 0x3
- bl StartSpriteAnim
- movs r0, 0x80
- lsls r0, 3
- strh r0, [r4, 0x32]
- ldrh r1, [r4, 0x30]
- movs r0, 0x3
- ands r0, r1
- lsls r0, 3
- strh r0, [r4, 0x34]
- ldr r0, =sub_816F318
- str r0, [r4, 0x1C]
- ldrb r1, [r4, 0x1]
- movs r0, 0x3F
- ands r0, r1
- movs r1, 0x40
- orrs r0, r1
- strb r0, [r4, 0x1]
- ldrb r0, [r4, 0x3]
- movs r1, 0xC0
- orrs r0, r1
- strb r0, [r4, 0x3]
- adds r0, r4, 0
- movs r1, 0x1
- movs r2, 0x3
- movs r3, 0x2
- bl CalcCenterToCornerVec
-_0816F7C4:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816F750
-
- thumb_func_start sub_816F7D0
-sub_816F7D0: @ 816F7D0
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x14
- adds r4, r0, 0
- adds r5, r1, 0
- ldr r6, [sp, 0x34]
- ldr r0, [sp, 0x38]
- mov r8, r0
- lsls r4, 16
- lsls r5, 16
- lsls r2, 16
- lsrs r2, 16
- str r2, [sp, 0x8]
- lsls r3, 16
- lsrs r3, 16
- str r3, [sp, 0xC]
- lsls r6, 16
- lsrs r6, 16
- mov r1, r8
- lsls r1, 24
- lsrs r1, 24
- mov r8, r1
- ldr r0, =gUnknown_085E4D64
- lsrs r2, r4, 16
- mov r10, r2
- asrs r4, 16
- lsrs r1, r5, 16
- str r1, [sp, 0x4]
- asrs r5, 16
- adds r1, r4, 0
- adds r2, r5, 0
- movs r3, 0x1
- bl CreateSprite
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r2, =gSprites
- mov r9, r2
- lsls r0, r7, 4
- adds r0, r7
- lsls r5, r0, 2
- adds r4, r5, r2
- movs r0, 0
- strh r0, [r4, 0x2E]
- strh r0, [r4, 0x3C]
- mov r0, sp
- ldrh r0, [r0, 0xC]
- strh r0, [r4, 0x30]
- mov r1, sp
- ldrh r1, [r1, 0x8]
- strh r1, [r4, 0x32]
- mov r2, sp
- ldrh r2, [r2, 0x8]
- strh r2, [r4, 0x34]
- strh r6, [r4, 0x38]
- mov r0, sp
- ldrh r0, [r0, 0x8]
- strh r0, [r4, 0x3A]
- ldrb r0, [r4, 0x1]
- movs r1, 0x3
- orrs r0, r1
- strb r0, [r4, 0x1]
- movs r0, 0x1F
- ldr r1, [sp, 0xC]
- ands r1, r0
- lsls r1, 1
- ldrb r2, [r4, 0x3]
- movs r0, 0x3F
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r4, 0x3]
- adds r0, r4, 0
- movs r1, 0
- movs r2, 0x2
- movs r3, 0x2
- bl CalcCenterToCornerVec
- adds r0, r4, 0
- movs r1, 0x2
- bl StartSpriteAnim
- mov r1, r8
- cmp r1, 0
- bne _0816F898
- mov r0, r9
- adds r0, 0x1C
- adds r0, r5, r0
- ldr r1, =sub_816F454
- b _0816F8A0
- .pool
-_0816F898:
- mov r0, r9
- adds r0, 0x1C
- adds r0, r5, r0
- ldr r1, =sub_816F750
-_0816F8A0:
- str r1, [r0]
- str r7, [sp, 0x10]
- mov r2, r10
- lsls r2, 16
- asrs r2, 16
- mov r10, r2
- ldr r0, [sp, 0x4]
- lsls r0, 16
- asrs r0, 16
- mov r8, r0
- ldr r0, =gUnknown_085E4D64
- mov r1, r10
- mov r2, r8
- movs r3, 0x1
- bl CreateSprite
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r5, =gSprites
- lsls r4, r7, 4
- adds r4, r7
- lsls r4, 2
- adds r0, r4, r5
- mov r1, sp
- ldrh r1, [r1, 0x10]
- strh r1, [r0, 0x3C]
- ldr r2, [sp, 0xC]
- adds r2, 0x1
- mov r9, r2
- strh r2, [r0, 0x30]
- ldrb r1, [r0, 0x1]
- movs r2, 0x3
- orrs r1, r2
- strb r1, [r0, 0x1]
- mov r2, r9
- movs r1, 0x1F
- ands r2, r1
- lsls r2, 1
- ldrb r3, [r0, 0x3]
- movs r6, 0x3F
- negs r6, r6
- adds r1, r6, 0
- ands r1, r3
- orrs r1, r2
- strb r1, [r0, 0x3]
- movs r1, 0
- movs r2, 0x2
- movs r3, 0x2
- bl CalcCenterToCornerVec
- ldr r2, =gSprites + 0x1C
- adds r4, r2
- ldr r0, =sub_816F3A4
- str r0, [r4]
- ldr r0, =gUnknown_085E4D64
- mov r1, r10
- mov r2, r8
- movs r3, 0x1
- bl CreateSprite
- lsls r0, 24
- lsrs r7, r0, 24
- lsls r4, r7, 4
- adds r4, r7
- lsls r4, 2
- adds r5, r4, r5
- mov r1, sp
- ldrh r1, [r1, 0x10]
- strh r1, [r5, 0x3C]
- ldr r2, [sp, 0xC]
- adds r2, 0x2
- mov r8, r2
- strh r2, [r5, 0x30]
- adds r0, r5, 0
- movs r1, 0x1
- bl StartSpriteAnim
- ldrb r0, [r5, 0x1]
- movs r1, 0x3
- orrs r0, r1
- strb r0, [r5, 0x1]
- mov r0, r8
- movs r2, 0x1F
- ands r0, r2
- lsls r0, 1
- ldrb r1, [r5, 0x3]
- ands r6, r1
- orrs r6, r0
- strb r6, [r5, 0x3]
- adds r0, r5, 0
- movs r1, 0
- movs r2, 0x2
- movs r3, 0x2
- bl CalcCenterToCornerVec
- ldr r0, =gSprites + 0x1C
- adds r4, r0
- ldr r1, =sub_816F3A4
- str r1, [r4]
- ldr r2, [sp, 0xC]
- lsls r0, r2, 24
- lsrs r0, 24
- ldr r5, [sp, 0x8]
- adds r5, 0x20
- lsls r4, r5, 16
- lsrs r4, 16
- str r4, [sp]
- adds r1, r4, 0
- movs r2, 0
- movs r3, 0
- bl SetOamMatrix
- mov r0, r9
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- str r4, [sp]
- adds r1, r4, 0
- movs r2, 0
- movs r3, 0
- bl SetOamMatrix
- mov r1, r8
- lsls r1, 24
- lsrs r1, 24
- mov r8, r1
- lsls r5, 17
- lsrs r5, 16
- str r5, [sp]
- mov r0, r8
- adds r1, r4, 0
- movs r2, 0
- movs r3, 0
- bl SetOamMatrix
- ldr r0, [sp, 0x10]
- add sp, 0x14
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_816F7D0
-
- thumb_func_start sub_816F9D4
-sub_816F9D4: @ 816F9D4
- push {r4,r5,lr}
- adds r4, r0, 0
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- cmp r0, 0x4
- bhi _0816FA62
- lsls r0, 2
- ldr r1, =_0816F9F0
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_0816F9F0:
- .4byte _0816FA04
- .4byte _0816FA12
- .4byte _0816FA30
- .4byte _0816FA62
- .4byte _0816FA50
-_0816FA04:
- adds r0, r4, 0
- movs r1, 0
- bl StartSpriteAnimIfDifferent
- ldrh r0, [r4, 0x20]
- subs r0, 0x1
- b _0816FA60
-_0816FA12:
- adds r0, r4, 0
- movs r1, 0
- bl StartSpriteAnimIfDifferent
- ldr r0, =gUnknown_030062A0
- ldr r0, [r0]
- movs r1, 0x7
- ands r0, r1
- cmp r0, 0
- bne _0816FAAA
- ldrh r0, [r4, 0x20]
- adds r0, 0x1
- b _0816FA60
- .pool
-_0816FA30:
- ldrh r2, [r4, 0x20]
- movs r1, 0x20
- ldrsh r0, [r4, r1]
- cmp r0, 0x78
- ble _0816FA46
- ldr r0, =gUnknown_030062A0
- ldr r0, [r0]
- movs r1, 0x7
- ands r0, r1
- cmp r0, 0
- beq _0816FA6E
-_0816FA46:
- adds r0, r2, 0x1
- b _0816FA60
- .pool
-_0816FA50:
- ldrh r2, [r4, 0x20]
- movs r0, 0x20
- ldrsh r1, [r4, r0]
- movs r0, 0x20
- negs r0, r0
- cmp r1, r0
- ble _0816FA62
- subs r0, r2, 0x2
-_0816FA60:
- strh r0, [r4, 0x20]
-_0816FA62:
- ldr r0, =gUnknown_030062A0
- ldr r0, [r0]
- movs r1, 0x7
- ands r0, r1
- cmp r0, 0
- bne _0816FAAA
-_0816FA6E:
- movs r1, 0x26
- ldrsh r5, [r4, r1]
- cmp r5, 0
- beq _0816FA80
- movs r0, 0
- strh r0, [r4, 0x26]
- b _0816FAAA
- .pool
-_0816FA80:
- bl Random
- movs r1, 0x3
- ands r1, r0
- cmp r1, 0x1
- beq _0816FAA8
- cmp r1, 0x1
- bgt _0816FA96
- cmp r1, 0
- beq _0816FA9E
- b _0816FAAA
-_0816FA96:
- cmp r1, 0x3
- bgt _0816FAAA
- strh r5, [r4, 0x26]
- b _0816FAAA
-_0816FA9E:
- ldr r0, =0x0000ffff
- strh r0, [r4, 0x26]
- b _0816FAAA
- .pool
-_0816FAA8:
- strh r1, [r4, 0x26]
-_0816FAAA:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_816F9D4
-
- thumb_func_start sub_816FAB0
-sub_816FAB0: @ 816FAB0
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- cmp r0, 0x1
- beq _0816FACA
- cmp r0, 0x1
- ble _0816FB12
- cmp r0, 0x2
- beq _0816FAEA
- cmp r0, 0x3
- beq _0816FB04
- b _0816FB12
-_0816FACA:
- movs r2, 0x24
- ldrsh r0, [r4, r2]
- movs r2, 0x20
- ldrsh r1, [r4, r2]
- adds r0, r1
- ldr r1, =0x0000012f
- cmp r0, r1
- bgt _0816FAE4
- ldrh r0, [r4, 0x24]
- adds r0, 0x8
- b _0816FB10
- .pool
-_0816FAE4:
- movs r0, 0x2
- strh r0, [r4, 0x2E]
- b _0816FB12
-_0816FAEA:
- movs r1, 0x24
- ldrsh r0, [r4, r1]
- movs r2, 0x20
- ldrsh r1, [r4, r2]
- adds r0, r1
- cmp r0, 0x78
- ble _0816FAFE
- ldrh r0, [r4, 0x24]
- subs r0, 0x1
- b _0816FB10
-_0816FAFE:
- movs r0, 0x3
- strh r0, [r4, 0x2E]
- b _0816FB12
-_0816FB04:
- ldrh r1, [r4, 0x24]
- movs r2, 0x24
- ldrsh r0, [r4, r2]
- cmp r0, 0
- ble _0816FB12
- subs r0, r1, 0x2
-_0816FB10:
- strh r0, [r4, 0x24]
-_0816FB12:
- ldrh r0, [r4, 0x30]
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x8
- bl Sin
- ldr r1, =gUnknown_0203BCCC
- ldrh r1, [r1]
- subs r0, r1
- strh r0, [r4, 0x26]
- ldrh r0, [r4, 0x30]
- adds r0, 0x4
- strh r0, [r4, 0x30]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816FAB0
-
- thumb_func_start sub_816FB38
-sub_816FB38: @ 816FB38
- push {r4-r6,lr}
- adds r6, r0, 0
- movs r1, 0x2E
- ldrsh r0, [r6, r1]
- cmp r0, 0x5
- bls _0816FB46
- b _0816FD38
-_0816FB46:
- lsls r0, 2
- ldr r1, =_0816FB54
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_0816FB54:
- .4byte _0816FB6C
- .4byte _0816FB94
- .4byte _0816FBB4
- .4byte _0816FC5C
- .4byte _0816FCC4
- .4byte _0816FCF4
-_0816FB6C:
- ldrh r1, [r6, 0x30]
- movs r2, 0x30
- ldrsh r0, [r6, r2]
- cmp r0, 0
- beq _0816FB7C
- subs r0, r1, 0x1
- strh r0, [r6, 0x30]
- b _0816FD38
-_0816FB7C:
- adds r2, r6, 0
- adds r2, 0x3E
- ldrb r0, [r2]
- movs r1, 0x5
- negs r1, r1
- ands r1, r0
- strb r1, [r2]
- adds r0, r6, 0
- movs r1, 0x1
- bl StartSpriteAffineAnim
- b _0816FCE6
-_0816FB94:
- ldr r0, =gUnknown_030062A0
- ldr r0, [r0]
- cmp r0, 0x90
- beq _0816FB9E
- b _0816FD38
-_0816FB9E:
- ldrh r0, [r6, 0x2E]
- adds r0, 0x1
- strh r0, [r6, 0x2E]
- movs r0, 0x9
- strh r0, [r6, 0x30]
- movs r0, 0x2
- strh r0, [r6, 0x34]
- b _0816FD38
- .pool
-_0816FBB4:
- ldrh r1, [r6, 0x34]
- movs r2, 0x34
- ldrsh r0, [r6, r2]
- cmp r0, 0
- bne _0816FC66
- movs r0, 0x2
- strh r0, [r6, 0x34]
- movs r1, 0x30
- ldrsh r0, [r6, r1]
- cmp r0, 0
- beq _0816FC14
- lsls r0, 1
- ldr r4, =gIntro1GameFreakTextFadePal
- adds r0, r4
- ldr r5, =gPlttBufferFaded + 0x23E
- adds r1, r5, 0
- movs r2, 0x1
- bl CpuSet
- movs r1, 0x30
- ldrsh r0, [r6, r1]
- lsls r0, 1
- adds r1, r4, 0
- adds r1, 0x20
- adds r0, r1
- adds r1, r5, 0
- subs r1, 0x16
- movs r2, 0x1
- bl CpuSet
- movs r2, 0x30
- ldrsh r0, [r6, r2]
- lsls r0, 1
- adds r4, 0x40
- adds r0, r4
- subs r5, 0xA
- adds r1, r5, 0
- movs r2, 0x1
- bl CpuSet
- ldrh r0, [r6, 0x30]
- subs r0, 0x1
- strh r0, [r6, 0x30]
- b _0816FD38
- .pool
-_0816FC14:
- movs r1, 0x30
- ldrsh r0, [r6, r1]
- lsls r0, 1
- ldr r4, =gIntro1GameFreakTextFadePal
- adds r0, r4
- ldr r5, =gPlttBufferFaded + 0x23E
- adds r1, r5, 0
- movs r2, 0x1
- bl CpuSet
- movs r2, 0x30
- ldrsh r0, [r6, r2]
- lsls r0, 1
- adds r1, r4, 0
- adds r1, 0x20
- adds r0, r1
- adds r1, r5, 0
- subs r1, 0x16
- movs r2, 0x1
- bl CpuSet
- movs r1, 0x30
- ldrsh r0, [r6, r1]
- lsls r0, 1
- adds r4, 0x40
- adds r0, r4
- subs r5, 0xA
- adds r1, r5, 0
- movs r2, 0x1
- bl CpuSet
- b _0816FCE6
- .pool
-_0816FC5C:
- ldrh r1, [r6, 0x34]
- movs r2, 0x34
- ldrsh r0, [r6, r2]
- cmp r0, 0
- beq _0816FC6C
-_0816FC66:
- subs r0, r1, 0x1
- strh r0, [r6, 0x34]
- b _0816FD38
-_0816FC6C:
- movs r0, 0x2
- strh r0, [r6, 0x34]
- movs r1, 0x30
- ldrsh r0, [r6, r1]
- cmp r0, 0x9
- bgt _0816FCE6
- lsls r0, 1
- ldr r4, =gIntro1GameFreakTextFadePal
- adds r0, r4
- ldr r5, =gPlttBufferFaded + 0x23E
- adds r1, r5, 0
- movs r2, 0x1
- bl CpuSet
- movs r1, 0x30
- ldrsh r0, [r6, r1]
- lsls r0, 1
- adds r1, r4, 0
- adds r1, 0x20
- adds r0, r1
- adds r1, r5, 0
- subs r1, 0x16
- movs r2, 0x1
- bl CpuSet
- movs r2, 0x30
- ldrsh r0, [r6, r2]
- lsls r0, 1
- adds r4, 0x40
- adds r0, r4
- subs r5, 0xA
- adds r1, r5, 0
- movs r2, 0x1
- bl CpuSet
- ldrh r0, [r6, 0x30]
- adds r0, 0x1
- strh r0, [r6, 0x30]
- b _0816FD38
- .pool
-_0816FCC4:
- ldr r0, =gUnknown_030062A0
- ldr r1, [r0]
- movs r0, 0x88
- lsls r0, 1
- cmp r1, r0
- bne _0816FD38
- adds r0, r6, 0
- movs r1, 0x2
- bl StartSpriteAffineAnim
- ldrb r1, [r6, 0x1]
- movs r0, 0xD
- negs r0, r0
- ands r0, r1
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r6, 0x1]
-_0816FCE6:
- ldrh r0, [r6, 0x2E]
- adds r0, 0x1
- strh r0, [r6, 0x2E]
- b _0816FD38
- .pool
-_0816FCF4:
- ldr r1, =gUnknown_085E4F48
- movs r2, 0x32
- ldrsh r0, [r6, r2]
- lsls r0, 1
- adds r0, r1
- ldrh r0, [r0]
- ldrh r1, [r6, 0x34]
- adds r0, r1
- strh r0, [r6, 0x34]
- movs r2, 0x34
- ldrsh r0, [r6, r2]
- movs r1, 0xFF
- lsls r1, 8
- ands r0, r1
- asrs r0, 8
- strh r0, [r6, 0x24]
- movs r1, 0x32
- ldrsh r0, [r6, r1]
- cmp r0, 0x3
- bgt _0816FD24
- movs r2, 0x24
- ldrsh r0, [r6, r2]
- negs r0, r0
- strh r0, [r6, 0x24]
-_0816FD24:
- adds r0, r6, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _0816FD38
- adds r0, r6, 0
- bl DestroySprite
-_0816FD38:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816FB38
-
- thumb_func_start sub_816FD44
-sub_816FD44: @ 816FD44
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- cmp r0, 0x1
- beq _0816FD7C
- cmp r0, 0x1
- bgt _0816FD5A
- cmp r0, 0
- beq _0816FD60
- b _0816FDB0
-_0816FD5A:
- cmp r0, 0x2
- beq _0816FD9C
- b _0816FDB0
-_0816FD60:
- ldr r0, =gUnknown_030062A0
- ldr r0, [r0]
- cmp r0, 0x80
- bne _0816FDB0
- adds r2, r4, 0
- adds r2, 0x3E
- ldrb r0, [r2]
- movs r1, 0x5
- negs r1, r1
- ands r1, r0
- strb r1, [r2]
- b _0816FD90
- .pool
-_0816FD7C:
- ldr r0, =gUnknown_030062A0
- ldr r1, [r0]
- movs r0, 0x88
- lsls r0, 1
- cmp r1, r0
- bne _0816FDB0
- adds r0, r4, 0
- movs r1, 0x3
- bl StartSpriteAffineAnim
-_0816FD90:
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
- b _0816FDB0
- .pool
-_0816FD9C:
- adds r0, r4, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _0816FDB0
- adds r0, r4, 0
- bl DestroySprite
-_0816FDB0:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_816FD44
-
- thumb_func_start sub_816FDB8
-sub_816FDB8: @ 816FDB8
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0xC
- lsls r0, 16
- lsrs r0, 16
- str r0, [sp]
- lsls r1, 16
- lsrs r1, 16
- str r1, [sp, 0x4]
- movs r7, 0
-_0816FDD2:
- lsls r5, r7, 2
- ldr r0, =gUnknown_085E4E94
- adds r0, 0x2
- adds r0, r5, r0
- ldr r2, [sp]
- lsls r1, r2, 16
- asrs r1, 16
- ldrh r0, [r0]
- adds r1, r0
- lsls r1, 16
- asrs r1, 16
- ldr r3, [sp, 0x4]
- lsls r2, r3, 16
- asrs r0, r2, 16
- str r0, [sp, 0x8]
- ldr r3, =0xfffc0000
- adds r2, r3
- ldr r0, =gUnknown_085E4F5C
- asrs r2, 16
- movs r3, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r4, r6, 4
- adds r4, r6
- lsls r4, 2
- ldr r0, =gSprites
- adds r4, r0
- movs r1, 0
- strh r1, [r4, 0x2E]
- ldr r0, =gUnknown_085E4FA4
- adds r0, r7, r0
- ldrb r0, [r0]
- strh r0, [r4, 0x30]
- strh r7, [r4, 0x32]
- adds r1, r4, 0
- adds r1, 0x3E
- ldrb r0, [r1]
- movs r2, 0x4
- mov r10, r2
- mov r3, r10
- orrs r0, r3
- strb r0, [r1]
- adds r1, r7, 0
- adds r1, 0xC
- movs r0, 0x1F
- mov r9, r0
- mov r2, r9
- ands r1, r2
- lsls r1, 1
- ldrb r0, [r4, 0x3]
- movs r3, 0x3F
- negs r3, r3
- mov r8, r3
- mov r2, r8
- ands r0, r2
- orrs r0, r1
- strb r0, [r4, 0x3]
- ldr r3, =gUnknown_085E4E94
- adds r5, r3
- ldrb r1, [r5]
- adds r0, r4, 0
- bl StartSpriteAnim
- adds r0, r4, 0
- movs r1, 0
- bl StartSpriteAffineAnim
- adds r0, r7, 0x1
- lsls r0, 16
- lsrs r7, r0, 16
- cmp r7, 0x8
- bls _0816FDD2
- ldr r0, =gUnknown_085E4F8C
- ldr r2, [sp, 0x8]
- subs r2, 0x6
- lsls r2, 16
- asrs r2, 16
- movs r1, 0x78
- movs r3, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r0, r6, 4
- adds r0, r6
- lsls r0, 2
- ldr r1, =gSprites
- adds r0, r1
- movs r2, 0
- strh r2, [r0, 0x2E]
- adds r2, r0, 0
- adds r2, 0x3E
- ldrb r1, [r2]
- mov r3, r10
- orrs r1, r3
- strb r1, [r2]
- adds r2, r7, 0
- adds r2, 0xC
- mov r1, r9
- ands r2, r1
- lsls r2, 1
- ldrb r1, [r0, 0x3]
- mov r3, r8
- ands r1, r3
- orrs r1, r2
- strb r1, [r0, 0x3]
- movs r1, 0x1
- bl StartSpriteAffineAnim
- adds r0, r6, 0
- add sp, 0xC
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_816FDB8
-
- thumb_func_start sub_816FEDC
-sub_816FEDC: @ 816FEDC
- push {r4-r6,lr}
- sub sp, 0x4
- adds r4, r0, 0
- ldrh r0, [r4, 0x3C]
- adds r0, 0x1
- strh r0, [r4, 0x3C]
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- cmp r0, 0
- beq _0816FF48
- ldr r2, =gSineTable
- ldrh r1, [r4, 0x32]
- lsls r0, r1, 24
- lsrs r0, 23
- adds r0, r2
- ldrh r3, [r0]
- adds r1, 0x40
- lsls r1, 24
- lsrs r1, 23
- adds r1, r2
- movs r2, 0
- ldrsh r0, [r1, r2]
- movs r1, 0x30
- ldrsh r2, [r4, r1]
- adds r1, r0, 0
- muls r1, r2
- adds r0, r1, 0
- cmp r1, 0
- bge _0816FF18
- adds r0, 0xFF
-_0816FF18:
- lsls r0, 8
- lsrs r6, r0, 16
- lsls r0, r3, 16
- asrs r3, r0, 16
- negs r0, r3
- muls r0, r2
- cmp r0, 0
- bge _0816FF2A
- adds r0, 0xFF
-_0816FF2A:
- lsls r0, 8
- lsrs r5, r0, 16
- adds r0, r3, 0
- muls r0, r2
- cmp r0, 0
- bge _0816FF38
- adds r0, 0xFF
-_0816FF38:
- lsls r0, 8
- lsrs r2, r0, 16
- adds r1, r6, 0
- adds r3, r5, 0
- str r1, [sp]
- movs r0, 0x1
- bl SetOamMatrix
-_0816FF48:
- movs r2, 0x2E
- ldrsh r0, [r4, r2]
- cmp r0, 0x1
- beq _0816FF9C
- cmp r0, 0x1
- ble _0816FF58
- cmp r0, 0x2
- beq _0816FFFE
-_0816FF58:
- ldrb r0, [r4, 0x1]
- movs r1, 0x3
- orrs r0, r1
- strb r0, [r4, 0x1]
- ldrb r1, [r4, 0x3]
- movs r0, 0x3F
- negs r0, r0
- ands r0, r1
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r4, 0x3]
- adds r0, r4, 0
- movs r1, 0x1
- movs r2, 0x3
- movs r3, 0x3
- bl CalcCenterToCornerVec
- adds r2, r4, 0
- adds r2, 0x3E
- ldrb r1, [r2]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
- movs r1, 0
- movs r0, 0x1
- strh r0, [r4, 0x2E]
- movs r0, 0x80
- strh r0, [r4, 0x30]
- strh r1, [r4, 0x32]
- strh r1, [r4, 0x34]
- b _08170038
- .pool
-_0816FF9C:
- ldrh r0, [r4, 0x34]
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x8C
- bl Sin
- negs r0, r0
- strh r0, [r4, 0x24]
- ldrh r0, [r4, 0x34]
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x78
- bl Sin
- negs r0, r0
- strh r0, [r4, 0x26]
- ldrh r0, [r4, 0x30]
- adds r0, 0x7
- strh r0, [r4, 0x30]
- ldrh r0, [r4, 0x34]
- adds r0, 0x3
- strh r0, [r4, 0x34]
- movs r1, 0x20
- ldrsh r0, [r4, r1]
- movs r2, 0x24
- ldrsh r1, [r4, r2]
- adds r0, r1
- movs r1, 0x10
- negs r1, r1
- cmp r0, r1
- bgt _08170038
- ldrb r0, [r4, 0x5]
- movs r1, 0xC
- orrs r0, r1
- strb r0, [r4, 0x5]
- ldrh r0, [r4, 0x2E]
- adds r0, 0x1
- strh r0, [r4, 0x2E]
- movs r0, 0x14
- strh r0, [r4, 0x20]
- movs r0, 0x28
- strh r0, [r4, 0x22]
- movs r0, 0x80
- lsls r0, 2
- strh r0, [r4, 0x30]
- movs r0, 0
- strh r0, [r4, 0x32]
- movs r0, 0x10
- b _08170036
-_0816FFFE:
- ldrh r0, [r4, 0x34]
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x22
- bl Sin
- strh r0, [r4, 0x24]
- ldrh r0, [r4, 0x34]
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x3C
- bl Cos
- negs r0, r0
- strh r0, [r4, 0x26]
- ldrh r0, [r4, 0x30]
- adds r0, 0x2
- strh r0, [r4, 0x30]
- movs r1, 0x3C
- ldrsh r0, [r4, r1]
- movs r1, 0x5
- bl __modsi3
- lsls r0, 16
- cmp r0, 0
- bne _08170038
- ldrh r0, [r4, 0x34]
- adds r0, 0x1
-_08170036:
- strh r0, [r4, 0x34]
-_08170038:
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_816FEDC
-
- thumb_func_start sub_8170040
-sub_8170040: @ 8170040
- push {r4,r5,lr}
- sub sp, 0x4
- adds r5, r0, 0
- movs r1, 0x2E
- ldrsh r0, [r5, r1]
- cmp r0, 0
- beq _08170056
- adds r4, r5, 0
- adds r4, 0x3E
- cmp r0, 0x1
- beq _0817008E
-_08170056:
- adds r4, r5, 0
- adds r4, 0x3E
- ldrb r1, [r4]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- strb r0, [r4]
- ldrb r0, [r5, 0x1]
- movs r1, 0x3
- orrs r0, r1
- strb r0, [r5, 0x1]
- ldrb r1, [r5, 0x3]
- movs r0, 0x3F
- negs r0, r0
- ands r0, r1
- movs r1, 0x24
- orrs r0, r1
- strb r0, [r5, 0x3]
- adds r0, r5, 0
- movs r1, 0
- movs r2, 0x3
- movs r3, 0x3
- bl CalcCenterToCornerVec
- movs r0, 0
- strh r0, [r5, 0x30]
- movs r0, 0x1
- strh r0, [r5, 0x2E]
-_0817008E:
- ldrh r0, [r5, 0x3C]
- adds r0, 0x1
- strh r0, [r5, 0x3C]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _081700A6
- ldrb r0, [r4]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r4]
- b _081700BE
-_081700A6:
- ldrb r0, [r4]
- movs r1, 0x5
- negs r1, r1
- ands r1, r0
- strb r1, [r4]
- ldrh r1, [r5, 0x30]
- movs r2, 0x30
- ldrsh r0, [r5, r2]
- cmp r0, 0x3F
- bgt _081700BE
- adds r0, r1, 0x1
- strh r0, [r5, 0x30]
-_081700BE:
- ldr r1, =gSineTable
- ldrh r0, [r5, 0x30]
- lsls r0, 24
- lsrs r0, 23
- adds r0, r1
- movs r1, 0
- ldrsh r0, [r0, r1]
- lsrs r1, r0, 31
- adds r0, r1
- asrs r0, 1
- movs r2, 0x80
- lsls r2, 1
- adds r1, r2, 0
- subs r1, r0
- lsls r1, 16
- lsrs r1, 16
- str r1, [sp]
- movs r0, 0x12
- movs r2, 0
- movs r3, 0
- bl SetOamMatrix
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8170040
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/intro_credits_graphics.s b/asm/intro_credits_graphics.s
deleted file mode 100644
index ad249a470..000000000
--- a/asm/intro_credits_graphics.s
+++ /dev/null
@@ -1,1077 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start load_intro_part2_graphics
-load_intro_part2_graphics: @ 817B064
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, =gUnknown_085F0740
- ldr r1, =0x06004000
- bl LZ77UnCompVram
- ldr r0, =gUnknown_085F0BC0
- ldr r1, =0x06007800
- bl LZ77UnCompVram
- ldr r0, =gUnknown_085F06E0
- movs r1, 0xF0
- movs r2, 0x20
- bl LoadPalette
- cmp r4, 0
- beq _0817B08C
- cmp r4, 0x1
- beq _0817B0EC
-_0817B08C:
- ldr r0, =gUnknown_085F0DBC
- movs r1, 0xC0
- lsls r1, 19
- bl LZ77UnCompVram
- ldr r0, =gUnknown_085F1398
- ldr r1, =0x06003000
- bl LZ77UnCompVram
- ldr r0, =gUnknown_085F0CFC
- movs r1, 0
- movs r2, 0x60
- bl LoadPalette
- ldr r0, =gUnknown_085F5064
- bl LoadCompressedObjectPic
- ldr r0, =gUnknown_085F1668
- movs r1, 0x80
- lsls r1, 1
- movs r2, 0x20
- bl LoadPalette
- bl sub_817B76C
- b _0817B11E
- .pool
-_0817B0EC:
- ldr r0, =gUnknown_085F1824
- movs r1, 0xC0
- lsls r1, 19
- bl LZ77UnCompVram
- ldr r0, =gUnknown_085F1EAC
- ldr r1, =0x06003000
- bl LZ77UnCompVram
- ldr r0, =gUnknown_085F17E4
- movs r1, 0
- movs r2, 0x20
- bl LoadPalette
- ldr r0, =gUnknown_085F50EC
- bl LoadCompressedObjectPic
- ldr r0, =gUnknown_085F21B0
- movs r1, 0x80
- lsls r1, 1
- movs r2, 0x20
- bl LoadPalette
- bl sub_817B788
-_0817B11E:
- ldr r1, =gUnknown_0203BD28
- movs r0, 0
- strh r0, [r1]
- ldr r1, =gReservedSpritePaletteCount
- movs r0, 0x8
- strb r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end load_intro_part2_graphics
-
- thumb_func_start sub_817B150
-sub_817B150: @ 817B150
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0817B162
- cmp r0, 0x1
- ble _0817B162
- cmp r0, 0x2
- beq _0817B194
-_0817B162:
- ldr r1, =0x00000603
- movs r0, 0xE
- bl SetGpuReg
- ldr r1, =0x00000702
- movs r0, 0xC
- bl SetGpuReg
- ldr r1, =0x00000f05
- movs r0, 0xA
- bl SetGpuReg
- movs r1, 0xF2
- lsls r1, 5
- movs r0, 0
- bl SetGpuReg
- b _0817B1B6
- .pool
-_0817B194:
- ldr r1, =0x00000603
- movs r0, 0xE
- bl SetGpuReg
- ldr r1, =0x00000702
- movs r0, 0xC
- bl SetGpuReg
- ldr r1, =0x00000f05
- movs r0, 0xA
- bl SetGpuReg
- movs r1, 0xF2
- lsls r1, 5
- movs r0, 0
- bl SetGpuReg
-_0817B1B6:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_817B150
-
- thumb_func_start sub_817B1C8
-sub_817B1C8: @ 817B1C8
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, =gUnknown_085F0740
- ldr r1, =0x06004000
- bl LZ77UnCompVram
- ldr r0, =gUnknown_085F0BC0
- ldr r1, =0x06007800
- bl LZ77UnCompVram
- cmp r4, 0x4
- bhi _0817B214
- lsls r0, r4, 2
- ldr r1, =_0817B200
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_0817B200:
- .4byte _0817B214
- .4byte _0817B270
- .4byte _0817B2DC
- .4byte _0817B2DC
- .4byte _0817B334
-_0817B214:
- ldr r0, =gUnknown_085F06E0
- movs r1, 0xF0
- movs r2, 0x20
- bl LoadPalette
- ldr r0, =gUnknown_085F0DBC
- movs r1, 0xC0
- lsls r1, 19
- bl LZ77UnCompVram
- ldr r0, =gUnknown_085F1398
- ldr r1, =0x06003000
- bl LZ77UnCompVram
- ldr r0, =gUnknown_085F0CFC
- movs r1, 0
- movs r2, 0x60
- bl LoadPalette
- ldr r0, =gUnknown_085F5064
- bl LoadCompressedObjectPic
- ldr r0, =gUnknown_085F16A8
- ldr r1, =0x06010000
- bl LZ77UnCompVram
- ldr r0, =gUnknown_085F1668
- b _0817B2A6
- .pool
-_0817B270:
- ldr r0, =gUnknown_085F0700
- movs r1, 0xF0
- movs r2, 0x20
- bl LoadPalette
- ldr r0, =gUnknown_085F0DBC
- movs r1, 0xC0
- lsls r1, 19
- bl LZ77UnCompVram
- ldr r0, =gUnknown_085F1398
- ldr r1, =0x06003000
- bl LZ77UnCompVram
- ldr r0, =gUnknown_085F0D5C
- movs r1, 0
- movs r2, 0x60
- bl LoadPalette
- ldr r0, =gUnknown_085F5064
- bl LoadCompressedObjectPic
- ldr r0, =gUnknown_085F16A8
- ldr r1, =0x06010000
- bl LZ77UnCompVram
- ldr r0, =gUnknown_085F1688
-_0817B2A6:
- movs r1, 0x80
- lsls r1, 1
- movs r2, 0x20
- bl LoadPalette
- bl sub_817B76C
- b _0817B370
- .pool
-_0817B2DC:
- ldr r0, =gUnknown_085F0700
- movs r1, 0xF0
- movs r2, 0x20
- bl LoadPalette
- ldr r0, =gUnknown_085F1824
- movs r1, 0xC0
- lsls r1, 19
- bl LZ77UnCompVram
- ldr r0, =gUnknown_085F1EAC
- ldr r1, =0x06003000
- bl LZ77UnCompVram
- ldr r4, =gUnknown_085F1804
- adds r0, r4, 0
- movs r1, 0
- movs r2, 0x20
- bl LoadPalette
- ldr r0, =gUnknown_085F50EC
- bl LoadCompressedObjectPic
- movs r1, 0x80
- lsls r1, 1
- adds r0, r4, 0
- movs r2, 0x20
- bl LoadPalette
- bl sub_817B788
- b _0817B370
- .pool
-_0817B334:
- ldr r0, =gUnknown_085F0720
- movs r1, 0xF0
- movs r2, 0x20
- bl LoadPalette
- ldr r0, =gUnknown_085F235C
- movs r1, 0xC0
- lsls r1, 19
- bl LZ77UnCompVram
- ldr r0, =gUnknown_085F2568
- ldr r1, =0x06003000
- bl LZ77UnCompVram
- ldr r0, =gUnknown_085F231C
- movs r1, 0
- movs r2, 0x40
- bl LoadPalette
- ldr r0, =gUnknown_085F5180
- bl LoadCompressedObjectPic
- ldr r0, =gUnknown_085F2548
- movs r1, 0x80
- lsls r1, 1
- movs r2, 0x20
- bl LoadPalette
- bl sub_817B7A4
-_0817B370:
- ldr r1, =gReservedSpritePaletteCount
- movs r0, 0x8
- strb r0, [r1]
- ldr r1, =gUnknown_0203BD28
- movs r0, 0
- strh r0, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_817B1C8
-
- thumb_func_start sub_817B3A8
-sub_817B3A8: @ 817B3A8
- push {lr}
- ldr r1, =0x00000603
- movs r0, 0xE
- bl SetGpuReg
- ldr r1, =0x00000702
- movs r0, 0xC
- bl SetGpuReg
- ldr r1, =0x00000f05
- movs r0, 0xA
- bl SetGpuReg
- movs r1, 0xFA
- lsls r1, 5
- movs r0, 0
- bl SetGpuReg
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_817B3A8
-
- thumb_func_start sub_817B3DC
-sub_817B3DC: @ 817B3DC
- push {r4-r6,lr}
- mov r6, r9
- mov r5, r8
- push {r5,r6}
- sub sp, 0x4
- adds r5, r0, 0
- adds r6, r1, 0
- mov r8, r2
- lsls r5, 24
- lsrs r5, 24
- lsls r6, 16
- lsrs r6, 16
- mov r0, r8
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- lsls r3, 16
- lsrs r3, 16
- ldr r1, =sub_817B458
- mov r9, r1
- mov r0, r9
- movs r1, 0
- str r3, [sp]
- bl CreateTask
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r1, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- movs r2, 0
- strh r5, [r0, 0x8]
- strh r6, [r0, 0xA]
- strh r2, [r0, 0xC]
- strh r2, [r0, 0xE]
- mov r1, r8
- strh r1, [r0, 0x10]
- strh r2, [r0, 0x12]
- strh r2, [r0, 0x14]
- ldr r3, [sp]
- strh r3, [r0, 0x16]
- movs r1, 0x8
- strh r1, [r0, 0x18]
- strh r2, [r0, 0x1A]
- adds r0, r4, 0
- bl _call_via_r9
- adds r0, r4, 0
- add sp, 0x4
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r6}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_817B3DC
-
- thumb_func_start sub_817B458
-sub_817B458: @ 817B458
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r1, =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r4, r0, r1
- ldrh r0, [r4, 0xA]
- lsls r2, r0, 16
- cmp r2, 0
- beq _0817B4A0
- movs r1, 0xC
- ldrsh r0, [r4, r1]
- lsls r0, 16
- ldrh r1, [r4, 0xE]
- adds r1, r0, r1
- lsrs r0, r2, 12
- subs r1, r0
- asrs r0, r1, 16
- strh r0, [r4, 0xC]
- strh r1, [r4, 0xE]
- ldrh r1, [r4, 0xC]
- movs r0, 0x14
- bl SetGpuReg
- ldr r2, =gUnknown_0203BD24
- ldr r0, =gUnknown_0203BD26
- ldrh r1, [r0]
- ldrh r2, [r2]
- adds r1, r2
- lsls r1, 16
- lsrs r1, 16
- movs r0, 0x16
- bl SetGpuReg
-_0817B4A0:
- ldrh r0, [r4, 0x10]
- lsls r2, r0, 16
- cmp r2, 0
- beq _0817B4FA
- movs r1, 0x12
- ldrsh r0, [r4, r1]
- lsls r0, 16
- ldrh r1, [r4, 0x14]
- adds r1, r0, r1
- lsrs r0, r2, 12
- subs r1, r0
- asrs r0, r1, 16
- strh r0, [r4, 0x12]
- strh r1, [r4, 0x14]
- ldrh r1, [r4, 0x12]
- movs r0, 0x18
- bl SetGpuReg
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- cmp r0, 0
- beq _0817B4F0
- ldr r2, =gUnknown_0203BD24
- ldr r0, =gUnknown_0203BD26
- ldrh r1, [r0]
- ldrh r2, [r2]
- adds r1, r2
- lsls r1, 16
- lsrs r1, 16
- movs r0, 0x1A
- bl SetGpuReg
- b _0817B4FA
- .pool
-_0817B4F0:
- ldr r0, =gUnknown_0203BD24
- ldrh r1, [r0]
- movs r0, 0x1A
- bl SetGpuReg
-_0817B4FA:
- ldr r0, =gTasks
- lsls r1, r5, 2
- adds r1, r5
- lsls r1, 3
- adds r2, r1, r0
- ldrh r0, [r2, 0x16]
- lsls r3, r0, 16
- cmp r3, 0
- beq _0817B532
- movs r1, 0x18
- ldrsh r0, [r2, r1]
- lsls r0, 16
- ldrh r1, [r2, 0x1A]
- adds r1, r0, r1
- lsrs r0, r3, 12
- subs r1, r0
- asrs r0, r1, 16
- strh r0, [r2, 0x18]
- strh r1, [r2, 0x1A]
- ldrh r1, [r2, 0x18]
- movs r0, 0x1C
- bl SetGpuReg
- ldr r0, =gUnknown_0203BD24
- ldrh r1, [r0]
- movs r0, 0x1E
- bl SetGpuReg
-_0817B532:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_817B458
-
- thumb_func_start sub_817B540
-sub_817B540: @ 817B540
- push {r4,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0817B620
- cmp r0, 0x1
- ble _0817B554
- cmp r0, 0x2
- beq _0817B5B8
-_0817B554:
- ldr r0, =gMain
- ldr r2, [r0, 0x20]
- movs r0, 0x3
- ands r0, r2
- cmp r0, 0
- bne _0817B620
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0817B620
- movs r0, 0x4
- ands r2, r0
- cmp r2, 0
- beq _0817B58C
- ldr r2, =gPlttBufferUnfaded
- ldrh r1, [r2, 0x12]
- mov r0, sp
- strh r1, [r0]
- ldrh r1, [r2, 0x14]
- b _0817B596
- .pool
-_0817B58C:
- ldr r2, =gPlttBufferUnfaded
- ldrh r1, [r2, 0x14]
- mov r0, sp
- strh r1, [r0]
- ldrh r1, [r2, 0x12]
-_0817B596:
- adds r0, 0x2
- strh r1, [r0]
- adds r4, r0, 0
- mov r0, sp
- movs r1, 0x9
- movs r2, 0x2
- bl LoadPalette
- adds r0, r4, 0
- movs r1, 0xA
- movs r2, 0x2
- bl LoadPalette
- b _0817B620
- .pool
-_0817B5B8:
- ldr r0, =gMain
- ldr r2, [r0, 0x20]
- movs r0, 0x3
- ands r0, r2
- cmp r0, 0
- bne _0817B620
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0817B620
- movs r0, 0x4
- ands r2, r0
- cmp r2, 0
- beq _0817B5F8
- mov r1, sp
- ldr r2, =0x00003d27
- adds r0, r2, 0
- strh r0, [r1]
- adds r1, 0x2
- ldr r2, =0x00000295
- b _0817B606
- .pool
-_0817B5F8:
- mov r1, sp
- movs r2, 0xC7
- lsls r2, 2
- adds r0, r2, 0
- strh r0, [r1]
- adds r1, 0x2
- ldr r2, =0x00003d27
-_0817B606:
- adds r0, r2, 0
- strh r0, [r1]
- adds r4, r1, 0
- mov r0, sp
- movs r1, 0xC
- movs r2, 0x2
- bl LoadPalette
- adds r0, r4, 0
- movs r1, 0xD
- movs r2, 0x2
- bl LoadPalette
-_0817B620:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_817B540
-
- thumb_func_start sub_817B62C
-sub_817B62C: @ 817B62C
- push {lr}
- adds r2, r0, 0
- ldr r0, =gUnknown_0203BD28
- movs r1, 0
- ldrsh r0, [r0, r1]
- cmp r0, 0x2
- beq _0817B690
- cmp r0, 0
- beq _0817B64C
- adds r0, r2, 0
- bl DestroySprite
- b _0817B690
- .pool
-_0817B64C:
- movs r1, 0x20
- ldrsh r0, [r2, r1]
- lsls r0, 16
- ldrh r1, [r2, 0x32]
- orrs r0, r1
- ldrh r1, [r2, 0x30]
- adds r0, r1
- asrs r1, r0, 16
- strh r1, [r2, 0x20]
- strh r0, [r2, 0x32]
- cmp r1, 0xFF
- ble _0817B668
- ldr r0, =0x0000ffe0
- strh r0, [r2, 0x20]
-_0817B668:
- movs r1, 0x2E
- ldrsh r0, [r2, r1]
- cmp r0, 0
- beq _0817B688
- ldr r1, =gUnknown_0203BD24
- ldr r0, =gUnknown_0203BD26
- ldrh r0, [r0]
- ldrh r1, [r1]
- adds r0, r1
- b _0817B68C
- .pool
-_0817B688:
- ldr r0, =gUnknown_0203BD24
- ldrh r0, [r0]
-_0817B68C:
- negs r0, r0
- strh r0, [r2, 0x26]
-_0817B690:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_817B62C
-
- thumb_func_start sub_817B698
-sub_817B698: @ 817B698
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0xC
- str r1, [sp, 0x4]
- str r2, [sp, 0x8]
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp]
- lsls r3, 24
- lsrs r3, 24
- mov r8, r3
- movs r7, 0
- cmp r7, r8
- bcs _0817B74E
- ldr r0, =gSprites
- mov r10, r0
- movs r2, 0x3F
- mov r9, r2
-_0817B6C2:
- lsls r6, r7, 3
- ldr r0, [sp, 0x4]
- adds r6, r0
- ldrb r1, [r6, 0x1]
- ldrb r2, [r6, 0x2]
- ldrb r3, [r6, 0x3]
- ldr r0, =gUnknown_085F504C
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- lsls r5, r0, 4
- adds r5, r0
- lsls r5, 2
- mov r2, r10
- adds r4, r5, r2
- ldrb r2, [r6]
- lsls r1, r2, 26
- lsrs r1, 30
- lsrs r2, 6
- adds r0, r4, 0
- movs r3, 0
- bl CalcCenterToCornerVec
- ldrb r3, [r4, 0x5]
- movs r0, 0xC
- orrs r3, r0
- strb r3, [r4, 0x5]
- ldrb r1, [r6]
- lsls r1, 26
- lsrs r1, 30
- lsls r1, 6
- ldrb r2, [r4, 0x1]
- mov r0, r9
- ands r0, r2
- orrs r0, r1
- strb r0, [r4, 0x1]
- ldrb r1, [r6]
- lsrs r1, 6
- lsls r1, 6
- ldrb r2, [r4, 0x3]
- mov r0, r9
- ands r0, r2
- orrs r0, r1
- strb r0, [r4, 0x3]
- movs r0, 0xF
- ands r3, r0
- strb r3, [r4, 0x5]
- ldr r0, =gSprites + 8
- adds r5, r0
- ldr r2, [sp, 0x8]
- str r2, [r5]
- ldrb r1, [r6]
- lsls r1, 28
- lsrs r1, 28
- adds r0, r4, 0
- bl StartSpriteAnim
- movs r1, 0
- mov r0, sp
- ldrh r0, [r0]
- strh r0, [r4, 0x2E]
- ldrh r0, [r6, 0x4]
- strh r0, [r4, 0x30]
- strh r1, [r4, 0x32]
- adds r0, r7, 0x1
- lsls r0, 24
- lsrs r7, r0, 24
- cmp r7, r8
- bcc _0817B6C2
-_0817B74E:
- add sp, 0xC
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_817B698
-
- thumb_func_start sub_817B76C
-sub_817B76C: @ 817B76C
- push {lr}
- ldr r1, =gUnknown_085F50A4
- ldr r2, =gUnknown_085F5094
- movs r0, 0
- movs r3, 0x9
- bl sub_817B698
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_817B76C
-
- thumb_func_start sub_817B788
-sub_817B788: @ 817B788
- push {lr}
- ldr r1, =gUnknown_085F5120
- ldr r2, =gUnknown_085F5114
- movs r0, 0x1
- movs r3, 0xC
- bl sub_817B698
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_817B788
-
- thumb_func_start sub_817B7A4
-sub_817B7A4: @ 817B7A4
- push {lr}
- ldr r1, =gUnknown_085F519C
- ldr r2, =gUnknown_085F5198
- movs r0, 0x1
- movs r3, 0x6
- bl sub_817B698
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_817B7A4
-
- thumb_func_start nullsub_65
-nullsub_65: @ 817B7C0
- bx lr
- thumb_func_end nullsub_65
-
- thumb_func_start sub_817B7C4
-sub_817B7C4: @ 817B7C4
- push {r4,lr}
- ldr r4, =gSprites
- movs r1, 0x2E
- ldrsh r2, [r0, r1]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r4
- adds r1, 0x3E
- ldrb r1, [r1]
- movs r2, 0x3E
- adds r2, r0
- mov r12, r2
- movs r2, 0x4
- ands r2, r1
- mov r1, r12
- ldrb r3, [r1]
- movs r1, 0x5
- negs r1, r1
- ands r1, r3
- orrs r1, r2
- mov r2, r12
- strb r1, [r2]
- movs r1, 0x2E
- ldrsh r2, [r0, r1]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r4
- ldrh r1, [r1, 0x20]
- strh r1, [r0, 0x20]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r4
- ldrh r1, [r1, 0x22]
- adds r1, 0x8
- strh r1, [r0, 0x22]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r4
- ldrh r1, [r1, 0x24]
- strh r1, [r0, 0x24]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r4
- ldrh r1, [r1, 0x26]
- strh r1, [r0, 0x26]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_817B7C4
-
- thumb_func_start sub_817B834
-sub_817B834: @ 817B834
- push {r4-r6,lr}
- adds r5, r0, 0
- adds r4, r1, 0
- ldr r0, =gUnknown_085F51EC
- lsls r5, 16
- asrs r5, 16
- lsls r4, 16
- asrs r4, 16
- adds r1, r5, 0
- adds r2, r4, 0
- movs r3, 0x2
- bl CreateSprite
- adds r6, r0, 0
- lsls r6, 24
- lsrs r6, 24
- ldr r0, =gUnknown_085F523C
- adds r4, 0x8
- lsls r4, 16
- asrs r4, 16
- adds r1, r5, 0
- adds r2, r4, 0
- movs r3, 0x3
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gSprites
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- strh r6, [r1, 0x2E]
- adds r0, r6, 0
- pop {r4-r6}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_817B834
-
- thumb_func_start sub_817B88C
-sub_817B88C: @ 817B88C
- push {r4-r6,lr}
- adds r5, r0, 0
- adds r4, r1, 0
- ldr r0, =gUnknown_085F5204
- lsls r5, 16
- asrs r5, 16
- lsls r4, 16
- asrs r4, 16
- adds r1, r5, 0
- adds r2, r4, 0
- movs r3, 0x2
- bl CreateSprite
- adds r6, r0, 0
- lsls r6, 24
- lsrs r6, 24
- ldr r0, =gUnknown_085F5254
- adds r4, 0x8
- lsls r4, 16
- asrs r4, 16
- adds r1, r5, 0
- adds r2, r4, 0
- movs r3, 0x3
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gSprites
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- strh r6, [r1, 0x2E]
- adds r0, r6, 0
- pop {r4-r6}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_817B88C
-
- thumb_func_start nullsub_66
-nullsub_66: @ 817B8E4
- bx lr
- thumb_func_end nullsub_66
-
- thumb_func_start sub_817B8E8
-sub_817B8E8: @ 817B8E8
- push {r4,lr}
- ldr r4, =gSprites
- movs r1, 0x2E
- ldrsh r2, [r0, r1]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r4
- adds r1, 0x3E
- ldrb r1, [r1]
- movs r2, 0x3E
- adds r2, r0
- mov r12, r2
- movs r2, 0x4
- ands r2, r1
- mov r1, r12
- ldrb r3, [r1]
- movs r1, 0x5
- negs r1, r1
- ands r1, r3
- orrs r1, r2
- mov r2, r12
- strb r1, [r2]
- movs r1, 0x2E
- ldrsh r2, [r0, r1]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r4
- ldrh r1, [r1, 0x22]
- strh r1, [r0, 0x22]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r4
- ldrh r1, [r1, 0x24]
- strh r1, [r0, 0x24]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r4
- ldrh r1, [r1, 0x26]
- strh r1, [r0, 0x26]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_817B8E8
-
- thumb_func_start sub_817B948
-sub_817B948: @ 817B948
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- adds r2, r0, 0
- adds r5, r1, 0
- ldr r0, =gUnknown_085F528C
- mov r8, r0
- lsls r2, 16
- asrs r4, r2, 16
- ldr r0, =0xffe00000
- adds r2, r0
- asrs r2, 16
- lsls r5, 16
- asrs r5, 16
- mov r0, r8
- adds r1, r2, 0
- adds r2, r5, 0
- movs r3, 0x5
- bl CreateSprite
- adds r6, r0, 0
- lsls r6, 24
- lsrs r6, 24
- adds r4, 0x20
- lsls r4, 16
- asrs r4, 16
- mov r0, r8
- adds r1, r4, 0
- adds r2, r5, 0
- movs r3, 0x6
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- ldr r5, =gSprites
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- adds r0, r4, r5
- strh r6, [r0, 0x2E]
- movs r1, 0x1
- bl StartSpriteAnim
- adds r5, 0x1C
- adds r4, r5
- ldr r0, =sub_817B8E8
- str r0, [r4]
- adds r0, r6, 0
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_817B948
-
- thumb_func_start sub_817B9C4
-sub_817B9C4: @ 817B9C4
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- adds r2, r0, 0
- adds r5, r1, 0
- ldr r0, =gUnknown_085F52A4
- mov r8, r0
- lsls r2, 16
- asrs r4, r2, 16
- ldr r0, =0xffe00000
- adds r2, r0
- asrs r2, 16
- lsls r5, 16
- asrs r5, 16
- mov r0, r8
- adds r1, r2, 0
- adds r2, r5, 0
- movs r3, 0x5
- bl CreateSprite
- adds r6, r0, 0
- lsls r6, 24
- lsrs r6, 24
- adds r4, 0x20
- lsls r4, 16
- asrs r4, 16
- mov r0, r8
- adds r1, r4, 0
- adds r2, r5, 0
- movs r3, 0x6
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- ldr r5, =gSprites
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- adds r0, r4, r5
- strh r6, [r0, 0x2E]
- movs r1, 0x1
- bl StartSpriteAnim
- adds r5, 0x1C
- adds r4, r5
- ldr r0, =sub_817B8E8
- str r0, [r4]
- adds r0, r6, 0
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_817B9C4
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/item.s b/asm/item.s
deleted file mode 100644
index 89177c5d4..000000000
--- a/asm/item.s
+++ /dev/null
@@ -1,1921 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
-
- thumb_func_start CheckBagHasSpace
-CheckBagHasSpace: @ 80D6800
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- lsls r1, 16
- lsrs r5, r1, 16
- bl ItemId_GetPocket
- lsls r0, 24
- cmp r0, 0
- beq _080D6906
- bl InBattlePyramid
- lsls r0, 24
- cmp r0, 0
- bne _080D6838
- ldr r0, =0x00004004
- bl FlagGet
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080D684C
-_080D6838:
- mov r0, r8
- adds r1, r5, 0
- bl CheckPyramidBagHasSpace
- lsls r0, 24
- lsrs r0, 24
- b _080D6916
- .pool
-_080D684C:
- mov r0, r8
- bl ItemId_GetPocket
- subs r0, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r7, =0x000003e7
- cmp r2, 0x3
- beq _080D6860
- movs r7, 0x63
-_080D6860:
- movs r6, 0
- ldr r1, =gBagPockets
- lsls r4, r2, 3
- adds r0, r4, r1
- mov r9, r4
- ldrb r0, [r0, 0x4]
- cmp r6, r0
- bcs _080D68BC
- subs r0, r2, 0x2
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
-_080D6878:
- adds r0, r4, r1
- ldr r1, [r0]
- lsls r0, r6, 2
- adds r1, r0, r1
- ldrh r0, [r1]
- cmp r0, r8
- bne _080D68AC
- adds r0, r1, 0x2
- str r2, [sp]
- bl GetBagItemQuantity
- lsls r0, 16
- lsrs r1, r0, 16
- adds r0, r1, r5
- ldr r2, [sp]
- cmp r0, r7
- ble _080D6914
- mov r0, r10
- cmp r0, 0x1
- bls _080D6906
- subs r0, r7, r1
- subs r0, r5, r0
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, 0
- beq _080D6914
-_080D68AC:
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r1, =gBagPockets
- adds r0, r4, r1
- ldrb r0, [r0, 0x4]
- cmp r6, r0
- bcc _080D6878
-_080D68BC:
- cmp r5, 0
- beq _080D6914
- movs r6, 0
- ldr r3, =gBagPockets
- mov r1, r9
- adds r0, r1, r3
- ldrb r0, [r0, 0x4]
- cmp r6, r0
- bcs _080D6902
- adds r4, r3, 0
- subs r0, r2, 0x2
- lsls r0, 24
- lsrs r2, r0, 24
-_080D68D6:
- adds r0, r1, r4
- ldr r1, [r0]
- lsls r0, r6, 2
- adds r0, r1
- ldrh r0, [r0]
- cmp r0, 0
- bne _080D68F2
- cmp r5, r7
- bls _080D6914
- cmp r2, 0x1
- bls _080D6906
- subs r0, r5, r7
- lsls r0, 16
- lsrs r5, r0, 16
-_080D68F2:
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- mov r1, r9
- adds r0, r1, r3
- ldrb r0, [r0, 0x4]
- cmp r6, r0
- bcc _080D68D6
-_080D6902:
- cmp r5, 0
- beq _080D6914
-_080D6906:
- movs r0, 0
- b _080D6916
- .pool
-_080D6914:
- movs r0, 0x1
-_080D6916:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end CheckBagHasSpace
-
- thumb_func_start AddBagItem
-@ int AddBagItem(int item_id, int quantity)
-AddBagItem: @ 80D6928
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- lsls r0, 16
- lsrs r0, 16
- mov r9, r0
- lsls r1, 16
- lsrs r5, r1, 16
- bl ItemId_GetPocket
- lsls r0, 24
- cmp r0, 0
- bne _080D694C
- movs r0, 0
- b _080D6A92
-_080D694C:
- bl InBattlePyramid
- lsls r0, 24
- cmp r0, 0
- bne _080D6964
- ldr r0, =0x00004004
- bl FlagGet
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080D6978
-_080D6964:
- mov r0, r9
- adds r1, r5, 0
- bl AddPyramidBagItem
- lsls r0, 24
- lsrs r0, 24
- b _080D6A92
- .pool
-_080D6978:
- mov r0, r9
- bl ItemId_GetPocket
- subs r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
- lsls r1, r0, 3
- ldr r0, =gBagPockets
- adds r7, r1, r0
- ldrb r0, [r7, 0x4]
- lsls r0, 2
- bl AllocZeroed
- mov r8, r0
- ldr r1, [r7]
- ldrb r2, [r7, 0x4]
- lsls r2, 2
- bl memcpy
- ldr r2, =0x000003e7
- mov r0, r10
- cmp r0, 0x3
- beq _080D69AA
- movs r2, 0x63
-_080D69AA:
- movs r6, 0
- ldrb r0, [r7, 0x4]
- cmp r6, r0
- bcs _080D6A06
- mov r0, r10
- subs r0, 0x2
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp]
-_080D69BC:
- lsls r0, r6, 2
- mov r3, r8
- adds r1, r0, r3
- ldrh r0, [r1]
- cmp r0, r9
- bne _080D69FA
- adds r4, r1, 0x2
- adds r0, r4, 0
- str r2, [sp, 0x4]
- bl GetBagItemQuantity
- lsls r0, 16
- lsrs r0, 16
- adds r1, r0, r5
- ldr r2, [sp, 0x4]
- cmp r1, r2
- ble _080D6A68
- ldr r1, [sp]
- cmp r1, 0x1
- bls _080D6A74
- subs r0, r2, r0
- subs r0, r5, r0
- lsls r0, 16
- lsrs r5, r0, 16
- adds r0, r4, 0
- adds r1, r2, 0
- bl SetBagItemQuantity
- ldr r2, [sp, 0x4]
- cmp r5, 0
- beq _080D6A7E
-_080D69FA:
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- ldrb r0, [r7, 0x4]
- cmp r6, r0
- bcc _080D69BC
-_080D6A06:
- cmp r5, 0
- beq _080D6A7E
- movs r6, 0
- cmp r6, r0
- bcs _080D6A62
- mov r0, r10
- subs r0, 0x2
- lsls r0, 24
- lsrs r4, r0, 24
-_080D6A18:
- lsls r0, r6, 2
- mov r3, r8
- adds r1, r0, r3
- ldrh r0, [r1]
- cmp r0, 0
- bne _080D6A56
- mov r0, r9
- strh r0, [r1]
- cmp r5, r2
- bhi _080D6A40
- adds r0, r1, 0x2
- adds r1, r5, 0
- bl SetBagItemQuantity
- b _080D6A7E
- .pool
-_080D6A40:
- cmp r4, 0x1
- bls _080D6A74
- subs r0, r5, r2
- lsls r0, 16
- lsrs r5, r0, 16
- adds r0, r1, 0x2
- adds r1, r2, 0
- str r2, [sp, 0x4]
- bl SetBagItemQuantity
- ldr r2, [sp, 0x4]
-_080D6A56:
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- ldrb r1, [r7, 0x4]
- cmp r6, r1
- bcc _080D6A18
-_080D6A62:
- cmp r5, 0
- beq _080D6A7E
- b _080D6A74
-_080D6A68:
- lsls r1, 16
- lsrs r1, 16
- adds r0, r4, 0
- bl SetBagItemQuantity
- b _080D6A7E
-_080D6A74:
- mov r0, r8
- bl Free
- movs r0, 0
- b _080D6A92
-_080D6A7E:
- ldr r0, [r7]
- ldrb r2, [r7, 0x4]
- lsls r2, 2
- mov r1, r8
- bl memcpy
- mov r0, r8
- bl Free
- movs r0, 0x1
-_080D6A92:
- 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 AddBagItem
-
- thumb_func_start RemoveBagItem
-@ pokescrcmd
-RemoveBagItem: @ 80D6AA4
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- lsls r1, 16
- lsrs r7, r1, 16
- movs r4, 0
- bl ItemId_GetPocket
- lsls r0, 24
- cmp r0, 0
- beq _080D6B38
- mov r0, r8
- cmp r0, 0
- beq _080D6B38
- bl InBattlePyramid
- lsls r0, 24
- cmp r0, 0
- bne _080D6AE0
- ldr r0, =0x00004004
- bl FlagGet
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080D6AF4
-_080D6AE0:
- mov r0, r8
- adds r1, r7, 0
- bl RemovePyramidBagItem
- lsls r0, 24
- lsrs r0, 24
- b _080D6C5A
- .pool
-_080D6AF4:
- mov r0, r8
- bl ItemId_GetPocket
- subs r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- lsls r1, r0, 3
- ldr r0, =gBagPockets
- adds r5, r1, r0
- movs r6, 0
- ldrb r2, [r5, 0x4]
- cmp r6, r2
- bcs _080D6B34
-_080D6B10:
- ldr r0, [r5]
- lsls r1, r6, 2
- adds r1, r0
- ldrh r0, [r1]
- cmp r0, r8
- bne _080D6B28
- adds r0, r1, 0x2
- bl GetBagItemQuantity
- adds r0, r4, r0
- lsls r0, 16
- lsrs r4, r0, 16
-_080D6B28:
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- ldrb r0, [r5, 0x4]
- cmp r6, r0
- bcc _080D6B10
-_080D6B34:
- cmp r4, r7
- bcs _080D6B40
-_080D6B38:
- movs r0, 0
- b _080D6C5A
- .pool
-_080D6B40:
- bl CurrentMapIsSecretBase
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080D6B70
- ldr r4, =0x000040ee
- adds r0, r4, 0
- bl VarGet
- adds r1, r0, 0
- movs r2, 0x80
- lsls r2, 2
- adds r0, r2, 0
- orrs r1, r0
- lsls r1, 16
- lsrs r1, 16
- adds r0, r4, 0
- bl VarSet
- ldr r0, =0x000040ed
- mov r1, r8
- bl VarSet
-_080D6B70:
- mov r0, r9
- bl sub_81ABB2C
- lsls r0, 24
- lsrs r1, r0, 24
- ldrb r0, [r5, 0x4]
- cmp r0, r1
- bls _080D6BE6
- ldr r0, [r5]
- lsls r1, 2
- adds r2, r1, r0
- ldrh r0, [r2]
- adds r4, r1, 0
- cmp r0, r8
- bne _080D6BE6
- adds r0, r2, 0x2
- bl GetBagItemQuantity
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, r7
- bcc _080D6BB8
- ldr r0, [r5]
- adds r0, r4
- adds r0, 0x2
- subs r1, r7
- lsls r1, 16
- lsrs r1, 16
- bl SetBagItemQuantity
- movs r7, 0
- b _080D6BCA
- .pool
-_080D6BB8:
- subs r0, r7, r1
- lsls r0, 16
- lsrs r7, r0, 16
- ldr r0, [r5]
- adds r0, r4
- adds r0, 0x2
- movs r1, 0
- bl SetBagItemQuantity
-_080D6BCA:
- ldr r0, [r5]
- adds r0, r4
- adds r0, 0x2
- bl GetBagItemQuantity
- lsls r0, 16
- lsrs r2, r0, 16
- cmp r2, 0
- bne _080D6BE2
- ldr r0, [r5]
- adds r0, r4, r0
- strh r2, [r0]
-_080D6BE2:
- cmp r7, 0
- beq _080D6C58
-_080D6BE6:
- movs r6, 0
- ldrb r0, [r5, 0x4]
- cmp r6, r0
- bcs _080D6C58
-_080D6BEE:
- ldr r0, [r5]
- lsls r1, r6, 2
- adds r2, r1, r0
- ldrh r0, [r2]
- adds r4, r1, 0
- cmp r0, r8
- bne _080D6C4C
- adds r0, r2, 0x2
- bl GetBagItemQuantity
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, r7
- bcc _080D6C1E
- ldr r0, [r5]
- adds r0, r4
- adds r0, 0x2
- subs r1, r7
- lsls r1, 16
- lsrs r1, 16
- bl SetBagItemQuantity
- movs r7, 0
- b _080D6C30
-_080D6C1E:
- subs r0, r7, r1
- lsls r0, 16
- lsrs r7, r0, 16
- ldr r0, [r5]
- adds r0, r4
- adds r0, 0x2
- movs r1, 0
- bl SetBagItemQuantity
-_080D6C30:
- ldr r0, [r5]
- adds r0, r4
- adds r0, 0x2
- bl GetBagItemQuantity
- lsls r0, 16
- lsrs r2, r0, 16
- cmp r2, 0
- bne _080D6C48
- ldr r0, [r5]
- adds r0, r4, r0
- strh r2, [r0]
-_080D6C48:
- cmp r7, 0
- beq _080D6C58
-_080D6C4C:
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- ldrb r2, [r5, 0x4]
- cmp r6, r2
- bcc _080D6BEE
-_080D6C58:
- movs r0, 0x1
-_080D6C5A:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end RemoveBagItem
-
- thumb_func_start GetPocketByItemId
-GetPocketByItemId: @ 80D6C68
- push {lr}
- lsls r0, 16
- lsrs r0, 16
- bl ItemId_GetPocket
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- thumb_func_end GetPocketByItemId
-
- thumb_func_start ClearItemSlots
-ClearItemSlots: @ 80D6C7C
- push {r4-r7,lr}
- adds r6, r0, 0
- lsls r1, 24
- movs r4, 0
- lsrs r1, 24
- cmp r4, r1
- bcs _080D6CA6
- adds r5, r1, 0
- movs r7, 0
-_080D6C8E:
- lsls r0, r4, 2
- adds r0, r6
- strh r7, [r0]
- adds r0, 0x2
- movs r1, 0
- bl SetBagItemQuantity
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, r5
- bcc _080D6C8E
-_080D6CA6:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end ClearItemSlots
-
- thumb_func_start sub_80D6CAC
-sub_80D6CAC: @ 80D6CAC
- push {lr}
- movs r1, 0
- ldr r0, =gSaveBlock1Ptr
- ldr r2, [r0]
- movs r3, 0x93
- lsls r3, 3
-_080D6CB8:
- lsls r0, r1, 24
- asrs r1, r0, 24
- lsls r0, r1, 2
- adds r0, r2, r0
- adds r0, r3
- ldrh r0, [r0]
- cmp r0, 0
- bne _080D6CD0
- adds r0, r1, 0
- b _080D6CE0
- .pool
-_080D6CD0:
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r1, r0, 24
- asrs r0, 24
- cmp r0, 0x31
- ble _080D6CB8
- movs r0, 0x1
- negs r0, r0
-_080D6CE0:
- pop {r1}
- bx r1
- thumb_func_end sub_80D6CAC
-
- thumb_func_start sub_80D6CE4
-sub_80D6CE4: @ 80D6CE4
- push {r4,lr}
- movs r2, 0
- movs r1, 0
- ldr r0, =gSaveBlock1Ptr
- ldr r3, [r0]
- movs r4, 0x93
- lsls r4, 3
-_080D6CF2:
- lsls r0, r1, 2
- adds r0, r3, r0
- adds r0, r4
- ldrh r0, [r0]
- cmp r0, 0
- beq _080D6D04
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
-_080D6D04:
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x31
- bls _080D6CF2
- adds r0, r2, 0
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80D6CE4
-
- thumb_func_start CheckPCHasItem
-CheckPCHasItem: @ 80D6D1C
- push {r4-r6,lr}
- lsls r0, 16
- lsrs r6, r0, 16
- lsls r1, 16
- lsrs r5, r1, 16
- movs r4, 0
-_080D6D28:
- ldr r0, =gSaveBlock1Ptr
- ldr r2, [r0]
- lsls r1, r4, 2
- adds r0, r2, r1
- movs r3, 0x93
- lsls r3, 3
- adds r0, r3
- ldrh r0, [r0]
- cmp r0, r6
- bne _080D6D5C
- adds r0, r1, r2
- ldr r1, =0x0000049a
- adds r0, r1
- bl GetBagItemId
- lsls r0, 16
- lsrs r0, 16
- cmp r0, r5
- bcc _080D6D5C
- movs r0, 0x1
- b _080D6D68
- .pool
-_080D6D5C:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x31
- bls _080D6D28
- movs r0, 0
-_080D6D68:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end CheckPCHasItem
-
- thumb_func_start AddPCItem
-AddPCItem: @ 80D6D70
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- lsls r1, 16
- lsrs r5, r1, 16
- movs r0, 0xC8
- bl AllocZeroed
- adds r7, r0, 0
- ldr r0, =gSaveBlock1Ptr
- ldr r1, [r0]
- movs r0, 0x93
- lsls r0, 3
- adds r1, r0
- adds r0, r7, 0
- movs r2, 0xC8
- bl memcpy
- movs r6, 0
-_080D6D9C:
- lsls r0, r6, 2
- adds r1, r0, r7
- ldrh r0, [r1]
- cmp r0, r8
- bne _080D6DD0
- adds r4, r1, 0x2
- adds r0, r4, 0
- bl GetBagItemId
- lsls r0, 16
- lsrs r2, r0, 16
- adds r1, r2, r5
- ldr r3, =0x000003e7
- cmp r1, r3
- ble _080D6E04
- ldr r1, =0x0000fc19
- adds r0, r5, r1
- adds r0, r2, r0
- lsls r0, 16
- lsrs r5, r0, 16
- adds r0, r4, 0
- adds r1, r3, 0
- bl SetBagItemId
- cmp r5, 0
- beq _080D6E20
-_080D6DD0:
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0x31
- bls _080D6D9C
- cmp r5, 0
- beq _080D6E20
- bl sub_80D6CAC
- lsls r0, 24
- asrs r1, r0, 24
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- bne _080D6E10
- adds r0, r7, 0
- bl Free
- movs r0, 0
- b _080D6E3A
- .pool
-_080D6E04:
- lsls r1, 16
- lsrs r1, 16
- adds r0, r4, 0
- bl SetBagItemId
- b _080D6E20
-_080D6E10:
- lsls r0, r1, 2
- adds r0, r7
- mov r1, r8
- strh r1, [r0]
- adds r0, 0x2
- adds r1, r5, 0
- bl SetBagItemId
-_080D6E20:
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- movs r1, 0x93
- lsls r1, 3
- adds r0, r1
- adds r1, r7, 0
- movs r2, 0xC8
- bl memcpy
- adds r0, r7, 0
- bl Free
- movs r0, 0x1
-_080D6E3A:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- .pool
- thumb_func_end AddPCItem
-
- thumb_func_start sub_80D6E48
-sub_80D6E48: @ 80D6E48
- push {lr}
- lsls r0, 24
- lsls r1, 16
- lsrs r1, 16
- ldr r2, =gSaveBlock1Ptr
- ldr r2, [r2]
- lsrs r0, 22
- adds r3, r2, r0
- ldr r0, =0x0000049a
- adds r2, r3, r0
- ldrh r0, [r2]
- subs r0, r1
- strh r0, [r2]
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, 0
- bne _080D6E76
- movs r2, 0x93
- lsls r2, 3
- adds r0, r3, r2
- strh r1, [r0]
- bl sub_80D6E84
-_080D6E76:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80D6E48
-
- thumb_func_start sub_80D6E84
-sub_80D6E84: @ 80D6E84
- push {r4-r7,lr}
- movs r2, 0
-_080D6E88:
- adds r1, r2, 0x1
- lsls r0, r1, 16
- lsrs r4, r0, 16
- adds r6, r1, 0
- cmp r4, 0x31
- bhi _080D6ECA
- ldr r0, =gSaveBlock1Ptr
- mov r12, r0
- lsls r5, r2, 2
- movs r7, 0x93
- lsls r7, 3
-_080D6E9E:
- mov r0, r12
- ldr r1, [r0]
- adds r0, r1, r5
- adds r0, r7
- ldrh r0, [r0]
- cmp r0, 0
- bne _080D6EC0
- movs r0, 0x93
- lsls r0, 3
- adds r1, r0
- adds r2, r1, r5
- ldr r3, [r2]
- lsls r0, r4, 2
- adds r1, r0
- ldr r0, [r1]
- str r0, [r2]
- str r3, [r1]
-_080D6EC0:
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x31
- bls _080D6E9E
-_080D6ECA:
- lsls r0, r6, 16
- lsrs r2, r0, 16
- cmp r2, 0x30
- bls _080D6E88
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80D6E84
-
- thumb_func_start sub_80D6EDC
-sub_80D6EDC: @ 80D6EDC
- push {lr}
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r2, =0x00000496
- adds r1, r0, r2
- ldrh r2, [r1]
- ldr r3, =0x00000103
- cmp r2, r3
- beq _080D6F04
- movs r0, 0x88
- lsls r0, 1
- cmp r2, r0
- beq _080D6F0C
- b _080D6F0E
- .pool
-_080D6F04:
- movs r0, 0x88
- lsls r0, 1
- strh r0, [r1]
- b _080D6F0E
-_080D6F0C:
- strh r3, [r1]
-_080D6F0E:
- pop {r0}
- bx r0
- thumb_func_end sub_80D6EDC
-
- thumb_func_start BagGetItemIdByPocketPosition
-@ int BagGetItemIdByPocketPosition(int pocket_id_plus_1, int item_index_in_pocket)
-BagGetItemIdByPocketPosition: @ 80D6F14
- lsls r0, 24
- lsls r1, 16
- ldr r2, =gBagPockets
- lsrs r0, 21
- subs r0, 0x8
- adds r0, r2
- ldr r0, [r0]
- lsrs r1, 14
- adds r1, r0
- ldrh r0, [r1]
- bx lr
- .pool
- thumb_func_end BagGetItemIdByPocketPosition
-
- thumb_func_start BagGetQuantityByPocketPosition
-@ int BagGetQuantityByPocketPosition(int pocket_id_plus_1, int item_index_in_pocket)
-BagGetQuantityByPocketPosition: @ 80D6F30
- push {lr}
- lsls r0, 24
- lsls r1, 16
- ldr r2, =gBagPockets
- lsrs r0, 21
- subs r0, 0x8
- adds r0, r2
- lsrs r1, 14
- ldr r0, [r0]
- adds r0, r1
- adds r0, 0x2
- bl GetBagItemQuantity
- lsls r0, 16
- lsrs r0, 16
- pop {r1}
- bx r1
- .pool
- thumb_func_end BagGetQuantityByPocketPosition
-
- thumb_func_start swap32
-swap32: @ 80D6F58
- ldr r3, [r0]
- ldr r2, [r1]
- str r2, [r0]
- str r3, [r1]
- bx lr
- thumb_func_end swap32
-
- thumb_func_start sub_80D6F64
-sub_80D6F64: @ 80D6F64
- push {r4-r7,lr}
- adds r6, r0, 0
- movs r3, 0
- b _080D6FA6
-_080D6F6C:
- adds r1, r3, 0x1
- lsls r0, r1, 16
- lsrs r4, r0, 16
- adds r7, r1, 0
- cmp r4, r2
- bcs _080D6FA2
- lsls r5, r3, 2
-_080D6F7A:
- ldr r0, [r6]
- adds r0, r5
- adds r0, 0x2
- bl GetBagItemQuantity
- lsls r0, 16
- cmp r0, 0
- bne _080D6F96
- ldr r1, [r6]
- adds r0, r1, r5
- lsls r2, r4, 2
- adds r1, r2
- bl swap32
-_080D6F96:
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- ldrb r0, [r6, 0x4]
- cmp r4, r0
- bcc _080D6F7A
-_080D6FA2:
- lsls r0, r7, 16
- lsrs r3, r0, 16
-_080D6FA6:
- ldrb r2, [r6, 0x4]
- subs r0, r2, 0x1
- cmp r3, r0
- blt _080D6F6C
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_80D6F64
-
- thumb_func_start sub_80D6FB4
-sub_80D6FB4: @ 80D6FB4
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r6, r0, 0
- movs r3, 0
- b _080D701A
-_080D6FC0:
- adds r1, r3, 0x1
- lsls r0, r1, 16
- lsrs r5, r0, 16
- mov r8, r1
- cmp r5, r2
- bcs _080D7014
- lsls r7, r3, 2
-_080D6FCE:
- ldr r0, [r6]
- adds r0, r7
- adds r0, 0x2
- bl GetBagItemQuantity
- lsls r0, 16
- lsls r4, r5, 2
- cmp r0, 0
- beq _080D6FFE
- ldr r0, [r6]
- adds r0, r4
- adds r0, 0x2
- bl GetBagItemQuantity
- lsls r0, 16
- cmp r0, 0
- beq _080D7008
- ldr r0, [r6]
- adds r1, r7, r0
- adds r0, r4, r0
- ldrh r1, [r1]
- ldrh r0, [r0]
- cmp r1, r0
- bls _080D7008
-_080D6FFE:
- ldr r1, [r6]
- adds r0, r1, r7
- adds r1, r4
- bl swap32
-_080D7008:
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- ldrb r0, [r6, 0x4]
- cmp r5, r0
- bcc _080D6FCE
-_080D7014:
- mov r1, r8
- lsls r0, r1, 16
- lsrs r3, r0, 16
-_080D701A:
- ldrb r2, [r6, 0x4]
- subs r0, r2, 0x1
- cmp r3, r0
- blt _080D6FC0
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_80D6FB4
-
- thumb_func_start sub_80D702C
-sub_80D702C: @ 80D702C
- push {r4-r6,lr}
- adds r4, r0, 0
- adds r3, r2, 0
- cmp r1, r3
- beq _080D708C
- lsls r0, r1, 2
- adds r0, r4
- ldr r6, [r0]
- cmp r3, r1
- bls _080D7064
- subs r3, 0x1
- lsls r1, 16
- lsls r0, r3, 16
- asrs r2, r0, 16
- cmp r1, r0
- bge _080D7086
- adds r5, r2, 0
-_080D704E:
- asrs r2, r1, 16
- lsls r0, r2, 2
- adds r0, r4
- ldr r1, [r0, 0x4]
- str r1, [r0]
- adds r2, 0x1
- lsls r1, r2, 16
- asrs r0, r1, 16
- cmp r0, r5
- blt _080D704E
- b _080D7086
-_080D7064:
- lsls r1, 16
- lsls r0, r3, 16
- asrs r2, r0, 16
- cmp r1, r0
- ble _080D7086
- adds r5, r2, 0
-_080D7070:
- asrs r2, r1, 16
- lsls r1, r2, 2
- adds r1, r4
- subs r0, r1, 0x4
- ldr r0, [r0]
- str r0, [r1]
- subs r2, 0x1
- lsls r1, r2, 16
- asrs r0, r1, 16
- cmp r0, r5
- bgt _080D7070
-_080D7086:
- lsls r0, r3, 2
- adds r0, r4
- str r6, [r0]
-_080D708C:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_80D702C
-
- thumb_func_start ClearBag
-ClearBag: @ 80D7094
- push {r4,r5,lr}
- movs r4, 0
- ldr r5, =gBagPockets
-_080D709A:
- lsls r1, r4, 3
- adds r1, r5
- ldr r0, [r1]
- ldrb r1, [r1, 0x4]
- bl ClearItemSlots
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x4
- bls _080D709A
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end ClearBag
-
- thumb_func_start CountTotalItemQuantityInBag
-@ u16 CountTotalItemQuantityInBag(u16 itemId)
-CountTotalItemQuantityInBag: @ 80D70BC
- push {r4-r7,lr}
- lsls r0, 16
- lsrs r6, r0, 16
- movs r7, 0
- adds r0, r6, 0
- bl ItemId_GetPocket
- lsls r0, 24
- lsrs r0, 21
- ldr r1, =gUnknown_02039DD0
- adds r5, r0, r1
- movs r4, 0
- ldrb r0, [r5, 0x4]
- cmp r7, r0
- bcs _080D70FE
-_080D70DA:
- ldr r0, [r5]
- lsls r1, r4, 2
- adds r1, r0
- ldrh r0, [r1]
- cmp r0, r6
- bne _080D70F2
- adds r0, r1, 0x2
- bl GetBagItemQuantity
- adds r0, r7, r0
- lsls r0, 16
- lsrs r7, r0, 16
-_080D70F2:
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- ldrb r0, [r5, 0x4]
- cmp r4, r0
- bcc _080D70DA
-_080D70FE:
- adds r0, r7, 0
- pop {r4-r7}
- pop {r1}
- bx r1
- .pool
- thumb_func_end CountTotalItemQuantityInBag
-
- thumb_func_start CheckPyramidBagHasItem
-CheckPyramidBagHasItem: @ 80D710C
- push {r4,r5,lr}
- lsls r0, 16
- lsrs r5, r0, 16
- lsls r1, 16
- lsrs r4, r1, 16
- ldr r0, =gSaveBlock2Ptr
- ldr r3, [r0]
- ldr r1, =0x00000ca9
- adds r0, r3, r1
- ldrb r1, [r0]
- lsls r1, 30
- lsrs r2, r1, 30
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 2
- ldr r2, =0x00000e2c
- adds r0, r2
- adds r2, r3, r0
- lsrs r1, 30
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 1
- ldr r1, =0x00000e54
- adds r0, r1
- adds r3, r0
- movs r1, 0
-_080D7140:
- lsls r0, r1, 1
- adds r0, r2
- ldrh r0, [r0]
- cmp r0, r5
- bne _080D7170
- adds r0, r3, r1
- ldrb r0, [r0]
- cmp r0, r4
- bcs _080D715C
- subs r0, r4, r0
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0
- bne _080D7170
-_080D715C:
- movs r0, 0x1
- b _080D717C
- .pool
-_080D7170:
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x9
- bls _080D7140
- movs r0, 0
-_080D717C:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end CheckPyramidBagHasItem
-
- thumb_func_start CheckPyramidBagHasSpace
-CheckPyramidBagHasSpace: @ 80D7184
- push {r4,r5,lr}
- lsls r0, 16
- lsrs r5, r0, 16
- lsls r1, 16
- lsrs r4, r1, 16
- ldr r0, =gSaveBlock2Ptr
- ldr r3, [r0]
- ldr r1, =0x00000ca9
- adds r0, r3, r1
- ldrb r1, [r0]
- lsls r1, 30
- lsrs r2, r1, 30
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 2
- ldr r2, =0x00000e2c
- adds r0, r2
- adds r2, r3, r0
- lsrs r1, 30
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 1
- ldr r1, =0x00000e54
- adds r0, r1
- adds r3, r0
- movs r1, 0
-_080D71B8:
- lsls r0, r1, 1
- adds r0, r2
- ldrh r0, [r0]
- cmp r0, r5
- beq _080D71C6
- cmp r0, 0
- bne _080D71F0
-_080D71C6:
- adds r0, r3, r1
- ldrb r0, [r0]
- adds r0, r4
- cmp r0, 0x63
- ble _080D71DA
- subs r0, 0x63
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0
- bne _080D71F0
-_080D71DA:
- movs r0, 0x1
- b _080D71FC
- .pool
-_080D71F0:
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x9
- bls _080D71B8
- movs r0, 0
-_080D71FC:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end CheckPyramidBagHasSpace
-
- thumb_func_start AddPyramidBagItem
-AddPyramidBagItem: @ 80D7204
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- lsls r0, 16
- lsrs r7, r0, 16
- lsls r1, 16
- lsrs r4, r1, 16
- ldr r0, =gSaveBlock2Ptr
- ldr r3, [r0]
- ldr r1, =0x00000ca9
- adds r0, r3, r1
- ldrb r1, [r0]
- lsls r1, 30
- lsrs r2, r1, 30
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 2
- ldr r2, =0x00000e2c
- adds r0, r2
- adds r0, r3
- mov r9, r0
- lsrs r1, 30
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 1
- ldr r1, =0x00000e54
- adds r0, r1
- adds r3, r0
- mov r8, r3
- movs r0, 0x14
- bl Alloc
- adds r5, r0, 0
- movs r0, 0xA
- bl Alloc
- adds r6, r0, 0
- adds r0, r5, 0
- mov r1, r9
- movs r2, 0x14
- bl memcpy
- adds r0, r6, 0
- mov r1, r8
- movs r2, 0xA
- bl memcpy
- movs r2, 0
-_080D7266:
- lsls r0, r2, 1
- adds r0, r5
- ldrh r0, [r0]
- cmp r0, r7
- bne _080D72AA
- adds r1, r6, r2
- ldrb r0, [r1]
- cmp r0, 0x62
- bhi _080D72AA
- adds r0, r4
- strb r0, [r1]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x63
- bls _080D72A4
- ldrb r0, [r1]
- subs r0, 0x63
- lsls r0, 16
- lsrs r4, r0, 16
- movs r0, 0x63
- strb r0, [r1]
- b _080D72A6
- .pool
-_080D72A4:
- movs r4, 0
-_080D72A6:
- cmp r4, 0
- beq _080D7304
-_080D72AA:
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- cmp r2, 0x9
- bls _080D7266
- cmp r4, 0
- beq _080D7304
- movs r2, 0
-_080D72BA:
- lsls r0, r2, 1
- adds r1, r0, r5
- ldrh r0, [r1]
- cmp r0, 0
- bne _080D72E6
- strh r7, [r1]
- adds r1, r6, r2
- strb r4, [r1]
- lsls r0, r4, 24
- lsrs r0, 24
- cmp r0, 0x63
- bls _080D72E0
- ldrb r0, [r1]
- subs r0, 0x63
- lsls r0, 16
- lsrs r4, r0, 16
- movs r0, 0x63
- strb r0, [r1]
- b _080D72E2
-_080D72E0:
- movs r4, 0
-_080D72E2:
- cmp r4, 0
- beq _080D7304
-_080D72E6:
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- cmp r2, 0x9
- bls _080D72BA
- cmp r4, 0
- beq _080D7304
- adds r0, r5, 0
- bl Free
- adds r0, r6, 0
- bl Free
- movs r0, 0
- b _080D7326
-_080D7304:
- mov r0, r9
- adds r1, r5, 0
- movs r2, 0x14
- bl memcpy
- mov r0, r8
- adds r1, r6, 0
- movs r2, 0xA
- bl memcpy
- adds r0, r5, 0
- bl Free
- adds r0, r6, 0
- bl Free
- movs r0, 0x1
-_080D7326:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end AddPyramidBagItem
-
- thumb_func_start RemovePyramidBagItem
-RemovePyramidBagItem: @ 80D7334
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- lsls r0, 16
- lsrs r0, 16
- mov r9, r0
- lsls r1, 16
- lsrs r4, r1, 16
- ldr r0, =gSaveBlock2Ptr
- ldr r3, [r0]
- ldr r1, =0x00000ca9
- adds r0, r3, r1
- ldrb r1, [r0]
- lsls r1, 30
- lsrs r2, r1, 30
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 2
- ldr r2, =0x00000e2c
- adds r0, r2
- adds r0, r3
- mov r8, r0
- lsrs r1, 30
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 1
- ldr r1, =0x00000e54
- adds r0, r1
- adds r7, r3, r0
- ldr r1, =gUnknown_0203CF30
- ldrh r0, [r1, 0x8]
- ldrh r1, [r1, 0x6]
- adds r0, r1
- lsls r0, 16
- lsrs r2, r0, 16
- lsls r0, r2, 1
- mov r1, r8
- adds r3, r0, r1
- ldrh r0, [r3]
- cmp r0, r9
- bne _080D73B4
- adds r1, r7, r2
- ldrb r0, [r1]
- cmp r0, r4
- bcc _080D73B4
- subs r0, r4
- strb r0, [r1]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- bne _080D744C
- strh r0, [r3]
- b _080D744C
- .pool
-_080D73B4:
- movs r0, 0x14
- bl Alloc
- adds r5, r0, 0
- movs r0, 0xA
- bl Alloc
- adds r6, r0, 0
- adds r0, r5, 0
- mov r1, r8
- movs r2, 0x14
- bl memcpy
- adds r0, r6, 0
- adds r1, r7, 0
- movs r2, 0xA
- bl memcpy
- movs r2, 0
-_080D73DA:
- lsls r0, r2, 1
- adds r3, r0, r5
- ldrh r0, [r3]
- cmp r0, r9
- bne _080D740E
- adds r1, r6, r2
- ldrb r0, [r1]
- cmp r0, r4
- bcc _080D73FC
- subs r0, r4
- strb r0, [r1]
- movs r4, 0
- lsls r0, 24
- cmp r0, 0
- bne _080D740A
- strh r4, [r3]
- b _080D740A
-_080D73FC:
- subs r0, r4, r0
- lsls r0, 16
- lsrs r4, r0, 16
- movs r0, 0
- strb r0, [r1]
- movs r0, 0
- strh r0, [r3]
-_080D740A:
- cmp r4, 0
- beq _080D742C
-_080D740E:
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- cmp r2, 0x9
- bls _080D73DA
- cmp r4, 0
- beq _080D742C
- adds r0, r5, 0
- bl Free
- adds r0, r6, 0
- bl Free
- movs r0, 0
- b _080D744E
-_080D742C:
- mov r0, r8
- adds r1, r5, 0
- movs r2, 0x14
- bl memcpy
- adds r0, r7, 0
- adds r1, r6, 0
- movs r2, 0xA
- bl memcpy
- adds r0, r5, 0
- bl Free
- adds r0, r6, 0
- bl Free
-_080D744C:
- movs r0, 0x1
-_080D744E:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end RemovePyramidBagItem
-
- thumb_func_start SanitizeItemId
-SanitizeItemId: @ 80D745C
- push {lr}
- lsls r0, 16
- lsrs r1, r0, 16
- movs r0, 0xBC
- lsls r0, 1
- cmp r1, r0
- bhi _080D746E
- adds r0, r1, 0
- b _080D7470
-_080D746E:
- movs r0, 0
-_080D7470:
- pop {r1}
- bx r1
- thumb_func_end SanitizeItemId
-
- thumb_func_start ItemId_GetItem
-@ item *ItemId_GetItem(s16 itemId)
-ItemId_GetItem: @ 80D7474
- push {lr}
- lsls r0, 16
- lsrs r0, 16
- bl SanitizeItemId
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x2C
- muls r0, r1
- ldr r1, =gItems
- adds r0, r1
- pop {r1}
- bx r1
- .pool
- thumb_func_end ItemId_GetItem
-
- thumb_func_start itemid_get_number
-itemid_get_number: @ 80D7494
- push {r4,lr}
- lsls r0, 16
- lsrs r0, 16
- ldr r4, =gItems
- bl SanitizeItemId
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x2C
- muls r0, r1
- adds r0, r4
- ldrh r0, [r0, 0xE]
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end itemid_get_number
-
- thumb_func_start itemid_get_market_price
-itemid_get_market_price: @ 80D74B8
- push {r4,lr}
- lsls r0, 16
- lsrs r0, 16
- ldr r4, =gItems
- bl SanitizeItemId
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x2C
- muls r0, r1
- adds r0, r4
- ldrh r0, [r0, 0x10]
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end itemid_get_market_price
-
- thumb_func_start ItemId_GetHoldEffect
-ItemId_GetHoldEffect: @ 80D74DC
- push {r4,lr}
- lsls r0, 16
- lsrs r0, 16
- ldr r4, =gItems
- bl SanitizeItemId
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x2C
- muls r0, r1
- adds r0, r4
- ldrb r0, [r0, 0x12]
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end ItemId_GetHoldEffect
-
- thumb_func_start ItemId_GetHoldEffectParam
-ItemId_GetHoldEffectParam: @ 80D7500
- push {r4,lr}
- lsls r0, 16
- lsrs r0, 16
- ldr r4, =gItems
- bl SanitizeItemId
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x2C
- muls r0, r1
- adds r0, r4
- ldrb r0, [r0, 0x13]
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end ItemId_GetHoldEffectParam
-
- thumb_func_start ItemId_GetDescription
-ItemId_GetDescription: @ 80D7524
- push {r4,lr}
- lsls r0, 16
- lsrs r0, 16
- ldr r4, =gItems
- bl SanitizeItemId
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x2C
- muls r0, r1
- adds r4, 0x14
- adds r0, r4
- ldr r0, [r0]
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end ItemId_GetDescription
-
- thumb_func_start itemid_is_unique
-itemid_is_unique: @ 80D7548
- push {r4,lr}
- lsls r0, 16
- lsrs r0, 16
- ldr r4, =gItems
- bl SanitizeItemId
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x2C
- muls r0, r1
- adds r0, r4
- ldrb r0, [r0, 0x18]
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end itemid_is_unique
-
- thumb_func_start itemid_get_x19
-itemid_get_x19: @ 80D756C
- push {r4,lr}
- lsls r0, 16
- lsrs r0, 16
- ldr r4, =gItems
- bl SanitizeItemId
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x2C
- muls r0, r1
- adds r0, r4
- ldrb r0, [r0, 0x19]
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end itemid_get_x19
-
- thumb_func_start ItemId_GetPocket
-ItemId_GetPocket: @ 80D7590
- push {r4,lr}
- lsls r0, 16
- lsrs r0, 16
- ldr r4, =gItems
- bl SanitizeItemId
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x2C
- muls r0, r1
- adds r0, r4
- ldrb r0, [r0, 0x1A]
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end ItemId_GetPocket
-
- thumb_func_start ItemId_GetType
-ItemId_GetType: @ 80D75B4
- push {r4,lr}
- lsls r0, 16
- lsrs r0, 16
- ldr r4, =gItems
- bl SanitizeItemId
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x2C
- muls r0, r1
- adds r0, r4
- ldrb r0, [r0, 0x1B]
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end ItemId_GetType
-
- thumb_func_start ItemId_GetFieldFunc
-ItemId_GetFieldFunc: @ 80D75D8
- push {r4,lr}
- lsls r0, 16
- lsrs r0, 16
- ldr r4, =gItems
- bl SanitizeItemId
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x2C
- muls r0, r1
- adds r4, 0x1C
- adds r0, r4
- ldr r0, [r0]
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end ItemId_GetFieldFunc
-
- thumb_func_start ItemId_GetBattleUsage
-ItemId_GetBattleUsage: @ 80D75FC
- push {r4,lr}
- lsls r0, 16
- lsrs r0, 16
- ldr r4, =gItems
- bl SanitizeItemId
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x2C
- muls r0, r1
- adds r0, r4
- adds r0, 0x20
- ldrb r0, [r0]
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end ItemId_GetBattleUsage
-
- thumb_func_start ItemId_GetBattleFunc
-ItemId_GetBattleFunc: @ 80D7620
- push {r4,lr}
- lsls r0, 16
- lsrs r0, 16
- ldr r4, =gItems
- bl SanitizeItemId
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x2C
- muls r0, r1
- adds r4, 0x24
- adds r0, r4
- ldr r0, [r0]
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end ItemId_GetBattleFunc
-
- thumb_func_start ItemId_GetSecondaryId
-ItemId_GetSecondaryId: @ 80D7644
- push {r4,lr}
- lsls r0, 16
- lsrs r0, 16
- ldr r4, =gItems
- bl SanitizeItemId
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x2C
- muls r0, r1
- adds r0, r4
- adds r0, 0x28
- ldrb r0, [r0]
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end ItemId_GetSecondaryId
-
- .align 2, 0 @ Don't pad with nop.
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/item_menu_icons.s b/asm/item_menu_icons.s
deleted file mode 100644
index 8068e37c2..000000000
--- a/asm/item_menu_icons.s
+++ /dev/null
@@ -1,637 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start RemoveBagObject
-@ void RemoveBagObject(u8 a1)
-RemoveBagObject: @ 80D4CA8
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, =gUnknown_0203CE54
- ldr r2, =0x00000804
- adds r1, r4, r2
- ldr r0, [r0]
- adds r5, r0, r1
- ldrb r0, [r5]
- cmp r0, 0xFF
- beq _080D4CEE
- adds r4, 0x64
- adds r0, r4, 0
- bl FreeSpriteTilesByTag
- adds r0, r4, 0
- bl FreeSpritePaletteByTag
- ldrb r1, [r5]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r4, =gSprites
- adds r0, r4
- bl FreeSpriteOamMatrix
- ldrb r1, [r5]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- bl DestroySprite
- movs r0, 0xFF
- strb r0, [r5]
-_080D4CEE:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end RemoveBagObject
-
- thumb_func_start AddBagVisualObject
-@ void AddBagVisualObject(u8 bagPocketId)
-AddBagVisualObject: @ 80D4D00
- push {r4,r5,lr}
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- ldr r0, =gUnknown_0203CE54
- ldr r4, [r0]
- ldr r0, =0x00000804
- adds r4, r0
- ldr r0, =gUnknown_0857FB4C
- movs r1, 0x44
- movs r2, 0x42
- movs r3, 0
- bl CreateSprite
- strb r0, [r4]
- adds r0, r5, 0
- movs r1, 0
- bl SetBagVisualPocketId
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end AddBagVisualObject
-
- thumb_func_start SetBagVisualPocketId
-@ void SetBagVisualPocketId(u8 bagPocketId, bool8 isSwitchingPockets)
-SetBagVisualPocketId: @ 80D4D38
- push {lr}
- lsls r0, 24
- lsrs r3, r0, 24
- lsls r1, 24
- ldr r0, =gUnknown_0203CE54
- ldr r0, [r0]
- ldr r2, =0x00000804
- adds r0, r2
- ldrb r2, [r0]
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- ldr r2, =gSprites
- adds r2, r0, r2
- cmp r1, 0
- beq _080D4D84
- ldr r0, =0x0000fffb
- strh r0, [r2, 0x26]
- ldr r0, =ObjectCB_BagVisualSwitchingPockets
- str r0, [r2, 0x1C]
- adds r0, r3, 0x1
- strh r0, [r2, 0x2E]
- adds r0, r2, 0
- movs r1, 0
- bl StartSpriteAnim
- b _080D4D90
- .pool
-_080D4D84:
- adds r1, r3, 0x1
- lsls r1, 24
- lsrs r1, 24
- adds r0, r2, 0
- bl StartSpriteAnim
-_080D4D90:
- pop {r0}
- bx r0
- thumb_func_end SetBagVisualPocketId
-
- thumb_func_start ObjectCB_BagVisualSwitchingPockets
-@ void ObjectCB_BagVisualSwitchingPockets(struct obj *object)
-ObjectCB_BagVisualSwitchingPockets: @ 80D4D94
- push {r4,lr}
- adds r4, r0, 0
- ldrh r1, [r4, 0x26]
- movs r2, 0x26
- ldrsh r0, [r4, r2]
- cmp r0, 0
- beq _080D4DA8
- adds r0, r1, 0x1
- strh r0, [r4, 0x26]
- b _080D4DB8
-_080D4DA8:
- ldrh r1, [r4, 0x2E]
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl StartSpriteAnim
- ldr r0, =SpriteCallbackDummy
- str r0, [r4, 0x1C]
-_080D4DB8:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end ObjectCB_BagVisualSwitchingPockets
-
- thumb_func_start ShakeBagVisual
-@ void ShakeBagVisual()
-ShakeBagVisual: @ 80D4DC4
- push {r4,lr}
- ldr r0, =gUnknown_0203CE54
- ldr r0, [r0]
- ldr r1, =0x00000804
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, =gSprites
- adds r4, r0, r1
- adds r0, r4, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _080D4DF4
- adds r0, r4, 0
- movs r1, 0x1
- bl StartSpriteAffineAnim
- ldr r0, =ObjectCB_ShakeBagVisual
- str r0, [r4, 0x1C]
-_080D4DF4:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end ShakeBagVisual
-
- thumb_func_start ObjectCB_ShakeBagVisual
-@ void ObjectCB_ShakeBagVisual(struct obj *object)
-ObjectCB_ShakeBagVisual: @ 80D4E0C
- push {r4,lr}
- adds r4, r0, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _080D4E28
- adds r0, r4, 0
- movs r1, 0
- bl StartSpriteAffineAnim
- ldr r0, =SpriteCallbackDummy
- str r0, [r4, 0x1C]
-_080D4E28:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end ObjectCB_ShakeBagVisual
-
- thumb_func_start AddSwitchPocketRotatingBallObject
-@ void AddSwitchPocketRotatingBallObject(u16 rotationDirection)
-AddSwitchPocketRotatingBallObject: @ 80D4E34
- push {r4,r5,lr}
- adds r5, r0, 0
- lsls r5, 16
- lsrs r5, 16
- ldr r0, =gUnknown_0203CE54
- ldr r4, [r0]
- ldr r0, =0x00000805
- adds r4, r0
- ldr r0, =gUnknown_0857FBA0
- bl LoadSpriteSheet
- ldr r0, =gUnknown_0857FBA8
- bl LoadSpritePalette
- ldr r0, =gUnknown_0857FBB0
- movs r1, 0x10
- movs r2, 0x10
- movs r3, 0
- bl CreateSprite
- strb r0, [r4]
- ldr r2, =gSprites
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- strh r5, [r0, 0x2E]
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end AddSwitchPocketRotatingBallObject
-
- thumb_func_start update_switch_pocket_rotating_ball_coords
-@ void update_switch_pocket_rotating_ball_coords(struct obj *object)
-update_switch_pocket_rotating_ball_coords: @ 80D4E8C
- ldrh r2, [r0, 0x30]
- ldrh r1, [r0, 0x34]
- adds r1, 0x1
- movs r3, 0x1
- ands r1, r3
- subs r2, r1
- adds r1, r0, 0
- adds r1, 0x28
- strb r2, [r1]
- ldrh r2, [r0, 0x30]
- ldrh r1, [r0, 0x34]
- adds r1, 0x1
- ands r1, r3
- subs r2, r1
- adds r0, 0x29
- strb r2, [r0]
- bx lr
- thumb_func_end update_switch_pocket_rotating_ball_coords
-
- thumb_func_start ObjectCB_SwitchPocketRotatingBallInit
-@ void ObjectCB_SwitchPocketRotatingBallInit(struct obj *object)
-ObjectCB_SwitchPocketRotatingBallInit: @ 80D4EB0
- push {r4,lr}
- adds r4, r0, 0
- ldrb r1, [r4, 0x1]
- movs r0, 0x4
- negs r0, r0
- ands r0, r1
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r4, 0x1]
- movs r0, 0x2E
- ldrsh r1, [r4, r0]
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- bne _080D4ED8
- ldr r0, =gUnknown_0857FB98
- b _080D4EDA
- .pool
-_080D4ED8:
- ldr r0, =gUnknown_0857FB9C
-_080D4EDA:
- str r0, [r4, 0x10]
- adds r0, r4, 0
- bl InitSpriteAffineAnim
- adds r0, r4, 0
- adds r0, 0x28
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- strh r0, [r4, 0x30]
- adds r0, r4, 0
- adds r0, 0x29
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- strh r0, [r4, 0x30]
- adds r0, r4, 0
- bl update_switch_pocket_rotating_ball_coords
- ldr r0, =ObjectCB_SwitchPocketRotatingBallContinue
- str r0, [r4, 0x1C]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end ObjectCB_SwitchPocketRotatingBallInit
-
- thumb_func_start ObjectCB_SwitchPocketRotatingBallContinue
-@ void ObjectCB_SwitchPocketRotatingBallContinue(struct obj *object)
-ObjectCB_SwitchPocketRotatingBallContinue: @ 80D4F14
- push {r4,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x34]
- adds r0, 0x1
- strh r0, [r4, 0x34]
- adds r0, r4, 0
- bl update_switch_pocket_rotating_ball_coords
- movs r1, 0x34
- ldrsh r0, [r4, r1]
- cmp r0, 0x10
- bne _080D4F32
- movs r0, 0x1
- bl RemoveBagObject
-_080D4F32:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end ObjectCB_SwitchPocketRotatingBallContinue
-
- thumb_func_start AddBagItemIconObject
-@ void AddBagItemIconObject(u16 itemId, u8 a2)
-AddBagItemIconObject: @ 80D4F38
- push {r4-r6,lr}
- lsls r0, 16
- lsrs r6, r0, 16
- lsls r1, 24
- lsrs r4, r1, 24
- ldr r0, =gUnknown_0203CE54
- ldr r2, =0x00000806
- adds r1, r4, r2
- ldr r0, [r0]
- adds r5, r0, r1
- ldrb r0, [r5]
- cmp r0, 0xFF
- bne _080D4F86
- adds r4, 0x66
- adds r0, r4, 0
- bl FreeSpriteTilesByTag
- adds r0, r4, 0
- bl FreeSpritePaletteByTag
- adds r0, r4, 0
- adds r1, r4, 0
- adds r2, r6, 0
- bl AddItemIconSprite
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x40
- beq _080D4F86
- strb r2, [r5]
- ldr r1, =gSprites
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r0, r1
- movs r1, 0x18
- strh r1, [r0, 0x24]
- movs r1, 0x58
- strh r1, [r0, 0x26]
-_080D4F86:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end AddBagItemIconObject
-
- thumb_func_start RemoveBagItemIconObject
-@ void RemoveBagItemIconObject(u8 a1)
-RemoveBagItemIconObject: @ 80D4F98
- push {lr}
- lsls r0, 24
- movs r1, 0x80
- lsls r1, 18
- adds r0, r1
- lsrs r0, 24
- bl RemoveBagObject
- pop {r0}
- bx r0
- thumb_func_end RemoveBagItemIconObject
-
- thumb_func_start sub_80D4FAC
-sub_80D4FAC: @ 80D4FAC
- push {lr}
- ldr r0, =gUnknown_0203CE54
- ldr r0, [r0]
- ldr r1, =0x00000808
- adds r0, r1
- movs r1, 0x8
- bl sub_8122344
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80D4FAC
-
- thumb_func_start sub_80D4FC8
-sub_80D4FC8: @ 80D4FC8
- push {lr}
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- ldr r0, =gUnknown_0203CE54
- ldr r0, [r0]
- ldr r1, =0x00000808
- adds r0, r1
- movs r1, 0x8
- bl sub_81223FC
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80D4FC8
-
- thumb_func_start sub_80D4FEC
-sub_80D4FEC: @ 80D4FEC
- push {lr}
- adds r3, r0, 0
- lsls r3, 24
- ldr r0, =gUnknown_0203CE54
- ldr r0, [r0]
- ldr r1, =0x00000808
- adds r0, r1
- lsrs r3, 4
- movs r1, 0x80
- lsls r1, 13
- adds r3, r1
- lsrs r3, 16
- movs r1, 0x88
- movs r2, 0x78
- bl sub_8122448
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80D4FEC
-
- thumb_func_start sub_80D5018
-sub_80D5018: @ 80D5018
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r6, r0, 0
- adds r4, r1, 0
- movs r2, 0x80
- lsls r2, 4
- adds r0, r4, 0
- movs r1, 0
- bl memset
- movs r0, 0x80
- lsls r0, 1
- adds r4, r0
- movs r7, 0
-_080D5036:
- adds r4, 0x20
- movs r5, 0
- adds r1, r7, 0x1
- mov r8, r1
-_080D503E:
- adds r0, r4, 0
- adds r1, r6, 0
- movs r2, 0x20
- bl memcpy
- adds r4, 0x20
- adds r6, 0x20
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x5
- bls _080D503E
- cmp r7, 0x5
- beq _080D505C
- adds r4, 0x20
-_080D505C:
- mov r1, r8
- lsls r0, r1, 24
- lsrs r7, r0, 24
- cmp r7, 0x5
- bls _080D5036
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_80D5018
-
- thumb_func_start sub_80D5070
-sub_80D5070: @ 80D5070
- push {r4,r5,lr}
- sub sp, 0x8
- lsls r0, 24
- lsrs r0, 24
- adds r4, r0, 0
- cmp r4, 0x2A
- bne _080D5082
- bl IsEnigmaBerryValid
-_080D5082:
- ldr r5, =gBerryPicTable
- lsls r4, 3
- adds r0, r5, 0x4
- adds r0, r4, r0
- ldr r0, [r0]
- str r0, [sp]
- ldr r1, =0xffff0000
- ldr r0, [sp, 0x4]
- ands r0, r1
- ldr r1, =0x00007544
- orrs r0, r1
- str r0, [sp, 0x4]
- mov r0, sp
- bl LoadCompressedObjectPalette
- adds r4, r5
- ldr r0, [r4]
- ldr r4, =0x0201d000
- adds r1, r4, 0
- bl LZDecompressWram
- ldr r0, =0xfffff000
- adds r1, r4, r0
- adds r0, r4, 0
- bl sub_80D5018
- add sp, 0x8
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80D5070
-
- thumb_func_start CreateBerryTagSprite
-CreateBerryTagSprite: @ 80D50D4
- push {r4,r5,lr}
- adds r4, r1, 0
- adds r5, r2, 0
- lsls r0, 24
- lsrs r0, 24
- lsls r4, 16
- lsrs r4, 16
- lsls r5, 16
- lsrs r5, 16
- bl sub_80D5070
- ldr r0, =gUnknown_0857FBEC
- lsls r4, 16
- asrs r4, 16
- lsls r5, 16
- asrs r5, 16
- adds r1, r4, 0
- adds r2, r5, 0
- movs r3, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- pop {r4,r5}
- pop {r1}
- bx r1
- .pool
- thumb_func_end CreateBerryTagSprite
-
- thumb_func_start FreeBerryTagSpritePalette
-FreeBerryTagSpritePalette: @ 80D510C
- push {lr}
- ldr r0, =0x00007544
- bl FreeSpritePaletteByTag
- pop {r0}
- bx r0
- .pool
- thumb_func_end FreeBerryTagSpritePalette
-
- thumb_func_start sub_80D511C
-sub_80D511C: @ 80D511C
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- adds r4, r0, 0
- adds r5, r1, 0
- adds r6, r2, 0
- mov r8, r3
- lsls r4, 24
- lsrs r4, 24
- lsls r5, 24
- lsrs r5, 24
- lsls r6, 24
- lsrs r6, 24
- mov r0, r8
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldr r0, =0x00007544
- bl FreeSpritePaletteByTag
- adds r0, r4, 0
- bl sub_80D5070
- ldr r0, =gUnknown_0857FC7C
- adds r1, r5, 0
- adds r2, r6, 0
- movs r3, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r1, r0, 24
- adds r4, r1, 0
- mov r0, r8
- cmp r0, 0x1
- bne _080D5172
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, =gSprites
- adds r0, r1
- movs r1, 0x1
- bl StartSpriteAffineAnim
-_080D5172:
- adds r0, r4, 0
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80D511C
-
- thumb_func_start CreateBerryFlavorCircleSprite
-CreateBerryFlavorCircleSprite: @ 80D518C
- push {lr}
- adds r1, r0, 0
- ldr r0, =gUnknown_0857FE10
- lsls r1, 16
- asrs r1, 16
- movs r2, 0x74
- movs r3, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .pool
- thumb_func_end CreateBerryFlavorCircleSprite
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/learn_move.s b/asm/learn_move.s
index f42514e68..a33bd11b6 100644
--- a/asm/learn_move.s
+++ b/asm/learn_move.s
@@ -713,7 +713,7 @@ _08160CD8:
b _08160E8A
_08160CE6:
bl sub_8160EA0
- ldr r0, =c2_exit_to_overworld_2_switch
+ ldr r0, =CB2_ReturnToField
bl SetMainCallback2
b _08160E8A
.pool
@@ -903,7 +903,7 @@ sub_8160EA0: @ 8160EA0
ldrb r0, [r0]
ldr r1, =gUnknown_0203BC38
adds r2, r1, 0x2
- bl sub_81AE6C8
+ bl DestroyListMenuTask
bl FreeAllWindowBuffers
ldr r0, [r4]
bl Free
@@ -988,7 +988,7 @@ sub_8160F50: @ 8160F50
ldr r4, =gUnknown_0203BC38
adds r2, r4, 0x2
adds r1, r4, 0
- bl sub_81AE860
+ bl ListMenuGetScrollAndRow
movs r0, 0x2
negs r0, r0
cmp r5, r0
diff --git a/asm/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/list_menu.s b/asm/list_menu.s
deleted file mode 100644
index 58719093c..000000000
--- a/asm/list_menu.s
+++ /dev/null
@@ -1,1643 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start ListMenuDummyTask
-@ void ListMenuDummyTask(u8 taskId)
-ListMenuDummyTask: @ 81AE458
- bx lr
- thumb_func_end ListMenuDummyTask
-
- thumb_func_start DoMysteryGiftListMenu
-@ int DoMysteryGiftListMenu(struct WindowTemplate *windowTemplate, struct ListMenuTemplate *listMenuTemplate, int a3, int a4, int a5)
-DoMysteryGiftListMenu: @ 81AE45C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- mov r12, r0
- str r1, [sp]
- ldr r0, [sp, 0x28]
- lsls r2, 24
- lsrs r6, r2, 24
- mov r10, r6
- lsls r3, 16
- lsrs r7, r3, 16
- str r7, [sp, 0x4]
- lsls r0, 16
- mov r8, r0
- lsrs r0, 16
- mov r9, r0
- ldr r5, =gUnknown_0203CE84
- ldrb r4, [r5, 0x4]
- cmp r4, 0x1
- beq _081AE4F4
- cmp r4, 0x1
- ble _081AE492
- cmp r4, 0x2
- beq _081AE558
-_081AE492:
- mov r0, r12
- bl AddWindow
- strb r0, [r5, 0x5]
- cmp r6, 0x1
- beq _081AE4B0
- cmp r6, 0x2
- bne _081AE4C0
- ldrb r0, [r5, 0x5]
- mov r1, r9
- lsls r2, r1, 24
- lsrs r2, 24
- adds r1, r7, 0
- bl sub_809882C
-_081AE4B0:
- ldrb r0, [r5, 0x5]
- mov r3, r8
- lsrs r2, r3, 20
- lsls r2, 24
- lsrs r2, 24
- ldr r1, [sp, 0x4]
- bl sub_8098858
-_081AE4C0:
- ldr r0, =gMultiuseListMenuTemplate
- adds r2, r0, 0
- ldr r1, [sp]
- ldm r1!, {r3-r5}
- stm r2!, {r3-r5}
- ldm r1!, {r3-r5}
- stm r2!, {r3-r5}
- ldr r4, =gUnknown_0203CE84
- ldrb r1, [r4, 0x5]
- strb r1, [r0, 0x10]
- movs r1, 0
- movs r2, 0
- bl ListMenuInit
- strb r0, [r4, 0x6]
- ldrb r0, [r4, 0x5]
- movs r1, 0x1
- bl CopyWindowToVram
- movs r0, 0x1
- strb r0, [r4, 0x4]
- b _081AE570
- .pool
-_081AE4F4:
- ldrb r0, [r5, 0x6]
- bl ListMenuHandleInputGetItemId
- str r0, [r5]
- ldr r1, =gMain
- ldrh r0, [r1, 0x2E]
- ands r4, r0
- cmp r4, 0
- beq _081AE50A
- movs r0, 0x2
- strb r0, [r5, 0x4]
-_081AE50A:
- ldrh r1, [r1, 0x2E]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _081AE51E
- movs r0, 0x2
- negs r0, r0
- str r0, [r5]
- movs r0, 0x2
- strb r0, [r5, 0x4]
-_081AE51E:
- ldrb r0, [r5, 0x4]
- cmp r0, 0x2
- bne _081AE570
- cmp r6, 0
- bne _081AE534
- ldrb r0, [r5, 0x5]
- bl ClearWindowTilemap
- b _081AE546
- .pool
-_081AE534:
- mov r4, r10
- cmp r4, 0
- blt _081AE546
- cmp r4, 0x2
- bgt _081AE546
- ldrb r0, [r5, 0x5]
- movs r1, 0
- bl sub_819746C
-_081AE546:
- ldr r0, =gUnknown_0203CE84
- ldrb r0, [r0, 0x5]
- movs r1, 0x1
- bl CopyWindowToVram
- b _081AE570
- .pool
-_081AE558:
- ldrb r0, [r5, 0x6]
- movs r1, 0
- movs r2, 0
- bl sub_81AE6C8
- ldrb r0, [r5, 0x5]
- bl RemoveWindow
- movs r0, 0
- strb r0, [r5, 0x4]
- ldr r0, [r5]
- b _081AE574
-_081AE570:
- movs r0, 0x1
- negs r0, r0
-_081AE574:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end DoMysteryGiftListMenu
-
- thumb_func_start ListMenuInit
-@ u8 ListMenuInit(struct ListMenuTemplate *listMenuTemplate, u16 scrollOffset, u16 selectedRow)
-ListMenuInit: @ 81AE584
- push {r4,r5,lr}
- adds r5, r0, 0
- lsls r1, 16
- lsrs r1, 16
- lsls r2, 16
- lsrs r2, 16
- bl ListMenuInitInternal
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldrb r0, [r5, 0x10]
- bl PutWindowTilemap
- ldrb r0, [r5, 0x10]
- movs r1, 0x2
- bl CopyWindowToVram
- adds r0, r4, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end ListMenuInit
-
- thumb_func_start Unused_ListMenuInit2
-@ u8 Unused_ListMenuInit2(struct ListMenuTemplate *listMenuTemplate, int a2, u16 scrollOffset, u16 selectedRow)
-Unused_ListMenuInit2: @ 81AE5B0
- push {r4-r7,lr}
- sub sp, 0x8
- adds r6, r0, 0
- adds r4, r1, 0
- adds r1, r2, 0
- adds r2, r3, 0
- lsls r1, 16
- lsrs r1, 16
- lsls r2, 16
- lsrs r2, 16
- bl ListMenuInitInternal
- lsls r0, 24
- lsrs r7, r0, 24
- ldrb r0, [r4, 0x4]
- cmp r0, 0xFF
- beq _081AE5F0
- adds r5, r4, 0
-_081AE5D4:
- ldrb r0, [r6, 0x10]
- ldrb r1, [r5]
- ldrb r2, [r5, 0x1]
- ldrb r3, [r5, 0x2]
- ldrb r4, [r5, 0x3]
- str r4, [sp]
- ldrb r4, [r5, 0x4]
- str r4, [sp, 0x4]
- bl PutWindowRectTilemapOverridePalette
- adds r5, 0x8
- ldrb r0, [r5, 0x4]
- cmp r0, 0xFF
- bne _081AE5D4
-_081AE5F0:
- ldrb r0, [r6, 0x10]
- movs r1, 0x2
- bl CopyWindowToVram
- adds r0, r7, 0
- add sp, 0x8
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end Unused_ListMenuInit2
-
- thumb_func_start ListMenuHandleInputGetItemId
-@ int ListMenuHandleInputGetItemId(u8 taskId)
-ListMenuHandleInputGetItemId: @ 81AE604
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, =gTasks + 0x8
- adds r3, r1, r0
- ldr r2, =gMain
- ldrh r1, [r2, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _081AE638
- ldrh r0, [r3, 0x18]
- ldrh r1, [r3, 0x1A]
- adds r0, r1
- ldr r1, [r3]
- lsls r0, 3
- adds r0, r1
- ldr r0, [r0, 0x4]
- b _081AE6C2
- .pool
-_081AE638:
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _081AE646
- movs r0, 0x2
- negs r0, r0
- b _081AE6C2
-_081AE646:
- ldrh r1, [r2, 0x30]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _081AE65A
- adds r0, r3, 0
- movs r1, 0x1
- movs r2, 0x1
- movs r3, 0
- b _081AE6BA
-_081AE65A:
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _081AE66A
- adds r0, r3, 0
- movs r1, 0x1
- movs r2, 0x1
- b _081AE6B8
-_081AE66A:
- ldrb r0, [r3, 0x16]
- lsrs r0, 6
- cmp r0, 0x1
- beq _081AE680
- cmp r0, 0x1
- ble _081AE67A
- cmp r0, 0x2
- beq _081AE68C
-_081AE67A:
- movs r2, 0
- movs r0, 0
- b _081AE6A0
-_081AE680:
- movs r0, 0x20
- ands r0, r1
- lsls r0, 16
- lsrs r2, r0, 16
- movs r0, 0x10
- b _081AE69A
-_081AE68C:
- movs r0, 0x80
- lsls r0, 2
- ands r0, r1
- lsls r0, 16
- lsrs r2, r0, 16
- movs r0, 0x80
- lsls r0, 1
-_081AE69A:
- ands r0, r1
- lsls r0, 16
- lsrs r0, 16
-_081AE6A0:
- cmp r2, 0
- beq _081AE6AE
- ldrb r2, [r3, 0xE]
- adds r0, r3, 0
- movs r1, 0x1
- movs r3, 0
- b _081AE6BA
-_081AE6AE:
- cmp r0, 0
- beq _081AE6BE
- ldrb r2, [r3, 0xE]
- adds r0, r3, 0
- movs r1, 0x1
-_081AE6B8:
- movs r3, 0x1
-_081AE6BA:
- bl ListMenuChangeSelection
-_081AE6BE:
- movs r0, 0x1
- negs r0, r0
-_081AE6C2:
- pop {r1}
- bx r1
- thumb_func_end ListMenuHandleInputGetItemId
-
- thumb_func_start sub_81AE6C8
-sub_81AE6C8: @ 81AE6C8
- push {r4,lr}
- adds r3, r1, 0
- lsls r0, 24
- lsrs r0, 24
- adds r4, r0, 0
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- ldr r1, =gTasks + 0x8
- adds r1, r0, r1
- cmp r3, 0
- beq _081AE6E4
- ldrh r0, [r1, 0x18]
- strh r0, [r3]
-_081AE6E4:
- cmp r2, 0
- beq _081AE6EC
- ldrh r0, [r1, 0x1A]
- strh r0, [r2]
-_081AE6EC:
- ldrb r0, [r1, 0x1E]
- cmp r0, 0xFF
- beq _081AE6FC
- ldrb r1, [r1, 0x17]
- lsrs r1, 6
- subs r1, 0x2
- bl ListMenuRemoveCursorObject
-_081AE6FC:
- adds r0, r4, 0
- bl DestroyTask
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81AE6C8
-
- thumb_func_start sub_81AE70C
-sub_81AE70C: @ 81AE70C
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r4, r0, 2
- adds r4, r0
- lsls r4, 3
- ldr r0, =gTasks + 0x8
- adds r4, r0
- ldrb r0, [r4, 0x10]
- ldrb r2, [r4, 0x15]
- lsls r2, 28
- lsrs r1, r2, 4
- orrs r1, r2
- lsrs r1, 24
- bl FillWindowPixelBuffer
- ldrh r1, [r4, 0x18]
- ldrh r3, [r4, 0xE]
- adds r0, r4, 0
- movs r2, 0
- bl ListMenuPrintEntries
- adds r0, r4, 0
- bl ListMenuDrawCursor
- ldrb r0, [r4, 0x10]
- movs r1, 0x2
- bl CopyWindowToVram
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81AE70C
-
- thumb_func_start sub_81AE750
-sub_81AE750: @ 81AE750
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsls r2, 24
- lsrs r2, 24
- lsls r3, 24
- lsls r4, r0, 2
- adds r4, r0
- lsls r4, 3
- ldr r0, =gTasks + 0x8
- adds r4, r0
- lsrs r1, 20
- ldrb r6, [r4, 0x14]
- movs r5, 0xF
- adds r0, r5, 0
- ands r0, r6
- orrs r0, r1
- strb r0, [r4, 0x14]
- ands r2, r5
- ldrb r1, [r4, 0x15]
- movs r0, 0x10
- negs r0, r0
- ands r0, r1
- orrs r0, r2
- lsrs r3, 20
- ands r0, r5
- orrs r0, r3
- strb r0, [r4, 0x15]
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81AE750
-
- thumb_func_start sub_81AE794
-sub_81AE794: @ 81AE794
- push {r4,r5,lr}
- adds r3, r1, 0
- adds r5, r2, 0
- lsls r0, 24
- lsrs r0, 24
- lsls r3, 24
- lsrs r3, 24
- lsls r5, 24
- lsrs r5, 24
- lsls r4, r0, 2
- adds r4, r0
- lsls r4, 3
- ldr r0, =gTasks + 0x8
- adds r4, r0
- ldrb r0, [r4, 0x10]
- movs r1, 0x1
- adds r2, r3, 0
- bl SetWindowAttribute
- ldrb r0, [r4, 0x10]
- movs r1, 0x2
- adds r2, r5, 0
- bl SetWindowAttribute
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81AE794
-
- thumb_func_start sub_81AE7D0
-sub_81AE7D0: @ 81AE7D0
- push {r4-r7,lr}
- sub sp, 0x20
- mov r12, r2
- ldr r5, [sp, 0x34]
- lsls r3, 16
- lsrs r3, 16
- adds r4, r3, 0
- mov r3, sp
- ldm r0!, {r2,r6,r7}
- stm r3!, {r2,r6,r7}
- ldm r0!, {r2,r6,r7}
- stm r3!, {r2,r6,r7}
- mov r0, sp
- movs r3, 0
- strh r1, [r0, 0x18]
- mov r1, r12
- strh r1, [r0, 0x1A]
- strb r3, [r0, 0x1C]
- strb r3, [r0, 0x1D]
- cmp r4, 0x40
- bne _081AE804
- movs r1, 0
- movs r2, 0x1
- movs r3, 0
- bl ListMenuChangeSelection
-_081AE804:
- cmp r4, 0x80
- bne _081AE814
- mov r0, sp
- movs r1, 0
- movs r2, 0x1
- movs r3, 0x1
- bl ListMenuChangeSelection
-_081AE814:
- cmp r5, 0
- beq _081AE81E
- mov r0, sp
- ldrh r0, [r0, 0x18]
- strh r0, [r5]
-_081AE81E:
- ldr r2, [sp, 0x38]
- cmp r2, 0
- beq _081AE82A
- mov r0, sp
- ldrh r0, [r0, 0x1A]
- strh r0, [r2]
-_081AE82A:
- movs r0, 0x1
- negs r0, r0
- add sp, 0x20
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_81AE7D0
-
- thumb_func_start sub_81AE838
-sub_81AE838: @ 81AE838
- push {lr}
- adds r2, r1, 0
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, =gTasks + 0x8
- adds r1, r0
- cmp r2, 0
- beq _081AE856
- ldrh r0, [r1, 0x1A]
- ldrh r1, [r1, 0x18]
- adds r0, r1
- strh r0, [r2]
-_081AE856:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81AE838
-
- thumb_func_start sub_81AE860
-sub_81AE860: @ 81AE860
- push {lr}
- adds r3, r1, 0
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, =gTasks + 0x8
- adds r1, r0
- cmp r3, 0
- beq _081AE87A
- ldrh r0, [r1, 0x18]
- strh r0, [r3]
-_081AE87A:
- cmp r2, 0
- beq _081AE882
- ldrh r0, [r1, 0x1A]
- strh r0, [r2]
-_081AE882:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81AE860
-
- thumb_func_start ListMenuGetYCoordForPrintingArrowCursor
-@ u8 ListMenuGetYCoordForPrintingArrowCursor(u8 taskId)
-ListMenuGetYCoordForPrintingArrowCursor: @ 81AE88C
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r4, r0, 2
- adds r4, r0
- lsls r4, 3
- ldr r0, =gTasks + 0x8
- adds r4, r0
- ldrb r0, [r4, 0x17]
- lsls r0, 26
- lsrs r0, 26
- movs r1, 0x1
- bl GetFontAttribute
- ldrb r1, [r4, 0x16]
- lsls r1, 26
- lsrs r1, 29
- adds r0, r1
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r4, 0x1A]
- adds r2, r1, 0
- muls r2, r0
- adds r1, r2, 0
- ldrb r0, [r4, 0x14]
- lsls r0, 28
- lsrs r0, 28
- adds r0, r1
- lsls r0, 16
- lsrs r0, 16
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end ListMenuGetYCoordForPrintingArrowCursor
-
- thumb_func_start ListMenuInitInternal
-@ u8 ListMenuInitInternal(struct ListMenuTemplate *listMenuTemplate, u16 scrollOffset, u16 selectedRow)
-ListMenuInitInternal: @ 81AE8D4
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r4, r0, 0
- adds r5, r1, 0
- adds r6, r2, 0
- lsls r5, 16
- lsrs r5, 16
- lsls r6, 16
- lsrs r6, 16
- ldr r0, =ListMenuDummyTask
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- lsls r0, 2
- add r0, r8
- lsls r0, 3
- ldr r1, =gTasks + 0x8
- adds r7, r0, r1
- adds r0, r7, 0
- ldm r4!, {r1-r3}
- stm r0!, {r1-r3}
- ldm r4!, {r1-r3}
- stm r0!, {r1-r3}
- movs r1, 0
- strh r5, [r7, 0x18]
- strh r6, [r7, 0x1A]
- strb r1, [r7, 0x1C]
- strb r1, [r7, 0x1D]
- movs r0, 0xFF
- strb r0, [r7, 0x1E]
- strb r1, [r7, 0x1F]
- ldr r3, =gUnknown_03006300
- ldrb r1, [r7, 0x14]
- movs r5, 0xF
- lsrs r1, 4
- ldrb r4, [r3]
- movs r2, 0x10
- negs r2, r2
- adds r0, r2, 0
- ands r0, r4
- orrs r0, r1
- strb r0, [r3]
- ldrb r1, [r7, 0x15]
- lsls r1, 28
- lsrs r1, 24
- ands r0, r5
- orrs r0, r1
- strb r0, [r3]
- ldrb r0, [r7, 0x15]
- lsrs r0, 4
- ands r5, r0
- ldrb r0, [r3, 0x1]
- ands r2, r0
- orrs r2, r5
- strb r2, [r3, 0x1]
- ldrb r1, [r7, 0x16]
- lsls r1, 29
- lsrs r1, 17
- ldr r0, [r3]
- ldr r2, =0xfffc0fff
- ands r0, r2
- orrs r0, r1
- str r0, [r3]
- ldrb r0, [r7, 0x17]
- lsls r0, 26
- lsrs r0, 26
- strb r0, [r3, 0x3]
- ldrh r0, [r7, 0xC]
- ldrh r1, [r7, 0xE]
- cmp r0, r1
- bcs _081AE96C
- strh r0, [r7, 0xE]
-_081AE96C:
- ldrb r0, [r7, 0x10]
- ldrb r2, [r7, 0x15]
- lsls r2, 28
- lsrs r1, r2, 4
- orrs r1, r2
- lsrs r1, 24
- bl FillWindowPixelBuffer
- ldrh r1, [r7, 0x18]
- ldrh r3, [r7, 0xE]
- adds r0, r7, 0
- movs r2, 0
- bl ListMenuPrintEntries
- adds r0, r7, 0
- bl ListMenuDrawCursor
- adds r0, r7, 0
- movs r1, 0x1
- bl ListMenuCallSelectionChangedCallback
- mov r0, r8
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- .pool
- thumb_func_end ListMenuInitInternal
-
- thumb_func_start ListMenuPrint
-@ void ListMenuPrint(struct ListMenu *listMenu, u8 *str, u8 x, u8 y)
-ListMenuPrint: @ 81AE9B4
- push {r4-r7,lr}
- sub sp, 0x18
- adds r4, r0, 0
- adds r6, r1, 0
- lsls r2, 24
- lsrs r7, r2, 24
- lsls r3, 24
- lsrs r3, 24
- mov r12, r3
- ldr r5, =gUnknown_03006300
- ldrb r1, [r5, 0x3]
- movs r0, 0x80
- ands r0, r1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0
- beq _081AEA20
- add r1, sp, 0x14
- ldr r2, [r5]
- lsls r0, r2, 24
- lsrs r0, 28
- movs r3, 0
- strb r0, [r1]
- lsls r0, r2, 28
- lsrs r0, 28
- strb r0, [r1, 0x1]
- lsls r0, r2, 20
- lsrs r0, 28
- strb r0, [r1, 0x2]
- ldrb r0, [r4, 0x10]
- lsls r1, r2, 1
- lsrs r1, 25
- lsls r2, 14
- lsrs r2, 26
- str r2, [sp]
- str r3, [sp, 0x4]
- add r2, sp, 0x14
- str r2, [sp, 0x8]
- movs r2, 0x1
- negs r2, r2
- str r2, [sp, 0xC]
- str r6, [sp, 0x10]
- adds r2, r7, 0
- mov r3, r12
- bl AddTextPrinterParameterized2
- ldrb r1, [r5, 0x3]
- movs r0, 0x7F
- ands r0, r1
- strb r0, [r5, 0x3]
- b _081AEA5E
- .pool
-_081AEA20:
- add r2, sp, 0x14
- ldrb r1, [r4, 0x15]
- lsls r0, r1, 28
- lsrs r0, 28
- strb r0, [r2]
- ldrb r0, [r4, 0x14]
- lsrs r0, 4
- strb r0, [r2, 0x1]
- adds r0, r2, 0
- lsls r1, 24
- lsrs r1, 28
- strb r1, [r0, 0x2]
- ldrb r0, [r4, 0x10]
- ldrb r1, [r4, 0x17]
- lsls r1, 26
- lsrs r1, 26
- ldrb r2, [r4, 0x16]
- lsls r2, 29
- lsrs r2, 29
- str r2, [sp]
- str r3, [sp, 0x4]
- add r2, sp, 0x14
- str r2, [sp, 0x8]
- movs r2, 0x1
- negs r2, r2
- str r2, [sp, 0xC]
- str r6, [sp, 0x10]
- adds r2, r7, 0
- mov r3, r12
- bl AddTextPrinterParameterized2
-_081AEA5E:
- add sp, 0x18
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end ListMenuPrint
-
- thumb_func_start ListMenuPrintEntries
-@ void ListMenuPrintEntries(struct ListMenu *listMenu, u16 startIndex, u16 yOffset, u16 count)
-ListMenuPrintEntries: @ 81AEA68
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- adds r4, r0, 0
- lsls r1, 16
- lsrs r1, 16
- mov r9, r1
- lsls r2, 16
- lsrs r2, 16
- str r2, [sp]
- lsls r3, 16
- lsrs r3, 16
- mov r10, r3
- ldrb r0, [r4, 0x17]
- lsls r0, 26
- lsrs r0, 26
- movs r1, 0x1
- bl GetFontAttribute
- ldrb r1, [r4, 0x16]
- lsls r1, 26
- lsrs r1, 29
- adds r0, r1
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0x4]
- movs r0, 0
- mov r8, r0
- cmp r8, r10
- bge _081AEB10
-_081AEAAA:
- ldr r0, [r4]
- mov r2, r9
- lsls r1, r2, 3
- adds r0, r1, r0
- ldr r2, [r0, 0x4]
- movs r0, 0x3
- negs r0, r0
- adds r5, r1, 0
- cmp r2, r0
- beq _081AEAC2
- ldrb r6, [r4, 0x12]
- b _081AEAC4
-_081AEAC2:
- ldrb r6, [r4, 0x11]
-_081AEAC4:
- ldr r0, [sp]
- add r0, r8
- ldr r2, [sp, 0x4]
- adds r1, r0, 0
- muls r1, r2
- ldrb r0, [r4, 0x14]
- lsls r0, 28
- lsrs r0, 28
- adds r0, r1
- lsls r0, 24
- lsrs r2, r0, 24
- adds r7, r2, 0
- ldr r3, [r4, 0x8]
- cmp r3, 0
- beq _081AEAEE
- ldrb r0, [r4, 0x10]
- ldr r1, [r4]
- adds r1, r5, r1
- ldr r1, [r1, 0x4]
- bl _call_via_r3
-_081AEAEE:
- ldr r0, [r4]
- adds r0, r5, r0
- ldr r1, [r0]
- adds r0, r4, 0
- adds r2, r6, 0
- adds r3, r7, 0
- bl ListMenuPrint
- mov r0, r9
- adds r0, 0x1
- lsls r0, 16
- lsrs r0, 16
- mov r9, r0
- movs r0, 0x1
- add r8, r0
- cmp r8, r10
- blt _081AEAAA
-_081AEB10:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end ListMenuPrintEntries
-
- thumb_func_start ListMenuDrawCursor
-@ void ListMenuDrawCursor(struct ListMenu *listMenu)
-ListMenuDrawCursor: @ 81AEB20
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r6, r0, 0
- ldrb r0, [r6, 0x17]
- lsls r0, 26
- lsrs r0, 26
- movs r1, 0x1
- bl GetFontAttribute
- ldrb r1, [r6, 0x16]
- lsls r1, 26
- lsrs r1, 29
- adds r0, r1
- lsls r0, 24
- lsrs r0, 24
- ldrb r1, [r6, 0x13]
- mov r8, r1
- ldrh r1, [r6, 0x1A]
- muls r1, r0
- ldrb r0, [r6, 0x14]
- lsls r0, 28
- lsrs r0, 28
- adds r0, r1
- lsls r0, 24
- lsrs r7, r0, 24
- ldrb r0, [r6, 0x17]
- lsrs r0, 6
- cmp r0, 0x1
- beq _081AEC0C
- cmp r0, 0x1
- bgt _081AEB66
- cmp r0, 0
- beq _081AEB70
- b _081AEC0C
-_081AEB66:
- cmp r0, 0x2
- beq _081AEB84
- cmp r0, 0x3
- beq _081AEBCC
- b _081AEC0C
-_081AEB70:
- ldr r1, =gText_SelectorArrow2
- adds r0, r6, 0
- mov r2, r8
- adds r3, r7, 0
- bl ListMenuPrint
- b _081AEC0C
- .pool
-_081AEB84:
- ldrb r0, [r6, 0x1E]
- cmp r0, 0xFF
- bne _081AEB94
- adds r0, r6, 0
- movs r1, 0
- bl ListMenuAddCursorObject
- strb r0, [r6, 0x1E]
-_081AEB94:
- ldrb r5, [r6, 0x1E]
- ldrb r0, [r6, 0x10]
- movs r1, 0x1
- bl GetWindowAttribute
- adds r4, r0, 0
- lsls r4, 19
- ldr r0, =0xffff0000
- adds r4, r0
- lsrs r4, 16
- ldrb r0, [r6, 0x10]
- movs r1, 0x2
- bl GetWindowAttribute
- adds r2, r0, 0
- lsls r2, 3
- adds r2, r7
- subs r2, 0x1
- lsls r2, 16
- lsrs r2, 16
- adds r0, r5, 0
- adds r1, r4, 0
- movs r3, 0
- bl ListMenuUpdateCursorObject
- b _081AEC0C
- .pool
-_081AEBCC:
- ldrb r0, [r6, 0x1E]
- cmp r0, 0xFF
- bne _081AEBDC
- adds r0, r6, 0
- movs r1, 0x1
- bl ListMenuAddCursorObject
- strb r0, [r6, 0x1E]
-_081AEBDC:
- ldrb r5, [r6, 0x1E]
- ldrb r0, [r6, 0x10]
- movs r1, 0x1
- bl GetWindowAttribute
- adds r4, r0, 0
- lsls r4, 3
- add r4, r8
- lsls r4, 16
- lsrs r4, 16
- ldrb r0, [r6, 0x10]
- movs r1, 0x2
- bl GetWindowAttribute
- adds r2, r0, 0
- lsls r2, 3
- adds r2, r7
- lsls r2, 16
- lsrs r2, 16
- adds r0, r5, 0
- adds r1, r4, 0
- movs r3, 0x1
- bl ListMenuUpdateCursorObject
-_081AEC0C:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end ListMenuDrawCursor
-
- thumb_func_start ListMenuAddCursorObject
-ListMenuAddCursorObject: @ 81AEC18
- push {r4,r5,lr}
- sub sp, 0xC
- adds r4, r0, 0
- adds r5, r1, 0
- mov r1, sp
- movs r0, 0
- strb r0, [r1]
- movs r0, 0xA0
- strb r0, [r1, 0x1]
- ldrb r0, [r4, 0x10]
- movs r1, 0x3
- bl GetWindowAttribute
- mov r1, sp
- lsls r0, 3
- adds r0, 0x2
- strh r0, [r1, 0x2]
- ldrb r0, [r4, 0x17]
- lsls r0, 26
- lsrs r0, 26
- movs r1, 0x1
- bl GetFontAttribute
- mov r1, sp
- lsls r0, 24
- lsrs r0, 24
- adds r0, 0x2
- strh r0, [r1, 0x4]
- movs r0, 0x80
- lsls r0, 7
- strh r0, [r1, 0x6]
- ldr r0, =0x0000ffff
- strh r0, [r1, 0x8]
- movs r0, 0xF
- strb r0, [r1, 0xA]
- mov r0, sp
- adds r1, r5, 0
- bl ListMenuAddCursorObjectInternal
- lsls r0, 24
- lsrs r0, 24
- add sp, 0xC
- pop {r4,r5}
- pop {r1}
- bx r1
- .pool
- thumb_func_end ListMenuAddCursorObject
-
- thumb_func_start ListMenuErasePrintedCursor
-ListMenuErasePrintedCursor: @ 81AEC78
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x8
- adds r7, r0, 0
- lsls r1, 16
- lsrs r1, 16
- mov r8, r1
- ldrb r1, [r7, 0x17]
- lsrs r0, r1, 6
- cmp r0, 0
- bne _081AECF4
- lsls r0, r1, 26
- lsrs r0, 26
- movs r1, 0x1
- bl GetFontAttribute
- adds r4, r0, 0
- ldrb r0, [r7, 0x16]
- lsls r0, 26
- lsrs r0, 29
- adds r4, r0
- lsls r4, 24
- lsrs r4, 24
- ldrb r0, [r7, 0x17]
- lsls r0, 26
- lsrs r0, 26
- movs r1, 0
- bl GetMenuCursorDimensionByFont
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- ldrb r0, [r7, 0x17]
- lsls r0, 26
- lsrs r0, 26
- movs r1, 0x1
- bl GetMenuCursorDimensionByFont
- lsls r0, 24
- lsrs r0, 24
- ldrb r6, [r7, 0x10]
- ldrb r2, [r7, 0x15]
- lsls r2, 28
- lsrs r1, r2, 4
- orrs r1, r2
- lsrs r1, 24
- ldrb r2, [r7, 0x13]
- mov r3, r8
- muls r3, r4
- adds r4, r3, 0
- ldrb r3, [r7, 0x14]
- lsls r3, 28
- lsrs r3, 28
- adds r3, r4
- lsls r3, 16
- lsrs r3, 16
- str r5, [sp]
- str r0, [sp, 0x4]
- adds r0, r6, 0
- bl FillWindowPixelRect
-_081AECF4:
- add sp, 0x8
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end ListMenuErasePrintedCursor
-
- thumb_func_start ListMenuUpdateSelectedRowIndexAndScrollOffset
-@ u8 ListMenuUpdateSelectedRowIndexAndScrollOffset(int, bool8 movingDown)
-ListMenuUpdateSelectedRowIndexAndScrollOffset: @ 81AED00
- push {r4-r6,lr}
- adds r4, r0, 0
- lsls r1, 24
- ldrh r3, [r4, 0x1A]
- ldrh r5, [r4, 0x18]
- cmp r1, 0
- bne _081AED74
- ldrh r0, [r4, 0xE]
- cmp r0, 0x1
- bne _081AED18
- movs r2, 0
- b _081AED2A
-_081AED18:
- ldrh r0, [r4, 0xE]
- lsrs r2, r0, 1
- movs r1, 0x1
- ands r1, r0
- adds r2, r1
- subs r0, r2
- subs r0, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
-_081AED2A:
- cmp r5, 0
- bne _081AED50
- cmp r3, 0
- beq _081AEDB6
- ldr r1, [r4]
- movs r2, 0x3
- negs r2, r2
-_081AED38:
- subs r0, r3, 0x1
- lsls r0, 16
- lsrs r3, r0, 16
- adds r0, r5, r3
- lsls r0, 3
- adds r0, r1
- ldr r0, [r0, 0x4]
- cmp r0, r2
- bne _081AEDBA
- cmp r3, 0
- bne _081AED38
- b _081AEDB6
-_081AED50:
- cmp r3, r2
- bls _081AED70
- ldr r1, [r4]
- movs r6, 0x3
- negs r6, r6
-_081AED5A:
- subs r0, r3, 0x1
- lsls r0, 16
- lsrs r3, r0, 16
- adds r0, r5, r3
- lsls r0, 3
- adds r0, r1
- ldr r0, [r0, 0x4]
- cmp r0, r6
- bne _081AEDBA
- cmp r3, r2
- bhi _081AED5A
-_081AED70:
- subs r0, r5, 0x1
- b _081AEDE2
-_081AED74:
- ldrh r0, [r4, 0xE]
- cmp r0, 0x1
- bne _081AED7E
- movs r2, 0
- b _081AED88
-_081AED7E:
- ldrh r0, [r4, 0xE]
- lsrs r2, r0, 1
- movs r1, 0x1
- ands r1, r0
- adds r2, r1
-_081AED88:
- adds r1, r0, 0
- ldrh r0, [r4, 0xC]
- subs r0, r1
- cmp r5, r0
- bne _081AEDC0
- subs r0, r1, 0x1
- cmp r3, r0
- bge _081AEDB6
- ldr r2, [r4]
- movs r6, 0x3
- negs r6, r6
- adds r1, r0, 0
-_081AEDA0:
- adds r0, r3, 0x1
- lsls r0, 16
- lsrs r3, r0, 16
- adds r0, r5, r3
- lsls r0, 3
- adds r0, r2
- ldr r0, [r0, 0x4]
- cmp r0, r6
- bne _081AEDBA
- cmp r3, r1
- blt _081AEDA0
-_081AEDB6:
- movs r0, 0
- b _081AEDE8
-_081AEDBA:
- strh r3, [r4, 0x1A]
- movs r0, 0x1
- b _081AEDE8
-_081AEDC0:
- cmp r3, r2
- bcs _081AEDE0
- ldr r1, [r4]
- movs r6, 0x3
- negs r6, r6
-_081AEDCA:
- adds r0, r3, 0x1
- lsls r0, 16
- lsrs r3, r0, 16
- adds r0, r5, r3
- lsls r0, 3
- adds r0, r1
- ldr r0, [r0, 0x4]
- cmp r0, r6
- bne _081AEDBA
- cmp r3, r2
- bcc _081AEDCA
-_081AEDE0:
- adds r0, r5, 0x1
-_081AEDE2:
- strh r2, [r4, 0x1A]
- strh r0, [r4, 0x18]
- movs r0, 0x2
-_081AEDE8:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end ListMenuUpdateSelectedRowIndexAndScrollOffset
-
- thumb_func_start ListMenuScroll
-@ void ListMenuScroll(struct ListMenu *listMenu, int a2, bool8 movingDown)
-ListMenuScroll: @ 81AEDF0
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x8
- adds r6, r0, 0
- lsls r1, 24
- lsrs r5, r1, 24
- adds r7, r5, 0
- lsls r2, 24
- lsrs r2, 24
- mov r8, r2
- ldrh r0, [r6, 0xE]
- cmp r5, r0
- bcc _081AEE2A
- ldrb r0, [r6, 0x10]
- ldrb r2, [r6, 0x15]
- lsls r2, 28
- lsrs r1, r2, 4
- orrs r1, r2
- lsrs r1, 24
- bl FillWindowPixelBuffer
- ldrh r1, [r6, 0x18]
- ldrh r3, [r6, 0xE]
- adds r0, r6, 0
- movs r2, 0
- bl ListMenuPrintEntries
- b _081AEF1A
-_081AEE2A:
- ldrb r0, [r6, 0x17]
- lsls r0, 26
- lsrs r0, 26
- movs r1, 0x1
- bl GetFontAttribute
- ldrb r1, [r6, 0x16]
- lsls r1, 26
- lsrs r1, 29
- adds r0, r1
- lsls r0, 24
- lsrs r4, r0, 24
- mov r1, r8
- cmp r1, 0
- bne _081AEEBC
- ldrb r0, [r6, 0x10]
- adds r2, r5, 0
- muls r2, r4
- lsls r2, 24
- lsrs r2, 24
- ldrb r1, [r6, 0x15]
- lsls r1, 28
- lsrs r3, r1, 4
- orrs r3, r1
- lsrs r3, 24
- movs r1, 0x1
- bl ScrollWindow
- ldrh r1, [r6, 0x18]
- adds r0, r6, 0
- movs r2, 0
- adds r3, r5, 0
- bl ListMenuPrintEntries
- ldrh r0, [r6, 0xE]
- adds r1, r0, 0
- muls r1, r4
- adds r0, r1, 0
- ldrb r4, [r6, 0x14]
- lsls r4, 28
- lsrs r4, 28
- adds r4, r0
- lsls r4, 16
- lsrs r4, 16
- ldrb r0, [r6, 0x10]
- movs r1, 0x3
- bl GetWindowAttribute
- adds r5, r0, 0
- lsls r5, 19
- lsrs r5, 16
- ldrb r0, [r6, 0x10]
- movs r1, 0x4
- bl GetWindowAttribute
- lsls r0, 3
- subs r0, r4
- lsls r0, 16
- lsrs r0, 16
- ldrb r3, [r6, 0x10]
- ldrb r2, [r6, 0x15]
- lsls r2, 28
- lsrs r1, r2, 4
- orrs r1, r2
- lsrs r1, 24
- str r5, [sp]
- str r0, [sp, 0x4]
- adds r0, r3, 0
- movs r2, 0
- adds r3, r4, 0
- bl FillWindowPixelRect
- b _081AEF1A
-_081AEEBC:
- ldrb r0, [r6, 0x10]
- adds r2, r7, 0
- muls r2, r4
- lsls r2, 24
- lsrs r2, 24
- ldrb r1, [r6, 0x15]
- lsls r1, 28
- lsrs r3, r1, 4
- orrs r3, r1
- lsrs r3, 24
- movs r1, 0
- bl ScrollWindow
- ldrh r2, [r6, 0xE]
- subs r2, r7
- ldrh r1, [r6, 0x18]
- adds r1, r2
- lsls r1, 16
- lsrs r1, 16
- lsls r2, 16
- lsrs r2, 16
- adds r0, r6, 0
- adds r3, r7, 0
- bl ListMenuPrintEntries
- ldrb r0, [r6, 0x10]
- movs r1, 0x3
- bl GetWindowAttribute
- lsls r0, 19
- lsrs r0, 16
- ldrb r3, [r6, 0x10]
- ldrb r2, [r6, 0x15]
- lsls r2, 28
- lsrs r1, r2, 4
- orrs r1, r2
- lsrs r1, 24
- str r0, [sp]
- ldrb r0, [r6, 0x14]
- lsls r0, 28
- lsrs r0, 28
- str r0, [sp, 0x4]
- adds r0, r3, 0
- movs r2, 0
- movs r3, 0
- bl FillWindowPixelRect
-_081AEF1A:
- add sp, 0x8
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end ListMenuScroll
-
- thumb_func_start ListMenuChangeSelection
-@ bool8 ListMenuChangeSelection(struct ListMenu *listMenu, bool8 updateCursorAndCallCallback, u8 count, bool8 movingDown)
-ListMenuChangeSelection: @ 81AEF28
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- adds r4, r0, 0
- lsls r1, 24
- lsrs r1, 24
- str r1, [sp]
- lsls r2, 24
- lsrs r2, 24
- mov r8, r2
- lsls r3, 24
- lsrs r3, 24
- mov r9, r3
- ldrh r0, [r4, 0x1A]
- mov r10, r0
- movs r7, 0
- movs r5, 0
- movs r0, 0
- cmp r7, r8
- bcs _081AEF90
-_081AEF56:
- adds r6, r0, 0x1
- b _081AEF76
-_081AEF5A:
- adds r0, r7, 0x1
- lsls r0, 24
- lsrs r7, r0, 24
- ldrh r0, [r4, 0x18]
- ldrh r1, [r4, 0x1A]
- adds r0, r1
- ldr r1, [r4]
- lsls r0, 3
- adds r0, r1
- ldr r1, [r0, 0x4]
- movs r0, 0x3
- negs r0, r0
- cmp r1, r0
- bne _081AEF88
-_081AEF76:
- adds r0, r4, 0
- mov r1, r9
- bl ListMenuUpdateSelectedRowIndexAndScrollOffset
- lsls r0, 24
- lsrs r0, 24
- orrs r5, r0
- cmp r0, 0x2
- beq _081AEF5A
-_081AEF88:
- lsls r0, r6, 24
- lsrs r0, 24
- cmp r0, r8
- bcc _081AEF56
-_081AEF90:
- ldr r0, [sp]
- cmp r0, 0
- beq _081AEFEE
- cmp r5, 0x1
- beq _081AEFA6
- cmp r5, 0x1
- ble _081AEFA2
- cmp r5, 0x3
- ble _081AEFC6
-_081AEFA2:
- movs r0, 0x1
- b _081AEFF0
-_081AEFA6:
- adds r0, r4, 0
- mov r1, r10
- bl ListMenuErasePrintedCursor
- adds r0, r4, 0
- bl ListMenuDrawCursor
- adds r0, r4, 0
- movs r1, 0
- bl ListMenuCallSelectionChangedCallback
- ldrb r0, [r4, 0x10]
- movs r1, 0x2
- bl CopyWindowToVram
- b _081AEFEE
-_081AEFC6:
- adds r0, r4, 0
- mov r1, r10
- bl ListMenuErasePrintedCursor
- adds r0, r4, 0
- adds r1, r7, 0
- mov r2, r9
- bl ListMenuScroll
- adds r0, r4, 0
- bl ListMenuDrawCursor
- adds r0, r4, 0
- movs r1, 0
- bl ListMenuCallSelectionChangedCallback
- ldrb r0, [r4, 0x10]
- movs r1, 0x2
- bl CopyWindowToVram
-_081AEFEE:
- movs r0, 0
-_081AEFF0:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end ListMenuChangeSelection
-
- thumb_func_start ListMenuCallSelectionChangedCallback
-@ void ListMenuCallSelectionChangedCallback(struct ListMenu *listMenu, u8 a2)
-ListMenuCallSelectionChangedCallback: @ 81AF000
- push {r4,lr}
- adds r2, r0, 0
- lsls r1, 24
- lsrs r4, r1, 24
- ldr r3, [r2, 0x4]
- cmp r3, 0
- beq _081AF022
- ldrh r0, [r2, 0x18]
- ldrh r1, [r2, 0x1A]
- adds r0, r1
- ldr r1, [r2]
- lsls r0, 3
- adds r0, r1
- ldr r0, [r0, 0x4]
- adds r1, r4, 0
- bl _call_via_r3
-_081AF022:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end ListMenuCallSelectionChangedCallback
-
- thumb_func_start sub_81AF028
-sub_81AF028: @ 81AF028
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsls r2, 24
- lsrs r2, 24
- ldr r6, =gUnknown_03006300
- movs r5, 0xF
- ands r0, r5
- ldrb r3, [r6]
- mov r8, r3
- movs r4, 0x10
- negs r4, r4
- adds r3, r4, 0
- mov r7, r8
- ands r3, r7
- orrs r3, r0
- lsrs r1, 20
- ands r3, r5
- orrs r3, r1
- strb r3, [r6]
- ands r2, r5
- ldrb r0, [r6, 0x1]
- ands r4, r0
- orrs r4, r2
- strb r4, [r6, 0x1]
- ldrb r0, [r6, 0x3]
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r6, 0x3]
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81AF028
-
- thumb_func_start sub_81AF078
-sub_81AF078: @ 81AF078
- push {lr}
- lsls r1, 24
- cmp r1, 0
- bne _081AF086
- movs r0, 0x5
- bl PlaySE
-_081AF086:
- pop {r0}
- bx r0
- thumb_func_end sub_81AF078
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/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/main_menu.s b/asm/main_menu.s
deleted file mode 100644
index 9c6cd1253..000000000
--- a/asm/main_menu.s
+++ /dev/null
@@ -1,5477 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start CB2_MainMenu
-@ void CB2_MainMenu()
-CB2_MainMenu: @ 802F6B0
- push {lr}
- bl RunTasks
- bl AnimateSprites
- bl BuildOamBuffer
- bl UpdatePaletteFade
- pop {r0}
- bx r0
- thumb_func_end CB2_MainMenu
-
- thumb_func_start VBlankCB_MainMenu
-@ void VBlankCB_MainMenu()
-VBlankCB_MainMenu: @ 802F6C8
- push {lr}
- bl LoadOam
- bl ProcessSpriteCopyRequests
- bl TransferPlttBuffer
- pop {r0}
- bx r0
- thumb_func_end VBlankCB_MainMenu
-
- thumb_func_start CB2_InitMainMenu
-@ void CB2_InitMainMenu()
-CB2_InitMainMenu: @ 802F6DC
- push {lr}
- movs r0, 0
- bl InitMainMenu
- pop {r0}
- bx r0
- thumb_func_end CB2_InitMainMenu
-
- thumb_func_start CB2_ReinitMainMenu
-@ void CB2_ReinitMainMenu()
-CB2_ReinitMainMenu: @ 802F6E8
- push {lr}
- movs r0, 0x1
- bl InitMainMenu
- pop {r0}
- bx r0
- thumb_func_end CB2_ReinitMainMenu
-
- thumb_func_start InitMainMenu
-@ void InitMainMenu(bool8 affects_palette_maybe)
-InitMainMenu: @ 802F6F4
- push {r4,r5,lr}
- sub sp, 0xC
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0
- bl SetVBlankCallback
- movs r0, 0
- movs r1, 0
- bl SetGpuReg
- movs r0, 0xC
- movs r1, 0
- bl SetGpuReg
- movs r0, 0xA
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x8
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x18
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x1A
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x14
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x16
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x10
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x12
- movs r1, 0
- bl SetGpuReg
- add r1, sp, 0x4
- movs r0, 0
- strh r0, [r1]
- ldr r1, =0x040000d4
- add r0, sp, 0x4
- str r0, [r1]
- movs r0, 0xC0
- lsls r0, 19
- str r0, [r1, 0x4]
- ldr r0, =0x8100c000
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- movs r5, 0
- str r5, [sp, 0x8]
- add r0, sp, 0x8
- str r0, [r1]
- movs r0, 0xE0
- lsls r0, 19
- str r0, [r1, 0x4]
- ldr r0, =0x85000100
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- add r0, sp, 0x4
- strh r5, [r0]
- str r0, [r1]
- ldr r0, =0x05000002
- str r0, [r1, 0x4]
- ldr r0, =0x810001ff
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- bl ResetPaletteFade
- ldr r0, =gMainMenuBgPal
- movs r1, 0
- movs r2, 0x20
- bl LoadPalette
- ldr r0, =gMainMenuTextPal
- movs r1, 0xF0
- movs r2, 0x20
- bl LoadPalette
- bl ScanlineEffect_Stop
- bl ResetTasks
- bl ResetSpriteData
- bl FreeAllSpritePalettes
- cmp r4, 0
- beq _0802F7EC
- movs r0, 0x1
- negs r0, r0
- str r5, [sp]
- movs r1, 0
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- b _0802F7FE
- .pool
-_0802F7EC:
- movs r0, 0x1
- negs r0, r0
- ldr r1, =0x0000ffff
- str r1, [sp]
- movs r1, 0
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
-_0802F7FE:
- movs r0, 0
- bl ResetBgsAndClearDma3BusyFlags
- ldr r1, =gUnknown_082FF0E8
- movs r0, 0
- movs r2, 0x2
- bl InitBgsFromTemplates
- movs r0, 0
- movs r1, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- movs r0, 0x1
- movs r1, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0x1
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- ldr r0, =gUnknown_082FF038
- bl InitWindows
- bl DeactivateAllTextPrinters
- ldr r1, =0x000001d5
- movs r0, 0
- bl LoadMainMenuWindowFrameTiles
- movs r0, 0x40
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x44
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x48
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x4A
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x50
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x52
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x54
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x1
- bl EnableInterrupts
- ldr r0, =VBlankCB_MainMenu
- bl SetVBlankCallback
- ldr r0, =CB2_MainMenu
- bl SetMainCallback2
- movs r1, 0xC1
- lsls r1, 6
- movs r0, 0
- bl SetGpuReg
- movs r0, 0
- bl ShowBg
- movs r0, 0x1
- bl HideBg
- ldr r0, =Task_MainMenuCheckSaveFile
- movs r1, 0
- bl CreateTask
- movs r0, 0
- add sp, 0xC
- pop {r4,r5}
- pop {r1}
- bx r1
- .pool
- thumb_func_end InitMainMenu
-
- thumb_func_start Task_MainMenuCheckSaveFile
-@ void Task_MainMenuCheckSaveFile(u8 taskId)
-Task_MainMenuCheckSaveFile: @ 802F8D8
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r0, r6, 2
- adds r0, r6
- lsls r7, r0, 3
- ldr r0, =gTasks + 0x8
- mov r8, r0
- adds r4, r7, r0
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0
- beq _0802F900
- b _0802FA4E
-_0802F900:
- movs r0, 0x40
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x44
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x48
- movs r1, 0x11
- bl SetGpuReg
- movs r0, 0x4A
- movs r1, 0x31
- bl SetGpuReg
- movs r0, 0x50
- movs r1, 0xC1
- bl SetGpuReg
- movs r0, 0x52
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x54
- movs r1, 0x7
- bl SetGpuReg
- bl sub_80093CC
- lsls r0, 24
- cmp r0, 0
- beq _0802F946
- movs r0, 0x1
- strh r0, [r4, 0x1E]
-_0802F946:
- ldr r0, =gSaveFileStatus
- ldrh r0, [r0]
- cmp r0, 0x2
- beq _0802F990
- cmp r0, 0x2
- bgt _0802F968
- cmp r0, 0
- beq _0802F9D0
- cmp r0, 0x1
- beq _0802F972
- b _0802F9D0
- .pool
-_0802F968:
- cmp r0, 0x4
- beq _0802F9EC
- cmp r0, 0xFF
- beq _0802F9A4
- b _0802F9D0
-_0802F972:
- strh r0, [r4]
- bl IsMysteryGiftEnabled
- cmp r0, 0
- beq _0802F982
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
-_0802F982:
- mov r0, r8
- subs r0, 0x8
- adds r0, r7, r0
- ldr r1, =Task_MainMenuCheckBattery
- b _0802F9FC
- .pool
-_0802F990:
- ldr r0, =gText_SaveFileErased
- bl CreateMainMenuErrorWindow
- strh r5, [r4]
- mov r0, r8
- subs r0, 0x8
- adds r0, r7, r0
- b _0802F9FA
- .pool
-_0802F9A4:
- ldr r0, =gText_SaveFileCorrupted
- bl CreateMainMenuErrorWindow
- mov r0, r8
- subs r0, 0x8
- adds r0, r7, r0
- ldr r1, =Task_WaitForSaveFileErrorWindow
- str r1, [r0]
- movs r0, 0x1
- strh r0, [r4]
- bl IsMysteryGiftEnabled
- cmp r0, 0x1
- bne _0802F9FE
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
- b _0802F9FE
- .pool
-_0802F9D0:
- movs r0, 0
- strh r0, [r4]
- ldr r1, =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r0, r1
- ldr r1, =Task_MainMenuCheckBattery
- b _0802F9FC
- .pool
-_0802F9EC:
- ldr r0, =gJPText_No1MSubCircuit
- bl CreateMainMenuErrorWindow
- mov r0, r8
- subs r0, 0x8
- adds r0, r7, r0
- strh r5, [r0, 0x8]
-_0802F9FA:
- ldr r1, =Task_WaitForSaveFileErrorWindow
-_0802F9FC:
- str r1, [r0]
-_0802F9FE:
- ldr r2, =gUnknown_02022D06
- ldrh r1, [r2]
- movs r0, 0x80
- lsls r0, 8
- ands r0, r1
- cmp r0, 0
- beq _0802FA3E
- movs r1, 0
- ldrsh r0, [r4, r1]
- cmp r0, 0x2
- beq _0802FA36
- cmp r0, 0x2
- ble _0802FA2C
- cmp r0, 0x3
- beq _0802FA3A
- b _0802FA3E
- .pool
-_0802FA2C:
- cmp r0, 0
- blt _0802FA3E
- ldrh r0, [r4]
- adds r0, 0x1
- b _0802FA3C
-_0802FA36:
- movs r0, 0x3
- b _0802FA3C
-_0802FA3A:
- movs r0, 0x4
-_0802FA3C:
- strh r0, [r2]
-_0802FA3E:
- ldrh r1, [r2]
- ldr r0, =0x00007fff
- ands r0, r1
- strh r0, [r2]
- strh r0, [r4, 0x2]
- ldrh r0, [r4]
- adds r0, 0x2
- strh r0, [r4, 0x18]
-_0802FA4E:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end Task_MainMenuCheckSaveFile
-
- thumb_func_start Task_WaitForSaveFileErrorWindow
-@ void Task_WaitForSaveFileErrorWindow(u8 taskId)
-Task_WaitForSaveFileErrorWindow: @ 802FA5C
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl RunTextPrinters
- movs r0, 0x7
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- bne _0802FA98
- ldr r0, =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0802FA98
- movs r0, 0x7
- bl ClearWindowTilemap
- ldr r0, =gUnknown_082FF070
- bl sub_8032250
- ldr r1, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, =Task_MainMenuCheckBattery
- str r1, [r0]
-_0802FA98:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end Task_WaitForSaveFileErrorWindow
-
- thumb_func_start Task_MainMenuCheckBattery
-@ void Task_MainMenuCheckBattery(u8 taskId)
-Task_MainMenuCheckBattery: @ 802FAB0
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- adds r5, r4, 0
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0802FB3C
- movs r0, 0x40
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x44
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x48
- movs r1, 0x11
- bl SetGpuReg
- movs r0, 0x4A
- movs r1, 0x31
- bl SetGpuReg
- movs r0, 0x50
- movs r1, 0xC1
- bl SetGpuReg
- movs r0, 0x52
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x54
- movs r1, 0x7
- bl SetGpuReg
- bl RtcGetErrorStatus
- movs r1, 0xFF
- lsls r1, 4
- ands r1, r0
- cmp r1, 0
- bne _0802FB28
- ldr r0, =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, =Task_DisplayMainMenu
- str r0, [r1]
- b _0802FB3C
- .pool
-_0802FB28:
- ldr r0, =gText_BatteryRunDry
- bl CreateMainMenuErrorWindow
- ldr r1, =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- ldr r1, =Task_WaitForBatteryDryErrorWindow
- str r1, [r0]
-_0802FB3C:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end Task_MainMenuCheckBattery
-
- thumb_func_start Task_WaitForBatteryDryErrorWindow
-@ void Task_WaitForBatteryDryErrorWindow(u8 taskId)
-Task_WaitForBatteryDryErrorWindow: @ 802FB50
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl RunTextPrinters
- movs r0, 0x7
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- bne _0802FB8C
- ldr r0, =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0802FB8C
- movs r0, 0x7
- bl ClearWindowTilemap
- ldr r0, =gUnknown_082FF070
- bl sub_8032250
- ldr r1, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, =Task_DisplayMainMenu
- str r1, [r0]
-_0802FB8C:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end Task_WaitForBatteryDryErrorWindow
-
- thumb_func_start Task_DisplayMainMenu
-@ void Task_DisplayMainMenu(u8 taskId)
-Task_DisplayMainMenu: @ 802FBA4
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x10
- 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
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- beq _0802FBCE
- b _0803006C
-_0802FBCE:
- movs r0, 0x40
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x44
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x48
- movs r1, 0x11
- bl SetGpuReg
- movs r0, 0x4A
- movs r1, 0x31
- bl SetGpuReg
- movs r0, 0x50
- movs r1, 0xC1
- bl SetGpuReg
- movs r0, 0x52
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x54
- movs r1, 0x7
- bl SetGpuReg
- add r0, sp, 0xC
- strh r4, [r0]
- movs r1, 0xFE
- movs r2, 0x2
- bl LoadPalette
- add r1, sp, 0xC
- ldr r2, =0x00007fff
- adds r0, r2, 0
- strh r0, [r1]
- adds r0, r1, 0
- movs r1, 0xFA
- movs r2, 0x2
- bl LoadPalette
- add r1, sp, 0xC
- ldr r2, =0x0000318c
- adds r0, r2, 0
- strh r0, [r1]
- adds r0, r1, 0
- movs r1, 0xFB
- movs r2, 0x2
- bl LoadPalette
- add r1, sp, 0xC
- ldr r2, =0x0000675a
- adds r0, r2, 0
- strh r0, [r1]
- adds r0, r1, 0
- movs r1, 0xFC
- movs r2, 0x2
- bl LoadPalette
- ldr r0, =gSaveBlock2Ptr
- ldr r0, [r0]
- ldrb r0, [r0, 0x8]
- cmp r0, 0
- bne _0802FC84
- add r1, sp, 0xC
- ldr r2, =0x00007e04
- adds r0, r2, 0
- strh r0, [r1]
- adds r0, r1, 0
- movs r1, 0xF1
- movs r2, 0x2
- bl LoadPalette
- b _0802FC96
- .pool
-_0802FC84:
- add r1, sp, 0xC
- ldr r2, =0x0000547f
- adds r0, r2, 0
- strh r0, [r1]
- adds r0, r1, 0
- movs r1, 0xF1
- movs r2, 0x2
- bl LoadPalette
-_0802FC96:
- ldr r0, =gTasks
- mov r8, r0
- lsls r1, r7, 2
- adds r0, r1, r7
- lsls r0, 3
- add r0, r8
- movs r2, 0x8
- ldrsh r0, [r0, r2]
- mov r9, r1
- cmp r0, 0x1
- beq _0802FD44
- cmp r0, 0x1
- ble _0802FCBC
- cmp r0, 0x2
- bne _0802FCB6
- b _0802FE00
-_0802FCB6:
- cmp r0, 0x3
- bne _0802FCBC
- b _0802FEFC
-_0802FCBC:
- movs r0, 0
- movs r1, 0xAA
- bl FillWindowPixelBuffer
- movs r0, 0x1
- movs r1, 0xAA
- bl FillWindowPixelBuffer
- ldr r5, =gUnknown_082FF0E0
- str r5, [sp]
- movs r4, 0x1
- negs r4, r4
- str r4, [sp, 0x4]
- ldr r0, =gText_MainMenuNewGame
- str r0, [sp, 0x8]
- movs r0, 0
- movs r1, 0x1
- movs r2, 0
- movs r3, 0x1
- bl box_print
- str r5, [sp]
- str r4, [sp, 0x4]
- ldr r0, =gText_MainMenuOption
- str r0, [sp, 0x8]
- movs r0, 0x1
- movs r1, 0x1
- movs r2, 0
- movs r3, 0x1
- bl box_print
- movs r0, 0
- bl PutWindowTilemap
- movs r0, 0x1
- bl PutWindowTilemap
- movs r0, 0
- movs r1, 0x2
- bl CopyWindowToVram
- movs r0, 0x1
- movs r1, 0x2
- bl CopyWindowToVram
- ldr r4, =gUnknown_082FF038
- ldr r5, =0x000001d5
- adds r0, r4, 0
- adds r1, r5, 0
- bl DrawMainMenuWindowBorder
- adds r4, 0x8
- b _0802FED4
- .pool
-_0802FD44:
- movs r0, 0x2
- movs r1, 0xAA
- bl FillWindowPixelBuffer
- movs r0, 0x3
- movs r1, 0xAA
- bl FillWindowPixelBuffer
- movs r0, 0x4
- movs r1, 0xAA
- bl FillWindowPixelBuffer
- ldr r5, =gUnknown_082FF0E0
- str r5, [sp]
- movs r4, 0x1
- negs r4, r4
- str r4, [sp, 0x4]
- ldr r0, =gText_MainMenuContinue
- str r0, [sp, 0x8]
- movs r0, 0x2
- movs r1, 0x1
- movs r2, 0
- movs r3, 0x1
- bl box_print
- str r5, [sp]
- str r4, [sp, 0x4]
- ldr r0, =gText_MainMenuNewGame
- str r0, [sp, 0x8]
- movs r0, 0x3
- movs r1, 0x1
- movs r2, 0
- movs r3, 0x1
- bl box_print
- str r5, [sp]
- str r4, [sp, 0x4]
- ldr r0, =gText_MainMenuOption
- str r0, [sp, 0x8]
- movs r0, 0x4
- movs r1, 0x1
- movs r2, 0
- movs r3, 0x1
- bl box_print
- bl fmt_savegame
- movs r0, 0x2
- bl PutWindowTilemap
- movs r0, 0x3
- bl PutWindowTilemap
- movs r0, 0x4
- bl PutWindowTilemap
- movs r0, 0x2
- movs r1, 0x2
- bl CopyWindowToVram
- movs r0, 0x3
- movs r1, 0x2
- bl CopyWindowToVram
- movs r0, 0x4
- movs r1, 0x2
- bl CopyWindowToVram
- ldr r4, =gUnknown_082FF048
- ldr r5, =0x000001d5
- adds r0, r4, 0
- adds r1, r5, 0
- bl DrawMainMenuWindowBorder
- adds r0, r4, 0
- adds r0, 0x8
- adds r1, r5, 0
- bl DrawMainMenuWindowBorder
- adds r4, 0x10
- b _0802FED4
- .pool
-_0802FE00:
- movs r0, 0x2
- movs r1, 0xAA
- bl FillWindowPixelBuffer
- movs r0, 0x3
- movs r1, 0xAA
- bl FillWindowPixelBuffer
- movs r0, 0x4
- movs r1, 0xAA
- bl FillWindowPixelBuffer
- movs r0, 0x5
- movs r1, 0xAA
- bl FillWindowPixelBuffer
- ldr r5, =gUnknown_082FF0E0
- str r5, [sp]
- movs r4, 0x1
- negs r4, r4
- str r4, [sp, 0x4]
- ldr r0, =gText_MainMenuContinue
- str r0, [sp, 0x8]
- movs r0, 0x2
- movs r1, 0x1
- movs r2, 0
- movs r3, 0x1
- bl box_print
- str r5, [sp]
- str r4, [sp, 0x4]
- ldr r0, =gText_MainMenuNewGame
- str r0, [sp, 0x8]
- movs r0, 0x3
- movs r1, 0x1
- movs r2, 0
- movs r3, 0x1
- bl box_print
- str r5, [sp]
- str r4, [sp, 0x4]
- ldr r0, =gText_MainMenuMysteryGift
- str r0, [sp, 0x8]
- movs r0, 0x4
- movs r1, 0x1
- movs r2, 0
- movs r3, 0x1
- bl box_print
- str r5, [sp]
- str r4, [sp, 0x4]
- ldr r0, =gText_MainMenuOption
- str r0, [sp, 0x8]
- movs r0, 0x5
- movs r1, 0x1
- movs r2, 0
- movs r3, 0x1
- bl box_print
- bl fmt_savegame
- movs r0, 0x2
- bl PutWindowTilemap
- movs r0, 0x3
- bl PutWindowTilemap
- movs r0, 0x4
- bl PutWindowTilemap
- movs r0, 0x5
- bl PutWindowTilemap
- movs r0, 0x2
- movs r1, 0x2
- bl CopyWindowToVram
- movs r0, 0x3
- movs r1, 0x2
- bl CopyWindowToVram
- movs r0, 0x4
- movs r1, 0x2
- bl CopyWindowToVram
- movs r0, 0x5
- movs r1, 0x2
- bl CopyWindowToVram
- ldr r4, =gUnknown_082FF048
- ldr r5, =0x000001d5
- adds r0, r4, 0
- adds r1, r5, 0
- bl DrawMainMenuWindowBorder
- adds r0, r4, 0
- adds r0, 0x8
- adds r1, r5, 0
- bl DrawMainMenuWindowBorder
- adds r0, r4, 0
- adds r0, 0x10
- adds r1, r5, 0
- bl DrawMainMenuWindowBorder
- adds r4, 0x18
-_0802FED4:
- adds r0, r4, 0
- adds r1, r5, 0
- bl DrawMainMenuWindowBorder
- b _0803005E
- .pool
-_0802FEFC:
- movs r0, 0x2
- movs r1, 0xAA
- bl FillWindowPixelBuffer
- movs r0, 0x3
- movs r1, 0xAA
- bl FillWindowPixelBuffer
- movs r0, 0x4
- movs r1, 0xAA
- bl FillWindowPixelBuffer
- movs r0, 0x5
- movs r1, 0xAA
- bl FillWindowPixelBuffer
- movs r0, 0x6
- movs r1, 0xAA
- bl FillWindowPixelBuffer
- ldr r5, =gUnknown_082FF0E0
- str r5, [sp]
- movs r4, 0x1
- negs r4, r4
- str r4, [sp, 0x4]
- ldr r0, =gText_MainMenuContinue
- str r0, [sp, 0x8]
- movs r0, 0x2
- movs r1, 0x1
- movs r2, 0
- movs r3, 0x1
- bl box_print
- str r5, [sp]
- str r4, [sp, 0x4]
- ldr r0, =gText_MainMenuNewGame
- str r0, [sp, 0x8]
- movs r0, 0x3
- movs r1, 0x1
- movs r2, 0
- movs r3, 0x1
- bl box_print
- str r5, [sp]
- str r4, [sp, 0x4]
- ldr r0, =gText_MainMenuMysteryGift2
- str r0, [sp, 0x8]
- movs r0, 0x4
- movs r1, 0x1
- movs r2, 0
- movs r3, 0x1
- bl box_print
- str r5, [sp]
- str r4, [sp, 0x4]
- ldr r0, =gText_MainMenuMysteryEvents
- str r0, [sp, 0x8]
- movs r0, 0x5
- movs r1, 0x1
- movs r2, 0
- movs r3, 0x1
- bl box_print
- str r5, [sp]
- str r4, [sp, 0x4]
- ldr r0, =gText_MainMenuOption
- str r0, [sp, 0x8]
- movs r0, 0x6
- movs r1, 0x1
- movs r2, 0
- movs r3, 0x1
- bl box_print
- bl fmt_savegame
- movs r0, 0x2
- bl PutWindowTilemap
- movs r0, 0x3
- bl PutWindowTilemap
- movs r0, 0x4
- bl PutWindowTilemap
- movs r0, 0x5
- bl PutWindowTilemap
- movs r0, 0x6
- bl PutWindowTilemap
- movs r0, 0x2
- movs r1, 0x2
- bl CopyWindowToVram
- movs r0, 0x3
- movs r1, 0x2
- bl CopyWindowToVram
- movs r0, 0x4
- movs r1, 0x2
- bl CopyWindowToVram
- movs r0, 0x5
- movs r1, 0x2
- bl CopyWindowToVram
- movs r0, 0x6
- movs r1, 0x2
- bl CopyWindowToVram
- ldr r5, =gUnknown_082FF048
- ldr r4, =0x000001d5
- adds r0, r5, 0
- adds r1, r4, 0
- bl DrawMainMenuWindowBorder
- adds r0, r5, 0
- adds r0, 0x8
- adds r1, r4, 0
- bl DrawMainMenuWindowBorder
- adds r0, r5, 0
- adds r0, 0x10
- adds r1, r4, 0
- bl DrawMainMenuWindowBorder
- adds r0, r5, 0
- adds r0, 0x18
- adds r1, r4, 0
- bl DrawMainMenuWindowBorder
- adds r0, r5, 0
- adds r0, 0x20
- adds r1, r4, 0
- bl DrawMainMenuWindowBorder
- ldr r0, =gUnknown_082FF0F4
- ldr r4, =gUnknown_02022D06
- adds r1, r4, 0
- bl AddScrollIndicatorArrowPair
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r6, 0x1A]
- movs r0, 0x1A
- ldrsh r1, [r6, r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- add r0, r8
- ldr r1, =Task_ScrollIndicatorArrowPairOnMainMenu
- str r1, [r0]
- ldrh r0, [r4]
- cmp r0, 0x4
- bne _0803005E
- movs r4, 0x80
- lsls r4, 6
- movs r0, 0
- adds r1, r4, 0
- movs r2, 0x1
- bl ChangeBgY
- movs r0, 0x1
- adds r1, r4, 0
- movs r2, 0x1
- bl ChangeBgY
- movs r0, 0x1
- strh r0, [r6, 0x1C]
- movs r2, 0x1A
- ldrsh r1, [r6, r2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- add r0, r8
- movs r1, 0x1
- strh r1, [r0, 0x26]
-_0803005E:
- ldr r0, =gTasks
- mov r2, r9
- adds r1, r2, r7
- lsls r1, 3
- adds r1, r0
- ldr r0, =Task_HighlightSelectedMainMenuItem
- str r0, [r1]
-_0803006C:
- add sp, 0x10
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end Task_DisplayMainMenu
-
- thumb_func_start Task_HighlightSelectedMainMenuItem
-@ void Task_HighlightSelectedMainMenuItem(u8 taskId)
-Task_HighlightSelectedMainMenuItem: @ 80300B0
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r1, =gTasks
- lsls r4, r0, 2
- adds r4, r0
- lsls r4, 3
- adds r4, r1
- ldrb r0, [r4, 0x8]
- ldrb r1, [r4, 0xA]
- movs r3, 0x24
- ldrsh r2, [r4, r3]
- bl HighlightSelectedMainMenuItem
- ldr r0, =Task_HandleMainMenuInput
- str r0, [r4]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end Task_HighlightSelectedMainMenuItem
-
- thumb_func_start HandleMainMenuInput
-@ u8 HandleMainMenuInput(u8 taskId)
-HandleMainMenuInput: @ 80300E0
- push {r4-r7,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r4, r1, 3
- ldr r7, =gTasks + 0x8
- adds r5, r4, r7
- ldr r1, =gMain
- ldrh r2, [r1, 0x2E]
- movs r0, 0x1
- ands r0, r2
- cmp r0, 0
- beq _08030130
- movs r0, 0x5
- bl PlaySE
- bl sub_80093CC
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- adds r0, r7, 0
- subs r0, 0x8
- adds r0, r4, r0
- ldr r1, =Task_HandleMainMenuAPressed
- str r1, [r0]
- b _08030240
- .pool
-_08030130:
- movs r0, 0x2
- ands r0, r2
- lsls r0, 16
- lsrs r6, r0, 16
- cmp r6, 0
- beq _08030178
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x1
- negs r0, r0
- ldr r1, =0x0000ffff
- str r1, [sp]
- movs r1, 0
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- movs r0, 0x40
- movs r1, 0xF0
- bl SetGpuReg
- movs r0, 0x44
- movs r1, 0xA0
- bl SetGpuReg
- adds r0, r7, 0
- subs r0, 0x8
- adds r0, r4, r0
- ldr r1, =Task_HandleMainMenuBPressed
- str r1, [r0]
- b _08030240
- .pool
-_08030178:
- movs r0, 0x40
- ands r0, r2
- cmp r0, 0
- beq _080301CA
- movs r0, 0x2
- ldrsh r2, [r5, r0]
- cmp r2, 0
- ble _080301CA
- movs r1, 0
- ldrsh r0, [r5, r1]
- cmp r0, 0x3
- bne _080301C4
- movs r1, 0x1C
- ldrsh r0, [r5, r1]
- cmp r0, 0x1
- bne _080301C4
- cmp r2, 0x1
- bne _080301C4
- movs r4, 0x80
- lsls r4, 6
- movs r0, 0
- adds r1, r4, 0
- movs r2, 0x2
- bl ChangeBgY
- movs r0, 0x1
- adds r1, r4, 0
- movs r2, 0x2
- bl ChangeBgY
- movs r2, 0x1A
- ldrsh r1, [r5, r2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r7, r0
- strh r6, [r5, 0x1C]
- strh r6, [r0, 0x1E]
-_080301C4:
- ldrh r0, [r5, 0x2]
- subs r0, 0x1
- b _0803022C
-_080301CA:
- ldrh r1, [r1, 0x2E]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _08030240
- movs r0, 0x2
- ldrsh r1, [r5, r0]
- movs r2, 0x18
- ldrsh r0, [r5, r2]
- subs r0, 0x1
- cmp r1, r0
- bge _08030240
- movs r1, 0
- ldrsh r0, [r5, r1]
- cmp r0, 0x3
- bne _08030228
- movs r2, 0x2
- ldrsh r0, [r5, r2]
- cmp r0, 0x3
- bne _08030228
- movs r1, 0x1C
- ldrsh r0, [r5, r1]
- cmp r0, 0
- bne _08030228
- movs r4, 0x80
- lsls r4, 6
- movs r0, 0
- adds r1, r4, 0
- movs r2, 0x1
- bl ChangeBgY
- movs r0, 0x1
- adds r1, r4, 0
- movs r2, 0x1
- bl ChangeBgY
- ldr r2, =gTasks
- movs r0, 0x1A
- ldrsh r1, [r5, r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- movs r1, 0x1
- strh r1, [r5, 0x1C]
- movs r1, 0x1
- strh r1, [r0, 0x26]
-_08030228:
- ldrh r0, [r5, 0x2]
- adds r0, 0x1
-_0803022C:
- strh r0, [r5, 0x2]
- ldr r1, =gUnknown_02022D06
- strh r0, [r1]
- movs r0, 0x1
- b _08030242
- .pool
-_08030240:
- movs r0, 0
-_08030242:
- add sp, 0x4
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end HandleMainMenuInput
-
- thumb_func_start Task_HandleMainMenuInput
-@ void Task_HandleMainMenuInput(u8 taskId)
-Task_HandleMainMenuInput: @ 803024C
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- adds r0, r4, 0
- bl HandleMainMenuInput
- lsls r0, 24
- cmp r0, 0
- beq _0803026C
- ldr r0, =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, =Task_HighlightSelectedMainMenuItem
- str r0, [r1]
-_0803026C:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end Task_HandleMainMenuInput
-
- thumb_func_start Task_HandleMainMenuAPressed
-@ void Task_HandleMainMenuAPressed(int task_id)
-Task_HandleMainMenuAPressed: @ 803027C
- push {r4-r7,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _08030292
- b _08030536
-_08030292:
- 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
- bne _080302B0
- ldrh r0, [r4, 0x22]
- lsls r0, 24
- lsrs r0, 24
- bl RemoveScrollIndicatorArrowPair
-_080302B0:
- movs r0, 0
- movs r1, 0x1
- bl sub_819746C
- movs r0, 0x1
- movs r1, 0x1
- bl sub_819746C
- movs r0, 0x2
- movs r1, 0x1
- bl sub_819746C
- movs r0, 0x3
- movs r1, 0x1
- bl sub_819746C
- movs r0, 0x4
- movs r1, 0x1
- bl sub_819746C
- movs r0, 0x5
- movs r1, 0x1
- bl sub_819746C
- movs r0, 0x6
- movs r1, 0x1
- bl sub_819746C
- movs r0, 0x7
- movs r1, 0x1
- bl sub_819746C
- bl sub_80093CC
- lsls r0, 24
- lsrs r2, r0, 24
- movs r3, 0x8
- ldrsh r0, [r4, r3]
- cmp r0, 0x1
- beq _08030324
- cmp r0, 0x1
- ble _0803030C
- cmp r0, 0x2
- beq _08030336
- cmp r0, 0x3
- beq _08030358
-_0803030C:
- movs r1, 0xA
- ldrsh r0, [r4, r1]
- cmp r0, 0
- beq _08030388
- cmp r0, 0x1
- bne _08030388
- b _080303D8
- .pool
-_08030324:
- movs r2, 0xA
- ldrsh r0, [r4, r2]
- cmp r0, 0x1
- beq _08030388
- cmp r0, 0x1
- ble _08030384
- cmp r0, 0x2
- bne _08030384
- b _080303D8
-_08030336:
- movs r3, 0xA
- ldrsh r0, [r4, r3]
- cmp r0, 0x1
- beq _08030388
- cmp r0, 0x1
- ble _08030384
- cmp r0, 0x2
- beq _0803034C
- cmp r0, 0x3
- beq _080303D8
- b _08030384
-_0803034C:
- movs r5, 0x3
- cmp r2, 0
- bne _080303DA
- movs r5, 0x6
- strh r2, [r4, 0x8]
- b _080303DA
-_08030358:
- movs r1, 0xA
- ldrsh r0, [r4, r1]
- cmp r0, 0x4
- bhi _08030384
- lsls r0, 2
- ldr r1, =_08030370
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_08030370:
- .4byte _08030384
- .4byte _08030388
- .4byte _0803038C
- .4byte _080303BC
- .4byte _080303D8
-_08030384:
- movs r5, 0x1
- b _080303DA
-_08030388:
- movs r5, 0
- b _080303DA
-_0803038C:
- ldr r0, =gTasks
- adds r1, r7, r6
- lsls r1, 3
- adds r1, r0
- movs r3, 0x26
- ldrsh r0, [r1, r3]
- cmp r0, 0
- beq _080303AC
- movs r5, 0x3
- cmp r2, 0
- bne _080303DA
- movs r5, 0x6
- strh r2, [r1, 0x8]
- b _080303DA
- .pool
-_080303AC:
- cmp r2, 0
- beq _080303B8
- movs r5, 0x6
- movs r0, 0x1
- strh r0, [r1, 0x8]
- b _080303DA
-_080303B8:
- movs r5, 0x5
- b _080303DA
-_080303BC:
- cmp r2, 0
- beq _080303D4
- movs r5, 0x6
- ldr r0, =gTasks
- adds r1, r7, r6
- lsls r1, 3
- adds r1, r0
- movs r0, 0x2
- strh r0, [r1, 0x8]
- b _080303DA
- .pool
-_080303D4:
- movs r5, 0x4
- b _080303DA
-_080303D8:
- movs r5, 0x2
-_080303DA:
- movs r0, 0
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- movs r0, 0x1
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- cmp r5, 0x6
- bhi _0803041C
- lsls r0, r5, 2
- ldr r1, =_08030400
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_08030400:
- .4byte _0803041C
- .4byte _08030444
- .4byte _08030460
- .4byte _08030478
- .4byte _08030480
- .4byte _08030488
- .4byte _0803049C
-_0803041C:
- ldr r0, =gPlttBufferUnfaded
- movs r1, 0
- strh r1, [r0]
- ldr r0, =gPlttBufferFaded
- strh r1, [r0]
- ldr r1, =gTasks
- adds r0, r7, r6
- lsls r0, 3
- adds r0, r1
- ldr r1, =task_new_game_prof_birch_speech_1
- str r1, [r0]
- b _08030514
- .pool
-_08030444:
- ldr r0, =gPlttBufferUnfaded
- movs r1, 0
- strh r1, [r0]
- ldr r0, =gPlttBufferFaded
- strh r1, [r0]
- ldr r0, =sub_8086230
- b _0803048A
- .pool
-_08030460:
- ldr r0, =gMain
- ldr r1, =CB2_ReinitMainMenu
- str r1, [r0, 0x8]
- ldr r0, =CB2_InitOptionMenu
- b _0803048A
- .pool
-_08030478:
- ldr r0, =c2_mystery_gift
- b _0803048A
- .pool
-_08030480:
- ldr r0, =CB2_InitMysteryEventMenu
- b _0803048A
- .pool
-_08030488:
- ldr r0, =sub_801867C
-_0803048A:
- bl SetMainCallback2
- adds r0, r6, 0
- bl DestroyTask
- b _08030514
- .pool
-_0803049C:
- ldr r1, =gTasks
- adds r0, r7, r6
- lsls r0, 3
- adds r0, r1
- movs r4, 0
- strh r4, [r0, 0xA]
- ldr r1, =Task_DisplayMainMenuInvalidActionError
- str r1, [r0]
- ldr r0, =gPlttBufferUnfaded
- movs r2, 0xF1
- lsls r2, 1
- adds r0, r2
- ldr r1, =0x00007fff
- strh r1, [r0]
- ldr r0, =gPlttBufferFaded
- adds r0, r2
- strh r1, [r0]
- movs r0, 0x18
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x1A
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x14
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x16
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x10
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x12
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x1
- negs r0, r0
- str r4, [sp]
- movs r1, 0
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- b _08030536
- .pool
-_08030514:
- bl FreeAllWindowBuffers
- cmp r5, 0x2
- beq _08030528
- ldr r1, =gUnknown_02022D06
- movs r0, 0
- strh r0, [r1]
- b _08030536
- .pool
-_08030528:
- ldr r0, =gUnknown_02022D06
- ldrh r1, [r0]
- movs r3, 0x80
- lsls r3, 8
- adds r2, r3, 0
- orrs r1, r2
- strh r1, [r0]
-_08030536:
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end Task_HandleMainMenuAPressed
-
- thumb_func_start Task_HandleMainMenuBPressed
-@ void Task_HandleMainMenuBPressed(u8 taskId)
-Task_HandleMainMenuBPressed: @ 8030544
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r2, r0, 24
- adds r5, r2, 0
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- bne _0803058C
- ldr r0, =gTasks
- lsls r1, r2, 2
- adds r1, r2
- lsls r1, 3
- adds r1, r0
- movs r2, 0x8
- ldrsh r0, [r1, r2]
- cmp r0, 0x3
- bne _08030578
- ldrh r0, [r1, 0x22]
- lsls r0, 24
- lsrs r0, 24
- bl RemoveScrollIndicatorArrowPair
-_08030578:
- ldr r0, =gUnknown_02022D06
- strh r4, [r0]
- bl FreeAllWindowBuffers
- ldr r0, =CB2_InitTitleScreen
- bl SetMainCallback2
- adds r0, r5, 0
- bl DestroyTask
-_0803058C:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end Task_HandleMainMenuBPressed
-
- thumb_func_start Task_DisplayMainMenuInvalidActionError
-@ void Task_DisplayMainMenuInvalidActionError(u8 taskId)
-Task_DisplayMainMenuInvalidActionError: @ 80305A4
- push {r4,r5,lr}
- sub sp, 0x8
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r1, =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r4, r0, r1
- movs r0, 0xA
- ldrsh r1, [r4, r0]
- cmp r1, 0x1
- beq _0803063C
- cmp r1, 0x1
- bgt _080305CC
- cmp r1, 0
- beq _080305D6
- b _08030688
- .pool
-_080305CC:
- cmp r1, 0x2
- beq _0803064C
- cmp r1, 0x3
- beq _08030664
- b _08030688
-_080305D6:
- movs r0, 0x1E
- str r0, [sp]
- movs r0, 0x14
- str r0, [sp, 0x4]
- movs r0, 0
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl FillBgTilemapBufferRect_Palette0
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- cmp r0, 0x1
- beq _08030610
- cmp r0, 0x1
- bgt _080305FC
- cmp r0, 0
- beq _08030602
- b _08030622
-_080305FC:
- cmp r0, 0x2
- beq _0803061C
- b _08030622
-_08030602:
- ldr r0, =gText_WirelessNotConnected
- bl CreateMainMenuErrorWindow
- b _08030622
- .pool
-_08030610:
- ldr r0, =gText_MysteryGiftCantUse
- bl CreateMainMenuErrorWindow
- b _08030622
- .pool
-_0803061C:
- ldr r0, =gText_MysteryEventsCantUse
- bl CreateMainMenuErrorWindow
-_08030622:
- ldr r0, =gTasks
- lsls r1, r5, 2
- adds r1, r5
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0xA]
- adds r0, 0x1
- strh r0, [r1, 0xA]
- b _08030688
- .pool
-_0803063C:
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- b _08030658
- .pool
-_0803064C:
- bl RunTextPrinters
- movs r0, 0x7
- bl IsTextPrinterActive
- lsls r0, 16
-_08030658:
- cmp r0, 0
- bne _08030688
- ldrh r0, [r4, 0xA]
- adds r0, 0x1
- strh r0, [r4, 0xA]
- b _08030688
-_08030664:
- ldr r0, =gMain
- ldrh r0, [r0, 0x2E]
- ands r1, r0
- cmp r1, 0
- beq _08030688
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r0, =Task_HandleMainMenuBPressed
- str r0, [r4]
-_08030688:
- add sp, 0x8
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end Task_DisplayMainMenuInvalidActionError
-
- thumb_func_start HighlightSelectedMainMenuItem
-@ void HighlightSelectedMainMenuItem(u8 a1, u8 selectedMenuItem, u16 a3)
-HighlightSelectedMainMenuItem: @ 8030698
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r1, 24
- lsrs r4, r1, 24
- lsls r2, 16
- lsrs r6, r2, 16
- ldr r1, =0x000009e7
- movs r0, 0x40
- bl SetGpuReg
- cmp r5, 0x1
- beq _080306DC
- cmp r5, 0x1
- ble _080306BE
- cmp r5, 0x2
- beq _08030700
- cmp r5, 0x3
- beq _08030728
-_080306BE:
- cmp r4, 0
- beq _080306C6
- cmp r4, 0x1
- beq _080306D4
-_080306C6:
- ldr r1, =0x0000011f
- b _0803078E
- .pool
-_080306D4:
- ldr r1, =0x0000213f
- b _0803078E
- .pool
-_080306DC:
- cmp r4, 0x1
- beq _080306F0
- cmp r4, 0x1
- ble _080306E8
- cmp r4, 0x2
- beq _080306F8
-_080306E8:
- ldr r1, =0x0000013f
- b _0803078E
- .pool
-_080306F0:
- ldr r1, =0x0000415f
- b _0803078E
- .pool
-_080306F8:
- ldr r1, =0x0000617f
- b _0803078E
- .pool
-_08030700:
- cmp r4, 0x1
- beq _08030718
- cmp r4, 0x1
- ble _08030710
- cmp r4, 0x2
- beq _08030720
- cmp r4, 0x3
- beq _0803078C
-_08030710:
- ldr r1, =0x0000013f
- b _0803078E
- .pool
-_08030718:
- ldr r1, =0x0000415f
- b _0803078E
- .pool
-_08030720:
- ldr r1, =0x0000617f
- b _0803078E
- .pool
-_08030728:
- cmp r4, 0x4
- bhi _08030750
- lsls r0, r4, 2
- ldr r1, =_0803073C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_0803073C:
- .4byte _08030750
- .4byte _08030758
- .4byte _0803076C
- .4byte _08030780
- .4byte _0803079C
-_08030750:
- ldr r1, =0x0000013f
- b _0803078E
- .pool
-_08030758:
- cmp r6, 0
- beq _08030764
- ldr r1, =0x0000213f
- b _0803078E
- .pool
-_08030764:
- ldr r1, =0x0000415f
- b _0803078E
- .pool
-_0803076C:
- cmp r6, 0
- beq _08030778
- ldr r1, =0x0000415f
- b _0803078E
- .pool
-_08030778:
- ldr r1, =0x0000617f
- b _0803078E
- .pool
-_08030780:
- cmp r6, 0
- beq _0803078C
- ldr r1, =0x0000617f
- b _0803078E
- .pool
-_0803078C:
- ldr r1, =0x0000819f
-_0803078E:
- movs r0, 0x44
- bl SetGpuReg
- b _080307A4
- .pool
-_0803079C:
- ldr r1, =0x0000819f
- movs r0, 0x44
- bl SetGpuReg
-_080307A4:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end HighlightSelectedMainMenuItem
-
- thumb_func_start task_new_game_prof_birch_speech_1
-@ void task_new_game_prof_birch_speech_1(int task_id)
-task_new_game_prof_birch_speech_1: @ 80307B0
- push {r4,r5,lr}
- sub sp, 0x4
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0
- movs r1, 0
- bl SetGpuReg
- movs r1, 0x82
- lsls r1, 5
- movs r0, 0
- bl SetGpuReg
- ldr r0, =gUnknown_082FF0F0
- bl InitBgFromTemplate
- movs r0, 0x40
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x44
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x48
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x4A
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x50
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x52
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x54
- movs r1, 0
- bl SetGpuReg
- ldr r0, =gBirchIntroShadowGfx
- movs r1, 0xC0
- lsls r1, 19
- bl LZ77UnCompVram
- ldr r0, =gUnknown_082FEEF0
- ldr r1, =0x06003800
- bl LZ77UnCompVram
- ldr r0, =gUnknown_082FECFC
- movs r1, 0
- movs r2, 0x40
- bl LoadPalette
- ldr r0, =gUnknown_082FF028
- movs r1, 0x1
- movs r2, 0x10
- bl LoadPalette
- bl ScanlineEffect_Stop
- bl ResetSpriteData
- bl FreeAllSpritePalettes
- bl dp13_810BB8C
- adds r0, r4, 0
- bl AddBirchSpeechObjects
- movs r0, 0x1
- negs r0, r0
- movs r5, 0
- str r5, [sp]
- movs r1, 0
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- ldr r1, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- strh r5, [r0, 0x10]
- ldr r1, =task_new_game_prof_birch_speech_2
- str r1, [r0]
- movs r1, 0xFF
- strh r1, [r0, 0xC]
- strh r1, [r0, 0xE]
- movs r1, 0xD8
- strh r1, [r0, 0x16]
- movs r0, 0xBB
- lsls r0, 1
- bl PlayBGM
- movs r0, 0
- bl ShowBg
- movs r0, 0x1
- bl ShowBg
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end task_new_game_prof_birch_speech_1
-
- thumb_func_start task_new_game_prof_birch_speech_2
-task_new_game_prof_birch_speech_2: @ 80308B0
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r1, =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r4, r0, r1
- ldrh r1, [r4, 0x16]
- movs r2, 0x16
- ldrsh r0, [r4, r2]
- cmp r0, 0
- beq _080308D4
- subs r0, r1, 0x1
- strh r0, [r4, 0x16]
- b _0803091A
- .pool
-_080308D4:
- ldrb r0, [r4, 0x18]
- ldr r2, =gSprites
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- movs r0, 0x88
- strh r0, [r1, 0x20]
- movs r0, 0x3C
- strh r0, [r1, 0x22]
- adds r3, r1, 0
- adds r3, 0x3E
- ldrb r2, [r3]
- subs r0, 0x41
- ands r0, r2
- strb r0, [r3]
- ldrb r2, [r1, 0x1]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- movs r2, 0x4
- orrs r0, r2
- strb r0, [r1, 0x1]
- adds r0, r5, 0
- movs r1, 0xA
- bl sub_8031BAC
- adds r0, r5, 0
- movs r1, 0x14
- bl sub_8031D34
- movs r0, 0x50
- strh r0, [r4, 0x16]
- ldr r0, =task_new_game_prof_birch_speech_3
- str r0, [r4]
-_0803091A:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end task_new_game_prof_birch_speech_2
-
- thumb_func_start task_new_game_prof_birch_speech_3
-@ int task_new_game_prof_birch_speech_3()
-task_new_game_prof_birch_speech_3: @ 8030928
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
- movs r1, 0x12
- ldrsh r0, [r4, r1]
- cmp r0, 0
- beq _080309B6
- ldr r2, =gSprites
- movs r1, 0x18
- ldrsh r0, [r4, r1]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r2, [r1, 0x1]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- strb r0, [r1, 0x1]
- ldrh r1, [r4, 0x16]
- movs r2, 0x16
- ldrsh r0, [r4, r2]
- cmp r0, 0
- beq _08030970
- subs r0, r1, 0x1
- strh r0, [r4, 0x16]
- b _080309B6
- .pool
-_08030970:
- ldr r0, =gUnknown_082FF080
- bl InitWindows
- movs r0, 0
- movs r1, 0xF3
- bl LoadMainMenuWindowFrameTiles
- movs r0, 0
- movs r1, 0xFC
- movs r2, 0xF0
- bl copy_textbox_border_tile_patterns_to_vram
- movs r0, 0
- movs r1, 0x1
- bl unknown_rbox_to_vram
- movs r0, 0
- bl PutWindowTilemap
- movs r0, 0
- movs r1, 0x2
- bl CopyWindowToVram
- movs r0, 0
- bl sub_8032318
- ldr r0, =gStringVar4
- ldr r1, =gUnknown_082C897B
- bl StringExpandPlaceholders
- movs r0, 0x1
- bl AddTextPrinterForMessage
- ldr r0, =task_new_game_prof_birch_speech_4
- str r0, [r4]
-_080309B6:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end task_new_game_prof_birch_speech_3
-
- thumb_func_start task_new_game_prof_birch_speech_4
-task_new_game_prof_birch_speech_4: @ 80309CC
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08030A0A
- bl sub_8197224
- lsls r0, 16
- cmp r0, 0
- bne _08030A0A
- ldr r1, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, =task_new_game_prof_birch_speech_5
- str r1, [r0]
- ldr r0, =gStringVar4
- ldr r1, =gText_ThisIsAPokemon
- bl StringExpandPlaceholders
- ldr r1, =sub_80323A0
- movs r0, 0x1
- bl AddTextPrinterWithCallbackForMessage
- ldr r0, =gUnknown_03000DD0
- strb r4, [r0]
-_08030A0A:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end task_new_game_prof_birch_speech_4
-
- thumb_func_start task_new_game_prof_birch_speech_5
-task_new_game_prof_birch_speech_5: @ 8030A2C
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl sub_8197224
- lsls r0, 16
- cmp r0, 0
- bne _08030A58
- ldr r0, =gStringVar4
- ldr r1, =gUnknown_082C8A1F
- bl StringExpandPlaceholders
- movs r0, 0x1
- bl AddTextPrinterForMessage
- ldr r1, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, =task_new_game_prof_birch_speech_6
- str r1, [r0]
-_08030A58:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end task_new_game_prof_birch_speech_5
-
- thumb_func_start sub_8030A70
-sub_8030A70: @ 8030A70
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- sub sp, 0x14
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r6, =gTasks
- ldr r0, =gUnknown_03000DD0
- mov r8, r0
- ldrb r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r6
- ldrb r0, [r0, 0x1A]
- ldr r1, =gSprites
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r1
- movs r5, 0
- movs r1, 0x64
- strh r1, [r2, 0x20]
- movs r1, 0x4B
- strh r1, [r2, 0x22]
- movs r1, 0x3E
- adds r1, r2
- mov r12, r1
- ldrb r3, [r1]
- movs r1, 0x5
- negs r1, r1
- ands r1, r3
- mov r3, r12
- strb r1, [r3]
- strh r5, [r2, 0x2E]
- ldrb r1, [r2, 0x5]
- lsrs r1, 4
- str r5, [sp]
- str r5, [sp, 0x4]
- movs r2, 0x20
- str r2, [sp, 0x8]
- ldr r2, =0x0000ffff
- str r2, [sp, 0xC]
- ldr r2, =0x00000127
- str r2, [sp, 0x10]
- movs r2, 0x70
- movs r3, 0x3A
- bl CreatePokeballSpriteToReleaseMon
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r6
- ldr r1, =sub_8030B14
- str r1, [r0]
- mov r0, r8
- ldrb r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r6
- strh r5, [r0, 0x16]
- add sp, 0x14
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8030A70
-
- thumb_func_start sub_8030B14
-sub_8030B14: @ 8030B14
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- 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
- subs r1, 0x8
- mov r8, r1
- ldr r2, =gUnknown_03000DD0
- ldrb r1, [r2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- mov r1, r8
- adds r6, r0, r1
- movs r0, 0x1A
- ldrsh r1, [r6, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, =gSprites
- adds r3, r0, r1
- movs r1, 0
- ldrsh r0, [r5, r1]
- adds r7, r2, 0
- cmp r0, 0
- beq _08030B64
- cmp r0, 0x1
- beq _08030B7C
- b _08030B98
- .pool
-_08030B64:
- ldr r1, [r3, 0x1C]
- ldr r0, =SpriteCallbackDummy
- cmp r1, r0
- bne _08030BBA
- ldrb r1, [r3, 0x1]
- movs r0, 0x4
- negs r0, r0
- ands r0, r1
- strb r0, [r3, 0x1]
- b _08030B98
- .pool
-_08030B7C:
- movs r1, 0x16
- ldrsh r0, [r6, r1]
- cmp r0, 0x5F
- ble _08030BBA
- adds r0, r4, 0
- bl DestroyTask
- ldrb r1, [r7]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- mov r1, r8
- adds r2, r0, r1
- b _08030BAA
-_08030B98:
- ldrh r0, [r5]
- adds r0, 0x1
- strh r0, [r5]
- ldr r2, =gTasks
- ldrb r1, [r7]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r2, r0, r2
-_08030BAA:
- ldrh r3, [r2, 0x16]
- movs r0, 0x16
- ldrsh r1, [r2, r0]
- ldr r0, =0x00003fff
- cmp r1, r0
- bgt _08030BBA
- adds r0, r3, 0x1
- strh r0, [r2, 0x16]
-_08030BBA:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8030B14
-
- thumb_func_start task_new_game_prof_birch_speech_6
-task_new_game_prof_birch_speech_6: @ 8030BCC
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl sub_8197224
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, 0
- bne _08030BFE
- ldr r0, =gUnknown_02022D04
- strb r1, [r0]
- ldr r0, =gStringVar4
- ldr r1, =gUnknown_082C8BD0
- bl StringExpandPlaceholders
- movs r0, 0x1
- bl AddTextPrinterForMessage
- ldr r1, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, =task_new_game_prof_birch_speech_7
- str r1, [r0]
-_08030BFE:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end task_new_game_prof_birch_speech_6
-
- thumb_func_start task_new_game_prof_birch_speech_7
-task_new_game_prof_birch_speech_7: @ 8030C18
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- bl sub_8197224
- lsls r0, 16
- cmp r0, 0
- bne _08030C7C
- ldr r5, =gSprites
- ldr r0, =gTasks
- lsls r4, r6, 2
- adds r4, r6
- lsls r4, 3
- adds r4, r0
- movs r1, 0x18
- ldrsh r0, [r4, r1]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r5
- ldrb r3, [r1, 0x1]
- movs r2, 0xD
- negs r2, r2
- adds r0, r2, 0
- ands r0, r3
- movs r3, 0x4
- orrs r0, r3
- strb r0, [r1, 0x1]
- movs r0, 0x1A
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldrb r1, [r0, 0x1]
- ands r2, r1
- orrs r2, r3
- strb r2, [r0, 0x1]
- adds r0, r6, 0
- movs r1, 0x2
- bl sub_8031ACC
- adds r0, r6, 0
- movs r1, 0x1
- bl sub_8031C88
- movs r0, 0x40
- strh r0, [r4, 0x16]
- ldr r0, =task_new_game_prof_birch_speech_8
- str r0, [r4]
-_08030C7C:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end task_new_game_prof_birch_speech_7
-
- thumb_func_start task_new_game_prof_birch_speech_8
-task_new_game_prof_birch_speech_8: @ 8030C90
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r2, r1, r2
- ldrh r3, [r2, 0x10]
- movs r0, 0x10
- ldrsh r1, [r2, r0]
- movs r0, 0x3C
- negs r0, r0
- cmp r1, r0
- beq _08030CC0
- subs r0, r3, 0x2
- strh r0, [r2, 0x10]
- ldrh r1, [r2, 0x10]
- movs r0, 0x14
- bl SetGpuReg
- b _08030CC8
- .pool
-_08030CC0:
- ldr r0, =0x0000ffc4
- strh r0, [r2, 0x10]
- ldr r0, =task_new_game_prof_birch_speech_9
- str r0, [r2]
-_08030CC8:
- pop {r0}
- bx r0
- .pool
- thumb_func_end task_new_game_prof_birch_speech_8
-
- thumb_func_start task_new_game_prof_birch_speech_9
-task_new_game_prof_birch_speech_9: @ 8030CD4
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r0, 24
- adds r5, r0, 0
- ldr r1, =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r4, r0, r1
- movs r1, 0x12
- ldrsh r0, [r4, r1]
- cmp r0, 0
- beq _08030D7A
- ldr r2, =gSprites
- movs r0, 0x18
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- adds r0, 0x3E
- ldrb r1, [r0]
- movs r7, 0x4
- orrs r1, r7
- strb r1, [r0]
- movs r0, 0x1A
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- adds r0, 0x3E
- ldrb r1, [r0]
- orrs r1, r7
- strb r1, [r0]
- ldrh r0, [r4, 0x16]
- movs r1, 0x16
- ldrsh r6, [r4, r1]
- cmp r6, 0
- beq _08030D34
- subs r0, 0x1
- strh r0, [r4, 0x16]
- b _08030D7A
- .pool
-_08030D34:
- ldrb r3, [r4, 0x1C]
- lsls r1, r3, 4
- adds r1, r3
- lsls r1, 2
- adds r1, r2
- movs r0, 0xB4
- strh r0, [r1, 0x20]
- movs r0, 0x3C
- strh r0, [r1, 0x22]
- movs r2, 0x3E
- adds r2, r1
- mov r12, r2
- ldrb r2, [r2]
- subs r0, 0x41
- ands r0, r2
- mov r2, r12
- strb r0, [r2]
- ldrb r2, [r1, 0x1]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- orrs r0, r7
- strb r0, [r1, 0x1]
- strh r3, [r4, 0xC]
- strh r6, [r4, 0x14]
- adds r0, r5, 0
- movs r1, 0x2
- bl sub_8031BAC
- adds r0, r5, 0
- movs r1, 0x1
- bl sub_8031D34
- ldr r0, =task_new_game_prof_birch_speech_10
- str r0, [r4]
-_08030D7A:
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end task_new_game_prof_birch_speech_9
-
- thumb_func_start task_new_game_prof_birch_speech_10
-task_new_game_prof_birch_speech_10: @ 8030D84
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r3, r1, r2
- movs r1, 0x12
- ldrsh r0, [r3, r1]
- cmp r0, 0
- beq _08030DB8
- ldr r2, =gSprites
- movs r1, 0xC
- ldrsh r0, [r3, r1]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r2, [r1, 0x1]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- strb r0, [r1, 0x1]
- ldr r0, =task_new_game_prof_birch_speech_11
- str r0, [r3]
-_08030DB8:
- pop {r0}
- bx r0
- .pool
- thumb_func_end task_new_game_prof_birch_speech_10
-
- thumb_func_start task_new_game_prof_birch_speech_11
-task_new_game_prof_birch_speech_11: @ 8030DC8
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0
- bl sub_8032318
- ldr r0, =gStringVar4
- ldr r1, =gUnknown_082C8BDD
- bl StringExpandPlaceholders
- movs r0, 0x1
- bl AddTextPrinterForMessage
- ldr r1, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, =task_new_game_prof_birch_speech_12
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end task_new_game_prof_birch_speech_11
-
- thumb_func_start task_new_game_prof_birch_speech_12
-task_new_game_prof_birch_speech_12: @ 8030E08
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl sub_8197224
- lsls r0, 16
- cmp r0, 0
- bne _08030E2A
- bl sub_8031D74
- ldr r0, =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, =task_new_game_prof_birch_speech_13
- str r0, [r1]
-_08030E2A:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end task_new_game_prof_birch_speech_12
-
- thumb_func_start task_new_game_prof_birch_speech_13
-task_new_game_prof_birch_speech_13: @ 8030E38
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- bl sub_8031DB4
- lsls r0, 24
- asrs r4, r0, 24
- cmp r4, 0
- beq _08030E52
- cmp r4, 0x1
- beq _08030E52
- lsls r4, r5, 2
- b _08030E76
-_08030E52:
- movs r0, 0x5
- bl PlaySE
- ldr r0, =gSaveBlock2Ptr
- ldr r0, [r0]
- strb r4, [r0, 0x8]
- movs r0, 0x1
- movs r1, 0x1
- bl sub_80322E0
- ldr r1, =gTasks
- lsls r2, r5, 2
- adds r0, r2, r5
- lsls r0, 3
- adds r0, r1
- ldr r1, =task_new_game_prof_birch_speech_14
- str r1, [r0]
- adds r4, r2, 0
-_08030E76:
- bl GetMenuCursorPos
- lsls r0, 24
- lsrs r3, r0, 24
- ldr r1, =gTasks
- adds r0, r4, r5
- lsls r0, 3
- adds r4, r0, r1
- movs r1, 0x14
- ldrsh r0, [r4, r1]
- cmp r3, r0
- beq _08030EB8
- strh r3, [r4, 0x14]
- ldr r2, =gSprites
- movs r0, 0xC
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r2, [r0, 0x1]
- movs r1, 0xD
- negs r1, r1
- ands r1, r2
- movs r2, 0x4
- orrs r1, r2
- strb r1, [r0, 0x1]
- adds r0, r5, 0
- movs r1, 0
- bl sub_8031ACC
- ldr r0, =sub_8030ED4
- str r0, [r4]
-_08030EB8:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end task_new_game_prof_birch_speech_13
-
- thumb_func_start sub_8030ED4
-sub_8030ED4: @ 8030ED4
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r1, =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r4, r0, r1
- ldrb r5, [r4, 0xC]
- movs r2, 0x12
- ldrsh r0, [r4, r2]
- adds r7, r1, 0
- cmp r0, 0
- bne _08030F0C
- ldr r0, =gSprites
- lsls r1, r5, 4
- adds r1, r5
- lsls r1, 2
- adds r1, r0
- ldrh r0, [r1, 0x20]
- adds r0, 0x4
- strh r0, [r1, 0x20]
- b _08030F72
- .pool
-_08030F0C:
- ldr r3, =gSprites
- lsls r0, r5, 4
- adds r0, r5
- lsls r0, 2
- adds r0, r3
- adds r0, 0x3E
- ldrb r1, [r0]
- movs r2, 0x4
- orrs r1, r2
- strb r1, [r0]
- movs r1, 0x14
- ldrsh r0, [r4, r1]
- cmp r0, 0
- beq _08030F30
- ldrb r5, [r4, 0x1E]
- b _08030F32
- .pool
-_08030F30:
- ldrb r5, [r4, 0x1C]
-_08030F32:
- lsls r2, r5, 4
- adds r2, r5
- lsls r2, 2
- adds r2, r3
- movs r0, 0xF0
- strh r0, [r2, 0x20]
- movs r0, 0x3C
- strh r0, [r2, 0x22]
- adds r3, r2, 0
- adds r3, 0x3E
- ldrb r1, [r3]
- subs r0, 0x41
- ands r0, r1
- strb r0, [r3]
- lsls r4, r6, 2
- adds r4, r6
- lsls r4, 3
- adds r4, r7
- strh r5, [r4, 0xC]
- ldrb r1, [r2, 0x1]
- movs r0, 0xD
- negs r0, r0
- ands r0, r1
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r2, 0x1]
- adds r0, r6, 0
- movs r1, 0
- bl sub_8031BAC
- ldr r0, =sub_8030F7C
- str r0, [r4]
-_08030F72:
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8030ED4
-
- thumb_func_start sub_8030F7C
-sub_8030F7C: @ 8030F7C
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r3, r1, r2
- ldrb r1, [r3, 0xC]
- ldr r2, =gSprites
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, r0, r2
- ldrh r1, [r2, 0x20]
- movs r4, 0x20
- ldrsh r0, [r2, r4]
- cmp r0, 0xB4
- ble _08030FB0
- subs r0, r1, 0x4
- strh r0, [r2, 0x20]
- b _08030FCA
- .pool
-_08030FB0:
- movs r0, 0xB4
- strh r0, [r2, 0x20]
- movs r1, 0x12
- ldrsh r0, [r3, r1]
- cmp r0, 0
- beq _08030FCA
- ldrb r0, [r2, 0x1]
- movs r1, 0xD
- negs r1, r1
- ands r1, r0
- strb r1, [r2, 0x1]
- ldr r0, =task_new_game_prof_birch_speech_13
- str r0, [r3]
-_08030FCA:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8030F7C
-
- thumb_func_start task_new_game_prof_birch_speech_14
-task_new_game_prof_birch_speech_14: @ 8030FD4
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0
- bl sub_8032318
- ldr r0, =gStringVar4
- ldr r1, =gUnknown_082C8BFF
- bl StringExpandPlaceholders
- movs r0, 0x1
- bl AddTextPrinterForMessage
- ldr r1, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, =task_new_game_prof_birch_speech_15
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end task_new_game_prof_birch_speech_14
-
- thumb_func_start task_new_game_prof_birch_speech_15
-task_new_game_prof_birch_speech_15: @ 8031014
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl sub_8197224
- lsls r0, 16
- cmp r0, 0
- bne _08031032
- ldr r0, =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, =task_new_game_prof_birch_speech_16
- str r0, [r1]
-_08031032:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end task_new_game_prof_birch_speech_15
-
- thumb_func_start task_new_game_prof_birch_speech_16
-task_new_game_prof_birch_speech_16: @ 8031040
- push {r4,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _0803105C
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0803107A
-_0803105C:
- 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_new_game_prof_birch_speech_17
- str r1, [r0]
-_0803107A:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end task_new_game_prof_birch_speech_16
-
- thumb_func_start task_new_game_prof_birch_speech_17
-task_new_game_prof_birch_speech_17: @ 8031090
- push {r4,r5,lr}
- sub sp, 0x8
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0
- bne _080310EC
- bl FreeAllWindowBuffers
- ldr r1, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldrh r0, [r0, 0x1A]
- bl sub_818D820
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x14
- bl __umodsi3
- lsls r0, 24
- lsrs r0, 24
- bl set_default_player_name
- adds r0, r4, 0
- bl DestroyTask
- ldr r0, =gSaveBlock2Ptr
- ldr r1, [r0]
- ldrb r2, [r1, 0x8]
- str r5, [sp]
- ldr r0, =new_game_prof_birch_speech_part2_start
- str r0, [sp, 0x4]
- movs r0, 0
- movs r3, 0
- bl DoNamingScreen
-_080310EC:
- add sp, 0x8
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end task_new_game_prof_birch_speech_17
-
- thumb_func_start task_new_game_prof_birch_speech_part2_2
-task_new_game_prof_birch_speech_part2_2: @ 8031104
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0
- bl sub_8032318
- ldr r0, =gStringVar4
- ldr r1, =gUnknown_082C8C1C
- bl StringExpandPlaceholders
- movs r0, 0x1
- bl AddTextPrinterForMessage
- ldr r1, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, =task_new_game_prof_birch_speech_part2_3
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end task_new_game_prof_birch_speech_part2_2
-
- thumb_func_start task_new_game_prof_birch_speech_part2_3
-task_new_game_prof_birch_speech_part2_3: @ 8031144
- push {r4,lr}
- sub sp, 0x8
- lsls r0, 24
- lsrs r4, r0, 24
- bl sub_8197224
- lsls r0, 16
- cmp r0, 0
- bne _08031178
- movs r0, 0x2
- str r0, [sp]
- movs r0, 0xF
- str r0, [sp, 0x4]
- movs r0, 0x2
- movs r1, 0x1
- movs r2, 0xF3
- movs r3, 0xDF
- bl sub_80323CC
- ldr r1, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, =task_new_game_prof_birch_speech_part2_4
- str r1, [r0]
-_08031178:
- add sp, 0x8
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end task_new_game_prof_birch_speech_part2_3
-
- thumb_func_start task_new_game_prof_birch_speech_part2_4
-task_new_game_prof_birch_speech_part2_4: @ 8031188
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- bl ProcessMenuInputNoWrap_
- lsls r0, 24
- asrs r1, r0, 24
- cmp r1, 0
- beq _080311AE
- cmp r1, 0
- bgt _080311A8
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _080311FC
- b _08031210
-_080311A8:
- cmp r1, 0x1
- beq _080311FC
- b _08031210
-_080311AE:
- movs r0, 0x5
- bl PlaySE
- ldr r2, =gSprites
- ldr r0, =gTasks
- lsls r4, r5, 2
- adds r4, r5
- lsls r4, 3
- adds r4, r0
- movs r0, 0xC
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r2, [r0, 0x1]
- movs r1, 0xD
- negs r1, r1
- ands r1, r2
- movs r2, 0x4
- orrs r1, r2
- strb r1, [r0, 0x1]
- adds r0, r5, 0
- movs r1, 0x2
- bl sub_8031ACC
- adds r0, r5, 0
- movs r1, 0x1
- bl sub_8031C88
- ldr r0, =task_new_game_prof_birch_speech_part2_5
- str r0, [r4]
- b _08031210
- .pool
-_080311FC:
- movs r0, 0x5
- bl PlaySE
- ldr r0, =gTasks
- lsls r1, r5, 2
- adds r1, r5
- lsls r1, 3
- adds r1, r0
- ldr r0, =task_new_game_prof_birch_speech_11
- str r0, [r1]
-_08031210:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end task_new_game_prof_birch_speech_part2_4
-
- thumb_func_start task_new_game_prof_birch_speech_part2_5
-task_new_game_prof_birch_speech_part2_5: @ 8031220
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- ldrh r2, [r1, 0x10]
- movs r3, 0x10
- ldrsh r0, [r1, r3]
- cmp r0, 0
- beq _0803124C
- adds r0, r2, 0x2
- strh r0, [r1, 0x10]
- ldrh r1, [r1, 0x10]
- movs r0, 0x14
- bl SetGpuReg
- b _08031250
- .pool
-_0803124C:
- ldr r0, =task_new_game_prof_birch_speech_part2_6
- str r0, [r1]
-_08031250:
- pop {r0}
- bx r0
- .pool
- thumb_func_end task_new_game_prof_birch_speech_part2_5
-
- thumb_func_start task_new_game_prof_birch_speech_part2_6
-task_new_game_prof_birch_speech_part2_6: @ 8031258
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r1, =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r7, r0, r1
- movs r1, 0x12
- ldrsh r0, [r7, r1]
- cmp r0, 0
- beq _08031320
- ldr r5, =gSprites
- movs r2, 0x1C
- ldrsh r1, [r7, r2]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- adds r0, 0x3E
- ldrb r1, [r0]
- movs r3, 0x4
- mov r12, r3
- mov r2, r12
- orrs r1, r2
- strb r1, [r0]
- movs r3, 0x1E
- ldrsh r1, [r7, r3]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- adds r0, 0x3E
- ldrb r1, [r0]
- orrs r1, r2
- strb r1, [r0]
- ldrb r0, [r7, 0x18]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r5
- movs r0, 0x88
- strh r0, [r1, 0x20]
- movs r0, 0x3C
- strh r0, [r1, 0x22]
- adds r3, r1, 0
- adds r3, 0x3E
- ldrb r2, [r3]
- movs r4, 0x5
- negs r4, r4
- adds r0, r4, 0
- ands r0, r2
- strb r0, [r3]
- ldrb r3, [r1, 0x1]
- movs r2, 0xD
- negs r2, r2
- adds r0, r2, 0
- ands r0, r3
- mov r3, r12
- orrs r0, r3
- strb r0, [r1, 0x1]
- ldrb r1, [r7, 0x1A]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- movs r1, 0x64
- strh r1, [r0, 0x20]
- movs r1, 0x4B
- strh r1, [r0, 0x22]
- adds r3, r0, 0
- adds r3, 0x3E
- ldrb r1, [r3]
- ands r4, r1
- strb r4, [r3]
- ldrb r1, [r0, 0x1]
- ands r2, r1
- mov r1, r12
- orrs r2, r1
- strb r2, [r0, 0x1]
- adds r0, r6, 0
- movs r1, 0x2
- bl sub_8031BAC
- adds r0, r6, 0
- movs r1, 0x1
- bl sub_8031D34
- movs r0, 0
- bl sub_8032318
- ldr r0, =gStringVar4
- ldr r1, =gUnknown_082C8C2A
- bl StringExpandPlaceholders
- movs r0, 0x1
- bl AddTextPrinterForMessage
- ldr r0, =task_new_game_prof_birch_speech_part2_7
- str r0, [r7]
-_08031320:
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end task_new_game_prof_birch_speech_part2_6
-
- thumb_func_start task_new_game_prof_birch_speech_part2_7
-task_new_game_prof_birch_speech_part2_7: @ 803133C
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r1, =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r4, r0, r1
- movs r1, 0x12
- ldrsh r0, [r4, r1]
- cmp r0, 0
- beq _080313D2
- ldr r7, =gSprites
- movs r1, 0x18
- ldrsh r0, [r4, r1]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r7
- ldrb r2, [r1, 0x1]
- movs r6, 0xD
- negs r6, r6
- adds r0, r6, 0
- ands r0, r2
- strb r0, [r1, 0x1]
- movs r1, 0x1A
- ldrsh r0, [r4, r1]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r7
- ldrb r2, [r1, 0x1]
- adds r0, r6, 0
- ands r0, r2
- strb r0, [r1, 0x1]
- bl sub_8197224
- lsls r0, 16
- cmp r0, 0
- bne _080313D2
- movs r0, 0x18
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r7
- ldrb r2, [r0, 0x1]
- adds r1, r6, 0
- ands r1, r2
- movs r3, 0x4
- orrs r1, r3
- strb r1, [r0, 0x1]
- movs r1, 0x1A
- ldrsh r0, [r4, r1]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r7
- ldrb r2, [r1, 0x1]
- adds r0, r6, 0
- ands r0, r2
- orrs r0, r3
- strb r0, [r1, 0x1]
- adds r0, r5, 0
- movs r1, 0x2
- bl sub_8031ACC
- adds r0, r5, 0
- movs r1, 0x1
- bl sub_8031C88
- movs r0, 0x40
- strh r0, [r4, 0x16]
- ldr r0, =task_new_game_prof_birch_speech_part2_8
- str r0, [r4]
-_080313D2:
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end task_new_game_prof_birch_speech_part2_7
-
- thumb_func_start task_new_game_prof_birch_speech_part2_8
-task_new_game_prof_birch_speech_part2_8: @ 80313E4
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r1, =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r4, r0, r1
- movs r2, 0x12
- ldrsh r0, [r4, r2]
- adds r7, r1, 0
- cmp r0, 0
- beq _080314B0
- ldr r2, =gSprites
- movs r3, 0x18
- ldrsh r1, [r4, r3]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- adds r0, 0x3E
- ldrb r1, [r0]
- movs r3, 0x4
- orrs r1, r3
- strb r1, [r0]
- movs r0, 0x1A
- ldrsh r1, [r4, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- adds r0, 0x3E
- ldrb r1, [r0]
- orrs r1, r3
- strb r1, [r0]
- ldrh r1, [r4, 0x16]
- movs r3, 0x16
- ldrsh r0, [r4, r3]
- cmp r0, 0
- beq _08031444
- subs r0, r1, 0x1
- strh r0, [r4, 0x16]
- b _080314B0
- .pool
-_08031444:
- ldr r0, =gSaveBlock2Ptr
- ldr r0, [r0]
- ldrb r0, [r0, 0x8]
- cmp r0, 0
- beq _08031458
- ldrb r5, [r4, 0x1E]
- b _0803145A
- .pool
-_08031458:
- ldrb r5, [r4, 0x1C]
-_0803145A:
- lsls r1, r5, 4
- adds r1, r5
- lsls r1, 2
- adds r1, r2
- movs r0, 0x78
- strh r0, [r1, 0x20]
- movs r0, 0x3C
- strh r0, [r1, 0x22]
- adds r3, r1, 0
- adds r3, 0x3E
- ldrb r2, [r3]
- subs r0, 0x41
- ands r0, r2
- strb r0, [r3]
- ldrb r2, [r1, 0x1]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- movs r2, 0x4
- orrs r0, r2
- strb r0, [r1, 0x1]
- lsls r4, r6, 2
- adds r4, r6
- lsls r4, 3
- adds r4, r7
- strh r5, [r4, 0xC]
- adds r0, r6, 0
- movs r1, 0x2
- bl sub_8031BAC
- adds r0, r6, 0
- movs r1, 0x1
- bl sub_8031D34
- ldr r0, =gStringVar4
- ldr r1, =gUnknown_082C8C7A
- bl StringExpandPlaceholders
- movs r0, 0x1
- bl AddTextPrinterForMessage
- ldr r0, =task_new_game_prof_birch_speech_part2_9
- str r0, [r4]
-_080314B0:
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end task_new_game_prof_birch_speech_part2_8
-
- thumb_func_start task_new_game_prof_birch_speech_part2_9
-task_new_game_prof_birch_speech_part2_9: @ 80314C4
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r6, r1, r2
- movs r1, 0x12
- ldrsh r0, [r6, r1]
- cmp r0, 0
- beq _0803155C
- ldr r7, =gSprites
- movs r1, 0xC
- ldrsh r0, [r6, r1]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r7
- ldrb r2, [r1, 0x1]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- strb r0, [r1, 0x1]
- bl sub_8197224
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- cmp r0, 0
- bne _0803155C
- ldrb r0, [r6, 0xC]
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- adds r5, r4, r7
- ldrb r1, [r5, 0x1]
- movs r0, 0x4
- negs r0, r0
- ands r0, r1
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r5, 0x1]
- adds r0, r7, 0
- adds r0, 0x10
- adds r0, r4, r0
- ldr r1, =gUnknown_082FF114
- str r1, [r0]
- adds r0, r5, 0
- bl InitSpriteAffineAnim
- adds r0, r5, 0
- movs r1, 0
- bl StartSpriteAffineAnim
- adds r0, r7, 0
- adds r0, 0x1C
- adds r4, r0
- ldr r0, =sub_80318D8
- str r0, [r4]
- ldr r0, =0x0000ffff
- mov r1, r8
- str r1, [sp]
- movs r1, 0
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- movs r0, 0x4
- bl FadeOutBGM
- ldr r0, =task_new_game_prof_birch_speech_part2_10
- str r0, [r6]
-_0803155C:
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end task_new_game_prof_birch_speech_part2_9
-
- thumb_func_start task_new_game_prof_birch_speech_part2_10
-task_new_game_prof_birch_speech_part2_10: @ 8031580
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r3, r1, r2
- ldrb r1, [r3, 0xC]
- ldr r2, =gSprites
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- adds r0, 0x3F
- ldrb r0, [r0]
- lsls r0, 26
- cmp r0, 0
- bge _080315AA
- ldr r0, =task_new_game_prof_birch_speech_part2_11
- str r0, [r3]
-_080315AA:
- pop {r0}
- bx r0
- .pool
- thumb_func_end task_new_game_prof_birch_speech_part2_10
-
- thumb_func_start task_new_game_prof_birch_speech_part2_11
-task_new_game_prof_birch_speech_part2_11: @ 80315BC
- push {r4,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0803160A
- ldr r0, =gTasks
- lsls r4, r2, 2
- adds r4, r2
- lsls r4, 3
- adds r4, r0
- ldrb r2, [r4, 0xC]
- ldr r1, =gSprites
- lsls r0, r2, 4
- adds r0, r2
- lsls r0, 2
- adds r1, 0x1C
- adds r0, r1
- ldr r1, =nullsub_11
- str r1, [r0]
- movs r1, 0x82
- lsls r1, 5
- movs r0, 0
- bl SetGpuReg
- ldr r0, =0xffff0000
- ldr r1, =0x0000ffff
- str r1, [sp]
- movs r1, 0
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r0, =task_new_game_prof_birch_speech_part2_12
- str r0, [r4]
-_0803160A:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end task_new_game_prof_birch_speech_part2_11
-
- thumb_func_start task_new_game_prof_birch_speech_part2_12
-task_new_game_prof_birch_speech_part2_12: @ 8031630
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08031666
- bl FreeAllWindowBuffers
- ldr r1, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldrh r0, [r0, 0x1A]
- bl sub_818D820
- bl dp13_810BB8C
- ldr r0, =CB2_NewGame
- bl SetMainCallback2
- adds r0, r4, 0
- bl DestroyTask
-_08031666:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end task_new_game_prof_birch_speech_part2_12
-
- thumb_func_start new_game_prof_birch_speech_part2_start
-new_game_prof_birch_speech_part2_start: @ 8031678
- push {r4,r5,lr}
- sub sp, 0xC
- movs r0, 0
- bl ResetBgsAndClearDma3BusyFlags
- movs r0, 0
- movs r1, 0
- bl SetGpuReg
- movs r1, 0x82
- lsls r1, 5
- movs r0, 0
- bl SetGpuReg
- ldr r1, =gUnknown_082FF0E8
- movs r0, 0
- movs r2, 0x2
- bl InitBgsFromTemplates
- ldr r0, =gUnknown_082FF0F0
- bl InitBgFromTemplate
- movs r0, 0
- bl SetVBlankCallback
- movs r0, 0xC
- movs r1, 0
- bl SetGpuReg
- movs r0, 0xA
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x8
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x18
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x1A
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x14
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x16
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x10
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x12
- movs r1, 0
- bl SetGpuReg
- add r0, sp, 0x4
- movs r4, 0
- strh r4, [r0]
- ldr r1, =0x040000d4
- str r0, [r1]
- movs r4, 0xC0
- lsls r4, 19
- str r4, [r1, 0x4]
- ldr r0, =0x8100c000
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- movs r2, 0
- str r2, [sp, 0x8]
- add r0, sp, 0x8
- str r0, [r1]
- movs r0, 0xE0
- lsls r0, 19
- str r0, [r1, 0x4]
- ldr r0, =0x85000100
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- add r0, sp, 0x4
- strh r2, [r0]
- str r0, [r1]
- movs r0, 0xA0
- lsls r0, 19
- str r0, [r1, 0x4]
- ldr r0, =0x81000200
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- bl ResetPaletteFade
- ldr r0, =gBirchIntroShadowGfx
- adds r1, r4, 0
- bl LZ77UnCompVram
- ldr r0, =gUnknown_082FEEF0
- ldr r1, =0x06003800
- bl LZ77UnCompVram
- ldr r0, =gUnknown_082FECFC
- movs r1, 0
- movs r2, 0x40
- bl LoadPalette
- ldr r0, =gUnknown_082FF018+2
- movs r1, 0x1
- movs r2, 0x10
- bl LoadPalette
- bl ResetTasks
- ldr r0, =task_new_game_prof_birch_speech_part2_1
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r1, =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r4, r0, r1
- movs r0, 0x5
- strh r0, [r4, 0x16]
- ldr r0, =0x0000ffc4
- strh r0, [r4, 0x10]
- bl ScanlineEffect_Stop
- bl ResetSpriteData
- bl FreeAllSpritePalettes
- bl dp13_810BB8C
- adds r0, r5, 0
- bl AddBirchSpeechObjects
- ldr r0, =gSaveBlock2Ptr
- ldr r0, [r0]
- ldrb r0, [r0, 0x8]
- cmp r0, 0
- beq _080317DC
- movs r0, 0x1
- strh r0, [r4, 0x14]
- ldrb r3, [r4, 0x1E]
- b _080317E0
- .pool
-_080317DC:
- strh r0, [r4, 0x14]
- ldrb r3, [r4, 0x1C]
-_080317E0:
- ldr r0, =gSprites
- lsls r1, r3, 4
- adds r1, r3
- lsls r1, 2
- adds r1, r0
- movs r4, 0
- movs r0, 0xB4
- strh r0, [r1, 0x20]
- movs r0, 0x3C
- strh r0, [r1, 0x22]
- adds r1, 0x3E
- ldrb r2, [r1]
- subs r0, 0x41
- ands r0, r2
- strb r0, [r1]
- ldr r1, =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- strh r3, [r0, 0xC]
- ldr r1, =0x0000ffc4
- movs r0, 0x14
- bl SetGpuReg
- movs r0, 0x1
- negs r0, r0
- str r4, [sp]
- movs r1, 0
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- movs r0, 0x40
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x44
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x48
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x4A
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x50
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x52
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x54
- movs r1, 0
- bl SetGpuReg
- movs r0, 0
- bl ShowBg
- movs r0, 0x1
- bl ShowBg
- ldr r3, =0x04000208
- ldrh r2, [r3]
- strh r4, [r3]
- ldr r4, =0x04000200
- ldrh r0, [r4]
- movs r1, 0x1
- orrs r0, r1
- strh r0, [r4]
- strh r2, [r3]
- ldr r0, =VBlankCB_MainMenu
- bl SetVBlankCallback
- ldr r0, =CB2_MainMenu
- bl SetMainCallback2
- ldr r0, =gUnknown_082FF080
- bl InitWindows
- movs r0, 0
- movs r1, 0xF3
- bl LoadMainMenuWindowFrameTiles
- movs r0, 0
- movs r1, 0xFC
- movs r2, 0xF0
- bl copy_textbox_border_tile_patterns_to_vram
- movs r0, 0
- bl PutWindowTilemap
- movs r0, 0
- movs r1, 0x3
- bl CopyWindowToVram
- add sp, 0xC
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end new_game_prof_birch_speech_part2_start
-
- thumb_func_start nullsub_11
-nullsub_11: @ 80318D4
- bx lr
- thumb_func_end nullsub_11
-
- thumb_func_start sub_80318D8
-sub_80318D8: @ 80318D8
- movs r2, 0x22
- ldrsh r1, [r0, r2]
- lsls r1, 16
- movs r3, 0x2E
- ldrsh r2, [r0, r3]
- adds r1, r2
- movs r2, 0xC0
- lsls r2, 8
- adds r1, r2
- lsrs r2, r1, 16
- strh r2, [r0, 0x22]
- strh r1, [r0, 0x2E]
- bx lr
- thumb_func_end sub_80318D8
-
- thumb_func_start sub_80318F4
-sub_80318F4: @ 80318F4
- push {lr}
- sub sp, 0x10
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 24
- ldr r2, =0x00000127
- str r0, [sp]
- str r1, [sp, 0x4]
- movs r0, 0xE
- str r0, [sp, 0x8]
- ldr r0, =0x0000ffff
- str r0, [sp, 0xC]
- adds r0, r2, 0
- movs r1, 0x8
- movs r2, 0
- movs r3, 0x1
- bl sub_818D3E4
- lsls r0, 24
- lsrs r0, 24
- add sp, 0x10
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80318F4
-
- thumb_func_start AddBirchSpeechObjects
-@ void AddBirchSpeechObjects(u8 taskId)
-AddBirchSpeechObjects: @ 803192C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x88
- movs r1, 0x3C
- movs r2, 0x1
- bl AddNewGameBirchObject
- lsls r0, 24
- lsrs r0, 24
- ldr r1, =gSprites
- mov r9, r1
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- movs r3, 0x1C
- add r3, r9
- mov r8, r3
- adds r1, r2, r3
- ldr r7, =nullsub_11
- str r7, [r1]
- add r2, r9
- ldrb r3, [r2, 0x5]
- movs r6, 0xD
- negs r6, r6
- adds r1, r6, 0
- ands r1, r3
- strb r1, [r2, 0x5]
- adds r2, 0x3E
- ldrb r1, [r2]
- movs r3, 0x4
- mov r10, r3
- mov r3, r10
- orrs r1, r3
- strb r1, [r2]
- ldr r1, =gTasks
- lsls r5, r4, 2
- adds r5, r4
- lsls r5, 3
- adds r5, r1
- strh r0, [r5, 0x18]
- movs r0, 0x64
- movs r1, 0x4B
- bl sub_80318F4
- lsls r0, 24
- lsrs r0, 24
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- mov r4, r8
- adds r1, r2, r4
- str r7, [r1]
- add r2, r9
- ldrb r3, [r2, 0x5]
- adds r1, r6, 0
- ands r1, r3
- strb r1, [r2, 0x5]
- adds r2, 0x3E
- ldrb r1, [r2]
- mov r3, r10
- orrs r1, r3
- strb r1, [r2]
- strh r0, [r5, 0x1A]
- movs r0, 0x3C
- bl sub_806EFF0
- lsls r0, 24
- lsrs r0, 24
- ldr r4, =0x0201c000
- str r4, [sp]
- movs r1, 0x78
- movs r2, 0x3C
- movs r3, 0
- bl CreateTrainerSprite
- lsls r0, 24
- lsrs r0, 24
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- mov r3, r8
- adds r1, r2, r3
- str r7, [r1]
- add r2, r9
- adds r3, r2, 0
- adds r3, 0x3E
- ldrb r1, [r3]
- mov r4, r10
- orrs r1, r4
- strb r1, [r3]
- ldrb r3, [r2, 0x5]
- adds r1, r6, 0
- ands r1, r3
- strb r1, [r2, 0x5]
- strh r0, [r5, 0x1C]
- movs r0, 0x3F
- bl sub_806EFF0
- lsls r0, 24
- lsrs r0, 24
- ldr r1, =0x0201c000
- movs r2, 0x80
- lsls r2, 4
- adds r4, r1, r2
- str r4, [sp]
- movs r1, 0x78
- movs r2, 0x3C
- movs r3, 0
- bl CreateTrainerSprite
- lsls r0, 24
- lsrs r0, 24
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- add r8, r2
- mov r3, r8
- str r7, [r3]
- add r2, r9
- adds r3, r2, 0
- adds r3, 0x3E
- ldrb r1, [r3]
- mov r4, r10
- orrs r1, r4
- strb r1, [r3]
- ldrb r1, [r2, 0x5]
- ands r6, r1
- strb r6, [r2, 0x5]
- strh r0, [r5, 0x1E]
- 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 AddBirchSpeechObjects
-
- thumb_func_start sub_8031A5C
-sub_8031A5C: @ 8031A5C
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r3, r0, 24
- ldr r4, =gTasks
- lsls r0, r3, 2
- adds r0, r3
- lsls r0, 3
- adds r2, r0, r4
- ldrh r1, [r2, 0xA]
- movs r5, 0xA
- ldrsh r0, [r2, r5]
- cmp r0, 0
- bne _08031A94
- movs r1, 0x8
- ldrsh r0, [r2, r1]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r4
- movs r0, 0x1
- strh r0, [r1, 0x12]
- adds r0, r3, 0
- bl DestroyTask
- b _08031AC4
- .pool
-_08031A94:
- ldrh r3, [r2, 0x10]
- movs r4, 0x10
- ldrsh r0, [r2, r4]
- cmp r0, 0
- beq _08031AA4
- subs r0, r3, 0x1
- strh r0, [r2, 0x10]
- b _08031AC4
-_08031AA4:
- ldrh r0, [r2, 0xE]
- strh r0, [r2, 0x10]
- subs r1, 0x1
- strh r1, [r2, 0xA]
- ldrh r0, [r2, 0xC]
- adds r0, 0x1
- strh r0, [r2, 0xC]
- movs r5, 0xC
- ldrsh r0, [r2, r5]
- lsls r0, 8
- adds r1, r0
- lsls r1, 16
- lsrs r1, 16
- movs r0, 0x52
- bl SetGpuReg
-_08031AC4:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_8031A5C
-
- thumb_func_start sub_8031ACC
-sub_8031ACC: @ 8031ACC
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- adds r4, r0, 0
- adds r5, r1, 0
- lsls r4, 24
- lsrs r4, 24
- lsls r5, 24
- lsrs r5, 24
- movs r1, 0x94
- lsls r1, 2
- movs r0, 0x50
- bl SetGpuReg
- movs r0, 0x52
- movs r1, 0x10
- bl SetGpuReg
- movs r0, 0x54
- movs r1, 0
- bl SetGpuReg
- ldr r0, =gTasks
- mov r8, r0
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- add r0, r8
- movs r6, 0
- strh r6, [r0, 0x12]
- ldr r0, =sub_8031A5C
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- add r1, r8
- strh r4, [r1, 0x8]
- movs r0, 0x10
- strh r0, [r1, 0xA]
- strh r6, [r1, 0xC]
- strh r5, [r1, 0xE]
- strh r5, [r1, 0x10]
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8031ACC
-
- thumb_func_start sub_8031B3C
-sub_8031B3C: @ 8031B3C
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r3, r0, 24
- ldr r4, =gTasks
- lsls r0, r3, 2
- adds r0, r3
- lsls r0, 3
- adds r2, r0, r4
- ldrh r1, [r2, 0xA]
- movs r5, 0xA
- ldrsh r0, [r2, r5]
- cmp r0, 0x10
- bne _08031B74
- movs r1, 0x8
- ldrsh r0, [r2, r1]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r4
- movs r0, 0x1
- strh r0, [r1, 0x12]
- adds r0, r3, 0
- bl DestroyTask
- b _08031BA4
- .pool
-_08031B74:
- ldrh r3, [r2, 0x10]
- movs r4, 0x10
- ldrsh r0, [r2, r4]
- cmp r0, 0
- beq _08031B84
- subs r0, r3, 0x1
- strh r0, [r2, 0x10]
- b _08031BA4
-_08031B84:
- ldrh r0, [r2, 0xE]
- strh r0, [r2, 0x10]
- adds r1, 0x1
- strh r1, [r2, 0xA]
- ldrh r0, [r2, 0xC]
- subs r0, 0x1
- strh r0, [r2, 0xC]
- movs r5, 0xC
- ldrsh r0, [r2, r5]
- lsls r0, 8
- adds r1, r0
- lsls r1, 16
- lsrs r1, 16
- movs r0, 0x52
- bl SetGpuReg
-_08031BA4:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_8031B3C
-
- thumb_func_start sub_8031BAC
-sub_8031BAC: @ 8031BAC
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- adds r4, r0, 0
- adds r5, r1, 0
- lsls r4, 24
- lsrs r4, 24
- lsls r5, 24
- lsrs r5, 24
- movs r1, 0x94
- lsls r1, 2
- movs r0, 0x50
- bl SetGpuReg
- movs r1, 0x80
- lsls r1, 5
- movs r0, 0x52
- bl SetGpuReg
- movs r0, 0x54
- movs r1, 0
- bl SetGpuReg
- ldr r0, =gTasks
- mov r8, r0
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- add r0, r8
- movs r6, 0
- strh r6, [r0, 0x12]
- ldr r0, =sub_8031B3C
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- add r1, r8
- strh r4, [r1, 0x8]
- strh r6, [r1, 0xA]
- movs r0, 0x10
- strh r0, [r1, 0xC]
- strh r5, [r1, 0xE]
- strh r5, [r1, 0x10]
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8031BAC
-
- thumb_func_start sub_8031C1C
-sub_8031C1C: @ 8031C1C
- push {r4,lr}
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r1, =gTasks
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- adds r1, r0, r1
- ldrh r3, [r1, 0xC]
- movs r4, 0xC
- ldrsh r0, [r1, r4]
- cmp r0, 0
- beq _08031C40
- subs r0, r3, 0x1
- strh r0, [r1, 0xC]
- b _08031C7C
- .pool
-_08031C40:
- ldrh r3, [r1, 0xA]
- movs r4, 0xA
- ldrsh r0, [r1, r4]
- cmp r0, 0x8
- bne _08031C52
- adds r0, r2, 0
- bl DestroyTask
- b _08031C7C
-_08031C52:
- ldrh r2, [r1, 0x10]
- movs r4, 0x10
- ldrsh r0, [r1, r4]
- cmp r0, 0
- beq _08031C62
- subs r0, r2, 0x1
- strh r0, [r1, 0x10]
- b _08031C7C
-_08031C62:
- ldrh r0, [r1, 0xE]
- strh r0, [r1, 0x10]
- adds r0, r3, 0x1
- strh r0, [r1, 0xA]
- movs r2, 0xA
- ldrsh r0, [r1, r2]
- lsls r0, 1
- ldr r1, =gUnknown_082FF018
- adds r0, r1
- movs r1, 0x1
- movs r2, 0x10
- bl LoadPalette
-_08031C7C:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8031C1C
-
- thumb_func_start sub_8031C88
-sub_8031C88: @ 8031C88
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- lsls r4, 24
- lsrs r4, 24
- lsls r5, 24
- lsrs r5, 24
- ldr r0, =sub_8031C1C
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- movs r0, 0
- strh r4, [r1, 0x8]
- strh r0, [r1, 0xA]
- movs r0, 0x8
- strh r0, [r1, 0xC]
- strh r5, [r1, 0xE]
- strh r5, [r1, 0x10]
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8031C88
-
- thumb_func_start sub_8031CC8
-sub_8031CC8: @ 8031CC8
- push {r4,lr}
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r1, =gTasks
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- adds r1, r0, r1
- ldrh r3, [r1, 0xC]
- movs r4, 0xC
- ldrsh r0, [r1, r4]
- cmp r0, 0
- beq _08031CEC
- subs r0, r3, 0x1
- strh r0, [r1, 0xC]
- b _08031D28
- .pool
-_08031CEC:
- ldrh r3, [r1, 0xA]
- movs r4, 0xA
- ldrsh r0, [r1, r4]
- cmp r0, 0
- bne _08031CFE
- adds r0, r2, 0
- bl DestroyTask
- b _08031D28
-_08031CFE:
- ldrh r2, [r1, 0x10]
- movs r4, 0x10
- ldrsh r0, [r1, r4]
- cmp r0, 0
- beq _08031D0E
- subs r0, r2, 0x1
- strh r0, [r1, 0x10]
- b _08031D28
-_08031D0E:
- ldrh r0, [r1, 0xE]
- strh r0, [r1, 0x10]
- subs r0, r3, 0x1
- strh r0, [r1, 0xA]
- movs r2, 0xA
- ldrsh r0, [r1, r2]
- lsls r0, 1
- ldr r1, =gUnknown_082FF018
- adds r0, r1
- movs r1, 0x1
- movs r2, 0x10
- bl LoadPalette
-_08031D28:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8031CC8
-
- thumb_func_start sub_8031D34
-sub_8031D34: @ 8031D34
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- lsls r4, 24
- lsrs r4, 24
- lsls r5, 24
- lsrs r5, 24
- ldr r0, =sub_8031CC8
- movs r1, 0
- 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 r4, [r1, 0x8]
- movs r0, 0x8
- strh r0, [r1, 0xA]
- strh r0, [r1, 0xC]
- strh r5, [r1, 0xE]
- strh r5, [r1, 0x10]
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8031D34
-
- thumb_func_start sub_8031D74
-sub_8031D74: @ 8031D74
- push {lr}
- ldr r0, =gUnknown_082FF088
- movs r1, 0xF3
- bl DrawMainMenuWindowBorder
- movs r0, 0x1
- movs r1, 0x11
- bl FillWindowPixelBuffer
- ldr r2, =gUnknown_082FF118
- movs r0, 0x1
- movs r1, 0x2
- bl PrintMenuTable
- movs r0, 0x1
- movs r1, 0x2
- movs r2, 0
- bl InitMenuInUpperLeftCornerPlaySoundWhenAPressed
- movs r0, 0x1
- bl PutWindowTilemap
- movs r0, 0x1
- movs r1, 0x3
- bl CopyWindowToVram
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8031D74
-
- thumb_func_start sub_8031DB4
-sub_8031DB4: @ 8031DB4
- push {lr}
- bl ProcessMenuInputNoWrapAround
- lsls r0, 24
- asrs r0, 24
- pop {r1}
- bx r1
- thumb_func_end sub_8031DB4
-
- thumb_func_start set_default_player_name
-@ void set_default_player_name(int name_id)
-set_default_player_name: @ 8031DC4
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r1, =gSaveBlock2Ptr
- ldr r0, [r1]
- ldrb r0, [r0, 0x8]
- adds r5, r1, 0
- cmp r0, 0
- bne _08031DE4
- ldr r1, =gMalePresetNames
- b _08031DE6
- .pool
-_08031DE4:
- ldr r1, =gFemalePresetNames
-_08031DE6:
- lsls r0, r2, 2
- adds r0, r1
- ldr r3, [r0]
- movs r2, 0
- ldr r4, =gSaveBlock2Ptr
-_08031DF0:
- ldr r1, [r4]
- adds r1, r2
- adds r0, r3, r2
- ldrb r0, [r0]
- strb r0, [r1]
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x6
- bls _08031DF0
- ldr r1, [r5]
- movs r0, 0xFF
- strb r0, [r1, 0x7]
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end set_default_player_name
-
- thumb_func_start CreateMainMenuErrorWindow
-@ void CreateMainMenuErrorWindow(u8 *str)
-CreateMainMenuErrorWindow: @ 8031E18
- push {r4,lr}
- sub sp, 0xC
- adds r4, r0, 0
- movs r0, 0x7
- movs r1, 0x11
- bl FillWindowPixelBuffer
- movs r0, 0x1
- str r0, [sp]
- movs r0, 0x2
- str r0, [sp, 0x4]
- movs r0, 0
- str r0, [sp, 0x8]
- movs r0, 0x7
- movs r1, 0x1
- adds r2, r4, 0
- movs r3, 0
- bl PrintTextOnWindow
- movs r0, 0x7
- bl PutWindowTilemap
- movs r0, 0x7
- movs r1, 0x2
- bl CopyWindowToVram
- ldr r0, =gUnknown_082FF070
- ldr r1, =0x000001d5
- bl DrawMainMenuWindowBorder
- ldr r1, =0x000009e7
- movs r0, 0x40
- bl SetGpuReg
- ldr r1, =0x0000719f
- movs r0, 0x44
- bl SetGpuReg
- add sp, 0xC
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end CreateMainMenuErrorWindow
-
- thumb_func_start fmt_savegame
-fmt_savegame: @ 8031E7C
- push {lr}
- bl fmt_time
- bl fmt_pokedex
- bl fmt_player
- bl fmt_badges
- pop {r0}
- bx r0
- thumb_func_end fmt_savegame
-
- thumb_func_start fmt_time
-fmt_time: @ 8031E94
- push {r4-r6,lr}
- sub sp, 0xC
- ldr r4, =gStringVar4
- ldr r1, =gText_ContinueMenuPlayer
- adds r0, r4, 0
- bl StringExpandPlaceholders
- ldr r6, =gUnknown_082FF0E3
- str r6, [sp]
- movs r5, 0x1
- negs r5, r5
- str r5, [sp, 0x4]
- str r4, [sp, 0x8]
- movs r0, 0x2
- movs r1, 0x1
- movs r2, 0
- movs r3, 0x11
- bl box_print
- ldr r4, =gSaveBlock2Ptr
- ldr r1, [r4]
- movs r0, 0x1
- movs r2, 0x64
- bl GetStringRightAlignXOffset
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- str r6, [sp]
- str r5, [sp, 0x4]
- ldr r0, [r4]
- str r0, [sp, 0x8]
- movs r0, 0x2
- movs r1, 0x1
- movs r3, 0x11
- bl box_print
- add sp, 0xC
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end fmt_time
-
- thumb_func_start fmt_player
-fmt_player: @ 8031EF8
- push {r4-r6,lr}
- sub sp, 0x2C
- ldr r4, =gStringVar4
- ldr r1, =gText_ContinueMenuTime
- adds r0, r4, 0
- bl StringExpandPlaceholders
- ldr r6, =gUnknown_082FF0E3
- str r6, [sp]
- movs r5, 0x1
- negs r5, r5
- str r5, [sp, 0x4]
- str r4, [sp, 0x8]
- movs r0, 0x2
- movs r1, 0x1
- movs r2, 0x6C
- movs r3, 0x11
- bl box_print
- ldr r4, =gSaveBlock2Ptr
- ldr r0, [r4]
- ldrh r1, [r0, 0xE]
- add r0, sp, 0xC
- movs r2, 0
- movs r3, 0x3
- bl ConvertIntToDecimalStringN
- movs r1, 0xF0
- strb r1, [r0]
- adds r0, 0x1
- ldr r1, [r4]
- ldrb r1, [r1, 0x10]
- movs r2, 0x2
- movs r3, 0x2
- bl ConvertIntToDecimalStringN
- movs r0, 0x1
- add r1, sp, 0xC
- movs r2, 0xD0
- bl GetStringRightAlignXOffset
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- str r6, [sp]
- str r5, [sp, 0x4]
- add r0, sp, 0xC
- str r0, [sp, 0x8]
- movs r0, 0x2
- movs r1, 0x1
- movs r3, 0x11
- bl box_print
- add sp, 0x2C
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end fmt_player
-
- thumb_func_start fmt_pokedex
-fmt_pokedex: @ 8031F7C
- push {r4-r7,lr}
- sub sp, 0x2C
- ldr r0, =0x00000861
- bl FlagGet
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08031FFE
- bl IsNationalPokedexEnabled
- cmp r0, 0
- beq _08031FA4
- movs r0, 0x1
- bl pokedex_count
- b _08031FAA
- .pool
-_08031FA4:
- movs r0, 0x1
- bl sub_80C0844
-_08031FAA:
- lsls r0, 16
- lsrs r7, r0, 16
- ldr r4, =gStringVar4
- ldr r1, =gText_ContinueMenuPokedex
- adds r0, r4, 0
- bl StringExpandPlaceholders
- ldr r6, =gUnknown_082FF0E3
- str r6, [sp]
- movs r5, 0x1
- negs r5, r5
- str r5, [sp, 0x4]
- str r4, [sp, 0x8]
- movs r0, 0x2
- movs r1, 0x1
- movs r2, 0
- movs r3, 0x21
- bl box_print
- add r0, sp, 0xC
- adds r1, r7, 0
- movs r2, 0
- movs r3, 0x3
- bl ConvertIntToDecimalStringN
- movs r0, 0x1
- add r1, sp, 0xC
- movs r2, 0x64
- bl GetStringRightAlignXOffset
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- str r6, [sp]
- str r5, [sp, 0x4]
- add r0, sp, 0xC
- str r0, [sp, 0x8]
- movs r0, 0x2
- movs r1, 0x1
- movs r3, 0x21
- bl box_print
-_08031FFE:
- add sp, 0x2C
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end fmt_pokedex
-
- thumb_func_start fmt_badges
-fmt_badges: @ 8032014
- push {r4-r7,lr}
- sub sp, 0x2C
- movs r7, 0
- ldr r4, =0x00000867
-_0803201C:
- lsls r0, r4, 16
- lsrs r0, 16
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- beq _08032030
- adds r0, r7, 0x1
- lsls r0, 24
- lsrs r7, r0, 24
-_08032030:
- adds r4, 0x1
- ldr r0, =0x0000086e
- cmp r4, r0
- bls _0803201C
- ldr r4, =gStringVar4
- ldr r1, =gText_ContinueMenuBadges
- adds r0, r4, 0
- bl StringExpandPlaceholders
- ldr r6, =gUnknown_082FF0E3
- str r6, [sp]
- movs r5, 0x1
- negs r5, r5
- str r5, [sp, 0x4]
- str r4, [sp, 0x8]
- movs r0, 0x2
- movs r1, 0x1
- movs r2, 0x6C
- movs r3, 0x21
- bl box_print
- add r0, sp, 0xC
- adds r1, r7, 0
- movs r2, 0x2
- movs r3, 0x1
- bl ConvertIntToDecimalStringN
- movs r0, 0x1
- add r1, sp, 0xC
- movs r2, 0xD0
- bl GetStringRightAlignXOffset
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- str r6, [sp]
- str r5, [sp, 0x4]
- add r0, sp, 0xC
- str r0, [sp, 0x8]
- movs r0, 0x2
- movs r1, 0x1
- movs r3, 0x21
- bl box_print
- add sp, 0x2C
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end fmt_badges
-
- thumb_func_start LoadMainMenuWindowFrameTiles
-@ void LoadMainMenuWindowFrameTiles(u8 bgId, u16 tileOffset)
-LoadMainMenuWindowFrameTiles: @ 80320A4
- push {r4-r6,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- lsls r4, 24
- lsrs r4, 24
- lsls r5, 16
- lsrs r5, 16
- ldr r6, =gSaveBlock2Ptr
- ldr r0, [r6]
- ldrb r0, [r0, 0x14]
- lsrs r0, 3
- bl GetWindowFrameTilesPal
- ldr r1, [r0]
- movs r2, 0x90
- lsls r2, 1
- adds r0, r4, 0
- adds r3, r5, 0
- bl LoadBgTiles
- ldr r0, [r6]
- ldrb r0, [r0, 0x14]
- lsrs r0, 3
- bl GetWindowFrameTilesPal
- ldr r0, [r0, 0x4]
- movs r1, 0x20
- movs r2, 0x20
- bl LoadPalette
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end LoadMainMenuWindowFrameTiles
-
- thumb_func_start DrawMainMenuWindowBorder
-@ void DrawMainMenuWindowBorder(struct WindowTemplate *template, u16 baseTileNum)
-DrawMainMenuWindowBorder: @ 80320EC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x1C
- adds r4, r0, 0
- lsls r6, r1, 16
- movs r0, 0x80
- lsls r0, 9
- adds r0, r6
- lsrs r0, 16
- mov r9, r0
- movs r1, 0x80
- lsls r1, 10
- adds r1, r6
- lsrs r1, 16
- mov r10, r1
- movs r7, 0xC0
- lsls r7, 10
- adds r1, r6, r7
- lsrs r1, 16
- str r1, [sp, 0x18]
- movs r0, 0xA0
- lsls r0, 11
- adds r1, r6, r0
- lsrs r1, 16
- str r1, [sp, 0xC]
- movs r7, 0xC0
- lsls r7, 11
- adds r1, r6, r7
- lsrs r1, 16
- str r1, [sp, 0x10]
- movs r0, 0xE0
- lsls r0, 11
- adds r1, r6, r0
- lsrs r1, 16
- str r1, [sp, 0x14]
- lsrs r1, r6, 16
- movs r7, 0x80
- lsls r7, 12
- adds r6, r7
- lsrs r6, 16
- ldrb r0, [r4]
- ldrb r2, [r4, 0x1]
- subs r2, 0x1
- lsls r2, 24
- lsrs r2, 24
- ldrb r3, [r4, 0x2]
- subs r3, 0x1
- lsls r3, 24
- lsrs r3, 24
- movs r5, 0x1
- str r5, [sp]
- str r5, [sp, 0x4]
- movs r7, 0x2
- mov r8, r7
- str r7, [sp, 0x8]
- bl FillBgTilemapBufferRect
- ldrb r0, [r4]
- ldrb r2, [r4, 0x1]
- ldrb r3, [r4, 0x2]
- subs r3, 0x1
- lsls r3, 24
- lsrs r3, 24
- ldrb r1, [r4, 0x3]
- str r1, [sp]
- str r5, [sp, 0x4]
- str r7, [sp, 0x8]
- mov r1, r9
- bl FillBgTilemapBufferRect
- ldrb r0, [r4]
- ldrb r2, [r4, 0x3]
- ldrb r1, [r4, 0x1]
- adds r2, r1
- lsls r2, 24
- lsrs r2, 24
- ldrb r3, [r4, 0x2]
- subs r3, 0x1
- lsls r3, 24
- lsrs r3, 24
- str r5, [sp]
- str r5, [sp, 0x4]
- str r7, [sp, 0x8]
- mov r1, r10
- bl FillBgTilemapBufferRect
- ldrb r0, [r4]
- ldrb r2, [r4, 0x1]
- subs r2, 0x1
- lsls r2, 24
- lsrs r2, 24
- ldrb r3, [r4, 0x2]
- str r5, [sp]
- ldrb r1, [r4, 0x4]
- str r1, [sp, 0x4]
- str r7, [sp, 0x8]
- ldr r1, [sp, 0x18]
- bl FillBgTilemapBufferRect
- ldrb r0, [r4]
- ldrb r2, [r4, 0x3]
- ldrb r7, [r4, 0x1]
- adds r2, r7
- lsls r2, 24
- lsrs r2, 24
- ldrb r3, [r4, 0x2]
- str r5, [sp]
- ldrb r1, [r4, 0x4]
- str r1, [sp, 0x4]
- mov r1, r8
- str r1, [sp, 0x8]
- ldr r1, [sp, 0xC]
- bl FillBgTilemapBufferRect
- ldrb r0, [r4]
- ldrb r2, [r4, 0x1]
- subs r2, 0x1
- lsls r2, 24
- lsrs r2, 24
- ldrb r3, [r4, 0x4]
- ldrb r7, [r4, 0x2]
- adds r3, r7
- lsls r3, 24
- lsrs r3, 24
- str r5, [sp]
- str r5, [sp, 0x4]
- mov r1, r8
- str r1, [sp, 0x8]
- ldr r1, [sp, 0x10]
- bl FillBgTilemapBufferRect
- ldrb r0, [r4]
- ldrb r2, [r4, 0x1]
- ldrb r3, [r4, 0x4]
- ldrb r7, [r4, 0x2]
- adds r3, r7
- lsls r3, 24
- lsrs r3, 24
- ldrb r1, [r4, 0x3]
- str r1, [sp]
- str r5, [sp, 0x4]
- mov r1, r8
- str r1, [sp, 0x8]
- ldr r1, [sp, 0x14]
- bl FillBgTilemapBufferRect
- ldrb r0, [r4]
- ldrb r2, [r4, 0x3]
- ldrb r7, [r4, 0x1]
- adds r2, r7
- lsls r2, 24
- lsrs r2, 24
- ldrb r3, [r4, 0x4]
- ldrb r1, [r4, 0x2]
- adds r3, r1
- lsls r3, 24
- lsrs r3, 24
- str r5, [sp]
- str r5, [sp, 0x4]
- mov r7, r8
- str r7, [sp, 0x8]
- adds r1, r6, 0
- bl FillBgTilemapBufferRect
- ldrb r0, [r4]
- bl CopyBgTilemapBufferToVram
- add sp, 0x1C
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end DrawMainMenuWindowBorder
-
- thumb_func_start sub_8032250
-sub_8032250: @ 8032250
- push {r4-r6,lr}
- sub sp, 0xC
- adds r6, r0, 0
- ldrb r0, [r6]
- ldrb r1, [r6, 0x1]
- subs r2, r1, 0x1
- lsls r2, 24
- lsrs r2, 24
- ldrb r4, [r6, 0x2]
- subs r3, r4, 0x1
- lsls r3, 24
- lsrs r3, 24
- ldrb r5, [r6, 0x3]
- adds r1, r5
- adds r1, 0x1
- lsls r1, 24
- lsrs r1, 24
- str r1, [sp]
- ldrb r1, [r6, 0x4]
- adds r4, r1
- adds r4, 0x1
- lsls r4, 24
- lsrs r4, 24
- str r4, [sp, 0x4]
- movs r1, 0x2
- str r1, [sp, 0x8]
- movs r1, 0
- bl FillBgTilemapBufferRect
- ldrb r0, [r6]
- bl CopyBgTilemapBufferToVram
- add sp, 0xC
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_8032250
-
- thumb_func_start sub_8032298
-sub_8032298: @ 8032298
- push {r4,r5,lr}
- sub sp, 0xC
- adds r4, r1, 0
- adds r5, r2, 0
- ldr r1, [sp, 0x18]
- lsls r0, 24
- lsrs r0, 24
- lsls r4, 24
- lsls r5, 24
- lsls r3, 24
- lsls r1, 24
- movs r2, 0xFF
- lsls r2, 24
- adds r4, r2
- lsrs r4, 24
- adds r5, r2
- lsrs r5, 24
- movs r2, 0x80
- lsls r2, 18
- adds r3, r2
- lsrs r3, 24
- str r3, [sp]
- adds r1, r2
- lsrs r1, 24
- str r1, [sp, 0x4]
- movs r1, 0x2
- str r1, [sp, 0x8]
- movs r1, 0
- adds r2, r4, 0
- adds r3, r5, 0
- bl FillBgTilemapBufferRect
- add sp, 0xC
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_8032298
-
- thumb_func_start sub_80322E0
-sub_80322E0: @ 80322E0
- push {r4,r5,lr}
- adds r4, r1, 0
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r4, 24
- lsrs r4, 24
- ldr r1, =sub_8032298
- adds r0, r5, 0
- bl CallWindowFunction
- adds r0, r5, 0
- movs r1, 0x11
- bl FillWindowPixelBuffer
- adds r0, r5, 0
- bl ClearWindowTilemap
- cmp r4, 0x1
- bne _0803230E
- adds r0, r5, 0
- movs r1, 0x3
- bl CopyWindowToVram
-_0803230E:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80322E0
-
- thumb_func_start sub_8032318
-sub_8032318: @ 8032318
- push {r4-r6,lr}
- mov r6, r9
- mov r5, r8
- push {r5,r6}
- sub sp, 0x8
- adds r6, r0, 0
- lsls r6, 24
- lsrs r6, 24
- movs r0, 0x1
- movs r1, 0x6
- bl GetFontAttribute
- mov r9, r0
- mov r0, r9
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- movs r0, 0x1
- movs r1, 0
- bl GetFontAttribute
- mov r8, r0
- mov r0, r8
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- movs r0, 0x1
- movs r1, 0x1
- bl GetFontAttribute
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- adds r0, r6, 0
- movs r1, 0x3
- bl GetWindowAttribute
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r6, 0
- movs r1, 0x4
- bl GetWindowAttribute
- lsls r0, 24
- lsrs r0, 24
- mov r1, r8
- muls r1, r4
- str r1, [sp]
- muls r0, r5
- str r0, [sp, 0x4]
- adds r0, r6, 0
- mov r1, r9
- movs r2, 0
- movs r3, 0
- bl FillWindowPixelRect
- adds r0, r6, 0
- movs r1, 0x2
- bl CopyWindowToVram
- add sp, 0x8
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_8032318
-
- thumb_func_start sub_80323A0
-sub_80323A0: @ 80323A0
- push {lr}
- ldr r0, [r0]
- subs r0, 0x2
- ldrb r0, [r0]
- cmp r0, 0x8
- bne _080323C0
- ldr r1, =gUnknown_02022D04
- ldrb r0, [r1]
- cmp r0, 0
- bne _080323C0
- movs r0, 0x1
- strb r0, [r1]
- ldr r0, =sub_8030A70
- movs r1, 0
- bl CreateTask
-_080323C0:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80323A0
-
- thumb_func_start sub_80323CC
-sub_80323CC: @ 80323CC
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- sub sp, 0x20
- adds r4, r0, 0
- adds r5, r1, 0
- mov r8, r2
- ldr r6, [sp, 0x34]
- ldr r1, [sp, 0x38]
- lsls r4, 24
- lsls r5, 24
- mov r0, r8
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- lsls r3, 16
- lsrs r3, 16
- lsls r6, 24
- lsrs r6, 24
- lsls r1, 24
- lsrs r1, 24
- movs r0, 0x80
- lsls r0, 17
- adds r4, r0
- lsrs r4, 24
- adds r5, r0
- lsrs r5, 24
- movs r0, 0x5
- str r0, [sp]
- movs r0, 0x4
- str r0, [sp, 0x4]
- str r1, [sp, 0x8]
- str r3, [sp, 0xC]
- add r0, sp, 0x10
- movs r1, 0
- adds r2, r4, 0
- adds r3, r5, 0
- bl sub_8198A50
- ldr r0, [sp, 0x10]
- ldr r1, [sp, 0x14]
- str r0, [sp, 0x18]
- str r1, [sp, 0x1C]
- add r0, sp, 0x18
- mov r1, r8
- adds r2, r6, 0
- movs r3, 0
- bl CreateYesNoMenu
- add sp, 0x20
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_80323CC
-
- thumb_func_start unknown_rbox_to_vram
-unknown_rbox_to_vram: @ 803243C
- push {r4,r5,lr}
- adds r4, r1, 0
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r4, 24
- lsrs r4, 24
- ldr r1, =sub_8032474
- adds r0, r5, 0
- bl CallWindowFunction
- adds r0, r5, 0
- movs r1, 0x11
- bl FillWindowPixelBuffer
- adds r0, r5, 0
- bl PutWindowTilemap
- cmp r4, 0x1
- bne _0803246A
- adds r0, r5, 0
- movs r1, 0x3
- bl CopyWindowToVram
-_0803246A:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end unknown_rbox_to_vram
-
- thumb_func_start sub_8032474
-sub_8032474: @ 8032474
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x20
- mov r8, r0
- adds r5, r2, 0
- mov r9, r3
- ldr r0, [sp, 0x40]
- ldr r6, [sp, 0x44]
- mov r2, r8
- lsls r2, 24
- lsrs r2, 24
- mov r8, r2
- lsls r1, 24
- lsls r5, 24
- mov r2, r9
- lsls r2, 24
- lsrs r2, 24
- mov r9, r2
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0x10]
- lsls r6, 24
- lsrs r6, 24
- lsrs r0, r1, 24
- str r0, [sp, 0xC]
- movs r2, 0xFE
- lsls r2, 24
- adds r1, r2
- lsrs r1, 24
- str r1, [sp, 0x14]
- lsrs r0, r5, 24
- mov r10, r0
- movs r2, 0xFF
- lsls r2, 24
- adds r5, r2
- lsrs r5, 24
- movs r4, 0x1
- str r4, [sp]
- str r4, [sp, 0x4]
- str r6, [sp, 0x8]
- mov r0, r8
- movs r1, 0xFD
- ldr r2, [sp, 0x14]
- adds r3, r5, 0
- bl FillBgTilemapBufferRect
- ldr r0, [sp, 0xC]
- subs r0, 0x1
- lsls r2, r0, 24
- lsrs r2, 24
- str r2, [sp, 0x18]
- str r4, [sp]
- str r4, [sp, 0x4]
- str r6, [sp, 0x8]
- mov r0, r8
- movs r1, 0xFF
- adds r3, r5, 0
- bl FillBgTilemapBufferRect
- movs r1, 0x80
- lsls r1, 1
- mov r0, r9
- str r0, [sp]
- str r4, [sp, 0x4]
- str r6, [sp, 0x8]
- mov r0, r8
- ldr r2, [sp, 0xC]
- adds r3, r5, 0
- bl FillBgTilemapBufferRect
- ldr r1, =0x00000101
- ldr r7, [sp, 0xC]
- add r7, r9
- subs r0, r7, 0x1
- lsls r2, r0, 24
- lsrs r2, 24
- str r2, [sp, 0x1C]
- str r4, [sp]
- str r4, [sp, 0x4]
- str r6, [sp, 0x8]
- mov r0, r8
- adds r3, r5, 0
- bl FillBgTilemapBufferRect
- movs r1, 0x81
- lsls r1, 1
- lsls r2, r7, 24
- lsrs r7, r2, 24
- str r4, [sp]
- str r4, [sp, 0x4]
- str r6, [sp, 0x8]
- mov r0, r8
- adds r2, r7, 0
- adds r3, r5, 0
- bl FillBgTilemapBufferRect
- ldr r1, =0x00000103
- str r4, [sp]
- movs r5, 0x5
- str r5, [sp, 0x4]
- str r6, [sp, 0x8]
- mov r0, r8
- ldr r2, [sp, 0x14]
- mov r3, r10
- bl FillBgTilemapBufferRect
- ldr r1, =0x00000105
- mov r0, r9
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp]
- str r5, [sp, 0x4]
- str r6, [sp, 0x8]
- mov r0, r8
- ldr r2, [sp, 0x18]
- mov r3, r10
- bl FillBgTilemapBufferRect
- movs r1, 0x83
- lsls r1, 1
- str r4, [sp]
- str r5, [sp, 0x4]
- str r6, [sp, 0x8]
- mov r0, r8
- adds r2, r7, 0
- mov r3, r10
- bl FillBgTilemapBufferRect
- ldr r1, =0x000008fd
- ldr r2, [sp, 0x10]
- add r10, r2
- mov r0, r10
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
- str r4, [sp]
- str r4, [sp, 0x4]
- str r6, [sp, 0x8]
- mov r0, r8
- ldr r2, [sp, 0x14]
- mov r3, r10
- bl FillBgTilemapBufferRect
- ldr r1, =0x000008ff
- str r4, [sp]
- str r4, [sp, 0x4]
- str r6, [sp, 0x8]
- mov r0, r8
- ldr r2, [sp, 0x18]
- mov r3, r10
- bl FillBgTilemapBufferRect
- movs r1, 0x90
- lsls r1, 4
- movs r2, 0x1
- negs r2, r2
- add r9, r2
- mov r0, r9
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp]
- str r4, [sp, 0x4]
- str r6, [sp, 0x8]
- mov r0, r8
- ldr r2, [sp, 0xC]
- mov r3, r10
- bl FillBgTilemapBufferRect
- ldr r1, =0x00000901
- str r4, [sp]
- str r4, [sp, 0x4]
- str r6, [sp, 0x8]
- mov r0, r8
- ldr r2, [sp, 0x1C]
- mov r3, r10
- bl FillBgTilemapBufferRect
- ldr r1, =0x00000902
- str r4, [sp]
- str r4, [sp, 0x4]
- str r6, [sp, 0x8]
- mov r0, r8
- adds r2, r7, 0
- mov r3, r10
- bl FillBgTilemapBufferRect
- 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_8032474
-
- thumb_func_start task_new_game_prof_birch_speech_part2_1
-task_new_game_prof_birch_speech_part2_1: @ 803261C
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
- ldrh r0, [r4, 0x16]
- subs r1, r0, 0x1
- strh r1, [r4, 0x16]
- lsls r0, 16
- cmp r0, 0
- bgt _08032644
- movs r0, 0
- movs r1, 0x1
- bl unknown_rbox_to_vram
- ldr r0, =task_new_game_prof_birch_speech_part2_2
- str r0, [r4]
-_08032644:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end task_new_game_prof_birch_speech_part2_1
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/map_name_popup.s b/asm/map_name_popup.s
deleted file mode 100644
index 9802c3151..000000000
--- a/asm/map_name_popup.s
+++ /dev/null
@@ -1,570 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_80D47D4
-sub_80D47D4: @ 80D47D4
- push {lr}
- bl sub_80A0934
- bl AddMapNamePopUpWindowTask
- movs r0, 0x1
- pop {r1}
- bx r1
- thumb_func_end sub_80D47D4
-
- thumb_func_start AddMapNamePopUpWindowTask
-AddMapNamePopUpWindowTask: @ 80D47E4
- push {r4,lr}
- movs r0, 0x80
- lsls r0, 7
- bl FlagGet
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _080D486C
- ldr r4, =Task_MapNamePopUpWindow
- adds r0, r4, 0
- bl FuncIsActiveTask
- lsls r0, 24
- cmp r0, 0
- bne _080D4844
- adds r0, r4, 0
- movs r1, 0x5A
- bl CreateTask
- ldr r4, =gUnknown_02039DD4
- strb r0, [r4]
- movs r0, 0x12
- movs r1, 0x28
- bl SetGpuReg
- ldr r2, =gTasks
- ldrb r1, [r4]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- movs r1, 0x6
- strh r1, [r0, 0x8]
- ldrb r1, [r4]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- movs r1, 0x28
- strh r1, [r0, 0xC]
- b _080D486C
- .pool
-_080D4844:
- ldr r3, =gTasks
- ldr r2, =gUnknown_02039DD4
- ldrb r0, [r2]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r3
- movs r4, 0x8
- ldrsh r0, [r1, r4]
- cmp r0, 0x2
- beq _080D485E
- movs r0, 0x2
- strh r0, [r1, 0x8]
-_080D485E:
- ldrb r0, [r2]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r3
- movs r0, 0x1
- strh r0, [r1, 0xE]
-_080D486C:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end AddMapNamePopUpWindowTask
-
- thumb_func_start Task_MapNamePopUpWindow
-Task_MapNamePopUpWindow: @ 80D487C
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, =gTasks
- adds r4, r1, r0
- movs r2, 0x8
- ldrsh r1, [r4, r2]
- adds r3, r0, 0
- cmp r1, 0x6
- bhi _080D4966
- lsls r0, r1, 2
- ldr r1, =_080D48A8
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_080D48A8:
- .4byte _080D48DE
- .4byte _080D4908
- .4byte _080D4920
- .4byte _080D4966
- .4byte _080D494C
- .4byte _080D4960
- .4byte _080D48C4
-_080D48C4:
- ldrh r0, [r4, 0x10]
- adds r0, 0x1
- movs r1, 0
- strh r0, [r4, 0x10]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x1E
- ble _080D4966
- strh r1, [r4, 0x8]
- strh r1, [r4, 0x10]
- bl ShowMapNamePopUpWindow
- b _080D4966
-_080D48DE:
- ldrh r0, [r4, 0xC]
- subs r0, 0x2
- movs r2, 0
- strh r0, [r4, 0xC]
- lsls r0, 16
- cmp r0, 0
- bgt _080D4966
- strh r2, [r4, 0xC]
- movs r0, 0x1
- strh r0, [r4, 0x8]
- ldr r0, =gUnknown_02039DD4
- ldrb r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r3
- strh r2, [r0, 0xA]
- b _080D4966
- .pool
-_080D4908:
- ldrh r0, [r4, 0xA]
- adds r0, 0x1
- strh r0, [r4, 0xA]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x78
- ble _080D4966
- movs r0, 0
- strh r0, [r4, 0xA]
- movs r0, 0x2
- strh r0, [r4, 0x8]
- b _080D4966
-_080D4920:
- ldrh r0, [r4, 0xC]
- adds r0, 0x2
- movs r1, 0
- strh r0, [r4, 0xC]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x27
- ble _080D4966
- movs r0, 0x28
- strh r0, [r4, 0xC]
- movs r2, 0xE
- ldrsh r0, [r4, r2]
- cmp r0, 0
- beq _080D4946
- movs r0, 0x6
- strh r0, [r4, 0x8]
- strh r1, [r4, 0x10]
- strh r1, [r4, 0xE]
- b _080D4966
-_080D4946:
- movs r0, 0x4
- strh r0, [r4, 0x8]
- b _080D496E
-_080D494C:
- bl GetMapNamePopUpWindowId
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x1
- bl sub_819746C
- movs r0, 0x5
- strh r0, [r4, 0x8]
- b _080D4966
-_080D4960:
- bl HideMapNamePopUpWindow
- b _080D496E
-_080D4966:
- ldrh r1, [r4, 0xC]
- movs r0, 0x12
- bl SetGpuReg
-_080D496E:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end Task_MapNamePopUpWindow
-
- thumb_func_start HideMapNamePopUpWindow
-HideMapNamePopUpWindow: @ 80D4974
- push {lr}
- ldr r0, =Task_MapNamePopUpWindow
- bl FuncIsActiveTask
- lsls r0, 24
- cmp r0, 0
- beq _080D49A4
- bl GetMapNamePopUpWindowId
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x1
- bl sub_819746C
- bl RemoveMapNamePopUpWindow
- movs r0, 0x12
- movs r1, 0
- bl SetGpuReg_ForcedBlank
- ldr r0, =gUnknown_02039DD4
- ldrb r0, [r0]
- bl DestroyTask
-_080D49A4:
- pop {r0}
- bx r0
- .pool
- thumb_func_end HideMapNamePopUpWindow
-
- thumb_func_start ShowMapNamePopUpWindow
-ShowMapNamePopUpWindow: @ 80D49B0
- push {r4,r5,lr}
- sub sp, 0x24
- bl InBattlePyramid
- lsls r0, 24
- cmp r0, 0
- beq _080D4A08
- ldr r0, =gMapHeader
- ldrh r1, [r0, 0x12]
- movs r0, 0xBD
- lsls r0, 1
- cmp r1, r0
- bne _080D49DC
- mov r4, sp
- adds r4, 0xF
- ldr r0, =gUnknown_0857F544
- ldr r1, [r0, 0x1C]
- b _080D49F2
- .pool
-_080D49DC:
- mov r4, sp
- adds r4, 0xF
- ldr r1, =gUnknown_0857F544
- ldr r0, =gSaveBlock2Ptr
- ldr r0, [r0]
- ldr r2, =0x00000cb2
- adds r0, r2
- ldrh r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
-_080D49F2:
- adds r0, r4, 0
- bl StringCopy
- b _080D4A18
- .pool
-_080D4A08:
- mov r4, sp
- adds r4, 0xF
- ldr r0, =gMapHeader
- ldrb r1, [r0, 0x14]
- adds r0, r4, 0
- movs r2, 0
- bl GetMapName
-_080D4A18:
- bl AddMapNamePopUpWindow
- bl LoadMapNamePopUpWindowBg
- movs r0, 0x7
- adds r1, r4, 0
- movs r2, 0x50
- bl GetStringCenterAlignXOffset
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- add r1, sp, 0xC
- movs r5, 0
- movs r0, 0xFC
- strb r0, [r1]
- movs r0, 0x2
- strb r0, [r1, 0x1]
- adds r0, r1, 0
- strb r5, [r0, 0x2]
- bl GetMapNamePopUpWindowId
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x3
- str r1, [sp]
- movs r1, 0xFF
- str r1, [sp, 0x4]
- str r5, [sp, 0x8]
- movs r1, 0x7
- add r2, sp, 0xC
- adds r3, r4, 0
- bl PrintTextOnWindow
- bl GetMapNamePopUpWindowId
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x3
- bl CopyWindowToVram
- add sp, 0x24
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end ShowMapNamePopUpWindow
-
- thumb_func_start sub_80D4A78
-sub_80D4A78: @ 80D4A78
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x1C
- ldr r4, [sp, 0x3C]
- lsls r0, 24
- lsrs r7, r0, 24
- lsls r1, 24
- lsrs r1, 24
- mov r10, r1
- lsls r2, 24
- lsls r3, 24
- lsrs r3, 24
- str r3, [sp, 0x10]
- lsls r4, 24
- lsrs r4, 24
- str r4, [sp, 0x14]
- movs r5, 0
- lsls r0, r1, 24
- asrs r1, r0, 24
- lsrs r3, r2, 24
- str r3, [sp, 0xC]
- movs r6, 0xFF
- lsls r6, 24
- adds r6, r2
- mov r8, r6
- str r0, [sp, 0x18]
- subs r4, r1, 0x1
-_080D4AB4:
- ldr r0, =0x0000021d
- adds r1, r5, r0
- lsls r1, 16
- lsrs r1, 16
- lsls r2, r4, 24
- lsrs r2, 24
- movs r3, 0x1
- str r3, [sp]
- str r3, [sp, 0x4]
- movs r6, 0xE
- mov r9, r6
- str r6, [sp, 0x8]
- adds r0, r7, 0
- mov r6, r8
- lsrs r3, r6, 24
- bl FillBgTilemapBufferRect
- adds r4, 0x1
- adds r5, 0x1
- cmp r5, 0xB
- ble _080D4AB4
- ldr r1, =0x00000229
- movs r0, 0x1
- negs r0, r0
- add r0, r10
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- movs r5, 0x1
- str r5, [sp]
- str r5, [sp, 0x4]
- mov r2, r9
- str r2, [sp, 0x8]
- adds r0, r7, 0
- mov r2, r8
- ldr r3, [sp, 0xC]
- bl FillBgTilemapBufferRect
- ldr r1, =0x0000022a
- ldr r6, [sp, 0x10]
- add r6, r10
- lsls r6, 24
- lsrs r6, 24
- str r5, [sp]
- str r5, [sp, 0x4]
- mov r3, r9
- str r3, [sp, 0x8]
- adds r0, r7, 0
- adds r2, r6, 0
- ldr r3, [sp, 0xC]
- bl FillBgTilemapBufferRect
- ldr r1, =0x0000022b
- ldr r4, [sp, 0xC]
- adds r4, 0x1
- lsls r4, 24
- lsrs r4, 24
- str r5, [sp]
- str r5, [sp, 0x4]
- mov r0, r9
- str r0, [sp, 0x8]
- adds r0, r7, 0
- mov r2, r8
- adds r3, r4, 0
- bl FillBgTilemapBufferRect
- movs r1, 0x8B
- lsls r1, 2
- str r5, [sp]
- str r5, [sp, 0x4]
- mov r2, r9
- str r2, [sp, 0x8]
- adds r0, r7, 0
- adds r2, r6, 0
- adds r3, r4, 0
- bl FillBgTilemapBufferRect
- ldr r1, =0x0000022d
- ldr r4, [sp, 0xC]
- adds r4, 0x2
- lsls r4, 24
- lsrs r4, 24
- str r5, [sp]
- str r5, [sp, 0x4]
- mov r3, r9
- str r3, [sp, 0x8]
- adds r0, r7, 0
- mov r2, r8
- adds r3, r4, 0
- bl FillBgTilemapBufferRect
- ldr r1, =0x0000022e
- str r5, [sp]
- str r5, [sp, 0x4]
- mov r0, r9
- str r0, [sp, 0x8]
- adds r0, r7, 0
- adds r2, r6, 0
- adds r3, r4, 0
- bl FillBgTilemapBufferRect
- movs r5, 0
- ldr r1, [sp, 0xC]
- ldr r2, [sp, 0x14]
- adds r0, r1, r2
- lsls r4, r0, 24
- movs r6, 0x1
-_080D4B8A:
- ldr r3, =0x0000022f
- adds r1, r5, r3
- lsls r1, 16
- lsrs r1, 16
- subs r0, r5, 0x1
- ldr r3, [sp, 0x18]
- asrs r2, r3, 24
- adds r2, r0
- lsls r2, 24
- lsrs r2, 24
- str r6, [sp]
- str r6, [sp, 0x4]
- movs r0, 0xE
- str r0, [sp, 0x8]
- adds r0, r7, 0
- lsrs r3, r4, 24
- bl FillBgTilemapBufferRect
- adds r5, 0x1
- cmp r5, 0xB
- ble _080D4B8A
- add sp, 0x1C
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80D4A78
-
- thumb_func_start LoadMapNamePopUpWindowBg
-LoadMapNamePopUpWindowBg: @ 80D4BE0
- push {r4,r5,lr}
- sub sp, 0x8
- bl GetMapNamePopUpWindowId
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, =gMapHeader
- ldrb r1, [r0, 0x14]
- cmp r1, 0x57
- bls _080D4C0A
- cmp r1, 0xC4
- bls _080D4C08
- adds r0, r1, 0
- subs r0, 0x6D
- lsls r0, 16
- lsrs r1, r0, 16
- b _080D4C0A
- .pool
-_080D4C08:
- movs r1, 0
-_080D4C0A:
- ldr r0, =gUnknown_0857F464
- adds r0, r1, r0
- ldrb r4, [r0]
- adds r0, r5, 0
- movs r1, 0
- bl GetWindowAttribute
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r4, 4
- subs r1, r4
- lsls r1, 6
- ldr r2, =gMapPopUp_Outline_Table
- adds r1, r2
- movs r2, 0x80
- lsls r2, 3
- ldr r3, =0x0000021d
- bl LoadBgTiles
- ldr r1, =sub_80D4A78
- adds r0, r5, 0
- bl CallWindowFunction
- adds r0, r5, 0
- bl PutWindowTilemap
- ldr r0, =gMapHeader
- ldrb r0, [r0, 0x16]
- cmp r0, 0xE
- bne _080D4C6C
- ldr r0, =gUnknown_0857F444
- movs r1, 0xE0
- movs r2, 0x20
- bl LoadPalette
- b _080D4C7A
- .pool
-_080D4C6C:
- lsls r0, r4, 5
- ldr r1, =gMapPopUp_Palette_Table
- adds r0, r1
- movs r1, 0xE0
- movs r2, 0x20
- bl LoadPalette
-_080D4C7A:
- lsls r1, r4, 4
- subs r1, r4
- lsls r1, 6
- ldr r0, =gMapPopUp_Table
- adds r1, r0
- movs r0, 0x50
- str r0, [sp]
- movs r0, 0x18
- str r0, [sp, 0x4]
- adds r0, r5, 0
- movs r2, 0
- movs r3, 0
- bl BlitBitmapToWindow
- add sp, 0x8
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end LoadMapNamePopUpWindowBg
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/map_obj_lock.s b/asm/map_obj_lock.s
deleted file mode 100644
index 97abc7fec..000000000
--- a/asm/map_obj_lock.s
+++ /dev/null
@@ -1,474 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start walkrun_is_standing_still
-walkrun_is_standing_still: @ 8098388
- push {lr}
- ldr r0, =gPlayerAvatar
- ldrb r0, [r0, 0x3]
- cmp r0, 0x1
- beq _0809839C
- movs r0, 0x1
- b _0809839E
- .pool
-_0809839C:
- movs r0, 0
-_0809839E:
- pop {r1}
- bx r1
- thumb_func_end walkrun_is_standing_still
-
- thumb_func_start sub_80983A4
-sub_80983A4: @ 80983A4
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl walkrun_is_standing_still
- lsls r0, 24
- cmp r0, 0
- beq _080983BE
- bl sub_808B864
- adds r0, r4, 0
- bl DestroyTask
-_080983BE:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80983A4
-
- thumb_func_start sub_80983C4
-sub_80983C4: @ 80983C4
- push {lr}
- ldr r0, =sub_80983A4
- bl FuncIsActiveTask
- lsls r0, 24
- cmp r0, 0
- bne _080983E0
- bl sub_808BCF4
- movs r0, 0x1
- b _080983E2
- .pool
-_080983E0:
- movs r0, 0
-_080983E2:
- pop {r1}
- bx r1
- thumb_func_end sub_80983C4
-
- thumb_func_start ScriptFreezeMapObjects
-ScriptFreezeMapObjects: @ 80983E8
- push {lr}
- bl FreezeMapObjects
- ldr r0, =sub_80983A4
- movs r1, 0x50
- bl CreateTask
- pop {r0}
- bx r0
- .pool
- thumb_func_end ScriptFreezeMapObjects
-
- thumb_func_start sub_8098400
-sub_8098400: @ 8098400
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- ldr r1, =gTasks
- adds r5, r0, r1
- movs r1, 0x8
- ldrsh r0, [r5, r1]
- cmp r0, 0
- bne _0809842A
- bl walkrun_is_standing_still
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x1
- bne _0809842A
- bl sub_808B864
- strh r4, [r5, 0x8]
-_0809842A:
- movs r1, 0xA
- ldrsh r0, [r5, r1]
- cmp r0, 0
- bne _08098452
- ldr r2, =gMapObjects
- ldr r0, =gSelectedMapObject
- ldrb r1, [r0]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r1, r0, r2
- ldrb r0, [r1]
- lsls r0, 30
- cmp r0, 0
- blt _08098452
- adds r0, r1, 0
- bl FreezeMapObject
- movs r0, 0x1
- strh r0, [r5, 0xA]
-_08098452:
- movs r1, 0x8
- ldrsh r0, [r5, r1]
- cmp r0, 0
- beq _08098468
- movs r1, 0xA
- ldrsh r0, [r5, r1]
- cmp r0, 0
- beq _08098468
- adds r0, r6, 0
- bl DestroyTask
-_08098468:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8098400
-
- thumb_func_start sub_809847C
-sub_809847C: @ 809847C
- push {lr}
- ldr r0, =sub_8098400
- bl FuncIsActiveTask
- lsls r0, 24
- cmp r0, 0
- bne _08098498
- bl sub_808BCF4
- movs r0, 0x1
- b _0809849A
- .pool
-_08098498:
- movs r0, 0
-_0809849A:
- pop {r1}
- bx r1
- thumb_func_end sub_809847C
-
- thumb_func_start LockSelectedMapObject
-LockSelectedMapObject: @ 80984A0
- push {r4,r5,lr}
- ldr r4, =gSelectedMapObject
- ldrb r0, [r4]
- bl FreezeMapObjectsExceptOne
- ldr r0, =sub_8098400
- movs r1, 0x50
- bl CreateTask
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r2, =gMapObjects
- ldrb r1, [r4]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r1, r0, r2
- ldrb r0, [r1]
- lsls r0, 30
- cmp r0, 0
- blt _080984DE
- adds r0, r1, 0
- bl FreezeMapObject
- ldr r0, =gTasks
- lsls r1, r5, 2
- adds r1, r5
- lsls r1, 3
- adds r1, r0
- movs r0, 0x1
- strh r0, [r1, 0xA]
-_080984DE:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end LockSelectedMapObject
-
- thumb_func_start sub_80984F4
-sub_80984F4: @ 80984F4
- push {lr}
- movs r0, 0xFF
- movs r1, 0
- movs r2, 0
- bl GetFieldObjectIdByLocalIdAndMap
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, =gMapObjects
- adds r0, r1
- bl FieldObjectClearAnimIfSpecialAnimFinished
- bl sub_80D338C
- bl UnfreezeMapObjects
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80984F4
-
- thumb_func_start sub_8098524
-sub_8098524: @ 8098524
- push {r4,lr}
- ldr r4, =gMapObjects
- ldr r0, =gSelectedMapObject
- ldrb r1, [r0]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r1, r0, r4
- ldrb r0, [r1]
- lsls r0, 31
- cmp r0, 0
- beq _08098542
- adds r0, r1, 0
- bl FieldObjectClearAnimIfSpecialAnimFinished
-_08098542:
- movs r0, 0xFF
- movs r1, 0
- movs r2, 0
- bl GetFieldObjectIdByLocalIdAndMap
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- bl FieldObjectClearAnimIfSpecialAnimFinished
- bl sub_80D338C
- bl UnfreezeMapObjects
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8098524
-
- thumb_func_start sub_8098574
-sub_8098574: @ 8098574
- push {lr}
- ldr r0, =gSelectedMapObject
- ldrb r1, [r0]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, =gMapObjects
- adds r0, r1
- ldr r1, =gSpecialVar_Facing
- ldrb r1, [r1]
- bl FieldObjectFaceOppositeDirection
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8098574
-
- thumb_func_start sub_809859C
-sub_809859C: @ 809859C
- push {lr}
- ldr r0, =gSelectedMapObject
- ldrb r1, [r0]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, =gMapObjects
- adds r0, r1
- bl FieldObjectClearAnimIfSpecialAnimActive
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_809859C
-
- thumb_func_start sub_80985BC
-sub_80985BC: @ 80985BC
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- ldr r1, =gTasks
- adds r5, r0, r1
- ldrb r7, [r5, 0xC]
- movs r1, 0x8
- ldrsh r0, [r5, r1]
- cmp r0, 0
- bne _080985E8
- bl walkrun_is_standing_still
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x1
- bne _080985E8
- bl sub_808B864
- strh r4, [r5, 0x8]
-_080985E8:
- movs r1, 0xA
- ldrsh r0, [r5, r1]
- cmp r0, 0
- bne _0809860C
- ldr r0, =gMapObjects
- lsls r1, r7, 3
- adds r1, r7
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r1]
- lsls r0, 30
- cmp r0, 0
- blt _0809860C
- adds r0, r1, 0
- bl FreezeMapObject
- movs r0, 0x1
- strh r0, [r5, 0xA]
-_0809860C:
- movs r1, 0x8
- ldrsh r0, [r5, r1]
- cmp r0, 0
- beq _08098622
- movs r1, 0xA
- ldrsh r0, [r5, r1]
- cmp r0, 0
- beq _08098622
- adds r0, r6, 0
- bl DestroyTask
-_08098622:
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80985BC
-
- thumb_func_start sub_8098630
-sub_8098630: @ 8098630
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- movs r0, 0
- bl GetChosenApproachingTrainerMapObjectId
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, =gNoOfApproachingTrainers
- ldrb r0, [r0]
- cmp r0, 0x2
- bne _080986E0
- movs r0, 0x1
- bl GetChosenApproachingTrainerMapObjectId
- lsls r0, 24
- lsrs r0, 24
- adds r5, r0, 0
- adds r0, r4, 0
- adds r1, r5, 0
- bl sub_8098074
- ldr r7, =sub_80985BC
- adds r0, r7, 0
- movs r1, 0x50
- bl CreateTask
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r0, =gTasks
- mov r9, r0
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- mov r1, r9
- adds r6, r0, r1
- strh r4, [r6, 0xC]
- ldr r2, =gMapObjects
- mov r8, r2
- lsls r0, r4, 3
- adds r0, r4
- lsls r0, 2
- adds r1, r0, r2
- ldrb r0, [r1]
- lsls r0, 30
- cmp r0, 0
- blt _0809869A
- adds r0, r1, 0
- bl FreezeMapObject
- movs r0, 0x1
- strh r0, [r6, 0xA]
-_0809869A:
- adds r0, r7, 0
- movs r1, 0x51
- bl CreateTask
- lsls r0, 24
- lsrs r2, r0, 24
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- mov r1, r9
- adds r4, r0, r1
- strh r5, [r4, 0xC]
- lsls r0, r5, 3
- adds r0, r5
- lsls r0, 2
- mov r2, r8
- adds r1, r0, r2
- ldrb r0, [r1]
- lsls r0, 30
- cmp r0, 0
- blt _0809871A
- adds r0, r1, 0
- bl FreezeMapObject
- movs r0, 0x1
- strh r0, [r4, 0xA]
- b _0809871A
- .pool
-_080986E0:
- adds r0, r4, 0
- bl FreezeMapObjectsExceptOne
- ldr r0, =sub_80985BC
- movs r1, 0x50
- bl CreateTask
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r1, =gTasks
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- adds r5, r0, r1
- strh r4, [r5, 0xC]
- ldr r1, =gMapObjects
- lsls r0, r4, 3
- adds r0, r4
- lsls r0, 2
- adds r1, r0, r1
- ldrb r0, [r1]
- lsls r0, 30
- cmp r0, 0
- blt _0809871A
- adds r0, r1, 0
- bl FreezeMapObject
- movs r0, 0x1
- strh r0, [r5, 0xA]
-_0809871A:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8098630
-
- thumb_func_start sub_8098734
-sub_8098734: @ 8098734
- push {lr}
- ldr r0, =sub_80985BC
- bl FuncIsActiveTask
- lsls r0, 24
- cmp r0, 0
- bne _08098750
- bl sub_808BCF4
- movs r0, 0x1
- b _08098752
- .pool
-_08098750:
- movs r0, 0
-_08098752:
- pop {r1}
- bx r1
- thumb_func_end sub_8098734
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/mauville_old_man.s b/asm/mauville_old_man.s
deleted file mode 100644
index af4764d76..000000000
--- a/asm/mauville_old_man.s
+++ /dev/null
@@ -1,2519 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_81200A0
-sub_81200A0: @ 81200A0
- push {r4,lr}
- ldr r0, =gSaveBlock1Ptr
- ldr r2, [r0]
- ldr r1, =0x00002e28
- adds r0, r2, r1
- movs r1, 0
- strb r1, [r0]
- ldr r3, =0x00002e51
- adds r0, r2, r3
- strb r1, [r0]
- ldr r0, =gGameLanguage
- ldrb r1, [r0]
- adds r3, 0x1
- adds r0, r2, r3
- strb r1, [r0]
- movs r3, 0
- ldr r0, =0x00002e2a
- adds r2, r0
- ldr r4, =gUnknown_0859EFE4
-_081200C6:
- lsls r0, r3, 1
- adds r1, r2, r0
- adds r0, r4
- ldrh r0, [r0]
- strh r0, [r1]
- adds r0, r3, 0x1
- lsls r0, 16
- lsrs r3, r0, 16
- cmp r3, 0x5
- bls _081200C6
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81200A0
-
- thumb_func_start sub_81200F8
-sub_81200F8: @ 81200F8
- ldr r0, =gSaveBlock1Ptr
- ldr r1, [r0]
- ldr r0, =0x00002e28
- adds r1, r0
- movs r2, 0
- movs r0, 0x1
- strb r0, [r1]
- strb r2, [r1, 0x1]
- ldr r0, =gGameLanguage
- ldrb r0, [r0]
- strb r0, [r1, 0x2]
- bx lr
- .pool
- thumb_func_end sub_81200F8
-
- thumb_func_start sub_812011C
-sub_812011C: @ 812011C
- push {lr}
- bl sub_8120E08
- pop {r0}
- bx r0
- thumb_func_end sub_812011C
-
- thumb_func_start sub_8120128
-sub_8120128: @ 8120128
- ldr r0, =gSaveBlock1Ptr
- ldr r1, [r0]
- ldr r0, =0x00002e28
- adds r2, r1, r0
- movs r3, 0
- movs r0, 0x4
- strb r0, [r2]
- strb r3, [r2, 0x1]
- ldr r0, =gGameLanguage
- ldrb r0, [r0]
- ldr r2, =0x00002e48
- adds r1, r2
- strb r0, [r1]
- bx lr
- .pool
- thumb_func_end sub_8120128
-
- thumb_func_start sub_8120154
-sub_8120154: @ 8120154
- push {lr}
- bl sub_81339F8
- pop {r0}
- bx r0
- thumb_func_end sub_8120154
-
- thumb_func_start SetMauvilleOldMan
-SetMauvilleOldMan: @ 8120160
- push {lr}
- ldr r0, =gSaveBlock2Ptr
- ldr r0, [r0]
- ldrb r1, [r0, 0xB]
- lsls r1, 8
- ldrb r0, [r0, 0xA]
- orrs r0, r1
- movs r1, 0xA
- bl __umodsi3
- lsls r0, 16
- lsrs r0, 17
- cmp r0, 0x4
- bhi _081201C0
- lsls r0, 2
- ldr r1, =_08120190
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_08120190:
- .4byte _081201A4
- .4byte _081201AA
- .4byte _081201B0
- .4byte _081201B6
- .4byte _081201BC
-_081201A4:
- bl sub_81200A0
- b _081201C0
-_081201AA:
- bl sub_81200F8
- b _081201C0
-_081201B0:
- bl sub_8120154
- b _081201C0
-_081201B6:
- bl sub_812011C
- b _081201C0
-_081201BC:
- bl sub_8120128
-_081201C0:
- bl sub_8120B5C
- pop {r0}
- bx r0
- thumb_func_end SetMauvilleOldMan
-
- thumb_func_start sub_81201C8
-sub_81201C8: @ 81201C8
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r1, =0x00002e28
- adds r0, r1
- ldrb r0, [r0]
- bx lr
- .pool
- thumb_func_end sub_81201C8
-
- thumb_func_start sub_81201DC
-sub_81201DC: @ 81201DC
- push {r4,lr}
- ldr r4, =gSpecialVar_Result
- bl sub_81201C8
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81201DC
-
- thumb_func_start sub_81201F4
-sub_81201F4: @ 81201F4
- ldr r1, =gSpecialVar_Result
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r2, =0x00002e51
- adds r0, r2
- ldrb r0, [r0]
- strh r0, [r1]
- bx lr
- .pool
- thumb_func_end sub_81201F4
-
- thumb_func_start sub_8120210
-sub_8120210: @ 8120210
- push {r4-r6,lr}
- ldr r0, =gSaveBlock1Ptr
- ldr r4, [r0]
- ldr r0, =0x00002e28
- adds r6, r4, r0
- ldr r1, =0x00002e42
- adds r0, r4, r1
- ldr r5, =gSaveBlock2Ptr
- ldr r1, [r5]
- bl StringCopy
- movs r2, 0
- ldr r0, =0x00002e4d
- adds r4, r0
-_0812022C:
- adds r1, r4, r2
- ldr r0, [r5]
- adds r0, 0xA
- adds r0, r2
- ldrb r0, [r0]
- strb r0, [r1]
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- cmp r2, 0x3
- bls _0812022C
- movs r2, 0
- adds r5, r6, 0
- adds r5, 0x29
- adds r3, r6, 0x2
- adds r4, r6, 0
- adds r4, 0xE
-_0812024E:
- lsls r0, r2, 1
- adds r1, r3, r0
- adds r0, r4, r0
- ldrh r0, [r0]
- strh r0, [r1]
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- cmp r2, 0x5
- bls _0812024E
- movs r0, 0x1
- strb r0, [r5]
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8120210
-
- thumb_func_start sub_8120280
-sub_8120280: @ 8120280
- push {r4-r7,lr}
- ldr r0, =gSaveBlock1Ptr
- ldr r1, [r0]
- ldr r0, =gSpecialVar_0x8004
- ldrh r0, [r0]
- ldr r2, =0x00002e36
- adds r5, r1, r2
- cmp r0, 0
- bne _08120296
- ldr r0, =0x00002e2a
- adds r5, r1, r0
-_08120296:
- ldr r2, =gStringVar4
- adds r4, r2, 0
- movs r6, 0
-_0812029C:
- ldrh r1, [r5]
- adds r5, 0x2
- adds r0, r2, 0
- bl CopyEasyChatWord
- adds r2, r0, 0
- adds r7, r6, 0x1
- cmp r2, r4
- beq _081202BE
- movs r1, 0x37
-_081202B0:
- ldrb r0, [r4]
- cmp r0, 0
- bne _081202B8
- strb r1, [r4]
-_081202B8:
- adds r4, 0x1
- cmp r2, r4
- bne _081202B0
-_081202BE:
- adds r4, 0x1
- movs r0, 0
- strb r0, [r2]
- adds r2, 0x1
- ldrh r1, [r5]
- adds r5, 0x2
- adds r0, r2, 0
- bl CopyEasyChatWord
- adds r2, r0, 0
- cmp r2, r4
- beq _081202E6
- movs r1, 0x37
-_081202D8:
- ldrb r0, [r4]
- cmp r0, 0
- bne _081202E0
- strb r1, [r4]
-_081202E0:
- adds r4, 0x1
- cmp r2, r4
- bne _081202D8
-_081202E6:
- adds r4, 0x1
- movs r0, 0xFE
- strb r0, [r2]
- adds r2, 0x1
- ldrh r1, [r5]
- adds r5, 0x2
- adds r0, r2, 0
- bl CopyEasyChatWord
- adds r2, r0, 0
- cmp r2, r4
- beq _0812030E
- movs r1, 0x37
-_08120300:
- ldrb r0, [r4]
- cmp r0, 0
- bne _08120308
- strb r1, [r4]
-_08120308:
- adds r4, 0x1
- cmp r2, r4
- bne _08120300
-_0812030E:
- cmp r6, 0
- bne _0812031E
- movs r0, 0xFC
- strb r0, [r2]
- adds r2, 0x1
- movs r0, 0xF
- strb r0, [r2]
- adds r2, 0x1
-_0812031E:
- lsls r0, r7, 16
- lsrs r6, r0, 16
- cmp r6, 0x1
- bls _0812029C
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8120280
-
- thumb_func_start sub_8120340
-sub_8120340: @ 8120340
- push {lr}
- ldr r0, =gSpecialVar_0x8004
- ldrb r0, [r0]
- bl sub_81206C0
- bl ScriptContext1_Stop
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8120340
-
- thumb_func_start sub_8120358
-sub_8120358: @ 8120358
- ldr r1, =gSpecialVar_Result
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r2, =0x00002e28
- adds r0, r2
- ldrb r0, [r0, 0x1]
- strh r0, [r1]
- bx lr
- .pool
- thumb_func_end sub_8120358
-
- thumb_func_start sub_8120374
-sub_8120374: @ 8120374
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r1, =0x00002e28
- adds r0, r1
- movs r1, 0x1
- strb r1, [r0, 0x1]
- bx lr
- .pool
- thumb_func_end sub_8120374
-
- thumb_func_start sub_812038C
-sub_812038C: @ 812038C
- push {lr}
- bl sub_811F01C
- lsls r0, 16
- lsrs r1, r0, 16
- ldr r0, =0x0000ffff
- cmp r1, r0
- bne _081203AC
- ldr r1, =gSpecialVar_Result
- movs r0, 0
- b _081203B6
- .pool
-_081203AC:
- ldr r0, =gStringVar1
- bl CopyEasyChatWord
- ldr r1, =gSpecialVar_Result
- movs r0, 0x1
-_081203B6:
- strh r0, [r1]
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_812038C
-
- thumb_func_start sub_81203C4
-sub_81203C4: @ 81203C4
- push {lr}
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r1, =0x00002e28
- adds r2, r0, r1
- ldrb r0, [r2, 0x1]
- cmp r0, 0xA
- bne _081203EC
- ldr r1, =gSpecialVar_Result
- movs r0, 0
- strh r0, [r1]
- strb r0, [r2, 0x1]
- b _081203F2
- .pool
-_081203EC:
- ldr r1, =gSpecialVar_Result
- movs r0, 0x1
- strh r0, [r1]
-_081203F2:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81203C4
-
- thumb_func_start sub_81203FC
-sub_81203FC: @ 81203FC
- push {r4-r6,lr}
- ldr r0, =gSaveBlock1Ptr
- ldr r4, [r0]
- ldr r0, =0x00002e28
- adds r5, r4, r0
- ldrb r0, [r5, 0x1]
- cmp r0, 0
- bne _08120410
- bl sub_81204DC
-_08120410:
- ldrb r0, [r5, 0x1]
- lsls r0, 1
- ldr r1, =0x00002e2c
- adds r6, r4, r1
- adds r0, r6, r0
- ldrh r1, [r0]
- ldr r0, =0x0000ffff
- cmp r1, r0
- beq _08120480
- bl Random
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- movs r0, 0x7
- ands r4, r0
- ldr r0, =gStringVar4
- ldrb r1, [r5, 0x1]
- lsls r1, 1
- adds r1, r6, r1
- ldrh r1, [r1]
- bl CopyEasyChatWord
- adds r2, r0, 0
- ldr r1, =gUnknown_082942FD
- bl StringCopy
- adds r2, r0, 0
- ldr r0, =gUnknown_0859EFF0
- lsls r4, 2
- adds r4, r0
- ldr r1, [r4]
- adds r0, r2, 0
- bl StringCopy
- adds r2, r0, 0
- ldr r1, =gUnknown_08294301
- bl StringCopy
- b _081204A2
- .pool
-_08120480:
- ldr r0, =gStringVar4
- ldr r3, =gUnknown_0859F010
- ldrb r2, [r5, 0x2]
- adds r1, r2, 0x1
- strb r1, [r5, 0x2]
- lsls r2, 24
- lsrs r2, 24
- movs r6, 0xB9
- lsls r6, 6
- adds r1, r4, r6
- adds r1, r2
- ldrb r1, [r1]
- lsls r1, 2
- adds r1, r3
- ldr r1, [r1]
- bl StringCopy
-_081204A2:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0xA
- bl __umodsi3
- lsls r0, 16
- cmp r0, 0
- bne _081204C4
- movs r0, 0xA
- b _081204C8
- .pool
-_081204C4:
- ldrb r0, [r5, 0x1]
- adds r0, 0x1
-_081204C8:
- strb r0, [r5, 0x1]
- ldr r1, =gSpecialVar_Result
- movs r0, 0x1
- strh r0, [r1]
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81203FC
-
- thumb_func_start sub_81204DC
-sub_81204DC: @ 81204DC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x1C
- ldr r0, =gSaveBlock1Ptr
- ldr r4, [r0]
- ldr r0, =0x00002e28
- adds r0, r4, r0
- str r0, [sp, 0x18]
- ldr r1, =gUnknown_0859F030
- mov r0, sp
- movs r2, 0x18
- bl memcpy
- movs r5, 0
- movs r1, 0x2
- add r1, sp
- mov r8, r1
- movs r2, 0xB9
- lsls r2, 6
- adds r3, r4, r2
- adds r1, r3, 0
-_0812050C:
- adds r0, r3, r5
- strb r5, [r0]
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, 0x7
- bls _0812050C
- movs r5, 0
- ldr r3, [sp, 0x18]
- adds r3, 0x4
- mov r9, r3
- adds r6, r1, 0
-_08120524:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- adds r4, r5, 0x1
- adds r1, r4, 0
- bl __modsi3
- lsls r0, 16
- lsrs r1, r0, 16
- adds r2, r6, r5
- ldrb r7, [r2]
- adds r1, r6, r1
- ldrb r0, [r1]
- strb r0, [r2]
- strb r7, [r1]
- lsls r4, 16
- lsrs r5, r4, 16
- cmp r5, 0x7
- bls _08120524
- movs r0, 0
- mov r10, r0
- movs r5, 0
-_08120552:
- lsls r4, r5, 2
- mov r1, sp
- adds r0, r1, r4
- ldrb r0, [r0]
- bl start_menu_is_selected_item_valid
- add r4, r8
- strh r0, [r4]
- add r0, r10
- lsls r0, 16
- lsrs r0, 16
- mov r10, r0
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, 0x5
- bls _08120552
- movs r0, 0
- ldr r2, [sp, 0x18]
- strb r0, [r2, 0x2]
- movs r7, 0
- movs r5, 0
-_0812057E:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0xA
- bl __umodsi3
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, 0x2
- bhi _081205BC
- cmp r7, 0x7
- bhi _081205BC
- lsls r0, r5, 1
- add r0, r9
- ldr r1, =0x0000ffff
- strh r1, [r0]
- adds r0, r7, 0x1
- lsls r0, 16
- lsrs r7, r0, 16
- adds r4, r5, 0x1
- b _0812060E
- .pool
-_081205BC:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- mov r1, r10
- bl __umodsi3
- lsls r0, 16
- lsrs r2, r0, 16
- movs r1, 0
- adds r4, r5, 0x1
- lsls r6, r5, 1
- cmp r5, 0x5
- bhi _081205F8
- mov r3, r8
- ldrh r0, [r3]
- b _081205EE
-_081205DE:
- adds r0, r1, 0x1
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r5, 0x5
- bhi _081205F8
- lsls r0, r1, 2
- adds r0, r3, r0
- ldrh r0, [r0]
-_081205EE:
- subs r0, r2, r0
- lsls r0, 16
- lsrs r2, r0, 16
- cmp r0, 0
- bgt _081205DE
-_081205F8:
- cmp r1, 0x6
- bne _081205FE
- movs r1, 0
-_081205FE:
- lsls r0, r1, 2
- add r0, sp
- ldrh r0, [r0]
- bl sub_811EE90
- mov r2, r9
- adds r1, r2, r6
- strh r0, [r1]
-_0812060E:
- lsls r0, r4, 16
- lsrs r5, r0, 16
- cmp r5, 0x9
- bls _0812057E
- add sp, 0x1C
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_81204DC
-
- thumb_func_start sub_8120628
-sub_8120628: @ 8120628
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r1, =0x00002e51
- adds r0, r1
- movs r1, 0
- strb r1, [r0]
- bx lr
- .pool
- thumb_func_end sub_8120628
-
- thumb_func_start sub_8120640
-sub_8120640: @ 8120640
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r1, =0x00002e28
- adds r0, r1
- movs r1, 0
- strb r1, [r0, 0x1]
- bx lr
- .pool
- thumb_func_end sub_8120640
-
- thumb_func_start sub_8120658
-sub_8120658: @ 8120658
- push {lr}
- bl sub_8133A60
- pop {r0}
- bx r0
- thumb_func_end sub_8120658
-
- thumb_func_start sub_8120664
-sub_8120664: @ 8120664
- push {lr}
- bl sub_8120E50
- pop {r0}
- bx r0
- thumb_func_end sub_8120664
-
- thumb_func_start sub_8120670
-sub_8120670: @ 8120670
- push {lr}
- bl sub_81201C8
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x4
- bhi _081206B6
- lsls r0, 2
- ldr r1, =_0812068C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_0812068C:
- .4byte _081206A0
- .4byte _081206A6
- .4byte _081206B2
- .4byte _081206AC
- .4byte _081206B6
-_081206A0:
- bl sub_8120628
- b _081206B6
-_081206A6:
- bl sub_8120640
- b _081206B6
-_081206AC:
- bl sub_8120664
- b _081206B6
-_081206B2:
- bl sub_8120658
-_081206B6:
- bl sub_8120B5C
- pop {r0}
- bx r0
- thumb_func_end sub_8120670
-
- thumb_func_start sub_81206C0
-sub_81206C0: @ 81206C0
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, =sub_8120944
- movs r1, 0x50
- 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 r4, [r1, 0x12]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81206C0
-
- thumb_func_start sub_81206F0
-sub_81206F0: @ 81206F0
- ldr r1, =gUnknown_03002F84
- movs r0, 0
- strb r0, [r1]
- bx lr
- .pool
- thumb_func_end sub_81206F0
-
- thumb_func_start sub_81206FC
-sub_81206FC: @ 81206FC
- ldr r1, =gUnknown_03002F84
- movs r0, 0x1
- strb r0, [r1]
- bx lr
- .pool
- thumb_func_end sub_81206FC
-
- thumb_func_start sub_8120708
-sub_8120708: @ 8120708
- push {r4,r5,lr}
- sub sp, 0xC
- adds r5, r0, 0
- movs r0, 0
- movs r1, 0
- bl NewMenuHelpers_DrawDialogueFrame
- movs r4, 0x1
- str r4, [sp]
- str r4, [sp, 0x4]
- ldr r0, =sub_81206FC
- str r0, [sp, 0x8]
- movs r0, 0
- movs r1, 0x1
- adds r2, r5, 0
- movs r3, 0
- bl PrintTextOnWindow
- ldr r0, =gUnknown_03002F84
- strb r4, [r0]
- movs r0, 0
- movs r1, 0x3
- bl CopyWindowToVram
- add sp, 0xC
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8120708
-
- thumb_func_start sub_8120748
-sub_8120748: @ 8120748
- push {r4-r6,lr}
- adds r6, r1, 0
- movs r1, 0x8
- ldrsh r0, [r0, r1]
- cmp r0, 0x5
- bls _08120756
- b _08120938
-_08120756:
- lsls r0, 2
- ldr r1, =_08120764
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_08120764:
- .4byte _0812077C
- .4byte _08120938
- .4byte _081207BC
- .4byte _081207F8
- .4byte _081207F8
- .4byte _08120938
-_0812077C:
- ldr r0, =gSaveBlock1Ptr
- ldr r2, [r0]
- ldr r0, =gSpecialVar_0x8004
- ldrh r0, [r0]
- ldr r3, =0x00002e36
- adds r1, r2, r3
- cmp r0, 0
- bne _08120790
- ldr r0, =0x00002e2a
- adds r1, r2, r0
-_08120790:
- adds r2, r1, 0
- adds r1, r6, 0
- adds r1, 0xC
- movs r3, 0x5
-_08120798:
- ldrh r0, [r2]
- strh r0, [r1]
- adds r2, 0x2
- adds r1, 0x2
- subs r3, 0x1
- cmp r3, 0
- bge _08120798
- movs r0, 0
- strb r0, [r6]
- b _08120938
- .pool
-_081207BC:
- ldrb r1, [r6]
- lsls r1, 1
- adds r0, r6, 0
- adds r0, 0xC
- adds r0, r1
- ldrh r4, [r0]
- adds r0, r4, 0
- bl GetWordSounds
- str r0, [r6, 0x30]
- movs r1, 0x3
- ands r1, r4
- lsrs r4, 3
- movs r0, 0x1
- ands r4, r0
- adds r1, r4
- adds r0, r6, 0
- bl GetWordPhonemes
- ldrb r0, [r6]
- adds r0, 0x1
- strb r0, [r6]
- ldr r0, [r6, 0x30]
- ldrb r0, [r0]
- cmp r0, 0xFF
- beq _081207F4
- movs r0, 0
- b _08120936
-_081207F4:
- movs r0, 0x3
- b _0812091A
-_081207F8:
- ldrb r3, [r6, 0x1]
- lsls r1, r3, 3
- ldr r0, [r6, 0x30]
- adds r2, r0, r1
- ldrb r1, [r6, 0x3]
- cmp r1, 0x1
- beq _081208A0
- cmp r1, 0x1
- bgt _08120810
- cmp r1, 0
- beq _0812081C
- b _08120938
-_08120810:
- cmp r1, 0x2
- beq _08120850
- cmp r1, 0x3
- bne _0812081A
- b _08120922
-_0812081A:
- b _08120938
-_0812081C:
- lsls r0, r3, 2
- adds r0, r6, r0
- ldrh r0, [r0, 0x18]
- strb r0, [r6, 0x2]
- ldrb r0, [r2]
- cmp r0, 0x32
- bhi _08120844
- movs r1, 0x3
- bl __udivsi3
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- lsls r0, r1, 1
- adds r0, r1
- movs r1, 0x8C
- lsls r1, 2
- adds r0, r1
- bl m4aSongNumStart
-_08120844:
- movs r0, 0x2
- strb r0, [r6, 0x3]
- ldrb r0, [r6, 0x2]
- subs r0, 0x1
- strb r0, [r6, 0x2]
- b _08120938
-_08120850:
- movs r0, 0x1
- strb r0, [r6, 0x3]
- ldrb r0, [r2]
- cmp r0, 0x32
- bhi _08120938
- movs r3, 0x4
- ldrsh r0, [r2, r3]
- lsls r0, 4
- movs r1, 0x80
- lsls r1, 1
- adds r0, r1
- strh r0, [r6, 0x6]
- ldr r4, =gMPlayInfo_SE2
- ldr r5, =0x0000ffff
- ldrh r2, [r6, 0x6]
- adds r0, r4, 0
- adds r1, r5, 0
- bl m4aMPlayVolumeControl
- ldrb r1, [r6, 0x1]
- lsls r1, 2
- adds r1, r6, r1
- movs r2, 0x80
- lsls r2, 2
- adds r0, r2, 0
- ldrh r1, [r1, 0x1A]
- adds r0, r1
- strh r0, [r6, 0x8]
- movs r3, 0x8
- ldrsh r2, [r6, r3]
- adds r0, r4, 0
- adds r1, r5, 0
- bl m4aMPlayPitchControl
- b _08120938
- .pool
-_081208A0:
- ldrh r2, [r6, 0xA]
- movs r3, 0xA
- ldrsh r0, [r6, r3]
- cmp r0, 0xA
- ble _081208B0
- ldrh r0, [r6, 0x6]
- subs r0, 0x2
- strh r0, [r6, 0x6]
-_081208B0:
- ands r1, r2
- cmp r1, 0
- beq _081208BC
- ldrh r0, [r6, 0x8]
- adds r0, 0x40
- b _081208C0
-_081208BC:
- ldrh r0, [r6, 0x8]
- subs r0, 0x40
-_081208C0:
- strh r0, [r6, 0x8]
- ldr r4, =gMPlayInfo_SE2
- ldr r5, =0x0000ffff
- ldrh r2, [r6, 0x6]
- adds r0, r4, 0
- adds r1, r5, 0
- bl m4aMPlayVolumeControl
- movs r0, 0x8
- ldrsh r2, [r6, r0]
- adds r0, r4, 0
- adds r1, r5, 0
- bl m4aMPlayPitchControl
- ldrh r0, [r6, 0xA]
- adds r0, 0x1
- strh r0, [r6, 0xA]
- ldrb r0, [r6, 0x2]
- subs r0, 0x1
- strb r0, [r6, 0x2]
- lsls r0, 24
- cmp r0, 0
- bne _08120938
- ldrb r0, [r6, 0x1]
- adds r0, 0x1
- strb r0, [r6, 0x1]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x6
- beq _08120918
- ldrb r0, [r6, 0x1]
- ldr r1, [r6, 0x30]
- lsls r0, 3
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0xFF
- beq _08120918
- movs r0, 0
- b _08120936
- .pool
-_08120918:
- movs r0, 0x3
-_0812091A:
- strb r0, [r6, 0x3]
- movs r0, 0x2
- strb r0, [r6, 0x2]
- b _08120938
-_08120922:
- ldrb r0, [r6, 0x2]
- subs r0, 0x1
- strb r0, [r6, 0x2]
- lsls r0, 24
- cmp r0, 0
- bne _08120938
- ldr r0, =gMPlayInfo_SE2
- bl m4aMPlayStop
- movs r0, 0x4
-_08120936:
- strb r0, [r6, 0x3]
-_08120938:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8120748
-
- thumb_func_start sub_8120944
-sub_8120944: @ 8120944
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- ldr r1, =gTasks
- adds r5, r0, r1
- ldr r1, =gUnknown_03006130
- adds r0, r5, 0
- bl sub_8120748
- movs r1, 0x8
- ldrsh r0, [r5, r1]
- cmp r0, 0x5
- bls _08120966
- b _08120B50
-_08120966:
- lsls r0, 2
- ldr r1, =_0812097C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_0812097C:
- .4byte _08120994
- .4byte _081209B8
- .4byte _081209C8
- .4byte _08120A7E
- .4byte _08120B40
- .4byte _08120A6E
-_08120994:
- bl sub_8120280
- ldr r0, =gStringVar4
- bl sub_8120708
- movs r0, 0
- strh r0, [r5, 0xA]
- strh r0, [r5, 0xC]
- strh r0, [r5, 0xE]
- strh r0, [r5, 0x10]
- movs r0, 0x4
- bl FadeOutBGMTemporarily
- movs r0, 0x1
- b _08120B4E
- .pool
-_081209B8:
- bl IsBGMPausedOrStopped
- lsls r0, 24
- cmp r0, 0
- bne _081209C4
- b _08120B50
-_081209C4:
- movs r0, 0x2
- b _08120B4E
-_081209C8:
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r2, =0x00002e28
- adds r4, r0, r2
- movs r0, 0xE
- ldrsh r1, [r5, r0]
- ldr r0, =gStringVar4
- adds r1, r0
- movs r3, 0
- ldrb r0, [r1]
- ldr r7, =gUnknown_03006130
- ldrh r2, [r5, 0x12]
- ldr r6, =gUnknown_0203A128
- b _08120A02
- .pool
-_081209F8:
- adds r1, 0x1
- adds r0, r3, 0x1
- lsls r0, 16
- lsrs r3, r0, 16
- ldrb r0, [r1]
-_08120A02:
- cmp r0, 0
- beq _08120A12
- cmp r0, 0xFE
- beq _08120A12
- cmp r0, 0xFC
- beq _08120A12
- cmp r0, 0xFF
- bne _081209F8
-_08120A12:
- cmp r2, 0
- bne _08120A20
- movs r2, 0x10
- ldrsh r1, [r5, r2]
- lsls r1, 1
- adds r0, r4, 0x2
- b _08120A2A
-_08120A20:
- movs r0, 0x10
- ldrsh r1, [r5, r0]
- lsls r1, 1
- adds r0, r4, 0
- adds r0, 0xE
-_08120A2A:
- adds r0, r1
- ldrh r0, [r0]
- movs r1, 0x3
- ands r1, r0
- lsrs r0, 3
- movs r2, 0x1
- ands r0, r2
- adds r1, r0
- strh r1, [r6]
- movs r1, 0x4
- ldrsh r0, [r7, r1]
- adds r1, r3, 0
- bl __divsi3
- movs r1, 0
- strh r0, [r7, 0x4]
- lsls r0, 16
- cmp r0, 0
- bgt _08120A54
- movs r0, 0x1
- strh r0, [r7, 0x4]
-_08120A54:
- ldrh r0, [r5, 0x10]
- adds r0, 0x1
- strh r0, [r5, 0x10]
- movs r2, 0xC
- ldrsh r0, [r5, r2]
- cmp r0, 0
- bne _08120A66
- movs r0, 0x3
- b _08120A68
-_08120A66:
- movs r0, 0x5
-_08120A68:
- strh r0, [r5, 0x8]
- strh r1, [r5, 0xA]
- b _08120B50
-_08120A6E:
- ldrh r1, [r5, 0xC]
- movs r2, 0xC
- ldrsh r0, [r5, r2]
- cmp r0, 0
- beq _08120B4C
- subs r0, r1, 0x1
- strh r0, [r5, 0xC]
- b _08120B50
-_08120A7E:
- ldr r1, =gStringVar4
- movs r2, 0xE
- ldrsh r0, [r5, r2]
- adds r0, r1
- ldrb r4, [r0]
- cmp r4, 0xFF
- bne _08120AB0
- movs r0, 0x6
- bl FadeInBGM
- ldr r0, =gMPlayInfo_SE2
- movs r1, 0x2
- bl m4aMPlayFadeOutTemporarily
- bl EnableBothScriptContexts
- adds r0, r6, 0
- bl DestroyTask
- b _08120B50
- .pool
-_08120AB0:
- cmp r4, 0
- bne _08120AC6
- bl sub_81206F0
- ldrh r0, [r5, 0xE]
- adds r0, 0x1
- strh r0, [r5, 0xE]
- movs r0, 0x2
- strh r0, [r5, 0x8]
- strh r4, [r5, 0xC]
- b _08120B50
-_08120AC6:
- cmp r4, 0xFE
- bne _08120ADA
- ldrh r0, [r5, 0xE]
- adds r0, 0x1
- movs r1, 0
- strh r0, [r5, 0xE]
- movs r0, 0x2
- strh r0, [r5, 0x8]
- strh r1, [r5, 0xC]
- b _08120B50
-_08120ADA:
- cmp r4, 0xFC
- bne _08120AEE
- ldrh r0, [r5, 0xE]
- adds r0, 0x2
- strh r0, [r5, 0xE]
- movs r0, 0x2
- strh r0, [r5, 0x8]
- movs r0, 0x8
- strh r0, [r5, 0xC]
- b _08120B50
-_08120AEE:
- cmp r4, 0x37
- bne _08120B04
- movs r4, 0
- strb r4, [r0]
- bl sub_81206F0
- ldrh r0, [r5, 0xE]
- adds r0, 0x1
- strh r0, [r5, 0xE]
- strh r4, [r5, 0xC]
- b _08120B50
-_08120B04:
- movs r1, 0xA
- ldrsh r0, [r5, r1]
- cmp r0, 0x1
- beq _08120B20
- cmp r0, 0x1
- bgt _08120B16
- cmp r0, 0
- beq _08120B1C
- b _08120B50
-_08120B16:
- cmp r0, 0x2
- beq _08120B28
- b _08120B50
-_08120B1C:
- bl sub_81206F0
-_08120B20:
- ldrh r0, [r5, 0xA]
- adds r0, 0x1
- strh r0, [r5, 0xA]
- b _08120B50
-_08120B28:
- ldrh r0, [r5, 0xE]
- adds r0, 0x1
- movs r1, 0
- strh r0, [r5, 0xE]
- strh r1, [r5, 0xA]
- ldr r0, =gUnknown_03006130
- ldrh r0, [r0, 0x4]
- strh r0, [r5, 0xC]
- movs r0, 0x4
- b _08120B4E
- .pool
-_08120B40:
- ldrh r0, [r5, 0xC]
- subs r0, 0x1
- strh r0, [r5, 0xC]
- lsls r0, 16
- cmp r0, 0
- bne _08120B50
-_08120B4C:
- movs r0, 0x3
-_08120B4E:
- strh r0, [r5, 0x8]
-_08120B50:
- bl sub_8197224
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8120944
-
- thumb_func_start sub_8120B5C
-sub_8120B5C: @ 8120B5C
- push {lr}
- ldr r0, =0x00004010
- movs r1, 0x45
- bl VarSet
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8120B5C
-
- thumb_func_start sub_8120B70
-sub_8120B70: @ 8120B70
- push {r4-r7,lr}
- sub sp, 0x8
- ldrb r1, [r0]
- cmp r1, 0x2
- beq _08120B80
- cmp r1, 0x3
- beq _08120BA6
- b _08120C00
-_08120B80:
- adds r5, r0, 0
- movs r4, 0
-_08120B84:
- adds r0, r5, 0
- adds r0, 0x32
- adds r0, r4
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _08120B9E
- movs r0, 0xB
- muls r0, r4
- adds r0, 0x5
- adds r0, r5, r0
- movs r1, 0x1
- bl ConvertInternationalString
-_08120B9E:
- adds r4, 0x1
- cmp r4, 0x3
- ble _08120B84
- b _08120C00
-_08120BA6:
- adds r6, r0, 0
- movs r4, 0
- mov r7, sp
- adds r5, r6, 0
- adds r5, 0x8
-_08120BB0:
- adds r0, r6, 0x4
- adds r0, r4
- ldrb r0, [r0]
- cmp r0, 0
- beq _08120BF8
- mov r0, sp
- adds r1, r5, 0
- movs r2, 0x7
- bl memcpy
- movs r0, 0xFF
- strb r0, [r7, 0x7]
- mov r0, sp
- bl IsStringJapanese
- cmp r0, 0
- beq _08120BF8
- mov r0, sp
- movs r1, 0
- movs r2, 0x8
- bl memset
- mov r0, sp
- ldr r1, =gText_Friend
- bl StringCopy
- adds r0, r5, 0
- mov r1, sp
- movs r2, 0x7
- bl memcpy
- adds r0, r6, 0
- adds r0, 0x34
- adds r0, r4
- movs r1, 0x2
- strb r1, [r0]
-_08120BF8:
- adds r5, 0x7
- adds r4, 0x1
- cmp r4, 0x3
- ble _08120BB0
-_08120C00:
- add sp, 0x8
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8120B70
-
- thumb_func_start sub_8120C0C
-sub_8120C0C: @ 8120C0C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r5, r0, 0
- mov r8, r1
- adds r7, r2, 0
- ldrb r0, [r5]
- cmp r0, 0x4
- bhi _08120CC4
- lsls r0, 2
- ldr r1, =_08120C2C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_08120C2C:
- .4byte _08120C92
- .4byte _08120CA2
- .4byte _08120C40
- .4byte _08120C6A
- .4byte _08120CB0
-_08120C40:
- adds r6, r5, 0
- movs r5, 0
- adds r4, r6, 0
- adds r4, 0x32
-_08120C48:
- movs r0, 0xB
- muls r0, r5
- adds r0, 0x5
- adds r0, r6, r0
- bl IsStringJapanese
- cmp r0, 0
- beq _08120C5E
- mov r0, r8
- strb r0, [r4]
- b _08120C60
-_08120C5E:
- strb r7, [r4]
-_08120C60:
- adds r4, 0x1
- adds r5, 0x1
- cmp r5, 0x3
- ble _08120C48
- b _08120CC4
-_08120C6A:
- adds r4, r5, 0
- adds r4, 0x34
- adds r6, r5, 0
- adds r6, 0x8
- movs r5, 0x3
-_08120C74:
- adds r0, r6, 0
- bl IsStringJapanese
- cmp r0, 0
- beq _08120C84
- mov r1, r8
- strb r1, [r4]
- b _08120C86
-_08120C84:
- strb r7, [r4]
-_08120C86:
- adds r4, 0x1
- adds r6, 0x7
- subs r5, 0x1
- cmp r5, 0
- bge _08120C74
- b _08120CC4
-_08120C92:
- cmp r3, 0x1
- bne _08120C9C
- adds r0, r5, 0
- adds r0, 0x2A
- b _08120CB8
-_08120C9C:
- adds r0, r5, 0
- adds r0, 0x2A
- b _08120CC2
-_08120CA2:
- cmp r3, 0x1
- bne _08120CAC
- mov r0, r8
- strb r0, [r5, 0x2]
- b _08120CC4
-_08120CAC:
- strb r7, [r5, 0x2]
- b _08120CC4
-_08120CB0:
- cmp r3, 0x1
- bne _08120CBE
- adds r0, r5, 0
- adds r0, 0x20
-_08120CB8:
- mov r1, r8
- strb r1, [r0]
- b _08120CC4
-_08120CBE:
- adds r0, r5, 0
- adds r0, 0x20
-_08120CC2:
- strb r7, [r0]
-_08120CC4:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8120C0C
-
- thumb_func_start sub_8120CD0
-sub_8120CD0: @ 8120CD0
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x8
- adds r1, r0, 0
- ldrb r0, [r1]
- cmp r0, 0x3
- bne _08120D28
- cmp r2, 0x1
- bne _08120D28
- adds r7, r1, 0
- movs r6, 0
- mov r8, sp
- adds r4, r7, 0
- adds r4, 0x34
- adds r5, r7, 0
- adds r5, 0x8
-_08120CF2:
- adds r0, r7, 0x4
- adds r0, r6
- ldrb r0, [r0]
- cmp r0, 0
- beq _08120D1E
- mov r0, sp
- adds r1, r5, 0
- movs r2, 0x7
- bl memcpy
- movs r0, 0xFF
- mov r1, r8
- strb r0, [r1, 0x7]
- mov r0, sp
- bl IsStringJapanese
- cmp r0, 0
- beq _08120D1A
- movs r0, 0x1
- b _08120D1C
-_08120D1A:
- movs r0, 0x2
-_08120D1C:
- strb r0, [r4]
-_08120D1E:
- adds r4, 0x1
- adds r5, 0x7
- adds r6, 0x1
- cmp r6, 0x3
- ble _08120CF2
-_08120D28:
- add sp, 0x8
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8120CD0
-
- thumb_func_start sub_8120D34
-sub_8120D34: @ 8120D34
- push {r4-r7,lr}
- adds r3, r0, 0
- adds r6, r2, 0
- movs r2, 0
- subs r1, 0x1
- cmp r1, 0x1
- bhi _08120D44
- movs r2, 0x1
-_08120D44:
- ldrb r0, [r3]
- cmp r0, 0x4
- bhi _08120E02
- lsls r0, 2
- ldr r1, =_08120D58
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_08120D58:
- .4byte _08120DE6
- .4byte _08120DF0
- .4byte _08120D6C
- .4byte _08120DC6
- .4byte _08120DF8
-_08120D6C:
- adds r7, r3, 0
- cmp r2, 0
- beq _08120DA4
- movs r5, 0
- adds r4, r3, 0
- adds r4, 0x32
-_08120D78:
- movs r0, 0xB
- muls r0, r5
- adds r0, 0x5
- adds r1, r7, r0
- ldrb r0, [r1]
- cmp r0, 0xFC
- bne _08120D98
- ldrb r0, [r1, 0x1]
- cmp r0, 0x15
- bne _08120D98
- adds r0, r1, 0
- bl StripExtCtrlCodes
- movs r0, 0x1
- strb r0, [r4]
- b _08120D9A
-_08120D98:
- strb r6, [r4]
-_08120D9A:
- adds r4, 0x1
- adds r5, 0x1
- cmp r5, 0x3
- ble _08120D78
- b _08120E02
-_08120DA4:
- movs r5, 0
- adds r4, r3, 0
- adds r4, 0x32
-_08120DAA:
- adds r0, r4, r5
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _08120DBE
- movs r0, 0xB
- muls r0, r5
- adds r0, 0x5
- adds r0, r7, r0
- bl StripExtCtrlCodes
-_08120DBE:
- adds r5, 0x1
- cmp r5, 0x3
- ble _08120DAA
- b _08120E02
-_08120DC6:
- cmp r2, 0
- beq _08120E02
- movs r1, 0
- adds r4, r3, 0x4
- adds r2, r3, 0
- adds r2, 0x34
-_08120DD2:
- adds r0, r4, r1
- ldrb r0, [r0]
- cmp r0, 0
- beq _08120DDE
- adds r0, r2, r1
- strb r6, [r0]
-_08120DDE:
- adds r1, 0x1
- cmp r1, 0x3
- ble _08120DD2
- b _08120E02
-_08120DE6:
- cmp r2, 0
- beq _08120E02
- adds r0, r3, 0
- adds r0, 0x2A
- b _08120E00
-_08120DF0:
- cmp r2, 0
- beq _08120E02
- strb r6, [r3, 0x2]
- b _08120E02
-_08120DF8:
- cmp r2, 0
- beq _08120E02
- adds r0, r3, 0
- adds r0, 0x20
-_08120E00:
- strb r6, [r0]
-_08120E02:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8120D34
-
- thumb_func_start sub_8120E08
-sub_8120E08: @ 8120E08
- push {r4,r5,lr}
- ldr r2, =gUnknown_0203A12C
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r1, =0x00002e28
- adds r0, r1
- str r0, [r2]
- movs r3, 0
- movs r1, 0x3
- strb r1, [r0]
- ldr r0, [r2]
- strb r3, [r0, 0x1]
- movs r5, 0
- movs r4, 0xFF
-_08120E24:
- ldr r0, [r2]
- adds r0, 0x4
- adds r0, r3
- strb r5, [r0]
- ldr r1, [r2]
- adds r1, 0x8
- adds r1, r3
- ldrb r0, [r1]
- orrs r0, r4
- strb r0, [r1]
- adds r3, 0x1
- cmp r3, 0x3
- ble _08120E24
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8120E08
-
- thumb_func_start sub_8120E50
-sub_8120E50: @ 8120E50
- ldr r3, =gUnknown_0203A12C
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r1, =0x00002e28
- adds r0, r1
- str r0, [r3]
- movs r2, 0
- movs r1, 0x3
- strb r1, [r0]
- ldr r0, [r3]
- strb r2, [r0, 0x1]
- bx lr
- .pool
- thumb_func_end sub_8120E50
-
- thumb_func_start sub_8120E74
-sub_8120E74: @ 8120E74
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x32
- bne _08120E80
- movs r0, 0
-_08120E80:
- bl GetGameStat
- pop {r1}
- bx r1
- thumb_func_end sub_8120E74
-
- thumb_func_start sub_8120E88
-sub_8120E88: @ 8120E88
- push {lr}
- adds r3, r0, 0
- movs r2, 0
- ldr r1, =gUnknown_0859F048
-_08120E90:
- ldrb r0, [r1]
- cmp r0, r3
- bne _08120EA0
- adds r0, r1, 0
- b _08120EAA
- .pool
-_08120EA0:
- adds r1, 0x10
- adds r2, 0x1
- cmp r2, 0x23
- ble _08120E90
- ldr r0, =gUnknown_0859F278
-_08120EAA:
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_8120E88
-
- thumb_func_start sub_8120EB4
-sub_8120EB4: @ 8120EB4
- push {lr}
- bl sub_8120E88
- ldr r0, [r0, 0x4]
- pop {r1}
- bx r1
- thumb_func_end sub_8120EB4
-
- thumb_func_start sub_8120EC0
-sub_8120EC0: @ 8120EC0
- push {lr}
- bl sub_8120E88
- ldr r0, [r0, 0xC]
- pop {r1}
- bx r1
- thumb_func_end sub_8120EC0
-
- thumb_func_start sub_8120ECC
-sub_8120ECC: @ 8120ECC
- push {lr}
- bl sub_8120E88
- ldr r0, [r0, 0x8]
- pop {r1}
- bx r1
- thumb_func_end sub_8120ECC
-
- thumb_func_start sub_8120ED8
-sub_8120ED8: @ 8120ED8
- push {lr}
- movs r1, 0
- ldr r2, =gUnknown_0203A12C
- ldr r0, [r2]
- ldrb r0, [r0, 0x4]
- cmp r0, 0
- beq _08120EFC
-_08120EE6:
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x3
- bhi _08120EFC
- ldr r0, [r2]
- adds r0, 0x4
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _08120EE6
-_08120EFC:
- adds r0, r1, 0
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_8120ED8
-
- thumb_func_start sub_8120F08
-sub_8120F08: @ 8120F08
- ldr r1, =gUnknown_0203A12C
- lsls r0, 2
- adds r0, 0x24
- ldr r2, [r1]
- adds r2, r0
- ldrb r0, [r2]
- ldrb r1, [r2, 0x1]
- lsls r1, 8
- orrs r0, r1
- ldrb r1, [r2, 0x2]
- lsls r1, 16
- orrs r0, r1
- ldrb r1, [r2, 0x3]
- lsls r1, 24
- orrs r0, r1
- bx lr
- .pool
- thumb_func_end sub_8120F08
-
- thumb_func_start sub_8120F2C
-sub_8120F2C: @ 8120F2C
- ldr r2, =gUnknown_0203A12C
- lsls r0, 2
- adds r0, 0x24
- ldr r2, [r2]
- adds r2, r0
- strb r1, [r2]
- lsrs r0, r1, 8
- strb r0, [r2, 0x1]
- lsrs r0, r1, 16
- strb r0, [r2, 0x2]
- lsrs r1, 24
- strb r1, [r2, 0x3]
- bx lr
- .pool
- thumb_func_end sub_8120F2C
-
- thumb_func_start sub_8120F4C
-sub_8120F4C: @ 8120F4C
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r0, =gUnknown_0203A12C
- ldr r0, [r0]
- adds r0, 0x4
- adds r0, r5
- ldrb r0, [r0]
- bl sub_8120E74
- adds r4, r0, 0
- adds r0, r5, 0
- bl sub_8120F08
- cmp r4, r0
- bhi _08120F74
- movs r0, 0
- b _08120F76
- .pool
-_08120F74:
- movs r0, 0x1
-_08120F76:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_8120F4C
-
- thumb_func_start sub_8120F7C
-sub_8120F7C: @ 8120F7C
- push {r4,r5,lr}
- adds r5, r1, 0
- ldr r2, =gUnknown_0203A12C
- lsls r1, r0, 3
- subs r1, r0
- adds r1, 0x8
- ldr r4, [r2]
- adds r4, r1
- adds r0, r5, 0
- movs r1, 0xFF
- movs r2, 0x8
- bl memset
- adds r0, r5, 0
- adds r1, r4, 0
- movs r2, 0x7
- bl memcpy
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8120F7C
-
- thumb_func_start sub_8120FAC
-sub_8120FAC: @ 8120FAC
- push {r4,r5,lr}
- adds r5, r1, 0
- ldr r2, =gUnknown_0203A12C
- lsls r1, r0, 3
- subs r1, r0
- adds r1, 0x8
- ldr r4, [r2]
- adds r4, r1
- adds r0, r4, 0
- movs r1, 0xFF
- movs r2, 0x7
- bl memset
- adds r0, r4, 0
- adds r1, r5, 0
- movs r2, 0x7
- bl memcpy
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8120FAC
-
- thumb_func_start sub_8120FDC
-sub_8120FDC: @ 8120FDC
- push {r4-r6,lr}
- mov r6, r9
- mov r5, r8
- push {r5,r6}
- mov r8, r0
- adds r6, r1, 0
- ldr r0, =gUnknown_0203A12C
- mov r9, r0
- ldr r0, [r0]
- adds r0, 0x4
- add r0, r8
- strb r6, [r0]
- ldr r0, =gSaveBlock2Ptr
- ldr r1, [r0]
- mov r0, r8
- bl sub_8120FAC
- lsls r4, r6, 24
- lsrs r4, 24
- adds r0, r4, 0
- bl sub_8120E74
- adds r1, r0, 0
- mov r0, r8
- bl sub_8120F2C
- ldr r5, =gStringVar1
- adds r0, r4, 0
- bl sub_8120E74
- adds r1, r0, 0
- adds r0, r5, 0
- movs r2, 0
- movs r3, 0xA
- bl ConvertIntToDecimalStringN
- ldr r4, =gStringVar2
- adds r0, r6, 0
- bl sub_8120ECC
- adds r1, r0, 0
- adds r0, r4, 0
- bl StringCopy
- mov r1, r9
- ldr r0, [r1]
- adds r0, 0x34
- add r0, r8
- ldr r1, =gGameLanguage
- ldrb r1, [r1]
- strb r1, [r0]
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8120FDC
-
- thumb_func_start sub_8121064
-sub_8121064: @ 8121064
- push {r4-r7,lr}
- adds r7, r0, 0
- adds r6, r1, 0
- movs r5, 0
- cmp r5, r6
- bge _0812107A
-_08121070:
- adds r0, r7, r5
- strb r5, [r0]
- adds r5, 0x1
- cmp r5, r6
- blt _08121070
-_0812107A:
- cmp r6, 0
- ble _081210B0
- adds r5, r6, 0
-_08121080:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- adds r1, r6, 0
- bl __modsi3
- adds r4, r0, 0
- bl Random
- lsls r0, 16
- lsrs r0, 16
- adds r1, r6, 0
- bl __modsi3
- adds r4, r7, r4
- ldrb r2, [r4]
- adds r0, r7, r0
- ldrb r1, [r0]
- strb r1, [r4]
- strb r2, [r0]
- subs r5, 0x1
- cmp r5, 0
- bne _08121080
-_081210B0:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8121064
-
- thumb_func_start sub_81210B8
-sub_81210B8: @ 81210B8
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- mov r7, sp
- mov r8, sp
- ldr r0, =gUnknown_0859F288
- ldr r0, [r0]
- lsls r0, 3
- lsrs r0, 3
- adds r0, 0x3
- lsrs r0, 2
- lsls r0, 2
- mov r1, sp
- subs r1, r0
- mov sp, r1
- mov r9, sp
- mov r0, sp
- movs r1, 0x24
- bl sub_8121064
- movs r5, 0
-_081210E4:
- ldr r1, =gUnknown_0859F048
- mov r2, r9
- adds r0, r2, r5
- ldrb r0, [r0]
- lsls r0, 4
- adds r0, r1
- ldrb r4, [r0]
- ldrb r6, [r0, 0x1]
- movs r1, 0
- ldr r2, =gUnknown_0203A12C
- ldr r0, [r2]
- ldrb r0, [r0, 0x4]
- cmp r0, r4
- beq _08121112
-_08121100:
- adds r1, 0x1
- cmp r1, 0x3
- bgt _08121112
- ldr r0, [r2]
- adds r0, 0x4
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, r4
- bne _08121100
-_08121112:
- cmp r1, 0x4
- bne _08121162
- adds r0, r4, 0
- bl sub_8120E74
- cmp r0, r6
- bcc _08121162
- ldr r0, =gUnknown_0203A12C
- ldr r1, [r0]
- movs r0, 0x1
- strb r0, [r1, 0x1]
- bl sub_8120ED8
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x4
- bne _08121150
- ldr r0, =gUnknown_03001178
- ldrb r0, [r0]
- adds r1, r4, 0
- bl sub_8120FDC
- b _0812115E
- .pool
-_08121150:
- bl sub_8120ED8
- lsls r0, 24
- lsrs r0, 24
- adds r1, r4, 0
- bl sub_8120FDC
-_0812115E:
- movs r0, 0x1
- b _0812116A
-_08121162:
- adds r5, 0x1
- cmp r5, 0x23
- ble _081210E4
- movs r0, 0
-_0812116A:
- mov sp, r8
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_81210B8
-
- thumb_func_start sub_8121178
-sub_8121178: @ 8121178
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- adds r5, r0, 0
- ldr r6, =gUnknown_0203A12C
- ldr r0, [r6]
- adds r0, 0x4
- adds r0, r5
- ldrb r0, [r0]
- mov r8, r0
- ldr r4, =gStringVar1
- adds r0, r5, 0
- bl sub_8120F08
- adds r1, r0, 0
- adds r0, r4, 0
- movs r2, 0
- movs r3, 0xA
- bl ConvertIntToDecimalStringN
- ldr r4, =gStringVar2
- mov r0, r8
- bl sub_8120ECC
- adds r1, r0, 0
- adds r0, r4, 0
- bl StringCopy
- ldr r4, =gStringVar3
- adds r0, r5, 0
- adds r1, r4, 0
- bl sub_8120F7C
- ldr r0, [r6]
- adds r0, 0x34
- adds r0, r5
- ldrb r1, [r0]
- adds r0, r4, 0
- bl ConvertInternationalString
- mov r0, r8
- bl sub_8120EC0
- bl ShowFieldMessage
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8121178
-
- thumb_func_start sub_81211EC
-sub_81211EC: @ 81211EC
- push {r4,r5,lr}
- sub sp, 0xC
- ldr r1, =gText_Exit
- movs r0, 0x1
- movs r2, 0
- bl GetStringWidth
- adds r5, r0, 0
- movs r4, 0
- ldr r0, =gUnknown_0203A12C
- ldr r0, [r0]
- ldrb r0, [r0, 0x4]
- cmp r0, 0
- beq _08121230
-_08121208:
- bl sub_8120EB4
- adds r1, r0, 0
- movs r0, 0x1
- movs r2, 0
- bl GetStringWidth
- cmp r0, r5
- ble _0812121C
- adds r5, r0, 0
-_0812121C:
- adds r4, 0x1
- cmp r4, 0x3
- bgt _08121230
- ldr r0, =gUnknown_0203A12C
- ldr r0, [r0]
- adds r0, 0x4
- adds r0, r4
- ldrb r0, [r0]
- cmp r0, 0
- bne _08121208
-_08121230:
- adds r0, r5, 0
- bl convert_pixel_width_to_tile_width
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl sub_8120ED8
- adds r3, r0, 0
- lsls r3, 25
- movs r0, 0x80
- lsls r0, 18
- adds r3, r0
- lsrs r3, 24
- movs r0, 0
- movs r1, 0
- adds r2, r4, 0
- bl CreateWindowFromRect
- ldr r1, =gUnknown_0203A130
- strb r0, [r1]
- ldrb r0, [r1]
- movs r1, 0
- bl SetStandardWindowBorderStyle
- movs r4, 0
- ldr r0, =gUnknown_0203A12C
- ldr r0, [r0]
- ldrb r0, [r0, 0x4]
- cmp r0, 0
- beq _081212AA
- movs r5, 0x80
- lsls r5, 17
-_08121272:
- bl sub_8120EB4
- adds r2, r0, 0
- ldr r0, =gUnknown_0203A130
- ldrb r0, [r0]
- lsrs r1, r5, 24
- str r1, [sp]
- movs r1, 0xFF
- str r1, [sp, 0x4]
- movs r1, 0
- str r1, [sp, 0x8]
- movs r1, 0x1
- movs r3, 0x8
- bl PrintTextOnWindow
- movs r0, 0x80
- lsls r0, 21
- adds r5, r0
- adds r4, 0x1
- cmp r4, 0x3
- bgt _081212AA
- ldr r0, =gUnknown_0203A12C
- ldr r0, [r0]
- adds r0, 0x4
- adds r0, r4
- ldrb r0, [r0]
- cmp r0, 0
- bne _08121272
-_081212AA:
- ldr r5, =gUnknown_0203A130
- ldrb r0, [r5]
- ldr r2, =gText_Exit
- lsls r1, r4, 4
- adds r1, 0x1
- lsls r1, 24
- lsrs r1, 24
- str r1, [sp]
- movs r1, 0xFF
- str r1, [sp, 0x4]
- movs r1, 0
- str r1, [sp, 0x8]
- movs r1, 0x1
- movs r3, 0x8
- bl PrintTextOnWindow
- ldrb r4, [r5]
- bl sub_8120ED8
- adds r1, r0, 0
- adds r1, 0x1
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- movs r2, 0
- bl InitMenuInUpperLeftCornerPlaySoundWhenAPressed
- ldrb r0, [r5]
- movs r1, 0x3
- bl CopyWindowToVram
- add sp, 0xC
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81211EC
-
- thumb_func_start sub_81212FC
-sub_81212FC: @ 81212FC
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- ldr r1, =gTasks
- adds r4, r0, r1
- movs r0, 0x8
- ldrsh r5, [r4, r0]
- cmp r5, 0
- beq _08121320
- cmp r5, 0x1
- beq _0812132C
- b _08121376
- .pool
-_08121320:
- bl sub_81211EC
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- b _08121376
-_0812132C:
- bl ProcessMenuInput
- lsls r0, 24
- asrs r4, r0, 24
- movs r0, 0x2
- negs r0, r0
- cmp r4, r0
- beq _08121376
- adds r0, 0x1
- cmp r4, r0
- beq _0812134E
- bl sub_8120ED8
- lsls r0, 24
- lsrs r0, 24
- cmp r4, r0
- bne _0812135C
-_0812134E:
- ldr r1, =gSpecialVar_Result
- movs r0, 0
- strh r0, [r1]
- b _08121364
- .pool
-_0812135C:
- ldr r0, =gSpecialVar_Result
- strh r5, [r0]
- ldr r0, =gUnknown_03001178
- strb r4, [r0]
-_08121364:
- ldr r0, =gUnknown_0203A130
- ldrb r0, [r0]
- bl sub_80E2A78
- adds r0, r6, 0
- bl DestroyTask
- bl EnableBothScriptContexts
-_08121376:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81212FC
-
- thumb_func_start sub_8121388
-sub_8121388: @ 8121388
- push {lr}
- ldr r0, =sub_81212FC
- movs r1, 0x50
- bl CreateTask
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8121388
-
- thumb_func_start sub_812139C
-sub_812139C: @ 812139C
- push {lr}
- ldr r0, =gUnknown_03001178
- ldrb r0, [r0]
- bl sub_8121178
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_812139C
-
- thumb_func_start sub_81213B0
-sub_81213B0: @ 81213B0
- push {lr}
- ldr r1, =gUnknown_0203A12C
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r2, =0x00002e28
- adds r0, r2
- str r0, [r1]
- bl sub_8120ED8
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_81213B0
-
- thumb_func_start sub_81213D8
-sub_81213D8: @ 81213D8
- push {r4,r5,lr}
- ldr r2, =gUnknown_0203A12C
- ldr r0, =gSaveBlock1Ptr
- ldr r1, [r0]
- ldr r3, =0x00002e28
- adds r0, r1, r3
- str r0, [r2]
- ldr r5, =gUnknown_03001178
- ldrb r0, [r5]
- ldr r2, =0x00002e2c
- adds r1, r2
- adds r1, r0
- ldrb r4, [r1]
- bl sub_8120F4C
- cmp r0, 0x1
- beq _08121414
- movs r0, 0
- b _0812141E
- .pool
-_08121414:
- ldrb r0, [r5]
- adds r1, r4, 0
- bl sub_8120FDC
- movs r0, 0x1
-_0812141E:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_81213D8
-
- thumb_func_start sub_8121424
-sub_8121424: @ 8121424
- push {lr}
- ldr r1, =gUnknown_0203A12C
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r2, =0x00002e28
- adds r0, r2
- str r0, [r1]
- ldrb r0, [r0, 0x1]
- cmp r0, 0
- beq _08121448
- movs r0, 0x1
- b _0812144A
- .pool
-_08121448:
- movs r0, 0
-_0812144A:
- pop {r1}
- bx r1
- thumb_func_end sub_8121424
-
- thumb_func_start sub_8121450
-sub_8121450: @ 8121450
- push {lr}
- ldr r1, =gUnknown_0203A12C
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r2, =0x00002e28
- adds r0, r2
- str r0, [r1]
- bl sub_81210B8
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_8121450
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/menu_helpers.s b/asm/menu_helpers.s
deleted file mode 100644
index 90e846b97..000000000
--- a/asm/menu_helpers.s
+++ /dev/null
@@ -1,986 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start ResetVramOamAndBgCntRegs
-ResetVramOamAndBgCntRegs: @ 8121DA0
- push {r4,lr}
- sub sp, 0xC
- movs r0, 0
- movs r1, 0
- bl SetGpuReg
- movs r0, 0xE
- movs r1, 0
- bl SetGpuReg
- movs r0, 0xC
- movs r1, 0
- bl SetGpuReg
- movs r0, 0xA
- movs r1, 0
- bl SetGpuReg
- movs r0, 0x8
- movs r1, 0
- bl SetGpuReg
- mov r1, sp
- movs r0, 0
- strh r0, [r1]
- movs r1, 0xC0
- lsls r1, 19
- ldr r2, =0x0100c000
- mov r0, sp
- bl CpuSet
- movs r4, 0
- str r4, [sp, 0x4]
- add r0, sp, 0x4
- movs r1, 0xE0
- lsls r1, 19
- ldr r2, =0x05000100
- bl CpuSet
- add r0, sp, 0x8
- strh r4, [r0]
- movs r1, 0xA0
- lsls r1, 19
- ldr r2, =0x01000200
- bl CpuSet
- add sp, 0xC
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end ResetVramOamAndBgCntRegs
-
- thumb_func_start ResetAllBgsCoordinates
-ResetAllBgsCoordinates: @ 8121E10
- push {lr}
- movs r0, 0
- movs r1, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- movs r0, 0x1
- movs r1, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0x1
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- movs r0, 0x2
- movs r1, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0x2
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- movs r0, 0x3
- movs r1, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0x3
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- pop {r0}
- bx r0
- thumb_func_end ResetAllBgsCoordinates
-
- thumb_func_start SetVBlankHBlankCallbacksToNull
-@ void SetVBlankHBlankCallbacksToNull()
-SetVBlankHBlankCallbacksToNull: @ 8121E68
- push {lr}
- movs r0, 0
- bl SetVBlankCallback
- movs r0, 0
- bl SetHBlankCallback
- pop {r0}
- bx r0
- thumb_func_end SetVBlankHBlankCallbacksToNull
-
- thumb_func_start DisplayMessageAndContinueTask
-@ void DisplayMessageAndContinueTask(u8 taskId, u8 windowId, u16 windowBorderFirstTileNum, u8 windowBorderPalette, u8 fontId, u8 speed, u8 *str, void ( *callback)(u8 taskId))
-DisplayMessageAndContinueTask: @ 8121E7C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x10
- ldr r4, [sp, 0x28]
- ldr r5, [sp, 0x2C]
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- lsls r1, 24
- lsrs r1, 24
- adds r6, r1, 0
- lsls r2, 16
- lsrs r2, 16
- lsls r3, 24
- lsrs r3, 24
- lsls r4, 24
- lsrs r7, r4, 24
- lsls r5, 24
- lsrs r5, 24
- ldr r0, =gUnknown_0203A140
- strb r6, [r0]
- adds r0, r6, 0
- movs r1, 0x1
- bl sub_8197B1C
- ldr r4, =gStringVar4
- ldr r0, [sp, 0x30]
- cmp r0, r4
- beq _08121EC0
- adds r0, r4, 0
- ldr r1, [sp, 0x30]
- bl StringExpandPlaceholders
-_08121EC0:
- ldr r2, =gTextFlags
- ldrb r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2]
- movs r0, 0
- str r0, [sp]
- movs r0, 0x2
- str r0, [sp, 0x4]
- movs r0, 0x1
- str r0, [sp, 0x8]
- movs r0, 0x3
- str r0, [sp, 0xC]
- adds r0, r6, 0
- adds r1, r7, 0
- adds r2, r4, 0
- adds r3, r5, 0
- bl AddTextPrinterParameterized
- ldr r1, =gUnknown_0300117C
- ldr r0, [sp, 0x34]
- str r0, [r1]
- ldr r1, =gTasks
- mov r2, r8
- lsls r0, r2, 2
- add r0, r8
- lsls r0, 3
- adds r0, r1
- ldr r1, =Task_ContinueTaskAfterMessagePrints
- str r1, [r0]
- add sp, 0x10
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end DisplayMessageAndContinueTask
-
- thumb_func_start RunTextPrintersRetIsActive
-RunTextPrintersRetIsActive: @ 8121F20
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl RunTextPrinters
- adds r0, r4, 0
- bl IsTextPrinterActive
- lsls r0, 16
- lsrs r0, 16
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end RunTextPrintersRetIsActive
-
- thumb_func_start Task_ContinueTaskAfterMessagePrints
-@ void Task_ContinueTaskAfterMessagePrints(u8 taskId)
-Task_ContinueTaskAfterMessagePrints: @ 8121F3C
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, =gUnknown_0203A140
- ldrb r0, [r0]
- bl RunTextPrintersRetIsActive
- lsls r0, 16
- cmp r0, 0
- bne _08121F5A
- ldr r0, =gUnknown_0300117C
- ldr r1, [r0]
- adds r0, r4, 0
- bl _call_via_r1
-_08121F5A:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end Task_ContinueTaskAfterMessagePrints
-
- thumb_func_start sub_8121F68
-sub_8121F68: @ 8121F68
- lsls r0, 24
- lsrs r0, 24
- ldr r3, =gUnknown_0203A138
- ldr r2, [r1, 0x4]
- ldr r1, [r1]
- str r1, [r3]
- str r2, [r3, 0x4]
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- ldr r0, =Task_CallYesOrNoCallback
- str r0, [r1]
- bx lr
- .pool
- thumb_func_end sub_8121F68
-
- thumb_func_start CreateYesNoMenuWithCallbacks
-@ void CreateYesNoMenuWithCallbacks(u8 taskId, struct WindowTemplate *windowTemplate, int a3, int a4, int a5, u16 borderFirstTileNum, u8 borderPalette, void ( **callbacks)(u8 taskId))
-CreateYesNoMenuWithCallbacks: @ 8121F94
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r0, r1, 0
- ldr r1, [sp, 0x10]
- ldr r2, [sp, 0x14]
- ldr r5, [sp, 0x18]
- lsls r4, 24
- lsrs r4, 24
- lsls r1, 16
- lsrs r1, 16
- lsls r2, 24
- lsrs r2, 24
- movs r3, 0
- bl CreateYesNoMenu
- ldr r2, =gUnknown_0203A138
- ldr r0, [r5]
- ldr r1, [r5, 0x4]
- str r0, [r2]
- str r1, [r2, 0x4]
- ldr r1, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, =Task_CallYesOrNoCallback
- str r1, [r0]
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end CreateYesNoMenuWithCallbacks
-
- thumb_func_start Task_CallYesOrNoCallback
-@ void Task_CallYesOrNoCallback(u8 taskId)
-Task_CallYesOrNoCallback: @ 8121FDC
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl ProcessMenuInputNoWrap_
- lsls r0, 24
- asrs r1, r0, 24
- cmp r1, 0
- beq _08122002
- cmp r1, 0
- bgt _08121FFC
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _08122018
- b _08122028
-_08121FFC:
- cmp r1, 0x1
- beq _08122018
- b _08122028
-_08122002:
- movs r0, 0x5
- bl PlaySE
- ldr r0, =gUnknown_0203A138
- ldr r1, [r0]
- adds r0, r4, 0
- bl _call_via_r1
- b _08122028
- .pool
-_08122018:
- movs r0, 0x5
- bl PlaySE
- ldr r0, =gUnknown_0203A138
- ldr r1, [r0, 0x4]
- adds r0, r4, 0
- bl _call_via_r1
-_08122028:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end Task_CallYesOrNoCallback
-
- thumb_func_start AdjustQuantityAccordingToDPadInput
-@ bool8 AdjustQuantityAccordingToDPadInput(u16 *quantity, u16 maxQuantity)
-AdjustQuantityAccordingToDPadInput: @ 8122034
- push {r4-r6,lr}
- adds r2, r0, 0
- lsls r1, 16
- lsrs r1, 16
- adds r5, r1, 0
- ldrh r4, [r2]
- adds r6, r4, 0
- ldr r0, =gMain
- ldrh r0, [r0, 0x30]
- movs r3, 0xF0
- ands r3, r0
- cmp r3, 0x40
- bne _0812206C
- adds r0, r4, 0x1
- strh r0, [r2]
- movs r3, 0
- ldrsh r0, [r2, r3]
- cmp r0, r1
- ble _0812205E
- movs r0, 0x1
- strh r0, [r2]
-_0812205E:
- movs r0, 0
- ldrsh r1, [r2, r0]
-_08122062:
- lsls r0, r4, 16
- b _081220B6
- .pool
-_0812206C:
- cmp r3, 0x80
- bne _08122082
- subs r0, r4, 0x1
- strh r0, [r2]
- lsls r0, 16
- cmp r0, 0
- bgt _0812207C
- strh r1, [r2]
-_0812207C:
- movs r3, 0
- ldrsh r1, [r2, r3]
- b _08122062
-_08122082:
- cmp r3, 0x10
- bne _0812209C
- adds r0, r4, 0
- adds r0, 0xA
- strh r0, [r2]
- movs r1, 0
- ldrsh r0, [r2, r1]
- cmp r0, r5
- ble _08122096
- strh r5, [r2]
-_08122096:
- movs r3, 0
- ldrsh r1, [r2, r3]
- b _08122062
-_0812209C:
- cmp r3, 0x20
- bne _081220C6
- adds r0, r4, 0
- subs r0, 0xA
- strh r0, [r2]
- lsls r0, 16
- cmp r0, 0
- bgt _081220B0
- movs r0, 0x1
- strh r0, [r2]
-_081220B0:
- movs r0, 0
- ldrsh r1, [r2, r0]
- lsls r0, r6, 16
-_081220B6:
- asrs r0, 16
- cmp r1, r0
- beq _081220C6
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x1
- b _081220C8
-_081220C6:
- movs r0, 0
-_081220C8:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end AdjustQuantityAccordingToDPadInput
-
- thumb_func_start GetLRKeysState
-GetLRKeysState: @ 81220D0
- push {lr}
- ldr r0, =gSaveBlock2Ptr
- ldr r0, [r0]
- ldrb r0, [r0, 0x13]
- cmp r0, 0x1
- bne _08122106
- ldr r0, =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x80
- lsls r0, 2
- ands r0, r1
- cmp r0, 0
- beq _081220F8
- movs r0, 0x1
- b _08122108
- .pool
-_081220F8:
- movs r0, 0x80
- lsls r0, 1
- ands r0, r1
- cmp r0, 0
- beq _08122106
- movs r0, 0x2
- b _08122108
-_08122106:
- movs r0, 0
-_08122108:
- pop {r1}
- bx r1
- thumb_func_end GetLRKeysState
-
- thumb_func_start sub_812210C
-sub_812210C: @ 812210C
- push {lr}
- ldr r0, =gSaveBlock2Ptr
- ldr r0, [r0]
- ldrb r0, [r0, 0x13]
- cmp r0, 0x1
- bne _08122142
- ldr r0, =gMain
- ldrh r1, [r0, 0x30]
- movs r0, 0x80
- lsls r0, 2
- ands r0, r1
- cmp r0, 0
- beq _08122134
- movs r0, 0x1
- b _08122144
- .pool
-_08122134:
- movs r0, 0x80
- lsls r0, 1
- ands r0, r1
- cmp r0, 0
- beq _08122142
- movs r0, 0x2
- b _08122144
-_08122142:
- movs r0, 0
-_08122144:
- pop {r1}
- bx r1
- thumb_func_end sub_812210C
-
- thumb_func_start sub_8122148
-sub_8122148: @ 8122148
- push {lr}
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0xAF
- bne _08122174
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldrh r1, [r0, 0x4]
- ldr r0, =0x00001919
- cmp r1, r0
- beq _08122166
- bl InUnionRoom
- cmp r0, 0x1
- bne _08122174
-_08122166:
- movs r0, 0
- b _08122176
- .pool
-_08122174:
- movs r0, 0x1
-_08122176:
- pop {r1}
- bx r1
- thumb_func_end sub_8122148
-
- thumb_func_start itemid_80BF6D8_mail_related
-itemid_80BF6D8_mail_related: @ 812217C
- push {r4,lr}
- lsls r0, 16
- lsrs r4, r0, 16
- bl is_c1_link_related_active
- cmp r0, 0x1
- beq _08122192
- bl InUnionRoom
- cmp r0, 0x1
- bne _081221A4
-_08122192:
- adds r0, r4, 0
- bl ItemIsMail
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _081221A4
- movs r0, 0
- b _081221A6
-_081221A4:
- movs r0, 0x1
-_081221A6:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end itemid_80BF6D8_mail_related
-
- thumb_func_start sub_81221AC
-sub_81221AC: @ 81221AC
- push {lr}
- bl is_c1_link_related_active
- cmp r0, 0x1
- beq _081221BE
- ldr r0, =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _081221C8
-_081221BE:
- movs r0, 0x1
- b _081221CA
- .pool
-_081221C8:
- movs r0, 0
-_081221CA:
- pop {r1}
- bx r1
- thumb_func_end sub_81221AC
-
- thumb_func_start sub_81221D0
-sub_81221D0: @ 81221D0
- push {lr}
- bl sub_81221AC
- lsls r0, 24
- cmp r0, 0
- beq _081221E6
- bl sub_8087598
- lsls r0, 24
- lsrs r0, 24
- b _081221E8
-_081221E6:
- movs r0, 0
-_081221E8:
- pop {r1}
- bx r1
- thumb_func_end sub_81221D0
-
- thumb_func_start sub_81221EC
-sub_81221EC: @ 81221EC
- push {lr}
- bl sub_81221D0
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08122202
- bl sub_800B504
- cmp r0, 0x1
- bne _08122206
-_08122202:
- movs r0, 0x1
- b _08122208
-_08122206:
- movs r0, 0
-_08122208:
- pop {r1}
- bx r1
- thumb_func_end sub_81221EC
-
- thumb_func_start sub_812220C
-sub_812220C: @ 812220C
- push {r4-r6,lr}
- adds r6, r2, 0
- ldr r2, [sp, 0x10]
- lsls r1, 24
- lsls r2, 24
- lsrs r5, r2, 24
- adds r4, r0, 0
- movs r0, 0
- strb r0, [r3]
- movs r2, 0
- lsrs r1, 24
- cmp r2, r1
- bcs _08122240
-_08122226:
- lsls r0, r2, 2
- adds r0, r4
- ldrh r0, [r0]
- cmp r0, 0
- beq _08122236
- ldrb r0, [r3]
- adds r0, 0x1
- strb r0, [r3]
-_08122236:
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- cmp r2, r1
- bcc _08122226
-_08122240:
- ldrb r0, [r3]
- adds r1, r0, 0x1
- strb r1, [r3]
- lsls r0, r1, 24
- lsrs r0, 24
- cmp r0, r5
- bls _08122252
- strb r5, [r6]
- b _08122254
-_08122252:
- strb r1, [r6]
-_08122254:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_812220C
-
- thumb_func_start sub_812225C
-sub_812225C: @ 812225C
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- lsls r2, 24
- lsrs r2, 24
- lsls r3, 24
- lsrs r3, 24
- ldrh r0, [r4]
- cmp r0, 0
- beq _0812227A
- adds r0, r2
- cmp r0, r3
- ble _0812227A
- subs r0, r3, r2
- strh r0, [r4]
-_0812227A:
- ldrh r0, [r4]
- ldrh r1, [r5]
- adds r0, r1
- cmp r0, r3
- blt _08122290
- cmp r3, 0
- bne _0812228C
- strh r3, [r5]
- b _08122290
-_0812228C:
- subs r0, r3, 0x1
- strh r0, [r5]
-_08122290:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_812225C
-
- thumb_func_start sub_8122298
-sub_8122298: @ 8122298
- push {r4-r7,lr}
- adds r5, r0, 0
- adds r4, r1, 0
- ldr r0, [sp, 0x14]
- lsls r2, 24
- lsrs r7, r2, 24
- lsls r3, 24
- lsrs r6, r3, 24
- lsls r2, r0, 24
- lsrs r0, r2, 24
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _081222F0
- lsrs r2, 25
- ldrh r0, [r4]
- cmp r0, r2
- bcc _08122322
- movs r1, 0
- subs r0, r2
- cmp r1, r0
- bge _08122322
- ldrh r0, [r5]
- adds r0, r7
- cmp r0, r6
- beq _08122322
-_081222CC:
- ldrh r0, [r4]
- subs r0, 0x1
- strh r0, [r4]
- ldrh r0, [r5]
- adds r0, 0x1
- strh r0, [r5]
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r1, r0, 24
- ldrh r0, [r4]
- subs r0, r2
- cmp r1, r0
- bge _08122322
- ldrh r0, [r5]
- adds r0, r7
- cmp r0, r6
- bne _081222CC
- b _08122322
-_081222F0:
- ldrh r3, [r4]
- lsrs r2, 25
- adds r0, r2, 0x1
- cmp r3, r0
- blt _08122322
- movs r1, 0
- subs r0, r3, r2
- b _08122316
-_08122300:
- ldrh r0, [r4]
- subs r0, 0x1
- strh r0, [r4]
- ldrh r0, [r5]
- adds r0, 0x1
- strh r0, [r5]
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r1, r0, 24
- ldrh r0, [r4]
- subs r0, r2
-_08122316:
- cmp r1, r0
- bgt _08122322
- ldrh r0, [r5]
- adds r0, r7
- cmp r0, r6
- bne _08122300
-_08122322:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8122298
-
- thumb_func_start LoadListMenuArrowsGfx
-LoadListMenuArrowsGfx: @ 8122328
- push {lr}
- ldr r0, =gUnknown_0859F514
- bl LoadCompressedObjectPic
- ldr r0, =gUnknown_0859F51C
- bl LoadCompressedObjectPalette
- pop {r0}
- bx r0
- .pool
- thumb_func_end LoadListMenuArrowsGfx
-
- thumb_func_start sub_8122344
-sub_8122344: @ 8122344
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- mov r8, r0
- lsls r1, 24
- lsrs r6, r1, 24
- movs r5, 0
- cmp r5, r6
- bcs _0812239C
- ldr r7, =gSprites
-_08122358:
- lsls r1, r5, 4
- ldr r0, =gUnknown_0859F524
- movs r2, 0
- movs r3, 0
- bl CreateSprite
- mov r1, r8
- adds r4, r1, r5
- strb r0, [r4]
- cmp r5, 0
- beq _0812237E
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r7
- movs r1, 0x1
- bl StartSpriteAnim
-_0812237E:
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r7
- adds r0, 0x3E
- ldrb r1, [r0]
- movs r2, 0x4
- orrs r1, r2
- strb r1, [r0]
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, r6
- bcc _08122358
-_0812239C:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8122344
-
- thumb_func_start sub_81223B0
-sub_81223B0: @ 81223B0
- push {r4-r7,lr}
- adds r6, r0, 0
- lsls r1, 24
- lsrs r5, r1, 24
- movs r4, 0
- cmp r4, r5
- bcs _081223F6
- ldr r7, =gSprites
-_081223C0:
- subs r0, r5, 0x1
- cmp r4, r0
- bne _081223DC
- adds r0, r6, r4
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r7
- bl DestroySpriteAndFreeResources
- b _081223EC
- .pool
-_081223DC:
- adds r0, r6, r4
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r7
- bl DestroySprite
-_081223EC:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, r5
- bcc _081223C0
-_081223F6:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_81223B0
-
- thumb_func_start sub_81223FC
-sub_81223FC: @ 81223FC
- push {r4-r7,lr}
- adds r6, r0, 0
- lsls r1, 24
- lsrs r4, r1, 24
- lsls r2, 24
- lsrs r0, r2, 24
- movs r3, 0
- cmp r3, r4
- bcs _0812243E
- ldr r1, =gSprites
- mov r12, r1
- movs r1, 0x1
- ands r0, r1
- lsls r5, r0, 2
- movs r7, 0x5
- negs r7, r7
-_0812241C:
- adds r0, r6, r3
- ldrb r0, [r0]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- add r1, r12
- adds r1, 0x3E
- ldrb r2, [r1]
- adds r0, r7, 0
- ands r0, r2
- orrs r0, r5
- strb r0, [r1]
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, r4
- bcc _0812241C
-_0812243E:
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81223FC
-
- thumb_func_start sub_8122448
-@ void sub_8122448(int a1, u8 a2, u16 x, u16 y)
-sub_8122448: @ 8122448
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- adds r6, r0, 0
- lsls r1, 24
- lsrs r4, r1, 24
- lsls r2, 16
- lsrs r7, r2, 16
- lsls r3, 16
- lsrs r3, 16
- mov r9, r3
- movs r0, 0x80
- ands r0, r4
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- movs r0, 0x7F
- ands r4, r0
- movs r3, 0
- cmp r3, r4
- bcs _081224C8
- ldr r5, =gSprites
- lsls r0, r7, 16
- asrs r0, 16
- subs r0, 0x8
- mov r12, r0
-_0812247E:
- subs r0, r4, 0x1
- cmp r3, r0
- bne _081224A0
- mov r0, r8
- cmp r0, 0
- beq _081224A0
- adds r2, r6, r3
- ldrb r1, [r2]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- mov r1, r12
- strh r1, [r0, 0x24]
- b _081224AE
- .pool
-_081224A0:
- adds r2, r6, r3
- ldrb r1, [r2]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- strh r7, [r0, 0x24]
-_081224AE:
- ldrb r1, [r2]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- mov r1, r9
- adds r1, 0x1
- strh r1, [r0, 0x22]
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, r4
- bcc _0812247E
-_081224C8:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8122448
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/mon_markings.s b/asm/mon_markings.s
deleted file mode 100644
index dfc375fdf..000000000
--- a/asm/mon_markings.s
+++ /dev/null
@@ -1,946 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_811F90C
-sub_811F90C: @ 811F90C
- ldr r1, =gUnknown_0203A124
- str r0, [r1]
- bx lr
- .pool
- thumb_func_end sub_811F90C
-
- thumb_func_start sub_811F918
-sub_811F918: @ 811F918
- push {lr}
- sub sp, 0x4
- ldr r0, =gSaveBlock2Ptr
- ldr r0, [r0]
- ldrb r0, [r0, 0x14]
- lsrs r0, 3
- bl GetWindowFrameTilesPal
- ldr r3, =gUnknown_0203A124
- ldr r2, [r3]
- ldr r1, [r0]
- str r1, [r2, 0x2C]
- ldr r0, [r0, 0x4]
- str r0, [r2, 0x30]
- ldr r0, =0x000010b4
- adds r2, r0
- movs r1, 0
- strb r1, [r2]
- mov r0, sp
- strh r1, [r0]
- ldr r1, [r3]
- adds r1, 0x34
- ldr r2, =0x01000800
- bl CpuSet
- add sp, 0x4
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_811F918
-
- thumb_func_start sub_811F960
-sub_811F960: @ 811F960
- push {r4-r7,lr}
- ldr r0, =gUnknown_0203A124
- ldr r1, [r0]
- ldr r2, =0x000010b4
- adds r0, r1, r2
- ldrb r2, [r0]
- lsls r0, r2, 8
- adds r0, 0x34
- adds r5, r1, r0
- cmp r2, 0xD
- beq _0811FA30
- cmp r2, 0xD
- bgt _0811F988
- cmp r2, 0
- beq _0811F98E
- b _0811F9D8
- .pool
-_0811F988:
- cmp r2, 0xE
- beq _0811FA7C
- b _0811F9D8
-_0811F98E:
- ldr r0, [r1, 0x2C]
- adds r1, r5, 0
- movs r2, 0x8
- bl CpuFastSet
- movs r4, 0
- adds r7, r5, 0
- adds r7, 0xE0
-_0811F99E:
- ldr r6, =gUnknown_0203A124
- ldr r0, [r6]
- ldr r0, [r0, 0x2C]
- adds r0, 0x20
- adds r4, 0x1
- lsls r1, r4, 5
- adds r1, r5, r1
- movs r2, 0x8
- bl CpuFastSet
- lsls r4, 16
- lsrs r4, 16
- cmp r4, 0x5
- bls _0811F99E
- ldr r0, [r6]
- ldr r0, [r0, 0x2C]
- adds r0, 0x40
- adds r1, r7, 0
- movs r2, 0x8
- bl CpuFastSet
- ldr r1, [r6]
- ldr r0, =0x000010b4
- adds r1, r0
- b _0811FA1E
- .pool
-_0811F9D8:
- ldr r0, =gUnknown_0203A124
- ldr r0, [r0]
- ldr r0, [r0, 0x2C]
- adds r0, 0x60
- adds r1, r5, 0
- movs r2, 0x8
- bl CpuFastSet
- movs r4, 0
- adds r7, r5, 0
- adds r7, 0xE0
-_0811F9EE:
- ldr r6, =gUnknown_0203A124
- ldr r0, [r6]
- ldr r0, [r0, 0x2C]
- adds r0, 0x80
- adds r4, 0x1
- lsls r1, r4, 5
- adds r1, r5, r1
- movs r2, 0x8
- bl CpuFastSet
- lsls r4, 16
- lsrs r4, 16
- cmp r4, 0x5
- bls _0811F9EE
- ldr r0, [r6]
- ldr r0, [r0, 0x2C]
- adds r0, 0xA0
- adds r1, r7, 0
- movs r2, 0x8
- bl CpuFastSet
- ldr r1, [r6]
- ldr r2, =0x000010b4
- adds r1, r2
-_0811FA1E:
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _0811FA88
- .pool
-_0811FA30:
- ldr r0, [r1, 0x2C]
- adds r0, 0xC0
- adds r1, r5, 0
- movs r2, 0x8
- bl CpuFastSet
- movs r4, 0
- adds r7, r5, 0
- adds r7, 0xE0
-_0811FA42:
- ldr r6, =gUnknown_0203A124
- ldr r0, [r6]
- ldr r0, [r0, 0x2C]
- adds r0, 0xE0
- adds r4, 0x1
- lsls r1, r4, 5
- adds r1, r5, r1
- movs r2, 0x8
- bl CpuFastSet
- lsls r4, 16
- lsrs r4, 16
- cmp r4, 0x5
- bls _0811FA42
- ldr r0, [r6]
- ldr r0, [r0, 0x2C]
- movs r1, 0x80
- lsls r1, 1
- adds r0, r1
- adds r1, r7, 0
- movs r2, 0x8
- bl CpuFastSet
- ldr r1, [r6]
- ldr r2, =0x000010b4
- adds r1, r2
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
-_0811FA7C:
- movs r0, 0
- b _0811FA8A
- .pool
-_0811FA88:
- movs r0, 0x1
-_0811FA8A:
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_811F960
-
- thumb_func_start sub_811FA90
-sub_811FA90: @ 811FA90
- push {lr}
- bl sub_811F918
-_0811FA96:
- bl sub_811F960
- lsls r0, 24
- cmp r0, 0
- bne _0811FA96
- pop {r0}
- bx r0
- thumb_func_end sub_811FA90
-
- thumb_func_start sub_811FAA4
-sub_811FAA4: @ 811FAA4
- push {r4-r7,lr}
- lsls r1, 16
- lsrs r5, r1, 16
- lsls r2, 16
- lsrs r6, r2, 16
- ldr r2, =gUnknown_0203A124
- ldr r3, [r2]
- movs r1, 0
- strb r1, [r3, 0x5]
- ldr r1, [r2]
- strb r0, [r1, 0x4]
- movs r3, 0
- adds r7, r2, 0
- adds r4, r7, 0
- movs r2, 0x1
-_0811FAC2:
- ldr r0, [r4]
- adds r1, r0, 0x6
- adds r1, r3
- ldrb r0, [r0, 0x4]
- asrs r0, r3
- ands r0, r2
- strb r0, [r1]
- adds r0, r3, 0x1
- lsls r0, 16
- lsrs r3, r0, 16
- cmp r3, 0x3
- bls _0811FAC2
- lsls r0, r5, 16
- asrs r0, 16
- lsls r1, r6, 16
- asrs r1, 16
- ldr r3, [r7]
- ldrh r2, [r3]
- ldrh r3, [r3, 0x2]
- bl sub_811FC80
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_811FAA4
-
- thumb_func_start sub_811FAF8
-sub_811FAF8: @ 811FAF8
- push {r4-r7,lr}
- movs r5, 0
- ldr r4, =gUnknown_0203A124
-_0811FAFE:
- ldr r0, [r4]
- ldrh r0, [r0]
- adds r0, r5, r0
- lsls r0, 16
- lsrs r0, 16
- bl FreeSpriteTilesByTag
- ldr r0, [r4]
- ldrh r0, [r0, 0x2]
- adds r0, r5, r0
- lsls r0, 16
- lsrs r0, 16
- bl FreeSpritePaletteByTag
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, 0x1
- bls _0811FAFE
- movs r5, 0
- ldr r6, =gUnknown_0203A124
-_0811FB28:
- ldr r0, [r6]
- lsls r4, r5, 2
- adds r0, 0xC
- adds r0, r4
- ldr r0, [r0]
- cmp r0, 0
- beq _0811FB9A
- bl DestroySprite
- ldr r0, [r6]
- adds r0, 0xC
- adds r0, r4
- movs r1, 0
- str r1, [r0]
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, 0x1
- bls _0811FB28
- movs r5, 0
- ldr r6, =gUnknown_0203A124
-_0811FB52:
- ldr r0, [r6]
- lsls r4, r5, 2
- adds r0, 0x14
- adds r0, r4
- ldr r0, [r0]
- cmp r0, 0
- beq _0811FB9A
- bl DestroySprite
- ldr r0, [r6]
- adds r0, 0x14
- adds r0, r4
- movs r7, 0
- str r7, [r0]
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, 0x3
- bls _0811FB52
- ldr r4, =gUnknown_0203A124
- ldr r0, [r4]
- ldr r0, [r0, 0x24]
- cmp r0, 0
- beq _0811FB8A
- bl DestroySprite
- ldr r0, [r4]
- str r7, [r0, 0x24]
-_0811FB8A:
- ldr r0, [r4]
- ldr r0, [r0, 0x28]
- cmp r0, 0
- beq _0811FB9A
- bl DestroySprite
- ldr r0, [r4]
- str r7, [r0, 0x28]
-_0811FB9A:
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_811FAF8
-
- thumb_func_start sub_811FBA4
-sub_811FBA4: @ 811FBA4
- push {r4,r5,lr}
- ldr r0, =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x40
- ands r0, r1
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, 0
- beq _0811FBDC
- movs r0, 0x5
- bl PlaySE
- ldr r2, =gUnknown_0203A124
- ldr r1, [r2]
- ldrb r0, [r1, 0x5]
- subs r0, 0x1
- strb r0, [r1, 0x5]
- lsls r0, 24
- cmp r0, 0
- bge _0811FC64
- ldr r1, [r2]
- movs r0, 0x5
- strb r0, [r1, 0x5]
- b _0811FC64
- .pool
-_0811FBDC:
- movs r0, 0x80
- ands r0, r1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0
- beq _0811FC0C
- movs r0, 0x5
- bl PlaySE
- ldr r2, =gUnknown_0203A124
- ldr r1, [r2]
- ldrb r0, [r1, 0x5]
- adds r0, 0x1
- strb r0, [r1, 0x5]
- lsls r0, 24
- asrs r0, 24
- cmp r0, 0x5
- ble _0811FC64
- ldr r0, [r2]
- strb r5, [r0, 0x5]
- b _0811FC64
- .pool
-_0811FC0C:
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0811FC68
- movs r0, 0x5
- bl PlaySE
- ldr r2, =gUnknown_0203A124
- ldr r0, [r2]
- movs r1, 0x5
- ldrsb r1, [r0, r1]
- cmp r1, 0x4
- beq _0811FC40
- cmp r1, 0x5
- beq _0811FC76
- adds r0, 0x6
- adds r1, r0, r1
- movs r2, 0
- ldrb r0, [r1]
- cmp r0, 0
- bne _0811FC62
- movs r2, 0x1
- b _0811FC62
- .pool
-_0811FC40:
- strb r4, [r0, 0x4]
- movs r3, 0
- adds r4, r2, 0
-_0811FC46:
- ldr r2, [r4]
- adds r0, r2, 0x6
- adds r0, r3
- ldrb r0, [r0]
- lsls r0, r3
- ldrb r1, [r2, 0x4]
- orrs r0, r1
- strb r0, [r2, 0x4]
- adds r0, r3, 0x1
- lsls r0, 16
- lsrs r3, r0, 16
- cmp r3, 0x3
- bls _0811FC46
- b _0811FC76
-_0811FC62:
- strb r2, [r1]
-_0811FC64:
- movs r0, 0x1
- b _0811FC78
-_0811FC68:
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0811FC64
- movs r0, 0x5
- bl PlaySE
-_0811FC76:
- movs r0, 0
-_0811FC78:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_811FBA4
-
- thumb_func_start sub_811FC80
-sub_811FC80: @ 811FC80
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x50
- mov r8, r0
- mov r9, r1
- adds r5, r2, 0
- adds r6, r3, 0
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- lsls r1, 16
- lsrs r1, 16
- mov r9, r1
- lsls r5, 16
- lsrs r5, 16
- lsls r6, 16
- lsrs r6, 16
- ldr r4, =gUnknown_0203A124
- ldr r0, [r4]
- adds r0, 0x34
- str r0, [sp, 0x18]
- add r1, sp, 0x1C
- movs r7, 0
- movs r0, 0x80
- lsls r0, 5
- strh r0, [r1]
- mov r0, sp
- adds r0, 0x1E
- strh r5, [r0]
- add r1, sp, 0x20
- ldr r0, =gPokenavConditionMarker_Gfx
- str r0, [sp, 0x20]
- movs r0, 0xC8
- lsls r0, 2
- strh r0, [r1, 0x4]
- adds r0, r5, 0x1
- strh r0, [r1, 0x6]
- add r0, sp, 0x28
- movs r1, 0
- movs r2, 0x8
- bl memset
- add r2, sp, 0x18
- mov r10, r2
- mov r0, sp
- mov r1, r10
- movs r2, 0x18
- bl memcpy
- ldr r0, [r4]
- ldr r0, [r0, 0x30]
- str r0, [sp, 0x30]
- add r0, sp, 0x34
- strh r6, [r0]
- add r1, sp, 0x38
- ldr r0, =gPokenavConditionMarker_Pal
- str r0, [sp, 0x38]
- adds r0, r6, 0x1
- strh r0, [r1, 0x4]
- add r0, sp, 0x40
- movs r1, 0
- movs r2, 0x8
- bl memset
- add r4, sp, 0x30
- mov r0, r10
- adds r1, r4, 0
- movs r2, 0x18
- bl memcpy
- strh r5, [r4]
- strh r6, [r4, 0x2]
- ldr r0, =gUnknown_0859EE7C
- str r0, [r4, 0x4]
- ldr r0, =gUnknown_0859EF14
- str r0, [r4, 0x8]
- str r7, [r4, 0xC]
- ldr r0, =gDummySpriteAffineAnimTable
- str r0, [r4, 0x10]
- ldr r0, =TaskDummy7
- str r0, [r4, 0x14]
- mov r0, sp
- bl LoadSpriteSheets
- mov r0, r10
- bl LoadSpritePalettes
- movs r5, 0
- mov r3, r8
- lsls r3, 16
- mov r8, r3
- movs r0, 0x80
- lsls r0, 14
- add r0, r8
- mov r10, r0
- mov r1, r8
- str r1, [sp, 0x48]
- mov r2, r9
- lsls r2, 16
- mov r9, r2
- movs r7, 0x80
- lsls r7, 14
- add r7, r9
- mov r3, r9
- str r3, [sp, 0x4C]
-_0811FD58:
- adds r0, r4, 0
- mov r2, r10
- asrs r1, r2, 16
- asrs r2, r7, 16
- movs r3, 0x1
- bl CreateSprite
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0x40
- bne _0811FD70
- b _0811FEFC
-_0811FD70:
- ldr r6, =gUnknown_0203A124
- ldr r2, [r6]
- lsls r0, r5, 2
- adds r2, 0xC
- adds r2, r0
- lsls r0, r3, 4
- adds r0, r3
- lsls r0, 2
- ldr r1, =gSprites
- adds r0, r1
- str r0, [r2]
- lsls r1, r5, 24
- lsrs r1, 24
- bl StartSpriteAnim
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, 0x1
- bls _0811FD58
- ldr r0, [r6]
- ldr r1, [r0, 0x10]
- ldr r3, [sp, 0x4C]
- asrs r0, r3, 16
- adds r0, 0x60
- strh r0, [r1, 0x22]
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
- ldrh r0, [r4, 0x2]
- adds r0, 0x1
- strh r0, [r4, 0x2]
- ldr r0, =gUnknown_0859EEDC
- str r0, [r4, 0x8]
- ldr r0, =sub_811FF40
- str r0, [r4, 0x14]
- ldr r0, =gUnknown_0859EE84
- str r0, [r4, 0x4]
- movs r5, 0
- ldr r0, [sp, 0x48]
- movs r1, 0x80
- lsls r1, 14
- adds r0, r1
- mov r9, r0
-_0811FDC8:
- lsls r2, r5, 4
- adds r2, 0x10
- ldr r3, [sp, 0x4C]
- asrs r3, 16
- mov r8, r3
- add r2, r8
- lsls r2, 16
- asrs r2, 16
- adds r0, r4, 0
- mov r3, r9
- asrs r1, r3, 16
- movs r3, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0x40
- bne _0811FDEE
- b _0811FF0C
-_0811FDEE:
- ldr r6, =gUnknown_0203A124
- ldr r1, [r6]
- lsls r0, r5, 2
- adds r1, 0x14
- adds r1, r0
- lsls r0, r3, 4
- adds r0, r3
- lsls r0, 2
- ldr r7, =gSprites
- adds r0, r7
- str r0, [r1]
- strh r5, [r0, 0x2E]
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, 0x3
- bls _0811FDC8
- ldr r0, =SpriteCallbackDummy
- str r0, [r4, 0x14]
- adds r0, r4, 0
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0x40
- beq _0811FEA8
- ldr r0, [r6]
- lsls r1, r3, 4
- adds r1, r3
- lsls r1, 2
- adds r1, r7
- str r1, [r0, 0x28]
- ldrb r3, [r1, 0x1]
- movs r2, 0x3F
- adds r0, r2, 0
- ands r0, r3
- strb r0, [r1, 0x1]
- ldr r0, [r6]
- ldr r1, [r0, 0x28]
- ldrb r0, [r1, 0x3]
- ands r2, r0
- movs r0, 0x80
- orrs r2, r0
- strb r2, [r1, 0x3]
- ldr r0, [r6]
- ldr r0, [r0, 0x28]
- movs r1, 0x9
- bl StartSpriteAnim
- ldr r1, [r6]
- ldr r2, [r1, 0x28]
- ldr r3, [sp, 0x48]
- asrs r0, r3, 16
- adds r0, 0x20
- strh r0, [r2, 0x20]
- ldr r2, [r1, 0x28]
- mov r0, r8
- adds r0, 0x50
- strh r0, [r2, 0x22]
- ldr r0, [r1, 0x28]
- movs r1, 0x1
- movs r2, 0x2
- movs r3, 0
- bl CalcCenterToCornerVec
- b _0811FEAE
- .pool
-_0811FEA8:
- ldr r1, [r6]
- movs r0, 0
- str r0, [r1, 0x28]
-_0811FEAE:
- ldr r0, =sub_811FF7C
- str r0, [r4, 0x14]
- ldr r0, [sp, 0x48]
- movs r2, 0xC0
- lsls r2, 12
- adds r1, r0, r2
- asrs r1, 16
- adds r0, r4, 0
- movs r2, 0
- movs r3, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0x40
- beq _0811FF20
- ldr r0, =gUnknown_0203A124
- ldr r2, [r0]
- lsls r1, r3, 4
- adds r1, r3
- lsls r1, 2
- ldr r0, =gSprites
- adds r1, r0
- str r1, [r2, 0x24]
- ldr r3, [sp, 0x4C]
- asrs r0, r3, 16
- adds r0, 0x10
- strh r0, [r1, 0x2E]
- ldr r0, [r2, 0x24]
- movs r1, 0x8
- bl StartSpriteAnim
- b _0811FF28
- .pool
-_0811FEFC:
- ldr r0, =gUnknown_0203A124
- ldr r0, [r0]
- lsls r1, r5, 2
- adds r0, 0xC
- b _0811FF14
- .pool
-_0811FF0C:
- ldr r0, =gUnknown_0203A124
- ldr r0, [r0]
- lsls r1, r5, 2
- adds r0, 0x14
-_0811FF14:
- adds r0, r1
- movs r1, 0
- str r1, [r0]
- b _0811FF28
- .pool
-_0811FF20:
- ldr r0, =gUnknown_0203A124
- ldr r1, [r0]
- movs r0, 0
- str r0, [r1, 0x24]
-_0811FF28:
- add sp, 0x50
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_811FC80
-
- thumb_func_start TaskDummy7
-TaskDummy7: @ 811FF3C
- bx lr
- thumb_func_end TaskDummy7
-
- thumb_func_start sub_811FF40
-sub_811FF40: @ 811FF40
- push {lr}
- adds r2, r0, 0
- ldr r0, =gUnknown_0203A124
- ldr r0, [r0]
- movs r3, 0x2E
- ldrsh r1, [r2, r3]
- adds r0, 0x6
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- beq _0811FF6C
- lsls r1, 1
- adds r1, 0x1
- lsls r1, 24
- lsrs r1, 24
- adds r0, r2, 0
- bl StartSpriteAnim
- b _0811FF76
- .pool
-_0811FF6C:
- lsls r1, 25
- lsrs r1, 24
- adds r0, r2, 0
- bl StartSpriteAnim
-_0811FF76:
- pop {r0}
- bx r0
- thumb_func_end sub_811FF40
-
- thumb_func_start sub_811FF7C
-sub_811FF7C: @ 811FF7C
- ldr r1, =gUnknown_0203A124
- ldr r1, [r1]
- ldrb r1, [r1, 0x5]
- lsls r1, 24
- asrs r1, 24
- lsls r1, 4
- ldrh r2, [r0, 0x2E]
- adds r1, r2
- strh r1, [r0, 0x22]
- bx lr
- .pool
- thumb_func_end sub_811FF7C
-
- thumb_func_start sub_811FF94
-sub_811FF94: @ 811FF94
- push {lr}
- lsls r0, 16
- lsrs r0, 16
- lsls r1, 16
- lsrs r1, 16
- cmp r2, 0
- bne _0811FFA4
- ldr r2, =gUnknown_0859E65C
-_0811FFA4:
- movs r3, 0x10
- bl sub_811FFD4
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_811FF94
-
- thumb_func_start sub_811FFB4
-sub_811FFB4: @ 811FFB4
- push {lr}
- lsls r0, 16
- lsrs r0, 16
- lsls r1, 16
- lsrs r1, 16
- cmp r2, 0
- bne _0811FFC4
- ldr r2, =gUnknown_0859E65C
-_0811FFC4:
- movs r3, 0x1
- bl sub_811FFD4
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_811FFB4
-
- thumb_func_start sub_811FFD4
-sub_811FFD4: @ 811FFD4
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- sub sp, 0x28
- lsls r0, 16
- lsls r1, 16
- lsrs r1, 16
- ldr r4, =gUnknown_0859E67C
- str r4, [sp, 0x18]
- movs r4, 0x80
- add r5, sp, 0x18
- lsrs r6, r0, 16
- orrs r0, r4
- str r0, [r5, 0x4]
- str r2, [sp, 0x20]
- ldr r0, =0xffff0000
- mov r8, r0
- add r4, sp, 0x20
- ldr r0, [r4, 0x4]
- mov r2, r8
- ands r0, r2
- orrs r0, r1
- str r0, [r4, 0x4]
- mov r0, sp
- movs r2, 0
- strh r6, [r0]
- strh r1, [r0, 0x2]
- ldr r0, =gUnknown_0859EF1C
- str r0, [sp, 0x4]
- ldr r0, =gUnknown_0859EFA4
- str r0, [sp, 0x8]
- str r2, [sp, 0xC]
- ldr r0, =gDummySpriteAffineAnimTable
- str r0, [sp, 0x10]
- ldr r0, =TaskDummy7
- str r0, [sp, 0x14]
- lsls r3, 23
- lsrs r3, 16
- ldr r0, [r5, 0x4]
- mov r1, r8
- ands r0, r1
- orrs r0, r3
- str r0, [r5, 0x4]
- adds r0, r5, 0
- bl LoadSpriteSheet
- adds r0, r4, 0
- bl LoadSpritePalette
- mov r0, sp
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x40
- bne _08120068
- movs r0, 0
- b _08120072
- .pool
-_08120068:
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, =gSprites
- adds r0, r1
-_08120072:
- add sp, 0x28
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_811FFD4
-
- thumb_func_start sub_8120084
-sub_8120084: @ 8120084
- push {lr}
- lsls r0, 24
- lsrs r0, 17
- ldr r2, =gUnknown_0859E67C
- adds r0, r2
- movs r2, 0x80
- movs r3, 0x10
- bl RequestDma3Copy
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8120084
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/overworld.s b/asm/overworld.s
deleted file mode 100644
index 492fcd2cb..000000000
--- a/asm/overworld.s
+++ /dev/null
@@ -1,6825 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_8084620
-sub_8084620: @ 8084620
- push {r4,lr}
- ldr r0, =EverGrandeCity_HallOfFame_EventScript_271857
- bl ScriptContext2_RunNewScript
- ldr r0, =gSaveBlock1Ptr
- ldr r4, [r0]
- movs r0, 0x92
- lsls r0, 3
- adds r4, r0
- adds r0, r4, 0
- bl GetMoney
- adds r1, r0, 0
- lsrs r1, 1
- adds r0, r4, 0
- bl SetMoney
- bl HealPlayerParty
- bl sub_8084720
- bl copy_saved_warp3_bank_and_enter_x_to_warp1
- bl warp_in
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8084620
-
- thumb_func_start flag_var_implications_of_teleport_
-flag_var_implications_of_teleport_: @ 8084660
- push {lr}
- bl player_avatar_init_params_reset
- ldr r0, =0x0000088b
- bl FlagClear
- ldr r0, =0x0000088d
- bl FlagClear
- ldr r0, =0x0000088c
- bl FlagClear
- ldr r0, =0x00000889
- bl FlagClear
- ldr r0, =0x00000888
- bl FlagClear
- pop {r0}
- bx r0
- .pool
- thumb_func_end flag_var_implications_of_teleport_
-
- thumb_func_start Overworld_ResetStateAfterTeleport
-Overworld_ResetStateAfterTeleport: @ 808469C
- push {lr}
- bl player_avatar_init_params_reset
- ldr r0, =0x0000088b
- bl FlagClear
- ldr r0, =0x0000088d
- bl FlagClear
- ldr r0, =0x0000088c
- bl FlagClear
- ldr r0, =0x00000889
- bl FlagClear
- ldr r0, =0x00000888
- bl FlagClear
- ldr r0, =EverGrandeCity_HallOfFame_EventScript_271862
- bl ScriptContext2_RunNewScript
- pop {r0}
- bx r0
- .pool
- thumb_func_end Overworld_ResetStateAfterTeleport
-
- thumb_func_start flagmods_08054D70
-flagmods_08054D70: @ 80846E4
- push {lr}
- bl player_avatar_init_params_reset
- ldr r0, =0x0000088b
- bl FlagClear
- ldr r0, =0x0000088d
- bl FlagClear
- ldr r0, =0x0000088c
- bl FlagClear
- ldr r0, =0x00000889
- bl FlagClear
- ldr r0, =0x00000888
- bl FlagClear
- pop {r0}
- bx r0
- .pool
- thumb_func_end flagmods_08054D70
-
- thumb_func_start sub_8084720
-sub_8084720: @ 8084720
- push {r4,lr}
- bl player_avatar_init_params_reset
- ldr r0, =0x0000088b
- bl FlagClear
- ldr r0, =0x0000088d
- bl FlagClear
- ldr r0, =0x0000088c
- bl FlagClear
- ldr r0, =0x00000889
- bl FlagClear
- ldr r0, =0x00000888
- bl FlagClear
- ldr r4, =0x00004039
- adds r0, r4, 0
- bl VarGet
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x1
- bne _08084764
- adds r0, r4, 0
- movs r1, 0
- bl VarSet
- ldr r0, =0x00004037
- movs r1, 0
- bl VarSet
-_08084764:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8084720
-
- thumb_func_start sub_8084788
-sub_8084788: @ 8084788
- push {lr}
- ldr r0, =0x0000088c
- bl FlagClear
- bl sub_8085B2C
- bl ResetCyclingRoadChallengeData
- bl UpdateLocationHistoryForRoamer
- bl RoamerMoveToOtherLocationSet
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8084788
-
- thumb_func_start ResetGameStats
-ResetGameStats: @ 80847A8
- push {r4,lr}
- movs r4, 0
-_080847AC:
- lsls r0, r4, 24
- lsrs r0, 24
- movs r1, 0
- bl sav12_xor_set
- adds r4, 0x1
- cmp r4, 0x3F
- ble _080847AC
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end ResetGameStats
-
- thumb_func_start IncrementGameStat
-@ void IncrementGameStat(u8 a1)
-IncrementGameStat: @ 80847C4
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x33
- bhi _080847EC
- adds r0, r4, 0
- bl GetGameStat
- adds r1, r0, 0
- ldr r0, =0x00fffffe
- cmp r1, r0
- bhi _080847E4
- adds r1, 0x1
- b _080847E6
- .pool
-_080847E4:
- ldr r1, =0x00ffffff
-_080847E6:
- adds r0, r4, 0
- bl sav12_xor_set
-_080847EC:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end IncrementGameStat
-
- thumb_func_start GetGameStat
-GetGameStat: @ 80847F8
- push {lr}
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x33
- bhi _08084828
- ldr r0, =gSaveBlock1Ptr
- ldr r2, [r0]
- lsls r0, r1, 2
- ldr r1, =0x0000159c
- adds r2, r1
- adds r2, r0
- ldr r0, =gSaveBlock2Ptr
- ldr r1, [r0]
- adds r1, 0xAC
- ldr r0, [r2]
- ldr r1, [r1]
- eors r0, r1
- b _0808482A
- .pool
-_08084828:
- movs r0, 0
-_0808482A:
- pop {r1}
- bx r1
- thumb_func_end GetGameStat
-
- thumb_func_start sav12_xor_set
-sav12_xor_set: @ 8084830
- push {lr}
- adds r3, r1, 0
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x33
- bhi _08084854
- ldr r0, =gSaveBlock1Ptr
- ldr r1, [r0]
- lsls r0, r2, 2
- ldr r2, =0x0000159c
- adds r1, r2
- adds r1, r0
- ldr r0, =gSaveBlock2Ptr
- ldr r0, [r0]
- adds r0, 0xAC
- ldr r0, [r0]
- eors r0, r3
- str r0, [r1]
-_08084854:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sav12_xor_set
-
- thumb_func_start ApplyNewEncryptionKeyToGameStats
-ApplyNewEncryptionKeyToGameStats: @ 8084864
- push {r4-r6,lr}
- adds r5, r0, 0
- movs r4, 0
- ldr r6, =gSaveBlock1Ptr
-_0808486C:
- lsls r1, r4, 2
- ldr r0, =0x0000159c
- adds r1, r0
- ldr r0, [r6]
- adds r0, r1
- adds r1, r5, 0
- bl ApplyNewEncryptionKeyToWord
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x3F
- bls _0808486C
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end ApplyNewEncryptionKeyToGameStats
-
- thumb_func_start CopyFieldObjectTemplatesToSav1
-@ void CopyFieldObjectTemplatesToSav1()
-CopyFieldObjectTemplatesToSav1: @ 8084894
- push {r4,r5,lr}
- sub sp, 0x4
- movs r0, 0
- str r0, [sp]
- ldr r5, =gSaveBlock1Ptr
- ldr r1, [r5]
- movs r4, 0xC7
- lsls r4, 4
- adds r1, r4
- ldr r2, =0x05000180
- mov r0, sp
- bl CpuSet
- ldr r0, =gMapHeader
- ldr r2, [r0, 0x4]
- ldr r0, [r2, 0x4]
- ldr r1, [r5]
- adds r1, r4
- ldrb r3, [r2]
- lsls r2, r3, 1
- adds r2, r3
- lsls r2, 1
- movs r3, 0x80
- lsls r3, 19
- orrs r2, r3
- bl CpuSet
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end CopyFieldObjectTemplatesToSav1
-
- thumb_func_start CopyFieldObjectTemplateCoordsToSav1
-@ void CopyFieldObjectTemplateCoordsToSav1()
-CopyFieldObjectTemplateCoordsToSav1: @ 80848E0
- push {lr}
- ldr r0, =gMapHeader
- ldr r1, [r0, 0x4]
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r2, [r1, 0x4]
- movs r3, 0xC7
- lsls r3, 4
- adds r1, r0, r3
- movs r3, 0x3F
-_080848F4:
- ldr r0, [r2, 0x10]
- str r0, [r1, 0x10]
- adds r2, 0x18
- adds r1, 0x18
- subs r3, 0x1
- cmp r3, 0
- bge _080848F4
- pop {r0}
- bx r0
- .pool
- thumb_func_end CopyFieldObjectTemplateCoordsToSav1
-
- thumb_func_start Overworld_SetMapObjTemplateCoords
-Overworld_SetMapObjTemplateCoords: @ 8084910
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r1, 16
- lsrs r4, r1, 16
- lsls r2, 16
- lsrs r2, 16
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- movs r1, 0
- movs r6, 0xC7
- lsls r6, 4
- adds r3, r0, r6
-_0808492A:
- ldrb r0, [r3]
- cmp r0, r5
- bne _0808493C
- strh r4, [r3, 0x4]
- strh r2, [r3, 0x6]
- b _08084944
- .pool
-_0808493C:
- adds r3, 0x18
- adds r1, 0x1
- cmp r1, 0x3F
- ble _0808492A
-_08084944:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end Overworld_SetMapObjTemplateCoords
-
- thumb_func_start Overworld_SetMapObjTemplateMovementType
-Overworld_SetMapObjTemplateMovementType: @ 808494C
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r1, 24
- lsrs r1, 24
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- movs r3, 0
- movs r5, 0xC7
- lsls r5, 4
- adds r2, r0, r5
-_08084962:
- ldrb r0, [r2]
- cmp r0, r4
- bne _08084970
- strb r1, [r2, 0x9]
- b _08084978
- .pool
-_08084970:
- adds r2, 0x18
- adds r3, 0x1
- cmp r3, 0x3F
- ble _08084962
-_08084978:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end Overworld_SetMapObjTemplateMovementType
-
- thumb_func_start mapdata_load_assets_to_gpu_and_full_redraw
-mapdata_load_assets_to_gpu_and_full_redraw: @ 8084980
- push {r4,lr}
- bl move_tilemap_camera_to_upper_left_corner
- ldr r4, =gMapHeader
- ldr r0, [r4]
- bl copy_map_tileset1_tileset2_to_vram
- ldr r0, [r4]
- bl apply_map_tileset1_tileset2_palette
- bl DrawWholeMapView
- bl cur_mapheader_run_tileset_funcs_after_some_cpuset
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end mapdata_load_assets_to_gpu_and_full_redraw
-
- thumb_func_start get_mapdata_header
-@ mapdata_header *get_mapdata_header()
-get_mapdata_header: @ 80849A8
- push {lr}
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldrh r1, [r0, 0x32]
- cmp r1, 0
- bne _080849BC
- movs r0, 0
- b _080849C6
- .pool
-_080849BC:
- ldr r0, =gMapAttributes
- subs r1, 0x1
- lsls r1, 2
- adds r1, r0
- ldr r0, [r1]
-_080849C6:
- pop {r1}
- bx r1
- .pool
- thumb_func_end get_mapdata_header
-
- thumb_func_start warp_shift
-@ void warp_shift()
-warp_shift: @ 80849D0
- ldr r3, =gUnknown_020322DC
- ldr r0, =gSaveBlock1Ptr
- ldr r2, [r0]
- ldr r0, [r2, 0x4]
- ldr r1, [r2, 0x8]
- str r0, [r3]
- str r1, [r3, 0x4]
- ldr r0, =gUnknown_020322E4
- ldr r1, [r0, 0x4]
- ldr r0, [r0]
- str r0, [r2, 0x4]
- str r1, [r2, 0x8]
- ldr r2, =gUnknown_020322EC
- ldr r0, =gUnknown_08339D3C
- ldr r1, [r0, 0x4]
- ldr r0, [r0]
- str r0, [r2]
- str r1, [r2, 0x4]
- ldr r2, =gUnknown_020322F4
- str r0, [r2]
- str r1, [r2, 0x4]
- bx lr
- .pool
- thumb_func_end warp_shift
-
- thumb_func_start set_warp2_warp3_to_neg_1
-@ void set_warp2_warp3_to_neg_1()
-set_warp2_warp3_to_neg_1: @ 8084A14
- ldr r2, =gUnknown_020322EC
- ldr r0, =gUnknown_08339D3C
- ldr r1, [r0, 0x4]
- ldr r0, [r0]
- str r0, [r2]
- str r1, [r2, 0x4]
- ldr r2, =gUnknown_020322F4
- str r0, [r2]
- str r1, [r2, 0x4]
- bx lr
- .pool
- thumb_func_end set_warp2_warp3_to_neg_1
-
- thumb_func_start warp_set
-@ void warp_set(warpdata *warp, char bank, char map, char warpid, char enter_x, char enter_y)
-warp_set: @ 8084A34
- push {r4,r5,lr}
- ldr r4, [sp, 0xC]
- ldr r5, [sp, 0x10]
- strb r1, [r0]
- strb r2, [r0, 0x1]
- strb r3, [r0, 0x2]
- lsls r4, 24
- asrs r4, 24
- strh r4, [r0, 0x4]
- lsls r5, 24
- asrs r5, 24
- strh r5, [r0, 0x6]
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end warp_set
-
- thumb_func_start warp_data_is_not_neg_1
-@ int warp_data_is_not_neg_1(warpdata *warp)
-warp_data_is_not_neg_1: @ 8084A54
- push {lr}
- adds r1, r0, 0
- movs r2, 0
- ldrsb r2, [r1, r2]
- movs r0, 0x1
- negs r0, r0
- cmp r2, r0
- bne _08084A88
- movs r0, 0x1
- ldrsb r0, [r1, r0]
- cmp r0, r2
- bne _08084A88
- movs r2, 0x2
- ldrsb r2, [r1, r2]
- cmp r2, r0
- bne _08084A88
- movs r0, 0x4
- ldrsh r3, [r1, r0]
- cmp r3, r2
- bne _08084A88
- movs r2, 0x6
- ldrsh r0, [r1, r2]
- cmp r0, r3
- bne _08084A88
- movs r0, 0x1
- b _08084A8A
-_08084A88:
- movs r0, 0
-_08084A8A:
- pop {r1}
- bx r1
- thumb_func_end warp_data_is_not_neg_1
-
- thumb_func_start get_mapheader_by_bank_and_number
-@ struct mapheader *get_mapheader_by_bank_and_number(unsigned int bank, unsigned int num)
-get_mapheader_by_bank_and_number: @ 8084A90
- lsls r0, 16
- lsls r1, 16
- ldr r2, =gMapGroups
- lsrs r0, 14
- adds r0, r2
- ldr r0, [r0]
- lsrs r1, 14
- adds r1, r0
- ldr r0, [r1]
- bx lr
- .pool
- thumb_func_end get_mapheader_by_bank_and_number
-
- thumb_func_start warp1_get_mapheader
-@ struct mapheader *warp1_get_mapheader()
-warp1_get_mapheader: @ 8084AA8
- push {lr}
- ldr r1, =gUnknown_020322E4
- movs r0, 0
- ldrsb r0, [r1, r0]
- lsls r0, 16
- lsrs r0, 16
- ldrb r1, [r1, 0x1]
- lsls r1, 24
- asrs r1, 24
- lsls r1, 16
- lsrs r1, 16
- bl get_mapheader_by_bank_and_number
- pop {r1}
- bx r1
- .pool
- thumb_func_end warp1_get_mapheader
-
- thumb_func_start set_current_map_header_from_sav1_save_old_name
-@ void set_current_map_header_from_sav1_save_old_name()
-set_current_map_header_from_sav1_save_old_name: @ 8084ACC
- push {r4-r6,lr}
- ldr r1, =gUnknown_020322FC
- ldr r4, =gMapHeader
- ldrb r0, [r4, 0x14]
- strh r0, [r1]
- ldr r5, =gSaveBlock1Ptr
- ldr r1, [r5]
- movs r0, 0x4
- ldrsb r0, [r1, r0]
- lsls r0, 16
- lsrs r0, 16
- ldrb r1, [r1, 0x5]
- lsls r1, 24
- asrs r1, 24
- lsls r1, 16
- lsrs r1, 16
- bl get_mapheader_by_bank_and_number
- adds r1, r4, 0
- ldm r0!, {r2,r3,r6}
- stm r1!, {r2,r3,r6}
- ldm r0!, {r2,r3,r6}
- stm r1!, {r2,r3,r6}
- ldr r0, [r0]
- str r0, [r1]
- ldr r1, [r5]
- ldrh r0, [r4, 0x12]
- strh r0, [r1, 0x32]
- bl get_mapdata_header
- str r0, [r4]
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end set_current_map_header_from_sav1_save_old_name
-
- thumb_func_start set_current_map_header_from_sav1
-set_current_map_header_from_sav1: @ 8084B1C
- push {r4,r5,lr}
- ldr r4, =gMapHeader
- ldr r0, =gSaveBlock1Ptr
- ldr r1, [r0]
- movs r0, 0x4
- ldrsb r0, [r1, r0]
- lsls r0, 16
- lsrs r0, 16
- ldrb r1, [r1, 0x5]
- lsls r1, 24
- asrs r1, 24
- lsls r1, 16
- lsrs r1, 16
- bl get_mapheader_by_bank_and_number
- adds r1, r4, 0
- ldm r0!, {r2,r3,r5}
- stm r1!, {r2,r3,r5}
- ldm r0!, {r2,r3,r5}
- stm r1!, {r2,r3,r5}
- ldr r0, [r0]
- str r0, [r1]
- bl get_mapdata_header
- str r0, [r4]
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end set_current_map_header_from_sav1
-
- thumb_func_start update_camera_pos_from_warpid
-@ void update_camera_pos_from_warpid()
-update_camera_pos_from_warpid: @ 8084B5C
- push {r4,r5,lr}
- ldr r0, =gSaveBlock1Ptr
- ldr r2, [r0]
- movs r1, 0x6
- ldrsb r1, [r2, r1]
- adds r4, r0, 0
- cmp r1, 0
- blt _08084B94
- ldr r3, =gMapHeader
- ldr r0, [r3, 0x4]
- ldrb r5, [r0, 0x1]
- cmp r1, r5
- bge _08084B94
- ldr r0, [r0, 0x8]
- lsls r1, 3
- adds r0, r1, r0
- ldrh r0, [r0]
- strh r0, [r2]
- ldr r0, [r3, 0x4]
- ldr r0, [r0, 0x8]
- adds r1, r0
- ldrh r0, [r1, 0x2]
- strh r0, [r2, 0x2]
- b _08084BCC
- .pool
-_08084B94:
- ldr r1, [r4]
- ldrh r3, [r1, 0x8]
- movs r2, 0x8
- ldrsh r0, [r1, r2]
- cmp r0, 0
- blt _08084BB0
- ldrh r2, [r1, 0xA]
- movs r5, 0xA
- ldrsh r0, [r1, r5]
- cmp r0, 0
- blt _08084BB0
- strh r3, [r1]
- strh r2, [r1, 0x2]
- b _08084BCC
-_08084BB0:
- ldr r3, [r4]
- ldr r2, =gMapHeader
- ldr r0, [r2]
- ldr r0, [r0]
- lsrs r1, r0, 31
- adds r0, r1
- asrs r0, 1
- strh r0, [r3]
- ldr r0, [r2]
- ldr r0, [r0, 0x4]
- lsrs r1, r0, 31
- adds r0, r1
- asrs r0, 1
- strh r0, [r3, 0x2]
-_08084BCC:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end update_camera_pos_from_warpid
-
- thumb_func_start warp_in
-warp_in: @ 8084BD8
- push {lr}
- bl warp_shift
- bl set_current_map_header_from_sav1_save_old_name
- bl update_camera_pos_from_warpid
- pop {r0}
- bx r0
- thumb_func_end warp_in
-
- thumb_func_start Overworld_SetWarpDestination
-@ void Overworld_SetWarpDestination(char bank, char map, char warpid, char enter_x, char enter_y)
-Overworld_SetWarpDestination: @ 8084BEC
- push {r4-r6,lr}
- sub sp, 0x8
- adds r4, r0, 0
- adds r5, r1, 0
- adds r6, r2, 0
- ldr r1, [sp, 0x18]
- ldr r0, =gUnknown_020322E4
- lsls r4, 24
- asrs r4, 24
- lsls r5, 24
- asrs r5, 24
- lsls r6, 24
- asrs r6, 24
- lsls r3, 24
- asrs r3, 24
- str r3, [sp]
- lsls r1, 24
- asrs r1, 24
- str r1, [sp, 0x4]
- adds r1, r4, 0
- adds r2, r5, 0
- adds r3, r6, 0
- bl warp_set
- add sp, 0x8
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end Overworld_SetWarpDestination
-
- thumb_func_start warp1_set_2
-@ void warp1_set_2(char bank, char map, char warpid)
-warp1_set_2: @ 8084C28
- push {lr}
- sub sp, 0x4
- lsls r0, 24
- asrs r0, 24
- lsls r1, 24
- asrs r1, 24
- lsls r2, 24
- asrs r2, 24
- movs r3, 0x1
- negs r3, r3
- str r3, [sp]
- bl Overworld_SetWarpDestination
- add sp, 0x4
- pop {r0}
- bx r0
- thumb_func_end warp1_set_2
-
- thumb_func_start saved_warp2_set
-@ void saved_warp2_set(char bank, char map, char warpid)
-saved_warp2_set: @ 8084C48
- push {r4,r5,lr}
- sub sp, 0x8
- ldr r0, =gSaveBlock1Ptr
- ldr r5, [r0]
- adds r0, r5, 0
- adds r0, 0x14
- lsls r1, 24
- asrs r1, 24
- lsls r2, 24
- asrs r2, 24
- lsls r3, 24
- asrs r3, 24
- movs r4, 0
- ldrsb r4, [r5, r4]
- str r4, [sp]
- movs r4, 0x2
- ldrsb r4, [r5, r4]
- str r4, [sp, 0x4]
- bl warp_set
- add sp, 0x8
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end saved_warp2_set
-
- thumb_func_start saved_warp2_set_2
-saved_warp2_set_2: @ 8084C7C
- push {r4,r5,lr}
- sub sp, 0x8
- ldr r4, [sp, 0x14]
- ldr r5, [sp, 0x18]
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- adds r0, 0x14
- lsls r1, 24
- asrs r1, 24
- lsls r2, 24
- asrs r2, 24
- lsls r3, 24
- asrs r3, 24
- lsls r4, 24
- asrs r4, 24
- str r4, [sp]
- lsls r5, 24
- asrs r5, 24
- str r5, [sp, 0x4]
- bl warp_set
- add sp, 0x8
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end saved_warp2_set_2
-
- thumb_func_start copy_saved_warp2_bank_and_enter_x_to_warp1
-copy_saved_warp2_bank_and_enter_x_to_warp1: @ 8084CB4
- ldr r2, =gUnknown_020322E4
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r1, [r0, 0x18]
- ldr r0, [r0, 0x14]
- str r0, [r2]
- str r1, [r2, 0x4]
- bx lr
- .pool
- thumb_func_end copy_saved_warp2_bank_and_enter_x_to_warp1
-
- thumb_func_start sub_8084CCC
-@ void sub_8084CCC(int a1)
-sub_8084CCC: @ 8084CCC
- push {r4,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r0, 24
- bl GetHealLocationPointer
- adds r4, r0, 0
- cmp r4, 0
- beq _08084CFA
- movs r0, 0
- ldrsb r0, [r4, r0]
- movs r1, 0x1
- ldrsb r1, [r4, r1]
- movs r2, 0x1
- negs r2, r2
- movs r3, 0x2
- ldrsb r3, [r4, r3]
- ldrb r4, [r4, 0x4]
- lsls r4, 24
- asrs r4, 24
- str r4, [sp]
- bl Overworld_SetWarpDestination
-_08084CFA:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8084CCC
-
- thumb_func_start copy_saved_warp3_bank_and_enter_x_to_warp1
-@ void copy_saved_warp3_bank_and_enter_x_to_warp1()
-copy_saved_warp3_bank_and_enter_x_to_warp1: @ 8084D04
- ldr r2, =gUnknown_020322E4
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r1, [r0, 0x20]
- ldr r0, [r0, 0x1C]
- str r0, [r2]
- str r1, [r2, 0x4]
- bx lr
- .pool
- thumb_func_end copy_saved_warp3_bank_and_enter_x_to_warp1
-
- thumb_func_start Overworld_SetHealLocationWarp
-Overworld_SetHealLocationWarp: @ 8084D1C
- push {r4,r5,lr}
- sub sp, 0x8
- lsls r0, 24
- lsrs r0, 24
- bl GetHealLocationPointer
- adds r5, r0, 0
- cmp r5, 0
- beq _08084D50
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- adds r0, 0x1C
- movs r1, 0
- ldrsb r1, [r5, r1]
- movs r2, 0x1
- ldrsb r2, [r5, r2]
- movs r3, 0x1
- negs r3, r3
- movs r4, 0x2
- ldrsb r4, [r5, r4]
- str r4, [sp]
- movs r4, 0x4
- ldrsb r4, [r5, r4]
- str r4, [sp, 0x4]
- bl warp_set
-_08084D50:
- add sp, 0x8
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end Overworld_SetHealLocationWarp
-
- thumb_func_start sub_8084D5C
-sub_8084D5C: @ 8084D5C
- push {r4-r7,lr}
- sub sp, 0x4
- lsls r0, 16
- lsrs r6, r0, 16
- lsls r1, 16
- lsrs r7, r1, 16
- bl sav1_map_get_light_level
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r1, =gUnknown_020322E4
- movs r0, 0
- ldrsb r0, [r1, r0]
- ldrb r1, [r1, 0x1]
- lsls r1, 24
- asrs r1, 24
- bl get_map_light_level_by_bank_and_number
- lsls r0, 24
- lsrs r5, r0, 24
- adds r0, r4, 0
- bl is_light_level_1_2_3_5_or_6
- lsls r0, 24
- cmp r0, 0
- beq _08084DC4
- adds r0, r5, 0
- bl is_light_level_1_2_3_5_or_6
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08084DC4
- ldr r0, =gSaveBlock1Ptr
- ldr r1, [r0]
- movs r0, 0x4
- ldrsb r0, [r1, r0]
- ldrb r1, [r1, 0x5]
- lsls r1, 24
- asrs r1, 24
- movs r2, 0x1
- negs r2, r2
- subs r3, r6, 0x7
- lsls r3, 24
- asrs r3, 24
- subs r4, r7, 0x6
- lsls r4, 24
- asrs r4, 24
- str r4, [sp]
- bl sub_8084DD4
-_08084DC4:
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8084D5C
-
- thumb_func_start sub_8084DD4
-sub_8084DD4: @ 8084DD4
- push {r4-r6,lr}
- sub sp, 0x8
- adds r4, r0, 0
- adds r5, r1, 0
- adds r6, r2, 0
- ldr r1, [sp, 0x18]
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- adds r0, 0x24
- lsls r4, 24
- asrs r4, 24
- lsls r5, 24
- asrs r5, 24
- lsls r6, 24
- asrs r6, 24
- lsls r3, 24
- asrs r3, 24
- str r3, [sp]
- lsls r1, 24
- asrs r1, 24
- str r1, [sp, 0x4]
- adds r1, r4, 0
- adds r2, r5, 0
- adds r3, r6, 0
- bl warp_set
- add sp, 0x8
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8084DD4
-
- thumb_func_start sub_8084E14
-sub_8084E14: @ 8084E14
- ldr r2, =gUnknown_020322E4
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r1, [r0, 0x28]
- ldr r0, [r0, 0x24]
- str r0, [r2]
- str r1, [r2, 0x4]
- bx lr
- .pool
- thumb_func_end sub_8084E14
-
- thumb_func_start sub_8084E2C
-sub_8084E2C: @ 8084E2C
- push {r4-r6,lr}
- sub sp, 0x8
- adds r4, r0, 0
- adds r5, r1, 0
- adds r6, r2, 0
- ldr r1, [sp, 0x18]
- ldr r0, =gUnknown_020322EC
- lsls r4, 24
- asrs r4, 24
- lsls r5, 24
- asrs r5, 24
- lsls r6, 24
- asrs r6, 24
- lsls r3, 24
- asrs r3, 24
- str r3, [sp]
- lsls r1, 24
- asrs r1, 24
- str r1, [sp, 0x4]
- adds r1, r4, 0
- adds r2, r5, 0
- adds r3, r6, 0
- bl warp_set
- add sp, 0x8
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8084E2C
-
- thumb_func_start warp1_set_to_warp2
-warp1_set_to_warp2: @ 8084E68
- ldr r2, =gUnknown_020322E4
- ldr r0, =gUnknown_020322EC
- ldr r1, [r0, 0x4]
- ldr r0, [r0]
- str r0, [r2]
- str r1, [r2, 0x4]
- bx lr
- .pool
- thumb_func_end warp1_set_to_warp2
-
- thumb_func_start sub_8084E80
-sub_8084E80: @ 8084E80
- push {r4-r6,lr}
- sub sp, 0x8
- adds r4, r0, 0
- adds r5, r1, 0
- adds r6, r2, 0
- ldr r1, [sp, 0x18]
- ldr r0, =gUnknown_020322F4
- lsls r4, 24
- asrs r4, 24
- lsls r5, 24
- asrs r5, 24
- lsls r6, 24
- asrs r6, 24
- lsls r3, 24
- asrs r3, 24
- str r3, [sp]
- lsls r1, 24
- asrs r1, 24
- str r1, [sp, 0x4]
- adds r1, r4, 0
- adds r2, r5, 0
- adds r3, r6, 0
- bl warp_set
- add sp, 0x8
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8084E80
-
- thumb_func_start sub_8084EBC
-sub_8084EBC: @ 8084EBC
- push {r4-r6,lr}
- sub sp, 0x4
- lsls r0, 16
- lsrs r5, r0, 16
- lsls r1, 16
- lsrs r6, r1, 16
- ldr r4, =gUnknown_020322F4
- adds r0, r4, 0
- bl warp_data_is_not_neg_1
- cmp r0, 0x1
- bne _08084EF0
- ldr r2, =gUnknown_020322E4
- ldr r0, =gUnknown_020322DC
- ldr r1, [r0, 0x4]
- ldr r0, [r0]
- str r0, [r2]
- str r1, [r2, 0x4]
- b _08084F0A
- .pool
-_08084EF0:
- movs r0, 0
- ldrsb r0, [r4, r0]
- movs r1, 0x1
- ldrsb r1, [r4, r1]
- movs r2, 0x1
- negs r2, r2
- lsls r3, r5, 24
- asrs r3, 24
- lsls r4, r6, 24
- asrs r4, 24
- str r4, [sp]
- bl Overworld_SetWarpDestination
-_08084F0A:
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_8084EBC
-
- thumb_func_start warp1_set_to_sav1w
-warp1_set_to_sav1w: @ 8084F14
- ldr r2, =gUnknown_020322E4
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r1, [r0, 0x10]
- ldr r0, [r0, 0xC]
- str r0, [r2]
- str r1, [r2, 0x4]
- bx lr
- .pool
- thumb_func_end warp1_set_to_sav1w
-
- thumb_func_start sub_8084F2C
-sub_8084F2C: @ 8084F2C
- push {r4-r6,lr}
- sub sp, 0x8
- adds r4, r0, 0
- adds r5, r1, 0
- adds r6, r2, 0
- ldr r1, [sp, 0x18]
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- adds r0, 0xC
- lsls r4, 24
- asrs r4, 24
- lsls r5, 24
- asrs r5, 24
- lsls r6, 24
- asrs r6, 24
- lsls r3, 24
- asrs r3, 24
- str r3, [sp]
- lsls r1, 24
- asrs r1, 24
- str r1, [sp, 0x4]
- adds r1, r4, 0
- adds r2, r5, 0
- adds r3, r6, 0
- bl warp_set
- add sp, 0x8
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8084F2C
-
- thumb_func_start sub_8084F6C
-sub_8084F6C: @ 8084F6C
- push {r4,r5,lr}
- sub sp, 0x8
- lsls r0, 24
- lsrs r0, 24
- bl GetHealLocationPointer
- adds r5, r0, 0
- cmp r5, 0
- beq _08084FA0
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- adds r0, 0xC
- movs r1, 0
- ldrsb r1, [r5, r1]
- movs r2, 0x1
- ldrsb r2, [r5, r2]
- movs r3, 0x1
- negs r3, r3
- movs r4, 0x2
- ldrsb r4, [r5, r4]
- str r4, [sp]
- movs r4, 0x4
- ldrsb r4, [r5, r4]
- str r4, [sp, 0x4]
- bl warp_set
-_08084FA0:
- add sp, 0x8
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8084F6C
-
- thumb_func_start sub_8084FAC
-sub_8084FAC: @ 8084FAC
- ldr r0, =gSaveBlock1Ptr
- ldr r2, [r0]
- ldr r0, [r2, 0x14]
- ldr r1, [r2, 0x18]
- str r0, [r2, 0xC]
- str r1, [r2, 0x10]
- bx lr
- .pool
- thumb_func_end sub_8084FAC
-
- thumb_func_start sub_8084FC0
-sub_8084FC0: @ 8084FC0
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, =gMapHeader
- ldr r0, [r0, 0xC]
- ldr r3, [r0]
- ldr r1, [r0, 0x4]
- cmp r1, 0
- bne _08084FDC
- b _08084FF0
- .pool
-_08084FD8:
- adds r0, r1, 0
- b _08084FF2
-_08084FDC:
- movs r2, 0
- cmp r2, r3
- bge _08084FF0
-_08084FE2:
- ldrb r0, [r1]
- cmp r0, r4
- beq _08084FD8
- adds r2, 0x1
- adds r1, 0xC
- cmp r2, r3
- blt _08084FE2
-_08084FF0:
- movs r0, 0
-_08084FF2:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8084FC0
-
- thumb_func_start sub_8084FF8
-sub_8084FF8: @ 8084FF8
- push {r4,r5,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 16
- lsrs r4, r1, 16
- lsls r2, 16
- lsrs r5, r2, 16
- bl sub_8084FC0
- adds r1, r0, 0
- cmp r1, 0
- beq _08085030
- movs r0, 0x8
- ldrsb r0, [r1, r0]
- ldrb r1, [r1, 0x9]
- lsls r1, 24
- asrs r1, 24
- movs r2, 0x1
- negs r2, r2
- lsls r3, r4, 24
- asrs r3, 24
- lsls r4, r5, 24
- asrs r4, 24
- str r4, [sp]
- bl Overworld_SetWarpDestination
- b _0808504C
-_08085030:
- bl mapheader_run_script_with_tag_x6
- ldr r0, =gUnknown_020322EC
- bl warp_data_is_not_neg_1
- cmp r0, 0
- beq _08085048
- movs r0, 0
- b _0808504E
- .pool
-_08085048:
- bl warp1_set_to_warp2
-_0808504C:
- movs r0, 0x1
-_0808504E:
- add sp, 0x4
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_8084FF8
-
- thumb_func_start sub_8085058
-sub_8085058: @ 8085058
- push {lr}
- adds r3, r0, 0
- adds r2, r1, 0
- lsls r3, 16
- lsrs r3, 16
- lsls r2, 16
- lsrs r2, 16
- movs r0, 0x6
- adds r1, r3, 0
- bl sub_8084FF8
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- thumb_func_end sub_8085058
-
- thumb_func_start sub_8085078
-sub_8085078: @ 8085078
- push {lr}
- adds r3, r0, 0
- adds r2, r1, 0
- lsls r3, 16
- lsrs r3, 16
- lsls r2, 16
- lsrs r2, 16
- movs r0, 0x5
- adds r1, r3, 0
- bl sub_8084FF8
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- thumb_func_end sub_8085078
-
- thumb_func_start mliX_load_map
-mliX_load_map: @ 8085098
- push {r4-r6,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r0, 24
- adds r6, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r5, r1, 0
- lsls r0, r6, 24
- asrs r0, 24
- lsls r1, r5, 24
- asrs r1, 24
- movs r3, 0x1
- negs r3, r3
- str r3, [sp]
- adds r2, r3, 0
- bl Overworld_SetWarpDestination
- ldr r4, =gMapHeader
- ldrb r0, [r4, 0x14]
- cmp r0, 0x3A
- beq _080850C8
- bl sub_8085810
-_080850C8:
- bl warp_shift
- bl set_current_map_header_from_sav1_save_old_name
- bl CopyFieldObjectTemplatesToSav1
- bl TrySetMapSaveWarpStatus
- bl ClearTempFieldEventData
- bl ResetCyclingRoadChallengeData
- bl prev_quest_postbuffer_cursor_backup_reset
- adds r0, r6, 0
- adds r1, r5, 0
- bl TryUpdateRandomTrainerRematches
- bl DoTimeBasedEvents
- bl SetSav1WeatherFromCurrMapHeader
- bl sub_8085B2C
- bl update_sav1_flash_used_on_map
- bl Overworld_ClearSavedMusic
- bl mapheader_run_script_with_tag_x3
- bl not_trainer_hill_battle_pyramid
- ldr r0, [r4]
- bl copy_map_tileset2_to_vram_2
- ldr r0, [r4]
- bl apply_map_tileset2_palette
- movs r4, 0x6
-_08085116:
- lsls r0, r4, 24
- lsrs r0, 24
- bl sub_80ABF00
- adds r4, 0x1
- cmp r4, 0xC
- ble _08085116
- bl sub_80A0A2C
- bl UpdateLocationHistoryForRoamer
- bl RoamerMove
- bl DoCurrentWeather
- bl wild_encounter_reset_coro_args
- bl mapheader_run_script_with_tag_x5
- ldr r2, =gMapHeader
- ldrb r0, [r2, 0x14]
- cmp r0, 0x3A
- bne _0808514C
- ldr r1, =gUnknown_020322FC
- ldrh r1, [r1]
- cmp r0, r1
- beq _08085150
-_0808514C:
- bl AddMapNamePopUpWindowTask
-_08085150:
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end mliX_load_map
-
- thumb_func_start mli0_load_map
-mli0_load_map: @ 8085160
- push {r4-r7,lr}
- adds r7, r0, 0
- bl set_current_map_header_from_sav1_save_old_name
- ldr r0, =gUnknown_020322D8
- ldrb r1, [r0]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _080851A2
- ldr r0, =gMapHeader
- ldrh r1, [r0, 0x12]
- ldr r0, =0x00000169
- cmp r1, r0
- bne _08085190
- bl sub_81AA1D8
- b _080851A2
- .pool
-_08085190:
- bl InTrainerHill
- cmp r0, 0
- beq _0808519E
- bl sub_81D5DF8
- b _080851A2
-_0808519E:
- bl CopyFieldObjectTemplatesToSav1
-_080851A2:
- ldr r4, =gMapHeader
- ldrb r0, [r4, 0x17]
- bl is_light_level_1_2_3_5_or_6
- lsls r0, 24
- lsrs r5, r0, 24
- ldrb r0, [r4, 0x17]
- bl is_light_level_8_or_9
- lsls r0, 24
- lsrs r6, r0, 24
- bl sub_80EB218
- bl TrySetMapSaveWarpStatus
- bl ClearTempFieldEventData
- bl ResetCyclingRoadChallengeData
- bl prev_quest_postbuffer_cursor_backup_reset
- ldr r0, =gSaveBlock1Ptr
- ldr r1, [r0]
- movs r0, 0x4
- ldrsb r0, [r1, r0]
- lsls r0, 16
- lsrs r0, 16
- ldrb r1, [r1, 0x5]
- lsls r1, 24
- asrs r1, 24
- lsls r1, 16
- lsrs r1, 16
- bl TryUpdateRandomTrainerRematches
- cmp r7, 0x1
- beq _080851EE
- bl DoTimeBasedEvents
-_080851EE:
- bl SetSav1WeatherFromCurrMapHeader
- bl sub_8085B2C
- cmp r5, 0
- beq _08085200
- ldr r0, =0x00000888
- bl FlagClear
-_08085200:
- bl update_sav1_flash_used_on_map
- bl Overworld_ClearSavedMusic
- bl mapheader_run_script_with_tag_x3
- bl UpdateLocationHistoryForRoamer
- bl RoamerMoveToOtherLocationSet
- ldrh r1, [r4, 0x12]
- ldr r0, =0x00000169
- cmp r1, r0
- bne _08085234
- movs r0, 0
- bl battle_pyramid_map_load_related
- b _08085246
- .pool
-_08085234:
- bl InTrainerHill
- cmp r0, 0
- beq _08085242
- bl trainer_hill_map_load_related
- b _08085246
-_08085242:
- bl not_trainer_hill_battle_pyramid
-_08085246:
- cmp r7, 0x1
- beq _0808525E
- cmp r6, 0
- beq _0808525E
- ldr r1, =gUnknown_03005DC0
- ldr r0, [r1]
- ldr r1, [r1, 0x4]
- bl UpdateTVScreensOnMap
- movs r0, 0x1
- bl sub_80E9238
-_0808525E:
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end mli0_load_map
-
- thumb_func_start player_avatar_init_params_reset
-player_avatar_init_params_reset: @ 8085268
- ldr r1, =gUnknown_02032300
- movs r0, 0x1
- strb r0, [r1, 0x1]
- strb r0, [r1]
- bx lr
- .pool
- thumb_func_end player_avatar_init_params_reset
-
- thumb_func_start walkrun_find_lowest_active_bit_in_bitfield
-walkrun_find_lowest_active_bit_in_bitfield: @ 8085278
- push {r4,lr}
- bl player_get_direction_lower_nybble
- ldr r4, =gUnknown_02032300
- strb r0, [r4, 0x1]
- movs r0, 0x2
- bl TestPlayerAvatarFlags
- lsls r0, 24
- cmp r0, 0
- beq _08085298
- movs r0, 0x2
- b _080852CA
- .pool
-_08085298:
- movs r0, 0x4
- bl TestPlayerAvatarFlags
- lsls r0, 24
- cmp r0, 0
- beq _080852A8
- movs r0, 0x4
- b _080852CA
-_080852A8:
- movs r0, 0x8
- bl TestPlayerAvatarFlags
- lsls r0, 24
- cmp r0, 0
- beq _080852B8
- movs r0, 0x8
- b _080852CA
-_080852B8:
- movs r0, 0x10
- bl TestPlayerAvatarFlags
- lsls r0, 24
- cmp r0, 0
- beq _080852C8
- movs r0, 0x10
- b _080852CA
-_080852C8:
- movs r0, 0x1
-_080852CA:
- strb r0, [r4]
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end walkrun_find_lowest_active_bit_in_bitfield
-
- thumb_func_start sub_80852D4
-sub_80852D4: @ 80852D4
- push {r4-r7,lr}
- bl sav1_map_get_light_level
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- bl cur_mapdata_block_role_at_screen_center_acc_to_sav1
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- ldr r6, =gUnknown_02032300
- adds r0, r6, 0
- adds r1, r4, 0
- adds r2, r5, 0
- bl sub_808532C
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldr r0, =0xffffff00
- ands r7, r0
- orrs r7, r1
- adds r0, r6, 0
- adds r2, r4, 0
- adds r3, r5, 0
- bl sub_808538C
- lsls r0, 24
- lsrs r0, 16
- ldr r1, =0xffff00ff
- ands r7, r1
- orrs r7, r0
- str r7, [r6]
- adds r0, r6, 0
- pop {r4-r7}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80852D4
-
- thumb_func_start sub_808532C
-sub_808532C: @ 808532C
- push {r4-r6,lr}
- adds r6, r0, 0
- lsls r1, 16
- lsrs r5, r1, 16
- lsls r2, 24
- lsrs r4, r2, 24
- cmp r4, 0x8
- beq _08085348
- ldr r0, =0x0000088d
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- bne _08085382
-_08085348:
- cmp r4, 0x5
- bne _08085354
- movs r0, 0x10
- b _08085384
- .pool
-_08085354:
- lsls r0, r5, 24
- lsrs r0, 24
- bl MetatileBehavior_IsSurfableWaterOrUnderwater
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08085368
- movs r0, 0x8
- b _08085384
-_08085368:
- bl sav1_map_is_biking_allowed
- cmp r0, 0x1
- bne _08085382
- ldrb r0, [r6]
- cmp r0, 0x2
- bne _0808537A
- movs r0, 0x2
- b _08085384
-_0808537A:
- cmp r0, 0x4
- bne _08085382
- movs r0, 0x4
- b _08085384
-_08085382:
- movs r0, 0x1
-_08085384:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_808532C
-
- thumb_func_start sub_808538C
-sub_808538C: @ 808538C
- push {r4-r7,lr}
- adds r6, r0, 0
- lsls r1, 24
- lsrs r7, r1, 24
- lsls r2, 16
- lsrs r4, r2, 16
- lsls r3, 24
- lsrs r5, r3, 24
- ldr r0, =0x0000088d
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- beq _080853AC
- cmp r5, 0x6
- beq _0808540C
-_080853AC:
- lsls r4, 24
- lsrs r5, r4, 24
- adds r0, r5, 0
- bl MetatileBehavior_IsDeepSouthWarp
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _080853E8
- adds r0, r5, 0
- bl MetatileBehavior_IsNonAnimDoor
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08085442
- adds r0, r5, 0
- bl MetatileBehavior_IsDoor
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08085442
- adds r0, r5, 0
- bl MetatileBehavior_IsSouthArrowWarp
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080853F0
-_080853E8:
- movs r0, 0x2
- b _08085448
- .pool
-_080853F0:
- adds r0, r5, 0
- bl MetatileBehavior_IsNorthArrowWarp
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08085442
- adds r0, r5, 0
- bl MetatileBehavior_IsWestArrowWarp
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08085410
-_0808540C:
- movs r0, 0x4
- b _08085448
-_08085410:
- adds r0, r5, 0
- bl MetatileBehavior_IsEastArrowWarp
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08085422
- movs r0, 0x3
- b _08085448
-_08085422:
- ldrb r0, [r6]
- cmp r0, 0x10
- bne _0808542C
- cmp r7, 0x8
- beq _08085446
-_0808542C:
- cmp r0, 0x8
- bne _08085434
- cmp r7, 0x10
- beq _08085446
-_08085434:
- lsrs r0, r4, 24
- bl MetatileBehavior_IsLadder
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08085446
-_08085442:
- movs r0, 0x1
- b _08085448
-_08085446:
- ldrb r0, [r6, 0x1]
-_08085448:
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_808538C
-
- thumb_func_start cur_mapdata_block_role_at_screen_center_acc_to_sav1
-cur_mapdata_block_role_at_screen_center_acc_to_sav1: @ 8085450
- push {lr}
- ldr r0, =gSaveBlock1Ptr
- ldr r1, [r0]
- movs r2, 0
- ldrsh r0, [r1, r2]
- adds r0, 0x7
- movs r2, 0x2
- ldrsh r1, [r1, r2]
- adds r1, 0x7
- bl MapGridGetMetatileBehaviorAt
- lsls r0, 16
- lsrs r0, 16
- pop {r1}
- bx r1
- .pool
- thumb_func_end cur_mapdata_block_role_at_screen_center_acc_to_sav1
-
- thumb_func_start sav1_map_is_biking_allowed
-sav1_map_is_biking_allowed: @ 8085474
- push {lr}
- ldr r0, =gMapHeader
- ldrb r1, [r0, 0x1A]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0808548C
- movs r0, 0x1
- b _0808548E
- .pool
-_0808548C:
- movs r0, 0
-_0808548E:
- pop {r1}
- bx r1
- thumb_func_end sav1_map_is_biking_allowed
-
- thumb_func_start update_sav1_flash_used_on_map
-update_sav1_flash_used_on_map: @ 8085494
- push {lr}
- ldr r0, =gMapHeader
- ldrb r1, [r0, 0x15]
- cmp r1, 0
- bne _080854B0
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- adds r0, 0x30
- strb r1, [r0]
- b _080854DE
- .pool
-_080854B0:
- ldr r0, =0x00000888
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- beq _080854D0
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- adds r0, 0x30
- movs r1, 0x1
- strb r1, [r0]
- b _080854DE
- .pool
-_080854D0:
- ldr r0, =gSaveBlock1Ptr
- ldr r1, [r0]
- ldr r0, =gUnknown_0854FE78
- ldr r0, [r0]
- subs r0, 0x1
- adds r1, 0x30
- strb r0, [r1]
-_080854DE:
- pop {r0}
- bx r0
- .pool
- thumb_func_end update_sav1_flash_used_on_map
-
- thumb_func_start Overworld_SetFlashLevel
-Overworld_SetFlashLevel: @ 80854EC
- push {lr}
- adds r1, r0, 0
- cmp r1, 0
- blt _080854FC
- ldr r0, =gUnknown_0854FE78
- ldr r0, [r0]
- cmp r1, r0
- ble _080854FE
-_080854FC:
- movs r1, 0
-_080854FE:
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- adds r0, 0x30
- strb r1, [r0]
- pop {r0}
- bx r0
- .pool
- thumb_func_end Overworld_SetFlashLevel
-
- thumb_func_start Overworld_GetFlashLevel
-Overworld_GetFlashLevel: @ 8085514
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- adds r0, 0x30
- ldrb r0, [r0]
- bx lr
- .pool
- thumb_func_end Overworld_GetFlashLevel
-
- thumb_func_start sub_8085524
-sub_8085524: @ 8085524
- push {lr}
- ldr r1, =gSaveBlock1Ptr
- ldr r1, [r1]
- strh r0, [r1, 0x32]
- bl get_mapdata_header
- ldr r1, =gMapHeader
- str r0, [r1]
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8085524
-
- thumb_func_start sub_8085540
-sub_8085540: @ 8085540
- ldr r1, =gUnknown_020322D8
- strb r0, [r1]
- bx lr
- .pool
- thumb_func_end sub_8085540
-
- thumb_func_start sub_808554C
-sub_808554C: @ 808554C
- ldr r0, =gUnknown_020322D8
- ldrb r0, [r0]
- bx lr
- .pool
- thumb_func_end sub_808554C
-
- thumb_func_start sub_8085558
-sub_8085558: @ 8085558
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, =0x0000088a
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- beq _080855AC
- movs r0, 0
- ldrsb r0, [r4, r0]
- cmp r0, 0
- bne _080855AC
- movs r0, 0x1
- ldrsb r0, [r4, r0]
- cmp r0, 0x5
- blt _08085584
- cmp r0, 0x8
- ble _0808559E
- cmp r0, 0x2B
- bgt _08085584
- cmp r0, 0x27
- bge _0808559E
-_08085584:
- ldr r0, =0x0000405e
- bl VarGet
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x3
- bls _080855AC
- movs r0, 0x1
- ldrsb r0, [r4, r0]
- cmp r0, 0x2E
- bgt _080855AC
- cmp r0, 0x2C
- blt _080855AC
-_0808559E:
- movs r0, 0x1
- b _080855AE
- .pool
-_080855AC:
- movs r0, 0
-_080855AE:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8085558
-
- thumb_func_start sub_80855B4
-sub_80855B4: @ 80855B4
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, =0x000040ca
- bl VarGet
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x1
- bne _080855D6
- movs r0, 0
- ldrsb r0, [r4, r0]
- cmp r0, 0
- bne _080855D6
- movs r0, 0x1
- ldrsb r0, [r4, r0]
- cmp r0, 0x7
- beq _080855E0
-_080855D6:
- movs r0, 0
- b _080855E2
- .pool
-_080855E0:
- movs r0, 0x1
-_080855E2:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80855B4
-
- thumb_func_start sub_80855E8
-sub_80855E8: @ 80855E8
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, =0x000040b3
- bl VarGet
- lsls r0, 16
- cmp r0, 0
- bne _08085606
- movs r0, 0
- ldrsb r0, [r4, r0]
- cmp r0, 0x20
- bne _08085606
- ldrb r0, [r4, 0x1]
- cmp r0, 0x1
- bls _08085610
-_08085606:
- movs r0, 0
- b _08085612
- .pool
-_08085610:
- movs r0, 0x1
-_08085612:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80855E8
-
- thumb_func_start sub_8085618
-sub_8085618: @ 8085618
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r4, =0x0000405d
- adds r0, r4, 0
- bl VarGet
- lsls r0, 16
- cmp r0, 0
- beq _0808564C
- adds r0, r4, 0
- bl VarGet
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x2
- bhi _0808564C
- movs r0, 0
- ldrsb r0, [r5, r0]
- cmp r0, 0xE
- bne _0808564C
- ldrb r0, [r5, 0x1]
- subs r0, 0x9
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bls _08085654
-_0808564C:
- movs r0, 0
- b _08085656
- .pool
-_08085654:
- movs r0, 0x1
-_08085656:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_8085618
-
- thumb_func_start warp_target_get_music
-warp_target_get_music: @ 808565C
- push {r4,lr}
- adds r4, r0, 0
- bl sub_80855B4
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x1
- bne _08085674
- ldr r0, =0x0000ffff
- b _080856CE
- .pool
-_08085674:
- adds r0, r4, 0
- bl sub_8085558
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x1
- bne _0808568C
- ldr r0, =0x000001bb
- b _080856CE
- .pool
-_0808568C:
- adds r0, r4, 0
- bl sub_8085618
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x1
- bne _080856A4
- ldr r0, =0x000001b9
- b _080856CE
- .pool
-_080856A4:
- adds r0, r4, 0
- bl sub_80855E8
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x1
- beq _080856CA
- movs r0, 0
- ldrsb r0, [r4, r0]
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x1
- ldrsb r1, [r4, r1]
- lsls r1, 16
- lsrs r1, 16
- bl get_mapheader_by_bank_and_number
- ldrh r0, [r0, 0x10]
- b _080856CE
-_080856CA:
- movs r0, 0xCB
- lsls r0, 1
-_080856CE:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end warp_target_get_music
-
- thumb_func_start sav1_map_get_music
-sav1_map_get_music: @ 80856D4
- push {r4,lr}
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldrh r1, [r0, 0x4]
- movs r0, 0xD0
- lsls r0, 5
- cmp r1, r0
- bne _080856FC
- bl GetSav1Weather
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x8
- bne _080856FC
- ldr r0, =0x00000199
- b _08085730
- .pool
-_080856FC:
- ldr r4, =gSaveBlock1Ptr
- ldr r0, [r4]
- adds r0, 0x4
- bl warp_target_get_music
- lsls r0, 16
- lsrs r1, r0, 16
- ldr r0, =0x00007fff
- cmp r1, r0
- beq _0808571C
- adds r0, r1, 0
- b _08085730
- .pool
-_0808571C:
- ldr r0, [r4]
- movs r1, 0
- ldrsh r0, [r0, r1]
- cmp r0, 0x17
- ble _0808572C
- movs r0, 0xC9
- lsls r0, 1
- b _08085730
-_0808572C:
- movs r0, 0xB4
- lsls r0, 1
-_08085730:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sav1_map_get_music
-
- thumb_func_start warp1_target_get_music
-warp1_target_get_music: @ 8085738
- push {lr}
- ldr r0, =gUnknown_020322E4
- bl warp_target_get_music
- lsls r0, 16
- lsrs r1, r0, 16
- ldr r0, =0x00007fff
- cmp r1, r0
- beq _08085758
- adds r0, r1, 0
- b _08085774
- .pool
-_08085758:
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldrh r1, [r0, 0x4]
- movs r0, 0x80
- lsls r0, 2
- cmp r1, r0
- beq _08085770
- subs r0, 0x6E
- b _08085774
- .pool
-_08085770:
- movs r0, 0xB4
- lsls r0, 1
-_08085774:
- pop {r1}
- bx r1
- thumb_func_end warp1_target_get_music
-
- thumb_func_start call_ResetMapMusic
-call_ResetMapMusic: @ 8085778
- push {lr}
- bl ResetMapMusic
- pop {r0}
- bx r0
- thumb_func_end call_ResetMapMusic
-
- thumb_func_start Overworld_PlaySpecialMapMusic
-Overworld_PlaySpecialMapMusic: @ 8085784
- push {r4,lr}
- bl sav1_map_get_music
- lsls r0, 16
- lsrs r4, r0, 16
- ldr r0, =0x000001bb
- cmp r4, r0
- beq _080857D6
- ldr r0, =0x0000ffff
- cmp r4, r0
- beq _080857D6
- ldr r0, =gSaveBlock1Ptr
- ldr r1, [r0]
- ldrh r0, [r1, 0x2C]
- cmp r0, 0
- beq _080857B4
- adds r4, r0, 0
- b _080857D6
- .pool
-_080857B4:
- bl sav1_map_get_light_level
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x5
- bne _080857C8
- ldr r4, =0x0000019b
- b _080857D6
- .pool
-_080857C8:
- movs r0, 0x8
- bl TestPlayerAvatarFlags
- lsls r0, 24
- cmp r0, 0
- beq _080857D6
- ldr r4, =0x0000016d
-_080857D6:
- bl GetCurrentMapMusic
- lsls r0, 16
- lsrs r0, 16
- cmp r4, r0
- beq _080857E8
- adds r0, r4, 0
- bl PlayNewMapMusic
-_080857E8:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end Overworld_PlaySpecialMapMusic
-
- thumb_func_start Overworld_SetSavedMusic
-Overworld_SetSavedMusic: @ 80857F4
- ldr r1, =gSaveBlock1Ptr
- ldr r1, [r1]
- strh r0, [r1, 0x2C]
- bx lr
- .pool
- thumb_func_end Overworld_SetSavedMusic
-
- thumb_func_start Overworld_ClearSavedMusic
-Overworld_ClearSavedMusic: @ 8085800
- ldr r0, =gSaveBlock1Ptr
- ldr r1, [r0]
- movs r0, 0
- strh r0, [r1, 0x2C]
- bx lr
- .pool
- thumb_func_end Overworld_ClearSavedMusic
-
- thumb_func_start sub_8085810
-sub_8085810: @ 8085810
- push {r4-r6,lr}
- ldr r0, =0x00004001
- bl FlagGet
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08085890
- bl warp1_target_get_music
- lsls r0, 16
- lsrs r4, r0, 16
- bl GetCurrentMapMusic
- lsls r0, 16
- lsrs r5, r0, 16
- ldr r0, =0x000001bb
- cmp r4, r0
- beq _08085856
- ldr r0, =0x0000ffff
- cmp r4, r0
- beq _08085856
- ldr r0, =0x0000019b
- cmp r5, r0
- beq _08085890
- ldr r6, =0x0000016d
- cmp r5, r6
- beq _08085890
- movs r0, 0x8
- bl TestPlayerAvatarFlags
- lsls r0, 24
- cmp r0, 0
- beq _08085856
- adds r4, r6, 0
-_08085856:
- cmp r4, r5
- beq _08085890
- movs r0, 0x6
- bl TestPlayerAvatarFlags
- lsls r0, 24
- cmp r0, 0
- beq _08085888
- adds r0, r4, 0
- movs r1, 0x4
- movs r2, 0x4
- bl FadeOutAndFadeInNewMapMusic
- b _08085890
- .pool
-_08085888:
- adds r0, r4, 0
- movs r1, 0x8
- bl FadeOutAndPlayNewMapMusic
-_08085890:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_8085810
-
- thumb_func_start Overworld_ChangeMusicToDefault
-Overworld_ChangeMusicToDefault: @ 8085898
- push {r4,lr}
- bl GetCurrentMapMusic
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- bl sav1_map_get_music
- lsls r0, 16
- lsrs r0, 16
- cmp r4, r0
- beq _080858BE
- bl sav1_map_get_music
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x8
- bl FadeOutAndPlayNewMapMusic
-_080858BE:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end Overworld_ChangeMusicToDefault
-
- thumb_func_start Overworld_ChangeMusicTo
-Overworld_ChangeMusicTo: @ 80858C4
- push {r4,lr}
- lsls r0, 16
- lsrs r4, r0, 16
- bl GetCurrentMapMusic
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, r4
- beq _080858E4
- ldr r0, =0x000001bb
- cmp r1, r0
- beq _080858E4
- adds r0, r4, 0
- movs r1, 0x8
- bl FadeOutAndPlayNewMapMusic
-_080858E4:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end Overworld_ChangeMusicTo
-
- thumb_func_start is_warp1_light_level_8_or_9
-is_warp1_light_level_8_or_9: @ 80858F0
- push {lr}
- bl warp1_get_mapheader
- ldrb r0, [r0, 0x17]
- bl is_light_level_8_or_9
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08085908
- movs r0, 0x4
- b _0808590A
-_08085908:
- movs r0, 0x2
-_0808590A:
- pop {r1}
- bx r1
- thumb_func_end is_warp1_light_level_8_or_9
-
- thumb_func_start music_something
-music_something: @ 8085910
- push {r4,r5,lr}
- bl GetCurrentMapMusic
- lsls r0, 16
- lsrs r5, r0, 16
- bl warp1_target_get_music
- lsls r0, 16
- lsrs r4, r0, 16
- ldr r0, =0x00004001
- bl FlagGet
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0808597E
- bl GetCurrentMapMusic
- lsls r0, 16
- lsrs r0, 16
- cmp r4, r0
- beq _0808597E
- ldr r0, =0x0000016d
- cmp r5, r0
- bne _08085972
- ldr r0, =0x000040ca
- bl VarGet
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x2
- bne _08085972
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r1, =0x0000ffff
- ldrh r2, [r0, 0x4]
- movs r0, 0xE0
- lsls r0, 3
- cmp r2, r0
- bne _08085972
- ldr r3, =gUnknown_020322E4
- ldrh r0, [r3]
- ands r1, r0
- cmp r1, r2
- bne _08085972
- ldr r1, [r3, 0x4]
- ldr r0, =0x0035001d
- cmp r1, r0
- beq _0808597E
-_08085972:
- bl is_warp1_light_level_8_or_9
- lsls r0, 24
- lsrs r0, 24
- bl FadeOutMapMusic
-_0808597E:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end music_something
-
- thumb_func_start sub_80859A0
-sub_80859A0: @ 80859A0
- push {lr}
- bl IsNotWaitingForBGMStop
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- thumb_func_end sub_80859A0
-
- thumb_func_start sub_80859B0
-sub_80859B0: @ 80859B0
- push {lr}
- movs r0, 0x4
- bl FadeOutMapMusic
- pop {r0}
- bx r0
- thumb_func_end sub_80859B0
-
- thumb_func_start sub_80859BC
-sub_80859BC: @ 80859BC
- push {r4,lr}
- sub sp, 0x4
- mov r4, sp
- adds r4, 0x2
- mov r0, sp
- adds r1, r4, 0
- bl PlayerGetDestCoords
- ldr r0, =gUnknown_02032306
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _080859F0
- mov r0, sp
- movs r1, 0
- ldrsh r0, [r0, r1]
- movs r2, 0
- ldrsh r1, [r4, r2]
- bl MapGridGetMetatileBehaviorAt
- lsls r0, 24
- lsrs r0, 24
- bl MetatileBehavior_IsSurfableWaterOrUnderwater
- lsls r0, 24
- cmp r0, 0
- beq _08085A2C
-_080859F0:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x58
- bl __umodsi3
- adds r4, r0, 0
- adds r4, 0xD4
- lsls r4, 24
- lsrs r4, 24
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x1E
- bl __umodsi3
- adds r2, r0, 0
- adds r2, 0x32
- ldr r0, =gUnknown_02032304
- ldrh r0, [r0]
- lsls r4, 24
- asrs r4, 24
- lsls r2, 24
- asrs r2, 24
- adds r1, r4, 0
- movs r3, 0x1
- bl PlayCry2
-_08085A2C:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80859BC
-
- thumb_func_start wild_encounter_related
-wild_encounter_related: @ 8085A3C
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- adds r6, r0, 0
- adds r7, r1, 0
- movs r1, 0
- ldrsh r0, [r6, r1]
- cmp r0, 0x4
- bhi _08085B20
- lsls r0, 2
- ldr r1, =_08085A60
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_08085A60:
- .4byte _08085A74
- .4byte _08085A88
- .4byte _08085AA4
- .4byte _08085B0C
- .4byte _08085B20
-_08085A74:
- ldr r0, =gUnknown_02032304
- ldrh r0, [r0]
- cmp r0, 0
- bne _08085A84
- movs r0, 0x4
- b _08085B1E
- .pool
-_08085A84:
- movs r0, 0x1
- b _08085B1E
-_08085A88:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x96
- lsls r1, 4
- bl __umodsi3
- movs r1, 0x96
- lsls r1, 3
- adds r0, r1
- strh r0, [r7]
- movs r0, 0x3
- b _08085B1E
-_08085AA4:
- movs r0, 0x1
- mov r9, r0
- bl CalculatePlayerPartyCount
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- movs r5, 0
- b _08085ABC
-_08085AB6:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
-_08085ABC:
- cmp r5, r8
- bcs _08085AE4
- movs r0, 0x64
- muls r0, r5
- ldr r4, =gPlayerParty
- adds r0, r4
- movs r1, 0x6
- bl GetMonData
- cmp r0, 0
- bne _08085AB6
- adds r0, r4, 0
- bl GetMonAbility
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x44
- bne _08085AB6
- movs r1, 0x2
- mov r9, r1
-_08085AE4:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r4, 0x96
- lsls r4, 3
- adds r1, r4, 0
- bl __umodsi3
- lsls r0, 16
- lsrs r0, 16
- adds r0, r4
- mov r1, r9
- bl __divsi3
- strh r0, [r7]
- movs r0, 0x3
- b _08085B1E
- .pool
-_08085B0C:
- ldrh r0, [r7]
- subs r0, 0x1
- strh r0, [r7]
- lsls r0, 16
- cmp r0, 0
- bne _08085B20
- bl sub_80859BC
- movs r0, 0x2
-_08085B1E:
- strh r0, [r6]
-_08085B20:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end wild_encounter_related
-
- thumb_func_start sub_8085B2C
-sub_8085B2C: @ 8085B2C
- push {lr}
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldrh r1, [r0, 0x4]
- movs r0, 0xB4
- lsls r0, 6
- cmp r1, r0
- bne _08085B5C
- bl IsMirageIslandPresent
- lsls r0, 24
- cmp r0, 0
- bne _08085B5C
- ldr r1, =gUnknown_02032306
- movs r0, 0x1
- strb r0, [r1]
- bl GetLocalWaterMon
- b _08085B62
- .pool
-_08085B5C:
- ldr r0, =gUnknown_02032306
- bl GetLocalWildMon
-_08085B62:
- ldr r1, =gUnknown_02032304
- strh r0, [r1]
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8085B2C
-
- thumb_func_start get_map_light_level_by_bank_and_number
-@ int get_map_light_level_by_bank_and_number(int bank, int number)
-get_map_light_level_by_bank_and_number: @ 8085B74
- push {lr}
- lsls r0, 24
- asrs r0, 8
- lsrs r0, 16
- lsls r1, 24
- asrs r1, 8
- lsrs r1, 16
- bl get_mapheader_by_bank_and_number
- ldrb r0, [r0, 0x17]
- pop {r1}
- bx r1
- thumb_func_end get_map_light_level_by_bank_and_number
-
- thumb_func_start get_map_light_level_from_warp
-@ int get_map_light_level_from_warp(warpdata *warp)
-get_map_light_level_from_warp: @ 8085B8C
- push {lr}
- movs r2, 0
- ldrsb r2, [r0, r2]
- movs r1, 0x1
- ldrsb r1, [r0, r1]
- adds r0, r2, 0
- bl get_map_light_level_by_bank_and_number
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- thumb_func_end get_map_light_level_from_warp
-
- thumb_func_start sav1_map_get_light_level
-sav1_map_get_light_level: @ 8085BA4
- push {lr}
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- adds r0, 0x4
- bl get_map_light_level_from_warp
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .pool
- thumb_func_end sav1_map_get_light_level
-
- thumb_func_start get_map_light_from_warp0
-get_map_light_from_warp0: @ 8085BBC
- push {lr}
- ldr r0, =gUnknown_020322DC
- bl get_map_light_level_from_warp
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .pool
- thumb_func_end get_map_light_from_warp0
-
- thumb_func_start is_light_level_1_2_3_5_or_6
-is_light_level_1_2_3_5_or_6: @ 8085BD0
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x3
- beq _08085BEA
- cmp r0, 0x1
- beq _08085BEA
- cmp r0, 0x5
- beq _08085BEA
- cmp r0, 0x2
- beq _08085BEA
- cmp r0, 0x6
- bne _08085BEE
-_08085BEA:
- movs r0, 0x1
- b _08085BF0
-_08085BEE:
- movs r0, 0
-_08085BF0:
- pop {r1}
- bx r1
- thumb_func_end is_light_level_1_2_3_5_or_6
-
- thumb_func_start Overworld_MapTypeAllowsTeleportAndFly
-Overworld_MapTypeAllowsTeleportAndFly: @ 8085BF4
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x3
- beq _08085C0A
- cmp r0, 0x1
- beq _08085C0A
- cmp r0, 0x6
- beq _08085C0A
- cmp r0, 0x2
- bne _08085C0E
-_08085C0A:
- movs r0, 0x1
- b _08085C10
-_08085C0E:
- movs r0, 0
-_08085C10:
- pop {r1}
- bx r1
- thumb_func_end Overworld_MapTypeAllowsTeleportAndFly
-
- thumb_func_start is_light_level_8_or_9
-is_light_level_8_or_9: @ 8085C14
- push {lr}
- lsls r0, 24
- movs r1, 0xF8
- lsls r1, 24
- adds r0, r1
- lsrs r0, 24
- cmp r0, 0x1
- bls _08085C28
- movs r0, 0
- b _08085C2A
-_08085C28:
- movs r0, 0x1
-_08085C2A:
- pop {r1}
- bx r1
- thumb_func_end is_light_level_8_or_9
-
- thumb_func_start sav1_saved_warp2_map_get_name
-sav1_saved_warp2_map_get_name: @ 8085C30
- push {lr}
- ldr r0, =gSaveBlock1Ptr
- ldr r1, [r0]
- movs r0, 0x14
- ldrsb r0, [r1, r0]
- lsls r0, 16
- lsrs r0, 16
- ldrb r1, [r1, 0x15]
- lsls r1, 24
- asrs r1, 24
- lsls r1, 16
- lsrs r1, 16
- bl get_mapheader_by_bank_and_number
- ldrb r0, [r0, 0x14]
- pop {r1}
- bx r1
- .pool
- thumb_func_end sav1_saved_warp2_map_get_name
-
- thumb_func_start sav1_map_get_name
-sav1_map_get_name: @ 8085C58
- push {lr}
- ldr r0, =gSaveBlock1Ptr
- ldr r1, [r0]
- movs r0, 0x4
- ldrsb r0, [r1, r0]
- lsls r0, 16
- lsrs r0, 16
- ldrb r1, [r1, 0x5]
- lsls r1, 24
- asrs r1, 24
- lsls r1, 16
- lsrs r1, 16
- bl get_mapheader_by_bank_and_number
- ldrb r0, [r0, 0x14]
- pop {r1}
- bx r1
- .pool
- thumb_func_end sav1_map_get_name
-
- thumb_func_start GetCurrentMapBattleScene
-GetCurrentMapBattleScene: @ 8085C80
- push {lr}
- ldr r0, =gSaveBlock1Ptr
- ldr r1, [r0]
- movs r0, 0x4
- ldrsb r0, [r1, r0]
- lsls r0, 16
- lsrs r0, 16
- ldrb r1, [r1, 0x5]
- lsls r1, 24
- asrs r1, 24
- lsls r1, 16
- lsrs r1, 16
- bl get_mapheader_by_bank_and_number
- ldrb r0, [r0, 0x1B]
- pop {r1}
- bx r1
- .pool
- thumb_func_end GetCurrentMapBattleScene
-
- thumb_func_start overworld_bg_setup
-@ void overworld_bg_setup()
-overworld_bg_setup: @ 8085CA8
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- ldr r1, =gUnknown_08339DAC
- movs r0, 0
- movs r2, 0x4
- bl InitBgsFromTemplates
- movs r0, 0x1
- movs r1, 0x5
- movs r2, 0x1
- bl SetBgAttribute
- movs r0, 0x2
- movs r1, 0x5
- movs r2, 0x1
- bl SetBgAttribute
- movs r0, 0x3
- movs r1, 0x5
- movs r2, 0x1
- bl SetBgAttribute
- ldr r0, =gUnknown_03005DA0
- mov r8, r0
- movs r4, 0x80
- lsls r4, 4
- adds r0, r4, 0
- bl AllocZeroed
- mov r1, r8
- str r0, [r1]
- ldr r6, =gUnknown_03005D9C
- adds r0, r4, 0
- bl AllocZeroed
- str r0, [r6]
- ldr r5, =gUnknown_03005DA4
- adds r0, r4, 0
- bl AllocZeroed
- str r0, [r5]
- mov r0, r8
- ldr r1, [r0]
- movs r0, 0x1
- bl SetBgTilemapBuffer
- ldr r1, [r6]
- movs r0, 0x2
- bl SetBgTilemapBuffer
- ldr r1, [r5]
- movs r0, 0x3
- bl SetBgTilemapBuffer
- bl sub_81971D0
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end overworld_bg_setup
-
- thumb_func_start overworld_free_bg_tilemaps
-overworld_free_bg_tilemaps: @ 8085D34
- push {r4,lr}
- bl sub_81BE72C
- bl sub_81971F4
- ldr r4, =gUnknown_03005DA4
- ldr r0, [r4]
- cmp r0, 0
- beq _08085D4E
- bl Free
- movs r0, 0
- str r0, [r4]
-_08085D4E:
- ldr r4, =gUnknown_03005D9C
- ldr r0, [r4]
- cmp r0, 0
- beq _08085D5E
- bl Free
- movs r0, 0
- str r0, [r4]
-_08085D5E:
- ldr r4, =gUnknown_03005DA0
- ldr r0, [r4]
- cmp r0, 0
- beq _08085D6E
- bl Free
- movs r0, 0
- str r0, [r4]
-_08085D6E:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end overworld_free_bg_tilemaps
-
- thumb_func_start ResetSafariZoneFlag_
-ResetSafariZoneFlag_: @ 8085D80
- push {lr}
- bl ResetSafariZoneFlag
- pop {r0}
- bx r0
- thumb_func_end ResetSafariZoneFlag_
-
- thumb_func_start is_c1_link_related_active
-@ _BOOL4 is_c1_link_related_active()
-is_c1_link_related_active: @ 8085D8C
- push {lr}
- ldr r0, =gMain
- ldr r1, [r0]
- ldr r0, =c1_link_related
- cmp r1, r0
- beq _08085DA4
- movs r0, 0
- b _08085DA6
- .pool
-_08085DA4:
- movs r0, 0x1
-_08085DA6:
- pop {r1}
- bx r1
- thumb_func_end is_c1_link_related_active
-
- thumb_func_start c1_overworld_normal
-@ void c1_overworld_normal(int buttons_new, int buttons_held)
-c1_overworld_normal: @ 8085DAC
- push {r4-r6,lr}
- sub sp, 0x4
- lsls r0, 16
- lsrs r0, 16
- adds r5, r0, 0
- lsls r1, 16
- lsrs r1, 16
- adds r4, r1, 0
- bl sub_808B578
- mov r6, sp
- mov r0, sp
- bl sub_809BEDC
- mov r0, sp
- adds r1, r5, 0
- adds r2, r4, 0
- bl process_overworld_input
- bl ScriptContext2_IsEnabled
- lsls r0, 24
- cmp r0, 0
- bne _08085DFA
- mov r0, sp
- bl sub_809C014
- cmp r0, 0x1
- bne _08085DF0
- bl ScriptContext2_Enable
- bl HideMapNamePopUpWindow
- b _08085DFA
-_08085DF0:
- ldrb r0, [r6, 0x2]
- adds r1, r5, 0
- adds r2, r4, 0
- bl player_step
-_08085DFA:
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end c1_overworld_normal
-
- thumb_func_start c1_overworld
-c1_overworld: @ 8085E04
- push {lr}
- ldr r2, =gMain
- ldr r1, [r2, 0x4]
- ldr r0, =c2_overworld
- cmp r1, r0
- bne _08085E18
- ldrh r0, [r2, 0x2E]
- ldrh r1, [r2, 0x2C]
- bl c1_overworld_normal
-_08085E18:
- pop {r0}
- bx r0
- .pool
- thumb_func_end c1_overworld
-
- thumb_func_start OverworldBasic
-@ void OverworldBasic()
-OverworldBasic: @ 8085E24
- push {lr}
- bl ScriptContext2_RunScript
- bl RunTasks
- bl AnimateSprites
- bl CameraUpdate
- bl UpdateCameraPanning
- bl BuildOamBuffer
- bl UpdatePaletteFade
- bl sub_80A0A38
- bl do_scheduled_bg_tilemap_copies_to_vram
- pop {r0}
- bx r0
- thumb_func_end OverworldBasic
-
- thumb_func_start CB2_OverworldBasic
-CB2_OverworldBasic: @ 8085E50
- push {lr}
- bl OverworldBasic
- pop {r0}
- bx r0
- thumb_func_end CB2_OverworldBasic
-
- thumb_func_start c2_overworld
-c2_overworld: @ 8085E5C
- push {r4,lr}
- ldr r0, =gPaletteFade
- ldrb r0, [r0, 0x7]
- lsrs r0, 7
- adds r4, r0, 0
- cmp r4, 0
- beq _08085E70
- movs r0, 0
- bl SetVBlankCallback
-_08085E70:
- bl OverworldBasic
- cmp r4, 0
- beq _08085E7C
- bl SetFieldVBlankCallback
-_08085E7C:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end c2_overworld
-
- thumb_func_start set_callback1
-set_callback1: @ 8085E88
- ldr r1, =gMain
- str r0, [r1]
- bx lr
- .pool
- thumb_func_end set_callback1
-
- thumb_func_start sub_8085E94
-sub_8085E94: @ 8085E94
- ldr r1, =gUnknown_03000E0C
- str r0, [r1]
- bx lr
- .pool
- thumb_func_end sub_8085E94
-
- thumb_func_start map_post_load_hook_exec
-map_post_load_hook_exec: @ 8085EA0
- push {r4,lr}
- ldr r4, =gUnknown_03005DB0
- ldr r0, [r4]
- cmp r0, 0
- beq _08085ECC
- bl _call_via_r0
- lsls r0, 24
- cmp r0, 0
- bne _08085EBC
- movs r0, 0
- b _08085EEC
- .pool
-_08085EBC:
- movs r1, 0
- str r1, [r4]
- ldr r0, =gFieldCallback
- str r1, [r0]
- b _08085EEA
- .pool
-_08085ECC:
- ldr r0, =gFieldCallback
- ldr r0, [r0]
- cmp r0, 0
- beq _08085EE0
- bl _call_via_r0
- b _08085EE4
- .pool
-_08085EE0:
- bl mapldr_default
-_08085EE4:
- ldr r1, =gFieldCallback
- movs r0, 0
- str r0, [r1]
-_08085EEA:
- movs r0, 0x1
-_08085EEC:
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end map_post_load_hook_exec
-
- thumb_func_start CB2_NewGame
-CB2_NewGame: @ 8085EF8
- push {lr}
- bl sub_808631C
- bl StopMapMusic
- bl ResetSafariZoneFlag_
- bl NewGameInitData
- bl player_avatar_init_params_reset
- bl PlayTimeCounter_Start
- bl ScriptContext1_Init
- bl ScriptContext2_Disable
- ldr r1, =gFieldCallback
- ldr r0, =ExecuteTruckSequence
- str r0, [r1]
- ldr r1, =gUnknown_03005DB0
- movs r0, 0
- str r0, [r1]
- ldr r0, =gUnknown_030026F8
- bl do_load_map_stuff_loop
- bl SetFieldVBlankCallback
- ldr r0, =c1_overworld
- bl set_callback1
- ldr r0, =c2_overworld
- bl SetMainCallback2
- pop {r0}
- bx r0
- .pool
- thumb_func_end CB2_NewGame
-
- thumb_func_start CB2_WhiteOut
-CB2_WhiteOut: @ 8085F58
- push {lr}
- sub sp, 0x4
- ldr r1, =gMain
- movs r0, 0x87
- lsls r0, 3
- adds r1, r0
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x77
- bls _08085FB0
- bl sub_808631C
- bl StopMapMusic
- bl ResetSafariZoneFlag_
- bl sub_8084620
- bl player_avatar_init_params_reset
- bl ScriptContext1_Init
- bl ScriptContext2_Disable
- ldr r1, =gFieldCallback
- ldr r0, =sub_80AF3C8
- str r0, [r1]
- mov r1, sp
- movs r0, 0
- strb r0, [r1]
- mov r0, sp
- bl do_load_map_stuff_loop
- bl SetFieldVBlankCallback
- ldr r0, =c1_overworld
- bl set_callback1
- ldr r0, =c2_overworld
- bl SetMainCallback2
-_08085FB0:
- add sp, 0x4
- pop {r0}
- bx r0
- .pool
- thumb_func_end CB2_WhiteOut
-
- thumb_func_start c2_load_new_map
-c2_load_new_map: @ 8085FCC
- push {lr}
- bl sub_808631C
- bl ScriptContext1_Init
- bl ScriptContext2_Disable
- movs r0, 0
- bl set_callback1
- ldr r0, =c2_change_map
- bl SetMainCallback2
- ldr r1, =gMain
- ldr r0, =c2_load_new_map_2
- str r0, [r1, 0x8]
- pop {r0}
- bx r0
- .pool
- thumb_func_end c2_load_new_map
-
- thumb_func_start c2_load_new_map_2
-c2_load_new_map_2: @ 8085FFC
- push {lr}
- ldr r0, =gUnknown_030026F8
- bl do_load_map_stuff_loop
- bl SetFieldVBlankCallback
- ldr r0, =c1_overworld
- bl set_callback1
- ldr r0, =c2_overworld
- bl SetMainCallback2
- pop {r0}
- bx r0
- .pool
- thumb_func_end c2_load_new_map_2
-
- thumb_func_start sub_8086024
-sub_8086024: @ 8086024
- push {r4,lr}
- ldr r0, =gMain
- movs r1, 0x87
- lsls r1, 3
- adds r4, r0, r1
- ldrb r0, [r4]
- cmp r0, 0
- bne _08086046
- bl sub_808631C
- bl ScriptContext1_Init
- bl ScriptContext2_Disable
- movs r0, 0
- bl set_callback1
-_08086046:
- adds r0, r4, 0
- movs r1, 0x1
- bl load_map_stuff
- cmp r0, 0
- beq _08086062
- bl SetFieldVBlankCallback
- ldr r0, =c1_overworld
- bl set_callback1
- ldr r0, =c2_overworld
- bl SetMainCallback2
-_08086062:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8086024
-
- thumb_func_start sub_8086074
-sub_8086074: @ 8086074
- push {lr}
- bl sub_808631C
- ldr r0, =gFieldCallback
- ldr r1, =sub_80AF314
- str r1, [r0]
- ldr r0, =c2_80567AC
- bl SetMainCallback2
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8086074
-
- thumb_func_start c2_80567AC
-c2_80567AC: @ 8086098
- push {lr}
- ldr r0, =gUnknown_030026F8
- bl map_loading_iteration_3
- cmp r0, 0
- beq _080860B8
- bl SetFieldVBlankCallback
- ldr r0, =c1_link_related
- bl set_callback1
- bl sub_8086C2C
- ldr r0, =c2_overworld
- bl SetMainCallback2
-_080860B8:
- pop {r0}
- bx r0
- .pool
- thumb_func_end c2_80567AC
-
- thumb_func_start c2_exit_to_overworld_2_switch
-c2_exit_to_overworld_2_switch: @ 80860C8
- push {lr}
- bl is_c1_link_related_active
- cmp r0, 0x1
- bne _080860E0
- ldr r0, =c2_exit_to_overworld_2_link
- bl SetMainCallback2
- b _080860EA
- .pool
-_080860E0:
- bl sub_808631C
- ldr r0, =c2_exit_to_overworld_2_local
- bl SetMainCallback2
-_080860EA:
- pop {r0}
- bx r0
- .pool
- thumb_func_end c2_exit_to_overworld_2_switch
-
- thumb_func_start c2_exit_to_overworld_2_local
-c2_exit_to_overworld_2_local: @ 80860F4
- push {lr}
- ldr r0, =gUnknown_030026F8
- bl sub_8086638
- cmp r0, 0
- beq _0808610A
- bl SetFieldVBlankCallback
- ldr r0, =c2_overworld
- bl SetMainCallback2
-_0808610A:
- pop {r0}
- bx r0
- .pool
- thumb_func_end c2_exit_to_overworld_2_local
-
- thumb_func_start c2_exit_to_overworld_2_link
-c2_exit_to_overworld_2_link: @ 8086118
- push {lr}
- bl sub_8087598
- cmp r0, 0
- bne _08086132
- ldr r0, =gUnknown_030026F8
- bl map_loading_iteration_2_link
- cmp r0, 0
- beq _08086132
- ldr r0, =c2_overworld
- bl SetMainCallback2
-_08086132:
- pop {r0}
- bx r0
- .pool
- thumb_func_end c2_exit_to_overworld_2_link
-
- thumb_func_start c2_8056854
-c2_8056854: @ 8086140
- push {lr}
- bl sub_808631C
- bl StopMapMusic
- ldr r0, =c1_link_related
- bl set_callback1
- bl sub_8086C2C
- ldr r0, =gLinkVSyncDisabled
- ldrb r0, [r0]
- cmp r0, 0
- beq _08086174
- ldr r1, =gFieldCallback
- ldr r0, =sub_80AF314
- b _08086178
- .pool
-_08086174:
- ldr r1, =gFieldCallback
- ldr r0, =sub_80AF214
-_08086178:
- str r0, [r1]
- bl ScriptContext1_Init
- bl ScriptContext2_Disable
- bl c2_exit_to_overworld_2_switch
- pop {r0}
- bx r0
- .pool
- thumb_func_end c2_8056854
-
- thumb_func_start sub_8086194
-sub_8086194: @ 8086194
- push {lr}
- bl sub_808631C
- ldr r1, =gUnknown_03005DB0
- ldr r0, =sub_80AF6A4
- str r0, [r1]
- bl c2_exit_to_overworld_2_switch
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8086194
-
- thumb_func_start sub_80861B0
-sub_80861B0: @ 80861B0
- push {lr}
- bl sub_808631C
- ldr r1, =gFieldCallback
- ldr r0, =sub_80AF188
- str r0, [r1]
- bl c2_exit_to_overworld_2_switch
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80861B0
-
- thumb_func_start c2_exit_to_overworld_1_continue_scripts_restart_music
-c2_exit_to_overworld_1_continue_scripts_restart_music: @ 80861CC
- push {lr}
- bl sub_808631C
- ldr r1, =gFieldCallback
- ldr r0, =sub_80AF168
- str r0, [r1]
- bl c2_exit_to_overworld_2_switch
- pop {r0}
- bx r0
- .pool
- thumb_func_end c2_exit_to_overworld_1_continue_scripts_restart_music
-
- thumb_func_start sub_80861E8
-sub_80861E8: @ 80861E8
- push {lr}
- bl sub_808631C
- ldr r1, =gFieldCallback
- ldr r0, =sub_80AF3C8
- str r0, [r1]
- bl c2_exit_to_overworld_2_switch
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80861E8
-
- thumb_func_start sub_8086204
-sub_8086204: @ 8086204
- push {lr}
- ldr r0, =gMapHeader
- ldrb r1, [r0, 0x1A]
- movs r0, 0xF8
- ands r0, r1
- cmp r0, 0x8
- bne _08086222
- bl sub_80E909C
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08086222
- bl AddMapNamePopUpWindowTask
-_08086222:
- bl sub_80AF3C8
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8086204
-
- thumb_func_start sub_8086230
-sub_8086230: @ 8086230
- push {r4,lr}
- bl sub_808631C
- bl StopMapMusic
- bl ResetSafariZoneFlag_
- ldr r0, =gSaveFileStatus
- ldrh r0, [r0]
- cmp r0, 0xFF
- bne _0808624A
- bl sub_81A3908
-_0808624A:
- bl set_current_map_header_from_sav1
- bl set_warp2_warp3_to_neg_1
- bl GetCurrentTrainerHillMapId
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, =gMapHeader
- ldrh r1, [r0, 0x12]
- ldr r0, =0x00000169
- cmp r1, r0
- bne _08086278
- bl sub_81AA2F8
- b _0808628A
- .pool
-_08086278:
- cmp r4, 0
- beq _08086286
- cmp r4, 0x6
- beq _08086286
- bl sub_81D5F48
- b _0808628A
-_08086286:
- bl CopyFieldObjectTemplateCoordsToSav1
-_0808628A:
- bl UnfreezeMapObjects
- bl DoTimeBasedEvents
- bl sub_8084788
- ldr r0, =gMapHeader
- ldrh r1, [r0, 0x12]
- ldr r0, =0x00000169
- cmp r1, r0
- bne _080862B0
- movs r0, 0x1
- bl battle_pyramid_map_load_related
- b _080862BE
- .pool
-_080862B0:
- cmp r4, 0
- beq _080862BA
- bl trainer_hill_map_load_related
- b _080862BE
-_080862BA:
- bl sub_8087D74
-_080862BE:
- bl PlayTimeCounter_Start
- bl ScriptContext1_Init
- bl ScriptContext2_Disable
- bl sub_8195E10
- bl sav2_x1_query_bit1
- cmp r0, 0x1
- bne _080862F4
- bl sav2_x9_clear_bit1
- bl warp1_set_to_sav1w
- bl warp_in
- bl sub_80EDB44
- ldr r0, =c2_load_new_map
- bl SetMainCallback2
- b _08086308
- .pool
-_080862F4:
- bl sub_80EDB44
- ldr r0, =gFieldCallback
- ldr r1, =sub_8086204
- str r1, [r0]
- ldr r0, =c1_overworld
- bl set_callback1
- bl c2_exit_to_overworld_2_switch
-_08086308:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8086230
-
- thumb_func_start sub_808631C
-@ void sub_808631C()
-sub_808631C: @ 808631C
- push {r4,lr}
- bl warp0_in_pokecenter
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0808632E
- bl CloseLink
-_0808632E:
- ldr r0, =gLinkVSyncDisabled
- ldrb r0, [r0]
- cmp r0, 0
- beq _08086348
- movs r0, 0xC5
- bl EnableInterrupts
- movs r0, 0x2
- bl DisableInterrupts
- b _08086362
- .pool
-_08086348:
- ldr r4, =0x04000208
- ldrh r3, [r4]
- strh r0, [r4]
- ldr r2, =0x04000200
- ldrh r1, [r2]
- ldr r0, =0x0000fffd
- ands r0, r1
- strh r0, [r2]
- ldrh r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strh r0, [r2]
- strh r3, [r4]
-_08086362:
- movs r0, 0
- bl SetVBlankCallback
- movs r0, 0
- bl SetHBlankCallback
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_808631C
-
- thumb_func_start SetFieldVBlankCallback
-@ void SetFieldVBlankCallback()
-SetFieldVBlankCallback: @ 8086380
- push {lr}
- ldr r0, =VBlankCB_Field
- bl SetVBlankCallback
- pop {r0}
- bx r0
- .pool
- thumb_func_end SetFieldVBlankCallback
-
- thumb_func_start VBlankCB_Field
-VBlankCB_Field: @ 8086390
- push {lr}
- bl LoadOam
- bl ProcessSpriteCopyRequests
- bl ScanlineEffect_InitHBlankDmaTransfer
- bl FieldUpdateBgTilemapScroll
- bl TransferPlttBuffer
- bl TransferTilesetAnimsBuffer
- pop {r0}
- bx r0
- thumb_func_end VBlankCB_Field
-
- thumb_func_start sub_80863B0
-sub_80863B0: @ 80863B0
- push {lr}
- bl sub_81A9E6C
- lsls r0, 24
- cmp r0, 0
- beq _080863D4
- bl door_upload_tiles
- ldr r2, =gUnknown_08339DBC
- ldr r0, [r2]
- ldr r1, [r2, 0x4]
- ldr r2, [r2, 0x8]
- bl ScanlineEffect_SetParams
- b _080863F0
- .pool
-_080863D4:
- bl Overworld_GetFlashLevel
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- beq _080863F0
- bl sub_80B00E8
- ldr r2, =gUnknown_08339DBC
- ldr r0, [r2]
- ldr r1, [r2, 0x4]
- ldr r2, [r2, 0x8]
- bl ScanlineEffect_SetParams
-_080863F0:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80863B0
-
- thumb_func_start map_loading_iteration_3
-map_loading_iteration_3: @ 80863F8
- push {r4,lr}
- adds r4, r0, 0
- ldrb r0, [r4]
- cmp r0, 0xD
- bls _08086404
- b _08086512
-_08086404:
- lsls r0, 2
- ldr r1, =_08086414
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_08086414:
- .4byte _0808644C
- .4byte _08086462
- .4byte _0808646A
- .4byte _08086472
- .4byte _08086484
- .4byte _08086492
- .4byte _08086498
- .4byte _080864A8
- .4byte _080864B8
- .4byte _080864D4
- .4byte _080864DA
- .4byte _080864E0
- .4byte _080864FC
- .4byte _0808650E
-_0808644C:
- bl overworld_bg_setup
- bl ScriptContext1_Init
- bl ScriptContext2_Disable
- bl MoveSaveBlocks_ResetHeap_
- bl sub_80867D8
- b _08086506
-_08086462:
- movs r0, 0x1
- bl mli0_load_map
- b _08086506
-_0808646A:
- movs r0, 0x1
- bl sub_8086988
- b _08086506
-_08086472:
- bl sub_8086AE4
- bl sub_80869DC
- bl sub_8086B14
- bl sub_8086AAC
- b _08086506
-_08086484:
- bl sub_80863B0
- bl map_loading_lcd_reset
- bl sub_8197200
- b _08086506
-_08086492:
- bl move_tilemap_camera_to_upper_left_corner
- b _08086506
-_08086498:
- ldr r0, =gMapHeader
- ldr r0, [r0]
- bl copy_map_tileset1_to_vram
- b _08086506
- .pool
-_080864A8:
- ldr r0, =gMapHeader
- ldr r0, [r0]
- bl copy_map_tileset2_to_vram
- b _08086506
- .pool
-_080864B8:
- bl free_temp_tile_data_buffers_if_possible
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08086512
- ldr r0, =gMapHeader
- ldr r0, [r0]
- bl apply_map_tileset1_tileset2_palette
- b _08086506
- .pool
-_080864D4:
- bl DrawWholeMapView
- b _08086506
-_080864DA:
- bl cur_mapheader_run_tileset_funcs_after_some_cpuset
- b _08086506
-_080864E0:
- ldr r0, =gLinkVSyncDisabled
- ldrb r0, [r0]
- cmp r0, 0
- beq _08086506
- bl sub_800E0E8
- movs r0, 0
- movs r1, 0
- bl sub_800DFB4
- b _08086506
- .pool
-_080864FC:
- bl map_post_load_hook_exec
- lsls r0, 24
- cmp r0, 0
- beq _08086512
-_08086506:
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- b _08086512
-_0808650E:
- movs r0, 0x1
- b _08086514
-_08086512:
- movs r0, 0
-_08086514:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end map_loading_iteration_3
-
- thumb_func_start load_map_stuff
-@ int load_map_stuff(u8 *a1, int a2)
-load_map_stuff: @ 808651C
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- ldrb r0, [r4]
- cmp r0, 0xD
- bls _0808652A
- b _0808662E
-_0808652A:
- lsls r0, 2
- ldr r1, =_08086538
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_08086538:
- .4byte _08086570
- .4byte _0808657C
- .4byte _08086586
- .4byte _0808658E
- .4byte _08086598
- .4byte _080865A6
- .4byte _080865AC
- .4byte _080865BC
- .4byte _080865CC
- .4byte _080865E8
- .4byte _080865EE
- .4byte _080865F4
- .4byte _08086618
- .4byte _0808662A
-_08086570:
- bl sub_808631C
- adds r0, r5, 0
- bl mli0_load_map
- b _08086622
-_0808657C:
- bl MoveSaveBlocks_ResetHeap_
- bl sub_80867D8
- b _08086622
-_08086586:
- adds r0, r5, 0
- bl sub_8086988
- b _08086622
-_0808658E:
- bl mli4_mapscripts_and_other
- bl sub_8086A80
- b _08086622
-_08086598:
- bl sub_80863B0
- bl map_loading_lcd_reset
- bl sub_8197200
- b _08086622
-_080865A6:
- bl move_tilemap_camera_to_upper_left_corner
- b _08086622
-_080865AC:
- ldr r0, =gMapHeader
- ldr r0, [r0]
- bl copy_map_tileset1_to_vram
- b _08086622
- .pool
-_080865BC:
- ldr r0, =gMapHeader
- ldr r0, [r0]
- bl copy_map_tileset2_to_vram
- b _08086622
- .pool
-_080865CC:
- bl free_temp_tile_data_buffers_if_possible
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0808662E
- ldr r0, =gMapHeader
- ldr r0, [r0]
- bl apply_map_tileset1_tileset2_palette
- b _08086622
- .pool
-_080865E8:
- bl DrawWholeMapView
- b _08086622
-_080865EE:
- bl cur_mapheader_run_tileset_funcs_after_some_cpuset
- b _08086622
-_080865F4:
- ldr r0, =gMapHeader
- ldrb r1, [r0, 0x1A]
- movs r0, 0xF8
- ands r0, r1
- cmp r0, 0x8
- bne _08086622
- bl sub_80E909C
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08086622
- bl AddMapNamePopUpWindowTask
- b _08086622
- .pool
-_08086618:
- bl map_post_load_hook_exec
- lsls r0, 24
- cmp r0, 0
- beq _0808662E
-_08086622:
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- b _0808662E
-_0808662A:
- movs r0, 0x1
- b _08086630
-_0808662E:
- movs r0, 0
-_08086630:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end load_map_stuff
-
- thumb_func_start sub_8086638
-sub_8086638: @ 8086638
- push {r4,lr}
- adds r4, r0, 0
- ldrb r0, [r4]
- cmp r0, 0x1
- beq _0808666E
- cmp r0, 0x1
- bgt _0808664C
- cmp r0, 0
- beq _08086656
- b _0808668E
-_0808664C:
- cmp r0, 0x2
- beq _08086678
- cmp r0, 0x3
- beq _0808668A
- b _0808668E
-_08086656:
- bl MoveSaveBlocks_ResetHeap_
- bl sub_80867D8
- movs r0, 0
- bl sub_8086988
- bl sub_8086A68
- bl sub_8086A80
- b _08086682
-_0808666E:
- bl sub_8086860
- bl sub_81D64C0
- b _08086682
-_08086678:
- bl map_post_load_hook_exec
- lsls r0, 24
- cmp r0, 0
- beq _0808668E
-_08086682:
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- b _0808668E
-_0808668A:
- movs r0, 0x1
- b _08086690
-_0808668E:
- movs r0, 0
-_08086690:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8086638
-
- thumb_func_start map_loading_iteration_2_link
-map_loading_iteration_2_link: @ 8086698
- push {r4,lr}
- adds r4, r0, 0
- ldrb r0, [r4]
- cmp r0, 0xD
- bls _080866A4
- b _080867A8
-_080866A4:
- lsls r0, 2
- ldr r1, =_080866B4
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_080866B4:
- .4byte _080866EC
- .4byte _080866FA
- .4byte _08086702
- .4byte _08086710
- .4byte _0808671E
- .4byte _08086724
- .4byte _08086734
- .4byte _08086744
- .4byte _08086760
- .4byte _08086766
- .4byte _08086792
- .4byte _0808676C
- .4byte _08086788
- .4byte _0808679A
-_080866EC:
- bl sub_808631C
- bl MoveSaveBlocks_ResetHeap_
- bl sub_80867D8
- b _08086792
-_080866FA:
- movs r0, 0x1
- bl sub_8086988
- b _08086792
-_08086702:
- bl sub_8086B9C
- bl sub_8086A68
- bl sub_8086AC8
- b _08086792
-_08086710:
- bl sub_80863B0
- bl map_loading_lcd_reset
- bl sub_8197200
- b _08086792
-_0808671E:
- bl move_tilemap_camera_to_upper_left_corner
- b _08086792
-_08086724:
- ldr r0, =gMapHeader
- ldr r0, [r0]
- bl copy_map_tileset1_to_vram
- b _08086792
- .pool
-_08086734:
- ldr r0, =gMapHeader
- ldr r0, [r0]
- bl copy_map_tileset2_to_vram
- b _08086792
- .pool
-_08086744:
- bl free_temp_tile_data_buffers_if_possible
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _080867A8
- ldr r0, =gMapHeader
- ldr r0, [r0]
- bl apply_map_tileset1_tileset2_palette
- b _08086792
- .pool
-_08086760:
- bl DrawWholeMapView
- b _08086792
-_08086766:
- bl cur_mapheader_run_tileset_funcs_after_some_cpuset
- b _08086792
-_0808676C:
- ldr r0, =gLinkVSyncDisabled
- ldrb r0, [r0]
- cmp r0, 0
- beq _08086792
- bl sub_800E0E8
- movs r0, 0
- movs r1, 0
- bl sub_800DFB4
- b _08086792
- .pool
-_08086788:
- bl map_post_load_hook_exec
- lsls r0, 24
- cmp r0, 0
- beq _080867A8
-_08086792:
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- b _080867A8
-_0808679A:
- bl SetFieldVBlankCallback
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- movs r0, 0x1
- b _080867AA
-_080867A8:
- movs r0, 0
-_080867AA:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end map_loading_iteration_2_link
-
- thumb_func_start do_load_map_stuff_loop
-do_load_map_stuff_loop: @ 80867B0
- push {r4,lr}
- adds r4, r0, 0
-_080867B4:
- adds r0, r4, 0
- movs r1, 0
- bl load_map_stuff
- cmp r0, 0
- beq _080867B4
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end do_load_map_stuff_loop
-
- thumb_func_start MoveSaveBlocks_ResetHeap_
-MoveSaveBlocks_ResetHeap_: @ 80867C8
- push {lr}
- bl sub_81BE6AC
- bl MoveSaveBlocks_ResetHeap
- pop {r0}
- bx r0
- thumb_func_end MoveSaveBlocks_ResetHeap_
-
- thumb_func_start sub_80867D8
-sub_80867D8: @ 80867D8
- push {r4-r7,lr}
- sub sp, 0x4
- movs r0, 0
- movs r1, 0
- bl SetGpuReg
- bl ScanlineEffect_Stop
- ldr r2, =0x05000002
- mov r1, sp
- movs r0, 0
- strh r0, [r1]
- ldr r1, =0x040000d4
- mov r0, sp
- str r0, [r1]
- str r2, [r1, 0x4]
- ldr r0, =0x810001ff
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- movs r2, 0xC0
- lsls r2, 19
- movs r3, 0xC0
- lsls r3, 9
- mov r4, sp
- movs r6, 0
- movs r5, 0x80
- lsls r5, 5
- ldr r7, =0x81000800
- movs r0, 0x81
- lsls r0, 24
- mov r12, r0
-_08086816:
- strh r6, [r4]
- mov r0, sp
- str r0, [r1]
- str r2, [r1, 0x4]
- str r7, [r1, 0x8]
- ldr r0, [r1, 0x8]
- adds r2, r5
- subs r3, r5
- cmp r3, r5
- bhi _08086816
- strh r6, [r4]
- mov r0, sp
- str r0, [r1]
- str r2, [r1, 0x4]
- lsrs r0, r3, 1
- mov r2, r12
- orrs r0, r2
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- movs r0, 0
- movs r1, 0x80
- bl ResetOamRange
- bl LoadOam
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80867D8
-
- thumb_func_start sub_8086860
-sub_8086860: @ 8086860
- push {lr}
- bl sub_80863B0
- bl map_loading_lcd_reset
- bl sub_8197200
- bl mapdata_load_assets_to_gpu_and_full_redraw
- pop {r0}
- bx r0
- thumb_func_end sub_8086860
-
- thumb_func_start map_loading_lcd_reset
-map_loading_lcd_reset: @ 8086878
- push {r4,lr}
- bl clear_scheduled_bg_copies_to_vram
- bl reset_temp_tile_data_buffers
- movs r0, 0x4C
- movs r1, 0
- bl SetGpuReg
- ldr r1, =0x00001f1f
- movs r0, 0x48
- bl SetGpuReg
- ldr r1, =0x00000101
- movs r0, 0x4A
- bl SetGpuReg
- movs r0, 0x40
- movs r1, 0xFF
- bl SetGpuReg
- movs r0, 0x44
- movs r1, 0xFF
- bl SetGpuReg
- ldr r4, =0x0000ffff
- movs r0, 0x42
- adds r1, r4, 0
- bl SetGpuReg
- movs r0, 0x46
- adds r1, r4, 0
- bl SetGpuReg
- ldr r0, =gUnknown_82EC7C4
- ldrh r1, [r0, 0x2]
- ldrh r2, [r0, 0x4]
- orrs r1, r2
- ldrh r0, [r0, 0x6]
- orrs r1, r0
- movs r2, 0x82
- lsls r2, 5
- adds r0, r2, 0
- orrs r1, r0
- movs r0, 0x50
- bl SetGpuReg
- ldr r1, =0x0000070d
- movs r0, 0x52
- bl SetGpuReg
- bl overworld_bg_setup
- movs r0, 0x1
- bl schedule_bg_copy_tilemap_to_vram
- movs r0, 0x2
- bl schedule_bg_copy_tilemap_to_vram
- movs r0, 0x3
- bl schedule_bg_copy_tilemap_to_vram
- movs r0, 0
- movs r1, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- movs r0, 0x1
- movs r1, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0x1
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- movs r0, 0x2
- movs r1, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0x2
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- movs r0, 0x3
- movs r1, 0
- movs r2, 0
- bl ChangeBgX
- movs r0, 0x3
- movs r1, 0
- movs r2, 0
- bl ChangeBgY
- ldr r1, =0x00007060
- movs r0, 0
- bl SetGpuReg
- movs r0, 0
- bl ShowBg
- movs r0, 0x1
- bl ShowBg
- movs r0, 0x2
- bl ShowBg
- movs r0, 0x3
- bl ShowBg
- bl sub_8098128
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end map_loading_lcd_reset
-
- thumb_func_start sub_8086988
-sub_8086988: @ 8086988
- push {r4,lr}
- adds r4, r0, 0
- bl ResetTasks
- bl ResetSpriteData
- bl ResetPaletteFade
- bl ScanlineEffect_Clear
- bl dp13_810BB8C
- bl ResetCameraUpdateInfo
- bl InstallCameraPanAheadCallback
- cmp r4, 0
- bne _080869B4
- movs r0, 0
- bl npc_paltag_set_load
- b _080869BA
-_080869B4:
- movs r0, 0x1
- bl npc_paltag_set_load
-_080869BA:
- bl FieldEffectActiveListClear
- bl sub_80AAFA4
- bl sub_80AEE84
- cmp r4, 0
- bne _080869CE
- bl overworld_ensure_per_step_coros_running
-_080869CE:
- bl mapheader_run_script_with_tag_x5
- bl sub_81BE6B8
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8086988
-
- thumb_func_start sub_80869DC
-sub_80869DC: @ 80869DC
- push {lr}
- ldr r0, =gUnknown_03005DEC
- movs r1, 0
- strh r1, [r0]
- ldr r0, =gUnknown_03005DE8
- strh r1, [r0]
- bl sub_808D438
- movs r0, 0
- movs r1, 0
- bl SpawnFieldObjectsInView
- bl mapheader_run_first_tag4_script_list_match
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80869DC
-
- thumb_func_start mli4_mapscripts_and_other
-mli4_mapscripts_and_other: @ 8086A04
- push {r4,r5,lr}
- sub sp, 0x4
- ldr r0, =gUnknown_03005DEC
- movs r1, 0
- strh r1, [r0]
- ldr r0, =gUnknown_03005DE8
- strh r1, [r0]
- bl sub_808D438
- mov r4, sp
- adds r4, 0x2
- mov r0, sp
- adds r1, r4, 0
- bl sav1_camera_get_focus_coords
- bl sub_80852D4
- adds r5, r0, 0
- mov r0, sp
- movs r1, 0
- ldrsh r0, [r0, r1]
- movs r2, 0
- ldrsh r1, [r4, r2]
- ldrb r2, [r5, 0x1]
- ldr r3, =gSaveBlock2Ptr
- ldr r3, [r3]
- ldrb r3, [r3, 0x8]
- bl InitPlayerAvatar
- ldrb r0, [r5]
- bl SetPlayerAvatarTransitionFlags
- bl player_avatar_init_params_reset
- movs r0, 0
- movs r1, 0
- bl SpawnFieldObjectsInView
- bl mapheader_run_first_tag4_script_list_match
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end mli4_mapscripts_and_other
-
- thumb_func_start sub_8086A68
-sub_8086A68: @ 8086A68
- push {lr}
- movs r0, 0
- movs r1, 0
- bl sub_808E16C
- bl sub_80FBED0
- bl mapheader_run_script_with_tag_x7
- pop {r0}
- bx r0
- thumb_func_end sub_8086A68
-
- thumb_func_start sub_8086A80
-sub_8086A80: @ 8086A80
- push {lr}
- ldr r2, =gMapObjects
- ldr r3, =gPlayerAvatar
- ldrb r1, [r3, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x1]
- movs r2, 0x80
- orrs r1, r2
- strb r1, [r0, 0x1]
- ldrb r0, [r3, 0x4]
- bl InitCameraUpdateCallback
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8086A80
-
- thumb_func_start sub_8086AAC
-sub_8086AAC: @ 8086AAC
- push {lr}
- ldr r0, =gUnknown_03005DB4
- ldrb r0, [r0]
- bl sub_8087858
- lsls r0, 24
- lsrs r0, 24
- bl InitCameraUpdateCallback
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8086AAC
-
- thumb_func_start sub_8086AC8
-sub_8086AC8: @ 8086AC8
- push {lr}
- ldr r0, =gUnknown_03005DB4
- ldrb r0, [r0]
- bl sub_8087858
- lsls r0, 24
- lsrs r0, 24
- bl InitCameraUpdateCallback
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8086AC8
-
- thumb_func_start sub_8086AE4
-sub_8086AE4: @ 8086AE4
- push {r4,lr}
- sub sp, 0x4
- mov r4, sp
- adds r4, 0x2
- mov r0, sp
- adds r1, r4, 0
- bl sav1_camera_get_focus_coords
- mov r2, sp
- ldr r0, =gUnknown_03005DB4
- ldrb r1, [r0]
- ldrh r0, [r2]
- adds r0, r1
- lsls r0, 16
- lsrs r0, 16
- ldrh r1, [r4]
- bl sub_8088B3C
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8086AE4
-
- thumb_func_start sub_8086B14
-sub_8086B14: @ 8086B14
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- mov r4, sp
- adds r4, 0x2
- mov r0, sp
- adds r1, r4, 0
- bl sav1_camera_get_focus_coords
- mov r3, sp
- mov r2, sp
- ldr r0, =gUnknown_03005DB4
- ldrb r1, [r0]
- ldrh r0, [r2]
- subs r0, r1
- strh r0, [r3]
- movs r6, 0
- ldr r0, =gUnknown_03005DB8
- mov r8, r4
- ldrb r0, [r0]
- cmp r6, r0
- bcs _08086B7E
- ldr r7, =gLinkPlayers
-_08086B44:
- lsls r5, r6, 24
- lsrs r5, 24
- mov r0, sp
- ldrh r1, [r0]
- adds r1, r6, r1
- lsls r1, 16
- asrs r1, 16
- mov r0, r8
- movs r3, 0
- ldrsh r2, [r0, r3]
- lsls r4, r6, 3
- subs r4, r6
- lsls r4, 2
- adds r4, r7
- ldrb r3, [r4, 0x13]
- adds r0, r5, 0
- bl sub_80876F0
- ldrb r1, [r4]
- adds r0, r5, 0
- bl sub_8087BCC
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- ldr r0, =gUnknown_03005DB8
- ldrb r0, [r0]
- cmp r6, r0
- bcc _08086B44
-_08086B7E:
- bl sub_8086C40
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8086B14
-
- thumb_func_start sub_8086B9C
-sub_8086B9C: @ 8086B9C
- push {r4,r5,lr}
- movs r4, 0
- ldr r0, =gUnknown_03005DB8
- ldrb r0, [r0]
- cmp r4, r0
- bcs _08086BCA
- ldr r5, =gLinkPlayers
-_08086BAA:
- lsls r0, r4, 24
- lsrs r0, 24
- lsls r1, r4, 3
- subs r1, r4
- lsls r1, 2
- adds r1, r5
- ldrb r1, [r1]
- bl sub_8087BCC
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- ldr r0, =gUnknown_03005DB8
- ldrb r0, [r0]
- cmp r4, r0
- bcc _08086BAA
-_08086BCA:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8086B9C
-
- thumb_func_start c1_link_related
-c1_link_related: @ 8086BD8
- push {r4,lr}
- ldr r0, =gLinkVSyncDisabled
- ldrb r0, [r0]
- cmp r0, 0
- beq _08086BF2
- bl sub_800F0B8
- cmp r0, 0
- beq _08086BF2
- bl sub_8009F3C
- cmp r0, 0
- bne _08086C14
-_08086BF2:
- ldr r0, =gUnknown_03005DB4
- ldrb r4, [r0]
- ldr r0, =gUnknown_03003020
- adds r1, r4, 0
- bl sub_8086F38
- ldr r0, =gUnknown_03000E14
- ldr r1, [r0]
- adds r0, r4, 0
- bl _call_via_r1
- lsls r0, 16
- lsrs r0, 16
- bl sub_8086FA0
- bl sub_8086C40
-_08086C14:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end c1_link_related
-
- thumb_func_start sub_8086C2C
-sub_8086C2C: @ 8086C2C
- push {lr}
- bl sub_8086C90
- ldr r0, =sub_80870B0
- bl c1_link_related_func_set
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8086C2C
-
- thumb_func_start sub_8086C40
-sub_8086C40: @ 8086C40
- push {lr}
- ldr r0, =gUnknown_03003020
- bl sub_808709C
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8086C40
-
- thumb_func_start c1_link_related_func_set
-c1_link_related_func_set: @ 8086C50
- ldr r2, =gUnknown_03000E19
- movs r1, 0
- strb r1, [r2]
- ldr r1, =gUnknown_03000E14
- str r0, [r1]
- bx lr
- .pool
- thumb_func_end c1_link_related_func_set
-
- thumb_func_start sub_8086C64
-sub_8086C64: @ 8086C64
- push {lr}
- ldr r0, =gLinkVSyncDisabled
- ldrb r0, [r0]
- cmp r0, 0
- beq _08086C82
- ldr r1, =gUnknown_03000E19
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x3C
- bls _08086C82
- bl sub_8010198
-_08086C82:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8086C64
-
- thumb_func_start sub_8086C90
-sub_8086C90: @ 8086C90
- push {lr}
- ldr r1, =gUnknown_03000E10
- movs r2, 0x80
- adds r0, r1, 0x3
-_08086C98:
- strb r2, [r0]
- subs r0, 0x1
- cmp r0, r1
- bge _08086C98
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8086C90
-
- thumb_func_start sub_8086CA8
-sub_8086CA8: @ 8086CA8
- push {r4,lr}
- lsls r0, 16
- lsrs r3, r0, 16
- ldr r0, =gUnknown_03005DB8
- ldrb r2, [r0]
- movs r1, 0
- cmp r1, r2
- bge _08086CD6
- ldr r4, =gUnknown_03000E10
-_08086CBA:
- adds r0, r1, r4
- ldrb r0, [r0]
- cmp r0, r3
- beq _08086CD0
- movs r0, 0
- b _08086CD8
- .pool
-_08086CD0:
- adds r1, 0x1
- cmp r1, r2
- blt _08086CBA
-_08086CD6:
- movs r0, 0x1
-_08086CD8:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8086CA8
-
- thumb_func_start sub_8086CE0
-sub_8086CE0: @ 8086CE0
- push {r4,lr}
- lsls r0, 16
- lsrs r3, r0, 16
- ldr r0, =gUnknown_03005DB8
- ldrb r2, [r0]
- movs r1, 0
- cmp r1, r2
- bge _08086D0E
- ldr r4, =gUnknown_03000E10
-_08086CF2:
- adds r0, r1, r4
- ldrb r0, [r0]
- cmp r0, r3
- bne _08086D08
- movs r0, 0x1
- b _08086D10
- .pool
-_08086D08:
- adds r1, 0x1
- cmp r1, r2
- blt _08086CF2
-_08086D0E:
- movs r0, 0
-_08086D10:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8086CE0
-
- thumb_func_start sub_8086D18
-sub_8086D18: @ 8086D18
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- adds r7, r0, 0
- adds r6, r2, 0
- mov r9, r3
- lsls r1, 16
- lsrs r1, 16
- mov r8, r1
- ldr r0, =gUnknown_03000E10
- adds r5, r7, r0
- ldrb r0, [r5]
- cmp r0, 0x80
- beq _08086D38
- b _08086EB2
-_08086D38:
- adds r0, r6, 0
- bl sub_8087370
- adds r4, r0, 0
- cmp r4, 0
- beq _08086D70
- bl sub_8087480
- mov r1, r9
- strh r0, [r1]
- movs r0, 0x81
- strb r0, [r5]
- ldrb r0, [r6, 0x1]
- cmp r0, 0
- bne _08086D58
- b _08086F26
-_08086D58:
- ldr r0, =sub_80870F8
- bl c1_link_related_func_set
- adds r0, r4, 0
- bl sub_8087530
- b _08086F26
- .pool
-_08086D70:
- movs r0, 0x83
- bl sub_8086CE0
- cmp r0, 0x1
- bne _08086D98
- movs r0, 0x81
- strb r0, [r5]
- ldrb r0, [r6, 0x1]
- cmp r0, 0
- bne _08086D86
- b _08086F26
-_08086D86:
- ldr r0, =sub_80870F8
- bl c1_link_related_func_set
- bl sub_8087584
- b _08086F26
- .pool
-_08086D98:
- mov r0, r8
- subs r0, 0x12
- cmp r0, 0xA
- bls _08086DA2
- b _08086EB2
-_08086DA2:
- lsls r0, 2
- ldr r1, =_08086DB0
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_08086DB0:
- .4byte _08086E08
- .4byte _08086EB2
- .4byte _08086EB2
- .4byte _08086EB2
- .4byte _08086EB2
- .4byte _08086EB2
- .4byte _08086DDC
- .4byte _08086E34
- .4byte _08086EB2
- .4byte _08086E64
- .4byte _08086E90
-_08086DDC:
- adds r0, r6, 0
- bl sub_8087358
- cmp r0, 0
- beq _08086EB2
- ldr r0, =gUnknown_03000E10
- adds r0, r7, r0
- movs r1, 0x81
- strb r1, [r0]
- ldrb r0, [r6, 0x1]
- cmp r0, 0
- beq _08086EB2
- ldr r0, =sub_80870F8
- bl c1_link_related_func_set
- bl sub_808751C
- b _08086EB2
- .pool
-_08086E08:
- adds r0, r6, 0
- bl sub_8087388
- cmp r0, 0x1
- bne _08086EB2
- ldr r0, =gUnknown_03000E10
- adds r0, r7, r0
- movs r1, 0x81
- strb r1, [r0]
- ldrb r0, [r6, 0x1]
- cmp r0, 0
- beq _08086EB2
- ldr r0, =sub_80870F8
- bl c1_link_related_func_set
- bl sub_808754C
- b _08086EB2
- .pool
-_08086E34:
- adds r0, r6, 0
- bl sub_80873B4
- adds r4, r0, 0
- cmp r4, 0
- beq _08086EB2
- ldr r0, =gUnknown_03000E10
- adds r0, r7, r0
- movs r1, 0x81
- strb r1, [r0]
- ldrb r0, [r6, 0x1]
- cmp r0, 0
- beq _08086EB2
- ldr r0, =sub_80870F8
- bl c1_link_related_func_set
- adds r0, r4, 0
- bl sub_8087568
- b _08086EB2
- .pool
-_08086E64:
- adds r0, r6, 0
- bl sub_8087340
- cmp r0, 0
- beq _08086EB2
- ldr r0, =gUnknown_03000E10
- adds r0, r7, r0
- movs r1, 0x81
- strb r1, [r0]
- ldrb r0, [r6, 0x1]
- cmp r0, 0
- beq _08086EB2
- ldr r0, =sub_808711C
- bl c1_link_related_func_set
- bl sub_8087510
- b _08086EB2
- .pool
-_08086E90:
- adds r0, r6, 0
- bl sub_8087340
- cmp r0, 0
- beq _08086EB2
- ldr r0, =gUnknown_03000E10
- adds r0, r7, r0
- movs r1, 0x81
- strb r1, [r0]
- ldrb r0, [r6, 0x1]
- cmp r0, 0
- beq _08086EB2
- ldr r0, =sub_8087140
- bl c1_link_related_func_set
- bl sub_8087510
-_08086EB2:
- mov r0, r8
- cmp r0, 0x17
- beq _08086ED8
- cmp r0, 0x17
- bgt _08086ECC
- cmp r0, 0x16
- beq _08086EE8
- b _08086F26
- .pool
-_08086ECC:
- mov r1, r8
- cmp r1, 0x1A
- beq _08086EF8
- cmp r1, 0x1D
- beq _08086F18
- b _08086F26
-_08086ED8:
- ldr r0, =gUnknown_03000E10
- adds r0, r7, r0
- movs r1, 0x83
- strb r1, [r0]
- b _08086F26
- .pool
-_08086EE8:
- ldr r0, =gUnknown_03000E10
- adds r0, r7, r0
- movs r1, 0x82
- strb r1, [r0]
- b _08086F26
- .pool
-_08086EF8:
- ldr r0, =gUnknown_03000E10
- adds r0, r7, r0
- movs r1, 0x80
- strb r1, [r0]
- ldrb r0, [r6, 0x1]
- cmp r0, 0
- beq _08086F26
- ldr r0, =sub_80870B0
- bl c1_link_related_func_set
- b _08086F26
- .pool
-_08086F18:
- ldr r0, =gUnknown_03000E10
- adds r1, r7, r0
- ldrb r0, [r1]
- cmp r0, 0x82
- bne _08086F26
- movs r0, 0x81
- strb r0, [r1]
-_08086F26:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8086D18
-
- thumb_func_start sub_8086F38
-sub_8086F38: @ 8086F38
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x14
- mov r8, r1
- movs r6, 0
- add r5, sp, 0x10
- mov r9, r5
- adds r7, r0, 0
-_08086F4C:
- ldrb r4, [r7]
- movs r0, 0
- strh r0, [r5]
- adds r0, r6, 0
- mov r1, r8
- mov r2, sp
- bl sub_80872D8
- adds r0, r6, 0
- adds r1, r4, 0
- mov r2, sp
- adds r3, r5, 0
- bl sub_8086D18
- ldr r0, =gUnknown_03000E10
- adds r0, r6, r0
- ldrb r0, [r0]
- cmp r0, 0x80
- bne _08086F7C
- adds r0, r4, 0
- bl sub_8087068
- mov r1, r9
- strh r0, [r1]
-_08086F7C:
- lsls r0, r6, 24
- lsrs r0, 24
- ldrb r1, [r5]
- bl sub_808796C
- adds r7, 0x2
- adds r6, 0x1
- cmp r6, 0x3
- ble _08086F4C
- add sp, 0x14
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8086F38
-
- thumb_func_start sub_8086FA0
-sub_8086FA0: @ 8086FA0
- push {r4,lr}
- lsls r0, 16
- lsrs r4, r0, 16
- ldr r1, =0xffef0000
- adds r0, r1
- lsrs r0, 16
- cmp r0, 0xC
- bhi _08086FC0
- ldr r0, =gUnknown_03005DA8
- strh r4, [r0]
- b _08086FC6
- .pool
-_08086FC0:
- ldr r1, =gUnknown_03005DA8
- movs r0, 0x11
- strh r0, [r1]
-_08086FC6:
- ldr r0, =gLinkVSyncDisabled
- ldrb r0, [r0]
- cmp r0, 0
- beq _08086FFC
- bl sub_8087690
- cmp r0, 0x1
- bls _08086FFC
- bl is_c1_link_related_active
- cmp r0, 0x1
- bne _08086FFC
- bl sub_8009F3C
- cmp r0, 0x1
- bne _08086FFC
- cmp r4, 0x11
- blt _08086FFC
- cmp r4, 0x15
- ble _08086FF6
- cmp r4, 0x19
- bgt _08086FFC
- cmp r4, 0x18
- blt _08086FFC
-_08086FF6:
- ldr r1, =gUnknown_03005DA8
- movs r0, 0
- strh r0, [r1]
-_08086FFC:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8086FA0
-
- thumb_func_start sub_808700C
-sub_808700C: @ 808700C
- push {lr}
- ldr r2, =gMain
- ldrh r1, [r2, 0x2C]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _08087024
- movs r0, 0x13
- b _08087064
- .pool
-_08087024:
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _08087030
- movs r0, 0x12
- b _08087064
-_08087030:
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _0808703C
- movs r0, 0x14
- b _08087064
-_0808703C:
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _08087048
- movs r0, 0x15
- b _08087064
-_08087048:
- ldrh r1, [r2, 0x2E]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _08087056
- movs r0, 0x18
- b _08087064
-_08087056:
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _08087062
- movs r0, 0x11
- b _08087064
-_08087062:
- movs r0, 0x19
-_08087064:
- pop {r1}
- bx r1
- thumb_func_end sub_808700C
-
- thumb_func_start sub_8087068
-sub_8087068: @ 8087068
- push {lr}
- lsls r0, 16
- lsrs r0, 16
- adds r1, r0, 0
- cmp r0, 0x13
- beq _0808708E
- cmp r0, 0x13
- bgt _0808707E
- cmp r0, 0x12
- beq _08087092
- b _08087096
-_0808707E:
- cmp r1, 0x14
- beq _0808708A
- cmp r1, 0x15
- bne _08087096
- movs r0, 0x4
- b _08087098
-_0808708A:
- movs r0, 0x3
- b _08087098
-_0808708E:
- movs r0, 0x1
- b _08087098
-_08087092:
- movs r0, 0x2
- b _08087098
-_08087096:
- movs r0, 0
-_08087098:
- pop {r1}
- bx r1
- thumb_func_end sub_8087068
-
- thumb_func_start sub_808709C
-sub_808709C: @ 808709C
- push {lr}
- movs r2, 0x11
- adds r1, r0, 0x6
-_080870A2:
- strh r2, [r1]
- subs r1, 0x2
- cmp r1, r0
- bge _080870A2
- pop {r0}
- bx r0
- thumb_func_end sub_808709C
-
- thumb_func_start sub_80870B0
-sub_80870B0: @ 80870B0
- push {r4,lr}
- adds r4, r0, 0
- bl ScriptContext2_IsEnabled
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080870C4
- movs r0, 0x11
- b _080870E6
-_080870C4:
- bl sub_800B4DC
- cmp r0, 0x4
- bls _080870D0
- movs r0, 0x1B
- b _080870E6
-_080870D0:
- bl sub_8087690
- cmp r0, 0x4
- bls _080870DC
- movs r0, 0x1C
- b _080870E6
-_080870DC:
- adds r0, r4, 0
- bl sub_808700C
- lsls r0, 16
- lsrs r0, 16
-_080870E6:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80870B0
-
- thumb_func_start sub_80870EC
-sub_80870EC: @ 80870EC
- push {lr}
- bl sub_8086C64
- movs r0, 0x11
- pop {r1}
- bx r1
- thumb_func_end sub_80870EC
-
- thumb_func_start sub_80870F8
-sub_80870F8: @ 80870F8
- push {r4,lr}
- bl ScriptContext2_IsEnabled
- lsls r0, 24
- lsrs r0, 24
- movs r4, 0x11
- cmp r0, 0x1
- beq _08087110
- movs r4, 0x1A
- ldr r0, =sub_80870EC
- bl c1_link_related_func_set
-_08087110:
- adds r0, r4, 0
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80870F8
-
- thumb_func_start sub_808711C
-sub_808711C: @ 808711C
- push {r4,lr}
- bl sub_800B4DC
- movs r4, 0x11
- cmp r0, 0x2
- bhi _08087134
- movs r4, 0x1A
- bl ScriptContext2_Disable
- ldr r0, =sub_80870EC
- bl c1_link_related_func_set
-_08087134:
- adds r0, r4, 0
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_808711C
-
- thumb_func_start sub_8087140
-sub_8087140: @ 8087140
- push {r4,lr}
- bl sub_8087690
- movs r4, 0x11
- cmp r0, 0x2
- bhi _08087158
- movs r4, 0x1A
- bl ScriptContext2_Disable
- ldr r0, =sub_80870EC
- bl c1_link_related_func_set
-_08087158:
- adds r0, r4, 0
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_8087140
-
- thumb_func_start sub_8087164
-sub_8087164: @ 8087164
- push {lr}
- bl sub_8086C64
- movs r0, 0x11
- pop {r1}
- bx r1
- thumb_func_end sub_8087164
-
- thumb_func_start sub_8087170
-sub_8087170: @ 8087170
- push {lr}
- ldr r1, =gUnknown_03000E10
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x82
- bne _080871A0
- ldr r0, =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _080871A4
- ldr r0, =sub_8087164
- bl c1_link_related_func_set
- movs r0, 0x1D
- b _080871A6
- .pool
-_080871A0:
- bl sub_8086C64
-_080871A4:
- movs r0, 0x11
-_080871A6:
- pop {r1}
- bx r1
- thumb_func_end sub_8087170
-
- thumb_func_start sub_80871AC
-sub_80871AC: @ 80871AC
- push {lr}
- ldr r0, =sub_8087170
- bl c1_link_related_func_set
- movs r0, 0x16
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80871AC
-
- thumb_func_start sub_80871C0
-sub_80871C0: @ 80871C0
- movs r0, 0x11
- bx lr
- thumb_func_end sub_80871C0
-
- thumb_func_start sub_80871C4
-sub_80871C4: @ 80871C4
- push {lr}
- ldr r1, =gUnknown_03000E10
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x83
- beq _080871D4
- bl sub_8086C64
-_080871D4:
- movs r0, 0x83
- bl sub_8086CA8
- cmp r0, 0x1
- bne _080871EA
- ldr r0, =gUnknown_08277513
- bl ScriptContext1_SetupScript
- ldr r0, =sub_80871C0
- bl c1_link_related_func_set
-_080871EA:
- movs r0, 0x11
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80871C4
-
- thumb_func_start sub_80871FC
-sub_80871FC: @ 80871FC
- push {lr}
- ldr r0, =sub_80871C4
- bl c1_link_related_func_set
- movs r0, 0x17
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80871FC
-
- thumb_func_start sub_8087210
-sub_8087210: @ 8087210
- movs r0, 0x11
- bx lr
- thumb_func_end sub_8087210
-
- thumb_func_start sub_8087214
-sub_8087214: @ 8087214
- push {lr}
- movs r0, 0x83
- bl sub_8086CE0
- cmp r0, 0x1
- beq _08087250
- ldr r0, =gUnknown_03000E14
- ldr r2, [r0]
- ldr r1, =sub_8087170
- adds r3, r0, 0
- cmp r2, r1
- bne _0808723A
- ldr r1, =gUnknown_03000E10
- ldr r0, =gUnknown_03005DB4
- ldrb r0, [r0]
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x82
- bne _08087272
-_0808723A:
- ldr r1, [r3]
- ldr r0, =sub_8087164
- cmp r1, r0
- bne _08087268
- ldr r1, =gUnknown_03000E10
- ldr r0, =gUnknown_03005DB4
- ldrb r0, [r0]
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x81
- bne _08087268
-_08087250:
- movs r0, 0x2
- b _08087278
- .pool
-_08087268:
- movs r0, 0x82
- bl sub_8086CA8
- cmp r0, 0
- bne _08087276
-_08087272:
- movs r0, 0
- b _08087278
-_08087276:
- movs r0, 0x1
-_08087278:
- pop {r1}
- bx r1
- thumb_func_end sub_8087214
-
- thumb_func_start sub_808727C
-sub_808727C: @ 808727C
- push {lr}
- movs r0, 0x83
- bl sub_8086CE0
- pop {r1}
- bx r1
- thumb_func_end sub_808727C
-
- thumb_func_start sub_8087288
-sub_8087288: @ 8087288
- push {lr}
- ldr r0, =sub_80871AC
- bl c1_link_related_func_set
- movs r0, 0
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_8087288
-
- thumb_func_start sub_808729C
-sub_808729C: @ 808729C
- push {lr}
- ldr r0, =sub_80870F8
- bl c1_link_related_func_set
- movs r0, 0
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_808729C
-
- thumb_func_start sub_80872B0
-sub_80872B0: @ 80872B0
- push {lr}
- ldr r0, =sub_80871FC
- bl c1_link_related_func_set
- movs r0, 0
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80872B0
-
- thumb_func_start sub_80872C4
-sub_80872C4: @ 80872C4
- push {lr}
- ldr r0, =sub_8087210
- bl c1_link_related_func_set
- movs r0, 0
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80872C4
-
- thumb_func_start sub_80872D8
-sub_80872D8: @ 80872D8
- push {r4-r6,lr}
- sub sp, 0x4
- adds r4, r0, 0
- adds r6, r2, 0
- strb r4, [r6]
- movs r0, 0
- cmp r4, r1
- bne _080872EA
- movs r0, 0x1
-_080872EA:
- strb r0, [r6, 0x1]
- ldr r1, =gLinkPlayerMapObjects
- lsls r0, r4, 2
- adds r0, r1
- ldrb r0, [r0, 0x3]
- strb r0, [r6, 0x2]
- lsls r4, 24
- lsrs r4, 24
- adds r0, r4, 0
- bl sub_80878A0
- strb r0, [r6, 0x3]
- mov r5, sp
- adds r5, 0x2
- adds r0, r4, 0
- mov r1, sp
- adds r2, r5, 0
- bl sub_8087878
- mov r0, sp
- ldrh r0, [r0]
- strh r0, [r6, 0x4]
- ldrh r0, [r5]
- strh r0, [r6, 0x6]
- adds r0, r4, 0
- bl sub_80878C0
- strb r0, [r6, 0x8]
- mov r0, sp
- movs r1, 0
- ldrsh r0, [r0, r1]
- movs r2, 0
- ldrsh r1, [r5, r2]
- bl MapGridGetMetatileBehaviorAt
- strh r0, [r6, 0xC]
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80872D8
-
- thumb_func_start sub_8087340
-sub_8087340: @ 8087340
- push {lr}
- ldrb r0, [r0, 0x2]
- cmp r0, 0x2
- beq _0808734C
- cmp r0, 0
- bne _08087350
-_0808734C:
- movs r0, 0x1
- b _08087352
-_08087350:
- movs r0, 0
-_08087352:
- pop {r1}
- bx r1
- thumb_func_end sub_8087340
-
- thumb_func_start sub_8087358
-sub_8087358: @ 8087358
- push {lr}
- ldrb r0, [r0, 0x2]
- cmp r0, 0x2
- beq _08087364
- cmp r0, 0
- bne _08087368
-_08087364:
- movs r0, 0x1
- b _0808736A
-_08087368:
- movs r0, 0
-_0808736A:
- pop {r1}
- bx r1
- thumb_func_end sub_8087358
-
- thumb_func_start sub_8087370
-sub_8087370: @ 8087370
- push {lr}
- adds r1, r0, 0
- ldrb r0, [r1, 0x2]
- cmp r0, 0x2
- bne _08087382
- adds r0, r1, 0x4
- bl sub_809D0F4
- b _08087384
-_08087382:
- movs r0, 0
-_08087384:
- pop {r1}
- bx r1
- thumb_func_end sub_8087370
-
- thumb_func_start sub_8087388
-sub_8087388: @ 8087388
- push {r4,lr}
- adds r4, r0, 0
- ldrb r0, [r4, 0x2]
- cmp r0, 0x2
- beq _08087396
- cmp r0, 0
- bne _080873AC
-_08087396:
- ldrb r0, [r4, 0xC]
- bl MetatileBehavior_IsSouthArrowWarp
- lsls r0, 24
- cmp r0, 0
- beq _080873AC
- ldrb r0, [r4, 0x3]
- cmp r0, 0x1
- bne _080873AC
- movs r0, 0x1
- b _080873AE
-_080873AC:
- movs r0, 0
-_080873AE:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8087388
-
- thumb_func_start sub_80873B4
-sub_80873B4: @ 80873B4
- push {r4,lr}
- sub sp, 0x8
- adds r4, r0, 0
- ldrb r0, [r4, 0x2]
- cmp r0, 0
- beq _080873C8
- cmp r0, 0x2
- beq _080873C8
- movs r0, 0
- b _08087476
-_080873C8:
- ldr r0, [r4, 0x4]
- ldr r1, [r4, 0x8]
- str r0, [sp]
- str r1, [sp, 0x4]
- ldr r3, =gUnknown_08339D64
- ldrb r0, [r4, 0x3]
- lsls r0, 3
- adds r0, r3
- ldr r0, [r0]
- mov r1, sp
- ldrh r1, [r1]
- adds r0, r1
- lsls r0, 16
- lsrs r0, 16
- ldr r1, =0xffff0000
- ldr r2, [sp]
- ands r2, r1
- orrs r2, r0
- str r2, [sp]
- asrs r1, r2, 16
- ldrb r0, [r4, 0x3]
- lsls r0, 3
- adds r3, 0x4
- adds r0, r3
- ldr r0, [r0]
- adds r0, r1
- lsls r0, 16
- ldr r1, =0x0000ffff
- ands r1, r2
- orrs r1, r0
- str r1, [sp]
- ldr r2, =0xffffff00
- ldr r0, [sp, 0x4]
- ands r0, r2
- str r0, [sp, 0x4]
- mov r0, sp
- movs r2, 0
- ldrsh r0, [r0, r2]
- asrs r1, 16
- bl sub_808790C
- lsls r0, 24
- lsrs r1, r0, 24
- adds r2, r1, 0
- cmp r1, 0x4
- beq _0808746C
- ldrb r0, [r4, 0x1]
- cmp r0, 0
- beq _08087434
- ldr r0, =gUnknown_03000E10
- adds r0, r1, r0
- ldrb r0, [r0]
- cmp r0, 0x80
- beq _08087450
-_08087434:
- ldr r0, =gUnknown_0827749C
- b _08087476
- .pool
-_08087450:
- adds r0, r2, 0
- bl sub_80B39D4
- cmp r0, 0
- bne _08087464
- ldr r0, =gUnknown_0827747E
- b _08087476
- .pool
-_08087464:
- ldr r0, =gUnknown_0827748D
- b _08087476
- .pool
-_0808746C:
- ldrb r1, [r4, 0xC]
- ldrb r2, [r4, 0x3]
- mov r0, sp
- bl sub_809C2C8
-_08087476:
- add sp, 0x8
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80873B4
-
- thumb_func_start sub_8087480
-sub_8087480: @ 8087480
- push {lr}
- adds r1, r0, 0
- ldr r0, =gUnknown_08277388
- cmp r1, r0
- beq _080874C6
- ldr r0, =gUnknown_082773A3
- cmp r1, r0
- beq _08087508
- ldr r0, =gUnknown_082773BE
- cmp r1, r0
- beq _080874C6
- ldr r0, =gUnknown_082773D9
- cmp r1, r0
- beq _08087508
- ldr r0, =gUnknown_0827741D
- cmp r1, r0
- beq _080874C6
- ldr r0, =gUnknown_08277432
- cmp r1, r0
- beq _08087508
- ldr r0, =gUnknown_08277447
- cmp r1, r0
- beq _080874C6
- ldr r0, =gUnknown_0827745C
- cmp r1, r0
- beq _08087508
- ldr r0, =gUnknown_08277374
- cmp r1, r0
- beq _080874C6
- ldr r0, =gUnknown_0827737E
- cmp r1, r0
- beq _08087508
- ldr r0, =gUnknown_082773F5
- cmp r1, r0
- bne _080874F8
-_080874C6:
- movs r0, 0xA
- b _0808750A
- .pool
-_080874F8:
- ldr r0, =gUnknown_082773FF
- cmp r1, r0
- beq _08087508
- movs r0, 0
- b _0808750A
- .pool
-_08087508:
- movs r0, 0x9
-_0808750A:
- pop {r1}
- bx r1
- thumb_func_end sub_8087480
-
- thumb_func_start sub_8087510
-sub_8087510: @ 8087510
- push {lr}
- bl ScriptContext2_Enable
- pop {r0}
- bx r0
- thumb_func_end sub_8087510
-
- thumb_func_start sub_808751C
-sub_808751C: @ 808751C
- push {lr}
- movs r0, 0x6
- bl PlaySE
- bl sub_809FA9C
- bl ScriptContext2_Enable
- pop {r0}
- bx r0
- thumb_func_end sub_808751C
-
- thumb_func_start sub_8087530
-sub_8087530: @ 8087530
- push {r4,lr}
- adds r4, r0, 0
- movs r0, 0x5
- bl PlaySE
- adds r0, r4, 0
- bl ScriptContext1_SetupScript
- bl ScriptContext2_Enable
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8087530
-
- thumb_func_start sub_808754C
-sub_808754C: @ 808754C
- push {lr}
- movs r0, 0x6
- bl PlaySE
- ldr r0, =gUnknown_082774EF
- bl ScriptContext1_SetupScript
- bl ScriptContext2_Enable
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_808754C
-
- thumb_func_start sub_8087568
-sub_8087568: @ 8087568
- push {r4,lr}
- adds r4, r0, 0
- movs r0, 0x5
- bl PlaySE
- adds r0, r4, 0
- bl ScriptContext1_SetupScript
- bl ScriptContext2_Enable
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8087568
-
- thumb_func_start sub_8087584
-sub_8087584: @ 8087584
- push {lr}
- ldr r0, =gUnknown_08277509
- bl ScriptContext1_SetupScript
- bl ScriptContext2_Enable
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8087584
-
- thumb_func_start sub_8087598
-sub_8087598: @ 8087598
- push {lr}
- bl is_c1_link_related_active
- cmp r0, 0
- bne _080875A6
- movs r0, 0
- b _080875C0
-_080875A6:
- bl sub_800B4DC
- cmp r0, 0x2
- bls _080875B8
- ldr r1, =gUnknown_03000E18
- movs r0, 0x1
- b _080875BC
- .pool
-_080875B8:
- ldr r1, =gUnknown_03000E18
- movs r0, 0
-_080875BC:
- strb r0, [r1]
- ldrb r0, [r1]
-_080875C0:
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_8087598
-
- thumb_func_start sub_80875C8
-sub_80875C8: @ 80875C8
- push {lr}
- bl sub_800B4DC
- cmp r0, 0x1
- bls _0808762C
- bl is_c1_link_related_active
- cmp r0, 0x1
- bne _0808762C
- bl sub_8009F3C
- cmp r0, 0x1
- bne _0808762C
- ldr r0, =gUnknown_03000E14
- ldr r1, [r0]
- ldr r0, =sub_808711C
- cmp r1, r0
- beq _08087614
- ldr r0, =sub_80870F8
- cmp r1, r0
- bne _0808762C
- ldr r0, =gUnknown_03000E18
- ldrb r2, [r0]
- movs r1, 0
- strb r1, [r0]
- cmp r2, 0x1
- beq _08087614
- ldr r2, =gPaletteFade
- ldrb r1, [r2, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0808762C
- ldrb r1, [r2, 0xA]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0808762C
-_08087614:
- movs r0, 0x1
- b _0808762E
- .pool
-_0808762C:
- movs r0, 0
-_0808762E:
- pop {r1}
- bx r1
- thumb_func_end sub_80875C8
-
- thumb_func_start sub_8087634
-sub_8087634: @ 8087634
- push {lr}
- bl sub_8087690
- cmp r0, 0x1
- bls _08087658
- bl is_c1_link_related_active
- cmp r0, 0x1
- bne _08087658
- bl sub_8009F3C
- cmp r0, 0x1
- bne _08087658
- ldr r0, =gUnknown_03000E14
- ldr r1, [r0]
- ldr r0, =sub_8087140
- cmp r1, r0
- beq _08087664
-_08087658:
- movs r0, 0
- b _08087666
- .pool
-_08087664:
- movs r0, 0x1
-_08087666:
- pop {r1}
- bx r1
- thumb_func_end sub_8087634
-
- thumb_func_start sub_808766C
-sub_808766C: @ 808766C
- push {lr}
- ldr r0, =gLinkVSyncDisabled
- ldrb r0, [r0]
- cmp r0, 0
- bne _08087688
- bl sub_8009F3C
- cmp r0, 0
- beq _08087688
- movs r0, 0x1
- b _0808768A
- .pool
-_08087688:
- movs r0, 0
-_0808768A:
- pop {r1}
- bx r1
- thumb_func_end sub_808766C
-
- thumb_func_start sub_8087690
-sub_8087690: @ 8087690
- push {lr}
- ldr r0, =gLinkVSyncDisabled
- ldrb r0, [r0]
- cmp r0, 0
- bne _080876B0
- ldr r0, =gUnknown_03003170
- ldr r1, =0x00000339
- adds r0, r1
- ldrb r0, [r0]
- b _080876B8
- .pool
-_080876B0:
- ldr r0, =gUnknown_03005000
- ldr r1, =0x00000c1a
- adds r0, r1
- ldrb r0, [r0]
-_080876B8:
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_8087690
-
- thumb_func_start sub_80876C4
-sub_80876C4: @ 80876C4
- movs r1, 0
- str r1, [r0]
- bx lr
- thumb_func_end sub_80876C4
-
- thumb_func_start strange_npc_table_clear
-strange_npc_table_clear: @ 80876CC
- push {lr}
- ldr r0, =gLinkPlayerMapObjects
- movs r1, 0
- movs r2, 0x10
- bl memset
- pop {r0}
- bx r0
- .pool
- thumb_func_end strange_npc_table_clear
-
- thumb_func_start sub_80876E0
-sub_80876E0: @ 80876E0
- push {lr}
- movs r1, 0
- movs r2, 0x24
- bl memset
- pop {r0}
- bx r0
- thumb_func_end sub_80876E0
-
- thumb_func_start sub_80876F0
-sub_80876F0: @ 80876F0
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- mov r9, r1
- mov r10, r2
- mov r8, r3
- lsls r0, 24
- lsrs r7, r0, 24
- mov r0, r9
- lsls r0, 16
- lsrs r0, 16
- mov r9, r0
- mov r1, r10
- lsls r1, 16
- lsrs r1, 16
- mov r10, r1
- mov r2, r8
- lsls r2, 24
- lsrs r2, 24
- mov r8, r2
- bl sub_808D4F4
- adds r6, r0, 0
- lsls r6, 24
- lsrs r6, 24
- lsls r4, r7, 2
- ldr r0, =gLinkPlayerMapObjects
- adds r4, r0
- lsls r5, r6, 3
- adds r5, r6
- lsls r5, 2
- ldr r0, =gMapObjects
- adds r5, r0
- adds r0, r4, 0
- bl sub_80876C4
- adds r0, r5, 0
- bl sub_80876E0
- movs r2, 0
- movs r1, 0x1
- movs r0, 0x1
- strb r0, [r4]
- strb r7, [r4, 0x1]
- strb r6, [r4, 0x2]
- strb r2, [r4, 0x3]
- ldrb r0, [r5]
- orrs r0, r1
- mov r2, r8
- ands r2, r1
- lsls r2, 1
- movs r1, 0x3
- negs r1, r1
- ands r0, r1
- orrs r0, r2
- strb r0, [r5]
- movs r0, 0x2
- strb r0, [r5, 0x19]
- movs r0, 0x40
- strb r0, [r5, 0x4]
- mov r0, r9
- lsls r0, 16
- asrs r0, 16
- mov r9, r0
- mov r1, r10
- lsls r1, 16
- asrs r1, 16
- mov r10, r1
- adds r0, r5, 0
- mov r1, r9
- mov r2, r10
- bl sub_808779C
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80876F0
-
- thumb_func_start sub_808779C
-sub_808779C: @ 808779C
- push {r4,lr}
- adds r4, r0, 0
- adds r0, r1, 0
- adds r1, r2, 0
- lsls r0, 16
- lsrs r0, 16
- lsls r1, 16
- lsrs r1, 16
- strh r0, [r4, 0x10]
- strh r1, [r4, 0x12]
- strh r0, [r4, 0x14]
- strh r1, [r4, 0x16]
- lsls r0, 16
- asrs r0, 16
- lsls r1, 16
- asrs r1, 16
- adds r2, r4, 0
- adds r2, 0xC
- adds r3, r4, 0
- adds r3, 0xE
- bl sub_8093038
- ldrh r0, [r4, 0xC]
- adds r0, 0x8
- strh r0, [r4, 0xC]
- adds r0, r4, 0
- bl FieldObjectUpdateZCoord
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_808779C
-
- thumb_func_start sub_80877DC
-sub_80877DC: @ 80877DC
- push {lr}
- lsls r0, 24
- lsls r1, 24
- lsrs r2, r1, 24
- ldr r1, =gLinkPlayerMapObjects
- lsrs r0, 22
- adds r1, r0, r1
- ldrb r0, [r1]
- cmp r0, 0
- beq _080877FE
- ldrb r0, [r1, 0x2]
- lsls r1, r0, 3
- adds r1, r0
- lsls r1, 2
- ldr r0, =gMapObjects
- adds r1, r0
- strb r2, [r1, 0x19]
-_080877FE:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80877DC
-
- thumb_func_start sub_808780C
-sub_808780C: @ 808780C
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 22
- ldr r1, =gLinkPlayerMapObjects
- adds r5, r0, r1
- ldrb r1, [r5, 0x2]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, =gMapObjects
- adds r4, r0, r1
- ldrb r0, [r4, 0x4]
- cmp r0, 0x40
- beq _08087838
- adds r1, r0, 0
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, =gSprites
- adds r0, r1
- bl DestroySprite
-_08087838:
- movs r0, 0
- strb r0, [r5]
- ldrb r1, [r4]
- subs r0, 0x2
- ands r0, r1
- strb r0, [r4]
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_808780C
-
- thumb_func_start sub_8087858
-sub_8087858: @ 8087858
- lsls r0, 24
- ldr r1, =gLinkPlayerMapObjects
- lsrs r0, 22
- adds r0, r1
- ldrb r1, [r0, 0x2]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, =gMapObjects
- adds r0, r1
- ldrb r0, [r0, 0x4]
- bx lr
- .pool
- thumb_func_end sub_8087858
-
- thumb_func_start sub_8087878
-sub_8087878: @ 8087878
- lsls r0, 24
- ldr r3, =gLinkPlayerMapObjects
- lsrs r0, 22
- adds r0, r3
- ldrb r3, [r0, 0x2]
- lsls r0, r3, 3
- adds r0, r3
- lsls r0, 2
- ldr r3, =gMapObjects
- adds r0, r3
- ldrh r3, [r0, 0x10]
- strh r3, [r1]
- ldrh r0, [r0, 0x12]
- strh r0, [r2]
- bx lr
- .pool
- thumb_func_end sub_8087878
-
- thumb_func_start sub_80878A0
-sub_80878A0: @ 80878A0
- lsls r0, 24
- ldr r1, =gLinkPlayerMapObjects
- lsrs r0, 22
- adds r0, r1
- ldrb r1, [r0, 0x2]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, =gMapObjects
- adds r0, r1
- ldrb r0, [r0, 0x19]
- bx lr
- .pool
- thumb_func_end sub_80878A0
-
- thumb_func_start sub_80878C0
-sub_80878C0: @ 80878C0
- lsls r0, 24
- ldr r1, =gLinkPlayerMapObjects
- lsrs r0, 22
- adds r0, r1
- ldrb r1, [r0, 0x2]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, =gMapObjects
- adds r0, r1
- ldrb r0, [r0, 0xB]
- lsls r0, 28
- lsrs r0, 28
- bx lr
- .pool
- thumb_func_end sub_80878C0
-
- thumb_func_start sub_80878E4
-sub_80878E4: @ 80878E4
- lsls r0, 24
- ldr r1, =gLinkPlayerMapObjects
- lsrs r0, 22
- adds r0, r1
- ldrb r1, [r0, 0x2]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, =gMapObjects
- adds r0, r1
- adds r0, 0x21
- movs r1, 0
- ldrsb r1, [r0, r1]
- movs r0, 0x10
- subs r0, r1
- bx lr
- .pool
- thumb_func_end sub_80878E4
-
- thumb_func_start sub_808790C
-sub_808790C: @ 808790C
- push {r4-r6,lr}
- movs r2, 0
- ldr r5, =gLinkPlayerMapObjects
- lsls r0, 16
- asrs r4, r0, 16
- lsls r1, 16
- asrs r3, r1, 16
-_0808791A:
- lsls r0, r2, 2
- adds r1, r0, r5
- ldrb r0, [r1]
- cmp r0, 0
- beq _08087958
- ldrb r0, [r1, 0x3]
- cmp r0, 0
- beq _0808792E
- cmp r0, 0x2
- bne _08087958
-_0808792E:
- ldrb r1, [r1, 0x2]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, =gMapObjects
- adds r1, r0, r1
- movs r6, 0x10
- ldrsh r0, [r1, r6]
- cmp r0, r4
- bne _08087958
- movs r6, 0x12
- ldrsh r0, [r1, r6]
- cmp r0, r3
- bne _08087958
- adds r0, r2, 0
- b _08087964
- .pool
-_08087958:
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x3
- bls _0808791A
- movs r0, 0x4
-_08087964:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_808790C
-
- thumb_func_start sub_808796C
-sub_808796C: @ 808796C
- push {r4-r6,lr}
- lsls r0, 24
- lsls r1, 24
- lsrs r3, r1, 24
- adds r2, r3, 0
- lsrs r0, 22
- ldr r1, =gLinkPlayerMapObjects
- adds r5, r0, r1
- ldrb r1, [r5, 0x2]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, =gMapObjects
- adds r6, r0, r1
- ldrb r0, [r5]
- cmp r0, 0
- beq _080879C8
- cmp r3, 0xA
- bls _080879A4
- ldrb r0, [r6]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r6]
- b _080879C8
- .pool
-_080879A4:
- ldr r4, =gUnknown_08339E00
- ldr r1, =gUnknown_08339DC8
- ldrb r0, [r5, 0x3]
- lsls r0, 2
- adds r0, r1
- ldr r3, [r0]
- adds r0, r5, 0
- adds r1, r6, 0
- bl _call_via_r3
- lsls r0, 24
- lsrs r0, 22
- adds r0, r4
- ldr r2, [r0]
- adds r0, r5, 0
- adds r1, r6, 0
- bl _call_via_r2
-_080879C8:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_808796C
-
- thumb_func_start sub_80879D8
-sub_80879D8: @ 80879D8
- push {r4,lr}
- lsls r2, 24
- lsrs r2, 24
- ldr r4, =gUnknown_08339DD4
- lsls r3, r2, 2
- adds r3, r4
- ldr r3, [r3]
- bl _call_via_r3
- lsls r0, 24
- lsrs r0, 24
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80879D8
-
- thumb_func_start sub_80879F8
-sub_80879F8: @ 80879F8
- movs r0, 0x1
- bx lr
- thumb_func_end sub_80879F8
-
- thumb_func_start sub_80879FC
-sub_80879FC: @ 80879FC
- push {r4,lr}
- lsls r2, 24
- lsrs r2, 24
- ldr r4, =gUnknown_08339DD4
- lsls r3, r2, 2
- adds r3, r4
- ldr r3, [r3]
- bl _call_via_r3
- lsls r0, 24
- lsrs r0, 24
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80879FC
-
- thumb_func_start sub_8087A1C
-sub_8087A1C: @ 8087A1C
- movs r0, 0
- bx lr
- thumb_func_end sub_8087A1C
-
- thumb_func_start sub_8087A20
-sub_8087A20: @ 8087A20
- push {r4-r6,lr}
- sub sp, 0x4
- adds r4, r0, 0
- adds r5, r1, 0
- lsls r0, r2, 24
- lsrs r0, 24
- ldrb r1, [r5, 0x19]
- bl npc_something3
- strb r0, [r5, 0x19]
- ldrb r1, [r5, 0x19]
- mov r6, sp
- adds r6, 0x2
- adds r0, r5, 0
- mov r2, sp
- adds r3, r6, 0
- bl FieldObjectMoveDestCoords
- ldrb r0, [r4, 0x2]
- ldrb r1, [r5, 0x19]
- mov r2, sp
- movs r3, 0
- ldrsh r2, [r2, r3]
- movs r4, 0
- ldrsh r3, [r6, r4]
- bl npc_080587EC
- lsls r0, 24
- cmp r0, 0
- bne _08087A7E
- adds r1, r5, 0
- adds r1, 0x21
- movs r0, 0x10
- strb r0, [r1]
- mov r0, sp
- movs r2, 0
- ldrsh r1, [r0, r2]
- movs r3, 0
- ldrsh r2, [r6, r3]
- adds r0, r5, 0
- bl npc_coords_shift
- adds r0, r5, 0
- bl FieldObjectUpdateZCoord
- movs r0, 0x1
- b _08087A80
-_08087A7E:
- movs r0, 0
-_08087A80:
- add sp, 0x4
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_8087A20
-
- thumb_func_start sub_8087A88
-sub_8087A88: @ 8087A88
- push {r4,lr}
- adds r4, r1, 0
- lsls r0, r2, 24
- lsrs r0, 24
- ldrb r1, [r4, 0x19]
- bl npc_something3
- strb r0, [r4, 0x19]
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8087A88
-
- thumb_func_start sub_8087AA0
-sub_8087AA0: @ 8087AA0
- movs r1, 0
- strb r1, [r0, 0x3]
- bx lr
- thumb_func_end sub_8087AA0
-
- thumb_func_start sub_8087AA8
-sub_8087AA8: @ 8087AA8
- push {r4-r6,lr}
- adds r6, r0, 0
- adds r4, r1, 0
- adds r5, r4, 0
- adds r5, 0x21
- ldrb r0, [r5]
- subs r0, 0x1
- strb r0, [r5]
- movs r0, 0x1
- strb r0, [r6, 0x3]
- ldrb r0, [r4, 0x19]
- adds r1, 0xC
- adds r2, r4, 0
- adds r2, 0xE
- bl MoveCoords
- ldrb r0, [r5]
- cmp r0, 0
- bne _08087AD8
- adds r0, r4, 0
- bl npc_coords_shift_still
- movs r0, 0x2
- strb r0, [r6, 0x3]
-_08087AD8:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_8087AA8
-
- thumb_func_start npc_something3
-npc_something3: @ 8087AE0
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r2, r1, 24
- subs r0, 0x1
- cmp r0, 0x9
- bhi _08087B38
- lsls r0, 2
- ldr r1, =_08087B00
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_08087B00:
- .4byte _08087B28
- .4byte _08087B2C
- .4byte _08087B30
- .4byte _08087B34
- .4byte _08087B38
- .4byte _08087B38
- .4byte _08087B28
- .4byte _08087B2C
- .4byte _08087B30
- .4byte _08087B34
-_08087B28:
- movs r0, 0x2
- b _08087B3A
-_08087B2C:
- movs r0, 0x1
- b _08087B3A
-_08087B30:
- movs r0, 0x3
- b _08087B3A
-_08087B34:
- movs r0, 0x4
- b _08087B3A
-_08087B38:
- adds r0, r2, 0
-_08087B3A:
- pop {r1}
- bx r1
- thumb_func_end npc_something3
-
- thumb_func_start npc_080587EC
-npc_080587EC: @ 8087B40
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- lsls r2, 16
- lsrs r2, 16
- mov r12, r2
- lsls r3, 16
- movs r4, 0
- ldr r0, =gMapObjects
- mov r9, r0
- lsrs r2, r3, 16
- mov r10, r2
- asrs r6, r3, 16
-_08087B64:
- mov r7, r12
- lsls r3, r7, 16
- mov r0, r10
- lsls r5, r0, 16
- cmp r4, r8
- beq _08087BA8
- lsls r0, r4, 3
- adds r0, r4
- lsls r0, 2
- mov r2, r9
- adds r1, r0, r2
- movs r7, 0x10
- ldrsh r0, [r1, r7]
- asrs r2, r3, 16
- cmp r0, r2
- bne _08087B8C
- movs r7, 0x12
- ldrsh r0, [r1, r7]
- cmp r0, r6
- beq _08087B9E
-_08087B8C:
- movs r7, 0x14
- ldrsh r0, [r1, r7]
- cmp r0, r2
- bne _08087BA8
- movs r0, 0x16
- ldrsh r1, [r1, r0]
- asrs r0, r5, 16
- cmp r1, r0
- bne _08087BA8
-_08087B9E:
- movs r0, 0x1
- b _08087BBE
- .pool
-_08087BA8:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0xF
- bls _08087B64
- asrs r0, r3, 16
- asrs r1, r5, 16
- bl MapGridIsImpassableAt
- lsls r0, 24
- lsrs r0, 24
-_08087BBE:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end npc_080587EC
-
- thumb_func_start sub_8087BCC
-sub_8087BCC: @ 8087BCC
- push {r4,r5,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r1, 24
- lsrs r3, r1, 24
- lsls r2, r5, 2
- ldr r0, =gLinkPlayerMapObjects
- adds r2, r0
- ldrb r1, [r2, 0x2]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, =gMapObjects
- adds r4, r0, r1
- ldrb r0, [r2]
- cmp r0, 0
- beq _08087C7A
- subs r0, r3, 0x1
- cmp r0, 0x4
- bhi _08087C56
- lsls r0, 2
- ldr r1, =_08087C0C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_08087C0C:
- .4byte _08087C2C
- .4byte _08087C2C
- .4byte _08087C38
- .4byte _08087C20
- .4byte _08087C20
-_08087C20:
- ldrb r0, [r4]
- lsls r0, 30
- lsrs r0, 31
- bl sub_808BD6C
- b _08087C44
-_08087C2C:
- ldrb r0, [r4]
- lsls r0, 30
- lsrs r0, 31
- bl sub_808BD7C
- b _08087C44
-_08087C38:
- ldrb r1, [r4]
- lsls r1, 30
- lsrs r1, 31
- movs r0, 0
- bl GetRivalAvatarGraphicsIdByStateIdAndGender
-_08087C44:
- lsls r0, 24
- lsrs r0, 24
- ldr r1, =sub_8087C8C
- movs r2, 0
- str r2, [sp]
- movs r3, 0
- bl AddPseudoFieldObject
- strb r0, [r4, 0x4]
-_08087C56:
- ldrb r1, [r4, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, =gSprites
- adds r0, r1
- adds r3, r0, 0
- adds r3, 0x3E
- ldrb r1, [r3]
- movs r2, 0x2
- orrs r1, r2
- strb r1, [r3]
- strh r5, [r0, 0x2E]
- ldrb r1, [r4]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- strb r0, [r4]
-_08087C7A:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8087BCC
-
- thumb_func_start sub_8087C8C
-sub_8087C8C: @ 8087C8C
- push {r4-r6,lr}
- adds r5, r0, 0
- movs r0, 0x2E
- ldrsh r4, [r5, r0]
- lsls r4, 2
- ldr r0, =gLinkPlayerMapObjects
- adds r4, r0
- ldrb r1, [r4, 0x2]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, =gMapObjects
- adds r6, r0, r1
- ldrh r0, [r6, 0xC]
- strh r0, [r5, 0x20]
- ldrh r0, [r6, 0xE]
- strh r0, [r5, 0x22]
- ldrb r0, [r6, 0xB]
- lsrs r0, 4
- adds r1, r5, 0
- movs r2, 0x1
- bl SetObjectSubpriorityByZCoord
- ldrb r0, [r6, 0xB]
- lsrs r0, 4
- bl ZCoordToPriority
- movs r1, 0x3
- ands r1, r0
- lsls r1, 2
- ldrb r2, [r5, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r5, 0x5]
- ldrb r0, [r4, 0x3]
- cmp r0, 0
- bne _08087CF8
- ldrb r0, [r6, 0x19]
- bl FieldObjectDirectionToImageAnimId
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r5, 0
- bl StartSpriteAnim
- b _08087D0A
- .pool
-_08087CF8:
- ldrb r0, [r6, 0x19]
- bl get_go_image_anim_num
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r5, 0
- bl StartSpriteAnimIfDifferent
-_08087D0A:
- adds r0, r5, 0
- movs r1, 0
- bl sub_80979D4
- ldrb r0, [r6]
- lsls r0, 29
- cmp r0, 0
- bge _08087D3C
- ldrh r0, [r5, 0x3C]
- movs r1, 0x4
- ands r1, r0
- lsls r1, 16
- adds r3, r5, 0
- adds r3, 0x3E
- lsrs r1, 18
- lsls r1, 2
- ldrb r2, [r3]
- movs r0, 0x5
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r3]
- ldrh r0, [r5, 0x3C]
- adds r0, 0x1
- strh r0, [r5, 0x3C]
-_08087D3C:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_8087C8C
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/party_menu.s b/asm/party_menu.s
index 991ad3623..4001b7144 100644
--- a/asm/party_menu.s
+++ b/asm/party_menu.s
@@ -410,7 +410,7 @@ _081B03A6:
b _081B048C
.pool
_081B03B8:
- bl sub_80D2F04
+ bl LoadMonIconPalettes
b _081B0484
_081B03BE:
bl party_menu_add_per_mon_objects
@@ -10032,7 +10032,7 @@ _081B557C:
asrs r1, 24
lsls r1, 16
lsrs r1, 16
- bl get_mapheader_by_bank_and_number
+ bl Overworld_GetMapHeaderByGroupAndId
adds r1, r0, 0
ldr r0, =gStringVar1
ldrb r1, [r1, 0x14]
@@ -10057,7 +10057,7 @@ _081B55B8:
asrs r1, 24
lsls r1, 16
lsrs r1, 16
- bl get_mapheader_by_bank_and_number
+ bl Overworld_GetMapHeaderByGroupAndId
adds r1, r0, 0
ldr r0, =gStringVar1
ldrb r1, [r1, 0x14]
@@ -10083,7 +10083,7 @@ _081B5614:
.pool
_081B5624:
ldr r1, =gUnknown_0203CEC8
- ldr r0, =c2_exit_to_overworld_2_switch
+ ldr r0, =CB2_ReturnToField
_081B5628:
str r0, [r1]
adds r0, r6, 0
@@ -10189,7 +10189,7 @@ _081B56F8:
b _081B572A
_081B56FE:
ldr r1, =gUnknown_0203CEC8
- ldr r0, =c2_exit_to_overworld_2_switch
+ ldr r0, =CB2_ReturnToField
str r0, [r1]
adds r0, r4, 0
bl sub_81B12C0
@@ -10231,7 +10231,7 @@ task_launch_hm_phase_2: @ 81B5750
push {r4,lr}
lsls r0, 24
lsrs r4, r0, 24
- bl sub_80ABDFC
+ bl IsWeatherNotFadingIn
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
@@ -10408,7 +10408,7 @@ sub_81B58A8: @ 81B58A8
str r0, [sp]
ldr r0, =sub_81B1370
str r0, [sp, 0x4]
- ldr r0, =sub_8086194
+ ldr r0, =CB2_ReturnToFieldWithOpenMenu
str r0, [sp, 0x8]
movs r0, 0
movs r1, 0
@@ -10793,7 +10793,7 @@ _081B5BD0:
sub_81B5BDC: @ 81B5BDC
push {r4,lr}
adds r4, r0, 0
- bl sub_80D30DC
+ bl UpdateMonIconFrame
lsls r0, 24
lsrs r0, 24
cmp r0, 0
@@ -10817,7 +10817,7 @@ _081B5C02:
thumb_func_start sub_81B5C08
sub_81B5C08: @ 81B5C08
push {lr}
- bl sub_80D30DC
+ bl UpdateMonIconFrame
pop {r0}
bx r0
thumb_func_end sub_81B5C08
@@ -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}
@@ -14836,7 +14836,7 @@ CB2_PartyMenuFromStartMenu: @ 81B7F34
str r0, [sp]
ldr r0, =sub_81B1370
str r0, [sp, 0x4]
- ldr r0, =sub_8086194
+ ldr r0, =CB2_ReturnToFieldWithOpenMenu
str r0, [sp, 0x8]
movs r0, 0
movs r1, 0
@@ -15368,7 +15368,7 @@ sub_81B83F0: @ 81B83F0
lsls r0, r1, 24
lsrs r0, 24
movs r1, 0x1
- bl sub_80D6E48
+ bl RemovePCItem
b _081B8418
.pool
_081B8410:
@@ -15413,7 +15413,7 @@ sub_81B8448: @ 81B8448
str r0, [sp]
ldr r0, =sub_81B1370
str r0, [sp, 0x4]
- ldr r0, =sub_816BB28
+ ldr r0, =Mailbox_ReturnToMailListAfterDeposit
str r0, [sp, 0x8]
movs r0, 0
movs r1, 0
@@ -15442,7 +15442,7 @@ sub_81B8474: @ 81B8474
movs r0, 0
strb r0, [r1]
ldr r2, =gSaveBlock1Ptr
- ldr r0, =gUnknown_0203BCB8
+ ldr r0, =playerPCItemPageInfo
ldrh r1, [r0]
adds r1, 0x6
ldrh r0, [r0, 0x2]
@@ -16021,7 +16021,7 @@ sub_81B892C: @ 81B892C
str r0, [sp]
ldr r0, =sub_81B1370
str r0, [sp, 0x4]
- ldr r0, =c2_exit_to_overworld_1_continue_scripts_restart_music
+ ldr r0, =CB2_ReturnToFieldContinueScript
str r0, [sp, 0x8]
movs r0, 0
movs r1, 0
@@ -16042,7 +16042,7 @@ sub_81B8958: @ 81B8958
str r0, [sp]
ldr r0, =sub_81B1370
str r0, [sp, 0x4]
- ldr r0, =c2_exit_to_overworld_1_continue_scripts_restart_music
+ ldr r0, =CB2_ReturnToFieldContinueScript
str r0, [sp, 0x8]
movs r0, 0xB
movs r1, 0
@@ -17283,7 +17283,7 @@ sub_81B9354: @ 81B9354
str r1, [sp]
ldr r1, =sub_81B1370
str r1, [sp, 0x4]
- ldr r1, =c2_exit_to_overworld_2_switch
+ ldr r1, =CB2_ReturnToField
str r1, [sp, 0x8]
movs r1, 0
movs r2, 0xB
@@ -17311,7 +17311,7 @@ _081B93A6:
ldr r0, =gUnknown_03005DB0
ldr r1, =hm_add_c3_without_phase_2
str r1, [r0]
- ldr r0, =c2_exit_to_overworld_2_switch
+ ldr r0, =CB2_ReturnToField
bl SetMainCallback2
pop {r4}
pop {r0}
@@ -17337,7 +17337,7 @@ task_hm_without_phase_2: @ 81B93E0
push {r4,lr}
lsls r0, 24
lsrs r4, r0, 24
- bl sub_80ABDFC
+ bl IsWeatherNotFadingIn
lsls r0, 24
cmp r0, 0
beq _081B93FE
@@ -17420,7 +17420,7 @@ _081B9486:
ldr r1, =gUnknown_03005DB0
ldr r0, =hm_add_c3_without_phase_2
str r0, [r1]
- ldr r0, =c2_exit_to_overworld_2_switch
+ ldr r0, =CB2_ReturnToField
bl SetMainCallback2
pop {r0}
bx r0
@@ -17556,7 +17556,7 @@ _081B95BA:
ldr r0, =gUnknown_03005DB0
ldr r1, =hm_add_c3_without_phase_2
str r1, [r0]
- ldr r0, =c2_exit_to_overworld_2_switch
+ ldr r0, =CB2_ReturnToField
bl SetMainCallback2
pop {r4,r5}
pop {r0}
@@ -17660,7 +17660,7 @@ sub_81B968C: @ 81B968C
subs r3, 0x1
lsls r3, 24
lsrs r3, 24
- ldr r0, =c2_exit_to_overworld_2_switch
+ ldr r0, =CB2_ReturnToField
str r0, [sp]
movs r0, 0x3
bl sub_81BF8EC
diff --git a/asm/player_pc.s b/asm/player_pc.s
deleted file mode 100644
index 1ae5b4d14..000000000
--- a/asm/player_pc.s
+++ /dev/null
@@ -1,3436 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start NewGameInitPCItems
-NewGameInitPCItems: @ 816ADF4
- push {r4-r6,lr}
- movs r4, 0
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- movs r1, 0x93
- lsls r1, 3
- adds r0, r1
- movs r1, 0x32
- bl ClearItemSlots
- ldr r1, =gUnknown_085DFEFC
- ldrh r0, [r1]
- cmp r0, 0
- beq _0816AE48
- ldrh r0, [r1, 0x2]
- cmp r0, 0
- beq _0816AE48
- adds r5, r1, 0
- adds r6, r5, 0x2
-_0816AE1A:
- lsls r1, r4, 2
- adds r0, r1, r5
- ldrh r0, [r0]
- adds r1, r6
- ldrh r1, [r1]
- bl AddPCItem
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0816AE48
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r1, r4, 2
- adds r0, r1, r5
- ldrh r0, [r0]
- cmp r0, 0
- beq _0816AE48
- adds r0, r1, r6
- ldrh r0, [r0]
- cmp r0, 0
- bne _0816AE1A
-_0816AE48:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end NewGameInitPCItems
-
- thumb_func_start sub_816AE58
-sub_816AE58: @ 816AE58
- push {lr}
- ldr r1, =gUnknown_0203BCB0
- ldr r0, =gUnknown_085DFED4
- str r0, [r1]
- ldr r1, =gUnknown_0203BCB4
- movs r0, 0x4
- strb r0, [r1]
- ldr r0, =TaskDummy
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r1, =gText_WhatWouldYouLike
- ldr r2, =sub_816AED8
- bl DisplayItemMessageOnField
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816AE58
-
- thumb_func_start sub_816AE98
-sub_816AE98: @ 816AE98
- push {lr}
- ldr r1, =gUnknown_0203BCB0
- ldr r0, =gUnknown_085DFED8
- str r0, [r1]
- ldr r1, =gUnknown_0203BCB4
- movs r0, 0x3
- strb r0, [r1]
- ldr r0, =TaskDummy
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r1, =gText_WhatWouldYouLike
- ldr r2, =sub_816AED8
- bl DisplayItemMessageOnField
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816AE98
-
- thumb_func_start sub_816AED8
-sub_816AED8: @ 816AED8
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x8
- 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
- ldr r0, =gUnknown_0203BCB4
- ldrb r1, [r0]
- mov r8, r0
- cmp r1, 0x3
- bne _0816AF0C
- ldr r0, =gUnknown_085DFF24
- ldr r1, [r0, 0x4]
- ldr r0, [r0]
- b _0816AF12
- .pool
-_0816AF0C:
- ldr r0, =gUnknown_085DFF24
- ldr r1, [r0, 0xC]
- ldr r0, [r0, 0x8]
-_0816AF12:
- str r0, [sp]
- str r1, [sp, 0x4]
- ldr r5, =gUnknown_085DFEB4
- ldr r4, =gUnknown_0203BCB0
- ldr r1, [r4]
- mov r0, r8
- ldrb r2, [r0]
- adds r0, r5, 0
- bl sub_81DB3D8
- lsls r0, 24
- ldr r2, =0x00ffffff
- ldr r1, [sp]
- ands r1, r2
- orrs r1, r0
- str r1, [sp]
- mov r0, sp
- bl AddWindow
- strh r0, [r6, 0x8]
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0
- bl SetStandardWindowBorderStyle
- ldrb r0, [r6, 0x8]
- mov r2, r8
- ldrb r1, [r2]
- ldr r3, [r4]
- adds r2, r5, 0
- bl sub_81995E4
- ldrb r0, [r6, 0x8]
- mov r2, r8
- ldrb r1, [r2]
- movs r2, 0
- bl InitMenuInUpperLeftCornerPlaySoundWhenAPressed
- movs r0, 0
- bl schedule_bg_copy_tilemap_to_vram
- ldr r1, =gTasks
- lsls r0, r7, 2
- adds r0, r7
- lsls r0, 3
- adds r0, r1
- ldr r1, =sub_816AF98
- str r1, [r0]
- add sp, 0x8
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816AED8
-
- thumb_func_start sub_816AF98
-sub_816AF98: @ 816AF98
- 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
- ldr r0, =gUnknown_0203BCB4
- ldrb r0, [r0]
- cmp r0, 0x3
- bls _0816AFC0
- bl ProcessMenuInput
- b _0816AFC4
- .pool
-_0816AFC0:
- bl ProcessMenuInputNoWrapAround
-_0816AFC4:
- lsls r0, 24
- lsrs r0, 24
- lsls r0, 24
- asrs r5, r0, 24
- movs r0, 0x2
- negs r0, r0
- cmp r5, r0
- beq _0816B04C
- adds r0, 0x1
- cmp r5, r0
- bne _0816B014
- movs r0, 0x5
- bl PlaySE
- ldrb r0, [r4, 0x8]
- movs r1, 0
- bl sub_8198070
- ldrb r0, [r4, 0x8]
- bl ClearWindowTilemap
- ldrb r0, [r4, 0x8]
- bl RemoveWindow
- movs r0, 0
- bl schedule_bg_copy_tilemap_to_vram
- ldr r1, =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r0, r1
- ldr r1, =sub_816B148
- str r1, [r0]
- b _0816B04C
- .pool
-_0816B014:
- ldrb r0, [r4, 0x8]
- movs r1, 0
- bl sub_8198070
- ldrb r0, [r4, 0x8]
- bl ClearWindowTilemap
- ldrb r0, [r4, 0x8]
- bl RemoveWindow
- movs r0, 0
- bl schedule_bg_copy_tilemap_to_vram
- ldr r0, =gTasks
- lsls r1, r6, 2
- adds r1, r6
- lsls r1, 3
- adds r1, r0
- ldr r2, =gUnknown_085DFEB4
- ldr r0, =gUnknown_0203BCB0
- ldr r0, [r0]
- adds r0, r5
- ldrb r0, [r0]
- lsls r0, 3
- adds r2, 0x4
- adds r0, r2
- ldr r0, [r0]
- str r0, [r1]
-_0816B04C:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816AF98
-
- thumb_func_start sub_816B060
-sub_816B060: @ 816B060
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r1, =gText_WhatWouldYouLike
- ldr r2, =sub_816AED8
- bl DisplayItemMessageOnField
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816B060
-
- thumb_func_start task_pc_itemstorage
-task_pc_itemstorage: @ 816B07C
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r4, 0
- movs r1, 0
- bl sub_816B190
- ldr r1, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, =sub_816B248
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end task_pc_itemstorage
-
- thumb_func_start sub_816B0A8
-sub_816B0A8: @ 816B0A8
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- adds r6, r4, 0
- bl sub_816B510
- ldr r5, =gUnknown_0203BCB8
- movs r1, 0
- strb r0, [r5, 0x5]
- lsls r0, 24
- cmp r0, 0
- bne _0816B0D8
- ldr r1, =gText_NoMailHere
- ldr r2, =sub_816B060
- adds r0, r4, 0
- bl DisplayItemMessageOnField
- b _0816B12A
- .pool
-_0816B0D8:
- strh r1, [r5]
- strh r1, [r5, 0x2]
- movs r0, 0xFF
- strb r0, [r5, 0x9]
- bl sub_816B54C
- adds r0, r4, 0
- bl sub_816B4C0
- ldrb r0, [r5, 0x5]
- bl sub_81D1C44
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0816B120
- movs r0, 0
- movs r1, 0
- bl sub_8197434
- adds r0, r4, 0
- bl sub_816B5F8
- ldr r0, =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, =sub_816B674
- str r0, [r1]
- b _0816B12A
- .pool
-_0816B120:
- ldr r1, =gText_NoMailHere
- ldr r2, =sub_816B060
- adds r0, r6, 0
- bl DisplayItemMessageOnField
-_0816B12A:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816B0A8
-
- thumb_func_start sub_816B138
-sub_816B138: @ 816B138
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- bl sub_8126B2C
- pop {r0}
- bx r0
- thumb_func_end sub_816B138
-
- thumb_func_start sub_816B148
-sub_816B148: @ 816B148
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, =gUnknown_0203BCB4
- ldrb r0, [r0]
- cmp r0, 0x4
- bne _0816B180
- ldr r0, =gSaveBlock2Ptr
- ldr r0, [r0]
- ldrb r0, [r0, 0x8]
- cmp r0, 0
- bne _0816B174
- ldr r0, =LittlerootTown_BrendansHouse_2F_EventScript_1F863F
- bl ScriptContext1_SetupScript
- b _0816B184
- .pool
-_0816B174:
- ldr r0, =LittlerootTown_MaysHouse_2F_EventScript_1F958F
- bl ScriptContext1_SetupScript
- b _0816B184
- .pool
-_0816B180:
- bl EnableBothScriptContexts
-_0816B184:
- adds r0, r4, 0
- bl DestroyTask
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_816B148
-
- thumb_func_start sub_816B190
-sub_816B190: @ 816B190
- push {r4-r6,lr}
- sub sp, 0x8
- adds r5, r1, 0
- lsls r0, 24
- lsrs r0, 24
- lsls r5, 24
- lsrs r5, 24
- lsls r4, r0, 2
- adds r4, r0
- lsls r4, 3
- ldr r0, =gTasks + 0x8
- adds r4, r0
- ldr r0, =gUnknown_085DFF24
- ldr r1, [r0, 0x14]
- ldr r0, [r0, 0x10]
- str r0, [sp]
- str r1, [sp, 0x4]
- ldr r6, =gUnknown_085DFEDC
- adds r0, r6, 0
- movs r1, 0x4
- bl GetMaxWidthInMenuTable
- lsls r0, 24
- ldr r2, =0x00ffffff
- ldr r1, [sp]
- ands r1, r2
- orrs r1, r0
- str r1, [sp]
- mov r0, sp
- bl AddWindow
- strh r0, [r4, 0x8]
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0
- bl SetStandardWindowBorderStyle
- ldrb r0, [r4, 0x8]
- movs r1, 0x4
- adds r2, r6, 0
- bl PrintMenuTable
- ldrb r0, [r4, 0x8]
- movs r1, 0x4
- adds r2, r5, 0
- bl InitMenuInUpperLeftCornerPlaySoundWhenAPressed
- movs r0, 0
- bl schedule_bg_copy_tilemap_to_vram
- ldr r0, =gUnknown_085DFEA4
- lsls r5, 2
- adds r5, r0
- ldr r0, [r5]
- bl sub_816B21C
- add sp, 0x8
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816B190
-
- thumb_func_start sub_816B21C
-sub_816B21C: @ 816B21C
- push {r4,lr}
- sub sp, 0xC
- adds r4, r0, 0
- movs r0, 0
- movs r1, 0
- bl NewMenuHelpers_DrawDialogueFrame
- movs r0, 0x1
- str r0, [sp]
- movs r0, 0
- str r0, [sp, 0x4]
- str r0, [sp, 0x8]
- movs r1, 0x1
- adds r2, r4, 0
- movs r3, 0
- bl PrintTextOnWindow
- add sp, 0xC
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_816B21C
-
- thumb_func_start sub_816B248
-sub_816B248: @ 816B248
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- bl GetMenuCursorPos
- lsls r0, 24
- lsrs r5, r0, 24
- bl ProcessMenuInput
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl GetMenuCursorPos
- lsls r0, 24
- lsrs r2, r0, 24
- lsls r4, 24
- asrs r4, 24
- movs r0, 0x2
- negs r0, r0
- cmp r4, r0
- beq _0816B298
- adds r0, 0x1
- cmp r4, r0
- beq _0816B2B4
- movs r0, 0x5
- bl PlaySE
- ldr r0, =gUnknown_085DFEDC
- lsls r1, r4, 3
- adds r0, 0x4
- adds r1, r0
- ldr r1, [r1]
- adds r0, r6, 0
- bl _call_via_r1
- b _0816B2C0
- .pool
-_0816B298:
- lsls r1, r5, 24
- lsls r0, r2, 24
- asrs r2, r0, 24
- cmp r1, r0
- beq _0816B2C0
- ldr r0, =gUnknown_085DFEA4
- lsls r1, r2, 2
- adds r1, r0
- ldr r0, [r1]
- bl sub_816B21C
- b _0816B2C0
- .pool
-_0816B2B4:
- movs r0, 0x5
- bl PlaySE
- adds r0, r6, 0
- bl sub_816B4A4
-_0816B2C0:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_816B248
-
- thumb_func_start sub_816B2C8
-sub_816B2C8: @ 816B2C8
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- ldr r0, =sub_816B2F0
- str r0, [r1]
- movs r0, 0x1
- movs r1, 0
- bl FadeScreen
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816B2C8
-
- thumb_func_start sub_816B2F0
-sub_816B2F0: @ 816B2F0
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0816B310
- bl overworld_free_bg_tilemaps
- bl sub_81AAC14
- adds r0, r4, 0
- bl DestroyTask
-_0816B310:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816B2F0
-
- thumb_func_start sub_816B31C
-sub_816B31C: @ 816B31C
- push {lr}
- ldr r0, =gFieldCallback
- ldr r1, =mapldr_080EBC0C
- str r1, [r0]
- ldr r0, =c2_exit_to_overworld_2_switch
- bl SetMainCallback2
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816B31C
-
- thumb_func_start mapldr_080EBC0C
-mapldr_080EBC0C: @ 816B33C
- push {lr}
- bl sub_81973A4
- movs r0, 0
- movs r1, 0x1
- bl NewMenuHelpers_DrawDialogueFrame
- ldr r0, =sub_816B368
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x1
- bl sub_816B190
- bl pal_fill_black
- pop {r0}
- bx r0
- .pool
- thumb_func_end mapldr_080EBC0C
-
- thumb_func_start sub_816B368
-sub_816B368: @ 816B368
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl sub_80ABDFC
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0816B388
- ldr r0, =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, =sub_816B248
- str r0, [r1]
-_0816B388:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816B368
-
- thumb_func_start sub_816B398
-sub_816B398: @ 816B398
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r4, r5, 2
- adds r4, r5
- lsls r4, 3
- ldr r0, =gTasks + 0x8
- adds r4, r0
- bl sub_80D6CE4
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x2]
- cmp r0, 0
- beq _0816B3C4
- adds r0, r5, 0
- movs r1, 0
- bl sub_816B430
- b _0816B3D4
- .pool
-_0816B3C4:
- adds r0, r5, 0
- bl sub_816B4DC
- ldr r1, =gText_NoItems
- ldr r2, =task_pc_itemstorage
- adds r0, r5, 0
- bl DisplayItemMessageOnField
-_0816B3D4:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816B398
-
- thumb_func_start sub_816B3E4
-sub_816B3E4: @ 816B3E4
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r4, r5, 2
- adds r4, r5
- lsls r4, 3
- ldr r0, =gTasks + 0x8
- adds r4, r0
- bl sub_80D6CE4
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x2]
- cmp r0, 0
- beq _0816B410
- adds r0, r5, 0
- movs r1, 0x1
- bl sub_816B430
- b _0816B420
- .pool
-_0816B410:
- adds r0, r5, 0
- bl sub_816B4DC
- ldr r1, =gText_NoItems
- ldr r2, =task_pc_itemstorage
- adds r0, r5, 0
- bl DisplayItemMessageOnField
-_0816B420:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816B3E4
-
- thumb_func_start sub_816B430
-sub_816B430: @ 816B430
- push {r4-r6,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- lsls r1, 24
- lsrs r1, 24
- lsls r5, r4, 2
- adds r5, r4
- lsls r5, 3
- ldr r6, =gTasks + 0x8
- adds r0, r5, r6
- strh r1, [r0, 0x6]
- adds r0, r4, 0
- bl sub_816B4DC
- ldr r1, =gUnknown_0203BCB8
- movs r0, 0
- strh r0, [r1]
- strh r0, [r1, 0x2]
- movs r0, 0xFF
- strb r0, [r1, 0x9]
- adds r0, r4, 0
- bl sub_816B4C0
- bl sub_816BC14
- bl gpu_pal_allocator_reset__manage_upper_four
- bl LoadListMenuArrowsGfx
- ldr r0, =gUnknown_0203BCC4
- ldr r0, [r0]
- movs r1, 0xCD
- lsls r1, 3
- adds r0, r1
- movs r1, 0x7
- bl sub_8122344
- movs r0, 0
- movs r1, 0
- bl sub_8197434
- subs r6, 0x8
- adds r5, r6
- ldr r0, =sub_816C158
- str r0, [r5]
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816B430
-
- thumb_func_start sub_816B4A4
-sub_816B4A4: @ 816B4A4
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r4, 0
- bl sub_816B4DC
- adds r0, r4, 0
- bl sub_816B060
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_816B4A4
-
- thumb_func_start sub_816B4C0
-sub_816B4C0: @ 816B4C0
- push {lr}
- ldr r1, =gUnknown_0203BCB8
- ldrb r0, [r1, 0x5]
- cmp r0, 0x7
- bls _0816B4D4
- movs r0, 0x8
- b _0816B4D6
- .pool
-_0816B4D4:
- adds r0, 0x1
-_0816B4D6:
- strb r0, [r1, 0x4]
- pop {r0}
- bx r0
- thumb_func_end sub_816B4C0
-
- thumb_func_start sub_816B4DC
-sub_816B4DC: @ 816B4DC
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r4, r0, 2
- adds r4, r0
- lsls r4, 3
- ldr r0, =gTasks + 0x8
- adds r4, r0
- ldrb r0, [r4, 0x8]
- movs r1, 0
- bl sub_8198070
- ldrb r0, [r4, 0x8]
- bl ClearWindowTilemap
- ldrb r0, [r4, 0x8]
- bl RemoveWindow
- movs r0, 0
- bl schedule_bg_copy_tilemap_to_vram
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816B4DC
-
- thumb_func_start sub_816B510
-sub_816B510: @ 816B510
- push {r4,lr}
- movs r2, 0
- movs r1, 0x6
- ldr r0, =gSaveBlock1Ptr
- ldr r3, [r0]
- movs r4, 0xB0
- lsls r4, 6
-_0816B51E:
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r3, r0
- adds r0, r4
- ldrh r0, [r0]
- cmp r0, 0
- beq _0816B534
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
-_0816B534:
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0xF
- bls _0816B51E
- adds r0, r2, 0
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_816B510
-
- thumb_func_start sub_816B54C
-sub_816B54C: @ 816B54C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x24
- movs r2, 0x6
-_0816B55A:
- adds r1, r2, 0x1
- lsls r0, r1, 24
- lsrs r4, r0, 24
- mov r8, r1
- cmp r4, 0xF
- bhi _0816B5D4
- ldr r0, =gSaveBlock1Ptr
- mov r10, r0
- lsls r0, r2, 3
- adds r0, r2
- lsls r0, 2
- mov r12, r0
- ldr r6, =0x00002be0
-_0816B574:
- mov r1, r10
- ldr r1, [r1]
- mov r9, r1
- mov r2, r9
- add r2, r12
- movs r3, 0xB0
- lsls r3, 6
- adds r0, r2, r3
- ldrh r0, [r0]
- cmp r0, 0
- bne _0816B5CA
- adds r2, r6
- mov r1, sp
- adds r0, r2, 0
- ldm r0!, {r3,r5,r7}
- stm r1!, {r3,r5,r7}
- ldm r0!, {r3,r5,r7}
- stm r1!, {r3,r5,r7}
- ldm r0!, {r3,r5,r7}
- stm r1!, {r3,r5,r7}
- lsls r3, r4, 3
- adds r3, r4
- lsls r3, 2
- mov r5, r9
- adds r0, r5, r3
- adds r0, r6
- ldm r0!, {r1,r5,r7}
- stm r2!, {r1,r5,r7}
- ldm r0!, {r1,r5,r7}
- stm r2!, {r1,r5,r7}
- ldm r0!, {r1,r5,r7}
- stm r2!, {r1,r5,r7}
- mov r7, r10
- ldr r1, [r7]
- adds r1, r3
- adds r1, r6
- mov r0, sp
- ldm r0!, {r2,r3,r5}
- stm r1!, {r2,r3,r5}
- ldm r0!, {r2,r3,r7}
- stm r1!, {r2,r3,r7}
- ldm r0!, {r2,r5,r7}
- stm r1!, {r2,r5,r7}
-_0816B5CA:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0xF
- bls _0816B574
-_0816B5D4:
- mov r3, r8
- lsls r0, r3, 24
- lsrs r2, r0, 24
- cmp r2, 0xE
- bls _0816B55A
- add sp, 0x24
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816B54C
-
- thumb_func_start sub_816B5F8
-sub_816B5F8: @ 816B5F8
- push {r4-r6,lr}
- sub sp, 0xC
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- movs r0, 0
- bl sub_81D1C84
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x1
- bl sub_81D1C84
- ldr r6, =gText_Mailbox
- movs r0, 0x1
- adds r1, r6, 0
- movs r2, 0x40
- bl GetStringCenterAlignXOffset
- adds r3, r0, 0
- lsls r3, 24
- lsrs r3, 24
- movs r0, 0x1
- str r0, [sp]
- movs r0, 0
- str r0, [sp, 0x4]
- str r0, [sp, 0x8]
- adds r0, r4, 0
- movs r1, 0x1
- adds r2, r6, 0
- bl PrintTextOnWindow
- movs r0, 0
- bl schedule_bg_copy_tilemap_to_vram
- ldr r4, =gUnknown_0203BCB8
- adds r0, r4, 0
- bl sub_81D1DC0
- ldr r2, =gTasks
- lsls r1, r5, 2
- adds r1, r5
- lsls r1, 3
- adds r1, r2
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r1, 0x12]
- adds r0, r4, 0
- bl sub_81D1E90
- add sp, 0xC
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816B5F8
-
- thumb_func_start sub_816B674
-sub_816B674: @ 816B674
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- mov r9, r0
- ldr r0, =gTasks + 0x8
- mov r10, r0
- mov r4, r9
- add r4, r10
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0816B71E
- ldrb r0, [r4, 0xA]
- bl ListMenuHandleInputGetItemId
- adds r6, r0, 0
- ldrb r0, [r4, 0xA]
- ldr r7, =gUnknown_0203BCBA
- subs r1, r7, 0x2
- mov r8, r1
- adds r1, r7, 0
- mov r2, r8
- bl sub_81AE860
- movs r0, 0x2
- negs r0, r0
- cmp r6, r0
- beq _0816B6D4
- adds r0, 0x1
- cmp r6, r0
- bne _0816B6EA
- b _0816B71E
- .pool
-_0816B6D4:
- movs r0, 0x5
- bl PlaySE
- mov r1, r8
- ldrb r0, [r1, 0x9]
- bl RemoveScrollIndicatorArrowPair
- adds r0, r5, 0
- bl sub_816B798
- b _0816B71E
-_0816B6EA:
- movs r0, 0x5
- bl PlaySE
- movs r0, 0
- bl sub_81D1D04
- movs r0, 0x1
- bl sub_81D1D04
- ldrb r0, [r4, 0xA]
- adds r1, r7, 0
- mov r2, r8
- bl sub_81AE6C8
- movs r0, 0
- bl schedule_bg_copy_tilemap_to_vram
- mov r1, r8
- ldrb r0, [r1, 0x9]
- bl RemoveScrollIndicatorArrowPair
- mov r0, r10
- subs r0, 0x8
- add r0, r9
- ldr r1, =sub_816B730
- str r1, [r0]
-_0816B71E:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816B674
-
- thumb_func_start sub_816B730
-sub_816B730: @ 816B730
- push {r4,r5,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r5, =gStringVar1
- ldr r2, =gSaveBlock1Ptr
- ldr r1, =gUnknown_0203BCB8
- ldrh r0, [r1]
- adds r0, 0x6
- ldrh r1, [r1, 0x2]
- adds r0, r1
- lsls r1, r0, 3
- adds r1, r0
- lsls r1, 2
- ldr r0, [r2]
- adds r1, r0
- ldr r0, =0x00002bf2
- adds r1, r0
- adds r0, r5, 0
- bl StringCopy
- adds r0, r5, 0
- movs r1, 0
- bl sub_81DB554
- ldr r5, =gStringVar4
- ldr r1, =gText_WhatToDoWithVar1sMail
- adds r0, r5, 0
- bl StringExpandPlaceholders
- ldr r2, =sub_816B7DC
- adds r0, r4, 0
- adds r1, r5, 0
- bl DisplayItemMessageOnField
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816B730
-
- thumb_func_start sub_816B798
-sub_816B798: @ 816B798
- 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 r0, 0
- bl sub_81D1D04
- movs r0, 0x1
- bl sub_81D1D04
- ldrb r0, [r4, 0xA]
- movs r1, 0
- movs r2, 0
- bl sub_81AE6C8
- movs r0, 0
- bl schedule_bg_copy_tilemap_to_vram
- bl sub_81D1EC0
- adds r0, r5, 0
- bl sub_816B060
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816B798
-
- thumb_func_start sub_816B7DC
-sub_816B7DC: @ 816B7DC
- push {r4,r5,lr}
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- movs r0, 0x2
- bl sub_81D1C84
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r2, =gUnknown_085DFF04
- adds r0, r4, 0
- movs r1, 0x4
- bl PrintMenuTable
- adds r0, r4, 0
- movs r1, 0x4
- movs r2, 0
- bl InitMenuInUpperLeftCornerPlaySoundWhenAPressed
- movs r0, 0
- bl schedule_bg_copy_tilemap_to_vram
- ldr r1, =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- ldr r1, =sub_816B82C
- str r1, [r0]
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816B7DC
-
- thumb_func_start sub_816B82C
-sub_816B82C: @ 816B82C
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- adds r6, r5, 0
- bl ProcessMenuInput_other
- lsls r0, 24
- asrs r4, r0, 24
- movs r0, 0x2
- negs r0, r0
- cmp r4, r0
- beq _0816B86E
- adds r0, 0x1
- cmp r4, r0
- bne _0816B858
- movs r0, 0x5
- bl PlaySE
- adds r0, r5, 0
- bl sub_816BBD4
- b _0816B86E
-_0816B858:
- movs r0, 0x5
- bl PlaySE
- ldr r0, =gUnknown_085DFF04
- lsls r1, r4, 3
- adds r0, 0x4
- adds r1, r0
- ldr r1, [r1]
- adds r0, r6, 0
- bl _call_via_r1
-_0816B86E:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816B82C
-
- thumb_func_start sub_816B878
-sub_816B878: @ 816B878
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x1
- movs r1, 0
- bl FadeScreen
- ldr r1, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, =sub_816B8A4
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816B878
-
- thumb_func_start sub_816B8A4
-sub_816B8A4: @ 816B8A4
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0816B8E6
- bl sub_81D1EC0
- bl overworld_free_bg_tilemaps
- ldr r2, =gSaveBlock1Ptr
- ldr r1, =gUnknown_0203BCB8
- ldrh r0, [r1]
- adds r0, 0x6
- ldrh r1, [r1, 0x2]
- adds r0, r1
- lsls r1, r0, 3
- adds r1, r0
- lsls r1, 2
- ldr r0, =0x00002be0
- adds r1, r0
- ldr r0, [r2]
- adds r0, r1
- ldr r1, =sub_816B900
- movs r2, 0x1
- bl ReadMail
- adds r0, r4, 0
- bl DestroyTask
-_0816B8E6:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816B8A4
-
- thumb_func_start sub_816B900
-sub_816B900: @ 816B900
- push {lr}
- ldr r0, =gFieldCallback
- ldr r1, =pal_fill_for_maplights_or_black
- str r1, [r0]
- ldr r0, =c2_exit_to_overworld_2_switch
- bl SetMainCallback2
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816B900
-
- thumb_func_start pal_fill_for_maplights_or_black
-pal_fill_for_maplights_or_black: @ 816B920
- push {r4,lr}
- bl sub_81973A4
- ldr r0, =task00_080EBBDC
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, =gUnknown_0203BCB8
- ldrb r0, [r0, 0x5]
- bl sub_81D1C44
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0816B954
- adds r0, r4, 0
- bl sub_816B5F8
- b _0816B95A
- .pool
-_0816B954:
- adds r0, r4, 0
- bl DestroyTask
-_0816B95A:
- bl pal_fill_black
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end pal_fill_for_maplights_or_black
-
- thumb_func_start task00_080EBBDC
-task00_080EBBDC: @ 816B964
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl sub_80ABDFC
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0816B984
- ldr r0, =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, =sub_816B674
- str r0, [r1]
-_0816B984:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end task00_080EBBDC
-
- thumb_func_start sub_816B994
-sub_816B994: @ 816B994
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r1, =gText_MessageWillBeLost
- ldr r2, =sub_816B9B0
- bl DisplayItemMessageOnField
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816B994
-
- thumb_func_start sub_816B9B0
-sub_816B9B0: @ 816B9B0
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl sub_8197930
- ldr r1, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, =sub_816B9D8
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816B9B0
-
- thumb_func_start sub_816B9D8
-sub_816B9D8: @ 816B9D8
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl ProcessMenuInputNoWrap_
- lsls r0, 24
- asrs r0, 24
- movs r1, 0x1
- negs r1, r1
- cmp r0, r1
- beq _0816BA04
- cmp r0, r1
- ble _0816BA10
- cmp r0, 0
- beq _0816B9FC
- cmp r0, 0x1
- beq _0816BA0A
- b _0816BA10
-_0816B9FC:
- adds r0, r4, 0
- bl sub_816BA18
- b _0816BA10
-_0816BA04:
- movs r0, 0x5
- bl PlaySE
-_0816BA0A:
- adds r0, r4, 0
- bl sub_816BAAC
-_0816BA10:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_816B9D8
-
- thumb_func_start sub_816BA18
-sub_816BA18: @ 816BA18
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r2, =gSaveBlock1Ptr
- ldr r4, =gUnknown_0203BCB8
- ldrh r1, [r4]
- adds r1, 0x6
- ldrh r0, [r4, 0x2]
- adds r1, r0
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, =0x00002be0
- adds r0, r1
- ldr r1, [r2]
- adds r5, r1, r0
- ldrh r0, [r5, 0x20]
- movs r1, 0x1
- bl AddBagItem
- lsls r0, 24
- cmp r0, 0
- bne _0816BA68
- ldr r1, =gText_BagIsFull
- ldr r2, =sub_816BBD4
- adds r0, r6, 0
- bl DisplayItemMessageOnField
- b _0816BA9C
- .pool
-_0816BA68:
- ldr r1, =gText_MailToBagMessageErased
- ldr r2, =sub_816BBD4
- adds r0, r6, 0
- bl DisplayItemMessageOnField
- adds r0, r5, 0
- bl ClearMailStruct
- bl sub_816B54C
- ldrb r0, [r4, 0x5]
- subs r0, 0x1
- strb r0, [r4, 0x5]
- ldrb r1, [r4, 0x5]
- ldrb r0, [r4, 0x4]
- ldrh r2, [r4, 0x2]
- adds r0, r2
- cmp r1, r0
- bge _0816BA96
- cmp r2, 0
- beq _0816BA96
- subs r0, r2, 0x1
- strh r0, [r4, 0x2]
-_0816BA96:
- adds r0, r6, 0
- bl sub_816B4C0
-_0816BA9C:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816BA18
-
- thumb_func_start sub_816BAAC
-sub_816BAAC: @ 816BAAC
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- bl sub_816BBD4
- pop {r0}
- bx r0
- thumb_func_end sub_816BAAC
-
- thumb_func_start sub_816BABC
-sub_816BABC: @ 816BABC
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl CalculatePlayerPartyCount
- lsls r0, 24
- cmp r0, 0
- bne _0816BAD4
- adds r0, r4, 0
- bl sub_816BBB8
- b _0816BAEA
-_0816BAD4:
- movs r0, 0x1
- movs r1, 0
- bl FadeScreen
- ldr r0, =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, =sub_816BAF8
- str r0, [r1]
-_0816BAEA:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816BABC
-
- thumb_func_start sub_816BAF8
-sub_816BAF8: @ 816BAF8
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0816BB1C
- bl sub_81D1EC0
- bl overworld_free_bg_tilemaps
- bl sub_81B8448
- adds r0, r4, 0
- bl DestroyTask
-_0816BB1C:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816BAF8
-
- thumb_func_start sub_816BB28
-sub_816BB28: @ 816BB28
- push {lr}
- ldr r0, =gFieldCallback
- ldr r1, =sub_816BB48
- str r1, [r0]
- ldr r0, =c2_exit_to_overworld_2_switch
- bl SetMainCallback2
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816BB28
-
- thumb_func_start sub_816BB48
-sub_816BB48: @ 816BB48
- push {r4-r6,lr}
- ldr r0, =task00_080EBBDC
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r5, =gUnknown_0203BCB8
- ldrb r4, [r5, 0x5]
- bl sub_816B510
- strb r0, [r5, 0x5]
- bl sub_816B54C
- ldrb r0, [r5, 0x5]
- cmp r4, r0
- beq _0816BB7E
- ldrb r1, [r5, 0x5]
- ldrb r0, [r5, 0x4]
- ldrh r2, [r5, 0x2]
- adds r0, r2
- cmp r1, r0
- bge _0816BB7E
- cmp r2, 0
- beq _0816BB7E
- subs r0, r2, 0x1
- strh r0, [r5, 0x2]
-_0816BB7E:
- adds r0, r6, 0
- bl sub_816B4C0
- bl sub_81973A4
- ldr r0, =gUnknown_0203BCB8
- ldrb r0, [r0, 0x5]
- bl sub_81D1C44
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0816BBA8
- adds r0, r6, 0
- bl sub_816B5F8
- b _0816BBAE
- .pool
-_0816BBA8:
- adds r0, r6, 0
- bl DestroyTask
-_0816BBAE:
- bl pal_fill_black
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_816BB48
-
- thumb_func_start sub_816BBB8
-sub_816BBB8: @ 816BBB8
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r1, =gText_NoPokemon
- ldr r2, =sub_816BBD4
- bl DisplayItemMessageOnField
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816BBB8
-
- thumb_func_start sub_816BBD4
-sub_816BBD4: @ 816BBD4
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x2
- bl sub_81D1D04
- movs r0, 0
- movs r1, 0
- bl sub_8197434
- adds r0, r4, 0
- bl sub_816B5F8
- 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, =sub_816B674
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816BBD4
-
- thumb_func_start sub_816BC14
-sub_816BC14: @ 816BC14
- push {r4,lr}
- ldr r4, =gUnknown_0203BCC4
- movs r0, 0xCE
- lsls r0, 3
- bl AllocZeroed
- str r0, [r4]
- movs r1, 0xCC
- lsls r1, 3
- adds r0, r1
- movs r1, 0xFF
- movs r2, 0x6
- bl memset
- ldr r0, [r4]
- ldr r1, =0x00000666
- adds r0, r1
- movs r1, 0xFF
- strb r1, [r0]
- ldr r0, [r4]
- ldr r1, =0x00000667
- adds r0, r1
- movs r1, 0x1
- negs r1, r1
- strb r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816BC14
-
- thumb_func_start sub_816BC58
-sub_816BC58: @ 816BC58
- push {r4,lr}
- movs r4, 0
-_0816BC5C:
- lsls r0, r4, 24
- lsrs r0, 24
- bl sub_816BCC4
- adds r4, 0x1
- cmp r4, 0x5
- bls _0816BC5C
- ldr r0, =gUnknown_0203BCC4
- ldr r0, [r0]
- bl Free
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816BC58
-
- thumb_func_start sub_816BC7C
-sub_816BC7C: @ 816BC7C
- push {r4,lr}
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r0, =gUnknown_0203BCC4
- movs r3, 0xCC
- lsls r3, 3
- adds r1, r2, r3
- ldr r0, [r0]
- adds r4, r0, r1
- ldrb r0, [r4]
- cmp r0, 0xFF
- bne _0816BCB4
- lsls r0, r2, 3
- ldr r1, =gUnknown_085DFF5C
- adds r0, r1
- bl AddWindow
- strb r0, [r4]
- ldrb r0, [r4]
- movs r2, 0x85
- lsls r2, 2
- movs r1, 0
- movs r3, 0xE
- bl SetWindowBorderStyle
- movs r0, 0
- bl schedule_bg_copy_tilemap_to_vram
-_0816BCB4:
- ldrb r0, [r4]
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_816BC7C
-
- thumb_func_start sub_816BCC4
-sub_816BCC4: @ 816BCC4
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r1, =gUnknown_0203BCC4
- movs r2, 0xCC
- lsls r2, 3
- adds r0, r2
- ldr r1, [r1]
- adds r4, r1, r0
- ldrb r0, [r4]
- cmp r0, 0xFF
- beq _0816BCF8
- movs r1, 0
- bl sub_8198070
- ldrb r0, [r4]
- bl ClearWindowTilemap
- movs r0, 0
- bl schedule_bg_copy_tilemap_to_vram
- ldrb r0, [r4]
- bl RemoveWindow
- movs r0, 0xFF
- strb r0, [r4]
-_0816BCF8:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816BCC4
-
- thumb_func_start sub_816BD04
-sub_816BD04: @ 816BD04
- push {r4-r6,lr}
- movs r6, 0
- ldr r0, =gUnknown_0203BCB8
- ldrb r0, [r0, 0x5]
- subs r0, 0x1
- cmp r6, r0
- bge _0816BD58
- ldr r5, =gUnknown_0203BCC4
-_0816BD14:
- lsls r4, r6, 1
- adds r4, r6
- lsls r4, 3
- movs r0, 0xCC
- lsls r0, 1
- adds r4, r0
- ldr r0, [r5]
- adds r0, r4
- ldr r1, =gSaveBlock1Ptr
- ldr r1, [r1]
- lsls r2, r6, 2
- adds r1, r2
- movs r2, 0x93
- lsls r2, 3
- adds r1, r2
- ldrh r1, [r1]
- bl sub_816BDC8
- ldr r0, [r5]
- lsls r2, r6, 3
- adds r1, r0, r2
- adds r4, r0, r4
- str r4, [r1]
- adds r0, 0x4
- adds r0, r2
- str r6, [r0]
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- ldr r0, =gUnknown_0203BCB8
- ldrb r0, [r0, 0x5]
- subs r0, 0x1
- cmp r6, r0
- blt _0816BD14
-_0816BD58:
- ldr r5, =gUnknown_0203BCC4
- lsls r4, r6, 1
- adds r4, r6
- lsls r4, 3
- movs r3, 0xCC
- lsls r3, 1
- adds r4, r3
- ldr r0, [r5]
- adds r0, r4
- ldr r1, =gText_Cancel2
- bl StringCopy
- ldr r0, [r5]
- lsls r2, r6, 3
- adds r1, r0, r2
- adds r4, r0, r4
- str r4, [r1]
- adds r0, 0x4
- adds r0, r2
- movs r1, 0x2
- negs r1, r1
- str r1, [r0]
- ldr r4, =gMultiuseListMenuTemplate
- adds r1, r4, 0
- ldr r0, =gUnknown_085DFF44
- ldm r0!, {r2,r3,r6}
- stm r1!, {r2,r3,r6}
- ldm r0!, {r2,r3,r6}
- stm r1!, {r2,r3,r6}
- movs r0, 0
- bl sub_816BC7C
- strb r0, [r4, 0x10]
- ldr r1, =gUnknown_0203BCB8
- ldrb r0, [r1, 0x5]
- strh r0, [r4, 0xC]
- ldr r0, [r5]
- str r0, [r4]
- ldrb r0, [r1, 0x4]
- strh r0, [r4, 0xE]
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816BD04
-
- thumb_func_start sub_816BDC8
-sub_816BDC8: @ 816BDC8
- push {lr}
- adds r2, r0, 0
- lsls r0, r1, 16
- lsrs r0, 16
- adds r1, r2, 0
- bl CopyItemName
- pop {r0}
- bx r0
- thumb_func_end sub_816BDC8
-
- thumb_func_start sub_816BDDC
-sub_816BDDC: @ 816BDDC
- push {r4,lr}
- adds r4, r0, 0
- lsls r1, 24
- lsrs r1, 24
- cmp r1, 0x1
- beq _0816BDEE
- movs r0, 0x5
- bl PlaySE
-_0816BDEE:
- ldr r0, =gUnknown_0203BCC4
- ldr r0, [r0]
- ldr r1, =0x00000666
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0xFF
- bne _0816BE38
- bl sub_816C0C8
- movs r0, 0x2
- negs r0, r0
- cmp r4, r0
- beq _0816BE2C
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- lsls r1, r4, 2
- adds r0, r1
- movs r1, 0x93
- lsls r1, 3
- adds r0, r1
- ldrh r0, [r0]
- bl sub_816C060
- b _0816BE32
- .pool
-_0816BE2C:
- ldr r0, =0x0000ffff
- bl sub_816C060
-_0816BE32:
- adds r0, r4, 0
- bl sub_816BEF0
-_0816BE38:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816BDDC
-
- thumb_func_start fish4_goto_x5_or_x6
-fish4_goto_x5_or_x6: @ 816BE44
- push {r4-r6,lr}
- sub sp, 0xC
- adds r4, r1, 0
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r2, 24
- lsrs r5, r2, 24
- movs r0, 0x2
- negs r0, r0
- cmp r4, r0
- beq _0816BED4
- ldr r0, =gUnknown_0203BCC4
- ldr r0, [r0]
- ldr r1, =0x00000666
- adds r0, r1
- ldrb r1, [r0]
- cmp r1, 0xFF
- beq _0816BE8E
- lsls r0, r4, 24
- lsrs r0, 24
- cmp r1, r0
- bne _0816BE84
- adds r0, r5, 0
- movs r1, 0
- movs r2, 0xFF
- bl sub_816BFE0
- b _0816BE8E
- .pool
-_0816BE84:
- adds r0, r5, 0
- movs r1, 0xFF
- movs r2, 0xFF
- bl sub_816BFE0
-_0816BE8E:
- ldr r0, =gStringVar1
- ldr r1, =gSaveBlock1Ptr
- ldr r1, [r1]
- lsls r2, r4, 2
- adds r1, r2
- ldr r2, =0x0000049a
- adds r1, r2
- ldrh r1, [r1]
- 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, 0x68
- bl GetStringRightAlignXOffset
- adds r3, r0, 0
- lsls r3, 24
- lsrs r3, 24
- str r5, [sp]
- movs r0, 0xFF
- str r0, [sp, 0x4]
- movs r0, 0
- str r0, [sp, 0x8]
- adds r0, r6, 0
- movs r1, 0x7
- adds r2, r4, 0
- bl PrintTextOnWindow
-_0816BED4:
- add sp, 0xC
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end fish4_goto_x5_or_x6
-
- thumb_func_start sub_816BEF0
-sub_816BEF0: @ 816BEF0
- push {r4,r5,lr}
- sub sp, 0xC
- adds r1, r0, 0
- ldr r0, =gUnknown_0203BCC4
- ldr r0, [r0]
- ldr r2, =0x00000661
- adds r0, r2
- ldrb r5, [r0]
- movs r0, 0x2
- negs r0, r0
- cmp r1, r0
- beq _0816BF2C
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- lsls r1, 2
- adds r0, r1
- movs r1, 0x93
- lsls r1, 3
- adds r0, r1
- ldrh r0, [r0]
- bl ItemId_GetDescription
- b _0816BF32
- .pool
-_0816BF2C:
- ldr r0, =0x0000ffff
- bl sub_816C228
-_0816BF32:
- adds r4, r0, 0
- adds r0, r5, 0
- movs r1, 0x11
- bl FillWindowPixelBuffer
- movs r0, 0x1
- 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
- movs r3, 0
- bl PrintTextOnWindow
- add sp, 0xC
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816BEF0
-
- thumb_func_start sub_816BF60
-sub_816BF60: @ 816BF60
- push {r4,lr}
- sub sp, 0x10
- ldr r4, =gUnknown_0203BCB8
- ldrb r0, [r4, 0x9]
- cmp r0, 0xFF
- bne _0816BF8C
- ldrb r0, [r4, 0x5]
- ldrb r1, [r4, 0x4]
- subs r0, r1
- str r0, [sp]
- ldr r0, =0x000013f8
- str r0, [sp, 0x4]
- str r0, [sp, 0x8]
- adds r0, r4, 0x2
- str r0, [sp, 0xC]
- movs r0, 0x2
- movs r1, 0xB0
- movs r2, 0xC
- movs r3, 0x94
- bl AddScrollIndicatorArrowPairParametrized
- strb r0, [r4, 0x9]
-_0816BF8C:
- add sp, 0x10
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816BF60
-
- thumb_func_start sub_816BF9C
-sub_816BF9C: @ 816BF9C
- push {r4,lr}
- ldr r4, =gUnknown_0203BCB8
- ldrb r0, [r4, 0x9]
- cmp r0, 0xFF
- beq _0816BFAE
- bl RemoveScrollIndicatorArrowPair
- movs r0, 0xFF
- strb r0, [r4, 0x9]
-_0816BFAE:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816BF9C
-
- thumb_func_start sub_816BFB8
-sub_816BFB8: @ 816BFB8
- push {r4,r5,lr}
- adds r4, r1, 0
- adds r5, r2, 0
- lsls r0, 24
- lsrs r0, 24
- lsls r4, 24
- lsrs r4, 24
- lsls r5, 24
- lsrs r5, 24
- bl ListMenuGetYCoordForPrintingArrowCursor
- lsls r0, 24
- lsrs r0, 24
- adds r1, r4, 0
- adds r2, r5, 0
- bl sub_816BFE0
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_816BFB8
-
- thumb_func_start sub_816BFE0
-sub_816BFE0: @ 816BFE0
- push {r4-r6,lr}
- sub sp, 0x14
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r1, 24
- lsrs r1, 24
- lsls r2, 24
- lsrs r2, 24
- ldr r0, =gUnknown_0203BCC4
- ldr r0, [r0]
- movs r3, 0xCC
- lsls r3, 3
- adds r0, r3
- ldrb r5, [r0]
- cmp r1, 0xFF
- bne _0816C030
- 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]
- adds r0, r5, 0
- movs r1, 0x11
- movs r2, 0
- adds r3, r6, 0
- bl FillWindowPixelRect
- b _0816C050
- .pool
-_0816C030:
- movs r0, 0
- str r0, [sp]
- str r0, [sp, 0x4]
- ldr r0, =gUnknown_085DFF8C
- str r0, [sp, 0x8]
- lsls r0, r2, 24
- asrs r0, 24
- str r0, [sp, 0xC]
- ldr r0, =gText_SelectorArrow2
- str r0, [sp, 0x10]
- adds r0, r5, 0
- movs r1, 0x1
- movs r2, 0
- adds r3, r6, 0
- bl AddTextPrinterParameterized2
-_0816C050:
- add sp, 0x14
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816BFE0
-
- thumb_func_start sub_816C060
-sub_816C060: @ 816C060
- push {r4-r6,lr}
- lsls r0, 16
- lsrs r6, r0, 16
- ldr r0, =gUnknown_0203BCC4
- ldr r0, [r0]
- ldr r1, =0x00000667
- adds r5, r0, r1
- ldrb r0, [r5]
- cmp r0, 0xFF
- bne _0816C0B2
- ldr r4, =0x000013f6
- adds r0, r4, 0
- bl FreeSpriteTilesByTag
- adds r0, r4, 0
- bl FreeSpritePaletteByTag
- adds r0, r4, 0
- adds r1, r4, 0
- adds r2, r6, 0
- bl AddItemIconSprite
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x40
- beq _0816C0B2
- strb r2, [r5]
- ldr r0, =gSprites
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r0
- ldrb r2, [r1, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- strb r0, [r1, 0x5]
- movs r0, 0x18
- strh r0, [r1, 0x24]
- movs r0, 0x50
- strh r0, [r1, 0x26]
-_0816C0B2:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816C060
-
- thumb_func_start sub_816C0C8
-sub_816C0C8: @ 816C0C8
- push {r4,r5,lr}
- ldr r0, =gUnknown_0203BCC4
- ldr r0, [r0]
- ldr r1, =0x00000667
- adds r5, r0, r1
- ldrb r0, [r5]
- cmp r0, 0xFF
- beq _0816C0FA
- ldr r4, =0x000013f6
- adds r0, r4, 0
- bl FreeSpriteTilesByTag
- adds r0, r4, 0
- bl FreeSpritePaletteByTag
- ldrb r1, [r5]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, =gSprites
- adds r0, r1
- bl DestroySprite
- movs r0, 0xFF
- strb r0, [r5]
-_0816C0FA:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816C0C8
-
- thumb_func_start sub_816C110
-sub_816C110: @ 816C110
- push {lr}
- sub sp, 0x4
- bl sub_80D6E84
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- movs r1, 0x93
- lsls r1, 3
- adds r0, r1
- ldr r2, =gUnknown_0203BCBC
- adds r3, r2, 0x1
- movs r1, 0x8
- str r1, [sp]
- movs r1, 0x32
- bl sub_812220C
- add sp, 0x4
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816C110
-
- thumb_func_start sub_816C140
-sub_816C140: @ 816C140
- push {lr}
- ldr r0, =gUnknown_0203BCBA
- subs r1, r0, 0x2
- ldrb r2, [r1, 0x4]
- ldrb r3, [r1, 0x5]
- bl sub_812225C
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816C140
-
- thumb_func_start sub_816C158
-sub_816C158: @ 816C158
- push {r4-r7,lr}
- sub sp, 0xC
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- ldr r1, =gTasks + 0x8
- adds r7, r0, r1
- movs r4, 0
-_0816C16C:
- lsls r0, r4, 24
- lsrs r0, 24
- bl sub_816BC7C
- adds r4, 0x1
- cmp r4, 0x3
- bls _0816C16C
- movs r1, 0x6
- ldrsh r0, [r7, r1]
- ldr r5, =gText_TossItem
- cmp r0, 0
- bne _0816C186
- ldr r5, =gText_WithdrawItem
-_0816C186:
- movs r0, 0x1
- adds r1, r5, 0
- movs r2, 0x68
- bl GetStringCenterAlignXOffset
- adds r3, r0, 0
- ldr r4, =gUnknown_0203BCC4
- ldr r0, [r4]
- ldr r1, =0x00000663
- adds r0, r1
- ldrb r0, [r0]
- lsls r3, 24
- lsrs r3, 24
- movs r1, 0x1
- str r1, [sp]
- movs r1, 0
- str r1, [sp, 0x4]
- str r1, [sp, 0x8]
- movs r1, 0x1
- adds r2, r5, 0
- bl PrintTextOnWindow
- ldr r0, [r4]
- ldr r1, =0x00000662
- adds r0, r1
- ldrb r0, [r0]
- movs r1, 0x2
- bl CopyWindowToVram
- bl sub_816C110
- bl sub_816C140
- bl sub_816BD04
- ldr r0, =gMultiuseListMenuTemplate
- ldr r2, =gUnknown_0203BCB8
- ldrh r1, [r2, 0x2]
- ldrh r2, [r2]
- bl ListMenuInit
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r7, 0xA]
- bl sub_816BF60
- movs r0, 0
- bl schedule_bg_copy_tilemap_to_vram
- ldr r1, =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r0, r1
- ldr r1, =sub_816C30C
- str r1, [r0]
- add sp, 0xC
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816C158
-
- thumb_func_start sub_816C228
-sub_816C228: @ 816C228
- push {lr}
- lsls r0, 16
- lsrs r1, r0, 16
- ldr r2, =0xffff0009
- adds r0, r1, r2
- cmp r0, 0x8
- bhi _0816C2B4
- lsls r0, 2
- ldr r1, =_0816C248
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_0816C248:
- .4byte _0816C2AC
- .4byte _0816C2A4
- .4byte _0816C29C
- .4byte _0816C294
- .4byte _0816C28C
- .4byte _0816C284
- .4byte _0816C27C
- .4byte _0816C274
- .4byte _0816C26C
-_0816C26C:
- ldr r0, =gText_GoBackPrevMenu
- b _0816C2BA
- .pool
-_0816C274:
- ldr r0, =gText_WithdrawHowManyItems
- b _0816C2BA
- .pool
-_0816C27C:
- ldr r0, =gText_WithdrawXItems
- b _0816C2BA
- .pool
-_0816C284:
- ldr r0, =gText_TossHowManyVar1s
- b _0816C2BA
- .pool
-_0816C28C:
- ldr r0, =gText_ThrewAwayVar2Var1s
- b _0816C2BA
- .pool
-_0816C294:
- ldr r0, =gText_NoRoomInBag
- b _0816C2BA
- .pool
-_0816C29C:
- ldr r0, =gText_TooImportantToToss
- b _0816C2BA
- .pool
-_0816C2A4:
- ldr r0, =gText_ConfirmTossItems
- b _0816C2BA
- .pool
-_0816C2AC:
- ldr r0, =gText_MoveVar1Where
- b _0816C2BA
- .pool
-_0816C2B4:
- adds r0, r1, 0
- bl ItemId_GetDescription
-_0816C2BA:
- pop {r1}
- bx r1
- thumb_func_end sub_816C228
-
- thumb_func_start sub_816C2C0
-sub_816C2C0: @ 816C2C0
- push {r4-r6,lr}
- sub sp, 0xC
- adds r6, r0, 0
- ldr r0, =gUnknown_0203BCC4
- ldr r0, [r0]
- ldr r1, =0x00000661
- adds r0, r1
- ldrb r5, [r0]
- adds r0, r5, 0
- movs r1, 0x11
- bl FillWindowPixelBuffer
- ldr r4, =gStringVar4
- adds r0, r4, 0
- adds r1, r6, 0
- bl StringExpandPlaceholders
- movs r0, 0x1
- 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
- movs r3, 0
- bl PrintTextOnWindow
- add sp, 0xC
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816C2C0
-
- thumb_func_start sub_816C30C
-sub_816C30C: @ 816C30C
- push {r4-r6,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, =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _0816C35C
- ldrb r0, [r4, 0xA]
- ldr r1, =gUnknown_0203BCBA
- subs r4, r1, 0x2
- adds r2, r4, 0
- bl sub_81AE860
- ldrh r1, [r4, 0x2]
- ldrh r0, [r4]
- adds r1, r0
- ldrb r0, [r4, 0x5]
- subs r0, 0x1
- cmp r1, r0
- beq _0816C39E
- movs r0, 0x5
- bl PlaySE
- adds r0, r5, 0
- bl sub_816C450
- b _0816C39E
- .pool
-_0816C35C:
- ldrb r0, [r4, 0xA]
- bl ListMenuHandleInputGetItemId
- adds r6, r0, 0
- ldrb r0, [r4, 0xA]
- ldr r1, =gUnknown_0203BCBA
- subs r2, r1, 0x2
- bl sub_81AE860
- movs r0, 0x2
- negs r0, r0
- cmp r6, r0
- beq _0816C384
- adds r0, 0x1
- cmp r6, r0
- bne _0816C392
- b _0816C39E
- .pool
-_0816C384:
- movs r0, 0x5
- bl PlaySE
- adds r0, r5, 0
- bl sub_816C400
- b _0816C39E
-_0816C392:
- movs r0, 0x5
- bl PlaySE
- adds r0, r5, 0
- bl sub_816C71C
-_0816C39E:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_816C30C
-
- thumb_func_start bx_battle_menu_t3
-bx_battle_menu_t3: @ 816C3A4
- 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
- bl IsDma3ManagerBusyWithBgCopy
- lsls r0, 24
- cmp r0, 0
- bne _0816C3F2
- movs r0, 0
- movs r1, 0
- bl NewMenuHelpers_DrawDialogueFrame
- movs r1, 0x6
- ldrsh r0, [r5, r1]
- cmp r0, 0
- bne _0816C3DC
- adds r0, r4, 0
- movs r1, 0
- bl sub_816B190
- b _0816C3E4
- .pool
-_0816C3DC:
- adds r0, r4, 0
- movs r1, 0x2
- bl sub_816B190
-_0816C3E4:
- ldr r0, =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, =sub_816B248
- str r0, [r1]
-_0816C3F2:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end bx_battle_menu_t3
-
- thumb_func_start sub_816C400
-sub_816C400: @ 816C400
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r4, r0, 2
- adds r4, r0
- lsls r4, 3
- ldr r6, =gTasks + 0x8
- adds r5, r4, r6
- bl sub_816C0C8
- bl sub_816BF9C
- ldrb r0, [r5, 0xA]
- movs r1, 0
- movs r2, 0
- bl sub_81AE6C8
- ldr r0, =gUnknown_0203BCC4
- ldr r0, [r0]
- movs r1, 0xCD
- lsls r1, 3
- adds r0, r1
- movs r1, 0x7
- bl sub_81223B0
- bl sub_816BC58
- subs r6, 0x8
- adds r4, r6
- ldr r0, =bx_battle_menu_t3
- str r0, [r4]
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816C400
-
- thumb_func_start sub_816C450
-sub_816C450: @ 816C450
- push {r4-r6,lr}
- mov r6, r9
- mov r5, r8
- push {r5,r6}
- lsls r0, 24
- lsrs r0, 24
- lsls r4, r0, 2
- adds r4, r0
- lsls r4, 3
- ldr r0, =gTasks + 0x8
- mov r8, r0
- adds r1, r4, 0
- add r1, r8
- mov r9, r1
- ldrb r0, [r1, 0xA]
- movs r1, 0x10
- movs r2, 0x1
- bl sub_81AF15C
- ldr r6, =gUnknown_0203BCC4
- ldr r2, [r6]
- ldr r1, =gUnknown_0203BCB8
- ldrb r0, [r1]
- ldrb r1, [r1, 0x2]
- adds r0, r1
- ldr r5, =0x00000666
- adds r2, r5
- strb r0, [r2]
- mov r1, r9
- ldrb r0, [r1, 0xA]
- movs r1, 0
- movs r2, 0
- bl sub_816BFB8
- ldr r0, [r6]
- adds r0, r5
- ldrb r0, [r0]
- bl sub_816C690
- ldr r0, =gSaveBlock1Ptr
- ldr r1, [r0]
- ldr r0, [r6]
- adds r0, r5
- ldrb r0, [r0]
- lsls r0, 2
- adds r1, r0
- movs r0, 0x93
- lsls r0, 3
- adds r1, r0
- ldrh r0, [r1]
- ldr r1, =gStringVar1
- bl CopyItemName
- ldr r0, =0x0000fff7
- bl sub_816C228
- bl sub_816C2C0
- movs r1, 0x8
- negs r1, r1
- add r8, r1
- add r4, r8
- ldr r0, =sub_816C4FC
- str r0, [r4]
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816C450
-
- thumb_func_start sub_816C4FC
-sub_816C4FC: @ 816C4FC
- push {r4-r7,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 r7, =gMain
- ldrh r1, [r7, 0x2E]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _0816C530
- ldrb r0, [r4, 0xA]
- ldr r1, =gUnknown_0203BCBA
- subs r2, r1, 0x2
- bl sub_81AE860
- b _0816C57E
- .pool
-_0816C530:
- ldrb r0, [r4, 0xA]
- bl ListMenuHandleInputGetItemId
- adds r6, r0, 0
- ldrb r0, [r4, 0xA]
- ldr r1, =gUnknown_0203BCBA
- subs r4, r1, 0x2
- adds r2, r4, 0
- bl sub_81AE860
- ldr r0, =gUnknown_0203BCC4
- ldr r0, [r0]
- movs r1, 0xCD
- lsls r1, 3
- adds r0, r1
- movs r1, 0x7
- movs r2, 0
- bl sub_81223FC
- ldrb r0, [r4]
- bl sub_816C690
- movs r0, 0x2
- negs r0, r0
- cmp r6, r0
- beq _0816C574
- adds r0, 0x1
- cmp r6, r0
- bne _0816C592
- b _0816C59A
- .pool
-_0816C574:
- ldrh r1, [r7, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0816C588
-_0816C57E:
- adds r0, r5, 0
- movs r1, 0
- bl sub_816C5A0
- b _0816C59A
-_0816C588:
- adds r0, r5, 0
- movs r1, 0x1
- bl sub_816C5A0
- b _0816C59A
-_0816C592:
- adds r0, r5, 0
- movs r1, 0
- bl sub_816C5A0
-_0816C59A:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_816C4FC
-
- thumb_func_start sub_816C5A0
-sub_816C5A0: @ 816C5A0
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r5, r1, 0
- lsls r0, 24
- lsrs r7, r0, 24
- lsls r5, 24
- lsrs r5, 24
- lsls r0, r7, 2
- adds r0, r7
- lsls r0, 3
- ldr r1, =gTasks + 0x8
- adds r0, r1
- mov r8, r0
- ldr r4, =gUnknown_0203BCB8
- ldrh r0, [r4]
- ldrh r1, [r4, 0x2]
- adds r0, r1
- lsls r0, 16
- lsrs r6, r0, 16
- movs r0, 0x5
- bl PlaySE
- mov r2, r8
- ldrb r0, [r2, 0xA]
- adds r1, r4, 0x2
- adds r2, r4, 0
- bl sub_81AE6C8
- cmp r5, 0
- bne _0816C60A
- ldr r1, =gUnknown_0203BCC4
- ldr r0, [r1]
- ldr r2, =0x00000666
- adds r0, r2
- ldrb r2, [r0]
- adds r4, r1, 0
- cmp r2, r6
- beq _0816C622
- subs r0, r6, 0x1
- cmp r2, r0
- beq _0816C60A
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- movs r1, 0x93
- lsls r1, 3
- adds r0, r1
- adds r1, r2, 0
- adds r2, r6, 0
- bl sub_80D702C
- bl sub_816BD04
-_0816C60A:
- ldr r0, =gUnknown_0203BCC4
- ldr r1, [r0]
- ldr r2, =0x00000666
- adds r1, r2
- ldrb r1, [r1]
- adds r4, r0, 0
- cmp r1, r6
- bcs _0816C622
- ldr r1, =gUnknown_0203BCB8
- ldrh r0, [r1]
- subs r0, 0x1
- strh r0, [r1]
-_0816C622:
- ldr r0, [r4]
- movs r1, 0xCD
- lsls r1, 3
- adds r0, r1
- movs r1, 0x7
- movs r2, 0x1
- bl sub_81223FC
- ldr r0, [r4]
- ldr r2, =0x00000666
- adds r0, r2
- movs r1, 0xFF
- strb r1, [r0]
- ldr r0, =gMultiuseListMenuTemplate
- ldr r2, =gUnknown_0203BCB8
- ldrh r1, [r2, 0x2]
- ldrh r2, [r2]
- bl ListMenuInit
- lsls r0, 24
- lsrs r0, 24
- mov r1, r8
- strh r0, [r1, 0xA]
- movs r0, 0
- bl schedule_bg_copy_tilemap_to_vram
- ldr r1, =gTasks
- lsls r0, r7, 2
- adds r0, r7
- lsls r0, 3
- adds r0, r1
- ldr r1, =sub_816C30C
- str r1, [r0]
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816C5A0
-
- thumb_func_start sub_816C690
-sub_816C690: @ 816C690
- push {lr}
- adds r3, r0, 0
- lsls r3, 24
- ldr r0, =gUnknown_0203BCC4
- ldr r0, [r0]
- movs r1, 0xCD
- lsls r1, 3
- adds r0, r1
- lsrs r3, 4
- movs r1, 0x80
- lsls r1, 13
- adds r3, r1
- lsrs r3, 16
- movs r1, 0x7
- movs r2, 0x80
- bl sub_8122448
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816C690
-
- thumb_func_start sub_816C6BC
-sub_816C6BC: @ 816C6BC
- push {r4-r6,lr}
- sub sp, 0xC
- adds r6, r0, 0
- ldr r5, [sp, 0x1C]
- ldr r3, [sp, 0x20]
- lsls r6, 24
- lsrs r6, 24
- lsls r1, 16
- lsrs r1, 16
- lsls r5, 24
- lsrs r5, 24
- lsls r3, 24
- lsrs r3, 24
- ldr r0, =gStringVar1
- bl ConvertIntToDecimalStringN
- ldr r4, =gStringVar4
- ldr r1, =gText_xVar1
- adds r0, r4, 0
- bl StringExpandPlaceholders
- movs r0, 0x1
- adds r1, r4, 0
- movs r2, 0x30
- bl GetStringCenterAlignXOffset
- adds r3, r0, 0
- lsls r3, 24
- lsrs r3, 24
- str r5, [sp]
- movs r0, 0
- str r0, [sp, 0x4]
- str r0, [sp, 0x8]
- adds r0, r6, 0
- movs r1, 0x1
- adds r2, r4, 0
- bl PrintTextOnWindow
- add sp, 0xC
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816C6BC
-
- thumb_func_start sub_816C71C
-sub_816C71C: @ 816C71C
- push {r4-r6,lr}
- sub sp, 0x8
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- ldr r1, =gTasks + 0x8
- adds r6, r0, r1
- ldr r1, =gUnknown_0203BCB8
- ldrh r0, [r1, 0x2]
- ldrh r1, [r1]
- adds r0, r1
- lsls r0, 16
- lsrs r4, r0, 16
- bl sub_816BF9C
- movs r0, 0x1
- strh r0, [r6, 0x4]
- movs r1, 0x6
- ldrsh r0, [r6, r1]
- cmp r0, 0
- bne _0816C798
- ldr r0, =gSaveBlock1Ptr
- ldr r1, [r0]
- lsls r0, r4, 2
- adds r1, r0
- ldr r2, =0x0000049a
- adds r0, r1, r2
- ldrh r0, [r0]
- cmp r0, 0x1
- bne _0816C774
- adds r0, r5, 0
- bl sub_816C8FC
- b _0816C7FE
- .pool
-_0816C774:
- movs r2, 0x93
- lsls r2, 3
- adds r0, r1, r2
- ldrh r0, [r0]
- ldr r1, =gStringVar1
- bl CopyItemName
- ldr r0, =0x0000fffe
- bl sub_816C228
- bl sub_816C2C0
- b _0816C7D4
- .pool
-_0816C798:
- ldr r0, =gSaveBlock1Ptr
- ldr r1, [r0]
- lsls r0, r4, 2
- adds r1, r0
- ldr r2, =0x0000049a
- adds r0, r1, r2
- ldrh r0, [r0]
- cmp r0, 0x1
- bne _0816C7BC
- adds r0, r5, 0
- bl sub_816C9B8
- b _0816C7FE
- .pool
-_0816C7BC:
- movs r2, 0x93
- lsls r2, 3
- adds r0, r1, r2
- ldrh r0, [r0]
- ldr r1, =gStringVar1
- bl CopyItemName
- ldr r0, =0x0000fffc
- bl sub_816C228
- bl sub_816C2C0
-_0816C7D4:
- movs r0, 0x4
- bl sub_816BC7C
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r6, 0x4]
- movs r2, 0x1
- str r2, [sp]
- movs r2, 0x3
- str r2, [sp, 0x4]
- movs r2, 0x2
- movs r3, 0x8
- bl sub_816C6BC
- ldr r1, =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- ldr r1, =sub_816C818
- str r1, [r0]
-_0816C7FE:
- add sp, 0x8
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816C71C
-
- thumb_func_start sub_816C818
-sub_816C818: @ 816C818
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x8
- lsls r0, 24
- lsrs r5, r0, 24
- mov r9, r5
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- ldr r1, =gTasks + 0x8
- adds r6, r0, r1
- ldr r0, =gUnknown_0203BCB8
- ldrh r2, [r0, 0x2]
- ldrh r0, [r0]
- adds r2, r0
- lsls r2, 16
- adds r0, r6, 0x4
- ldr r1, =gSaveBlock1Ptr
- mov r8, r1
- ldr r1, [r1]
- lsrs r7, r2, 14
- adds r1, r7
- ldr r2, =0x0000049a
- adds r1, r2
- ldrh r1, [r1]
- bl AdjustQuantityAccordingToDPadInput
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x1
- bne _0816C888
- movs r0, 0x4
- bl sub_816BC7C
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r6, 0x4]
- str r4, [sp]
- movs r2, 0x3
- str r2, [sp, 0x4]
- movs r2, 0x2
- movs r3, 0x8
- bl sub_816C6BC
- b _0816C8EC
- .pool
-_0816C888:
- ldr r0, =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0816C8BC
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x4
- bl sub_816BCC4
- movs r3, 0x6
- ldrsh r0, [r6, r3]
- cmp r0, 0
- bne _0816C8B4
- adds r0, r5, 0
- bl sub_816C8FC
- b _0816C8EC
- .pool
-_0816C8B4:
- adds r0, r5, 0
- bl sub_816C9B8
- b _0816C8EC
-_0816C8BC:
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0816C8EC
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x4
- bl sub_816BCC4
- mov r1, r8
- ldr r0, [r1]
- adds r0, r7
- movs r2, 0x93
- lsls r2, 3
- adds r0, r2
- ldrh r0, [r0]
- bl sub_816C228
- bl sub_816C2C0
- mov r0, r9
- bl sub_816CBC0
-_0816C8EC:
- add sp, 0x8
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_816C818
-
- thumb_func_start sub_816C8FC
-sub_816C8FC: @ 816C8FC
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r6, r1, 3
- ldr r0, =gTasks + 0x8
- mov r8, r0
- adds r4, r6, r0
- ldr r0, =gUnknown_0203BCB8
- ldrh r1, [r0, 0x2]
- ldrh r0, [r0]
- adds r1, r0
- lsls r1, 16
- ldr r7, =gSaveBlock1Ptr
- ldr r0, [r7]
- lsrs r5, r1, 14
- adds r0, r5
- movs r1, 0x93
- lsls r1, 3
- adds r0, r1
- ldrh r0, [r0]
- ldrh r1, [r4, 0x4]
- bl AddBagItem
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0816C98C
- ldr r0, [r7]
- adds r0, r5
- movs r2, 0x93
- lsls r2, 3
- adds r0, r2
- ldrh r0, [r0]
- ldr r1, =gStringVar1
- bl CopyItemName
- ldr r0, =gStringVar2
- movs r2, 0x4
- ldrsh r1, [r4, r2]
- movs r2, 0
- movs r3, 0x3
- bl ConvertIntToDecimalStringN
- ldr r0, =0x0000fffd
- bl sub_816C228
- bl sub_816C2C0
- mov r0, r8
- subs r0, 0x8
- adds r0, r6, r0
- ldr r1, =sub_816CB04
- b _0816C9A2
- .pool
-_0816C98C:
- movs r0, 0
- strh r0, [r4, 0x4]
- ldr r0, =0x0000fffa
- bl sub_816C228
- bl sub_816C2C0
- mov r0, r8
- subs r0, 0x8
- adds r0, r6, r0
- ldr r1, =sub_816CB74
-_0816C9A2:
- str r1, [r0]
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816C8FC
-
- thumb_func_start sub_816C9B8
-sub_816C9B8: @ 816C9B8
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x10
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- mov r8, r0
- ldr r0, =gTasks + 0x8
- mov r9, r0
- mov r7, r8
- add r7, r9
- ldr r0, =gUnknown_0203BCB8
- ldrh r1, [r0, 0x2]
- ldrh r0, [r0]
- adds r1, r0
- lsls r1, 16
- ldr r6, =gSaveBlock1Ptr
- ldr r0, [r6]
- lsrs r4, r1, 14
- adds r0, r4
- movs r1, 0x93
- lsls r1, 3
- adds r0, r1
- ldrh r0, [r0]
- bl itemid_is_unique
- lsls r0, 24
- cmp r0, 0
- bne _0816CA64
- ldr r0, [r6]
- adds r0, r4
- movs r2, 0x93
- lsls r2, 3
- adds r0, r2
- ldrh r0, [r0]
- ldr r1, =gStringVar1
- bl CopyItemName
- ldr r0, =gStringVar2
- movs r2, 0x4
- ldrsh r1, [r7, r2]
- movs r2, 0
- movs r3, 0x3
- bl ConvertIntToDecimalStringN
- ldr r0, =0x0000fff8
- bl sub_816C228
- bl sub_816C2C0
- ldr r1, =gUnknown_085DFF84
- movs r0, 0x1
- str r0, [sp]
- movs r0, 0x85
- lsls r0, 2
- str r0, [sp, 0x4]
- movs r0, 0xE
- str r0, [sp, 0x8]
- ldr r0, =gUnknown_085DFF3C
- str r0, [sp, 0xC]
- adds r0, r5, 0
- movs r2, 0x1
- movs r3, 0
- bl CreateYesNoMenuWithCallbacks
- b _0816CA7C
- .pool
-_0816CA64:
- movs r0, 0
- strh r0, [r7, 0x4]
- ldr r0, =0x0000fff9
- bl sub_816C228
- bl sub_816C2C0
- mov r0, r9
- subs r0, 0x8
- add r0, r8
- ldr r1, =sub_816CB74
- str r1, [r0]
-_0816CA7C:
- add sp, 0x10
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816C9B8
-
- thumb_func_start sub_816CA94
-sub_816CA94: @ 816CA94
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, =0x0000fffb
- bl sub_816C228
- bl sub_816C2C0
- ldr r1, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, =sub_816CB04
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816CA94
-
- thumb_func_start sub_816CAC8
-sub_816CAC8: @ 816CAC8
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, =gSaveBlock1Ptr
- ldr r2, [r0]
- ldr r1, =gUnknown_0203BCB8
- ldrh r0, [r1, 0x2]
- ldrh r1, [r1]
- adds r0, r1
- lsls r0, 2
- adds r2, r0
- movs r0, 0x93
- lsls r0, 3
- adds r2, r0
- ldrh r0, [r2]
- bl sub_816C228
- bl sub_816C2C0
- adds r0, r4, 0
- bl sub_816CBC0
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816CAC8
-
- thumb_func_start sub_816CB04
-sub_816CB04: @ 816CB04
- 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 r5, r0, r1
- ldr r0, =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x3
- ands r0, r1
- cmp r0, 0
- beq _0816CB5E
- ldr r4, =gUnknown_0203BCB8
- ldrb r0, [r4, 0x2]
- ldrb r1, [r4]
- adds r0, r1
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r5, 0x4]
- bl sub_80D6E48
- ldrb r0, [r5, 0xA]
- adds r1, r4, 0x2
- adds r2, r4, 0
- bl sub_81AE6C8
- bl sub_816C110
- bl sub_816C140
- bl sub_816BD04
- ldr r0, =gMultiuseListMenuTemplate
- ldrh r1, [r4, 0x2]
- ldrh r2, [r4]
- bl ListMenuInit
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r5, 0xA]
- adds r0, r6, 0
- bl sub_816CBC0
-_0816CB5E:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816CB04
-
- thumb_func_start sub_816CB74
-sub_816CB74: @ 816CB74
- 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 _0816CBAC
- ldr r0, =gSaveBlock1Ptr
- ldr r2, [r0]
- ldr r1, =gUnknown_0203BCB8
- ldrh r0, [r1, 0x2]
- ldrh r1, [r1]
- adds r0, r1
- lsls r0, 2
- adds r2, r0
- movs r0, 0x93
- lsls r0, 3
- adds r2, r0
- ldrh r0, [r2]
- bl sub_816C228
- bl sub_816C2C0
- adds r0, r4, 0
- bl sub_816CBC0
-_0816CBAC:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816CB74
-
- thumb_func_start sub_816CBC0
-sub_816CBC0: @ 816CBC0
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl sub_816BF60
- ldr r1, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, =sub_816C30C
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_816CBC0
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/pokedex.s b/asm/pokedex.s
index cb40f0eda..b1ddaa0d0 100644
--- a/asm/pokedex.s
+++ b/asm/pokedex.s
@@ -443,24 +443,24 @@ _080BB65E:
cmp r0, 0
bne _080BB6D0
movs r0, 0
- bl sub_80C0844
+ bl GetHoennPokedexCount
ldr r1, [r4]
ldr r2, =0x0000061a
adds r1, r2
strh r0, [r1]
movs r0, 0x1
- bl sub_80C0844
+ bl GetHoennPokedexCount
b _080BB6E4
.pool
_080BB6D0:
movs r0, 0
- bl pokedex_count
+ bl GetNationalPokedexCount
ldr r1, [r4]
ldr r2, =0x0000061a
adds r1, r2
strh r0, [r1]
movs r0, 0x1
- bl pokedex_count
+ bl GetNationalPokedexCount
_080BB6E4:
ldr r1, [r4]
ldr r3, =0x0000061c
@@ -1244,7 +1244,7 @@ _080BBE18:
bl sub_80BC890
adds r0, r6, 0
bl DestroyTask
- ldr r0, =sub_8086194
+ ldr r0, =CB2_ReturnToFieldWithOpenMenu
bl SetMainCallback2
ldr r0, =gMPlayInfo_BGM
ldr r1, =0x0000ffff
@@ -5058,7 +5058,7 @@ _080BDF4C:
movs r1, 0x1
bl StartSpriteAnim
movs r0, 0
- bl sub_80C0844
+ bl GetHoennPokedexCount
lsls r0, 16
lsrs r6, r0, 16
movs r0, 0
@@ -5283,7 +5283,7 @@ _080BE198:
lsrs r1, 24
bl StartSpriteAnim
movs r0, 0x1
- bl sub_80C0844
+ bl GetHoennPokedexCount
lsls r0, 16
lsrs r6, r0, 16
movs r0, 0
@@ -9597,8 +9597,8 @@ _080C07E8:
.pool
thumb_func_end GetSetPokedexFlag
- thumb_func_start pokedex_count
-pokedex_count: @ 80C07F4
+ thumb_func_start GetNationalPokedexCount
+GetNationalPokedexCount: @ 80C07F4
push {r4-r7,lr}
lsls r0, 24
lsrs r6, r0, 24
@@ -9641,10 +9641,10 @@ _080C0832:
pop {r4-r7}
pop {r1}
bx r1
- thumb_func_end pokedex_count
+ thumb_func_end GetNationalPokedexCount
- thumb_func_start sub_80C0844
-sub_80C0844: @ 80C0844
+ thumb_func_start GetHoennPokedexCount
+GetHoennPokedexCount: @ 80C0844
push {r4-r6,lr}
lsls r0, 24
lsrs r6, r0, 24
@@ -9691,7 +9691,7 @@ _080C088C:
pop {r4-r6}
pop {r1}
bx r1
- thumb_func_end sub_80C0844
+ thumb_func_end GetHoennPokedexCount
thumb_func_start sub_80C089C
sub_80C089C: @ 80C089C
diff --git a/asm/pokedex_area_screen.s b/asm/pokedex_area_screen.s
index 5f9e01974..579788e14 100644
--- a/asm/pokedex_area_screen.s
+++ b/asm/pokedex_area_screen.s
@@ -308,7 +308,7 @@ _0813CCB8:
ldr r1, [r5]
ldrb r0, [r1, 0x10]
ldrb r1, [r1, 0x11]
- bl get_mapheader_by_bank_and_number
+ bl Overworld_GetMapHeaderByGroupAndId
ldr r1, [r5]
ldrb r0, [r0, 0x14]
strh r0, [r1, 0x12]
@@ -360,7 +360,7 @@ sub_813CD04: @ 813CD04
strb r3, [r1, 0x11]
adds r0, r5, 0
adds r1, r3, 0
- bl get_mapheader_by_bank_and_number
+ bl Overworld_GetMapHeaderByGroupAndId
ldrb r0, [r0, 0x14]
bl CorrectSpecialMapSecId
ldr r2, [r4]
@@ -496,7 +496,7 @@ sub_813CE34: @ 813CE34
lsrs r0, 24
lsls r1, 24
lsrs r1, 24
- bl get_mapheader_by_bank_and_number
+ bl Overworld_GetMapHeaderByGroupAndId
ldrb r0, [r0, 0x14]
pop {r1}
bx r1
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_icon.s b/asm/pokemon_icon.s
deleted file mode 100644
index 40291bee4..000000000
--- a/asm/pokemon_icon.s
+++ /dev/null
@@ -1,822 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start CreateMonIcon
-@ int CreateMonIcon(u16 speciesId, int a2, u16 a3, u16 a4, u8 a5, u32 personality, int a7)
-CreateMonIcon: @ 80D2CC4
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x30
- adds r4, r0, 0
- adds r6, r1, 0
- ldr r0, [sp, 0x4C]
- ldr r1, [sp, 0x50]
- ldr r5, [sp, 0x54]
- lsls r4, 16
- lsrs r4, 16
- lsls r2, 16
- lsrs r2, 16
- mov r8, r2
- lsls r3, 16
- lsrs r7, r3, 16
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- ldr r0, =sMonIconOamData
- str r0, [sp, 0x18]
- adds r0, r4, 0
- adds r2, r5, 0
- bl GetMonIconPtr
- str r0, [sp, 0x1C]
- ldr r0, =sMonIconAnims
- str r0, [sp, 0x20]
- ldr r0, =sMonIconAffineAnims
- str r0, [sp, 0x24]
- str r6, [sp, 0x28]
- ldr r0, =gMonIconPaletteIndices
- adds r0, r4, r0
- ldr r1, =0x0000dac0
- adds r5, r1, 0
- ldrb r0, [r0]
- adds r1, r5, r0
- add r0, sp, 0x2C
- strh r1, [r0]
- add r1, sp, 0x18
- mov r0, sp
- movs r2, 0x18
- bl memcpy
- movs r0, 0xCE
- lsls r0, 1
- cmp r4, r0
- bls _080D2D2A
- mov r0, sp
- strh r5, [r0, 0x14]
-_080D2D2A:
- mov r0, r8
- lsls r1, r0, 16
- asrs r1, 16
- lsls r2, r7, 16
- asrs r2, 16
- mov r0, sp
- mov r3, r9
- bl sub_80D31B4
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- lsls r0, r4, 4
- adds r0, r4
- lsls r0, 2
- ldr r1, =gSprites
- adds r0, r1
- bl sub_80D30DC
- adds r0, r4, 0
- add sp, 0x30
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- .pool
- thumb_func_end CreateMonIcon
-
- thumb_func_start sub_80D2D78
-sub_80D2D78: @ 80D2D78
- push {r4-r7,lr}
- sub sp, 0x18
- adds r4, r2, 0
- adds r5, r3, 0
- ldr r6, [sp, 0x2C]
- lsls r0, 16
- lsrs r0, 16
- lsls r4, 16
- lsrs r4, 16
- lsls r5, 16
- lsrs r5, 16
- lsls r6, 24
- lsrs r6, 24
- mov r3, sp
- ldr r2, =sMonIconOamData
- str r2, [sp]
- movs r2, 0
- str r2, [sp, 0x4]
- ldr r2, =sMonIconAnims
- str r2, [sp, 0x8]
- ldr r2, =sMonIconAffineAnims
- str r2, [sp, 0xC]
- str r1, [sp, 0x10]
- ldr r2, =gMonIconPaletteIndices
- adds r2, r0, r2
- ldr r7, =0x0000dac0
- adds r1, r7, 0
- ldrb r2, [r2]
- adds r1, r2
- strh r1, [r3, 0x14]
- ldr r1, [sp, 0x30]
- bl GetMonIconTiles
- str r0, [sp, 0x4]
- lsls r4, 16
- asrs r4, 16
- lsls r5, 16
- asrs r5, 16
- mov r0, sp
- adds r1, r4, 0
- adds r2, r5, 0
- adds r3, r6, 0
- bl sub_80D31B4
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- lsls r0, r4, 4
- adds r0, r4
- lsls r0, 2
- ldr r1, =gSprites
- adds r0, r1
- bl sub_80D30DC
- adds r0, r4, 0
- add sp, 0x18
- pop {r4-r7}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80D2D78
-
- thumb_func_start mon_icon_convert_unown_species_id
-@ u16 mon_icon_convert_unown_species_id(u16 speciesId, u32 personality)
-mon_icon_convert_unown_species_id: @ 80D2E08
- push {lr}
- lsls r0, 16
- lsrs r2, r0, 16
- cmp r2, 0xC9
- bne _080D2E32
- adds r0, r1, 0
- bl GetUnownLetterByPersonality
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0
- bne _080D2E24
- movs r0, 0xC9
- b _080D2E2E
-_080D2E24:
- movs r1, 0xCE
- lsls r1, 1
- adds r0, r1
- lsls r0, 16
- lsrs r0, 16
-_080D2E2E:
- adds r1, r0, 0
- b _080D2E40
-_080D2E32:
- movs r0, 0xCE
- lsls r0, 1
- adds r1, r2, 0
- cmp r1, r0
- bls _080D2E40
- movs r1, 0x82
- lsls r1, 1
-_080D2E40:
- adds r0, r1, 0
- pop {r1}
- bx r1
- thumb_func_end mon_icon_convert_unown_species_id
-
- thumb_func_start GetUnownLetterByPersonality
-GetUnownLetterByPersonality: @ 80D2E48
- push {lr}
- adds r2, r0, 0
- cmp r2, 0
- beq _080D2E7E
- movs r0, 0xC0
- lsls r0, 18
- ands r0, r2
- lsrs r0, 18
- movs r1, 0xC0
- lsls r1, 10
- ands r1, r2
- lsrs r1, 12
- orrs r0, r1
- movs r1, 0xC0
- lsls r1, 2
- ands r1, r2
- lsrs r1, 6
- orrs r0, r1
- movs r1, 0x3
- ands r1, r2
- orrs r0, r1
- movs r1, 0x1C
- bl __umodsi3
- lsls r0, 16
- lsrs r0, 16
- b _080D2E80
-_080D2E7E:
- movs r0, 0
-_080D2E80:
- pop {r1}
- bx r1
- thumb_func_end GetUnownLetterByPersonality
-
- thumb_func_start sub_80D2E84
-sub_80D2E84: @ 80D2E84
- push {r4,lr}
- sub sp, 0x4
- lsls r0, 16
- lsrs r4, r0, 16
- adds r0, r4, 0
- mov r1, sp
- bl MailSpeciesToSpecies
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0xC9
- bne _080D2EBA
- mov r0, sp
- ldrh r0, [r0]
- cmp r0, 0
- bne _080D2EAA
- mov r1, sp
- adds r0, 0xC9
- b _080D2EB2
-_080D2EAA:
- mov r1, sp
- movs r2, 0xCE
- lsls r2, 1
- adds r0, r2
-_080D2EB2:
- strh r0, [r1]
- mov r0, sp
- ldrh r0, [r0]
- b _080D2ED2
-_080D2EBA:
- movs r0, 0xCE
- lsls r0, 1
- cmp r4, r0
- bls _080D2EC6
- movs r4, 0x82
- lsls r4, 1
-_080D2EC6:
- adds r0, r4, 0
- movs r1, 0
- bl mon_icon_convert_unown_species_id
- lsls r0, 16
- lsrs r0, 16
-_080D2ED2:
- add sp, 0x4
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80D2E84
-
- thumb_func_start GetMonIconPtr
-@ void *GetMonIconPtr(u16 speciesId, u32 personality, bool32)
-GetMonIconPtr: @ 80D2EDC
- push {r4,lr}
- adds r4, r2, 0
- lsls r0, 16
- lsrs r0, 16
- bl mon_icon_convert_unown_species_id
- lsls r0, 16
- lsrs r0, 16
- adds r1, r4, 0
- bl GetMonIconTiles
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end GetMonIconPtr
-
- thumb_func_start sub_80D2EF8
-sub_80D2EF8: @ 80D2EF8
- push {lr}
- bl sub_80D328C
- pop {r0}
- bx r0
- thumb_func_end sub_80D2EF8
-
- thumb_func_start sub_80D2F04
-sub_80D2F04: @ 80D2F04
- push {r4,r5,lr}
- movs r4, 0
- ldr r5, =gMonIconPaletteTable
-_080D2F0A:
- lsls r0, r4, 3
- adds r0, r5
- bl LoadSpritePalette
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x5
- bls _080D2F0A
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80D2F04
-
- thumb_func_start sub_80D2F28
-sub_80D2F28: @ 80D2F28
- push {r4,lr}
- lsls r0, 16
- lsrs r1, r0, 16
- movs r0, 0xCE
- lsls r0, 1
- cmp r1, r0
- bls _080D2F3A
- movs r1, 0x82
- lsls r1, 1
-_080D2F3A:
- ldr r0, =gMonIconPaletteIndices
- adds r0, r1, r0
- ldrb r0, [r0]
- ldr r1, =gMonIconPaletteTable
- lsls r0, 3
- adds r4, r0, r1
- ldrh r0, [r4, 0x4]
- bl IndexOfSpritePaletteTag
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFF
- bne _080D2F5A
- adds r0, r4, 0
- bl LoadSpritePalette
-_080D2F5A:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80D2F28
-
- thumb_func_start sub_80D2F68
-sub_80D2F68: @ 80D2F68
- push {r4,lr}
- lsls r0, 16
- lsrs r0, 16
- ldr r1, =gMonIconPaletteIndices
- adds r0, r1
- ldrb r0, [r0]
- ldr r1, =gMonIconPaletteTable
- lsls r0, 3
- adds r4, r0, r1
- ldrh r0, [r4, 0x4]
- bl IndexOfSpritePaletteTag
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFF
- bne _080D2F8E
- adds r0, r4, 0
- bl LoadSpritePalette
-_080D2F8E:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80D2F68
-
- thumb_func_start sub_80D2F9C
-sub_80D2F9C: @ 80D2F9C
- push {r4,r5,lr}
- movs r4, 0
- ldr r5, =gMonIconPaletteTable
-_080D2FA2:
- lsls r0, r4, 3
- adds r0, r5
- ldrh r0, [r0, 0x4]
- bl FreeSpritePaletteByTag
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x5
- bls _080D2FA2
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80D2F9C
-
- thumb_func_start sub_80D2FC0
-sub_80D2FC0: @ 80D2FC0
- push {lr}
- lsls r0, 16
- lsrs r1, r0, 16
- movs r0, 0xCE
- lsls r0, 1
- cmp r1, r0
- bls _080D2FD2
- movs r1, 0x82
- lsls r1, 1
-_080D2FD2:
- ldr r0, =gMonIconPaletteIndices
- adds r0, r1, r0
- ldrb r0, [r0]
- ldr r1, =gMonIconPaletteTable
- lsls r0, 3
- adds r0, r1
- ldrh r0, [r0, 0x4]
- bl FreeSpritePaletteByTag
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80D2FC0
-
- thumb_func_start sub_80D2FF0
-sub_80D2FF0: @ 80D2FF0
- push {lr}
- lsls r0, 16
- lsrs r0, 16
- ldr r1, =gMonIconPaletteIndices
- adds r0, r1
- ldrb r0, [r0]
- ldr r1, =gMonIconPaletteTable
- lsls r0, 3
- adds r0, r1
- ldrh r0, [r0, 0x4]
- bl FreeSpritePaletteByTag
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80D2FF0
-
- thumb_func_start sub_80D3014
-sub_80D3014: @ 80D3014
- push {lr}
- bl sub_80D30DC
- pop {r0}
- bx r0
- thumb_func_end sub_80D3014
-
- thumb_func_start GetMonIconTiles
-@ void *GetMonIconTiles(u16 speciesId, bool32)
-GetMonIconTiles: @ 80D3020
- push {lr}
- adds r3, r1, 0
- lsls r0, 16
- lsrs r0, 16
- ldr r2, =gMonIconTable
- lsls r1, r0, 2
- adds r1, r2
- ldr r2, [r1]
- movs r1, 0xCD
- lsls r1, 1
- cmp r0, r1
- bne _080D3042
- cmp r3, 0x1
- bne _080D3042
- movs r0, 0x80
- lsls r0, 3
- adds r2, r0
-_080D3042:
- adds r0, r2, 0
- pop {r1}
- bx r1
- .pool
- thumb_func_end GetMonIconTiles
-
- thumb_func_start sub_80D304C
-sub_80D304C: @ 80D304C
- push {r4-r6,lr}
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0xA0
- bhi _080D3074
- ldr r6, =gMonIconPaletteTable
- movs r5, 0x5
-_080D305A:
- ldr r0, [r6]
- adds r1, r4, 0
- movs r2, 0x20
- bl LoadPalette
- adds r0, r4, 0
- adds r0, 0x10
- lsls r0, 16
- lsrs r4, r0, 16
- adds r6, 0x8
- subs r5, 0x1
- cmp r5, 0
- bge _080D305A
-_080D3074:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80D304C
-
- thumb_func_start sub_80D3080
-sub_80D3080: @ 80D3080
- push {lr}
- lsls r0, 16
- lsrs r1, r0, 16
- movs r0, 0xCE
- lsls r0, 1
- cmp r1, r0
- bls _080D3092
- movs r1, 0x82
- lsls r1, 1
-_080D3092:
- ldr r0, =gMonIconPaletteIndices
- adds r0, r1, r0
- ldrb r0, [r0]
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80D3080
-
- thumb_func_start sub_80D30A0
-sub_80D30A0: @ 80D30A0
- lsls r0, 16
- lsrs r0, 16
- ldr r1, =gMonIconPaletteIndices
- adds r0, r1
- ldrb r0, [r0]
- bx lr
- .pool
- thumb_func_end sub_80D30A0
-
- thumb_func_start GetValidMonIconPalettePtr
-GetValidMonIconPalettePtr: @ 80D30B0
- push {lr}
- lsls r0, 16
- lsrs r2, r0, 16
- movs r0, 0xCE
- lsls r0, 1
- cmp r2, r0
- bls _080D30C2
- movs r2, 0x82
- lsls r2, 1
-_080D30C2:
- ldr r1, =gMonIconPaletteTable
- ldr r0, =gMonIconPaletteIndices
- adds r0, r2, r0
- ldrb r0, [r0]
- lsls r0, 3
- adds r0, r1
- ldr r0, [r0]
- pop {r1}
- bx r1
- .pool
- thumb_func_end GetValidMonIconPalettePtr
-
- thumb_func_start sub_80D30DC
-sub_80D30DC: @ 80D30DC
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- adds r4, r0, 0
- movs r7, 0
- adds r6, r4, 0
- adds r6, 0x2C
- ldrb r2, [r6]
- movs r0, 0x3F
- mov r9, r0
- ands r0, r2
- cmp r0, 0
- bne _080D3190
- movs r1, 0x2A
- adds r1, r4
- mov r8, r1
- ldrb r1, [r1]
- ldr r0, [r4, 0x8]
- lsls r1, 2
- adds r1, r0
- adds r5, r4, 0
- adds r5, 0x2B
- ldrb r0, [r5]
- ldr r1, [r1]
- lsls r0, 2
- adds r0, r1
- movs r1, 0
- ldrsh r3, [r0, r1]
- movs r0, 0x2
- negs r0, r0
- cmp r3, r0
- beq _080D3126
- adds r0, 0x1
- cmp r3, r0
- bne _080D312A
- b _080D31A4
-_080D3126:
- strb r7, [r5]
- b _080D31A4
-_080D312A:
- ldr r2, =sSpriteImageSizes
- ldrb r1, [r4, 0x3]
- lsrs r1, 6
- lsls r1, 1
- ldrb r0, [r4, 0x1]
- lsrs r0, 6
- lsls r0, 3
- adds r1, r0
- adds r1, r2
- ldrh r2, [r1]
- adds r1, r2, 0
- muls r1, r3
- ldr r0, [r4, 0xC]
- adds r0, r1
- ldrh r1, [r4, 0x4]
- lsls r1, 22
- lsrs r1, 17
- ldr r3, =0x06010000
- adds r1, r3
- bl RequestSpriteCopy
- mov r0, r8
- ldrb r1, [r0]
- ldr r0, [r4, 0x8]
- lsls r1, 2
- adds r1, r0
- ldrb r0, [r5]
- ldr r1, [r1]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- lsls r0, 10
- lsrs r0, 26
- mov r1, r9
- ands r1, r0
- ldrb r2, [r6]
- movs r0, 0x40
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r6]
- ldrb r0, [r5]
- adds r0, 0x1
- strb r0, [r5]
- ldrb r7, [r5]
- b _080D31A4
- .pool
-_080D3190:
- lsls r0, r2, 26
- lsrs r0, 26
- subs r0, 0x1
- movs r1, 0x3F
- ands r0, r1
- movs r1, 0x40
- negs r1, r1
- ands r1, r2
- orrs r1, r0
- strb r1, [r6]
-_080D31A4:
- adds r0, r7, 0
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_80D30DC
-
- thumb_func_start sub_80D31B4
-sub_80D31B4: @ 80D31B4
- push {r4-r6,lr}
- mov r6, r9
- mov r5, r8
- push {r5,r6}
- sub sp, 0x38
- mov r9, r0
- adds r4, r1, 0
- adds r5, r2, 0
- mov r8, r3
- lsls r4, 16
- lsrs r4, 16
- lsls r5, 16
- lsrs r5, 16
- mov r0, r8
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- movs r0, 0
- str r0, [sp, 0x30]
- ldr r2, =sSpriteImageSizes
- mov r0, r9
- ldr r6, [r0]
- ldrb r1, [r6, 0x3]
- lsrs r1, 6
- lsls r1, 1
- ldrb r0, [r6, 0x1]
- lsrs r0, 6
- lsls r0, 3
- adds r1, r0
- adds r1, r2
- ldrh r2, [r1]
- ldr r1, =0xffff0000
- add r3, sp, 0x30
- ldr r0, [r3, 0x4]
- ands r0, r1
- orrs r0, r2
- str r0, [r3, 0x4]
- add r1, sp, 0x18
- ldr r0, =0x0000ffff
- strh r0, [r1]
- mov r0, r9
- ldrh r2, [r0, 0x14]
- mov r0, sp
- adds r0, 0x1A
- strh r2, [r0]
- str r6, [sp, 0x1C]
- mov r2, r9
- ldr r0, [r2, 0x8]
- str r0, [sp, 0x20]
- str r3, [sp, 0x24]
- ldr r0, [r2, 0xC]
- str r0, [sp, 0x28]
- ldr r0, [r2, 0x10]
- str r0, [sp, 0x2C]
- mov r0, sp
- movs r2, 0x18
- bl memcpy
- lsls r4, 16
- asrs r4, 16
- lsls r5, 16
- asrs r5, 16
- mov r0, sp
- adds r1, r4, 0
- adds r2, r5, 0
- mov r3, r8
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- ldr r6, =gSprites
- lsls r3, r0, 4
- adds r3, r0
- lsls r3, 2
- adds r4, r3, r6
- adds r5, r4, 0
- adds r5, 0x2C
- ldrb r1, [r5]
- movs r2, 0x40
- orrs r1, r2
- strb r1, [r5]
- adds r4, 0x3F
- ldrb r2, [r4]
- movs r1, 0x5
- negs r1, r1
- ands r1, r2
- strb r1, [r4]
- adds r6, 0xC
- adds r3, r6
- mov r2, r9
- ldr r1, [r2, 0x4]
- str r1, [r3]
- add sp, 0x38
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r6}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80D31B4
-
- thumb_func_start sub_80D328C
-sub_80D328C: @ 80D328C
- push {lr}
- sub sp, 0x8
- movs r1, 0
- str r1, [sp]
- ldr r3, =sSpriteImageSizes
- ldrb r2, [r0, 0x3]
- lsrs r2, 6
- lsls r2, 1
- ldrb r1, [r0, 0x1]
- lsrs r1, 6
- lsls r1, 3
- adds r2, r1
- adds r2, r3
- ldrh r3, [r2]
- ldr r2, =0xffff0000
- ldr r1, [sp, 0x4]
- ands r1, r2
- orrs r1, r3
- str r1, [sp, 0x4]
- mov r1, sp
- str r1, [r0, 0xC]
- bl DestroySprite
- add sp, 0x8
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80D328C
-
- thumb_func_start sub_80D32C8
-sub_80D32C8: @ 80D32C8
- mov r12, r0
- adds r0, 0x2A
- movs r3, 0
- strb r1, [r0]
- mov r2, r12
- adds r2, 0x2C
- ldrb r1, [r2]
- movs r0, 0x40
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
- mov r0, r12
- adds r0, 0x2B
- strb r3, [r0]
- bx lr
- thumb_func_end sub_80D32C8
-
- .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 2184b22b2..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, =gBattlerInMenuId
- 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, =gPotentialItemEffectBattler
- ldr r0, =gBattlerInMenuId
- 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_storage_system.s b/asm/pokemon_storage_system.s
index 2ff444f56..5988eb732 100644
--- a/asm/pokemon_storage_system.s
+++ b/asm/pokemon_storage_system.s
@@ -245,7 +245,7 @@ _080C72AC:
b _080C7318
.pool
_080C730C:
- bl sub_80ABDFC
+ bl IsWeatherNotFadingIn
lsls r0, 24
cmp r0, 0
bne _080C7318
@@ -657,7 +657,7 @@ sub_80C7678: @ 80C7678
ldr r1, =gFieldCallback
ldr r0, =mapldr_0808C6D8
str r0, [r1]
- ldr r0, =c2_exit_to_overworld_2_switch
+ ldr r0, =CB2_ReturnToField
bl SetMainCallback2
pop {r0}
bx r0
@@ -7034,7 +7034,7 @@ _080CAEFA:
thumb_func_start sub_80CAF04
sub_80CAF04: @ 80CAF04
push {r4-r6,lr}
- bl sub_80D2F04
+ bl LoadMonIconPalettes
movs r2, 0
ldr r3, =gUnknown_02039D08
ldr r5, =0x00000b08
@@ -14810,7 +14810,7 @@ _080CF020:
beq _080CF0AC
ldr r3, =0x00000d65
adds r4, r3
- bl ItemId_GetItem
+ bl ItemId_GetName
adds r1, r0, 0
adds r0, r4, 0
movs r2, 0
@@ -19057,7 +19057,7 @@ sub_80D12B8: @ 80D12B8
ldr r1, =0x00002234
adds r0, r1
ldrh r0, [r0]
- bl ItemId_GetItem
+ bl ItemId_GetName
pop {r1}
bx r1
.pool
diff --git a/asm/pokemon_summary_screen.s b/asm/pokemon_summary_screen.s
index a94d69b96..c7f2ad085 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]
@@ -2024,7 +2024,7 @@ sub_81C4EEC: @ 81C4EEC
thumb_func_start sub_81C4EFC
sub_81C4EFC: @ 81C4EFC
push {lr}
- ldr r1, =sub_8086194
+ ldr r1, =CB2_ReturnToFieldWithOpenMenu
movs r0, 0
bl sub_81C4F98
pop {r0}
@@ -2073,7 +2073,7 @@ sub_81C4F44: @ 81C4F44
ldr r0, =gUnknown_03005DB0
ldr r1, =hm_add_c3_without_phase_2
str r1, [r0]
- ldr r1, =c2_exit_to_overworld_2_switch
+ ldr r1, =CB2_ReturnToField
movs r0, 0x3
bl sub_81C4F98
adds r0, r4, 0
@@ -3469,7 +3469,7 @@ sub_81C5B4C: @ 81C5B4C
ldr r4, =gUnknown_0203CF38
subs r2, r4, 0x2
adds r1, r4, 0
- bl sub_81AE6C8
+ bl DestroyListMenuTask
ldr r0, =gUnknown_0203CF2C
ldr r0, [r0]
ldr r0, [r0]
@@ -3545,7 +3545,7 @@ _081C5C12:
adds r1, r4, 0
adds r1, 0x8
adds r2, r4, 0x6
- bl sub_81AE860
+ bl ListMenuGetScrollAndRow
ldrh r1, [r4, 0x8]
ldrh r0, [r4, 0x6]
adds r1, r0
@@ -3572,7 +3572,7 @@ _081C5C5C:
mov r8, r1
mov r2, r8
subs r2, 0x2
- bl sub_81AE860
+ bl ListMenuGetScrollAndRow
movs r0, 0x2
negs r0, r0
cmp r6, r0
@@ -4642,7 +4642,7 @@ sub_81C65CC: @ 81C65CC
ldrb r0, [r4]
adds r1, r6, 0
adds r2, r7, 0
- bl sub_81AE6C8
+ bl DestroyListMenuTask
bl sub_81C5924
bl sub_81C59BC
bl sub_81C5314
@@ -4686,7 +4686,7 @@ sub_81C6648: @ 81C6648
.pool
_081C667C:
ldrh r0, [r5]
- bl itemid_is_unique
+ bl ItemId_GetImportance
lsls r0, 24
cmp r0, 0
bne _081C66A0
@@ -4799,7 +4799,7 @@ sub_81C674C: @ 81C674C
.pool
_081C677C:
ldrh r0, [r5]
- bl itemid_is_unique
+ bl ItemId_GetImportance
lsls r0, 24
cmp r0, 0
bne _081C6790
@@ -4953,7 +4953,7 @@ sub_81C68B0: @ 81C68B0
ldrb r0, [r4]
ldr r1, =gUnknown_0203CF38
subs r2, r1, 0x2
- bl sub_81AE860
+ bl ListMenuGetScrollAndRow
b _081C6940
.pool
_081C68F8:
@@ -4964,7 +4964,7 @@ _081C68F8:
ldr r4, =gUnknown_0203CF38
subs r2, r4, 0x2
adds r1, r4, 0
- bl sub_81AE860
+ bl ListMenuGetScrollAndRow
movs r0, 0
bl sub_81C7028
subs r4, 0x8
@@ -5054,7 +5054,7 @@ _081C69A8:
ldrb r0, [r5]
adds r1, r7, 0
mov r2, r8
- bl sub_81AE6C8
+ bl DestroyListMenuTask
movs r3, 0x2
ldrsh r0, [r5, r3]
cmp r0, r4
@@ -5109,7 +5109,7 @@ sub_81C6A14: @ 81C6A14
ldrb r0, [r4]
adds r1, r5, 0
adds r2, r7, 0
- bl sub_81AE6C8
+ bl DestroyListMenuTask
movs r0, 0x2
ldrsh r2, [r4, r0]
ldrh r0, [r5]
diff --git a/asm/pokenav.s b/asm/pokenav.s
index 89516e65a..c36dfbeca 100644
--- a/asm/pokenav.s
+++ b/asm/pokenav.s
@@ -14,7 +14,7 @@ CB2_PokeNav: @ 81C7250
str r0, [r4]
cmp r0, 0
bne _081C7270
- ldr r0, =sub_8086194
+ ldr r0, =CB2_ReturnToFieldWithOpenMenu
bl SetMainCallback2
b _081C7292
.pool
@@ -66,7 +66,7 @@ sub_81C72BC: @ 81C72BC
str r0, [r4]
cmp r0, 0
bne _081C72F0
- ldr r0, =c2_exit_to_overworld_1_continue_scripts_restart_music
+ ldr r0, =CB2_ReturnToFieldContinueScript
bl SetMainCallback2
b _081C7320
.pool
@@ -351,12 +351,12 @@ _081C752C:
bl sub_81C7334
cmp r4, 0
beq _081C755C
- ldr r0, =c2_exit_to_overworld_1_continue_scripts_restart_music
+ ldr r0, =CB2_ReturnToFieldContinueScript
bl SetMainCallback2
b _081C7562
.pool
_081C755C:
- ldr r0, =sub_8086194
+ ldr r0, =CB2_ReturnToFieldWithOpenMenu
bl SetMainCallback2
_081C7562:
pop {r4-r7}
@@ -7611,7 +7611,7 @@ _081CAD4C:
ldrh r5, [r4, 0x8]
_081CAD50:
adds r0, r5, 0
- bl sub_81D15F4
+ bl MatchCallFlagGetByIndex
cmp r0, 0
beq _081CAD80
ldrh r0, [r4, 0xA]
@@ -7834,7 +7834,7 @@ sub_81CAEBC: @ 81CAEBC
b _081CAEDC
_081CAED4:
ldrh r0, [r1, 0x1E]
- bl sub_81D1854
+ bl MatchCall_GetRematchTableIdx
adds r4, r0, 0
_081CAEDC:
cmp r4, 0x4E
@@ -7870,7 +7870,7 @@ sub_81CAF04: @ 81CAF04
cmp r0, 0
bne _081CAF34
ldrh r0, [r1, 0x1E]
- bl sub_81D15BC
+ bl GetTrainerIdxByRematchIdx
adds r4, r0, 0
ldr r1, =gTrainers
lsls r0, r4, 2
@@ -7883,7 +7883,7 @@ sub_81CAF04: @ 81CAF04
_081CAF34:
ldrh r5, [r1, 0x1E]
adds r0, r5, 0
- bl sub_81D1854
+ bl MatchCall_GetRematchTableIdx
adds r4, r0, 0
cmp r4, 0x4E
bne _081CAF58
@@ -7897,7 +7897,7 @@ _081CAF34:
.pool
_081CAF58:
adds r0, r4, 0
- bl sub_81D15BC
+ bl GetTrainerIdxByRematchIdx
adds r4, r0, 0
ldr r0, =gTrainers
lsls r1, r4, 2
@@ -7938,7 +7938,7 @@ _081CAFA4:
cmp r0, 0
bne _081CAFC4
ldrh r0, [r1, 0x1E]
- bl sub_81D15BC
+ bl GetTrainerIdxByRematchIdx
ldr r1, =gStringVar4
bl sub_81967AC
strb r0, [r6]
@@ -7947,7 +7947,7 @@ _081CAFA4:
_081CAFC4:
ldrh r0, [r1, 0x1E]
ldr r1, =gStringVar4
- bl sub_81D189C
+ bl MatchCall_GetMessage
_081CAFCC:
ldr r0, =gStringVar4
_081CAFCE:
@@ -7970,7 +7970,7 @@ sub_81CAFD8: @ 81CAFD8
cmp r0, 0
beq _081CB004
ldrh r0, [r4, 0x1E]
- bl sub_81D1854
+ bl MatchCall_GetRematchTableIdx
adds r1, r0, 0
cmp r1, 0x4E
bne _081CB006
@@ -8036,7 +8036,7 @@ sub_81CB050: @ 81CB050
cmp r0, 0
bne _081CB088
ldrh r0, [r2, 0x2]
- bl sub_81D15BC
+ bl GetTrainerIdxByRematchIdx
lsls r1, r0, 2
adds r1, r0
lsls r1, 3
@@ -8095,7 +8095,7 @@ sub_81CB0C8: @ 81CB0C8
ldrh r2, [r0, 0xA]
ldrh r1, [r0, 0xC]
adds r0, r2, 0
- bl get_mapheader_by_bank_and_number
+ bl Overworld_GetMapHeaderByGroupAndId
ldrb r0, [r0, 0x14]
pop {r1}
bx r1
@@ -8207,11 +8207,11 @@ _081CB18A:
movs r4, 0
_081CB192:
adds r0, r4, 0
- bl sub_81D15F4
+ bl MatchCallFlagGetByIndex
cmp r0, 0
beq _081CB1C0
adds r0, r4, 0
- bl sub_81D1854
+ bl MatchCall_GetRematchTableIdx
ldr r1, =gSaveBlock1Ptr
ldr r1, [r1]
ldr r2, =0x000009ca
@@ -20697,1034 +20697,7 @@ _081D156A:
.pool
thumb_func_end sub_81D1538
- thumb_func_start sub_81D1574
-sub_81D1574: @ 81D1574
- push {lr}
- ldrb r0, [r0]
- cmp r0, 0x5
- bhi _081D15A4
- lsls r0, 2
- ldr r1, =_081D158C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_081D158C:
- .4byte _081D15A4
- .4byte _081D15A8
- .4byte _081D15AC
- .4byte _081D15B4
- .4byte _081D15B0
- .4byte _081D15A8
-_081D15A4:
- movs r0, 0
- b _081D15B6
-_081D15A8:
- movs r0, 0x1
- b _081D15B6
-_081D15AC:
- movs r0, 0x2
- b _081D15B6
-_081D15B0:
- movs r0, 0x3
- b _081D15B6
-_081D15B4:
- movs r0, 0x4
-_081D15B6:
- pop {r1}
- bx r1
- thumb_func_end sub_81D1574
-
- thumb_func_start sub_81D15BC
-sub_81D15BC: @ 81D15BC
- ldr r1, =gRematchTable
- lsls r0, 4
- adds r0, r1
- ldrh r0, [r0]
- bx lr
- .pool
- thumb_func_end sub_81D15BC
-
- thumb_func_start sub_81D15CC
-sub_81D15CC: @ 81D15CC
- push {lr}
- adds r3, r0, 0
- movs r1, 0
- ldr r2, =gRematchTable
-_081D15D4:
- ldrh r0, [r2]
- cmp r0, r3
- bne _081D15E4
- adds r0, r1, 0
- b _081D15F0
- .pool
-_081D15E4:
- adds r2, 0x10
- adds r1, 0x1
- cmp r1, 0x4D
- ble _081D15D4
- movs r0, 0x1
- negs r0, r0
-_081D15F0:
- pop {r1}
- bx r1
- thumb_func_end sub_81D15CC
-
- thumb_func_start sub_81D15F4
-sub_81D15F4: @ 81D15F4
- push {r4,lr}
- cmp r0, 0x14
- bhi _081D1620
- ldr r1, =gUnknown_086252A8
- lsls r0, 2
- adds r0, r1
- ldr r4, [r0]
- adds r0, r4, 0
- bl sub_81D1574
- ldr r1, =gUnknown_086252FC
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- adds r0, r4, 0
- bl _call_via_r1
- b _081D1622
- .pool
-_081D1620:
- movs r0, 0
-_081D1622:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_81D15F4
-
- thumb_func_start sub_81D1628
-sub_81D1628: @ 81D1628
- push {lr}
- adds r2, r0, 0
- ldrh r1, [r2, 0x2]
- ldr r0, =0x0000ffff
- cmp r1, r0
- beq _081D1644
- adds r0, r1, 0
- bl FlagGet
- lsls r0, 24
- lsrs r0, 24
- b _081D1646
- .pool
-_081D1644:
- movs r0, 0x1
-_081D1646:
- pop {r1}
- bx r1
- thumb_func_end sub_81D1628
-
- thumb_func_start sub_81D164C
-sub_81D164C: @ 81D164C
- push {lr}
- adds r2, r0, 0
- ldrh r1, [r2, 0x2]
- ldr r0, =0x0000ffff
- cmp r1, r0
- beq _081D1668
- adds r0, r1, 0
- bl FlagGet
- lsls r0, 24
- lsrs r0, 24
- b _081D166A
- .pool
-_081D1668:
- movs r0, 0x1
-_081D166A:
- pop {r1}
- bx r1
- thumb_func_end sub_81D164C
-
- thumb_func_start sub_81D1670
-sub_81D1670: @ 81D1670
- push {lr}
- adds r2, r0, 0
- ldrh r1, [r2, 0x2]
- ldr r0, =0x0000ffff
- cmp r1, r0
- beq _081D168C
- adds r0, r1, 0
- bl FlagGet
- lsls r0, 24
- lsrs r0, 24
- b _081D168E
- .pool
-_081D168C:
- movs r0, 0x1
-_081D168E:
- pop {r1}
- bx r1
- thumb_func_end sub_81D1670
-
- thumb_func_start sub_81D1694
-sub_81D1694: @ 81D1694
- push {lr}
- adds r2, r0, 0
- ldr r0, =gSaveBlock2Ptr
- ldr r1, [r0]
- ldrb r0, [r2, 0x1]
- ldrb r1, [r1, 0x8]
- cmp r0, r1
- beq _081D16AC
- movs r0, 0
- b _081D16C6
- .pool
-_081D16AC:
- ldrh r1, [r2, 0x2]
- ldr r0, =0x0000ffff
- cmp r1, r0
- beq _081D16C4
- adds r0, r1, 0
- bl FlagGet
- lsls r0, 24
- lsrs r0, 24
- b _081D16C6
- .pool
-_081D16C4:
- movs r0, 0x1
-_081D16C6:
- pop {r1}
- bx r1
- thumb_func_end sub_81D1694
-
- thumb_func_start sub_81D16CC
-sub_81D16CC: @ 81D16CC
- push {lr}
- ldrh r0, [r0, 0x2]
- bl FlagGet
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- thumb_func_end sub_81D16CC
-
- thumb_func_start sub_81D16DC
-sub_81D16DC: @ 81D16DC
- push {r4,lr}
- cmp r0, 0x14
- bhi _081D170C
- ldr r1, =gUnknown_086252A8
- lsls r0, 2
- adds r0, r1
- ldr r4, [r0]
- adds r0, r4, 0
- bl sub_81D1574
- ldr r1, =gUnknown_08625310
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- adds r0, r4, 0
- bl _call_via_r1
- lsls r0, 24
- lsrs r0, 24
- b _081D170E
- .pool
-_081D170C:
- movs r0, 0
-_081D170E:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_81D16DC
-
- thumb_func_start sub_81D1714
-sub_81D1714: @ 81D1714
- ldrb r0, [r0, 0x1]
- bx lr
- thumb_func_end sub_81D1714
-
- thumb_func_start sub_81D1718
-sub_81D1718: @ 81D1718
- ldrb r0, [r0, 0x1]
- bx lr
- thumb_func_end sub_81D1718
-
- thumb_func_start sub_81D171C
-sub_81D171C: @ 81D171C
- push {r4-r7,lr}
- adds r5, r0, 0
- movs r6, 0
- ldr r7, =0x0000ffff
- b _081D172E
- .pool
-_081D172C:
- adds r6, 0x1
-_081D172E:
- ldr r0, [r5, 0x10]
- lsls r4, r6, 2
- adds r1, r4, r0
- ldrh r0, [r1]
- cmp r0, r7
- beq _081D1744
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- bne _081D172C
-_081D1744:
- ldr r0, [r5, 0x10]
- adds r0, r4, r0
- ldrb r0, [r0, 0x2]
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_81D171C
-
- thumb_func_start sub_81D1750
-sub_81D1750: @ 81D1750
- movs r0, 0xD5
- bx lr
- thumb_func_end sub_81D1750
-
- thumb_func_start sub_81D1754
-sub_81D1754: @ 81D1754
- movs r0, 0xD5
- bx lr
- thumb_func_end sub_81D1754
-
- thumb_func_start sub_81D1758
-sub_81D1758: @ 81D1758
- push {r4,lr}
- cmp r0, 0x14
- bhi _081D1784
- ldr r1, =gUnknown_086252A8
- lsls r0, 2
- adds r0, r1
- ldr r4, [r0]
- adds r0, r4, 0
- bl sub_81D1574
- ldr r1, =gUnknown_08625324
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- adds r0, r4, 0
- bl _call_via_r1
- b _081D1786
- .pool
-_081D1784:
- movs r0, 0
-_081D1786:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_81D1758
-
- thumb_func_start sub_81D178C
-sub_81D178C: @ 81D178C
- movs r0, 0
- bx lr
- thumb_func_end sub_81D178C
-
- thumb_func_start sub_81D1790
-sub_81D1790: @ 81D1790
- push {lr}
- adds r1, r0, 0
- ldrh r0, [r1, 0x4]
- cmp r0, 0x48
- bhi _081D17B8
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r2, =0x000009ca
- adds r0, r2
- ldrh r1, [r1, 0x4]
- adds r0, r1
- ldrb r1, [r0]
- negs r0, r1
- orrs r0, r1
- lsrs r0, 31
- b _081D17BA
- .pool
-_081D17B8:
- movs r0, 0
-_081D17BA:
- pop {r1}
- bx r1
- thumb_func_end sub_81D1790
-
- thumb_func_start sub_81D17C0
-sub_81D17C0: @ 81D17C0
- ldr r1, =gSaveBlock1Ptr
- ldr r1, [r1]
- ldr r2, =0x000009ca
- adds r1, r2
- ldrh r0, [r0, 0x4]
- adds r1, r0
- ldrb r1, [r1]
- negs r0, r1
- orrs r0, r1
- lsrs r0, 31
- bx lr
- .pool
- thumb_func_end sub_81D17C0
-
- thumb_func_start sub_81D17E0
-sub_81D17E0: @ 81D17E0
- movs r0, 0
- bx lr
- thumb_func_end sub_81D17E0
-
- thumb_func_start sub_81D17E4
-sub_81D17E4: @ 81D17E4
- movs r0, 0
- bx lr
- thumb_func_end sub_81D17E4
-
- thumb_func_start sub_81D17E8
-sub_81D17E8: @ 81D17E8
- push {r4,r5,lr}
- adds r5, r0, 0
- cmp r5, 0x14
- bhi _081D1832
- ldr r1, =gUnknown_086252A8
- lsls r0, r5, 2
- adds r0, r1
- ldr r4, [r0]
- adds r0, r4, 0
- bl sub_81D1574
- adds r2, r0, 0
- ldr r1, =gUnknown_08625338
- lsls r0, r2, 2
- adds r0, r1
- ldr r1, [r0]
- adds r0, r4, 0
- bl _call_via_r1
- cmp r0, 0
- beq _081D1820
-_081D1812:
- movs r0, 0x1
- b _081D1834
- .pool
-_081D1820:
- movs r2, 0
- ldr r1, =gUnknown_08625388
-_081D1824:
- ldrh r0, [r1]
- cmp r0, r5
- beq _081D1812
- adds r1, 0x18
- adds r2, 0x1
- cmp r2, 0x3
- bls _081D1824
-_081D1832:
- movs r0, 0
-_081D1834:
- pop {r4,r5}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_81D17E8
-
- thumb_func_start sub_81D1840
-sub_81D1840: @ 81D1840
- movs r0, 0
- bx lr
- thumb_func_end sub_81D1840
-
- thumb_func_start sub_81D1844
-sub_81D1844: @ 81D1844
- movs r0, 0x1
- bx lr
- thumb_func_end sub_81D1844
-
- thumb_func_start sub_81D1848
-sub_81D1848: @ 81D1848
- movs r0, 0x1
- bx lr
- thumb_func_end sub_81D1848
-
- thumb_func_start sub_81D184C
-sub_81D184C: @ 81D184C
- movs r0, 0
- bx lr
- thumb_func_end sub_81D184C
-
- thumb_func_start sub_81D1850
-sub_81D1850: @ 81D1850
- movs r0, 0
- bx lr
- thumb_func_end sub_81D1850
-
- thumb_func_start sub_81D1854
-sub_81D1854: @ 81D1854
- push {r4,lr}
- cmp r0, 0x14
- bhi _081D1880
- ldr r1, =gUnknown_086252A8
- lsls r0, 2
- adds r0, r1
- ldr r4, [r0]
- adds r0, r4, 0
- bl sub_81D1574
- ldr r1, =gUnknown_0862534C
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- adds r0, r4, 0
- bl _call_via_r1
- b _081D1882
- .pool
-_081D1880:
- movs r0, 0x4E
-_081D1882:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_81D1854
-
- thumb_func_start sub_81D1888
-sub_81D1888: @ 81D1888
- movs r0, 0x4E
- bx lr
- thumb_func_end sub_81D1888
-
- thumb_func_start sub_81D188C
-sub_81D188C: @ 81D188C
- ldrh r0, [r0, 0x4]
- bx lr
- thumb_func_end sub_81D188C
-
- thumb_func_start sub_81D1890
-sub_81D1890: @ 81D1890
- ldrh r0, [r0, 0x4]
- bx lr
- thumb_func_end sub_81D1890
-
- thumb_func_start sub_81D1894
-sub_81D1894: @ 81D1894
- movs r0, 0x4E
- bx lr
- thumb_func_end sub_81D1894
-
- thumb_func_start sub_81D1898
-sub_81D1898: @ 81D1898
- movs r0, 0x4E
- bx lr
- thumb_func_end sub_81D1898
-
- thumb_func_start sub_81D189C
-sub_81D189C: @ 81D189C
- push {r4,r5,lr}
- adds r5, r1, 0
- cmp r0, 0x14
- bhi _081D18C2
- ldr r1, =gUnknown_086252A8
- lsls r0, 2
- adds r0, r1
- ldr r4, [r0]
- adds r0, r4, 0
- bl sub_81D1574
- ldr r1, =gUnknown_08625360
- lsls r0, 2
- adds r0, r1
- ldr r2, [r0]
- adds r0, r4, 0
- adds r1, r5, 0
- bl _call_via_r2
-_081D18C2:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81D189C
-
- thumb_func_start sub_81D18D0
-sub_81D18D0: @ 81D18D0
- push {lr}
- ldr r0, [r0, 0xC]
- bl sub_81D1920
- pop {r0}
- bx r0
- thumb_func_end sub_81D18D0
-
- thumb_func_start sub_81D18DC
-sub_81D18DC: @ 81D18DC
- push {lr}
- adds r3, r0, 0
- adds r2, r1, 0
- ldrb r0, [r3]
- cmp r0, 0x5
- beq _081D18F0
- ldr r0, [r3, 0x10]
- bl sub_81D1920
- b _081D18F8
-_081D18F0:
- ldr r0, [r3, 0x10]
- ldrh r1, [r3, 0x4]
- bl sub_81D199C
-_081D18F8:
- pop {r0}
- bx r0
- thumb_func_end sub_81D18DC
-
- thumb_func_start sub_81D18FC
-sub_81D18FC: @ 81D18FC
- push {lr}
- ldr r0, [r0, 0xC]
- bl sub_81D1920
- pop {r0}
- bx r0
- thumb_func_end sub_81D18FC
-
- thumb_func_start sub_81D1908
-sub_81D1908: @ 81D1908
- push {lr}
- ldr r0, [r0, 0xC]
- bl sub_81D1920
- pop {r0}
- bx r0
- thumb_func_end sub_81D1908
-
- thumb_func_start sub_81D1914
-sub_81D1914: @ 81D1914
- push {lr}
- adds r0, r1, 0
- bl sub_8197080
- pop {r0}
- bx r0
- thumb_func_end sub_81D1914
-
- thumb_func_start sub_81D1920
-sub_81D1920: @ 81D1920
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- adds r6, r0, 0
- mov r9, r1
- movs r5, 0
- ldr r0, [r6]
- cmp r0, 0
- beq _081D1940
- adds r1, r6, 0
-_081D1936:
- adds r1, 0x8
- adds r5, 0x1
- ldr r0, [r1]
- cmp r0, 0
- bne _081D1936
-_081D1940:
- cmp r5, 0
- beq _081D1946
- subs r5, 0x1
-_081D1946:
- ldr r0, =0x0000ffff
- mov r8, r0
- lsls r0, r5, 3
- adds r0, 0x4
- adds r4, r0, r6
- b _081D195C
- .pool
-_081D1958:
- subs r4, 0x8
- subs r5, 0x1
-_081D195C:
- lsls r7, r5, 3
- cmp r5, 0
- beq _081D1974
- ldrh r0, [r4]
- cmp r0, r8
- beq _081D1958
- bl FlagGet
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _081D1958
-_081D1974:
- adds r4, r7, r6
- ldrh r1, [r4, 0x6]
- ldr r0, =0x0000ffff
- cmp r1, r0
- beq _081D1984
- adds r0, r1, 0
- bl FlagSet
-_081D1984:
- ldr r1, [r4]
- mov r0, r9
- bl StringExpandPlaceholders
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81D1920
-
- thumb_func_start sub_81D199C
-sub_81D199C: @ 81D199C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- adds r6, r0, 0
- mov r10, r2
- lsls r1, 16
- lsrs r7, r1, 16
- movs r5, 0
- ldr r0, [r6]
- cmp r0, 0
- beq _081D19E6
- ldrh r0, [r6, 0x4]
- ldr r1, =0x0000fffe
- cmp r0, r1
- beq _081D1A24
- ldr r0, =0x0000ffff
- mov r9, r0
- mov r8, r1
- adds r4, r6, 0
-_081D19C6:
- ldrh r0, [r4, 0x4]
- cmp r0, r9
- beq _081D19D6
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- beq _081D19E6
-_081D19D6:
- adds r4, 0x8
- adds r5, 0x1
- ldr r0, [r4]
- cmp r0, 0
- beq _081D19E6
- ldrh r0, [r4, 0x4]
- cmp r0, r8
- bne _081D19C6
-_081D19E6:
- lsls r0, r5, 3
- adds r0, r6
- ldrh r1, [r0, 0x4]
- ldr r0, =0x0000fffe
- cmp r1, r0
- beq _081D1A24
- cmp r5, 0
- beq _081D19F8
- subs r5, 0x1
-_081D19F8:
- lsls r0, r5, 3
- adds r4, r0, r6
- ldrh r1, [r4, 0x6]
- ldr r0, =0x0000ffff
- cmp r1, r0
- beq _081D1A0A
- adds r0, r1, 0
- bl FlagSet
-_081D1A0A:
- ldr r1, [r4]
- mov r0, r10
- bl StringExpandPlaceholders
- b _081D1A5C
- .pool
-_081D1A1C:
- adds r5, 0x2
- b _081D1A50
-_081D1A20:
- adds r5, 0x3
- b _081D1A50
-_081D1A24:
- ldr r0, =0x00000864
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- beq _081D1A50
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r1, =0x000009ca
- adds r0, r1
- adds r0, r7
- ldrb r0, [r0]
- cmp r0, 0
- bne _081D1A1C
- adds r0, r7, 0
- bl CountBattledRematchTeams
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x1
- bhi _081D1A20
- adds r5, 0x1
-_081D1A50:
- lsls r0, r5, 3
- adds r0, r6
- ldr r1, [r0]
- mov r0, r10
- bl StringExpandPlaceholders
-_081D1A5C:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81D199C
-
- thumb_func_start sub_81D1A78
-sub_81D1A78: @ 81D1A78
- push {r4-r6,lr}
- adds r5, r1, 0
- adds r6, r2, 0
- cmp r0, 0x14
- bhi _081D1AA2
- ldr r1, =gUnknown_086252A8
- lsls r0, 2
- adds r0, r1
- ldr r4, [r0]
- adds r0, r4, 0
- bl sub_81D1574
- ldr r1, =gUnknown_08625374
- lsls r0, 2
- adds r0, r1
- ldr r3, [r0]
- adds r0, r4, 0
- adds r1, r5, 0
- adds r2, r6, 0
- bl _call_via_r3
-_081D1AA2:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81D1A78
-
- thumb_func_start sub_81D1AB0
-sub_81D1AB0: @ 81D1AB0
- ldr r3, [r0, 0x4]
- str r3, [r1]
- ldr r0, [r0, 0x8]
- str r0, [r2]
- bx lr
- thumb_func_end sub_81D1AB0
-
- thumb_func_start sub_81D1ABC
-sub_81D1ABC: @ 81D1ABC
- push {r4,r5,lr}
- adds r5, r1, 0
- adds r4, r0, 0
- ldr r0, [r4, 0xC]
- cmp r0, 0
- bne _081D1AD0
- ldrh r0, [r4, 0x4]
- bl sub_81D1B0C
- b _081D1AD2
-_081D1AD0:
- str r0, [r2]
-_081D1AD2:
- ldr r0, [r4, 0x8]
- str r0, [r5]
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_81D1ABC
-
- thumb_func_start sub_81D1ADC
-sub_81D1ADC: @ 81D1ADC
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- ldrh r0, [r4, 0x4]
- bl sub_81D1B0C
- ldr r0, [r4, 0x8]
- str r0, [r5]
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_81D1ADC
-
- thumb_func_start sub_81D1AF4
-sub_81D1AF4: @ 81D1AF4
- ldr r3, [r0, 0x4]
- str r3, [r1]
- ldr r0, [r0, 0x8]
- str r0, [r2]
- bx lr
- thumb_func_end sub_81D1AF4
-
- thumb_func_start sub_81D1B00
-sub_81D1B00: @ 81D1B00
- ldr r3, [r0, 0x4]
- str r3, [r1]
- ldr r0, [r0, 0x8]
- str r0, [r2]
- bx lr
- thumb_func_end sub_81D1B00
-
- thumb_func_start sub_81D1B0C
-sub_81D1B0C: @ 81D1B0C
- push {r4,r5,lr}
- adds r4, r1, 0
- adds r5, r2, 0
- bl sub_81D15BC
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, =gTrainers
- adds r1, r0
- ldrb r2, [r1, 0x1]
- movs r0, 0xD
- muls r0, r2
- ldr r2, =gTrainerClassNames
- adds r0, r2
- str r0, [r4]
- adds r1, 0x4
- str r1, [r5]
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81D1B0C
-
- thumb_func_start sub_81D1B40
-sub_81D1B40: @ 81D1B40
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- adds r6, r0, 0
- movs r5, 0
- ldr r2, =gUnknown_08625388
- movs r0, 0x8
- adds r0, r2
- mov r9, r0
-_081D1B54:
- lsls r0, r5, 1
- adds r0, r5
- lsls r0, 3
- adds r0, r2
- ldrh r0, [r0]
- cmp r0, r6
- bne _081D1BBC
- adds r4, r5, 0x1
- lsls r1, 2
- mov r8, r1
- cmp r4, 0x3
- bhi _081D1BA8
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 3
- adds r0, r2
- ldrh r0, [r0]
- cmp r0, r6
- bne _081D1BA8
- ldr r7, =gUnknown_08625388
-_081D1B7C:
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 3
- adds r1, r7, 0x4
- adds r0, r1
- ldrh r0, [r0]
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- beq _081D1BA8
- adds r5, r4, 0
- adds r4, r5, 0x1
- cmp r4, 0x3
- bhi _081D1BA8
- lsls r0, r4, 1
- adds r0, r4
- lsls r0, 3
- adds r0, r7
- ldrh r0, [r0]
- cmp r0, r6
- beq _081D1B7C
-_081D1BA8:
- lsls r0, r5, 1
- adds r0, r5
- lsls r0, 3
- add r0, r8
- add r0, r9
- ldr r0, [r0]
- b _081D1BC4
- .pool
-_081D1BBC:
- adds r5, 0x1
- cmp r5, 0x3
- bls _081D1B54
- movs r0, 0
-_081D1BC4:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_81D1B40
-
- thumb_func_start sub_81D1BD0
-sub_81D1BD0: @ 81D1BD0
- push {lr}
- adds r3, r0, 0
- movs r2, 0
- ldr r1, =gUnknown_08625388
-_081D1BD8:
- ldrh r0, [r1]
- cmp r0, r3
- bne _081D1BE8
- ldrh r0, [r1, 0x2]
- b _081D1BF4
- .pool
-_081D1BE8:
- adds r1, 0x18
- adds r2, 0x1
- cmp r2, 0x3
- bls _081D1BD8
- movs r0, 0x1
- negs r0, r0
-_081D1BF4:
- pop {r1}
- bx r1
- thumb_func_end sub_81D1BD0
-
- thumb_func_start sub_81D1BF8
-sub_81D1BF8: @ 81D1BF8
- push {r4,r5,lr}
- adds r5, r0, 0
- movs r4, 0
-_081D1BFE:
- adds r0, r4, 0
- bl sub_81D1854
- cmp r0, 0x4E
- beq _081D1C10
- cmp r0, r5
- bne _081D1C10
- movs r0, 0x1
- b _081D1C18
-_081D1C10:
- adds r4, 0x1
- cmp r4, 0x14
- ble _081D1BFE
- movs r0, 0
-_081D1C18:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_81D1BF8
-
- thumb_func_start sub_81D1C20
-sub_81D1C20: @ 81D1C20
- push {lr}
- ldr r0, =gSpecialVar_0x8004
- ldrh r0, [r0]
- bl sub_81D15CC
- cmp r0, 0
- blt _081D1C3C
- movs r1, 0xAE
- lsls r1, 1
- adds r0, r1
- lsls r0, 16
- lsrs r0, 16
- bl FlagSet
-_081D1C3C:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81D1C20
+ .section .text.after.match.call
thumb_func_start sub_81D1C44
sub_81D1C44: @ 81D1C44
@@ -21780,7 +20753,7 @@ sub_81D1C84: @ 81D1C84
ldr r0, [r0, 0x10]
str r0, [sp]
str r1, [sp, 0x4]
- ldr r0, =gUnknown_085DFF04
+ ldr r0, =gMailboxMailOptions
movs r1, 0x4
bl GetMaxWidthInMenuTable
lsls r0, 24
@@ -25789,7 +24762,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 +24830,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 +24979,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 +25035,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 +25053,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
@@ -27703,7 +26676,7 @@ _081D4B3A:
bl IndexOfSpritePaletteTag
lsls r0, 24
lsrs r0, 24
- bl sub_80ABE18
+ bl UpdateSpritePaletteWithWeather
ldrh r1, [r5, 0x10]
mov r0, sp
strh r1, [r0]
@@ -28050,7 +27023,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 +27047,7 @@ sub_81D4E30: @ 81D4E30
strh r0, [r1]
bl OpenLink
movs r0, 0x1
- bl sub_800B330
+ bl SetSuppressLinkErrorMessage
pop {r0}
bx r0
.pool
@@ -28090,7 +27063,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 +27130,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 +27229,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 +27638,7 @@ _081D5360:
strb r0, [r4, 0x8]
b _081D548A
_081D536A:
- bl sub_800B33C
+ bl HasLinkErrorOccurred
lsls r0, 24
cmp r0, 0
beq _081D537A
@@ -29745,8 +28718,8 @@ nullsub_2: @ 81D5C88
bx lr
thumb_func_end nullsub_2
- thumb_func_start sub_81D5C8C
-sub_81D5C8C: @ 81D5C8C
+ thumb_func_start PrintOnTrainerHillRecordsWindow
+PrintOnTrainerHillRecordsWindow: @ 81D5C8C
push {r4-r7,lr}
mov r7, r10
mov r6, r9
@@ -29884,7 +28857,7 @@ _081D5CD6:
pop {r0}
bx r0
.pool
- thumb_func_end sub_81D5C8C
+ thumb_func_end PrintOnTrainerHillRecordsWindow
thumb_func_start free_203F458
free_203F458: @ 81D5DF0
@@ -30295,7 +29268,7 @@ sub_81D6120: @ 81D6120
push {lr}
movs r0, 0x1A
movs r1, 0x40
- bl get_mapheader_by_bank_and_number
+ bl Overworld_GetMapHeaderByGroupAndId
ldr r0, [r0, 0x4]
ldr r0, [r0, 0x8]
adds r0, 0x8
@@ -30334,7 +29307,7 @@ _081D6162:
adds r0, r1
ldrh r1, [r0]
movs r0, 0x1A
- bl get_mapheader_by_bank_and_number
+ bl Overworld_GetMapHeaderByGroupAndId
ldr r0, [r0, 0x4]
ldr r0, [r0, 0x8]
_081D6176:
diff --git a/asm/post_battle_event_funcs.s b/asm/post_battle_event_funcs.s
index da84a6565..c6d4fd88f 100644
--- a/asm/post_battle_event_funcs.s
+++ b/asm/post_battle_event_funcs.s
@@ -44,7 +44,7 @@ _0813776C:
ldrb r0, [r2, 0x11]
orrs r1, r0
movs r0, 0x1
- bl sav12_xor_set
+ bl SetGameStat
_0813778E:
bl sub_8076D48
ldr r0, =gSaveBlock2Ptr
diff --git a/asm/rom6.s b/asm/rom6.s
deleted file mode 100644
index cc02638bc..000000000
--- a/asm/rom6.s
+++ /dev/null
@@ -1,451 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start npc_before_player_of_type
-npc_before_player_of_type: @ 8135424
- push {r4,r5,lr}
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- ldr r4, =gUnknown_0203AB40
- adds r1, r4, 0x2
- adds r0, r4, 0
- bl GetXYCoordsOneStepInFrontOfPlayer
- bl PlayerGetZCoord
- strb r0, [r4, 0x4]
- ldrh r0, [r4]
- ldrh r1, [r4, 0x2]
- ldrb r2, [r4, 0x4]
- bl GetFieldObjectIdByXYZ
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gMapObjects
- lsls r1, r0, 3
- adds r1, r0
- lsls r1, 2
- adds r2, r1, r2
- ldrb r0, [r2, 0x5]
- cmp r0, r5
- bne _08135470
- ldr r1, =gSpecialVar_LastTalked
- ldrb r0, [r2, 0x8]
- strh r0, [r1]
- movs r0, 0x1
- b _08135472
- .pool
-_08135470:
- movs r0, 0
-_08135472:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end npc_before_player_of_type
-
- thumb_func_start oei_task_add
-oei_task_add: @ 8135478
- push {lr}
- ldr r0, =gUnknown_0203AB40
- adds r1, r0, 0x2
- bl GetXYCoordsOneStepInFrontOfPlayer
- ldr r0, =task08_080C9820
- movs r1, 0x8
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .pool
- thumb_func_end oei_task_add
-
- thumb_func_start task08_080C9820
-task08_080C9820: @ 813549C
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- adds r6, r5, 0
- bl ScriptContext2_Enable
- ldr r1, =gPlayerAvatar
- movs r0, 0x1
- strb r0, [r1, 0x6]
- ldrb r1, [r1, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, =gMapObjects
- adds r4, r0, r1
- adds r0, r4, 0
- bl FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive
- lsls r0, 24
- cmp r0, 0
- beq _081354D2
- adds r0, r4, 0
- bl FieldObjectClearAnimIfSpecialAnimFinished
- lsls r0, 24
- cmp r0, 0
- beq _0813551E
-_081354D2:
- ldr r0, =gMapHeader
- ldrb r0, [r0, 0x17]
- cmp r0, 0x5
- bne _08135504
- movs r0, 0x3B
- bl FieldEffectStart
- ldr r0, =gTasks
- lsls r1, r5, 2
- adds r1, r5
- lsls r1, 3
- adds r1, r0
- ldr r0, =sub_8135578
- b _0813551C
- .pool
-_08135504:
- bl sub_808C114
- adds r0, r4, 0
- movs r1, 0x39
- bl FieldObjectSetSpecialAnim
- ldr r0, =gTasks
- lsls r1, r6, 2
- adds r1, r6
- lsls r1, 3
- adds r1, r0
- ldr r0, =sub_813552C
-_0813551C:
- str r0, [r1]
-_0813551E:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end task08_080C9820
-
- thumb_func_start sub_813552C
-sub_813552C: @ 813552C
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, =gMapObjects
- adds r0, r1
- bl FieldObjectCheckIfSpecialAnimFinishedOrInactive
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08135560
- movs r0, 0x3B
- bl FieldEffectStart
- ldr r0, =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, =sub_8135578
- str r0, [r1]
-_08135560:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_813552C
-
- thumb_func_start sub_8135578
-sub_8135578: @ 8135578
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r7, r0, 24
- movs r0, 0x6
- bl FieldEffectActiveListContains
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- bne _081355FC
- bl player_get_direction_lower_nybble
- ldr r6, =gFieldEffectArguments
- lsls r0, 24
- lsrs r0, 24
- str r0, [r6, 0x4]
- cmp r0, 0x1
- bne _0813559E
- str r4, [r6, 0x8]
-_0813559E:
- ldr r1, [r6, 0x4]
- cmp r1, 0x2
- bne _081355A8
- movs r0, 0x1
- str r0, [r6, 0x8]
-_081355A8:
- cmp r1, 0x3
- bne _081355B0
- movs r0, 0x2
- str r0, [r6, 0x8]
-_081355B0:
- cmp r1, 0x4
- bne _081355B8
- movs r0, 0x3
- str r0, [r6, 0x8]
-_081355B8:
- ldr r5, =gPlayerAvatar
- ldrb r0, [r5, 0x5]
- lsls r4, r0, 3
- adds r4, r0
- lsls r4, 2
- ldr r0, =gMapObjects
- adds r4, r0
- bl GetPlayerAvatarGraphicsIdByCurrentState
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl FieldObjectSetGraphicsId
- ldrb r1, [r5, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, =gSprites
- adds r0, r1
- ldrb r1, [r6, 0x8]
- bl StartSpriteAnim
- movs r0, 0x6
- bl FieldEffectActiveListRemove
- ldr r1, =gTasks
- lsls r0, r7, 2
- adds r0, r7
- lsls r0, 3
- adds r0, r1
- ldr r1, =sub_813561C
- str r1, [r0]
-_081355FC:
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8135578
-
- thumb_func_start sub_813561C
-sub_813561C: @ 813561C
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r1, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldrh r1, [r0, 0x18]
- lsls r1, 16
- ldrh r0, [r0, 0x1A]
- orrs r1, r0
- bl _call_via_r1
- ldr r1, =gPlayerAvatar
- movs r0, 0
- strb r0, [r1, 0x6]
- adds r0, r4, 0
- bl DestroyTask
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_813561C
-
- thumb_func_start sub_8135654
-sub_8135654: @ 8135654
- push {r4,lr}
- bl ShouldDoBrailleStrengthEffect
- lsls r0, 24
- cmp r0, 0
- beq _0813568C
- ldr r4, =gSpecialVar_Result
- bl GetCursorSelectionMonId
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4]
- ldr r1, =gUnknown_03005DB0
- ldr r0, =FieldCallback_Teleport
- str r0, [r1]
- ldr r1, =gUnknown_0203CEEC
- ldr r0, =sub_8179834
- b _081356A8
- .pool
-_0813568C:
- movs r0, 0x56
- bl npc_before_player_of_type
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0813569E
- movs r0, 0
- b _081356AC
-_0813569E:
- ldr r1, =gUnknown_03005DB0
- ldr r0, =FieldCallback_Teleport
- str r0, [r1]
- ldr r1, =gUnknown_0203CEEC
- ldr r0, =sub_81356C4
-_081356A8:
- str r0, [r1]
- movs r0, 0x1
-_081356AC:
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_8135654
-
- thumb_func_start sub_81356C4
-sub_81356C4: @ 81356C4
- push {lr}
- bl GetCursorSelectionMonId
- ldr r1, =gFieldEffectArguments
- lsls r0, 24
- lsrs r0, 24
- str r0, [r1]
- ldr r0, =Route111_EventScript_2907F0
- bl ScriptContext1_SetupScript
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81356C4
-
- thumb_func_start oei_rocksmash
-oei_rocksmash: @ 81356E4
- push {lr}
- bl oei_task_add
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- ldr r2, =sub_8135714
- lsrs r0, r2, 16
- strh r0, [r1, 0x18]
- strh r2, [r1, 0x1A]
- movs r0, 0x13
- bl IncrementGameStat
- movs r0, 0
- pop {r1}
- bx r1
- .pool
- thumb_func_end oei_rocksmash
-
- thumb_func_start sub_8135714
-sub_8135714: @ 8135714
- push {lr}
- movs r0, 0x83
- bl PlaySE
- movs r0, 0x25
- bl FieldEffectActiveListRemove
- bl EnableBothScriptContexts
- pop {r0}
- bx r0
- thumb_func_end sub_8135714
-
- thumb_func_start sub_813572C
-sub_813572C: @ 813572C
- push {lr}
- bl sub_80FE314
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0813573E
- movs r0, 0
- b _0813574C
-_0813573E:
- ldr r1, =gUnknown_03005DB0
- ldr r0, =FieldCallback_Teleport
- str r0, [r1]
- ldr r1, =gUnknown_0203CEEC
- ldr r0, =hm2_dig
- str r0, [r1]
- movs r0, 0x1
-_0813574C:
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_813572C
-
- thumb_func_start hm2_dig
-hm2_dig: @ 8135760
- push {lr}
- bl flagmods_08054D70
- movs r0, 0x26
- bl FieldEffectStart
- bl GetCursorSelectionMonId
- ldr r1, =gFieldEffectArguments
- lsls r0, 24
- lsrs r0, 24
- str r0, [r1]
- pop {r0}
- bx r0
- .pool
- thumb_func_end hm2_dig
-
- thumb_func_start sub_8135780
-sub_8135780: @ 8135780
- push {lr}
- bl oei_task_add
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- ldr r2, =sub_81357BC
- lsrs r0, r2, 16
- strh r0, [r1, 0x18]
- strh r2, [r1, 0x1A]
- bl ShouldDoBrailleDigEffect
- lsls r0, 24
- cmp r0, 0
- bne _081357AC
- movs r0, 0x1
- bl SetPlayerAvatarTransitionFlags
-_081357AC:
- movs r0, 0
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_8135780
-
- thumb_func_start sub_81357BC
-sub_81357BC: @ 81357BC
- push {r4,lr}
- movs r0, 0x26
- bl FieldEffectActiveListRemove
- bl ShouldDoBrailleDigEffect
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- beq _081357D6
- bl DoBrailleDigEffect
- b _081357EE
-_081357D6:
- ldr r0, =task08_080A1C44
- 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 r4, [r1, 0x8]
-_081357EE:
- pop {r4}
- pop {r0}
- bx r0
- .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 656ac40bf..b7f03739a 100644
--- a/asm/link.s
+++ b/asm/rom_8011DC0.s
@@ -4,17770 +4,7 @@
.syntax unified
.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 LinkPartnerVersionCheck
-LinkPartnerVersionCheck: @ 8009FF8
-@ s32 LinkPartnerVersionCheck(u32 version1, u32 version2)
-@ returns 1 if any link partners are playing either version1 or version2, -1 if no link partners are playing either version1 or version2
- 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 LinkPartnerVersionCheck
-
- thumb_func_start sub_800A03C
-sub_800A03C: @ 800A03C
- movs r0, 0x2
- bx lr
- thumb_func_end sub_800A03C
-
- thumb_func_start Link_HaveFourPlayersWithAtLeastOneRubyOrSapphire
-Link_HaveFourPlayersWithAtLeastOneRubyOrSapphire: @ 800A040
- push {lr}
- bl GetLinkPlayerCount
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x4
- bne _0800A05A
- movs r0, 0x2
- movs r1, 0x1
- bl LinkPartnerVersionCheck
- cmp r0, 0
- bge _0800A05E
-_0800A05A:
- movs r0, 0
- b _0800A060
-_0800A05E:
- movs r0, 0x1
-_0800A060:
- pop {r1}
- bx r1
- thumb_func_end Link_HaveFourPlayersWithAtLeastOneRubyOrSapphire
-
- thumb_func_start Link_AnyPartnersPlayingRubyOrSapphire
-Link_AnyPartnersPlayingRubyOrSapphire: @ 800A064
- push {lr}
- movs r0, 0x2
- movs r1, 0x1
- bl LinkPartnerVersionCheck
- cmp r0, 0
- bge _0800A076
- movs r0, 0
- b _0800A078
-_0800A076:
- movs r0, 0x1
-_0800A078:
- pop {r1}
- bx r1
- thumb_func_end Link_AnyPartnersPlayingRubyOrSapphire
-
- thumb_func_start sub_800A07C
-sub_800A07C: @ 800A07C
- push {lr}
- movs r0, 0x4
- movs r1, 0x5
- bl LinkPartnerVersionCheck
- 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
@@ -18527,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]
@@ -18955,7 +1192,7 @@ sub_8012F64: @ 8012F64
ldrb r0, [r4, 0x12]
movs r1, 0
movs r2, 0
- bl sub_81AE6C8
+ bl DestroyListMenuTask
ldrb r0, [r4, 0x10]
bl ClearWindowTilemap
ldrb r0, [r4, 0xF]
@@ -20157,7 +2394,7 @@ _08013A8C:
ldrb r0, [r6, 0xE]
movs r1, 0
movs r2, 0
- bl sub_81AE6C8
+ bl DestroyListMenuTask
ldrb r0, [r6, 0xC]
bl ClearWindowTilemap
ldrb r0, [r6, 0xB]
@@ -20303,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
@@ -20879,7 +3116,7 @@ _08014070:
movs r0, 0x6
strb r0, [r1, 0x1]
ldr r1, =gMain
- ldr r0, =c2_exit_to_overworld_2_switch
+ ldr r0, =CB2_ReturnToField
str r0, [r1, 0x8]
ldr r0, =sub_807AE50
bl SetMainCallback2
@@ -20944,7 +3181,7 @@ _08014138:
adds r3, r1, r0
movs r0, 0x64
muls r0, r4
- ldr r1, =gUnknown_02039B58
+ ldr r1, =gTrainerCards
adds r0, r1
ldrb r2, [r5]
adds r1, r3, 0
@@ -21021,7 +3258,7 @@ _080141D4:
eors r0, r1
lsls r0, 24
lsrs r0, 24
- ldr r1, =c2_exit_to_overworld_2_switch
+ ldr r1, =CB2_ReturnToField
bl sub_80C4E74
_080141F2:
bl RunTasks
@@ -21041,8 +3278,8 @@ sub_8014210: @ 8014210
lsls r6, 16
lsrs r6, 16
bl HealPlayerParty
- bl copy_player_party_to_sav1
- bl copy_bags_and_unk_data_from_save_blocks
+ bl SavePlayerParty
+ bl LoadPlayerBag
ldr r5, =gLinkPlayers
ldr r0, =0x00002211
str r0, [r5, 0x14]
@@ -21162,7 +3399,7 @@ sub_8014304: @ 8014304
ldr r0, =0x00004087
bl VarSet
bl GetLinkPlayerCount
- ldr r1, =gUnknown_03005DB8
+ ldr r1, =gFieldLinkPlayerCount
strb r0, [r1]
bl GetMultiplayerId
ldr r1, =gUnknown_03005DB4
@@ -21409,8 +3646,8 @@ _080145F4:
movs r1, 0x1
bl sub_80143E4
bl HealPlayerParty
- bl copy_player_party_to_sav1
- bl copy_bags_and_unk_data_from_save_blocks
+ bl SavePlayerParty
+ bl LoadPlayerBag
movs r0, 0x1
str r0, [sp]
movs r0, 0x19
@@ -21422,8 +3659,8 @@ _080145F4:
_08014620:
bl overworld_free_bg_tilemaps
bl HealPlayerParty
- bl copy_player_party_to_sav1
- bl copy_bags_and_unk_data_from_save_blocks
+ bl SavePlayerParty
+ bl LoadPlayerBag
ldr r0, =gBlockSendBuffer
movs r1, 0x1
bl sub_80143E4
@@ -21438,8 +3675,8 @@ _08014620:
_0801464C:
bl overworld_free_bg_tilemaps
bl HealPlayerParty
- bl copy_player_party_to_sav1
- bl copy_bags_and_unk_data_from_save_blocks
+ bl SavePlayerParty
+ bl LoadPlayerBag
ldr r0, =gBlockSendBuffer
movs r1, 0x1
bl sub_80143E4
@@ -21520,7 +3757,7 @@ _08014714:
bl GetCursorSelectionMonId
lsls r0, 24
lsrs r0, 24
- ldr r1, =c2_load_new_map
+ ldr r1, =CB2_LoadMap
bl sub_802A9A8
b _08014764
.pool
@@ -21529,7 +3766,7 @@ _08014734:
movs r1, 0x9
movs r2, 0x1
bl sub_8014290
- ldr r0, =c2_load_new_map
+ ldr r0, =CB2_LoadMap
bl sub_8020C70
b _08014764
.pool
@@ -21541,7 +3778,7 @@ _0801474C:
bl GetCursorSelectionMonId
lsls r0, 24
lsrs r0, 24
- ldr r1, =c2_load_new_map
+ ldr r1, =CB2_LoadMap
bl sub_802493C
_08014764:
adds r0, r4, 0
@@ -22082,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
@@ -22274,7 +4511,7 @@ _08014E16:
ldrb r0, [r5, 0x12]
movs r1, 0
movs r2, 0
- bl sub_81AE6C8
+ bl DestroyListMenuTask
movs r0, 0
bl CopyBgTilemapBufferToVram
ldrb r0, [r5, 0xF]
@@ -22330,7 +4567,7 @@ _08014EA8:
ldrb r0, [r5, 0x12]
movs r1, 0
movs r2, 0
- bl sub_81AE6C8
+ bl DestroyListMenuTask
movs r0, 0
bl CopyBgTilemapBufferToVram
ldrb r0, [r5, 0xF]
@@ -22579,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
@@ -22686,7 +4923,7 @@ _08015204:
ldrb r0, [r7, 0xE]
movs r1, 0
movs r2, 0
- bl sub_81AE6C8
+ bl DestroyListMenuTask
movs r0, 0
bl CopyBgTilemapBufferToVram
ldrb r0, [r7, 0xD]
@@ -22951,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
@@ -23055,7 +5292,7 @@ _08015564:
ldrb r0, [r5, 0xE]
movs r1, 0
movs r2, 0
- bl sub_81AE6C8
+ bl DestroyListMenuTask
movs r0, 0
bl CopyBgTilemapBufferToVram
ldrb r0, [r5, 0xB]
@@ -24271,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
@@ -24694,7 +6931,7 @@ _08016502:
ldr r1, =gFieldCallback
ldr r0, =sub_80AF128
str r0, [r1]
- ldr r1, =c2_exit_to_overworld_2_switch
+ ldr r1, =CB2_ReturnToField
movs r0, 0x8
bl sub_81B8904
b _08016878
@@ -24992,7 +7229,7 @@ _0801677E:
ldr r1, =gFieldCallback
ldr r0, =sub_80AF128
str r0, [r1]
- ldr r1, =c2_exit_to_overworld_2_switch
+ ldr r1, =CB2_ReturnToField
movs r0, 0x9
bl sub_81B8904
adds r0, r6, 0
@@ -26308,7 +8545,7 @@ _08017228:
ldrb r0, [r4]
movs r1, 0
movs r2, 0
- bl sub_81AE6C8
+ bl DestroyListMenuTask
ldrb r0, [r5]
movs r1, 0x1
bl sub_819746C
@@ -26328,7 +8565,7 @@ _08017264:
ldrb r0, [r6]
movs r1, 0
movs r2, 0
- bl sub_81AE6C8
+ bl DestroyListMenuTask
ldrb r0, [r5]
movs r1, 0x1
bl sub_819746C
@@ -26432,7 +8669,7 @@ _0801733E:
ldrb r0, [r4]
movs r1, 0
movs r2, 0
- bl sub_81AE6C8
+ bl DestroyListMenuTask
ldrb r0, [r6]
bl RemoveWindow
mov r7, r9
@@ -26454,7 +8691,7 @@ _08017368:
ldrb r0, [r1]
movs r1, 0
movs r2, 0
- bl sub_81AE6C8
+ bl DestroyListMenuTask
ldrb r0, [r6]
bl RemoveWindow
mov r3, r9
@@ -28378,7 +10615,7 @@ sub_8018220: @ 8018220
lsrs r0, 24
movs r1, 0x64
muls r1, r0
- ldr r0, =gUnknown_02039B58
+ ldr r0, =gTrainerCards
adds r1, r0
mov r8, r1
bl UnkTextUtil_Reset
@@ -31045,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]
@@ -32704,7 +14941,7 @@ _0801A58C:
ldr r0, =gUnknown_03000DAC
ldr r0, [r0]
bl Free
- ldr r0, =c2_exit_to_overworld_1_continue_scripts_restart_music
+ ldr r0, =CB2_ReturnToFieldContinueScript
bl SetMainCallback2
pop {r4}
pop {r0}
@@ -33839,7 +16076,7 @@ _0801AF58:
bl sub_801ABDC
cmp r0, 0
beq _0801AFAE
- ldr r0, =c2_exit_to_overworld_2_switch
+ ldr r0, =CB2_ReturnToField
bl SetMainCallback2
b _0801AFAE
.pool
@@ -33865,7 +16102,7 @@ _0801AF98:
bl sub_801ABDC
cmp r0, 0
beq _0801AFAE
- ldr r0, =c2_exit_to_overworld_2_switch
+ ldr r0, =CB2_ReturnToField
bl SetMainCallback2
_0801AFAE:
bl RunTasks
@@ -35591,7 +17828,7 @@ _0801BD1A:
bl CopyBgTilemapBufferToVram
b _0801BD86
_0801BD34:
- bl sub_80D2F04
+ bl LoadMonIconPalettes
b _0801BD86
_0801BD3A:
movs r0, 0x1
@@ -35754,7 +17991,7 @@ _0801BE56:
.pool
_0801BE94:
bl sub_801C61C
- bl sub_80D2F9C
+ bl FreeMonIconPalettes
b _0801BEDA
_0801BE9E:
ldr r0, =gUnknown_02022C60
@@ -39824,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}
@@ -41331,7 +23568,7 @@ _0801EBA8:
bne _0801EBC2
bl sub_801F544
bl sub_801DE30
- ldr r0, =c2_exit_to_overworld_2_switch
+ ldr r0, =CB2_ReturnToField
bl SetMainCallback2
_0801EBC2:
add sp, 0x4
@@ -45457,7 +27694,7 @@ _08020C26:
str r0, [r5]
adds r0, r4, 0
bl SetMainCallback2
- ldr r0, =c2_exit_to_overworld_2_switch
+ ldr r0, =CB2_ReturnToField
cmp r4, r0
bne _08020C5A
ldr r2, =gTextFlags
@@ -45468,8 +27705,8 @@ _08020C26:
movs r0, 0xC8
lsls r0, 1
bl PlayNewMapMusic
- ldr r0, =c1_overworld
- bl set_callback1
+ ldr r0, =CB1_Overworld
+ bl SetMainCallback1
_08020C5A:
movs r0, 0
_08020C5C:
@@ -45492,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
@@ -46182,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
@@ -53391,7 +35628,7 @@ _08024C5A:
bl sub_800E0E8
movs r0, 0
movs r1, 0
- bl sub_800DFB4
+ bl CreateWirelessStatusIndicatorSprite
b _08024D20
.pool
_08024C80:
@@ -65228,7 +47465,7 @@ _0802AD0C:
bl sub_800E0E8
movs r0, 0
movs r1, 0
- bl sub_800DFB4
+ bl CreateWirelessStatusIndicatorSprite
ldr r1, [r4]
b _0802ADC0
.pool
@@ -73846,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/rotating_gate.s b/asm/rotating_gate.s
deleted file mode 100644
index da5e73034..000000000
--- a/asm/rotating_gate.s
+++ /dev/null
@@ -1,1152 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start GetCurrentMapRotatingGatePuzzleType
-GetCurrentMapRotatingGatePuzzleType: @ 80FB7E8
- push {lr}
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldrh r1, [r0, 0x4]
- movs r0, 0x86
- lsls r0, 1
- cmp r1, r0
- bne _080FB800
- movs r0, 0x1
- b _080FB812
- .pool
-_080FB800:
- ldr r0, =0x0000081d
- cmp r1, r0
- beq _080FB810
- movs r0, 0
- b _080FB812
- .pool
-_080FB810:
- movs r0, 0x2
-_080FB812:
- pop {r1}
- bx r1
- thumb_func_end GetCurrentMapRotatingGatePuzzleType
-
- thumb_func_start sub_80FB818
-sub_80FB818: @ 80FB818
- push {r4-r6,lr}
- movs r0, 0x80
- lsls r0, 7
- bl GetVarPointer
- adds r5, r0, 0
- movs r3, 0
- ldr r4, =gUnknown_0203A048
- ldrb r0, [r4]
- cmp r3, r0
- bge _080FB844
- ldr r6, =gUnknown_0203A044
-_080FB830:
- adds r2, r5, r3
- ldr r1, [r6]
- lsls r0, r3, 3
- adds r0, r1
- ldrb r0, [r0, 0x5]
- strb r0, [r2]
- adds r3, 0x1
- ldrb r0, [r4]
- cmp r3, r0
- blt _080FB830
-_080FB844:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80FB818
-
- thumb_func_start sub_80FB854
-sub_80FB854: @ 80FB854
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x80
- lsls r0, 7
- bl GetVarPointer
- adds r0, r4
- ldrb r0, [r0]
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_80FB854
-
- thumb_func_start sub_80FB870
-sub_80FB870: @ 80FB870
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- lsls r4, 24
- lsrs r4, 24
- lsls r5, 24
- lsrs r5, 24
- movs r0, 0x80
- lsls r0, 7
- bl GetVarPointer
- adds r0, r4
- strb r5, [r0]
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_80FB870
-
- thumb_func_start sub_80FB890
-sub_80FB890: @ 80FB890
- push {r4,r5,lr}
- adds r4, r1, 0
- lsls r0, 24
- lsrs r5, r0, 24
- adds r0, r5, 0
- bl sub_80FB854
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r4, 0x1
- bne _080FB8B4
- cmp r1, 0
- beq _080FB8B0
- subs r0, r1, 0x1
- lsls r0, 24
- b _080FB8BE
-_080FB8B0:
- movs r1, 0x3
- b _080FB8C0
-_080FB8B4:
- adds r1, 0x1
- lsls r1, 24
- movs r0, 0xC0
- lsls r0, 18
- ands r0, r1
-_080FB8BE:
- lsrs r1, r0, 24
-_080FB8C0:
- adds r0, r5, 0
- bl sub_80FB870
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_80FB890
-
- thumb_func_start sub_80FB8CC
-sub_80FB8CC: @ 80FB8CC
- push {lr}
- bl GetCurrentMapRotatingGatePuzzleType
- cmp r0, 0x1
- beq _080FB8E0
- cmp r0, 0x1
- ble _080FB914
- cmp r0, 0x2
- beq _080FB8F8
- b _080FB914
-_080FB8E0:
- ldr r1, =gUnknown_0203A044
- ldr r0, =gUnknown_0858E8B0
- str r0, [r1]
- ldr r1, =gUnknown_0203A048
- movs r0, 0x8
- b _080FB902
- .pool
-_080FB8F8:
- ldr r1, =gUnknown_0203A044
- ldr r0, =gUnknown_0858E8F0
- str r0, [r1]
- ldr r1, =gUnknown_0203A048
- movs r0, 0xB
-_080FB902:
- strb r0, [r1]
- movs r1, 0
- ldr r3, =gUnknown_0203A038
- movs r2, 0x40
-_080FB90A:
- adds r0, r1, r3
- strb r2, [r0]
- adds r1, 0x1
- cmp r1, 0xA
- bls _080FB90A
-_080FB914:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80FB8CC
-
- thumb_func_start sub_80FB928
-sub_80FB928: @ 80FB928
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- lsls r0, 16
- lsrs r0, 16
- str r0, [sp]
- lsls r1, 16
- lsrs r1, 16
- mov r10, r1
- ldr r0, =gSaveBlock1Ptr
- ldr r2, [r0]
- ldrh r1, [r2]
- subs r0, r1, 0x2
- lsls r0, 16
- lsrs r3, r0, 16
- adds r1, 0x11
- lsls r1, 16
- lsrs r1, 16
- mov r9, r1
- ldrh r1, [r2, 0x2]
- subs r0, r1, 0x2
- lsls r0, 16
- lsrs r2, r0, 16
- adds r1, 0xE
- lsls r1, 16
- lsrs r1, 16
- mov r8, r1
- movs r5, 0
- ldr r0, =gUnknown_0203A048
- ldrb r0, [r0]
- cmp r5, r0
- bcs _080FB9DA
- lsls r0, r2, 16
- asrs r7, r0, 16
- lsls r0, r3, 16
- asrs r6, r0, 16
-_080FB976:
- ldr r0, =gUnknown_0203A044
- ldr r0, [r0]
- lsls r1, r5, 3
- adds r1, r0
- ldrh r0, [r1]
- adds r0, 0x7
- lsls r0, 16
- lsrs r2, r0, 16
- ldrh r0, [r1, 0x2]
- adds r0, 0x7
- lsls r0, 16
- asrs r1, r0, 16
- cmp r7, r1
- bgt _080FB9CC
- mov r3, r8
- lsls r0, r3, 16
- asrs r0, 16
- cmp r0, r1
- blt _080FB9CC
- lsls r0, r2, 16
- asrs r1, r0, 16
- cmp r6, r1
- bgt _080FB9CC
- mov r2, r9
- lsls r0, r2, 16
- asrs r0, 16
- cmp r0, r1
- blt _080FB9CC
- ldr r0, =gUnknown_0203A038
- adds r4, r5, r0
- ldrb r0, [r4]
- cmp r0, 0x40
- bne _080FB9CC
- ldr r3, [sp]
- lsls r1, r3, 16
- mov r0, r10
- lsls r2, r0, 16
- adds r0, r5, 0
- asrs r1, 16
- asrs r2, 16
- bl sub_80FB9FC
- strb r0, [r4]
-_080FB9CC:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, =gUnknown_0203A048
- ldrb r0, [r0]
- cmp r5, r0
- bcc _080FB976
-_080FB9DA:
- 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_80FB928
-
- thumb_func_start sub_80FB9FC
-sub_80FB9FC: @ 80FB9FC
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x18
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r1, 16
- lsrs r7, r1, 16
- lsls r2, 16
- lsrs r2, 16
- mov r8, r2
- ldr r0, =gUnknown_0203A044
- lsls r1, r6, 3
- ldr r0, [r0]
- adds r4, r0, r1
- ldrb r0, [r4, 0x4]
- cmp r0, 0
- beq _080FBA24
- cmp r0, 0x4
- bne _080FBA34
-_080FBA24:
- mov r1, sp
- ldr r0, =gUnknown_08591FE0
- b _080FBA38
- .pool
-_080FBA34:
- mov r1, sp
- ldr r0, =gUnknown_08591FC8
-_080FBA38:
- ldm r0!, {r2,r3,r5}
- stm r1!, {r2,r3,r5}
- ldm r0!, {r2,r3,r5}
- stm r1!, {r2,r3,r5}
- mov r2, sp
- ldrb r0, [r4, 0x4]
- movs r3, 0x98
- lsls r3, 5
- adds r1, r3, 0
- adds r0, r1
- strh r0, [r2]
- mov r0, sp
- movs r1, 0
- movs r2, 0
- movs r3, 0x94
- bl CreateSprite
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x40
- beq _080FBAD4
- ldrh r0, [r4]
- adds r0, 0x7
- ldrh r1, [r4, 0x2]
- adds r1, 0x7
- lsls r4, r5, 4
- adds r4, r5
- lsls r4, 2
- ldr r2, =gSprites
- adds r4, r2
- strh r6, [r4, 0x2E]
- movs r2, 0x3E
- adds r2, r4
- mov r12, r2
- ldrb r2, [r2]
- movs r3, 0x2
- orrs r2, r3
- mov r3, r12
- strb r2, [r3]
- lsls r0, 16
- asrs r0, 16
- lsls r2, r7, 16
- asrs r2, 16
- adds r0, r2
- lsls r0, 16
- asrs r0, 16
- lsls r1, 16
- asrs r1, 16
- mov r3, r8
- lsls r2, r3, 16
- asrs r2, 16
- adds r1, r2
- lsls r1, 16
- asrs r1, 16
- adds r2, r4, 0
- adds r2, 0x20
- adds r3, r4, 0
- adds r3, 0x22
- bl sub_8092FF0
- adds r0, r4, 0
- bl sub_80FBB64
- adds r0, r6, 0
- bl sub_80FB854
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl StartSpriteAffineAnim
- adds r0, r5, 0
- b _080FBAD6
- .pool
-_080FBAD4:
- movs r0, 0x40
-_080FBAD6:
- add sp, 0x18
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_80FB9FC
-
- thumb_func_start sub_80FBAE4
-sub_80FBAE4: @ 80FBAE4
- push {r4-r7,lr}
- adds r6, r0, 0
- ldrh r0, [r6, 0x30]
- lsls r0, 24
- lsrs r5, r0, 24
- ldrh r0, [r6, 0x32]
- lsls r0, 24
- lsrs r4, r0, 24
- adds r7, r4, 0
- adds r0, r6, 0
- bl sub_80FBB64
- cmp r5, 0x1
- bne _080FBB2A
- adds r0, r4, 0x4
- lsls r0, 24
- lsrs r4, r0, 24
- bl GetPlayerSpeed
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x1
- beq _080FBB1A
- adds r0, r4, 0
- adds r0, 0x8
- lsls r0, 24
- lsrs r4, r0, 24
-_080FBB1A:
- movs r0, 0x30
- bl PlaySE
- adds r0, r6, 0
- adds r1, r4, 0
- bl StartSpriteAffineAnim
- b _080FBB58
-_080FBB2A:
- cmp r5, 0x2
- bne _080FBB58
- adds r0, r7, 0
- adds r0, 0x8
- lsls r0, 24
- lsrs r4, r0, 24
- bl GetPlayerSpeed
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x1
- beq _080FBB4A
- adds r0, r4, 0
- adds r0, 0x8
- lsls r0, 24
- lsrs r4, r0, 24
-_080FBB4A:
- movs r0, 0x30
- bl PlaySE
- adds r0, r6, 0
- adds r1, r4, 0
- bl StartSpriteAffineAnim
-_080FBB58:
- movs r0, 0
- strh r0, [r6, 0x30]
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_80FBAE4
-
- thumb_func_start sub_80FBB64
-sub_80FBB64: @ 80FBB64
- push {r4-r6,lr}
- mov r12, r0
- mov r4, r12
- adds r4, 0x3E
- ldrb r0, [r4]
- movs r5, 0x5
- negs r5, r5
- ands r5, r0
- strb r5, [r4]
- mov r0, r12
- ldrh r1, [r0, 0x24]
- ldrh r2, [r0, 0x20]
- adds r1, r2
- adds r0, 0x28
- movs r2, 0
- ldrsb r2, [r0, r2]
- ldr r0, =gSpriteCoordOffsetX
- adds r2, r1
- ldrh r0, [r0]
- adds r2, r0
- lsls r2, 16
- mov r3, r12
- ldrh r1, [r3, 0x26]
- ldrh r0, [r3, 0x22]
- adds r1, r0
- mov r0, r12
- adds r0, 0x29
- ldrb r0, [r0]
- lsls r0, 24
- asrs r0, 24
- ldr r3, =gSpriteCoordOffsetY
- adds r0, r1
- ldrh r3, [r3]
- adds r0, r3
- lsls r0, 16
- movs r3, 0x80
- lsls r3, 15
- adds r1, r2, r3
- lsrs r1, 16
- lsrs r6, r0, 16
- adds r0, r3
- lsrs r3, r0, 16
- asrs r2, 16
- cmp r2, 0xFF
- bgt _080FBBCA
- lsls r0, r1, 16
- asrs r0, 16
- movs r1, 0x10
- negs r1, r1
- cmp r0, r1
- bge _080FBBD2
-_080FBBCA:
- movs r1, 0x4
- adds r0, r5, 0
- orrs r0, r1
- strb r0, [r4]
-_080FBBD2:
- lsls r0, r6, 16
- asrs r0, 16
- cmp r0, 0xAF
- bgt _080FBBE6
- lsls r0, r3, 16
- asrs r0, 16
- movs r1, 0x10
- negs r1, r1
- cmp r0, r1
- bge _080FBBF2
-_080FBBE6:
- mov r0, r12
- adds r0, 0x3E
- ldrb r1, [r0]
- movs r2, 0x4
- orrs r1, r2
- strb r1, [r0]
-_080FBBF2:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80FBB64
-
- thumb_func_start LoadRotatingGatePics
-@ void LoadRotatingGatePics()
-LoadRotatingGatePics: @ 80FBC00
- push {lr}
- ldr r0, =gUnknown_08591D58
- bl LoadSpriteSheets
- pop {r0}
- bx r0
- .pool
- thumb_func_end LoadRotatingGatePics
-
- thumb_func_start sub_80FBC10
-sub_80FBC10: @ 80FBC10
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r0, =gSaveBlock1Ptr
- ldr r2, [r0]
- ldrh r1, [r2]
- subs r0, r1, 0x2
- lsls r0, 16
- lsrs r0, 16
- mov r10, r0
- adds r1, 0x11
- lsls r1, 16
- lsrs r1, 16
- mov r9, r1
- ldrh r1, [r2, 0x2]
- subs r0, r1, 0x2
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- adds r1, 0xE
- lsls r1, 16
- lsrs r7, r1, 16
- movs r6, 0
- b _080FBCB6
- .pool
-_080FBC48:
- ldr r0, =gUnknown_0203A044
- ldr r0, [r0]
- lsls r1, r6, 3
- adds r1, r0
- ldrh r0, [r1]
- adds r0, 0x7
- lsls r0, 16
- lsrs r2, r0, 16
- ldrh r0, [r1, 0x2]
- adds r0, 0x7
- lsls r0, 16
- lsrs r3, r0, 16
- ldr r0, =gUnknown_0203A038
- adds r0, r6, r0
- ldrb r0, [r0]
- cmp r0, 0x40
- beq _080FBCB4
- lsls r0, r2, 16
- mov r2, r10
- lsls r1, r2, 16
- asrs r2, r0, 16
- cmp r0, r1
- blt _080FBC94
- mov r1, r9
- lsls r0, r1, 16
- asrs r0, 16
- cmp r2, r0
- bgt _080FBC94
- lsls r0, r3, 16
- mov r2, r8
- lsls r1, r2, 16
- asrs r2, r0, 16
- cmp r0, r1
- blt _080FBC94
- lsls r0, r7, 16
- asrs r0, 16
- cmp r2, r0
- ble _080FBCB4
-_080FBC94:
- ldr r0, =gUnknown_0203A038
- adds r5, r6, r0
- ldrb r0, [r5]
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- ldr r0, =gSprites
- adds r4, r0
- adds r0, r4, 0
- bl FreeSpriteOamMatrix
- adds r0, r4, 0
- bl DestroySprite
- movs r0, 0x40
- strb r0, [r5]
-_080FBCB4:
- adds r6, 0x1
-_080FBCB6:
- ldr r0, =gUnknown_0203A048
- ldrb r0, [r0]
- cmp r6, r0
- blt _080FBC48
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80FBC10
-
- thumb_func_start sub_80FBCDC
-sub_80FBCDC: @ 80FBCDC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0xC
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r1, 0x1
- bne _080FBCFC
- ldr r0, =gUnknown_08592058
- mov r10, r0
- b _080FBD08
- .pool
-_080FBCFC:
- cmp r1, 0x2
- beq _080FBD04
-_080FBD00:
- movs r0, 0
- b _080FBD98
-_080FBD04:
- ldr r1, =gUnknown_08592038
- mov r10, r1
-_080FBD08:
- adds r0, r4, 0
- bl sub_80FB854
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp]
- ldr r0, =gUnknown_0203A044
- ldr r1, [r0]
- lsls r0, r4, 3
- adds r0, r1
- ldrb r2, [r0, 0x4]
- ldrh r1, [r0]
- adds r1, 0x7
- ldrh r0, [r0, 0x2]
- adds r0, 0x7
- movs r3, 0
- lsls r2, 3
- str r2, [sp, 0x4]
- lsls r1, 16
- asrs r1, 16
- mov r9, r1
- lsls r0, 16
- asrs r0, 16
- mov r8, r0
-_080FBD38:
- movs r6, 0
- ldr r2, [sp]
- adds r7, r2, r3
- lsls r0, r3, 1
- adds r5, r7, 0
- ldr r1, [sp, 0x4]
- adds r0, r1
- ldr r2, =gUnknown_08592078
- adds r4, r0, r2
-_080FBD4A:
- adds r0, r5, 0
- cmp r5, 0
- bge _080FBD52
- adds r0, r7, 0x3
-_080FBD52:
- asrs r0, 2
- lsls r0, 2
- subs r0, r5, r0
- lsls r0, 1
- adds r0, r6
- lsls r0, 24
- lsrs r1, r0, 24
- ldrb r0, [r4]
- cmp r0, 0
- beq _080FBD88
- lsls r1, 2
- add r1, r10
- movs r0, 0
- ldrsb r0, [r1, r0]
- add r0, r9
- ldrb r1, [r1, 0x1]
- lsls r1, 24
- asrs r1, 24
- add r1, r8
- str r3, [sp, 0x8]
- bl MapGridIsImpassableAt
- lsls r0, 24
- lsrs r0, 24
- ldr r3, [sp, 0x8]
- cmp r0, 0x1
- beq _080FBD00
-_080FBD88:
- adds r4, 0x1
- adds r6, 0x1
- cmp r6, 0x1
- ble _080FBD4A
- adds r3, 0x1
- cmp r3, 0x3
- ble _080FBD38
- movs r0, 0x1
-_080FBD98:
- add sp, 0xC
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80FBCDC
-
- thumb_func_start sub_80FBDB4
-sub_80FBDB4: @ 80FBDB4
- push {r4-r6,lr}
- adds r4, r1, 0
- lsls r0, 24
- lsrs r0, 24
- adds r6, r0, 0
- lsls r4, 24
- lsrs r5, r4, 24
- lsrs r4, 25
- movs r0, 0x1
- ands r5, r0
- adds r0, r6, 0
- bl sub_80FB854
- subs r4, r0
- adds r1, r4, 0x4
- adds r0, r1, 0
- cmp r1, 0
- bge _080FBDDA
- adds r0, r4, 0x7
-_080FBDDA:
- asrs r0, 2
- lsls r0, 2
- subs r0, r1, r0
- ldr r1, =gUnknown_0203A044
- ldr r2, [r1]
- lsls r1, r6, 3
- adds r1, r2
- ldrb r1, [r1, 0x4]
- ldr r2, =gUnknown_08592078
- lsls r0, 24
- asrs r0, 23
- adds r0, r5
- lsls r1, 3
- adds r0, r1
- adds r0, r2
- ldrb r0, [r0]
- pop {r4-r6}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80FBDB4
-
- thumb_func_start sub_80FBE08
-sub_80FBE08: @ 80FBE08
- push {r4,lr}
- lsls r0, 24
- lsrs r3, r0, 24
- ldr r0, =gUnknown_0203A038
- adds r2, r3, r0
- ldrb r0, [r2]
- cmp r0, 0x40
- beq _080FBE2C
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- ldr r0, =gSprites
- adds r4, r0
- strh r1, [r4, 0x30]
- adds r0, r3, 0
- bl sub_80FB854
- strh r0, [r4, 0x32]
-_080FBE2C:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80FBE08
-
- thumb_func_start sub_80FBE3C
-sub_80FBE3C: @ 80FBE3C
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- adds r3, r0, 0
- lsls r1, 16
- lsrs r1, 16
- lsls r2, 16
- lsrs r2, 16
- cmp r0, 0x2
- bne _080FBE58
- ldr r3, =gUnknown_08591FF8
- b _080FBE7A
- .pool
-_080FBE58:
- cmp r0, 0x1
- bne _080FBE64
- ldr r3, =gUnknown_08592008
- b _080FBE7A
- .pool
-_080FBE64:
- cmp r0, 0x3
- bne _080FBE70
- ldr r3, =gUnknown_08592018
- b _080FBE7A
- .pool
-_080FBE70:
- cmp r3, 0x4
- beq _080FBE78
- movs r0, 0xFF
- b _080FBE88
-_080FBE78:
- ldr r3, =gUnknown_08592028
-_080FBE7A:
- lsls r0, r2, 16
- lsls r1, 16
- asrs r1, 16
- asrs r0, 14
- adds r0, r1
- adds r0, r3, r0
- ldrb r0, [r0]
-_080FBE88:
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80FBE3C
-
- thumb_func_start sub_80FBE90
-sub_80FBE90: @ 80FBE90
- push {lr}
- bl GetCurrentMapRotatingGatePuzzleType
- cmp r0, 0
- beq _080FBEA2
- bl sub_80FB8CC
- bl sub_80FB818
-_080FBEA2:
- pop {r0}
- bx r0
- thumb_func_end sub_80FBE90
-
- thumb_func_start RotatingGatePuzzleCameraUpdate
-@ void RotatingGatePuzzleCameraUpdate(s32 deltaX, s32 deltaY)
-RotatingGatePuzzleCameraUpdate: @ 80FBEA8
- push {r4,r5,lr}
- lsls r0, 16
- lsrs r4, r0, 16
- lsls r1, 16
- lsrs r5, r1, 16
- bl GetCurrentMapRotatingGatePuzzleType
- cmp r0, 0
- beq _080FBECA
- lsls r0, r4, 16
- asrs r0, 16
- lsls r1, r5, 16
- asrs r1, 16
- bl sub_80FB928
- bl sub_80FBC10
-_080FBECA:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end RotatingGatePuzzleCameraUpdate
-
- thumb_func_start sub_80FBED0
-sub_80FBED0: @ 80FBED0
- push {lr}
- bl GetCurrentMapRotatingGatePuzzleType
- cmp r0, 0
- beq _080FBEEA
- bl LoadRotatingGatePics
- bl sub_80FB8CC
- movs r0, 0
- movs r1, 0
- bl sub_80FB928
-_080FBEEA:
- pop {r0}
- bx r0
- thumb_func_end sub_80FBED0
-
- thumb_func_start CheckForRotatingGatePuzzleCollision
-CheckForRotatingGatePuzzleCollision: @ 80FBEF0
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- lsls r1, 16
- lsrs r4, r1, 16
- lsls r2, 16
- lsrs r2, 16
- mov r8, r2
- bl GetCurrentMapRotatingGatePuzzleType
- cmp r0, 0
- bne _080FBF24
- b _080FBFC2
-_080FBF12:
- adds r0, r4, 0
- adds r1, r5, 0
- bl sub_80FBE08
- adds r0, r4, 0
- adds r1, r5, 0
- bl sub_80FB890
- b _080FBFC2
-_080FBF24:
- movs r6, 0
- ldr r0, =gUnknown_0203A048
- ldrb r0, [r0]
- cmp r6, r0
- bge _080FBFC2
- lsls r0, r4, 16
- asrs r7, r0, 16
-_080FBF32:
- ldr r0, =gUnknown_0203A044
- ldr r1, [r0]
- lsls r0, r6, 3
- adds r0, r1
- ldrh r1, [r0]
- adds r1, 0x7
- ldrh r0, [r0, 0x2]
- adds r0, 0x7
- lsls r0, 16
- lsrs r2, r0, 16
- lsls r1, 16
- asrs r4, r1, 16
- subs r0, r4, 0x2
- cmp r0, r7
- bgt _080FBFB8
- adds r0, r4, 0x1
- cmp r7, r0
- bgt _080FBFB8
- lsls r0, r2, 16
- asrs r3, r0, 16
- subs r1, r3, 0x2
- mov r2, r8
- lsls r0, r2, 16
- asrs r2, r0, 16
- cmp r1, r2
- bgt _080FBFB8
- adds r0, r3, 0x1
- cmp r2, r0
- bgt _080FBFB8
- subs r1, r7, r4
- adds r1, 0x2
- subs r2, r3
- adds r2, 0x2
- lsls r1, 16
- asrs r1, 16
- lsls r2, 16
- asrs r2, 16
- mov r0, r9
- bl sub_80FBE3C
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFF
- beq _080FBFB8
- lsrs r5, r0, 4
- movs r1, 0xF
- ands r1, r0
- lsls r0, r6, 24
- lsrs r4, r0, 24
- adds r0, r4, 0
- bl sub_80FBDB4
- cmp r0, 0
- beq _080FBFB8
- adds r0, r4, 0
- adds r1, r5, 0
- bl sub_80FBCDC
- cmp r0, 0
- bne _080FBF12
- movs r0, 0x1
- b _080FBFC4
- .pool
-_080FBFB8:
- adds r6, 0x1
- ldr r0, =gUnknown_0203A048
- ldrb r0, [r0]
- cmp r6, r0
- blt _080FBF32
-_080FBFC2:
- movs r0, 0
-_080FBFC4:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- .pool
- thumb_func_end CheckForRotatingGatePuzzleCollision
-
- thumb_func_start sub_80FBFD4
-sub_80FBFD4: @ 80FBFD4
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- lsls r0, 24
- lsrs r0, 24
- mov r9, r0
- lsls r1, 16
- lsrs r4, r1, 16
- lsls r2, 16
- lsrs r2, 16
- mov r8, r2
- bl GetCurrentMapRotatingGatePuzzleType
- cmp r0, 0
- bne _080FBFFA
- b _080FC08A
-_080FBFF6:
- movs r0, 0x1
- b _080FC08C
-_080FBFFA:
- movs r6, 0
- ldr r0, =gUnknown_0203A048
- ldrb r0, [r0]
- cmp r6, r0
- bge _080FC08A
- lsls r0, r4, 16
- asrs r7, r0, 16
-_080FC008:
- ldr r0, =gUnknown_0203A044
- ldr r1, [r0]
- lsls r0, r6, 3
- adds r0, r1
- ldrh r1, [r0]
- adds r1, 0x7
- ldrh r0, [r0, 0x2]
- adds r0, 0x7
- lsls r0, 16
- lsrs r2, r0, 16
- lsls r1, 16
- asrs r4, r1, 16
- subs r0, r4, 0x2
- cmp r0, r7
- bgt _080FC080
- adds r0, r4, 0x1
- cmp r7, r0
- bgt _080FC080
- lsls r0, r2, 16
- asrs r3, r0, 16
- subs r1, r3, 0x2
- mov r2, r8
- lsls r0, r2, 16
- asrs r2, r0, 16
- cmp r1, r2
- bgt _080FC080
- adds r0, r3, 0x1
- cmp r2, r0
- bgt _080FC080
- subs r1, r7, r4
- adds r1, 0x2
- subs r2, r3
- adds r2, 0x2
- lsls r1, 16
- asrs r1, 16
- lsls r2, 16
- asrs r2, 16
- mov r0, r9
- bl sub_80FBE3C
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFF
- beq _080FC080
- lsrs r5, r0, 4
- movs r1, 0xF
- ands r1, r0
- lsls r0, r6, 24
- lsrs r4, r0, 24
- adds r0, r4, 0
- bl sub_80FBDB4
- cmp r0, 0
- beq _080FC080
- adds r0, r4, 0
- adds r1, r5, 0
- bl sub_80FBCDC
- cmp r0, 0
- beq _080FBFF6
-_080FC080:
- adds r6, 0x1
- ldr r0, =gUnknown_0203A048
- ldrb r0, [r0]
- cmp r6, r0
- blt _080FC008
-_080FC08A:
- movs r0, 0
-_080FC08C:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80FBFD4
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/roulette.s b/asm/roulette.s
index e03bbea91..d3dd5fd9e 100644
--- a/asm/roulette.s
+++ b/asm/roulette.s
@@ -2570,7 +2570,7 @@ sub_8141800: @ 8141800
movs r0, 0x1E
ldrsh r1, [r4, r0]
movs r0, 0x1D
- bl sav12_xor_set
+ bl SetGameStat
_08141848:
ldr r1, =sub_8141A18
ldr r2, =0x0000ffff
@@ -3276,7 +3276,7 @@ sub_8141E7C: @ 8141E7C
ldr r1, =gFieldCallback
ldr r0, =sub_80AF168
str r0, [r1]
- ldr r0, =c2_exit_to_overworld_2_switch
+ ldr r0, =CB2_ReturnToField
bl SetMainCallback2
adds r0, r5, 0
bl DestroyTask
diff --git a/asm/script_menu.s b/asm/script_menu.s
index 7317317a3..a2e2ec59e 100644
--- a/asm/script_menu.s
+++ b/asm/script_menu.s
@@ -836,7 +836,7 @@ _080E24C6:
adds r1, r4, 0
adds r2, r7, 0
movs r3, 0x11
- bl sub_819A024
+ bl PrintPlayerNameOnWindow
adds r0, r6, 0
mov r1, r8
movs r2, 0
@@ -1316,7 +1316,7 @@ _080E28CA:
ldr r1, =gSprites
adds r0, r1
ldrb r1, [r4, 0xC]
- bl sub_80B6070
+ bl FreeResourcesAndDestroySprite
_080E28DE:
ldrh r0, [r4, 0x8]
adds r0, 0x1
@@ -1363,7 +1363,7 @@ ScriptMenu_ShowPokemonPic: @ 80E2900
asrs r2, 16
mov r0, r8
movs r3, 0
- bl sub_80B5F84
+ bl CreateMonSprite_PicBox
adds r5, r0, 0
lsls r5, 24
lsrs r5, 24
diff --git a/asm/script_movement.s b/asm/script_movement.s
deleted file mode 100644
index 8c6a6257c..000000000
--- a/asm/script_movement.s
+++ /dev/null
@@ -1,577 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start ScriptMovement_StartObjectMovementScript
-ScriptMovement_StartObjectMovementScript: @ 80D32E8
- push {r4,lr}
- sub sp, 0x4
- adds r4, r3, 0
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 24
- lsls r2, 24
- lsrs r2, 24
- mov r3, sp
- bl TryGetFieldObjectIdByLocalIdAndMap
- lsls r0, 24
- cmp r0, 0
- beq _080D330A
- movs r0, 0x1
- b _080D3332
-_080D330A:
- ldr r0, =sub_80D3660
- bl FuncIsActiveTask
- lsls r0, 24
- cmp r0, 0
- bne _080D331C
- movs r0, 0x32
- bl sub_80D33AC
-_080D331C:
- bl sub_80D33F4
- lsls r0, 24
- lsrs r0, 24
- mov r1, sp
- ldrb r1, [r1]
- adds r2, r4, 0
- bl sub_80D3408
- lsls r0, 24
- lsrs r0, 24
-_080D3332:
- add sp, 0x4
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end ScriptMovement_StartObjectMovementScript
-
- thumb_func_start ScriptMovement_IsObjectMovementFinished
-ScriptMovement_IsObjectMovementFinished: @ 80D3340
- push {r4,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 24
- lsls r2, 24
- lsrs r2, 24
- mov r3, sp
- bl TryGetFieldObjectIdByLocalIdAndMap
- lsls r0, 24
- cmp r0, 0
- bne _080D3382
- bl sub_80D33F4
- lsls r0, 24
- lsrs r4, r0, 24
- mov r0, sp
- ldrb r1, [r0]
- adds r0, r4, 0
- bl sub_80D3474
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x10
- beq _080D3382
- adds r0, r4, 0
- bl sub_80D3584
- lsls r0, 24
- lsrs r0, 24
- b _080D3384
-_080D3382:
- movs r0, 0x1
-_080D3384:
- add sp, 0x4
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end ScriptMovement_IsObjectMovementFinished
-
- thumb_func_start sub_80D338C
-sub_80D338C: @ 80D338C
- push {r4,lr}
- bl sub_80D33F4
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0xFF
- beq _080D33A6
- adds r0, r4, 0
- bl sub_80D361C
- adds r0, r4, 0
- bl DestroyTask
-_080D33A6:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80D338C
-
- thumb_func_start sub_80D33AC
-sub_80D33AC: @ 80D33AC
- push {r4,r5,lr}
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- ldr r0, =sub_80D3660
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- movs r2, 0x1
- lsls r1, r0, 2
- adds r1, r0
- lsls r3, r1, 3
- ldr r5, =gTasks + 0x8
- ldr r0, =0x0000ffff
- adds r4, r0, 0
-_080D33CC:
- lsls r0, r2, 1
- adds r0, r3
- adds r0, r5
- ldrh r1, [r0]
- orrs r1, r4
- strh r1, [r0]
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0xF
- bls _080D33CC
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80D33AC
-
- thumb_func_start sub_80D33F4
-sub_80D33F4: @ 80D33F4
- push {lr}
- ldr r0, =sub_80D3660
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80D33F4
-
- thumb_func_start sub_80D3408
-sub_80D3408: @ 80D3408
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- mov r9, r2
- lsls r0, 24
- lsrs r5, r0, 24
- adds r7, r5, 0
- lsls r1, 24
- lsrs r6, r1, 24
- mov r8, r6
- adds r0, r5, 0
- adds r1, r6, 0
- bl sub_80D3474
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x10
- beq _080D3444
- adds r0, r5, 0
- adds r1, r4, 0
- bl sub_80D3584
- lsls r0, 24
- cmp r0, 0
- beq _080D3464
- adds r0, r5, 0
- adds r1, r4, 0
- adds r2, r6, 0
- b _080D345A
-_080D3444:
- adds r0, r7, 0
- movs r1, 0xFF
- bl sub_80D3474
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x10
- beq _080D3464
- adds r0, r7, 0
- adds r1, r4, 0
- mov r2, r8
-_080D345A:
- mov r3, r9
- bl sub_80D35DC
- movs r0, 0
- b _080D3466
-_080D3464:
- movs r0, 0x1
-_080D3466:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_80D3408
-
- thumb_func_start sub_80D3474
-sub_80D3474: @ 80D3474
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r3, r1, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, =gTasks + 0x8
- adds r1, r0
- adds r1, 0x2
- movs r2, 0
-_080D348C:
- ldrb r0, [r1]
- cmp r0, r3
- bne _080D349C
- adds r0, r2, 0
- b _080D34AA
- .pool
-_080D349C:
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- adds r1, 0x1
- cmp r2, 0xF
- bls _080D348C
- movs r0, 0x10
-_080D34AA:
- pop {r1}
- bx r1
- thumb_func_end sub_80D3474
-
- thumb_func_start sub_80D34B0
-sub_80D34B0: @ 80D34B0
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r3, r1, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, =gTasks + 0x8
- adds r1, r0
- adds r1, 0x2
- str r1, [r2]
- movs r0, 0
- cmp r0, r3
- bcs _080D34DC
-_080D34CE:
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- adds r1, 0x1
- cmp r0, r3
- bcc _080D34CE
- str r1, [r2]
-_080D34DC:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80D34B0
-
- thumb_func_start sub_80D34E4
-sub_80D34E4: @ 80D34E4
- push {r4,lr}
- sub sp, 0x4
- adds r4, r2, 0
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 24
- lsls r4, 24
- lsrs r4, 24
- mov r2, sp
- bl sub_80D34B0
- ldr r0, [sp]
- strb r4, [r0]
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80D34E4
-
- thumb_func_start sub_80D3508
-sub_80D3508: @ 80D3508
- push {r4,lr}
- sub sp, 0x4
- adds r4, r2, 0
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 24
- mov r2, sp
- bl sub_80D34B0
- ldr r0, [sp]
- ldrb r0, [r0]
- strb r0, [r4]
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_80D3508
-
- thumb_func_start sub_80D352C
-sub_80D352C: @ 80D352C
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- ldr r2, =gBitTable
- lsrs r1, 22
- adds r1, r2
- ldr r2, [r1]
- mvns r2, r2
- lsls r2, 16
- lsrs r2, 16
- ldr r3, =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r3
- ldrh r0, [r1, 0x8]
- ands r2, r0
- strh r2, [r1, 0x8]
- bx lr
- .pool
- thumb_func_end sub_80D352C
-
- thumb_func_start sub_80D355C
-sub_80D355C: @ 80D355C
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- ldr r3, =gTasks
- lsls r2, r0, 2
- adds r2, r0
- lsls r2, 3
- adds r2, r3
- ldr r0, =gBitTable
- lsrs r1, 22
- adds r1, r0
- ldr r0, [r1]
- ldrh r1, [r2, 0x8]
- orrs r0, r1
- strh r0, [r2, 0x8]
- bx lr
- .pool
- thumb_func_end sub_80D355C
-
- thumb_func_start sub_80D3584
-sub_80D3584: @ 80D3584
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- ldr r3, =gTasks
- lsls r2, r0, 2
- adds r2, r0
- lsls r2, 3
- adds r2, r3
- ldr r0, =gBitTable
- lsrs r1, 22
- adds r1, r0
- ldr r0, [r1]
- ldrh r1, [r2, 0x8]
- ands r0, r1
- cmp r0, 0
- bne _080D35B4
- movs r0, 0
- b _080D35B6
- .pool
-_080D35B4:
- movs r0, 0x1
-_080D35B6:
- pop {r1}
- bx r1
- thumb_func_end sub_80D3584
-
- thumb_func_start npc_obj_offscreen_culling_and_flag_update
-npc_obj_offscreen_culling_and_flag_update: @ 80D35BC
- lsls r0, 24
- ldr r2, =gUnknown_02039D90
- lsrs r0, 22
- adds r0, r2
- str r1, [r0]
- bx lr
- .pool
- thumb_func_end npc_obj_offscreen_culling_and_flag_update
-
- thumb_func_start sub_80D35CC
-sub_80D35CC: @ 80D35CC
- lsls r0, 24
- ldr r1, =gUnknown_02039D90
- lsrs r0, 22
- adds r0, r1
- ldr r0, [r0]
- bx lr
- .pool
- thumb_func_end sub_80D35CC
-
- thumb_func_start sub_80D35DC
-sub_80D35DC: @ 80D35DC
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- adds r5, r0, 0
- adds r4, r1, 0
- adds r6, r2, 0
- mov r8, r3
- lsls r5, 24
- lsrs r5, 24
- lsls r4, 24
- lsrs r4, 24
- lsls r6, 24
- lsrs r6, 24
- adds r0, r5, 0
- adds r1, r4, 0
- bl sub_80D352C
- adds r0, r4, 0
- mov r1, r8
- bl npc_obj_offscreen_culling_and_flag_update
- adds r0, r5, 0
- adds r1, r4, 0
- adds r2, r6, 0
- bl sub_80D34E4
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_80D35DC
-
- thumb_func_start sub_80D361C
-sub_80D361C: @ 80D361C
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, =gTasks + 0x8
- adds r1, r0
- adds r4, r1, 0x2
- movs r5, 0
-_080D3630:
- ldrb r0, [r4]
- cmp r0, 0xFF
- beq _080D3646
- adds r1, r0, 0
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, =gMapObjects
- adds r0, r1
- bl npc_sync_anim_pause_bits
-_080D3646:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- adds r4, 0x1
- cmp r5, 0xF
- bls _080D3630
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80D361C
-
- thumb_func_start sub_80D3660
-sub_80D3660: @ 80D3660
- push {r4-r7,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r7, r0, 24
- movs r5, 0
- mov r6, sp
-_080D366C:
- adds r0, r7, 0
- adds r1, r5, 0
- mov r2, sp
- bl sub_80D3508
- ldrb r0, [r6]
- cmp r0, 0xFF
- beq _080D3690
- adds r4, r0, 0
- adds r0, r5, 0
- bl sub_80D35CC
- adds r3, r0, 0
- adds r0, r7, 0
- adds r1, r5, 0
- adds r2, r4, 0
- bl sub_80D36A4
-_080D3690:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0xF
- bls _080D366C
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_80D3660
-
- thumb_func_start sub_80D36A4
-sub_80D36A4: @ 80D36A4
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r5, r3, 0
- lsls r0, 24
- lsrs r7, r0, 24
- lsls r1, 24
- lsrs r6, r1, 24
- mov r8, r6
- lsls r2, 24
- lsrs r2, 24
- lsls r0, r2, 3
- adds r0, r2
- lsls r0, 2
- ldr r1, =gMapObjects
- adds r4, r0, r1
- adds r0, r4, 0
- bl FieldObjectIsSpecialAnimActive
- lsls r0, 24
- cmp r0, 0
- beq _080D36DC
- adds r0, r4, 0
- bl FieldObjectClearAnimIfSpecialAnimFinished
- lsls r0, 24
- cmp r0, 0
- beq _080D370E
-_080D36DC:
- ldrb r1, [r5]
- cmp r1, 0xFE
- bne _080D36F8
- adds r0, r7, 0
- adds r1, r6, 0
- bl sub_80D355C
- adds r0, r4, 0
- bl FreezeMapObject
- b _080D370E
- .pool
-_080D36F8:
- adds r0, r4, 0
- bl FieldObjectSetSpecialAnim
- lsls r0, 24
- cmp r0, 0
- bne _080D370E
- adds r5, 0x1
- mov r0, r8
- adds r1, r5, 0
- bl npc_obj_offscreen_culling_and_flag_update
-_080D370E:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_80D36A4
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/script_pokemon_util_80F87D8.s b/asm/script_pokemon_util_80F87D8.s
index 4f0fb850b..b241e3778 100644
--- a/asm/script_pokemon_util_80F87D8.s
+++ b/asm/script_pokemon_util_80F87D8.s
@@ -390,7 +390,7 @@ _080F8AB6:
thumb_func_start sub_80F8ACC
sub_80F8ACC: @ 80F8ACC
push {lr}
- ldr r0, =c2_exit_to_overworld_1_continue_scripts_restart_music
+ ldr r0, =CB2_ReturnToFieldContinueScript
bl SetMainCallback2
pop {r0}
bx r0
@@ -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
@@ -1559,7 +1559,7 @@ _080F9478:
movs r0, 0x1
strh r0, [r1]
_080F947E:
- ldr r0, =c2_exit_to_overworld_1_continue_scripts_restart_music
+ ldr r0, =CB2_ReturnToFieldContinueScript
bl SetMainCallback2
pop {r0}
bx r0
@@ -1599,7 +1599,7 @@ _080F94D0:
movs r0, 0x1
strh r0, [r1]
_080F94D6:
- ldr r0, =c2_exit_to_overworld_1_continue_scripts_restart_music
+ ldr r0, =CB2_ReturnToFieldContinueScript
bl SetMainCallback2
pop {r0}
bx r0
diff --git a/asm/shop.s b/asm/shop.s
index 97dbd07c8..a09d05323 100644
--- a/asm/shop.s
+++ b/asm/shop.s
@@ -230,7 +230,7 @@ CB2_ExitSellMenu: @ 80DFC48
ldr r0, =gFieldCallback
ldr r1, =MapPostLoadHook_ExitBuyOrSellMenu
str r1, [r0]
- ldr r0, =c2_exit_to_overworld_2_switch
+ ldr r0, =CB2_ReturnToField
bl SetMainCallback2
pop {r0}
bx r0
@@ -316,7 +316,7 @@ Task_ExitSellMenu: @ 80DFCF8
lsls r0, 24
lsrs r4, r0, 24
adds r5, r4, 0
- bl sub_80ABDFC
+ bl IsWeatherNotFadingIn
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
@@ -790,7 +790,7 @@ BuyMenuPrintPriceInList: @ 80E0114
ldr r5, =gStringVar1
lsls r0, r1, 16
lsrs r0, 16
- bl itemid_get_market_price
+ bl ItemId_GetPrice
adds r4, r0, 0
movs r0, 0x1
bl GetPriceReduction
@@ -1985,7 +1985,7 @@ _080E0AEA:
adds r1, r2, r3
subs r3, 0x2
adds r2, r3
- bl sub_81AE860
+ bl ListMenuGetScrollAndRow
movs r0, 0x2
negs r0, r0
cmp r5, r0
@@ -2017,7 +2017,7 @@ _080E0B32:
bne _080E0B80
lsls r0, r5, 16
lsrs r0, 16
- bl itemid_get_market_price
+ bl ItemId_GetPrice
adds r4, r0, 0
movs r0, 0x1
bl GetPriceReduction
@@ -2259,7 +2259,7 @@ Task_BuyHowManyDialogueHandleInput: @ 80E0D88
cmp r0, 0x1
bne _080E0DF0
ldrh r0, [r5, 0xA]
- bl itemid_get_market_price
+ bl ItemId_GetPrice
adds r4, r0, 0
movs r0, 0x1
bl GetPriceReduction
@@ -2706,7 +2706,7 @@ Task_ExitBuyMenu: @ 80E11B0
bne _080E11D6
bl RemoveMoneyLabelObject
bl BuyMenuFreeMemory
- ldr r0, =c2_exit_to_overworld_2_switch
+ ldr r0, =CB2_ReturnToField
bl SetMainCallback2
adds r0, r4, 0
bl DestroyTask
diff --git a/asm/slot_machine.s b/asm/slot_machine.s
index 88f73fe2c..fc475c2e3 100644
--- a/asm/slot_machine.s
+++ b/asm/slot_machine.s
@@ -5583,7 +5583,7 @@ _0812D08E:
lsrs r3, 24
adds r1, r3, 0
adds r2, r3, 0
- bl sub_80B6128
+ bl MultiplyPaletteRGBComponents
_0812D0A6:
pop {r4-r7}
pop {r0}
diff --git a/asm/smokescreen.s b/asm/smokescreen.s
deleted file mode 100644
index 464e25c40..000000000
--- a/asm/smokescreen.s
+++ /dev/null
@@ -1,214 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_807521C
-sub_807521C: @ 807521C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- lsls r0, 16
- lsrs r6, r0, 16
- lsls r1, 16
- lsrs r7, r1, 16
- lsls r2, 24
- lsrs r4, r2, 24
- ldr r5, =gUnknown_0831C620
- ldrh r0, [r5, 0x6]
- bl GetSpriteTileStartByTag
- lsls r0, 16
- ldr r1, =0xffff0000
- cmp r0, r1
- bne _0807524E
- adds r0, r5, 0
- bl LoadCompressedObjectPicUsingHeap
- ldr r0, =gUnknown_0831C628
- bl LoadCompressedObjectPaletteUsingHeap
-_0807524E:
- ldr r0, =sub_8075370
- bl CreateInvisibleSpriteWithCallback
- mov r8, r0
- mov r0, r8
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- lsls r5, r0, 4
- add r5, r8
- lsls r5, 2
- ldr r0, =gSprites
- adds r5, r0
- strh r4, [r5, 0x30]
- ldr r0, =gUnknown_0831C688
- mov r9, r0
- lsls r6, 16
- asrs r0, r6, 16
- mov r10, r0
- ldr r0, =0xfff00000
- adds r6, r0
- asrs r6, 16
- lsls r4, r7, 16
- asrs r7, r4, 16
- adds r4, r0
- asrs r4, 16
- mov r0, r9
- adds r1, r6, 0
- adds r2, r4, 0
- movs r3, 0x2
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- ldr r0, =gSprites
- adds r1, r0
- mov r0, r8
- strh r0, [r1, 0x2E]
- ldrh r0, [r5, 0x2E]
- adds r0, 0x1
- strh r0, [r5, 0x2E]
- adds r0, r1, 0
- bl AnimateSprite
- mov r0, r9
- mov r1, r10
- adds r2, r4, 0
- movs r3, 0x2
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- ldr r0, =gSprites
- adds r4, r0
- mov r0, r8
- strh r0, [r4, 0x2E]
- ldrh r0, [r5, 0x2E]
- adds r0, 0x1
- strh r0, [r5, 0x2E]
- adds r0, r4, 0
- movs r1, 0x1
- bl StartSpriteAnim
- adds r0, r4, 0
- bl AnimateSprite
- mov r0, r9
- adds r1, r6, 0
- adds r2, r7, 0
- movs r3, 0x2
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- ldr r0, =gSprites
- adds r4, r0
- mov r0, r8
- strh r0, [r4, 0x2E]
- ldrh r0, [r5, 0x2E]
- adds r0, 0x1
- strh r0, [r5, 0x2E]
- adds r0, r4, 0
- movs r1, 0x2
- bl StartSpriteAnim
- adds r0, r4, 0
- bl AnimateSprite
- mov r0, r9
- mov r1, r10
- adds r2, r7, 0
- movs r3, 0x2
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- ldr r0, =gSprites
- adds r4, r0
- mov r0, r8
- strh r0, [r4, 0x2E]
- ldrh r0, [r5, 0x2E]
- adds r0, 0x1
- strh r0, [r5, 0x2E]
- adds r0, r4, 0
- movs r1, 0x3
- bl StartSpriteAnim
- adds r0, r4, 0
- bl AnimateSprite
- mov r0, r8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_807521C
-
- thumb_func_start sub_8075370
-sub_8075370: @ 8075370
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _080753A8
- ldr r0, =gUnknown_0831C620
- ldrh r0, [r0, 0x6]
- bl FreeSpriteTilesByTag
- ldr r0, =gUnknown_0831C628
- ldrh r0, [r0, 0x4]
- bl FreeSpritePaletteByTag
- movs r1, 0x30
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _080753A4
- adds r0, r4, 0
- bl DestroySprite
- b _080753A8
- .pool
-_080753A4:
- ldr r0, =SpriteCallbackDummy
- str r0, [r4, 0x1C]
-_080753A8:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8075370
-
- thumb_func_start sub_80753B4
-sub_80753B4: @ 80753B4
- push {lr}
- adds r3, r0, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _080753DE
- ldr r2, =gSprites
- movs r0, 0x2E
- ldrsh r1, [r3, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrh r1, [r0, 0x2E]
- subs r1, 0x1
- strh r1, [r0, 0x2E]
- adds r0, r3, 0
- bl DestroySprite
-_080753DE:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80753B4
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/start_menu.s b/asm/start_menu.s
deleted file mode 100644
index 5b6652a6f..000000000
--- a/asm/start_menu.s
+++ /dev/null
@@ -1,2101 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
-
- thumb_func_start PrintStartMenuActions
-PrintStartMenuActions: @ 809F7C0
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0xC
- mov r8, r0
- adds r6, r1, 0
- ldrb r2, [r0]
- ldr r0, =sStartMenuItems
- mov r9, r0
- ldr r1, =gStringVar4
- mov r10, r1
-_0809F7DA:
- ldr r0, =sCurrentStartMenuActions
- lsls r2, 24
- asrs r4, r2, 24
- adds r5, r4, r0
- ldrb r0, [r5]
- lsls r3, r0, 3
- mov r0, r9
- adds r0, 0x4
- adds r0, r3, r0
- ldr r1, [r0]
- ldr r0, =StartMenu_PlayerName
- adds r7, r2, 0
- cmp r1, r0
- bne _0809F828
- bl GetStartMenuWindowId
- lsls r0, 24
- lsrs r0, 24
- ldrb r1, [r5]
- lsls r1, 3
- add r1, r9
- ldr r1, [r1]
- lsls r3, r4, 4
- adds r3, 0x9
- lsls r3, 16
- lsrs r3, 16
- movs r2, 0x8
- bl sub_819A024
- b _0809F858
- .pool
-_0809F828:
- mov r1, r9
- adds r0, r3, r1
- ldr r1, [r0]
- mov r0, r10
- bl StringExpandPlaceholders
- bl GetStartMenuWindowId
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r4, 4
- adds r1, 0x9
- lsls r1, 24
- lsrs r1, 24
- str r1, [sp]
- movs r1, 0xFF
- str r1, [sp, 0x4]
- movs r1, 0
- str r1, [sp, 0x8]
- movs r1, 0x1
- mov r2, r10
- movs r3, 0x8
- bl PrintTextOnWindow
-_0809F858:
- movs r0, 0x80
- lsls r0, 17
- adds r1, r7, r0
- lsrs r2, r1, 24
- asrs r1, 24
- ldr r0, =sNumStartMenuActions
- ldrb r0, [r0]
- cmp r1, r0
- bge _0809F87C
- subs r6, 0x1
- cmp r6, 0
- bne _0809F7DA
- mov r1, r8
- strb r2, [r1]
- movs r0, 0
- b _0809F882
- .pool
-_0809F87C:
- mov r0, r8
- strb r2, [r0]
- movs r0, 0x1
-_0809F882:
- add sp, 0xC
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end PrintStartMenuActions
-
- thumb_func_start sub_809F894
-sub_809F894: @ 809F894
- push {r4,lr}
- sub sp, 0xC
- ldr r0, =gUnknown_02037619
- movs r1, 0
- ldrsb r1, [r0, r1]
- adds r2, r0, 0
- cmp r1, 0x5
- bhi _0809F98C
- lsls r0, r1, 2
- ldr r1, =_0809F8B8
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_0809F8B8:
- .4byte _0809F8D0
- .4byte _0809F8D8
- .4byte _0809F8E4
- .4byte _0809F90C
- .4byte _0809F930
- .4byte _0809F94C
-_0809F8D0:
- ldrb r0, [r2]
- adds r0, 0x1
- strb r0, [r2]
- b _0809F98C
-_0809F8D8:
- bl BuildStartMenuActions
- ldr r1, =gUnknown_02037619
- b _0809F940
- .pool
-_0809F8E4:
- bl sub_81973A4
- ldr r0, =sNumStartMenuActions
- ldrb r0, [r0]
- bl sub_81979C4
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0
- bl NewMenuHelpers_DrawStdWindowFrame
- ldr r1, =gUnknown_02037619
- movs r0, 0
- strb r0, [r1, 0x1]
- b _0809F940
- .pool
-_0809F90C:
- bl GetSafariZoneFlag
- cmp r0, 0
- beq _0809F918
- bl DisplaySafariBallsWindow
-_0809F918:
- bl InBattlePyramid
- lsls r0, 24
- cmp r0, 0
- beq _0809F926
- bl DisplayPyramidFloorWindow
-_0809F926:
- ldr r1, =gUnknown_02037619
- b _0809F940
- .pool
-_0809F930:
- ldr r4, =gUnknown_02037619+1
- adds r0, r4, 0
- movs r1, 0x2
- bl PrintStartMenuActions
- cmp r0, 0
- beq _0809F98C
- subs r1, r4, 0x1
-_0809F940:
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _0809F98C
- .pool
-_0809F94C:
- bl GetStartMenuWindowId
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x10
- str r1, [sp]
- ldr r1, =sNumStartMenuActions
- ldrb r1, [r1]
- str r1, [sp, 0x4]
- ldr r4, =sStartMenuCursorPos
- ldrb r1, [r4]
- str r1, [sp, 0x8]
- movs r1, 0x1
- movs r2, 0
- movs r3, 0x9
- bl sub_81983AC
- strb r0, [r4]
- bl GetStartMenuWindowId
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x1
- bl CopyWindowToVram
- movs r0, 0x1
- b _0809F98E
- .pool
-_0809F98C:
- movs r0, 0
-_0809F98E:
- add sp, 0xC
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_809F894
-
- thumb_func_start sub_809F998
-sub_809F998: @ 809F998
- push {lr}
- ldr r1, =gUnknown_02037619
- movs r0, 0
- strb r0, [r1]
- strb r0, [r1, 0x1]
-_0809F9A2:
- bl sub_809F894
- cmp r0, 0
- beq _0809F9A2
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_809F998
-
- thumb_func_start task50_startmenu
-task50_startmenu: @ 809F9B4
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl sub_809F894
- cmp r0, 0x1
- bne _0809F9C8
- adds r0, r4, 0
- bl SwitchTaskToFollowupFunc
-_0809F9C8:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end task50_startmenu
-
- thumb_func_start sub_809F9D0
-sub_809F9D0: @ 809F9D0
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r1, =gUnknown_02037619
- movs r0, 0
- strb r0, [r1]
- strb r0, [r1, 0x1]
- ldr r4, =task50_startmenu
- adds r0, r4, 0
- movs r1, 0x50
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- adds r1, r4, 0
- adds r2, r5, 0
- bl SetTaskFuncWithFollowupFunc
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_809F9D0
-
- thumb_func_start sub_809FA00
-sub_809FA00: @ 809FA00
- push {lr}
- bl sub_809F894
- cmp r0, 0
- beq _0809FA12
- bl sub_80AF688
- movs r0, 0x1
- b _0809FA14
-_0809FA12:
- movs r0, 0
-_0809FA14:
- pop {r1}
- bx r1
- thumb_func_end sub_809FA00
-
- thumb_func_start sub_809FA18
-sub_809FA18: @ 809FA18
- ldr r1, =gUnknown_02037619
- movs r0, 0
- strb r0, [r1]
- strb r0, [r1, 0x1]
- ldr r1, =gUnknown_03005DB0
- ldr r0, =sub_809FA00
- str r0, [r1]
- bx lr
- .pool
- thumb_func_end sub_809FA18
-
- thumb_func_start sub_809FA34
-sub_809FA34: @ 809FA34
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- ldr r1, =gTasks
- adds r4, r0, r1
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- cmp r0, 0
- beq _0809FA58
- cmp r0, 0x1
- beq _0809FA7C
- b _0809FA92
- .pool
-_0809FA58:
- bl InUnionRoom
- cmp r0, 0x1
- bne _0809FA64
- bl var_800D_set_xB
-_0809FA64:
- ldr r1, =gUnknown_03005DF4
- ldr r0, =HandleStartMenuInput
- str r0, [r1]
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- b _0809FA92
- .pool
-_0809FA7C:
- ldr r0, =gUnknown_03005DF4
- ldr r0, [r0]
- bl _call_via_r0
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0809FA92
- adds r0, r5, 0
- bl DestroyTask
-_0809FA92:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_809FA34
-
- thumb_func_start sub_809FA9C
-sub_809FA9C: @ 809FA9C
- push {lr}
- bl is_c1_link_related_active
- cmp r0, 0
- bne _0809FAB2
- bl FreezeMapObjects
- bl sub_808B864
- bl sub_808BCF4
-_0809FAB2:
- ldr r0, =sub_809FA34
- bl sub_809F9D0
- bl ScriptContext2_Enable
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_809FA9C
-
- thumb_func_start HandleStartMenuInput
-HandleStartMenuInput: @ 809FAC4
- push {r4,lr}
- ldr r4, =gMain
- ldrh r1, [r4, 0x2E]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0809FAE4
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x1
- negs r0, r0
- bl MoveMenuCursor
- ldr r1, =sStartMenuCursorPos
- strb r0, [r1]
-_0809FAE4:
- ldrh r1, [r4, 0x2E]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0809FAFE
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x1
- bl MoveMenuCursor
- ldr r1, =sStartMenuCursorPos
- strb r0, [r1]
-_0809FAFE:
- ldrh r1, [r4, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0809FB98
- movs r0, 0x5
- bl PlaySE
- ldr r1, =sStartMenuItems
- ldr r2, =sCurrentStartMenuActions
- ldr r0, =sStartMenuCursorPos
- ldrb r0, [r0]
- adds r0, r2
- ldrb r0, [r0]
- lsls r0, 3
- adds r1, 0x4
- adds r0, r1
- ldr r1, [r0]
- ldr r0, =StartMenu_Pokedex
- cmp r1, r0
- bne _0809FB34
- movs r0, 0
- bl pokedex_count
- lsls r0, 16
- cmp r0, 0
- beq _0809FBA0
-_0809FB34:
- ldr r3, =gUnknown_03005DF4
- ldr r1, =sStartMenuItems
- ldr r2, =sCurrentStartMenuActions
- ldr r0, =sStartMenuCursorPos
- ldrb r0, [r0]
- adds r0, r2
- ldrb r0, [r0]
- lsls r0, 3
- adds r1, 0x4
- adds r0, r1
- ldr r1, [r0]
- str r1, [r3]
- ldr r0, =StartMenu_Save
- cmp r1, r0
- beq _0809FBA0
- ldr r0, =StartMenu_Exit
- cmp r1, r0
- beq _0809FBA0
- ldr r0, =StartMenu_SafariZoneRetire
- cmp r1, r0
- beq _0809FBA0
- ldr r0, =StartMenu_BattlePyramidRetire
- cmp r1, r0
- beq _0809FBA0
- movs r0, 0x1
- movs r1, 0
- bl FadeScreen
- b _0809FBA0
- .pool
-_0809FB98:
- movs r0, 0xA
- ands r0, r1
- cmp r0, 0
- bne _0809FBA4
-_0809FBA0:
- movs r0, 0
- b _0809FBAE
-_0809FBA4:
- bl RemoveExtraStartMenuWindows
- bl sub_80A0934
- movs r0, 0x1
-_0809FBAE:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end HandleStartMenuInput
-
- thumb_func_start StartMenu_Pokedex
-StartMenu_Pokedex: @ 809FBB4
- push {lr}
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0809FBCC
- movs r0, 0
- b _0809FBE6
- .pool
-_0809FBCC:
- movs r0, 0x29
- bl IncrementGameStat
- bl play_some_sound
- bl RemoveExtraStartMenuWindows
- bl overworld_free_bg_tilemaps
- ldr r0, =sub_80BB534
- bl SetMainCallback2
- movs r0, 0x1
-_0809FBE6:
- pop {r1}
- bx r1
- .pool
- thumb_func_end StartMenu_Pokedex
-
- thumb_func_start StartMenu_Pokemon
-StartMenu_Pokemon: @ 809FBF0
- push {lr}
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0809FC08
- movs r0, 0
- b _0809FC1C
- .pool
-_0809FC08:
- bl play_some_sound
- bl RemoveExtraStartMenuWindows
- bl overworld_free_bg_tilemaps
- ldr r0, =CB2_PartyMenuFromStartMenu
- bl SetMainCallback2
- movs r0, 0x1
-_0809FC1C:
- pop {r1}
- bx r1
- .pool
- thumb_func_end StartMenu_Pokemon
-
- thumb_func_start StartMenu_Bag
-StartMenu_Bag: @ 809FC24
- push {lr}
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0809FC3C
- movs r0, 0
- b _0809FC50
- .pool
-_0809FC3C:
- bl play_some_sound
- bl RemoveExtraStartMenuWindows
- bl overworld_free_bg_tilemaps
- ldr r0, =CB2_BagMenuFromStartMenu
- bl SetMainCallback2
- movs r0, 0x1
-_0809FC50:
- pop {r1}
- bx r1
- .pool
- thumb_func_end StartMenu_Bag
-
- thumb_func_start StartMenu_PokeNav
-StartMenu_PokeNav: @ 809FC58
- push {lr}
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0809FC70
- movs r0, 0
- b _0809FC84
- .pool
-_0809FC70:
- bl play_some_sound
- bl RemoveExtraStartMenuWindows
- bl overworld_free_bg_tilemaps
- ldr r0, =CB2_PokeNav
- bl SetMainCallback2
- movs r0, 0x1
-_0809FC84:
- pop {r1}
- bx r1
- .pool
- thumb_func_end StartMenu_PokeNav
-
- thumb_func_start StartMenu_PlayerName
-StartMenu_PlayerName: @ 809FC8C
- push {lr}
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0809FCF4
- bl play_some_sound
- bl RemoveExtraStartMenuWindows
- bl overworld_free_bg_tilemaps
- bl is_c1_link_related_active
- cmp r0, 0
- bne _0809FCB6
- bl InUnionRoom
- cmp r0, 0
- beq _0809FCC8
-_0809FCB6:
- ldr r0, =sub_8086194
- bl sub_80C4DDC
- b _0809FCEA
- .pool
-_0809FCC8:
- ldr r0, =0x000008d2
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- beq _0809FCE4
- ldr r0, =sub_8086194
- bl sub_80C51C4
- b _0809FCEA
- .pool
-_0809FCE4:
- ldr r0, =sub_8086194
- bl sub_80C4DDC
-_0809FCEA:
- movs r0, 0x1
- b _0809FCF6
- .pool
-_0809FCF4:
- movs r0, 0
-_0809FCF6:
- pop {r1}
- bx r1
- thumb_func_end StartMenu_PlayerName
-
- thumb_func_start StartMenu_Save
-StartMenu_Save: @ 809FCFC
- push {lr}
- bl InBattlePyramid
- lsls r0, 24
- cmp r0, 0
- beq _0809FD0C
- bl RemoveExtraStartMenuWindows
-_0809FD0C:
- ldr r1, =gUnknown_03005DF4
- ldr r0, =sub_809FE28
- str r0, [r1]
- movs r0, 0
- pop {r1}
- bx r1
- .pool
- thumb_func_end StartMenu_Save
-
- thumb_func_start StartMenu_Option
-StartMenu_Option: @ 809FD20
- push {lr}
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0809FD38
- movs r0, 0
- b _0809FD52
- .pool
-_0809FD38:
- bl play_some_sound
- bl RemoveExtraStartMenuWindows
- bl overworld_free_bg_tilemaps
- ldr r0, =CB2_InitOptionMenu
- bl SetMainCallback2
- ldr r1, =gMain
- ldr r0, =sub_8086194
- str r0, [r1, 0x8]
- movs r0, 0x1
-_0809FD52:
- pop {r1}
- bx r1
- .pool
- thumb_func_end StartMenu_Option
-
- thumb_func_start StartMenu_Exit
-StartMenu_Exit: @ 809FD64
- push {lr}
- bl RemoveExtraStartMenuWindows
- bl sub_80A0934
- movs r0, 0x1
- pop {r1}
- bx r1
- thumb_func_end StartMenu_Exit
-
- thumb_func_start StartMenu_SafariZoneRetire
-StartMenu_SafariZoneRetire: @ 809FD74
- push {lr}
- bl RemoveExtraStartMenuWindows
- bl sub_80A0934
- bl SafariZoneRetirePrompt
- movs r0, 0x1
- pop {r1}
- bx r1
- thumb_func_end StartMenu_SafariZoneRetire
-
- thumb_func_start StartMenu_LinkModePlayerName
-StartMenu_LinkModePlayerName: @ 809FD88
- push {lr}
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0809FDA0
- movs r0, 0
- b _0809FDB4
- .pool
-_0809FDA0:
- bl play_some_sound
- bl overworld_free_bg_tilemaps
- ldr r0, =gUnknown_03005DB4
- ldrb r0, [r0]
- ldr r1, =sub_8086194
- bl sub_80C4E74
- movs r0, 0x1
-_0809FDB4:
- pop {r1}
- bx r1
- .pool
- thumb_func_end StartMenu_LinkModePlayerName
-
- thumb_func_start StartMenu_BattlePyramidRetire
-StartMenu_BattlePyramidRetire: @ 809FDC0
- ldr r1, =gUnknown_03005DF4
- ldr r0, =sub_809FE9C
- str r0, [r1]
- movs r0, 0
- bx lr
- .pool
- thumb_func_end StartMenu_BattlePyramidRetire
-
- thumb_func_start sub_809FDD4
-sub_809FDD4: @ 809FDD4
- push {lr}
- movs r0, 0
- movs r1, 0
- bl sub_8197DF8
- bl sub_80984F4
- ldr r0, =sub_809FA34
- bl sub_809F9D0
- bl ScriptContext2_Enable
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_809FDD4
-
- thumb_func_start StartMenu_BattlePyramidBag
-StartMenu_BattlePyramidBag: @ 809FDF4
- push {lr}
- ldr r0, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0809FE0C
- movs r0, 0
- b _0809FE20
- .pool
-_0809FE0C:
- bl play_some_sound
- bl RemoveExtraStartMenuWindows
- bl overworld_free_bg_tilemaps
- ldr r0, =sub_81C4EFC
- bl SetMainCallback2
- movs r0, 0x1
-_0809FE20:
- pop {r1}
- bx r1
- .pool
- thumb_func_end StartMenu_BattlePyramidBag
-
- thumb_func_start sub_809FE28
-sub_809FE28: @ 809FE28
- push {lr}
- bl sub_809FF28
- ldr r1, =gUnknown_03005DF4
- ldr r0, =sub_809FE44
- str r0, [r1]
- movs r0, 0
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_809FE28
-
- thumb_func_start sub_809FE44
-sub_809FE44: @ 809FE44
- push {lr}
- bl sub_809FF4C
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0809FE7C
- cmp r0, 0x1
- ble _0809FE94
- cmp r0, 0x2
- beq _0809FE60
- cmp r0, 0x3
- beq _0809FE7C
- b _0809FE94
-_0809FE60:
- movs r0, 0
- movs r1, 0
- bl sub_8197DF8
- bl sub_809F998
- ldr r1, =gUnknown_03005DF4
- ldr r0, =HandleStartMenuInput
- str r0, [r1]
- b _0809FE94
- .pool
-_0809FE7C:
- movs r0, 0
- movs r1, 0x1
- bl sub_8197DF8
- bl sub_80984F4
- bl ScriptContext2_Disable
- bl sub_81A9EC8
- movs r0, 0x1
- b _0809FE96
-_0809FE94:
- movs r0, 0
-_0809FE96:
- pop {r1}
- bx r1
- thumb_func_end sub_809FE44
-
- thumb_func_start sub_809FE9C
-sub_809FE9C: @ 809FE9C
- push {lr}
- bl sub_80A0340
- ldr r1, =gUnknown_03005DF4
- ldr r0, =sub_809FED4
- str r0, [r1]
- movs r0, 0
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_809FE9C
-
- thumb_func_start sub_809FEB8
-sub_809FEB8: @ 809FEB8
- push {lr}
- bl sub_809F998
- ldr r1, =gUnknown_03005DF4
- ldr r0, =HandleStartMenuInput
- str r0, [r1]
- movs r0, 0
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_809FEB8
-
- thumb_func_start sub_809FED4
-sub_809FED4: @ 809FED4
- push {lr}
- bl sub_809FF4C
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0809FEEC
- cmp r0, 0x1
- ble _0809FF20
- cmp r0, 0x2
- beq _0809FF00
- b _0809FF20
-_0809FEEC:
- bl RemoveExtraStartMenuWindows
- ldr r1, =gUnknown_03005DF4
- ldr r0, =sub_809FEB8
- str r0, [r1]
- b _0809FF20
- .pool
-_0809FF00:
- movs r0, 0
- movs r1, 0x1
- bl sub_8197DF8
- bl sub_80984F4
- bl ScriptContext2_Disable
- ldr r0, =BattleFrontier_BattlePyramidEmptySquare_EventScript_252C88
- bl ScriptContext1_SetupScript
- movs r0, 0x1
- b _0809FF22
- .pool
-_0809FF20:
- movs r0, 0
-_0809FF22:
- pop {r1}
- bx r1
- thumb_func_end sub_809FED4
-
- thumb_func_start sub_809FF28
-sub_809FF28: @ 809FF28
- push {lr}
- bl save_serialize_map
- ldr r1, =gUnknown_0203761C
- ldr r0, =sub_80A00A0
- str r0, [r1]
- ldr r1, =gUnknown_02037621
- movs r0, 0
- strb r0, [r1]
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_809FF28
-
- thumb_func_start sub_809FF4C
-sub_809FF4C: @ 809FF4C
- push {lr}
- bl sub_8197224
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x1
- beq _0809FF78
- ldr r1, =gUnknown_02037621
- movs r0, 0
- strb r0, [r1]
- ldr r0, =gUnknown_0203761C
- ldr r0, [r0]
- bl _call_via_r0
- lsls r0, 24
- lsrs r0, 24
- b _0809FF7A
- .pool
-_0809FF78:
- movs r0, 0
-_0809FF7A:
- pop {r1}
- bx r1
- thumb_func_end sub_809FF4C
-
- thumb_func_start sub_809FF80
-sub_809FF80: @ 809FF80
- push {lr}
- bl sub_809FF28
- ldr r0, =task50_save_game
- movs r1, 0x50
- bl CreateTask
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_809FF80
-
- thumb_func_start sub_809FF98
-sub_809FF98: @ 809FF98
- push {r4,lr}
- adds r2, r0, 0
- adds r4, r1, 0
- ldr r0, =gStringVar4
- adds r1, r2, 0
- bl StringExpandPlaceholders
- movs r0, 0
- movs r1, 0x1
- bl sub_819786C
- movs r0, 0x1
- bl AddTextPrinterForMessage_2
- ldr r1, =gUnknown_02037621
- movs r0, 0x1
- strb r0, [r1]
- ldr r0, =gUnknown_0203761C
- str r4, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_809FF98
-
- thumb_func_start task50_save_game
-task50_save_game: @ 809FFD0
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl sub_809FF4C
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x1
- beq _0809FFFC
- cmp r1, 0x1
- bgt _0809FFEC
- cmp r1, 0
- beq _080A000A
- b _080A0000
-_0809FFEC:
- cmp r1, 0x3
- bgt _080A0000
- ldr r1, =gSpecialVar_Result
- movs r0, 0
- strh r0, [r1]
- b _080A0000
- .pool
-_0809FFFC:
- ldr r0, =gSpecialVar_Result
- strh r1, [r0]
-_080A0000:
- adds r0, r4, 0
- bl DestroyTask
- bl EnableBothScriptContexts
-_080A000A:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end task50_save_game
-
- thumb_func_start sub_80A0014
-sub_80A0014: @ 80A0014
- push {lr}
- movs r0, 0
- movs r1, 0x1
- bl sub_8197434
- pop {r0}
- bx r0
- thumb_func_end sub_80A0014
-
- thumb_func_start sub_80A0024
-sub_80A0024: @ 80A0024
- push {lr}
- bl sub_80A0888
- pop {r0}
- bx r0
- thumb_func_end sub_80A0024
-
- thumb_func_start sub_80A0030
-sub_80A0030: @ 80A0030
- ldr r1, =gUnknown_02037620
- movs r0, 0x3C
- strb r0, [r1]
- bx lr
- .pool
- thumb_func_end sub_80A0030
-
- thumb_func_start sub_80A003C
-sub_80A003C: @ 80A003C
- push {lr}
- ldr r1, =gUnknown_02037620
- ldrb r0, [r1]
- subs r2, r0, 0x1
- strb r2, [r1]
- ldr r0, =gMain
- ldrh r1, [r0, 0x2C]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _080A0064
- lsls r0, r2, 24
- cmp r0, 0
- beq _080A006A
- movs r0, 0
- b _080A006C
- .pool
-_080A0064:
- movs r0, 0x5
- bl PlaySE
-_080A006A:
- movs r0, 0x1
-_080A006C:
- pop {r1}
- bx r1
- thumb_func_end sub_80A003C
-
- thumb_func_start sub_80A0070
-sub_80A0070: @ 80A0070
- push {lr}
- ldr r1, =gUnknown_02037620
- ldrb r0, [r1]
- cmp r0, 0
- bne _080A0094
- ldr r0, =gMain
- ldrh r1, [r0, 0x2C]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080A0098
- movs r0, 0x1
- b _080A009A
- .pool
-_080A0094:
- subs r0, 0x1
- strb r0, [r1]
-_080A0098:
- movs r0, 0
-_080A009A:
- pop {r1}
- bx r1
- thumb_func_end sub_80A0070
-
- thumb_func_start sub_80A00A0
-sub_80A00A0: @ 80A00A0
- push {lr}
- bl GetStartMenuWindowId
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0
- bl sub_819746C
- bl remove_start_menu_window_maybe
- bl sub_80A06B4
- bl InBattlePyramid
- lsls r0, 24
- cmp r0, 0
- beq _080A00D4
- ldr r0, =BattleFrontier_BattlePyramidEmptySquare_Text_252CA7
- ldr r1, =sub_80A00EC
- bl sub_809FF98
- b _080A00DC
- .pool
-_080A00D4:
- ldr r0, =gUnknown_082C87B4
- ldr r1, =sub_80A00EC
- bl sub_809FF98
-_080A00DC:
- movs r0, 0
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80A00A0
-
- thumb_func_start sub_80A00EC
-sub_80A00EC: @ 80A00EC
- push {lr}
- bl sub_8197930
- ldr r1, =gUnknown_0203761C
- ldr r0, =sub_80A0108
- str r0, [r1]
- movs r0, 0
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80A00EC
-
- thumb_func_start sub_80A0108
-sub_80A0108: @ 80A0108
- push {lr}
- bl ProcessMenuInputNoWrap_
- lsls r0, 24
- asrs r1, r0, 24
- cmp r1, 0
- beq _080A012A
- cmp r1, 0
- bgt _080A0124
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _080A0168
- b _080A0174
-_080A0124:
- cmp r1, 0x1
- beq _080A0168
- b _080A0174
-_080A012A:
- ldr r0, =gSaveFileStatus
- ldrh r0, [r0]
- cmp r0, 0
- beq _080A0136
- cmp r0, 0x2
- bne _080A013E
-_080A0136:
- ldr r0, =gDifferentSaveFile
- ldrb r0, [r0]
- cmp r0, 0
- bne _080A0158
-_080A013E:
- ldr r1, =gUnknown_0203761C
- ldr r0, =sub_80A017C
- str r0, [r1]
- b _080A0174
- .pool
-_080A0158:
- ldr r1, =gUnknown_0203761C
- ldr r0, =sub_80A0234
- str r0, [r1]
- b _080A0174
- .pool
-_080A0168:
- bl sub_80A0024
- bl sub_80A0014
- movs r0, 0x2
- b _080A0176
-_080A0174:
- movs r0, 0
-_080A0176:
- pop {r1}
- bx r1
- thumb_func_end sub_80A0108
-
- thumb_func_start sub_80A017C
-sub_80A017C: @ 80A017C
- push {lr}
- ldr r0, =gDifferentSaveFile
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _080A019C
- ldr r0, =gUnknown_082C8845
- ldr r1, =sub_80A01B4
- bl sub_809FF98
- b _080A01A4
- .pool
-_080A019C:
- ldr r0, =gUnknown_082C87D5
- ldr r1, =sub_80A01D0
- bl sub_809FF98
-_080A01A4:
- movs r0, 0
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80A017C
-
- thumb_func_start sub_80A01B4
-sub_80A01B4: @ 80A01B4
- push {lr}
- movs r0, 0x1
- bl sub_8197948
- ldr r1, =gUnknown_0203761C
- ldr r0, =sub_80A01EC
- str r0, [r1]
- movs r0, 0
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80A01B4
-
- thumb_func_start sub_80A01D0
-sub_80A01D0: @ 80A01D0
- push {lr}
- bl sub_8197930
- ldr r1, =gUnknown_0203761C
- ldr r0, =sub_80A01EC
- str r0, [r1]
- movs r0, 0
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80A01D0
-
- thumb_func_start sub_80A01EC
-sub_80A01EC: @ 80A01EC
- push {lr}
- bl ProcessMenuInputNoWrap_
- lsls r0, 24
- asrs r1, r0, 24
- cmp r1, 0
- beq _080A020E
- cmp r1, 0
- bgt _080A0208
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _080A0220
- b _080A022C
-_080A0208:
- cmp r1, 0x1
- beq _080A0220
- b _080A022C
-_080A020E:
- ldr r1, =gUnknown_0203761C
- ldr r0, =sub_80A0234
- str r0, [r1]
- b _080A022C
- .pool
-_080A0220:
- bl sub_80A0024
- bl sub_80A0014
- movs r0, 0x2
- b _080A022E
-_080A022C:
- movs r0, 0
-_080A022E:
- pop {r1}
- bx r1
- thumb_func_end sub_80A01EC
-
- thumb_func_start sub_80A0234
-sub_80A0234: @ 80A0234
- push {lr}
- ldr r0, =gUnknown_082C8810
- ldr r1, =sub_80A024C
- bl sub_809FF98
- movs r0, 0
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80A0234
-
- thumb_func_start sub_80A024C
-sub_80A024C: @ 80A024C
- push {r4,lr}
- movs r0, 0
- bl IncrementGameStat
- bl sub_81A9E90
- ldr r4, =gDifferentSaveFile
- ldrb r0, [r4]
- cmp r0, 0x1
- bne _080A0274
- movs r0, 0x4
- bl TrySavingData
- lsls r0, 24
- lsrs r1, r0, 24
- movs r0, 0
- strb r0, [r4]
- b _080A027E
- .pool
-_080A0274:
- movs r0, 0
- bl TrySavingData
- lsls r0, 24
- lsrs r1, r0, 24
-_080A027E:
- cmp r1, 0x1
- bne _080A0294
- ldr r0, =gUnknown_082C8832
- ldr r1, =sub_80A02B0
- bl sub_809FF98
- b _080A029C
- .pool
-_080A0294:
- ldr r0, =gUnknown_082C892A
- ldr r1, =sub_80A02FC
- bl sub_809FF98
-_080A029C:
- bl sub_80A0030
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80A024C
-
- thumb_func_start sub_80A02B0
-sub_80A02B0: @ 80A02B0
- push {lr}
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- bne _080A02CA
- movs r0, 0x37
- bl PlaySE
- ldr r1, =gUnknown_0203761C
- ldr r0, =sub_80A02D8
- str r0, [r1]
-_080A02CA:
- movs r0, 0
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80A02B0
-
- thumb_func_start sub_80A02D8
-sub_80A02D8: @ 80A02D8
- push {lr}
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- bne _080A02F6
- bl sub_80A003C
- lsls r0, 24
- cmp r0, 0
- beq _080A02F6
- bl sub_80A0024
- movs r0, 0x1
- b _080A02F8
-_080A02F6:
- movs r0, 0
-_080A02F8:
- pop {r1}
- bx r1
- thumb_func_end sub_80A02D8
-
- thumb_func_start sub_80A02FC
-sub_80A02FC: @ 80A02FC
- push {lr}
- movs r0, 0
- bl IsTextPrinterActive
- lsls r0, 16
- cmp r0, 0
- bne _080A0316
- movs r0, 0x16
- bl PlaySE
- ldr r1, =gUnknown_0203761C
- ldr r0, =sub_80A0324
- str r0, [r1]
-_080A0316:
- movs r0, 0
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80A02FC
-
- thumb_func_start sub_80A0324
-sub_80A0324: @ 80A0324
- push {lr}
- bl sub_80A0070
- lsls r0, 24
- cmp r0, 0
- beq _080A0338
- bl sub_80A0024
- movs r0, 0x3
- b _080A033A
-_080A0338:
- movs r0, 0
-_080A033A:
- pop {r1}
- bx r1
- thumb_func_end sub_80A0324
-
- thumb_func_start sub_80A0340
-sub_80A0340: @ 80A0340
- ldr r1, =gUnknown_0203761C
- ldr r0, =sub_80A035C
- str r0, [r1]
- ldr r1, =gUnknown_02037621
- movs r0, 0
- strb r0, [r1]
- bx lr
- .pool
- thumb_func_end sub_80A0340
-
- thumb_func_start sub_80A035C
-sub_80A035C: @ 80A035C
- push {lr}
- bl GetStartMenuWindowId
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0
- bl sub_819746C
- bl remove_start_menu_window_maybe
- ldr r0, =BattleFrontier_BattlePyramidEmptySquare_Text_252CFB
- ldr r1, =sub_80A0388
- bl sub_809FF98
- movs r0, 0
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80A035C
-
- thumb_func_start sub_80A0388
-sub_80A0388: @ 80A0388
- push {lr}
- movs r0, 0x1
- bl sub_8197948
- ldr r1, =gUnknown_0203761C
- ldr r0, =sub_80A03A4
- str r0, [r1]
- movs r0, 0
- pop {r1}
- bx r1
- .pool
- thumb_func_end sub_80A0388
-
- thumb_func_start sub_80A03A4
-sub_80A03A4: @ 80A03A4
- push {lr}
- bl ProcessMenuInputNoWrap_
- lsls r0, 24
- asrs r1, r0, 24
- cmp r1, 0
- beq _080A03C6
- cmp r1, 0
- bgt _080A03C0
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _080A03CA
- b _080A03D2
-_080A03C0:
- cmp r1, 0x1
- beq _080A03CA
- b _080A03D2
-_080A03C6:
- movs r0, 0x2
- b _080A03D4
-_080A03CA:
- bl sub_80A0014
- movs r0, 0x1
- b _080A03D4
-_080A03D2:
- movs r0, 0
-_080A03D4:
- pop {r1}
- bx r1
- thumb_func_end sub_80A03A4
-
- thumb_func_start sub_80A03D8
-sub_80A03D8: @ 80A03D8
- push {lr}
- bl TransferPlttBuffer
- pop {r0}
- bx r0
- thumb_func_end sub_80A03D8
-
- thumb_func_start sub_80A03E4
-sub_80A03E4: @ 80A03E4
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- mov r8, r0
- ldrb r0, [r0]
- cmp r0, 0x4
- bls _080A03F6
- b _080A04FC
-_080A03F6:
- lsls r0, 2
- ldr r1, =_080A0404
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_080A0404:
- .4byte _080A0418
- .4byte _080A0490
- .4byte _080A04A2
- .4byte _080A04D4
- .4byte _080A04F8
-_080A0418:
- movs r0, 0
- movs r1, 0
- bl SetGpuReg
- movs r0, 0
- bl SetVBlankCallback
- bl ScanlineEffect_Stop
- movs r2, 0xA0
- lsls r2, 19
- mov r1, sp
- movs r0, 0
- strh r0, [r1]
- ldr r1, =0x040000d4
- mov r0, sp
- str r0, [r1]
- str r2, [r1, 0x4]
- ldr r0, =0x81000200
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- movs r2, 0xC0
- lsls r2, 19
- movs r3, 0xC0
- lsls r3, 9
- mov r4, sp
- movs r6, 0
- movs r5, 0x80
- lsls r5, 5
- ldr r7, =0x81000800
- movs r0, 0x81
- lsls r0, 24
- mov r12, r0
-_080A045A:
- strh r6, [r4]
- mov r0, sp
- str r0, [r1]
- str r2, [r1, 0x4]
- str r7, [r1, 0x8]
- ldr r0, [r1, 0x8]
- adds r2, r5
- subs r3, r5
- cmp r3, r5
- bhi _080A045A
- strh r6, [r4]
- mov r0, sp
- str r0, [r1]
- str r2, [r1, 0x4]
- lsrs r0, r3, 1
- mov r2, r12
- orrs r0, r2
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- b _080A04FC
- .pool
-_080A0490:
- bl ResetSpriteData
- bl ResetTasks
- bl ResetPaletteFade
- bl ScanlineEffect_Clear
- b _080A04FC
-_080A04A2:
- movs r0, 0
- bl ResetBgsAndClearDma3BusyFlags
- ldr r1, =gUnknown_085105A8
- movs r0, 0
- movs r2, 0x1
- bl InitBgsFromTemplates
- ldr r0, =gUnknown_085105AC
- bl InitWindows
- movs r0, 0
- movs r1, 0x8
- movs r2, 0xE0
- bl box_border_load_tiles_and_pal
- movs r0, 0xF0
- bl sub_81978B0
- b _080A04FC
- .pool
-_080A04D4:
- movs r0, 0
- bl ShowBg
- movs r0, 0x1
- negs r0, r0
- movs r1, 0x10
- movs r2, 0
- bl BlendPalettes
- ldr r0, =sub_80A03D8
- bl SetVBlankCallback
- movs r0, 0x1
- bl EnableInterrupts
- b _080A04FC
- .pool
-_080A04F8:
- movs r0, 0x1
- b _080A0506
-_080A04FC:
- mov r1, r8
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- movs r0, 0
-_080A0506:
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_80A03E4
-
- thumb_func_start sub_80A0514
-sub_80A0514: @ 80A0514
- push {lr}
- ldr r0, =gUnknown_030026F8
- bl sub_80A03E4
- cmp r0, 0
- beq _080A052E
- ldr r0, =sub_80A0550
- movs r1, 0x50
- bl CreateTask
- ldr r0, =sub_80A0540
- bl SetMainCallback2
-_080A052E:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80A0514
-
- thumb_func_start sub_80A0540
-sub_80A0540: @ 80A0540
- push {lr}
- bl RunTasks
- bl UpdatePaletteFade
- pop {r0}
- bx r0
- thumb_func_end sub_80A0540
-
- thumb_func_start sub_80A0550
-sub_80A0550: @ 80A0550
- push {r4-r6,lr}
- sub sp, 0x10
- 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, =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _080A0570
- b _080A06A8
-_080A0570:
- movs r1, 0
- ldrsh r0, [r5, r1]
- cmp r0, 0x6
- bls _080A057A
- b _080A06A8
-_080A057A:
- lsls r0, 2
- ldr r1, =_080A0590
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .pool
- .align 2, 0
-_080A0590:
- .4byte _080A05AC
- .4byte _080A0630
- .4byte _080A063C
- .4byte _080A065C
- .4byte _080A0670
- .4byte _080A0688
- .4byte _080A0698
-_080A05AC:
- movs r0, 0
- movs r1, 0x11
- bl FillWindowPixelBuffer
- ldr r2, =gText_SavingDontTurnOffPower
- movs r4, 0
- str r4, [sp]
- movs r0, 0x2
- str r0, [sp, 0x4]
- movs r6, 0x1
- str r6, [sp, 0x8]
- movs r0, 0x3
- str r0, [sp, 0xC]
- movs r0, 0
- movs r1, 0x1
- movs r3, 0xFF
- bl AddTextPrinterParameterized
- movs r0, 0
- movs r1, 0x8
- movs r2, 0xE
- bl sub_8098858
- movs r0, 0
- bl PutWindowTilemap
- movs r0, 0
- movs r1, 0x3
- bl CopyWindowToVram
- movs r0, 0x1
- negs r0, r0
- str r4, [sp]
- movs r1, 0
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- ldr r0, =gLinkVSyncDisabled
- ldrb r0, [r0]
- cmp r0, 0
- beq _080A0620
- bl InUnionRoom
- cmp r0, 0
- beq _080A0620
- bl sub_800A07C
- cmp r0, 0
- beq _080A061C
- strh r6, [r5]
- b _080A06A8
- .pool
-_080A061C:
- movs r0, 0x5
- b _080A06A6
-_080A0620:
- ldr r0, =gSoftResetDisabled
- movs r1, 0x1
- strb r1, [r0]
- movs r0, 0x1
- b _080A06A6
- .pool
-_080A0630:
- bl sub_8076D5C
- bl sub_8153430
- movs r0, 0x2
- b _080A06A6
-_080A063C:
- bl sub_8153474
- lsls r0, 24
- cmp r0, 0
- beq _080A06A8
- bl sav2_gender2_inplace_and_xFE
- movs r0, 0x3
- strh r0, [r5]
- ldr r1, =gSoftResetDisabled
- movs r0, 0
- strb r0, [r1]
- b _080A06A8
- .pool
-_080A065C:
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- movs r0, 0x4
- b _080A06A6
-_080A0670:
- bl FreeAllWindowBuffers
- ldr r0, =gMain
- ldr r0, [r0, 0x8]
- bl SetMainCallback2
- adds r0, r4, 0
- bl DestroyTask
- b _080A06A8
- .pool
-_080A0688:
- ldr r0, =sub_8153688
- movs r1, 0x5
- bl CreateTask
- movs r0, 0x6
- b _080A06A6
- .pool
-_080A0698:
- ldr r0, =sub_8153688
- bl FuncIsActiveTask
- lsls r0, 24
- cmp r0, 0
- bne _080A06A8
- movs r0, 0x3
-_080A06A6:
- strh r0, [r5]
-_080A06A8:
- add sp, 0x10
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80A0550
-
- thumb_func_start sub_80A06B4
-sub_80A06B4: @ 80A06B4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x14
- ldr r0, =gUnknown_085105BC
- ldr r1, [r0, 0x4]
- ldr r0, [r0]
- str r0, [sp, 0xC]
- str r1, [sp, 0x10]
- ldr r0, =0x00000861
- mov r10, r0
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- bne _080A06EC
- add r0, sp, 0xC
- ldrb r1, [r0, 0x4]
- subs r1, 0x2
- lsls r1, 24
- lsrs r1, 24
- ldr r2, =0xffffff00
- ldr r0, [sp, 0x10]
- ands r0, r2
- orrs r0, r1
- str r0, [sp, 0x10]
-_080A06EC:
- ldr r6, =gUnknown_02037622
- add r0, sp, 0xC
- bl AddWindow
- strb r0, [r6]
- ldrb r0, [r6]
- movs r1, 0
- bl NewMenuHelpers_DrawStdWindowFrame
- ldr r0, =gSaveBlock2Ptr
- ldr r0, [r0]
- ldrb r0, [r0, 0x8]
- movs r1, 0x4
- mov r9, r1
- cmp r0, 0
- bne _080A0710
- movs r0, 0x8
- mov r9, r0
-_080A0710:
- movs r4, 0x1
- ldr r5, =gStringVar4
- movs r0, 0x3
- adds r1, r5, 0
- movs r2, 0x6
- bl sub_819A344
- ldrb r0, [r6]
- str r4, [sp]
- movs r1, 0xFF
- mov r8, r1
- str r1, [sp, 0x4]
- movs r7, 0
- str r7, [sp, 0x8]
- movs r1, 0x1
- adds r2, r5, 0
- movs r3, 0
- bl PrintTextOnWindow
- movs r4, 0x11
- ldrb r0, [r6]
- ldr r2, =gText_SavingPlayer
- str r4, [sp]
- mov r1, r8
- str r1, [sp, 0x4]
- str r7, [sp, 0x8]
- movs r1, 0x1
- movs r3, 0
- bl PrintTextOnWindow
- movs r0, 0
- adds r1, r5, 0
- mov r2, r9
- bl sub_819A344
- movs r0, 0x1
- adds r1, r5, 0
- movs r2, 0x70
- bl GetStringRightAlignXOffset
- adds r2, r0, 0
- ldrb r0, [r6]
- lsls r2, 16
- lsrs r2, 16
- adds r1, r5, 0
- movs r3, 0x11
- bl sub_819A024
- movs r4, 0x21
- ldrb r0, [r6]
- ldr r2, =gText_SavingBadges
- str r4, [sp]
- mov r1, r8
- str r1, [sp, 0x4]
- str r7, [sp, 0x8]
- movs r1, 0x1
- movs r3, 0
- bl PrintTextOnWindow
- movs r0, 0x4
- adds r1, r5, 0
- mov r2, r9
- bl sub_819A344
- movs r0, 0x1
- adds r1, r5, 0
- movs r2, 0x70
- bl GetStringRightAlignXOffset
- adds r2, r0, 0
- ldrb r0, [r6]
- lsls r3, r2, 24
- lsrs r3, 24
- str r4, [sp]
- mov r1, r8
- str r1, [sp, 0x4]
- str r7, [sp, 0x8]
- movs r1, 0x1
- adds r2, r5, 0
- bl PrintTextOnWindow
- mov r0, r10
- bl FlagGet
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080A0802
- movs r4, 0x31
- ldrb r0, [r6]
- ldr r2, =gText_SavingPokedex
- str r4, [sp]
- mov r1, r8
- str r1, [sp, 0x4]
- str r7, [sp, 0x8]
- movs r1, 0x1
- movs r3, 0
- bl PrintTextOnWindow
- movs r0, 0x1
- adds r1, r5, 0
- mov r2, r9
- bl sub_819A344
- movs r0, 0x1
- adds r1, r5, 0
- movs r2, 0x70
- bl GetStringRightAlignXOffset
- adds r2, r0, 0
- ldrb r0, [r6]
- lsls r3, r2, 24
- lsrs r3, 24
- str r4, [sp]
- mov r1, r8
- str r1, [sp, 0x4]
- str r7, [sp, 0x8]
- movs r1, 0x1
- adds r2, r5, 0
- bl PrintTextOnWindow
-_080A0802:
- adds r4, 0x10
- ldrb r0, [r6]
- ldr r2, =gText_SavingTime
- lsls r4, 24
- lsrs r4, 24
- str r4, [sp]
- mov r1, r8
- str r1, [sp, 0x4]
- str r7, [sp, 0x8]
- movs r1, 0x1
- movs r3, 0
- bl PrintTextOnWindow
- movs r0, 0x2
- adds r1, r5, 0
- mov r2, r9
- bl sub_819A344
- movs r0, 0x1
- adds r1, r5, 0
- movs r2, 0x70
- bl GetStringRightAlignXOffset
- adds r2, r0, 0
- ldrb r0, [r6]
- lsls r3, r2, 24
- lsrs r3, 24
- str r4, [sp]
- mov r1, r8
- str r1, [sp, 0x4]
- str r7, [sp, 0x8]
- movs r1, 0x1
- adds r2, r5, 0
- bl PrintTextOnWindow
- ldrb r0, [r6]
- movs r1, 0x2
- bl CopyWindowToVram
- add sp, 0x14
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80A06B4
-
- thumb_func_start sub_80A0888
-sub_80A0888: @ 80A0888
- push {r4,lr}
- ldr r4, =gUnknown_02037622
- ldrb r0, [r4]
- movs r1, 0
- bl sub_819746C
- ldrb r0, [r4]
- bl RemoveWindow
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80A0888
-
- thumb_func_start sub_80A08A4
-sub_80A08A4: @ 80A08A4
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, =sub_8153688
- bl FuncIsActiveTask
- lsls r0, 24
- cmp r0, 0
- bne _080A08C0
- adds r0, r4, 0
- bl DestroyTask
- bl EnableBothScriptContexts
-_080A08C0:
- pop {r4}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80A08A4
-
- thumb_func_start sub_80A08CC
-sub_80A08CC: @ 80A08CC
- push {r4,r5,lr}
- ldr r0, =sub_8153688
- movs r1, 0x5
- bl CreateTask
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r5, =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r5
- movs r1, 0x1
- strh r1, [r0, 0xC]
- ldr r0, =sub_80A08A4
- movs r1, 0x6
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r5
- strh r4, [r1, 0xA]
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_80A08CC
-
- thumb_func_start sub_80A0914
-sub_80A0914: @ 80A0914
- push {lr}
- bl GetStartMenuWindowId
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x1
- bl sub_819746C
- bl remove_start_menu_window_maybe
- bl sub_80984F4
- bl ScriptContext2_Disable
- pop {r0}
- bx r0
- thumb_func_end sub_80A0914
-
- thumb_func_start sub_80A0934
-sub_80A0934: @ 80A0934
- push {lr}
- movs r0, 0x5
- bl PlaySE
- bl sub_80A0914
- pop {r0}
- bx r0
- thumb_func_end sub_80A0934
-
- thumb_func_start AppendToList
-AppendToList: @ 80A0944
- ldrb r3, [r1]
- adds r0, r3
- strb r2, [r0]
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- bx lr
- thumb_func_end AppendToList
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/trade.s b/asm/trade.s
index 28cfaeb72..b96fb8ca9 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
@@ -246,7 +246,7 @@ _08077310:
movs r1, 0x1
movs r2, 0xE0
bl sub_809882C
- bl sub_80D2F04
+ bl LoadMonIconPalettes
ldr r2, =gUnknown_0203229C
ldr r0, [r2]
adds r0, 0x69
@@ -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
@@ -10669,7 +10669,7 @@ _0807CF5C:
bl Free
str r4, [r7]
_0807CFAA:
- ldr r0, =c2_exit_to_overworld_2_switch
+ ldr r0, =CB2_ReturnToField
bl SetMainCallback2
bl sub_807E784
_0807CFB4:
@@ -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
@@ -12774,7 +12774,7 @@ _0807E3A8:
bl Free
str r4, [r7]
_0807E3F6:
- ldr r0, =c2_exit_to_overworld_2_switch
+ ldr r0, =CB2_ReturnToField
bl SetMainCallback2
bl sub_807E784
_0807E400:
@@ -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/trader.s b/asm/trader.s
deleted file mode 100644
index a43f59402..000000000
--- a/asm/trader.s
+++ /dev/null
@@ -1,558 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_81339F8
-sub_81339F8: @ 81339F8
- push {r4-r6,lr}
- ldr r0, =gSaveBlock1Ptr
- ldr r1, [r0]
- ldr r0, =0x00002e28
- adds r5, r1, r0
- movs r2, 0
- movs r0, 0x2
- strb r0, [r5]
- ldr r0, =0x00002e59
- adds r1, r0
- strb r2, [r1]
- movs r4, 0
- ldr r6, =gUnknown_085B09E4
-_08133A12:
- movs r0, 0xB
- muls r0, r4
- adds r0, 0x5
- adds r0, r5, r0
- lsls r1, r4, 2
- adds r1, r6
- ldr r1, [r1]
- bl StringCopy
- adds r1, r5, 0x1
- adds r1, r4
- ldr r0, =gUnknown_085B09F4
- adds r0, r4, r0
- ldrb r0, [r0]
- strb r0, [r1]
- adds r0, r5, 0
- adds r0, 0x32
- adds r0, r4
- movs r1, 0x2
- strb r1, [r0]
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x3
- bls _08133A12
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81339F8
-
- thumb_func_start sub_8133A60
-sub_8133A60: @ 8133A60
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r1, =0x00002e59
- adds r0, r1
- movs r1, 0
- strb r1, [r0]
- bx lr
- .pool
- thumb_func_end sub_8133A60
-
- thumb_func_start sub_8133A78
-sub_8133A78: @ 8133A78
- 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 r1, 3
- ldr r0, =gTasks + 0x8
- adds r7, r1, r0
- ldr r0, =gSaveBlock1Ptr
- ldr r4, [r0]
- ldr r0, =0x00002e28
- adds r0, r4
- mov r9, r0
- ldr r0, =gUnknown_085B09F8
- ldr r1, [r0, 0x4]
- ldr r0, [r0]
- str r0, [sp, 0xC]
- str r1, [sp, 0x10]
- ldr r1, =gText_Exit
- movs r0, 0x1
- movs r2, 0
- bl GetStringWidth
- adds r6, r0, 0
- ldr r1, =gText_FiveMarks
- movs r0, 0x1
- movs r2, 0
- bl GetStringWidth
- mov r8, r0
- movs r5, 0
- ldr r0, =0x00002e29
- adds r4, r0
-_08133AC2:
- mov r0, r9
- adds r0, 0x1
- adds r1, r0, r5
- ldrb r0, [r1]
- cmp r0, 0x78
- bls _08133AF0
- mov r0, r8
- b _08133B00
- .pool
-_08133AF0:
- ldrb r1, [r1]
- lsls r1, 5
- ldr r0, =gDecorations + 1
- adds r1, r0
- movs r0, 0x1
- movs r2, 0
- bl GetStringWidth
-_08133B00:
- cmp r0, r6
- ble _08133B06
- adds r6, r0, 0
-_08133B06:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x3
- bls _08133AC2
- adds r0, r6, 0
- bl convert_pixel_width_to_tile_width
- lsls r0, 24
- ldr r2, =0x00ffffff
- ldr r1, [sp, 0xC]
- ands r1, r2
- orrs r1, r0
- str r1, [sp, 0xC]
- add r0, sp, 0xC
- bl AddWindow
- strh r0, [r7, 0x6]
- lsls r0, 24
- lsrs r0, 24
- movs r2, 0x85
- lsls r2, 2
- movs r1, 0
- movs r3, 0xE
- bl SetWindowBorderStyle
- movs r5, 0
-_08133B3C:
- adds r1, r4, r5
- ldrb r0, [r1]
- cmp r0, 0x78
- bls _08133B70
- ldrb r0, [r7, 0x6]
- lsls r1, r5, 4
- adds r1, 0x1
- lsls r1, 24
- lsrs r1, 24
- str r1, [sp]
- movs r1, 0xFF
- str r1, [sp, 0x4]
- movs r1, 0
- str r1, [sp, 0x8]
- movs r1, 0x1
- ldr r2, =gText_FiveMarks
- movs r3, 0x8
- bl PrintTextOnWindow
- b _08133B94
- .pool
-_08133B70:
- ldrb r0, [r7, 0x6]
- ldrb r2, [r1]
- lsls r2, 5
- ldr r1, =gDecorations + 1
- adds r2, r1
- lsls r1, r5, 4
- adds r1, 0x1
- lsls r1, 24
- lsrs r1, 24
- str r1, [sp]
- movs r1, 0xFF
- str r1, [sp, 0x4]
- movs r1, 0
- str r1, [sp, 0x8]
- movs r1, 0x1
- movs r3, 0x8
- bl PrintTextOnWindow
-_08133B94:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x3
- bls _08133B3C
- ldrb r0, [r7, 0x6]
- ldr r2, =gText_Exit
- lsls r1, r5, 4
- adds r1, 0x1
- lsls r1, 24
- lsrs r1, 24
- str r1, [sp]
- movs r1, 0xFF
- str r1, [sp, 0x4]
- movs r1, 0
- str r1, [sp, 0x8]
- movs r1, 0x1
- movs r3, 0x8
- bl PrintTextOnWindow
- ldrb r0, [r7, 0x6]
- movs r1, 0x5
- movs r2, 0
- bl InitMenuInUpperLeftCornerPlaySoundWhenAPressed
- movs r0, 0
- bl schedule_bg_copy_tilemap_to_vram
- add sp, 0x14
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8133A78
-
- thumb_func_start sub_8133BE4
-sub_8133BE4: @ 8133BE4
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r1, 24
- lsrs r2, r1, 24
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- ldr r1, =gTasks + 0x8
- adds r4, r0, r1
- cmp r2, 0x78
- bls _08133C14
- ldr r1, =gSpecialVar_0x8004
- ldr r2, =0x0000ffff
- adds r0, r2, 0
- strh r0, [r1]
- b _08133C18
- .pool
-_08133C14:
- ldr r0, =gSpecialVar_0x8004
- strh r2, [r0]
-_08133C18:
- ldrb r0, [r4, 0x6]
- movs r1, 0
- bl sub_8198070
- ldrb r0, [r4, 0x6]
- bl ClearWindowTilemap
- ldrb r0, [r4, 0x6]
- bl RemoveWindow
- movs r0, 0
- bl schedule_bg_copy_tilemap_to_vram
- adds r0, r5, 0
- bl DestroyTask
- bl EnableBothScriptContexts
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8133BE4
-
- thumb_func_start sub_8133C48
-sub_8133C48: @ 8133C48
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r1, =0x00002e28
- adds r6, r0, r1
- bl ProcessMenuInput
- lsls r0, 24
- lsrs r4, r0, 24
- asrs r1, r0, 24
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _08133C80
- cmp r1, r0
- bgt _08133C7C
- subs r0, 0x1
- cmp r1, r0
- beq _08133CCA
- b _08133C90
- .pool
-_08133C7C:
- cmp r1, 0x4
- bne _08133C90
-_08133C80:
- movs r0, 0x5
- bl PlaySE
- adds r0, r7, 0
- movs r1, 0
- bl sub_8133BE4
- b _08133CCA
-_08133C90:
- movs r0, 0x5
- bl PlaySE
- ldr r0, =gSpecialVar_0x8005
- lsls r4, 24
- asrs r4, 24
- strh r4, [r0]
- ldr r5, =gStringVar1
- movs r0, 0xB
- adds r1, r4, 0
- muls r1, r0
- adds r1, 0x5
- adds r1, r6, r1
- adds r0, r5, 0
- bl StringCopy
- adds r0, r6, 0
- adds r0, 0x32
- adds r0, r4
- ldrb r1, [r0]
- adds r0, r5, 0
- bl ConvertInternationalString
- adds r0, r6, 0x1
- adds r0, r4
- ldrb r1, [r0]
- adds r0, r7, 0
- bl sub_8133BE4
-_08133CCA:
- pop {r4-r7}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8133C48
-
- thumb_func_start sub_8133CD8
-sub_8133CD8: @ 8133CD8
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldr r1, =gSpecialVar_Result
- ldr r2, =0x00002e59
- adds r0, r2
- ldrb r0, [r0]
- strh r0, [r1]
- bx lr
- .pool
- thumb_func_end sub_8133CD8
-
- thumb_func_start sub_8133CF4
-sub_8133CF4: @ 8133CF4
- push {r4,r5,lr}
- movs r4, 0
- ldr r5, =gSpecialVar_Result
-_08133CFA:
- adds r0, r4, 0
- bl CountDecorationCategoryN
- lsls r0, 24
- cmp r0, 0
- beq _08133D10
- movs r0, 0
- strh r0, [r5]
- b _08133D20
- .pool
-_08133D10:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x7
- bls _08133CFA
- ldr r1, =gSpecialVar_Result
- movs r0, 0x1
- strh r0, [r1]
-_08133D20:
- pop {r4,r5}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8133CF4
-
- thumb_func_start sub_8133D2C
-sub_8133D2C: @ 8133D2C
- push {r4-r6,lr}
- ldr r6, =gSpecialVar_Result
- movs r0, 0
- strh r0, [r6]
- ldr r4, =gDecorations
- ldr r5, =gSpecialVar_0x8004
- ldrh r0, [r5]
- lsls r0, 5
- adds r2, r0, r4
- ldr r0, =gSpecialVar_0x8006
- ldrh r0, [r0]
- lsls r0, 5
- adds r0, r4
- ldrb r1, [r2, 0x13]
- ldrb r0, [r0, 0x13]
- cmp r1, r0
- beq _08133D72
- adds r0, r1, 0
- bl GetFirstEmptyDecorSlot
- lsls r0, 24
- asrs r0, 24
- movs r1, 0x1
- negs r1, r1
- cmp r0, r1
- bne _08133D72
- ldr r0, =gStringVar2
- ldrh r1, [r5]
- lsls r1, 5
- adds r1, r4
- ldrb r1, [r1, 0x13]
- bl sub_8127250
- movs r0, 0x1
- strh r0, [r6]
-_08133D72:
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8133D2C
-
- thumb_func_start sub_8133D8C
-sub_8133D8C: @ 8133D8C
- push {lr}
- ldr r0, =sub_8127208
- movs r1, 0
- bl CreateTask
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8133D8C
-
- thumb_func_start sub_8133DA0
-sub_8133DA0: @ 8133DA0
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- bl IsSelectedDecorInThePC
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08133DFC
- ldr r5, =gSpecialVar_0x8006
- ldr r0, =gCurDecorationIndex
- ldrb r1, [r0]
- ldr r0, =gCurDecorInventoryItems
- ldr r0, [r0]
- adds r0, r1
- ldrb r0, [r0]
- strh r0, [r5]
- ldr r0, =gStringVar3
- ldr r1, =gSpecialVar_0x8004
- ldrh r1, [r1]
- lsls r1, 5
- ldr r4, =gDecorations + 1
- adds r1, r4
- bl StringCopy
- ldr r0, =gStringVar2
- ldrh r1, [r5]
- lsls r1, 5
- adds r1, r4
- bl StringCopy
- b _08133E04
- .pool
-_08133DFC:
- ldr r1, =gSpecialVar_0x8006
- ldr r2, =0x0000ffff
- adds r0, r2, 0
- strh r0, [r1]
-_08133E04:
- adds r0, r6, 0
- bl DestroyTask
- bl EnableBothScriptContexts
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8133DA0
-
- thumb_func_start sub_8133E1C
-sub_8133E1C: @ 8133E1C
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, =gSpecialVar_0x8006
- movs r1, 0
- strh r1, [r2]
- bl DestroyTask
- bl EnableBothScriptContexts
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8133E1C
-
- thumb_func_start sub_8133E38
-sub_8133E38: @ 8133E38
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- ldr r0, =gSaveBlock1Ptr
- ldr r6, [r0]
- ldr r0, =0x00002e28
- adds r5, r6, r0
- ldr r1, =gSpecialVar_0x8006
- mov r8, r1
- ldrb r0, [r1]
- bl DecorationRemove
- ldr r0, =gSpecialVar_0x8004
- ldrb r0, [r0]
- bl DecorationAdd
- ldr r4, =gSpecialVar_0x8005
- ldrh r1, [r4]
- movs r0, 0xB
- muls r0, r1
- adds r0, 0x5
- adds r5, r0
- ldr r0, =gSaveBlock2Ptr
- ldr r1, [r0]
- adds r0, r5, 0
- bl StringCopy
- ldr r2, =0x00002e29
- adds r0, r6, r2
- ldrh r1, [r4]
- adds r0, r1
- mov r2, r8
- ldrh r1, [r2]
- strb r1, [r0]
- ldr r1, =0x00002e5a
- adds r0, r6, r1
- ldrh r4, [r4]
- adds r0, r4
- movs r1, 0x2
- strb r1, [r0]
- ldr r2, =0x00002e59
- adds r6, r2
- movs r0, 0x1
- strb r0, [r6]
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8133E38
-
- thumb_func_start sub_8133EC0
-sub_8133EC0: @ 8133EC0
- push {lr}
- ldr r0, =sub_8133C48
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- bl sub_8133A78
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_8133EC0
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/trainer_card.s b/asm/trainer_card.s
index 4ccd04e98..6d1be17cb 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
@@ -1925,11 +1925,11 @@ sub_80C376C: @ 80C376C
cmp r0, 0
bne _080C377E
movs r0, 0x1
- bl sub_80C0844
+ bl GetHoennPokedexCount
b _080C3784
_080C377E:
movs r0, 0x1
- bl pokedex_count
+ bl GetNationalPokedexCount
_080C3784:
lsls r0, 16
lsrs r0, 16
@@ -3894,7 +3894,7 @@ _080C48F6:
sub_80C4904: @ 80C4904
lsls r0, 24
lsrs r0, 24
- ldr r2, =gUnknown_02039B58
+ ldr r2, =gTrainerCards
movs r1, 0x64
muls r0, r1
adds r0, r2
@@ -4578,7 +4578,7 @@ sub_80C4E74: @ 80C4E74
ldr r0, [r5]
ldr r1, =0x00000534
adds r0, r1
- ldr r2, =gUnknown_02039B58
+ ldr r2, =gTrainerCards
movs r1, 0x64
muls r1, r4
adds r1, r2
@@ -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/asm/trainer_rematch.s b/asm/trainer_rematch.s
deleted file mode 100644
index 1c874f28f..000000000
--- a/asm/trainer_rematch.s
+++ /dev/null
@@ -1,206 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_81DA57C
-sub_81DA57C: @ 81DA57C
- push {lr}
- ldr r0, =0x00000864
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- beq _081DA5CA
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x64
- bl __umodsi3
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x1E
- bhi _081DA5CA
- movs r0, 0x5B
- bl FlagGet
- lsls r0, 24
- cmp r0, 0
- beq _081DA5C0
- ldr r0, =gUnknown_0862AD34
- movs r1, 0x8
- movs r2, 0x5
- bl sub_81DA5D4
- b _081DA5CA
- .pool
-_081DA5C0:
- ldr r0, =gUnknown_0862AD44
- movs r1, 0x7
- movs r2, 0x1
- bl sub_81DA5D4
-_081DA5CA:
- pop {r0}
- bx r0
- .pool
- thumb_func_end sub_81DA57C
-
- thumb_func_start sub_81DA5D4
-sub_81DA5D4: @ 81DA5D4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- mov r9, r0
- adds r7, r1, 0
- mov r10, r2
- movs r6, 0
- movs r0, 0x5
- mov r8, r0
- movs r5, 0
- cmp r5, r7
- bcs _081DA61C
- mov r4, r9
-_081DA5F4:
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldrh r1, [r4]
- ldr r2, =0x000009ca
- adds r0, r2
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _081DA614
- adds r0, r1, 0
- bl sub_81DA6CC
- cmp r8, r0
- ble _081DA612
- mov r8, r0
-_081DA612:
- adds r6, 0x1
-_081DA614:
- adds r4, 0x2
- adds r5, 0x1
- cmp r5, r7
- bcc _081DA5F4
-_081DA61C:
- cmp r6, 0
- beq _081DA6BA
- cmp r8, r10
- bhi _081DA6BA
- movs r6, 0
- movs r5, 0
- cmp r5, r7
- bcs _081DA654
- mov r4, r9
-_081DA62E:
- ldr r0, =gSaveBlock1Ptr
- ldr r0, [r0]
- ldrh r1, [r4]
- ldr r2, =0x000009ca
- adds r0, r2
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _081DA64C
- adds r0, r1, 0
- bl sub_81DA6CC
- cmp r0, r8
- bne _081DA64C
- adds r6, 0x1
-_081DA64C:
- adds r4, 0x2
- adds r5, 0x1
- cmp r5, r7
- bcc _081DA62E
-_081DA654:
- cmp r6, 0
- beq _081DA6BA
- bl Random
- lsls r0, 16
- lsrs r0, 16
- adds r1, r6, 0
- bl __modsi3
- adds r6, r0, 0
- movs r5, 0
- cmp r5, r7
- bcs _081DA6BA
- ldr r2, =gSaveBlock1Ptr
- ldr r3, =0x000009ca
- mov r4, r9
-_081DA674:
- ldr r0, [r2]
- ldrh r1, [r4]
- adds r0, r3
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- bne _081DA6B2
- adds r0, r1, 0
- str r2, [sp]
- str r3, [sp, 0x4]
- bl sub_81DA6CC
- ldr r2, [sp]
- ldr r3, [sp, 0x4]
- cmp r0, r8
- bne _081DA6B2
- cmp r6, 0
- bne _081DA6B0
- ldr r0, [r2]
- adds r0, r3
- ldrh r4, [r4]
- adds r0, r4
- mov r1, r8
- strb r1, [r0]
- b _081DA6BA
- .pool
-_081DA6B0:
- subs r6, 0x1
-_081DA6B2:
- adds r4, 0x2
- adds r5, 0x1
- cmp r5, r7
- bcc _081DA674
-_081DA6BA:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_81DA5D4
-
- thumb_func_start sub_81DA6CC
-sub_81DA6CC: @ 81DA6CC
- push {r4-r6,lr}
- adds r5, r0, 0
- movs r4, 0
- ldr r6, =gRematchTable
-_081DA6D4:
- lsls r0, r4, 1
- lsls r1, r5, 4
- adds r0, r1
- adds r0, r6
- ldrh r0, [r0]
- bl HasTrainerBeenFought
- lsls r0, 24
- cmp r0, 0
- bne _081DA6F0
- adds r0, r4, 0
- b _081DA6F8
- .pool
-_081DA6F0:
- adds r4, 0x1
- cmp r4, 0x4
- ble _081DA6D4
- movs r0, 0x5
-_081DA6F8:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_81DA6CC
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/common_syms/field_camera.txt b/common_syms/field_camera.txt
new file mode 100644
index 000000000..615026aee
--- /dev/null
+++ b/common_syms/field_camera.txt
@@ -0,0 +1,3 @@
+gUnknown_03005DD0
+gUnknown_03005DE8
+gUnknown_03005DEC
diff --git a/common_syms/fieldmap.txt b/common_syms/fieldmap.txt
new file mode 100644
index 000000000..49e0fb980
--- /dev/null
+++ b/common_syms/fieldmap.txt
@@ -0,0 +1 @@
+gUnknown_03005DC0
diff --git a/common_syms/intro.txt b/common_syms/intro.txt
new file mode 100644
index 000000000..d069b1014
--- /dev/null
+++ b/common_syms/intro.txt
@@ -0,0 +1,2 @@
+gIntroFrameCounter
+gMultibootProgramStruct
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/list_menu.txt b/common_syms/list_menu.txt
new file mode 100644
index 000000000..a346edeef
--- /dev/null
+++ b/common_syms/list_menu.txt
@@ -0,0 +1,2 @@
+gUnknown_03006300
+gMultiuseListMenuTemplate
diff --git a/common_syms/load_save.txt b/common_syms/load_save.txt
new file mode 100644
index 000000000..2d3d9b802
--- /dev/null
+++ b/common_syms/load_save.txt
@@ -0,0 +1,4 @@
+gFlashMemoryPresent
+gSaveBlock1Ptr
+gSaveBlock2Ptr
+gPokemonStoragePtr
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/mauville_old_man.txt b/common_syms/mauville_old_man.txt
new file mode 100644
index 000000000..9d77b8692
--- /dev/null
+++ b/common_syms/mauville_old_man.txt
@@ -0,0 +1 @@
+gBardSong
diff --git a/common_syms/overworld.txt b/common_syms/overworld.txt
new file mode 100644
index 000000000..687b67545
--- /dev/null
+++ b/common_syms/overworld.txt
@@ -0,0 +1,5 @@
+gUnknown_03005DA8
+gFieldCallback
+gUnknown_03005DB0
+gUnknown_03005DB4
+gFieldLinkPlayerCount
diff --git a/common_syms/random.txt b/common_syms/random.txt
new file mode 100644
index 000000000..8037c6958
--- /dev/null
+++ b/common_syms/random.txt
@@ -0,0 +1,2 @@
+gRngValue
+gRng2Value
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_move_constants.inc b/constants/battle_move_constants.inc
deleted file mode 100644
index a05da3db3..000000000
--- a/constants/battle_move_constants.inc
+++ /dev/null
@@ -1,15 +0,0 @@
- .set TARGET_SELECTED_POKEMON, 0
-
- .set F_TARGET_SPECIAL, 1 << 0
- .set F_TARGET_RANDOM, 1 << 2
- .set F_TARGET_BOTH_ENEMIES, 1 << 3
- .set F_TARGET_USER, 1 << 4
- .set F_TARGET_ALL_EXCEPT_USER, 1 << 5
- .set F_TARGET_ENEMY_SIDE, 1 << 6
-
- .set F_MAKES_CONTACT, 1 << 0
- .set F_AFFECTED_BY_PROTECT, 1 << 1
- .set F_AFFECTED_BY_MAGIC_COAT, 1 << 2
- .set F_AFFECTED_BY_SNATCH, 1 << 3
- .set F_MIRROR_MOVE_COMPATIBLE, 1 << 4
- .set F_AFFECTED_BY_KINGS_ROCK, 1 << 5
diff --git a/constants/constants.inc b/constants/constants.inc
index 10d582eb1..5e133bba4 100644
--- a/constants/constants.inc
+++ b/constants/constants.inc
@@ -2,8 +2,6 @@
.include "constants/misc_constants.inc"
.include "constants/contest_constants.inc"
.include "constants/pokemon_data_constants.inc"
- .include "constants/item_data_constants.inc"
- .include "constants/battle_move_constants.inc"
.include "constants/battle_frontier_constants.inc"
.include "constants/map_constants.inc"
.include "constants/berry_constants.inc"
diff --git a/data/battle_ai_scripts.s b/data/battle_ai_scripts.s
index 430f9f403..1b4863046 100644
--- a/data/battle_ai_scripts.s
+++ b/data/battle_ai_scripts.s
@@ -50,48 +50,48 @@ AI_CheckBadMove:
if_move MOVE_FISSURE, BattleAIScript_82DBF92
if_move MOVE_HORN_DRILL, BattleAIScript_82DBF92
get_how_powerful_move_is
- if_equal 0, BattleAIScript_82DBFFE
+ if_equal 0, AI_CheckBadMove_CheckSoundproof
-BattleAIScript_82DBF92:
+BattleAIScript_82DBF92: @ 82DBF92
if_type_effectiveness AI_EFFECTIVENESS_x0, Score_Minus10
get_ability AI_TARGET
- if_equal ABILITY_VOLT_ABSORB, BattleAIScript_82DBFBD
- if_equal ABILITY_WATER_ABSORB, BattleAIScript_82DBFCA
- if_equal ABILITY_FLASH_FIRE, BattleAIScript_82DBFD7
- if_equal ABILITY_WONDER_GUARD, BattleAIScript_82DBFE4
- if_equal ABILITY_LEVITATE, BattleAIScript_82DBFEF
+ if_equal ABILITY_VOLT_ABSORB, CheckIfVoltAbsorbCancelsElectric
+ if_equal ABILITY_WATER_ABSORB, CheckIfWaterAbsorbCancelsWater
+ if_equal ABILITY_FLASH_FIRE, CheckIfFlashFireCancelsFire
+ if_equal ABILITY_WONDER_GUARD, CheckIfWonderGuardCancelsMove
+ if_equal ABILITY_LEVITATE, CheckIfLevitateCancelsGroundMove
goto BattleAIScript_82DBFF7
-BattleAIScript_82DBFBD:
+CheckIfVoltAbsorbCancelsElectric: @ 82DBFBD
get_curr_move_type
if_equal_ TYPE_ELECTRIC, Score_Minus12
goto BattleAIScript_82DBFF7
-BattleAIScript_82DBFCA:
+CheckIfWaterAbsorbCancelsWater: @ 82DBFCA
get_curr_move_type
if_equal_ TYPE_WATER, Score_Minus12
goto BattleAIScript_82DBFF7
-BattleAIScript_82DBFD7:
+CheckIfFlashFireCancelsFire: @ 82DBFD7
get_curr_move_type
if_equal_ TYPE_FIRE, Score_Minus12
goto BattleAIScript_82DBFF7
-BattleAIScript_82DBFE4:
+CheckIfWonderGuardCancelsMove: @ 82DBFE4
if_type_effectiveness AI_EFFECTIVENESS_x2, BattleAIScript_82DBFF7
goto Score_Minus10
-BattleAIScript_82DBFEF:
+CheckIfLevitateCancelsGroundMove: @ 82DBFEF
get_curr_move_type
if_equal_ TYPE_GROUND, Score_Minus10
-BattleAIScript_82DBFF7:
+BattleAIScript_82DBFF7: @ 82DBFF7
get_how_powerful_move_is
- if_equal 0, BattleAIScript_82DBFFE
+ if_equal 0, AI_CheckBadMove_CheckSoundproof
-BattleAIScript_82DBFFE:
+AI_CheckBadMove_CheckSoundproof: @ 82DBFFE
get_ability AI_TARGET
- if_not_equal ABILITY_SOUNDPROOF, BattleAIScript_82DC045
+ if_not_equal ABILITY_SOUNDPROOF, AI_CheckBadMove_CheckEffect
if_move MOVE_GROWL, Score_Minus10
if_move MOVE_ROAR, Score_Minus10
if_move MOVE_SING, Score_Minus10
@@ -102,119 +102,119 @@ BattleAIScript_82DBFFE:
if_move MOVE_METAL_SOUND, Score_Minus10
if_move MOVE_GRASS_WHISTLE, Score_Minus10
-BattleAIScript_82DC045:
- if_effect EFFECT_SLEEP, BattleAIScript_82DC2D4
- if_effect EFFECT_EXPLOSION, BattleAIScript_82DC2F7
- if_effect EFFECT_DREAM_EATER, BattleAIScript_82DC330
- if_effect EFFECT_ATTACK_UP, BattleAIScript_82DC348
- if_effect EFFECT_DEFENSE_UP, BattleAIScript_82DC351
- if_effect EFFECT_SPEED_UP, BattleAIScript_82DC35A
- if_effect EFFECT_SPECIAL_ATTACK_UP, BattleAIScript_82DC363
- if_effect EFFECT_SPECIAL_DEFENSE_UP, BattleAIScript_82DC36C
- if_effect EFFECT_ACCURACY_UP, BattleAIScript_82DC375
- if_effect EFFECT_EVASION_UP, BattleAIScript_82DC37E
- if_effect EFFECT_ATTACK_DOWN, BattleAIScript_82DC387
- if_effect EFFECT_DEFENSE_DOWN, BattleAIScript_82DC39C
- if_effect EFFECT_SPEED_DOWN, BattleAIScript_82DC3A9
- if_effect EFFECT_SPECIAL_ATTACK_DOWN, BattleAIScript_82DC3BF
- if_effect EFFECT_SPECIAL_DEFENSE_DOWN, BattleAIScript_82DC3CC
- if_effect EFFECT_ACCURACY_DOWN, BattleAIScript_82DC3D9
- if_effect EFFECT_EVASION_DOWN, BattleAIScript_82DC3EE
- if_effect EFFECT_HAZE, BattleAIScript_82DC405
- if_effect EFFECT_BIDE, BattleAIScript_82DC4ED
- if_effect EFFECT_ROAR, BattleAIScript_82DC47B
- if_effect EFFECT_TOXIC, BattleAIScript_82DC48C
- if_effect EFFECT_LIGHT_SCREEN, BattleAIScript_82DC4C5
- if_effect EFFECT_OHKO, BattleAIScript_82DC4D0
- if_effect EFFECT_RAZOR_WIND, BattleAIScript_82DC4ED
- if_effect EFFECT_SUPER_FANG, BattleAIScript_82DC4ED
- if_effect EFFECT_MIST, BattleAIScript_82DC507
- if_effect EFFECT_FOCUS_ENERGY, BattleAIScript_82DC512
- if_effect EFFECT_CONFUSE, BattleAIScript_82DC51D
- if_effect EFFECT_ATTACK_UP_2, BattleAIScript_82DC348
- if_effect EFFECT_DEFENSE_UP_2, BattleAIScript_82DC351
- if_effect EFFECT_SPEED_UP_2, BattleAIScript_82DC35A
- if_effect EFFECT_SPECIAL_ATTACK_UP_2, BattleAIScript_82DC363
- if_effect EFFECT_SPECIAL_DEFENSE_UP_2, BattleAIScript_82DC36C
- if_effect EFFECT_ACCURACY_UP_2, BattleAIScript_82DC375
- if_effect EFFECT_EVASION_UP_2, BattleAIScript_82DC37E
- if_effect EFFECT_ATTACK_DOWN_2, BattleAIScript_82DC387
- if_effect EFFECT_DEFENSE_DOWN_2, BattleAIScript_82DC39C
- if_effect EFFECT_SPEED_DOWN_2, BattleAIScript_82DC3A9
- if_effect EFFECT_SPECIAL_ATTACK_DOWN_2, BattleAIScript_82DC3BF
- if_effect EFFECT_SPECIAL_DEFENSE_DOWN_2, BattleAIScript_82DC3CC
- if_effect EFFECT_ACCURACY_DOWN_2, BattleAIScript_82DC3D9
- if_effect EFFECT_EVASION_DOWN_2, BattleAIScript_82DC3EE
- if_effect EFFECT_REFLECT, BattleAIScript_82DC53A
- if_effect EFFECT_POISON, BattleAIScript_82DC48C
- if_effect EFFECT_PARALYZE, BattleAIScript_82DC545
- if_effect EFFECT_SUBSTITUTE, BattleAIScript_82DC568
- if_effect EFFECT_RECHARGE, BattleAIScript_82DC4ED
- if_effect EFFECT_LEECH_SEED, BattleAIScript_82DC57A
- if_effect EFFECT_DISABLE, BattleAIScript_82DC595
- if_effect EFFECT_LEVEL_DAMAGE, BattleAIScript_82DC4ED
- if_effect EFFECT_PSYWAVE, BattleAIScript_82DC4ED
- if_effect EFFECT_COUNTER, BattleAIScript_82DC4ED
- if_effect EFFECT_ENCORE, BattleAIScript_82DC59D
- if_effect EFFECT_SNORE, BattleAIScript_82DC5A5
- if_effect EFFECT_SLEEP_TALK, BattleAIScript_82DC5A5
- if_effect EFFECT_FLAIL, BattleAIScript_82DC4ED
- if_effect EFFECT_MEAN_LOOK, BattleAIScript_82DC5B0
- if_effect EFFECT_NIGHTMARE, BattleAIScript_82DC31B
- if_effect EFFECT_MINIMIZE, BattleAIScript_82DC37E
- if_effect EFFECT_CURSE, BattleAIScript_82DC5BB
- if_effect EFFECT_SPIKES, BattleAIScript_82DC5CC
- if_effect EFFECT_FORESIGHT, BattleAIScript_82DC5D7
- if_effect EFFECT_PERISH_SONG, BattleAIScript_82DC5E2
- if_effect EFFECT_SANDSTORM, BattleAIScript_82DC5ED
- if_effect EFFECT_SWAGGER, BattleAIScript_82DC51D
- if_effect EFFECT_ATTRACT, BattleAIScript_82DC5F5
- if_effect EFFECT_RETURN, BattleAIScript_82DC4ED
- if_effect EFFECT_PRESENT, BattleAIScript_82DC4ED
- if_effect EFFECT_FRUSTRATION, BattleAIScript_82DC4ED
- if_effect EFFECT_SAFEGUARD, BattleAIScript_82DC635
- if_effect EFFECT_MAGNITUDE, BattleAIScript_82DC4E5
- if_effect EFFECT_BATON_PASS, BattleAIScript_82DC650
- if_effect EFFECT_SONICBOOM, BattleAIScript_82DC4ED
- if_effect EFFECT_RAIN_DANCE, BattleAIScript_82DC659
- if_effect EFFECT_SUNNY_DAY, BattleAIScript_82DC661
- if_effect EFFECT_BELLY_DRUM, BattleAIScript_82DC341
- if_effect EFFECT_PSYCH_UP, BattleAIScript_82DC405
- if_effect EFFECT_MIRROR_COAT, BattleAIScript_82DC4ED
- if_effect EFFECT_SKULL_BASH, BattleAIScript_82DC4ED
- if_effect EFFECT_FUTURE_SIGHT, BattleAIScript_82DC669
+AI_CheckBadMove_CheckEffect: @ 82DC045
+ if_effect EFFECT_SLEEP, AI_CBM_Sleep
+ if_effect EFFECT_EXPLOSION, AI_CBM_Explosion
+ if_effect EFFECT_DREAM_EATER, AI_CBM_DreamEater
+ if_effect EFFECT_ATTACK_UP, AI_CBM_AttackUp
+ if_effect EFFECT_DEFENSE_UP, AI_CBM_DefenseUp
+ if_effect EFFECT_SPEED_UP, AI_CBM_SpeedUp
+ if_effect EFFECT_SPECIAL_ATTACK_UP, AI_CBM_SpAtkUp
+ if_effect EFFECT_SPECIAL_DEFENSE_UP, AI_CBM_SpDefUp
+ if_effect EFFECT_ACCURACY_UP, AI_CBM_AccUp
+ if_effect EFFECT_EVASION_UP, AI_CBM_EvasionUp
+ if_effect EFFECT_ATTACK_DOWN, AI_CBM_AttackDown
+ if_effect EFFECT_DEFENSE_DOWN, AI_CBM_DefenseDown
+ if_effect EFFECT_SPEED_DOWN, AI_CBM_SpeedDown
+ if_effect EFFECT_SPECIAL_ATTACK_DOWN, AI_CBM_SpAtkDown
+ if_effect EFFECT_SPECIAL_DEFENSE_DOWN, AI_CBM_SpDefDown
+ if_effect EFFECT_ACCURACY_DOWN, AI_CBM_AccDown
+ if_effect EFFECT_EVASION_DOWN, AI_CBM_EvasionDown
+ if_effect EFFECT_HAZE, AI_CBM_Haze
+ if_effect EFFECT_BIDE, AI_CBM_HighRiskForDamage
+ if_effect EFFECT_ROAR, AI_CBM_Roar
+ if_effect EFFECT_TOXIC, AI_CBM_Toxic
+ if_effect EFFECT_LIGHT_SCREEN, AI_CBM_LightScreen
+ if_effect EFFECT_OHKO, AI_CBM_OneHitKO
+ if_effect EFFECT_RAZOR_WIND, AI_CBM_HighRiskForDamage
+ if_effect EFFECT_SUPER_FANG, AI_CBM_HighRiskForDamage
+ if_effect EFFECT_MIST, AI_CBM_Mist
+ if_effect EFFECT_FOCUS_ENERGY, AI_CBM_FocusEnergy
+ if_effect EFFECT_CONFUSE, AI_CBM_Confuse
+ if_effect EFFECT_ATTACK_UP_2, AI_CBM_AttackUp
+ if_effect EFFECT_DEFENSE_UP_2, AI_CBM_DefenseUp
+ if_effect EFFECT_SPEED_UP_2, AI_CBM_SpeedUp
+ if_effect EFFECT_SPECIAL_ATTACK_UP_2, AI_CBM_SpAtkUp
+ if_effect EFFECT_SPECIAL_DEFENSE_UP_2, AI_CBM_SpDefUp
+ if_effect EFFECT_ACCURACY_UP_2, AI_CBM_AccUp
+ if_effect EFFECT_EVASION_UP_2, AI_CBM_EvasionUp
+ if_effect EFFECT_ATTACK_DOWN_2, AI_CBM_AttackDown
+ if_effect EFFECT_DEFENSE_DOWN_2, AI_CBM_DefenseDown
+ if_effect EFFECT_SPEED_DOWN_2, AI_CBM_SpeedDown
+ if_effect EFFECT_SPECIAL_ATTACK_DOWN_2, AI_CBM_SpAtkDown
+ if_effect EFFECT_SPECIAL_DEFENSE_DOWN_2, AI_CBM_SpDefDown
+ if_effect EFFECT_ACCURACY_DOWN_2, AI_CBM_AccDown
+ if_effect EFFECT_EVASION_DOWN_2, AI_CBM_EvasionDown
+ if_effect EFFECT_REFLECT, AI_CBM_Reflect
+ if_effect EFFECT_POISON, AI_CBM_Toxic
+ if_effect EFFECT_PARALYZE, AI_CBM_Paralyze
+ if_effect EFFECT_SUBSTITUTE, AI_CBM_Substitute
+ if_effect EFFECT_RECHARGE, AI_CBM_HighRiskForDamage
+ if_effect EFFECT_LEECH_SEED, AI_CBM_LeechSeed
+ if_effect EFFECT_DISABLE, AI_CBM_Disable
+ if_effect EFFECT_LEVEL_DAMAGE, AI_CBM_HighRiskForDamage
+ if_effect EFFECT_PSYWAVE, AI_CBM_HighRiskForDamage
+ if_effect EFFECT_COUNTER, AI_CBM_HighRiskForDamage
+ if_effect EFFECT_ENCORE, AI_CBM_Encore
+ if_effect EFFECT_SNORE, AI_CBM_DamageDuringSleep
+ if_effect EFFECT_SLEEP_TALK, AI_CBM_DamageDuringSleep
+ if_effect EFFECT_FLAIL, AI_CBM_HighRiskForDamage
+ if_effect EFFECT_MEAN_LOOK, AI_CBM_CantEscape
+ if_effect EFFECT_NIGHTMARE, AI_CBM_Nightmare
+ if_effect EFFECT_MINIMIZE, AI_CBM_EvasionUp
+ if_effect EFFECT_CURSE, AI_CBM_Curse
+ if_effect EFFECT_SPIKES, AI_CBM_Spikes
+ if_effect EFFECT_FORESIGHT, AI_CBM_Foresight
+ if_effect EFFECT_PERISH_SONG, AI_CBM_PerishSong
+ if_effect EFFECT_SANDSTORM, AI_CBM_Sandstorm
+ if_effect EFFECT_SWAGGER, AI_CBM_Confuse
+ if_effect EFFECT_ATTRACT, AI_CBM_Attract
+ if_effect EFFECT_RETURN, AI_CBM_HighRiskForDamage
+ if_effect EFFECT_PRESENT, AI_CBM_HighRiskForDamage
+ if_effect EFFECT_FRUSTRATION, AI_CBM_HighRiskForDamage
+ if_effect EFFECT_SAFEGUARD, AI_CBM_Safeguard
+ if_effect EFFECT_MAGNITUDE, AI_CBM_Magnitude
+ if_effect EFFECT_BATON_PASS, AI_CBM_BatonPass
+ if_effect EFFECT_SONICBOOM, AI_CBM_HighRiskForDamage
+ if_effect EFFECT_RAIN_DANCE, AI_CBM_RainDance
+ if_effect EFFECT_SUNNY_DAY, AI_CBM_SunnyDay
+ if_effect EFFECT_BELLY_DRUM, AI_CBM_BellyDrum
+ if_effect EFFECT_PSYCH_UP, AI_CBM_Haze
+ if_effect EFFECT_MIRROR_COAT, AI_CBM_HighRiskForDamage
+ if_effect EFFECT_SKULL_BASH, AI_CBM_HighRiskForDamage
+ if_effect EFFECT_FUTURE_SIGHT, AI_CBM_FutureSight
if_effect EFFECT_TELEPORT, Score_Minus10
- if_effect EFFECT_DEFENSE_CURL, BattleAIScript_82DC351
- if_effect EFFECT_FAKE_OUT, BattleAIScript_82DC680
- if_effect EFFECT_STOCKPILE, BattleAIScript_82DC689
- if_effect EFFECT_SPIT_UP, BattleAIScript_82DC692
- if_effect EFFECT_SWALLOW, BattleAIScript_82DC692
- if_effect EFFECT_HAIL, BattleAIScript_82DC6A1
- if_effect EFFECT_TORMENT, BattleAIScript_82DC6A9
- if_effect EFFECT_FLATTER, BattleAIScript_82DC51D
- if_effect EFFECT_WILL_O_WISP, BattleAIScript_82DC6B4
- if_effect EFFECT_MEMENTO, BattleAIScript_82DC640
- if_effect EFFECT_FOCUS_PUNCH, BattleAIScript_82DC4ED
- if_effect EFFECT_HELPING_HAND, BattleAIScript_82DC6E3
- if_effect EFFECT_TRICK, BattleAIScript_82DC6EB
- if_effect EFFECT_INGRAIN, BattleAIScript_82DC6F4
- if_effect EFFECT_SUPERPOWER, BattleAIScript_82DC4ED
- if_effect EFFECT_RECYCLE, BattleAIScript_82DC6FF
- if_effect EFFECT_KNOCK_OFF, BattleAIScript_82DC6EB
- if_effect EFFECT_ENDEAVOR, BattleAIScript_82DC4ED
- if_effect EFFECT_IMPRISON, BattleAIScript_82DC708
- if_effect EFFECT_REFRESH, BattleAIScript_82DC713
- if_effect EFFECT_LOW_KICK, BattleAIScript_82DC4ED
- if_effect EFFECT_MUD_SPORT, BattleAIScript_82DC71E
- if_effect EFFECT_TICKLE, BattleAIScript_82DC729
- if_effect EFFECT_COSMIC_POWER, BattleAIScript_82DC73A
- if_effect EFFECT_BULK_UP, BattleAIScript_82DC74B
- if_effect EFFECT_WATER_SPORT, BattleAIScript_82DC75C
- if_effect EFFECT_CALM_MIND, BattleAIScript_82DC767
- if_effect EFFECT_DRAGON_DANCE, BattleAIScript_82DC778
- end
-
-BattleAIScript_82DC2D4:
+ if_effect EFFECT_DEFENSE_CURL, AI_CBM_DefenseUp
+ if_effect EFFECT_FAKE_OUT, AI_CBM_FakeOut
+ if_effect EFFECT_STOCKPILE, AI_CBM_Stockpile
+ if_effect EFFECT_SPIT_UP, AI_CBM_SpitUpAndSwallow
+ if_effect EFFECT_SWALLOW, AI_CBM_SpitUpAndSwallow
+ if_effect EFFECT_HAIL, AI_CBM_Hail
+ if_effect EFFECT_TORMENT, AI_CBM_Torment
+ if_effect EFFECT_FLATTER, AI_CBM_Confuse
+ if_effect EFFECT_WILL_O_WISP, AI_CBM_WillOWisp
+ if_effect EFFECT_MEMENTO, AI_CBM_Memento
+ if_effect EFFECT_FOCUS_PUNCH, AI_CBM_HighRiskForDamage
+ if_effect EFFECT_HELPING_HAND, AI_CBM_HelpingHand
+ if_effect EFFECT_TRICK, AI_CBM_TrickAndKnockOff
+ if_effect EFFECT_INGRAIN, AI_CBM_Ingrain
+ if_effect EFFECT_SUPERPOWER, AI_CBM_HighRiskForDamage
+ if_effect EFFECT_RECYCLE, AI_CBM_Recycle
+ if_effect EFFECT_KNOCK_OFF, AI_CBM_TrickAndKnockOff
+ if_effect EFFECT_ENDEAVOR, AI_CBM_HighRiskForDamage
+ if_effect EFFECT_IMPRISON, AI_CBM_Imprison
+ if_effect EFFECT_REFRESH, AI_CBM_Refresh
+ if_effect EFFECT_LOW_KICK, AI_CBM_HighRiskForDamage
+ if_effect EFFECT_MUD_SPORT, AI_CBM_MudSport
+ if_effect EFFECT_TICKLE, AI_CBM_Tickle
+ if_effect EFFECT_COSMIC_POWER, AI_CBM_CosmicPower
+ if_effect EFFECT_BULK_UP, AI_CBM_BulkUp
+ if_effect EFFECT_WATER_SPORT, AI_CBM_WaterSport
+ if_effect EFFECT_CALM_MIND, AI_CBM_CalmMind
+ if_effect EFFECT_DRAGON_DANCE, AI_CBM_DragonDance
+ end
+
+AI_CBM_Sleep: @ 82DC2D4
get_ability AI_TARGET
if_equal ABILITY_INSOMNIA, Score_Minus10
if_equal ABILITY_VITAL_SPIRIT, Score_Minus10
@@ -222,126 +222,126 @@ BattleAIScript_82DC2D4:
if_side_affecting AI_TARGET, SIDE_STATUS_SAFEGUARD, Score_Minus10
end
-BattleAIScript_82DC2F7:
+AI_CBM_Explosion: @ 82DC2F7
if_type_effectiveness AI_EFFECTIVENESS_x0, Score_Minus10
get_ability AI_TARGET
if_equal ABILITY_DAMP, Score_Minus10
count_usable_party_mons AI_USER
- if_not_equal 0, BattleAIScript_82DC31A
+ if_not_equal 0, AI_CBM_Explosion_End
count_usable_party_mons AI_TARGET
if_not_equal 0, Score_Minus10
goto Score_Minus1
-BattleAIScript_82DC31A:
+AI_CBM_Explosion_End: @ 82DC31A
end
-BattleAIScript_82DC31B:
+AI_CBM_Nightmare: @ 82DC31B
if_status2 AI_TARGET, STATUS2_NIGHTMARE, Score_Minus10
if_not_status AI_TARGET, STATUS1_SLEEP, Score_Minus8
end
-BattleAIScript_82DC330:
+AI_CBM_DreamEater: @ 82DC330
if_not_status AI_TARGET, STATUS1_SLEEP, Score_Minus8
if_type_effectiveness AI_EFFECTIVENESS_x0, Score_Minus10
end
-BattleAIScript_82DC341:
+AI_CBM_BellyDrum: @ 82DC341
if_hp_less_than AI_USER, 51, Score_Minus10
-BattleAIScript_82DC348:
+AI_CBM_AttackUp: @ 82DC348
if_stat_level_equal AI_USER, STAT_ATK, 12, Score_Minus10
end
-BattleAIScript_82DC351:
+AI_CBM_DefenseUp: @ 82DC351
if_stat_level_equal AI_USER, STAT_DEF, 12, Score_Minus10
end
-BattleAIScript_82DC35A:
+AI_CBM_SpeedUp: @ 82DC35A
if_stat_level_equal AI_USER, STAT_SPEED, 12, Score_Minus10
end
-BattleAIScript_82DC363:
+AI_CBM_SpAtkUp: @ 82DC363
if_stat_level_equal AI_USER, STAT_SPATK, 12, Score_Minus10
end
-BattleAIScript_82DC36C:
+AI_CBM_SpDefUp: @ 82DC36C
if_stat_level_equal AI_USER, STAT_SPDEF, 12, Score_Minus10
end
-BattleAIScript_82DC375:
+AI_CBM_AccUp: @ 82DC375
if_stat_level_equal AI_USER, STAT_ACC, 12, Score_Minus10
end
-BattleAIScript_82DC37E:
+AI_CBM_EvasionUp: @ 82DC37E
if_stat_level_equal AI_USER, STAT_EVASION, 12, Score_Minus10
end
-BattleAIScript_82DC387:
+AI_CBM_AttackDown: @ 82DC387
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
+ goto CheckIfAbilityBlocksStatChange
-BattleAIScript_82DC39C:
+AI_CBM_DefenseDown: @ 82DC39C
if_stat_level_equal AI_TARGET, STAT_DEF, 0, Score_Minus10
- goto BattleAIScript_82DC3F6
+ goto CheckIfAbilityBlocksStatChange
-BattleAIScript_82DC3A9:
+AI_CBM_SpeedDown: @ 82DC3A9
if_stat_level_equal AI_TARGET, STAT_SPEED, 0, Score_Minus10
if_ability AI_TARGET, ABILITY_SPEED_BOOST, Score_Minus10
- goto BattleAIScript_82DC3F6
+ goto CheckIfAbilityBlocksStatChange
-BattleAIScript_82DC3BF:
+AI_CBM_SpAtkDown: @ 82DC3BF
if_stat_level_equal AI_TARGET, STAT_SPATK, 0, Score_Minus10
- goto BattleAIScript_82DC3F6
+ goto CheckIfAbilityBlocksStatChange
-BattleAIScript_82DC3CC:
+AI_CBM_SpDefDown: @ 82DC3CC
if_stat_level_equal AI_TARGET, STAT_SPDEF, 0, Score_Minus10
- goto BattleAIScript_82DC3F6
+ goto CheckIfAbilityBlocksStatChange
-BattleAIScript_82DC3D9:
+AI_CBM_AccDown: @ 82DC3D9
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
+ goto CheckIfAbilityBlocksStatChange
-BattleAIScript_82DC3EE:
+AI_CBM_EvasionDown: @ 82DC3EE
if_stat_level_equal AI_TARGET, STAT_EVASION, 0, Score_Minus10
-BattleAIScript_82DC3F6:
+CheckIfAbilityBlocksStatChange: @ 82DC3F6
get_ability AI_TARGET
if_equal ABILITY_CLEAR_BODY, Score_Minus10
if_equal ABILITY_WHITE_SMOKE, Score_Minus10
end
-BattleAIScript_82DC405:
- 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
+AI_CBM_Haze: @ 82DC405
+ if_stat_level_less_than AI_USER, STAT_ATK, 6, AI_CBM_Haze_End
+ if_stat_level_less_than AI_USER, STAT_DEF, 6, AI_CBM_Haze_End
+ if_stat_level_less_than AI_USER, STAT_SPEED, 6, AI_CBM_Haze_End
+ if_stat_level_less_than AI_USER, STAT_SPATK, 6, AI_CBM_Haze_End
+ if_stat_level_less_than AI_USER, STAT_SPDEF, 6, AI_CBM_Haze_End
+ if_stat_level_less_than AI_USER, STAT_ACC, 6, AI_CBM_Haze_End
+ if_stat_level_less_than AI_USER, STAT_EVASION, 6, AI_CBM_Haze_End
+ if_stat_level_more_than AI_TARGET, STAT_ATK, 6, AI_CBM_Haze_End
+ if_stat_level_more_than AI_TARGET, STAT_DEF, 6, AI_CBM_Haze_End
+ if_stat_level_more_than AI_TARGET, STAT_SPEED, 6, AI_CBM_Haze_End
+ if_stat_level_more_than AI_TARGET, STAT_SPATK, 6, AI_CBM_Haze_End
+ if_stat_level_more_than AI_TARGET, STAT_SPDEF, 6, AI_CBM_Haze_End
+ if_stat_level_more_than AI_TARGET, STAT_ACC, 6, AI_CBM_Haze_End
+ if_stat_level_more_than AI_TARGET, STAT_EVASION, 6, AI_CBM_Haze_End
goto Score_Minus10
-BattleAIScript_82DC47A:
+AI_CBM_Haze_End: @ 82DC47A
end
-BattleAIScript_82DC47B:
+AI_CBM_Roar: @ 82DC47B
count_usable_party_mons AI_TARGET
if_equal 0, Score_Minus10
get_ability AI_TARGET
if_equal ABILITY_SUCTION_CUPS, Score_Minus10
end
-BattleAIScript_82DC48C:
+AI_CBM_Toxic: @ 82DC48C
get_target_type1
if_equal TYPE_STEEL, Score_Minus10
if_equal TYPE_POISON, Score_Minus10
@@ -354,51 +354,51 @@ BattleAIScript_82DC48C:
if_side_affecting AI_TARGET, SIDE_STATUS_SAFEGUARD, Score_Minus10
end
-BattleAIScript_82DC4C5:
+AI_CBM_LightScreen: @ 82DC4C5
if_side_affecting AI_USER, SIDE_STATUS_LIGHTSCREEN, Score_Minus8
end
-BattleAIScript_82DC4D0:
+AI_CBM_OneHitKO: @ 82DC4D0
if_type_effectiveness AI_EFFECTIVENESS_x0, Score_Minus10
get_ability AI_TARGET
if_equal ABILITY_STURDY, Score_Minus10
if_level_cond 1, Score_Minus10
end
-BattleAIScript_82DC4E5:
+AI_CBM_Magnitude: @ 82DC4E5
get_ability AI_TARGET
if_equal ABILITY_LEVITATE, Score_Minus10
-BattleAIScript_82DC4ED:
+AI_CBM_HighRiskForDamage: @ 82DC4ED
if_type_effectiveness AI_EFFECTIVENESS_x0, Score_Minus10
get_ability AI_TARGET
- if_not_equal ABILITY_WONDER_GUARD, BattleAIScript_82DC506
- if_type_effectiveness AI_EFFECTIVENESS_x2, BattleAIScript_82DC506
+ if_not_equal ABILITY_WONDER_GUARD, AI_CBM_HighRiskForDamage_End
+ if_type_effectiveness AI_EFFECTIVENESS_x2, AI_CBM_HighRiskForDamage_End
goto Score_Minus10
-BattleAIScript_82DC506:
+AI_CBM_HighRiskForDamage_End: @ 82DC506
end
-BattleAIScript_82DC507:
+AI_CBM_Mist: @ 82DC507
if_side_affecting AI_USER, SIDE_STATUS_MIST, Score_Minus8
end
-BattleAIScript_82DC512:
+AI_CBM_FocusEnergy: @ 82DC512
if_status2 AI_USER, STATUS2_FOCUS_ENERGY, Score_Minus10
end
-BattleAIScript_82DC51D:
+AI_CBM_Confuse: @ 82DC51D
if_status2 AI_TARGET, STATUS2_CONFUSION, Score_Minus5
get_ability AI_TARGET
if_equal ABILITY_OWN_TEMPO, Score_Minus10
if_side_affecting AI_TARGET, SIDE_STATUS_SAFEGUARD, Score_Minus10
end
-BattleAIScript_82DC53A:
+AI_CBM_Reflect: @ 82DC53A
if_side_affecting AI_USER, SIDE_STATUS_REFLECT, Score_Minus8
end
-BattleAIScript_82DC545:
+AI_CBM_Paralyze: @ 82DC545
if_type_effectiveness AI_EFFECTIVENESS_x0, Score_Minus10
get_ability AI_TARGET
if_equal ABILITY_LIMBER, Score_Minus10
@@ -406,12 +406,12 @@ BattleAIScript_82DC545:
if_side_affecting AI_TARGET, SIDE_STATUS_SAFEGUARD, Score_Minus10
end
-BattleAIScript_82DC568:
+AI_CBM_Substitute: @ 82DC568
if_status2 AI_USER, STATUS2_SUBSTITUTE, Score_Minus8
if_hp_less_than AI_USER, 26, Score_Minus10
end
-BattleAIScript_82DC57A:
+AI_CBM_LeechSeed: @ 82DC57A
if_status3 AI_TARGET, STATUS3_LEECHSEED, Score_Minus10
get_target_type1
if_equal TYPE_GRASS, Score_Minus10
@@ -419,121 +419,121 @@ BattleAIScript_82DC57A:
if_equal TYPE_GRASS, Score_Minus10
end
-BattleAIScript_82DC595:
+AI_CBM_Disable: @ 82DC595
if_any_move_disabled AI_TARGET, Score_Minus8
end
-BattleAIScript_82DC59D:
+AI_CBM_Encore: @ 82DC59D
if_any_move_encored AI_TARGET, Score_Minus8
end
-BattleAIScript_82DC5A5:
+AI_CBM_DamageDuringSleep: @ 82DC5A5
if_not_status AI_USER, STATUS1_SLEEP, Score_Minus8
end
-BattleAIScript_82DC5B0:
+AI_CBM_CantEscape: @ 82DC5B0
if_status2 AI_TARGET, STATUS2_ESCAPE_PREVENTION, Score_Minus10
end
-BattleAIScript_82DC5BB:
+AI_CBM_Curse: @ 82DC5BB
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:
+AI_CBM_Spikes: @ 82DC5CC
if_side_affecting AI_TARGET, SIDE_STATUS_SPIKES, Score_Minus10
end
-BattleAIScript_82DC5D7:
+AI_CBM_Foresight: @ 82DC5D7
if_status2 AI_TARGET, STATUS2_FORESIGHT, Score_Minus10
end
-BattleAIScript_82DC5E2:
+AI_CBM_PerishSong: @ 82DC5E2
if_status3 AI_TARGET, STATUS3_PERISH_SONG, Score_Minus10
end
-BattleAIScript_82DC5ED:
+AI_CBM_Sandstorm: @ 82DC5ED
get_weather
if_equal AI_WEATHER_SANDSTORM, Score_Minus8
end
-BattleAIScript_82DC5F5:
+AI_CBM_Attract: @ 82DC5F5
if_status2 AI_TARGET, STATUS2_INFATUATION, Score_Minus10
get_ability AI_TARGET
if_equal ABILITY_OBLIVIOUS, Score_Minus10
get_gender AI_USER
- if_equal 0, BattleAIScript_82DC61A
- if_equal 254, BattleAIScript_82DC627
+ if_equal 0, AI_CBM_Attract_CheckIfTargetIsFemale
+ if_equal 254, AI_CBM_Attract_CheckIfTargetIsMale
goto Score_Minus10
-BattleAIScript_82DC61A:
+AI_CBM_Attract_CheckIfTargetIsFemale: @ 82DC61A
get_gender AI_TARGET
- if_equal 254, BattleAIScript_82DC634
+ if_equal 254, AI_CBM_Attract_End
goto Score_Minus10
-BattleAIScript_82DC627:
+AI_CBM_Attract_CheckIfTargetIsMale: @ 82DC627
get_gender AI_TARGET
- if_equal 0, BattleAIScript_82DC634
+ if_equal 0, AI_CBM_Attract_End
goto Score_Minus10
-BattleAIScript_82DC634:
+AI_CBM_Attract_End: @ 82DC634
end
-BattleAIScript_82DC635:
+AI_CBM_Safeguard: @ 82DC635
if_side_affecting AI_USER, SIDE_STATUS_SAFEGUARD, Score_Minus8
end
-BattleAIScript_82DC640:
+AI_CBM_Memento: @ 82DC640
if_stat_level_equal AI_TARGET, STAT_ATK, 0, Score_Minus10
if_stat_level_equal AI_TARGET, STAT_SPATK, 0, Score_Minus8
-BattleAIScript_82DC650:
+AI_CBM_BatonPass: @ 82DC650
count_usable_party_mons AI_USER
if_equal 0, Score_Minus10
end
-BattleAIScript_82DC659:
+AI_CBM_RainDance: @ 82DC659
get_weather
if_equal AI_WEATHER_RAIN, Score_Minus8
end
-BattleAIScript_82DC661:
+AI_CBM_SunnyDay: @ 82DC661
get_weather
if_equal AI_WEATHER_SUN, Score_Minus8
end
-BattleAIScript_82DC669:
+AI_CBM_FutureSight: @ 82DC669
if_side_affecting AI_TARGET, SIDE_STATUS_FUTUREATTACK, Score_Minus12
if_side_affecting AI_USER, SIDE_STATUS_FUTUREATTACK, Score_Minus12
score +5
end
-BattleAIScript_82DC680:
+AI_CBM_FakeOut: @ 82DC680
is_first_turn_for AI_USER
if_equal 0, Score_Minus10
end
-BattleAIScript_82DC689:
+AI_CBM_Stockpile: @ 82DC689
get_stockpile_count AI_USER
if_equal 3, Score_Minus10
end
-BattleAIScript_82DC692:
+AI_CBM_SpitUpAndSwallow: @ 82DC692
if_type_effectiveness AI_EFFECTIVENESS_x0, Score_Minus10
get_stockpile_count AI_USER
if_equal 0, Score_Minus10
end
-BattleAIScript_82DC6A1:
+AI_CBM_Hail: @ 82DC6A1
get_weather
if_equal AI_WEATHER_HAIL, Score_Minus8
end
-BattleAIScript_82DC6A9:
+AI_CBM_Torment: @ 82DC6A9
if_status2 AI_TARGET, STATUS2_TORMENT, Score_Minus10
end
-BattleAIScript_82DC6B4:
+AI_CBM_WillOWisp: @ 82DC6B4
get_ability AI_TARGET
if_equal ABILITY_WATER_VEIL, Score_Minus10
if_status AI_TARGET, STATUS1_ANY, Score_Minus10
@@ -543,61 +543,61 @@ BattleAIScript_82DC6B4:
if_side_affecting AI_TARGET, SIDE_STATUS_SAFEGUARD, Score_Minus10
end
-BattleAIScript_82DC6E3:
+AI_CBM_HelpingHand: @ 82DC6E3
if_not_double_battle Score_Minus10
end
-BattleAIScript_82DC6EB:
+AI_CBM_TrickAndKnockOff: @ 82DC6EB
get_ability AI_TARGET
if_equal ABILITY_STICKY_HOLD, Score_Minus10
end
-BattleAIScript_82DC6F4:
+AI_CBM_Ingrain: @ 82DC6F4
if_status3 AI_USER, STATUS3_ROOTED, Score_Minus10
end
-BattleAIScript_82DC6FF:
+AI_CBM_Recycle: @ 82DC6FF
get_used_held_item AI_USER
if_equal 0, Score_Minus10
end
-BattleAIScript_82DC708:
+AI_CBM_Imprison: @ 82DC708
if_status3 AI_USER, STATUS3_IMPRISONED_OTHERS, Score_Minus10
end
-BattleAIScript_82DC713:
+AI_CBM_Refresh: @ 82DC713
if_not_status AI_USER, STATUS1_POISON | STATUS1_BURN | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON, Score_Minus10
end
-BattleAIScript_82DC71E:
+AI_CBM_MudSport: @ 82DC71E
if_status3 AI_USER, STATUS3_MUDSPORT, Score_Minus10
end
-BattleAIScript_82DC729:
+AI_CBM_Tickle: @ 82DC729
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:
+AI_CBM_CosmicPower: @ 82DC73A
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:
+AI_CBM_BulkUp: @ 82DC74B
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:
+AI_CBM_WaterSport: @ 82DC75C
if_status3 AI_USER, STATUS3_WATERSPORT, Score_Minus10
end
-BattleAIScript_82DC767:
+AI_CBM_CalmMind: @ 82DC767
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:
+AI_CBM_DragonDance: @ 82DC778
if_stat_level_equal AI_USER, STAT_ATK, 12, Score_Minus10
if_stat_level_equal AI_USER, STAT_SPEED, 12, Score_Minus8
end
@@ -656,214 +656,214 @@ Score_Plus10:
AI_TryToFaint:
if_target_is_ally AI_Ret
- if_effect EFFECT_SLEEP, BattleAIScript_82DCA92
- if_effect EFFECT_ABSORB, BattleAIScript_82DCAAE
- if_effect EFFECT_EXPLOSION, BattleAIScript_82DCAC8
- if_effect EFFECT_DREAM_EATER, BattleAIScript_82DCB26
- if_effect EFFECT_MIRROR_MOVE, BattleAIScript_82DCB3A
- if_effect EFFECT_ATTACK_UP, BattleAIScript_82DCBBC
- if_effect EFFECT_DEFENSE_UP, BattleAIScript_82DCBF7
- if_effect EFFECT_SPEED_UP, BattleAIScript_82DCC5D
- if_effect EFFECT_SPECIAL_ATTACK_UP, BattleAIScript_82DCC73
- if_effect EFFECT_SPECIAL_DEFENSE_UP, BattleAIScript_82DCCAE
- if_effect EFFECT_ACCURACY_UP, BattleAIScript_82DCD14
- if_effect EFFECT_EVASION_UP, BattleAIScript_82DCD2E
- if_effect EFFECT_ALWAYS_HIT, BattleAIScript_82DCDC8
- if_effect EFFECT_ATTACK_DOWN, BattleAIScript_82DCDF8
- if_effect EFFECT_DEFENSE_DOWN, BattleAIScript_82DCE4A
- if_effect EFFECT_SPEED_DOWN, BattleAIScript_82DCE81
- if_effect EFFECT_SPECIAL_ATTACK_DOWN, BattleAIScript_82DCE97
- if_effect EFFECT_SPECIAL_DEFENSE_DOWN, BattleAIScript_82DCEEB
- if_effect EFFECT_ACCURACY_DOWN, BattleAIScript_82DCF0C
- if_effect EFFECT_EVASION_DOWN, BattleAIScript_82DCFA0
- if_effect EFFECT_HAZE, BattleAIScript_82DCFC1
- if_effect EFFECT_BIDE, BattleAIScript_82DD084
- if_effect EFFECT_ROAR, BattleAIScript_82DD08E
- if_effect EFFECT_CONVERSION, BattleAIScript_82DD0C6
- if_effect EFFECT_RESTORE_HP, BattleAIScript_82DD0F7
- if_effect EFFECT_TOXIC, BattleAIScript_82DD150
- if_effect EFFECT_LIGHT_SCREEN, BattleAIScript_82DD18F
- if_effect EFFECT_REST, BattleAIScript_82DD1BE
- if_effect EFFECT_OHKO, BattleAIScript_82DD21E
- if_effect EFFECT_RAZOR_WIND, BattleAIScript_82DDA0B
- if_effect EFFECT_SUPER_FANG, BattleAIScript_82DD21F
- if_effect EFFECT_TRAP, BattleAIScript_82DD229
- if_effect EFFECT_HIGH_CRITICAL, BattleAIScript_82DD25F
- if_effect EFFECT_CONFUSE, BattleAIScript_82DD296
- if_effect EFFECT_ATTACK_UP_2, BattleAIScript_82DCBBC
- if_effect EFFECT_DEFENSE_UP_2, BattleAIScript_82DCBF7
- if_effect EFFECT_SPEED_UP_2, BattleAIScript_82DCC5D
- if_effect EFFECT_SPECIAL_ATTACK_UP_2, BattleAIScript_82DCC73
- if_effect EFFECT_SPECIAL_DEFENSE_UP_2, BattleAIScript_82DCCAE
- if_effect EFFECT_ACCURACY_UP_2, BattleAIScript_82DCD14
- if_effect EFFECT_EVASION_UP_2, BattleAIScript_82DCD2E
- if_effect EFFECT_ATTACK_DOWN_2, BattleAIScript_82DCDF8
- if_effect EFFECT_DEFENSE_DOWN_2, BattleAIScript_82DCE4A
- if_effect EFFECT_SPEED_DOWN_2, BattleAIScript_82DCE81
- if_effect EFFECT_SPECIAL_ATTACK_DOWN_2, BattleAIScript_82DCE97
- if_effect EFFECT_SPECIAL_DEFENSE_DOWN_2, BattleAIScript_82DCEEB
- if_effect EFFECT_ACCURACY_DOWN_2, BattleAIScript_82DCF0C
- if_effect EFFECT_EVASION_DOWN_2, BattleAIScript_82DCFA0
- if_effect EFFECT_REFLECT, BattleAIScript_82DD2D3
- if_effect EFFECT_POISON, BattleAIScript_82DD303
- if_effect EFFECT_PARALYZE, BattleAIScript_82DD314
+ if_effect EFFECT_SLEEP, AI_CV_Sleep
+ if_effect EFFECT_ABSORB, AI_CV_Absorb
+ if_effect EFFECT_EXPLOSION, AI_CV_SelfKO
+ if_effect EFFECT_DREAM_EATER, AI_CV_DreamEater
+ if_effect EFFECT_MIRROR_MOVE, AI_CV_MirrorMove
+ if_effect EFFECT_ATTACK_UP, AI_CV_AttackUp
+ if_effect EFFECT_DEFENSE_UP, AI_CV_DefenseUp
+ if_effect EFFECT_SPEED_UP, AI_CV_SpeedUp
+ if_effect EFFECT_SPECIAL_ATTACK_UP, AI_CV_SpAtkUp
+ if_effect EFFECT_SPECIAL_DEFENSE_UP, AI_CV_SpDefUp
+ if_effect EFFECT_ACCURACY_UP, AI_CV_AccuracyUp
+ if_effect EFFECT_EVASION_UP, AI_CV_EvasionUp
+ if_effect EFFECT_ALWAYS_HIT, AI_CV_AlwaysHit
+ if_effect EFFECT_ATTACK_DOWN, AI_CV_AttackDown
+ if_effect EFFECT_DEFENSE_DOWN, AI_CV_DefenseDown
+ if_effect EFFECT_SPEED_DOWN, AI_CV_SpeedDown
+ if_effect EFFECT_SPECIAL_ATTACK_DOWN, AI_CV_SpAtkDown
+ if_effect EFFECT_SPECIAL_DEFENSE_DOWN, AI_CV_SpDefDown
+ if_effect EFFECT_ACCURACY_DOWN, AI_CV_AccuracyDown
+ if_effect EFFECT_EVASION_DOWN, AI_CV_EvasionDown
+ if_effect EFFECT_HAZE, AI_CV_Haze
+ if_effect EFFECT_BIDE, AI_CV_Bide
+ if_effect EFFECT_ROAR, AI_CV_Roar
+ if_effect EFFECT_CONVERSION, AI_CV_Conversion
+ if_effect EFFECT_RESTORE_HP, AI_CV_Heal
+ if_effect EFFECT_TOXIC, AI_CV_Toxic
+ if_effect EFFECT_LIGHT_SCREEN, AI_CV_LightScreen
+ if_effect EFFECT_REST, AI_CV_Rest
+ if_effect EFFECT_OHKO, AI_CV_OneHitKO
+ if_effect EFFECT_RAZOR_WIND, AI_CV_ChargeUpMove
+ if_effect EFFECT_SUPER_FANG, AI_CV_SuperFang
+ if_effect EFFECT_TRAP, AI_CV_Trap
+ if_effect EFFECT_HIGH_CRITICAL, AI_CV_HighCrit
+ if_effect EFFECT_CONFUSE, AI_CV_Confuse
+ if_effect EFFECT_ATTACK_UP_2, AI_CV_AttackUp
+ if_effect EFFECT_DEFENSE_UP_2, AI_CV_DefenseUp
+ if_effect EFFECT_SPEED_UP_2, AI_CV_SpeedUp
+ if_effect EFFECT_SPECIAL_ATTACK_UP_2, AI_CV_SpAtkUp
+ if_effect EFFECT_SPECIAL_DEFENSE_UP_2, AI_CV_SpDefUp
+ if_effect EFFECT_ACCURACY_UP_2, AI_CV_AccuracyUp
+ if_effect EFFECT_EVASION_UP_2, AI_CV_EvasionUp
+ if_effect EFFECT_ATTACK_DOWN_2, AI_CV_AttackDown
+ if_effect EFFECT_DEFENSE_DOWN_2, AI_CV_DefenseDown
+ if_effect EFFECT_SPEED_DOWN_2, AI_CV_SpeedDown
+ if_effect EFFECT_SPECIAL_ATTACK_DOWN_2, AI_CV_SpAtkDown
+ if_effect EFFECT_SPECIAL_DEFENSE_DOWN_2, AI_CV_SpDefDown
+ if_effect EFFECT_ACCURACY_DOWN_2, AI_CV_AccuracyDown
+ if_effect EFFECT_EVASION_DOWN_2, AI_CV_EvasionDown
+ if_effect EFFECT_REFLECT, AI_CV_Reflect
+ if_effect EFFECT_POISON, AI_CV_Poison
+ if_effect EFFECT_PARALYZE, AI_CV_Paralyze
if_effect EFFECT_SWAGGER, BattleAIScript_82DD286
- if_effect EFFECT_SPEED_DOWN_HIT, BattleAIScript_82DCE6B
- if_effect EFFECT_SKY_ATTACK, BattleAIScript_82DDA0B
- if_effect EFFECT_VITAL_THROW, BattleAIScript_82DD331
- if_effect EFFECT_SUBSTITUTE, BattleAIScript_82DD354
- if_effect EFFECT_RECHARGE, BattleAIScript_82DD3EA
- if_effect EFFECT_LEECH_SEED, BattleAIScript_82DD150
- if_effect EFFECT_DISABLE, BattleAIScript_82DD412
- if_effect EFFECT_COUNTER, BattleAIScript_82DD431
- if_effect EFFECT_ENCORE, BattleAIScript_82DD4E3
- if_effect EFFECT_PAIN_SPLIT, BattleAIScript_82DD54B
- if_effect EFFECT_SNORE, BattleAIScript_82DD577
- if_effect EFFECT_LOCK_ON, BattleAIScript_82DD57A
- if_effect EFFECT_SLEEP_TALK, BattleAIScript_82DD583
- if_effect EFFECT_DESTINY_BOND, BattleAIScript_82DD590
- if_effect EFFECT_FLAIL, BattleAIScript_82DD5C6
- if_effect EFFECT_HEAL_BELL, BattleAIScript_82DD60B
- if_effect EFFECT_THIEF, BattleAIScript_82DD622
- if_effect EFFECT_MEAN_LOOK, BattleAIScript_82DD229
- if_effect EFFECT_MINIMIZE, BattleAIScript_82DCD2E
- if_effect EFFECT_CURSE, BattleAIScript_82DD645
- if_effect EFFECT_PROTECT, BattleAIScript_82DD694
- if_effect EFFECT_FORESIGHT, BattleAIScript_82DD75D
- if_effect EFFECT_ENDURE, BattleAIScript_82DD78B
- if_effect EFFECT_BATON_PASS, BattleAIScript_82DD7A9
- if_effect EFFECT_PURSUIT, BattleAIScript_82DD845
- if_effect EFFECT_MORNING_SUN, BattleAIScript_82DD0DD
- if_effect EFFECT_SYNTHESIS, BattleAIScript_82DD0DD
- if_effect EFFECT_MOONLIGHT, BattleAIScript_82DD0DD
- if_effect EFFECT_RAIN_DANCE, BattleAIScript_82DD87B
- if_effect EFFECT_SUNNY_DAY, BattleAIScript_82DD8BA
- if_effect EFFECT_BELLY_DRUM, BattleAIScript_82DD8E3
- if_effect EFFECT_PSYCH_UP, BattleAIScript_82DD8F2
- if_effect EFFECT_MIRROR_COAT, BattleAIScript_82DD95A
- if_effect EFFECT_SKULL_BASH, BattleAIScript_82DDA0B
- if_effect EFFECT_SOLARBEAM, BattleAIScript_82DDA0B
- if_effect EFFECT_SEMI_INVULNERABLE, BattleAIScript_82DDA2F
- if_effect EFFECT_SOFTBOILED, BattleAIScript_82DD0F7
- if_effect EFFECT_FAKE_OUT, BattleAIScript_82DDAB9
- if_effect EFFECT_SPIT_UP, BattleAIScript_82DDABC
- if_effect EFFECT_SWALLOW, BattleAIScript_82DD0F7
- if_effect EFFECT_HAIL, BattleAIScript_82DDACD
- if_effect EFFECT_FLATTER, BattleAIScript_82DD28E
- if_effect EFFECT_MEMENTO, BattleAIScript_82DCAC8
- if_effect EFFECT_FACADE, BattleAIScript_82DDAF6
- if_effect EFFECT_FOCUS_PUNCH, BattleAIScript_82DDB03
- if_effect EFFECT_SMELLINGSALT, BattleAIScript_82DDB5C
- if_effect EFFECT_TRICK, BattleAIScript_82DDB6E
- if_effect EFFECT_ROLE_PLAY, BattleAIScript_82DDBB9
- if_effect EFFECT_SUPERPOWER, BattleAIScript_82DDBF0
- if_effect EFFECT_MAGIC_COAT, BattleAIScript_82DDC20
- if_effect EFFECT_RECYCLE, BattleAIScript_82DDC53
- if_effect EFFECT_REVENGE, BattleAIScript_82DDC72
- if_effect EFFECT_BRICK_BREAK, BattleAIScript_82DDCA0
- if_effect EFFECT_KNOCK_OFF, BattleAIScript_82DDCB2
- if_effect EFFECT_ENDEAVOR, BattleAIScript_82DDCCA
- if_effect EFFECT_ERUPTION, BattleAIScript_82DDCF6
- if_effect EFFECT_SKILL_SWAP, BattleAIScript_82DDBB9
- if_effect EFFECT_IMPRISON, BattleAIScript_82DDD1E
- if_effect EFFECT_REFRESH, BattleAIScript_82DDD2F
- if_effect EFFECT_SNATCH, BattleAIScript_82DDD3E
- if_effect EFFECT_BLAZE_KICK, BattleAIScript_82DD25F
- if_effect EFFECT_MUD_SPORT, BattleAIScript_82DDDA8
- if_effect EFFECT_OVERHEAT, BattleAIScript_82DDDCE
- if_effect EFFECT_TICKLE, BattleAIScript_82DCE4A
- if_effect EFFECT_COSMIC_POWER, BattleAIScript_82DCCAE
- if_effect EFFECT_BULK_UP, BattleAIScript_82DCBF7
- if_effect EFFECT_POISON_TAIL, BattleAIScript_82DD25F
- if_effect EFFECT_WATER_SPORT, BattleAIScript_82DDDF6
- if_effect EFFECT_CALM_MIND, BattleAIScript_82DCCAE
- if_effect EFFECT_DRAGON_DANCE, BattleAIScript_82DDE1C
- end
-
-BattleAIScript_82DCA92:
- if_has_move_with_effect AI_TARGET, EFFECT_DREAM_EATER, BattleAIScript_82DCAA5
- if_has_move_with_effect AI_TARGET, EFFECT_NIGHTMARE, BattleAIScript_82DCAA5
- goto BattleAIScript_82DCAAD
-
-BattleAIScript_82DCAA5:
- if_random_less_than 128, BattleAIScript_82DCAAD
+ if_effect EFFECT_SPEED_DOWN_HIT, AI_CV_SpeedDownFromChance
+ if_effect EFFECT_SKY_ATTACK, AI_CV_ChargeUpMove
+ if_effect EFFECT_VITAL_THROW, AI_CV_VitalThrow
+ if_effect EFFECT_SUBSTITUTE, AI_CV_Substitute
+ if_effect EFFECT_RECHARGE, AI_CV_Recharge
+ if_effect EFFECT_LEECH_SEED, AI_CV_Toxic
+ if_effect EFFECT_DISABLE, AI_CV_Disable
+ if_effect EFFECT_COUNTER, AI_CV_Counter
+ if_effect EFFECT_ENCORE, AI_CV_Encore
+ if_effect EFFECT_PAIN_SPLIT, AI_CV_PainSplit
+ if_effect EFFECT_SNORE, AI_CV_Snore
+ if_effect EFFECT_LOCK_ON, AI_CV_LockOn
+ if_effect EFFECT_SLEEP_TALK, AI_CV_SleepTalk
+ if_effect EFFECT_DESTINY_BOND, AI_CV_DestinyBond
+ if_effect EFFECT_FLAIL, AI_CV_Flail
+ if_effect EFFECT_HEAL_BELL, AI_CV_HealBell
+ if_effect EFFECT_THIEF, AI_CV_Thief
+ if_effect EFFECT_MEAN_LOOK, AI_CV_Trap
+ if_effect EFFECT_MINIMIZE, AI_CV_EvasionUp
+ if_effect EFFECT_CURSE, AI_CV_Curse
+ if_effect EFFECT_PROTECT, AI_CV_Protect
+ if_effect EFFECT_FORESIGHT, AI_CV_Foresight
+ if_effect EFFECT_ENDURE, AI_CV_Endure
+ if_effect EFFECT_BATON_PASS, AI_CV_BatonPass
+ if_effect EFFECT_PURSUIT, AI_CV_Pursuit
+ if_effect EFFECT_MORNING_SUN, AI_CV_HealWeather
+ if_effect EFFECT_SYNTHESIS, AI_CV_HealWeather
+ if_effect EFFECT_MOONLIGHT, AI_CV_HealWeather
+ if_effect EFFECT_RAIN_DANCE, AI_CV_RainDance
+ if_effect EFFECT_SUNNY_DAY, AI_CV_SunnyDay
+ if_effect EFFECT_BELLY_DRUM, AI_CV_BellyDrum
+ if_effect EFFECT_PSYCH_UP, AI_CV_PsychUp
+ if_effect EFFECT_MIRROR_COAT, AI_CV_MirrorCoat
+ if_effect EFFECT_SKULL_BASH, AI_CV_ChargeUpMove
+ if_effect EFFECT_SOLARBEAM, AI_CV_ChargeUpMove
+ if_effect EFFECT_SEMI_INVULNERABLE, AI_CV_Fly
+ if_effect EFFECT_SOFTBOILED, AI_CV_Heal
+ if_effect EFFECT_FAKE_OUT, AI_CV_FakeOut
+ if_effect EFFECT_SPIT_UP, AI_CV_SpitUp
+ if_effect EFFECT_SWALLOW, AI_CV_Heal
+ if_effect EFFECT_HAIL, AI_CV_Hail
+ if_effect EFFECT_FLATTER, AI_CV_Flatter
+ if_effect EFFECT_MEMENTO, AI_CV_SelfKO
+ if_effect EFFECT_FACADE, AI_CV_Facade
+ if_effect EFFECT_FOCUS_PUNCH, AI_CV_FocusPunch
+ if_effect EFFECT_SMELLINGSALT, AI_CV_SmellingSalt
+ if_effect EFFECT_TRICK, AI_CV_Trick
+ if_effect EFFECT_ROLE_PLAY, AI_CV_ChangeSelfAbility
+ if_effect EFFECT_SUPERPOWER, AI_CV_Superpower
+ if_effect EFFECT_MAGIC_COAT, AI_CV_MagicCoat
+ if_effect EFFECT_RECYCLE, AI_CV_Recycle
+ if_effect EFFECT_REVENGE, AI_CV_Revenge
+ if_effect EFFECT_BRICK_BREAK, AI_CV_BrickBreak
+ if_effect EFFECT_KNOCK_OFF, AI_CV_KnockOff
+ if_effect EFFECT_ENDEAVOR, AI_CV_Endeavor
+ if_effect EFFECT_ERUPTION, AI_CV_Eruption
+ if_effect EFFECT_SKILL_SWAP, AI_CV_ChangeSelfAbility
+ if_effect EFFECT_IMPRISON, AI_CV_Imprison
+ if_effect EFFECT_REFRESH, AI_CV_Refresh
+ if_effect EFFECT_SNATCH, AI_CV_Snatch
+ if_effect EFFECT_BLAZE_KICK, AI_CV_HighCrit
+ if_effect EFFECT_MUD_SPORT, AI_CV_MudSport
+ if_effect EFFECT_OVERHEAT, AI_CV_Overheat
+ if_effect EFFECT_TICKLE, AI_CV_DefenseDown
+ if_effect EFFECT_COSMIC_POWER, AI_CV_SpDefUp
+ if_effect EFFECT_BULK_UP, AI_CV_DefenseUp
+ if_effect EFFECT_POISON_TAIL, AI_CV_HighCrit
+ if_effect EFFECT_WATER_SPORT, AI_CV_WaterSport
+ if_effect EFFECT_CALM_MIND, AI_CV_SpDefUp
+ if_effect EFFECT_DRAGON_DANCE, AI_CV_DragonDance
+ end
+
+AI_CV_Sleep: @ 82DCA92
+ if_has_move_with_effect AI_TARGET, EFFECT_DREAM_EATER, AI_CV_SleepEncourageSlpDamage
+ if_has_move_with_effect AI_TARGET, EFFECT_NIGHTMARE, AI_CV_SleepEncourageSlpDamage
+ goto AI_CV_Sleep_End
+
+AI_CV_SleepEncourageSlpDamage: @ 82DCAA5
+ if_random_less_than 128, AI_CV_Sleep_End
score +1
-BattleAIScript_82DCAAD:
+AI_CV_Sleep_End: @ 82DCAAD
end
-BattleAIScript_82DCAAE:
- if_type_effectiveness AI_EFFECTIVENESS_x0_5, BattleAIScript_82DCABF
- if_type_effectiveness AI_EFFECTIVENESS_x0_25, BattleAIScript_82DCABF
- goto BattleAIScript_82DCAC7
+AI_CV_Absorb: @ 82DCAAE
+ if_type_effectiveness AI_EFFECTIVENESS_x0_5, AI_CV_AbsorbEncourageMaybe
+ if_type_effectiveness AI_EFFECTIVENESS_x0_25, AI_CV_AbsorbEncourageMaybe
+ goto AI_CV_Absorb_End
-BattleAIScript_82DCABF:
- if_random_less_than 50, BattleAIScript_82DCAC7
+AI_CV_AbsorbEncourageMaybe: @ 82DCABF
+ if_random_less_than 50, AI_CV_Absorb_End
score -3
-BattleAIScript_82DCAC7:
+AI_CV_Absorb_End: @ 82DCAC7
end
-BattleAIScript_82DCAC8:
- if_stat_level_less_than AI_TARGET, STAT_EVASION, 7, BattleAIScript_82DCAE2
+AI_CV_SelfKO: @ 82DCAC8
+ if_stat_level_less_than AI_TARGET, STAT_EVASION, 7, AI_CV_SelfKO_Encourage1
score -1
- if_stat_level_less_than AI_TARGET, STAT_EVASION, 10, BattleAIScript_82DCAE2
- if_random_less_than 128, BattleAIScript_82DCAE2
+ if_stat_level_less_than AI_TARGET, STAT_EVASION, 10, AI_CV_SelfKO_Encourage1
+ if_random_less_than 128, AI_CV_SelfKO_Encourage1
score -1
-BattleAIScript_82DCAE2:
- if_hp_less_than AI_USER, 80, BattleAIScript_82DCAFA
- if_target_faster BattleAIScript_82DCAFA
- if_random_less_than 50, BattleAIScript_82DCB25
+AI_CV_SelfKO_Encourage1: @ 82DCAE2
+ if_hp_less_than AI_USER, 80, AI_CV_SelfKO_Encourage2
+ if_target_faster AI_CV_SelfKO_Encourage2
+ if_random_less_than 50, AI_CV_SelfKO_End
goto Score_Minus3
-BattleAIScript_82DCAFA:
- if_hp_more_than AI_USER, 50, BattleAIScript_82DCB1D
- if_random_less_than 128, BattleAIScript_82DCB09
+AI_CV_SelfKO_Encourage2: @ 82DCAFA
+ if_hp_more_than AI_USER, 50, AI_CV_SelfKO_Encourage4
+ if_random_less_than 128, AI_CV_SelfKO_Encourage3
score +1
-BattleAIScript_82DCB09:
- if_hp_more_than AI_USER, 30, BattleAIScript_82DCB25
- if_random_less_than 50, BattleAIScript_82DCB25
+AI_CV_SelfKO_Encourage3: @ 82DCB09
+ if_hp_more_than AI_USER, 30, AI_CV_SelfKO_End
+ if_random_less_than 50, AI_CV_SelfKO_End
score +1
- goto BattleAIScript_82DCB25
+ goto AI_CV_SelfKO_End
-BattleAIScript_82DCB1D:
- if_random_less_than 50, BattleAIScript_82DCB25
+AI_CV_SelfKO_Encourage4: @ 82DCB1D
+ if_random_less_than 50, AI_CV_SelfKO_End
score -1
-BattleAIScript_82DCB25:
+AI_CV_SelfKO_End: @ 82DCB25
end
-BattleAIScript_82DCB26:
- if_type_effectiveness AI_EFFECTIVENESS_x0_25, BattleAIScript_82DCB37
- if_type_effectiveness AI_EFFECTIVENESS_x0_5, BattleAIScript_82DCB37
- goto BattleAIScript_82DCB39
+AI_CV_DreamEater: @ 82DCB26
+ if_type_effectiveness AI_EFFECTIVENESS_x0_25, AI_CV_DreamEater_ScoreDown1
+ if_type_effectiveness AI_EFFECTIVENESS_x0_5, AI_CV_DreamEater_ScoreDown1
+ goto AI_CV_DreamEater_End
-BattleAIScript_82DCB37:
+AI_CV_DreamEater_ScoreDown1: @ 82DCB37
score -1
-BattleAIScript_82DCB39:
+AI_CV_DreamEater_End: @ 82DCB39
end
-BattleAIScript_82DCB3A:
- if_target_faster BattleAIScript_82DCB58
+AI_CV_MirrorMove: @ 82DCB3A
+ if_target_faster AI_CV_MirrorMove2
get_last_used_bank_move AI_TARGET
- if_not_in_hwords sMovesTable_82DCB6C, BattleAIScript_82DCB58
- if_random_less_than 128, BattleAIScript_82DCB6B
+ if_not_in_hwords AI_CV_MirrorMove_EncouragedMovesToMirror, AI_CV_MirrorMove2
+ if_random_less_than 128, AI_CV_MirrorMove_End
score +2
- goto BattleAIScript_82DCB6B
+ goto AI_CV_MirrorMove_End
-BattleAIScript_82DCB58:
+AI_CV_MirrorMove2: @ 82DCB58
get_last_used_bank_move AI_TARGET
- if_in_hwords sMovesTable_82DCB6C, BattleAIScript_82DCB6B
- if_random_less_than 80, BattleAIScript_82DCB6B
+ if_in_hwords AI_CV_MirrorMove_EncouragedMovesToMirror, AI_CV_MirrorMove_End
+ if_random_less_than 80, AI_CV_MirrorMove_End
score -1
-BattleAIScript_82DCB6B:
+AI_CV_MirrorMove_End: @ 82DCB6B
end
-sMovesTable_82DCB6C:
+AI_CV_MirrorMove_EncouragedMovesToMirror: @ 82DCB6C
.2byte MOVE_SLEEP_POWDER
.2byte MOVE_LOVELY_KISS
.2byte MOVE_SPORE
@@ -905,63 +905,63 @@ sMovesTable_82DCB6C:
.2byte MOVE_SKILL_SWAP
.2byte -1
-BattleAIScript_82DCBBC:
- if_stat_level_less_than AI_USER, STAT_ATK, 9, BattleAIScript_82DCBD1
- if_random_less_than 100, BattleAIScript_82DCBE0
+AI_CV_AttackUp: @ 82DCBBC
+ if_stat_level_less_than AI_USER, STAT_ATK, 9, AI_CV_AttackUp2
+ if_random_less_than 100, AI_CV_AttackUp3
score -1
- goto BattleAIScript_82DCBE0
+ goto AI_CV_AttackUp3
-BattleAIScript_82DCBD1:
- if_hp_not_equal AI_USER, 100, BattleAIScript_82DCBE0
- if_random_less_than 128, BattleAIScript_82DCBE0
+AI_CV_AttackUp2: @ 82DCBD1
+ if_hp_not_equal AI_USER, 100, AI_CV_AttackUp3
+ if_random_less_than 128, AI_CV_AttackUp3
score +2
-BattleAIScript_82DCBE0:
- if_hp_more_than AI_USER, 70, BattleAIScript_82DCBF6
- if_hp_less_than AI_USER, 40, BattleAIScript_82DCBF4
- if_random_less_than 40, BattleAIScript_82DCBF6
+AI_CV_AttackUp3: @ 82DCBE0
+ if_hp_more_than AI_USER, 70, AI_CV_AttackUp_End
+ if_hp_less_than AI_USER, 40, AI_CV_AttackUp_ScoreDown2
+ if_random_less_than 40, AI_CV_AttackUp_End
-BattleAIScript_82DCBF4:
+AI_CV_AttackUp_ScoreDown2: @ 82DCBF4
score -2
-BattleAIScript_82DCBF6:
+AI_CV_AttackUp_End: @ 82DCBF6
end
-BattleAIScript_82DCBF7:
- if_stat_level_less_than AI_USER, STAT_DEF, 9, BattleAIScript_82DCC0C
- if_random_less_than 100, BattleAIScript_82DCC1B
+AI_CV_DefenseUp: @ 82DCBF7
+ if_stat_level_less_than AI_USER, STAT_DEF, 9, AI_CV_DefenseUp2
+ if_random_less_than 100, AI_CV_DefenseUp3
score -1
- goto BattleAIScript_82DCC1B
+ goto AI_CV_DefenseUp3
-BattleAIScript_82DCC0C:
- if_hp_not_equal AI_USER, 100, BattleAIScript_82DCC1B
- if_random_less_than 128, BattleAIScript_82DCC1B
+AI_CV_DefenseUp2: @ 82DCC0C
+ if_hp_not_equal AI_USER, 100, AI_CV_DefenseUp3
+ if_random_less_than 128, AI_CV_DefenseUp3
score +2
-BattleAIScript_82DCC1B:
- if_hp_less_than AI_USER, 70, BattleAIScript_82DCC28
- if_random_less_than 200, BattleAIScript_82DCC52
+AI_CV_DefenseUp3: @ 82DCC1B
+ if_hp_less_than AI_USER, 70, AI_CV_DefenseUp4
+ if_random_less_than 200, AI_CV_DefenseUp_End
-BattleAIScript_82DCC28:
- if_hp_less_than AI_USER, 40, BattleAIScript_82DCC50
+AI_CV_DefenseUp4: @ 82DCC28
+ if_hp_less_than AI_USER, 40, AI_CV_DefenseUp_ScoreDown2
get_last_used_bank_move AI_TARGET
get_move_power_from_result
- if_equal 0, BattleAIScript_82DCC4A
+ if_equal 0, AI_CV_DefenseUp5
get_last_used_bank_move AI_TARGET
get_move_type_from_result
- if_not_in_bytes sTypesTable_82DCC53, BattleAIScript_82DCC50
- if_random_less_than 60, BattleAIScript_82DCC52
+ if_not_in_bytes AI_CV_DefenseUp_PhysicalTypes, AI_CV_DefenseUp_ScoreDown2
+ if_random_less_than 60, AI_CV_DefenseUp_End
-BattleAIScript_82DCC4A:
- if_random_less_than 60, BattleAIScript_82DCC52
+AI_CV_DefenseUp5: @ 82DCC4A
+ if_random_less_than 60, AI_CV_DefenseUp_End
-BattleAIScript_82DCC50:
+AI_CV_DefenseUp_ScoreDown2: @ 82DCC50
score -2
-BattleAIScript_82DCC52:
+AI_CV_DefenseUp_End: @ 82DCC52
end
-sTypesTable_82DCC53:
+AI_CV_DefenseUp_PhysicalTypes: @ 82DCC53
.byte TYPE_NORMAL
.byte TYPE_FIGHTING
.byte TYPE_POISON
@@ -973,75 +973,75 @@ sTypesTable_82DCC53:
.byte TYPE_STEEL
.byte -1
-BattleAIScript_82DCC5D:
- if_target_faster BattleAIScript_82DCC6A
+AI_CV_SpeedUp: @ 82DCC5D
+ if_target_faster AI_CV_SpeedUp2
score -3
- goto BattleAIScript_82DCC72
+ goto AI_CV_SpeedUp_End
-BattleAIScript_82DCC6A:
- if_random_less_than 70, BattleAIScript_82DCC72
+AI_CV_SpeedUp2: @ 82DCC6A
+ if_random_less_than 70, AI_CV_SpeedUp_End
score +3
-BattleAIScript_82DCC72:
+AI_CV_SpeedUp_End: @ 82DCC72
end
-BattleAIScript_82DCC73:
- if_stat_level_less_than AI_USER, STAT_SPATK, 9, BattleAIScript_82DCC88
- if_random_less_than 100, BattleAIScript_82DCC97
+AI_CV_SpAtkUp: @ 82DCC73
+ if_stat_level_less_than AI_USER, STAT_SPATK, 9, AI_CV_SpAtkUp2
+ if_random_less_than 100, AI_CV_SpAtkUp3
score -1
- goto BattleAIScript_82DCC97
+ goto AI_CV_SpAtkUp3
-BattleAIScript_82DCC88:
- if_hp_not_equal AI_USER, 100, BattleAIScript_82DCC97
- if_random_less_than 128, BattleAIScript_82DCC97
+AI_CV_SpAtkUp2: @ 82DCC88
+ if_hp_not_equal AI_USER, 100, AI_CV_SpAtkUp3
+ if_random_less_than 128, AI_CV_SpAtkUp3
score +2
-BattleAIScript_82DCC97:
- if_hp_more_than AI_USER, 70, BattleAIScript_82DCCAD
- if_hp_less_than AI_USER, 40, BattleAIScript_82DCCAB
- if_random_less_than 70, BattleAIScript_82DCCAD
+AI_CV_SpAtkUp3: @ 82DCC97
+ if_hp_more_than AI_USER, 70, AI_CV_SpAtkUp_End
+ if_hp_less_than AI_USER, 40, AI_CV_SpAtkUp_ScoreDown2
+ if_random_less_than 70, AI_CV_SpAtkUp_End
-BattleAIScript_82DCCAB:
+AI_CV_SpAtkUp_ScoreDown2: @ 82DCCAB
score -2
-BattleAIScript_82DCCAD:
+AI_CV_SpAtkUp_End: @ 82DCCAD
end
-BattleAIScript_82DCCAE:
- if_stat_level_less_than AI_USER, STAT_SPDEF, 9, BattleAIScript_82DCCC3
- if_random_less_than 100, BattleAIScript_82DCCD2
+AI_CV_SpDefUp: @ 82DCCAE
+ if_stat_level_less_than AI_USER, STAT_SPDEF, 9, AI_CV_SpDefUp2
+ if_random_less_than 100, AI_CV_SpDefUp3
score -1
- goto BattleAIScript_82DCCD2
+ goto AI_CV_SpDefUp3
-BattleAIScript_82DCCC3:
- if_hp_not_equal AI_USER, 100, BattleAIScript_82DCCD2
- if_random_less_than 128, BattleAIScript_82DCCD2
+AI_CV_SpDefUp2: @ 82DCCC3
+ if_hp_not_equal AI_USER, 100, AI_CV_SpDefUp3
+ if_random_less_than 128, AI_CV_SpDefUp3
score +2
-BattleAIScript_82DCCD2:
- if_hp_less_than AI_USER, 70, BattleAIScript_82DCCDF
- if_random_less_than 200, BattleAIScript_82DCD09
+AI_CV_SpDefUp3: @ 82DCCD2
+ if_hp_less_than AI_USER, 70, AI_CV_SpDefUp4
+ if_random_less_than 200, AI_CV_SpDefUp_End
-BattleAIScript_82DCCDF:
- if_hp_less_than AI_USER, 40, BattleAIScript_82DCD07
+AI_CV_SpDefUp4: @ 82DCCDF
+ if_hp_less_than AI_USER, 40, AI_CV_SpDefUp_ScoreDown2
get_last_used_bank_move AI_TARGET
get_move_power_from_result
- if_equal 0, BattleAIScript_82DCD01
+ if_equal 0, AI_CV_SpDefUp5
get_last_used_bank_move AI_TARGET
get_move_type_from_result
- if_in_bytes sTypesTable_82DCD0A, BattleAIScript_82DCD07
- if_random_less_than 60, BattleAIScript_82DCD09
+ if_in_bytes AI_CV_SpDefUp_PhysicalTypes, AI_CV_SpDefUp_ScoreDown2
+ if_random_less_than 60, AI_CV_SpDefUp_End
-BattleAIScript_82DCD01:
- if_random_less_than 60, BattleAIScript_82DCD09
+AI_CV_SpDefUp5: @ 82DCD01
+ if_random_less_than 60, AI_CV_SpDefUp_End
-BattleAIScript_82DCD07:
+AI_CV_SpDefUp_ScoreDown2: @ 82DCD07
score -2
-BattleAIScript_82DCD09:
+AI_CV_SpDefUp_End: @ 82DCD09
end
-sTypesTable_82DCD0A:
+AI_CV_SpDefUp_PhysicalTypes: @ 82DCD0A
.byte TYPE_NORMAL
.byte TYPE_FIGHTING
.byte TYPE_POISON
@@ -1053,109 +1053,109 @@ sTypesTable_82DCD0A:
.byte TYPE_STEEL
.byte -1
-BattleAIScript_82DCD14:
- if_stat_level_less_than AI_USER, STAT_ACC, 9, BattleAIScript_82DCD24
- if_random_less_than 50, BattleAIScript_82DCD24
+AI_CV_AccuracyUp:
+ if_stat_level_less_than AI_USER, STAT_ACC, 9, AI_CV_AccuracyUp2
+ if_random_less_than 50, AI_CV_AccuracyUp2
score -2
-BattleAIScript_82DCD24:
- if_hp_more_than AI_USER, 70, BattleAIScript_82DCD2D
+AI_CV_AccuracyUp2:
+ if_hp_more_than AI_USER, 70, AI_CV_AccuracyUp_End
score -2
-BattleAIScript_82DCD2D:
+AI_CV_AccuracyUp_End:
end
-BattleAIScript_82DCD2E:
- if_hp_less_than AI_USER, 90, BattleAIScript_82DCD3D
- if_random_less_than 100, BattleAIScript_82DCD3D
+AI_CV_EvasionUp:
+ if_hp_less_than AI_USER, 90, AI_CV_EvasionUp2
+ if_random_less_than 100, AI_CV_EvasionUp2
score +3
-BattleAIScript_82DCD3D:
- if_stat_level_less_than AI_USER, STAT_EVASION, 9, BattleAIScript_82DCD4D
- if_random_less_than 128, BattleAIScript_82DCD4D
+AI_CV_EvasionUp2:
+ if_stat_level_less_than AI_USER, STAT_EVASION, 9, AI_CV_EvasionUp3
+ if_random_less_than 128, AI_CV_EvasionUp3
score -1
-BattleAIScript_82DCD4D:
- if_not_status AI_TARGET, STATUS1_TOXIC_POISON, BattleAIScript_82DCD6C
- if_hp_more_than AI_USER, 50, BattleAIScript_82DCD64
- if_random_less_than 80, BattleAIScript_82DCD6C
+AI_CV_EvasionUp3:
+ if_not_status AI_TARGET, STATUS1_TOXIC_POISON, AI_CV_EvasionUp5
+ if_hp_more_than AI_USER, 50, AI_CV_EvasionUp4
+ if_random_less_than 80, AI_CV_EvasionUp5
-BattleAIScript_82DCD64:
- if_random_less_than 50, BattleAIScript_82DCD6C
+AI_CV_EvasionUp4:
+ if_random_less_than 50, AI_CV_EvasionUp5
score +3
-BattleAIScript_82DCD6C:
- if_not_status3 AI_TARGET, STATUS3_LEECHSEED, BattleAIScript_82DCD7E
- if_random_less_than 70, BattleAIScript_82DCD7E
+AI_CV_EvasionUp5:
+ if_not_status3 AI_TARGET, STATUS3_LEECHSEED, AI_CV_EvasionUp6
+ if_random_less_than 70, AI_CV_EvasionUp6
score +3
-BattleAIScript_82DCD7E:
- if_not_status3 AI_USER, STATUS3_ROOTED, BattleAIScript_82DCD90
- if_random_less_than 128, BattleAIScript_82DCD90
+AI_CV_EvasionUp6:
+ if_not_status3 AI_USER, STATUS3_ROOTED, AI_CV_EvasionUp7
+ if_random_less_than 128, AI_CV_EvasionUp7
score +2
-BattleAIScript_82DCD90:
- if_not_status2 AI_TARGET, STATUS2_CURSED, BattleAIScript_82DCDA2
- if_random_less_than 70, BattleAIScript_82DCDA2
+AI_CV_EvasionUp7:
+ if_not_status2 AI_TARGET, STATUS2_CURSED, AI_CV_EvasionUp8
+ if_random_less_than 70, AI_CV_EvasionUp8
score +3
-BattleAIScript_82DCDA2:
- if_hp_more_than AI_USER, 70, 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
+AI_CV_EvasionUp8:
+ if_hp_more_than AI_USER, 70, AI_CV_EvasionUp_End
+ if_stat_level_equal AI_USER, STAT_EVASION, 6, AI_CV_EvasionUp_End
+ if_hp_less_than AI_USER, 40, AI_CV_EvasionUp_ScoreDown2
+ if_hp_less_than AI_TARGET, 40, AI_CV_EvasionUp_ScoreDown2
+ if_random_less_than 70, AI_CV_EvasionUp_End
-BattleAIScript_82DCDC5:
+AI_CV_EvasionUp_ScoreDown2:
score -2
-BattleAIScript_82DCDC7:
+AI_CV_EvasionUp_End:
end
-BattleAIScript_82DCDC8:
- 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
+AI_CV_AlwaysHit:
+ if_stat_level_more_than AI_TARGET, STAT_EVASION, 10, AI_CV_AlwaysHit_ScoreUp1
+ if_stat_level_less_than AI_USER, STAT_ACC, 2, AI_CV_AlwaysHit_ScoreUp1
+ if_stat_level_more_than AI_TARGET, STAT_EVASION, 8, AI_CV_AlwaysHit2
+ if_stat_level_less_than AI_USER, STAT_ACC, 4, AI_CV_AlwaysHit2
+ goto AI_CV_AlwaysHit_End
-BattleAIScript_82DCDED:
+AI_CV_AlwaysHit_ScoreUp1:
score +1
-BattleAIScript_82DCDEF:
- if_random_less_than 100, BattleAIScript_82DCDF7
+AI_CV_AlwaysHit2:
+ if_random_less_than 100, AI_CV_AlwaysHit_End
score +1
-BattleAIScript_82DCDF7:
+AI_CV_AlwaysHit_End:
end
-BattleAIScript_82DCDF8:
- if_stat_level_equal AI_TARGET, STAT_ATK, 6, BattleAIScript_82DCE1B
+AI_CV_AttackDown: @ 82DCDF8
+ if_stat_level_equal AI_TARGET, STAT_ATK, 6, AI_CV_AttackDown3
score -1
- if_hp_more_than AI_USER, 90, BattleAIScript_82DCE0B
+ if_hp_more_than AI_USER, 90, AI_CV_AttackDown2
score -1
-BattleAIScript_82DCE0B:
- if_stat_level_more_than AI_TARGET, STAT_ATK, 3, BattleAIScript_82DCE1B
- if_random_less_than 50, BattleAIScript_82DCE1B
+AI_CV_AttackDown2: @ 82DCE0B
+ if_stat_level_more_than AI_TARGET, STAT_ATK, 3, AI_CV_AttackDown3
+ if_random_less_than 50, AI_CV_AttackDown3
score -2
-BattleAIScript_82DCE1B:
- if_hp_more_than AI_TARGET, 70, BattleAIScript_82DCE24
+AI_CV_AttackDown3: @ 82DCE1B
+ if_hp_more_than AI_TARGET, 70, AI_CV_AttackDown4
score -2
-BattleAIScript_82DCE24:
+AI_CV_AttackDown4: @ 82DCE24
get_target_type1
- if_in_bytes sTypesTable_82DCE43, BattleAIScript_82DCE42
+ if_in_bytes AI_CV_AttackDown_UnknownTypeList, AI_CV_AttackDown_End
get_target_type2
- if_in_bytes sTypesTable_82DCE43, BattleAIScript_82DCE42
- if_random_less_than 50, BattleAIScript_82DCE42
+ if_in_bytes AI_CV_AttackDown_UnknownTypeList, AI_CV_AttackDown_End
+ if_random_less_than 50, AI_CV_AttackDown_End
score -2
-BattleAIScript_82DCE42:
+AI_CV_AttackDown_End: @ 82DCE42
end
-sTypesTable_82DCE43:
+AI_CV_AttackDown_UnknownTypeList:
.byte TYPE_NORMAL
.byte TYPE_FIGHTING
.byte TYPE_GROUND
@@ -1164,66 +1164,66 @@ sTypesTable_82DCE43:
.byte TYPE_STEEL
.byte -1
-BattleAIScript_82DCE4A:
- if_hp_less_than AI_USER, 70, BattleAIScript_82DCE59
- if_stat_level_more_than AI_TARGET, STAT_DEF, 3, BattleAIScript_82DCE61
+AI_CV_DefenseDown:
+ if_hp_less_than AI_USER, 70, AI_CV_DefenseDown2
+ if_stat_level_more_than AI_TARGET, STAT_DEF, 3, AI_CV_DefenseDown3
-BattleAIScript_82DCE59:
- if_random_less_than 50, BattleAIScript_82DCE61
+AI_CV_DefenseDown2:
+ if_random_less_than 50, AI_CV_DefenseDown3
score -2
-BattleAIScript_82DCE61:
- if_hp_more_than AI_TARGET, 70, BattleAIScript_82DCE6A
+AI_CV_DefenseDown3:
+ if_hp_more_than AI_TARGET, 70, AI_CV_DefenseDown_End
score -2
-BattleAIScript_82DCE6A:
+AI_CV_DefenseDown_End:
end
-BattleAIScript_82DCE6B:
- if_move MOVE_ICY_WIND, BattleAIScript_82DCE81
- if_move MOVE_ROCK_TOMB, BattleAIScript_82DCE81
- if_move MOVE_MUD_SHOT, BattleAIScript_82DCE81
+AI_CV_SpeedDownFromChance: @ 82DCE6B
+ if_move MOVE_ICY_WIND, AI_CV_SpeedDown
+ if_move MOVE_ROCK_TOMB, AI_CV_SpeedDown
+ if_move MOVE_MUD_SHOT, AI_CV_SpeedDown
end
-BattleAIScript_82DCE81:
- if_target_faster BattleAIScript_82DCE8E
+AI_CV_SpeedDown: @ 82DCE81
+ if_target_faster AI_CV_SpeedDown2
score -3
- goto BattleAIScript_82DCE96
+ goto AI_CV_SpeedDown_End
-BattleAIScript_82DCE8E:
- if_random_less_than 70, BattleAIScript_82DCE96
+AI_CV_SpeedDown2: @ 82DCE8E
+ if_random_less_than 70, AI_CV_SpeedDown_End
score +2
-BattleAIScript_82DCE96:
+AI_CV_SpeedDown_End: @ 82DCE96
end
-BattleAIScript_82DCE97:
- if_stat_level_equal AI_TARGET, STAT_ATK, 6, BattleAIScript_82DCEBA
+AI_CV_SpAtkDown:
+ if_stat_level_equal AI_TARGET, STAT_ATK, 6, AI_CV_SpAtkDown3
score -1
- if_hp_more_than AI_USER, 90, BattleAIScript_82DCEAA
+ if_hp_more_than AI_USER, 90, AI_CV_SpAtkDown2
score -1
-BattleAIScript_82DCEAA:
- if_stat_level_more_than AI_TARGET, STAT_SPATK, 3, BattleAIScript_82DCEBA
- if_random_less_than 50, BattleAIScript_82DCEBA
+AI_CV_SpAtkDown2:
+ if_stat_level_more_than AI_TARGET, STAT_SPATK, 3, AI_CV_SpAtkDown3
+ if_random_less_than 50, AI_CV_SpAtkDown3
score -2
-BattleAIScript_82DCEBA:
- if_hp_more_than AI_TARGET, 70, BattleAIScript_82DCEC3
+AI_CV_SpAtkDown3:
+ if_hp_more_than AI_TARGET, 70, AI_CV_SpAtkDown4
score -2
-BattleAIScript_82DCEC3:
+AI_CV_SpAtkDown4:
get_target_type1
- if_in_bytes sTypesTable_82DCEE2, BattleAIScript_82DCEE1
+ if_in_bytes AI_CV_SpAtkDown_SpecialTypeList, AI_CV_SpAtkDown_End
get_target_type2
- if_in_bytes sTypesTable_82DCEE2, BattleAIScript_82DCEE1
- if_random_less_than 50, BattleAIScript_82DCEE1
+ if_in_bytes AI_CV_SpAtkDown_SpecialTypeList, AI_CV_SpAtkDown_End
+ if_random_less_than 50, AI_CV_SpAtkDown_End
score -2
-BattleAIScript_82DCEE1:
+AI_CV_SpAtkDown_End: @ 82DCEE1
end
-sTypesTable_82DCEE2:
+AI_CV_SpAtkDown_SpecialTypeList: @ 82DCEE2
.byte TYPE_FIRE
.byte TYPE_WATER
.byte TYPE_GRASS
@@ -1234,236 +1234,236 @@ sTypesTable_82DCEE2:
.byte TYPE_DARK
.byte -1
-BattleAIScript_82DCEEB:
- if_hp_less_than AI_USER, 70, BattleAIScript_82DCEFA
- if_stat_level_more_than AI_TARGET, STAT_SPDEF, 3, BattleAIScript_82DCF02
+AI_CV_SpDefDown: @ 82DCEEB
+ if_hp_less_than AI_USER, 70, AI_CV_SpDefDown2
+ if_stat_level_more_than AI_TARGET, STAT_SPDEF, 3, AI_CV_SpDefDown3
-BattleAIScript_82DCEFA:
- if_random_less_than 50, BattleAIScript_82DCF02
+AI_CV_SpDefDown2: @ 82DCEFA
+ if_random_less_than 50, AI_CV_SpDefDown3
score -2
-BattleAIScript_82DCF02:
- if_hp_more_than AI_TARGET, 70, BattleAIScript_82DCF0B
+AI_CV_SpDefDown3: @ 82DCF02
+ if_hp_more_than AI_TARGET, 70, AI_CV_SpDefDown_End
score -2
-BattleAIScript_82DCF0B:
+AI_CV_SpDefDown_End: @ 82DCF0B
end
-BattleAIScript_82DCF0C:
- if_hp_less_than AI_USER, 70, BattleAIScript_82DCF1A
- if_hp_more_than AI_TARGET, 70, BattleAIScript_82DCF22
+AI_CV_AccuracyDown: @ 82DCF0C
+ if_hp_less_than AI_USER, 70, AI_CV_AccuracyDown2
+ if_hp_more_than AI_TARGET, 70, AI_CV_AccuracyDown3
-BattleAIScript_82DCF1A:
- if_random_less_than 100, BattleAIScript_82DCF22
+AI_CV_AccuracyDown2:
+ if_random_less_than 100, AI_CV_AccuracyDown3
score -1
-BattleAIScript_82DCF22:
- if_stat_level_more_than AI_USER, STAT_ACC, 4, BattleAIScript_82DCF32
- if_random_less_than 80, BattleAIScript_82DCF32
+AI_CV_AccuracyDown3:
+ if_stat_level_more_than AI_USER, STAT_ACC, 4, AI_CV_AccuracyDown4
+ if_random_less_than 80, AI_CV_AccuracyDown4
score -2
-BattleAIScript_82DCF32:
- if_not_status AI_TARGET, STATUS1_TOXIC_POISON, BattleAIScript_82DCF44
- if_random_less_than 70, BattleAIScript_82DCF44
+AI_CV_AccuracyDown4:
+ if_not_status AI_TARGET, STATUS1_TOXIC_POISON, AI_CV_AccuracyDown5
+ if_random_less_than 70, AI_CV_AccuracyDown5
score +2
-BattleAIScript_82DCF44:
- if_not_status3 AI_TARGET, STATUS3_LEECHSEED, BattleAIScript_82DCF56
- if_random_less_than 70, BattleAIScript_82DCF56
+AI_CV_AccuracyDown5:
+ if_not_status3 AI_TARGET, STATUS3_LEECHSEED, AI_CV_AccuracyDown6
+ if_random_less_than 70, AI_CV_AccuracyDown6
score +2
-BattleAIScript_82DCF56:
- if_not_status3 AI_USER, STATUS3_ROOTED, BattleAIScript_82DCF68
- if_random_less_than 128, BattleAIScript_82DCF68
+AI_CV_AccuracyDown6:
+ if_not_status3 AI_USER, STATUS3_ROOTED, AI_CV_AccuracyDown7
+ if_random_less_than 128, AI_CV_AccuracyDown7
score +1
-BattleAIScript_82DCF68:
- if_not_status2 AI_TARGET, STATUS2_CURSED, BattleAIScript_82DCF7A
- if_random_less_than 70, BattleAIScript_82DCF7A
+AI_CV_AccuracyDown7:
+ if_not_status2 AI_TARGET, STATUS2_CURSED, AI_CV_AccuracyDown8
+ if_random_less_than 70, AI_CV_AccuracyDown8
score +2
-BattleAIScript_82DCF7A:
- if_hp_more_than AI_USER, 70, 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
+AI_CV_AccuracyDown8:
+ if_hp_more_than AI_USER, 70, AI_CV_AccuracyDown_End
+ if_stat_level_equal AI_TARGET, STAT_ACC, 6, AI_CV_AccuracyDown_End
+ if_hp_less_than AI_USER, 40, AI_CV_AccuracyDown_ScoreDown2
+ if_hp_less_than AI_TARGET, 40, AI_CV_AccuracyDown_ScoreDown2
+ if_random_less_than 70, AI_CV_AccuracyDown_End
-BattleAIScript_82DCF9D:
+AI_CV_AccuracyDown_ScoreDown2:
score -2
-BattleAIScript_82DCF9F:
+AI_CV_AccuracyDown_End:
end
-BattleAIScript_82DCFA0:
- if_hp_less_than AI_USER, 70, BattleAIScript_82DCFAF
- if_stat_level_more_than AI_TARGET, STAT_EVASION, 3, BattleAIScript_82DCFB7
+AI_CV_EvasionDown:
+ if_hp_less_than AI_USER, 70, AI_CV_EvasionDown2
+ if_stat_level_more_than AI_TARGET, STAT_EVASION, 3, AI_CV_EvasionDown3
-BattleAIScript_82DCFAF:
- if_random_less_than 50, BattleAIScript_82DCFB7
+AI_CV_EvasionDown2:
+ if_random_less_than 50, AI_CV_EvasionDown3
score -2
-BattleAIScript_82DCFB7:
- if_hp_more_than AI_TARGET, 70, BattleAIScript_82DCFC0
+AI_CV_EvasionDown3:
+ if_hp_more_than AI_TARGET, 70, AI_CV_EvasionDown_End
score -2
-BattleAIScript_82DCFC0:
+AI_CV_EvasionDown_End:
end
-BattleAIScript_82DCFC1:
- 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
+AI_CV_Haze:
+ if_stat_level_more_than AI_USER, STAT_ATK, 8, AI_CV_Haze2
+ if_stat_level_more_than AI_USER, STAT_DEF, 8, AI_CV_Haze2
+ if_stat_level_more_than AI_USER, STAT_SPATK, 8, AI_CV_Haze2
+ if_stat_level_more_than AI_USER, STAT_SPDEF, 8, AI_CV_Haze2
+ if_stat_level_more_than AI_USER, STAT_EVASION, 8, AI_CV_Haze2
+ if_stat_level_less_than AI_TARGET, STAT_ATK, 4, AI_CV_Haze2
+ if_stat_level_less_than AI_TARGET, STAT_DEF, 4, AI_CV_Haze2
+ if_stat_level_less_than AI_TARGET, STAT_SPATK, 4, AI_CV_Haze2
+ if_stat_level_less_than AI_TARGET, STAT_SPDEF, 4, AI_CV_Haze2
+ if_stat_level_less_than AI_TARGET, STAT_ACC, 4, AI_CV_Haze2
+ goto AI_CV_Haze3
-BattleAIScript_82DD016:
- if_random_less_than 50, BattleAIScript_82DD01E
+AI_CV_Haze2:
+ if_random_less_than 50, AI_CV_Haze3
score -3
-BattleAIScript_82DD01E:
- 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
+AI_CV_Haze3:
+ if_stat_level_more_than AI_TARGET, STAT_ATK, 8, AI_CV_Haze4
+ if_stat_level_more_than AI_TARGET, STAT_DEF, 8, AI_CV_Haze4
+ if_stat_level_more_than AI_TARGET, STAT_SPATK, 8, AI_CV_Haze4
+ if_stat_level_more_than AI_TARGET, STAT_SPDEF, 8, AI_CV_Haze4
+ if_stat_level_more_than AI_TARGET, STAT_EVASION, 8, AI_CV_Haze4
+ if_stat_level_less_than AI_USER, STAT_ATK, 4, AI_CV_Haze4
+ if_stat_level_less_than AI_USER, STAT_DEF, 4, AI_CV_Haze4
+ if_stat_level_less_than AI_USER, STAT_SPATK, 4, AI_CV_Haze4
+ if_stat_level_less_than AI_USER, STAT_SPDEF, 4, AI_CV_Haze4
+ if_stat_level_less_than AI_USER, STAT_ACC, 4, AI_CV_Haze4
+ if_random_less_than 50, AI_CV_Haze_End
score -1
- goto BattleAIScript_82DD083
+ goto AI_CV_Haze_End
-BattleAIScript_82DD07B:
- if_random_less_than 50, BattleAIScript_82DD083
+AI_CV_Haze4:
+ if_random_less_than 50, AI_CV_Haze_End
score +3
-BattleAIScript_82DD083:
+AI_CV_Haze_End:
end
-BattleAIScript_82DD084:
- if_hp_more_than AI_USER, 90, BattleAIScript_82DD08D
+AI_CV_Bide:
+ if_hp_more_than AI_USER, 90, AI_CV_Bide_End
score -2
-BattleAIScript_82DD08D:
+AI_CV_Bide_End:
end
-BattleAIScript_82DD08E:
- 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
+AI_CV_Roar:
+ if_stat_level_more_than AI_TARGET, STAT_ATK, 8, AI_CV_Roar2
+ if_stat_level_more_than AI_TARGET, STAT_DEF, 8, AI_CV_Roar2
+ if_stat_level_more_than AI_TARGET, STAT_SPATK, 8, AI_CV_Roar2
+ if_stat_level_more_than AI_TARGET, STAT_SPDEF, 8, AI_CV_Roar2
+ if_stat_level_more_than AI_TARGET, STAT_EVASION, 8, AI_CV_Roar2
score -3
- goto BattleAIScript_82DD0C5
+ goto AI_CV_Roar_End
-BattleAIScript_82DD0BD:
- if_random_less_than 128, BattleAIScript_82DD0C5
+AI_CV_Roar2:
+ if_random_less_than 128, AI_CV_Roar_End
score +2
-BattleAIScript_82DD0C5:
+AI_CV_Roar_End:
end
-BattleAIScript_82DD0C6:
- if_hp_more_than AI_USER, 90, BattleAIScript_82DD0CF
+AI_CV_Conversion:
+ if_hp_more_than AI_USER, 90, AI_CV_Conversion2
score -2
-BattleAIScript_82DD0CF:
+AI_CV_Conversion2:
get_turn_count
- if_equal 0, BattleAIScript_82DD0DC
+ if_equal 0, AI_CV_Conversion_End
if_random_less_than 200, Score_Minus2
-BattleAIScript_82DD0DC:
+AI_CV_Conversion_End:
end
-BattleAIScript_82DD0DD:
+AI_CV_HealWeather:
get_weather
- if_equal AI_WEATHER_HAIL, BattleAIScript_82DD0F5
- if_equal AI_WEATHER_RAIN, BattleAIScript_82DD0F5
- if_equal AI_WEATHER_SANDSTORM, BattleAIScript_82DD0F5
- goto BattleAIScript_82DD0F7
+ if_equal AI_WEATHER_HAIL, AI_CV_HealWeather_ScoreDown2
+ if_equal AI_WEATHER_RAIN, AI_CV_HealWeather_ScoreDown2
+ if_equal AI_WEATHER_SANDSTORM, AI_CV_HealWeather_ScoreDown2
+ goto AI_CV_Heal
-BattleAIScript_82DD0F5:
+AI_CV_HealWeather_ScoreDown2:
score -2
-BattleAIScript_82DD0F7:
- if_hp_equal AI_USER, 100, BattleAIScript_82DD11F
- if_target_faster BattleAIScript_82DD126
+AI_CV_Heal:
+ if_hp_equal AI_USER, 100, AI_CV_Heal3
+ if_target_faster AI_CV_Heal4
score -8
- goto BattleAIScript_82DD14F
+ goto AI_CV_Heal_End
AI_CV_Heal2:
- if_hp_less_than AI_USER, 50, BattleAIScript_82DD13A
- if_hp_more_than AI_USER, 80, BattleAIScript_82DD11F
- if_random_less_than 70, BattleAIScript_82DD13A
+ if_hp_less_than AI_USER, 50, AI_CV_Heal5
+ if_hp_more_than AI_USER, 80, AI_CV_Heal3
+ if_random_less_than 70, AI_CV_Heal5
-BattleAIScript_82DD11F:
+AI_CV_Heal3:
score -3
- goto BattleAIScript_82DD14F
+ goto AI_CV_Heal_End
-BattleAIScript_82DD126:
- if_hp_less_than AI_USER, 70, BattleAIScript_82DD13A
- if_random_less_than 30, BattleAIScript_82DD13A
+AI_CV_Heal4:
+ if_hp_less_than AI_USER, 70, AI_CV_Heal5
+ if_random_less_than 30, AI_CV_Heal5
score -3
- goto BattleAIScript_82DD14F
+ goto AI_CV_Heal_End
-BattleAIScript_82DD13A:
- if_doesnt_have_move_with_effect AI_TARGET, EFFECT_SNATCH, BattleAIScript_82DD147
- if_random_less_than 100, BattleAIScript_82DD14F
+AI_CV_Heal5:
+ if_doesnt_have_move_with_effect AI_TARGET, EFFECT_SNATCH, AI_CV_Heal6
+ if_random_less_than 100, AI_CV_Heal_End
-BattleAIScript_82DD147:
- if_random_less_than 20, BattleAIScript_82DD14F
+AI_CV_Heal6:
+ if_random_less_than 20, AI_CV_Heal_End
score +2
-BattleAIScript_82DD14F:
+AI_CV_Heal_End:
end
-BattleAIScript_82DD150:
- if_user_has_no_attacking_moves BattleAIScript_82DD173
- if_hp_more_than AI_USER, 50, BattleAIScript_82DD164
- if_random_less_than 50, BattleAIScript_82DD164
+AI_CV_Toxic:
+ if_user_has_no_attacking_moves AI_CV_Toxic3
+ if_hp_more_than AI_USER, 50, AI_CV_Toxic2
+ if_random_less_than 50, AI_CV_Toxic2
score -3
-BattleAIScript_82DD164:
- if_hp_more_than AI_TARGET, 50, BattleAIScript_82DD173
- if_random_less_than 50, BattleAIScript_82DD173
+AI_CV_Toxic2:
+ if_hp_more_than AI_TARGET, 50, AI_CV_Toxic3
+ if_random_less_than 50, AI_CV_Toxic3
score -3
-BattleAIScript_82DD173:
- if_has_move_with_effect AI_USER, EFFECT_SPECIAL_DEFENSE_UP, BattleAIScript_82DD186
- if_has_move_with_effect AI_USER, EFFECT_PROTECT, BattleAIScript_82DD186
- goto BattleAIScript_82DD18E
+AI_CV_Toxic3:
+ if_has_move_with_effect AI_USER, EFFECT_SPECIAL_DEFENSE_UP, AI_CV_Toxic4
+ if_has_move_with_effect AI_USER, EFFECT_PROTECT, AI_CV_Toxic4
+ goto AI_CV_Toxic_End
-BattleAIScript_82DD186:
- if_random_less_than 60, BattleAIScript_82DD18E
+AI_CV_Toxic4:
+ if_random_less_than 60, AI_CV_Toxic_End
score +2
-BattleAIScript_82DD18E:
+AI_CV_Toxic_End:
end
-BattleAIScript_82DD18F:
- if_hp_less_than AI_USER, 50, BattleAIScript_82DD1B2
+AI_CV_LightScreen:
+ if_hp_less_than AI_USER, 50, AI_CV_LightScreen_ScoreDown2
get_target_type1
- if_in_bytes sTypesTable_82DD1B5, BattleAIScript_82DD1B4
+ if_in_bytes AI_CV_LightScreen_SpecialTypeList, AI_CV_LightScreen_End
get_target_type2
- if_in_bytes sTypesTable_82DD1B5, BattleAIScript_82DD1B4
- if_random_less_than 50, BattleAIScript_82DD1B4
+ if_in_bytes AI_CV_LightScreen_SpecialTypeList, AI_CV_LightScreen_End
+ if_random_less_than 50, AI_CV_LightScreen_End
-BattleAIScript_82DD1B2:
+AI_CV_LightScreen_ScoreDown2:
score -2
-BattleAIScript_82DD1B4:
+AI_CV_LightScreen_End:
end
-sTypesTable_82DD1B5:
+AI_CV_LightScreen_SpecialTypeList:
.byte TYPE_FIRE
.byte TYPE_WATER
.byte TYPE_GRASS
@@ -1474,98 +1474,98 @@ sTypesTable_82DD1B5:
.byte TYPE_DARK
.byte -1
-BattleAIScript_82DD1BE:
- if_target_faster BattleAIScript_82DD1ED
- if_hp_not_equal AI_USER, 100, BattleAIScript_82DD1D2
+AI_CV_Rest:
+ if_target_faster AI_CV_Rest4
+ if_hp_not_equal AI_USER, 100, AI_CV_Rest2
score -8
- goto BattleAIScript_82DD21D
+ goto AI_CV_Rest_End
-BattleAIScript_82DD1D2:
- if_hp_less_than AI_USER, 40, BattleAIScript_82DD208
- if_hp_more_than AI_USER, 50, BattleAIScript_82DD1E6
- if_random_less_than 70, BattleAIScript_82DD208
+AI_CV_Rest2:
+ if_hp_less_than AI_USER, 40, AI_CV_Rest6
+ if_hp_more_than AI_USER, 50, AI_CV_Rest3
+ if_random_less_than 70, AI_CV_Rest6
-BattleAIScript_82DD1E6:
+AI_CV_Rest3:
score -3
- goto BattleAIScript_82DD21D
+ goto AI_CV_Rest_End
-BattleAIScript_82DD1ED:
- if_hp_less_than AI_USER, 60, BattleAIScript_82DD208
- if_hp_more_than AI_USER, 70, BattleAIScript_82DD201
- if_random_less_than 50, BattleAIScript_82DD208
+AI_CV_Rest4:
+ if_hp_less_than AI_USER, 60, AI_CV_Rest6
+ if_hp_more_than AI_USER, 70, AI_CV_Rest5
+ if_random_less_than 50, AI_CV_Rest6
-BattleAIScript_82DD201:
+AI_CV_Rest5:
score -3
- goto BattleAIScript_82DD21D
+ goto AI_CV_Rest_End
-BattleAIScript_82DD208:
- if_doesnt_have_move_with_effect AI_TARGET, EFFECT_SNATCH, BattleAIScript_82DD215
- if_random_less_than 50, BattleAIScript_82DD21D
+AI_CV_Rest6:
+ if_doesnt_have_move_with_effect AI_TARGET, EFFECT_SNATCH, AI_CV_Rest7
+ if_random_less_than 50, AI_CV_Rest_End
-BattleAIScript_82DD215:
- if_random_less_than 10, BattleAIScript_82DD21D
+AI_CV_Rest7:
+ if_random_less_than 10, AI_CV_Rest_End
score +3
-BattleAIScript_82DD21D:
+AI_CV_Rest_End:
end
-BattleAIScript_82DD21E:
+AI_CV_OneHitKO:
end
-BattleAIScript_82DD21F:
- if_hp_more_than AI_TARGET, 50, BattleAIScript_82DD228
+AI_CV_SuperFang:
+ if_hp_more_than AI_TARGET, 50, AI_CV_SuperFang_End
score -1
-BattleAIScript_82DD228:
+AI_CV_SuperFang_End:
end
-BattleAIScript_82DD229:
- if_status AI_TARGET, STATUS1_TOXIC_POISON, BattleAIScript_82DD256
- if_status2 AI_TARGET, STATUS2_CURSED, BattleAIScript_82DD256
- if_status3 AI_TARGET, STATUS3_PERISH_SONG, BattleAIScript_82DD256
- if_status2 AI_TARGET, STATUS2_INFATUATION, BattleAIScript_82DD256
- goto BattleAIScript_82DD25E
+AI_CV_Trap:
+ if_status AI_TARGET, STATUS1_TOXIC_POISON, AI_CV_Trap2
+ if_status2 AI_TARGET, STATUS2_CURSED, AI_CV_Trap2
+ if_status3 AI_TARGET, STATUS3_PERISH_SONG, AI_CV_Trap2
+ if_status2 AI_TARGET, STATUS2_INFATUATION, AI_CV_Trap2
+ goto AI_CV_Trap_End
-BattleAIScript_82DD256:
- if_random_less_than 128, BattleAIScript_82DD25E
+AI_CV_Trap2:
+ if_random_less_than 128, AI_CV_Trap_End
score +1
-BattleAIScript_82DD25E:
+AI_CV_Trap_End:
end
-BattleAIScript_82DD25F:
- if_type_effectiveness AI_EFFECTIVENESS_x0_25, BattleAIScript_82DD285
- if_type_effectiveness AI_EFFECTIVENESS_x0_5, BattleAIScript_82DD285
- if_type_effectiveness AI_EFFECTIVENESS_x2, BattleAIScript_82DD27D
- if_type_effectiveness AI_EFFECTIVENESS_x4, BattleAIScript_82DD27D
- if_random_less_than 128, BattleAIScript_82DD285
+AI_CV_HighCrit:
+ if_type_effectiveness AI_EFFECTIVENESS_x0_25, AI_CV_HighCrit_End
+ if_type_effectiveness AI_EFFECTIVENESS_x0_5, AI_CV_HighCrit_End
+ if_type_effectiveness AI_EFFECTIVENESS_x2, AI_CV_HighCrit2
+ if_type_effectiveness AI_EFFECTIVENESS_x4, AI_CV_HighCrit2
+ if_random_less_than 128, AI_CV_HighCrit_End
-BattleAIScript_82DD27D:
- if_random_less_than 128, BattleAIScript_82DD285
+AI_CV_HighCrit2:
+ if_random_less_than 128, AI_CV_HighCrit_End
score +1
-BattleAIScript_82DD285:
+AI_CV_HighCrit_End:
end
BattleAIScript_82DD286:
if_has_move AI_USER, MOVE_PSYCH_UP, BattleAIScript_82DD2B8
-BattleAIScript_82DD28E:
- if_random_less_than 128, BattleAIScript_82DD296
+AI_CV_Flatter:
+ if_random_less_than 128, AI_CV_Confuse
score +1
-BattleAIScript_82DD296:
- if_hp_more_than AI_TARGET, 70, BattleAIScript_82DD2B7
- if_random_less_than 128, BattleAIScript_82DD2A5
+AI_CV_Confuse:
+ if_hp_more_than AI_TARGET, 70, AI_CV_Confuse_End
+ if_random_less_than 128, AI_CV_Confuse2
score -1
-BattleAIScript_82DD2A5:
- if_hp_more_than AI_TARGET, 50, BattleAIScript_82DD2B7
+AI_CV_Confuse2:
+ if_hp_more_than AI_TARGET, 50, AI_CV_Confuse_End
score -1
- if_hp_more_than AI_TARGET, 30, BattleAIScript_82DD2B7
+ if_hp_more_than AI_TARGET, 30, AI_CV_Confuse_End
score -1
-BattleAIScript_82DD2B7:
+AI_CV_Confuse_End:
end
BattleAIScript_82DD2B8:
@@ -1582,21 +1582,21 @@ BattleAIScript_82DD2D0:
BattleAIScript_82DD2D2:
end
-BattleAIScript_82DD2D3:
- if_hp_less_than AI_USER, 50, BattleAIScript_82DD2F6
+AI_CV_Reflect:
+ if_hp_less_than AI_USER, 50, AI_CV_Reflect_ScoreDown2
get_target_type1
- if_in_bytes sTypesTable_82DD2F9, BattleAIScript_82DD2F8
+ if_in_bytes AI_CV_Reflect_PhysicalTypeList, AI_CV_Reflect_End
get_target_type2
- if_in_bytes sTypesTable_82DD2F9, BattleAIScript_82DD2F8
- if_random_less_than 50, BattleAIScript_82DD2F8
+ if_in_bytes AI_CV_Reflect_PhysicalTypeList, AI_CV_Reflect_End
+ if_random_less_than 50, AI_CV_Reflect_End
-BattleAIScript_82DD2F6:
+AI_CV_Reflect_ScoreDown2:
score -2
-BattleAIScript_82DD2F8:
+AI_CV_Reflect_End:
end
-sTypesTable_82DD2F9:
+AI_CV_Reflect_PhysicalTypeList:
.byte TYPE_NORMAL
.byte TYPE_FIGHTING
.byte TYPE_FLYING
@@ -1608,160 +1608,160 @@ sTypesTable_82DD2F9:
.byte TYPE_STEEL
.byte -1
-BattleAIScript_82DD303:
- if_hp_less_than AI_USER, 50, BattleAIScript_82DD311
- if_hp_more_than AI_TARGET, 50, BattleAIScript_82DD313
+AI_CV_Poison:
+ if_hp_less_than AI_USER, 50, AI_CV_Poison_ScoreDown1
+ if_hp_more_than AI_TARGET, 50, AI_CV_Poison_End
-BattleAIScript_82DD311:
+AI_CV_Poison_ScoreDown1:
score -1
-BattleAIScript_82DD313:
+AI_CV_Poison_End:
end
-BattleAIScript_82DD314:
- if_target_faster BattleAIScript_82DD328
- if_hp_more_than AI_USER, 70, BattleAIScript_82DD330
+AI_CV_Paralyze:
+ if_target_faster AI_CV_Paralyze2
+ if_hp_more_than AI_USER, 70, AI_CV_Paralyze_End
score -1
- goto BattleAIScript_82DD330
+ goto AI_CV_Paralyze_End
-BattleAIScript_82DD328:
- if_random_less_than 20, BattleAIScript_82DD330
+AI_CV_Paralyze2:
+ if_random_less_than 20, AI_CV_Paralyze_End
score +3
-BattleAIScript_82DD330:
+AI_CV_Paralyze_End:
end
-BattleAIScript_82DD331:
- if_target_faster BattleAIScript_82DD353
- if_hp_more_than AI_USER, 60, BattleAIScript_82DD353
- if_hp_less_than AI_USER, 40, BattleAIScript_82DD34B
- if_random_less_than 180, BattleAIScript_82DD353
+AI_CV_VitalThrow:
+ if_target_faster AI_CV_VitalThrow_End
+ if_hp_more_than AI_USER, 60, AI_CV_VitalThrow_End
+ if_hp_less_than AI_USER, 40, AI_CV_VitalThrow2
+ if_random_less_than 180, AI_CV_VitalThrow_End
-BattleAIScript_82DD34B:
- if_random_less_than 50, BattleAIScript_82DD353
+AI_CV_VitalThrow2:
+ if_random_less_than 50, AI_CV_VitalThrow_End
score -1
-BattleAIScript_82DD353:
+AI_CV_VitalThrow_End:
end
-BattleAIScript_82DD354:
- if_hp_more_than AI_USER, 90, BattleAIScript_82DD381
- if_hp_more_than AI_USER, 70, BattleAIScript_82DD379
- if_hp_more_than AI_USER, 50, BattleAIScript_82DD371
- if_random_less_than 100, BattleAIScript_82DD371
+AI_CV_Substitute:
+ if_hp_more_than AI_USER, 90, AI_CV_Substitute4
+ if_hp_more_than AI_USER, 70, AI_CV_Substitute3
+ if_hp_more_than AI_USER, 50, AI_CV_Substitute2
+ if_random_less_than 100, AI_CV_Substitute2
score -1
-BattleAIScript_82DD371:
- if_random_less_than 100, BattleAIScript_82DD379
+AI_CV_Substitute2:
+ if_random_less_than 100, AI_CV_Substitute3
score -1
-BattleAIScript_82DD379:
- if_random_less_than 100, BattleAIScript_82DD381
+AI_CV_Substitute3:
+ if_random_less_than 100, AI_CV_Substitute4
score -1
-BattleAIScript_82DD381:
- if_target_faster BattleAIScript_82DD3E9
+AI_CV_Substitute4:
+ if_target_faster AI_CV_Substitute_End
get_last_used_bank_move AI_TARGET
get_move_effect_from_result
- if_equal EFFECT_SLEEP, BattleAIScript_82DD3B9
- if_equal EFFECT_TOXIC, BattleAIScript_82DD3B9
- if_equal EFFECT_POISON, BattleAIScript_82DD3B9
- if_equal EFFECT_PARALYZE, BattleAIScript_82DD3B9
- if_equal EFFECT_WILL_O_WISP, BattleAIScript_82DD3B9
- if_equal EFFECT_CONFUSE, BattleAIScript_82DD3C8
- if_equal EFFECT_LEECH_SEED, BattleAIScript_82DD3D7
- goto BattleAIScript_82DD3E9
-
-BattleAIScript_82DD3B9:
- if_not_status AI_TARGET, STATUS1_ANY, BattleAIScript_82DD3E1
- goto BattleAIScript_82DD3E9
-
-BattleAIScript_82DD3C8:
- if_not_status2 AI_TARGET, STATUS2_CONFUSION, BattleAIScript_82DD3E1
- goto BattleAIScript_82DD3E9
-
-BattleAIScript_82DD3D7:
- if_status3 AI_TARGET, STATUS3_LEECHSEED, BattleAIScript_82DD3E9
-
-BattleAIScript_82DD3E1:
- if_random_less_than 100, BattleAIScript_82DD3E9
+ if_equal EFFECT_SLEEP, AI_CV_Substitute5
+ if_equal EFFECT_TOXIC, AI_CV_Substitute5
+ if_equal EFFECT_POISON, AI_CV_Substitute5
+ if_equal EFFECT_PARALYZE, AI_CV_Substitute5
+ if_equal EFFECT_WILL_O_WISP, AI_CV_Substitute5
+ if_equal EFFECT_CONFUSE, AI_CV_Substitute6
+ if_equal EFFECT_LEECH_SEED, AI_CV_Substitute7
+ goto AI_CV_Substitute_End
+
+AI_CV_Substitute5:
+ if_not_status AI_TARGET, STATUS1_ANY, AI_CV_Substitute8
+ goto AI_CV_Substitute_End
+
+AI_CV_Substitute6:
+ if_not_status2 AI_TARGET, STATUS2_CONFUSION, AI_CV_Substitute8
+ goto AI_CV_Substitute_End
+
+AI_CV_Substitute7:
+ if_status3 AI_TARGET, STATUS3_LEECHSEED, AI_CV_Substitute_End
+
+AI_CV_Substitute8:
+ if_random_less_than 100, AI_CV_Substitute_End
score +1
-BattleAIScript_82DD3E9:
+AI_CV_Substitute_End:
end
-BattleAIScript_82DD3EA:
- if_type_effectiveness AI_EFFECTIVENESS_x0_25, BattleAIScript_82DD40F
- if_type_effectiveness AI_EFFECTIVENESS_x0_5, BattleAIScript_82DD40F
- if_target_faster BattleAIScript_82DD408
- if_hp_more_than AI_USER, 40, BattleAIScript_82DD40F
- goto BattleAIScript_82DD411
+AI_CV_Recharge:
+ if_type_effectiveness AI_EFFECTIVENESS_x0_25, AI_CV_Recharge_ScoreDown1
+ if_type_effectiveness AI_EFFECTIVENESS_x0_5, AI_CV_Recharge_ScoreDown1
+ if_target_faster AI_CV_Recharge2
+ if_hp_more_than AI_USER, 40, AI_CV_Recharge_ScoreDown1
+ goto AI_CV_Recharge_End
-BattleAIScript_82DD408:
- if_hp_less_than AI_USER, 60, BattleAIScript_82DD411
+AI_CV_Recharge2:
+ if_hp_less_than AI_USER, 60, AI_CV_Recharge_End
-BattleAIScript_82DD40F:
+AI_CV_Recharge_ScoreDown1:
score -1
-BattleAIScript_82DD411:
+AI_CV_Recharge_End:
end
-BattleAIScript_82DD412:
- if_target_faster BattleAIScript_82DD430
+AI_CV_Disable:
+ if_target_faster AI_CV_Disable_End
get_last_used_bank_move AI_TARGET
get_move_power_from_result
- if_equal 0, BattleAIScript_82DD428
+ if_equal 0, AI_CV_Disable2
score +1
- goto BattleAIScript_82DD430
+ goto AI_CV_Disable_End
-BattleAIScript_82DD428:
- if_random_less_than 100, BattleAIScript_82DD430
+AI_CV_Disable2:
+ if_random_less_than 100, AI_CV_Disable_End
score -1
-BattleAIScript_82DD430:
+AI_CV_Disable_End:
end
-BattleAIScript_82DD431:
- if_status AI_TARGET, STATUS1_SLEEP, BattleAIScript_82DD4D6
- if_status2 AI_TARGET, STATUS2_INFATUATION, BattleAIScript_82DD4D6
- if_status2 AI_TARGET, STATUS2_CONFUSION, BattleAIScript_82DD4D6
- if_hp_more_than AI_USER, 30, BattleAIScript_82DD45E
- if_random_less_than 10, BattleAIScript_82DD45E
+AI_CV_Counter:
+ if_status AI_TARGET, STATUS1_SLEEP, AI_CV_Counter_ScoreDown1
+ if_status2 AI_TARGET, STATUS2_INFATUATION, AI_CV_Counter_ScoreDown1
+ if_status2 AI_TARGET, STATUS2_CONFUSION, AI_CV_Counter_ScoreDown1
+ if_hp_more_than AI_USER, 30, AI_CV_Counter2
+ if_random_less_than 10, AI_CV_Counter2
score -1
-BattleAIScript_82DD45E:
- if_hp_more_than AI_USER, 50, BattleAIScript_82DD46D
- if_random_less_than 100, BattleAIScript_82DD46D
+AI_CV_Counter2:
+ if_hp_more_than AI_USER, 50, AI_CV_Counter3
+ if_random_less_than 100, AI_CV_Counter3
score -1
-BattleAIScript_82DD46D:
+AI_CV_Counter3:
if_has_move AI_USER, MOVE_MIRROR_COAT, BattleAIScript_82DD4CD
get_last_used_bank_move AI_TARGET
get_move_power_from_result
- if_equal 0, BattleAIScript_82DD4A4
- if_target_not_taunted BattleAIScript_82DD48B
- if_random_less_than 100, BattleAIScript_82DD48B
+ if_equal 0, AI_CV_Counter5
+ if_target_not_taunted AI_CV_Counter4
+ if_random_less_than 100, AI_CV_Counter4
score +1
-BattleAIScript_82DD48B:
+AI_CV_Counter4:
get_last_used_bank_move AI_TARGET
get_move_type_from_result
- if_not_in_bytes sTypesTable_82DD4D9, BattleAIScript_82DD4D6
- if_random_less_than 100, BattleAIScript_82DD4D8
+ if_not_in_bytes AI_CV_Counter_PhysicalTypeList, AI_CV_Counter_ScoreDown1
+ if_random_less_than 100, AI_CV_Counter_End
score +1
- goto BattleAIScript_82DD4D8
+ goto AI_CV_Counter_End
-BattleAIScript_82DD4A4:
- if_target_not_taunted BattleAIScript_82DD4B1
- if_random_less_than 100, BattleAIScript_82DD4B1
+AI_CV_Counter5:
+ if_target_not_taunted AI_CV_Counter6
+ if_random_less_than 100, AI_CV_Counter6
score +1
-BattleAIScript_82DD4B1:
+AI_CV_Counter6:
get_target_type1
- if_in_bytes sTypesTable_82DD4D9, BattleAIScript_82DD4D8
+ if_in_bytes AI_CV_Counter_PhysicalTypeList, AI_CV_Counter_End
get_target_type2
- if_in_bytes sTypesTable_82DD4D9, BattleAIScript_82DD4D8
- if_random_less_than 50, BattleAIScript_82DD4D8
+ if_in_bytes AI_CV_Counter_PhysicalTypeList, AI_CV_Counter_End
+ if_random_less_than 50, AI_CV_Counter_End
BattleAIScript_82DD4CD:
if_random_less_than 100, BattleAIScript_82DD4D5
@@ -1770,13 +1770,13 @@ BattleAIScript_82DD4CD:
BattleAIScript_82DD4D5:
end
-BattleAIScript_82DD4D6:
+AI_CV_Counter_ScoreDown1:
score -1
-BattleAIScript_82DD4D8:
+AI_CV_Counter_End:
end
-sTypesTable_82DD4D9:
+AI_CV_Counter_PhysicalTypeList:
.byte TYPE_NORMAL
.byte TYPE_FIGHTING
.byte TYPE_FLYING
@@ -1788,25 +1788,25 @@ sTypesTable_82DD4D9:
.byte TYPE_STEEL
.byte -1
-BattleAIScript_82DD4E3:
- if_any_move_disabled AI_TARGET, BattleAIScript_82DD4FC
- if_target_faster BattleAIScript_82DD509
+AI_CV_Encore:
+ if_any_move_disabled AI_TARGET, AI_CV_Encore2
+ if_target_faster AI_CV_Encore_ScoreDown2
get_last_used_bank_move AI_TARGET
get_move_effect_from_result
- if_not_in_bytes sMoveEffectsTable_82DD50C, BattleAIScript_82DD509
+ if_not_in_bytes AI_CV_Encore_EncouragedMovesToEncore, AI_CV_Encore_ScoreDown2
-BattleAIScript_82DD4FC:
- if_random_less_than 30, BattleAIScript_82DD50B
+AI_CV_Encore2:
+ if_random_less_than 30, AI_CV_Encore_End
score +3
- goto BattleAIScript_82DD50B
+ goto AI_CV_Encore_End
-BattleAIScript_82DD509:
+AI_CV_Encore_ScoreDown2:
score -2
-BattleAIScript_82DD50B:
+AI_CV_Encore_End:
end
-sMoveEffectsTable_82DD50C:
+AI_CV_Encore_EncouragedMovesToEncore:
.byte EFFECT_DREAM_EATER
.byte EFFECT_ATTACK_UP
.byte EFFECT_DEFENSE_UP
@@ -1871,108 +1871,108 @@ sMoveEffectsTable_82DD50C:
.byte EFFECT_CAMOUFLAGE
.byte -1
-BattleAIScript_82DD54B:
- if_hp_less_than AI_TARGET, 80, BattleAIScript_82DD574
- if_target_faster BattleAIScript_82DD566
- if_hp_more_than AI_USER, 40, BattleAIScript_82DD574
+AI_CV_PainSplit:
+ if_hp_less_than AI_TARGET, 80, AI_CV_PainSplit_ScoreDown1
+ if_target_faster AI_CV_PainSplit2
+ if_hp_more_than AI_USER, 40, AI_CV_PainSplit_ScoreDown1
score +1
- goto BattleAIScript_82DD576
+ goto AI_CV_PainSplit_End
-BattleAIScript_82DD566:
- if_hp_more_than AI_USER, 60, BattleAIScript_82DD574
+AI_CV_PainSplit2:
+ if_hp_more_than AI_USER, 60, AI_CV_PainSplit_ScoreDown1
score +1
- goto BattleAIScript_82DD576
+ goto AI_CV_PainSplit_End
-BattleAIScript_82DD574:
+AI_CV_PainSplit_ScoreDown1:
score -1
-BattleAIScript_82DD576:
+AI_CV_PainSplit_End:
end
-BattleAIScript_82DD577:
+AI_CV_Snore:
score +2
end
-BattleAIScript_82DD57A:
- if_random_less_than 128, BattleAIScript_82DD582
+AI_CV_LockOn:
+ if_random_less_than 128, AI_CV_LockOn_End
score +2
-BattleAIScript_82DD582:
+AI_CV_LockOn_End:
end
-BattleAIScript_82DD583:
+AI_CV_SleepTalk:
if_status AI_USER, STATUS1_SLEEP, Score_Plus10
score -5
end
-BattleAIScript_82DD590:
+AI_CV_DestinyBond:
score -1
- if_target_faster BattleAIScript_82DD5C5
- if_hp_more_than AI_USER, 70, BattleAIScript_82DD5C5
- if_random_less_than 128, BattleAIScript_82DD5A7
+ if_target_faster AI_CV_DestinyBond_End
+ if_hp_more_than AI_USER, 70, AI_CV_DestinyBond_End
+ if_random_less_than 128, AI_CV_DestinyBond2
score +1
-BattleAIScript_82DD5A7:
- if_hp_more_than AI_USER, 50, BattleAIScript_82DD5C5
- if_random_less_than 128, BattleAIScript_82DD5B6
+AI_CV_DestinyBond2:
+ if_hp_more_than AI_USER, 50, AI_CV_DestinyBond_End
+ if_random_less_than 128, AI_CV_DestinyBond3
score +1
-BattleAIScript_82DD5B6:
- if_hp_more_than AI_USER, 30, BattleAIScript_82DD5C5
- if_random_less_than 100, BattleAIScript_82DD5C5
+AI_CV_DestinyBond3:
+ if_hp_more_than AI_USER, 30, AI_CV_DestinyBond_End
+ if_random_less_than 100, AI_CV_DestinyBond_End
score +2
-BattleAIScript_82DD5C5:
+AI_CV_DestinyBond_End:
end
-BattleAIScript_82DD5C6:
- if_target_faster BattleAIScript_82DD5E6
- if_hp_more_than AI_USER, 33, BattleAIScript_82DD608
- if_hp_more_than AI_USER, 20, BattleAIScript_82DD60A
- if_hp_less_than AI_USER, 8, BattleAIScript_82DD5F9
- goto BattleAIScript_82DD5FB
+AI_CV_Flail:
+ if_target_faster AI_CV_Flail2
+ if_hp_more_than AI_USER, 33, AI_CV_Flail_ScoreDown1
+ if_hp_more_than AI_USER, 20, AI_CV_Flail_End
+ if_hp_less_than AI_USER, 8, AI_CV_Flail_ScoreUp1
+ goto AI_CV_Flail3
-BattleAIScript_82DD5E6:
- if_hp_more_than AI_USER, 60, BattleAIScript_82DD608
- if_hp_more_than AI_USER, 40, BattleAIScript_82DD60A
- goto BattleAIScript_82DD5FB
+AI_CV_Flail2:
+ if_hp_more_than AI_USER, 60, AI_CV_Flail_ScoreDown1
+ if_hp_more_than AI_USER, 40, AI_CV_Flail_End
+ goto AI_CV_Flail3
-BattleAIScript_82DD5F9:
+AI_CV_Flail_ScoreUp1:
score +1
-BattleAIScript_82DD5FB:
- if_random_less_than 100, BattleAIScript_82DD60A
+AI_CV_Flail3:
+ if_random_less_than 100, AI_CV_Flail_End
score +1
- goto BattleAIScript_82DD60A
+ goto AI_CV_Flail_End
-BattleAIScript_82DD608:
+AI_CV_Flail_ScoreDown1:
score -1
-BattleAIScript_82DD60A:
+AI_CV_Flail_End:
end
-BattleAIScript_82DD60B:
- if_status AI_TARGET, STATUS1_ANY, BattleAIScript_82DD621
- if_status_in_party AI_TARGET, STATUS1_ANY, BattleAIScript_82DD621
+AI_CV_HealBell:
+ if_status AI_TARGET, STATUS1_ANY, AI_CV_HealBell_End
+ if_status_in_party AI_TARGET, STATUS1_ANY, AI_CV_HealBell_End
score -5
-BattleAIScript_82DD621:
+AI_CV_HealBell_End:
end
-BattleAIScript_82DD622:
+AI_CV_Thief:
get_hold_effect AI_TARGET
- if_not_in_bytes sHoldEffectsTable_82DD63D, BattleAIScript_82DD63A
- if_random_less_than 50, BattleAIScript_82DD63C
+ if_not_in_bytes AI_CV_Thief_EncourageItemsToSteal, AI_CV_Thief_ScoreDown2
+ if_random_less_than 50, AI_CV_Thief_End
score +1
- goto BattleAIScript_82DD63C
+ goto AI_CV_Thief_End
-BattleAIScript_82DD63A:
+AI_CV_Thief_ScoreDown2:
score -2
-BattleAIScript_82DD63C:
+AI_CV_Thief_End:
end
-sHoldEffectsTable_82DD63D:
+AI_CV_Thief_EncourageItemsToSteal:
.byte HOLD_EFFECT_CURE_SLP
.byte HOLD_EFFECT_CURE_STATUS
.byte HOLD_EFFECT_RESTORE_HP
@@ -1982,317 +1982,317 @@ sHoldEffectsTable_82DD63D:
.byte HOLD_EFFECT_THICK_CLUB
.byte -1
-BattleAIScript_82DD645:
+AI_CV_Curse:
get_user_type1
- if_equal TYPE_GHOST, BattleAIScript_82DD68A
+ if_equal TYPE_GHOST, AI_CV_Curse4
get_user_type2
- if_equal TYPE_GHOST, BattleAIScript_82DD68A
- if_stat_level_more_than AI_USER, STAT_DEF, 9, BattleAIScript_82DD693
- if_random_less_than 128, BattleAIScript_82DD665
+ if_equal TYPE_GHOST, AI_CV_Curse4
+ if_stat_level_more_than AI_USER, STAT_DEF, 9, AI_CV_Curse_End
+ if_random_less_than 128, AI_CV_Curse2
score +1
-BattleAIScript_82DD665:
- if_stat_level_more_than AI_USER, STAT_DEF, 7, BattleAIScript_82DD693
- if_random_less_than 128, BattleAIScript_82DD675
+AI_CV_Curse2:
+ if_stat_level_more_than AI_USER, STAT_DEF, 7, AI_CV_Curse_End
+ if_random_less_than 128, AI_CV_Curse3
score +1
-BattleAIScript_82DD675:
- if_stat_level_more_than AI_USER, STAT_DEF, 6, BattleAIScript_82DD693
- if_random_less_than 128, BattleAIScript_82DD693
+AI_CV_Curse3:
+ if_stat_level_more_than AI_USER, STAT_DEF, 6, AI_CV_Curse_End
+ if_random_less_than 128, AI_CV_Curse_End
score +1
- goto BattleAIScript_82DD693
+ goto AI_CV_Curse_End
-BattleAIScript_82DD68A:
- if_hp_more_than AI_USER, 80, BattleAIScript_82DD693
+AI_CV_Curse4:
+ if_hp_more_than AI_USER, 80, AI_CV_Curse_End
score -1
-BattleAIScript_82DD693:
+AI_CV_Curse_End:
end
-BattleAIScript_82DD694:
+AI_CV_Protect:
get_protect_count AI_USER
- if_more_than 1, BattleAIScript_82DD75A
- if_status AI_USER, STATUS1_TOXIC_POISON, BattleAIScript_82DD751
- if_status2 AI_USER, STATUS2_CURSED, BattleAIScript_82DD751
- if_status3 AI_USER, STATUS3_PERISH_SONG, BattleAIScript_82DD751
- if_status2 AI_USER, STATUS2_INFATUATION, BattleAIScript_82DD751
- if_status3 AI_USER, STATUS3_LEECHSEED, BattleAIScript_82DD751
- if_status3 AI_USER, STATUS3_YAWN, BattleAIScript_82DD751
- if_has_move_with_effect AI_TARGET, EFFECT_RESTORE_HP, BattleAIScript_82DD751
- if_has_move_with_effect AI_TARGET, EFFECT_DEFENSE_CURL, BattleAIScript_82DD751
- if_status AI_TARGET, STATUS1_TOXIC_POISON, BattleAIScript_82DD730
- if_status2 AI_TARGET, STATUS2_CURSED, BattleAIScript_82DD730
- if_status3 AI_TARGET, STATUS3_PERISH_SONG, BattleAIScript_82DD730
- if_status2 AI_TARGET, STATUS2_INFATUATION, BattleAIScript_82DD730
- if_status3 AI_TARGET, STATUS3_LEECHSEED, BattleAIScript_82DD730
- if_status3 AI_TARGET, STATUS3_YAWN, BattleAIScript_82DD730
+ if_more_than 1, AI_CV_Protect_ScoreDown2
+ if_status AI_USER, STATUS1_TOXIC_POISON, AI_CV_Protect3
+ if_status2 AI_USER, STATUS2_CURSED, AI_CV_Protect3
+ if_status3 AI_USER, STATUS3_PERISH_SONG, AI_CV_Protect3
+ if_status2 AI_USER, STATUS2_INFATUATION, AI_CV_Protect3
+ if_status3 AI_USER, STATUS3_LEECHSEED, AI_CV_Protect3
+ if_status3 AI_USER, STATUS3_YAWN, AI_CV_Protect3
+ if_has_move_with_effect AI_TARGET, EFFECT_RESTORE_HP, AI_CV_Protect3
+ if_has_move_with_effect AI_TARGET, EFFECT_DEFENSE_CURL, AI_CV_Protect3
+ if_status AI_TARGET, STATUS1_TOXIC_POISON, AI_CV_Protect_ScoreUp2
+ if_status2 AI_TARGET, STATUS2_CURSED, AI_CV_Protect_ScoreUp2
+ if_status3 AI_TARGET, STATUS3_PERISH_SONG, AI_CV_Protect_ScoreUp2
+ if_status2 AI_TARGET, STATUS2_INFATUATION, AI_CV_Protect_ScoreUp2
+ if_status3 AI_TARGET, STATUS3_LEECHSEED, AI_CV_Protect_ScoreUp2
+ if_status3 AI_TARGET, STATUS3_YAWN, AI_CV_Protect_ScoreUp2
get_last_used_bank_move AI_TARGET
get_move_effect_from_result
- if_not_equal EFFECT_LOCK_ON, BattleAIScript_82DD730
- goto BattleAIScript_82DD732
+ if_not_equal EFFECT_LOCK_ON, AI_CV_Protect_ScoreUp2
+ goto AI_CV_Protect2
-BattleAIScript_82DD730:
+AI_CV_Protect_ScoreUp2:
score +2
-BattleAIScript_82DD732:
- if_random_less_than 128, BattleAIScript_82DD73A
+AI_CV_Protect2:
+ if_random_less_than 128, AI_CV_Protect4
score -1
-
-BattleAIScript_82DD73A:
+
+AI_CV_Protect4:
get_protect_count AI_USER
- if_equal 0, BattleAIScript_82DD75C
+ if_equal 0, AI_CV_Protect_End
score -1
- if_random_less_than 128, BattleAIScript_82DD75C
+ if_random_less_than 128, AI_CV_Protect_End
score -1
- goto BattleAIScript_82DD75C
-
-BattleAIScript_82DD751:
+ goto AI_CV_Protect_End
+
+AI_CV_Protect3:
get_last_used_bank_move AI_TARGET
get_move_effect_from_result
- if_not_equal EFFECT_LOCK_ON, BattleAIScript_82DD75C
+ if_not_equal EFFECT_LOCK_ON, AI_CV_Protect_End
-BattleAIScript_82DD75A:
+AI_CV_Protect_ScoreDown2:
score -2
-BattleAIScript_82DD75C:
+AI_CV_Protect_End:
end
-BattleAIScript_82DD75D:
+AI_CV_Foresight:
get_user_type1
- if_equal TYPE_GHOST, BattleAIScript_82DD77C
+ if_equal TYPE_GHOST, AI_CV_Foresight2
get_user_type2
- if_equal TYPE_GHOST, BattleAIScript_82DD77C
- if_stat_level_more_than AI_USER, STAT_EVASION, 8, BattleAIScript_82DD782
+ if_equal TYPE_GHOST, AI_CV_Foresight2
+ if_stat_level_more_than AI_USER, STAT_EVASION, 8, AI_CV_Foresight3
score -2
- goto BattleAIScript_82DD78A
+ goto AI_CV_Foresight_End
-BattleAIScript_82DD77C:
- if_random_less_than 80, BattleAIScript_82DD78A
+AI_CV_Foresight2:
+ if_random_less_than 80, AI_CV_Foresight_End
-BattleAIScript_82DD782:
- if_random_less_than 80, BattleAIScript_82DD78A
+AI_CV_Foresight3:
+ if_random_less_than 80, AI_CV_Foresight_End
score +2
-BattleAIScript_82DD78A:
+AI_CV_Foresight_End:
end
-BattleAIScript_82DD78B:
- if_hp_less_than AI_USER, 4, BattleAIScript_82DD799
- if_hp_less_than AI_USER, 35, BattleAIScript_82DD7A0
+AI_CV_Endure:
+ if_hp_less_than AI_USER, 4, AI_CV_Endure2
+ if_hp_less_than AI_USER, 35, AI_CV_Endure3
-BattleAIScript_82DD799:
+AI_CV_Endure2:
score -1
- goto BattleAIScript_82DD7A8
+ goto AI_CV_Endure_End
-BattleAIScript_82DD7A0:
- if_random_less_than 70, BattleAIScript_82DD7A8
+AI_CV_Endure3:
+ if_random_less_than 70, AI_CV_Endure_End
score +1
-BattleAIScript_82DD7A8:
+AI_CV_Endure_End:
end
-BattleAIScript_82DD7A9:
- 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
+AI_CV_BatonPass:
+ if_stat_level_more_than AI_USER, STAT_ATK, 8, AI_CV_BatonPass2
+ if_stat_level_more_than AI_USER, STAT_DEF, 8, AI_CV_BatonPass2
+ if_stat_level_more_than AI_USER, STAT_SPATK, 8, AI_CV_BatonPass2
+ if_stat_level_more_than AI_USER, STAT_SPDEF, 8, AI_CV_BatonPass2
+ if_stat_level_more_than AI_USER, STAT_EVASION, 8, AI_CV_BatonPass2
+ goto AI_CV_BatonPass5
-BattleAIScript_82DD7D6:
- if_target_faster BattleAIScript_82DD7E8
- if_hp_more_than AI_USER, 60, BattleAIScript_82DD844
- goto BattleAIScript_82DD7EF
+AI_CV_BatonPass2:
+ if_target_faster AI_CV_BatonPass3
+ if_hp_more_than AI_USER, 60, AI_CV_BatonPass_End
+ goto AI_CV_BatonPass4
-BattleAIScript_82DD7E8:
- if_hp_more_than AI_USER, 70, BattleAIScript_82DD844
+AI_CV_BatonPass3:
+ if_hp_more_than AI_USER, 70, AI_CV_BatonPass_End
-BattleAIScript_82DD7EF:
- if_random_less_than 80, BattleAIScript_82DD844
+AI_CV_BatonPass4:
+ if_random_less_than 80, AI_CV_BatonPass_End
score +2
- goto BattleAIScript_82DD844
+ goto AI_CV_BatonPass_End
-BattleAIScript_82DD7FC:
- 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
+AI_CV_BatonPass5:
+ if_stat_level_more_than AI_USER, STAT_ATK, 7, AI_CV_BatonPass7
+ if_stat_level_more_than AI_USER, STAT_DEF, 7, AI_CV_BatonPass7
+ if_stat_level_more_than AI_USER, STAT_SPATK, 7, AI_CV_BatonPass7
+ if_stat_level_more_than AI_USER, STAT_SPDEF, 7, AI_CV_BatonPass7
+ if_stat_level_more_than AI_USER, STAT_EVASION, 7, AI_CV_BatonPass7
+ goto AI_CV_BatonPass_ScoreDown2
-BattleAIScript_82DD829:
- if_target_faster BattleAIScript_82DD83B
- if_hp_more_than AI_USER, 60, BattleAIScript_82DD842
- goto BattleAIScript_82DD844
+AI_CV_BatonPass7:
+ if_target_faster AI_CV_BatonPass8
+ if_hp_more_than AI_USER, 60, AI_CV_BatonPass_ScoreDown2
+ goto AI_CV_BatonPass_End
-BattleAIScript_82DD83B:
- if_hp_less_than AI_USER, 70, BattleAIScript_82DD844
+AI_CV_BatonPass8:
+ if_hp_less_than AI_USER, 70, AI_CV_BatonPass_End
-BattleAIScript_82DD842:
+AI_CV_BatonPass_ScoreDown2:
score -2
-BattleAIScript_82DD844:
+AI_CV_BatonPass_End:
end
-BattleAIScript_82DD845:
+AI_CV_Pursuit:
is_first_turn_for AI_USER
- if_not_equal 0, BattleAIScript_82DD87A
+ if_not_equal 0, AI_CV_Pursuit_End
get_target_type1
- if_equal TYPE_GHOST, BattleAIScript_82DD872
+ if_equal TYPE_GHOST, AI_CV_Pursuit2
get_target_type1
- if_equal TYPE_PSYCHIC, BattleAIScript_82DD872
+ if_equal TYPE_PSYCHIC, AI_CV_Pursuit2
get_target_type2
- if_equal TYPE_GHOST, BattleAIScript_82DD872
+ if_equal TYPE_GHOST, AI_CV_Pursuit2
get_target_type2
- if_equal TYPE_PSYCHIC, BattleAIScript_82DD872
- goto BattleAIScript_82DD87A
+ if_equal TYPE_PSYCHIC, AI_CV_Pursuit2
+ goto AI_CV_Pursuit_End
-BattleAIScript_82DD872:
- if_random_less_than 128, BattleAIScript_82DD87A
+AI_CV_Pursuit2:
+ if_random_less_than 128, AI_CV_Pursuit_End
score +1
-BattleAIScript_82DD87A:
+AI_CV_Pursuit_End:
end
-BattleAIScript_82DD87B:
- if_user_faster BattleAIScript_82DD889
+AI_CV_RainDance:
+ if_user_faster AI_CV_RainDance2
get_ability AI_USER
- if_equal ABILITY_SWIFT_SWIM, BattleAIScript_82DD8B0
+ if_equal ABILITY_SWIFT_SWIM, AI_CV_RainDance3
-BattleAIScript_82DD889:
- if_hp_less_than AI_USER, 40, BattleAIScript_82DD8B7
+AI_CV_RainDance2:
+ if_hp_less_than AI_USER, 40, AI_CV_RainDance_ScoreDown1
get_weather
- if_equal AI_WEATHER_HAIL, BattleAIScript_82DD8B0
- if_equal AI_WEATHER_SUN, BattleAIScript_82DD8B0
- if_equal AI_WEATHER_SANDSTORM, BattleAIScript_82DD8B0
+ if_equal AI_WEATHER_HAIL, AI_CV_RainDance3
+ if_equal AI_WEATHER_SUN, AI_CV_RainDance3
+ if_equal AI_WEATHER_SANDSTORM, AI_CV_RainDance3
get_ability AI_USER
- if_equal ABILITY_RAIN_DISH, BattleAIScript_82DD8B0
- goto BattleAIScript_82DD8B9
+ if_equal ABILITY_RAIN_DISH, AI_CV_RainDance3
+ goto AI_CV_RainDance_End
-BattleAIScript_82DD8B0:
+AI_CV_RainDance3:
score +1
- goto BattleAIScript_82DD8B9
+ goto AI_CV_RainDance_End
-BattleAIScript_82DD8B7:
+AI_CV_RainDance_ScoreDown1:
score -1
-BattleAIScript_82DD8B9:
+AI_CV_RainDance_End:
end
-BattleAIScript_82DD8BA:
- if_hp_less_than AI_USER, 40, BattleAIScript_82DD8E0
+AI_CV_SunnyDay:
+ if_hp_less_than AI_USER, 40, AI_CV_SunnyDay_ScoreDown1
get_weather
- if_equal AI_WEATHER_HAIL, BattleAIScript_82DD8D9
- if_equal AI_WEATHER_RAIN, BattleAIScript_82DD8D9
- if_equal AI_WEATHER_SANDSTORM, BattleAIScript_82DD8D9
- goto BattleAIScript_82DD8E2
+ if_equal AI_WEATHER_HAIL, AI_CV_SunnyDay2
+ if_equal AI_WEATHER_RAIN, AI_CV_SunnyDay2
+ if_equal AI_WEATHER_SANDSTORM, AI_CV_SunnyDay2
+ goto AI_CV_SunnyDay_End
-BattleAIScript_82DD8D9:
+AI_CV_SunnyDay2:
score +1
- goto BattleAIScript_82DD8E2
+ goto AI_CV_SunnyDay_End
-BattleAIScript_82DD8E0:
+AI_CV_SunnyDay_ScoreDown1:
score -1
-BattleAIScript_82DD8E2:
+AI_CV_SunnyDay_End:
end
-BattleAIScript_82DD8E3:
- if_hp_less_than AI_USER, 90, BattleAIScript_82DD8EF
- goto BattleAIScript_82DD8F1
+AI_CV_BellyDrum:
+ if_hp_less_than AI_USER, 90, AI_CV_BellyDrum_ScoreDown2
+ goto AI_CV_BellyDrum_End
-BattleAIScript_82DD8EF:
+AI_CV_BellyDrum_ScoreDown2:
score -2
-BattleAIScript_82DD8F1:
+AI_CV_BellyDrum_End:
end
-BattleAIScript_82DD8F2:
- 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
+AI_CV_PsychUp:
+ if_stat_level_more_than AI_TARGET, STAT_ATK, 8, AI_CV_PsychUp2
+ if_stat_level_more_than AI_TARGET, STAT_DEF, 8, AI_CV_PsychUp2
+ if_stat_level_more_than AI_TARGET, STAT_SPATK, 8, AI_CV_PsychUp2
+ if_stat_level_more_than AI_TARGET, STAT_SPDEF, 8, AI_CV_PsychUp2
+ if_stat_level_more_than AI_TARGET, STAT_EVASION, 8, AI_CV_PsychUp2
+ goto AI_CV_PsychUp_ScoreDown2
-BattleAIScript_82DD91F:
- 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
+AI_CV_PsychUp2:
+ if_stat_level_less_than AI_USER, STAT_ATK, 7, AI_CV_PsychUp3
+ if_stat_level_less_than AI_USER, STAT_DEF, 7, AI_CV_PsychUp3
+ if_stat_level_less_than AI_USER, STAT_SPATK, 7, AI_CV_PsychUp3
+ if_stat_level_less_than AI_USER, STAT_SPDEF, 7, AI_CV_PsychUp3
+ if_stat_level_less_than AI_USER, STAT_EVASION, 7, AI_CV_PsychUp_ScoreUp1
+ if_random_less_than 50, AI_CV_PsychUp_End
+ goto AI_CV_PsychUp_ScoreDown2
-BattleAIScript_82DD952:
+AI_CV_PsychUp_ScoreUp1:
score +1
-BattleAIScript_82DD954:
+AI_CV_PsychUp3:
score +1
end
-BattleAIScript_82DD957:
+AI_CV_PsychUp_ScoreDown2:
score -2
-BattleAIScript_82DD959:
+AI_CV_PsychUp_End:
end
-BattleAIScript_82DD95A:
- if_status AI_TARGET, STATUS1_SLEEP, BattleAIScript_82DD9FF
- if_status2 AI_TARGET, STATUS2_INFATUATION, BattleAIScript_82DD9FF
- if_status2 AI_TARGET, STATUS2_CONFUSION, BattleAIScript_82DD9FF
- if_hp_more_than AI_USER, 30, BattleAIScript_82DD987
- if_random_less_than 10, BattleAIScript_82DD987
+AI_CV_MirrorCoat:
+ if_status AI_TARGET, STATUS1_SLEEP, AI_CV_MirrorCoat_ScoreDown1
+ if_status2 AI_TARGET, STATUS2_INFATUATION, AI_CV_MirrorCoat_ScoreDown1
+ if_status2 AI_TARGET, STATUS2_CONFUSION, AI_CV_MirrorCoat_ScoreDown1
+ if_hp_more_than AI_USER, 30, AI_CV_MirrorCoat2
+ if_random_less_than 10, AI_CV_MirrorCoat2
score -1
-BattleAIScript_82DD987:
- if_hp_more_than AI_USER, 50, BattleAIScript_82DD996
- if_random_less_than 100, BattleAIScript_82DD996
+AI_CV_MirrorCoat2:
+ if_hp_more_than AI_USER, 50, AI_CV_MirrorCoat3
+ if_random_less_than 100, AI_CV_MirrorCoat3
score -1
-BattleAIScript_82DD996:
- if_has_move AI_USER, MOVE_COUNTER, BattleAIScript_82DD9F6
+AI_CV_MirrorCoat3:
+ if_has_move AI_USER, MOVE_COUNTER, AI_CV_MirrorCoat_ScoreUp4
get_last_used_bank_move AI_TARGET
get_move_power_from_result
- if_equal 0, BattleAIScript_82DD9CD
- if_target_not_taunted BattleAIScript_82DD9B4
- if_random_less_than 100, BattleAIScript_82DD9B4
+ if_equal 0, AI_CV_MirrorCoat5
+ if_target_not_taunted AI_CV_MirrorCoat4
+ if_random_less_than 100, AI_CV_MirrorCoat4
score +1
-BattleAIScript_82DD9B4:
+AI_CV_MirrorCoat4:
get_last_used_bank_move AI_TARGET
get_move_type_from_result
- if_not_in_bytes sTypesTable_82DDA02, BattleAIScript_82DD9FF
- if_random_less_than 100, BattleAIScript_82DDA01
+ if_not_in_bytes AI_CV_MirrorCoat_SpecialTypeList, AI_CV_MirrorCoat_ScoreDown1
+ if_random_less_than 100, AI_CV_MirrorCoat_End
score +1
- goto BattleAIScript_82DDA01
+ goto AI_CV_MirrorCoat_End
-BattleAIScript_82DD9CD:
- if_target_not_taunted BattleAIScript_82DD9DA
- if_random_less_than 100, BattleAIScript_82DD9DA
+AI_CV_MirrorCoat5:
+ if_target_not_taunted AI_CV_MirrorCoat6
+ if_random_less_than 100, AI_CV_MirrorCoat6
score +1
-BattleAIScript_82DD9DA:
+AI_CV_MirrorCoat6:
get_target_type1
- if_in_bytes sTypesTable_82DDA02, BattleAIScript_82DDA01
+ if_in_bytes AI_CV_MirrorCoat_SpecialTypeList, AI_CV_MirrorCoat_End
get_target_type2
- if_in_bytes sTypesTable_82DDA02, BattleAIScript_82DDA01
- if_random_less_than 50, BattleAIScript_82DDA01
+ if_in_bytes AI_CV_MirrorCoat_SpecialTypeList, AI_CV_MirrorCoat_End
+ if_random_less_than 50, AI_CV_MirrorCoat_End
-BattleAIScript_82DD9F6:
- if_random_less_than 100, BattleAIScript_82DD9FE
+AI_CV_MirrorCoat_ScoreUp4:
+ if_random_less_than 100, AI_CV_MirrorCoat_ScoreUp4_End
score +4
-BattleAIScript_82DD9FE:
+AI_CV_MirrorCoat_ScoreUp4_End:
end
-BattleAIScript_82DD9FF:
+AI_CV_MirrorCoat_ScoreDown1:
score -1
-BattleAIScript_82DDA01:
+AI_CV_MirrorCoat_End:
end
-sTypesTable_82DDA02:
+AI_CV_MirrorCoat_SpecialTypeList:
.byte TYPE_FIRE
.byte TYPE_WATER
.byte TYPE_GRASS
@@ -2303,166 +2303,166 @@ sTypesTable_82DDA02:
.byte TYPE_DARK
.byte -1
-BattleAIScript_82DDA0B:
- if_type_effectiveness AI_EFFECTIVENESS_x0_25, BattleAIScript_82DDA2C
- if_type_effectiveness AI_EFFECTIVENESS_x0_5, BattleAIScript_82DDA2C
- if_has_move_with_effect AI_TARGET, EFFECT_PROTECT, BattleAIScript_82DDA2C
- if_hp_more_than AI_USER, 38, BattleAIScript_82DDA2E
+AI_CV_ChargeUpMove:
+ if_type_effectiveness AI_EFFECTIVENESS_x0_25, AI_CV_ChargeUpMove_ScoreDown2
+ if_type_effectiveness AI_EFFECTIVENESS_x0_5, AI_CV_ChargeUpMove_ScoreDown2
+ if_has_move_with_effect AI_TARGET, EFFECT_PROTECT, AI_CV_ChargeUpMove_ScoreDown2
+ if_hp_more_than AI_USER, 38, AI_CV_ChargeUpMove_End
score -1
- goto BattleAIScript_82DDA2E
+ goto AI_CV_ChargeUpMove_End
-BattleAIScript_82DDA2C:
+AI_CV_ChargeUpMove_ScoreDown2:
score -2
-BattleAIScript_82DDA2E:
+AI_CV_ChargeUpMove_End:
end
-BattleAIScript_82DDA2F:
- if_doesnt_have_move_with_effect AI_TARGET, EFFECT_PROTECT, BattleAIScript_82DDA3D
+AI_CV_Fly:
+ if_doesnt_have_move_with_effect AI_TARGET, EFFECT_PROTECT, AI_CV_Fly2
score -1
- goto BattleAIScript_82DDAB4
+ goto AI_CV_Fly_End
-BattleAIScript_82DDA3D:
- if_status AI_TARGET, STATUS1_TOXIC_POISON, BattleAIScript_82DDAAC
- if_status2 AI_TARGET, STATUS2_CURSED, BattleAIScript_82DDAAC
- if_status3 AI_TARGET, STATUS3_LEECHSEED, BattleAIScript_82DDAAC
+AI_CV_Fly2:
+ if_status AI_TARGET, STATUS1_TOXIC_POISON, AI_CV_Fly6
+ if_status2 AI_TARGET, STATUS2_CURSED, AI_CV_Fly6
+ if_status3 AI_TARGET, STATUS3_LEECHSEED, AI_CV_Fly6
get_weather
- if_equal AI_WEATHER_HAIL, BattleAIScript_82DDA6D
- if_equal AI_WEATHER_SANDSTORM, BattleAIScript_82DDA88
- goto BattleAIScript_82DDA98
+ if_equal AI_WEATHER_HAIL, AI_CV_Fly3
+ if_equal AI_WEATHER_SANDSTORM, AI_CV_Fly4
+ goto AI_CV_Fly5
-BattleAIScript_82DDA6D:
+AI_CV_Fly3:
get_user_type1
- if_in_bytes sTypesTable_82DDAB5, BattleAIScript_82DDAAC
+ if_in_bytes AI_CV_Fly_TypesToEncourage, AI_CV_Fly6
get_user_type2
- if_in_bytes sTypesTable_82DDAB5, BattleAIScript_82DDAAC
- goto BattleAIScript_82DDA98
+ if_in_bytes AI_CV_Fly_TypesToEncourage, AI_CV_Fly6
+ goto AI_CV_Fly5
-BattleAIScript_82DDA88:
+AI_CV_Fly4:
get_user_type1
- if_equal TYPE_ICE, BattleAIScript_82DDAAC
+ if_equal TYPE_ICE, AI_CV_Fly6
get_user_type2
- if_equal TYPE_ICE, BattleAIScript_82DDAAC
+ if_equal TYPE_ICE, AI_CV_Fly6
-BattleAIScript_82DDA98:
- if_target_faster BattleAIScript_82DDAB4
+AI_CV_Fly5:
+ if_target_faster AI_CV_Fly_End
get_last_used_bank_move AI_TARGET
get_move_effect_from_result
- if_not_equal EFFECT_LOCK_ON, BattleAIScript_82DDAAC
- goto BattleAIScript_82DDAB4
+ if_not_equal EFFECT_LOCK_ON, AI_CV_Fly6
+ goto AI_CV_Fly_End
-BattleAIScript_82DDAAC:
- if_random_less_than 80, BattleAIScript_82DDAB4
+AI_CV_Fly6:
+ if_random_less_than 80, AI_CV_Fly_End
score +1
-BattleAIScript_82DDAB4:
+AI_CV_Fly_End:
end
-sTypesTable_82DDAB5:
+AI_CV_Fly_TypesToEncourage:
.byte TYPE_GROUND
.byte TYPE_ROCK
.byte TYPE_STEEL
.byte -1
-BattleAIScript_82DDAB9:
+AI_CV_FakeOut:
score +2
end
-BattleAIScript_82DDABC:
+AI_CV_SpitUp:
get_stockpile_count AI_USER
- if_less_than 2, BattleAIScript_82DDACC
- if_random_less_than 80, BattleAIScript_82DDACC
+ if_less_than 2, AI_CV_SpitUp_End
+ if_random_less_than 80, AI_CV_SpitUp_End
score +2
-BattleAIScript_82DDACC:
+AI_CV_SpitUp_End:
end
-BattleAIScript_82DDACD:
- if_hp_less_than AI_USER, 40, BattleAIScript_82DDAF3
+AI_CV_Hail:
+ if_hp_less_than AI_USER, 40, AI_CV_Hail_ScoreDown1
get_weather
- if_equal AI_WEATHER_SUN, BattleAIScript_82DDAEC
- if_equal AI_WEATHER_RAIN, BattleAIScript_82DDAEC
- if_equal AI_WEATHER_SANDSTORM, BattleAIScript_82DDAEC
- goto BattleAIScript_82DDAF5
+ if_equal AI_WEATHER_SUN, AI_CV_Hail2
+ if_equal AI_WEATHER_RAIN, AI_CV_Hail2
+ if_equal AI_WEATHER_SANDSTORM, AI_CV_Hail2
+ goto AI_CV_Hail_End
-BattleAIScript_82DDAEC:
+AI_CV_Hail2:
score +1
- goto BattleAIScript_82DDAF5
+ goto AI_CV_Hail_End
-BattleAIScript_82DDAF3:
+AI_CV_Hail_ScoreDown1:
score -1
-BattleAIScript_82DDAF5:
+AI_CV_Hail_End:
end
-BattleAIScript_82DDAF6:
- if_not_status AI_TARGET, STATUS1_POISON | STATUS1_BURN | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON, BattleAIScript_82DDB02
+AI_CV_Facade:
+ if_not_status AI_TARGET, STATUS1_POISON | STATUS1_BURN | STATUS1_PARALYSIS | STATUS1_TOXIC_POISON, AI_CV_Facade_End
score +1
-BattleAIScript_82DDB02:
+AI_CV_Facade_End:
end
-BattleAIScript_82DDB03:
- if_type_effectiveness AI_EFFECTIVENESS_x0_25, BattleAIScript_82DDB42
- if_type_effectiveness AI_EFFECTIVENESS_x0_5, BattleAIScript_82DDB42
- if_status AI_TARGET, STATUS1_SLEEP, BattleAIScript_82DDB59
- if_status2 AI_TARGET, STATUS2_INFATUATION, BattleAIScript_82DDB49
- if_status2 AI_TARGET, STATUS2_CONFUSION, BattleAIScript_82DDB49
+AI_CV_FocusPunch:
+ if_type_effectiveness AI_EFFECTIVENESS_x0_25, AI_CV_FocusPunch2
+ if_type_effectiveness AI_EFFECTIVENESS_x0_5, AI_CV_FocusPunch2
+ if_status AI_TARGET, STATUS1_SLEEP, AI_CV_FocusPunch_ScoreUp1
+ if_status2 AI_TARGET, STATUS2_INFATUATION, AI_CV_FocusPunch3
+ if_status2 AI_TARGET, STATUS2_CONFUSION, AI_CV_FocusPunch3
is_first_turn_for AI_USER
- if_not_equal 0, BattleAIScript_82DDB5B
- if_random_less_than 100, BattleAIScript_82DDB5B
+ if_not_equal 0, AI_CV_FocusPunch_End
+ if_random_less_than 100, AI_CV_FocusPunch_End
score +1
- goto BattleAIScript_82DDB5B
+ goto AI_CV_FocusPunch_End
-BattleAIScript_82DDB42:
+AI_CV_FocusPunch2:
score -1
- goto BattleAIScript_82DDB5B
+ goto AI_CV_FocusPunch_End
-BattleAIScript_82DDB49:
- if_random_less_than 100, BattleAIScript_82DDB5B
+AI_CV_FocusPunch3:
+ if_random_less_than 100, AI_CV_FocusPunch_End
if_status2 AI_USER, STATUS2_SUBSTITUTE, Score_Plus5
-BattleAIScript_82DDB59:
+AI_CV_FocusPunch_ScoreUp1:
score +1
-BattleAIScript_82DDB5B:
+AI_CV_FocusPunch_End:
end
-BattleAIScript_82DDB5C:
- if_status AI_TARGET, STATUS1_PARALYSIS, BattleAIScript_82DDB6B
- goto BattleAIScript_82DDB6D
+AI_CV_SmellingSalt:
+ if_status AI_TARGET, STATUS1_PARALYSIS, AI_CV_SmellingSalt_ScoreUp1
+ goto AI_CV_SmellingSalt_End
-BattleAIScript_82DDB6B:
+AI_CV_SmellingSalt_ScoreUp1:
score +1
-BattleAIScript_82DDB6D:
+AI_CV_SmellingSalt_End:
end
-BattleAIScript_82DDB6E:
+AI_CV_Trick:
get_hold_effect AI_USER
- if_in_bytes sHoldEffectsTable_82DDBB7, BattleAIScript_82DDB89
- if_in_bytes sHoldEffectsTable_82DDBAF, BattleAIScript_82DDB9B
+ if_in_bytes AI_CV_Trick_EffectsToEncourage2, AI_CV_Trick3
+ if_in_bytes AI_CV_Trick_EffectsToEncourage, AI_CV_Trick4
-BattleAIScript_82DDB82:
+AI_CV_Trick2:
score -3
- goto BattleAIScript_82DDBAE
+ goto AI_CV_Trick_End
-BattleAIScript_82DDB89:
+AI_CV_Trick3:
get_hold_effect AI_TARGET
- if_in_bytes sHoldEffectsTable_82DDBB7, BattleAIScript_82DDB82
+ if_in_bytes AI_CV_Trick_EffectsToEncourage2, AI_CV_Trick2
score +5
- goto BattleAIScript_82DDBAE
+ goto AI_CV_Trick_End
-BattleAIScript_82DDB9B:
+AI_CV_Trick4:
get_hold_effect AI_TARGET
- if_in_bytes sHoldEffectsTable_82DDBAF, BattleAIScript_82DDB82
- if_random_less_than 50, BattleAIScript_82DDBAE
+ if_in_bytes AI_CV_Trick_EffectsToEncourage, AI_CV_Trick2
+ if_random_less_than 50, AI_CV_Trick_End
score +2
-BattleAIScript_82DDBAE:
+AI_CV_Trick_End:
end
-sHoldEffectsTable_82DDBAF:
+AI_CV_Trick_EffectsToEncourage:
.byte HOLD_EFFECT_CONFUSE_SPICY
.byte HOLD_EFFECT_CONFUSE_DRY
.byte HOLD_EFFECT_CONFUSE_SWEET
@@ -2472,28 +2472,28 @@ sHoldEffectsTable_82DDBAF:
.byte HOLD_EFFECT_CHOICE_BAND
.byte -1
-sHoldEffectsTable_82DDBB7:
+AI_CV_Trick_EffectsToEncourage2:
.byte HOLD_EFFECT_CHOICE_BAND
.byte -1
-BattleAIScript_82DDBB9:
+AI_CV_ChangeSelfAbility:
get_ability AI_USER
- if_in_bytes sAbilitiesTable_82DDBDF, BattleAIScript_82DDBCF
+ if_in_bytes AI_CV_ChangeSelfAbility_AbilitiesToEncourage, AI_CV_ChangeSelfAbility2
get_ability AI_TARGET
- if_in_bytes sAbilitiesTable_82DDBDF, BattleAIScript_82DDBD6
+ if_in_bytes AI_CV_ChangeSelfAbility_AbilitiesToEncourage, AI_CV_ChangeSelfAbility3
-BattleAIScript_82DDBCF:
+AI_CV_ChangeSelfAbility2:
score -1
- goto BattleAIScript_82DDBDE
+ goto AI_CV_ChangeSelfAbility_End
-BattleAIScript_82DDBD6:
- if_random_less_than 50, BattleAIScript_82DDBDE
+AI_CV_ChangeSelfAbility3:
+ if_random_less_than 50, AI_CV_ChangeSelfAbility_End
score +2
-BattleAIScript_82DDBDE:
+AI_CV_ChangeSelfAbility_End:
end
-sAbilitiesTable_82DDBDF:
+AI_CV_ChangeSelfAbility_AbilitiesToEncourage:
.byte ABILITY_SPEED_BOOST
.byte ABILITY_BATTLE_ARMOR
.byte ABILITY_SAND_VEIL
@@ -2512,287 +2512,287 @@ sAbilitiesTable_82DDBDF:
.byte ABILITY_SHIELD_DUST
.byte -1
-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, STAT_ATK, 6, BattleAIScript_82DDC1D
- if_target_faster BattleAIScript_82DDC16
- if_hp_more_than AI_USER, 40, BattleAIScript_82DDC1D
- goto BattleAIScript_82DDC1F
+AI_CV_Superpower:
+ if_type_effectiveness AI_EFFECTIVENESS_x0_25, AI_CV_Superpower_ScoreDown1
+ if_type_effectiveness AI_EFFECTIVENESS_x0_5, AI_CV_Superpower_ScoreDown1
+ if_stat_level_less_than AI_USER, STAT_ATK, 6, AI_CV_Superpower_ScoreDown1
+ if_target_faster AI_CV_Superpower2
+ if_hp_more_than AI_USER, 40, AI_CV_Superpower_ScoreDown1
+ goto AI_CV_Superpower_End
-BattleAIScript_82DDC16:
- if_hp_less_than AI_USER, 60, BattleAIScript_82DDC1F
+AI_CV_Superpower2:
+ if_hp_less_than AI_USER, 60, AI_CV_Superpower_End
-BattleAIScript_82DDC1D:
+AI_CV_Superpower_ScoreDown1:
score -1
-BattleAIScript_82DDC1F:
+AI_CV_Superpower_End:
end
-BattleAIScript_82DDC20:
- if_hp_more_than AI_TARGET, 30, BattleAIScript_82DDC2F
- if_random_less_than 100, BattleAIScript_82DDC2F
+AI_CV_MagicCoat:
+ if_hp_more_than AI_TARGET, 30, AI_CV_MagicCoat2
+ if_random_less_than 100, AI_CV_MagicCoat2
score -1
-BattleAIScript_82DDC2F:
+AI_CV_MagicCoat2:
is_first_turn_for AI_USER
- if_equal 0, BattleAIScript_82DDC4A
- if_random_less_than 150, BattleAIScript_82DDC52
+ if_equal 0, AI_CV_MagicCoat4
+ if_random_less_than 150, AI_CV_MagicCoat_End
score +1
- goto BattleAIScript_82DDC52
+ goto AI_CV_MagicCoat_End
AI_CV_MagicCoat3:
- if_random_less_than 50, BattleAIScript_82DDC52
+ if_random_less_than 50, AI_CV_MagicCoat_End
-BattleAIScript_82DDC4A:
- if_random_less_than 30, BattleAIScript_82DDC52
+AI_CV_MagicCoat4:
+ if_random_less_than 30, AI_CV_MagicCoat_End
score -1
-BattleAIScript_82DDC52:
+AI_CV_MagicCoat_End:
end
-BattleAIScript_82DDC53:
+AI_CV_Recycle:
get_used_held_item AI_USER
- if_not_in_bytes sItemsTable_82DDC6E, BattleAIScript_82DDC6B
- if_random_less_than 50, BattleAIScript_82DDC6D
+ if_not_in_bytes AI_CV_Recycle_ItemsToEncourage, AI_CV_Recycle_ScoreDown2
+ if_random_less_than 50, AI_CV_Recycle_End
score +1
- goto BattleAIScript_82DDC6D
+ goto AI_CV_Recycle_End
-BattleAIScript_82DDC6B:
+AI_CV_Recycle_ScoreDown2:
score -2
-BattleAIScript_82DDC6D:
+AI_CV_Recycle_End:
end
-sItemsTable_82DDC6E:
+AI_CV_Recycle_ItemsToEncourage:
.byte ITEM_CHESTO_BERRY
.byte ITEM_LUM_BERRY
.byte ITEM_STARF_BERRY
.byte -1
-BattleAIScript_82DDC72:
- if_status AI_TARGET, STATUS1_SLEEP, BattleAIScript_82DDC9D
- if_status2 AI_TARGET, STATUS2_INFATUATION, BattleAIScript_82DDC9D
- if_status2 AI_TARGET, STATUS2_CONFUSION, BattleAIScript_82DDC9D
- if_random_less_than 180, BattleAIScript_82DDC9D
+AI_CV_Revenge:
+ if_status AI_TARGET, STATUS1_SLEEP, AI_CV_Revenge_ScoreDown2
+ if_status2 AI_TARGET, STATUS2_INFATUATION, AI_CV_Revenge_ScoreDown2
+ if_status2 AI_TARGET, STATUS2_CONFUSION, AI_CV_Revenge_ScoreDown2
+ if_random_less_than 180, AI_CV_Revenge_ScoreDown2
score +2
- goto BattleAIScript_82DDC9F
+ goto AI_CV_Revenge_End
-BattleAIScript_82DDC9D:
+AI_CV_Revenge_ScoreDown2:
score -2
-BattleAIScript_82DDC9F:
+AI_CV_Revenge_End:
end
-BattleAIScript_82DDCA0:
- if_side_affecting AI_TARGET, SIDE_STATUS_REFLECT, BattleAIScript_82DDCAF
- goto BattleAIScript_82DDCB1
+AI_CV_BrickBreak:
+ if_side_affecting AI_TARGET, SIDE_STATUS_REFLECT, AI_CV_BrickBreak_ScoreUp1
+ goto AI_CV_BrickBreak_End
-BattleAIScript_82DDCAF:
+AI_CV_BrickBreak_ScoreUp1:
score +1
-BattleAIScript_82DDCB1:
+AI_CV_BrickBreak_End:
end
-BattleAIScript_82DDCB2:
- if_hp_less_than AI_TARGET, 30, BattleAIScript_82DDCC9
+AI_CV_KnockOff:
+ if_hp_less_than AI_TARGET, 30, AI_CV_KnockOff_End
is_first_turn_for AI_USER
- if_more_than 0, BattleAIScript_82DDCC9
- if_random_less_than 180, BattleAIScript_82DDCC9
+ if_more_than 0, AI_CV_KnockOff_End
+ if_random_less_than 180, AI_CV_KnockOff_End
score +1
-BattleAIScript_82DDCC9:
+AI_CV_KnockOff_End:
end
-BattleAIScript_82DDCCA:
- if_hp_less_than AI_TARGET, 70, BattleAIScript_82DDCF3
- if_target_faster BattleAIScript_82DDCE5
- if_hp_more_than AI_USER, 40, BattleAIScript_82DDCF3
+AI_CV_Endeavor:
+ if_hp_less_than AI_TARGET, 70, AI_CV_Endeavor_ScoreDown1
+ if_target_faster AI_CV_Endeavor2
+ if_hp_more_than AI_USER, 40, AI_CV_Endeavor_ScoreDown1
score +1
- goto BattleAIScript_82DDCF5
+ goto AI_CV_Endeavor_End
-BattleAIScript_82DDCE5:
- if_hp_more_than AI_USER, 50, BattleAIScript_82DDCF3
+AI_CV_Endeavor2:
+ if_hp_more_than AI_USER, 50, AI_CV_Endeavor_ScoreDown1
score +1
- goto BattleAIScript_82DDCF5
+ goto AI_CV_Endeavor_End
-BattleAIScript_82DDCF3:
+AI_CV_Endeavor_ScoreDown1:
score -1
-BattleAIScript_82DDCF5:
+AI_CV_Endeavor_End:
end
-BattleAIScript_82DDCF6:
- if_type_effectiveness AI_EFFECTIVENESS_x0_25, BattleAIScript_82DDD1B
- if_type_effectiveness AI_EFFECTIVENESS_x0_5, BattleAIScript_82DDD1B
- if_target_faster BattleAIScript_82DDD14
- if_hp_more_than AI_TARGET, 50, BattleAIScript_82DDD1D
- goto BattleAIScript_82DDD1B
+AI_CV_Eruption:
+ if_type_effectiveness AI_EFFECTIVENESS_x0_25, AI_CV_Eruption_ScoreDown1
+ if_type_effectiveness AI_EFFECTIVENESS_x0_5, AI_CV_Eruption_ScoreDown1
+ if_target_faster AI_CV_Eruption2
+ if_hp_more_than AI_TARGET, 50, AI_CV_Eruption_End
+ goto AI_CV_Eruption_ScoreDown1
-BattleAIScript_82DDD14:
- if_hp_more_than AI_TARGET, 70, BattleAIScript_82DDD1D
+AI_CV_Eruption2:
+ if_hp_more_than AI_TARGET, 70, AI_CV_Eruption_End
-BattleAIScript_82DDD1B:
+AI_CV_Eruption_ScoreDown1:
score -1
-BattleAIScript_82DDD1D:
+AI_CV_Eruption_End:
end
-BattleAIScript_82DDD1E:
+AI_CV_Imprison:
is_first_turn_for AI_USER
- if_more_than 0, BattleAIScript_82DDD2E
- if_random_less_than 100, BattleAIScript_82DDD2E
+ if_more_than 0, AI_CV_Imprison_End
+ if_random_less_than 100, AI_CV_Imprison_End
score +2
-BattleAIScript_82DDD2E:
+AI_CV_Imprison_End:
end
-BattleAIScript_82DDD2F:
- if_hp_less_than AI_TARGET, 50, BattleAIScript_82DDD3B
- goto BattleAIScript_82DDD3D
+AI_CV_Refresh:
+ if_hp_less_than AI_TARGET, 50, AI_CV_Refresh_ScoreDown1
+ goto AI_CV_Refresh_End
-BattleAIScript_82DDD3B:
+AI_CV_Refresh_ScoreDown1:
score -1
-BattleAIScript_82DDD3D:
+AI_CV_Refresh_End:
end
-BattleAIScript_82DDD3E:
+AI_CV_Snatch:
is_first_turn_for AI_USER
- if_equal 1, BattleAIScript_82DDD85
- if_random_less_than 30, BattleAIScript_82DDDA7
- if_target_faster BattleAIScript_82DDD6B
- if_hp_not_equal AI_USER, 100, BattleAIScript_82DDD9F
- if_hp_less_than AI_TARGET, 70, BattleAIScript_82DDD9F
- if_random_less_than 60, BattleAIScript_82DDDA7
- goto BattleAIScript_82DDD9F
-
-BattleAIScript_82DDD6B:
- if_hp_more_than AI_TARGET, 25, BattleAIScript_82DDD9F
- if_has_move_with_effect AI_TARGET, EFFECT_RESTORE_HP, BattleAIScript_82DDD85
- if_has_move_with_effect AI_TARGET, EFFECT_DEFENSE_CURL, BattleAIScript_82DDD85
- goto BattleAIScript_82DDD92
-
-BattleAIScript_82DDD85:
- if_random_less_than 150, BattleAIScript_82DDDA7
+ if_equal 1, AI_CV_Snatch3
+ if_random_less_than 30, AI_CV_Snatch_End
+ if_target_faster AI_CV_Snatch2
+ if_hp_not_equal AI_USER, 100, AI_CV_Snatch5
+ if_hp_less_than AI_TARGET, 70, AI_CV_Snatch5
+ if_random_less_than 60, AI_CV_Snatch_End
+ goto AI_CV_Snatch5
+
+AI_CV_Snatch2:
+ if_hp_more_than AI_TARGET, 25, AI_CV_Snatch5
+ if_has_move_with_effect AI_TARGET, EFFECT_RESTORE_HP, AI_CV_Snatch3
+ if_has_move_with_effect AI_TARGET, EFFECT_DEFENSE_CURL, AI_CV_Snatch3
+ goto AI_CV_Snatch4
+
+AI_CV_Snatch3:
+ if_random_less_than 150, AI_CV_Snatch_End
score +2
- goto BattleAIScript_82DDDA7
+ goto AI_CV_Snatch_End
-BattleAIScript_82DDD92:
- if_random_less_than 230, BattleAIScript_82DDD9F
+AI_CV_Snatch4:
+ if_random_less_than 230, AI_CV_Snatch5
score +1
- goto BattleAIScript_82DDDA7
+ goto AI_CV_Snatch_End
-BattleAIScript_82DDD9F:
- if_random_less_than 30, BattleAIScript_82DDDA7
+AI_CV_Snatch5:
+ if_random_less_than 30, AI_CV_Snatch_End
score -2
-BattleAIScript_82DDDA7:
+AI_CV_Snatch_End:
end
-BattleAIScript_82DDDA8:
- if_hp_less_than AI_USER, 50, BattleAIScript_82DDDCB
+AI_CV_MudSport:
+ if_hp_less_than AI_USER, 50, AI_CV_MudSport_ScoreDown1
get_target_type1
- if_equal TYPE_ELECTRIC, BattleAIScript_82DDDC4
+ if_equal TYPE_ELECTRIC, AI_CV_MudSport2
get_target_type2
- if_equal TYPE_ELECTRIC, BattleAIScript_82DDDC4
- goto BattleAIScript_82DDDCB
+ if_equal TYPE_ELECTRIC, AI_CV_MudSport2
+ goto AI_CV_MudSport_ScoreDown1
-BattleAIScript_82DDDC4:
+AI_CV_MudSport2:
score +1
- goto BattleAIScript_82DDDCD
+ goto AI_CV_MudSport_End
-BattleAIScript_82DDDCB:
+AI_CV_MudSport_ScoreDown1:
score -1
-BattleAIScript_82DDDCD:
+AI_CV_MudSport_End:
end
-BattleAIScript_82DDDCE:
- if_type_effectiveness AI_EFFECTIVENESS_x0_25, BattleAIScript_82DDDF3
- if_type_effectiveness AI_EFFECTIVENESS_x0_5, BattleAIScript_82DDDF3
- if_target_faster BattleAIScript_82DDDEC
- if_hp_more_than AI_USER, 60, BattleAIScript_82DDDF5
- goto BattleAIScript_82DDDF3
+AI_CV_Overheat:
+ if_type_effectiveness AI_EFFECTIVENESS_x0_25, AI_CV_Overheat_ScoreDown1
+ if_type_effectiveness AI_EFFECTIVENESS_x0_5, AI_CV_Overheat_ScoreDown1
+ if_target_faster AI_CV_Overheat2
+ if_hp_more_than AI_USER, 60, AI_CV_Overheat_End
+ goto AI_CV_Overheat_ScoreDown1
-BattleAIScript_82DDDEC:
- if_hp_more_than AI_USER, 80, BattleAIScript_82DDDF5
+AI_CV_Overheat2:
+ if_hp_more_than AI_USER, 80, AI_CV_Overheat_End
-BattleAIScript_82DDDF3:
+AI_CV_Overheat_ScoreDown1:
score -1
-BattleAIScript_82DDDF5:
+AI_CV_Overheat_End:
end
-BattleAIScript_82DDDF6:
- if_hp_less_than AI_USER, 50, BattleAIScript_82DDE19
+AI_CV_WaterSport:
+ if_hp_less_than AI_USER, 50, AI_CV_WaterSport_ScoreDown1
get_target_type1
- if_equal TYPE_FIRE, BattleAIScript_82DDE12
+ if_equal TYPE_FIRE, AI_CV_WaterSport2
get_target_type2
- if_equal TYPE_FIRE, BattleAIScript_82DDE12
- goto BattleAIScript_82DDE19
+ if_equal TYPE_FIRE, AI_CV_WaterSport2
+ goto AI_CV_WaterSport_ScoreDown1
-BattleAIScript_82DDE12:
+AI_CV_WaterSport2:
score +1
- goto BattleAIScript_82DDE1B
+ goto AI_CV_WaterSport_End
-BattleAIScript_82DDE19:
+AI_CV_WaterSport_ScoreDown1:
score -1
-BattleAIScript_82DDE1B:
+AI_CV_WaterSport_End:
end
-BattleAIScript_82DDE1C:
- if_target_faster BattleAIScript_82DDE36
- if_hp_more_than AI_USER, 50, BattleAIScript_82DDE3E
- if_random_less_than 70, BattleAIScript_82DDE3E
+AI_CV_DragonDance:
+ if_target_faster AI_CV_DragonDance2
+ if_hp_more_than AI_USER, 50, AI_CV_DragonDance_End
+ if_random_less_than 70, AI_CV_DragonDance_End
score -1
- goto BattleAIScript_82DDE3E
+ goto AI_CV_DragonDance_End
-BattleAIScript_82DDE36:
- if_random_less_than 128, BattleAIScript_82DDE3E
+AI_CV_DragonDance2:
+ if_random_less_than 128, AI_CV_DragonDance_End
score +1
-BattleAIScript_82DDE3E:
+AI_CV_DragonDance_End:
end
AI_CheckViability:
if_target_is_ally AI_Ret
- if_can_faint BattleAIScript_82DDE60
+ if_can_faint AI_TryToFaint_TryToEncourageQuickAttack
get_how_powerful_move_is
if_equal 1, Score_Minus1
if_type_effectiveness AI_EFFECTIVENESS_x4, BattleAIScript_82DDE57
end
BattleAIScript_82DDE57:
- if_random_less_than 80, BattleAIScript_82DDE70
+ if_random_less_than 80, AI_TryToFaint_End
score +2
end
-BattleAIScript_82DDE60:
- if_effect EFFECT_EXPLOSION, BattleAIScript_82DDE70
- if_not_effect EFFECT_QUICK_ATTACK, BattleAIScript_82DDE6E
+AI_TryToFaint_TryToEncourageQuickAttack:
+ if_effect EFFECT_EXPLOSION, AI_TryToFaint_End
+ if_not_effect EFFECT_QUICK_ATTACK, AI_TryToFaint_ScoreUp4
score +2
-BattleAIScript_82DDE6E:
+AI_TryToFaint_ScoreUp4:
score +4
-BattleAIScript_82DDE70:
+AI_TryToFaint_End:
end
AI_SetupFirstTurn:
if_target_is_ally AI_Ret
get_turn_count
- if_not_equal 0, BattleAIScript_82DDE8F
+ if_not_equal 0, AI_SetupFirstTurn_End
get_considered_move_effect
- if_not_in_bytes sMoveEffectsTable_82DDE90, BattleAIScript_82DDE8F
- if_random_less_than 80, BattleAIScript_82DDE8F
+ if_not_in_bytes AI_SetupFirstTurn_SetupEffectsToEncourage, AI_SetupFirstTurn_End
+ if_random_less_than 80, AI_SetupFirstTurn_End
score +2
-BattleAIScript_82DDE8F:
+AI_SetupFirstTurn_End:
end
-sMoveEffectsTable_82DDE90:
+AI_SetupFirstTurn_SetupEffectsToEncourage:
.byte EFFECT_ATTACK_UP
.byte EFFECT_DEFENSE_UP
.byte EFFECT_SPEED_UP
@@ -2853,24 +2853,24 @@ sMoveEffectsTable_82DDE90:
AI_PreferStrongestMove:
if_target_is_ally AI_Ret
get_how_powerful_move_is
- if_not_equal 0, BattleAIScript_82DDEDC
- if_random_less_than 100, BattleAIScript_82DDEDC
+ if_not_equal 0, AI_PreferStrongestMove_End
+ if_random_less_than 100, AI_PreferStrongestMove_End
score +2
-BattleAIScript_82DDEDC:
+AI_PreferStrongestMove_End:
end
AI_Risky:
if_target_is_ally AI_Ret
get_considered_move_effect
- if_not_in_bytes sMoveEffectsTable_82DDEF5, BattleAIScript_82DDEF4
- if_random_less_than 128, BattleAIScript_82DDEF4
+ if_not_in_bytes AI_Risky_EffectsToEncourage, AI_Risky_End
+ if_random_less_than 128, AI_Risky_End
score +2
-BattleAIScript_82DDEF4:
+AI_Risky_End:
end
-sMoveEffectsTable_82DDEF5:
+AI_Risky_EffectsToEncourage:
.byte EFFECT_SLEEP
.byte EFFECT_EXPLOSION
.byte EFFECT_MIRROR_MOVE
@@ -2898,25 +2898,25 @@ AI_PreferBatonPass:
if_equal 0, BattleAIScript_82DDFB3
get_how_powerful_move_is
if_not_equal 0, BattleAIScript_82DDFB3
- if_has_move_with_effect AI_USER, EFFECT_BATON_PASS, BattleAIScript_82DDF2A
- if_random_less_than 80, BattleAIScript_82DDEF4
-
-BattleAIScript_82DDF2A:
- if_move MOVE_SWORDS_DANCE, BattleAIScript_82DDF54
- if_move MOVE_DRAGON_DANCE, BattleAIScript_82DDF54
- if_move MOVE_CALM_MIND, BattleAIScript_82DDF54
- if_effect EFFECT_PROTECT, BattleAIScript_82DDF67
+ if_has_move_with_effect AI_USER, EFFECT_BATON_PASS, AI_PreferBatonPass_GoForBatonPass
+ if_random_less_than 80, AI_Risky_End
+
+AI_PreferBatonPass_GoForBatonPass:
+ if_move MOVE_SWORDS_DANCE, AI_PreferBatonPass2
+ if_move MOVE_DRAGON_DANCE, AI_PreferBatonPass2
+ if_move MOVE_CALM_MIND, AI_PreferBatonPass2
+ if_effect EFFECT_PROTECT, AI_PreferBatonPass_End
if_move MOVE_BATON_PASS, BattleAIScript_82DDF7B
- if_random_less_than 20, BattleAIScript_82DDEF4
+ if_random_less_than 20, AI_Risky_End
score +3
-BattleAIScript_82DDF54:
+AI_PreferBatonPass2:
get_turn_count
if_equal 0, Score_Plus5
if_hp_less_than AI_USER, 60, Score_Minus10
goto Score_Plus1
-BattleAIScript_82DDF67:
+AI_PreferBatonPass_End:
get_last_used_bank_move AI_USER
if_in_hwords sMovesTable_82DDF75, Score_Minus2
score +2
@@ -3085,51 +3085,51 @@ Score_Minus30_:
AI_HPAware:
if_target_is_ally AI_TryOnAlly
- if_hp_more_than AI_USER, 70, BattleAIScript_82DE1B5
- if_hp_more_than AI_USER, 30, BattleAIScript_82DE1C4
+ if_hp_more_than AI_USER, 70, AI_HPAware_UserHasHighHP
+ if_hp_more_than AI_USER, 30, AI_HPAware_UserHasMediumHP
get_considered_move_effect
- if_in_bytes sMoveEffectsTable_82DE258, BattleAIScript_82DE1D3
- goto BattleAIScript_82DE1DB
+ if_in_bytes AI_HPAware_DiscouragedEffectsWhenLowHP, AI_HPAware_TryToDiscourage
+ goto AI_HPAware_ConsiderTarget
-BattleAIScript_82DE1B5:
+AI_HPAware_UserHasHighHP:
get_considered_move_effect
- if_in_bytes sMoveEffectsTable_82DE21F, BattleAIScript_82DE1D3
- goto BattleAIScript_82DE1DB
+ if_in_bytes AI_HPAware_DiscouragedEffectsWhenHighHP, AI_HPAware_TryToDiscourage
+ goto AI_HPAware_ConsiderTarget
-BattleAIScript_82DE1C4:
+AI_HPAware_UserHasMediumHP:
get_considered_move_effect
- if_in_bytes sMoveEffectsTable_82DE22D, BattleAIScript_82DE1D3
- goto BattleAIScript_82DE1DB
+ if_in_bytes AI_HPAware_DiscouragedEffectsWhenMediumHP, AI_HPAware_TryToDiscourage
+ goto AI_HPAware_ConsiderTarget
-BattleAIScript_82DE1D3:
- if_random_less_than 50, BattleAIScript_82DE1DB
+AI_HPAware_TryToDiscourage:
+ if_random_less_than 50, AI_HPAware_ConsiderTarget
score -2
-BattleAIScript_82DE1DB:
- if_hp_more_than AI_TARGET, 70, BattleAIScript_82DE1F8
- if_hp_more_than AI_TARGET, 30, BattleAIScript_82DE207
+AI_HPAware_ConsiderTarget:
+ if_hp_more_than AI_TARGET, 70, AI_HPAware_TargetHasHighHP
+ if_hp_more_than AI_TARGET, 30, AI_HPAware_TargetHasMediumHP
get_considered_move_effect
- if_in_bytes sMoveEffectsTable_82DE2B1, BattleAIScript_82DE216
- goto BattleAIScript_82DE21E
+ if_in_bytes AI_HPAware_DiscouragedEffectsWhenTargetLowHP, AI_HPAware_TargetTryToDiscourage
+ goto AI_HPAware_End
-BattleAIScript_82DE1F8:
+AI_HPAware_TargetHasHighHP:
get_considered_move_effect
- if_in_bytes sMoveEffectsTable_82DE288, BattleAIScript_82DE216
- goto BattleAIScript_82DE21E
+ if_in_bytes AI_HPAware_DiscouragedEffectsWhenTargetHighHP, AI_HPAware_TargetTryToDiscourage
+ goto AI_HPAware_End
-BattleAIScript_82DE207:
+AI_HPAware_TargetHasMediumHP:
get_considered_move_effect
- if_in_bytes sMoveEffectsTable_82DE289, BattleAIScript_82DE216
- goto BattleAIScript_82DE21E
+ if_in_bytes AI_HPAware_DiscouragedEffectsWhenTargetMediumHP, AI_HPAware_TargetTryToDiscourage
+ goto AI_HPAware_End
-BattleAIScript_82DE216:
- if_random_less_than 50, BattleAIScript_82DE21E
+AI_HPAware_TargetTryToDiscourage:
+ if_random_less_than 50, AI_HPAware_End
score -2
-BattleAIScript_82DE21E:
+AI_HPAware_End:
end
-sMoveEffectsTable_82DE21F:
+AI_HPAware_DiscouragedEffectsWhenHighHP: @ 82DE21F
.byte EFFECT_EXPLOSION
.byte EFFECT_RESTORE_HP
.byte EFFECT_REST
@@ -3145,7 +3145,7 @@ sMoveEffectsTable_82DE21F:
.byte EFFECT_OVERHEAT
.byte -1
-sMoveEffectsTable_82DE22D:
+AI_HPAware_DiscouragedEffectsWhenMediumHP: @ 82DE22D
.byte EFFECT_EXPLOSION
.byte EFFECT_ATTACK_UP
.byte EFFECT_DEFENSE_UP
@@ -3190,7 +3190,7 @@ sMoveEffectsTable_82DE22D:
.byte EFFECT_DRAGON_DANCE
.byte -1
-sMoveEffectsTable_82DE258:
+AI_HPAware_DiscouragedEffectsWhenLowHP: @ 82DE258
.byte EFFECT_ATTACK_UP
.byte EFFECT_DEFENSE_UP
.byte EFFECT_SPEED_UP
@@ -3240,10 +3240,10 @@ sMoveEffectsTable_82DE258:
.byte EFFECT_DRAGON_DANCE
.byte -1
-sMoveEffectsTable_82DE288:
+AI_HPAware_DiscouragedEffectsWhenTargetHighHP: @ 82DE288
.byte -1
-sMoveEffectsTable_82DE289:
+AI_HPAware_DiscouragedEffectsWhenTargetMediumHP: @ 82DE289
.byte EFFECT_ATTACK_UP
.byte EFFECT_DEFENSE_UP
.byte EFFECT_SPEED_UP
@@ -3285,7 +3285,7 @@ sMoveEffectsTable_82DE289:
.byte EFFECT_DRAGON_DANCE
.byte -1
-sMoveEffectsTable_82DE2B1:
+AI_HPAware_DiscouragedEffectsWhenTargetLowHP: @ 82DE2B1
.byte EFFECT_SLEEP
.byte EFFECT_EXPLOSION
.byte EFFECT_ATTACK_UP
@@ -3349,36 +3349,36 @@ sMoveEffectsTable_82DE2B1:
AI_Unknown:
if_target_is_ally AI_TryOnAlly
- if_not_effect EFFECT_SUNNY_DAY, BattleAIScript_82DE308
- if_equal 0, BattleAIScript_82DE308
+ if_not_effect EFFECT_SUNNY_DAY, AI_Unknown_End
+ if_equal 0, AI_Unknown_End
is_first_turn_for AI_USER
- if_equal 0, BattleAIScript_82DE308
+ if_equal 0, AI_Unknown_End
score +5
-BattleAIScript_82DE308:
+AI_Unknown_End: @ 82DE308
end
AI_Roaming:
- if_status2 AI_USER, STATUS2_WRAPPED, BattleAIScript_82DE336
- if_status2 AI_USER, STATUS2_ESCAPE_PREVENTION, BattleAIScript_82DE336
+ if_status2 AI_USER, STATUS2_WRAPPED, AI_Roaming_End
+ if_status2 AI_USER, STATUS2_ESCAPE_PREVENTION, AI_Roaming_End
get_ability AI_TARGET
- if_equal ABILITY_SHADOW_TAG, BattleAIScript_82DE336
+ if_equal ABILITY_SHADOW_TAG, AI_Roaming_End
get_ability AI_USER
- if_equal ABILITY_LEVITATE, BattleAIScript_82DE335
+ if_equal ABILITY_LEVITATE, AI_Roaming_Flee
get_ability AI_TARGET
- if_equal ABILITY_ARENA_TRAP, BattleAIScript_82DE336
+ if_equal ABILITY_ARENA_TRAP, AI_Roaming_End
-BattleAIScript_82DE335:
+AI_Roaming_Flee: @ 82DE335
flee
-BattleAIScript_82DE336:
+AI_Roaming_End: @ 82DE336
end
AI_Safari:
- if_random_safari_flee BattleAIScript_82DE33D
+ if_random_safari_flee AI_Safari_Flee
watch
-BattleAIScript_82DE33D:
+AI_Safari_Flee:
flee
AI_FirstBattle:
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_frontier_1.s b/data/battle_frontier_1.s
index 34e8df6d2..e2eb99505 100644
--- a/data/battle_frontier_1.s
+++ b/data/battle_frontier_1.s
@@ -1872,24 +1872,24 @@ gUnknown_0860F010:: @ 860F010
.2byte FLAG_BADGE08_GET
gUnknown_0860F020:: @ 860F020
- .4byte gUnknown_082A5D6C
- .4byte gUnknown_082A5DAB
- .4byte gUnknown_082A5DF1
- .4byte gUnknown_082A5E34
- .4byte gUnknown_082A5E83
- .4byte gUnknown_082A5EB9
- .4byte gUnknown_082A5EF4
- .4byte gUnknown_082A5F39
- .4byte gUnknown_082A5F82
- .4byte gUnknown_082A5FB9
- .4byte gUnknown_082A6018
- .4byte gUnknown_082A6061
- .4byte gUnknown_082A609C
- .4byte gUnknown_082A60D5
- .4byte gUnknown_082A6124
- .4byte gUnknown_082A616F
- .4byte gUnknown_082A61D6
- .4byte gUnknown_082A623A
- .4byte gUnknown_082A6287
- .4byte gUnknown_082A62C9
- .4byte gUnknown_082A6312
+ .4byte gBirchDexRatingText_LessThan10
+ .4byte gBirchDexRatingText_LessThan20
+ .4byte gBirchDexRatingText_LessThan30
+ .4byte gBirchDexRatingText_LessThan40
+ .4byte gBirchDexRatingText_LessThan50
+ .4byte gBirchDexRatingText_LessThan60
+ .4byte gBirchDexRatingText_LessThan70
+ .4byte gBirchDexRatingText_LessThan80
+ .4byte gBirchDexRatingText_LessThan90
+ .4byte gBirchDexRatingText_LessThan100
+ .4byte gBirchDexRatingText_LessThan110
+ .4byte gBirchDexRatingText_LessThan120
+ .4byte gBirchDexRatingText_LessThan130
+ .4byte gBirchDexRatingText_LessThan140
+ .4byte gBirchDexRatingText_LessThan150
+ .4byte gBirchDexRatingText_LessThan160
+ .4byte gBirchDexRatingText_LessThan170
+ .4byte gBirchDexRatingText_LessThan180
+ .4byte gBirchDexRatingText_LessThan190
+ .4byte gBirchDexRatingText_LessThan200
+ .4byte gBirchDexRatingText_DexCompleted
diff --git a/data/battle_link_817C95C.s b/data/battle_link_817C95C.s
deleted file mode 100644
index 24f70c79c..000000000
--- a/data/battle_link_817C95C.s
+++ /dev/null
@@ -1,174 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 1
-gUnknown_0860A4AC:: @ 860A4AC
- .2byte 0x0044, 0x005a, 0x0075, 0x00f3, 0x0020, 0x00af, 0x00b3, 0x00ed, 0x0149, 0x0108, 0x011c, 0x0143, 0x008a, 0x0137, 0x00ad, 0x00dc
- .2byte 0x000c, 0x00da, 0x00d8, 0x011b, 0x00d9, 0x0117, 0xffff, 0x00de, 0x0095, 0xffff
-
- .align 1
-gUnknown_0860A4E0:: @ 860A4E0
- .2byte 0x0001, 0x0001, 0x0001, 0x0004, 0x0001, 0x0001, 0x0001, 0x0000, 0x0005, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001
- .2byte 0x0001, 0x0002, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0005, 0x0005, 0x0004, 0x0005, 0x0001, 0x0003, 0x0001
- .2byte 0x0003, 0x0005, 0x0001, 0x0007, 0x0001, 0x0007, 0x0007, 0x0001, 0x0005, 0x0002, 0x0004, 0x0001, 0x0001, 0x0001, 0x0005, 0x0001
- .2byte 0x0002, 0x0004, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0000, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001
- .2byte 0x0001, 0x0007, 0x0004, 0x0004, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0004, 0x0001, 0x0001, 0x0001, 0x0004
- .2byte 0x0005, 0x0002, 0x0004, 0x0001, 0x0004, 0x0001, 0x0007, 0x0002, 0x0001, 0x0005, 0x0007, 0x0003, 0x0003, 0x0004, 0x0003, 0x0003
- .2byte 0x0003, 0x0003, 0x0003, 0x0002, 0x0004, 0x0001, 0x0005, 0x0001, 0x0001, 0x0004, 0x0005, 0x0003, 0x0001, 0x0002, 0x0001, 0x0005
- .2byte 0x0004, 0x0003, 0x0006, 0x0004, 0x0003, 0x0003, 0x0003, 0x0002, 0x0004, 0x0001, 0x0001, 0x0001, 0x0005, 0x0001, 0x0001, 0x0007
- .2byte 0x0002, 0x0002, 0x0001, 0x0001, 0x0004, 0x0004, 0x0004, 0x0001, 0x0004, 0x0004, 0x0001, 0x0001, 0x0001, 0x0001, 0x0007, 0x0007
- .2byte 0x0006, 0x0003, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0002, 0x0003, 0x0001, 0x0001, 0x0004, 0x0004
- .2byte 0x0003, 0x0003, 0x0003, 0x0001, 0x0004, 0x0007, 0x0007, 0x0005, 0x0007, 0x0001, 0x0007, 0x0001, 0x0005, 0x0000, 0x0004, 0x0004
- .2byte 0x0004, 0x0004, 0x0004, 0x0002, 0x0002, 0x0006, 0x0003, 0x0006, 0x0004, 0x0004, 0x0002, 0x0005, 0x0002, 0x0001, 0x0001, 0x0006
- .2byte 0x0006, 0x0006, 0x0001, 0x0001, 0x0001, 0x0001, 0x0002, 0x0006, 0x0001, 0x0004, 0x0001, 0x0001, 0x0003, 0x0001, 0x0001, 0x0001
- .2byte 0x0001, 0x0001, 0x0004, 0x0001, 0x0001, 0x0003
-
- .align 1
-gUnknown_0860A68C:: @ 860A68C
- .2byte 0x0004, 0xfffd, 0xfffa
-
- .align 1
-gUnknown_0860A692:: @ 860A692
- .2byte 0x0004, 0x0004, 0x0006, 0x0006, 0x0007, 0x0006, 0x0002
-
- .align 1
-gUnknown_0860A6A0:: @ 860A6A0
- .2byte 0x0091, 0x0003, 0x00fa, 0x0003, 0x00be, 0x0003, 0x0080, 0x0003, 0x006e, 0x0003, 0x0098, 0x0003, 0x0143, 0x0003, 0x0123, 0x0003
- .2byte 0x007f, 0x0003, 0x014a, 0x0003, 0x0039, 0x0003, 0x0134, 0x0003, 0x0038, 0x0003, 0x003d, 0x0003, 0x015a, 0x0000, 0x0037, 0x0003
- .2byte 0x0160, 0x0003, 0x0137, 0x0003, 0x0057, 0x0003, 0x004c, 0xfffc, 0x013b, 0xfffc, 0x00ac, 0xfffc, 0x0035, 0xfffc, 0x00dd, 0xfffc
- .2byte 0x007e, 0xfffc, 0x0101, 0xfffc, 0x0034, 0xfffc, 0x0133, 0xfffc, 0x012b, 0xfffc, 0x011c, 0xfffc, 0x0053, 0xfffc, 0x0007, 0xfffc
- .2byte 0x004c, 0xfffc, 0xffff, 0x0000
-
- .align 1
-gUnknown_0860A728:: @ 860A728
- .2byte 0x013b, 0x0003, 0x00ac, 0x0003, 0x0035, 0x0003, 0x00dd, 0x0003, 0x007e, 0x0003, 0x0101, 0x0003, 0x0034, 0x0003, 0x0133, 0x0003
- .2byte 0x012b, 0x0003, 0x011c, 0x0003, 0x0053, 0x0003, 0x0007, 0x0003, 0x004c, 0x0005, 0x00eb, 0x0003, 0x00ea, 0x0003, 0x00ec, 0x0003
- .2byte 0x0137, 0x0003, 0xffff, 0x0000
-
- .align 1
-gUnknown_0860A770:: @ 860A770
- .2byte 0x0137, 0x0003, 0x004c, 0xfffd, 0xffff, 0x0000
-
- .align 1
-gUnknown_0860A77C:: @ 860A77C
- .2byte 0x0137, 0x0003, 0x004c, 0xfffd, 0xffff, 0x0000
-
- .align 1
-gUnknown_0860A788:: @ 860A788
- .2byte 0x0055, 0x0003, 0x0009, 0x0003, 0x00d1, 0x0003, 0x0054, 0x0003, 0x00c0, 0x0003, 0x015f, 0x0003, 0x0056, 0x0000, 0x0057, 0x0003
- .2byte 0x0158, 0x0003, 0xffff, 0x0000
-
- .align 1
-gUnknown_0860A7B0:: @ 860A7B0
- .2byte 0x0005, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003
-
- .align 1
-gUnknown_0860A7BE:: @ 860A7BE
- .2byte 0x0005, 0x0005, 0x0005, 0x0005, 0x0005
-
- .align 1
-gUnknown_0860A7C8:: @ 860A7C8
- .2byte 0x0004
-
- .align 1
-gUnknown_0860A7CA:: @ 860A7CA
- .2byte 0x0005
-
- .align 1
-gUnknown_0860A7CC:: @ 860A7CC
- .2byte 0x0005
-
- .align 1
-gUnknown_0860A7CE:: @ 860A7CE
- .2byte 0x0003
-
- .align 1
-gUnknown_0860A7D0:: @ 860A7D0
- .2byte 0x0003
-
- .align 1
-gUnknown_0860A7D2:: @ 860A7D2
- .2byte 0x0004
-
- .align 1
-gUnknown_0860A7D4:: @ 860A7D4
- .2byte 0x0003
-
- .align 1
-gUnknown_0860A7D6:: @ 860A7D6
- .2byte 0x0006
-
- .align 1
-gUnknown_0860A7D8:: @ 860A7D8
- .2byte 0x0006
-
- .align 1
-gUnknown_0860A7DA:: @ 860A7DA
- .2byte 0x0006
-
- .align 1
-gUnknown_0860A7DC:: @ 860A7DC
- .2byte 0x0004
-
- .align 1
-gUnknown_0860A7DE:: @ 860A7DE
- .2byte 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002
-
- .align 1
-gUnknown_0860A7EC:: @ 860A7EC
- .2byte 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004
-
- .align 1
-gUnknown_0860A7FA:: @ 860A7FA
- .2byte 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff
-
- .align 1
-gUnknown_0860A808:: @ 860A808
- .2byte 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002
-
- .align 1
-gUnknown_0860A816:: @ 860A816
- .2byte 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004
-
- .align 1
-gUnknown_0860A824:: @ 860A824
- .2byte 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe
-
- .align 2
-gUnknown_0860A834:: @ 860A834
- .4byte gUnknown_0860A4E0
- .4byte gUnknown_0860A68C
- .4byte gUnknown_0860A692
- .4byte gUnknown_0860A6A0
- .4byte gUnknown_0860A728
- .4byte gUnknown_0860A770
- .4byte gUnknown_0860A77C
- .4byte gUnknown_0860A788
- .4byte gUnknown_0860A7B0
- .4byte gUnknown_0860A7BE
- .4byte gUnknown_0860A7C8
- .4byte gUnknown_0860A7CA
- .4byte gUnknown_0860A7CC
- .4byte gUnknown_0860A7CE
- .4byte gUnknown_0860A7D0
- .4byte gUnknown_0860A7D2
- .4byte gUnknown_0860A7D4
- .4byte gUnknown_0860A7D6
- .4byte gUnknown_0860A7D8
- .4byte gUnknown_0860A7DA
- .4byte gUnknown_0860A7DA
- .4byte gUnknown_0860A7DC
- .4byte gUnknown_0860A7DE
- .4byte gUnknown_0860A7EC
- .4byte gUnknown_0860A7FA
- .4byte gUnknown_0860A808
- .4byte gUnknown_0860A816
- .4byte gUnknown_0860A824
-
- .align 1
-gUnknown_0860A8A4:: @ 860A8A4
- .2byte 0x0097, 0x00b2, 0x00bc, 0x008c, 0x00b4, 0x00b5, 0x0093, 0x006a, 0x0091, 0x005e, 0x0030, 0x002a, 0x0095, 0x001c, 0x001d, 0x0064
- .2byte 0x0060, 0xffff
-
diff --git a/data/battle_moves.inc b/data/battle_moves.inc
deleted file mode 100644
index c5c090546..000000000
--- a/data/battle_moves.inc
+++ /dev/null
@@ -1,3906 +0,0 @@
- .align 2
-gBattleMoves:: @ 831C898
-@ -
- .byte 0x00 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 0 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Pound
- .byte 0x00 @ effect
- .byte 40 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 35 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Karate Chop
- .byte 0x2b @ effect
- .byte 50 @ power
- .byte TYPE_FIGHTING
- .byte 100 @ accuracy
- .byte 25 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Double Slap
- .byte 0x1d @ effect
- .byte 15 @ power
- .byte TYPE_NORMAL
- .byte 85 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Comet Punch
- .byte 0x1d @ effect
- .byte 18 @ power
- .byte TYPE_NORMAL
- .byte 85 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Mega Punch
- .byte 0x00 @ effect
- .byte 80 @ power
- .byte TYPE_NORMAL
- .byte 85 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Pay Day
- .byte 0x22 @ effect
- .byte 40 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 100 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Fire Punch
- .byte 0x04 @ effect
- .byte 75 @ power
- .byte TYPE_FIRE
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Ice Punch
- .byte 0x05 @ effect
- .byte 75 @ power
- .byte TYPE_ICE
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Thunder Punch
- .byte 0x06 @ effect
- .byte 75 @ power
- .byte TYPE_ELECTRIC
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Scratch
- .byte 0x00 @ effect
- .byte 40 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 35 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Vice Grip
- .byte 0x00 @ effect
- .byte 55 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Guillotine
- .byte 0x26 @ effect
- .byte 1 @ power
- .byte TYPE_NORMAL
- .byte 30 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Razor Wind
- .byte 0x27 @ effect
- .byte 80 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Swords Dance
- .byte 0x32 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Cut
- .byte 0x00 @ effect
- .byte 50 @ power
- .byte TYPE_NORMAL
- .byte 95 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Gust
- .byte 0x95 @ effect
- .byte 40 @ power
- .byte TYPE_FLYING
- .byte 100 @ accuracy
- .byte 35 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Wing Attack
- .byte 0x00 @ effect
- .byte 60 @ power
- .byte TYPE_FLYING
- .byte 100 @ accuracy
- .byte 35 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Whirlwind
- .byte 0x1c @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte -6 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Fly
- .byte 0x9b @ effect
- .byte 70 @ power
- .byte TYPE_FLYING
- .byte 95 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Bind
- .byte 0x2a @ effect
- .byte 15 @ power
- .byte TYPE_NORMAL
- .byte 75 @ accuracy
- .byte 20 @ PP
- .byte 100 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Slam
- .byte 0x00 @ effect
- .byte 80 @ power
- .byte TYPE_NORMAL
- .byte 75 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Vine Whip
- .byte 0x00 @ effect
- .byte 35 @ power
- .byte TYPE_GRASS
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Stomp
- .byte 0x96 @ effect
- .byte 65 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 30 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Double Kick
- .byte 0x2c @ effect
- .byte 30 @ power
- .byte TYPE_FIGHTING
- .byte 100 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Mega Kick
- .byte 0x00 @ effect
- .byte 120 @ power
- .byte TYPE_NORMAL
- .byte 75 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Jump Kick
- .byte 0x2d @ effect
- .byte 70 @ power
- .byte TYPE_FIGHTING
- .byte 95 @ accuracy
- .byte 25 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Rolling Kick
- .byte 0x1f @ effect
- .byte 60 @ power
- .byte TYPE_FIGHTING
- .byte 85 @ accuracy
- .byte 15 @ PP
- .byte 30 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Sand-Attack
- .byte 0x17 @ effect
- .byte 0 @ power
- .byte TYPE_GROUND
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Headbutt
- .byte 0x1f @ effect
- .byte 70 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 30 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Horn Attack
- .byte 0x00 @ effect
- .byte 65 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 25 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Fury Attack
- .byte 0x1d @ effect
- .byte 15 @ power
- .byte TYPE_NORMAL
- .byte 85 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Horn Drill
- .byte 0x26 @ effect
- .byte 1 @ power
- .byte TYPE_NORMAL
- .byte 30 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Tackle
- .byte 0x00 @ effect
- .byte 35 @ power
- .byte TYPE_NORMAL
- .byte 95 @ accuracy
- .byte 35 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Body Slam
- .byte 0x06 @ effect
- .byte 85 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 30 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Wrap
- .byte 0x2a @ effect
- .byte 15 @ power
- .byte TYPE_NORMAL
- .byte 85 @ accuracy
- .byte 20 @ PP
- .byte 100 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Take Down
- .byte 0x30 @ effect
- .byte 90 @ power
- .byte TYPE_NORMAL
- .byte 85 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Thrash
- .byte 0x1b @ effect
- .byte 90 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 100 @ side effect chance
- .byte F_TARGET_RANDOM
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Double-Edge
- .byte 0xc6 @ effect
- .byte 120 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Tail Whip
- .byte 0x13 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Poison Sting
- .byte 0x02 @ effect
- .byte 15 @ power
- .byte TYPE_POISON
- .byte 100 @ accuracy
- .byte 35 @ PP
- .byte 30 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Twineedle
- .byte 0x4d @ effect
- .byte 25 @ power
- .byte TYPE_BUG
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 20 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Pin Missile
- .byte 0x1d @ effect
- .byte 14 @ power
- .byte TYPE_BUG
- .byte 85 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Leer
- .byte 0x13 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Bite
- .byte 0x1f @ effect
- .byte 60 @ power
- .byte TYPE_DARK
- .byte 100 @ accuracy
- .byte 25 @ PP
- .byte 30 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Growl
- .byte 0x12 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 40 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Roar
- .byte 0x1c @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte -6 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Sing
- .byte 0x01 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 55 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Supersonic
- .byte 0x31 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 55 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Sonic Boom
- .byte 0x82 @ effect
- .byte 1 @ power
- .byte TYPE_NORMAL
- .byte 90 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Disable
- .byte 0x56 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 55 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Acid
- .byte 0x45 @ effect
- .byte 40 @ power
- .byte TYPE_POISON
- .byte 100 @ accuracy
- .byte 30 @ PP
- .byte 10 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Ember
- .byte 0x04 @ effect
- .byte 40 @ power
- .byte TYPE_FIRE
- .byte 100 @ accuracy
- .byte 25 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Flamethrower
- .byte 0x04 @ effect
- .byte 95 @ power
- .byte TYPE_FIRE
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Mist
- .byte 0x2e @ effect
- .byte 0 @ power
- .byte TYPE_ICE
- .byte 0 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Water Gun
- .byte 0x00 @ effect
- .byte 40 @ power
- .byte TYPE_WATER
- .byte 100 @ accuracy
- .byte 25 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Hydro Pump
- .byte 0x00 @ effect
- .byte 120 @ power
- .byte TYPE_WATER
- .byte 80 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Surf
- .byte 0x00 @ effect
- .byte 95 @ power
- .byte TYPE_WATER
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Ice Beam
- .byte 0x05 @ effect
- .byte 95 @ power
- .byte TYPE_ICE
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Blizzard
- .byte 0x05 @ effect
- .byte 120 @ power
- .byte TYPE_ICE
- .byte 70 @ accuracy
- .byte 5 @ PP
- .byte 10 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Psybeam
- .byte 0x4c @ effect
- .byte 65 @ power
- .byte TYPE_PSYCHIC
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Bubble Beam
- .byte 0x46 @ effect
- .byte 65 @ power
- .byte TYPE_WATER
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Aurora Beam
- .byte 0x44 @ effect
- .byte 65 @ power
- .byte TYPE_ICE
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Hyper Beam
- .byte 0x50 @ effect
- .byte 150 @ power
- .byte TYPE_NORMAL
- .byte 90 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Peck
- .byte 0x00 @ effect
- .byte 35 @ power
- .byte TYPE_FLYING
- .byte 100 @ accuracy
- .byte 35 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Drill Peck
- .byte 0x00 @ effect
- .byte 80 @ power
- .byte TYPE_FLYING
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Submission
- .byte 0x30 @ effect
- .byte 80 @ power
- .byte TYPE_FIGHTING
- .byte 80 @ accuracy
- .byte 25 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Low Kick
- .byte 0xc4 @ effect
- .byte 1 @ power
- .byte TYPE_FIGHTING
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Counter
- .byte 0x59 @ effect
- .byte 1 @ power
- .byte TYPE_FIGHTING
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_SPECIAL
- .byte -5 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_MAKES_CONTACT @ misc. flags
-
-@ Seismic Toss
- .byte 0x57 @ effect
- .byte 1 @ power
- .byte TYPE_FIGHTING
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Strength
- .byte 0x00 @ effect
- .byte 80 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Absorb
- .byte 0x03 @ effect
- .byte 20 @ power
- .byte TYPE_GRASS
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Mega Drain
- .byte 0x03 @ effect
- .byte 40 @ power
- .byte TYPE_GRASS
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Leech Seed
- .byte 0x54 @ effect
- .byte 0 @ power
- .byte TYPE_GRASS
- .byte 90 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Growth
- .byte 0x0d @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 40 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Razor Leaf
- .byte 0x2b @ effect
- .byte 55 @ power
- .byte TYPE_GRASS
- .byte 95 @ accuracy
- .byte 25 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Solar Beam
- .byte 0x97 @ effect
- .byte 120 @ power
- .byte TYPE_GRASS
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Poison Powder
- .byte 0x42 @ effect
- .byte 0 @ power
- .byte TYPE_POISON
- .byte 75 @ accuracy
- .byte 35 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Stun Spore
- .byte 0x43 @ effect
- .byte 0 @ power
- .byte TYPE_GRASS
- .byte 75 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Sleep Powder
- .byte 0x01 @ effect
- .byte 0 @ power
- .byte TYPE_GRASS
- .byte 75 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Petal Dance
- .byte 0x1b @ effect
- .byte 70 @ power
- .byte TYPE_GRASS
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 100 @ side effect chance
- .byte F_TARGET_RANDOM
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ String Shot
- .byte 0x14 @ effect
- .byte 0 @ power
- .byte TYPE_BUG
- .byte 95 @ accuracy
- .byte 40 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Dragon Rage
- .byte 0x29 @ effect
- .byte 1 @ power
- .byte TYPE_DRAGON
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Fire Spin
- .byte 0x2a @ effect
- .byte 15 @ power
- .byte TYPE_FIRE
- .byte 70 @ accuracy
- .byte 15 @ PP
- .byte 100 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Thunder Shock
- .byte 0x06 @ effect
- .byte 40 @ power
- .byte TYPE_ELECTRIC
- .byte 100 @ accuracy
- .byte 30 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Thunderbolt
- .byte 0x06 @ effect
- .byte 95 @ power
- .byte TYPE_ELECTRIC
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Thunder Wave
- .byte 0x43 @ effect
- .byte 0 @ power
- .byte TYPE_ELECTRIC
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Thunder
- .byte 0x98 @ effect
- .byte 120 @ power
- .byte TYPE_ELECTRIC
- .byte 70 @ accuracy
- .byte 10 @ PP
- .byte 30 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Rock Throw
- .byte 0x00 @ effect
- .byte 50 @ power
- .byte TYPE_ROCK
- .byte 90 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Earthquake
- .byte 0x93 @ effect
- .byte 100 @ power
- .byte TYPE_GROUND
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_ALL_EXCEPT_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Fissure
- .byte 0x26 @ effect
- .byte 1 @ power
- .byte TYPE_GROUND
- .byte 30 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Dig
- .byte 0x9b @ effect
- .byte 60 @ power
- .byte TYPE_GROUND
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Toxic
- .byte 0x21 @ effect
- .byte 0 @ power
- .byte TYPE_POISON
- .byte 85 @ accuracy
- .byte 10 @ PP
- .byte 100 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Confusion
- .byte 0x4c @ effect
- .byte 50 @ power
- .byte TYPE_PSYCHIC
- .byte 100 @ accuracy
- .byte 25 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Psychic
- .byte 0x48 @ effect
- .byte 90 @ power
- .byte TYPE_PSYCHIC
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Hypnosis
- .byte 0x01 @ effect
- .byte 0 @ power
- .byte TYPE_PSYCHIC
- .byte 60 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Meditate
- .byte 0x0a @ effect
- .byte 0 @ power
- .byte TYPE_PSYCHIC
- .byte 0 @ accuracy
- .byte 40 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Agility
- .byte 0x34 @ effect
- .byte 0 @ power
- .byte TYPE_PSYCHIC
- .byte 0 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Quick Attack
- .byte 0x67 @ effect
- .byte 40 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 1 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Rage
- .byte 0x51 @ effect
- .byte 20 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Teleport
- .byte 0x99 @ effect
- .byte 0 @ power
- .byte TYPE_PSYCHIC
- .byte 0 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Night Shade
- .byte 0x57 @ effect
- .byte 1 @ power
- .byte TYPE_GHOST
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Mimic
- .byte 0x52 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Screech
- .byte 0x3b @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 85 @ accuracy
- .byte 40 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Double Team
- .byte 0x10 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Recover
- .byte 0x20 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Harden
- .byte 0x0b @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Minimize
- .byte 0x6c @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Smokescreen
- .byte 0x17 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Confuse Ray
- .byte 0x31 @ effect
- .byte 0 @ power
- .byte TYPE_GHOST
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Withdraw
- .byte 0x0b @ effect
- .byte 0 @ power
- .byte TYPE_WATER
- .byte 0 @ accuracy
- .byte 40 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Defense Curl
- .byte 0x9c @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 40 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Barrier
- .byte 0x33 @ effect
- .byte 0 @ power
- .byte TYPE_PSYCHIC
- .byte 0 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Light Screen
- .byte 0x23 @ effect
- .byte 0 @ power
- .byte TYPE_PSYCHIC
- .byte 0 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Haze
- .byte 0x19 @ effect
- .byte 0 @ power
- .byte TYPE_ICE
- .byte 0 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Reflect
- .byte 0x41 @ effect
- .byte 0 @ power
- .byte TYPE_PSYCHIC
- .byte 0 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Focus Energy
- .byte 0x2f @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Bide
- .byte 0x1a @ effect
- .byte 1 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Metronome
- .byte 0x53 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_SPECIAL
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Mirror Move
- .byte 0x09 @ effect
- .byte 0 @ power
- .byte TYPE_FLYING
- .byte 0 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_SPECIAL
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Self-Destruct
- .byte 0x07 @ effect
- .byte 200 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_ALL_EXCEPT_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Egg Bomb
- .byte 0x00 @ effect
- .byte 100 @ power
- .byte TYPE_NORMAL
- .byte 75 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Lick
- .byte 0x06 @ effect
- .byte 20 @ power
- .byte TYPE_GHOST
- .byte 100 @ accuracy
- .byte 30 @ PP
- .byte 30 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Smog
- .byte 0x02 @ effect
- .byte 20 @ power
- .byte TYPE_POISON
- .byte 70 @ accuracy
- .byte 20 @ PP
- .byte 40 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Sludge
- .byte 0x02 @ effect
- .byte 65 @ power
- .byte TYPE_POISON
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 30 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Bone Club
- .byte 0x1f @ effect
- .byte 65 @ power
- .byte TYPE_GROUND
- .byte 85 @ accuracy
- .byte 20 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Fire Blast
- .byte 0x04 @ effect
- .byte 120 @ power
- .byte TYPE_FIRE
- .byte 85 @ accuracy
- .byte 5 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Waterfall
- .byte 0x00 @ effect
- .byte 80 @ power
- .byte TYPE_WATER
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Clamp
- .byte 0x2a @ effect
- .byte 35 @ power
- .byte TYPE_WATER
- .byte 75 @ accuracy
- .byte 10 @ PP
- .byte 100 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Swift
- .byte 0x11 @ effect
- .byte 60 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Skull Bash
- .byte 0x91 @ effect
- .byte 100 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Spike Cannon
- .byte 0x1d @ effect
- .byte 20 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Constrict
- .byte 0x46 @ effect
- .byte 10 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 35 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Amnesia
- .byte 0x36 @ effect
- .byte 0 @ power
- .byte TYPE_PSYCHIC
- .byte 0 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Kinesis
- .byte 0x17 @ effect
- .byte 0 @ power
- .byte TYPE_PSYCHIC
- .byte 80 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Soft-Boiled
- .byte 0x9d @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Hi Jump Kick
- .byte 0x2d @ effect
- .byte 85 @ power
- .byte TYPE_FIGHTING
- .byte 90 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Glare
- .byte 0x43 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 75 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Dream Eater
- .byte 0x08 @ effect
- .byte 100 @ power
- .byte TYPE_PSYCHIC
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Poison Gas
- .byte 0x42 @ effect
- .byte 0 @ power
- .byte TYPE_POISON
- .byte 55 @ accuracy
- .byte 40 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Barrage
- .byte 0x1d @ effect
- .byte 15 @ power
- .byte TYPE_NORMAL
- .byte 85 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Leech Life
- .byte 0x03 @ effect
- .byte 20 @ power
- .byte TYPE_BUG
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Lovely Kiss
- .byte 0x01 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 75 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Sky Attack
- .byte 0x4b @ effect
- .byte 140 @ power
- .byte TYPE_FLYING
- .byte 90 @ accuracy
- .byte 5 @ PP
- .byte 30 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Transform
- .byte 0x39 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Bubble
- .byte 0x46 @ effect
- .byte 20 @ power
- .byte TYPE_WATER
- .byte 100 @ accuracy
- .byte 30 @ PP
- .byte 10 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Dizzy Punch
- .byte 0x4c @ effect
- .byte 70 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 20 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Spore
- .byte 0x01 @ effect
- .byte 0 @ power
- .byte TYPE_GRASS
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Flash
- .byte 0x17 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 70 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Psywave
- .byte 0x58 @ effect
- .byte 1 @ power
- .byte TYPE_PSYCHIC
- .byte 80 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Splash
- .byte 0x55 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 40 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Acid Armor
- .byte 0x33 @ effect
- .byte 0 @ power
- .byte TYPE_POISON
- .byte 0 @ accuracy
- .byte 40 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Crabhammer
- .byte 0x2b @ effect
- .byte 90 @ power
- .byte TYPE_WATER
- .byte 85 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Explosion
- .byte 0x07 @ effect
- .byte 250 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_ALL_EXCEPT_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Fury Swipes
- .byte 0x1d @ effect
- .byte 18 @ power
- .byte TYPE_NORMAL
- .byte 80 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Bonemerang
- .byte 0x2c @ effect
- .byte 50 @ power
- .byte TYPE_GROUND
- .byte 90 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Rest
- .byte 0x25 @ effect
- .byte 0 @ power
- .byte TYPE_PSYCHIC
- .byte 0 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Rock Slide
- .byte 0x1f @ effect
- .byte 75 @ power
- .byte TYPE_ROCK
- .byte 90 @ accuracy
- .byte 10 @ PP
- .byte 30 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Hyper Fang
- .byte 0x1f @ effect
- .byte 80 @ power
- .byte TYPE_NORMAL
- .byte 90 @ accuracy
- .byte 15 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Sharpen
- .byte 0x0a @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Conversion
- .byte 0x1e @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Tri Attack
- .byte 0x24 @ effect
- .byte 80 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 20 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Super Fang
- .byte 0x28 @ effect
- .byte 1 @ power
- .byte TYPE_NORMAL
- .byte 90 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Slash
- .byte 0x2b @ effect
- .byte 70 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Substitute
- .byte 0x4f @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Struggle
- .byte 0x30 @ effect
- .byte 50 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 1 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Sketch
- .byte 0x5f @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 1 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Triple Kick
- .byte 0x68 @ effect
- .byte 10 @ power
- .byte TYPE_FIGHTING
- .byte 90 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Thief
- .byte 0x69 @ effect
- .byte 40 @ power
- .byte TYPE_DARK
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 100 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Spider Web
- .byte 0x6a @ effect
- .byte 0 @ power
- .byte TYPE_BUG
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Mind Reader
- .byte 0x5e @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Nightmare
- .byte 0x6b @ effect
- .byte 0 @ power
- .byte TYPE_GHOST
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Flame Wheel
- .byte 0x7d @ effect
- .byte 60 @ power
- .byte TYPE_FIRE
- .byte 100 @ accuracy
- .byte 25 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Snore
- .byte 0x5c @ effect
- .byte 40 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 30 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Curse
- .byte 0x6d @ effect
- .byte 0 @ power
- .byte TYPE_MYSTERY
- .byte 0 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Flail
- .byte 0x63 @ effect
- .byte 1 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Conversion 2
- .byte 0x5d @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Aeroblast
- .byte 0x2b @ effect
- .byte 100 @ power
- .byte TYPE_FLYING
- .byte 95 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Cotton Spore
- .byte 0x3c @ effect
- .byte 0 @ power
- .byte TYPE_GRASS
- .byte 85 @ accuracy
- .byte 40 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Reversal
- .byte 0x63 @ effect
- .byte 1 @ power
- .byte TYPE_FIGHTING
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Spite
- .byte 0x64 @ effect
- .byte 0 @ power
- .byte TYPE_GHOST
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Powder Snow
- .byte 0x05 @ effect
- .byte 40 @ power
- .byte TYPE_ICE
- .byte 100 @ accuracy
- .byte 25 @ PP
- .byte 10 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Protect
- .byte 0x6f @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 3 @ priority
- .4byte 0 @ misc. flags
-
-@ Mach Punch
- .byte 0x67 @ effect
- .byte 40 @ power
- .byte TYPE_FIGHTING
- .byte 100 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 1 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Scary Face
- .byte 0x3c @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 90 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Faint Attack
- .byte 0x11 @ effect
- .byte 60 @ power
- .byte TYPE_DARK
- .byte 0 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Sweet Kiss
- .byte 0x31 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 75 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Belly Drum
- .byte 0x8e @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Sludge Bomb
- .byte 0x02 @ effect
- .byte 90 @ power
- .byte TYPE_POISON
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 30 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Mud-Slap
- .byte 0x49 @ effect
- .byte 20 @ power
- .byte TYPE_GROUND
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 100 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Octazooka
- .byte 0x49 @ effect
- .byte 65 @ power
- .byte TYPE_WATER
- .byte 85 @ accuracy
- .byte 10 @ PP
- .byte 50 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Spikes
- .byte 0x70 @ effect
- .byte 0 @ power
- .byte TYPE_GROUND
- .byte 0 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_ENEMY_SIDE
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Zap Cannon
- .byte 0x06 @ effect
- .byte 100 @ power
- .byte TYPE_ELECTRIC
- .byte 50 @ accuracy
- .byte 5 @ PP
- .byte 100 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Foresight
- .byte 0x71 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 40 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Destiny Bond
- .byte 0x62 @ effect
- .byte 0 @ power
- .byte TYPE_GHOST
- .byte 0 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Perish Song
- .byte 0x72 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Icy Wind
- .byte 0x46 @ effect
- .byte 55 @ power
- .byte TYPE_ICE
- .byte 95 @ accuracy
- .byte 15 @ PP
- .byte 100 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Detect
- .byte 0x6f @ effect
- .byte 0 @ power
- .byte TYPE_FIGHTING
- .byte 0 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 3 @ priority
- .4byte 0 @ misc. flags
-
-@ Bone Rush
- .byte 0x1d @ effect
- .byte 25 @ power
- .byte TYPE_GROUND
- .byte 80 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Lock-On
- .byte 0x5e @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Outrage
- .byte 0x1b @ effect
- .byte 90 @ power
- .byte TYPE_DRAGON
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 100 @ side effect chance
- .byte F_TARGET_RANDOM
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Sandstorm
- .byte 0x73 @ effect
- .byte 0 @ power
- .byte TYPE_ROCK
- .byte 0 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Giga Drain
- .byte 0x03 @ effect
- .byte 60 @ power
- .byte TYPE_GRASS
- .byte 100 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Endure
- .byte 0x74 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 3 @ priority
- .4byte 0 @ misc. flags
-
-@ Charm
- .byte 0x3a @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Rollout
- .byte 0x75 @ effect
- .byte 30 @ power
- .byte TYPE_ROCK
- .byte 90 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ False Swipe
- .byte 0x65 @ effect
- .byte 40 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 40 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Swagger
- .byte 0x76 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 90 @ accuracy
- .byte 15 @ PP
- .byte 100 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Milk Drink
- .byte 0x9d @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Spark
- .byte 0x06 @ effect
- .byte 65 @ power
- .byte TYPE_ELECTRIC
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 30 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Fury Cutter
- .byte 0x77 @ effect
- .byte 10 @ power
- .byte TYPE_BUG
- .byte 95 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Steel Wing
- .byte 0x8a @ effect
- .byte 70 @ power
- .byte TYPE_STEEL
- .byte 90 @ accuracy
- .byte 25 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Mean Look
- .byte 0x6a @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Attract
- .byte 0x78 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Sleep Talk
- .byte 0x61 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_SPECIAL
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Heal Bell
- .byte 0x66 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Return
- .byte 0x79 @ effect
- .byte 1 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Present
- .byte 0x7a @ effect
- .byte 1 @ power
- .byte TYPE_NORMAL
- .byte 90 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Frustration
- .byte 0x7b @ effect
- .byte 1 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Safeguard
- .byte 0x7c @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 25 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Pain Split
- .byte 0x5b @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Sacred Fire
- .byte 0x7d @ effect
- .byte 100 @ power
- .byte TYPE_FIRE
- .byte 95 @ accuracy
- .byte 5 @ PP
- .byte 50 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Magnitude
- .byte 0x7e @ effect
- .byte 1 @ power
- .byte TYPE_GROUND
- .byte 100 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_ALL_EXCEPT_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Dynamic Punch
- .byte 0x4c @ effect
- .byte 100 @ power
- .byte TYPE_FIGHTING
- .byte 50 @ accuracy
- .byte 5 @ PP
- .byte 100 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Megahorn
- .byte 0x00 @ effect
- .byte 120 @ power
- .byte TYPE_BUG
- .byte 85 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Dragon Breath
- .byte 0x06 @ effect
- .byte 60 @ power
- .byte TYPE_DRAGON
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 30 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Baton Pass
- .byte 0x7f @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 40 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Encore
- .byte 0x5a @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Pursuit
- .byte 0x80 @ effect
- .byte 40 @ power
- .byte TYPE_DARK
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Rapid Spin
- .byte 0x81 @ effect
- .byte 20 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 40 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Sweet Scent
- .byte 0x18 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Iron Tail
- .byte 0x45 @ effect
- .byte 100 @ power
- .byte TYPE_STEEL
- .byte 75 @ accuracy
- .byte 15 @ PP
- .byte 30 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Metal Claw
- .byte 0x8b @ effect
- .byte 50 @ power
- .byte TYPE_STEEL
- .byte 95 @ accuracy
- .byte 35 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Vital Throw
- .byte 0x4e @ effect
- .byte 70 @ power
- .byte TYPE_FIGHTING
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte -1 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Morning Sun
- .byte 0x84 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Synthesis
- .byte 0x85 @ effect
- .byte 0 @ power
- .byte TYPE_GRASS
- .byte 0 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Moonlight
- .byte 0x86 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Hidden Power
- .byte 0x87 @ effect
- .byte 1 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Cross Chop
- .byte 0x2b @ effect
- .byte 100 @ power
- .byte TYPE_FIGHTING
- .byte 80 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Twister
- .byte 0x92 @ effect
- .byte 40 @ power
- .byte TYPE_DRAGON
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 20 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Rain Dance
- .byte 0x88 @ effect
- .byte 0 @ power
- .byte TYPE_WATER
- .byte 0 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Sunny Day
- .byte 0x89 @ effect
- .byte 0 @ power
- .byte TYPE_FIRE
- .byte 0 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Crunch
- .byte 0x48 @ effect
- .byte 80 @ power
- .byte TYPE_DARK
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 20 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Mirror Coat
- .byte 0x90 @ effect
- .byte 1 @ power
- .byte TYPE_PSYCHIC
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_SPECIAL
- .byte -5 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE @ misc. flags
-
-@ Psych Up
- .byte 0x8f @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Extreme Speed
- .byte 0x67 @ effect
- .byte 80 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 1 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Ancient Power
- .byte 0x8c @ effect
- .byte 60 @ power
- .byte TYPE_ROCK
- .byte 100 @ accuracy
- .byte 5 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Shadow Ball
- .byte 0x48 @ effect
- .byte 80 @ power
- .byte TYPE_GHOST
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 20 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Future Sight
- .byte 0x94 @ effect
- .byte 80 @ power
- .byte TYPE_PSYCHIC
- .byte 90 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Rock Smash
- .byte 0x45 @ effect
- .byte 20 @ power
- .byte TYPE_FIGHTING
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 50 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Whirlpool
- .byte 0x2a @ effect
- .byte 15 @ power
- .byte TYPE_WATER
- .byte 70 @ accuracy
- .byte 15 @ PP
- .byte 100 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Beat Up
- .byte 0x9a @ effect
- .byte 10 @ power
- .byte TYPE_DARK
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Fake Out
- .byte 0x9e @ effect
- .byte 40 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 1 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Uproar
- .byte 0x9f @ effect
- .byte 50 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 100 @ side effect chance
- .byte F_TARGET_RANDOM
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Stockpile
- .byte 0xa0 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Spit Up
- .byte 0xa1 @ effect
- .byte 100 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Swallow
- .byte 0xa2 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Heat Wave
- .byte 0x04 @ effect
- .byte 100 @ power
- .byte TYPE_FIRE
- .byte 90 @ accuracy
- .byte 10 @ PP
- .byte 10 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Hail
- .byte 0xa4 @ effect
- .byte 0 @ power
- .byte TYPE_ICE
- .byte 0 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Torment
- .byte 0xa5 @ effect
- .byte 0 @ power
- .byte TYPE_DARK
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Flatter
- .byte 0xa6 @ effect
- .byte 0 @ power
- .byte TYPE_DARK
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Will-O-Wisp
- .byte 0xa7 @ effect
- .byte 0 @ power
- .byte TYPE_FIRE
- .byte 75 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Memento
- .byte 0xa8 @ effect
- .byte 0 @ power
- .byte TYPE_DARK
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Facade
- .byte 0xa9 @ effect
- .byte 70 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Focus Punch
- .byte 0xaa @ effect
- .byte 150 @ power
- .byte TYPE_FIGHTING
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte -3 @ priority
- .4byte F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Smelling Salt
- .byte 0xab @ effect
- .byte 60 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Follow Me
- .byte 0xac @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 3 @ priority
- .4byte 0 @ misc. flags
-
-@ Nature Power
- .byte 0xad @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 95 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_SPECIAL
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Charge
- .byte 0xae @ effect
- .byte 0 @ power
- .byte TYPE_ELECTRIC
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Taunt
- .byte 0xaf @ effect
- .byte 0 @ power
- .byte TYPE_DARK
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Helping Hand
- .byte 0xb0 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 5 @ priority
- .4byte 0 @ misc. flags
-
-@ Trick
- .byte 0xb1 @ effect
- .byte 0 @ power
- .byte TYPE_PSYCHIC
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Role Play
- .byte 0xb2 @ effect
- .byte 0 @ power
- .byte TYPE_PSYCHIC
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Wish
- .byte 0xb3 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Assist
- .byte 0xb4 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_SPECIAL
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Ingrain
- .byte 0xb5 @ effect
- .byte 0 @ power
- .byte TYPE_GRASS
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Superpower
- .byte 0xb6 @ effect
- .byte 120 @ power
- .byte TYPE_FIGHTING
- .byte 100 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Magic Coat
- .byte 0xb7 @ effect
- .byte 0 @ power
- .byte TYPE_PSYCHIC
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_SPECIAL
- .byte 4 @ priority
- .4byte 0 @ misc. flags
-
-@ Recycle
- .byte 0xb8 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Revenge
- .byte 0xb9 @ effect
- .byte 60 @ power
- .byte TYPE_FIGHTING
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte -4 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Brick Break
- .byte 0xba @ effect
- .byte 75 @ power
- .byte TYPE_FIGHTING
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Yawn
- .byte 0xbb @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Knock Off
- .byte 0xbc @ effect
- .byte 20 @ power
- .byte TYPE_DARK
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 100 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Endeavor
- .byte 0xbd @ effect
- .byte 1 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Eruption
- .byte 0xbe @ effect
- .byte 150 @ power
- .byte TYPE_FIRE
- .byte 100 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Skill Swap
- .byte 0xbf @ effect
- .byte 0 @ power
- .byte TYPE_PSYCHIC
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Imprison
- .byte 0xc0 @ effect
- .byte 0 @ power
- .byte TYPE_PSYCHIC
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Refresh
- .byte 0xc1 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Grudge
- .byte 0xc2 @ effect
- .byte 0 @ power
- .byte TYPE_GHOST
- .byte 100 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Snatch
- .byte 0xc3 @ effect
- .byte 0 @ power
- .byte TYPE_DARK
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_SPECIAL
- .byte 4 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE @ misc. flags
-
-@ Secret Power
- .byte 0xc5 @ effect
- .byte 70 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 30 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Dive
- .byte 0x9b @ effect
- .byte 60 @ power
- .byte TYPE_WATER
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Arm Thrust
- .byte 0x1d @ effect
- .byte 15 @ power
- .byte TYPE_FIGHTING
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Camouflage
- .byte 0xd5 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Tail Glow
- .byte 0x35 @ effect
- .byte 0 @ power
- .byte TYPE_BUG
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Luster Purge
- .byte 0x48 @ effect
- .byte 70 @ power
- .byte TYPE_PSYCHIC
- .byte 100 @ accuracy
- .byte 5 @ PP
- .byte 50 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Mist Ball
- .byte 0x47 @ effect
- .byte 70 @ power
- .byte TYPE_PSYCHIC
- .byte 100 @ accuracy
- .byte 5 @ PP
- .byte 50 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Feather Dance
- .byte 0x3a @ effect
- .byte 0 @ power
- .byte TYPE_FLYING
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Teeter Dance
- .byte 0xc7 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_ALL_EXCEPT_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Blaze Kick
- .byte 0xc8 @ effect
- .byte 85 @ power
- .byte TYPE_FIRE
- .byte 90 @ accuracy
- .byte 10 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Mud Sport
- .byte 0xc9 @ effect
- .byte 0 @ power
- .byte TYPE_GROUND
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Ice Ball
- .byte 0x75 @ effect
- .byte 30 @ power
- .byte TYPE_ICE
- .byte 90 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Needle Arm
- .byte 0x96 @ effect
- .byte 60 @ power
- .byte TYPE_GRASS
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 30 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Slack Off
- .byte 0x20 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Hyper Voice
- .byte 0x00 @ effect
- .byte 90 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Poison Fang
- .byte 0xca @ effect
- .byte 50 @ power
- .byte TYPE_POISON
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 30 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Crush Claw
- .byte 0x45 @ effect
- .byte 75 @ power
- .byte TYPE_NORMAL
- .byte 95 @ accuracy
- .byte 10 @ PP
- .byte 50 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Blast Burn
- .byte 0x50 @ effect
- .byte 150 @ power
- .byte TYPE_FIRE
- .byte 90 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Hydro Cannon
- .byte 0x50 @ effect
- .byte 150 @ power
- .byte TYPE_WATER
- .byte 90 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Meteor Mash
- .byte 0x8b @ effect
- .byte 100 @ power
- .byte TYPE_STEEL
- .byte 85 @ accuracy
- .byte 10 @ PP
- .byte 20 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Astonish
- .byte 0x96 @ effect
- .byte 30 @ power
- .byte TYPE_GHOST
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 30 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Weather Ball
- .byte 0xcb @ effect
- .byte 50 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Aromatherapy
- .byte 0x66 @ effect
- .byte 0 @ power
- .byte TYPE_GRASS
- .byte 0 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Fake Tears
- .byte 0x3e @ effect
- .byte 0 @ power
- .byte TYPE_DARK
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Air Cutter
- .byte 0x2b @ effect
- .byte 55 @ power
- .byte TYPE_FLYING
- .byte 95 @ accuracy
- .byte 25 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Overheat
- .byte 0xcc @ effect
- .byte 140 @ power
- .byte TYPE_FIRE
- .byte 90 @ accuracy
- .byte 5 @ PP
- .byte 100 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Odor Sleuth
- .byte 0x71 @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 40 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Rock Tomb
- .byte 0x46 @ effect
- .byte 50 @ power
- .byte TYPE_ROCK
- .byte 80 @ accuracy
- .byte 10 @ PP
- .byte 100 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Silver Wind
- .byte 0x8c @ effect
- .byte 60 @ power
- .byte TYPE_BUG
- .byte 100 @ accuracy
- .byte 5 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Metal Sound
- .byte 0x3e @ effect
- .byte 0 @ power
- .byte TYPE_STEEL
- .byte 85 @ accuracy
- .byte 40 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Grass Whistle
- .byte 0x01 @ effect
- .byte 0 @ power
- .byte TYPE_GRASS
- .byte 55 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Tickle
- .byte 0xcd @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Cosmic Power
- .byte 0xce @ effect
- .byte 0 @ power
- .byte TYPE_PSYCHIC
- .byte 0 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Water Spout
- .byte 0xbe @ effect
- .byte 150 @ power
- .byte TYPE_WATER
- .byte 100 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Signal Beam
- .byte 0x4c @ effect
- .byte 75 @ power
- .byte TYPE_BUG
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Shadow Punch
- .byte 0x11 @ effect
- .byte 60 @ power
- .byte TYPE_GHOST
- .byte 0 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Extrasensory
- .byte 0x96 @ effect
- .byte 80 @ power
- .byte TYPE_PSYCHIC
- .byte 100 @ accuracy
- .byte 30 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Sky Uppercut
- .byte 0xcf @ effect
- .byte 85 @ power
- .byte TYPE_FIGHTING
- .byte 90 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Sand Tomb
- .byte 0x2a @ effect
- .byte 15 @ power
- .byte TYPE_GROUND
- .byte 70 @ accuracy
- .byte 15 @ PP
- .byte 100 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Sheer Cold
- .byte 0x26 @ effect
- .byte 1 @ power
- .byte TYPE_ICE
- .byte 30 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Muddy Water
- .byte 0x49 @ effect
- .byte 95 @ power
- .byte TYPE_WATER
- .byte 85 @ accuracy
- .byte 10 @ PP
- .byte 30 @ side effect chance
- .byte F_TARGET_BOTH_ENEMIES
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Bullet Seed
- .byte 0x1d @ effect
- .byte 10 @ power
- .byte TYPE_GRASS
- .byte 100 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Aerial Ace
- .byte 0x11 @ effect
- .byte 60 @ power
- .byte TYPE_FLYING
- .byte 0 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Icicle Spear
- .byte 0x1d @ effect
- .byte 10 @ power
- .byte TYPE_ICE
- .byte 100 @ accuracy
- .byte 30 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Iron Defense
- .byte 0x33 @ effect
- .byte 0 @ power
- .byte TYPE_STEEL
- .byte 0 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Block
- .byte 0x6a @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_MAGIC_COAT | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Howl
- .byte 0x0a @ effect
- .byte 0 @ power
- .byte TYPE_NORMAL
- .byte 0 @ accuracy
- .byte 40 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Dragon Claw
- .byte 0x00 @ effect
- .byte 80 @ power
- .byte TYPE_DRAGON
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Frenzy Plant
- .byte 0x50 @ effect
- .byte 150 @ power
- .byte TYPE_GRASS
- .byte 90 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Bulk Up
- .byte 0xd0 @ effect
- .byte 0 @ power
- .byte TYPE_FIGHTING
- .byte 0 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Bounce
- .byte 0x9b @ effect
- .byte 85 @ power
- .byte TYPE_FLYING
- .byte 85 @ accuracy
- .byte 5 @ PP
- .byte 30 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Mud Shot
- .byte 0x46 @ effect
- .byte 55 @ power
- .byte TYPE_GROUND
- .byte 95 @ accuracy
- .byte 15 @ PP
- .byte 100 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Poison Tail
- .byte 0xd1 @ effect
- .byte 50 @ power
- .byte TYPE_POISON
- .byte 100 @ accuracy
- .byte 25 @ PP
- .byte 10 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Covet
- .byte 0x69 @ effect
- .byte 40 @ power
- .byte TYPE_NORMAL
- .byte 100 @ accuracy
- .byte 40 @ PP
- .byte 100 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Volt Tackle
- .byte 0xc6 @ effect
- .byte 120 @ power
- .byte TYPE_ELECTRIC
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Magical Leaf
- .byte 0x11 @ effect
- .byte 60 @ power
- .byte TYPE_GRASS
- .byte 0 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Water Sport
- .byte 0xd2 @ effect
- .byte 0 @ power
- .byte TYPE_WATER
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Calm Mind
- .byte 0xd3 @ effect
- .byte 0 @ power
- .byte TYPE_PSYCHIC
- .byte 0 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Leaf Blade
- .byte 0x2b @ effect
- .byte 70 @ power
- .byte TYPE_GRASS
- .byte 100 @ accuracy
- .byte 15 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT | F_MAKES_CONTACT @ misc. flags
-
-@ Dragon Dance
- .byte 0xd4 @ effect
- .byte 0 @ power
- .byte TYPE_DRAGON
- .byte 0 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte F_TARGET_USER
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_SNATCH @ misc. flags
-
-@ Rock Blast
- .byte 0x1d @ effect
- .byte 25 @ power
- .byte TYPE_ROCK
- .byte 80 @ accuracy
- .byte 10 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Shock Wave
- .byte 0x11 @ effect
- .byte 60 @ power
- .byte TYPE_ELECTRIC
- .byte 0 @ accuracy
- .byte 20 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Water Pulse
- .byte 0x4c @ effect
- .byte 60 @ power
- .byte TYPE_WATER
- .byte 100 @ accuracy
- .byte 20 @ PP
- .byte 20 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
-
-@ Doom Desire
- .byte 0x94 @ effect
- .byte 120 @ power
- .byte TYPE_STEEL
- .byte 85 @ accuracy
- .byte 5 @ PP
- .byte 0 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte 0 @ misc. flags
-
-@ Psycho Boost
- .byte 0xcc @ effect
- .byte 140 @ power
- .byte TYPE_PSYCHIC
- .byte 90 @ accuracy
- .byte 5 @ PP
- .byte 100 @ side effect chance
- .byte TARGET_SELECTED_POKEMON
- .byte 0 @ priority
- .4byte F_AFFECTED_BY_KINGS_ROCK | F_MIRROR_MOVE_COMPATIBLE | F_AFFECTED_BY_PROTECT @ misc. flags
diff --git a/data/battle_records.s b/data/battle_records.s
deleted file mode 100644
index 86dc9d8b9..000000000
--- a/data/battle_records.s
+++ /dev/null
@@ -1,37 +0,0 @@
-
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 2
-gUnknown_085B3484:: @ 85B3484
- .incbin "graphics/unknown/unknown_5B3484.4bpp"
-
- .align 2
-gUnknown_085B3544:: @ 85B3544
- .incbin "graphics/unknown/unknown_5B3484.gbapal"
-
- .align 2
-gUnknown_085B3564:: @ 85B3564
- .incbin "graphics/unknown/unknown_5B3564.bin"
-
- .align 2
-gUnknown_085B3D64:: @ 85B3D64
- .4byte 0x000001f0, 0x000031e7
-
- .align 2
-gUnknown_085B3D6C:: @ 85B3D6C
- window_template 0x00, 0x02, 0x01, 0x1a, 0x12, 0x0f, 0x0014
- null_window_template
-
- .align 2
-gUnknown_085B3D7C:: @ 85B3D7C
- window_template 0x00, 0x02, 0x01, 0x1a, 0x11, 0x0f, 0x0001
-
-gUnknown_085B3D84:: @ 85B3D84
- .string "-------$"
-
-gUnknown_085B3D8C:: @ 85B3D8C
- .string "----$"
-
diff --git a/data/credits.s b/data/credits.s
deleted file mode 100644
index a5c0837d1..000000000
--- a/data/credits.s
+++ /dev/null
@@ -1,1577 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 2
-gUnknown_085E56F0:: @ 85E56F0
- .incbin "graphics/credits/credits_1.gbapal"
- .incbin "graphics/credits/credits_2.gbapal"
- .incbin "graphics/credits/credits_3.gbapal"
- .incbin "graphics/credits/credits_4.gbapal"
-
- .align 2
-gUnknown_085E5770:: @ 85E5770
- .incbin "graphics/credits/the_end_copyright.4bpp.lz"
-
-gUnknown_085E5BAC:: @ 85E5BAC
- .byte 0x00, 0x01, 0x00, 0xff, 0x01, 0xff, 0xff, 0x01, 0xff, 0xff, 0x01, 0xff, 0xff, 0x01, 0xff
-
-gUnknown_085E5BBB:: @ 85E5BBB
- .byte 0x01, 0xff, 0x01, 0x01, 0xff, 0x01, 0x01, 0x02, 0x01, 0x01, 0xff, 0x01, 0x01, 0xff, 0x01
-
-gUnknown_085E5BCA:: @ 85E5BCA
- .byte 0x01, 0x00, 0x00, 0x01, 0xff, 0xff, 0x01, 0x02, 0x02, 0x01, 0xff, 0xff, 0x01, 0x80, 0x80
-
-gUnknown_085E5BD9:: @ 85E5BD9
- .byte 0x01, 0x03, 0x01, 0x01, 0x04, 0x01, 0x01, 0x05, 0x01, 0x01, 0xc4, 0x01, 0x01, 0xc3, 0x01
-
-gUnknown_085E5BE8:: @ 85E5BE8
- .byte 0x01, 0x06, 0x07, 0x01, 0x08, 0x09, 0x01, 0xff, 0x01, 0x01, 0x88, 0x89, 0x01, 0x86, 0x87
-
-gCreditsText_EmptyString:: @ 85E5BF7
- .string "$"
-
-gCreditsText_PkmnEmeraldVersion:: @ 85E5BF8
- .string "POKéMON EMERALD VERSION$"
-
-gCreditsText_Credits:: @ 85E5C10
- .string "Credits$"
-
-gCreditsText_ExecutiveDirector:: @ 85E5C18
- .string "Executive Director$"
-
-gCreditsText_Director:: @ 85E5C2B
- .string "Director$"
-
-gCreditsText_ArtDirector:: @ 85E5C34
- .string "Art Director$"
-
-gCreditsText_BattleDirector:: @ 85E5C41
- .string "Battle Director$"
-
-gCreditsText_MainProgrammer:: @ 85E5C51
- .string "Main Programmer$"
-
-gCreditsText_BattleSystemPgrms:: @ 85E5C61
- .string "Battle System Programmers$"
-
-gCreditsText_FieldSystemPgrms:: @ 85E5C7B
- .string "Field System Programmer$"
-
-gCreditsText_Programmers:: @ 85E5C93
- .string "Programmers$"
-
-gCreditsText_MainGraphicDesigner:: @ 85E5C9F
- .string "Main Graphic Designer$"
-
-gCreditsText_GraphicDesigners:: @ 85E5CB5
- .string "Graphic Designers$"
-
-gCreditsText_PkmnDesigners:: @ 85E5CC7
- .string "POKéMON Designers$"
-
-gCreditsText_MusicComposition:: @ 85E5CD9
- .string "Music Composition$"
-
-gCreditsText_SoundEffectsAndPkmnVoices:: @ 85E5CEB
- .string "Sound Effects & POKéMON Voices$"
-
-gCreditsText_GameDesigners:: @ 85E5D0A
- .string "Game Designers$"
-
-gCreditsText_ScenarioPlot:: @ 85E5D19
- .string "Scenario Plot$"
-
-gCreditsText_Scenario:: @ 85E5D27
- .string "Scenario$"
-
-gCreditsText_ScriptDesigners:: @ 85E5D30
- .string "Script Designers$"
-
-gCreditsText_MapDesigners:: @ 85E5D41
- .string "Map Designers$"
-
-gCreditsText_MapDataDesigners:: @ 85E5D4F
- .string "Map Data Designers$"
-
-gCreditsText_ParametricDesigners:: @ 85E5D62
- .string "Parametric Designers$"
-
-gCreditsText_PokedexText:: @ 85E5D77
- .string "POKéDEX Text$"
-
-gCreditsText_EnvAndToolPgrms:: @ 85E5D84
- .string "Environment & Tool Programmers$"
-
-gCreditsText_NCLProductTesting:: @ 85E5DA3
- .string "NCL Product Testing$"
-
-gCreditsText_SpecialThanks:: @ 85E5DB7
- .string "Special Thanks$"
-
-gCreditsText_Coordinators:: @ 85E5DC6
- .string "Coordinators$"
-
-gCreditsText_Producers:: @ 85E5DD3
- .string "Producers$"
-
-gCreditsText_ExecProducers:: @ 85E5DDD
- .string "Executive Producers$"
-
-gCreditsText_InfoSupervisors:: @ 85E5DF1
- .string "Information Supervisors$"
-
-gCreditsText_TaskManagers:: @ 85E5E09
- .string "Task Managers$"
-
-gCreditsText_BrailleCodeCheck:: @ 85E5E17
- .string "Braille Code Check$"
-
-gCreditsText_WorldDirector:: @ 85E5E2A
- .string "World Director$"
-
-gCreditsText_BattleFrontierData:: @ 85E5E39
- .string "Battle Frontier Data$"
-
-gCreditsText_SupportProgrammers:: @ 85E5E4E
- .string "Support Programmers$"
-
-gCreditsText_Artwork:: @ 85E5E62
- .string "Artwork$"
-
-gCreditsText_LeadProgrammer:: @ 85E5E6A
- .string "Lead Programmer$"
-
-gCreditsText_LeadGraphicArtist:: @ 85E5E7A
- .string "Lead Graphic Artist$"
-
-gCreditsText_SatoshiTajiri:: @ 85E5E8E
- .string "Satoshi Tajiri$"
-
-gCreditsText_JunichiMasuda:: @ 85E5E9D
- .string "Junichi Masuda$"
-
-gCreditsText_KenSugimori:: @ 85E5EAC
- .string "Ken Sugimori$"
-
-gCreditsText_ShigekiMorimoto:: @ 85E5EB9
- .string "Shigeki Morimoto$"
-
-gCreditsText_TetsuyaWatanabe:: @ 85E5ECA
- .string "Tetsuya Watanabe$"
-
-gCreditsText_HisashiSogabe:: @ 85E5EDB
- .string "Hisashi Sogabe$"
-
-gCreditsText_SosukeTamada:: @ 85E5EEA
- .string "Sosuke Tamada$"
-
-gCreditsText_AkitoMori:: @ 85E5EF8
- .string "Akito Mori$"
-
-gCreditsText_KeitaKagaya:: @ 85E5F03
- .string "Keita Kagaya$"
-
-gCreditsText_YoshinoriMatsuda:: @ 85E5F10
- .string "Yoshinori Matsuda$"
-
-gCreditsText_HiroyukiNakamura:: @ 85E5F22
- .string "Hiroyuki Nakamura$"
-
-gCreditsText_MasaoTaya:: @ 85E5F34
- .string "Masao Taya$"
-
-gCreditsText_SatoshiNohara:: @ 85E5F3F
- .string "Satoshi Nohara$"
-
-gCreditsText_TomomichiOhta:: @ 85E5F4E
- .string "Tomomichi Ohta$"
-
-gCreditsText_MiyukiIwasawa:: @ 85E5F5D
- .string "Miyuki Iwasawa$"
-
-gCreditsText_TakenoriOhta:: @ 85E5F6C
- .string "Takenori Ohta$"
-
-gCreditsText_HironobuYoshida:: @ 85E5F7A
- .string "Hironobu Yoshida$"
-
-gCreditsText_MotofumiFujiwara:: @ 85E5F8B
- .string "Motofumi Fujiwara$"
-
-gCreditsText_SatoshiOhta:: @ 85E5F9D
- .string "Satoshi Ohta$"
-
-gCreditsText_AsukaIwashita:: @ 85E5FAA
- .string "Asuka Iwashita$"
-
-gCreditsText_AimiTomita:: @ 85E5FB9
- .string "Aimi Tomita$"
-
-gCreditsText_TakaoUnno:: @ 85E5FC5
- .string "Takao Unno$"
-
-gCreditsText_KanakoEo:: @ 85E5FD0
- .string "Kanako Eo$"
-
-gCreditsText_JunOkutani:: @ 85E5FDA
- .string "Jun Okutani$"
-
-gCreditsText_AtsukoNishida:: @ 85E5FE6
- .string "Atsuko Nishida$"
-
-gCreditsText_MuneoSaito:: @ 85E5FF5
- .string "Muneo Saito$"
-
-gCreditsText_RenaYoshikawa:: @ 85E6001
- .string "Rena Yoshikawa$"
-
-gCreditsText_GoIchinose:: @ 85E6010
- .string "Go Ichinose$"
-
-gCreditsText_MorikazuAoki:: @ 85E601C
- .string "Morikazu Aoki$"
-
-gCreditsText_KojiNishino:: @ 85E602A
- .string "Koji Nishino$"
-
-gCreditsText_KenjiMatsushima:: @ 85E6037
- .string "Kenji Matsushima$"
-
-gCreditsText_TetsujiOhta:: @ 85E6048
- .string "Tetsuji Ohta$"
-
-gCreditsText_HitomiSato:: @ 85E6055
- .string "Hitomi Sato$"
-
-gCreditsText_TakeshiKawachimaru:: @ 85E6061
- .string "Takeshi Kawachimaru$"
-
-gCreditsText_TeruyukiShimoyamada:: @ 85E6075
- .string "Teruyuki Shimoyamada$"
-
-gCreditsText_ShigeruOhmori:: @ 85E608A
- .string "Shigeru Ohmori$"
-
-gCreditsText_TadashiTakahashi:: @ 85E6099
- .string "Tadashi Takahashi$"
-
-gCreditsText_ToshinobuMatsumiya:: @ 85E60AB
- .string "Toshinobu Matsumiya$"
-
-gCreditsText_AkihitoTomisawa:: @ 85E60BF
- .string "Akihito Tomisawa$"
-
-gCreditsText_HirokiEnomoto:: @ 85E60D0
- .string "Hiroki Enomoto$"
-
-gCreditsText_KazuyukiTerada:: @ 85E60DF
- .string "Kazuyuki Terada$"
-
-gCreditsText_YuriSakurai:: @ 85E60EF
- .string "Yuri Sakurai$"
-
-gCreditsText_HiromiSagawa:: @ 85E60FC
- .string "Hiromi Sagawa$"
-
-gCreditsText_KenjiTominaga:: @ 85E610A
- .string "Kenji Tominaga$"
-
-gCreditsText_YoshioTajiri:: @ 85E6119
- .string "Yoshio Tajiri$"
-
-gCreditsText_TeikoSasaki:: @ 85E6127
- .string "Teiko Sasaki$"
-
-gCreditsText_SachikoHamano:: @ 85E6134
- .string "Sachiko Hamano$"
-
-gCreditsText_ChieMatsumiya:: @ 85E6143
- .string "Chie Matsumiya$"
-
-gCreditsText_AkikoShinozaki:: @ 85E6152
- .string "Akiko Shinozaki$"
-
-gCreditsText_AstukoFujii:: @ 85E6162
- .string "Astuko Fujii$"
-
-gCreditsText_NozomuSaito:: @ 85E616F
- .string "Nozomu Saito$"
-
-gCreditsText_KenkichiToyama:: @ 85E617C
- .string "Kenkichi Toyama$"
-
-gCreditsText_SuguruNakatsui:: @ 85E618C
- .string "Suguru Nakatsui$"
-
-gCreditsText_YumiFunasaka:: @ 85E619C
- .string "Yumi Funasaka$"
-
-gCreditsText_NaokoYanase:: @ 85E61AA
- .string "Naoko Yanase$"
-
-gCreditsText_NCLSuperMarioClub:: @ 85E61B7
- .string "NCL Super Mario Club$"
-
-gCreditsText_AtsushiTada:: @ 85E61CC
- .string "Atsushi Tada$"
-
-gCreditsText_TakahiroOhnishi:: @ 85E61D9
- .string "Takahiro Ohnishi$"
-
-gCreditsText_NorihideOkamura:: @ 85E61EA
- .string "Norihide Okamura$"
-
-gCreditsText_HiroNakamura:: @ 85E61FB
- .string "Hiro Nakamura$"
-
-gCreditsText_HiroyukiUesugi:: @ 85E6209
- .string "Hiroyuki Uesugi$"
-
-gCreditsText_TerukiMurakawa:: @ 85E6219
- .string "Teruki Murakawa$"
-
-gCreditsText_AkiraKinashi:: @ 85E6229
- .string "Akira Kinashi$"
-
-gCreditsText_MichikoTakizawa:: @ 85E6237
- .string "Michiko Takizawa$"
-
-gCreditsText_MakikoTakada:: @ 85E6248
- .string "Makiko Takada$"
-
-gCreditsText_TakanaoKondo:: @ 85E6256
- .string "Takanao Kondo$"
-
-gCreditsText_AiMashima:: @ 85E6264
- .string "Ai Mashima$"
-
-gCreditsText_GakujiNomoto:: @ 85E626F
- .string "Gakuji Nomoto$"
-
-gCreditsText_TakehiroIzushi:: @ 85E627D
- .string "Takehiro Izushi$"
-
-gCreditsText_HitoshiYamagami:: @ 85E628D
- .string "Hitoshi Yamagami$"
-
-gCreditsText_KyokoWatanabe:: @ 85E629E
- .string "Kyoko Watanabe$"
-
-gCreditsText_TakaoNakano:: @ 85E62AD
- .string "Takao Nakano$"
-
-gCreditsText_HiroyukiJinnai:: @ 85E62BA
- .string "Hiroyuki Jinnai$"
-
-gCreditsText_HiroakiTsuru:: @ 85E62CA
- .string "Hiroaki Tsuru$"
-
-gCreditsText_TsunekazIshihara:: @ 85E62D8
- .string "Tsunekaz Ishihara$"
-
-gCreditsText_SatoruIwata:: @ 85E62EA
- .string "Satoru Iwata$"
-
-gCreditsText_KazuyaSuyama:: @ 85E62F7
- .string "Kazuya Suyama$"
-
-gCreditsText_SatoshiMitsuhara:: @ 85E6305
- .string "Satoshi Mitsuhara$"
-
-gCreditsText_JapanBrailleLibrary:: @ 85E6317
- .string "Japan Braille Library$"
-
-gCreditsText_TomotakaKomura:: @ 85E632D
- .string "Tomotaka Komura$"
-
-gCreditsText_MikikoOhhashi:: @ 85E633D
- .string "Mikiko Ohhashi$"
-
-gCreditsText_DaisukeHoshino:: @ 85E634C
- .string "Daisuke Hoshino$"
-
-gCreditsText_KenjiroIto:: @ 85E635C
- .string "Kenjiro Ito$"
-
-gCreditsText_RuiKawaguchi:: @ 85E6368
- .string "Rui Kawaguchi$"
-
-gCreditsText_ShunsukeKohori:: @ 85E6376
- .string "Shunsuke Kohori$"
-
-gCreditsText_SachikoNakamichi:: @ 85E6386
- .string "Sachiko Nakamichi$"
-
-gCreditsText_FujikoNomura:: @ 85E6398
- .string "Fujiko Nomura$"
-
-gCreditsText_KazukiYoshihara:: @ 85E63A6
- .string "Kazuki Yoshihara$"
-
-gCreditsText_RetsujiNomoto:: @ 85E63B7
- .string "Retsuji Nomoto$"
-
-gCreditsText_AzusaTajima:: @ 85E63C6
- .string "Azusa Tajima$"
-
-gCreditsText_ShusakuEgami:: @ 85E63D3
- .string "Shusaku Egami$"
-
-gCreditsText_PackageAndManual:: @ 85E63E1
- .string "Package & Manual Illustration$"
-
-gCreditsText_EnglishVersion:: @ 85E63FF
- .string "English Version Coordinators$"
-
-gCreditsText_Translator:: @ 85E641C
- .string "Translator$"
-
-gCreditsText_TextEditor:: @ 85E6427
- .string "Text Editor$"
-
-gCreditsText_NCLCoordinator:: @ 85E6433
- .string "NCL Coordinator$"
-
-gCreditsText_GraphicDesigner:: @ 85E6443
- .string "Graphic Designer$"
-
-gCreditsText_NOAProductTesting:: @ 85E6454
- .string "NOA Product Testing$"
-
-gCreditsText_HideyukiNakajima:: @ 85E6468
- .string "Hideyuki Nakajima$"
-
-gCreditsText_HidenoriSaeki:: @ 85E647A
- .string "Hidenori Saeki$"
-
-gCreditsText_YokoWatanabe:: @ 85E6489
- .string "Yoko Watanabe$"
-
-gCreditsText_SakaeKimura:: @ 85E6497
- .string "Sakae Kimura$"
-
-gCreditsText_ChiakiShinkai:: @ 85E64A4
- .string "Chiaki Shinkai$"
-
-gCreditsText_SethMcMahill:: @ 85E64B3
- .string "Seth McMahill$"
-
-gCreditsText_NobOgasawara:: @ 85E64C1
- .string "Nob Ogasawara$"
-
-gCreditsText_TeresaLillygren:: @ 85E64CF
- .string "Teresa Lillygren$"
-
-gCreditsText_KimikoNakamichi:: @ 85E64E0
- .string "Kimiko Nakamichi$"
-
-gCreditsText_SouichiYamamoto:: @ 85E64F1
- .string "Souichi Yamamoto$"
-
-gCreditsText_YuichiroIto:: @ 85E6502
- .string "Yuichiro Ito$"
-
-gCreditsText_ThomasHertzog:: @ 85E650F
- .string "Thomas Hertzog$"
-
-gCreditsText_MikaKurosawa:: @ 85E651E
- .string "Mika Kurosawa$"
-
-gCreditsText_NationalFederationBlind:: @ 85E652C
- .string "National Federation of the Blind$"
-
-gCreditsText_PatriciaAMaurer:: @ 85E654D
- .string "Patricia A. Maurer$"
-
-gCreditsText_EuropeanBlindUnion:: @ 85E6560
- .string "European Blind Union$"
-
-gCreditsText_AustralianBrailleAuthority:: @ 85E6575
- .string "Australian Braille Authority$"
-
-gCreditsText_RoyalNewZealandFederationBlind:: @ 85E6592
- .string "Royal New Zealand Federation for the Blind$"
-
-gCreditsText_MotoyasuTojima:: @ 85E65BD
- .string "Motoyasu Tojima$"
-
-gCreditsText_NicolaPrattBarlow:: @ 85E65CD
- .string "Nicola Pratt-Barlow$"
-
-gCreditsText_ShellieDow:: @ 85E65E1
- .string "Shellie Dow$"
-
-gCreditsText_ErikJohnson:: @ 85E65ED
- .string "Erik Johnson$"
-
- .align 2
-gCreditsEntry_EmptyString:: @ 85E65FC
- .4byte 0x00000000, gCreditsText_EmptyString
-
- .align 2
-gCreditsEntry_PkmnEmeraldVersion:: @ 85E6604
- .4byte 0x00000107, gCreditsText_PkmnEmeraldVersion
-
- .align 2
-gCreditsEntry_Credits:: @ 85E660C
- .4byte 0x0000010b, gCreditsText_Credits
-
- .align 2
-gCreditsEntry_ExecutiveDirector:: @ 85E6614
- .4byte 0x00000108, gCreditsText_ExecutiveDirector
-
- .align 2
-gCreditsEntry_Director:: @ 85E661C
- .4byte 0x0000010c, gCreditsText_Director
-
- .align 2
-gCreditsEntry_ArtDirector:: @ 85E6624
- .4byte 0x0000010a, gCreditsText_ArtDirector
-
- .align 2
-gCreditsEntry_BattleDirector:: @ 85E662C
- .4byte 0x0000010a, gCreditsText_BattleDirector
-
- .align 2
-gCreditsEntry_MainProgrammer:: @ 85E6634
- .4byte 0x0000010a, gCreditsText_MainProgrammer
-
- .align 2
-gCreditsEntry_BattleSystemPgrms:: @ 85E663C
- .4byte 0x00000108, gCreditsText_BattleSystemPgrms
-
- .align 2
-gCreditsEntry_FieldSystemPgrms:: @ 85E6644
- .4byte 0x00000107, gCreditsText_FieldSystemPgrms
-
- .align 2
-gCreditsEntry_Programmers:: @ 85E664C
- .4byte 0x0000010c, gCreditsText_Programmers
-
- .align 2
-gCreditsEntry_MainGraphicDesigner:: @ 85E6654
- .4byte 0x00000107, gCreditsText_MainGraphicDesigner
-
- .align 2
-gCreditsEntry_GraphicDesigners:: @ 85E665C
- .4byte 0x00000109, gCreditsText_GraphicDesigners
-
- .align 2
-gCreditsEntry_PkmnDesigners:: @ 85E6664
- .4byte 0x0000010a, gCreditsText_PkmnDesigners
-
- .align 2
-gCreditsEntry_MusicComposition:: @ 85E666C
- .4byte 0x0000010d, gCreditsText_MusicComposition
-
- .align 2
-gCreditsEntry_SoundEffectsAndPkmnVoices:: @ 85E6674
- .4byte 0x00000104, gCreditsText_SoundEffectsAndPkmnVoices
-
- .align 2
-gCreditsEntry_GameDesigners:: @ 85E667C
- .4byte 0x0000010b, gCreditsText_GameDesigners
-
- .align 2
-gCreditsEntry_ScenarioPlot:: @ 85E6684
- .4byte 0x0000010b, gCreditsText_ScenarioPlot
-
- .align 2
-gCreditsEntry_Scenario:: @ 85E668C
- .4byte 0x0000010d, gCreditsText_Scenario
-
- .align 2
-gCreditsEntry_ScriptDesigners:: @ 85E6694
- .4byte 0x0000010a, gCreditsText_ScriptDesigners
-
- .align 2
-gCreditsEntry_MapDesigners:: @ 85E669C
- .4byte 0x0000010b, gCreditsText_MapDesigners
-
- .align 2
-gCreditsEntry_MapDataDesigners:: @ 85E66A4
- .4byte 0x00000109, gCreditsText_MapDataDesigners
-
- .align 2
-gCreditsEntry_ParametricDesigners:: @ 85E66AC
- .4byte 0x00000109, gCreditsText_ParametricDesigners
-
- .align 2
-gCreditsEntry_PokedexText:: @ 85E66B4
- .4byte 0x0000010b, gCreditsText_PokedexText
-
- .align 2
-gCreditsEntry_EnvAndToolPgrms:: @ 85E66BC
- .4byte 0x00000106, gCreditsText_EnvAndToolPgrms
-
- .align 2
-gCreditsEntry_NCLProductTesting:: @ 85E66C4
- .4byte 0x0000010b, gCreditsText_NCLProductTesting
-
- .align 2
-gCreditsEntry_SpecialThanks:: @ 85E66CC
- .4byte 0x0000010a, gCreditsText_SpecialThanks
-
- .align 2
-gCreditsEntry_Coordinators:: @ 85E66D4
- .4byte 0x0000010b, gCreditsText_Coordinators
-
- .align 2
-gCreditsEntry_Producers:: @ 85E66DC
- .4byte 0x0000010b, gCreditsText_Producers
-
- .align 2
-gCreditsEntry_ExecProducers:: @ 85E66E4
- .4byte 0x00000107, gCreditsText_ExecProducers
-
- .align 2
-gCreditsEntry_InfoSupervisors:: @ 85E66EC
- .4byte 0x0000010a, gCreditsText_InfoSupervisors
-
- .align 2
-gCreditsEntry_TaskManagers:: @ 85E66F4
- .4byte 0x00000108, gCreditsText_TaskManagers
-
- .align 2
-gCreditsEntry_BrailleCodeCheck:: @ 85E66FC
- .4byte 0x0000010a, gCreditsText_BrailleCodeCheck
-
- .align 2
-gCreditsEntry_WorldDirector:: @ 85E6704
- .4byte 0x0000010a, gCreditsText_WorldDirector
-
- .align 2
-gCreditsEntry_BattleFrontierData:: @ 85E670C
- .4byte 0x00000108, gCreditsText_BattleFrontierData
-
- .align 2
-gCreditsEntry_SupportProgrammers:: @ 85E6714
- .4byte 0x0000010a, gCreditsText_SupportProgrammers
-
- .align 2
-gCreditsEntry_Artwork:: @ 85E671C
- .4byte 0x0000010c, gCreditsText_Artwork
-
- .align 2
-gCreditsEntry_LeadProgrammer:: @ 85E6724
- .4byte 0x0000010a, gCreditsText_LeadProgrammer
-
- .align 2
-gCreditsEntry_LeadGraphicArtist:: @ 85E672C
- .4byte 0x00000109, gCreditsText_LeadGraphicArtist
-
- .align 2
-gCreditsEntry_SatoshiTajiri:: @ 85E6734
- .4byte 0x0000000b, gCreditsText_SatoshiTajiri
-
- .align 2
-gCreditsEntry_JunichiMasuda:: @ 85E673C
- .4byte 0x0000000b, gCreditsText_JunichiMasuda
-
- .align 2
-gCreditsEntry_KenSugimori:: @ 85E6744
- .4byte 0x0000000b, gCreditsText_KenSugimori
-
- .align 2
-gCreditsEntry_ShigekiMorimoto:: @ 85E674C
- .4byte 0x0000000b, gCreditsText_ShigekiMorimoto
-
- .align 2
-gCreditsEntry_TetsuyaWatanabe:: @ 85E6754
- .4byte 0x0000000b, gCreditsText_TetsuyaWatanabe
-
- .align 2
-gCreditsEntry_HisashiSogabe:: @ 85E675C
- .4byte 0x0000000b, gCreditsText_HisashiSogabe
-
- .align 2
-gCreditsEntry_SosukeTamada:: @ 85E6764
- .4byte 0x0000000b, gCreditsText_SosukeTamada
-
- .align 2
-gCreditsEntry_AkitoMori:: @ 85E676C
- .4byte 0x0000000b, gCreditsText_AkitoMori
-
- .align 2
-gCreditsEntry_KeitaKagaya:: @ 85E6774
- .4byte 0x0000000b, gCreditsText_KeitaKagaya
-
- .align 2
-gCreditsEntry_YoshinoriMatsuda:: @ 85E677C
- .4byte 0x0000000b, gCreditsText_YoshinoriMatsuda
-
- .align 2
-gCreditsEntry_HiroyukiNakamura:: @ 85E6784
- .4byte 0x0000000b, gCreditsText_HiroyukiNakamura
-
- .align 2
-gCreditsEntry_MasaoTaya:: @ 85E678C
- .4byte 0x0000000b, gCreditsText_MasaoTaya
-
- .align 2
-gCreditsEntry_SatoshiNohara:: @ 85E6794
- .4byte 0x0000000b, gCreditsText_SatoshiNohara
-
- .align 2
-gCreditsEntry_TomomichiOhta:: @ 85E679C
- .4byte 0x0000000b, gCreditsText_TomomichiOhta
-
- .align 2
-gCreditsEntry_MiyukiIwasawa:: @ 85E67A4
- .4byte 0x0000000b, gCreditsText_MiyukiIwasawa
-
- .align 2
-gCreditsEntry_TakenoriOhta:: @ 85E67AC
- .4byte 0x0000000b, gCreditsText_TakenoriOhta
-
- .align 2
-gCreditsEntry_HironobuYoshida:: @ 85E67B4
- .4byte 0x0000000b, gCreditsText_HironobuYoshida
-
- .align 2
-gCreditsEntry_MotofumiFujiwara:: @ 85E67BC
- .4byte 0x0000000b, gCreditsText_MotofumiFujiwara
-
- .align 2
-gCreditsEntry_SatoshiOhta:: @ 85E67C4
- .4byte 0x0000000b, gCreditsText_SatoshiOhta
-
- .align 2
-gCreditsEntry_AsukaIwashita:: @ 85E67CC
- .4byte 0x0000000b, gCreditsText_AsukaIwashita
-
- .align 2
-gCreditsEntry_AimiTomita:: @ 85E67D4
- .4byte 0x0000000b, gCreditsText_AimiTomita
-
- .align 2
-gCreditsEntry_TakaoUnno:: @ 85E67DC
- .4byte 0x0000000b, gCreditsText_TakaoUnno
-
- .align 2
-gCreditsEntry_KanakoEo:: @ 85E67E4
- .4byte 0x0000000b, gCreditsText_KanakoEo
-
- .align 2
-gCreditsEntry_JunOkutani:: @ 85E67EC
- .4byte 0x0000000b, gCreditsText_JunOkutani
-
- .align 2
-gCreditsEntry_AtsukoNishida:: @ 85E67F4
- .4byte 0x0000000b, gCreditsText_AtsukoNishida
-
- .align 2
-gCreditsEntry_MuneoSaito:: @ 85E67FC
- .4byte 0x0000000b, gCreditsText_MuneoSaito
-
- .align 2
-gCreditsEntry_RenaYoshikawa:: @ 85E6804
- .4byte 0x0000000b, gCreditsText_RenaYoshikawa
-
- .align 2
-gCreditsEntry_GoIchinose:: @ 85E680C
- .4byte 0x0000000b, gCreditsText_GoIchinose
-
- .align 2
-gCreditsEntry_MorikazuAoki:: @ 85E6814
- .4byte 0x0000000b, gCreditsText_MorikazuAoki
-
- .align 2
-gCreditsEntry_KojiNishino:: @ 85E681C
- .4byte 0x0000000b, gCreditsText_KojiNishino
-
- .align 2
-gCreditsEntry_KenjiMatsushima:: @ 85E6824
- .4byte 0x0000000b, gCreditsText_KenjiMatsushima
-
- .align 2
-gCreditsEntry_TetsujiOhta:: @ 85E682C
- .4byte 0x0000000b, gCreditsText_TetsujiOhta
-
- .align 2
-gCreditsEntry_HitomiSato:: @ 85E6834
- .4byte 0x0000000b, gCreditsText_HitomiSato
-
- .align 2
-gCreditsEntry_TakeshiKawachimaru:: @ 85E683C
- .4byte 0x0000000b, gCreditsText_TakeshiKawachimaru
-
- .align 2
-gCreditsEntry_TeruyukiShimoyamada:: @ 85E6844
- .4byte 0x0000000b, gCreditsText_TeruyukiShimoyamada
-
- .align 2
-gCreditsEntry_ShigeruOhmori:: @ 85E684C
- .4byte 0x0000000b, gCreditsText_ShigeruOhmori
-
- .align 2
-gCreditsEntry_TadashiTakahashi:: @ 85E6854
- .4byte 0x0000000b, gCreditsText_TadashiTakahashi
-
- .align 2
-gCreditsEntry_ToshinobuMatsumiya:: @ 85E685C
- .4byte 0x0000000b, gCreditsText_ToshinobuMatsumiya
-
- .align 2
-gCreditsEntry_AkihitoTomisawa:: @ 85E6864
- .4byte 0x0000000b, gCreditsText_AkihitoTomisawa
-
- .align 2
-gCreditsEntry_HirokiEnomoto:: @ 85E686C
- .4byte 0x0000000b, gCreditsText_HirokiEnomoto
-
- .align 2
-gCreditsEntry_KazuyukiTerada:: @ 85E6874
- .4byte 0x0000000b, gCreditsText_KazuyukiTerada
-
- .align 2
-gCreditsEntry_YuriSakurai:: @ 85E687C
- .4byte 0x0000000b, gCreditsText_YuriSakurai
-
- .align 2
-gCreditsEntry_HiromiSagawa:: @ 85E6884
- .4byte 0x0000000b, gCreditsText_HiromiSagawa
-
- .align 2
-gCreditsEntry_KenjiTominaga:: @ 85E688C
- .4byte 0x0000000b, gCreditsText_KenjiTominaga
-
- .align 2
-gCreditsEntry_YoshioTajiri:: @ 85E6894
- .4byte 0x0000000b, gCreditsText_YoshioTajiri
-
- .align 2
-gCreditsEntry_TeikoSasaki:: @ 85E689C
- .4byte 0x0000000b, gCreditsText_TeikoSasaki
-
- .align 2
-gCreditsEntry_SachikoHamano:: @ 85E68A4
- .4byte 0x0000000b, gCreditsText_SachikoHamano
-
- .align 2
-gCreditsEntry_ChieMatsumiya:: @ 85E68AC
- .4byte 0x0000000b, gCreditsText_ChieMatsumiya
-
- .align 2
-gCreditsEntry_AkikoShinozaki:: @ 85E68B4
- .4byte 0x0000000b, gCreditsText_AkikoShinozaki
-
- .align 2
-gCreditsEntry_AstukoFujii:: @ 85E68BC
- .4byte 0x0000000b, gCreditsText_AstukoFujii
-
- .align 2
-gCreditsEntry_NozomuSaito:: @ 85E68C4
- .4byte 0x0000000b, gCreditsText_NozomuSaito
-
- .align 2
-gCreditsEntry_KenkichiToyama:: @ 85E68CC
- .4byte 0x0000000b, gCreditsText_KenkichiToyama
-
- .align 2
-gCreditsEntry_SuguruNakatsui:: @ 85E68D4
- .4byte 0x0000000b, gCreditsText_SuguruNakatsui
-
- .align 2
-gCreditsEntry_YumiFunasaka:: @ 85E68DC
- .4byte 0x0000000b, gCreditsText_YumiFunasaka
-
- .align 2
-gCreditsEntry_NaokoYanase:: @ 85E68E4
- .4byte 0x0000000b, gCreditsText_NaokoYanase
-
- .align 2
-gCreditsEntry_NCLSuperMarioClub:: @ 85E68EC
- .4byte 0x0000000b, gCreditsText_NCLSuperMarioClub
-
- .align 2
-gCreditsEntry_AtsushiTada:: @ 85E68F4
- .4byte 0x0000000b, gCreditsText_AtsushiTada
-
- .align 2
-gCreditsEntry_TakahiroOhnishi:: @ 85E68FC
- .4byte 0x0000000b, gCreditsText_TakahiroOhnishi
-
- .align 2
-gCreditsEntry_NorihideOkamura:: @ 85E6904
- .4byte 0x0000000b, gCreditsText_NorihideOkamura
-
- .align 2
-gCreditsEntry_HiroNakamura:: @ 85E690C
- .4byte 0x0000000b, gCreditsText_HiroNakamura
-
- .align 2
-gCreditsEntry_HiroyukiUesugi:: @ 85E6914
- .4byte 0x0000000b, gCreditsText_HiroyukiUesugi
-
- .align 2
-gCreditsEntry_TerukiMurakawa:: @ 85E691C
- .4byte 0x0000000b, gCreditsText_TerukiMurakawa
-
- .align 2
-gCreditsEntry_AkiraKinashi:: @ 85E6924
- .4byte 0x0000000b, gCreditsText_AkiraKinashi
-
- .align 2
-gCreditsEntry_MichikoTakizawa:: @ 85E692C
- .4byte 0x0000000b, gCreditsText_MichikoTakizawa
-
- .align 2
-gCreditsEntry_MakikoTakada:: @ 85E6934
- .4byte 0x0000000b, gCreditsText_MakikoTakada
-
- .align 2
-gCreditsEntry_TakanaoKondo:: @ 85E693C
- .4byte 0x0000000b, gCreditsText_TakanaoKondo
-
- .align 2
-gCreditsEntry_AiMashima:: @ 85E6944
- .4byte 0x0000000b, gCreditsText_AiMashima
-
- .align 2
-gCreditsEntry_GakujiNomoto:: @ 85E694C
- .4byte 0x0000000b, gCreditsText_GakujiNomoto
-
- .align 2
-gCreditsEntry_TakehiroIzushi:: @ 85E6954
- .4byte 0x0000000b, gCreditsText_TakehiroIzushi
-
- .align 2
-gCreditsEntry_HitoshiYamagami:: @ 85E695C
- .4byte 0x0000000b, gCreditsText_HitoshiYamagami
-
- .align 2
-gCreditsEntry_KyokoWatanabe:: @ 85E6964
- .4byte 0x0000000b, gCreditsText_KyokoWatanabe
-
- .align 2
-gCreditsEntry_TakaoNakano:: @ 85E696C
- .4byte 0x0000000b, gCreditsText_TakaoNakano
-
- .align 2
-gCreditsEntry_HiroyukiJinnai:: @ 85E6974
- .4byte 0x0000000b, gCreditsText_HiroyukiJinnai
-
- .align 2
-gCreditsEntry_HiroakiTsuru:: @ 85E697C
- .4byte 0x0000000b, gCreditsText_HiroakiTsuru
-
- .align 2
-gCreditsEntry_TsunekazIshihara:: @ 85E6984
- .4byte 0x0000000b, gCreditsText_TsunekazIshihara
-
- .align 2
-gCreditsEntry_SatoruIwata:: @ 85E698C
- .4byte 0x0000000b, gCreditsText_SatoruIwata
-
- .align 2
-gCreditsEntry_KazuyaSuyama:: @ 85E6994
- .4byte 0x0000000b, gCreditsText_KazuyaSuyama
-
- .align 2
-gCreditsEntry_SatoshiMitsuhara:: @ 85E699C
- .4byte 0x0000000b, gCreditsText_SatoshiMitsuhara
-
- .align 2
-gCreditsEntry_JapanBrailleLibrary:: @ 85E69A4
- .4byte 0x00000009, gCreditsText_JapanBrailleLibrary
-
- .align 2
-gCreditsEntry_TomotakaKomura:: @ 85E69AC
- .4byte 0x0000000b, gCreditsText_TomotakaKomura
-
- .align 2
-gCreditsEntry_MikikoOhhashi:: @ 85E69B4
- .4byte 0x0000000b, gCreditsText_MikikoOhhashi
-
- .align 2
-gCreditsEntry_DaisukeHoshino:: @ 85E69BC
- .4byte 0x0000000b, gCreditsText_DaisukeHoshino
-
- .align 2
-gCreditsEntry_KenjiroIto:: @ 85E69C4
- .4byte 0x0000000b, gCreditsText_KenjiroIto
-
- .align 2
-gCreditsEntry_RuiKawaguchi:: @ 85E69CC
- .4byte 0x0000000b, gCreditsText_RuiKawaguchi
-
- .align 2
-gCreditsEntry_ShunsukeKohori:: @ 85E69D4
- .4byte 0x0000000b, gCreditsText_ShunsukeKohori
-
- .align 2
-gCreditsEntry_SachikoNakamichi:: @ 85E69DC
- .4byte 0x0000000b, gCreditsText_SachikoNakamichi
-
- .align 2
-gCreditsEntry_FujikoNomura:: @ 85E69E4
- .4byte 0x0000000b, gCreditsText_FujikoNomura
-
- .align 2
-gCreditsEntry_KazukiYoshihara:: @ 85E69EC
- .4byte 0x0000000b, gCreditsText_KazukiYoshihara
-
- .align 2
-gCreditsEntry_RetsujiNomoto:: @ 85E69F4
- .4byte 0x0000000b, gCreditsText_RetsujiNomoto
-
- .align 2
-gCreditsEntry_AzusaTajima:: @ 85E69FC
- .4byte 0x0000000b, gCreditsText_AzusaTajima
-
- .align 2
-gCreditsEntry_ShusakuEgami:: @ 85E6A04
- .4byte 0x0000000b, gCreditsText_ShusakuEgami
-
- .align 2
-gCreditsEntry_PackageAndManual:: @ 85E6A0C
- .4byte 0x00000100, gCreditsText_PackageAndManual
-
- .align 2
-gCreditsEntry_EnglishVersion:: @ 85E6A14
- .4byte 0x00000100, gCreditsText_EnglishVersion
-
- .align 2
-gCreditsEntry_Translator:: @ 85E6A1C
- .4byte 0x00000100, gCreditsText_Translator
-
- .align 2
-gCreditsEntry_TextEditor:: @ 85E6A24
- .4byte 0x00000100, gCreditsText_TextEditor
-
- .align 2
-gCreditsEntry_NCLCoordinator:: @ 85E6A2C
- .4byte 0x00000100, gCreditsText_NCLCoordinator
-
- .align 2
-gCreditsEntry_GraphicDesigner:: @ 85E6A34
- .4byte 0x00000100, gCreditsText_GraphicDesigner
-
- .align 2
-gCreditsEntry_NOAProductTesting:: @ 85E6A3C
- .4byte 0x00000100, gCreditsText_NOAProductTesting
-
- .align 2
-gCreditsEntry_HideyukiNakajima:: @ 85E6A44
- .4byte 0x00000000, gCreditsText_HideyukiNakajima
-
- .align 2
-gCreditsEntry_HidenoriSaeki:: @ 85E6A4C
- .4byte 0x00000000, gCreditsText_HidenoriSaeki
-
- .align 2
-gCreditsEntry_YokoWatanabe:: @ 85E6A54
- .4byte 0x00000000, gCreditsText_YokoWatanabe
-
- .align 2
-gCreditsEntry_SakaeKimura:: @ 85E6A5C
- .4byte 0x00000000, gCreditsText_SakaeKimura
-
- .align 2
-gCreditsEntry_ChiakiShinkai:: @ 85E6A64
- .4byte 0x00000000, gCreditsText_ChiakiShinkai
-
- .align 2
-gCreditsEntry_SethMcMahill:: @ 85E6A6C
- .4byte 0x00000000, gCreditsText_SethMcMahill
-
- .align 2
-gCreditsEntry_NobOgasawara:: @ 85E6A74
- .4byte 0x00000000, gCreditsText_NobOgasawara
-
- .align 2
-gCreditsEntry_TeresaLillygren:: @ 85E6A7C
- .4byte 0x00000000, gCreditsText_TeresaLillygren
-
- .align 2
-gCreditsEntry_KimikoNakamichi:: @ 85E6A84
- .4byte 0x00000000, gCreditsText_KimikoNakamichi
-
- .align 2
-gCreditsEntry_SouichiYamamoto:: @ 85E6A8C
- .4byte 0x00000000, gCreditsText_SouichiYamamoto
-
- .align 2
-gCreditsEntry_YuichiroIto:: @ 85E6A94
- .4byte 0x00000000, gCreditsText_YuichiroIto
-
- .align 2
-gCreditsEntry_ThomasHertzog:: @ 85E6A9C
- .4byte 0x00000000, gCreditsText_ThomasHertzog
-
- .align 2
-gCreditsEntry_MikaKurosawa:: @ 85E6AA4
- .4byte 0x00000000, gCreditsText_MikaKurosawa
-
- .align 2
-gCreditsEntry_NationalFederationBlind:: @ 85E6AAC
- .4byte 0x00000000, gCreditsText_NationalFederationBlind
-
- .align 2
-gCreditsEntry_PatriciaAMaurer:: @ 85E6AB4
- .4byte 0x00000000, gCreditsText_PatriciaAMaurer
-
- .align 2
-gCreditsEntry_EuropeanBlindUnion:: @ 85E6ABC
- .4byte 0x00000000, gCreditsText_EuropeanBlindUnion
-
- .align 2
-gCreditsEntry_AustralianBrailleAuthority:: @ 85E6AC4
- .4byte 0x00000000, gCreditsText_AustralianBrailleAuthority
-
- .align 2
-gCreditsEntry_RoyalNewZealandFederationBlind:: @ 85E6ACC
- .4byte 0x00000000, gCreditsText_RoyalNewZealandFederationBlind
-
- .align 2
-gCreditsEntry_MotoyasuTojima:: @ 85E6AD4
- .4byte 0x00000000, gCreditsText_MotoyasuTojima
-
- .align 2
-gCreditsEntry_NicolaPrattBarlow:: @ 85E6ADC
- .4byte 0x00000000, gCreditsText_NicolaPrattBarlow
-
- .align 2
-gCreditsEntry_ShellieDow:: @ 85E6AE4
- .4byte 0x00000000, gCreditsText_ShellieDow
-
- .align 2
-gCreditsEntry_ErikJohnson:: @ 85E6AEC
- .4byte 0x00000000, gCreditsText_ErikJohnson
-
- .align 2
-gUnknown_085E6AF4:: @ 85E6AF4
- .4byte gCreditsEntry_EmptyString
- .4byte gCreditsEntry_PkmnEmeraldVersion
- .4byte gCreditsEntry_Credits
- .4byte gCreditsEntry_EmptyString
- .4byte gCreditsEntry_EmptyString
-
- .4byte gCreditsEntry_EmptyString
- .4byte gCreditsEntry_Director
- .4byte gCreditsEntry_ShigekiMorimoto
- .4byte gCreditsEntry_EmptyString
- .4byte gCreditsEntry_EmptyString
-
- .4byte gCreditsEntry_EmptyString
- .4byte gCreditsEntry_ArtDirector
- .4byte gCreditsEntry_KenSugimori
- .4byte gCreditsEntry_EmptyString
- .4byte gCreditsEntry_EmptyString
-
- .4byte gCreditsEntry_EmptyString
- .4byte gCreditsEntry_WorldDirector
- .4byte gCreditsEntry_JunichiMasuda
- .4byte gCreditsEntry_EmptyString
- .4byte gCreditsEntry_EmptyString
-
- .4byte gCreditsEntry_LeadProgrammer
- .4byte gCreditsEntry_HisashiSogabe
- .4byte gCreditsEntry_LeadGraphicArtist
- .4byte gCreditsEntry_MotofumiFujiwara
- .4byte gCreditsEntry_EmptyString
-
- .4byte gCreditsEntry_Programmers
- .4byte gCreditsEntry_HisashiSogabe
- .4byte gCreditsEntry_TomomichiOhta
- .4byte gCreditsEntry_NozomuSaito
- .4byte gCreditsEntry_EmptyString
-
- .4byte gCreditsEntry_Programmers
- .4byte gCreditsEntry_AkitoMori
- .4byte gCreditsEntry_HiroyukiNakamura
- .4byte gCreditsEntry_MasaoTaya
- .4byte gCreditsEntry_EmptyString
-
- .4byte gCreditsEntry_Programmers
- .4byte gCreditsEntry_SatoshiNohara
- .4byte gCreditsEntry_MiyukiIwasawa
- .4byte gCreditsEntry_YoshinoriMatsuda
- .4byte gCreditsEntry_KeitaKagaya
-
- .4byte gCreditsEntry_Programmers
- .4byte gCreditsEntry_TetsuyaWatanabe
- .4byte gCreditsEntry_SosukeTamada
- .4byte gCreditsEntry_TakenoriOhta
- .4byte gCreditsEntry_EmptyString
-
- .4byte gCreditsEntry_EmptyString
- .4byte gCreditsEntry_GraphicDesigners
- .4byte gCreditsEntry_MotofumiFujiwara
- .4byte gCreditsEntry_SatoshiOhta
- .4byte gCreditsEntry_EmptyString
-
- .4byte gCreditsEntry_GraphicDesigners
- .4byte gCreditsEntry_KenkichiToyama
- .4byte gCreditsEntry_AsukaIwashita
- .4byte gCreditsEntry_TakaoUnno
- .4byte gCreditsEntry_EmptyString
-
- .4byte gCreditsEntry_GraphicDesigners
- .4byte gCreditsEntry_KenSugimori
- .4byte gCreditsEntry_HironobuYoshida
- .4byte gCreditsEntry_AimiTomita
- .4byte gCreditsEntry_KanakoEo
-
- .4byte gCreditsEntry_MusicComposition
- .4byte gCreditsEntry_GoIchinose
- .4byte gCreditsEntry_JunichiMasuda
- .4byte gCreditsEntry_MorikazuAoki
- .4byte gCreditsEntry_HitomiSato
-
- .4byte gCreditsEntry_EmptyString
- .4byte gCreditsEntry_SoundEffectsAndPkmnVoices
- .4byte gCreditsEntry_GoIchinose
- .4byte gCreditsEntry_MorikazuAoki
- .4byte gCreditsEntry_EmptyString
-
- .4byte gCreditsEntry_GameDesigners
- .4byte gCreditsEntry_ShigekiMorimoto
- .4byte gCreditsEntry_TeruyukiShimoyamada
- .4byte gCreditsEntry_TakeshiKawachimaru
- .4byte gCreditsEntry_AkihitoTomisawa
-
- .4byte gCreditsEntry_GameDesigners
- .4byte gCreditsEntry_SuguruNakatsui
- .4byte gCreditsEntry_TetsujiOhta
- .4byte gCreditsEntry_HitomiSato
- .4byte gCreditsEntry_KenjiMatsushima
-
- .4byte gCreditsEntry_GameDesigners
- .4byte gCreditsEntry_JunichiMasuda
- .4byte gCreditsEntry_KojiNishino
- .4byte gCreditsEntry_ShigeruOhmori
- .4byte gCreditsEntry_TadashiTakahashi
-
- .4byte gCreditsEntry_ScenarioPlot
- .4byte gCreditsEntry_AkihitoTomisawa
- .4byte gCreditsEntry_JunichiMasuda
- .4byte gCreditsEntry_KojiNishino
- .4byte gCreditsEntry_EmptyString
-
- .4byte gCreditsEntry_Scenario
- .4byte gCreditsEntry_AkihitoTomisawa
- .4byte gCreditsEntry_HitomiSato
- .4byte gCreditsEntry_ToshinobuMatsumiya
- .4byte gCreditsEntry_EmptyString
-
- .4byte gCreditsEntry_ScriptDesigners
- .4byte gCreditsEntry_TomomichiOhta
- .4byte gCreditsEntry_SatoshiNohara
- .4byte gCreditsEntry_EmptyString
- .4byte gCreditsEntry_EmptyString
-
- .4byte gCreditsEntry_MapDesigners
- .4byte gCreditsEntry_SuguruNakatsui
- .4byte gCreditsEntry_TeruyukiShimoyamada
- .4byte gCreditsEntry_ShigeruOhmori
- .4byte gCreditsEntry_TetsujiOhta
-
- .4byte gCreditsEntry_EmptyString
- .4byte gCreditsEntry_BattleFrontierData
- .4byte gCreditsEntry_TetsujiOhta
- .4byte gCreditsEntry_EmptyString
- .4byte gCreditsEntry_EmptyString
-
- .4byte gCreditsEntry_ParametricDesigners
- .4byte gCreditsEntry_TeruyukiShimoyamada
- .4byte gCreditsEntry_ShigekiMorimoto
- .4byte gCreditsEntry_TetsujiOhta
- .4byte gCreditsEntry_KojiNishino
-
- .4byte gCreditsEntry_EmptyString
- .4byte gCreditsEntry_PokedexText
- .4byte gCreditsEntry_KenjiMatsushima
- .4byte gCreditsEntry_EmptyString
- .4byte gCreditsEntry_EmptyString
-
- .4byte gCreditsEntry_EnvAndToolPgrms
- .4byte gCreditsEntry_HisashiSogabe
- .4byte gCreditsEntry_SosukeTamada
- .4byte gCreditsEntry_HiroyukiNakamura
- .4byte gCreditsEntry_AkitoMori
-
- .4byte gCreditsEntry_PkmnDesigners
- .4byte gCreditsEntry_KenSugimori
- .4byte gCreditsEntry_MotofumiFujiwara
- .4byte gCreditsEntry_ShigekiMorimoto
- .4byte gCreditsEntry_EmptyString
-
- .4byte gCreditsEntry_PkmnDesigners
- .4byte gCreditsEntry_HironobuYoshida
- .4byte gCreditsEntry_SatoshiOhta
- .4byte gCreditsEntry_AsukaIwashita
- .4byte gCreditsEntry_EmptyString
-
- .4byte gCreditsEntry_PkmnDesigners
- .4byte gCreditsEntry_TakaoUnno
- .4byte gCreditsEntry_KanakoEo
- .4byte gCreditsEntry_AimiTomita
- .4byte gCreditsEntry_EmptyString
-
- .4byte gCreditsEntry_PkmnDesigners
- .4byte gCreditsEntry_AtsukoNishida
- .4byte gCreditsEntry_MuneoSaito
- .4byte gCreditsEntry_RenaYoshikawa
- .4byte gCreditsEntry_JunOkutani
-
- .4byte gCreditsEntry_EmptyString
- .4byte gCreditsEntry_SupportProgrammers
- .4byte gCreditsEntry_SatoshiMitsuhara
- .4byte gCreditsEntry_DaisukeHoshino
- .4byte gCreditsEntry_EmptyString
-
- .4byte gCreditsEntry_EmptyString
- .4byte gCreditsEntry_NCLProductTesting
- .4byte gCreditsEntry_NCLSuperMarioClub
- .4byte gCreditsEntry_EmptyString
- .4byte gCreditsEntry_EmptyString
-
- .4byte gCreditsEntry_EmptyString
- .4byte gCreditsEntry_PackageAndManual
- .4byte gCreditsEntry_KenSugimori
- .4byte gCreditsEntry_EmptyString
- .4byte gCreditsEntry_EmptyString
-
- .4byte gCreditsEntry_EmptyString
- .4byte gCreditsEntry_SpecialThanks
- .4byte gCreditsEntry_KenjiTominaga
- .4byte gCreditsEntry_HirokiEnomoto
- .4byte gCreditsEntry_EmptyString
-
- .4byte gCreditsEntry_SpecialThanks
- .4byte gCreditsEntry_KazuyaSuyama
- .4byte gCreditsEntry_KenjiroIto
- .4byte gCreditsEntry_MichikoTakizawa
- .4byte gCreditsEntry_MakikoTakada
-
- .4byte gCreditsEntry_SpecialThanks
- .4byte gCreditsEntry_MikikoOhhashi
- .4byte gCreditsEntry_TakanaoKondo
- .4byte gCreditsEntry_RuiKawaguchi
- .4byte gCreditsEntry_EmptyString
-
- .4byte gCreditsEntry_SpecialThanks
- .4byte gCreditsEntry_TakahiroOhnishi
- .4byte gCreditsEntry_NorihideOkamura
- .4byte gCreditsEntry_ShunsukeKohori
- .4byte gCreditsEntry_EmptyString
-
- .4byte gCreditsEntry_InfoSupervisors
- .4byte gCreditsEntry_KazuyukiTerada
- .4byte gCreditsEntry_YuriSakurai
- .4byte gCreditsEntry_YumiFunasaka
- .4byte gCreditsEntry_NaokoYanase
-
- .4byte gCreditsEntry_EmptyString
- .4byte gCreditsEntry_Artwork
- .4byte gCreditsEntry_SachikoNakamichi
- .4byte gCreditsEntry_FujikoNomura
- .4byte gCreditsEntry_EmptyString
-
- .4byte gCreditsEntry_EmptyString
- .4byte gCreditsEntry_Artwork
- .4byte gCreditsEntry_HideyukiNakajima
- .4byte gCreditsEntry_HidenoriSaeki
- .4byte gCreditsEntry_EmptyString
-
- .4byte gCreditsEntry_Artwork
- .4byte gCreditsEntry_YokoWatanabe
- .4byte gCreditsEntry_SakaeKimura
- .4byte gCreditsEntry_ChiakiShinkai
- .4byte gCreditsEntry_EmptyString
-
- .4byte gCreditsEntry_Coordinators
- .4byte gCreditsEntry_KazukiYoshihara
- .4byte gCreditsEntry_AkiraKinashi
- .4byte gCreditsEntry_RetsujiNomoto
- .4byte gCreditsEntry_EmptyString
-
- .4byte gCreditsEntry_EmptyString
- .4byte gCreditsEntry_EnglishVersion
- .4byte gCreditsEntry_HiroNakamura
- .4byte gCreditsEntry_SethMcMahill
- .4byte gCreditsEntry_EmptyString
-
- .4byte gCreditsEntry_EmptyString
- .4byte gCreditsEntry_Translator
- .4byte gCreditsEntry_NobOgasawara
- .4byte gCreditsEntry_EmptyString
- .4byte gCreditsEntry_EmptyString
-
- .4byte gCreditsEntry_EmptyString
- .4byte gCreditsEntry_TextEditor
- .4byte gCreditsEntry_TeresaLillygren
- .4byte gCreditsEntry_EmptyString
- .4byte gCreditsEntry_EmptyString
-
- .4byte gCreditsEntry_EmptyString
- .4byte gCreditsEntry_NCLCoordinator
- .4byte gCreditsEntry_KimikoNakamichi
- .4byte gCreditsEntry_EmptyString
- .4byte gCreditsEntry_EmptyString
-
- .4byte gCreditsEntry_Programmers
- .4byte gCreditsEntry_TerukiMurakawa
- .4byte gCreditsEntry_SouichiYamamoto
- .4byte gCreditsEntry_YuichiroIto
- .4byte gCreditsEntry_AkiraKinashi
-
- .4byte gCreditsEntry_EmptyString
- .4byte gCreditsEntry_GraphicDesigner
- .4byte gCreditsEntry_AkiraKinashi
- .4byte gCreditsEntry_EmptyString
- .4byte gCreditsEntry_EmptyString
-
- .4byte gCreditsEntry_EnvAndToolPgrms
- .4byte gCreditsEntry_TerukiMurakawa
- .4byte gCreditsEntry_SouichiYamamoto
- .4byte gCreditsEntry_KimikoNakamichi
- .4byte gCreditsEntry_EmptyString
-
- .4byte gCreditsEntry_NOAProductTesting
- .4byte gCreditsEntry_ThomasHertzog
- .4byte gCreditsEntry_ErikJohnson
- .4byte gCreditsEntry_MikaKurosawa
- .4byte gCreditsEntry_EmptyString
-
- .4byte gCreditsEntry_BrailleCodeCheck
- .4byte gCreditsEntry_NationalFederationBlind
- .4byte gCreditsEntry_PatriciaAMaurer
- .4byte gCreditsEntry_JapanBrailleLibrary
- .4byte gCreditsEntry_EuropeanBlindUnion
-
- .4byte gCreditsEntry_EmptyString
- .4byte gCreditsEntry_BrailleCodeCheck
- .4byte gCreditsEntry_AustralianBrailleAuthority
- .4byte gCreditsEntry_RoyalNewZealandFederationBlind
- .4byte gCreditsEntry_EmptyString
-
- .4byte gCreditsEntry_SpecialThanks
- .4byte gCreditsEntry_HiroyukiUesugi
- .4byte gCreditsEntry_MotoyasuTojima
- .4byte gCreditsEntry_NicolaPrattBarlow
- .4byte gCreditsEntry_ShellieDow
-
- .4byte gCreditsEntry_EmptyString
- .4byte gCreditsEntry_TaskManagers
- .4byte gCreditsEntry_AzusaTajima
- .4byte gCreditsEntry_ShusakuEgami
- .4byte gCreditsEntry_EmptyString
-
- .4byte gCreditsEntry_Producers
- .4byte gCreditsEntry_HiroyukiJinnai
- .4byte gCreditsEntry_HitoshiYamagami
- .4byte gCreditsEntry_GakujiNomoto
- .4byte gCreditsEntry_HiroakiTsuru
-
- .4byte gCreditsEntry_EmptyString
- .4byte gCreditsEntry_ExecutiveDirector
- .4byte gCreditsEntry_SatoshiTajiri
- .4byte gCreditsEntry_EmptyString
- .4byte gCreditsEntry_EmptyString
-
- .4byte gCreditsEntry_EmptyString
- .4byte gCreditsEntry_ExecProducers
- .4byte gCreditsEntry_SatoruIwata
- .4byte gCreditsEntry_EmptyString
- .4byte gCreditsEntry_EmptyString
-
- .4byte gCreditsEntry_EmptyString
- .4byte gCreditsEntry_ExecProducers
- .4byte gCreditsEntry_TsunekazIshihara
- .4byte gCreditsEntry_EmptyString
- .4byte gCreditsEntry_EmptyString
-
- .align 2
-gUnknown_085E6F68:: @ 85E6F68 struct BgTemplate
- .4byte 0x000001C8
-
- .align 2
-gUnknown_085E6F6C:: @ 85E6F6C
- window_template 0x00, 0x00, 0x09, 0x1e, 0x0c, 0x08, 0x0001
- null_window_template
-
- .align 2
-gUnknown_085E6F7C:: @ 85E6F7C
- .byte 0x68, 0x24, 0x78, 0x24, 0x88, 0x24, 0x00, 0x00
-
- .align 2
-gUnknown_085E6F84:: @ 85E6F84
- .2byte 0x0000, 0x0008, 0x0040, 0x0008, 0x0080, 0x0008, 0x00c0, 0x0008, 0xfffe, 0x0000
-
- .align 2
-gUnknown_085E6F98:: @ 85E6F98
- .2byte 0x0000, 0x0004, 0x0040, 0x0004, 0x0080, 0x0004, 0x00c0, 0x0004, 0xfffe, 0x0000
-
- .align 2
-gUnknown_085E6FAC:: @ 85E6FAC
- .2byte 0x0100, 0x0004, 0x0140, 0x0004, 0x0180, 0x0004, 0xffff, 0x0000
-
- .align 2
-gUnknown_085E6FBC:: @ 85E6FBC
- .2byte 0x0180, 0x001e, 0x0140, 0x001e, 0x0100, 0x001e, 0x0100, 0x001e, 0xffff, 0x0000
-
- .align 2
-gUnknown_085E6FD0:: @ 85E6FD0
- .4byte gUnknown_085E6F84
- .4byte gUnknown_085E6F98
- .4byte gUnknown_085E6FAC
- .4byte gUnknown_085E6FBC
-
- .align 2
-gUnknown_085E6FE0:: @ 85E6FE0
- .2byte 0x0000, 0x0008, 0x0040, 0x0008, 0x0080, 0x0008, 0x00c0, 0x0008, 0xfffe, 0x0000
-
- .align 2
-gUnknown_085E6FF4:: @ 85E6FF4
- .2byte 0x0000, 0x0004, 0x0040, 0x0004, 0x0080, 0x0004, 0x00c0, 0x0004, 0xfffe, 0x0000
-
- .align 2
-gUnknown_085E7008:: @ 85E7008
- .2byte 0x0000, 0x0004, 0xffff, 0x0000
-
- .align 2
-gUnknown_085E7010:: @ 85E7010
- .4byte gUnknown_085E6FE0
- .4byte gUnknown_085E6FF4
- .4byte gUnknown_085E7008
-
- .align 2
-gUnknown_085E701C:: @ 85E701C
- obj_tiles gDecompressionBuffer, 0x1800, 0x03E9
- null_obj_tiles
-
- .align 2
-gUnknown_085E702C:: @ 85E702C
- obj_pal gDecompressionBuffer + 0x1800, 0x03E9
- null_obj_pal
-
- .align 2
-gUnknown_085E703C:: @ 85E703C
- .2byte 0x00a0, 0xc000, 0x0400, 0x0000
-
- .align 2
-gUnknown_085E7044:: @ 85E7044
- .2byte 0x0000, 0x0008, 0xffff, 0x0000
-
- .align 2
-gUnknown_085E704C:: @ 85E704C
- .2byte 0x0040, 0x0008, 0xffff, 0x0000
-
- .align 2
-gUnknown_085E7054:: @ 85E7054
- .2byte 0x0080, 0x0008, 0xffff, 0x0000
-
- .align 2
-gUnknown_085E705C:: @ 85E705C
- .4byte gUnknown_085E7044
- .4byte gUnknown_085E704C
- .4byte gUnknown_085E7054
-
- .align 2
-gUnknown_085E7068:: @ 85E7068
- spr_template 0x03e9, 0x03e9, gUnknown_085E703C, gUnknown_085E705C, NULL, gDummySpriteAffineAnimTable, sub_81772B8
diff --git a/data/data2b.s b/data/data2b.s
index b34995bee..8d759b0b2 100644
--- a/data/data2b.s
+++ b/data/data2b.s
@@ -22,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
@@ -4866,21 +4866,3 @@ gUnknown_0831ACDC:: @ 831ACDC
.align 2
gUnknown_0831ACE0:: @ 831ACE0
.byte 0xe0, 0xf0, 0xf0, 0xe0, 0xe0, 0x00, 0x00, 0x00
-
-@ 831ACE8
- .include "data/type_effectiveness.inc"
-
-@ 831AE38
- .include "data/text/type_names.inc"
-
-@ 831AEB8
- .include "data/trainer_money.inc"
-
-@ 831AF98
- .include "data/text/ability_descriptions.inc"
-
-@ 831B6DB
- .include "data/text/ability_names.inc"
-
-@ 831BAD4
- .include "data/text/ability_description_pointers.inc"
diff --git a/data/data2c.s b/data/data2c.s
deleted file mode 100644
index 8d134ccb2..000000000
--- a/data/data2c.s
+++ /dev/null
@@ -1,18 +0,0 @@
-#include "constants/abilities.h"
-#include "constants/items.h"
-#include "constants/moves.h"
-#include "constants/species.h"
-#include "constants/pokemon.h"
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 2
-
-@ 831C898
- .include "data/battle_moves.inc"
-
-@ 0x31d93c
-@ unreferenced unknown data
- .byte 0x34, 0x00, 0x10, 0x00, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00
diff --git a/data/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/event_scripts.s b/data/event_scripts.s
index b2b895903..c2906e649 100644
--- a/data/event_scripts.s
+++ b/data/event_scripts.s
@@ -8,7 +8,6 @@
.include "asm/macros.inc"
.include "asm/macros/event.inc"
.include "constants/constants.inc"
-
.section script_data, "aw", %progbits
@@ -50,7 +49,7 @@ gStdScripts:: @ 81DC2A0
.4byte Std_5
.4byte Std_6
.4byte Std_ObtainDecoration
- .4byte Std_8
+ .4byte Std_RegisteredInMatchCall
.4byte Std_9
.4byte Std_10
@@ -836,7 +835,7 @@ SlateportCity_BattleTentLobby_EventScript_27134F:: @ 827134F
SootopolisCity_MysteryEventsHouse_1F_EventScript_27134F:: @ 827134F
TrainerHill_Entrance_EventScript_27134F:: @ 827134F
VerdanturfTown_BattleTentLobby_EventScript_27134F:: @ 827134F
- special sub_809FF80
+ special SaveGame
waitstate
return
@@ -1162,7 +1161,7 @@ EventScript_2715DE:: @ 82715DE
setflag FLAG_0x376
setflag FLAG_0x374
setflag FLAG_0x375
- setflag FLAG_0x3C1
+ setflag FLAG_SPRITEVIS_SLATEPORT_MUSEUM_POPULATION
setflag FLAG_0x378
setflag FLAG_0x2F0
setflag FLAG_0x2F5
@@ -1178,7 +1177,7 @@ EventScript_2715DE:: @ 82715DE
setflag FLAG_0x38F
setflag FLAG_0x393
setflag FLAG_0x358
- setflag FLAG_0x390
+ setflag FLAG_SPRITEVIS_MAUVILLE_CITY_WATTSON
setflag FLAG_0x2FD
setflag FLAG_0x398
setflag FLAG_0x399
@@ -1287,12 +1286,12 @@ EverGrandeCity_HallOfFame_EventScript_271851:: @ 8271851
setvar VAR_0x40D3, 1
return
-EverGrandeCity_HallOfFame_EventScript_271857:: @ 8271857
+EventScript_WhiteOut:: @ 8271857
call EverGrandeCity_HallOfFame_EventScript_2718CC
- goto EverGrandeCity_HallOfFame_EventScript_271862
+ goto EventScript_271862
end
-EverGrandeCity_HallOfFame_EventScript_271862:: @ 8271862
+EventScript_271862:: @ 8271862
compare VAR_0x4096, 1
goto_eq EverGrandeCity_HallOfFame_EventScript_271884
compare VAR_0x4096, 2
@@ -1789,7 +1788,7 @@ EventScript_271DBC:: @ 8271DBC
EventScript_271DF9:: @ 8271DF9
playse SE_PC_LOGIN
msgbox gUnknown_082726C2, 4
- special sub_816AE98
+ special PlayerPC
waitstate
goto EventScript_271DAC
end
@@ -1891,7 +1890,7 @@ DewfordTown_EventScript_271E8B:: @ 8271E8B
DewfordTown_Hall_EventScript_271E8B:: @ 8271E8B
dodailyevents
setvar VAR_0x8004, 0
- special sub_8122998
+ special BufferTrendyPhraseString
return
DewfordTown_EventScript_271E95:: @ 8271E95
@@ -4076,7 +4075,7 @@ Underwater3_EventScript_2742C0:: @ 82742C0
setescapewarp ROUTE_129, 255, 43, 20
return
-Std_8:: @ 82742C9
+Std_RegisteredInMatchCall:: @ 82742C9
buffertrainerclassname 0, VAR_0x8000
buffertrainername 1, VAR_0x8000
closemessage
@@ -5888,10 +5887,10 @@ gText_SoAmusing:: @ 82942E3
gText_SoMagical:: @ 82942F0
.string " so magical!$"
-gUnknown_082942FD:: @ 82942FD
+gOtherText_Is:: @ 82942FD
.string " is$"
-gUnknown_08294301:: @ 8294301
+gOtherText_DontYouAgree:: @ 8294301
.string "\n"
.string "Don’t you agree?$"
diff --git a/data/field_effect.s b/data/field_effect.s
deleted file mode 100644
index e6f8a558e..000000000
--- a/data/field_effect.s
+++ /dev/null
@@ -1,451 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
- .align 2, 0
-
- .align 2
-gNewGameBirchPic:: @ 8553A90
- .incbin "graphics/birch_speech/birch.4bpp"
-
- .space 0x3800
-
- .incbin "graphics/unused/intro_birch_beauty.4bpp"
-
- .align 2
-gNewGameBirchPalette:: @ 855A950
- .incbin "graphics/birch_speech/birch.gbapal"
-
- .align 2
-gSpriteImage_855A970:: @ 855A970
- .incbin "graphics/misc/pokeball_glow.4bpp"
-
- .align 2
-gFieldEffectObjectPalette4:: @ 855A990
- .incbin "graphics/map_objects/palettes/field_effect_object_palette_04.gbapal"
-
- .align 2
-gSpriteImage_855A9B0:: @ 855A9B0
- .incbin "graphics/misc/pokecenter_monitor/0.4bpp"
-
- .align 2
-gSpriteImage_855AA70:: @ 855AA70
- .incbin "graphics/misc/pokecenter_monitor/1.4bpp"
-
- .align 2
-gSpriteImage_855AB30:: @ 855AB30
- .incbin "graphics/misc/big_hof_monitor.4bpp"
-
- .align 2
-gSpriteImage_855AD30:: @ 855AD30
- .incbin "graphics/misc/small_hof_monitor.4bpp"
-
- .align 2
-gFieldEffectObjectPalette5:: @ 855AE30
- .incbin "graphics/map_objects/palettes/field_effect_object_palette_05.gbapal"
-
- .align 2
-gUnknown_0855AE50:: @ 855AE50
- .incbin "graphics/misc/field_move_streaks.4bpp"
-
- .align 2
-gUnknown_0855B050:: @ 855B050
- .incbin "graphics/misc/field_move_streaks.gbapal"
-
- .align 2
-gUnknown_0855B070:: @ 855B070
- .incbin "graphics/misc/field_move_streaks_map.bin"
-
- .align 2
-gUnknown_0855B2F0:: @ 855B2F0
- .incbin "graphics/misc/darkness_field_move_streaks.4bpp"
-
- .align 2
-gUnknown_0855B370:: @ 855B370
- .incbin "graphics/misc/darkness_field_move_streaks.gbapal"
-
- .align 2
-gUnknown_0855B390:: @ 855B390
- .incbin "graphics/misc/darkness_field_move_streaks_map.bin"
-
- .align 2
-gUnknown_0855B610:: @ 855B610
- .incbin "graphics/misc/spotlight.gbapal"
-
- .align 2
-gUnknown_0855B630:: @ 855B630
- .incbin "graphics/misc/spotlight.4bpp"
-
- .align 2
-gUnknown_0855C170:: @ 855C170
- .incbin "graphics/unknown/unknown_55C170.4bpp"
-
- .align 2
-gUnknown_0855C1F0:: @ 855C1F0
- .4byte FieldEffectCmd_loadtiles
- .4byte FieldEffectCmd_loadfadedpal
- .4byte FieldEffectCmd_loadpal
- .4byte FieldEffectCmd_callnative
- .4byte FieldEffectCmd_end
- .4byte FieldEffectCmd_loadgfx_callnative
- .4byte FieldEffectCmd_loadtiles_callnative
- .4byte FieldEffectCmd_loadfadedpal_callnative
-
- .align 2
-@ TODO: something else uses these too
-gNewGameBirchOamAttributes:: @ 855C210
- .4byte OAM_SIZE_64x64
- .2byte 0
-
- .align 2
-gOamData_855C218:: @ 855C218
- .2byte 0x0000, 0x0000, 0x0000, 0x0000
-
- .align 2
-gOamData_855C220:: @ 855C220
- .2byte 0x0000, 0x4000, 0x0000, 0x0000
-
- .align 2
-gNewGameBirchPicTable:: @ 855C228
- obj_tiles gNewGameBirchPic, 0x800
-
- .align 2
-gNewGameBirchObjectPaletteInfo:: @ 855C230
- obj_pal gNewGameBirchPalette, 0x1006
-
- .align 2
-gNewGameBirchImageAnim:: @ 855C238
- obj_image_anim_frame 0, 1
- obj_image_anim_end
-
- .align 2
-gNewGameBirchImageAnimTable:: @ 855C240
- .4byte gNewGameBirchImageAnim
-
- .align 2
-gNewGameBirchObjectTemplate:: @ 855C244
- spr_template 0xFFFF, 0x1006, gNewGameBirchOamAttributes, gNewGameBirchImageAnimTable, gNewGameBirchPicTable, gDummySpriteAffineAnimTable, SpriteCallbackDummy
-
- .align 2
-gFieldEffectObjectPaletteInfo4:: @ 855C25C
- obj_pal gFieldEffectObjectPalette4, 0x1007
-
- .align 2
-gFieldEffectObjectPaletteInfo5:: @ 855C264
- obj_pal gFieldEffectObjectPalette5, 0x1010
-
- .align 2
-gOamData_855C26C:: @ 855C26C
- .2byte 0x4000, 0x8000, 0x0000, 0x0000
-
- .align 2
-gUnknown_855C274:: @ 855C274
- obj_frame_tiles gSpriteImage_855A970, 0x0020
-
- .align 2
-gUnknown_855C27C:: @ 855C27C
- obj_frame_tiles gSpriteImage_855A9B0, 0x00c0
- obj_frame_tiles gSpriteImage_855AA70, 0x00c0
-
- .align 2
-gUnknown_855C28C:: @ 855C28C
- obj_frame_tiles gSpriteImage_855AB30, 0x0200
-
- .align 2
-gUnknown_855C294:: @ 855C294
- obj_frame_tiles gSpriteImage_855AD30, 0x0200
-
- .align 2
-gSubspriteTable_855C29C:: @ 855C29C
- subsprite -12, -8, 2, 0, 16x8
- subsprite 4, -8, 2, 2, 8x8
- subsprite -12, 0, 2, 3, 16x8
- subsprite 4, 0, 2, 5, 8x8
-
- .align 2
-gUnknown_0855C2AC:: @ 855C2AC
- .4byte 4, gSubspriteTable_855C29C
-
- .align 2
-gSubspriteTable_855C2B4:: @ 855C2B4
- subsprite -32, -8, 2, 0, 32x8
- subsprite 0, -8, 2, 4, 32x8
- subsprite -32, 0, 2, 8, 32x8
- subsprite 0, 0, 2, 12, 32x8
-
- .align 2
-gUnknown_0855C2C4:: @ 855C2C4
- .4byte 4, gSubspriteTable_855C2B4
-
- .align 2
-gUnknown_0855C2CC:: @ 855C2CC
- .2byte 0x0000, 0x0001, 0xfffe, 0x0000
-
- .align 2
-gUnknown_0855C2D4:: @ 855C2D4
- .2byte 0x0000, 0x0010, 0x0001, 0x0010, 0x0000, 0x0010, 0x0001, 0x0010, 0x0000, 0x0010, 0x0001, 0x0010, 0x0000, 0x0010, 0x0001, 0x0010
- .2byte 0xffff, 0x0000
-
- .align 2
-gUnknown_0855C2F8:: @ 855C2F8
- .4byte gUnknown_0855C2CC
- .4byte gUnknown_0855C2D4
-
- .align 2
-gUnknown_0855C300:: @ 855C300
- .4byte gUnknown_0855C2CC
-
- .align 2
-gUnknown_0855C304:: @ 855C304
- spr_template 0xffff, 0x1007, gOamData_855C218, gUnknown_0855C2F8, gUnknown_855C274, gDummySpriteAffineAnimTable, sub_80B6828
-
- .align 2
-gUnknown_0855C31C:: @ 855C31C
- spr_template 0xffff, 0x1004, gOamData_855C220, gUnknown_0855C2F8, gUnknown_855C27C, gDummySpriteAffineAnimTable, sub_80B68AC
-
- .align 2
-gUnknown_0855C334:: @ 855C334
- spr_template 0xffff, 0x1010, gOamData_855C220, gUnknown_0855C300, gUnknown_855C28C, gDummySpriteAffineAnimTable, sub_80B6970
-
- .align 2
-gUnknown_0855C34C:: @ 855C34C
- spr_template 0xffff, 0x1010, gOamData_855C26C, gUnknown_0855C300, gUnknown_855C294, gDummySpriteAffineAnimTable, sub_80B6970
-
- .align 2
-gUnknown_0855C364:: @ 855C364
- .4byte sub_80B6214
- .4byte sub_80B6250
- .4byte sub_80B628C
- .4byte sub_80B62B4
-
- .align 2
-gUnknown_0855C374:: @ 855C374
- .4byte sub_80B6360
- .4byte sub_80B63D4
- .4byte sub_80B6404
- .4byte sub_80B642C
-
- .align 2
-gUnknown_0855C384:: @ 855C384
- .4byte sub_80B64DC
- .4byte sub_80B6574
- .4byte sub_80B65A8
- .4byte sub_80B66E8
- .4byte sub_80B67DC
- .4byte sub_80B67F8
- .4byte sub_80B6800
- .4byte nullsub_97
-
- .align 1
-gUnknown_0855C3A4:: @ 855C3A4
- .2byte 0x0000, 0x0000, 0x0006, 0x0000, 0x0000, 0x0004, 0x0006, 0x0004, 0x0000, 0x0008, 0x0006, 0x0008
-
-gUnknown_0855C3BC:: @ 855C3BC
- .byte 0x10, 0x0c, 0x08, 0x00
-
-gUnknown_0855C3C0:: @ 855C3C0
- .byte 0x10, 0x0c, 0x08, 0x00
-
-gUnknown_0855C3C4:: @ 855C3C4
- .byte 0x00, 0x00, 0x00, 0x00
-
- .align 2
-gUnknown_0855C3C8:: @ 855C3C8
- .4byte sub_80B6BCC
- .4byte sub_80B6C74
- .4byte sub_80B6C90
- .4byte sub_80B6D04
- .4byte sub_80B6DBC
- .4byte sub_80B6DD8
- .4byte sub_80B6E18
-
- .align 2
-gUnknown_0855C3E4:: @ 855C3E4
- .4byte sub_80B6EC0
- .4byte sub_80B6EE0
- .4byte sub_80B6F50
- .4byte sub_80B6F74
- .4byte sub_80B6F84
- .4byte sub_80B6FA8
-
- .align 2
-gUnknown_0855C3FC:: @ 855C3FC
- .4byte sub_80B7114
- .4byte sub_80B7190
- .4byte sub_80B71D0
- .4byte sub_80B7230
- .4byte sub_80B7270
- .4byte sub_80B72D0
- .4byte sub_80B72F4
-
- .align 2
-gUnknown_0855C418:: @ 855C418
- .4byte sub_80B73D0
- .4byte waterfall_1_do_anim_probably
- .4byte waterfall_2_wait_anim_finish_probably
- .4byte sub_80B7450
- .4byte sub_80B7478
-
- .align 2
-gUnknown_0855C42C:: @ 855C42C
- .4byte dive_1_lock
- .4byte dive_2_unknown
- .4byte dive_3_unknown
-
- .align 2
-gUnknown_0855C438:: @ 855C438
- .4byte sub_80B764C
- .4byte sub_80B7684
- .4byte sub_80B76B8
- .4byte sub_80B7704
- .4byte sub_80B77F8
- .4byte sub_80B7814
-
- .align 2
-gUnknown_0855C450:: @ 855C450
- .4byte sub_80B78EC
- .4byte sub_80B791C
- .4byte sub_80B7968
- .4byte sub_80B79BC
-
- .align 2
-gUnknown_0855C460:: @ 855C460
- .4byte sub_80B7AE8
- .4byte sub_80B7B18
- .4byte sub_80B7B94
- .4byte sub_80B7BCC
- .4byte sub_80B7BF4
-
- .align 2
-gUnknown_0855C474:: @ 855C474
- .4byte sub_80B7D14
- .4byte sub_80B7D34
-
-gUnknown_0855C47C:: @ 855C47C
- .byte 0x01, 0x03, 0x04, 0x02, 0x01, 0x00, 0x00, 0x00
-
- .align 2
-gUnknown_0855C484:: @ 855C484
- .4byte sub_80B7EC4
- .4byte sub_80B7EE8
-
- .align 2
-gUnknown_0855C48C:: @ 855C48C
- .4byte sub_80B800C
- .4byte sub_80B8034
- .4byte sub_80B80C4
- .4byte sub_80B8198
-
- .align 2
-gUnknown_0855C49C:: @ 855C49C
- .4byte sub_80B8280
- .4byte sub_80B830C
- .4byte sub_80B8410
-
- .align 2
-gUnknown_0855C4A8:: @ 855C4A8
- .4byte sub_80B8584
- .4byte sub_80B85F8
- .4byte sub_80B8660
- .4byte sub_80B86EC
- .4byte sub_80B871C
- .4byte sub_80B8770
- .4byte overworld_bg_setup_2
-
- .align 2
-gUnknown_0855C4C4:: @ 855C4C4
- .4byte sub_80B88E4
- .4byte sub_80B8920
- .4byte sub_80B898C
- .4byte sub_80B89DC
- .4byte sub_80B8A0C
- .4byte sub_80B8A44
- .4byte sub_80B8A64
-
- .align 2
-gUnknown_0855C4E0:: @ 855C4E0
- .4byte sub_80B8DB4
- .4byte sub_80B8E14
- .4byte sub_80B8E60
- .4byte sub_80B8EA8
- .4byte sub_80B8F24
-
- .align 2
-gUnknown_0855C4F4:: @ 855C4F4
- .4byte sub_80B9204
- .4byte sub_80B925C
- .4byte sub_80B92A0
- .4byte sub_80B92F8
- .4byte sub_80B933C
- .4byte sub_80B9390
- .4byte sub_80B9418
- .4byte sub_80B9474
- .4byte sub_80B9494
-
- .align 2
-gUnknown_0855C518:: @ 855C518
- .2byte 0x0008, 0x0008, 0x00e2, 0x0000, 0x001c, 0x001c, 0x1e00, 0x0000, 0x7fff, 0x0000, 0x0000, 0x0000
-
- .align 2
-gUnknown_0855C530:: @ 855C530
- .2byte 0x0100, 0x0100, 0x0040, 0x0000, 0xfff6, 0xfff6, 0x1600, 0x0000, 0x7fff, 0x0000, 0x0000, 0x0000
-
- .align 2
-gUnknown_0855C548:: @ 855C548
- .4byte gUnknown_0855C518
- .4byte gUnknown_0855C530
-
- .align 2
-gUnknown_0855C550:: @ 855C550
- .4byte sub_80B9804
- .4byte sub_80B98B8
- .4byte sub_80B9924
- .4byte sub_80B9978
- .4byte sub_80B99F0
- .4byte sub_80B9A28
- .4byte sub_80B9A60
-
-gUnknown_0855C56C:: @ 855C56C
- .byte 0xfe, 0xff, 0xfc, 0xff, 0xfb, 0xff, 0xfa, 0xff, 0xf9, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf8, 0xff, 0xf9, 0xff, 0xf9, 0xff, 0xfa, 0xff, 0xfb, 0xff, 0xfd, 0xff, 0xfe, 0xff, 0x00, 0x00, 0x02, 0x00
- .byte 0x04, 0x00, 0x08, 0x00
-
- .align 2
-gUnknown_0855C590:: @ 855C590
- .4byte sub_80B9C28
- .4byte sub_80B9C54
- .4byte sub_80B9CDC
-
- .align 2
-gUnknown_0855C59C:: @ 855C59C
- obj_frame_tiles gUnknown_0855C170, 0x0020
- obj_frame_tiles gUnknown_0855C170 + 0x20, 0x0020
- obj_frame_tiles gUnknown_0855C170 + 0x40, 0x0020
- obj_frame_tiles gUnknown_0855C170 + 0x60, 0x0020
-
- .align 2
-gUnknown_0855C5BC:: @ 855C5BC
- .2byte 0x0000, 0x0000, 0xffff, 0x0000
-
- .align 2
-gUnknown_0855C5C4:: @ 855C5C4
- .2byte 0x0001, 0x0000, 0xffff, 0x0000
-
- .align 2
-gUnknown_0855C5CC:: @ 855C5CC
- .2byte 0x0002, 0x0000, 0xffff, 0x0000
-
- .align 2
-gUnknown_0855C5D4:: @ 855C5D4
- .2byte 0x0003, 0x0000, 0xffff, 0x0000
-
- .align 2
-gUnknown_0855C5DC:: @ 855C5DC
- .4byte gUnknown_0855C5BC
- .4byte gUnknown_0855C5C4
- .4byte gUnknown_0855C5CC
- .4byte gUnknown_0855C5D4
-
- .align 2
-gUnknown_0855C5EC:: @ 855C5EC
- spr_template 0xffff, 0x111a, gOamData_855C218, gUnknown_0855C5DC, gUnknown_0855C59C, gDummySpriteAffineAnimTable, sub_80B9DB8
-
diff --git a/data/field_effect_scripts.s b/data/field_effect_scripts.s
index 1a877daa9..8dfbd6782 100644
--- a/data/field_effect_scripts.s
+++ b/data/field_effect_scripts.s
@@ -98,7 +98,7 @@ gFieldEffectScript_Ripple:: @ 82DBB02
field_eff_end
gFieldEffectScript_FieldMoveShowMon:: @ 82DBB0C
- field_eff_callnative sub_80B849C
+ field_eff_callnative FldEff_FieldMoveShowMon
field_eff_end
gFieldEffectScript_Ash:: @ 82DBB12
@@ -110,7 +110,7 @@ gFieldEffectScript_SurfBlob:: @ 82DBB1C
field_eff_end
gFieldEffectScript_UseSurf:: @ 82DBB22
- field_eff_callnative sub_80B8D44
+ field_eff_callnative FldEff_UseSurf
field_eff_end
gFieldEffectScript_GroundImpactDust:: @ 82DBB28
@@ -175,7 +175,7 @@ gFieldEffectScript_DeepSandFootprints:: @ 82DBBAC
gFieldEffectScript_Unknown25:: @ 82DBBB6
field_eff_loadfadedpal gFieldEffectObjectPaletteInfo4
- field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo0, sub_80B61A0
+ field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo0, FldEff_PokecenterHeal
field_eff_end
gFieldEffectScript_Unknown26:: @ 82DBBC5
@@ -195,15 +195,15 @@ gFieldEffectScript_MountainDisguise:: @ 82DBBD7
field_eff_end
gFieldEffectScript_Unknown30:: @ 82DBBDD
- field_eff_callnative sub_80B90CC
+ field_eff_callnative FldEff_NPCFlyOut
field_eff_end
gFieldEffectScript_UseFly:: @ 82DBBE3
- field_eff_callnative sub_80B91A4
+ field_eff_callnative FldEff_UseFly
field_eff_end
gFieldEffectScript_FlyIn:: @ 82DBBE9
- field_eff_callnative sub_80B97C0
+ field_eff_callnative FldEff_FlyIn
field_eff_end
gFieldEffectScript_ExclamationMarkIcon2:: @ 82DBBEF
@@ -223,7 +223,7 @@ gFieldEffectScript_SandDisguisePlaceholder:: @ 82DBC09
field_eff_end
gFieldEffectScript_UseRockSmash:: @ 82DBC0F
- field_eff_callnative oei_rocksmash
+ field_eff_callnative FldEff_UseRockSmash
field_eff_end
gFieldEffectScript_Unknown40:: @ 82DBC15
@@ -231,7 +231,7 @@ gFieldEffectScript_Unknown40:: @ 82DBC15
field_eff_end
gFieldEffectScript_Unknown38:: @ 82DBC1B
- field_eff_callnative sub_8135780
+ field_eff_callnative FldEff_UseDig
field_eff_end
gFieldEffectScript_Unknown39:: @ 82DBC21
@@ -247,11 +247,11 @@ gFieldEffectScript_HotSpringsWater:: @ 82DBC35
field_eff_end
gFieldEffectScript_Unknown43:: @ 82DBC3F
- field_eff_callnative oei_waterfall
+ field_eff_callnative FldEff_UseWaterfall
field_eff_end
gFieldEffectScript_Unknown44:: @ 82DBC45
- field_eff_callnative sub_80B74D0
+ field_eff_callnative FldEff_UseDive
field_eff_end
gFieldEffectScript_Unknown45:: @ 82DBC4B
@@ -272,11 +272,11 @@ gFieldEffectScript_Unknown48:: @ 82DBC66
field_eff_end
gFieldEffectScript_JumpOutOfAsh:: @ 82DBC6C
- field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo2, sub_80B7C48
+ field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo2, FldEff_PopOutOfAsh
field_eff_end
gFieldEffectScript_Unknown50:: @ 82DBC76
- field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo2, sub_80B79F4
+ field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo2, FldEff_LavaridgeGymWarp
field_eff_end
gFieldEffectScript_Unknown51:: @ 82DBC80
@@ -312,7 +312,7 @@ gFieldEffectScript_Unknown58:: @ 82DBCC2
field_eff_end
gFieldEffectScript_FieldMoveShowMonInit:: @ 82DBCCC
- field_eff_callnative sub_80B84F8
+ field_eff_callnative FldEff_FieldMoveShowMonInit
field_eff_end
gFieldEffectScript_Unknown60:: @ 82DBCD2
@@ -325,7 +325,7 @@ gFieldEffectScript_Unknown61:: @ 82DBCD8
gFieldEffectScript_Unknown62:: @ 82DBCDE
field_eff_loadfadedpal gFieldEffectObjectPaletteInfo4
- field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo5, sub_80B62F4
+ field_eff_loadfadedpal_callnative gFieldEffectObjectPaletteInfo5, FldEff_HallOfFameRecord
field_eff_end
gFieldEffectScript_Unknown63:: @ 82DBCED
diff --git a/data/field_screen.s b/data/field_screen.s
index f95e7e0ec..968e2e7f3 100644
--- a/data/field_screen.s
+++ b/data/field_screen.s
@@ -483,7 +483,7 @@ gUnknown_0854FE64:: @ 854FE64
.2byte 0x00c8, 0x0048, 0x0040, 0x0038, 0x0030, 0x0028, 0x0020, 0x0018, 0x0000, 0x0000
.align 2
-gUnknown_0854FE78:: @ 854FE78
+gMaxFlashLevel:: @ 854FE78
.4byte 0x00000008
.align 2
diff --git a/data/fieldmap.s b/data/fieldmap.s
deleted file mode 100644
index 1daa3efdf..000000000
--- a/data/fieldmap.s
+++ /dev/null
@@ -1,8 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
- .align 2, 0
-
-gUnknown_08486EF8:: @ 8486EF8
- .4byte 0x00000000
diff --git a/data/fldeff_flash.s b/data/fldeff_flash.s
deleted file mode 100644
index 3c3071b37..000000000
--- a/data/fldeff_flash.s
+++ /dev/null
@@ -1,81 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 2
-gUnknown_085B27C8:: @ 85B27C8
- .byte 0x01, 0x04, 0x01, 0x00
- .4byte sub_81375A8
-
- .byte 0x02, 0x04, 0x01, 0x00
- .4byte sub_81375A8
-
- .byte 0x03, 0x04, 0x01, 0x00
- .4byte sub_81375A8
-
- .byte 0x05, 0x04, 0x01, 0x00
- .4byte sub_81375A8
-
- .byte 0x06, 0x04, 0x01, 0x00
- .4byte sub_81375A8
-
- .byte 0x07, 0x04, 0x01, 0x00
- .4byte sub_81375A8
-
- .byte 0x08, 0x04, 0x01, 0x00
- .4byte sub_81375A8
-
- .byte 0x09, 0x04, 0x01, 0x00
- .4byte sub_81375A8
-
- .byte 0x04, 0x01, 0x00, 0x01
- .4byte sub_81373F0
-
- .byte 0x04, 0x02, 0x00, 0x01
- .4byte sub_81373F0
-
- .byte 0x04, 0x03, 0x00, 0x01
- .4byte sub_81373F0
-
- .byte 0x04, 0x05, 0x00, 0x01
- .4byte sub_81373F0
-
- .byte 0x04, 0x06, 0x00, 0x01
- .4byte sub_81373F0
-
- .byte 0x04, 0x07, 0x00, 0x01
- .4byte sub_81373F0
-
- .byte 0x04, 0x08, 0x00, 0x01
- .4byte sub_81373F0
-
- .byte 0x04, 0x09, 0x00, 0x01
- .4byte sub_81373F0
-
- .byte 0x00, 0x00, 0x00, 0x00
- .4byte NULL
-
- .align 2
-gCaveTransitionPalette_White:: @ 85B2850
- .incbin "graphics/misc/cave_transition_white.gbapal"
-
- .align 2
-gCaveTransitionPalette_Black:: @ 85B2870
- .incbin "graphics/misc/cave_transition_black.gbapal"
-
- .align 2
-gUnknown_085B2890:: @ 85B2890
- .incbin "graphics/misc/85B2890.gbapal"
-
- .align 2
-gUnknown_085B28A0:: @ 85B28A0
- .incbin "graphics/misc/85B28A0.gbapal"
-
- .align 2
-gCaveTransitionTilemap:: @ 85B28B0
- .incbin "graphics/misc/cave_transition_map.bin.lz"
-
- .align 2
-gCaveTransitionTiles:: @ 85B2A90
- .incbin "graphics/misc/cave_transition.4bpp.lz"
diff --git a/data/fossil_special_fldeff_groundshake.s b/data/fossil_special_fldeff_groundshake.s
deleted file mode 100644
index 8fa546ce8..000000000
--- a/data/fossil_special_fldeff_groundshake.s
+++ /dev/null
@@ -1,98 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 2
-gUnknown_08617274:: @ 8617274
- .space 0x20
- .incbin "graphics/misc/mirage_tower.4bpp"
-
- .align 2
-gUnknown_08617B94:: @ 8617B94
- .incbin "graphics/misc/mirage_tower.bin"
-
- .align 2
-gRootFossil_Pal:: @ 8617C24
- .incbin "graphics/misc/fossil.gbapal"
-
- .align 2
-gRootFossil_Gfx:: @ 8617C44
- .incbin "graphics/misc/fossil.4bpp"
-
- .align 2
-gMirageTowerCrumbles_Gfx:: @ 8617CC4
- .incbin "graphics/misc/mirage_tower_crumbles.4bpp"
-
- .align 2
-gMirageTowerCrumbles_Palette:: @ 8617D44
- .incbin "graphics/misc/mirage_tower_crumbles.gbapal"
-
- .align 1
-gUnknown_08617D64:: @ 8617D64
- .2byte 0x0000, 0x000a, 0x0041, 0x0011, 0x0003, 0x0032, 0xfff4, 0x0000, 0x004b, 0x000a, 0x000f, 0x005a, 0x0007, 0x0008, 0x0041, 0xffee
- .2byte 0x0005, 0x004b, 0x0016, 0xfff6, 0x0037, 0xffe8, 0xfffc, 0x0041
-
- .align 2
-gUnknown_08617D94:: @ 8617D94
- obj_tiles gMirageTowerCrumbles_Gfx, 0x0080, 0x0fa0
- null_obj_tiles
-
- .align 2
-gUnknown_08617DA4:: @ 8617DA4
- .byte 0x12, 0x35, 0x51, 0x02, 0x13, 0x35, 0x51, 0x02, 0x14, 0x35, 0x51, 0x02, 0x12, 0x36, 0x51, 0x02, 0x13, 0x36, 0x51, 0x02, 0x14, 0x36, 0x51, 0x02, 0x12, 0x37, 0x51, 0x02, 0x13, 0x37, 0x51, 0x02
- .byte 0x14, 0x37, 0x51, 0x02, 0x12, 0x38, 0x51, 0x02, 0x13, 0x38, 0x51, 0x02, 0x14, 0x38, 0x51, 0x02, 0x12, 0x39, 0x59, 0x02, 0x13, 0x39, 0x59, 0x02, 0x14, 0x39, 0x59, 0x02, 0x12, 0x3a, 0x21, 0x01
- .byte 0x13, 0x3a, 0x21, 0x01, 0x14, 0x3a, 0x21, 0x01
-
- .align 2
-gSpriteAnim_8617DEC:: @ 8617DEC
- .2byte 0x0000, 0x0001, 0xffff, 0x0000
-
- .align 2
-gOamData_8617DF4:: @ 8617DF4
- .2byte 0x0000, 0x4000, 0x3000, 0x0000
-
- .align 2
-gSpriteAnimTable_8617DFC:: @ 8617DFC
- .4byte gSpriteAnim_8617DEC
-
- .align 2
-gUnknown_08617E00:: @ 8617E00
- spr_template 0xffff, 0xffff, gOamData_8617DF4, gSpriteAnimTable_8617DFC, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
-
- .align 2
-gUnknown_08617E18:: @ 8617E18
- .byte 0x3b, 0x43, 0x61, 0x00, 0x0f, 0x05, 0xff, 0x9b
-
- .align 2
-gSpriteAnim_8617E20:: @ 8617E20
- .2byte 0x0000, 0x000c, 0xfffe, 0x0000
-
- .align 2
-gSpriteAnimTable_8617E28:: @ 8617E28
- .4byte gSpriteAnim_8617E20
-
- .align 2
-gUnknown_08617E2C:: @ 8617E2C
- .2byte 0x0000, 0x0000, 0x0000, 0x0000
-
- .align 2
-gUnknown_08617E34:: @ 8617E34
- spr_template 0x0fa0, 0xffff, gUnknown_08617E2C, gSpriteAnimTable_8617E28, NULL, gDummySpriteAffineAnimTable, sub_81BEAD8
-
- .align 2
-gSpriteAnim_8617E4C:: @ 8617E4C
- .2byte 0x0000, 0x000c, 0xfffe, 0x0000
-
- .align 2
-gSpriteAnim_8617E54:: @ 8617E54
- .4byte gSpriteAnim_8617E4C
-
- .align 2
-gOamData_8617E58:: @ 8617E58
- .2byte 0x0000, 0x4000, 0x0000, 0x0000
-
- .align 2
-gUnknown_08617E60:: @ 8617E60
- spr_template 0x0fa0, 0xffff, gOamData_8617E58, gSpriteAnim_8617E54, NULL, gDummySpriteAffineAnimTable, sub_81BEAD8
-
diff --git a/data/graphics/berries/berry_pic_table.inc b/data/graphics/berries/berry_pic_table.inc
deleted file mode 100644
index 12d4267a0..000000000
--- a/data/graphics/berries/berry_pic_table.inc
+++ /dev/null
@@ -1,45 +0,0 @@
- .align 2
-gBerryPicTable:: @ 857FC94
- .4byte gBerryPic_Cheri, gBerryPalette_Cheri
- .4byte gBerryPic_Chesto, gBerryPalette_Chesto
- .4byte gBerryPic_Pecha, gBerryPalette_Pecha
- .4byte gBerryPic_Rawst, gBerryPalette_Rawst
- .4byte gBerryPic_Aspear, gBerryPalette_Aspear
- .4byte gBerryPic_Leppa, gBerryPalette_Leppa
- .4byte gBerryPic_Oran, gBerryPalette_Oran
- .4byte gBerryPic_Persim, gBerryPalette_Persim
- .4byte gBerryPic_Lum, gBerryPalette_Lum
- .4byte gBerryPic_Sitrus, gBerryPalette_Sitrus
- .4byte gBerryPic_Figy, gBerryPalette_Figy
- .4byte gBerryPic_Wiki, gBerryPalette_Wiki
- .4byte gBerryPic_Mago, gBerryPalette_Mago
- .4byte gBerryPic_Aguav, gBerryPalette_Aguav
- .4byte gBerryPic_Iapapa, gBerryPalette_Iapapa
- .4byte gBerryPic_Razz, gBerryPalette_Razz
- .4byte gBerryPic_Bluk, gBerryPalette_Bluk
- .4byte gBerryPic_Nanab, gBerryPalette_Nanab
- .4byte gBerryPic_Wepear, gBerryPalette_Wepear
- .4byte gBerryPic_Pinap, gBerryPalette_Pinap
- .4byte gBerryPic_Pomeg, gBerryPalette_Pomeg
- .4byte gBerryPic_Kelpsy, gBerryPalette_Kelpsy
- .4byte gBerryPic_Qualot, gBerryPalette_Qualot
- .4byte gBerryPic_Hondew, gBerryPalette_Hondew
- .4byte gBerryPic_Grepa, gBerryPalette_Grepa
- .4byte gBerryPic_Tamato, gBerryPalette_Tamato
- .4byte gBerryPic_Cornn, gBerryPalette_Cornn
- .4byte gBerryPic_Magost, gBerryPalette_Magost
- .4byte gBerryPic_Rabuta, gBerryPalette_Rabuta
- .4byte gBerryPic_Nomel, gBerryPalette_Nomel
- .4byte gBerryPic_Spelon, gBerryPalette_Spelon
- .4byte gBerryPic_Pamtre, gBerryPalette_Pamtre
- .4byte gBerryPic_Watmel, gBerryPalette_Watmel
- .4byte gBerryPic_Durin, gBerryPalette_Durin
- .4byte gBerryPic_Belue, gBerryPalette_Belue
- .4byte gBerryPic_Liechi, gBerryPalette_Liechi
- .4byte gBerryPic_Ganlon, gBerryPalette_Ganlon
- .4byte gBerryPic_Salac, gBerryPalette_Salac
- .4byte gBerryPic_Petaya, gBerryPalette_Petaya
- .4byte gBerryPic_Apicot, gBerryPalette_Apicot
- .4byte gBerryPic_Lansat, gBerryPalette_Lansat
- .4byte gBerryPic_Starf, gBerryPalette_Starf
- .4byte gBerryPic_Enigma, gBerryPalette_Enigma
diff --git a/data/graphics/items/item_icon_table.inc b/data/graphics/items/item_icon_table.inc
deleted file mode 100644
index 033292e63..000000000
--- a/data/graphics/items/item_icon_table.inc
+++ /dev/null
@@ -1,1513 +0,0 @@
- .align 2
-gItemIconTable:: @ 8614410
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ Master Ball
- .4byte gItemIcon_MasterBall
- .4byte gItemIconPalette_MasterBall
-
-@ Ultra Ball
- .4byte gItemIcon_UltraBall
- .4byte gItemIconPalette_UltraBall
-
-@ Great Ball
- .4byte gItemIcon_GreatBall
- .4byte gItemIconPalette_GreatBall
-
-@ Poké Ball
- .4byte gItemIcon_PokeBall
- .4byte gItemIconPalette_PokeBall
-
-@ Safari Ball
- .4byte gItemIcon_SafariBall
- .4byte gItemIconPalette_SafariBall
-
-@ Net Ball
- .4byte gItemIcon_NetBall
- .4byte gItemIconPalette_NetBall
-
-@ Dive Ball
- .4byte gItemIcon_DiveBall
- .4byte gItemIconPalette_DiveBall
-
-@ Nest Ball
- .4byte gItemIcon_NestBall
- .4byte gItemIconPalette_NestBall
-
-@ Repeat Ball
- .4byte gItemIcon_RepeatBall
- .4byte gItemIconPalette_RepeatBall
-
-@ Timer Ball
- .4byte gItemIcon_TimerBall
- .4byte gItemIconPalette_RepeatBall
-
-@ Luxury Ball
- .4byte gItemIcon_LuxuryBall
- .4byte gItemIconPalette_LuxuryBall
-
-@ Premier Ball
- .4byte gItemIcon_PremierBall
- .4byte gItemIconPalette_LuxuryBall
-
-@ Potion
- .4byte gItemIcon_Potion
- .4byte gItemIconPalette_Potion
-
-@ Antidote
- .4byte gItemIcon_Antidote
- .4byte gItemIconPalette_Antidote
-
-@ Burn Heal
- .4byte gItemIcon_StatusHeal
- .4byte gItemIconPalette_BurnHeal
-
-@ Ice Heal
- .4byte gItemIcon_StatusHeal
- .4byte gItemIconPalette_IceHeal
-
-@ Awakening
- .4byte gItemIcon_StatusHeal
- .4byte gItemIconPalette_Awakening
-
-@ Paralyze Heal
- .4byte gItemIcon_StatusHeal
- .4byte gItemIconPalette_ParalyzeHeal
-
-@ Full Restore
- .4byte gItemIcon_LargePotion
- .4byte gItemIconPalette_FullRestore
-
-@ Max Potion
- .4byte gItemIcon_LargePotion
- .4byte gItemIconPalette_MaxPotion
-
-@ Hyper Potion
- .4byte gItemIcon_Potion
- .4byte gItemIconPalette_HyperPotion
-
-@ Super Potion
- .4byte gItemIcon_Potion
- .4byte gItemIconPalette_SuperPotion
-
-@ Full Heal
- .4byte gItemIcon_FullHeal
- .4byte gItemIconPalette_FullHeal
-
-@ Revive
- .4byte gItemIcon_Revive
- .4byte gItemIconPalette_Revive
-
-@ Max Revive
- .4byte gItemIcon_MaxRevive
- .4byte gItemIconPalette_Revive
-
-@ Fresh Water
- .4byte gItemIcon_FreshWater
- .4byte gItemIconPalette_FreshWater
-
-@ Soda Pop
- .4byte gItemIcon_SodaPop
- .4byte gItemIconPalette_SodaPop
-
-@ Lemonade
- .4byte gItemIcon_Lemonade
- .4byte gItemIconPalette_Lemonade
-
-@ Moomoo Milk
- .4byte gItemIcon_MoomooMilk
- .4byte gItemIconPalette_MoomooMilk
-
-@ Energy Powder
- .4byte gItemIcon_Powder
- .4byte gItemIconPalette_EnergyPowder
-
-@ Energy Root
- .4byte gItemIcon_EnergyRoot
- .4byte gItemIconPalette_EnergyRoot
-
-@ Heal Powder
- .4byte gItemIcon_Powder
- .4byte gItemIconPalette_HealPowder
-
-@ Revival Herb
- .4byte gItemIcon_RevivalHerb
- .4byte gItemIconPalette_RevivalHerb
-
-@ Ether
- .4byte gItemIcon_Ether
- .4byte gItemIconPalette_Ether
-
-@ Max Ether
- .4byte gItemIcon_Ether
- .4byte gItemIconPalette_MaxEther
-
-@ Elixir
- .4byte gItemIcon_Ether
- .4byte gItemIconPalette_Elixir
-
-@ Max Elixir
- .4byte gItemIcon_Ether
- .4byte gItemIconPalette_MaxElixir
-
-@ Lava Cookie
- .4byte gItemIcon_LavaCookie
- .4byte gItemIconPalette_LavaCookieAndLetter
-
-@ Blue Flute
- .4byte gItemIcon_Flute
- .4byte gItemIconPalette_BlueFlute
-
-@ Yellow Flute
- .4byte gItemIcon_Flute
- .4byte gItemIconPalette_YellowFlute
-
-@ Red Flute
- .4byte gItemIcon_Flute
- .4byte gItemIconPalette_RedFlute
-
-@ Black Flute
- .4byte gItemIcon_Flute
- .4byte gItemIconPalette_BlackFlute
-
-@ White Flute
- .4byte gItemIcon_Flute
- .4byte gItemIconPalette_WhiteFlute
-
-@ Berry Juice
- .4byte gItemIcon_BerryJuice
- .4byte gItemIconPalette_BerryJuice
-
-@ Sacred Ash
- .4byte gItemIcon_SacredAsh
- .4byte gItemIconPalette_SacredAsh
-
-@ Shoal Salt
- .4byte gItemIcon_Powder
- .4byte gItemIconPalette_ShoalSalt
-
-@ Shoal Shell
- .4byte gItemIcon_ShoalShell
- .4byte gItemIconPalette_Shell
-
-@ Red Shard
- .4byte gItemIcon_Shard
- .4byte gItemIconPalette_RedShard
-
-@ Blue Shard
- .4byte gItemIcon_Shard
- .4byte gItemIconPalette_BlueShard
-
-@ Yellow Shard
- .4byte gItemIcon_Shard
- .4byte gItemIconPalette_YellowShard
-
-@ Green Shard
- .4byte gItemIcon_Shard
- .4byte gItemIconPalette_GreenShard
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ HP Up
- .4byte gItemIcon_HPUp
- .4byte gItemIconPalette_HPUp
-
-@ Protein
- .4byte gItemIcon_Vitamin
- .4byte gItemIconPalette_Protein
-
-@ Iron
- .4byte gItemIcon_Vitamin
- .4byte gItemIconPalette_Iron
-
-@ Carbos
- .4byte gItemIcon_Vitamin
- .4byte gItemIconPalette_Carbos
-
-@ Calcium
- .4byte gItemIcon_Vitamin
- .4byte gItemIconPalette_Calcium
-
-@ Rare Candy
- .4byte gItemIcon_RareCandy
- .4byte gItemIconPalette_RareCandy
-
-@ PP Up
- .4byte gItemIcon_PPUp
- .4byte gItemIconPalette_PPUp
-
-@ Zinc
- .4byte gItemIcon_Vitamin
- .4byte gItemIconPalette_Zinc
-
-@ Pp Max
- .4byte gItemIcon_PPMax
- .4byte gItemIconPalette_PPMax
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ Guard Spec.
- .4byte gItemIcon_BattleStatItem
- .4byte gItemIconPalette_GuardSpec
-
-@ Dire Hit
- .4byte gItemIcon_BattleStatItem
- .4byte gItemIconPalette_DireHit
-
-@ X Attack
- .4byte gItemIcon_BattleStatItem
- .4byte gItemIconPalette_XAttack
-
-@ X Defend
- .4byte gItemIcon_BattleStatItem
- .4byte gItemIconPalette_XDefend
-
-@ X Speed
- .4byte gItemIcon_BattleStatItem
- .4byte gItemIconPalette_XSpeed
-
-@ X Accuracy
- .4byte gItemIcon_BattleStatItem
- .4byte gItemIconPalette_XAccuracy
-
-@ X Special
- .4byte gItemIcon_BattleStatItem
- .4byte gItemIconPalette_XSpecial
-
-@ Poké Doll
- .4byte gItemIcon_PokeDoll
- .4byte gItemIconPalette_PokeDoll
-
-@ Fluffy Tail
- .4byte gItemIcon_FluffyTail
- .4byte gItemIconPalette_FluffyTail
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ Super Repel
- .4byte gItemIcon_Repel
- .4byte gItemIconPalette_SuperRepel
-
-@ Max Repel
- .4byte gItemIcon_Repel
- .4byte gItemIconPalette_MaxRepel
-
-@ Escape Rope
- .4byte gItemIcon_EscapeRope
- .4byte gItemIconPalette_EscapeRope
-
-@ Repel
- .4byte gItemIcon_Repel
- .4byte gItemIconPalette_Repel
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ Sun Stone
- .4byte gItemIcon_SunStone
- .4byte gItemIconPalette_SunStone
-
-@ Moon Stone
- .4byte gItemIcon_MoonStone
- .4byte gItemIconPalette_MoonStone
-
-@ Fire Stone
- .4byte gItemIcon_FireStone
- .4byte gItemIconPalette_FireStone
-
-@ Thunder Stone
- .4byte gItemIcon_ThunderStone
- .4byte gItemIconPalette_ThunderStone
-
-@ Water Stone
- .4byte gItemIcon_WaterStone
- .4byte gItemIconPalette_WaterStone
-
-@ Leaf Stone
- .4byte gItemIcon_LeafStone
- .4byte gItemIconPalette_LeafStone
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ Tiny Mushroom
- .4byte gItemIcon_TinyMushroom
- .4byte gItemIconPalette_Mushroom
-
-@ Big Mushroom
- .4byte gItemIcon_BigMushroom
- .4byte gItemIconPalette_Mushroom
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ Pearl
- .4byte gItemIcon_Pearl
- .4byte gItemIconPalette_Pearl
-
-@ Big Pearl
- .4byte gItemIcon_BigPearl
- .4byte gItemIconPalette_Pearl
-
-@ Stardust
- .4byte gItemIcon_Stardust
- .4byte gItemIconPalette_Star
-
-@ Star Piece
- .4byte gItemIcon_StarPiece
- .4byte gItemIconPalette_Star
-
-@ Nugget
- .4byte gItemIcon_Nugget
- .4byte gItemIconPalette_Nugget
-
-@ Heart Scale
- .4byte gItemIcon_HeartScale
- .4byte gItemIconPalette_HeartScale
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ Orange Mail
- .4byte gItemIcon_OrangeMail
- .4byte gItemIconPalette_OrangeMail
-
-@ Harbor Mail
- .4byte gItemIcon_HarborMail
- .4byte gItemIconPalette_HarborMail
-
-@ Glitter Mail
- .4byte gItemIcon_GlitterMail
- .4byte gItemIconPalette_GlitterMail
-
-@ Mech Mail
- .4byte gItemIcon_MechMail
- .4byte gItemIconPalette_MechMail
-
-@ Wood Mail
- .4byte gItemIcon_WoodMail
- .4byte gItemIconPalette_WoodMail
-
-@ Wave Mail
- .4byte gItemIcon_WaveMail
- .4byte gItemIconPalette_WaveMail
-
-@ Bead Mail
- .4byte gItemIcon_BeadMail
- .4byte gItemIconPalette_BeadMail
-
-@ Shadow Mail
- .4byte gItemIcon_ShadowMail
- .4byte gItemIconPalette_ShadowMail
-
-@ Tropic Mail
- .4byte gItemIcon_TropicMail
- .4byte gItemIconPalette_TropicMail
-
-@ Dream Mail
- .4byte gItemIcon_DreamMail
- .4byte gItemIconPalette_DreamMail
-
-@ Fab Mail
- .4byte gItemIcon_FabMail
- .4byte gItemIconPalette_FabMail
-
-@ Retro Mail
- .4byte gItemIcon_RetroMail
- .4byte gItemIconPalette_RetroMail
-
-@ Cheri Berry
- .4byte gItemIcon_CheriBerry
- .4byte gItemIconPalette_CheriBerry
-
-@ Chesto Berry
- .4byte gItemIcon_ChestoBerry
- .4byte gItemIconPalette_ChestoBerry
-
-@ Pecha Berry
- .4byte gItemIcon_PechaBerry
- .4byte gItemIconPalette_PechaBerry
-
-@ Rawst Berry
- .4byte gItemIcon_RawstBerry
- .4byte gItemIconPalette_RawstBerry
-
-@ Aspear Berry
- .4byte gItemIcon_AspearBerry
- .4byte gItemIconPalette_AspearBerry
-
-@ Leppa Berry
- .4byte gItemIcon_LeppaBerry
- .4byte gItemIconPalette_LeppaBerry
-
-@ Oran Berry
- .4byte gItemIcon_OranBerry
- .4byte gItemIconPalette_OranBerry
-
-@ Persim Berry
- .4byte gItemIcon_PersimBerry
- .4byte gItemIconPalette_PersimBerry
-
-@ Lum Berry
- .4byte gItemIcon_LumBerry
- .4byte gItemIconPalette_LumBerry
-
-@ Sitrus Berry
- .4byte gItemIcon_SitrusBerry
- .4byte gItemIconPalette_SitrusBerry
-
-@ Figy Berry
- .4byte gItemIcon_FigyBerry
- .4byte gItemIconPalette_FigyBerry
-
-@ Wiki Berry
- .4byte gItemIcon_WikiBerry
- .4byte gItemIconPalette_WikiBerry
-
-@ Mago Berry
- .4byte gItemIcon_MagoBerry
- .4byte gItemIconPalette_MagoBerry
-
-@ Aguav Berry
- .4byte gItemIcon_AguavBerry
- .4byte gItemIconPalette_AguavBerry
-
-@ Iapapa Berry
- .4byte gItemIcon_IapapaBerry
- .4byte gItemIconPalette_IapapaBerry
-
-@ Razz Berry
- .4byte gItemIcon_RazzBerry
- .4byte gItemIconPalette_RazzBerry
-
-@ Bluk Berry
- .4byte gItemIcon_BlukBerry
- .4byte gItemIconPalette_BlukBerry
-
-@ Nanab Berry
- .4byte gItemIcon_NanabBerry
- .4byte gItemIconPalette_NanabBerry
-
-@ Wepear Berry
- .4byte gItemIcon_WepearBerry
- .4byte gItemIconPalette_WepearBerry
-
-@ Pinap Berry
- .4byte gItemIcon_PinapBerry
- .4byte gItemIconPalette_PinapBerry
-
-@ Pomeg Berry
- .4byte gItemIcon_PomegBerry
- .4byte gItemIconPalette_PomegBerry
-
-@ Kelpsy Berry
- .4byte gItemIcon_KelpsyBerry
- .4byte gItemIconPalette_KelpsyBerry
-
-@ Qualot Berry
- .4byte gItemIcon_QualotBerry
- .4byte gItemIconPalette_QualotBerry
-
-@ Hondew Berry
- .4byte gItemIcon_HondewBerry
- .4byte gItemIconPalette_HondewBerry
-
-@ Grepa Berry
- .4byte gItemIcon_GrepaBerry
- .4byte gItemIconPalette_GrepaBerry
-
-@ Tamato Berry
- .4byte gItemIcon_TamatoBerry
- .4byte gItemIconPalette_TamatoBerry
-
-@ Cornn Berry
- .4byte gItemIcon_CornnBerry
- .4byte gItemIconPalette_CornnBerry
-
-@ Magost Berry
- .4byte gItemIcon_MagostBerry
- .4byte gItemIconPalette_MagostBerry
-
-@ Rabuta Berry
- .4byte gItemIcon_RabutaBerry
- .4byte gItemIconPalette_RabutaBerry
-
-@ Nomel Berry
- .4byte gItemIcon_NomelBerry
- .4byte gItemIconPalette_NomelBerry
-
-@ Spelon Berry
- .4byte gItemIcon_SpelonBerry
- .4byte gItemIconPalette_SpelonBerry
-
-@ Pamtre Berry
- .4byte gItemIcon_PamtreBerry
- .4byte gItemIconPalette_PamtreBerry
-
-@ Watmel Berry
- .4byte gItemIcon_WatmelBerry
- .4byte gItemIconPalette_WatmelBerry
-
-@ Durin Berry
- .4byte gItemIcon_DurinBerry
- .4byte gItemIconPalette_DurinBerry
-
-@ Belue Berry
- .4byte gItemIcon_BelueBerry
- .4byte gItemIconPalette_BelueBerry
-
-@ Liechi Berry
- .4byte gItemIcon_LiechiBerry
- .4byte gItemIconPalette_LiechiBerry
-
-@ Ganlon Berry
- .4byte gItemIcon_GanlonBerry
- .4byte gItemIconPalette_GanlonBerry
-
-@ Salac Berry
- .4byte gItemIcon_SalacBerry
- .4byte gItemIconPalette_SalacBerry
-
-@ Petaya Berry
- .4byte gItemIcon_PetayaBerry
- .4byte gItemIconPalette_PetayaBerry
-
-@ Apicot Berry
- .4byte gItemIcon_ApicotBerry
- .4byte gItemIconPalette_ApicotBerry
-
-@ Lansat Berry
- .4byte gItemIcon_LansatBerry
- .4byte gItemIconPalette_LansatBerry
-
-@ Starf Berry
- .4byte gItemIcon_StarfBerry
- .4byte gItemIconPalette_StarfBerry
-
-@ Enigma Berry
- .4byte gItemIcon_EnigmaBerry
- .4byte gItemIconPalette_EnigmaBerry
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ Bright Powder
- .4byte gItemIcon_BrightPowder
- .4byte gItemIconPalette_BrightPowder
-
-@ White Herb
- .4byte gItemIcon_InBattleHerb
- .4byte gItemIconPalette_WhiteHerb
-
-@ Macho Brace
- .4byte gItemIcon_MachoBrace
- .4byte gItemIconPalette_MachoBrace
-
-@ Exp. Share
- .4byte gItemIcon_ExpShare
- .4byte gItemIconPalette_ExpShare
-
-@ Quick Claw
- .4byte gItemIcon_QuickClaw
- .4byte gItemIconPalette_QuickClaw
-
-@ Soothe Bell
- .4byte gItemIcon_SootheBell
- .4byte gItemIconPalette_SootheBell
-
-@ Mental Herb
- .4byte gItemIcon_InBattleHerb
- .4byte gItemIconPalette_MentalHerb
-
-@ Choice Band
- .4byte gItemIcon_ChoiceBand
- .4byte gItemIconPalette_ChoiceBand
-
-@ King's Rock
- .4byte gItemIcon_KingsRock
- .4byte gItemIconPalette_KingsRock
-
-@ Silver Powder
- .4byte gItemIcon_SilverPowder
- .4byte gItemIconPalette_SilverPowder
-
-@ Amulet Coin
- .4byte gItemIcon_AmuletCoin
- .4byte gItemIconPalette_AmuletCoin
-
-@ Cleanse Tag
- .4byte gItemIcon_CleanseTag
- .4byte gItemIconPalette_CleanseTag
-
-@ Soul Dew
- .4byte gItemIcon_SoulDew
- .4byte gItemIconPalette_SoulDew
-
-@ Deep Sea Tooth
- .4byte gItemIcon_DeepSeaTooth
- .4byte gItemIconPalette_DeepSeaTooth
-
-@ Deep Sea Scale
- .4byte gItemIcon_DeepSeaScale
- .4byte gItemIconPalette_DeepSeaScale
-
-@ Smoke Ball
- .4byte gItemIcon_SmokeBall
- .4byte gItemIconPalette_SmokeBall
-
-@ Everstone
- .4byte gItemIcon_Everstone
- .4byte gItemIconPalette_Everstone
-
-@ Focus Band
- .4byte gItemIcon_FocusBand
- .4byte gItemIconPalette_FocusBand
-
-@ Lucky Egg
- .4byte gItemIcon_LuckyEgg
- .4byte gItemIconPalette_LuckyEgg
-
-@ Scope Lens
- .4byte gItemIcon_ScopeLens
- .4byte gItemIconPalette_ScopeLens
-
-@ Metal Coat
- .4byte gItemIcon_MetalCoat
- .4byte gItemIconPalette_MetalCoat
-
-@ Leftovers
- .4byte gItemIcon_Leftovers
- .4byte gItemIconPalette_Leftovers
-
-@ Dragon Scale
- .4byte gItemIcon_DragonScale
- .4byte gItemIconPalette_DragonScale
-
-@ Light Ball
- .4byte gItemIcon_LightBall
- .4byte gItemIconPalette_LightBall
-
-@ Soft Sand
- .4byte gItemIcon_SoftSand
- .4byte gItemIconPalette_SoftSand
-
-@ Hard Stone
- .4byte gItemIcon_HardStone
- .4byte gItemIconPalette_HardStone
-
-@ Miracle Seed
- .4byte gItemIcon_MiracleSeed
- .4byte gItemIconPalette_MiracleSeed
-
-@ Black Glasses
- .4byte gItemIcon_BlackGlasses
- .4byte gItemIconPalette_BlackTypeEnhancingItem
-
-@ Black Belt
- .4byte gItemIcon_BlackBelt
- .4byte gItemIconPalette_BlackTypeEnhancingItem
-
-@ Magnet
- .4byte gItemIcon_Magnet
- .4byte gItemIconPalette_Magnet
-
-@ Mystic Water
- .4byte gItemIcon_MysticWater
- .4byte gItemIconPalette_MysticWater
-
-@ Sharp Beak
- .4byte gItemIcon_SharpBeak
- .4byte gItemIconPalette_SharpBeak
-
-@ Poison Barb
- .4byte gItemIcon_PoisonBarb
- .4byte gItemIconPalette_PoisonBarb
-
-@ Never-Melt Ice
- .4byte gItemIcon_NeverMeltIce
- .4byte gItemIconPalette_NeverMeltIce
-
-@ Spell Tag
- .4byte gItemIcon_SpellTag
- .4byte gItemIconPalette_SpellTag
-
-@ Twisted Spoon
- .4byte gItemIcon_TwistedSpoon
- .4byte gItemIconPalette_TwistedSpoon
-
-@ Charcoal
- .4byte gItemIcon_Charcoal
- .4byte gItemIconPalette_Charcoal
-
-@ Dragon Fang
- .4byte gItemIcon_DragonFang
- .4byte gItemIconPalette_DragonFang
-
-@ Silk Scarf
- .4byte gItemIcon_SilkScarf
- .4byte gItemIconPalette_SilkScarf
-
-@ Up-Grade
- .4byte gItemIcon_UpGrade
- .4byte gItemIconPalette_UpGrade
-
-@ Shell Bell
- .4byte gItemIcon_ShellBell
- .4byte gItemIconPalette_Shell
-
-@ Sea Incense
- .4byte gItemIcon_SeaIncense
- .4byte gItemIconPalette_SeaIncense
-
-@ Lax Incense
- .4byte gItemIcon_LaxIncense
- .4byte gItemIconPalette_LaxIncense
-
-@ Lucky Punch
- .4byte gItemIcon_LuckyPunch
- .4byte gItemIconPalette_LuckyPunch
-
-@ Metal Powder
- .4byte gItemIcon_MetalPowder
- .4byte gItemIconPalette_MetalPowder
-
-@ Thick Club
- .4byte gItemIcon_ThickClub
- .4byte gItemIconPalette_ThickClub
-
-@ Stick
- .4byte gItemIcon_Stick
- .4byte gItemIconPalette_Stick
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ Red Scarf
- .4byte gItemIcon_Scarf
- .4byte gItemIconPalette_RedScarf
-
-@ Blue Scarf
- .4byte gItemIcon_Scarf
- .4byte gItemIconPalette_BlueScarf
-
-@ Pink Scarf
- .4byte gItemIcon_Scarf
- .4byte gItemIconPalette_PinkScarf
-
-@ Green Scarf
- .4byte gItemIcon_Scarf
- .4byte gItemIconPalette_GreenScarf
-
-@ Yellow Scarf
- .4byte gItemIcon_Scarf
- .4byte gItemIconPalette_YellowScarf
-
-@ Mach Bike
- .4byte gItemIcon_MachBike
- .4byte gItemIconPalette_MachBike
-
-@ Coin Case
- .4byte gItemIcon_CoinCase
- .4byte gItemIconPalette_CoinCase
-
-@ Itemfinder
- .4byte gItemIcon_Itemfinder
- .4byte gItemIconPalette_Itemfinder
-
-@ Old Rod
- .4byte gItemIcon_OldRod
- .4byte gItemIconPalette_OldRod
-
-@ Good Rod
- .4byte gItemIcon_GoodRod
- .4byte gItemIconPalette_GoodRod
-
-@ Super Rod
- .4byte gItemIcon_SuperRod
- .4byte gItemIconPalette_SuperRod
-
-@ S.S. Ticket
- .4byte gItemIcon_SSTicket
- .4byte gItemIconPalette_SSTicket
-
-@ Contest Pass
- .4byte gItemIcon_ContestPass
- .4byte gItemIconPalette_ContestPass
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ Wailmer Pail
- .4byte gItemIcon_WailmerPail
- .4byte gItemIconPalette_WailmerPail
-
-@ Devon Goods
- .4byte gItemIcon_DevonGoods
- .4byte gItemIconPalette_DevonGoods
-
-@ Soot Sack
- .4byte gItemIcon_SootSack
- .4byte gItemIconPalette_SootSack
-
-@ Basement Key
- .4byte gItemIcon_BasementKey
- .4byte gItemIconPalette_OldKey
-
-@ Acro Bike
- .4byte gItemIcon_AcroBike
- .4byte gItemIconPalette_AcroBike
-
-@ Pokéblock Case
- .4byte gItemIcon_PokeblockCase
- .4byte gItemIconPalette_PokeblockCase
-
-@ Letter
- .4byte gItemIcon_Letter
- .4byte gItemIconPalette_LavaCookieAndLetter
-
-@ Eon Ticket
- .4byte gItemIcon_EonTicket
- .4byte gItemIconPalette_EonTicket
-
-@ Red Orb
- .4byte gItemIcon_Orb
- .4byte gItemIconPalette_RedOrb
-
-@ Blue Orb
- .4byte gItemIcon_Orb
- .4byte gItemIconPalette_BlueOrb
-
-@ Scanner
- .4byte gItemIcon_Scanner
- .4byte gItemIconPalette_Scanner
-
-@ Go-Goggles
- .4byte gItemIcon_GoGoggles
- .4byte gItemIconPalette_GoGoggles
-
-@ Meteorite
- .4byte gItemIcon_Meteorite
- .4byte gItemIconPalette_Meteorite
-
-@ Rm. 1 Key
- .4byte gItemIcon_Room1Key
- .4byte gItemIconPalette_Key
-
-@ Rm. 2 Key
- .4byte gItemIcon_Room2Key
- .4byte gItemIconPalette_Key
-
-@ Rm. 4 Key
- .4byte gItemIcon_Room4Key
- .4byte gItemIconPalette_Key
-
-@ Rm. 6 Key
- .4byte gItemIcon_Room6Key
- .4byte gItemIconPalette_Key
-
-@ Storage Key
- .4byte gItemIcon_StorageKey
- .4byte gItemIconPalette_OldKey
-
-@ Root Fossil
- .4byte gItemIcon_RootFossil
- .4byte gItemIconPalette_HoennFossil
-
-@ Claw Fossil
- .4byte gItemIcon_ClawFossil
- .4byte gItemIconPalette_HoennFossil
-
-@ Devon Scope
- .4byte gItemIcon_DevonScope
- .4byte gItemIconPalette_DevonScope
-
-@ TM01
- .4byte gItemIcon_TM
- .4byte gItemIconPalette_FightingTMHM
-
-@ TM02
- .4byte gItemIcon_TM
- .4byte gItemIconPalette_DragonTMHM
-
-@ TM03
- .4byte gItemIcon_TM
- .4byte gItemIconPalette_WaterTMHM
-
-@ TM04
- .4byte gItemIcon_TM
- .4byte gItemIconPalette_PsychicTMHM
-
-@ TM05
- .4byte gItemIcon_TM
- .4byte gItemIconPalette_NormalTMHM
-
-@ TM06
- .4byte gItemIcon_TM
- .4byte gItemIconPalette_PoisonTMHM
-
-@ TM07
- .4byte gItemIcon_TM
- .4byte gItemIconPalette_IceTMHM
-
-@ TM08
- .4byte gItemIcon_TM
- .4byte gItemIconPalette_FightingTMHM
-
-@ TM09
- .4byte gItemIcon_TM
- .4byte gItemIconPalette_GrassTMHM
-
-@ TM10
- .4byte gItemIcon_TM
- .4byte gItemIconPalette_NormalTMHM
-
-@ TM11
- .4byte gItemIcon_TM
- .4byte gItemIconPalette_FireTMHM
-
-@ TM12
- .4byte gItemIcon_TM
- .4byte gItemIconPalette_DarkTMHM
-
-@ TM13
- .4byte gItemIcon_TM
- .4byte gItemIconPalette_IceTMHM
-
-@ TM14
- .4byte gItemIcon_TM
- .4byte gItemIconPalette_IceTMHM
-
-@ TM15
- .4byte gItemIcon_TM
- .4byte gItemIconPalette_NormalTMHM
-
-@ TM16
- .4byte gItemIcon_TM
- .4byte gItemIconPalette_PsychicTMHM
-
-@ TM17
- .4byte gItemIcon_TM
- .4byte gItemIconPalette_NormalTMHM
-
-@ TM18
- .4byte gItemIcon_TM
- .4byte gItemIconPalette_WaterTMHM
-
-@ TM19
- .4byte gItemIcon_TM
- .4byte gItemIconPalette_GrassTMHM
-
-@ TM20
- .4byte gItemIcon_TM
- .4byte gItemIconPalette_NormalTMHM
-
-@ TM21
- .4byte gItemIcon_TM
- .4byte gItemIconPalette_NormalTMHM
-
-@ TM22
- .4byte gItemIcon_TM
- .4byte gItemIconPalette_GrassTMHM
-
-@ TM23
- .4byte gItemIcon_TM
- .4byte gItemIconPalette_SteelTMHM
-
-@ TM24
- .4byte gItemIcon_TM
- .4byte gItemIconPalette_ElectricTMHM
-
-@ TM25
- .4byte gItemIcon_TM
- .4byte gItemIconPalette_ElectricTMHM
-
-@ TM26
- .4byte gItemIcon_TM
- .4byte gItemIconPalette_GroundTMHM
-
-@ TM27
- .4byte gItemIcon_TM
- .4byte gItemIconPalette_NormalTMHM
-
-@ TM28
- .4byte gItemIcon_TM
- .4byte gItemIconPalette_GroundTMHM
-
-@ TM29
- .4byte gItemIcon_TM
- .4byte gItemIconPalette_PsychicTMHM
-
-@ TM30
- .4byte gItemIcon_TM
- .4byte gItemIconPalette_GhostTMHM
-
-@ TM31
- .4byte gItemIcon_TM
- .4byte gItemIconPalette_FightingTMHM
-
-@ TM32
- .4byte gItemIcon_TM
- .4byte gItemIconPalette_NormalTMHM
-
-@ TM33
- .4byte gItemIcon_TM
- .4byte gItemIconPalette_PsychicTMHM
-
-@ TM34
- .4byte gItemIcon_TM
- .4byte gItemIconPalette_ElectricTMHM
-
-@ TM35
- .4byte gItemIcon_TM
- .4byte gItemIconPalette_FireTMHM
-
-@ TM36
- .4byte gItemIcon_TM
- .4byte gItemIconPalette_PoisonTMHM
-
-@ TM37
- .4byte gItemIcon_TM
- .4byte gItemIconPalette_RockTMHM
-
-@ TM38
- .4byte gItemIcon_TM
- .4byte gItemIconPalette_FireTMHM
-
-@ TM39
- .4byte gItemIcon_TM
- .4byte gItemIconPalette_RockTMHM
-
-@ TM40
- .4byte gItemIcon_TM
- .4byte gItemIconPalette_FlyingTMHM
-
-@ TM41
- .4byte gItemIcon_TM
- .4byte gItemIconPalette_DarkTMHM
-
-@ TM42
- .4byte gItemIcon_TM
- .4byte gItemIconPalette_NormalTMHM
-
-@ TM43
- .4byte gItemIcon_TM
- .4byte gItemIconPalette_NormalTMHM
-
-@ TM44
- .4byte gItemIcon_TM
- .4byte gItemIconPalette_PsychicTMHM
-
-@ TM45
- .4byte gItemIcon_TM
- .4byte gItemIconPalette_NormalTMHM
-
-@ TM46
- .4byte gItemIcon_TM
- .4byte gItemIconPalette_DarkTMHM
-
-@ TM47
- .4byte gItemIcon_TM
- .4byte gItemIconPalette_SteelTMHM
-
-@ TM48
- .4byte gItemIcon_TM
- .4byte gItemIconPalette_PsychicTMHM
-
-@ TM49
- .4byte gItemIcon_TM
- .4byte gItemIconPalette_DarkTMHM
-
-@ TM50
- .4byte gItemIcon_TM
- .4byte gItemIconPalette_FireTMHM
-
-@ HM01
- .4byte gItemIcon_HM
- .4byte gItemIconPalette_NormalTMHM
-
-@ HM02
- .4byte gItemIcon_HM
- .4byte gItemIconPalette_FlyingTMHM
-
-@ HM03
- .4byte gItemIcon_HM
- .4byte gItemIconPalette_WaterTMHM
-
-@ HM04
- .4byte gItemIcon_HM
- .4byte gItemIconPalette_NormalTMHM
-
-@ HM05
- .4byte gItemIcon_HM
- .4byte gItemIconPalette_NormalTMHM
-
-@ HM06
- .4byte gItemIcon_HM
- .4byte gItemIconPalette_FightingTMHM
-
-@ HM07
- .4byte gItemIcon_HM
- .4byte gItemIconPalette_WaterTMHM
-
-@ HM08
- .4byte gItemIcon_HM
- .4byte gItemIconPalette_WaterTMHM
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ ????????
- .4byte gItemIcon_QuestionMark
- .4byte gItemIconPalette_QuestionMark
-
-@ Oak's Parcel
- .4byte gItemIcon_OaksParcel
- .4byte gItemIconPalette_OaksParcel
-
-@ Poké Flute
- .4byte gItemIcon_PokeFlute
- .4byte gItemIconPalette_PokeFlute
-
-@ Secret Key
- .4byte gItemIcon_SecretKey
- .4byte gItemIconPalette_SecretKey
-
-@ Bike Voucher
- .4byte gItemIcon_BikeVoucher
- .4byte gItemIconPalette_BikeVoucher
-
-@ Gold Teeth
- .4byte gItemIcon_GoldTeeth
- .4byte gItemIconPalette_GoldTeeth
-
-@ Old Amber
- .4byte gItemIcon_OldAmber
- .4byte gItemIconPalette_OldAmber
-
-@ Card Key
- .4byte gItemIcon_CardKey
- .4byte gItemIconPalette_CardKey
-
-@ Lift Key
- .4byte gItemIcon_LiftKey
- .4byte gItemIconPalette_Key
-
-@ Helix Fossil
- .4byte gItemIcon_HelixFossil
- .4byte gItemIconPalette_KantoFossil
-
-@ Dome Fossil
- .4byte gItemIcon_DomeFossil
- .4byte gItemIconPalette_KantoFossil
-
-@ Silph Scope
- .4byte gItemIcon_SilphScope
- .4byte gItemIconPalette_SilphScope
-
-@ Bicycle
- .4byte gItemIcon_Bicycle
- .4byte gItemIconPalette_Bicycle
-
-@ Town Map
- .4byte gItemIcon_TownMap
- .4byte gItemIconPalette_TownMap
-
-@ Vs. Seeker
- .4byte gItemIcon_VSSeeker
- .4byte gItemIconPalette_VSSeeker
-
-@ Fame Checker
- .4byte gItemIcon_FameChecker
- .4byte gItemIconPalette_FameChecker
-
-@ TM Case
- .4byte gItemIcon_TMCase
- .4byte gItemIconPalette_TMCase
-
-@ Berry Pouch
- .4byte gItemIcon_BerryPouch
- .4byte gItemIconPalette_BerryPouch
-
-@ Teachy TV
- .4byte gItemIcon_TeachyTV
- .4byte gItemIconPalette_TeachyTV
-
-@ Tri-Pass
- .4byte gItemIcon_TriPass
- .4byte gItemIconPalette_TriPass
-
-@ Rainbow Pass
- .4byte gItemIcon_RainbowPass
- .4byte gItemIconPalette_RainbowPass
-
-@ Tea
- .4byte gItemIcon_Tea
- .4byte gItemIconPalette_Tea
-
-@ Mystic Ticket
- .4byte gItemIcon_MysticTicket
- .4byte gItemIconPalette_MysticTicket
-
-@ Aurora Ticket
- .4byte gItemIcon_AuroraTicket
- .4byte gItemIconPalette_AuroraTicket
-
-@ Powder Jar
- .4byte gItemIcon_PowderJar
- .4byte gItemIconPalette_PowderJar
-
-@ Ruby
- .4byte gItemIcon_Gem
- .4byte gItemIconPalette_Ruby
-
-@ Sapphire
- .4byte gItemIcon_Gem
- .4byte gItemIconPalette_Sapphire
-
-@ Magma Emblem
- .4byte gItemIcon_MagmaEmblem
- .4byte gItemIconPalette_MagmaEmblem
-
-@ Old Sea Map
- .4byte gItemIcon_OldSeaMap
- .4byte gItemIconPalette_OldSeaMap
-
-@ Return to field arrow
- .4byte gItemIcon_ReturnToFieldArrow
- .4byte gItemIconPalette_ReturnToFieldArrow
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/intro.s b/data/intro.s
deleted file mode 100644
index d43a57972..000000000
--- a/data/intro.s
+++ /dev/null
@@ -1,529 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 2
-gIntro1DropsPal:: @ 85DFF90
- .incbin "graphics/intro/intro1_drops.gbapal"
-
- .align 2
-gIntro1GFLogoPal:: @ 85DFFB0
- .incbin "graphics/intro/intro1_gflogo.gbapal"
-
- .align 2
-gIntroTiles:: @ 85DFFD0
- .incbin "graphics/intro/intro.4bpp.lz"
-
- .align 2
-gIntro1BGPals:: @ 85E05C4
- .incbin "graphics/intro/intro1_bgpal.gbapal"
-
- .align 2
-gIntro1BG0_Tilemap:: @ 85E07C4
- .incbin "graphics/intro/intro1_bg0_map.bin.lz"
-
- .align 2
-gIntro1BG1_Tilemap:: @ 85E0B78
- .incbin "graphics/intro/intro1_bg1_map.bin.lz"
-
- .align 2
-gIntro1BG2_Tilemap:: @ 85E0EAC
- .incbin "graphics/intro/intro1_bg2_map.bin.lz"
-
- .align 2
-gIntro1BG3_Tilemap:: @ 85E119C
- .incbin "graphics/intro/intro1_bg3_map.bin.lz"
-
- .align 2
-gIntro1BGLeavesGfx:: @ 85E13B4
- .incbin "graphics/intro/introgfx.4bpp.lz"
-
- .align 2
-gIntro3PokeballPal:: @ 85E3524
- .incbin "graphics/intro/intro3_pokeball.gbapal"
-
- .align 2
-gIntro3Pokeball_Tilemap:: @ 85E3724
- .incbin "graphics/intro/intro3_pokeball_map.bin.lz"
-
- .align 2
-gIntro3Pokeball_Gfx:: @ 85E3854
- .incbin "graphics/intro/intro3_pokeball.8bpp.lz"
-
- .align 2
- .incbin "graphics/intro/intro3_streaks.gbapal"
-
- .align 2
- .incbin "graphics/intro/intro3_streaks.4bpp.lz"
-
- .align 2
- .incbin "graphics/intro/intro3_streaks_map.bin.lz"
-
- .align 2
-gIntro3Misc1Pal:: @ 85E4570
- .incbin "graphics/intro/intro3_misc1.gbapal"
-
- .align 2
- .incbin "graphics/intro/intro3_misc2.gbapal"
-
- .align 2
-gIntro3MiscTiles:: @ 85E45B0
- .incbin "graphics/intro/intro3_misc.4bpp.lz"
-
- .align 2
-gIntro1FlygonPal:: @ 85E492C
- .incbin "graphics/intro/intro1_flygon.gbapal"
-
- .align 2
- .incbin "graphics/intro/intro1_eon.4bpp.lz"
-
- .align 2
- .byte 0x02, 0x03, 0x04, 0x05, 0x01, 0x01, 0x01, 0x06
- .byte 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x02, 0x0d
- .byte 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15
- .byte 0x16, 0x17, 0x18, 0x19, 0x02, 0x0d, 0x0e, 0x0f
- .byte 0x10, 0x11, 0x12, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e
- .byte 0x1f, 0x20, 0x21, 0x02, 0x0d, 0x0e, 0x0f, 0x10
- .byte 0x11, 0x12, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27
- .byte 0x28, 0x29, 0x2a, 0x00
-
- .align 2
-gUnknown_085E4A74:: @ 85E4A74
- obj_tiles gIntro1SparkleGfx, 0x0400, 0x05e1
- null_obj_tiles
-
- .align 2
-gUnknown_085E4A84:: @ 85E4A84
- obj_pal gIntro3LightningPal, 0x05e1
- null_obj_pal
-
- .align 2
-gUnknown_085E4A94:: @ 85E4A94
- .byte 0xa0, 0x00, 0x00, 0x40, 0x00, 0x04, 0x00, 0x00
-
- .align 2
-gUnknown_085E4A9C:: @ 85E4A9C
- .2byte 0x0000, 0x0002, 0x0004, 0x0002, 0x0008, 0x0002, 0x000c, 0x0002, 0x0010, 0x0002, 0xfffe, 0x0000
-
- .align 2
-gUnknown_085E4AB4:: @ 85E4AB4
- .4byte gUnknown_085E4A9C
-
- .align 2
-gUnknown_085E4AB8:: @ 85E4AB8
- spr_template 0x05e1, 0x05e1, gUnknown_085E4A94, gUnknown_085E4AB4, NULL, gDummySpriteAffineAnimTable, sub_816D338
-
- .align 2
-gUnknown_085E4AD0:: @ 85E4AD0
- .byte 0x7c, 0x28, 0x66, 0x1e, 0x4d, 0x1e, 0x36, 0x0f
- .byte 0x94, 0x09, 0x3f, 0x1c, 0x5d, 0x28, 0x94, 0x20
- .byte 0xad, 0x29, 0x5e, 0x14, 0xd0, 0x26, 0x00, 0x00
-
- .align 2
-gUnknown_085E4AE8:: @ 85E4AE8
- obj_tiles gIntro2VolbeatGfx, 0x0400, 0x05dc
- obj_tiles gIntro2TorchicGfx, 0x0c00, 0x05dd
- obj_tiles gIntro2ManectricGfx, 0x2000, 0x05de
- null_obj_tiles
-
- .align 2
-gUnknown_085E4B08:: @ 85E4B08
- obj_pal gIntro2VolbeatPal, 0x05dc
- obj_pal gIntro2TorchicPal, 0x05dd
- obj_pal gIntro2ManectricPal, 0x05de
- null_obj_pal
-
- .align 2
-gUnknown_085E4B28:: @ 85E4B28
- .byte 0xa0, 0x00, 0x00, 0x80, 0x00, 0x04, 0x00, 0x00
-
- .align 2
-gUnknown_085E4B30:: @ 85E4B30
- .2byte 0x0000, 0x0002, 0x0010, 0x0002, 0xfffe, 0x0000
-
- .align 2
-gUnknown_085E4B3C:: @ 85E4B3C
- .4byte gUnknown_085E4B30
-
- .align 2
-gUnknown_085E4B40:: @ 85E4B40
- spr_template 0x05dc, 0x05dc, gUnknown_085E4B28, gUnknown_085E4B3C, NULL, gDummySpriteAffineAnimTable, sub_816D81C
-
- .align 2
-gUnknown_085E4B58:: @ 85E4B58
- .byte 0xa0, 0x00, 0x00, 0x80, 0x00, 0x04, 0x00, 0x00
-
- .align 2
-gUnknown_085E4B60:: @ 85E4B60
- .2byte 0x0000, 0x0005, 0x0010, 0x0005, 0x0020, 0x0005, 0x0010, 0x0005, 0xfffe, 0x0000
-
- .align 2
-gUnknown_085E4B74:: @ 85E4B74
- .2byte 0x0000, 0x0003, 0x0010, 0x0003, 0x0020, 0x0003, 0x0010, 0x0003, 0xfffe, 0x0000
-
- .align 2
-gUnknown_085E4B88:: @ 85E4B88
- .2byte 0x0030, 0x0004, 0x0040, 0x0006, 0x0050, 0x0000, 0xffff, 0x0000
-
- .align 2
-gUnknown_085E4B98:: @ 85E4B98
- .4byte gUnknown_085E4B60
- .4byte gUnknown_085E4B74
- .4byte gUnknown_085E4B88
-
- .align 2
-gUnknown_085E4BA4:: @ 85E4BA4
- spr_template 0x05dd, 0x05dd, gUnknown_085E4B58, gUnknown_085E4B98, NULL, gDummySpriteAffineAnimTable, sub_816D9C0
-
- .align 2
-gUnknown_085E4BBC:: @ 85E4BBC
- .byte 0xa0, 0x00, 0x00, 0xc0, 0x00, 0x04, 0x00, 0x00
-
- .align 2
-gUnknown_085E4BC4:: @ 85E4BC4
- .2byte 0x0000, 0x0004, 0x0040, 0x0004, 0x0080, 0x0004, 0x00c0, 0x0004, 0xfffe, 0x0000
-
- .align 2
-gUnknown_085E4BD8:: @ 85E4BD8
- .4byte gUnknown_085E4BC4
-
- .align 2
-gUnknown_085E4BDC:: @ 85E4BDC
- spr_template 0x05de, 0x05de, gUnknown_085E4BBC, gUnknown_085E4BD8, NULL, gDummySpriteAffineAnimTable, sub_816DAE8
-
- .align 2
-gUnknown_085E4BF4:: @ 85E4BF4
- obj_tiles gIntro3LightningGfx, 0x0c00, 0x05df
- null_obj_tiles
-
- .align 2
-gUnknown_085E4C04:: @ 85E4C04
- obj_pal gIntro3LightningPal, 0x05df
- null_obj_pal
-
- .align 2
-gUnknown_085E4C14:: @ 85E4C14
- .byte 0xa0, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00
-
- .align 2
-gUnknown_085E4C1C:: @ 85E4C1C
- .2byte 0x0000, 0x0002, 0x0030, 0x0002, 0xffff, 0x0000
-
- .align 2
-gUnknown_085E4C28:: @ 85E4C28
- .2byte 0x0010, 0x0002, 0x0040, 0x0002, 0xffff, 0x0000
-
- .align 2
-gUnknown_085E4C34:: @ 85E4C34
- .2byte 0x0020, 0x0002, 0x0050, 0x0002, 0xffff, 0x0000
-
- .align 2
-gUnknown_085E4C40:: @ 85E4C40
- .4byte gUnknown_085E4C1C
- .4byte gUnknown_085E4C28
- .4byte gUnknown_085E4C34
-
- .align 2
-gUnknown_085E4C4C:: @ 85E4C4C
- spr_template 0x05df, 0x05df, gUnknown_085E4C14, gUnknown_085E4C40, NULL, gDummySpriteAffineAnimTable, sub_816EC6C
-
- .align 2
-gUnknown_085E4C64:: @ 85E4C64
- .2byte 0x0068, 0x0000, 0x00c0, 0x008e, 0x0003, 0x0280, 0x0053, 0x0001
- .2byte 0x0180, 0x009b, 0x0000, 0x0080, 0x0038, 0x0002, 0x0200, 0x00ae
- .2byte 0x0001, 0x0100
-
- .align 2
-gUnknown_085E4C88:: @ 85E4C88
- obj_tiles gIntro2BubblesGfx, 0x0600, 0x05e0
- null_obj_tiles
-
- .align 2
-gUnknown_085E4C98:: @ 85E4C98
- obj_pal gIntro2BubblesPal, 0x05e0
- null_obj_pal
-
- .align 2
-gUnknown_085E4CA8:: @ 85E4CA8
- .2byte 0x0042, 0x0040, 0x0001, 0x0060, 0x0060, 0x0008, 0x0080, 0x0040
- .2byte 0x0001, 0x0090, 0x0030, 0x0008, 0x00a0, 0x0048, 0x0001, 0x00b0
- .2byte 0x0060, 0x0008, 0x0060, 0x0060, 0x0004, 0x0070, 0x0068, 0x0008
- .2byte 0x0080, 0x0060, 0x0004, 0x0058, 0x0020, 0x0004, 0x0068, 0x0018
- .2byte 0x0008, 0x0078, 0x0020, 0x0004
-
- .align 2
-gUnknown_085E4CF0:: @ 85E4CF0
- .byte 0xa0, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00
-
- .align 2
-gUnknown_085E4CF8:: @ 85E4CF8
- .2byte 0x0000, 0x0004, 0x0008, 0x0004, 0x0010, 0x0004, 0x0018, 0x0004
- .2byte 0x0020, 0x0004, 0xffff, 0x0000
-
- .align 2
-gUnknown_085E4D10:: @ 85E4D10
- .4byte gUnknown_085E4CF8
-
- .align 2
-gUnknown_085E4D14:: @ 85E4D14
- spr_template 0x05e0, 0x05e0, gUnknown_085E4CF0, gUnknown_085E4D10, NULL, gDummySpriteAffineAnimTable, sub_816E7B4
-
- .align 2
-gUnknown_085E4D2C:: @ 85E4D2C
- .byte 0xa0, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00
-
- .align 2
-gUnknown_085E4D34:: @ 85E4D34
- .2byte 0x0010, 0x0008, 0xffff, 0x0000
-
- .align 2
-gUnknown_085E4D3C:: @ 85E4D3C
- .2byte 0x0018, 0x0008, 0xffff, 0x0000
-
- .align 2
-gUnknown_085E4D44:: @ 85E4D44
- .2byte 0x0000, 0x0008, 0xffff, 0x0000
-
- .align 2
-gUnknown_085E4D4C:: @ 85E4D4C
- .2byte 0x0030, 0x0008, 0xffff, 0x0000
-
- .align 2
-gUnknown_085E4D54:: @ 85E4D54
- .4byte gUnknown_085E4D34
- .4byte gUnknown_085E4D3C
- .4byte gUnknown_085E4D44
- .4byte gUnknown_085E4D4C
-
- .align 2
-gUnknown_085E4D64:: @ 85E4D64
- spr_template 0x07d0, 0x07d0, gUnknown_085E4D2C, gUnknown_085E4D54, NULL, gDummySpriteAffineAnimTable, sub_816F454
-
- .align 2
-gUnknown_085E4D7C:: @ 85E4D7C
- .byte 0x00, 0x00, 0x04, 0x00, 0x40, 0x00, 0x04, 0x00
-
- .align 2
-gUnknown_085E4D84:: @ 85E4D84
- .2byte 0x0080, 0x0004, 0x00c0, 0x0004, 0xfffe, 0x0000
-
- .align 2
-gUnknown_085E4D90:: @ 85E4D90
- .2byte 0x0000, 0x0008, 0x0040, 0x0008, 0x0080, 0x0008, 0x00c0, 0x0008, 0xfffe, 0x0000
-
- .align 2
-gUnknown_085E4DA4:: @ 85E4DA4
- .2byte 0x0100, 0x0004, 0x0140, 0x0004, 0x0180, 0x0004, 0xffff, 0x0000
-
- .align 2
-gUnknown_085E4DB4:: @ 85E4DB4
- .2byte 0x0180, 0x0010, 0x0140, 0x0010, 0x0100, 0x0010, 0xffff, 0x0000
-
- .align 2
-gUnknown_085E4DC4:: @ 85E4DC4
- .4byte gUnknown_085E4D7C
- .4byte gUnknown_085E4D90
- .4byte gUnknown_085E4DA4
- .4byte gUnknown_085E4DB4
-
- .align 2
-gUnknown_085E4DD4:: @ 85E4DD4
- .2byte 0x03a0, 0x4000, 0x0000, 0x0000
-
- .align 2
-gUnknown_085E4DDC:: @ 85E4DDC
- .2byte 0x00a0, 0x0000, 0x0000, 0x0000
-
- .align 2
-gUnknown_085E4DE4:: @ 85E4DE4
- .2byte 0x87a0, 0xc000, 0x0000, 0x0000
-
- .align 2
-gUnknown_085E4DEC:: @ 85E4DEC
- .2byte 0x0050, 0x0008, 0xffff, 0x0000
-
- .align 2
-gUnknown_085E4DF4:: @ 85E4DF4
- .2byte 0x0054, 0x0008, 0xffff, 0x0000
-
- .align 2
-gUnknown_085E4DFC:: @ 85E4DFC
- .2byte 0x0058, 0x0008, 0xffff, 0x0000
-
- .align 2
-gUnknown_085E4E04:: @ 85E4E04
- .2byte 0x005c, 0x0008, 0xffff, 0x0000
-
- .align 2
-gUnknown_085E4E0C:: @ 85E4E0C
- .2byte 0x0060, 0x0008, 0xffff, 0x0000
-
- .align 2
-gUnknown_085E4E14:: @ 85E4E14
- .2byte 0x0064, 0x0008, 0xffff, 0x0000
-
- .align 2
-gUnknown_085E4E1C:: @ 85E4E1C
- .2byte 0x0068, 0x0008, 0xffff, 0x0000
-
- .align 2
-gUnknown_085E4E24:: @ 85E4E24
- .2byte 0x0070, 0x0008, 0xffff, 0x0000
-
- .align 2
-gUnknown_085E4E2C:: @ 85E4E2C
- .2byte 0x0071, 0x0008, 0xffff, 0x0000
-
- .align 2
-gUnknown_085E4E34:: @ 85E4E34
- .2byte 0x0072, 0x0008, 0xffff, 0x0000
-
- .align 2
-gUnknown_085E4E3C:: @ 85E4E3C
- .2byte 0x0073, 0x0008, 0xffff, 0x0000
-
- .align 2
-gUnknown_085E4E44:: @ 85E4E44
- .2byte 0x0074, 0x0008, 0xffff, 0x0000
-
- .align 2
-gUnknown_085E4E4C:: @ 85E4E4C
- .2byte 0x0075, 0x0008, 0xffff, 0x0000
-
- .align 2
-gUnknown_085E4E54:: @ 85E4E54
- .2byte 0x0080, 0x0008, 0xffff, 0x0000
-
- .align 2
-gUnknown_085E4E5C:: @ 85E4E5C
- .4byte gUnknown_085E4DEC
- .4byte gUnknown_085E4DF4
- .4byte gUnknown_085E4DFC
- .4byte gUnknown_085E4E04
- .4byte gUnknown_085E4E0C
- .4byte gUnknown_085E4E14
- .4byte gUnknown_085E4E1C
-
- .align 2
-gUnknown_085E4E78:: @ 85E4E78
- .4byte gUnknown_085E4E24
- .4byte gUnknown_085E4E2C
- .4byte gUnknown_085E4E34
- .4byte gUnknown_085E4E3C
- .4byte gUnknown_085E4E44
- .4byte gUnknown_085E4E4C
-
- .align 2
-gUnknown_085E4E90:: @ 85E4E90
- .4byte gUnknown_085E4E54
-
- .align 2
-gUnknown_085E4E94:: @ 85E4E94
- .2byte 0x0000, 0xffb8, 0x0001, 0xffc8, 0x0002, 0xffd8, 0x0003, 0xffe8
- .2byte 0x0004, 0x0008, 0x0005, 0x0018, 0x0003, 0x0028, 0x0001, 0x0038
- .2byte 0x0006, 0x0048, 0x0000, 0xffe4, 0x0001, 0xffec, 0x0002, 0xfff4
- .2byte 0x0003, 0xfffc, 0x0002, 0x0004, 0x0004, 0x000c, 0x0005, 0x0014
- .2byte 0x0003, 0x001c
-
- .align 2
-gUnknown_085E4ED8:: @ 85E4ED8
- .2byte 0x0080, 0x0080, 0x0000, 0x0000, 0x7fff, 0x0000, 0x0000, 0x0000
-
- .align 2
-gUnknown_085E4EE8:: @ 85E4EE8
- .2byte 0x0080, 0x0080, 0x0000, 0x0000, 0x0010, 0x0010, 0x1000, 0x0000
- .2byte 0xfff0, 0xfff0, 0x0800, 0x0000, 0x7fff, 0x0000, 0x0000, 0x0000
-
- .align 2
-gUnknown_085E4F08:: @ 85E4F08
- .2byte 0x0100, 0x0100, 0x0000, 0x0000, 0x0008, 0x0008, 0x3000, 0x0000
- .2byte 0x7fff, 0x0000, 0x0000, 0x0000
-
- .align 2
-gUnknown_085E4F20:: @ 85E4F20
- .2byte 0x0100, 0x0100, 0x0000, 0x0000, 0x0002, 0x0002, 0x3000, 0x0000
- .2byte 0x7fff, 0x0000, 0x0000, 0x0000
-
- .align 2
-gUnknown_085E4F38:: @ 85E4F38
- .4byte gUnknown_085E4ED8
- .4byte gUnknown_085E4EE8
- .4byte gUnknown_085E4F08
- .4byte gUnknown_085E4F20
-
- .align 2
-gUnknown_085E4F48:: @ 85E4F48
- .2byte 0x0100, 0x00c0, 0x0080, 0x0040, 0x0000, 0x0040, 0x0080, 0x00c0
- .2byte 0x0100, 0x0000
-
- .align 2
-gUnknown_085E4F5C:: @ 85E4F5C
- spr_template 0x07d0, 0x07d1, gUnknown_085E4DD4, gUnknown_085E4E5C, NULL, gUnknown_085E4F38, sub_816FB38
- spr_template 0x07d0, 0x07d1, gUnknown_085E4DDC, gUnknown_085E4E78, NULL, gDummySpriteAffineAnimTable, sub_816FB38
-
- .align 2
-gUnknown_085E4F8C:: @ 85E4F8C
- spr_template 0x07d0, 0x07d1, gUnknown_085E4DE4, gUnknown_085E4E90, NULL, gUnknown_085E4F38, sub_816FD44
-
- .align 2
-gUnknown_085E4FA4:: @ 85E4FA4
- .byte 0x00, 0x17, 0x17, 0x31, 0x3e, 0x24, 0x24, 0x0a, 0x0a, 0x00, 0x00, 0x00
-
- .align 2
-gUnknown_085E4FB0:: @ 85E4FB0
- .byte 0xa0, 0x40, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00
-
- .align 2
-gUnknown_085E4FB8:: @ 85E4FB8
- .2byte 0x0000, 0x000a, 0xfffe, 0x0000
-
- .align 2
-gUnknown_085E4FC0:: @ 85E4FC0
- .4byte gUnknown_085E4FB8
-
- .align 2
-gUnknown_085E4FC4:: @ 85E4FC4
- spr_template 0x07d2, 0x07d2, gUnknown_085E4FB0, gUnknown_085E4FC0, NULL, gDummySpriteAffineAnimTable, sub_816FEDC
-
- .align 2
-gUnknown_085E4FDC:: @ 85E4FDC
- obj_tiles gIntroTiles, 0x1400, 0x07d0
- null_obj_tiles
-
-gUnknown_085E4FEC:: @ 85E4FEC
- obj_tiles gIntro1FlygonGfx, 0x0400, 0x07d2
- null_obj_tiles
-
- .align 2
-gUnknown_085E4FFC:: @ 85E4FFC
- obj_pal gIntro1DropsPal, 0x07d0
- obj_pal gIntro1GFLogoPal, 0x07d1
- obj_pal gIntro1FlygonPal, 0x07d2
- null_obj_pal
-
- .align 2
-gUnknown_085E501C:: @ 85E501C
- .byte 0xa0, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00
-
- .align 2
-gUnknown_085E5024:: @ 85E5024
- .2byte 0x0010, 0x0008, 0xffff, 0x0000
-
- .align 2
-gUnknown_085E502C:: @ 85E502C
- .4byte gUnknown_085E5024
-
- .align 2
-gUnknown_085E5030:: @ 85E5030
- spr_template 0x07d3, 0x07d3, gUnknown_085E501C, gUnknown_085E502C, NULL, gDummySpriteAffineAnimTable, sub_8170040
-
- .align 2
-gUnknown_085E5048:: @ 85E5048
- obj_tiles gIntro3MiscTiles, 0x0a00, 0x07d3
- null_obj_tiles
-
-gUnknown_085E5058:: @ 85E5058
- obj_pal gIntro3Misc1Pal, 0x07d3
- null_obj_pal
-
diff --git a/data/intro_credits_graphics.s b/data/intro_credits_graphics.s
deleted file mode 100644
index 636c1a8fb..000000000
--- a/data/intro_credits_graphics.s
+++ /dev/null
@@ -1,459 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 2
-gUnknown_085F06E0:: @ 85F06E0
- .incbin "graphics/intro/intro2_grass.gbapal"
-
- .align 2
-gUnknown_085F0700:: @ 85F0700
- .incbin "graphics/intro/intro2_grass_afternoon.gbapal"
-
- .align 2
-gUnknown_085F0720:: @ 85F0720
- .incbin "graphics/intro/intro2_grass_night.gbapal"
-
- .align 2
-gUnknown_085F0740:: @ 85F0740
- .incbin "graphics/intro/intro2_grass.4bpp.lz"
-
- .align 2
-gUnknown_085F0BC0:: @ 85F0BC0
- .incbin "graphics/intro/intro2_grass_map.bin.lz"
-
- .align 2
-gUnknown_085F0CFC:: @ 85F0CFC
- .incbin "graphics/intro/85F0CFC.gbapal"
-
- .align 2
-gUnknown_085F0D5C:: @ 85F0D5C
- .incbin "graphics/intro/85F0D5C.gbapal"
-
- .align 2
-gUnknown_085F0DBC:: @ 85F0DBC
- .incbin "graphics/intro/intro2_bgclouds.4bpp.lz"
-
- .align 2
-gUnknown_085F1398:: @ 85F1398
- .incbin "graphics/intro/intro2_bgclouds_map.bin.lz"
-
- .align 2
-gUnknown_085F1668:: @ 85F1668
- .incbin "graphics/intro/intro2_bgclouds.gbapal"
-
- .align 2
-gUnknown_085F1688:: @ 85F1688
- .incbin "graphics/intro/intro2_bgclouds_afternoon.gbapal"
-
- .align 2
-gUnknown_085F16A8:: @ 85F16A8
- .incbin "graphics/intro/intro2_bgclouds2.4bpp.lz"
-
- .align 2
-gUnknown_085F17E4:: @ 85F17E4
- .incbin "graphics/intro/intro2_bgtrees2.gbapal"
-
- .align 2
-gUnknown_085F1804:: @ 85F1804
- .incbin "graphics/intro/intro2_bgtrees2_afternoon.gbapal"
-
- .align 2
-gUnknown_085F1824:: @ 85F1824
- .incbin "graphics/intro/intro2_bgtrees.4bpp.lz"
-
- .align 2
-gUnknown_085F1EAC:: @ 85F1EAC
- .incbin "graphics/intro/intro2_bgtrees_map.bin.lz"
-
- .align 2
-gUnknown_085F21B0:: @ 85F21B0
- .incbin "graphics/intro/intro2_bgtrees.gbapal"
-
- .align 2
-gIntro2TreeGfx:: @ 85F21D0
- .incbin "graphics/intro/intro2_bgtreessmall.4bpp.lz"
-
- .align 2
-gUnknown_085F231C:: @ 85F231C
- .incbin "graphics/intro/85F231C.gbapal"
-
- .align 2
-gUnknown_085F235C:: @ 85F235C
- .incbin "graphics/intro/intro2_bgnight.4bpp.lz"
-
- .align 2
-gUnknown_085F2548:: @ 85F2548
- .incbin "graphics/intro/intro2_bgnight.gbapal"
-
- .align 2
-gUnknown_085F2568:: @ 85F2568
- .incbin "graphics/intro/intro2_bgnight_map.bin.lz"
-
- .align 2
-gIntro2NightGfx:: @ 85F2814
- .incbin "graphics/intro/intro2_night.4bpp.lz"
-
- .align 2
-gIntro2BrendanPal:: @ 85F2898
- .incbin "graphics/intro/intro2_brendan.gbapal"
-
- .align 2
-gIntro2BrendanGfx:: @ 85F28B8
- .incbin "graphics/intro/intro2_brendan.4bpp.lz"
-
- .align 2
-gIntro2MayPal:: @ 85F3470
- .incbin "graphics/intro/intro2_may.gbapal"
-
- .align 2
-gUnknown_085F3490:: @ 85F3490
- .space 0x1E0
-
- .align 2
-gIntro2MayGfx:: @ 85F3670
- .incbin "graphics/intro/intro2_may.4bpp.lz"
-
- .align 2
-gIntro2BicycleGfx:: @ 85F4318
- .incbin "graphics/intro/intro2_bicycle.4bpp.lz"
-
- .align 2
-gIntro2LatiosPal:: @ 85F4744
- .incbin "graphics/intro/intro2_latios.gbapal"
-
- .align 2
-gIntro2LatiosGfx:: @ 85F4764
- .incbin "graphics/intro/intro2_latios.4bpp.lz"
-
- .align 2
-gIntro2LatiasPal:: @ 85F4C08
- .incbin "graphics/intro/intro2_latias.gbapal"
-
- .align 2
-gIntro2LatiasGfx:: @ 85F4C28
- .incbin "graphics/intro/intro2_latias.4bpp.lz"
-
- .align 2
-gUnknown_085F504C:: @ 85F504C
- spr_template 0x07d0, 0xffff, gDummyOamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_817B62C
-
- .align 2
-gUnknown_085F5064:: @ 85F5064
- obj_tiles gUnknown_085F16A8, 0x0400, 0x07d0
- null_obj_tiles
-
- .align 2
-gUnknown_085F5074:: @ 85F5074
- obj_image_anim_frame 0, 30
- obj_image_anim_end
-
- .align 2
-gUnknown_085F507C:: @ 85F507C
- obj_image_anim_frame 16, 30
- obj_image_anim_end
-
- .align 2
-gUnknown_085F5084:: @ 85F5084
- obj_image_anim_frame 20, 30
- obj_image_anim_end
-
- .align 2
-gUnknown_085F508C:: @ 85F508C
- obj_image_anim_frame 22, 30
- obj_image_anim_end
-
- .align 2
-gUnknown_085F5094:: @ 85F5094
- .4byte gUnknown_085F5074
- .4byte gUnknown_085F507C
- .4byte gUnknown_085F5084
- .4byte gUnknown_085F508C
-
- .align 2
-gUnknown_085F50A4:: @ 85F50A4
- .byte -128, 72, 32, 100
- .2byte 0xC00
- .space 2
- .byte -128, -98, 32, 100
- .2byte 0xC00
- .space 2
- .byte 65, -64, 40, 101
- .2byte 0x800
- .space 2
- .byte 65, 56, 40, 101
- .2byte 0x800
- .space 2
- .byte 18, 100, 44, 102
- .2byte 0x400
- .space 2
- .byte 18, -104, 44, 102
- .2byte 0x400
- .space 2
- .byte 19, 8, 46, 103
- .2byte 0x100
- .space 2
- .byte 19, 56, 46, 103
- .2byte 0x100
- .space 2
- .byte 19, -16, 46, 103
- .2byte 0x100
- .space 2
-
- .align 2
-gUnknown_085F50EC:: @ 85F50EC
- obj_tiles gIntro2TreeGfx, 0x0400, 0x07d0
- null_obj_tiles
-
- .align 2
-gUnknown_085F50FC:: @ 85F50FC
- obj_image_anim_frame 0, 30
- obj_image_anim_end
-
- .align 2
-gUnknown_085F5104:: @ 85F5104
- obj_image_anim_frame 16, 30
- obj_image_anim_end
-
- .align 2
-gUnknown_085F510C:: @ 85F510C
- obj_image_anim_frame 24, 30
- obj_image_anim_end
-
- .align 2
-gUnknown_085F5114:: @ 85F5114
- .4byte gUnknown_085F50FC
- .4byte gUnknown_085F5104
- .4byte gUnknown_085F510C
-
- .align 2
-gUnknown_085F5120:: @ 85F5120
- .byte -128, 16, 88, 100
- .2byte 0x2000
- .space 2
- .byte -128, 80, 88, 100
- .2byte 0x2000
- .space 2
- .byte -128, -112, 88, 100
- .2byte 0x2000
- .space 2
- .byte -128, -48, 88, 100
- .2byte 0x2000
- .space 2
- .byte -95, 40, 88, 101
- .2byte 0x1000
- .space 2
- .byte -95, 104, 88, 101
- .2byte 0x1000
- .space 2
- .byte -95, -88, 88, 101
- .2byte 0x1000
- .space 2
- .byte -95, -24, 88, 101
- .2byte 0x1000
- .space 2
- .byte -94, 56, 88, 102
- .2byte 0x800
- .space 2
- .byte -94, 120, 88, 102
- .2byte 0x800
- .space 2
- .byte -94, -72, 88, 102
- .2byte 0x800
- .space 2
- .byte -94, -8, 88, 102
- .2byte 0x800
- .space 2
-
- .align 2
-gUnknown_085F5180:: @ 85F5180
- obj_tiles gIntro2NightGfx, 0x0400, 0x07d0
- null_obj_tiles
-
- .align 2
-gUnknown_085F5190:: @ 85F5190
- obj_image_anim_frame 0, 30
- obj_image_anim_end
-
- .align 2
-gUnknown_085F5198:: @ 85F5198
- .4byte gUnknown_085F5190
-
- .align 2
-gUnknown_085F519C:: @ 85F519C
- .byte -128, 24, 88, 100
- .2byte 0x1000
- .space 2
- .byte -128, 64, 88, 100
- .2byte 0x1000
- .space 2
- .byte -128, 104, 88, 100
- .2byte 0x1000
- .space 2
- .byte -128, -112, 88, 100
- .2byte 0x1000
- .space 2
- .byte -128, -72, 88, 100
- .2byte 0x1000
- .space 2
- .byte -128, -32, 88, 100
- .2byte 0x1000
- .space 2
-
- .align 2
-gOamData_85F51CC:: @ 85F51CC
- .2byte 0x00A0
- .2byte 0xC000
- .2byte 0x0400
-
- .align 2
-gUnknown_085F51D4:: @ 85F51D4
- obj_image_anim_frame 0, 8
- obj_image_anim_frame 64, 8
- obj_image_anim_frame 128, 8
- obj_image_anim_frame 192, 8
- obj_image_anim_jump 0
-
- .align 2
-gUnknown_085F51E8:: @ 85F51E8
- .4byte gUnknown_085F51D4
-
- .align 2
-gUnknown_085F51EC:: @ 85F51EC
- spr_template 0x03ea, 0x03ea, gOamData_85F51CC, gUnknown_085F51E8, NULL, gDummySpriteAffineAnimTable, nullsub_65
-
- .align 2
-gUnknown_085F5204:: @ 85F5204
- spr_template 0x03eb, 0x03eb, gOamData_85F51CC, gUnknown_085F51E8, NULL, gDummySpriteAffineAnimTable, nullsub_65
-
- .align 2
-gUnknown_085F521C:: @ 85F521C
- .2byte 0x40A0
- .2byte 0xC000
- .2byte 0x0400
-
- .align 2
-gUnknown_085F5224:: @ 85F5224
- obj_image_anim_frame 0, 8
- obj_image_anim_frame 32, 8
- obj_image_anim_frame 64, 8
- obj_image_anim_frame 96, 8
- obj_image_anim_jump 0
-
- .align 2
-gUnknown_085F5238:: @ 85F5238
- .4byte gUnknown_085F5224
-
- .align 2
-gUnknown_085F523C:: @ 85F523C
- spr_template 0x03e9, 0x03ea, gUnknown_085F521C, gUnknown_085F5238, NULL, gDummySpriteAffineAnimTable, sub_817B7C4
-
- .align 2
-gUnknown_085F5254:: @ 85F5254
- spr_template 0x03e9, 0x03eb, gUnknown_085F521C, gUnknown_085F5238, NULL, gDummySpriteAffineAnimTable, sub_817B7C4
-
- .align 2
-gUnknown_085F526C:: @ 85F526C
- .2byte 0x00A0
- .2byte 0xC000
- .2byte 0x0400
-
- .align 2
-gUnknown_085F5274:: @ 85F5274
- obj_image_anim_frame 0, 16
- obj_image_anim_end
-
- .align 2
-gUnknown_085F527C:: @ 85F527C
- obj_image_anim_frame 64, 16
- obj_image_anim_end
-
- .align 2
-gUnknown_085F5284:: @ 85F5284
- .4byte gUnknown_085F5274
- .4byte gUnknown_085F527C
-
- .align 2
-gUnknown_085F528C:: @ 85F528C
- spr_template 0x03ec, 0x03ec, gUnknown_085F526C, gUnknown_085F5284, NULL, gDummySpriteAffineAnimTable, nullsub_66
-
- .align 2
-gUnknown_085F52A4:: @ 85F52A4
- spr_template 0x03ed, 0x03ed, gUnknown_085F526C, gUnknown_085F5284, NULL, gDummySpriteAffineAnimTable, nullsub_66
-
- .align 2
-gUnknown_085F52BC:: @ 85F52BC
- obj_tiles gIntro2BrendanNoTurnGfx, 0x2000, 0x03ea
- null_obj_tiles
-
- .align 2
-gUnknown_085F52CC:: @ 85F52CC
- obj_tiles gIntro2MayNoTurnGfx, 0x2000, 0x03eb
- null_obj_tiles
-
- .align 2
-gUnknown_085F52DC:: @ 85F52DC
- obj_tiles gIntro2BicycleGfx, 0x1000, 0x03e9
- null_obj_tiles
-
- .align 2
-gUnknown_085F52EC:: @ 85F52EC
- obj_tiles gIntro2FlygonGfx, 0x1000, 0x03ec
- null_obj_tiles
-
- .align 2
-gUnknown_085F52FC:: @ 85F52FC
- obj_tiles gIntro2FlygonGfx, 0x1000, 0x03ed
- null_obj_tiles
-
- .align 2
-gUnknown_085F530C:: @ 85F530C
- obj_pal gIntro2BrendanNoTurnPal, 0x03ea
- obj_pal gIntro2BrendanNoTurnPal, 0x03eb
- obj_pal gIntro2FlygonPal, 0x03ec
- obj_pal gIntro2FlygonPal, 0x03ed
- null_obj_pal
-
- .align 2
-gUnknown_085F5334:: @ 85F5334
- obj_tiles gIntro2BrendanGfx, 0x3800, 0x03ea
- null_obj_tiles
-
- .align 2
-gUnknown_085F5344:: @ 85F5344
- obj_tiles gIntro2MayGfx, 0x3800, 0x03eb
- null_obj_tiles
-
- .align 2
-gUnknown_085F5354:: @ 85F5354
- obj_tiles gIntro2BicycleGfx, 0x1000, 0x03e9
- null_obj_tiles
-
- .align 2
-gUnknown_085F5364:: @ 85F5364
- obj_tiles gIntro2LatiosGfx, 0x1000, 0x03ec
- null_obj_tiles
-
- .align 2
-gUnknown_085F5374:: @ 85F5374
- obj_tiles gIntro2LatiasGfx, 0x1000, 0x03ed
- null_obj_pal
-
- .align 2
-gUnknown_085F5384:: @ 85F5384
- obj_pal gIntro2BrendanPal, 0x03ea
- obj_pal gIntro2MayPal, 0x03eb
- obj_pal gIntro2LatiosPal, 0x03ec
- obj_pal gIntro2LatiasPal, 0x03ed
- null_obj_pal
-
- .align 2
-gUnknown_085F53AC:: @ 85F53AC
- obj_tiles gIntro2BrendanGfx, 0x2000, 0x03ea
- null_obj_tiles
-
- .align 2
-gUnknown_085F53BC:: @ 85F53BC
- obj_tiles gIntro2MayGfx, 0x2000, 0x03eb
- null_obj_tiles
diff --git a/data/item_icon.s b/data/item_icon.s
deleted file mode 100644
index 6fd94d0a0..000000000
--- a/data/item_icon.s
+++ /dev/null
@@ -1,8 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
-@ 8614410
- .include "data/graphics/items/item_icon_table.inc"
-
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/item_menu_icons.s b/data/item_menu_icons.s
deleted file mode 100644
index 36f339b09..000000000
--- a/data/item_menu_icons.s
+++ /dev/null
@@ -1,224 +0,0 @@
-#include "constants/items.h"
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 2
-gUnknown_0857F564:: @ 857F564
- .incbin "graphics/interface/bag_spinner.gbapal"
-
- .align 2
-gUnknown_0857F584:: @ 857F584
- .incbin "graphics/interface/bag_spinner.4bpp"
-
- .align 2
-gUnknown_0857F604:: @ 857F604
- .incbin "graphics/unused/cherry.4bpp"
-
- .align 2
-gUnknown_0857FA84:: @ 857FA84
- .incbin "graphics/unused/cherry.gbapal"
-
- .align 2
-gOamData_857FAA4:: @ 857FAA4
- .2byte 0x0100, 0xc000, 0x0400, 0x0000
-
- .align 2
-gSpriteAnim_857FAAC:: @ 857FAAC
- .2byte 0x0000, 0x0004, 0xffff, 0x0000
-
- .align 2
-gSpriteAnim_857FAB4:: @ 857FAB4
- .2byte 0x0040, 0x0004, 0xffff, 0x0000
-
- .align 2
-gSpriteAnim_857FABC:: @ 857FABC
- .2byte 0x0080, 0x0004, 0xffff, 0x0000
-
- .align 2
-gSpriteAnim_857FAC4:: @ 857FAC4
- .2byte 0x00c0, 0x0004, 0xffff, 0x0000
-
- .align 2
-gSpriteAnim_857FACC:: @ 857FACC
- .2byte 0x0100, 0x0004, 0xffff, 0x0000
-
- .align 2
-gSpriteAnim_857FAD4:: @ 857FAD4
- .2byte 0x0140, 0x0004, 0xffff, 0x0000
-
- .align 2
-gSpriteAnimTable_857FADC:: @ 857FADC
- .4byte gSpriteAnim_857FAAC
- .4byte gSpriteAnim_857FAB4
- .4byte gSpriteAnim_857FAC4
- .4byte gSpriteAnim_857FACC
- .4byte gSpriteAnim_857FAD4
- .4byte gSpriteAnim_857FABC
-
- .align 2
-gSpriteAffineAnim_857FAF4:: @ 857FAF4
- .2byte 0x0100, 0x0100, 0x0000, 0x0000, 0x7fff, 0x0000, 0x0000, 0x0000
-
- .align 2
-gSpriteAffineAnim_857FB04:: @ 857FB04
- .2byte 0x0000, 0x0000, 0x02fe, 0x0000, 0x0000, 0x0000, 0x0402, 0x0000, 0x0000, 0x0000, 0x04fe, 0x0000, 0x0000, 0x0000, 0x0202, 0x0000
- .2byte 0x7fff, 0x0000, 0x0000, 0x0000
-
- .align 2
-gSpriteAffineAnimTable_857FB2C:: @ 857FB2C
- .4byte gSpriteAffineAnim_857FAF4
- .4byte gSpriteAffineAnim_857FB04
-
- .align 2
-gUnknown_0857FB34:: @ 857FB34
- obj_tiles gBagMaleTiles, 0x3000, 0x0064
-
- .align 2
-gUnknown_0857FB3C:: @ 857FB3C
- obj_tiles gBagFemaleTiles, 0x3000, 0x0064
-
- .align 2
-gUnknown_0857FB44:: @ 857FB44
- obj_pal gBagPalette, 0x0064
-
- .align 2
-gUnknown_0857FB4C:: @ 857FB4C
- spr_template 0x0064, 0x0064, gOamData_857FAA4, gSpriteAnimTable_857FADC, NULL, gSpriteAffineAnimTable_857FB2C, SpriteCallbackDummy
-
- .align 2
-gOamData_857FB64:: @ 857FB64
- .2byte 0x0000, 0x4800, 0x0800, 0x0000
-
- .align 2
-gSpriteAnim_857FB6C:: @ 857FB6C
- .2byte 0x0000, 0x0000, 0xffff, 0x0000
-
- .align 2
-gSpriteAnimTable_857FB74:: @ 857FB74
- .4byte gSpriteAnim_857FB6C
-
- .align 2
-gSpriteAffineAnim_857FB78:: @ 857FB78
- .2byte 0x0000, 0x0000, 0x1008, 0x0000, 0x7fff, 0x0000, 0x0000, 0x0000
-
- .align 2
-gSpriteAffineAnim_857FB88:: @ 857FB88
- .2byte 0x0000, 0x0000, 0x10f8, 0x0000, 0x7fff, 0x0000, 0x0000, 0x0000
-
- .align 2
-gUnknown_0857FB98:: @ 857FB98
- .4byte gSpriteAffineAnim_857FB78
-
- .align 2
-gUnknown_0857FB9C:: @ 857FB9C
- .4byte gSpriteAffineAnim_857FB88
-
- .align 2
-gUnknown_0857FBA0:: @ 857FBA0
- obj_tiles gUnknown_0857F584, 0x0080, 0x0065
-
- .align 2
-gUnknown_0857FBA8:: @ 857FBA8
- obj_pal gUnknown_0857F564, 0x0065
-
- .align 2
-gUnknown_0857FBB0:: @ 857FBB0
- spr_template 0x0065, 0x0065, gOamData_857FB64, gSpriteAnimTable_857FB74, NULL, gUnknown_0857FB98, ObjectCB_SwitchPocketRotatingBallInit
-
- .align 2
-gOamData_857FBC8:: @ 857FBC8
- .2byte 0x0000, 0xc000, 0x7400, 0x0000
-
- .align 2
-gOamData_857FBD0:: @ 857FBD0
- .2byte 0x0300, 0xc000, 0x7000, 0x0000
-
- .align 2
-gSpriteAnim_857FBD8:: @ 857FBD8
- .2byte 0x0000, 0x0000, 0xffff, 0x0000
-
- .align 2
-gSpriteAnimTable_857FBE0:: @ 857FBE0
- .4byte gSpriteAnim_857FBD8
-
- .align 2
-gOamData_857FBE4:: @ 857FBE4
- .2byte 0xc000, 0x0201, 0x0800, 0x0000
-
- .align 2
-gUnknown_0857FBEC:: @ 857FBEC
- spr_template 0xffff, 0x7544, gOamData_857FBC8, gSpriteAnimTable_857FBE0, gOamData_857FBE4, gDummySpriteAffineAnimTable, SpriteCallbackDummy
-
- .align 2
-gSpriteAffineAnim_857FC04:: @ 857FC04
- .2byte 0xffff, 0xffff, 0x60fd, 0x0000, 0x0000, 0x0000, 0x1000, 0x0000, 0xfffe, 0xfffe, 0x40ff, 0x0000, 0xfff8, 0x0000, 0x1000, 0x0000
- .2byte 0x0000, 0xfff8, 0x1000, 0x0000, 0x0100, 0x0100, 0x0000, 0x0000, 0x7ffe, 0x0000, 0x0000, 0x0000
-
- .align 2
-gSpriteAffineAnim_857FC3C:: @ 857FC3C
- .2byte 0xffff, 0xffff, 0x6003, 0x0000, 0x0000, 0x0000, 0x1000, 0x0000, 0xfffe, 0xfffe, 0x4001, 0x0000, 0xfff8, 0x0000, 0x1000, 0x0000
- .2byte 0x0000, 0xfff8, 0x1000, 0x0000, 0x0100, 0x0100, 0x0000, 0x0000, 0x7ffe, 0x0000, 0x0000, 0x0000
-
- .align 2
-gSpriteAffineAnimTable_857FC74:: @ 857FC74
- .4byte gSpriteAffineAnim_857FC04
- .4byte gSpriteAffineAnim_857FC3C
-
- .align 2
-gUnknown_0857FC7C:: @ 857FC7C
- spr_template 0xffff, 0x7544, gOamData_857FBD0, gSpriteAnimTable_857FBE0, gOamData_857FBE4, gSpriteAffineAnimTable_857FC74, SpriteCallbackDummy
-
-@ 857FC94
- .include "data/graphics/berries/berry_pic_table.inc"
-
- .align 2
-gUnknown_0857FDEC:: @ 857FDEC
- obj_tiles gBerryCheckCircle_Gfx, 0x0800, 0x2710
-
- .align 2
-gUnknown_0857FDF4:: @ 857FDF4
- obj_pal gUnknown_08D9BEF0, 0x2710
-
- .align 2
-gOamData_857FDFC:: @ 857FDFC
- .2byte 0x0000, 0xc000, 0x0400, 0x0000
-
- .align 2
-gSpriteAnim_857FE04:: @ 857FE04
- .2byte 0x0000, 0x0000, 0xffff, 0x0000
-
- .align 2
-gSpriteAnimTable_857FE0C:: @ 857FE0C
- .4byte gSpriteAnim_857FE04
-
- .align 2
-gUnknown_0857FE10:: @ 857FE10
- spr_template 0x2710, 0x2710, gOamData_857FDFC, gSpriteAnimTable_857FE0C, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
-
- .align 2
-gUnknown_0857FE28:: @ 857FE28
- spr_template 0x0000, 0x0000, gDummyOamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80D5860
-
- .align 2
-gUnknown_0857FE40:: @ 857FE40
- spr_template 0x0000, 0x0000, gDummyOamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80D58F8
-
- .align 2
-gUnknown_0857FE58:: @ 857FE58
- spr_template 0x0000, 0x0000, gDummyOamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80D5968
-
- .align 2
-gUnknown_0857FE70:: @ 857FE70
- spr_template 0x0000, 0x0000, gDummyOamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80D5A94
-
- .align 2
-gUnknown_0857FE88:: @ 857FE88
- spr_template 0x0000, 0x0000, gDummyOamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_80D5B48
-
-@ 857FEA0
- .include "data/text/item_descriptions.inc"
-
-@ 85839A0
- .include "data/items.inc"
diff --git a/data/item_use.s b/data/item_use.s
index d9bcc44f6..6c9affbc8 100644
--- a/data/item_use.s
+++ b/data/item_use.s
@@ -8,7 +8,7 @@
.align 2
gUnknown_085920D8:: @ 85920D8
.4byte sub_81B617C
- .4byte c2_exit_to_overworld_2_switch
+ .4byte CB2_ReturnToField
.4byte NULL
.align 2
diff --git a/data/items.inc b/data/items.inc
deleted file mode 100644
index aee407966..000000000
--- a/data/items.inc
+++ /dev/null
@@ -1,5656 +0,0 @@
- .align 2
-gItems:: @ 85839A0
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "MASTER BALL$", 14
- .2byte ITEM_MASTER_BALL
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gMasterBallItemDescription
- .byte 0
- .byte 0
- .byte POCKET_POKE_BALLS
- .byte 0
- .4byte NULL
- .4byte 2
- .4byte ItemUseInBattle_PokeBall
- .4byte 0
-
- .string "ULTRA BALL$", 14
- .2byte ITEM_ULTRA_BALL
- .2byte 1200 @ price
- .byte 0
- .byte 0
- .4byte gUltraBallItemDescription
- .byte 0
- .byte 0
- .byte POCKET_POKE_BALLS
- .byte 1
- .4byte NULL
- .4byte 2
- .4byte ItemUseInBattle_PokeBall
- .4byte 1
-
- .string "GREAT BALL$", 14
- .2byte ITEM_GREAT_BALL
- .2byte 600 @ price
- .byte 0
- .byte 0
- .4byte gGreatBallItemDescription
- .byte 0
- .byte 0
- .byte POCKET_POKE_BALLS
- .byte 2
- .4byte NULL
- .4byte 2
- .4byte ItemUseInBattle_PokeBall
- .4byte 2
-
- .string "POKé BALL$", 14
- .2byte ITEM_POKE_BALL
- .2byte 200 @ price
- .byte 0
- .byte 0
- .4byte gPokeBallItemDescription
- .byte 0
- .byte 0
- .byte POCKET_POKE_BALLS
- .byte 3
- .4byte NULL
- .4byte 2
- .4byte ItemUseInBattle_PokeBall
- .4byte 3
-
- .string "SAFARI BALL$", 14
- .2byte ITEM_SAFARI_BALL
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gSafariBallItemDescription
- .byte 0
- .byte 0
- .byte POCKET_POKE_BALLS
- .byte 4
- .4byte NULL
- .4byte 2
- .4byte ItemUseInBattle_PokeBall
- .4byte 4
-
- .string "NET BALL$", 14
- .2byte ITEM_NET_BALL
- .2byte 1000 @ price
- .byte 0
- .byte 0
- .4byte gNetBallItemDescription
- .byte 0
- .byte 0
- .byte POCKET_POKE_BALLS
- .byte 5
- .4byte NULL
- .4byte 2
- .4byte ItemUseInBattle_PokeBall
- .4byte 5
-
- .string "DIVE BALL$", 14
- .2byte ITEM_DIVE_BALL
- .2byte 1000 @ price
- .byte 0
- .byte 0
- .4byte gDiveBallItemDescription
- .byte 0
- .byte 0
- .byte POCKET_POKE_BALLS
- .byte 6
- .4byte NULL
- .4byte 2
- .4byte ItemUseInBattle_PokeBall
- .4byte 6
-
- .string "NEST BALL$", 14
- .2byte ITEM_NEST_BALL
- .2byte 1000 @ price
- .byte 0
- .byte 0
- .4byte gNestBallItemDescription
- .byte 0
- .byte 0
- .byte POCKET_POKE_BALLS
- .byte 7
- .4byte NULL
- .4byte 2
- .4byte ItemUseInBattle_PokeBall
- .4byte 7
-
- .string "REPEAT BALL$", 14
- .2byte ITEM_REPEAT_BALL
- .2byte 1000 @ price
- .byte 0
- .byte 0
- .4byte gRepeatBallItemDescription
- .byte 0
- .byte 0
- .byte POCKET_POKE_BALLS
- .byte 8
- .4byte NULL
- .4byte 2
- .4byte ItemUseInBattle_PokeBall
- .4byte 8
-
- .string "TIMER BALL$", 14
- .2byte ITEM_TIMER_BALL
- .2byte 1000 @ price
- .byte 0
- .byte 0
- .4byte gTimerBallItemDescription
- .byte 0
- .byte 0
- .byte POCKET_POKE_BALLS
- .byte 9
- .4byte NULL
- .4byte 2
- .4byte ItemUseInBattle_PokeBall
- .4byte 9
-
- .string "LUXURY BALL$", 14
- .2byte ITEM_LUXURY_BALL
- .2byte 1000 @ price
- .byte 0
- .byte 0
- .4byte gLuxuryBallItemDescription
- .byte 0
- .byte 0
- .byte POCKET_POKE_BALLS
- .byte 10
- .4byte NULL
- .4byte 2
- .4byte ItemUseInBattle_PokeBall
- .4byte 10
-
- .string "PREMIER BALL$", 14
- .2byte ITEM_PREMIER_BALL
- .2byte 200 @ price
- .byte 0
- .byte 0
- .4byte gPremierBallItemDescription
- .byte 0
- .byte 0
- .byte POCKET_POKE_BALLS
- .byte 11
- .4byte NULL
- .4byte 2
- .4byte ItemUseInBattle_PokeBall
- .4byte 11
-
- .string "POTION$", 14
- .2byte ITEM_POTION
- .2byte 300 @ price
- .byte 0
- .byte 20
- .4byte gPotionItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 1
- .4byte ItemUseOutOfBattle_Medicine
- .4byte 1
- .4byte ItemUseInBattle_Medicine
- .4byte 0
-
- .string "ANTIDOTE$", 14
- .2byte ITEM_ANTIDOTE
- .2byte 100 @ price
- .byte 0
- .byte 0
- .4byte gAntidoteItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 1
- .4byte ItemUseOutOfBattle_Medicine
- .4byte 1
- .4byte ItemUseInBattle_Medicine
- .4byte 0
-
- .string "BURN HEAL$", 14
- .2byte ITEM_BURN_HEAL
- .2byte 250 @ price
- .byte 0
- .byte 0
- .4byte gBurnHealItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 1
- .4byte ItemUseOutOfBattle_Medicine
- .4byte 1
- .4byte ItemUseInBattle_Medicine
- .4byte 0
-
- .string "ICE HEAL$", 14
- .2byte ITEM_ICE_HEAL
- .2byte 250 @ price
- .byte 0
- .byte 0
- .4byte gIceHealItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 1
- .4byte ItemUseOutOfBattle_Medicine
- .4byte 1
- .4byte ItemUseInBattle_Medicine
- .4byte 0
-
- .string "AWAKENING$", 14
- .2byte ITEM_AWAKENING
- .2byte 250 @ price
- .byte 0
- .byte 0
- .4byte gAwakeningItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 1
- .4byte ItemUseOutOfBattle_Medicine
- .4byte 1
- .4byte ItemUseInBattle_Medicine
- .4byte 0
-
- .string "PARLYZ HEAL$", 14
- .2byte ITEM_PARALYZE_HEAL
- .2byte 200 @ price
- .byte 0
- .byte 0
- .4byte gParalyzeHealItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 1
- .4byte ItemUseOutOfBattle_Medicine
- .4byte 1
- .4byte ItemUseInBattle_Medicine
- .4byte 0
-
- .string "FULL RESTORE$", 14
- .2byte ITEM_FULL_RESTORE
- .2byte 3000 @ price
- .byte 0
- .byte 255
- .4byte gFullRestoreItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 1
- .4byte ItemUseOutOfBattle_Medicine
- .4byte 1
- .4byte ItemUseInBattle_Medicine
- .4byte 0
-
- .string "MAX POTION$", 14
- .2byte ITEM_MAX_POTION
- .2byte 2500 @ price
- .byte 0
- .byte 255
- .4byte gMaxPotionItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 1
- .4byte ItemUseOutOfBattle_Medicine
- .4byte 1
- .4byte ItemUseInBattle_Medicine
- .4byte 0
-
- .string "HYPER POTION$", 14
- .2byte ITEM_HYPER_POTION
- .2byte 1200 @ price
- .byte 0
- .byte 200
- .4byte gHyperPotionItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 1
- .4byte ItemUseOutOfBattle_Medicine
- .4byte 1
- .4byte ItemUseInBattle_Medicine
- .4byte 0
-
- .string "SUPER POTION$", 14
- .2byte ITEM_SUPER_POTION
- .2byte 700 @ price
- .byte 0
- .byte 50
- .4byte gSuperPotionItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 1
- .4byte ItemUseOutOfBattle_Medicine
- .4byte 1
- .4byte ItemUseInBattle_Medicine
- .4byte 0
-
- .string "FULL HEAL$", 14
- .2byte ITEM_FULL_HEAL
- .2byte 600 @ price
- .byte 0
- .byte 0
- .4byte gFullHealItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 1
- .4byte ItemUseOutOfBattle_Medicine
- .4byte 1
- .4byte ItemUseInBattle_Medicine
- .4byte 0
-
- .string "REVIVE$", 14
- .2byte ITEM_REVIVE
- .2byte 1500 @ price
- .byte 0
- .byte 0
- .4byte gReviveItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 1
- .4byte ItemUseOutOfBattle_Medicine
- .4byte 1
- .4byte ItemUseInBattle_Medicine
- .4byte 0
-
- .string "MAX REVIVE$", 14
- .2byte ITEM_MAX_REVIVE
- .2byte 4000 @ price
- .byte 0
- .byte 0
- .4byte gMaxReviveItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 1
- .4byte ItemUseOutOfBattle_Medicine
- .4byte 1
- .4byte ItemUseInBattle_Medicine
- .4byte 0
-
- .string "FRESH WATER$", 14
- .2byte ITEM_FRESH_WATER
- .2byte 200 @ price
- .byte 0
- .byte 50
- .4byte gFreshWaterItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 1
- .4byte ItemUseOutOfBattle_Medicine
- .4byte 1
- .4byte ItemUseInBattle_Medicine
- .4byte 0
-
- .string "SODA POP$", 14
- .2byte ITEM_SODA_POP
- .2byte 300 @ price
- .byte 0
- .byte 60
- .4byte gSodaPopItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 1
- .4byte ItemUseOutOfBattle_Medicine
- .4byte 1
- .4byte ItemUseInBattle_Medicine
- .4byte 0
-
- .string "LEMONADE$", 14
- .2byte ITEM_LEMONADE
- .2byte 350 @ price
- .byte 0
- .byte 80
- .4byte gLemonadeItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 1
- .4byte ItemUseOutOfBattle_Medicine
- .4byte 1
- .4byte ItemUseInBattle_Medicine
- .4byte 0
-
- .string "MOOMOO MILK$", 14
- .2byte ITEM_MOOMOO_MILK
- .2byte 500 @ price
- .byte 0
- .byte 100
- .4byte gMoomooMilkItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 1
- .4byte ItemUseOutOfBattle_Medicine
- .4byte 1
- .4byte ItemUseInBattle_Medicine
- .4byte 0
-
- .string "ENERGYPOWDER$", 14
- .2byte ITEM_ENERGY_POWDER
- .2byte 500 @ price
- .byte 0
- .byte 0
- .4byte gEnergyPowderItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 1
- .4byte ItemUseOutOfBattle_Medicine
- .4byte 1
- .4byte ItemUseInBattle_Medicine
- .4byte 0
-
- .string "ENERGY ROOT$", 14
- .2byte ITEM_ENERGY_ROOT
- .2byte 800 @ price
- .byte 0
- .byte 0
- .4byte gEnergyRootItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 1
- .4byte ItemUseOutOfBattle_Medicine
- .4byte 1
- .4byte ItemUseInBattle_Medicine
- .4byte 0
-
- .string "HEAL POWDER$", 14
- .2byte ITEM_HEAL_POWDER
- .2byte 450 @ price
- .byte 0
- .byte 0
- .4byte gHealPowderItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 1
- .4byte ItemUseOutOfBattle_Medicine
- .4byte 1
- .4byte ItemUseInBattle_Medicine
- .4byte 0
-
- .string "REVIVAL HERB$", 14
- .2byte ITEM_REVIVAL_HERB
- .2byte 2800 @ price
- .byte 0
- .byte 0
- .4byte gRevivalHerbItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 1
- .4byte ItemUseOutOfBattle_Medicine
- .4byte 1
- .4byte ItemUseInBattle_Medicine
- .4byte 0
-
- .string "ETHER$", 14
- .2byte ITEM_ETHER
- .2byte 1200 @ price
- .byte 0
- .byte 10
- .4byte gEtherItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 1
- .4byte ItemUseOutOfBattle_PPRecovery
- .4byte 1
- .4byte ItemUseInBattle_PPRecovery
- .4byte 0
-
- .string "MAX ETHER$", 14
- .2byte ITEM_MAX_ETHER
- .2byte 2000 @ price
- .byte 0
- .byte 255
- .4byte gMaxEtherItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 1
- .4byte ItemUseOutOfBattle_PPRecovery
- .4byte 1
- .4byte ItemUseInBattle_PPRecovery
- .4byte 0
-
- .string "ELIXIR$", 14
- .2byte ITEM_ELIXIR
- .2byte 3000 @ price
- .byte 0
- .byte 10
- .4byte gElixirItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 1
- .4byte ItemUseOutOfBattle_PPRecovery
- .4byte 1
- .4byte ItemUseInBattle_PPRecovery
- .4byte 0
-
- .string "MAX ELIXIR$", 14
- .2byte ITEM_MAX_ELIXIR
- .2byte 4500 @ price
- .byte 0
- .byte 255
- .4byte gMaxElixirItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 1
- .4byte ItemUseOutOfBattle_PPRecovery
- .4byte 1
- .4byte ItemUseInBattle_PPRecovery
- .4byte 0
-
- .string "LAVA COOKIE$", 14
- .2byte ITEM_LAVA_COOKIE
- .2byte 200 @ price
- .byte 0
- .byte 0
- .4byte gLavaCookieItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 1
- .4byte ItemUseOutOfBattle_Medicine
- .4byte 1
- .4byte ItemUseInBattle_Medicine
- .4byte 0
-
- .string "BLUE FLUTE$", 14
- .2byte ITEM_BLUE_FLUTE
- .2byte 100 @ price
- .byte 0
- .byte 0
- .4byte gBlueFluteItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 1
- .4byte ItemUseOutOfBattle_Medicine
- .4byte 1
- .4byte ItemUseInBattle_Medicine
- .4byte 0
-
- .string "YELLOW FLUTE$", 14
- .2byte ITEM_YELLOW_FLUTE
- .2byte 200 @ price
- .byte 0
- .byte 0
- .4byte gYellowFluteItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 1
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 1
- .4byte ItemUseInBattle_Medicine
- .4byte 0
-
- .string "RED FLUTE$", 14
- .2byte ITEM_RED_FLUTE
- .2byte 300 @ price
- .byte 0
- .byte 0
- .4byte gRedFluteItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 1
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 1
- .4byte ItemUseInBattle_Medicine
- .4byte 0
-
- .string "BLACK FLUTE$", 14
- .2byte ITEM_BLACK_FLUTE
- .2byte 400 @ price
- .byte 0
- .byte 50
- .4byte gBlackFluteItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 1
- .4byte ItemUseOutOfBattle_BlackWhiteFlute
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "WHITE FLUTE$", 14
- .2byte ITEM_WHITE_FLUTE
- .2byte 500 @ price
- .byte 0
- .byte 150
- .4byte gWhiteFluteItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 1
- .4byte ItemUseOutOfBattle_BlackWhiteFlute
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "BERRY JUICE$", 14
- .2byte ITEM_BERRY_JUICE
- .2byte 100 @ price
- .byte 1
- .byte 20
- .4byte gBerryJuiceItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 1
- .4byte ItemUseOutOfBattle_Medicine
- .4byte 1
- .4byte ItemUseInBattle_Medicine
- .4byte 0
-
- .string "SACRED ASH$", 14
- .2byte ITEM_SACRED_ASH
- .2byte 200 @ price
- .byte 0
- .byte 0
- .4byte gSacredAshItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 1
- .4byte ItemUseOutOfBattle_SacredAsh
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "SHOAL SALT$", 14
- .2byte ITEM_SHOAL_SALT
- .2byte 20 @ price
- .byte 0
- .byte 0
- .4byte gShoalSaltItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "SHOAL SHELL$", 14
- .2byte ITEM_SHOAL_SHELL
- .2byte 20 @ price
- .byte 0
- .byte 0
- .4byte gShoalShellItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "RED SHARD$", 14
- .2byte ITEM_RED_SHARD
- .2byte 200 @ price
- .byte 0
- .byte 0
- .4byte gRedShardItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "BLUE SHARD$", 14
- .2byte ITEM_BLUE_SHARD
- .2byte 200 @ price
- .byte 0
- .byte 0
- .4byte gBlueShardItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "YELLOW SHARD$", 14
- .2byte ITEM_YELLOW_SHARD
- .2byte 200 @ price
- .byte 0
- .byte 0
- .4byte gYellowShardItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "GREEN SHARD$", 14
- .2byte ITEM_GREEN_SHARD
- .2byte 200 @ price
- .byte 0
- .byte 0
- .4byte gGreenShardItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "HP UP$", 14
- .2byte ITEM_HP_UP
- .2byte 9800 @ price
- .byte 0
- .byte 0
- .4byte gHPUpItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 1
- .4byte ItemUseOutOfBattle_Medicine
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "PROTEIN$", 14
- .2byte ITEM_PROTEIN
- .2byte 9800 @ price
- .byte 0
- .byte 0
- .4byte gProteinItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 1
- .4byte ItemUseOutOfBattle_Medicine
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "IRON$", 14
- .2byte ITEM_IRON
- .2byte 9800 @ price
- .byte 0
- .byte 0
- .4byte gIronItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 1
- .4byte ItemUseOutOfBattle_Medicine
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "CARBOS$", 14
- .2byte ITEM_CARBOS
- .2byte 9800 @ price
- .byte 0
- .byte 0
- .4byte gCarbosItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 1
- .4byte ItemUseOutOfBattle_Medicine
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "CALCIUM$", 14
- .2byte ITEM_CALCIUM
- .2byte 9800 @ price
- .byte 0
- .byte 0
- .4byte gCalciumItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 1
- .4byte ItemUseOutOfBattle_Medicine
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "RARE CANDY$", 14
- .2byte ITEM_RARE_CANDY
- .2byte 4800 @ price
- .byte 0
- .byte 0
- .4byte gRareCandyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 1
- .4byte ItemUseOutOfBattle_RareCandy
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "PP UP$", 14
- .2byte ITEM_PP_UP
- .2byte 9800 @ price
- .byte 0
- .byte 0
- .4byte gPPUpItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 1
- .4byte ItemUseOutOfBattle_PPUp
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "ZINC$", 14
- .2byte ITEM_ZINC
- .2byte 9800 @ price
- .byte 0
- .byte 0
- .4byte gZincItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 1
- .4byte ItemUseOutOfBattle_Medicine
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "PP MAX$", 14
- .2byte ITEM_PP_MAX
- .2byte 9800 @ price
- .byte 0
- .byte 0
- .4byte gPPMaxItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 1
- .4byte ItemUseOutOfBattle_PPUp
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "GUARD SPEC.$", 14
- .2byte ITEM_GUARD_SPEC
- .2byte 700 @ price
- .byte 0
- .byte 0
- .4byte gGuardSpecItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 2
- .4byte ItemUseInBattle_StatIncrease
- .4byte 0
-
- .string "DIRE HIT$", 14
- .2byte ITEM_DIRE_HIT
- .2byte 650 @ price
- .byte 0
- .byte 0
- .4byte gDireHitItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 2
- .4byte ItemUseInBattle_StatIncrease
- .4byte 0
-
- .string "X ATTACK$", 14
- .2byte ITEM_X_ATTACK
- .2byte 500 @ price
- .byte 0
- .byte 0
- .4byte gXAttackItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 2
- .4byte ItemUseInBattle_StatIncrease
- .4byte 0
-
- .string "X DEFEND$", 14
- .2byte ITEM_X_DEFEND
- .2byte 550 @ price
- .byte 0
- .byte 0
- .4byte gXDefendItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 2
- .4byte ItemUseInBattle_StatIncrease
- .4byte 0
-
- .string "X SPEED$", 14
- .2byte ITEM_X_SPEED
- .2byte 350 @ price
- .byte 0
- .byte 0
- .4byte gXSpeedItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 2
- .4byte ItemUseInBattle_StatIncrease
- .4byte 0
-
- .string "X ACCURACY$", 14
- .2byte ITEM_X_ACCURACY
- .2byte 950 @ price
- .byte 0
- .byte 0
- .4byte gXAccuracyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 2
- .4byte ItemUseInBattle_StatIncrease
- .4byte 0
-
- .string "X SPECIAL$", 14
- .2byte ITEM_X_SPECIAL
- .2byte 350 @ price
- .byte 0
- .byte 0
- .4byte gXSpecialItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 2
- .4byte ItemUseInBattle_StatIncrease
- .4byte 0
-
- .string "POKé DOLL$", 14
- .2byte ITEM_POKE_DOLL
- .2byte 1000 @ price
- .byte 0
- .byte 0
- .4byte gPokeDollItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 2
- .4byte ItemUseInBattle_Escape
- .4byte 0
-
- .string "FLUFFY TAIL$", 14
- .2byte ITEM_FLUFFY_TAIL
- .2byte 1000 @ price
- .byte 0
- .byte 0
- .4byte gFluffyTailItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 2
- .4byte ItemUseInBattle_Escape
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "SUPER REPEL$", 14
- .2byte ITEM_SUPER_REPEL
- .2byte 500 @ price
- .byte 0
- .byte 200
- .4byte gSuperRepelItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_Repel
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "MAX REPEL$", 14
- .2byte ITEM_MAX_REPEL
- .2byte 700 @ price
- .byte 0
- .byte 250
- .4byte gMaxRepelItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_Repel
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "ESCAPE ROPE$", 14
- .2byte ITEM_ESCAPE_ROPE
- .2byte 550 @ price
- .byte 0
- .byte 0
- .4byte gEscapeRopeItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 2
- .4byte ItemUseOutOfBattle_EscapeRope
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "REPEL$", 14
- .2byte ITEM_REPEL
- .2byte 350 @ price
- .byte 0
- .byte 100
- .4byte gRepelItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_Repel
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "SUN STONE$", 14
- .2byte ITEM_SUN_STONE
- .2byte 2100 @ price
- .byte 0
- .byte 0
- .4byte gSunStoneItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 1
- .4byte ItemUseOutOfBattle_EvolutionStone
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "MOON STONE$", 14
- .2byte ITEM_MOON_STONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gMoonStoneItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 1
- .4byte ItemUseOutOfBattle_EvolutionStone
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "FIRE STONE$", 14
- .2byte ITEM_FIRE_STONE
- .2byte 2100 @ price
- .byte 0
- .byte 0
- .4byte gFireStoneItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 1
- .4byte ItemUseOutOfBattle_EvolutionStone
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "THUNDERSTONE$", 14
- .2byte ITEM_THUNDER_STONE
- .2byte 2100 @ price
- .byte 0
- .byte 0
- .4byte gThunderStoneItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 1
- .4byte ItemUseOutOfBattle_EvolutionStone
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "WATER STONE$", 14
- .2byte ITEM_WATER_STONE
- .2byte 2100 @ price
- .byte 0
- .byte 0
- .4byte gWaterStoneItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 1
- .4byte ItemUseOutOfBattle_EvolutionStone
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "LEAF STONE$", 14
- .2byte ITEM_LEAF_STONE
- .2byte 2100 @ price
- .byte 0
- .byte 0
- .4byte gLeafStoneItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 1
- .4byte ItemUseOutOfBattle_EvolutionStone
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "TINYMUSHROOM$", 14
- .2byte ITEM_TINY_MUSHROOM
- .2byte 500 @ price
- .byte 0
- .byte 0
- .4byte gTinyMushroomItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "BIG MUSHROOM$", 14
- .2byte ITEM_BIG_MUSHROOM
- .2byte 5000 @ price
- .byte 0
- .byte 0
- .4byte gBigMushroomItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "PEARL$", 14
- .2byte ITEM_PEARL
- .2byte 1400 @ price
- .byte 0
- .byte 0
- .4byte gPearlItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "BIG PEARL$", 14
- .2byte ITEM_BIG_PEARL
- .2byte 7500 @ price
- .byte 0
- .byte 0
- .4byte gBigPearlItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "STARDUST$", 14
- .2byte ITEM_STARDUST
- .2byte 2000 @ price
- .byte 0
- .byte 0
- .4byte gStardustItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "STAR PIECE$", 14
- .2byte ITEM_STAR_PIECE
- .2byte 9800 @ price
- .byte 0
- .byte 0
- .4byte gStarPieceItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "NUGGET$", 14
- .2byte ITEM_NUGGET
- .2byte 10000 @ price
- .byte 0
- .byte 0
- .4byte gNuggetItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "HEART SCALE$", 14
- .2byte ITEM_HEART_SCALE
- .2byte 100 @ price
- .byte 0
- .byte 0
- .4byte gHeartScaleItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "ORANGE MAIL$", 14
- .2byte ITEM_ORANGE_MAIL
- .2byte 50 @ price
- .byte 0
- .byte 0
- .4byte gOrangeMailItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 0
- .4byte ItemUseOutOfBattle_Mail
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "HARBOR MAIL$", 14
- .2byte ITEM_HARBOR_MAIL
- .2byte 50 @ price
- .byte 0
- .byte 0
- .4byte gHarborMailItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 0
- .4byte ItemUseOutOfBattle_Mail
- .4byte 0
- .4byte NULL
- .4byte 1
-
- .string "GLITTER MAIL$", 14
- .2byte ITEM_GLITTER_MAIL
- .2byte 50 @ price
- .byte 0
- .byte 0
- .4byte gGlitterMailItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 0
- .4byte ItemUseOutOfBattle_Mail
- .4byte 0
- .4byte NULL
- .4byte 2
-
- .string "MECH MAIL$", 14
- .2byte ITEM_MECH_MAIL
- .2byte 50 @ price
- .byte 0
- .byte 0
- .4byte gMechMailItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 0
- .4byte ItemUseOutOfBattle_Mail
- .4byte 0
- .4byte NULL
- .4byte 3
-
- .string "WOOD MAIL$", 14
- .2byte ITEM_WOOD_MAIL
- .2byte 50 @ price
- .byte 0
- .byte 0
- .4byte gWoodMailItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 0
- .4byte ItemUseOutOfBattle_Mail
- .4byte 0
- .4byte NULL
- .4byte 4
-
- .string "WAVE MAIL$", 14
- .2byte ITEM_WAVE_MAIL
- .2byte 50 @ price
- .byte 0
- .byte 0
- .4byte gWaveMailItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 0
- .4byte ItemUseOutOfBattle_Mail
- .4byte 0
- .4byte NULL
- .4byte 5
-
- .string "BEAD MAIL$", 14
- .2byte ITEM_BEAD_MAIL
- .2byte 50 @ price
- .byte 0
- .byte 0
- .4byte gBeadMailItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 0
- .4byte ItemUseOutOfBattle_Mail
- .4byte 0
- .4byte NULL
- .4byte 6
-
- .string "SHADOW MAIL$", 14
- .2byte ITEM_SHADOW_MAIL
- .2byte 50 @ price
- .byte 0
- .byte 0
- .4byte gShadowMailItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 0
- .4byte ItemUseOutOfBattle_Mail
- .4byte 0
- .4byte NULL
- .4byte 7
-
- .string "TROPIC MAIL$", 14
- .2byte ITEM_TROPIC_MAIL
- .2byte 50 @ price
- .byte 0
- .byte 0
- .4byte gTropicMailItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 0
- .4byte ItemUseOutOfBattle_Mail
- .4byte 0
- .4byte NULL
- .4byte 8
-
- .string "DREAM MAIL$", 14
- .2byte ITEM_DREAM_MAIL
- .2byte 50 @ price
- .byte 0
- .byte 0
- .4byte gDreamMailItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 0
- .4byte ItemUseOutOfBattle_Mail
- .4byte 0
- .4byte NULL
- .4byte 9
-
- .string "FAB MAIL$", 14
- .2byte ITEM_FAB_MAIL
- .2byte 50 @ price
- .byte 0
- .byte 0
- .4byte gFabMailItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 0
- .4byte ItemUseOutOfBattle_Mail
- .4byte 0
- .4byte NULL
- .4byte 10
-
- .string "RETRO MAIL$", 14
- .2byte ITEM_RETRO_MAIL
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gRetroMailItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 0
- .4byte ItemUseOutOfBattle_Mail
- .4byte 0
- .4byte NULL
- .4byte 11
-
- .string "CHERI BERRY$", 14
- .2byte ITEM_CHERI_BERRY
- .2byte 20 @ price
- .byte 2
- .byte 0
- .4byte gCheriBerryItemDescription
- .byte 0
- .byte 0
- .byte POCKET_BERRIES
- .byte 1
- .4byte ItemUseOutOfBattle_Medicine
- .4byte 1
- .4byte ItemUseInBattle_Medicine
- .4byte 0
-
- .string "CHESTO BERRY$", 14
- .2byte ITEM_CHESTO_BERRY
- .2byte 20 @ price
- .byte 3
- .byte 0
- .4byte gChestoBerryItemDescription
- .byte 0
- .byte 0
- .byte POCKET_BERRIES
- .byte 1
- .4byte ItemUseOutOfBattle_Medicine
- .4byte 1
- .4byte ItemUseInBattle_Medicine
- .4byte 0
-
- .string "PECHA BERRY$", 14
- .2byte ITEM_PECHA_BERRY
- .2byte 20 @ price
- .byte 4
- .byte 0
- .4byte gPechaBerryItemDescription
- .byte 0
- .byte 0
- .byte POCKET_BERRIES
- .byte 1
- .4byte ItemUseOutOfBattle_Medicine
- .4byte 1
- .4byte ItemUseInBattle_Medicine
- .4byte 0
-
- .string "RAWST BERRY$", 14
- .2byte ITEM_RAWST_BERRY
- .2byte 20 @ price
- .byte 5
- .byte 0
- .4byte gRawstBerryItemDescription
- .byte 0
- .byte 0
- .byte POCKET_BERRIES
- .byte 1
- .4byte ItemUseOutOfBattle_Medicine
- .4byte 1
- .4byte ItemUseInBattle_Medicine
- .4byte 0
-
- .string "ASPEAR BERRY$", 14
- .2byte ITEM_ASPEAR_BERRY
- .2byte 20 @ price
- .byte 6
- .byte 0
- .4byte gAspearBerryItemDescription
- .byte 0
- .byte 0
- .byte POCKET_BERRIES
- .byte 1
- .4byte ItemUseOutOfBattle_Medicine
- .4byte 1
- .4byte ItemUseInBattle_Medicine
- .4byte 0
-
- .string "LEPPA BERRY$", 14
- .2byte ITEM_LEPPA_BERRY
- .2byte 20 @ price
- .byte 7
- .byte 10
- .4byte gLeppaBerryItemDescription
- .byte 0
- .byte 0
- .byte POCKET_BERRIES
- .byte 1
- .4byte ItemUseOutOfBattle_PPRecovery
- .4byte 1
- .4byte ItemUseInBattle_PPRecovery
- .4byte 0
-
- .string "ORAN BERRY$", 14
- .2byte ITEM_ORAN_BERRY
- .2byte 20 @ price
- .byte 1
- .byte 10
- .4byte gOranBerryItemDescription
- .byte 0
- .byte 0
- .byte POCKET_BERRIES
- .byte 1
- .4byte ItemUseOutOfBattle_Medicine
- .4byte 1
- .4byte ItemUseInBattle_Medicine
- .4byte 0
-
- .string "PERSIM BERRY$", 14
- .2byte ITEM_PERSIM_BERRY
- .2byte 20 @ price
- .byte 8
- .byte 0
- .4byte gPersimBerryItemDescription
- .byte 0
- .byte 0
- .byte POCKET_BERRIES
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 1
- .4byte ItemUseInBattle_Medicine
- .4byte 0
-
- .string "LUM BERRY$", 14
- .2byte ITEM_LUM_BERRY
- .2byte 20 @ price
- .byte 9
- .byte 0
- .4byte gLumBerryItemDescription
- .byte 0
- .byte 0
- .byte POCKET_BERRIES
- .byte 1
- .4byte ItemUseOutOfBattle_Medicine
- .4byte 1
- .4byte ItemUseInBattle_Medicine
- .4byte 0
-
- .string "SITRUS BERRY$", 14
- .2byte ITEM_SITRUS_BERRY
- .2byte 20 @ price
- .byte 1
- .byte 30
- .4byte gSitrusBerryItemDescription
- .byte 0
- .byte 0
- .byte POCKET_BERRIES
- .byte 1
- .4byte ItemUseOutOfBattle_Medicine
- .4byte 1
- .4byte ItemUseInBattle_Medicine
- .4byte 0
-
- .string "FIGY BERRY$", 14
- .2byte ITEM_FIGY_BERRY
- .2byte 20 @ price
- .byte 10
- .byte 8
- .4byte gFigyBerryItemDescription
- .byte 0
- .byte 0
- .byte POCKET_BERRIES
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "WIKI BERRY$", 14
- .2byte ITEM_WIKI_BERRY
- .2byte 20 @ price
- .byte 11
- .byte 8
- .4byte gWikiBerryItemDescription
- .byte 0
- .byte 0
- .byte POCKET_BERRIES
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "MAGO BERRY$", 14
- .2byte ITEM_MAGO_BERRY
- .2byte 20 @ price
- .byte 12
- .byte 8
- .4byte gMagoBerryItemDescription
- .byte 0
- .byte 0
- .byte POCKET_BERRIES
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "AGUAV BERRY$", 14
- .2byte ITEM_AGUAV_BERRY
- .2byte 20 @ price
- .byte 13
- .byte 8
- .4byte gAguavBerryItemDescription
- .byte 0
- .byte 0
- .byte POCKET_BERRIES
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "IAPAPA BERRY$", 14
- .2byte ITEM_IAPAPA_BERRY
- .2byte 20 @ price
- .byte 14
- .byte 8
- .4byte gIapapaBerryItemDescription
- .byte 0
- .byte 0
- .byte POCKET_BERRIES
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "RAZZ BERRY$", 14
- .2byte ITEM_RAZZ_BERRY
- .2byte 20 @ price
- .byte 0
- .byte 0
- .4byte gRazzBerryItemDescription
- .byte 0
- .byte 0
- .byte POCKET_BERRIES
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "BLUK BERRY$", 14
- .2byte ITEM_BLUK_BERRY
- .2byte 20 @ price
- .byte 0
- .byte 0
- .4byte gBlukBerryItemDescription
- .byte 0
- .byte 0
- .byte POCKET_BERRIES
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "NANAB BERRY$", 14
- .2byte ITEM_NANAB_BERRY
- .2byte 20 @ price
- .byte 0
- .byte 0
- .4byte gNanabBerryItemDescription
- .byte 0
- .byte 0
- .byte POCKET_BERRIES
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "WEPEAR BERRY$", 14
- .2byte ITEM_WEPEAR_BERRY
- .2byte 20 @ price
- .byte 0
- .byte 0
- .4byte gWepearBerryItemDescription
- .byte 0
- .byte 0
- .byte POCKET_BERRIES
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "PINAP BERRY$", 14
- .2byte ITEM_PINAP_BERRY
- .2byte 20 @ price
- .byte 0
- .byte 0
- .4byte gPinapBerryItemDescription
- .byte 0
- .byte 0
- .byte POCKET_BERRIES
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "POMEG BERRY$", 14
- .2byte ITEM_POMEG_BERRY
- .2byte 20 @ price
- .byte 0
- .byte 0
- .4byte gPomegBerryItemDescription
- .byte 0
- .byte 0
- .byte POCKET_BERRIES
- .byte 1
- .4byte ItemUseOutOfBattle_ReduceEV
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "KELPSY BERRY$", 14
- .2byte ITEM_KELPSY_BERRY
- .2byte 20 @ price
- .byte 0
- .byte 0
- .4byte gKelpsyBerryItemDescription
- .byte 0
- .byte 0
- .byte POCKET_BERRIES
- .byte 1
- .4byte ItemUseOutOfBattle_ReduceEV
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "QUALOT BERRY$", 14
- .2byte ITEM_QUALOT_BERRY
- .2byte 20 @ price
- .byte 0
- .byte 0
- .4byte gQualotBerryItemDescription
- .byte 0
- .byte 0
- .byte POCKET_BERRIES
- .byte 1
- .4byte ItemUseOutOfBattle_ReduceEV
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "HONDEW BERRY$", 14
- .2byte ITEM_HONDEW_BERRY
- .2byte 20 @ price
- .byte 0
- .byte 0
- .4byte gHondewBerryItemDescription
- .byte 0
- .byte 0
- .byte POCKET_BERRIES
- .byte 1
- .4byte ItemUseOutOfBattle_ReduceEV
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "GREPA BERRY$", 14
- .2byte ITEM_GREPA_BERRY
- .2byte 20 @ price
- .byte 0
- .byte 0
- .4byte gGrepaBerryItemDescription
- .byte 0
- .byte 0
- .byte POCKET_BERRIES
- .byte 1
- .4byte ItemUseOutOfBattle_ReduceEV
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "TAMATO BERRY$", 14
- .2byte ITEM_TAMATO_BERRY
- .2byte 20 @ price
- .byte 0
- .byte 0
- .4byte gTamatoBerryItemDescription
- .byte 0
- .byte 0
- .byte POCKET_BERRIES
- .byte 1
- .4byte ItemUseOutOfBattle_ReduceEV
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "CORNN BERRY$", 14
- .2byte ITEM_CORNN_BERRY
- .2byte 20 @ price
- .byte 0
- .byte 0
- .4byte gCornnBerryItemDescription
- .byte 0
- .byte 0
- .byte POCKET_BERRIES
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "MAGOST BERRY$", 14
- .2byte ITEM_MAGOST_BERRY
- .2byte 20 @ price
- .byte 0
- .byte 0
- .4byte gMagostBerryItemDescription
- .byte 0
- .byte 0
- .byte POCKET_BERRIES
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "RABUTA BERRY$", 14
- .2byte ITEM_RABUTA_BERRY
- .2byte 20 @ price
- .byte 0
- .byte 0
- .4byte gRabutaBerryItemDescription
- .byte 0
- .byte 0
- .byte POCKET_BERRIES
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "NOMEL BERRY$", 14
- .2byte ITEM_NOMEL_BERRY
- .2byte 20 @ price
- .byte 0
- .byte 0
- .4byte gNomelBerryItemDescription
- .byte 0
- .byte 0
- .byte POCKET_BERRIES
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "SPELON BERRY$", 14
- .2byte ITEM_SPELON_BERRY
- .2byte 20 @ price
- .byte 0
- .byte 0
- .4byte gSpelonBerryItemDescription
- .byte 0
- .byte 0
- .byte POCKET_BERRIES
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "PAMTRE BERRY$", 14
- .2byte ITEM_PAMTRE_BERRY
- .2byte 20 @ price
- .byte 0
- .byte 0
- .4byte gPamtreBerryItemDescription
- .byte 0
- .byte 0
- .byte POCKET_BERRIES
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "WATMEL BERRY$", 14
- .2byte ITEM_WATMEL_BERRY
- .2byte 20 @ price
- .byte 0
- .byte 0
- .4byte gWatmelBerryItemDescription
- .byte 0
- .byte 0
- .byte POCKET_BERRIES
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "DURIN BERRY$", 14
- .2byte ITEM_DURIN_BERRY
- .2byte 20 @ price
- .byte 0
- .byte 0
- .4byte gDurinBerryItemDescription
- .byte 0
- .byte 0
- .byte POCKET_BERRIES
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "BELUE BERRY$", 14
- .2byte ITEM_BELUE_BERRY
- .2byte 20 @ price
- .byte 0
- .byte 0
- .4byte gBelueBerryItemDescription
- .byte 0
- .byte 0
- .byte POCKET_BERRIES
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "LIECHI BERRY$", 14
- .2byte ITEM_LIECHI_BERRY
- .2byte 20 @ price
- .byte 15
- .byte 4
- .4byte gLiechiBerryItemDescription
- .byte 0
- .byte 0
- .byte POCKET_BERRIES
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "GANLON BERRY$", 14
- .2byte ITEM_GANLON_BERRY
- .2byte 20 @ price
- .byte 16
- .byte 4
- .4byte gGanlonBerryItemDescription
- .byte 0
- .byte 0
- .byte POCKET_BERRIES
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "SALAC BERRY$", 14
- .2byte ITEM_SALAC_BERRY
- .2byte 20 @ price
- .byte 17
- .byte 4
- .4byte gSalacBerryItemDescription
- .byte 0
- .byte 0
- .byte POCKET_BERRIES
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "PETAYA BERRY$", 14
- .2byte ITEM_PETAYA_BERRY
- .2byte 20 @ price
- .byte 18
- .byte 4
- .4byte gPetayaBerryItemDescription
- .byte 0
- .byte 0
- .byte POCKET_BERRIES
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "APICOT BERRY$", 14
- .2byte ITEM_APICOT_BERRY
- .2byte 20 @ price
- .byte 19
- .byte 4
- .4byte gApicotBerryItemDescription
- .byte 0
- .byte 0
- .byte POCKET_BERRIES
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "LANSAT BERRY$", 14
- .2byte ITEM_LANSAT_BERRY
- .2byte 20 @ price
- .byte 20
- .byte 4
- .4byte gLansatBerryItemDescription
- .byte 0
- .byte 0
- .byte POCKET_BERRIES
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "STARF BERRY$", 14
- .2byte ITEM_STARF_BERRY
- .2byte 20 @ price
- .byte 21
- .byte 4
- .4byte gStarfBerryItemDescription
- .byte 0
- .byte 0
- .byte POCKET_BERRIES
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "ENIGMA BERRY$", 14
- .2byte ITEM_ENIGMA_BERRY
- .2byte 20 @ price
- .byte 0
- .byte 0
- .4byte gEnigmaBerryItemDescription
- .byte 0
- .byte 0
- .byte POCKET_BERRIES
- .byte 4
- .4byte ItemUseOutOfBattle_EnigmaBerry
- .4byte 1
- .4byte ItemUseInBattle_EnigmaBerry
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "BRIGHTPOWDER$", 14
- .2byte ITEM_BRIGHT_POWDER
- .2byte 10 @ price
- .byte 22
- .byte 10
- .4byte gBrightPowderItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "WHITE HERB$", 14
- .2byte ITEM_WHITE_HERB
- .2byte 100 @ price
- .byte 23
- .byte 0
- .4byte gWhiteHerbItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "MACHO BRACE$", 14
- .2byte ITEM_MACHO_BRACE
- .2byte 3000 @ price
- .byte 24
- .byte 0
- .4byte gMachoBraceItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "EXP. SHARE$", 14
- .2byte ITEM_EXP_SHARE
- .2byte 3000 @ price
- .byte 25
- .byte 0
- .4byte gExpShareItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "QUICK CLAW$", 14
- .2byte ITEM_QUICK_CLAW
- .2byte 100 @ price
- .byte 26
- .byte 20
- .4byte gQuickClawItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "SOOTHE BELL$", 14
- .2byte ITEM_SOOTHE_BELL
- .2byte 100 @ price
- .byte 27
- .byte 0
- .4byte gSootheBellItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "MENTAL HERB$", 14
- .2byte ITEM_MENTAL_HERB
- .2byte 100 @ price
- .byte 28
- .byte 0
- .4byte gMentalHerbItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "CHOICE BAND$", 14
- .2byte ITEM_CHOICE_BAND
- .2byte 100 @ price
- .byte 29
- .byte 0
- .4byte gChoiceBandItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "KING’S ROCK$", 14
- .2byte ITEM_KINGS_ROCK
- .2byte 100 @ price
- .byte 30
- .byte 10
- .4byte gKingsRockItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "SILVERPOWDER$", 14
- .2byte ITEM_SILVER_POWDER
- .2byte 100 @ price
- .byte 31
- .byte 10
- .4byte gSilverPowderItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "AMULET COIN$", 14
- .2byte ITEM_AMULET_COIN
- .2byte 100 @ price
- .byte 32
- .byte 10
- .4byte gAmuletCoinItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "CLEANSE TAG$", 14
- .2byte ITEM_CLEANSE_TAG
- .2byte 200 @ price
- .byte 33
- .byte 0
- .4byte gCleanseTagItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "SOUL DEW$", 14
- .2byte ITEM_SOUL_DEW
- .2byte 200 @ price
- .byte 34
- .byte 0
- .4byte gSoulDewItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "DEEPSEATOOTH$", 14
- .2byte ITEM_DEEP_SEA_TOOTH
- .2byte 200 @ price
- .byte 35
- .byte 0
- .4byte gDeepSeaToothItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "DEEPSEASCALE$", 14
- .2byte ITEM_DEEP_SEA_SCALE
- .2byte 200 @ price
- .byte 36
- .byte 0
- .4byte gDeepSeaScaleItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "SMOKE BALL$", 14
- .2byte ITEM_SMOKE_BALL
- .2byte 200 @ price
- .byte 37
- .byte 0
- .4byte gSmokeBallItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "EVERSTONE$", 14
- .2byte ITEM_EVERSTONE
- .2byte 200 @ price
- .byte 38
- .byte 0
- .4byte gEverstoneItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "FOCUS BAND$", 14
- .2byte ITEM_FOCUS_BAND
- .2byte 200 @ price
- .byte 39
- .byte 10
- .4byte gFocusBandItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "LUCKY EGG$", 14
- .2byte ITEM_LUCKY_EGG
- .2byte 200 @ price
- .byte 40
- .byte 0
- .4byte gLuckyEggItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "SCOPE LENS$", 14
- .2byte ITEM_SCOPE_LENS
- .2byte 200 @ price
- .byte 41
- .byte 0
- .4byte gScopeLensItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "METAL COAT$", 14
- .2byte ITEM_METAL_COAT
- .2byte 100 @ price
- .byte 42
- .byte 10
- .4byte gMetalCoatItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "LEFTOVERS$", 14
- .2byte ITEM_LEFTOVERS
- .2byte 200 @ price
- .byte 43
- .byte 10
- .4byte gLeftoversItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "DRAGON SCALE$", 14
- .2byte ITEM_DRAGON_SCALE
- .2byte 2100 @ price
- .byte 44
- .byte 10
- .4byte gDragonScaleItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "LIGHT BALL$", 14
- .2byte ITEM_LIGHT_BALL
- .2byte 100 @ price
- .byte 45
- .byte 0
- .4byte gLightBallItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "SOFT SAND$", 14
- .2byte ITEM_SOFT_SAND
- .2byte 100 @ price
- .byte 46
- .byte 10
- .4byte gSoftSandItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "HARD STONE$", 14
- .2byte ITEM_HARD_STONE
- .2byte 100 @ price
- .byte 47
- .byte 10
- .4byte gHardStoneItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "MIRACLE SEED$", 14
- .2byte ITEM_MIRACLE_SEED
- .2byte 100 @ price
- .byte 48
- .byte 10
- .4byte gMiracleSeedItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "BLACKGLASSES$", 14
- .2byte ITEM_BLACK_GLASSES
- .2byte 100 @ price
- .byte 49
- .byte 10
- .4byte gBlackGlassesItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "BLACK BELT$", 14
- .2byte ITEM_BLACK_BELT
- .2byte 100 @ price
- .byte 50
- .byte 10
- .4byte gBlackBeltItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "MAGNET$", 14
- .2byte ITEM_MAGNET
- .2byte 100 @ price
- .byte 51
- .byte 10
- .4byte gMagnetItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "MYSTIC WATER$", 14
- .2byte ITEM_MYSTIC_WATER
- .2byte 100 @ price
- .byte 52
- .byte 10
- .4byte gMysticWaterItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "SHARP BEAK$", 14
- .2byte ITEM_SHARP_BEAK
- .2byte 100 @ price
- .byte 53
- .byte 10
- .4byte gSharpBeakItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "POISON BARB$", 14
- .2byte ITEM_POISON_BARB
- .2byte 100 @ price
- .byte 54
- .byte 10
- .4byte gPoisonBarbItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "NEVERMELTICE$", 14
- .2byte ITEM_NEVER_MELT_ICE
- .2byte 100 @ price
- .byte 55
- .byte 10
- .4byte gNeverMeltIceItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "SPELL TAG$", 14
- .2byte ITEM_SPELL_TAG
- .2byte 100 @ price
- .byte 56
- .byte 10
- .4byte gSpellTagItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "TWISTEDSPOON$", 14
- .2byte ITEM_TWISTED_SPOON
- .2byte 100 @ price
- .byte 57
- .byte 10
- .4byte gTwistedSpoonItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "CHARCOAL$", 14
- .2byte ITEM_CHARCOAL
- .2byte 9800 @ price
- .byte 58
- .byte 10
- .4byte gCharcoalItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "DRAGON FANG$", 14
- .2byte ITEM_DRAGON_FANG
- .2byte 100 @ price
- .byte 59
- .byte 10
- .4byte gDragonFangItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "SILK SCARF$", 14
- .2byte ITEM_SILK_SCARF
- .2byte 100 @ price
- .byte 60
- .byte 10
- .4byte gSilkScarfItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "UP-GRADE$", 14
- .2byte ITEM_UP_GRADE
- .2byte 2100 @ price
- .byte 61
- .byte 0
- .4byte gUpGradeItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "SHELL BELL$", 14
- .2byte ITEM_SHELL_BELL
- .2byte 200 @ price
- .byte 62
- .byte 8
- .4byte gShellBellItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "SEA INCENSE$", 14
- .2byte ITEM_SEA_INCENSE
- .2byte 9600 @ price
- .byte 52
- .byte 5
- .4byte gSeaIncenseItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "LAX INCENSE$", 14
- .2byte ITEM_LAX_INCENSE
- .2byte 9600 @ price
- .byte 22
- .byte 5
- .4byte gLaxIncenseItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "LUCKY PUNCH$", 14
- .2byte ITEM_LUCKY_PUNCH
- .2byte 10 @ price
- .byte 63
- .byte 0
- .4byte gLuckyPunchItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "METAL POWDER$", 14
- .2byte ITEM_METAL_POWDER
- .2byte 10 @ price
- .byte 64
- .byte 0
- .4byte gMetalPowderItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "THICK CLUB$", 14
- .2byte ITEM_THICK_CLUB
- .2byte 500 @ price
- .byte 65
- .byte 0
- .4byte gThickClubItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "STICK$", 14
- .2byte ITEM_STICK
- .2byte 200 @ price
- .byte 66
- .byte 0
- .4byte gStickItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "RED SCARF$", 14
- .2byte ITEM_RED_SCARF
- .2byte 100 @ price
- .byte 0
- .byte 0
- .4byte gRedScarfItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "BLUE SCARF$", 14
- .2byte ITEM_BLUE_SCARF
- .2byte 100 @ price
- .byte 0
- .byte 0
- .4byte gBlueScarfItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "PINK SCARF$", 14
- .2byte ITEM_PINK_SCARF
- .2byte 100 @ price
- .byte 0
- .byte 0
- .4byte gPinkScarfItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "GREEN SCARF$", 14
- .2byte ITEM_GREEN_SCARF
- .2byte 100 @ price
- .byte 0
- .byte 0
- .4byte gGreenScarfItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "YELLOW SCARF$", 14
- .2byte ITEM_YELLOW_SCARF
- .2byte 100 @ price
- .byte 0
- .byte 0
- .4byte gYellowScarfItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "MACH BIKE$", 14
- .2byte ITEM_MACH_BIKE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gMachBikeItemDescription
- .byte 1
- .byte 1
- .byte BAG_KEYITEMS
- .byte 2
- .4byte ItemUseOutOfBattle_Bike
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "COIN CASE$", 14
- .2byte ITEM_COIN_CASE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gCoinCaseItemDescription
- .byte 1
- .byte 0
- .byte BAG_KEYITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CoinCase
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "ITEMFINDER$", 14
- .2byte ITEM_ITEMFINDER
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gItemfinderItemDescription
- .byte 1
- .byte 1
- .byte BAG_KEYITEMS
- .byte 2
- .4byte ItemUseOutOfBattle_Itemfinder
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "OLD ROD$", 14
- .2byte ITEM_OLD_ROD
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gOldRodItemDescription
- .byte 1
- .byte 1
- .byte BAG_KEYITEMS
- .byte 2
- .4byte ItemUseOutOfBattle_Rod
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "GOOD ROD$", 14
- .2byte ITEM_GOOD_ROD
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gGoodRodItemDescription
- .byte 1
- .byte 1
- .byte BAG_KEYITEMS
- .byte 2
- .4byte ItemUseOutOfBattle_Rod
- .4byte 0
- .4byte NULL
- .4byte 1
-
- .string "SUPER ROD$", 14
- .2byte ITEM_SUPER_ROD
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gSuperRodItemDescription
- .byte 1
- .byte 1
- .byte BAG_KEYITEMS
- .byte 2
- .4byte ItemUseOutOfBattle_Rod
- .4byte 0
- .4byte NULL
- .4byte 2
-
- .string "S.S. TICKET$", 14
- .2byte ITEM_SS_TICKET
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gSSTicketItemDescription
- .byte 1
- .byte 0
- .byte BAG_KEYITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "CONTEST PASS$", 14
- .2byte ITEM_CONTEST_PASS
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gContestPassItemDescription
- .byte 1
- .byte 0
- .byte BAG_KEYITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "WAILMER PAIL$", 14
- .2byte ITEM_WAILMER_PAIL
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gWailmerPailItemDescription
- .byte 1
- .byte 0
- .byte BAG_KEYITEMS
- .byte 2
- .4byte ItemUseOutOfBattle_WailmerPail
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "DEVON GOODS$", 14
- .2byte ITEM_DEVON_GOODS
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDevonGoodsItemDescription
- .byte 2
- .byte 0
- .byte BAG_KEYITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "SOOT SACK$", 14
- .2byte ITEM_SOOT_SACK
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gSootSackItemDescription
- .byte 1
- .byte 0
- .byte BAG_KEYITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "BASEMENT KEY$", 14
- .2byte ITEM_BASEMENT_KEY
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gBasementKeyItemDescription
- .byte 1
- .byte 0
- .byte BAG_KEYITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "ACRO BIKE$", 14
- .2byte ITEM_ACRO_BIKE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gAcroBikeItemDescription
- .byte 1
- .byte 1
- .byte BAG_KEYITEMS
- .byte 2
- .4byte ItemUseOutOfBattle_Bike
- .4byte 0
- .4byte NULL
- .4byte 1
-
- .string "{POKEBLOCK} CASE$", 14
- .2byte ITEM_POKEBLOCK_CASE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gPokeblockCaseItemDescription
- .byte 1
- .byte 1
- .byte BAG_KEYITEMS
- .byte 3
- .4byte ItemUseOutOfBattle_PokeblockCase
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "LETTER$", 14
- .2byte ITEM_LETTER
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gLetterItemDescription
- .byte 2
- .byte 0
- .byte BAG_KEYITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "EON TICKET$", 14
- .2byte ITEM_EON_TICKET
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gEonTicketItemDescription
- .byte 1
- .byte 0
- .byte BAG_KEYITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 1
-
- .string "RED ORB$", 14
- .2byte ITEM_RED_ORB
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gRedOrbItemDescription
- .byte 2
- .byte 0
- .byte BAG_KEYITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "BLUE ORB$", 14
- .2byte ITEM_BLUE_ORB
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gBlueOrbItemDescription
- .byte 2
- .byte 0
- .byte BAG_KEYITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "SCANNER$", 14
- .2byte ITEM_SCANNER
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gScannerItemDescription
- .byte 1
- .byte 0
- .byte BAG_KEYITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "GO-GOGGLES$", 14
- .2byte ITEM_GO_GOGGLES
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gGoGogglesItemDescription
- .byte 1
- .byte 0
- .byte BAG_KEYITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "METEORITE$", 14
- .2byte ITEM_METEORITE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gMeteoriteItemDescription
- .byte 1
- .byte 0
- .byte BAG_KEYITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "RM. 1 KEY$", 14
- .2byte ITEM_ROOM_1_KEY
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gRoom1KeyItemDescription
- .byte 1
- .byte 0
- .byte BAG_KEYITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "RM. 2 KEY$", 14
- .2byte ITEM_ROOM_2_KEY
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gRoom2KeyItemDescription
- .byte 1
- .byte 0
- .byte BAG_KEYITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "RM. 4 KEY$", 14
- .2byte ITEM_ROOM_4_KEY
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gRoom4KeyItemDescription
- .byte 1
- .byte 0
- .byte BAG_KEYITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "RM. 6 KEY$", 14
- .2byte ITEM_ROOM_6_KEY
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gRoom6KeyItemDescription
- .byte 1
- .byte 0
- .byte BAG_KEYITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "STORAGE KEY$", 14
- .2byte ITEM_STORAGE_KEY
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gStorageKeyItemDescription
- .byte 1
- .byte 0
- .byte BAG_KEYITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "ROOT FOSSIL$", 14
- .2byte ITEM_ROOT_FOSSIL
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gRootFossilItemDescription
- .byte 1
- .byte 0
- .byte BAG_KEYITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "CLAW FOSSIL$", 14
- .2byte ITEM_CLAW_FOSSIL
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gClawFossilItemDescription
- .byte 1
- .byte 0
- .byte BAG_KEYITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "DEVON SCOPE$", 14
- .2byte ITEM_DEVON_SCOPE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDevonScopeItemDescription
- .byte 1
- .byte 0
- .byte BAG_KEYITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "TM01$", 14
- .2byte ITEM_TM01
- .2byte 3000 @ price
- .byte 0
- .byte 0
- .4byte gTM01ItemDescription
- .byte 0
- .byte 0
- .byte POCKET_TM_HM
- .byte 1
- .4byte ItemUseOutOfBattle_TMHM
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "TM02$", 14
- .2byte ITEM_TM02
- .2byte 3000 @ price
- .byte 0
- .byte 0
- .4byte gTM02ItemDescription
- .byte 0
- .byte 0
- .byte POCKET_TM_HM
- .byte 1
- .4byte ItemUseOutOfBattle_TMHM
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "TM03$", 14
- .2byte ITEM_TM03
- .2byte 3000 @ price
- .byte 0
- .byte 0
- .4byte gTM03ItemDescription
- .byte 0
- .byte 0
- .byte POCKET_TM_HM
- .byte 1
- .4byte ItemUseOutOfBattle_TMHM
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "TM04$", 14
- .2byte ITEM_TM04
- .2byte 3000 @ price
- .byte 0
- .byte 0
- .4byte gTM04ItemDescription
- .byte 0
- .byte 0
- .byte POCKET_TM_HM
- .byte 1
- .4byte ItemUseOutOfBattle_TMHM
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "TM05$", 14
- .2byte ITEM_TM05
- .2byte 1000 @ price
- .byte 0
- .byte 0
- .4byte gTM05ItemDescription
- .byte 0
- .byte 0
- .byte POCKET_TM_HM
- .byte 1
- .4byte ItemUseOutOfBattle_TMHM
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "TM06$", 14
- .2byte ITEM_TM06
- .2byte 3000 @ price
- .byte 0
- .byte 0
- .4byte gTM06ItemDescription
- .byte 0
- .byte 0
- .byte POCKET_TM_HM
- .byte 1
- .4byte ItemUseOutOfBattle_TMHM
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "TM07$", 14
- .2byte ITEM_TM07
- .2byte 3000 @ price
- .byte 0
- .byte 0
- .4byte gTM07ItemDescription
- .byte 0
- .byte 0
- .byte POCKET_TM_HM
- .byte 1
- .4byte ItemUseOutOfBattle_TMHM
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "TM08$", 14
- .2byte ITEM_TM08
- .2byte 3000 @ price
- .byte 0
- .byte 0
- .4byte gTM08ItemDescription
- .byte 0
- .byte 0
- .byte POCKET_TM_HM
- .byte 1
- .4byte ItemUseOutOfBattle_TMHM
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "TM09$", 14
- .2byte ITEM_TM09
- .2byte 3000 @ price
- .byte 0
- .byte 0
- .4byte gTM09ItemDescription
- .byte 0
- .byte 0
- .byte POCKET_TM_HM
- .byte 1
- .4byte ItemUseOutOfBattle_TMHM
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "TM10$", 14
- .2byte ITEM_TM10
- .2byte 3000 @ price
- .byte 0
- .byte 0
- .4byte gTM10ItemDescription
- .byte 0
- .byte 0
- .byte POCKET_TM_HM
- .byte 1
- .4byte ItemUseOutOfBattle_TMHM
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "TM11$", 14
- .2byte ITEM_TM11
- .2byte 2000 @ price
- .byte 0
- .byte 0
- .4byte gTM11ItemDescription
- .byte 0
- .byte 0
- .byte POCKET_TM_HM
- .byte 1
- .4byte ItemUseOutOfBattle_TMHM
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "TM12$", 14
- .2byte ITEM_TM12
- .2byte 3000 @ price
- .byte 0
- .byte 0
- .4byte gTM12ItemDescription
- .byte 0
- .byte 0
- .byte POCKET_TM_HM
- .byte 1
- .4byte ItemUseOutOfBattle_TMHM
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "TM13$", 14
- .2byte ITEM_TM13
- .2byte 3000 @ price
- .byte 0
- .byte 0
- .4byte gTM13ItemDescription
- .byte 0
- .byte 0
- .byte POCKET_TM_HM
- .byte 1
- .4byte ItemUseOutOfBattle_TMHM
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "TM14$", 14
- .2byte ITEM_TM14
- .2byte 5500 @ price
- .byte 0
- .byte 0
- .4byte gTM14ItemDescription
- .byte 0
- .byte 0
- .byte POCKET_TM_HM
- .byte 1
- .4byte ItemUseOutOfBattle_TMHM
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "TM15$", 14
- .2byte ITEM_TM15
- .2byte 7500 @ price
- .byte 0
- .byte 0
- .4byte gTM15ItemDescription
- .byte 0
- .byte 0
- .byte POCKET_TM_HM
- .byte 1
- .4byte ItemUseOutOfBattle_TMHM
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "TM16$", 14
- .2byte ITEM_TM16
- .2byte 3000 @ price
- .byte 0
- .byte 0
- .4byte gTM16ItemDescription
- .byte 0
- .byte 0
- .byte POCKET_TM_HM
- .byte 1
- .4byte ItemUseOutOfBattle_TMHM
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "TM17$", 14
- .2byte ITEM_TM17
- .2byte 3000 @ price
- .byte 0
- .byte 0
- .4byte gTM17ItemDescription
- .byte 0
- .byte 0
- .byte POCKET_TM_HM
- .byte 1
- .4byte ItemUseOutOfBattle_TMHM
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "TM18$", 14
- .2byte ITEM_TM18
- .2byte 2000 @ price
- .byte 0
- .byte 0
- .4byte gTM18ItemDescription
- .byte 0
- .byte 0
- .byte POCKET_TM_HM
- .byte 1
- .4byte ItemUseOutOfBattle_TMHM
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "TM19$", 14
- .2byte ITEM_TM19
- .2byte 3000 @ price
- .byte 0
- .byte 0
- .4byte gTM19ItemDescription
- .byte 0
- .byte 0
- .byte POCKET_TM_HM
- .byte 1
- .4byte ItemUseOutOfBattle_TMHM
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "TM20$", 14
- .2byte ITEM_TM20
- .2byte 3000 @ price
- .byte 0
- .byte 0
- .4byte gTM20ItemDescription
- .byte 0
- .byte 0
- .byte POCKET_TM_HM
- .byte 1
- .4byte ItemUseOutOfBattle_TMHM
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "TM21$", 14
- .2byte ITEM_TM21
- .2byte 1000 @ price
- .byte 0
- .byte 0
- .4byte gTM21ItemDescription
- .byte 0
- .byte 0
- .byte POCKET_TM_HM
- .byte 1
- .4byte ItemUseOutOfBattle_TMHM
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "TM22$", 14
- .2byte ITEM_TM22
- .2byte 3000 @ price
- .byte 0
- .byte 0
- .4byte gTM22ItemDescription
- .byte 0
- .byte 0
- .byte POCKET_TM_HM
- .byte 1
- .4byte ItemUseOutOfBattle_TMHM
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "TM23$", 14
- .2byte ITEM_TM23
- .2byte 3000 @ price
- .byte 0
- .byte 0
- .4byte gTM23ItemDescription
- .byte 0
- .byte 0
- .byte POCKET_TM_HM
- .byte 1
- .4byte ItemUseOutOfBattle_TMHM
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "TM24$", 14
- .2byte ITEM_TM24
- .2byte 3000 @ price
- .byte 0
- .byte 0
- .4byte gTM24ItemDescription
- .byte 0
- .byte 0
- .byte POCKET_TM_HM
- .byte 1
- .4byte ItemUseOutOfBattle_TMHM
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "TM25$", 14
- .2byte ITEM_TM25
- .2byte 5500 @ price
- .byte 0
- .byte 0
- .4byte gTM25ItemDescription
- .byte 0
- .byte 0
- .byte POCKET_TM_HM
- .byte 1
- .4byte ItemUseOutOfBattle_TMHM
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "TM26$", 14
- .2byte ITEM_TM26
- .2byte 3000 @ price
- .byte 0
- .byte 0
- .4byte gTM26ItemDescription
- .byte 0
- .byte 0
- .byte POCKET_TM_HM
- .byte 1
- .4byte ItemUseOutOfBattle_TMHM
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "TM27$", 14
- .2byte ITEM_TM27
- .2byte 1000 @ price
- .byte 0
- .byte 0
- .4byte gTM27ItemDescription
- .byte 0
- .byte 0
- .byte POCKET_TM_HM
- .byte 1
- .4byte ItemUseOutOfBattle_TMHM
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "TM28$", 14
- .2byte ITEM_TM28
- .2byte 2000 @ price
- .byte 0
- .byte 0
- .4byte gTM28ItemDescription
- .byte 0
- .byte 0
- .byte POCKET_TM_HM
- .byte 1
- .4byte ItemUseOutOfBattle_TMHM
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "TM29$", 14
- .2byte ITEM_TM29
- .2byte 2000 @ price
- .byte 0
- .byte 0
- .4byte gTM29ItemDescription
- .byte 0
- .byte 0
- .byte POCKET_TM_HM
- .byte 1
- .4byte ItemUseOutOfBattle_TMHM
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "TM30$", 14
- .2byte ITEM_TM30
- .2byte 3000 @ price
- .byte 0
- .byte 0
- .4byte gTM30ItemDescription
- .byte 0
- .byte 0
- .byte POCKET_TM_HM
- .byte 1
- .4byte ItemUseOutOfBattle_TMHM
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "TM31$", 14
- .2byte ITEM_TM31
- .2byte 3000 @ price
- .byte 0
- .byte 0
- .4byte gTM31ItemDescription
- .byte 0
- .byte 0
- .byte POCKET_TM_HM
- .byte 1
- .4byte ItemUseOutOfBattle_TMHM
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "TM32$", 14
- .2byte ITEM_TM32
- .2byte 2000 @ price
- .byte 0
- .byte 0
- .4byte gTM32ItemDescription
- .byte 0
- .byte 0
- .byte POCKET_TM_HM
- .byte 1
- .4byte ItemUseOutOfBattle_TMHM
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "TM33$", 14
- .2byte ITEM_TM33
- .2byte 3000 @ price
- .byte 0
- .byte 0
- .4byte gTM33ItemDescription
- .byte 0
- .byte 0
- .byte POCKET_TM_HM
- .byte 1
- .4byte ItemUseOutOfBattle_TMHM
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "TM34$", 14
- .2byte ITEM_TM34
- .2byte 3000 @ price
- .byte 0
- .byte 0
- .4byte gTM34ItemDescription
- .byte 0
- .byte 0
- .byte POCKET_TM_HM
- .byte 1
- .4byte ItemUseOutOfBattle_TMHM
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "TM35$", 14
- .2byte ITEM_TM35
- .2byte 3000 @ price
- .byte 0
- .byte 0
- .4byte gTM35ItemDescription
- .byte 0
- .byte 0
- .byte POCKET_TM_HM
- .byte 1
- .4byte ItemUseOutOfBattle_TMHM
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "TM36$", 14
- .2byte ITEM_TM36
- .2byte 1000 @ price
- .byte 0
- .byte 0
- .4byte gTM36ItemDescription
- .byte 0
- .byte 0
- .byte POCKET_TM_HM
- .byte 1
- .4byte ItemUseOutOfBattle_TMHM
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "TM37$", 14
- .2byte ITEM_TM37
- .2byte 2000 @ price
- .byte 0
- .byte 0
- .4byte gTM37ItemDescription
- .byte 0
- .byte 0
- .byte POCKET_TM_HM
- .byte 1
- .4byte ItemUseOutOfBattle_TMHM
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "TM38$", 14
- .2byte ITEM_TM38
- .2byte 5500 @ price
- .byte 0
- .byte 0
- .4byte gTM38ItemDescription
- .byte 0
- .byte 0
- .byte POCKET_TM_HM
- .byte 1
- .4byte ItemUseOutOfBattle_TMHM
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "TM39$", 14
- .2byte ITEM_TM39
- .2byte 3000 @ price
- .byte 0
- .byte 0
- .4byte gTM39ItemDescription
- .byte 0
- .byte 0
- .byte POCKET_TM_HM
- .byte 1
- .4byte ItemUseOutOfBattle_TMHM
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "TM40$", 14
- .2byte ITEM_TM40
- .2byte 3000 @ price
- .byte 0
- .byte 0
- .4byte gTM40ItemDescription
- .byte 0
- .byte 0
- .byte POCKET_TM_HM
- .byte 1
- .4byte ItemUseOutOfBattle_TMHM
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "TM41$", 14
- .2byte ITEM_TM41
- .2byte 3000 @ price
- .byte 0
- .byte 0
- .4byte gTM41ItemDescription
- .byte 0
- .byte 0
- .byte POCKET_TM_HM
- .byte 1
- .4byte ItemUseOutOfBattle_TMHM
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "TM42$", 14
- .2byte ITEM_TM42
- .2byte 3000 @ price
- .byte 0
- .byte 0
- .4byte gTM42ItemDescription
- .byte 0
- .byte 0
- .byte POCKET_TM_HM
- .byte 1
- .4byte ItemUseOutOfBattle_TMHM
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "TM43$", 14
- .2byte ITEM_TM43
- .2byte 3000 @ price
- .byte 0
- .byte 0
- .4byte gTM43ItemDescription
- .byte 0
- .byte 0
- .byte POCKET_TM_HM
- .byte 1
- .4byte ItemUseOutOfBattle_TMHM
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "TM44$", 14
- .2byte ITEM_TM44
- .2byte 3000 @ price
- .byte 0
- .byte 0
- .4byte gTM44ItemDescription
- .byte 0
- .byte 0
- .byte POCKET_TM_HM
- .byte 1
- .4byte ItemUseOutOfBattle_TMHM
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "TM45$", 14
- .2byte ITEM_TM45
- .2byte 3000 @ price
- .byte 0
- .byte 0
- .4byte gTM45ItemDescription
- .byte 0
- .byte 0
- .byte POCKET_TM_HM
- .byte 1
- .4byte ItemUseOutOfBattle_TMHM
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "TM46$", 14
- .2byte ITEM_TM46
- .2byte 3000 @ price
- .byte 0
- .byte 0
- .4byte gTM46ItemDescription
- .byte 0
- .byte 0
- .byte POCKET_TM_HM
- .byte 1
- .4byte ItemUseOutOfBattle_TMHM
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "TM47$", 14
- .2byte ITEM_TM47
- .2byte 3000 @ price
- .byte 0
- .byte 0
- .4byte gTM47ItemDescription
- .byte 0
- .byte 0
- .byte POCKET_TM_HM
- .byte 1
- .4byte ItemUseOutOfBattle_TMHM
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "TM48$", 14
- .2byte ITEM_TM48
- .2byte 3000 @ price
- .byte 0
- .byte 0
- .4byte gTM48ItemDescription
- .byte 0
- .byte 0
- .byte POCKET_TM_HM
- .byte 1
- .4byte ItemUseOutOfBattle_TMHM
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "TM49$", 14
- .2byte ITEM_TM49
- .2byte 3000 @ price
- .byte 0
- .byte 0
- .4byte gTM49ItemDescription
- .byte 0
- .byte 0
- .byte POCKET_TM_HM
- .byte 1
- .4byte ItemUseOutOfBattle_TMHM
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "TM50$", 14
- .2byte ITEM_TM50
- .2byte 3000 @ price
- .byte 0
- .byte 0
- .4byte gTM50ItemDescription
- .byte 0
- .byte 0
- .byte POCKET_TM_HM
- .byte 1
- .4byte ItemUseOutOfBattle_TMHM
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "HM01$", 14
- .2byte ITEM_HM01
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gHM01ItemDescription
- .byte 1
- .byte 0
- .byte POCKET_TM_HM
- .byte 1
- .4byte ItemUseOutOfBattle_TMHM
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "HM02$", 14
- .2byte ITEM_HM02
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gHM02ItemDescription
- .byte 1
- .byte 0
- .byte POCKET_TM_HM
- .byte 1
- .4byte ItemUseOutOfBattle_TMHM
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "HM03$", 14
- .2byte ITEM_HM03
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gHM03ItemDescription
- .byte 1
- .byte 0
- .byte POCKET_TM_HM
- .byte 1
- .4byte ItemUseOutOfBattle_TMHM
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "HM04$", 14
- .2byte ITEM_HM04
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gHM04ItemDescription
- .byte 1
- .byte 0
- .byte POCKET_TM_HM
- .byte 1
- .4byte ItemUseOutOfBattle_TMHM
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "HM05$", 14
- .2byte ITEM_HM05
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gHM05ItemDescription
- .byte 1
- .byte 0
- .byte POCKET_TM_HM
- .byte 1
- .4byte ItemUseOutOfBattle_TMHM
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "HM06$", 14
- .2byte ITEM_HM06
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gHM06ItemDescription
- .byte 1
- .byte 0
- .byte POCKET_TM_HM
- .byte 1
- .4byte ItemUseOutOfBattle_TMHM
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "HM07$", 14
- .2byte ITEM_HM07
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gHM07ItemDescription
- .byte 1
- .byte 0
- .byte POCKET_TM_HM
- .byte 1
- .4byte ItemUseOutOfBattle_TMHM
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "HM08$", 14
- .2byte ITEM_HM08
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gHM08ItemDescription
- .byte 1
- .byte 0
- .byte POCKET_TM_HM
- .byte 1
- .4byte ItemUseOutOfBattle_TMHM
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "????????$", 14
- .2byte ITEM_NONE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDummyItemDescription
- .byte 0
- .byte 0
- .byte POCKET_ITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "OAK’S PARCEL$", 14
- .2byte ITEM_OAKS_PARCEL
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gOaksParcelItemDescription
- .byte 2
- .byte 0
- .byte BAG_KEYITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "POKé FLUTE$", 14
- .2byte ITEM_POKE_FLUTE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gPokeFluteItemDescription
- .byte 1
- .byte 0
- .byte BAG_KEYITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "SECRET KEY$", 14
- .2byte ITEM_SECRET_KEY
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gSecretKeyItemDescription
- .byte 1
- .byte 0
- .byte BAG_KEYITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "BIKE VOUCHER$", 14
- .2byte ITEM_BIKE_VOUCHER
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gBikeVoucherItemDescription
- .byte 1
- .byte 0
- .byte BAG_KEYITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "GOLD TEETH$", 14
- .2byte ITEM_GOLD_TEETH
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gGoldTeethItemDescription
- .byte 1
- .byte 0
- .byte BAG_KEYITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "OLD AMBER$", 14
- .2byte ITEM_OLD_AMBER
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gOldAmberItemDescription
- .byte 1
- .byte 0
- .byte BAG_KEYITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "CARD KEY$", 14
- .2byte ITEM_CARD_KEY
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gCardKeyItemDescription
- .byte 1
- .byte 0
- .byte BAG_KEYITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "LIFT KEY$", 14
- .2byte ITEM_LIFT_KEY
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gLiftKeyItemDescription
- .byte 1
- .byte 0
- .byte BAG_KEYITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "HELIX FOSSIL$", 14
- .2byte ITEM_HELIX_FOSSIL
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gHelixFossilItemDescription
- .byte 1
- .byte 0
- .byte BAG_KEYITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "DOME FOSSIL$", 14
- .2byte ITEM_DOME_FOSSIL
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gDomeFossilItemDescription
- .byte 1
- .byte 0
- .byte BAG_KEYITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "SILPH SCOPE$", 14
- .2byte ITEM_SILPH_SCOPE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gSilphScopeItemDescription
- .byte 1
- .byte 0
- .byte BAG_KEYITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "BICYCLE$", 14
- .2byte ITEM_BICYCLE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gBicycleItemDescription
- .byte 1
- .byte 1
- .byte BAG_KEYITEMS
- .byte 2
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "TOWN MAP$", 14
- .2byte ITEM_TOWN_MAP
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gTownMapItemDescription
- .byte 1
- .byte 1
- .byte BAG_KEYITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "VS SEEKER$", 14
- .2byte ITEM_VS_SEEKER
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gVSSeekerItemDescription
- .byte 1
- .byte 1
- .byte BAG_KEYITEMS
- .byte 2
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "FAME CHECKER$", 14
- .2byte ITEM_FAME_CHECKER
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gFameCheckerItemDescription
- .byte 1
- .byte 1
- .byte BAG_KEYITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "TM CASE$", 14
- .2byte ITEM_TM_CASE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gTMCaseItemDescription
- .byte 1
- .byte 1
- .byte BAG_KEYITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "BERRY POUCH$", 14
- .2byte ITEM_BERRY_POUCH
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gBerryPouchItemDescription
- .byte 1
- .byte 1
- .byte BAG_KEYITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "TEACHY TV$", 14
- .2byte ITEM_TEACHY_TV
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gTeachyTVItemDescription
- .byte 1
- .byte 1
- .byte BAG_KEYITEMS
- .byte 2
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "TRI-PASS$", 14
- .2byte ITEM_TRI_PASS
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gTriPassItemDescription
- .byte 1
- .byte 1
- .byte BAG_KEYITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "RAINBOW PASS$", 14
- .2byte ITEM_RAINBOW_PASS
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gRainbowPassItemDescription
- .byte 1
- .byte 1
- .byte BAG_KEYITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "TEA$", 14
- .2byte ITEM_TEA
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gTeaItemDescription
- .byte 1
- .byte 1
- .byte BAG_KEYITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "MYSTICTICKET$", 14
- .2byte ITEM_MYSTIC_TICKET
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gMysticTicketItemDescription
- .byte 1
- .byte 1
- .byte BAG_KEYITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "AURORATICKET$", 14
- .2byte ITEM_AURORA_TICKET
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gAuroraTicketItemDescription
- .byte 1
- .byte 1
- .byte BAG_KEYITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "POWDER JAR$", 14
- .2byte ITEM_POWDER_JAR
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gPowderJarItemDescription
- .byte 1
- .byte 1
- .byte BAG_KEYITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_PowderJar
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "RUBY$", 14
- .2byte ITEM_RUBY
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gRubyItemDescription
- .byte 1
- .byte 1
- .byte BAG_KEYITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "SAPPHIRE$", 14
- .2byte ITEM_SAPPHIRE
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gSapphireItemDescription
- .byte 1
- .byte 1
- .byte BAG_KEYITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "MAGMA EMBLEM$", 14
- .2byte ITEM_MAGMA_EMBLEM
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gMagmaEmblemItemDescription
- .byte 1
- .byte 1
- .byte BAG_KEYITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
-
- .string "OLD SEA MAP$", 14
- .2byte ITEM_OLD_SEA_MAP
- .2byte 0 @ price
- .byte 0
- .byte 0
- .4byte gOldSeaMapItemDescription
- .byte 1
- .byte 1
- .byte BAG_KEYITEMS
- .byte 4
- .4byte ItemUseOutOfBattle_CannotUse
- .4byte 0
- .4byte NULL
- .4byte 0
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/map_name_popup.s b/data/map_name_popup.s
deleted file mode 100644
index 7dc1da808..000000000
--- a/data/map_name_popup.s
+++ /dev/null
@@ -1,69 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
- .align 2, 0
-
-gMapPopUp_Table:: @ 857C684
- .incbin "graphics/interface/map_popup/wood.4bpp"
- .incbin "graphics/interface/map_popup/marble.4bpp"
- .incbin "graphics/interface/map_popup/stone.4bpp"
- .incbin "graphics/interface/map_popup/brick.4bpp"
- .incbin "graphics/interface/map_popup/underwater.4bpp"
- .incbin "graphics/interface/map_popup/stone2.4bpp"
-
-gMapPopUp_Outline_Table:: @ 857DD04
- .incbin "graphics/interface/map_popup/wood_outline.4bpp"
- .incbin "graphics/interface/map_popup/marble_outline.4bpp"
- .incbin "graphics/interface/map_popup/stone_outline.4bpp"
- .incbin "graphics/interface/map_popup/brick_outline.4bpp"
- .incbin "graphics/interface/map_popup/underwater_outline.4bpp"
- .incbin "graphics/interface/map_popup/stone2_outline.4bpp"
-
-gMapPopUp_Palette_Table:: @ 857F384
- .incbin "graphics/interface/map_popup/wood.gbapal"
- .incbin "graphics/interface/map_popup/marble.gbapal"
- .incbin "graphics/interface/map_popup/stone.gbapal"
- .incbin "graphics/interface/map_popup/brick.gbapal"
- .incbin "graphics/interface/map_popup/underwater.gbapal"
- .incbin "graphics/interface/map_popup/stone2.gbapal"
-
-gUnknown_0857F444:: @ 857F444
- .incbin "graphics/interface/map_popup/857F444.gbapal"
-
-gUnknown_0857F464:: @ 857F464
- .byte 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x01, 0x01, 0x01, 0x03, 0x01, 0x03, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x05, 0x05, 0x05, 0x05, 0x05, 0x02, 0x02, 0x00, 0x01, 0x00, 0x02, 0x00, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x05, 0x02, 0x00, 0x02, 0x00, 0x02, 0x02, 0x00, 0x00, 0x02, 0x05, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02, 0x01, 0x02, 0x02, 0x02, 0x00, 0x00, 0x02, 0x02, 0x05, 0x02, 0x05, 0x05, 0x05, 0x02, 0x02, 0x02, 0x01
-
-gUnknown_0857F4CC:: @ 857F4CC
- .string "PYRAMID FLOOR 1$"
-
-gUnknown_0857F4DC:: @ 857F4DC
- .string "PYRAMID FLOOR 2$"
-
-gUnknown_0857F4EC:: @ 857F4EC
- .string "PYRAMID FLOOR 3$"
-
-gUnknown_0857F4FC:: @ 857F4FC
- .string "PYRAMID FLOOR 4$"
-
-gUnknown_0857F50C:: @ 857F50C
- .string "PYRAMID FLOOR 5$"
-
-gUnknown_0857F51C:: @ 857F51C
- .string "PYRAMID FLOOR 6$"
-
-gUnknown_0857F52C:: @ 857F52C
- .string "PYRAMID FLOOR 7$"
-
-gUnknown_0857F53C:: @ 857F53C
- .string "PYRAMID$"
-
-gUnknown_0857F544:: @ 857F544
- .4byte gUnknown_0857F4CC
- .4byte gUnknown_0857F4DC
- .4byte gUnknown_0857F4EC
- .4byte gUnknown_0857F4FC
- .4byte gUnknown_0857F50C
- .4byte gUnknown_0857F51C
- .4byte gUnknown_0857F52C
- .4byte gUnknown_0857F53C
diff --git a/data/mauville_old_man.s b/data/mauville_old_man.s
deleted file mode 100644
index c1b4dd1be..000000000
--- a/data/mauville_old_man.s
+++ /dev/null
@@ -1,58 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
- .align 2, 0
-
-gUnknown_0859EFE4:: @ 859EFE4
- .2byte 0x2811, 0x1029, 0x1018, 0xE0D, 0x1A1A, 0x1A1D
-
-gUnknown_0859EFF0:: @ 859EFF0
- .4byte gText_SoPretty
- .4byte gText_SoDarling
- .4byte gText_SoRelaxed
- .4byte gText_SoSunny
- .4byte gText_SoDesirable
- .4byte gText_SoExciting
- .4byte gText_SoAmusing
- .4byte gText_SoMagical
-
-gUnknown_0859F010:: @ 859F010
- .4byte gUnknown_08294313
- .4byte gUnknown_08294359
- .4byte gUnknown_08294398
- .4byte gUnknown_082943DA
- .4byte gUnknown_0829441C
- .4byte gUnknown_08294460
- .4byte gUnknown_082944A0
- .4byte gUnknown_082944D5
-
-gUnknown_0859F030:: @ 859F030
- .4byte 0, 12, 13, 18, 19, 21
-
-gUnknown_0859F048:: @ 859F048
- .4byte 0x00000132, MauvilleCity_PokemonCenter_1F_Text_28E930, MauvilleCity_PokemonCenter_1F_Text_28E947, MauvilleCity_PokemonCenter_1F_Text_28E956, 0x00000102, MauvilleCity_PokemonCenter_1F_Text_28E9D7, MauvilleCity_PokemonCenter_1F_Text_28E9EF, MauvilleCity_PokemonCenter_1F_Text_28E9FE
- .4byte 0x00000103, MauvilleCity_PokemonCenter_1F_Text_28EA7D, MauvilleCity_PokemonCenter_1F_Text_28EA98, MauvilleCity_PokemonCenter_1F_Text_28EAA8, 0x00000104, MauvilleCity_PokemonCenter_1F_Text_28EB19, MauvilleCity_PokemonCenter_1F_Text_28EB31, MauvilleCity_PokemonCenter_1F_Text_28EB3E
- .4byte 0x00000106, MauvilleCity_PokemonCenter_1F_Text_28EBB5, MauvilleCity_PokemonCenter_1F_Text_28EBCD, MauvilleCity_PokemonCenter_1F_Text_28EBDD, 0x00000109, MauvilleCity_PokemonCenter_1F_Text_28EC60, MauvilleCity_PokemonCenter_1F_Text_28EC79, MauvilleCity_PokemonCenter_1F_Text_28EC81
- .4byte 0x0000010b, MauvilleCity_PokemonCenter_1F_Text_28ED04, MauvilleCity_PokemonCenter_1F_Text_28ED21, MauvilleCity_PokemonCenter_1F_Text_28ED30, 0x0000010c, MauvilleCity_PokemonCenter_1F_Text_28EDA1, MauvilleCity_PokemonCenter_1F_Text_28EDB5, MauvilleCity_PokemonCenter_1F_Text_28EDCF
- .4byte 0x0000010d, MauvilleCity_PokemonCenter_1F_Text_28EE45, MauvilleCity_PokemonCenter_1F_Text_28EE5D, MauvilleCity_PokemonCenter_1F_Text_28EE6A, 0x0000010e, MauvilleCity_PokemonCenter_1F_Text_28EEDD, MauvilleCity_PokemonCenter_1F_Text_28EEF1, MauvilleCity_PokemonCenter_1F_Text_28EF01
- .4byte 0x0000010f, MauvilleCity_PokemonCenter_1F_Text_28EF73, MauvilleCity_PokemonCenter_1F_Text_28EF95, MauvilleCity_PokemonCenter_1F_Text_28EFAA, 0x00000110, MauvilleCity_PokemonCenter_1F_Text_28F045, MauvilleCity_PokemonCenter_1F_Text_28F05A, MauvilleCity_PokemonCenter_1F_Text_28F071
- .4byte 0x00000111, MauvilleCity_PokemonCenter_1F_Text_28F0F3, MauvilleCity_PokemonCenter_1F_Text_28F10D, MauvilleCity_PokemonCenter_1F_Text_28F125, 0x00000112, MauvilleCity_PokemonCenter_1F_Text_28F1BE, MauvilleCity_PokemonCenter_1F_Text_28F1D5, MauvilleCity_PokemonCenter_1F_Text_28F1DE
- .4byte 0x00000113, MauvilleCity_PokemonCenter_1F_Text_28F24F, MauvilleCity_PokemonCenter_1F_Text_28F269, MauvilleCity_PokemonCenter_1F_Text_28F277, 0x00000114, MauvilleCity_PokemonCenter_1F_Text_28F2FC, MauvilleCity_PokemonCenter_1F_Text_28F314, MauvilleCity_PokemonCenter_1F_Text_28F32A
- .4byte 0x0000011a, MauvilleCity_PokemonCenter_1F_Text_28F3AD, MauvilleCity_PokemonCenter_1F_Text_28F3C6, MauvilleCity_PokemonCenter_1F_Text_28F3D2, 0x0000011b, MauvilleCity_PokemonCenter_1F_Text_28F44B, MauvilleCity_PokemonCenter_1F_Text_28F461, MauvilleCity_PokemonCenter_1F_Text_28F47C
- .4byte 0x0000011c, MauvilleCity_PokemonCenter_1F_Text_28F50C, MauvilleCity_PokemonCenter_1F_Text_28F51B, MauvilleCity_PokemonCenter_1F_Text_28F538, 0x0000021d, MauvilleCity_PokemonCenter_1F_Text_28F5BE, MauvilleCity_PokemonCenter_1F_Text_28F5D1, MauvilleCity_PokemonCenter_1F_Text_28F5F2
- .4byte 0x0000011e, MauvilleCity_PokemonCenter_1F_Text_28F678, MauvilleCity_PokemonCenter_1F_Text_28F694, MauvilleCity_PokemonCenter_1F_Text_28F6B4, 0x00000121, MauvilleCity_PokemonCenter_1F_Text_28F751, MauvilleCity_PokemonCenter_1F_Text_28F76A, MauvilleCity_PokemonCenter_1F_Text_28F776
- .4byte 0x00000124, MauvilleCity_PokemonCenter_1F_Text_28F7F6, MauvilleCity_PokemonCenter_1F_Text_28F811, MauvilleCity_PokemonCenter_1F_Text_28F822, 0x00000125, MauvilleCity_PokemonCenter_1F_Text_28F89C, MauvilleCity_PokemonCenter_1F_Text_28F8AF, MauvilleCity_PokemonCenter_1F_Text_28F8BC
- .4byte 0x00000126, MauvilleCity_PokemonCenter_1F_Text_28F92F, MauvilleCity_PokemonCenter_1F_Text_28F941, MauvilleCity_PokemonCenter_1F_Text_28F949, 0x00000127, MauvilleCity_PokemonCenter_1F_Text_28F9D1, MauvilleCity_PokemonCenter_1F_Text_28F9EA, MauvilleCity_PokemonCenter_1F_Text_28F9FD
- .4byte 0x00000128, MauvilleCity_PokemonCenter_1F_Text_28FA81, MauvilleCity_PokemonCenter_1F_Text_28FA99, MauvilleCity_PokemonCenter_1F_Text_28FAA7, 0x00000129, MauvilleCity_PokemonCenter_1F_Text_28FB1D, MauvilleCity_PokemonCenter_1F_Text_28FB35, MauvilleCity_PokemonCenter_1F_Text_28FB47
- .4byte 0x0000012a, MauvilleCity_PokemonCenter_1F_Text_28FBC4, MauvilleCity_PokemonCenter_1F_Text_28FBD9, MauvilleCity_PokemonCenter_1F_Text_28FBEA, 0x0000012b, MauvilleCity_PokemonCenter_1F_Text_28FC6B, MauvilleCity_PokemonCenter_1F_Text_28FC85, MauvilleCity_PokemonCenter_1F_Text_28FC98
- .4byte 0x0000012c, MauvilleCity_PokemonCenter_1F_Text_28FD1D, MauvilleCity_PokemonCenter_1F_Text_28FD35, MauvilleCity_PokemonCenter_1F_Text_28FD40, 0x0000012d, MauvilleCity_PokemonCenter_1F_Text_28FDA2, MauvilleCity_PokemonCenter_1F_Text_28FDBD, MauvilleCity_PokemonCenter_1F_Text_28FDCE
- .4byte 0x0000012e, MauvilleCity_PokemonCenter_1F_Text_28FE57, MauvilleCity_PokemonCenter_1F_Text_28FE72, MauvilleCity_PokemonCenter_1F_Text_28FE88, 0x0000012f, MauvilleCity_PokemonCenter_1F_Text_28FF0C, MauvilleCity_PokemonCenter_1F_Text_28FF27, MauvilleCity_PokemonCenter_1F_Text_28FF44
- .4byte 0x00000130, MauvilleCity_PokemonCenter_1F_Text_28FFDD, MauvilleCity_PokemonCenter_1F_Text_28FFFA, MauvilleCity_PokemonCenter_1F_Text_29000D
-
-
-gUnknown_0859F278:: @ 859F278
- .4byte 0x00000131, MauvilleCity_PokemonCenter_1F_Text_290097, MauvilleCity_PokemonCenter_1F_Text_2900B5, MauvilleCity_PokemonCenter_1F_Text_2900CB
-
-gUnknown_0859F288:: @ 859F288
- .4byte 0x00000024, 0x00000008
diff --git a/data/menu_helpers.s b/data/menu_helpers.s
deleted file mode 100644
index 25ca66485..000000000
--- a/data/menu_helpers.s
+++ /dev/null
@@ -1,37 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
- .align 2, 0
-
-gUnknown_0859F4E8:: @ 859F4E8
- .2byte 0x00
- .2byte 0x4000
- .2byte 0x00
- .2byte 0x00
-
-gUnknown_0859F4F0:: @ 859F4F0
- obj_image_anim_frame 0x00, 0x00
- obj_image_anim_end
-
-gUnknown_0859F4F8:: @ 859F4F8
- obj_image_anim_frame 0x04, 0x00
- obj_image_anim_end
-
-gUnknown_0859F500:: @ 859F500
- obj_image_anim_frame 0x00, 0x40
- obj_image_anim_end
-
-gUnknown_0859F508:: @ 859F508
- .4byte gUnknown_0859F4F0
- .4byte gUnknown_0859F4F8
- .4byte gUnknown_0859F500
-
-gUnknown_0859F514:: @ 859F514
- .4byte gBagSwapLineGfx, 0x6D0100
-
-gUnknown_0859F51C:: @ 859F51C
- .4byte gBagSwapLinePal, 0x6D
-
-gUnknown_0859F524:: @ 859F524
- spr_template 0x6D, 0x6D, gUnknown_0859F4E8, gUnknown_0859F508, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
diff --git a/data/mon_markings.s b/data/mon_markings.s
deleted file mode 100644
index 7d30c0012..000000000
--- a/data/mon_markings.s
+++ /dev/null
@@ -1,157 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
- .align 2, 0
-
-gUnknown_0859E65C:: @ 859E65C
- .incbin "graphics/misc/mon_markings.gbapal"
-
-gUnknown_0859E67C:: @ 859E67C
- .incbin "graphics/misc/mon_markings.4bpp"
-
-gUnknown_0859EE7C:: @ 859EE7C
- .2byte 0, 0xC000, 0, 0
-
-gUnknown_0859EE84:: @ 859EE84
- .2byte 0, 0, 0, 0
-
-gUnknown_0859EE8C:: @ 859EE8C
- .2byte 0, 5, -1, 0
-
-gUnknown_0859EE94:: @ 859EE94
- .2byte 1, 5, -1, 0
-
-gUnknown_0859EE9C:: @ 859EE9C
- .2byte 2, 5, -1, 0
-
-gUnknown_0859EEA4:: @ 859EEA4
- .2byte 3, 5, -1, 0
-
-gUnknown_0859EEAC:: @ 859EEAC
- .2byte 4, 5, -1, 0
-
-gUnknown_0859EEB4:: @ 859EEB4
- .2byte 5, 5, -1, 0
-
-gUnknown_0859EEBC:: @ 859EEBC
- .2byte 6, 5, -1, 0
-
-gUnknown_0859EEC4:: @ 859EEC4
- .2byte 7, 5, -1, 0
-
-gUnknown_0859EECC:: @ 859EECC
- .2byte 8, 5, -1, 0
-
-gUnknown_0859EED4:: @ 859EED4
- .2byte 9, 5, -1, 0
-
-gUnknown_0859EEDC:: @ 859EEDC
- .4byte gUnknown_0859EE8C
- .4byte gUnknown_0859EE94
- .4byte gUnknown_0859EE9C
- .4byte gUnknown_0859EEA4
- .4byte gUnknown_0859EEAC
- .4byte gUnknown_0859EEB4
- .4byte gUnknown_0859EEBC
- .4byte gUnknown_0859EEC4
- .4byte gUnknown_0859EECC
- .4byte gUnknown_0859EED4
-
-gUnknown_0859EF04:: @ 859EF04
- .2byte 0, 5, -1, 0
-
-gUnknown_0859EF0C:: @ 859EF0C
- .2byte 64, 5, -1, 0
-
-gUnknown_0859EF14:: @ 859EF14
- .4byte gUnknown_0859EF04
- .4byte gUnknown_0859EF0C
-
-gUnknown_0859EF1C:: @ 859EF1C
- .2byte 0x4000
- .2byte 0x4000
- .2byte 0
- .2byte 0
-
-gUnknown_0859EF24:: @ 859EF24
- obj_image_anim_frame 0, 5
- obj_image_anim_end
-
-gUnknown_0859EF2C:: @ 859EF2C
- obj_image_anim_frame 4, 5
- obj_image_anim_end
-
-gUnknown_0859EF34:: @ 859EF34
- obj_image_anim_frame 8, 5
- obj_image_anim_end
-
-gUnknown_0859EF3C:: @ 859EF3C
- obj_image_anim_frame 12, 5
- obj_image_anim_end
-
-gUnknown_0859EF44:: @ 859EF44
- obj_image_anim_frame 16, 5
- obj_image_anim_end
-
-gUnknown_0859EF4C:: @ 859EF4C
- obj_image_anim_frame 20, 5
- obj_image_anim_end
-
-gUnknown_0859EF54:: @ 859EF54
- obj_image_anim_frame 24, 5
- obj_image_anim_end
-
-gUnknown_0859EF5C:: @ 859EF5C
- obj_image_anim_frame 28, 5
- obj_image_anim_end
-
-gUnknown_0859EF64:: @ 859EF64
- obj_image_anim_frame 32, 5
- obj_image_anim_end
-
-gUnknown_0859EF6C:: @ 859EF6C
- obj_image_anim_frame 36, 5
- obj_image_anim_end
-
-gUnknown_0859EF74:: @ 859EF74
- obj_image_anim_frame 40, 5
- obj_image_anim_end
-
-gUnknown_0859EF7C:: @ 859EF7C
- obj_image_anim_frame 44, 5
- obj_image_anim_end
-
-gUnknown_0859EF84:: @ 859EF84
- obj_image_anim_frame 48, 5
- obj_image_anim_end
-
-gUnknown_0859EF8C:: @ 859EF8C
- obj_image_anim_frame 52, 5
- obj_image_anim_end
-
-gUnknown_0859EF94:: @ 859EF94
- obj_image_anim_frame 56, 5
- obj_image_anim_end
-
-gUnknown_0859EF9C:: @ 859EF9C
- obj_image_anim_frame 60, 5
- obj_image_anim_end
-
-gUnknown_0859EFA4:: @ 859EFA4
- .4byte gUnknown_0859EF24
- .4byte gUnknown_0859EF2C
- .4byte gUnknown_0859EF34
- .4byte gUnknown_0859EF3C
- .4byte gUnknown_0859EF44
- .4byte gUnknown_0859EF4C
- .4byte gUnknown_0859EF54
- .4byte gUnknown_0859EF5C
- .4byte gUnknown_0859EF64
- .4byte gUnknown_0859EF6C
- .4byte gUnknown_0859EF74
- .4byte gUnknown_0859EF7C
- .4byte gUnknown_0859EF84
- .4byte gUnknown_0859EF8C
- .4byte gUnknown_0859EF94
- .4byte gUnknown_0859EF9C
diff --git a/data/overworld.s b/data/overworld.s
deleted file mode 100644
index 186af6f44..000000000
--- a/data/overworld.s
+++ /dev/null
@@ -1,52 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
- .align 2, 0
-gUnknown_08339D3C:: @ 8339D3C
- .4byte 0xFFFFFF, 0xFFFFFFFF, 0x4B0, 0xE10, 0x4B0, 0x960, 0x32, 0x50, 0xFFFFFFD4, 0x2C
-
-gUnknown_08339D64:: @ 8339D64
- .4byte 0, 0
- .4byte 0, 1
- .4byte 0, -1
- .4byte -1, 0
- .4byte 1, 0
- .4byte -1, 1
- .4byte 1, 1
- .4byte -1, -1
- .4byte 1, -1
-
-gUnknown_08339DAC:: @ 8339DAC
- .4byte 0x1F8
- .4byte 0x11D1
- .4byte 0x21C2
- .4byte 0x31E3
-
-gUnknown_08339DBC:: @ 8339DBC
- .4byte REG_WIN0H
- .4byte 0xa2600001
- .byte 1, 0
-
- .align 2
-gUnknown_08339DC8:: @ 8339DC8
- .4byte sub_80879D8
- .4byte sub_80879F8
- .4byte sub_80879FC
-
-gUnknown_08339DD4:: @ 8339DD4
- .4byte sub_8087A1C
- .4byte sub_8087A20
- .4byte sub_8087A20
- .4byte sub_8087A20
- .4byte sub_8087A20
- .4byte sub_8087A1C
- .4byte sub_8087A1C
- .4byte sub_8087A88
- .4byte sub_8087A88
- .4byte sub_8087A88
- .4byte sub_8087A88
-
-gUnknown_08339E00:: @ 8339E00
- .4byte sub_8087AA0
- .4byte sub_8087AA8
diff --git a/data/party_menu.s b/data/party_menu.s
index 1319ce5d8..ebd596870 100644
--- a/data/party_menu.s
+++ b/data/party_menu.s
@@ -433,17 +433,17 @@ gUnknown_08615D7E:: @ 8615D7E
gUnknown_08615D9C:: @ 8615D9C
.4byte sub_80D3718, 0x00000007
.4byte SetUpFieldMove_Flash, 0x0000000d
- .4byte sub_8135654, 0x0000000d
- .4byte hm_prepare_rocksmash, 0x0000000d
+ .4byte SetUpFieldMove_RockSmash, 0x0000000d
+ .4byte SetUpFieldMove_Strength, 0x0000000d
.4byte sub_81B5820, 0x00000008
.4byte sub_81B5884, 0x0000000d
.4byte sub_81B5974, 0x0000000d
.4byte hm_prepare_waterfall, 0x0000000d
.4byte SetUpFieldMove_Teleport, 0x0000000d
- .4byte sub_813572C, 0x0000000d
+ .4byte SetUpFieldMove_Dig, 0x0000000d
.4byte sub_80FA004, 0x0000000d
- .4byte hm_prepare_dive_probably, 0x00000010
- .4byte hm_prepare_dive_probably, 0x00000010
+ .4byte SetUpFieldMove_SoftBoiled, 0x00000010
+ .4byte SetUpFieldMove_SoftBoiled, 0x00000010
.4byte SetUpFieldMove_SweetScent, 0x0000000d
.align 2
diff --git a/data/player_pc.s b/data/player_pc.s
deleted file mode 100644
index 47bdbff39..000000000
--- a/data/player_pc.s
+++ /dev/null
@@ -1,75 +0,0 @@
-#include "constants/items.h"
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 2
-gUnknown_085DFEA4:: @ 85DFEA4
- .4byte gText_TakeOutItemsFromPC
- .4byte gText_StoreItemsInPC
- .4byte gText_ThrowAwayItemsInPC
- .4byte gText_GoBackPrevMenu
-
- .align 2
-gUnknown_085DFEB4:: @ 85DFEB4
- .4byte gText_ItemStorage, task_pc_itemstorage
- .4byte gText_Mailbox, sub_816B0A8
- .4byte gText_Decoration, sub_816B138
- .4byte gText_TurnOff, sub_816B148
-
- .align 2
-gUnknown_085DFED4:: @ 85DFED4
- .byte 0x00, 0x01, 0x02, 0x03
-
- .align 2
-gUnknown_085DFED8:: @ 85DFED8
- .byte 0x00, 0x01, 0x03, 0x00
-
- .align 2
-gUnknown_085DFEDC:: @ 85DFEDC
- .4byte gText_WithdrawItem, sub_816B398
- .4byte gText_DepositItem, sub_816B2C8
- .4byte gText_TossItem, sub_816B3E4
- .4byte gText_Cancel, sub_816B4A4
-
- .align 2
-gUnknown_085DFEFC:: @ 85DFEFC
- .2byte ITEM_POTION, 0x0001
- .2byte 0x0000, 0x0000
-
- .align 2
-gUnknown_085DFF04:: @ 85DFF04
- .4byte gText_Read, sub_816B878
- .4byte gText_MoveToBag, sub_816B994
- .4byte gText_Give2, sub_816BABC
- .4byte gText_Cancel2, sub_816BBD4
-
- .align 2
-gUnknown_085DFF24:: @ 85DFF24
- .4byte 0x09010100, 0x00010f06, 0x09010100, 0x00010f08, 0x0a010100, 0x00010f08
-
- .align 2
-gUnknown_085DFF3C:: @ 85DFF3C
- .4byte sub_816CA94
- .4byte sub_816CAC8
-
- .align 2
-gUnknown_085DFF44:: @ 85DFF44
- .4byte 0x00000000, sub_816BDDC, fish4_goto_x5_or_x6, 0x00000000, 0x00080000, 0x07003129
-
- .align 2
-gUnknown_085DFF5C:: @ 85DFF5C
- window_template 0x00, 0x10, 0x01, 0x0d, 0x12, 0x0f, 0x0001
- window_template 0x00, 0x01, 0x0d, 0x0d, 0x06, 0x0f, 0x00eb
- window_template 0x00, 0x01, 0x08, 0x03, 0x03, 0x0f, 0x0153
- window_template 0x00, 0x01, 0x01, 0x0d, 0x02, 0x0f, 0x0139
- window_template 0x00, 0x08, 0x09, 0x06, 0x02, 0x0f, 0x015c
-
- .align 2
-gUnknown_085DFF84:: @ 85DFF84
- window_template 0x00, 0x09, 0x07, 0x05, 0x04, 0x0f, 0x0168
-
- .align 2
-gUnknown_085DFF8C:: @ 85DFF8C
- .byte 0x01, 0x03, 0x02, 0x00
diff --git a/data/pokenav.s b/data/pokenav.s
index 03c0d4b8a..9a89e2251 100644
--- a/data/pokenav.s
+++ b/data/pokenav.s
@@ -2030,754 +2030,8 @@ gUnknown_08624CF8:: @ 8624CF8
gUnknown_08624D04:: @ 8624D04
spr_template 9, 15, gUnknown_08624CB0, gDummySpriteAnimTable, NULL, gUnknown_08624CF8, SpriteCallbackDummy
-
-gUnknown_08624D1C:: @ 8624D1C
- .4byte gText_MrStone_Pokenav_2B60C0
- .2byte 0xFFFF
- .byte 0x58
- .byte 1
- .4byte gText_MrStone_Pokenav_2B61E6
- .byte 0x58
- .byte 1
- .2byte 0xFFFF
- .4byte gText_MrStone_Pokenav_2B6302
- .byte 0xBD
- .byte 0
- .2byte 0xFFFF
- .4byte gText_MrStone_Pokenav_2B63A0
- .byte 16
- .byte 1
- .2byte 0xFFFF
- .4byte gText_MrStone_Pokenav_2B64A2
- .byte 0x6A
- .byte 0
- .2byte 0xFFFF
- .4byte gText_MrStone_Pokenav_2B6526
- .byte 0xF4
- .byte 4
- .2byte 0xFFFF
- .4byte gText_MrStone_Pokenav_2B65BB
- .byte 0x97
- .byte 0
- .2byte 0xFFFF
- .4byte gText_MrStone_Pokenav_2B6664
- .byte 0x6f
- .byte 0
- .2byte 0xFFFF
- .4byte gText_MrStone_Pokenav_2B66B1
- .byte 0x70
- .byte 0
- .2byte 0xFFFF
- .4byte gText_MrStone_Pokenav_2B6703
- .byte 0xf7
- .byte 4
- .2byte 0xFFFF
- .4byte gText_MrStone_Pokenav_2B67ED
- .byte 0x64
- .byte 8
- .2byte 0xFFFF
- .4byte NULL
- .4byte 0xFFFFFFFF
-
-gUnknown_08624D7C:: @ 8624D7C
- .byte 0
- .byte 10
- .2byte 0xFFFF
- .4byte gUnknown_085EFAEF
- .4byte gUnknown_085EFAFA
- .4byte gUnknown_08624D1C
-
-gUnknown_08624D8C:: @ 8624D8C
- .4byte gText_Norman_Pokenav_2B5719
- .byte 0x32
- .byte 1
- .2byte 0xFFFF
- .4byte gText_Norman_Pokenav_2B5795
- .byte 0xF1
- .byte 4
- .2byte 0xFFFF
- .4byte gText_Norman_Pokenav_2B584D
- .byte 0xF3
- .byte 4
- .2byte 0xFFFF
- .4byte gText_Norman_Pokenav_2B58E3
- .byte 0xF4
- .byte 4
- .2byte 0xFFFF
- .4byte gText_Norman_Pokenav_2B5979
- .byte 0xD4
- .byte 0
- .2byte 0xFFFF
- .4byte gText_Norman_Pokenav_2B5A07
- .byte 0xFE
- .byte 0xFF
- .2byte 0xFFFF
- .4byte gText_Norman_Pokenav_2B5A69
- .byte 0x64
- .byte 8
- .2byte 0xFFFF
- .4byte gText_Norman_Pokenav_2B5ACF
- .byte 0x64
- .byte 8
- .2byte 0xFFFF
- .4byte gText_Norman_Pokenav_2B5B5E
- .byte 0x64
- .byte 8
- .2byte 0xFFFF
- .4byte NULL
- .4byte 0xFFFFFFFF
-
-gUnknown_08624DDC:: @ 8624DDC
- .byte 5, 7, 0x32, 1, 0x45, 0, 0, 0
- .4byte gUnknown_085EFB25
- .4byte gUnknown_085EFB47
- .4byte gUnknown_08624D8C
-
-gUnknown_08624DF0:: @ 8624DF0
- .byte 3, 0, 0x19, 1
- .4byte gUnknown_085EFBC9
- .4byte gUnknown_085E8270
-
-gUnknown_08624DFC:: @ 8624DFC
- .4byte gText_Mom_Pokenav_2B227B
- .byte 0xFF
- .byte 0xFF
- .2byte 0xFFFF
- .4byte gText_Mom_Pokenav_2B2310
- .byte 0xF4
- .byte 0x4
- .2byte 0xFFFF
- .4byte gText_Mom_Pokenav_2B23F3
- .byte 0x64
- .byte 8
- .2byte 0xFFFF
- .4byte NULL
- .4byte 0xFFFFFFFF
-
-gUnknown_08624E1C:: @ 8624E1C
- .byte 0, 0, 0xD8, 0
- .4byte gUnknown_085EFB32
- .4byte gUnknown_085EFB4B
- .4byte gUnknown_08624DFC
-
-gUnknown_08624E2C:: @ 8624E2C
- .4byte gText_Steven_Pokenav_2B5B95
- .byte 0xFF
- .byte 0xFF
- .2byte 0xFFFF
- .4byte gText_Steven_Pokenav_2B5C53
- .byte 0xC7
- .byte 0
- .2byte 0xFFFF
- .4byte gText_Steven_Pokenav_2B5CC9
- .byte 0xD4
- .byte 0
- .2byte 0xFFFF
- .4byte gText_Steven_Pokenav_2B5DB4
- .byte 0x70
- .byte 0
- .2byte 0xFFFF
- .4byte gText_Steven_Pokenav_2B5E26
- .byte 0xF6
- .byte 4
- .2byte 0xFFFF
- .4byte gText_Steven_Pokenav_2B5EA2
- .byte 0x81
- .byte 0
- .2byte 0xFFFF
- .4byte gText_Steven_Pokenav_2B5ED9
- .byte 0x64
- .byte 8
- .2byte 0xFFFF
- .4byte NULL
- .4byte 0xFFFFFFFF
-
-gUnknown_08624E6C:: @ 8624E6C
- .byte 0, 0xD5, 0x31, 1
- .4byte gUnknown_085EFB04
- .4byte gUnknown_085EFB11
- .4byte gUnknown_08624E2C
-
-gUnknown_08624E7C:: @ 8624E7C
- .4byte gText_May_Pokenav_2B3AB3
- .byte 0xFF
- .byte 0xFF
- .2byte 0xFFFF
- .4byte gText_May_Pokenav_2B3B3F
- .byte 0xF1
- .byte 0x4
- .2byte 0xFFFF
- .4byte gText_May_Pokenav_2B3C13
- .byte 0x95
- .byte 0
- .2byte 0xFFFF
- .4byte gText_May_Pokenav_2B3CF3
- .byte 0x24
- .byte 0x3
- .2byte 0xFFFF
- .4byte gText_May_Pokenav_2B3D4B
- .byte 0x6A
- .byte 0
- .2byte 0xFFFF
- .4byte gText_May_Pokenav_2B3DD1
- .byte 0xF3
- .byte 0x4
- .2byte 0xFFFF
- .4byte gText_May_Pokenav_2B3E69
- .byte 0xF4
- .byte 4
- .2byte 0xFFFF
- .4byte gText_May_Pokenav_2B3ECD
- .byte 0x97
- .byte 0
- .2byte 0xFFFF
- .4byte gText_May_Pokenav_2B3F2B
- .byte 0xD4
- .byte 0
- .2byte 0xFFFF
- .4byte gText_May_Pokenav_2B3FFB
- .byte 0x6F
- .byte 0
- .2byte 0xFFFF
- .4byte gText_May_Pokenav_2B402B
- .byte 0x61
- .byte 0
- .2byte 0xFFFF
- .4byte gText_May_Pokenav_2B414B
- .byte 0x70
- .byte 0
- .2byte 0xFFFF
- .4byte gText_May_Pokenav_2B4228
- .byte 0x81
- .byte 0
- .2byte 0xFFFF
- .4byte gText_May_Pokenav_2B42E0
- .byte 0xF7
- .byte 4
- .2byte 0xFFFF
- .4byte gText_May_Pokenav_2B4350
- .byte 0x64
- .byte 8
- .2byte 0xFFFF
- .4byte NULL
- .4byte 0xFFFFFFFF
-
-gUnknown_08624EFC:: @ 8624EFC
- .byte 4, 0, 0xFD, 0
- .4byte gUnknown_085EFB18
- .4byte gExpandedPlaceholder_May
- .4byte gUnknown_08624E7C
-
-gUnknown_08624F0C:: @ 8624F0C
- .4byte gText_Brendan_Pokenav_2B43EF
- .byte 0xFF
- .byte 0xFF
- .2byte 0xFFFF
- .4byte gText_Brendan_Pokenav_2B4486
- .byte 0xF1
- .byte 0x4
- .2byte 0xFFFF
- .4byte gText_Brendan_Pokenav_2B4560
- .byte 0x95
- .byte 0
- .2byte 0xFFFF
- .4byte gText_Brendan_Pokenav_2B463F
- .byte 0x24
- .byte 0x3
- .2byte 0xFFFF
- .4byte gText_Brendan_Pokenav_2B46B7
- .byte 0x6A
- .byte 0
- .2byte 0xFFFF
- .4byte gText_Brendan_Pokenav_2B4761
- .byte 0xF3
- .byte 0x4
- .2byte 0xFFFF
- .4byte gText_Brendan_Pokenav_2B47F4
- .byte 0xF4
- .byte 4
- .2byte 0xFFFF
- .4byte gText_Brendan_Pokenav_2B4882
- .byte 0x97
- .byte 0
- .2byte 0xFFFF
- .4byte gText_Brendan_Pokenav_2B4909
- .byte 0xD4
- .byte 0
- .2byte 0xFFFF
- .4byte gText_Brendan_Pokenav_2B49C4
- .byte 0x6F
- .byte 0
- .2byte 0xFFFF
- .4byte gText_Brendan_Pokenav_2B4A44
- .byte 0x61
- .byte 0
- .2byte 0xFFFF
- .4byte gText_Brendan_Pokenav_2B4B28
- .byte 0x70
- .byte 0
- .2byte 0xFFFF
- .4byte gText_Brendan_Pokenav_2B4C15
- .byte 0x81
- .byte 0
- .2byte 0xFFFF
- .4byte gText_Brendan_Pokenav_2B4CD8
- .byte 0xF7
- .byte 4
- .2byte 0xFFFF
- .4byte gText_Brendan_Pokenav_2B4D46
- .byte 0x64
- .byte 8
- .2byte 0xFFFF
- .4byte NULL
- .4byte 0xFFFFFFFF
-
-gUnknown_08624F8C:: @ 8624F8C
- .byte 4, 1, 0xFD, 0
- .4byte gUnknown_085EFB18
- .4byte gExpandedPlaceholder_Brendan
- .4byte gUnknown_08624F0C
-
-gUnknown_08624F9C:: @ 8624F9C
- .4byte gText_Wally_Pokenav_2B4DE2
- .byte 0xFF
- .byte 0xFF
- .2byte 0xFFFF
- .4byte gText_Wally_Pokenav_2B4E57
- .byte 0xC7
- .byte 0
- .2byte 0xFFFF
- .4byte gText_Wally_Pokenav_2B4EA5
- .byte 0xF3
- .byte 0x4
- .2byte 0xFFFF
- .4byte gText_Wally_Pokenav_2B4F41
- .byte 0x97
- .byte 0
- .2byte 0xFFFF
- .4byte gText_Wally_Pokenav_2B4FF3
- .byte 0x6F
- .byte 0
- .2byte 0xFFFF
- .4byte gText_Wally_Pokenav_2B50B1
- .byte 0x81
- .byte 0
- .2byte 0xFFFF
- .4byte gText_Wally_Pokenav_2B5100
- .byte 0x7E
- .byte 0
- .2byte 0xFFFF
- .4byte NULL
- .4byte 0xFFFFFFFF
-
-gUnknown_08624FDC:: @ 8624FDC
- .byte 0x24, 3, 5, 0
- .2byte 0x6F, 0xD5
- .byte 0x5A, 3, 0x46, 0, 0xFF, 0xFF, 0xD5, 0
-
-gUnknown_08624FEC:: @ 8624FEC
- .byte 2, 0, 0xD6, 0
- .4byte 0x40
- .4byte gUnknown_085EFB3E
- .4byte gUnknown_08624F9C
- .4byte gUnknown_08624FDC
-
-gUnknown_08624500:: @ 8624500
- .4byte gText_Scott_Pokenav_2B5184
- .byte 0xFF
- .byte 0xFF
- .2byte 0xFFFF
- .4byte gText_Scott_Pokenav_2B5275
- .byte 0x8B
- .byte 0
- .2byte 0xFFFF
- .4byte gText_Scott_Pokenav_2B5323
- .byte 0x97
- .byte 0
- .2byte 0xFFFF
- .4byte gText_Scott_Pokenav_2B53DB
- .byte 0xD4
- .byte 0
- .2byte 0xFFFF
- .4byte gText_Scott_Pokenav_2B54A5
- .byte 0x70
- .byte 0
- .2byte 0xFFFF
- .4byte gText_Scott_Pokenav_2B5541
- .byte 0xF7
- .byte 4
- .2byte 0xFFFF
- .4byte gText_Scott_Pokenav_2B56CA
- .byte 0x64
- .byte 8
- .2byte 0xFFFF
- .4byte NULL
- .4byte 0xFFFFFFFF
-
-gUnknown_08625040:: @ 8625040
- .byte 0, 0xD5, 0xD7, 0
- .4byte gUnknown_085EFB4F
- .4byte gUnknown_085EFB5C
- .4byte gUnknown_08624500
-
-gUnknown_08625050:: @ 8625050
- .4byte gText_Roxanne_Pokenav_2B2456
- .byte 0xFE
- .byte 0xFF
- .2byte 0xFFFF
- .4byte gText_Roxanne_Pokenav_2B250E
- .byte 0xFF
- .byte 0xFF
- .2byte 0xFFFF
- .4byte gText_Roxanne_Pokenav_2B25C1
- .byte 0xFF
- .byte 0xFF
- .2byte 0xFFFF
- .4byte gText_Roxanne_Pokenav_2B2607
- .byte 0x64
- .byte 0x8
- .2byte 0xFFFF
- .4byte NULL
- .4byte 0xFFFFFFFF
-
-gUnknown_08625078:: @ 8625078
- .byte 5, 10, 0xD3, 1
- .4byte 0x41
- .4byte gUnknown_085EFB62
- .4byte NULL
- .4byte gUnknown_08625050
-
-gUnknown_0862508C:: @ 862508C
- .4byte gText_Brawly_Pokenav_2B2659
- .byte 0xFE
- .byte 0xFF
- .2byte 0xFFFF
- .4byte gText_Brawly_Pokenav_2B275D
- .byte 0xFF
- .byte 0xFF
- .2byte 0xFFFF
- .4byte gText_Brawly_Pokenav_2B286F
- .byte 0xFF
- .byte 0xFF
- .2byte 0xFFFF
- .4byte gText_Brawly_Pokenav_2B28D1
- .byte 0x64
- .byte 0x8
- .2byte 0xFFFF
- .4byte NULL
- .4byte 0xFFFFFFFF
-
-gUnknown_086250B4:: @ 86250B4
- .byte 5, 2, 0xD4, 1
- .4byte 0x42
- .4byte gUnknown_085EFB6F
- .4byte NULL
- .4byte gUnknown_0862508C
-
-gUnknown_086250C8:: @ 86250C8
- .4byte gText_Wattson_Pokenav_2B2912
- .byte 0xFE
- .byte 0xFF
- .2byte 0xFFFF
- .4byte gText_Wattson_Pokenav_2B29CA
- .byte 0xFF
- .byte 0xFF
- .2byte 0xFFFF
- .4byte gText_Wattson_Pokenav_2B2AB6
- .byte 0xFF
- .byte 0xFF
- .2byte 0xFFFF
- .4byte gText_Wattson_Pokenav_2B2B01
- .byte 0x64
- .byte 0x8
- .2byte 0xFFFF
- .4byte NULL
- .4byte 0xFFFFFFFF
-
-gUnknown_086250F0:: @ 86250F0
- .byte 5, 9, 0xD5, 1
- .4byte 0x43
- .4byte gUnknown_085EFB7B
- .4byte NULL
- .4byte gUnknown_086250C8
-
-gUnknown_08625104:: @ 8625104
- .4byte gText_Flannery_Pokenav_2B2B4D
- .byte 0xFE
- .byte 0xFF
- .2byte 0xFFFF
- .4byte gText_Flannery_Pokenav_2B2C0E
- .byte 0xFF
- .byte 0xFF
- .2byte 0xFFFF
- .4byte gText_Flannery_Pokenav_2B2CF1
- .byte 0xFF
- .byte 0xFF
- .2byte 0xFFFF
- .4byte gText_Flannery_Pokenav_2B2D54
- .byte 0x64
- .byte 0x8
- .2byte 0xFFFF
- .4byte NULL
- .4byte 0xFFFFFFFF
-
-gUnknown_0862512C:: @ 862512C
- .byte 5, 3, 0xD6, 1
- .4byte 0x44
- .4byte gUnknown_085EFB87
- .4byte NULL
- .4byte gUnknown_08625104
-
-gUnknown_08625140:: @ 8625140
- .4byte gText_Winona_Pokenav_2B2DA4
- .byte 0xFE
- .byte 0xFF
- .2byte 0xFFFF
- .4byte gText_Winona_Pokenav_2B2E2B
- .byte 0xFF
- .byte 0xFF
- .2byte 0xFFFF
- .4byte gText_Winona_Pokenav_2B2EC2
- .byte 0xFF
- .byte 0xFF
- .2byte 0xFFFF
- .4byte gText_Winona_Pokenav_2B2F16
- .byte 0x64
- .byte 0x8
- .2byte 0xFFFF
- .4byte NULL
- .4byte 0xFFFFFFFF
-
-gUnknown_08625168:: @ 8625168
- .byte 5, 11, 0xD7, 1
- .4byte 0x46
- .4byte gUnknown_085EFB94
- .4byte NULL
- .4byte gUnknown_08625140
-
-gUnknown_0862517C:: @ 862517C
- .4byte gText_TateLiza_Pokenav_2B2F97
- .byte 0xFE
- .byte 0xFF
- .2byte 0xFFFF
- .4byte gText_TateLiza_Pokenav_2B306E
- .byte 0xFF
- .byte 0xFF
- .2byte 0xFFFF
- .4byte gText_TateLiza_Pokenav_2B3158
- .byte 0xFF
- .byte 0xFF
- .2byte 0xFFFF
- .4byte gText_TateLiza_Pokenav_2B31CD
- .byte 0x64
- .byte 0x8
- .2byte 0xFFFF
- .4byte NULL
- .4byte 0xFFFFFFFF
-
-gUnknown_086251A4:: @ 86251A4
- .byte 5, 13, 0xD8, 1
- .4byte 0x47
- .4byte gUnknown_085EFB9E
- .4byte NULL
- .4byte gUnknown_0862517C
-
-gUnknown_086251B8:: @ 86251B8
- .4byte gText_Juan_Pokenav_2B3249
- .byte 0xFE
- .byte 0xFF
- .2byte 0xFFFF
- .4byte gText_Juan_Pokenav_2B32EC
- .byte 0xFF
- .byte 0xFF
- .2byte 0xFFFF
- .4byte gText_Juan_Pokenav_2B33AA
- .byte 0xFF
- .byte 0xFF
- .2byte 0xFFFF
- .4byte gText_Juan_Pokenav_2B341E
- .byte 0x64
- .byte 0x8
- .2byte 0xFFFF
- .4byte NULL
- .4byte 0xFFFFFFFF
-
-gUnknown_086251E0:: @ 86251E0
- .byte 5, 14, 0xD9, 1
- .4byte 0x48
- .4byte gUnknown_085EFBA9
- .4byte NULL
- .4byte gUnknown_086251B8
-
-gUnknown_086251F4:: @ 86251F4
- .4byte gText_Sidney_Pokenav_2B34CC
- .byte 0xFF
- .byte 0xFF
- .2byte 0xFFFF
- .4byte NULL
- .4byte 0xFFFFFFFF
-
-gUnknown_08625204:: @ 8625204
- .byte 5, 15, 0xA5, 1
- .4byte 0x49
- .4byte gUnknown_085EFBB5
- .4byte NULL
- .4byte gUnknown_086251F4
-
-gUnknown_08625218:: @ 8625218
- .4byte gText_Phoebe_Pokenav_2B3561
- .byte 0xFF
- .byte 0xFF
- .2byte 0xFFFF
- .4byte NULL
- .4byte 0xFFFFFFFF
-
-gUnknown_08625228:: @ 8625228
- .byte 5, 15, 0xA6, 1
- .4byte 0x4A
- .4byte gUnknown_085EFBB5
- .4byte NULL
- .4byte gUnknown_08625218
-
-gUnknown_0862523C:: @ 862523C
- .4byte gText_Glacia_Pokenav_2B35E4
- .byte 0xFF
- .byte 0xFF
- .2byte 0xFFFF
- .4byte NULL
- .4byte 0xFFFFFFFF
-
-gUnknown_0862524C:: @ 862524C
- .byte 5, 15, 0xA7, 1
- .4byte 0x4B
- .4byte gUnknown_085EFBB5
- .4byte NULL
- .4byte gUnknown_0862523C
-
-gUnknown_08625260:: @ 8625260
- .4byte gText_Drake_Pokenav_2B368B
- .byte 0xFF
- .byte 0xFF
- .2byte 0xFFFF
- .4byte NULL
- .4byte 0xFFFFFFFF
-
-gUnknown_08625270:: @ 8625270
- .byte 5, 15, 0xA8, 1
- .4byte 0x4C
- .4byte gUnknown_085EFBB5
- .4byte NULL
- .4byte gUnknown_08625260
-
-gUnknown_08625284:: @ 8625284
- .4byte gText_Wallace_Pokenav_2B3790
- .byte 0xFF
- .byte 0xFF
- .2byte 0xFFFF
- .4byte NULL
- .4byte 0xFFFFFFFF
-
-gUnknown_08625294:: @ 8625294
- .byte 5, 15, 0xA9, 1
- .4byte 0x4D
- .4byte gUnknown_085EFBC0
- .4byte NULL
- .4byte gUnknown_08625284
-
-gUnknown_086252A8:: @ 86252A8
- .4byte gUnknown_08624D7C
- .4byte gUnknown_08624DF0
- .4byte gUnknown_08624F8C
- .4byte gUnknown_08624EFC
- .4byte gUnknown_08624FEC
- .4byte gUnknown_08624DDC
- .4byte gUnknown_08624E1C
- .4byte gUnknown_08624E6C
- .4byte gUnknown_08625040
- .4byte gUnknown_08625078
- .4byte gUnknown_086250B4
- .4byte gUnknown_086250F0
- .4byte gUnknown_0862512C
- .4byte gUnknown_08625168
- .4byte gUnknown_086251A4
- .4byte gUnknown_086251E0
- .4byte gUnknown_08625204
- .4byte gUnknown_08625228
- .4byte gUnknown_0862524C
- .4byte gUnknown_08625270
- .4byte gUnknown_08625294
-
-gUnknown_086252FC:: @ 86252FC
- .4byte sub_81D1628
- .4byte sub_81D164C
- .4byte sub_81D1670
- .4byte sub_81D1694
- .4byte sub_81D16CC
-
-gUnknown_08625310:: @ 8625310
- .4byte sub_81D1714
- .4byte sub_81D1718
- .4byte sub_81D171C
- .4byte sub_81D1750
- .4byte sub_81D1754
-
-gUnknown_08625324:: @ 8625324
- .4byte sub_81D178C
- .4byte sub_81D1790
- .4byte sub_81D17C0
- .4byte sub_81D17E0
- .4byte sub_81D17E4
-
-gUnknown_08625338:: @ 8625338
- .4byte sub_81D1840
- .4byte sub_81D1844
- .4byte sub_81D1848
- .4byte sub_81D184C
- .4byte sub_81D1850
-
-gUnknown_0862534C:: @ 862534C
- .4byte sub_81D1888
- .4byte sub_81D188C
- .4byte sub_81D1890
- .4byte sub_81D1894
- .4byte sub_81D1898
-
-gUnknown_08625360:: @ 8625360
- .4byte sub_81D18D0
- .4byte sub_81D18DC
- .4byte sub_81D18FC
- .4byte sub_81D1908
- .4byte sub_81D1914
-
-gUnknown_08625374:: @ 8625374
- .4byte sub_81D1AB0
- .4byte sub_81D1ABC
- .4byte sub_81D1ADC
- .4byte sub_81D1AF4
- .4byte sub_81D1B00
-
-gUnknown_08625388:: @ 8625388
- .2byte 7, 0x4B, 0xFFFF, 0
- .4byte gUnknown_085ED453
- .4byte gUnknown_085ED46B
- .4byte gUnknown_085ED483
- .4byte gUnknown_085ED49D
- .2byte 7, 0x4B, 0x4F6, 0
- .4byte gUnknown_085ED453
- .4byte gUnknown_085ED46B
- .4byte gUnknown_085ED4B3
- .4byte gUnknown_085ED4CE
- .2byte 2, 0X3C, 0xFFFF, 0
- .4byte gUnknown_085ED4E3
- .4byte gUnknown_085ED4FA
- .4byte gUnknown_085ED516
- .4byte gUnknown_085ED52F
- .2byte 3, 0x3F, 0xFFFF, 0
- .4byte gUnknown_085ED547
- .4byte gUnknown_085ED563
- .4byte gUnknown_085ED579
- .4byte gUnknown_085ED58F
+ .section .rodata.after.match.call
gUnknown_086253E8:: @ 86253E8
.4byte 0x8010100
diff --git a/data/link.s b/data/rom_8011DC0.s
index 39f97644f..bcc7dcd1b 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
@@ -2805,13 +2506,13 @@ gUnknown_082F2D40:: @ 82F2D40
.4byte gText_RegisteredTextChanged
.byte 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00
- .4byte gText_AlreadySavedFile
+ .4byte gText_AlreadySavedFile_Unused
.byte 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00
- .4byte gText_SavingDontTurnOff
+ .4byte gText_SavingDontTurnOff_Unused
.byte 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00
- .4byte gText_PlayerSavedGame
+ .4byte gText_PlayerSavedGame_Unused
.byte 0x02, 0x00, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00
.4byte gText_IfLeaderLeavesChatEnds
@@ -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/rotating_gate.s b/data/rotating_gate.s
deleted file mode 100644
index 595cc9917..000000000
--- a/data/rotating_gate.s
+++ /dev/null
@@ -1,285 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 2
-gUnknown_0858E8B0:: @ 858E8B0
- .2byte 0x0006, 0x0007
- .byte 0x05, 0x01
-
- .align 2
- .2byte 0x0009, 0x000f
- .byte 0x05, 0x02
-
- .align 2
- .2byte 0x0003, 0x0013
- .byte 0x05, 0x01
-
- .align 2
- .2byte 0x0002, 0x0006
- .byte 0x04, 0x01
-
- .align 2
- .2byte 0x0009, 0x000c
- .byte 0x04, 0x00
-
- .align 2
- .2byte 0x0006, 0x0017
- .byte 0x04, 0x00
-
- .align 2
- .2byte 0x000c, 0x0016
- .byte 0x04, 0x00
-
- .align 2
- .2byte 0x0006, 0x0003
- .byte 0x03, 0x02
-
- .align 2
-gUnknown_0858E8F0:: @ 858E8F0
- .2byte 0x000e, 0x0005
- .byte 0x04, 0x01
-
- .align 2
- .2byte 0x000a, 0x0006
- .byte 0x01, 0x02
-
- .align 2
- .2byte 0x0006, 0x0006
- .byte 0x03, 0x01
-
- .align 2
- .2byte 0x000e, 0x0008
- .byte 0x04, 0x01
-
- .align 2
- .2byte 0x0003, 0x000a
- .byte 0x02, 0x03
-
- .align 2
- .2byte 0x0009, 0x000e
- .byte 0x00, 0x01
-
- .align 2
- .2byte 0x0003, 0x000f
- .byte 0x06, 0x00
-
- .align 2
- .2byte 0x0002, 0x0011
- .byte 0x01, 0x02
-
- .align 2
- .2byte 0x000c, 0x0012
- .byte 0x06, 0x03
-
- .align 2
- .2byte 0x0005, 0x0012
- .byte 0x03, 0x01
-
- .align 2
- .2byte 0x000a, 0x0013
- .byte 0x02, 0x02
-
- .align 2
-gUnknown_0858E948:: @ 858E948
- .incbin "graphics/misc/rotating_gate_1.4bpp"
-
- .align 2
-gUnknown_0858EB48:: @ 858EB48
- .incbin "graphics/misc/rotating_gate_2.4bpp"
-
- .align 2
-gUnknown_0858F348:: @ 858F348
- .incbin "graphics/misc/rotating_gate_3.4bpp"
-
- .align 2
-gUnknown_0858FB48:: @ 858FB48
- .incbin "graphics/misc/rotating_gate_4.4bpp"
-
- .align 2
-gUnknown_08590348:: @ 8590348
- .incbin "graphics/misc/rotating_gate_5.4bpp"
-
- .align 2
-gUnknown_08590548:: @ 8590548
- .incbin "graphics/misc/rotating_gate_6.4bpp"
-
- .align 2
-gUnknown_08590D48:: @ 8590D48
- .incbin "graphics/misc/rotating_gate_7.4bpp"
-
- .align 2
-gUnknown_08591548:: @ 8591548
- .incbin "graphics/misc/rotating_gate_8.4bpp"
-
- .align 2
-gOamData_8591D48:: @ 8591D48
- .2byte 0x0100, 0xc000, 0x2800
-
- .align 2
-gOamData_8591D50:: @ 8591D50
- .2byte 0x0100, 0x8000, 0x2800
-
- .align 2
-gUnknown_08591D58:: @ 8591D58
- obj_tiles gUnknown_0858E948, 0x0200, 0x1300
- obj_tiles gUnknown_0858EB48, 0x0800, 0x1301
- obj_tiles gUnknown_0858F348, 0x0800, 0x1302
- obj_tiles gUnknown_0858FB48, 0x0800, 0x1303
- obj_tiles gUnknown_08590348, 0x0200, 0x1304
- obj_tiles gUnknown_08590548, 0x0800, 0x1305
- obj_tiles gUnknown_08590D48, 0x0800, 0x1306
- obj_tiles gUnknown_08591548, 0x0800, 0x1307
- null_obj_tiles
-
- .align 2
-gSpriteAnim_8591DA0:: @ 8591DA0
- .2byte 0x0000, 0x0000, 0xffff, 0x0000
-
- .align 2
-gSpriteAnim_8591DA8:: @ 8591DA8
- .2byte 0x0000, 0x0000, 0xffff, 0x0000
-
- .align 2
-gSpriteAnimTable_8591DB0:: @ 8591DB0
- .4byte gSpriteAnim_8591DA0
-
- .align 2
-gSpriteAnimTable_8591DB4:: @ 8591DB4
- .4byte gSpriteAnim_8591DA8
-
- .align 2
-gSpriteAffineAnim_8591DB8:: @ 8591DB8
- .2byte 0x0100, 0x0100, 0x0000, 0x0000, 0x7ffe, 0x0000, 0x0000, 0x0000
-
- .align 2
-gSpriteAffineAnim_8591DC8:: @ 8591DC8
- .2byte 0x0100, 0x0100, 0x00c0, 0x0000, 0x7ffe, 0x0000, 0x0000, 0x0000
-
- .align 2
-gSpriteAffineAnim_8591DD8:: @ 8591DD8
- .2byte 0x0100, 0x0100, 0x0080, 0x0000, 0x7ffe, 0x0000, 0x0000, 0x0000
-
- .align 2
-gSpriteAffineAnim_8591DE8:: @ 8591DE8
- .2byte 0x0100, 0x0100, 0x0040, 0x0000, 0x7ffe, 0x0000, 0x0000, 0x0000
-
- .align 2
-gSpriteAffineAnim_8591DF8:: @ 8591DF8
- .2byte 0x0100, 0x0100, 0x0000, 0x0000, 0x0000, 0x0000, 0x10fc, 0x0000, 0x7fff, 0x0000, 0x0000, 0x0000
-
- .align 2
-gSpriteAffineAnim_8591E10:: @ 8591E10
- .2byte 0x0100, 0x0100, 0x00c0, 0x0000, 0x0000, 0x0000, 0x10fc, 0x0000, 0x7fff, 0x0000, 0x0000, 0x0000
-
- .align 2
-gSpriteAffineAnim_8591E28:: @ 8591E28
- .2byte 0x0100, 0x0100, 0x0080, 0x0000, 0x0000, 0x0000, 0x10fc, 0x0000, 0x7fff, 0x0000, 0x0000, 0x0000
-
- .align 2
-gSpriteAffineAnim_8591E40:: @ 8591E40
- .2byte 0x0100, 0x0100, 0x0040, 0x0000, 0x0000, 0x0000, 0x10fc, 0x0000, 0x7fff, 0x0000, 0x0000, 0x0000
-
- .align 2
-gSpriteAffineAnim_8591E58:: @ 8591E58
- .2byte 0x0100, 0x0100, 0x0000, 0x0000, 0x0000, 0x0000, 0x1004, 0x0000, 0x7fff, 0x0000, 0x0000, 0x0000
-
- .align 2
-gSpriteAffineAnim_8591E70:: @ 8591E70
- .2byte 0x0100, 0x0100, 0x0040, 0x0000, 0x0000, 0x0000, 0x1004, 0x0000, 0x7fff, 0x0000, 0x0000, 0x0000
-
- .align 2
-gSpriteAffineAnim_8591E88:: @ 8591E88
- .2byte 0x0100, 0x0100, 0x0080, 0x0000, 0x0000, 0x0000, 0x1004, 0x0000, 0x7fff, 0x0000, 0x0000, 0x0000
-
- .align 2
-gSpriteAffineAnim_8591EA0:: @ 8591EA0
- .2byte 0x0100, 0x0100, 0x00c0, 0x0000, 0x0000, 0x0000, 0x1004, 0x0000, 0x7fff, 0x0000, 0x0000, 0x0000
-
- .align 2
-gSpriteAffineAnim_8591EB8:: @ 8591EB8
- .2byte 0x0100, 0x0100, 0x0000, 0x0000, 0x0000, 0x0000, 0x08f8, 0x0000, 0x7fff, 0x0000, 0x0000, 0x0000
-
- .align 2
-gSpriteAffineAnim_8591ED0:: @ 8591ED0
- .2byte 0x0100, 0x0100, 0x00c0, 0x0000, 0x0000, 0x0000, 0x08f8, 0x0000, 0x7fff, 0x0000, 0x0000, 0x0000
-
- .align 2
-gSpriteAffineAnim_8591EE8:: @ 8591EE8
- .2byte 0x0100, 0x0100, 0x0080, 0x0000, 0x0000, 0x0000, 0x08f8, 0x0000, 0x7fff, 0x0000, 0x0000, 0x0000
-
- .align 2
-gSpriteAffineAnim_8591F00:: @ 8591F00
- .2byte 0x0100, 0x0100, 0x0040, 0x0000, 0x0000, 0x0000, 0x08f8, 0x0000, 0x7fff, 0x0000, 0x0000, 0x0000
-
- .align 2
-gSpriteAffineAnim_8591F18:: @ 8591F18
- .2byte 0x0100, 0x0100, 0x0000, 0x0000, 0x0000, 0x0000, 0x0808, 0x0000, 0x7fff, 0x0000, 0x0000, 0x0000
-
- .align 2
-gSpriteAffineAnim_8591F30:: @ 8591F30
- .2byte 0x0100, 0x0100, 0x0040, 0x0000, 0x0000, 0x0000, 0x0808, 0x0000, 0x7fff, 0x0000, 0x0000, 0x0000
-
- .align 2
-gSpriteAffineAnim_8591F48:: @ 8591F48
- .2byte 0x0100, 0x0100, 0x0080, 0x0000, 0x0000, 0x0000, 0x0808, 0x0000, 0x7fff, 0x0000, 0x0000, 0x0000
-
- .align 2
-gSpriteAffineAnim_8591F60:: @ 8591F60
- .2byte 0x0100, 0x0100, 0x00c0, 0x0000, 0x0000, 0x0000, 0x0808, 0x0000, 0x7fff, 0x0000, 0x0000, 0x0000
-
- .align 2
-gSpriteAffineAnimTable_8591F78:: @ 8591F78
- .4byte gSpriteAffineAnim_8591DB8
- .4byte gSpriteAffineAnim_8591DC8
- .4byte gSpriteAffineAnim_8591DD8
- .4byte gSpriteAffineAnim_8591DE8
- .4byte gSpriteAffineAnim_8591E58
- .4byte gSpriteAffineAnim_8591EA0
- .4byte gSpriteAffineAnim_8591E88
- .4byte gSpriteAffineAnim_8591E70
- .4byte gSpriteAffineAnim_8591DF8
- .4byte gSpriteAffineAnim_8591E10
- .4byte gSpriteAffineAnim_8591E28
- .4byte gSpriteAffineAnim_8591E40
- .4byte gSpriteAffineAnim_8591F18
- .4byte gSpriteAffineAnim_8591F60
- .4byte gSpriteAffineAnim_8591F48
- .4byte gSpriteAffineAnim_8591F30
- .4byte gSpriteAffineAnim_8591EB8
- .4byte gSpriteAffineAnim_8591ED0
- .4byte gSpriteAffineAnim_8591EE8
- .4byte gSpriteAffineAnim_8591F00
-
- .align 2
-gUnknown_08591FC8:: @ 8591FC8
- spr_template 0x1300, 0xffff, gOamData_8591D48, gSpriteAnimTable_8591DB0, NULL, gSpriteAffineAnimTable_8591F78, sub_80FBAE4
-
- .align 2
-gUnknown_08591FE0:: @ 8591FE0
- spr_template 0x1300, 0xffff, gOamData_8591D50, gSpriteAnimTable_8591DB4, NULL, gSpriteAffineAnimTable_8591F78, sub_80FBAE4
-
-gUnknown_08591FF8:: @ 8591FF8
- .byte 0xff, 0xff, 0xff, 0xff, 0x27, 0x26, 0x12, 0x13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff
-
-gUnknown_08592008:: @ 8592008
- .byte 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x17, 0x16, 0x22, 0x23, 0xff, 0xff, 0xff, 0xff
-
-gUnknown_08592018:: @ 8592018
- .byte 0xff, 0x11, 0xff, 0xff, 0xff, 0x10, 0xff, 0xff, 0xff, 0x24, 0xff, 0xff, 0xff, 0x25, 0xff, 0xff
-
-gUnknown_08592028:: @ 8592028
- .byte 0xff, 0xff, 0x21, 0xff, 0xff, 0xff, 0x20, 0xff, 0xff, 0xff, 0x14, 0xff, 0xff, 0xff, 0x15, 0xff
-
-gUnknown_08592038:: @ 8592038
- .byte 0x00, 0xff, 0x00, 0x00, 0x01, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xfe, 0xff, 0x00, 0x00
-
-gUnknown_08592058:: @ 8592058
- .byte 0xff, 0xff, 0x00, 0x00, 0xff, 0xfe, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x00
-
-gUnknown_08592078:: @ 8592078
- .byte 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00
- .byte 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00
- .byte 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00
-
diff --git a/data/scripts/cable_club.inc b/data/scripts/cable_club.inc
index b8aef7c3d..bd633a115 100644
--- a/data/scripts/cable_club.inc
+++ b/data/scripts/cable_club.inc
@@ -450,8 +450,8 @@ OldaleTown_PokemonCenter_2F_EventScript_276F60:: @ 8276F60
OldaleTown_PokemonCenter_2F_EventScript_276FBD:: @ 8276FBD
special HealPlayerParty
- special copy_player_party_to_sav1
- special copy_bags_and_unk_data_from_save_blocks
+ special SavePlayerParty
+ special LoadPlayerBag
copyvar VAR_0x4087, VAR_0x8004
messageautoscroll OldaleTown_PokemonCenter_2F_Text_278197
waitmessage
@@ -787,9 +787,9 @@ MossdeepCity_GameCorner_1F_Movement_277360: @ 8277360
gUnknown_08277365:: @ 8277365
lockall
setvar VAR_0x8004, 0
- special sub_813C4BC
+ special ShowLinkBattleRecords
waitbuttonpress
- special sub_813C5A0
+ special RemoveRecordsWindow
releaseall
end
@@ -916,21 +916,21 @@ RecordCorner_EventScript_277471:: @ 8277471
releaseall
end
-gUnknown_0827747E:: @ 827747E
+EventScript_TradeRoom_ReadTrainerCard1:: @ 827747E
msgbox Text_278452, 4
fadescreen 1
special sp02A_crash_sound
waitstate
end
-gUnknown_0827748D:: @ 827748D
+EventScript_TradeRoom_ReadTrainerCard2:: @ 827748D
msgbox Text_27847B, 4
fadescreen 1
special sp02A_crash_sound
waitstate
end
-gUnknown_0827749C:: @ 827749C
+EventScript_TradeRoom_TooBusyToNotice:: @ 827749C
msgbox Text_27842E, 4
closemessage
end
@@ -983,7 +983,7 @@ gUnknown_08277509:: @ 8277509
special sub_80B371C
end
-gUnknown_08277513:: @ 8277513
+EventScript_277513:: @ 8277513
special sub_80B36EC
special sub_80AF9F8
waitstate
diff --git a/data/scripts/maps/AbandonedShip_Rooms2_1F.inc b/data/scripts/maps/AbandonedShip_Rooms2_1F.inc
index ab710546b..2ffe3afc7 100644
--- a/data/scripts/maps/AbandonedShip_Rooms2_1F.inc
+++ b/data/scripts/maps/AbandonedShip_Rooms2_1F.inc
@@ -13,7 +13,7 @@ AbandonedShip_Rooms2_1F_EventScript_2380A7:: @ 82380A7
AbandonedShip_Rooms2_1F_EventScript_2380D7:: @ 82380D7
msgbox AbandonedShip_Rooms2_1F_Text_2383BB, 4
setvar VAR_0x8004, 642
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 642
callstd 8
release
@@ -36,7 +36,7 @@ AbandonedShip_Rooms2_1F_EventScript_23810B:: @ 823810B
AbandonedShip_Rooms2_1F_EventScript_23813B:: @ 823813B
msgbox AbandonedShip_Rooms2_1F_Text_2383BB, 4
setvar VAR_0x8004, 642
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 642
callstd 8
release
diff --git a/data/scripts/maps/AbandonedShip_Rooms_1F.inc b/data/scripts/maps/AbandonedShip_Rooms_1F.inc
index 00fde5ccb..2a6bc36b6 100644
--- a/data/scripts/maps/AbandonedShip_Rooms_1F.inc
+++ b/data/scripts/maps/AbandonedShip_Rooms_1F.inc
@@ -24,7 +24,7 @@ AbandonedShip_Rooms_1F_EventScript_237ADF:: @ 8237ADF
waitmovement 0
msgbox AbandonedShip_Rooms_1F_Text_237C2A, 4
setvar VAR_0x8004, 144
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 144
callstd 8
release
diff --git a/data/scripts/maps/BattleFrontier_BattleArenaBattleRoom.inc b/data/scripts/maps/BattleFrontier_BattleArenaBattleRoom.inc
index 52351b549..88a0f9989 100644
--- a/data/scripts/maps/BattleFrontier_BattleArenaBattleRoom.inc
+++ b/data/scripts/maps/BattleFrontier_BattleArenaBattleRoom.inc
@@ -136,8 +136,8 @@ BattleFrontier_BattleArenaBattleRoom_EventScript_257630:: @ 8257630
applymovement 8, BattleFrontier_BattleArenaBattleRoom_Movement_257BEB
waitmovement 0
msgbox BattleFrontier_BattleArenaBattleRoom_Text_257CE9, 4
- special copy_player_party_from_sav1
- special copy_player_party_to_sav1
+ special LoadPlayerParty
+ special SavePlayerParty
setvar VAR_0x8004, 3
setvar VAR_0x8005, 3
special sub_81A1780
diff --git a/data/scripts/maps/BattleFrontier_BattleArenaLobby.inc b/data/scripts/maps/BattleFrontier_BattleArenaLobby.inc
index 303a2c4c9..176b153f7 100644
--- a/data/scripts/maps/BattleFrontier_BattleArenaLobby.inc
+++ b/data/scripts/maps/BattleFrontier_BattleArenaLobby.inc
@@ -89,7 +89,7 @@ BattleFrontier_BattleArenaLobby_EventScript_255D2B:: @ 8255D2B
BattleFrontier_BattleArenaLobby_EventScript_255D59:: @ 8255D59
setvar VAR_0x8004, 8
special sub_81A1780
- special copy_player_party_from_sav1
+ special LoadPlayerParty
special HealPlayerParty
setvar VAR_0x8004, 3
setvar VAR_0x8005, 0
@@ -134,7 +134,7 @@ BattleFrontier_BattleArenaLobby_EventScript_255DF4:: @ 8255DF4
faceplayer
setvar VAR_FRONTIER_FACILITY, 3
setvar VAR_0x40CE, 0
- special copy_player_party_to_sav1
+ special SavePlayerParty
msgbox BattleFrontier_BattleArenaLobby_Text_256166, 4
BattleFrontier_BattleArenaLobby_EventScript_255E0B:: @ 8255E0B
@@ -196,7 +196,7 @@ BattleFrontier_BattleArenaLobby_EventScript_255EE8:: @ 8255EE8
setvar VAR_0x8005, 3
setvar VAR_0x8006, 0
special sub_81A1780
- special copy_player_party_from_sav1
+ special LoadPlayerParty
closemessage
delay 2
call BattleFrontier_BattleArenaLobby_EventScript_27134F
@@ -205,7 +205,7 @@ BattleFrontier_BattleArenaLobby_EventScript_255EE8:: @ 8255EE8
goto_eq BattleFrontier_BattleArenaLobby_EventScript_255FE1
BattleFrontier_BattleArenaLobby_EventScript_255F54:: @ 8255F54
- special copy_player_party_to_sav1
+ special SavePlayerParty
setvar VAR_0x8004, 3
setvar VAR_0x8005, 3
special sub_81A1780
@@ -248,7 +248,7 @@ BattleFrontier_BattleArenaLobby_EventScript_255FE1:: @ 8255FE1
goto BattleFrontier_BattleArenaLobby_EventScript_255FFB
BattleFrontier_BattleArenaLobby_EventScript_255FF8:: @ 8255FF8
- special copy_player_party_from_sav1
+ special LoadPlayerParty
BattleFrontier_BattleArenaLobby_EventScript_255FFB:: @ 8255FFB
msgbox BattleFrontier_BattleArenaLobby_Text_25621F, 4
@@ -348,7 +348,7 @@ BattleFrontier_BattleArenaLobby_EventScript_256092:: @ 8256092
setvar VAR_0x8005, 3
special sub_81A1780
waitbuttonpress
- special sub_813C5A0
+ special RemoveRecordsWindow
releaseall
end
diff --git a/data/scripts/maps/BattleFrontier_BattleDomeLobby.inc b/data/scripts/maps/BattleFrontier_BattleDomeLobby.inc
index 33b5654d0..f985606de 100644
--- a/data/scripts/maps/BattleFrontier_BattleDomeLobby.inc
+++ b/data/scripts/maps/BattleFrontier_BattleDomeLobby.inc
@@ -76,7 +76,7 @@ BattleFrontier_BattleDomeLobby_EventScript_2498C9:: @ 82498C9
msgbox BattleFrontier_BattleDomeLobby_Text_241520, 9
message BattleFrontier_BattleDomeLobby_Text_24A5D6
waitmessage
- special copy_player_party_from_sav1
+ special LoadPlayerParty
setvar VAR_0x8004, 3
setvar VAR_0x8005, 3
special sub_81A1780
@@ -94,7 +94,7 @@ BattleFrontier_BattleDomeLobby_EventScript_2498C9:: @ 82498C9
setvar VAR_0x8005, 1
setvar VAR_0x8006, 1
special sub_818E9AC
- special copy_player_party_from_sav1
+ special LoadPlayerParty
special HealPlayerParty
goto BattleFrontier_BattleDomeLobby_EventScript_249991
@@ -103,7 +103,7 @@ BattleFrontier_BattleDomeLobby_EventScript_249940:: @ 8249940
msgbox BattleFrontier_BattleDomeLobby_Text_24A5BF, 4
message BattleFrontier_BattleDomeLobby_Text_24A5D6
waitmessage
- special copy_player_party_from_sav1
+ special LoadPlayerParty
setvar VAR_0x8004, 3
setvar VAR_0x8005, 3
special sub_81A1780
@@ -117,7 +117,7 @@ BattleFrontier_BattleDomeLobby_EventScript_249940:: @ 8249940
setvar VAR_0x8005, 6
setvar VAR_0x8006, 1
special sub_818E9AC
- special copy_player_party_from_sav1
+ special LoadPlayerParty
special HealPlayerParty
BattleFrontier_BattleDomeLobby_EventScript_249991:: @ 8249991
@@ -181,7 +181,7 @@ BattleFrontier_BattleDomeLobby_EventScript_249A47:: @ 8249A47
end
BattleFrontier_BattleDomeLobby_EventScript_249A59:: @ 8249A59
- special copy_player_party_to_sav1
+ special SavePlayerParty
compare VAR_0x40CE, 0
call_if 1, BattleFrontier_BattleDomeLobby_EventScript_249CFD
compare VAR_0x40CE, 1
@@ -245,7 +245,7 @@ BattleFrontier_BattleDomeLobby_EventScript_249B60:: @ 8249B60
setvar VAR_0x8005, 3
setvar VAR_0x8006, 0
special sub_81A1780
- special copy_player_party_from_sav1
+ special LoadPlayerParty
closemessage
delay 2
call BattleFrontier_BattleDomeLobby_EventScript_27134F
@@ -256,7 +256,7 @@ BattleFrontier_BattleDomeLobby_EventScript_249B60:: @ 8249B60
special sub_818E9AC
BattleFrontier_BattleDomeLobby_EventScript_249BC2:: @ 8249BC2
- special copy_player_party_to_sav1
+ special SavePlayerParty
setvar VAR_0x8004, 3
setvar VAR_0x8005, 3
special sub_81A1780
@@ -299,7 +299,7 @@ BattleFrontier_BattleDomeLobby_EventScript_249C4A:: @ 8249C4A
goto BattleFrontier_BattleDomeLobby_EventScript_249C64
BattleFrontier_BattleDomeLobby_EventScript_249C61:: @ 8249C61
- special copy_player_party_from_sav1
+ special LoadPlayerParty
BattleFrontier_BattleDomeLobby_EventScript_249C64:: @ 8249C64
msgbox BattleFrontier_BattleDomeLobby_Text_249F74, 4
@@ -415,7 +415,7 @@ BattleFrontier_BattleDomeLobby_EventScript_249D52:: @ 8249D52
setvar VAR_0x8006, 0
special sub_81A1780
waitbuttonpress
- special sub_813C5A0
+ special RemoveRecordsWindow
releaseall
end
@@ -426,7 +426,7 @@ BattleFrontier_BattleDomeLobby_EventScript_249D6B:: @ 8249D6B
setvar VAR_0x8006, 1
special sub_81A1780
waitbuttonpress
- special sub_813C5A0
+ special RemoveRecordsWindow
releaseall
end
diff --git a/data/scripts/maps/BattleFrontier_BattleDomePreBattleRoom.inc b/data/scripts/maps/BattleFrontier_BattleDomePreBattleRoom.inc
index 5de099292..a9b6af7f7 100644
--- a/data/scripts/maps/BattleFrontier_BattleDomePreBattleRoom.inc
+++ b/data/scripts/maps/BattleFrontier_BattleDomePreBattleRoom.inc
@@ -243,7 +243,7 @@ BattleFrontier_BattleDomePreBattleRoom_EventScript_24B5BE:: @ 824B5BE
BattleFrontier_BattleDomePreBattleRoom_EventScript_24B5C7:: @ 824B5C7
setvar VAR_0x4000, 1
msgbox BattleFrontier_BattleDomePreBattleRoom_Text_24B760, 4
- special copy_player_party_from_sav1
+ special LoadPlayerParty
setvar VAR_0x8004, 3
setvar VAR_0x8005, 3
special sub_81A1780
diff --git a/data/scripts/maps/BattleFrontier_BattleFactoryLobby.inc b/data/scripts/maps/BattleFrontier_BattleFactoryLobby.inc
index 791a666d5..4a52743a5 100644
--- a/data/scripts/maps/BattleFrontier_BattleFactoryLobby.inc
+++ b/data/scripts/maps/BattleFrontier_BattleFactoryLobby.inc
@@ -74,7 +74,7 @@ BattleFrontier_BattleFactoryLobby_EventScript_2584C6:: @ 82584C6
waitmessage
setvar VAR_0x8004, 8
special sub_81A1780
- special copy_player_party_from_sav1
+ special LoadPlayerParty
setvar VAR_0x8004, 3
setvar VAR_0x8005, 0
special sub_81A5E74
@@ -89,7 +89,7 @@ BattleFrontier_BattleFactoryLobby_EventScript_258506:: @ 8258506
waitmessage
setvar VAR_0x8004, 8
special sub_81A1780
- special copy_player_party_from_sav1
+ special LoadPlayerParty
setvar VAR_0x8004, 2
setvar VAR_0x8005, 2
setvar VAR_0x8006, 0
@@ -154,7 +154,7 @@ BattleFrontier_BattleFactoryLobby_EventScript_2585DD:: @ 82585DD
end
BattleFrontier_BattleFactoryLobby_EventScript_2585ED:: @ 82585ED
- special copy_player_party_to_sav1
+ special SavePlayerParty
compare VAR_0x40CE, 0
call_if 1, BattleFrontier_BattleFactoryLobby_EventScript_2587B1
compare VAR_0x40CE, 1
@@ -215,7 +215,7 @@ BattleFrontier_BattleFactoryLobby_EventScript_2586B9:: @ 82586B9
setvar VAR_0x8006, 0
BattleFrontier_BattleFactoryLobby_EventScript_25871A:: @ 825871A
- special copy_player_party_to_sav1
+ special SavePlayerParty
msgbox BattleFrontier_BattleFactoryLobby_Text_258CB1, 4
closemessage
compare VAR_0x40CE, 0
@@ -253,7 +253,7 @@ BattleFrontier_BattleFactoryLobby_EventScript_258783:: @ 8258783
goto BattleFrontier_BattleFactoryLobby_EventScript_25879D
BattleFrontier_BattleFactoryLobby_EventScript_25879A:: @ 825879A
- special copy_player_party_from_sav1
+ special LoadPlayerParty
BattleFrontier_BattleFactoryLobby_EventScript_25879D:: @ 825879D
msgbox BattleFrontier_BattleFactoryLobby_Text_258BC5, 4
@@ -305,7 +305,7 @@ BattleFrontier_BattleFactoryLobby_EventScript_2587E1:: @ 82587E1
setvar VAR_0x8006, 0
special sub_81A1780
waitbuttonpress
- special sub_813C5A0
+ special RemoveRecordsWindow
releaseall
end
@@ -316,7 +316,7 @@ BattleFrontier_BattleFactoryLobby_EventScript_2587FA:: @ 82587FA
setvar VAR_0x8006, 1
special sub_81A1780
waitbuttonpress
- special sub_813C5A0
+ special RemoveRecordsWindow
releaseall
end
diff --git a/data/scripts/maps/BattleFrontier_BattleFactoryPreBattleRoom.inc b/data/scripts/maps/BattleFrontier_BattleFactoryPreBattleRoom.inc
index 4c0528e34..2f5cdeef2 100644
--- a/data/scripts/maps/BattleFrontier_BattleFactoryPreBattleRoom.inc
+++ b/data/scripts/maps/BattleFrontier_BattleFactoryPreBattleRoom.inc
@@ -236,7 +236,7 @@ BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259E47:: @ 8259E47
end
BattleFrontier_BattleFactoryPreBattleRoom_EventScript_259E69:: @ 8259E69
- special copy_player_party_to_sav1
+ special SavePlayerParty
setvar VAR_0x8004, 10
setvar VAR_0x8005, 0
special sub_81A5E74
diff --git a/data/scripts/maps/BattleFrontier_BattlePalaceBattleRoom.inc b/data/scripts/maps/BattleFrontier_BattlePalaceBattleRoom.inc
index ccd285a3a..8393d7501 100644
--- a/data/scripts/maps/BattleFrontier_BattlePalaceBattleRoom.inc
+++ b/data/scripts/maps/BattleFrontier_BattlePalaceBattleRoom.inc
@@ -93,8 +93,8 @@ BattleFrontier_BattlePalaceBattleRoom_EventScript_24F911:: @ 824F911
applymovement 3, BattleFrontier_BattlePalaceBattleRoom_Movement_24FEAC
waitmovement 0
msgbox BattleFrontier_BattlePalaceBattleRoom_Text_24FF00, 4
- special copy_player_party_from_sav1
- special copy_player_party_to_sav1
+ special LoadPlayerParty
+ special SavePlayerParty
setvar VAR_0x8004, 3
setvar VAR_0x8005, 3
special sub_81A1780
diff --git a/data/scripts/maps/BattleFrontier_BattlePalaceLobby.inc b/data/scripts/maps/BattleFrontier_BattlePalaceLobby.inc
index 2e0f152b4..11fc42ced 100644
--- a/data/scripts/maps/BattleFrontier_BattlePalaceLobby.inc
+++ b/data/scripts/maps/BattleFrontier_BattlePalaceLobby.inc
@@ -89,7 +89,7 @@ BattleFrontier_BattlePalaceLobby_EventScript_24D873:: @ 824D873
BattleFrontier_BattlePalaceLobby_EventScript_24D8A1:: @ 824D8A1
setvar VAR_0x8004, 8
special sub_81A1780
- special copy_player_party_from_sav1
+ special LoadPlayerParty
special HealPlayerParty
setvar VAR_0x8004, 7
setvar VAR_0x8005, 0
@@ -152,7 +152,7 @@ BattleFrontier_BattlePalaceLobby_EventScript_24D968:: @ 824D968
special sub_8195960
compare VAR_RESULT, 0
goto_if 5, BattleFrontier_BattlePalaceLobby_EventScript_24D817
- special copy_player_party_to_sav1
+ special SavePlayerParty
compare VAR_0x40CE, 0
call_if 1, BattleFrontier_BattlePalaceLobby_EventScript_24DB9E
compare VAR_0x40CE, 1
@@ -220,7 +220,7 @@ BattleFrontier_BattlePalaceLobby_EventScript_24DA87:: @ 824DA87
setvar VAR_0x8005, 3
setvar VAR_0x8006, 0
special sub_81A1780
- special copy_player_party_from_sav1
+ special LoadPlayerParty
closemessage
delay 2
call BattleFrontier_BattlePalaceLobby_EventScript_27134F
@@ -229,7 +229,7 @@ BattleFrontier_BattlePalaceLobby_EventScript_24DA87:: @ 824DA87
goto_eq BattleFrontier_BattlePalaceLobby_EventScript_24DB7A
BattleFrontier_BattlePalaceLobby_EventScript_24DAF3:: @ 824DAF3
- special copy_player_party_to_sav1
+ special SavePlayerParty
setvar VAR_0x8004, 3
setvar VAR_0x8005, 3
special sub_81A1780
@@ -272,7 +272,7 @@ BattleFrontier_BattlePalaceLobby_EventScript_24DB7A:: @ 824DB7A
goto BattleFrontier_BattlePalaceLobby_EventScript_24DB94
BattleFrontier_BattlePalaceLobby_EventScript_24DB91:: @ 824DB91
- special copy_player_party_from_sav1
+ special LoadPlayerParty
BattleFrontier_BattlePalaceLobby_EventScript_24DB94:: @ 824DB94
msgbox BattleFrontier_BattlePalaceLobby_Text_24E0D8, 4
@@ -366,7 +366,7 @@ BattleFrontier_BattlePalaceLobby_EventScript_24DC50:: @ 824DC50
setvar VAR_0x8006, 0
special sub_81A1780
waitbuttonpress
- special sub_813C5A0
+ special RemoveRecordsWindow
releaseall
end
@@ -377,7 +377,7 @@ BattleFrontier_BattlePalaceLobby_EventScript_24DC69:: @ 824DC69
setvar VAR_0x8006, 1
special sub_81A1780
waitbuttonpress
- special sub_813C5A0
+ special RemoveRecordsWindow
releaseall
end
diff --git a/data/scripts/maps/BattleFrontier_BattlePikeLobby.inc b/data/scripts/maps/BattleFrontier_BattlePikeLobby.inc
index 40b5e437f..f78cec646 100644
--- a/data/scripts/maps/BattleFrontier_BattlePikeLobby.inc
+++ b/data/scripts/maps/BattleFrontier_BattlePikeLobby.inc
@@ -76,7 +76,7 @@ BattleFrontier_BattlePikeLobby_EventScript_25B78D:: @ 825B78D
setvar VAR_0x8005, 3
copyvar VAR_0x8006, VAR_RESULT
special sub_81A703C
- special copy_player_party_from_sav1
+ special LoadPlayerParty
special HealPlayerParty
setvar VAR_0x8004, 27
special sub_81A703C
@@ -107,7 +107,7 @@ BattleFrontier_BattlePikeLobby_EventScript_25B806:: @ 825B806
setvar VAR_0x8005, 4
setvar VAR_0x8006, 0
special sub_81A703C
- special copy_player_party_from_sav1
+ special LoadPlayerParty
special HealPlayerParty
setvar VAR_0x8004, 27
special sub_81A703C
@@ -127,7 +127,7 @@ BattleFrontier_BattlePikeLobby_EventScript_25B868:: @ 825B868
faceplayer
setvar VAR_FRONTIER_FACILITY, 5
setvar VAR_0x40CE, 0
- special copy_player_party_to_sav1
+ special SavePlayerParty
msgbox BattleFrontier_BattlePikeLobby_Text_25BB52, 4
BattleFrontier_BattlePikeLobby_EventScript_25B87F:: @ 825B87F
@@ -192,7 +192,7 @@ BattleFrontier_BattlePikeLobby_EventScript_25B95C:: @ 825B95C
setvar VAR_0x8005, 3
setvar VAR_0x8006, 0
special sub_81A1780
- special copy_player_party_from_sav1
+ special LoadPlayerParty
closemessage
delay 2
call BattleFrontier_BattlePikeLobby_EventScript_27134F
@@ -201,7 +201,7 @@ BattleFrontier_BattlePikeLobby_EventScript_25B95C:: @ 825B95C
special sub_81A703C
compare VAR_RESULT, 0
goto_eq BattleFrontier_BattlePikeLobby_EventScript_25BA5C
- special copy_player_party_to_sav1
+ special SavePlayerParty
setvar VAR_0x8004, 3
setvar VAR_0x8005, 3
special sub_81A1780
@@ -242,7 +242,7 @@ BattleFrontier_BattlePikeLobby_EventScript_25BA5C:: @ 825BA5C
goto BattleFrontier_BattlePikeLobby_EventScript_25BA76
BattleFrontier_BattlePikeLobby_EventScript_25BA73:: @ 825BA73
- special copy_player_party_from_sav1
+ special LoadPlayerParty
BattleFrontier_BattlePikeLobby_EventScript_25BA76:: @ 825BA76
msgbox BattleFrontier_BattlePikeLobby_Text_25BE02, 4
@@ -257,7 +257,7 @@ BattleFrontier_BattlePikeLobby_EventScript_25BA80:: @ 825BA80
setvar VAR_0x8005, 5
special sub_81A1780
waitbuttonpress
- special sub_813C5A0
+ special RemoveRecordsWindow
releaseall
end
diff --git a/data/scripts/maps/BattleFrontier_BattlePikeThreePathRoom.inc b/data/scripts/maps/BattleFrontier_BattlePikeThreePathRoom.inc
index 74da4c01c..d4723acc7 100644
--- a/data/scripts/maps/BattleFrontier_BattlePikeThreePathRoom.inc
+++ b/data/scripts/maps/BattleFrontier_BattlePikeThreePathRoom.inc
@@ -45,7 +45,7 @@ BattleFrontier_BattlePikeThreePathRoom_EventScript_25C8A4:: @ 825C8A4
setvar VAR_0x8006, 0
special sub_81A1780
setvar VAR_0x4000, 255
- special copy_player_party_to_sav1
+ special SavePlayerParty
setvar VAR_0x8004, 3
setvar VAR_0x8005, 3
special sub_81A1780
@@ -136,7 +136,7 @@ BattleFrontier_BattlePikeThreePathRoom_EventScript_25C9FD:: @ 825C9FD
special sub_81A1780
message BattleFrontier_BattlePikeThreePathRoom_Text_25CE08
waitmessage
- special copy_player_party_from_sav1
+ special LoadPlayerParty
setvar VAR_0x8004, 8
setvar VAR_0x8005, 2
special sub_81A703C
diff --git a/data/scripts/maps/BattleFrontier_BattlePyramidEmptySquare.inc b/data/scripts/maps/BattleFrontier_BattlePyramidEmptySquare.inc
index cff676124..29485ef12 100644
--- a/data/scripts/maps/BattleFrontier_BattlePyramidEmptySquare.inc
+++ b/data/scripts/maps/BattleFrontier_BattlePyramidEmptySquare.inc
@@ -28,7 +28,7 @@ BattleFrontier_BattlePyramidEmptySquare_EventScript_252A77:: @ 8252A77
end
BattleFrontier_BattlePyramidEmptySquare_EventScript_252A8F:: @ 8252A8F
- special AddMapNamePopUpWindowTask
+ special ShowMapNamePopup
setvar VAR_0x400F, 0
end
@@ -99,7 +99,7 @@ BattleFrontier_BattlePyramidEmptySquare_EventScript_252B8D:: @ 8252B8D
setvar VAR_0x8004, 3
setvar VAR_0x8005, 1
special sub_81A8E7C
- special copy_player_party_to_sav1
+ special SavePlayerParty
setvar VAR_0x8004, 2
setvar VAR_0x8005, 0
setvar VAR_0x8006, 0
@@ -180,12 +180,12 @@ BattleFrontier_BattlePyramidEmptySquare_EventScript_252C88:: @ 8252C88
BattleFrontier_BattlePyramidEmptySquare_Text_252C8D: @ 8252C8D
.string "This is a sample message.$"
-BattleFrontier_BattlePyramidEmptySquare_Text_252CA7:: @ 8252CA7
+gText_BattlePyramidConfirmRest:: @ 8252CA7
.string "Your BATTLE PYRAMID quest will be\n"
.string "saved so that you may quit for now.\l"
.string "Is that okay?$"
-BattleFrontier_BattlePyramidEmptySquare_Text_252CFB:: @ 8252CFB
+gText_BattlePyramidConfirmRetire:: @ 8252CFB
.string "Are you sure you want to quit your\n"
.string "PYRAMID quest?$"
diff --git a/data/scripts/maps/BattleFrontier_BattlePyramidLobby.inc b/data/scripts/maps/BattleFrontier_BattlePyramidLobby.inc
index 9455479a7..eab2bb18c 100644
--- a/data/scripts/maps/BattleFrontier_BattlePyramidLobby.inc
+++ b/data/scripts/maps/BattleFrontier_BattlePyramidLobby.inc
@@ -67,7 +67,7 @@ BattleFrontier_BattlePyramidLobby_EventScript_2507DA:: @ 82507DA
clearflag FLAG_SPECIAL_FLAG_0x4004
setvar VAR_0x8004, 8
special sub_81A1780
- special copy_player_party_from_sav1
+ special LoadPlayerParty
setvar VAR_0x8004, 14
special sub_81A8E7C
special HealPlayerParty
@@ -97,7 +97,7 @@ BattleFrontier_BattlePyramidLobby_EventScript_2507DA:: @ 82507DA
BattleFrontier_BattlePyramidLobby_EventScript_250852:: @ 8250852
setvar VAR_0x8004, 8
special sub_81A1780
- special copy_player_party_from_sav1
+ special LoadPlayerParty
setvar VAR_0x8004, 14
special sub_81A8E7C
special HealPlayerParty
@@ -131,7 +131,7 @@ BattleFrontier_BattlePyramidLobby_EventScript_2508B1:: @ 82508B1
faceplayer
setvar VAR_FRONTIER_FACILITY, 6
setvar VAR_0x40CE, 0
- special copy_player_party_to_sav1
+ special SavePlayerParty
msgbox BattleFrontier_BattlePyramidLobby_Text_250F31, 4
BattleFrontier_BattlePyramidLobby_EventScript_2508C8:: @ 82508C8
@@ -197,7 +197,7 @@ BattleFrontier_BattlePyramidLobby_EventScript_2509A5:: @ 82509A5
special sub_81A8E7C
setvar VAR_0x8004, 9
special sub_81A8E7C
- special copy_player_party_from_sav1
+ special LoadPlayerParty
closemessage
delay 2
call BattleFrontier_BattlePyramidLobby_EventScript_27134F
@@ -206,7 +206,7 @@ BattleFrontier_BattlePyramidLobby_EventScript_2509A5:: @ 82509A5
goto_eq BattleFrontier_BattlePyramidLobby_EventScript_250AAA
BattleFrontier_BattlePyramidLobby_EventScript_250A21:: @ 8250A21
- special copy_player_party_to_sav1
+ special SavePlayerParty
setvar VAR_0x8004, 3
setvar VAR_0x8005, 3
special sub_81A1780
@@ -249,7 +249,7 @@ BattleFrontier_BattlePyramidLobby_EventScript_250AAA:: @ 8250AAA
goto BattleFrontier_BattlePyramidLobby_EventScript_250AC4
BattleFrontier_BattlePyramidLobby_EventScript_250AC1:: @ 8250AC1
- special copy_player_party_from_sav1
+ special LoadPlayerParty
BattleFrontier_BattlePyramidLobby_EventScript_250AC4:: @ 8250AC4
msgbox BattleFrontier_BattlePyramidLobby_Text_250FE5, 4
@@ -428,7 +428,7 @@ BattleFrontier_BattlePyramidLobby_EventScript_250D42:: @ 8250D42
setvar VAR_0x8005, 6
special sub_81A1780
waitbuttonpress
- special sub_813C5A0
+ special RemoveRecordsWindow
releaseall
end
diff --git a/data/scripts/maps/BattleFrontier_BattlePyramidTop.inc b/data/scripts/maps/BattleFrontier_BattlePyramidTop.inc
index 6c44e0044..07e66efa8 100644
--- a/data/scripts/maps/BattleFrontier_BattlePyramidTop.inc
+++ b/data/scripts/maps/BattleFrontier_BattlePyramidTop.inc
@@ -64,7 +64,7 @@ BattleFrontier_BattlePyramidTop_EventScript_255180:: @ 8255180
end
BattleFrontier_BattlePyramidTop_EventScript_25518A:: @ 825518A
- special AddMapNamePopUpWindowTask
+ special ShowMapNamePopup
setvar VAR_0x400F, 0
end
@@ -72,7 +72,7 @@ BattleFrontier_BattlePyramidTop_EventScript_255193:: @ 8255193
setvar VAR_0x8004, 3
setvar VAR_0x8005, 1
special sub_81A8E7C
- special copy_player_party_to_sav1
+ special SavePlayerParty
setvar VAR_0x8004, 2
setvar VAR_0x8005, 0
setvar VAR_0x8006, 0
diff --git a/data/scripts/maps/BattleFrontier_BattleTowerBattleRoom2.inc b/data/scripts/maps/BattleFrontier_BattleTowerBattleRoom2.inc
index feaa18c8d..ec2994591 100644
--- a/data/scripts/maps/BattleFrontier_BattleTowerBattleRoom2.inc
+++ b/data/scripts/maps/BattleFrontier_BattleTowerBattleRoom2.inc
@@ -153,7 +153,7 @@ BattleFrontier_BattleTowerBattleRoom2_EventScript_249118:: @ 8249118
delay 48
BattleFrontier_BattleTowerBattleRoom2_EventScript_249121:: @ 8249121
- special copy_player_party_from_sav1
+ special LoadPlayerParty
setvar VAR_0x8004, 3
setvar VAR_0x8005, 2
special sub_81A1780
diff --git a/data/scripts/maps/BattleFrontier_BattleTowerLobby.inc b/data/scripts/maps/BattleFrontier_BattleTowerLobby.inc
index def3dd122..774507df9 100644
--- a/data/scripts/maps/BattleFrontier_BattleTowerLobby.inc
+++ b/data/scripts/maps/BattleFrontier_BattleTowerLobby.inc
@@ -152,7 +152,7 @@ BattleFrontier_BattleTowerLobby_EventScript_23E84D:: @ 823E84D
waitmessage
setvar VAR_0x8004, 8
special sub_81A1780
- special copy_player_party_from_sav1
+ special LoadPlayerParty
special HealPlayerParty
setvar VAR_0x8004, 6
setvar VAR_0x8005, 0
@@ -240,7 +240,7 @@ BattleFrontier_BattleTowerLobby_EventScript_23E936:: @ 823E936
lock
faceplayer
setvar VAR_FRONTIER_FACILITY, 0
- special copy_player_party_to_sav1
+ special SavePlayerParty
msgbox BattleFrontier_BattleTowerLobby_Text_240537, 4
BattleFrontier_BattleTowerLobby_EventScript_23E948:: @ 823E948
@@ -299,7 +299,7 @@ BattleFrontier_BattleTowerLobby_EventScript_23EA2A:: @ 823EA2A
setvar VAR_0x8005, 3
setvar VAR_0x8006, 0
special sub_81A1780
- special copy_player_party_from_sav1
+ special LoadPlayerParty
closemessage
delay 2
call BattleFrontier_BattleTowerLobby_EventScript_27134F
@@ -320,7 +320,7 @@ BattleFrontier_BattleTowerLobby_EventScript_23EA9F:: @ 823EA9F
lock
faceplayer
setvar VAR_FRONTIER_FACILITY, 0
- special copy_player_party_to_sav1
+ special SavePlayerParty
msgbox BattleFrontier_BattleTowerLobby_Text_2407E2, 4
BattleFrontier_BattleTowerLobby_EventScript_23EAB1:: @ 823EAB1
@@ -379,7 +379,7 @@ BattleFrontier_BattleTowerLobby_EventScript_23EB93:: @ 823EB93
setvar VAR_0x8005, 3
setvar VAR_0x8006, 0
special sub_81A1780
- special copy_player_party_from_sav1
+ special LoadPlayerParty
closemessage
delay 2
call BattleFrontier_BattleTowerLobby_EventScript_27134F
@@ -401,7 +401,7 @@ BattleFrontier_BattleTowerLobby_EventScript_23EC08:: @ 823EC08
faceplayer
setvar VAR_FRONTIER_FACILITY, 0
clearflag FLAG_0x152
- special copy_player_party_to_sav1
+ special SavePlayerParty
msgbox BattleFrontier_BattleTowerLobby_Text_240A8B, 4
BattleFrontier_BattleTowerLobby_EventScript_23EC1D:: @ 823EC1D
@@ -460,7 +460,7 @@ BattleFrontier_BattleTowerLobby_EventScript_23ECFF:: @ 823ECFF
setvar VAR_0x8005, 3
setvar VAR_0x8006, 0
special sub_81A1780
- special copy_player_party_from_sav1
+ special LoadPlayerParty
closemessage
delay 2
call BattleFrontier_BattleTowerLobby_EventScript_27134F
@@ -481,7 +481,7 @@ BattleFrontier_BattleTowerLobby_EventScript_23ED74:: @ 823ED74
lock
faceplayer
setvar VAR_FRONTIER_FACILITY, 0
- special copy_player_party_to_sav1
+ special SavePlayerParty
msgbox BattleFrontier_BattleTowerLobby_Text_240E15, 4
BattleFrontier_BattleTowerLobby_EventScript_23ED86:: @ 823ED86
@@ -540,7 +540,7 @@ BattleFrontier_BattleTowerLobby_EventScript_23EE68:: @ 823EE68
setvar VAR_0x8005, 3
setvar VAR_0x8006, 0
special sub_81A1780
- special copy_player_party_from_sav1
+ special LoadPlayerParty
closemessage
delay 2
setvar VAR_0x8004, 6
@@ -636,7 +636,7 @@ BattleFrontier_BattleTowerLobby_EventScript_23EFC7:: @ 823EFC7
setvar VAR_0x8006, 0
special sub_81A1780
waitbuttonpress
- special sub_813C5A0
+ special RemoveRecordsWindow
releaseall
end
@@ -647,7 +647,7 @@ BattleFrontier_BattleTowerLobby_EventScript_23EFE0:: @ 823EFE0
setvar VAR_0x8006, 1
special sub_81A1780
waitbuttonpress
- special sub_813C5A0
+ special RemoveRecordsWindow
releaseall
end
@@ -658,7 +658,7 @@ BattleFrontier_BattleTowerLobby_EventScript_23EFF9:: @ 823EFF9
setvar VAR_0x8006, 2
special sub_81A1780
waitbuttonpress
- special sub_813C5A0
+ special RemoveRecordsWindow
releaseall
end
@@ -669,7 +669,7 @@ BattleFrontier_BattleTowerLobby_EventScript_23F012:: @ 823F012
setvar VAR_0x8006, 3
special sub_81A1780
waitbuttonpress
- special sub_813C5A0
+ special RemoveRecordsWindow
releaseall
end
@@ -722,7 +722,7 @@ BattleFrontier_BattleTowerLobby_EventScript_23F0D0:: @ 823F0D0
end
BattleFrontier_BattleTowerLobby_EventScript_23F0E3:: @ 823F0E3
- special copy_player_party_from_sav1
+ special LoadPlayerParty
BattleFrontier_BattleTowerLobby_EventScript_23F0E6:: @ 823F0E6
special CloseLink
@@ -733,7 +733,7 @@ BattleFrontier_BattleTowerLobby_EventScript_23F0F1:: @ 823F0F1
end
BattleFrontier_BattleTowerLobby_EventScript_23F0F3:: @ 823F0F3
- special copy_player_party_to_sav1
+ special SavePlayerParty
setvar VAR_0x8004, 3
call BattleFrontier_BattleTowerLobby_EventScript_23F272
special sub_81A1780
diff --git a/data/scripts/maps/BattleFrontier_RankingHall.inc b/data/scripts/maps/BattleFrontier_RankingHall.inc
index b13bfe343..e469024e9 100644
--- a/data/scripts/maps/BattleFrontier_RankingHall.inc
+++ b/data/scripts/maps/BattleFrontier_RankingHall.inc
@@ -66,7 +66,7 @@ BattleFrontier_RankingHall_EventScript_25E522:: @ 825E522
waitbuttonpress
special sub_81A4AE8
waitbuttonpress
- special sub_813C5A0
+ special RemoveRecordsWindow
releaseall
end
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/DewfordTown_Hall.inc b/data/scripts/maps/DewfordTown_Hall.inc
index 3f9518722..4d4c3732d 100644
--- a/data/scripts/maps/DewfordTown_Hall.inc
+++ b/data/scripts/maps/DewfordTown_Hall.inc
@@ -5,7 +5,7 @@ DewfordTown_Hall_EventScript_1FD4D0:: @ 81FD4D0
lock
faceplayer
call DewfordTown_Hall_EventScript_271E8B
- special sub_81229C8
+ special TrendyPhraseIsOld
compare VAR_RESULT, 1
goto_eq DewfordTown_Hall_EventScript_1FD4EF
msgbox DewfordTown_Hall_Text_1FD818, 4
@@ -87,7 +87,7 @@ DewfordTown_Hall_EventScript_1FD590:: @ 81FD590
DewfordTown_Hall_EventScript_1FD5A0:: @ 81FD5A0
lockall
call DewfordTown_Hall_EventScript_271E8B
- special sub_8122A30
+ special GetDewfordHallPaintingNameIndex
switch VAR_RESULT
case 0, DewfordTown_Hall_EventScript_1FD607
case 4, DewfordTown_Hall_EventScript_1FD607
@@ -133,7 +133,7 @@ DewfordTown_Hall_EventScript_1FD63B:: @ 81FD63B
DewfordTown_Hall_EventScript_1FD647:: @ 81FD647
call DewfordTown_Hall_EventScript_271E8B
- special sub_8122A30
+ special GetDewfordHallPaintingNameIndex
switch VAR_RESULT
case 0, DewfordTown_Hall_EventScript_1FD6AD
case 1, DewfordTown_Hall_EventScript_1FD6AD
diff --git a/data/scripts/maps/FallarborTown_BattleTentBattleRoom.inc b/data/scripts/maps/FallarborTown_BattleTentBattleRoom.inc
index b4d0a5d9c..16cb9fff5 100644
--- a/data/scripts/maps/FallarborTown_BattleTentBattleRoom.inc
+++ b/data/scripts/maps/FallarborTown_BattleTentBattleRoom.inc
@@ -72,7 +72,7 @@ FallarborTown_BattleTentBattleRoom_EventScript_20097E:: @ 820097E
setvar VAR_0x8005, 0
setvar VAR_0x8006, 4
special sub_81A1780
- special copy_player_party_from_sav1
+ special LoadPlayerParty
warp FALLARBOR_TOWN_BATTLE_TENT_LOBBY, 255, 6, 6
waitstate
@@ -103,8 +103,8 @@ FallarborTown_BattleTentBattleRoom_EventScript_2009B3:: @ 82009B3
applymovement 1, FallarborTown_BattleTentBattleRoom_Movement_200B94
waitmovement 0
msgbox FallarborTown_BattleTentBattleRoom_Text_257CE9, 4
- special copy_player_party_from_sav1
- special copy_player_party_to_sav1
+ special LoadPlayerParty
+ special SavePlayerParty
setvar VAR_0x8004, 3
setvar VAR_0x8005, 3
special sub_81A1780
@@ -157,7 +157,7 @@ FallarborTown_BattleTentBattleRoom_EventScript_200AF3:: @ 8200AF3
setvar VAR_0x8005, 0
setvar VAR_0x8006, 3
special sub_81A1780
- special copy_player_party_from_sav1
+ special LoadPlayerParty
warp FALLARBOR_TOWN_BATTLE_TENT_LOBBY, 255, 6, 6
waitstate
setvar VAR_0x8004, 1
diff --git a/data/scripts/maps/FallarborTown_BattleTentLobby.inc b/data/scripts/maps/FallarborTown_BattleTentLobby.inc
index 347c55659..78a067a55 100644
--- a/data/scripts/maps/FallarborTown_BattleTentLobby.inc
+++ b/data/scripts/maps/FallarborTown_BattleTentLobby.inc
@@ -134,7 +134,7 @@ FallarborTown_BattleTentLobby_EventScript_200001:: @ 8200001
special sub_81B9B80
compare VAR_RESULT, 0
goto_if 5, FallarborTown_BattleTentLobby_EventScript_1FFF84
- special copy_player_party_to_sav1
+ special SavePlayerParty
msgbox FallarborTown_BattleTentLobby_Text_2C47EB, 4
FallarborTown_BattleTentLobby_EventScript_200021:: @ 8200021
@@ -188,7 +188,7 @@ FallarborTown_BattleTentLobby_EventScript_2000E2:: @ 82000E2
setvar VAR_0x8005, 3
setvar VAR_0x8006, 0
special sub_81A1780
- special copy_player_party_from_sav1
+ special LoadPlayerParty
closemessage
delay 2
call FallarborTown_BattleTentLobby_EventScript_27134F
@@ -197,7 +197,7 @@ FallarborTown_BattleTentLobby_EventScript_2000E2:: @ 82000E2
goto_eq FallarborTown_BattleTentLobby_EventScript_2001AB
FallarborTown_BattleTentLobby_EventScript_20013C:: @ 820013C
- special copy_player_party_to_sav1
+ special SavePlayerParty
setvar VAR_0x8004, 3
setvar VAR_0x8005, 3
special sub_81A1780
@@ -234,7 +234,7 @@ FallarborTown_BattleTentLobby_EventScript_2001AB:: @ 82001AB
goto FallarborTown_BattleTentLobby_EventScript_2001C5
FallarborTown_BattleTentLobby_EventScript_2001C2:: @ 82001C2
- special copy_player_party_from_sav1
+ special LoadPlayerParty
FallarborTown_BattleTentLobby_EventScript_2001C5:: @ 82001C5
msgbox FallarborTown_BattleTentLobby_Text_2C487F, 4
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/FortreeCity_Gym.inc b/data/scripts/maps/FortreeCity_Gym.inc
index fc069a8ee..b8b800286 100644
--- a/data/scripts/maps/FortreeCity_Gym.inc
+++ b/data/scripts/maps/FortreeCity_Gym.inc
@@ -4,7 +4,7 @@ FortreeCity_Gym_MapScripts:: @ 82165AB
.byte 0
FortreeCity_Gym_MapScript1_2165B6: @ 82165B6
- special sub_80FBE90
+ special RotatingGate_InitPuzzle
end
FortreeCity_Gym_MapScript2_2165BA: @ 82165BA
@@ -12,7 +12,7 @@ FortreeCity_Gym_MapScript2_2165BA: @ 82165BA
.2byte 0
FortreeCity_Gym_EventScript_2165C4:: @ 82165C4
- special sub_80FBED0
+ special RotatingGate_InitPuzzleAndGraphics
end
FortreeCity_Gym_EventScript_2165C8:: @ 82165C8
diff --git a/data/scripts/maps/JaggedPass.inc b/data/scripts/maps/JaggedPass.inc
index e5c393221..15ac1bae6 100644
--- a/data/scripts/maps/JaggedPass.inc
+++ b/data/scripts/maps/JaggedPass.inc
@@ -115,7 +115,7 @@ JaggedPass_EventScript_2307C8:: @ 82307C8
special sub_80B4808
msgbox JaggedPass_Text_230A2C, 4
setvar VAR_0x8004, 474
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 474
callstd 8
release
@@ -139,7 +139,7 @@ JaggedPass_EventScript_230827:: @ 8230827
special sub_80B4808
msgbox JaggedPass_Text_230BC6, 4
setvar VAR_0x8004, 216
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 216
callstd 8
release
diff --git a/data/scripts/maps/LilycoveCity_ContestLobby.inc b/data/scripts/maps/LilycoveCity_ContestLobby.inc
index beb96e171..4a7279fb2 100644
--- a/data/scripts/maps/LilycoveCity_ContestLobby.inc
+++ b/data/scripts/maps/LilycoveCity_ContestLobby.inc
@@ -554,7 +554,7 @@ LilycoveCity_ContestLobby_EventScript_21A77A:: @ 821A77A
lockall
special ShowBerryBlenderRecordWindow
waitbuttonpress
- special sub_813C5A0
+ special RemoveRecordsWindow
releaseall
end
@@ -564,7 +564,7 @@ LilycoveCity_ContestLobby_EventScript_21A784:: @ 821A784
setvar VAR_0x8005, 7
special sub_81A1780
waitbuttonpress
- special sub_813C5A0
+ special RemoveRecordsWindow
releaseall
end
diff --git a/data/scripts/maps/LittlerootTown_BrendansHouse_2F.inc b/data/scripts/maps/LittlerootTown_BrendansHouse_2F.inc
index 0e7ecbf22..a5223d38a 100644
--- a/data/scripts/maps/LittlerootTown_BrendansHouse_2F.inc
+++ b/data/scripts/maps/LittlerootTown_BrendansHouse_2F.inc
@@ -259,7 +259,7 @@ LittlerootTown_BrendansHouse_2F_EventScript_1F8626:: @ 81F8626
special DoPCTurnOnEffect
playse SE_PC_ON
msgbox gUnknown_08272D87, 4
- special sub_816AE58
+ special BedroomPC
waitstate
releaseall
end
diff --git a/data/scripts/maps/LittlerootTown_MaysHouse_2F.inc b/data/scripts/maps/LittlerootTown_MaysHouse_2F.inc
index 327112d2f..f300b5849 100644
--- a/data/scripts/maps/LittlerootTown_MaysHouse_2F.inc
+++ b/data/scripts/maps/LittlerootTown_MaysHouse_2F.inc
@@ -320,7 +320,7 @@ LittlerootTown_MaysHouse_2F_EventScript_1F9576:: @ 81F9576
special DoPCTurnOnEffect
playse SE_PC_ON
msgbox gUnknown_08272D87, 4
- special sub_816AE58
+ special BedroomPC
waitstate
releaseall
end
diff --git a/data/scripts/maps/MauvilleCity.inc b/data/scripts/maps/MauvilleCity.inc
index 1c48e9710..40578a907 100644
--- a/data/scripts/maps/MauvilleCity.inc
+++ b/data/scripts/maps/MauvilleCity.inc
@@ -5,18 +5,18 @@ MauvilleCity_MapScripts:: @ 81DF385
MauvilleCity_MapScript1_1DF38B: @ 81DF38B
setflag FLAG_VISITED_MAUVILLE_CITY
clearflag FLAG_0x09D
- clearflag FLAG_0x3C1
+ clearflag FLAG_SPRITEVIS_SLATEPORT_MUSEUM_POPULATION
setflag FLAG_SYS_TV_START
clearflag FLAG_0x063
setvar VAR_0x4093, 0
- checkflag FLAG_0x0D1
+ checkflag FLAG_GOT_TM24_FROM_WATTSON
call_if 1, MauvilleCity_EventScript_1DF3A9
end
MauvilleCity_EventScript_1DF3A9:: @ 81DF3A9
- clearflag FLAG_0x391
- setflag FLAG_0x390
- setflag FLAG_0x05B
+ clearflag FLAG_SPRITEVIS_MAUVILLE_GYM_WATTSON
+ setflag FLAG_SPRITEVIS_MAUVILLE_CITY_WATTSON
+ setflag FLAG_WATTSON_REMATCH_AVAILABLE
return
MauvilleCity_EventScript_1DF3B3:: @ 81DF3B3
@@ -424,15 +424,15 @@ MauvilleCity_Movement_1DF72F: @ 81DF72F
MauvilleCity_EventScript_1DF73A:: @ 81DF73A
lock
faceplayer
- checkflag FLAG_0x0D1
+ checkflag FLAG_GOT_TM24_FROM_WATTSON
goto_eq MauvilleCity_EventScript_1DF7B0
compare VAR_0x40BA, 2
goto_eq MauvilleCity_EventScript_1DF784
- checkflag FLAG_0x0D0
+ checkflag FLAG_GOT_BASEMENT_KEY_FROM_WATTSON
goto_eq MauvilleCity_EventScript_1DF77A
msgbox MauvilleCity_Text_1DFFE4, 4
giveitem_std ITEM_BASEMENT_KEY
- setflag FLAG_0x0D0
+ setflag FLAG_GOT_BASEMENT_KEY_FROM_WATTSON
msgbox MauvilleCity_Text_1E0154, 4
release
end
@@ -447,7 +447,7 @@ MauvilleCity_EventScript_1DF784:: @ 81DF784
giveitem_std ITEM_TM24
compare VAR_RESULT, 0
goto_eq MauvilleCity_EventScript_272054
- setflag FLAG_0x0D1
+ setflag FLAG_GOT_TM24_FROM_WATTSON
msgbox MauvilleCity_Text_1E02AA, 4
release
end
diff --git a/data/scripts/maps/MauvilleCity_BikeShop.inc b/data/scripts/maps/MauvilleCity_BikeShop.inc
index d4915a478..0231e5bde 100644
--- a/data/scripts/maps/MauvilleCity_BikeShop.inc
+++ b/data/scripts/maps/MauvilleCity_BikeShop.inc
@@ -58,7 +58,7 @@ MauvilleCity_BikeShop_EventScript_20EC6D:: @ 820EC6D
MauvilleCity_BikeShop_EventScript_20EC87:: @ 820EC87
msgbox MauvilleCity_BikeShop_Text_20F1BD, 4
- special sub_80D6EDC
+ special SwapRegisteredBike
release
end
diff --git a/data/scripts/maps/MauvilleCity_PokemonCenter_1F.inc b/data/scripts/maps/MauvilleCity_PokemonCenter_1F.inc
index 9b8561873..03b7928aa 100644
--- a/data/scripts/maps/MauvilleCity_PokemonCenter_1F.inc
+++ b/data/scripts/maps/MauvilleCity_PokemonCenter_1F.inc
@@ -10,7 +10,7 @@ MauvilleCity_PokemonCenter_1F_MapScript1_210E66: @ 8210E66
end
MauvilleCity_PokemonCenter_1F_EventScript_210E74:: @ 8210E74
- special sub_8120B5C
+ special ScrSpecial_SetMauvilleOldManMapObjGfx
end
MauvilleCity_PokemonCenter_1F_EventScript_210E78:: @ 8210E78
diff --git a/data/scripts/maps/MeteorFalls_1F_2R.inc b/data/scripts/maps/MeteorFalls_1F_2R.inc
index 76aad489f..4f4ab7c6b 100644
--- a/data/scripts/maps/MeteorFalls_1F_2R.inc
+++ b/data/scripts/maps/MeteorFalls_1F_2R.inc
@@ -15,7 +15,7 @@ MeteorFalls_1F_2R_EventScript_22C50A:: @ 822C50A
waitmovement 0
msgbox MeteorFalls_1F_2R_Text_22C6F6, 4
setvar VAR_0x8004, 392
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 392
callstd 8
release
@@ -38,7 +38,7 @@ MeteorFalls_1F_2R_EventScript_22C540:: @ 822C540
MeteorFalls_1F_2R_EventScript_22C570:: @ 822C570
msgbox MeteorFalls_1F_2R_Text_22C99C, 4
setvar VAR_0x8004, 681
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 681
callstd 8
release
@@ -61,7 +61,7 @@ MeteorFalls_1F_2R_EventScript_22C5A4:: @ 822C5A4
MeteorFalls_1F_2R_EventScript_22C5D4:: @ 822C5D4
msgbox MeteorFalls_1F_2R_Text_22C99C, 4
setvar VAR_0x8004, 681
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 681
callstd 8
release
diff --git a/data/scripts/maps/MossdeepCity_SpaceCenter_2F.inc b/data/scripts/maps/MossdeepCity_SpaceCenter_2F.inc
index b23da6481..cee99c4d5 100644
--- a/data/scripts/maps/MossdeepCity_SpaceCenter_2F.inc
+++ b/data/scripts/maps/MossdeepCity_SpaceCenter_2F.inc
@@ -250,13 +250,13 @@ MossdeepCity_SpaceCenter_2F_EventScript_223FDA:: @ 8223FDA
MossdeepCity_SpaceCenter_2F_EventScript_22400C:: @ 822400C
applymovement VAR_LAST_TALKED, MossdeepCity_SpaceCenter_2F_Movement_2725AA
waitmovement 0
- special copy_player_party_to_sav1
+ special SavePlayerParty
fadescreen 1
special sub_80F9438
waitstate
compare VAR_RESULT, 0
goto_if 5, MossdeepCity_SpaceCenter_2F_EventScript_224032
- special copy_player_party_from_sav1
+ special LoadPlayerParty
goto MossdeepCity_SpaceCenter_2F_EventScript_223FDA
MossdeepCity_SpaceCenter_2F_EventScript_224032:: @ 8224032
@@ -270,7 +270,7 @@ MossdeepCity_SpaceCenter_2F_EventScript_224032:: @ 8224032
waitstate
setvar VAR_0x8004, 6
special sub_81A1780
- special copy_player_party_from_sav1
+ special LoadPlayerParty
switch VAR_RESULT
case 1, MossdeepCity_SpaceCenter_2F_EventScript_224071
fadescreen 1
diff --git a/data/scripts/maps/MtChimney.inc b/data/scripts/maps/MtChimney.inc
index e445fc23f..b4825579c 100644
--- a/data/scripts/maps/MtChimney.inc
+++ b/data/scripts/maps/MtChimney.inc
@@ -500,7 +500,7 @@ MtChimney_EventScript_22F176:: @ 822F176
waitmovement 0
msgbox MtChimney_Text_2300E3, 4
setvar VAR_0x8004, 313
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 313
callstd 8
release
@@ -545,7 +545,7 @@ MtChimney_EventScript_22F234:: @ 822F234
waitmovement 0
msgbox MtChimney_Text_230557, 4
setvar VAR_0x8004, 1
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 1
callstd 8
release
diff --git a/data/scripts/maps/MtPyre_3F.inc b/data/scripts/maps/MtPyre_3F.inc
index 0d733a433..ec5373509 100644
--- a/data/scripts/maps/MtPyre_3F.inc
+++ b/data/scripts/maps/MtPyre_3F.inc
@@ -25,7 +25,7 @@ MtPyre_3F_EventScript_2317AD:: @ 82317AD
waitmovement 0
msgbox MtPyre_3F_Text_231A49, 4
setvar VAR_0x8004, 9
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 9
callstd 8
release
diff --git a/data/scripts/maps/MtPyre_6F.inc b/data/scripts/maps/MtPyre_6F.inc
index 7a98eb2ab..8d5d912c2 100644
--- a/data/scripts/maps/MtPyre_6F.inc
+++ b/data/scripts/maps/MtPyre_6F.inc
@@ -15,7 +15,7 @@ MtPyre_6F_EventScript_231D67:: @ 8231D67
waitmovement 0
msgbox MtPyre_6F_Text_231E43, 4
setvar VAR_0x8004, 108
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 108
callstd 8
release
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/PetalburgCity.inc b/data/scripts/maps/PetalburgCity.inc
index 0da686052..c297d61a7 100644
--- a/data/scripts/maps/PetalburgCity.inc
+++ b/data/scripts/maps/PetalburgCity.inc
@@ -30,7 +30,7 @@ PetalburgCity_MapScript2_1DC31C: @ 81DC31C
PetalburgCity_EventScript_1DC32E:: @ 81DC32E
lockall
- special copy_player_party_to_sav1
+ special SavePlayerParty
special PutZigzagoonInPlayerParty
applymovement 2, PetalburgCity_Movement_1DC451
applymovement 255, PetalburgCity_Movement_1DC430
@@ -47,7 +47,7 @@ PetalburgCity_EventScript_1DC32E:: @ 81DC32E
setvar VAR_0x4057, 3
fadedefaultbgm
clearflag FLAG_SPECIAL_FLAG_0x4001
- special copy_player_party_from_sav1
+ special LoadPlayerParty
setvar VAR_0x4085, 1
warp PETALBURG_CITY_GYM, 255, 4, 108
waitstate
diff --git a/data/scripts/maps/PetalburgCity_Gym.inc b/data/scripts/maps/PetalburgCity_Gym.inc
index 627ae904c..2751e345e 100644
--- a/data/scripts/maps/PetalburgCity_Gym.inc
+++ b/data/scripts/maps/PetalburgCity_Gym.inc
@@ -423,8 +423,8 @@ PetalburgCity_Gym_EventScript_204E3B:: @ 8204E3B
setflag FLAG_BADGE05_GET
special sub_813B9A0
call PetalburgCity_Gym_EventScript_2721F8
- setflag FLAG_0x391
- clearflag FLAG_0x390
+ setflag FLAG_SPRITEVIS_MAUVILLE_GYM_WATTSON
+ clearflag FLAG_SPRITEVIS_MAUVILLE_CITY_WATTSON
setvar VAR_0x8008, 5
call PetalburgCity_Gym_EventScript_271F43
clearflag FLAG_0x3AC
diff --git a/data/scripts/maps/PetalburgWoods.inc b/data/scripts/maps/PetalburgWoods.inc
index 5afb12d68..907f07623 100644
--- a/data/scripts/maps/PetalburgWoods.inc
+++ b/data/scripts/maps/PetalburgWoods.inc
@@ -301,7 +301,7 @@ PetalburgWoods_EventScript_22E2C5:: @ 822E2C5
PetalburgWoods_EventScript_22E2D6:: @ 822E2D6
msgbox PetalburgWoods_Text_22E8C3, 4
setvar VAR_0x8004, 621
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 621
callstd 8
release
@@ -317,7 +317,7 @@ PetalburgWoods_EventScript_22E2EF:: @ 822E2EF
PetalburgWoods_EventScript_22E302:: @ 822E302
msgbox PetalburgWoods_Text_22E914, 4
setvar VAR_0x8004, 621
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 621
callstd 8
release
diff --git a/data/scripts/maps/Route102.inc b/data/scripts/maps/Route102.inc
index ae82ea0b4..cd817df35 100644
--- a/data/scripts/maps/Route102.inc
+++ b/data/scripts/maps/Route102.inc
@@ -41,7 +41,7 @@ Route102_EventScript_1EC146:: @ 81EC146
Route102_EventScript_1EC157:: @ 81EC157
msgbox Route102_Text_294668, 4
setvar VAR_0x8004, 318
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 318
callstd 8
release
@@ -57,7 +57,7 @@ Route102_EventScript_1EC170:: @ 81EC170
Route102_EventScript_1EC183:: @ 81EC183
msgbox Route102_Text_2945EB, 4
setvar VAR_0x8004, 318
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 318
callstd 8
release
diff --git a/data/scripts/maps/Route103.inc b/data/scripts/maps/Route103.inc
index fa055a971..d71ec729c 100644
--- a/data/scripts/maps/Route103.inc
+++ b/data/scripts/maps/Route103.inc
@@ -218,7 +218,7 @@ Route103_EventScript_1EC60B:: @ 81EC60B
Route103_EventScript_1EC63A:: @ 81EC63A
msgbox Route103_Text_294B8A, 4
setvar VAR_0x8004, 481
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 481
callstd 8
release
@@ -240,7 +240,7 @@ Route103_EventScript_1EC66E:: @ 81EC66E
Route103_EventScript_1EC69D:: @ 81EC69D
msgbox Route103_Text_294B8A, 4
setvar VAR_0x8004, 481
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 481
callstd 8
release
@@ -270,7 +270,7 @@ Route103_EventScript_1EC714:: @ 81EC714
waitmovement 0
msgbox Route103_Text_294F7E, 4
setvar VAR_0x8004, 293
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 293
callstd 8
release
diff --git a/data/scripts/maps/Route104.inc b/data/scripts/maps/Route104.inc
index e672b7ad2..314b47e1d 100644
--- a/data/scripts/maps/Route104.inc
+++ b/data/scripts/maps/Route104.inc
@@ -904,7 +904,7 @@ Route104_EventScript_1ED3CE:: @ 81ED3CE
Route104_EventScript_1ED3DF:: @ 81ED3DF
msgbox Route104_Text_29576B, 4
setvar VAR_0x8004, 604
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 604
callstd 8
release
@@ -920,7 +920,7 @@ Route104_EventScript_1ED3F8:: @ 81ED3F8
Route104_EventScript_1ED40B:: @ 81ED40B
msgbox Route104_Text_2956FF, 4
setvar VAR_0x8004, 604
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 604
callstd 8
release
@@ -955,7 +955,7 @@ Route104_EventScript_1ED47C:: @ 81ED47C
Route104_EventScript_1ED48D:: @ 81ED48D
msgbox Route104_Text_29595A, 4
setvar VAR_0x8004, 136
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 136
callstd 8
release
@@ -971,7 +971,7 @@ Route104_EventScript_1ED4A6:: @ 81ED4A6
Route104_EventScript_1ED4B9:: @ 81ED4B9
msgbox Route104_Text_2958F8, 4
setvar VAR_0x8004, 136
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 136
callstd 8
release
@@ -1006,7 +1006,7 @@ Route104_EventScript_1ED52A:: @ 81ED52A
Route104_EventScript_1ED53B:: @ 81ED53B
msgbox Route104_Text_295B60, 4
setvar VAR_0x8004, 114
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 114
callstd 8
release
@@ -1022,7 +1022,7 @@ Route104_EventScript_1ED554:: @ 81ED554
Route104_EventScript_1ED567:: @ 81ED567
msgbox Route104_Text_295B01, 4
setvar VAR_0x8004, 114
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 114
callstd 8
release
diff --git a/data/scripts/maps/Route105.inc b/data/scripts/maps/Route105.inc
index 32c6826af..3cb6d9ae6 100644
--- a/data/scripts/maps/Route105.inc
+++ b/data/scripts/maps/Route105.inc
@@ -75,7 +75,7 @@ Route105_EventScript_1EE300:: @ 81EE300
waitmovement 0
msgbox Route105_Text_296159, 4
setvar VAR_0x8004, 737
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 737
callstd 8
release
diff --git a/data/scripts/maps/Route106.inc b/data/scripts/maps/Route106.inc
index 132621cb8..fdfff0587 100644
--- a/data/scripts/maps/Route106.inc
+++ b/data/scripts/maps/Route106.inc
@@ -29,7 +29,7 @@ Route106_EventScript_1EE4ED:: @ 81EE4ED
waitmovement 0
msgbox Route106_Text_2963E3, 4
setvar VAR_0x8004, 339
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 339
callstd 8
release
diff --git a/data/scripts/maps/Route107.inc b/data/scripts/maps/Route107.inc
index b7d144ef2..2c8364592 100644
--- a/data/scripts/maps/Route107.inc
+++ b/data/scripts/maps/Route107.inc
@@ -20,7 +20,7 @@ Route107_EventScript_1EE5D8:: @ 81EE5D8
waitmovement 0
msgbox Route107_Text_29685A, 4
setvar VAR_0x8004, 155
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 155
callstd 8
release
diff --git a/data/scripts/maps/Route108.inc b/data/scripts/maps/Route108.inc
index e77006508..25657c5a4 100644
--- a/data/scripts/maps/Route108.inc
+++ b/data/scripts/maps/Route108.inc
@@ -40,7 +40,7 @@ Route108_EventScript_1EE729:: @ 81EE729
waitmovement 0
msgbox Route108_Text_296FD8, 4
setvar VAR_0x8004, 740
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 740
callstd 8
release
diff --git a/data/scripts/maps/Route109.inc b/data/scripts/maps/Route109.inc
index d708246de..123f78db1 100644
--- a/data/scripts/maps/Route109.inc
+++ b/data/scripts/maps/Route109.inc
@@ -409,7 +409,7 @@ Route109_EventScript_1EEAC5:: @ 81EEAC5
waitmovement 0
msgbox Route109_Text_2973C1, 4
setvar VAR_0x8004, 64
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 64
callstd 8
release
@@ -434,7 +434,7 @@ Route109_EventScript_1EEB27:: @ 81EEB27
waitmovement 0
msgbox Route109_Text_297520, 4
setvar VAR_0x8004, 57
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 57
callstd 8
release
diff --git a/data/scripts/maps/Route110.inc b/data/scripts/maps/Route110.inc
index 3c743fb3c..9d00303c9 100644
--- a/data/scripts/maps/Route110.inc
+++ b/data/scripts/maps/Route110.inc
@@ -188,7 +188,7 @@ Route110_EventScript_1EF44C:: @ 81EF44C
waitmovement 0
msgbox Route110_Text_298201, 4
setvar VAR_0x8004, 512
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 512
callstd 8
release
@@ -228,7 +228,7 @@ Route110_EventScript_1EF4F3:: @ 81EF4F3
waitmovement 0
msgbox Route110_Text_297CFE, 4
setvar VAR_0x8004, 353
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 353
callstd 8
release
@@ -258,7 +258,7 @@ Route110_EventScript_1EF56C:: @ 81EF56C
waitmovement 0
msgbox Route110_Text_297ECD, 4
setvar VAR_0x8004, 358
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 358
callstd 8
release
@@ -283,7 +283,7 @@ Route110_EventScript_1EF5CE:: @ 81EF5CE
waitmovement 0
msgbox Route110_Text_2983EE, 4
setvar VAR_0x8004, 302
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 302
callstd 8
release
diff --git a/data/scripts/maps/Route110_TrickHousePuzzle6.inc b/data/scripts/maps/Route110_TrickHousePuzzle6.inc
index a043b2ec4..0a0e025af 100644
--- a/data/scripts/maps/Route110_TrickHousePuzzle6.inc
+++ b/data/scripts/maps/Route110_TrickHousePuzzle6.inc
@@ -4,7 +4,7 @@ Route110_TrickHousePuzzle6_MapScripts:: @ 826DDA7
.byte 0
Route110_TrickHousePuzzle6_MapScript1_26DDB2: @ 826DDB2
- special sub_80FBE90
+ special RotatingGate_InitPuzzle
end
Route110_TrickHousePuzzle6_MapScript2_26DDB6: @ 826DDB6
@@ -12,7 +12,7 @@ Route110_TrickHousePuzzle6_MapScript2_26DDB6: @ 826DDB6
.2byte 0
Route110_TrickHousePuzzle6_EventScript_26DDC0:: @ 826DDC0
- special sub_80FBED0
+ special RotatingGate_InitPuzzleAndGraphics
end
Route110_TrickHousePuzzle6_EventScript_26DDC4:: @ 826DDC4
diff --git a/data/scripts/maps/Route111.inc b/data/scripts/maps/Route111.inc
index 8e1672dfe..a23565c14 100644
--- a/data/scripts/maps/Route111.inc
+++ b/data/scripts/maps/Route111.inc
@@ -485,7 +485,7 @@ Route111_EventScript_1F128C:: @ 81F128C
waitmovement 0
msgbox Route111_Text_298C00, 4
setvar VAR_0x8004, 44
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 44
callstd 8
release
@@ -525,7 +525,7 @@ Route111_EventScript_1F1333:: @ 81F1333
waitmovement 0
msgbox Route111_Text_29903D, 4
setvar VAR_0x8004, 78
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 78
callstd 8
release
@@ -550,7 +550,7 @@ Route111_EventScript_1F1395:: @ 81F1395
waitmovement 0
msgbox Route111_Text_29921D, 4
setvar VAR_0x8004, 94
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 94
callstd 8
release
diff --git a/data/scripts/maps/Route112.inc b/data/scripts/maps/Route112.inc
index 88262fadb..0ad5ee47c 100644
--- a/data/scripts/maps/Route112.inc
+++ b/data/scripts/maps/Route112.inc
@@ -79,7 +79,7 @@ Route112_EventScript_1F1EAD:: @ 81F1EAD
waitmovement 0
msgbox Route112_Text_29993C, 4
setvar VAR_0x8004, 627
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 627
callstd 8
release
diff --git a/data/scripts/maps/Route113.inc b/data/scripts/maps/Route113.inc
index c1ce29b72..d990527a6 100644
--- a/data/scripts/maps/Route113.inc
+++ b/data/scripts/maps/Route113.inc
@@ -72,7 +72,7 @@ Route113_EventScript_1F221A:: @ 81F221A
waitmovement 0
msgbox Route113_Text_299F49, 4
setvar VAR_0x8004, 434
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 434
callstd 8
release
@@ -97,7 +97,7 @@ Route113_EventScript_1F227C:: @ 81F227C
waitmovement 0
msgbox Route113_Text_29A0A2, 4
setvar VAR_0x8004, 419
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 419
callstd 8
release
diff --git a/data/scripts/maps/Route114.inc b/data/scripts/maps/Route114.inc
index 6be6bea91..9443d35bc 100644
--- a/data/scripts/maps/Route114.inc
+++ b/data/scripts/maps/Route114.inc
@@ -122,7 +122,7 @@ Route114_EventScript_1F26C8:: @ 81F26C8
waitmovement 0
msgbox Route114_Text_29A9F7, 4
setvar VAR_0x8004, 143
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 143
callstd 8
release
@@ -147,7 +147,7 @@ Route114_EventScript_1F272A:: @ 81F272A
waitmovement 0
msgbox Route114_Text_29ABA6, 4
setvar VAR_0x8004, 206
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 206
callstd 8
release
diff --git a/data/scripts/maps/Route115.inc b/data/scripts/maps/Route115.inc
index 69edd5830..2d4f7c2e3 100644
--- a/data/scripts/maps/Route115.inc
+++ b/data/scripts/maps/Route115.inc
@@ -50,7 +50,7 @@ Route115_EventScript_1F29BA:: @ 81F29BA
waitmovement 0
msgbox Route115_Text_29B2B3, 4
setvar VAR_0x8004, 307
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 307
callstd 8
release
@@ -80,7 +80,7 @@ Route115_EventScript_1F2A33:: @ 81F2A33
waitmovement 0
msgbox Route115_Text_29B50B, 4
setvar VAR_0x8004, 183
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 183
callstd 8
release
@@ -105,7 +105,7 @@ Route115_EventScript_1F2A95:: @ 81F2A95
waitmovement 0
msgbox Route115_Text_29B6AB, 4
setvar VAR_0x8004, 427
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 427
callstd 8
release
diff --git a/data/scripts/maps/Route116.inc b/data/scripts/maps/Route116.inc
index 00bc1ff6c..a8d73397c 100644
--- a/data/scripts/maps/Route116.inc
+++ b/data/scripts/maps/Route116.inc
@@ -281,7 +281,7 @@ Route116_EventScript_1F2F03:: @ 81F2F03
waitmovement 0
msgbox Route116_Text_29BE71, 4
setvar VAR_0x8004, 273
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 273
callstd 8
release
@@ -297,7 +297,7 @@ Route116_EventScript_1F2F22:: @ 81F2F22
Route116_EventScript_1F2F35:: @ 81F2F35
msgbox Route116_Text_29BDEF, 4
setvar VAR_0x8004, 273
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 273
callstd 8
release
@@ -342,7 +342,7 @@ Route116_EventScript_1F2FDF:: @ 81F2FDF
waitmovement 0
msgbox Route116_Text_29C096, 4
setvar VAR_0x8004, 280
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 280
callstd 8
release
@@ -358,7 +358,7 @@ Route116_EventScript_1F2FFE:: @ 81F2FFE
Route116_EventScript_1F3011:: @ 81F3011
msgbox Route116_Text_29C052, 4
setvar VAR_0x8004, 280
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 280
callstd 8
release
diff --git a/data/scripts/maps/Route117.inc b/data/scripts/maps/Route117.inc
index 20240dc82..55a7b910e 100644
--- a/data/scripts/maps/Route117.inc
+++ b/data/scripts/maps/Route117.inc
@@ -52,7 +52,7 @@ Route117_EventScript_1F39FC:: @ 81F39FC
waitmovement 0
msgbox Route117_Text_29C508, 4
setvar VAR_0x8004, 538
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 538
callstd 8
release
@@ -77,7 +77,7 @@ Route117_EventScript_1F3A5E:: @ 81F3A5E
waitmovement 0
msgbox Route117_Text_29C6BC, 4
setvar VAR_0x8004, 545
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 545
callstd 8
release
@@ -102,7 +102,7 @@ Route117_EventScript_1F3AC0:: @ 81F3AC0
waitmovement 0
msgbox Route117_Text_29C846, 4
setvar VAR_0x8004, 364
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 364
callstd 8
release
@@ -127,7 +127,7 @@ Route117_EventScript_1F3B22:: @ 81F3B22
waitmovement 0
msgbox Route117_Text_29CA32, 4
setvar VAR_0x8004, 369
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 369
callstd 8
release
@@ -155,7 +155,7 @@ Route117_EventScript_1F3B6F:: @ 81F3B6F
Route117_EventScript_1F3B9F:: @ 81F3B9F
msgbox Route117_Text_29CD1D, 4
setvar VAR_0x8004, 287
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 287
callstd 8
release
@@ -178,7 +178,7 @@ Route117_EventScript_1F3BD3:: @ 81F3BD3
Route117_EventScript_1F3C03:: @ 81F3C03
msgbox Route117_Text_29CD1D, 4
setvar VAR_0x8004, 287
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 287
callstd 8
release
diff --git a/data/scripts/maps/Route118.inc b/data/scripts/maps/Route118.inc
index 4894e8187..27a2539e1 100644
--- a/data/scripts/maps/Route118.inc
+++ b/data/scripts/maps/Route118.inc
@@ -200,7 +200,7 @@ Route118_EventScript_1F3FB3:: @ 81F3FB3
waitmovement 0
msgbox Route118_Text_29D343, 4
setvar VAR_0x8004, 37
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 37
callstd 8
release
@@ -235,7 +235,7 @@ Route118_EventScript_1F4043:: @ 81F4043
waitmovement 0
msgbox Route118_Text_29D74A, 4
setvar VAR_0x8004, 196
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 196
callstd 8
release
diff --git a/data/scripts/maps/Route119.inc b/data/scripts/maps/Route119.inc
index 72707186b..5f60851b4 100644
--- a/data/scripts/maps/Route119.inc
+++ b/data/scripts/maps/Route119.inc
@@ -18,7 +18,7 @@ Route119_EventScript_1F4439:: @ 81F4439
Route119_MapScript1_1F444D: @ 81F444D
call Route119_EventScript_271ED7
call Route119_EventScript_271EFB
- compare VAR_0x40B3, 1
+ compare VAR_WEATHER_INSTITUTE_STATE, 1
call_if 1, Route119_EventScript_1F4466
special SetRoute119Weather
end
@@ -26,7 +26,7 @@ Route119_MapScript1_1F444D: @ 81F444D
Route119_EventScript_1F4466:: @ 81F4466
setflag FLAG_0x37D
clearflag FLAG_0x37C
- setvar VAR_0x40B3, 2
+ setvar VAR_WEATHER_INSTITUTE_STATE, 2
return
Route119_EventScript_1F4472:: @ 81F4472
@@ -380,7 +380,7 @@ Route119_EventScript_1F483C:: @ 81F483C
waitmovement 0
msgbox Route119_Text_29DD1C, 4
setvar VAR_0x8004, 552
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 552
callstd 8
release
@@ -405,7 +405,7 @@ Route119_EventScript_1F489E:: @ 81F489E
waitmovement 0
msgbox Route119_Text_29DEF7, 4
setvar VAR_0x8004, 559
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 559
callstd 8
release
diff --git a/data/scripts/maps/Route119_WeatherInstitute_1F.inc b/data/scripts/maps/Route119_WeatherInstitute_1F.inc
index 399692db3..b008f52c0 100644
--- a/data/scripts/maps/Route119_WeatherInstitute_1F.inc
+++ b/data/scripts/maps/Route119_WeatherInstitute_1F.inc
@@ -3,7 +3,7 @@ Route119_WeatherInstitute_1F_MapScripts:: @ 826FA86
.byte 0
Route119_WeatherInstitute_1F_MapScript1_26FA8C: @ 826FA8C
- compare VAR_0x40B3, 0
+ compare VAR_WEATHER_INSTITUTE_STATE, 0
call_if 1, Route119_WeatherInstitute_1F_EventScript_26FA98
end
@@ -16,7 +16,7 @@ Route119_WeatherInstitute_1F_EventScript_26FAA4:: @ 826FAA4
lock
faceplayer
special GetPlayerBigGuyGirlString
- compare VAR_0x40B3, 0
+ compare VAR_WEATHER_INSTITUTE_STATE, 0
goto_eq Route119_WeatherInstitute_1F_EventScript_26FABE
msgbox Route119_WeatherInstitute_1F_Text_26FCE5, 4
release
diff --git a/data/scripts/maps/Route119_WeatherInstitute_2F.inc b/data/scripts/maps/Route119_WeatherInstitute_2F.inc
index 38f79763d..c8f24f33d 100644
--- a/data/scripts/maps/Route119_WeatherInstitute_2F.inc
+++ b/data/scripts/maps/Route119_WeatherInstitute_2F.inc
@@ -3,9 +3,9 @@ Route119_WeatherInstitute_2F_MapScripts:: @ 826FF1E
.byte 0
Route119_WeatherInstitute_2F_MapScript1_26FF24: @ 826FF24
- compare VAR_0x40B3, 0
+ compare VAR_WEATHER_INSTITUTE_STATE, 0
call_if 1, Route119_WeatherInstitute_2F_EventScript_26FF44
- compare VAR_0x40B3, 1
+ compare VAR_WEATHER_INSTITUTE_STATE, 1
call_if 1, Route119_WeatherInstitute_2F_EventScript_26FF50
checkflag FLAG_SYS_GAME_CLEAR
call_if 1, Route119_WeatherInstitute_2F_EventScript_26FF5C
@@ -62,7 +62,7 @@ Route119_WeatherInstitute_2F_EventScript_26FFC8:: @ 826FFC8
waitmovement 0
msgbox Route119_WeatherInstitute_2F_Text_2705DD, 4
closemessage
- setvar VAR_0x40B3, 1
+ setvar VAR_WEATHER_INSTITUTE_STATE, 1
clearflag FLAG_0x37D
fadedefaultbgm
fadescreen 1
diff --git a/data/scripts/maps/Route120.inc b/data/scripts/maps/Route120.inc
index f89ac7e86..b3475a3ed 100644
--- a/data/scripts/maps/Route120.inc
+++ b/data/scripts/maps/Route120.inc
@@ -309,7 +309,7 @@ Route120_EventScript_1F581A:: @ 81F581A
waitmovement 0
msgbox Route120_Text_29E75D, 4
setvar VAR_0x8004, 406
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 406
callstd 8
release
@@ -344,7 +344,7 @@ Route120_EventScript_1F58AA:: @ 81F58AA
waitmovement 0
msgbox Route120_Text_29EA31, 4
setvar VAR_0x8004, 226
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 226
callstd 8
release
diff --git a/data/scripts/maps/Route121.inc b/data/scripts/maps/Route121.inc
index c813fe6ac..d579401b8 100644
--- a/data/scripts/maps/Route121.inc
+++ b/data/scripts/maps/Route121.inc
@@ -84,7 +84,7 @@ Route121_EventScript_1F5EB7:: @ 81F5EB7
waitmovement 0
msgbox Route121_Text_29F25B, 4
setvar VAR_0x8004, 254
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 254
callstd 8
release
@@ -124,7 +124,7 @@ Route121_EventScript_1F5F66:: @ 81F5F66
waitmovement 0
msgbox Route121_Text_29F69F, 4
setvar VAR_0x8004, 127
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 127
callstd 8
release
@@ -169,7 +169,7 @@ Route121_EventScript_1F6024:: @ 81F6024
waitmovement 0
msgbox Route121_Text_29F80D, 4
setvar VAR_0x8004, 767
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 767
callstd 8
release
diff --git a/data/scripts/maps/Route123.inc b/data/scripts/maps/Route123.inc
index f6d535e38..b622a931b 100644
--- a/data/scripts/maps/Route123.inc
+++ b/data/scripts/maps/Route123.inc
@@ -74,7 +74,7 @@ Route123_EventScript_1F6236:: @ 81F6236
waitmovement 0
msgbox Route123_Text_29FE70, 4
setvar VAR_0x8004, 238
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 238
callstd 8
release
@@ -99,7 +99,7 @@ Route123_EventScript_1F6298:: @ 81F6298
waitmovement 0
msgbox Route123_Text_2A0027, 4
setvar VAR_0x8004, 249
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 249
callstd 8
release
@@ -174,7 +174,7 @@ Route123_EventScript_1F63E8:: @ 81F63E8
waitmovement 0
msgbox Route123_Text_2A03C1, 4
setvar VAR_0x8004, 195
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 195
callstd 8
release
diff --git a/data/scripts/maps/Route124.inc b/data/scripts/maps/Route124.inc
index 2079c338d..b21e55417 100644
--- a/data/scripts/maps/Route124.inc
+++ b/data/scripts/maps/Route124.inc
@@ -35,7 +35,7 @@ Route124_EventScript_1F65DF:: @ 81F65DF
waitmovement 0
msgbox Route124_Text_2A0C14, 4
setvar VAR_0x8004, 449
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 449
callstd 8
release
@@ -68,7 +68,7 @@ Route124_EventScript_1F6643:: @ 81F6643
Route124_EventScript_1F6673:: @ 81F6673
msgbox Route124_Text_2A109F, 4
setvar VAR_0x8004, 687
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 687
callstd 8
release
@@ -91,7 +91,7 @@ Route124_EventScript_1F66A7:: @ 81F66A7
Route124_EventScript_1F66D7:: @ 81F66D7
msgbox Route124_Text_2A109F, 4
setvar VAR_0x8004, 687
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 687
callstd 8
release
diff --git a/data/scripts/maps/Route125.inc b/data/scripts/maps/Route125.inc
index de3ae07b5..2dda3fb2d 100644
--- a/data/scripts/maps/Route125.inc
+++ b/data/scripts/maps/Route125.inc
@@ -60,7 +60,7 @@ Route125_EventScript_1F682C:: @ 81F682C
waitmovement 0
msgbox Route125_Text_2A17CF, 4
setvar VAR_0x8004, 492
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 492
callstd 8
release
diff --git a/data/scripts/maps/Route126.inc b/data/scripts/maps/Route126.inc
index d03e08103..3ea9ba786 100644
--- a/data/scripts/maps/Route126.inc
+++ b/data/scripts/maps/Route126.inc
@@ -56,7 +56,7 @@ Route126_EventScript_1F69A3:: @ 81F69A3
waitmovement 0
msgbox Route126_Text_2A1F5A, 4
setvar VAR_0x8004, 377
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 377
callstd 8
release
diff --git a/data/scripts/maps/Route127.inc b/data/scripts/maps/Route127.inc
index cbc7d7da1..12e5bf127 100644
--- a/data/scripts/maps/Route127.inc
+++ b/data/scripts/maps/Route127.inc
@@ -75,7 +75,7 @@ Route127_EventScript_1F6B02:: @ 81F6B02
waitmovement 0
msgbox Route127_Text_2A26EE, 4
setvar VAR_0x8004, 672
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 672
callstd 8
release
diff --git a/data/scripts/maps/Route128.inc b/data/scripts/maps/Route128.inc
index 6d336e464..f62f78404 100644
--- a/data/scripts/maps/Route128.inc
+++ b/data/scripts/maps/Route128.inc
@@ -189,7 +189,7 @@ Route128_EventScript_1F6CEA:: @ 81F6CEA
waitmovement 0
msgbox Route128_Text_2A2916, 4
setvar VAR_0x8004, 376
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 376
callstd 8
release
@@ -214,7 +214,7 @@ Route128_EventScript_1F6D4C:: @ 81F6D4C
waitmovement 0
msgbox Route128_Text_2A2AF9, 4
setvar VAR_0x8004, 386
- special sub_81D1C20
+ special SetMatchCallRegisteredFlag
setorcopyvar VAR_0x8000, 386
callstd 8
release
diff --git a/data/scripts/maps/SlateportCity_BattleTentBattleRoom.inc b/data/scripts/maps/SlateportCity_BattleTentBattleRoom.inc
index e0c6da76c..e52828a19 100644
--- a/data/scripts/maps/SlateportCity_BattleTentBattleRoom.inc
+++ b/data/scripts/maps/SlateportCity_BattleTentBattleRoom.inc
@@ -67,7 +67,7 @@ SlateportCity_BattleTentCorridor_EventScript_209A1B:: @ 8209A1B
setvar VAR_0x8005, 0
setvar VAR_0x8006, 4
special sub_81A1780
- special copy_player_party_from_sav1
+ special LoadPlayerParty
warp SLATEPORT_CITY_BATTLE_TENT_LOBBY, 255, 6, 6
waitstate
@@ -93,7 +93,7 @@ SlateportCity_BattleTentCorridor_EventScript_209A7B:: @ 8209A7B
setvar VAR_0x8005, 0
setvar VAR_0x8006, 3
special sub_81A1780
- special copy_player_party_from_sav1
+ special LoadPlayerParty
warp SLATEPORT_CITY_BATTLE_TENT_LOBBY, 255, 6, 6
waitstate
@ forced stop
diff --git a/data/scripts/maps/SlateportCity_BattleTentCorridor.inc b/data/scripts/maps/SlateportCity_BattleTentCorridor.inc
index 6a0bafb45..b293dc140 100644
--- a/data/scripts/maps/SlateportCity_BattleTentCorridor.inc
+++ b/data/scripts/maps/SlateportCity_BattleTentCorridor.inc
@@ -140,7 +140,7 @@ SlateportCity_BattleTentCorridor_EventScript_209022:: @ 8209022
end
SlateportCity_BattleTentCorridor_EventScript_209044:: @ 8209044
- special copy_player_party_to_sav1
+ special SavePlayerParty
setvar VAR_0x8004, 10
setvar VAR_0x8005, 0
special sub_81A5E74
diff --git a/data/scripts/maps/SlateportCity_BattleTentLobby.inc b/data/scripts/maps/SlateportCity_BattleTentLobby.inc
index ca51ab57e..e5f510179 100644
--- a/data/scripts/maps/SlateportCity_BattleTentLobby.inc
+++ b/data/scripts/maps/SlateportCity_BattleTentLobby.inc
@@ -122,7 +122,7 @@ SlateportCity_BattleTentLobby_EventScript_2088AA:: @ 82088AA
special sub_81B9D08
compare VAR_RESULT, 0
goto_if 5, SlateportCity_BattleTentLobby_EventScript_2087E9
- special copy_player_party_to_sav1
+ special SavePlayerParty
msgbox SlateportCity_BattleTentLobby_Text_2C5810, 4
SlateportCity_BattleTentLobby_EventScript_2088CA:: @ 82088CA
@@ -228,7 +228,7 @@ SlateportCity_BattleTentLobby_EventScript_208A14:: @ 8208A14
goto SlateportCity_BattleTentLobby_EventScript_208A2E
SlateportCity_BattleTentLobby_EventScript_208A2B:: @ 8208A2B
- special copy_player_party_from_sav1
+ special LoadPlayerParty
SlateportCity_BattleTentLobby_EventScript_208A2E:: @ 8208A2E
msgbox SlateportCity_BattleTentLobby_Text_2C5AA5, 4
diff --git a/data/scripts/maps/SootopolisCity_MysteryEventsHouse_1F.inc b/data/scripts/maps/SootopolisCity_MysteryEventsHouse_1F.inc
index 019bdce10..eaca36e59 100644
--- a/data/scripts/maps/SootopolisCity_MysteryEventsHouse_1F.inc
+++ b/data/scripts/maps/SootopolisCity_MysteryEventsHouse_1F.inc
@@ -45,7 +45,7 @@ SootopolisCity_MysteryEventsHouse_1F_EventScript_2279B7:: @ 82279B7
call_if 1, SootopolisCity_MysteryEventsHouse_1F_EventScript_227A0D
compare VAR_0x40C0, 3
call_if 1, SootopolisCity_MysteryEventsHouse_1F_EventScript_227A16
- special copy_player_party_from_sav1
+ special LoadPlayerParty
setvar VAR_0x40C0, 0
releaseall
end
@@ -90,7 +90,7 @@ SootopolisCity_MysteryEventsHouse_1F_EventScript_227A4E:: @ 8227A4E
end
SootopolisCity_MysteryEventsHouse_1F_EventScript_227A58:: @ 8227A58
- special copy_player_party_to_sav1
+ special SavePlayerParty
special sub_8139238
msgbox SootopolisCity_MysteryEventsHouse_1F_Text_227BFC, 5
compare VAR_RESULT, 0
@@ -101,11 +101,11 @@ SootopolisCity_MysteryEventsHouse_1F_EventScript_227A58:: @ 8227A58
msgbox SootopolisCity_MysteryEventsHouse_1F_Text_227CEB, 5
compare VAR_RESULT, 0
goto_eq SootopolisCity_MysteryEventsHouse_1F_EventScript_227AE2
- special copy_player_party_from_sav1
+ special LoadPlayerParty
call SootopolisCity_MysteryEventsHouse_1F_EventScript_27134F
compare VAR_RESULT, 0
goto_eq SootopolisCity_MysteryEventsHouse_1F_EventScript_227AE2
- special copy_player_party_to_sav1
+ special SavePlayerParty
special sub_80F94E8
msgbox SootopolisCity_MysteryEventsHouse_1F_Text_227D21, 4
closemessage
@@ -121,7 +121,7 @@ SootopolisCity_MysteryEventsHouse_1F_EventScript_227A58:: @ 8227A58
end
SootopolisCity_MysteryEventsHouse_1F_EventScript_227AE2:: @ 8227AE2
- special copy_player_party_from_sav1
+ special LoadPlayerParty
msgbox SootopolisCity_MysteryEventsHouse_1F_Text_227C44, 4
release
end
diff --git a/data/scripts/maps/SootopolisCity_MysteryEventsHouse_B1F.inc b/data/scripts/maps/SootopolisCity_MysteryEventsHouse_B1F.inc
index 78c7303ae..0dec00967 100644
--- a/data/scripts/maps/SootopolisCity_MysteryEventsHouse_B1F.inc
+++ b/data/scripts/maps/SootopolisCity_MysteryEventsHouse_B1F.inc
@@ -32,7 +32,7 @@ SootopolisCity_MysteryEventsHouse_B1F_EventScript_227E68:: @ 8227E68
special HealPlayerParty
applymovement 255, SootopolisCity_MysteryEventsHouse_B1F_Movement_227EF9
waitmovement 0
- special copy_player_party_from_sav1
+ special LoadPlayerParty
setvar VAR_0x4001, 1
warp SOOTOPOLIS_CITY_MYSTERY_EVENTS_HOUSE_1F, 255, 3, 1
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/scripts/maps/TrainerHill_Entrance.inc b/data/scripts/maps/TrainerHill_Entrance.inc
index 77b67fb14..eb12efb4b 100644
--- a/data/scripts/maps/TrainerHill_Entrance.inc
+++ b/data/scripts/maps/TrainerHill_Entrance.inc
@@ -236,7 +236,7 @@ TrainerHill_Entrance_Movement_268385: @ 8268385
TrainerHill_Entrance_EventScript_268388:: @ 8268388
lockall
fadescreen 1
- special sub_813C904
+ special ShowTrainerHillRecords
waitstate
releaseall
end
diff --git a/data/scripts/maps/VerdanturfTown_BattleTentBattleRoom.inc b/data/scripts/maps/VerdanturfTown_BattleTentBattleRoom.inc
index b673e959b..ad2749ba8 100644
--- a/data/scripts/maps/VerdanturfTown_BattleTentBattleRoom.inc
+++ b/data/scripts/maps/VerdanturfTown_BattleTentBattleRoom.inc
@@ -59,7 +59,7 @@ VerdanturfTown_BattleTentBattleRoom_EventScript_2023AA:: @ 82023AA
setvar VAR_0x8005, 0
setvar VAR_0x8006, 4
special sub_81A1780
- special copy_player_party_from_sav1
+ special LoadPlayerParty
warp VERDANTURF_TOWN_BATTLE_TENT_LOBBY, 255, 6, 6
waitstate
@@ -81,8 +81,8 @@ VerdanturfTown_BattleTentBattleRoom_EventScript_2023C8:: @ 82023C8
applymovement 1, VerdanturfTown_BattleTentBattleRoom_Movement_2725A6
waitmovement 0
msgbox VerdanturfTown_BattleTentBattleRoom_Text_24FF00, 4
- special copy_player_party_from_sav1
- special copy_player_party_to_sav1
+ special LoadPlayerParty
+ special SavePlayerParty
setvar VAR_0x8004, 3
setvar VAR_0x8005, 3
special sub_81A1780
@@ -132,7 +132,7 @@ VerdanturfTown_BattleTentBattleRoom_EventScript_202501:: @ 8202501
setvar VAR_0x8005, 0
setvar VAR_0x8006, 3
special sub_81A1780
- special copy_player_party_from_sav1
+ special LoadPlayerParty
warp VERDANTURF_TOWN_BATTLE_TENT_LOBBY, 255, 6, 6
waitstate
diff --git a/data/scripts/maps/VerdanturfTown_BattleTentLobby.inc b/data/scripts/maps/VerdanturfTown_BattleTentLobby.inc
index a7f496820..6f1624a2d 100644
--- a/data/scripts/maps/VerdanturfTown_BattleTentLobby.inc
+++ b/data/scripts/maps/VerdanturfTown_BattleTentLobby.inc
@@ -135,7 +135,7 @@ VerdanturfTown_BattleTentLobby_EventScript_201873:: @ 8201873
special sub_81B99B4
compare VAR_RESULT, 0
goto_if 5, VerdanturfTown_BattleTentLobby_EventScript_2017EE
- special copy_player_party_to_sav1
+ special SavePlayerParty
msgbox VerdanturfTown_BattleTentLobby_Text_2C50C3, 4
VerdanturfTown_BattleTentLobby_EventScript_201893:: @ 8201893
@@ -189,7 +189,7 @@ VerdanturfTown_BattleTentLobby_EventScript_201954:: @ 8201954
setvar VAR_0x8005, 3
setvar VAR_0x8006, 0
special sub_81A1780
- special copy_player_party_from_sav1
+ special LoadPlayerParty
closemessage
delay 2
call VerdanturfTown_BattleTentLobby_EventScript_27134F
@@ -198,7 +198,7 @@ VerdanturfTown_BattleTentLobby_EventScript_201954:: @ 8201954
goto_eq VerdanturfTown_BattleTentLobby_EventScript_201A1D
VerdanturfTown_BattleTentLobby_EventScript_2019AE:: @ 82019AE
- special copy_player_party_to_sav1
+ special SavePlayerParty
setvar VAR_0x8004, 3
setvar VAR_0x8005, 3
special sub_81A1780
@@ -235,7 +235,7 @@ VerdanturfTown_BattleTentLobby_EventScript_201A1D:: @ 8201A1D
goto VerdanturfTown_BattleTentLobby_EventScript_201A37
VerdanturfTown_BattleTentLobby_EventScript_201A34:: @ 8201A34
- special copy_player_party_from_sav1
+ special LoadPlayerParty
VerdanturfTown_BattleTentLobby_EventScript_201A37:: @ 8201A37
msgbox VerdanturfTown_BattleTentLobby_Text_2C539A, 4
diff --git a/data/scripts/mauville_man.inc b/data/scripts/mauville_man.inc
index 2e00ee702..46be101e1 100644
--- a/data/scripts/mauville_man.inc
+++ b/data/scripts/mauville_man.inc
@@ -1,5 +1,5 @@
MauvilleCity_PokemonCenter_1F_EventScript_28E066:: @ 828E066
- special sub_81201DC
+ special ScrSpecial_GetCurrentMauvilleMan
switch VAR_RESULT
case 0, MauvilleCity_PokemonCenter_1F_EventScript_28E0A6
case 1, MauvilleCity_PokemonCenter_1F_EventScript_28E167
@@ -20,9 +20,9 @@ MauvilleCity_PokemonCenter_1F_EventScript_28E0A6:: @ 828E0A6
MauvilleCity_PokemonCenter_1F_EventScript_28E0C7:: @ 828E0C7
setvar VAR_0x8004, 0
- special sub_8120340
+ special ScrSpecial_PlayBardSong
delay 60
- special sub_81201F4
+ special ScrSpecial_HasBardSongBeenChanged
compare VAR_RESULT, 0
goto_eq MauvilleCity_PokemonCenter_1F_EventScript_28E0F4
msgbox MauvilleCity_PokemonCenter_1F_Text_2903E6, 4
@@ -51,12 +51,12 @@ MauvilleCity_PokemonCenter_1F_EventScript_28E113:: @ 828E113
goto_eq MauvilleCity_PokemonCenter_1F_EventScript_28E15D
msgbox MauvilleCity_PokemonCenter_1F_Text_2904C1, 4
setvar VAR_0x8004, 1
- special sub_8120340
+ special ScrSpecial_PlayBardSong
delay 60
msgbox MauvilleCity_PokemonCenter_1F_Text_2904EB, 5
compare VAR_RESULT, 0
goto_eq MauvilleCity_PokemonCenter_1F_EventScript_28E113
- special sub_8120210
+ special ScrSpecial_SaveBardSongLyrics
msgbox MauvilleCity_PokemonCenter_1F_Text_290514, 4
release
end
@@ -71,7 +71,7 @@ MauvilleCity_PokemonCenter_1F_EventScript_28E167:: @ 828E167
faceplayer
setflag FLAG_SYS_HIPSTER_MEET
msgbox MauvilleCity_PokemonCenter_1F_Text_29054C, 4
- special sub_8120358
+ special ScrSpecial_GetHipsterSpokenFlag
compare VAR_RESULT, 0
goto_eq MauvilleCity_PokemonCenter_1F_EventScript_28E18C
msgbox MauvilleCity_PokemonCenter_1F_Text_290598, 4
@@ -79,7 +79,7 @@ MauvilleCity_PokemonCenter_1F_EventScript_28E167:: @ 828E167
end
MauvilleCity_PokemonCenter_1F_EventScript_28E18C:: @ 828E18C
- special sub_812038C
+ special ScrSpecial_HipsterTeachWord
compare VAR_RESULT, 1
goto_eq MauvilleCity_PokemonCenter_1F_EventScript_28E1A4
msgbox MauvilleCity_PokemonCenter_1F_Text_290602, 4
@@ -88,7 +88,7 @@ MauvilleCity_PokemonCenter_1F_EventScript_28E18C:: @ 828E18C
MauvilleCity_PokemonCenter_1F_EventScript_28E1A4:: @ 828E1A4
msgbox MauvilleCity_PokemonCenter_1F_Text_290666, 4
- special sub_8120374
+ special ScrSpecial_SetHipsterSpokenFlag
release
end
@@ -157,7 +157,7 @@ MauvilleCity_PokemonCenter_1F_EventScript_28E4D4:: @ 828E4D4
msgbox MauvilleCity_PokemonCenter_1F_Text_28E1B1, 5
compare VAR_RESULT, 0
goto_eq MauvilleCity_PokemonCenter_1F_EventScript_28E503
- special sub_8133CD8
+ special ScrSpecial_GetTraderTradedFlag
compare VAR_RESULT, 1
goto_eq MauvilleCity_PokemonCenter_1F_EventScript_28E50D
message MauvilleCity_PokemonCenter_1F_Text_28E23F
@@ -176,7 +176,7 @@ MauvilleCity_PokemonCenter_1F_EventScript_28E50D:: @ 828E50D
end
MauvilleCity_PokemonCenter_1F_EventScript_28E517:: @ 828E517
- special sub_8133EC0
+ special ScrSpecial_TraderMenuGetDecoration
waitstate
compare VAR_0x8004, 0
goto_eq MauvilleCity_PokemonCenter_1F_EventScript_28E558
@@ -185,7 +185,7 @@ MauvilleCity_PokemonCenter_1F_EventScript_28E517:: @ 828E517
msgbox MauvilleCity_PokemonCenter_1F_Text_28E2A9, 5
compare VAR_RESULT, 0
goto_eq MauvilleCity_PokemonCenter_1F_EventScript_28E56E
- special sub_8133CF4
+ special ScrSpecial_DoesPlayerHaveNoDecorations
compare VAR_RESULT, 1
goto_eq MauvilleCity_PokemonCenter_1F_EventScript_28E57A
goto MauvilleCity_PokemonCenter_1F_EventScript_28E584
@@ -215,19 +215,19 @@ MauvilleCity_PokemonCenter_1F_EventScript_28E57A:: @ 828E57A
MauvilleCity_PokemonCenter_1F_EventScript_28E584:: @ 828E584
msgbox MauvilleCity_PokemonCenter_1F_Text_28E323, 4
- special sub_8133D8C
+ special ScrSpecial_TraderMenuGiveDecoration
waitstate
compare VAR_0x8006, 0
goto_eq MauvilleCity_PokemonCenter_1F_EventScript_28E5D4
compare VAR_0x8006, 65535
goto_eq MauvilleCity_PokemonCenter_1F_EventScript_28E5DE
- special sub_8133D2C
+ special ScrSpecial_IsDecorationFull
compare VAR_RESULT, 1
goto_eq MauvilleCity_PokemonCenter_1F_EventScript_28E5EC
msgbox MauvilleCity_PokemonCenter_1F_Text_28E3C4, 5
compare VAR_RESULT, 0
goto_eq MauvilleCity_PokemonCenter_1F_EventScript_28E584
- special sub_8133E38
+ special ScrSpecial_TraderDoDecorationTrade
msgbox MauvilleCity_PokemonCenter_1F_Text_28E424, 4
release
end
@@ -813,20 +813,20 @@ MauvilleCity_PokemonCenter_1F_EventScript_29014A:: @ 829014A
msgbox MauvilleCity_PokemonCenter_1F_Text_28E5F6, 5
compare VAR_RESULT, 0
goto_eq MauvilleCity_PokemonCenter_1F_EventScript_290219
- specialvar VAR_RESULT, sub_81213B0
+ specialvar VAR_RESULT, ScrSpecial_StorytellerGetFreeStorySlot
compare VAR_RESULT, 0
goto_eq MauvilleCity_PokemonCenter_1F_EventScript_2901DA
message MauvilleCity_PokemonCenter_1F_Text_28E673
waitmessage
- special sub_8121388
+ special ScrSpecial_StorytellerStoryListMenu
waitstate
compare VAR_RESULT, 0
goto_eq MauvilleCity_PokemonCenter_1F_EventScript_2901B7
setvar VAR_0x8008, 1
- special sub_812139C
+ special ScrSpecial_StorytellerDisplayStory
waitmessage
waitbuttonpress
- specialvar VAR_RESULT, sub_81213D8
+ specialvar VAR_RESULT, ScrSpecial_StorytellerUpdateStat
compare VAR_RESULT, 0
goto_eq MauvilleCity_PokemonCenter_1F_EventScript_2901BD
goto MauvilleCity_PokemonCenter_1F_EventScript_29020F
@@ -837,7 +837,7 @@ MauvilleCity_PokemonCenter_1F_EventScript_2901B7:: @ 82901B7
MauvilleCity_PokemonCenter_1F_EventScript_2901BD:: @ 82901BD
msgbox MauvilleCity_PokemonCenter_1F_Text_28E78A, 4
- specialvar VAR_RESULT, sub_8121424
+ specialvar VAR_RESULT, ScrSpecial_HasStorytellerAlreadyRecorded
compare VAR_RESULT, 1
goto_eq MauvilleCity_PokemonCenter_1F_EventScript_29022D
goto MauvilleCity_PokemonCenter_1F_EventScript_2901E2
@@ -849,7 +849,7 @@ MauvilleCity_PokemonCenter_1F_EventScript_2901E2:: @ 82901E2
msgbox MauvilleCity_PokemonCenter_1F_Text_28E7EE, 5
compare VAR_RESULT, 0
goto_eq MauvilleCity_PokemonCenter_1F_EventScript_290219
- specialvar VAR_RESULT, sub_8121450
+ specialvar VAR_RESULT, ScrSpecial_StorytellerInitializeRandomStat
compare VAR_RESULT, 1
goto_eq MauvilleCity_PokemonCenter_1F_EventScript_29020F
msgbox MauvilleCity_PokemonCenter_1F_Text_28E881, 4
@@ -903,7 +903,7 @@ MauvilleCity_PokemonCenter_1F_EventScript_2902F6:: @ 82902F6
end
MauvilleCity_PokemonCenter_1F_EventScript_290317:: @ 8290317
- special sub_81203C4
+ special ScrSpecial_GiddyShouldTellAnotherTale
compare VAR_RESULT, 1
goto_eq MauvilleCity_PokemonCenter_1F_EventScript_290359
compare VAR_RESULT, 0
@@ -911,7 +911,7 @@ MauvilleCity_PokemonCenter_1F_EventScript_290317:: @ 8290317
end
MauvilleCity_PokemonCenter_1F_EventScript_290331:: @ 8290331
- special sub_81203C4
+ special ScrSpecial_GiddyShouldTellAnotherTale
compare VAR_RESULT, 1
goto_eq MauvilleCity_PokemonCenter_1F_EventScript_29034B
compare VAR_RESULT, 0
@@ -924,7 +924,7 @@ MauvilleCity_PokemonCenter_1F_EventScript_29034B:: @ 829034B
end
MauvilleCity_PokemonCenter_1F_EventScript_290359:: @ 8290359
- special sub_81203FC
+ special ScrSpecial_GenerateGiddyLine
special ShowFieldMessageStringVar4
waitmessage
yesnobox 20, 8
diff --git a/data/specials.inc b/data/specials.inc
index ac4a47b69..a056de629 100644
--- a/data/specials.inc
+++ b/data/specials.inc
@@ -48,8 +48,8 @@ gSpecials:: @ 81DBA64
def_special sub_80B2FD8
def_special GetLinkPartnerNames
def_special SpawnLinkPartnerFieldObject
- def_special copy_player_party_to_sav1
- def_special copy_player_party_from_sav1
+ def_special SavePlayerParty
+ def_special LoadPlayerParty
def_special sub_80F9438
def_special sp02A_crash_sound
def_special FieldObjectInteractionGetBerryTreeData
@@ -104,32 +104,32 @@ gSpecials:: @ 81DBA64
def_special sub_80F8D24
def_special sub_80F8C7C
def_special sub_80B3000
- def_special sub_809FF80
+ def_special SaveGame
def_special sub_80FAFF8
def_special easy_chat_input_maybe
def_special sub_811EECC
- def_special sub_81201DC
- def_special sub_81201F4
- def_special sub_8120210
- def_special sub_8120358
- def_special sub_8120374
- def_special sub_812038C
- def_special sub_8120340
- def_special sub_8120B5C
- def_special sub_81203FC
- def_special sub_81203C4
- def_special sub_81213B0
- def_special sub_812139C
- def_special sub_8121388
- def_special sub_81213D8
- def_special sub_8121450
- def_special sub_8121424
- def_special sub_8133EC0
- def_special sub_8133CD8
- def_special sub_8133CF4
- def_special sub_8133D2C
- def_special sub_8133D8C
- def_special sub_8133E38
+ def_special ScrSpecial_GetCurrentMauvilleMan
+ def_special ScrSpecial_HasBardSongBeenChanged
+ def_special ScrSpecial_SaveBardSongLyrics
+ def_special ScrSpecial_GetHipsterSpokenFlag
+ def_special ScrSpecial_SetHipsterSpokenFlag
+ def_special ScrSpecial_HipsterTeachWord
+ def_special ScrSpecial_PlayBardSong
+ def_special ScrSpecial_SetMauvilleOldManMapObjGfx
+ def_special ScrSpecial_GenerateGiddyLine
+ def_special ScrSpecial_GiddyShouldTellAnotherTale
+ def_special ScrSpecial_StorytellerGetFreeStorySlot
+ def_special ScrSpecial_StorytellerDisplayStory
+ def_special ScrSpecial_StorytellerStoryListMenu
+ def_special ScrSpecial_StorytellerUpdateStat
+ def_special ScrSpecial_StorytellerInitializeRandomStat
+ def_special ScrSpecial_HasStorytellerAlreadyRecorded
+ def_special ScrSpecial_TraderMenuGetDecoration
+ def_special ScrSpecial_GetTraderTradedFlag
+ def_special ScrSpecial_DoesPlayerHaveNoDecorations
+ def_special ScrSpecial_IsDecorationFull
+ def_special ScrSpecial_TraderMenuGiveDecoration
+ def_special ScrSpecial_TraderDoDecorationTrade
def_special GetSeedotSizeRecordInfo
def_special CompareSeedotSize
def_special GetLotadSizeRecordInfo
@@ -137,11 +137,11 @@ gSpecials:: @ 81DBA64
def_special TV_PutNameRaterShowOnTheAirIfNicnkameChanged
def_special TV_CopyNicknameToStringVar1AndEnsureTerminated
def_special TV_CheckMonOTIDEqualsPlayerID
- def_special sub_8122998
- def_special sub_81229C8
+ def_special BufferTrendyPhraseString
+ def_special TrendyPhraseIsOld
def_special sub_811EF6C
- def_special sub_8122A30
- def_special sub_80D6EDC
+ def_special GetDewfordHallPaintingNameIndex
+ def_special SwapRegisteredBike
def_special CalculatePlayerPartyCount
def_special CountPartyNonEggMons
def_special CountPartyAliveNonEggMons_IgnoreVar0x8004Slot
@@ -207,13 +207,13 @@ gSpecials:: @ 81DBA64
def_special ScriptHatchMon
def_special EggHatch
def_special sub_8071614
- def_special sub_813C4BC
+ def_special ShowLinkBattleRecords
def_special IsEnoughForCostInVar0x8005
def_special SubtractMoneyFromVar0x8005
def_special sub_80F972C
def_special sp0C8_whiteout_maybe
- def_special sub_80FBE90
- def_special sub_80FBED0
+ def_special RotatingGate_InitPuzzle
+ def_special RotatingGate_InitPuzzleAndGraphics
def_special SetSSTidalFlag
def_special ResetSSTidalFlag
def_special EnterSafariMode
@@ -260,8 +260,8 @@ gSpecials:: @ 81DBA64
def_special ValidateEReaderTrainer
def_special sub_8139228
def_special sub_80F94E8
- def_special sub_816AE58
- def_special sub_816AE98
+ def_special BedroomPC
+ def_special PlayerPC
def_special FieldShowRegionMap
def_special sub_807E73C
def_special sub_807EA10
@@ -341,7 +341,7 @@ gSpecials:: @ 81DBA64
def_special sub_81B98DC
def_special nullsub_54
def_special sub_80E9B70
- def_special copy_bags_and_unk_data_from_save_blocks
+ def_special LoadPlayerBag
def_special sub_80B05B4
def_special sub_8139754
def_special sub_813970C
@@ -417,8 +417,8 @@ gSpecials:: @ 81DBA64
def_special sub_813B880
def_special sub_81A085C
def_special ShouldTryGetTrainerScript
- def_special AddMapNamePopUpWindowTask
- def_special AddMapNamePopUpWindowTask
+ def_special ShowMapNamePopup
+ def_special ShowMapNamePopup
def_special sub_81BE994
def_special sub_81BE79C
def_special sub_81BE7F4
@@ -490,14 +490,14 @@ 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
def_special ChangeBoxPokemonNickname
def_special get_unknown_box_id
def_special sub_813B21C
- def_special sub_81D1C20
+ def_special SetMatchCallRegisteredFlag
def_special sub_8175280
def_special sub_813B2E4
def_special sub_813B374
@@ -526,12 +526,12 @@ gSpecials:: @ 81DBA64
def_special sub_8139ED0
def_special sub_813B968
def_special sub_80F8B94
- def_special sub_813C904
+ def_special ShowTrainerHillRecords
def_special sub_80B4808
def_special sub_813B9A0
def_special sub_81B9918
def_special sub_80722E0
def_special sub_80B45D0
- def_special sub_813C5A0
+ def_special RemoveRecordsWindow
def_special sub_8139C10
def_special sub_80B3BC4
diff --git a/data/strings.s b/data/strings.s
index 75b430dd1..631eb8c19 100644
--- a/data/strings.s
+++ b/data/strings.s
@@ -51,7 +51,7 @@ gText_EggNickname:: @ 85E8264
gText_Pokemon:: @ 85E8268
.string "POKéMON$"
-gUnknown_085E8270:: @ 85E8270
+gProfBirchMatchCallName:: @ 85E8270
.string "PROF. BIRCH$"
gText_MainMenuNewGame:: @ 85E827C
@@ -3704,13 +3704,13 @@ gText_LeaderLeftEndingChat:: @ 85ED2FA
gText_RegisteredTextChanged:: @ 85ED325
.string "The registered text has been changed.\nIs it okay to save the game?$"
-gText_AlreadySavedFile:: @ 85ED368
+gText_AlreadySavedFile_Unused:: @ 85ED368
.string "There is already a saved file.\nIs it okay to overwrite it?$"
-gText_SavingDontTurnOff:: @ 85ED3A3
+gText_SavingDontTurnOff_Unused:: @ 85ED3A3
.string "SAVING…\nDON’T TURN OFF THE POWER.$"
-gText_PlayerSavedGame:: @ 85ED3C5
+gText_PlayerSavedGame_Unused:: @ 85ED3C5
.string "{SPECIAL_F7 0x00} saved the game.$"
gText_IfLeaderLeavesChatEnds:: @ 85ED3D8
@@ -3746,46 +3746,46 @@ gText_ThankYou:: @ 85ED440
gText_ByeBye:: @ 85ED44A
.string "BYE-BYE!$"
-gUnknown_085ED453:: @ 85ED453
+gMatchCallStevenStrategyText:: @ 85ED453
.string "Attack the weak points!$"
-gUnknown_085ED46B:: @ 85ED46B
+gMatchCall_StevenTrainersPokemonText:: @ 85ED46B
.string "Ultimate STEEL POKéMON.$"
-gUnknown_085ED483:: @ 85ED483
+gMatchCall_StevenSelfIntroductionText_Line1_BeforeMeteorFallsBattle:: @ 85ED483
.string "I’d climb even waterfalls$"
-gUnknown_085ED49D:: @ 85ED49D
+gMatchCall_StevenSelfIntroductionText_Line2_BeforeMeteorFallsBattle:: @ 85ED49D
.string "to find a rare stone!$"
-gUnknown_085ED4B3:: @ 85ED4B3
+gMatchCall_StevenSelfIntroductionText_Line1_AfterMeteorFallsBattle:: @ 85ED4B3
.string "I’m the strongest and most$"
-gUnknown_085ED4CE:: @ 85ED4CE
+gMatchCall_StevenSelfIntroductionText_Line2_AfterMeteorFallsBattle:: @ 85ED4CE
.string "energetic after all!$"
-gUnknown_085ED4E3:: @ 85ED4E3
+gMatchCall_BrendanStrategyText:: @ 85ED4E3
.string "Battle with knowledge!$"
-gUnknown_085ED4FA:: @ 85ED4FA
+gMatchCall_BrendanTrainersPokemonText:: @ 85ED4FA
.string "I will use various POKéMON.$"
-gUnknown_085ED516:: @ 85ED516
+gMatchCall_BrendanSelfIntroductionText_Line1:: @ 85ED516
.string "I’ll be a better POKéMON$"
-gUnknown_085ED52F:: @ 85ED52F
+gMatchCall_BrendanSelfIntroductionText_Line2:: @ 85ED52F
.string "prof than my father is!$"
-gUnknown_085ED547:: @ 85ED547
+gMatchCall_MayStrategyText:: @ 85ED547
.string "I’m not so good at battles.$"
-gUnknown_085ED563:: @ 85ED563
+gMatchCall_MayTrainersPokemonText:: @ 85ED563
.string "I’ll use any POKéMON!$"
-gUnknown_085ED579:: @ 85ED579
+gMatchCall_MaySelfIntroductionText_Line1:: @ 85ED579
.string "My POKéMON and I help$"
-gUnknown_085ED58F:: @ 85ED58F
+gMatchCall_MaySelfIntroductionText_Line2:: @ 85ED58F
.string "my father’s research.$"
gText_HatchedFromEgg:: @ 85ED5A5
@@ -5242,70 +5242,70 @@ gText_Confirm3:: @ 85EFAE0
gText_Cancel4:: @ 85EFAE8
.string "CANCEL$"
-gUnknown_085EFAEF:: @ 85EFAEF
+gMrStoneMatchCallDesc:: @ 85EFAEF
.string "DEVON PRES$"
-gUnknown_085EFAFA:: @ 85EFAFA
+gMrStoneMatchCallName:: @ 85EFAFA
.string "MR. STONE$"
-gUnknown_085EFB04:: @ 85EFB04
+gStevenMatchCallDesc:: @ 85EFB04
.string "HARD AS ROCK$"
-gUnknown_085EFB11:: @ 85EFB11
+gStevenMatchCallName:: @ 85EFB11
.string "STEVEN$"
-gUnknown_085EFB18:: @ 85EFB18
+gMayBrendanMatchCallDesc:: @ 85EFB18
.string "RAD NEIGHBOR$"
-gUnknown_085EFB25:: @ 85EFB25
+gNormanMatchCallDesc:: @ 85EFB25
.string "RELIABLE ONE$"
-gUnknown_085EFB32:: @ 85EFB32
+gMomMatchCallDesc:: @ 85EFB32
.string "CALM & KIND$"
-gUnknown_085EFB3E:: @ 85EFB3E
+gWallyMatchCallDesc:: @ 85EFB3E
.string "{PKMN} LOVER$"
-gUnknown_085EFB47:: @ 85EFB47
+gNormanMatchCallName:: @ 85EFB47
.string "DAD$"
-gUnknown_085EFB4B:: @ 85EFB4B
+gMomMatchCallName:: @ 85EFB4B
.string "MOM$"
-gUnknown_085EFB4F:: @ 85EFB4F
+gScottMatchCallDesc:: @ 85EFB4F
.string "ELUSIVE EYES$"
-gUnknown_085EFB5C:: @ 85EFB5C
+gScottMatchCallName:: @ 85EFB5C
.string "SCOTT$"
-gUnknown_085EFB62:: @ 85EFB62
+gRoxanneMatchCallDesc:: @ 85EFB62
.string "ROCKIN’ WHIZ$"
-gUnknown_085EFB6F:: @ 85EFB6F
+gBrawlyMatchCallDesc:: @ 85EFB6F
.string "THE BIG HIT$"
-gUnknown_085EFB7B:: @ 85EFB7B
+gWattsonMatchCallDesc:: @ 85EFB7B
.string "SWELL SHOCK$"
-gUnknown_085EFB87:: @ 85EFB87
+gFlanneryMatchCallDesc:: @ 85EFB87
.string "PASSION BURN$"
-gUnknown_085EFB94:: @ 85EFB94
+gWinonaMatchCallDesc:: @ 85EFB94
.string "SKY TAMER$"
-gUnknown_085EFB9E:: @ 85EFB9E
+gTateLizaMatchCallDesc:: @ 85EFB9E
.string "MYSTIC DUO$"
-gUnknown_085EFBA9:: @ 85EFBA9
+gJuanMatchCallDesc:: @ 85EFBA9
.string "DANDY CHARM$"
-gUnknown_085EFBB5:: @ 85EFBB5
+gEliteFourMatchCallDesc:: @ 85EFBB5
.string "ELITE FOUR$"
-gUnknown_085EFBC0:: @ 85EFBC0
+gChampionMatchCallDesc:: @ 85EFBC0
.string "CHAMPION$"
-gUnknown_085EFBC9:: @ 85EFBC9
+gProfBirchMatchCallDesc:: @ 85EFBC9
.string "{PKMN} PROF.$"
gText_CommStandbyAwaitingOtherPlayer:: @ 85EFBD2
diff --git a/data/text/ability_description_pointers.inc b/data/text/ability_description_pointers.inc
deleted file mode 100644
index 41d3e84ef..000000000
--- a/data/text/ability_description_pointers.inc
+++ /dev/null
@@ -1,80 +0,0 @@
- .align 2
-gAbilityDescriptionPointers:: @ 831BAD4
- .4byte gNoneAbilityDescription
- .4byte gStenchAbilityDescription
- .4byte gDrizzleAbilityDescription
- .4byte gSpeedBoostAbilityDescription
- .4byte gBattleArmorAbilityDescription
- .4byte gSturdyAbilityDescription
- .4byte gDampAbilityDescription
- .4byte gLimberAbilityDescription
- .4byte gSandVeilAbilityDescription
- .4byte gStaticAbilityDescription
- .4byte gVoltAbsorbAbilityDescription
- .4byte gWaterAbsorbAbilityDescription
- .4byte gObliviousAbilityDescription
- .4byte gCloudNineAbilityDescription
- .4byte gCompoundEyesAbilityDescription
- .4byte gInsomniaAbilityDescription
- .4byte gColorChangeAbilityDescription
- .4byte gImmunityAbilityDescription
- .4byte gFlashFireAbilityDescription
- .4byte gShieldDustAbilityDescription
- .4byte gOwnTempoAbilityDescription
- .4byte gSuctionCupsAbilityDescription
- .4byte gIntimidateAbilityDescription
- .4byte gShadowTagAbilityDescription
- .4byte gRoughSkinAbilityDescription
- .4byte gWonderGuardAbilityDescription
- .4byte gLevitateAbilityDescription
- .4byte gEffectSporeAbilityDescription
- .4byte gSynchronizeAbilityDescription
- .4byte gClearBodyAbilityDescription
- .4byte gNaturalCureAbilityDescription
- .4byte gLightningRodAbilityDescription
- .4byte gSereneGraceAbilityDescription
- .4byte gSwiftSwimAbilityDescription
- .4byte gChlorophyllAbilityDescription
- .4byte gIlluminateAbilityDescription
- .4byte gTraceAbilityDescription
- .4byte gHugePowerAbilityDescription
- .4byte gPoisonPointAbilityDescription
- .4byte gInnerFocusAbilityDescription
- .4byte gMagmaArmorAbilityDescription
- .4byte gWaterVeilAbilityDescription
- .4byte gMagnetPullAbilityDescription
- .4byte gSoundproofAbilityDescription
- .4byte gRainDishAbilityDescription
- .4byte gSandStreamAbilityDescription
- .4byte gPressureAbilityDescription
- .4byte gThickFatAbilityDescription
- .4byte gEarlyBirdAbilityDescription
- .4byte gFlameBodyAbilityDescription
- .4byte gRunAwayAbilityDescription
- .4byte gKeenEyeAbilityDescription
- .4byte gHyperCutterAbilityDescription
- .4byte gPickupAbilityDescription
- .4byte gTruantAbilityDescription
- .4byte gHustleAbilityDescription
- .4byte gCuteCharmAbilityDescription
- .4byte gPlusAbilityDescription
- .4byte gMinusAbilityDescription
- .4byte gForecastAbilityDescription
- .4byte gStickyHoldAbilityDescription
- .4byte gShedSkinAbilityDescription
- .4byte gGutsAbilityDescription
- .4byte gMarvelScaleAbilityDescription
- .4byte gLiquidOozeAbilityDescription
- .4byte gOvergrowAbilityDescription
- .4byte gBlazeAbilityDescription
- .4byte gTorrentAbilityDescription
- .4byte gSwarmAbilityDescription
- .4byte gRockHeadAbilityDescription
- .4byte gDroughtAbilityDescription
- .4byte gArenaTrapAbilityDescription
- .4byte gVitalSpiritAbilityDescription
- .4byte gWhiteSmokeAbilityDescription
- .4byte gPurePowerAbilityDescription
- .4byte gShellArmorAbilityDescription
- .4byte gCacophonyAbilityDescription
- .4byte gAirLockAbilityDescription
diff --git a/data/text/ability_descriptions.inc b/data/text/ability_descriptions.inc
deleted file mode 100644
index fe8305542..000000000
--- a/data/text/ability_descriptions.inc
+++ /dev/null
@@ -1,233 +0,0 @@
-gNoneAbilityDescription:: @ 831AF98
- .string "No special ability.$"
-
-gStenchAbilityDescription:: @ 831AFAC
- .string "Helps repel wild POKéMON.$"
-
-gDrizzleAbilityDescription:: @ 831AFC6
- .string "Summons rain in battle.$"
-
-gSpeedBoostAbilityDescription:: @ 831AFDE
- .string "Gradually boosts SPEED.$"
-
-gBattleArmorAbilityDescription:: @ 831AFF6
- .string "Blocks critical hits.$"
-
-gSturdyAbilityDescription:: @ 831B00C
- .string "Negates 1-hit KO attacks.$"
-
-gDampAbilityDescription:: @ 831B026
- .string "Prevents self-destruction.$"
-
-gLimberAbilityDescription:: @ 831B041
- .string "Prevents paralysis.$"
-
-gSandVeilAbilityDescription:: @ 831B055
- .string "Ups evasion in a sandstorm.$"
-
-gStaticAbilityDescription:: @ 831B071
- .string "Paralyzes on contact.$"
-
-gVoltAbsorbAbilityDescription:: @ 831B087
- .string "Turns electricity into HP.$"
-
-gWaterAbsorbAbilityDescription:: @ 831B0A2
- .string "Changes water into HP.$"
-
-gObliviousAbilityDescription:: @ 831B0B9
- .string "Prevents attraction.$"
-
-gCloudNineAbilityDescription:: @ 831B0CE
- .string "Negates weather effects.$"
-
-gCompoundEyesAbilityDescription:: @ 831B0E7
- .string "Raises accuracy.$"
-
-gInsomniaAbilityDescription:: @ 831B0F8
- .string "Prevents sleep.$"
-
-gColorChangeAbilityDescription:: @ 831B108
- .string "Changes type to foe’s move.$"
-
-gImmunityAbilityDescription:: @ 831B124
- .string "Prevents poisoning.$"
-
-gFlashFireAbilityDescription:: @ 831B138
- .string "Powers up if hit by fire.$"
-
-gShieldDustAbilityDescription:: @ 831B152
- .string "Prevents added effects.$"
-
-gOwnTempoAbilityDescription:: @ 831B16A
- .string "Prevents confusion.$"
-
-gSuctionCupsAbilityDescription:: @ 831B17E
- .string "Firmly anchors the body.$"
-
-gIntimidateAbilityDescription:: @ 831B197
- .string "Lowers the foe’s ATTACK.$"
-
-gShadowTagAbilityDescription:: @ 831B1B0
- .string "Prevents the foe’s escape.$"
-
-gRoughSkinAbilityDescription:: @ 831B1CB
- .string "Hurts to touch.$"
-
-gWonderGuardAbilityDescription:: @ 831B1DB
- .string "“Super effective” hits.$"
-
-gLevitateAbilityDescription:: @ 831B1F3
- .string "Not hit by GROUND attacks.$"
-
-gEffectSporeAbilityDescription:: @ 831B20E
- .string "Leaves spores on contact.$"
-
-gSynchronizeAbilityDescription:: @ 831B228
- .string "Passes on status problems.$"
-
-gClearBodyAbilityDescription:: @ 831B243
- .string "Prevents ability reduction.$"
-
-gNaturalCureAbilityDescription:: @ 831B25F
- .string "Heals upon switching out.$"
-
-gLightningRodAbilityDescription:: @ 831B279
- .string "Draws electrical moves.$"
-
-gSereneGraceAbilityDescription:: @ 831B291
- .string "Promotes added effects.$"
-
-gSwiftSwimAbilityDescription:: @ 831B2A9
- .string "Raises SPEED in rain.$"
-
-gChlorophyllAbilityDescription:: @ 831B2BF
- .string "Raises SPEED in sunshine.$"
-
-gIlluminateAbilityDescription:: @ 831B2D9
- .string "Encounter rate increases.$"
-
-gTraceAbilityDescription:: @ 831B2F3
- .string "Copies special ability.$"
-
-gHugePowerAbilityDescription:: @ 831B30B
- .string "Raises ATTACK.$"
-
-gPoisonPointAbilityDescription:: @ 831B31A
- .string "Poisons foe on contact.$"
-
-gInnerFocusAbilityDescription:: @ 831B332
- .string "Prevents flinching.$"
-
-gMagmaArmorAbilityDescription:: @ 831B346
- .string "Prevents freezing.$"
-
-gWaterVeilAbilityDescription:: @ 831B359
- .string "Prevents burns.$"
-
-gMagnetPullAbilityDescription:: @ 831B369
- .string "Traps STEEL-type POKéMON.$"
-
-gSoundproofAbilityDescription:: @ 831B383
- .string "Avoids sound-based moves.$"
-
-gRainDishAbilityDescription:: @ 831B39D
- .string "Slight HP recovery in rain.$"
-
-gSandStreamAbilityDescription:: @ 831B3B9
- .string "Summons a sandstorm.$"
-
-gPressureAbilityDescription:: @ 831B3CE
- .string "Raises foe’s PP usage.$"
-
-gThickFatAbilityDescription:: @ 831B3E5
- .string "Heat-and-cold protection.$"
-
-gEarlyBirdAbilityDescription:: @ 831B3FF
- .string "Awakens quickly from sleep.$"
-
-gFlameBodyAbilityDescription:: @ 831B41B
- .string "Burns the foe on contact.$"
-
-gRunAwayAbilityDescription:: @ 831B435
- .string "Makes escaping easier.$"
-
-gKeenEyeAbilityDescription:: @ 831B44C
- .string "Prevents loss of accuracy.$"
-
-gHyperCutterAbilityDescription:: @ 831B467
- .string "Prevents ATTACK reduction.$"
-
-gPickupAbilityDescription:: @ 831B482
- .string "May pick up items.$"
-
-gTruantAbilityDescription:: @ 831B495
- .string "Moves only every two turns.$"
-
-gHustleAbilityDescription:: @ 831B4B1
- .string "Trades accuracy for power.$"
-
-gCuteCharmAbilityDescription:: @ 831B4CC
- .string "Infatuates on contact.$"
-
-gPlusAbilityDescription:: @ 831B4E3
- .string "Powers up with MINUS.$"
-
-gMinusAbilityDescription:: @ 831B4F9
- .string "Powers up with PLUS.$"
-
-gForecastAbilityDescription:: @ 831B50E
- .string "Changes with the weather.$"
-
-gStickyHoldAbilityDescription:: @ 831B528
- .string "Prevents item theft.$"
-
-gShedSkinAbilityDescription:: @ 831B53D
- .string "Heals the body by shedding.$"
-
-gGutsAbilityDescription:: @ 831B559
- .string "Ups ATTACK if suffering.$"
-
-gMarvelScaleAbilityDescription:: @ 831B572
- .string "Ups DEFENSE if suffering.$"
-
-gLiquidOozeAbilityDescription:: @ 831B58C
- .string "Draining causes injury.$"
-
-gOvergrowAbilityDescription:: @ 831B5A4
- .string "Ups GRASS moves in a pinch.$"
-
-gBlazeAbilityDescription:: @ 831B5C0
- .string "Ups FIRE moves in a pinch.$"
-
-gTorrentAbilityDescription:: @ 831B5DB
- .string "Ups WATER moves in a pinch.$"
-
-gSwarmAbilityDescription:: @ 831B5F7
- .string "Ups BUG moves in a pinch.$"
-
-gRockHeadAbilityDescription:: @ 831B611
- .string "Prevents recoil damage.$"
-
-gDroughtAbilityDescription:: @ 831B629
- .string "Summons sunlight in battle.$"
-
-gArenaTrapAbilityDescription:: @ 831B645
- .string "Prevents fleeing.$"
-
-gVitalSpiritAbilityDescription:: @ 831B657
- .string "Prevents sleep.$"
-
-gWhiteSmokeAbilityDescription:: @ 831B667
- .string "Prevents ability reduction.$"
-
-gPurePowerAbilityDescription:: @ 831B683
- .string "Raises ATTACK.$"
-
-gShellArmorAbilityDescription:: @ 831B692
- .string "Blocks critical hits.$"
-
-gCacophonyAbilityDescription:: @ 831B6A8
- .string "Avoids sound-based moves.$"
-
-gAirLockAbilityDescription:: @ 831B6C2
- .string "Negates weather effects.$"
diff --git a/data/text/ability_names.inc b/data/text/ability_names.inc
deleted file mode 100644
index a630b8080..000000000
--- a/data/text/ability_names.inc
+++ /dev/null
@@ -1,79 +0,0 @@
-gAbilityNames:: @ 831B6DB
- .string "-------$", 13
- .string "STENCH$", 13
- .string "DRIZZLE$", 13
- .string "SPEED BOOST$", 13
- .string "BATTLE ARMOR$", 13
- .string "STURDY$", 13
- .string "DAMP$", 13
- .string "LIMBER$", 13
- .string "SAND VEIL$", 13
- .string "STATIC$", 13
- .string "VOLT ABSORB$", 13
- .string "WATER ABSORB$", 13
- .string "OBLIVIOUS$", 13
- .string "CLOUD NINE$", 13
- .string "COMPOUNDEYES$", 13
- .string "INSOMNIA$", 13
- .string "COLOR CHANGE$", 13
- .string "IMMUNITY$", 13
- .string "FLASH FIRE$", 13
- .string "SHIELD DUST$", 13
- .string "OWN TEMPO$", 13
- .string "SUCTION CUPS$", 13
- .string "INTIMIDATE$", 13
- .string "SHADOW TAG$", 13
- .string "ROUGH SKIN$", 13
- .string "WONDER GUARD$", 13
- .string "LEVITATE$", 13
- .string "EFFECT SPORE$", 13
- .string "SYNCHRONIZE$", 13
- .string "CLEAR BODY$", 13
- .string "NATURAL CURE$", 13
- .string "LIGHTNINGROD$", 13
- .string "SERENE GRACE$", 13
- .string "SWIFT SWIM$", 13
- .string "CHLOROPHYLL$", 13
- .string "ILLUMINATE$", 13
- .string "TRACE$", 13
- .string "HUGE POWER$", 13
- .string "POISON POINT$", 13
- .string "INNER FOCUS$", 13
- .string "MAGMA ARMOR$", 13
- .string "WATER VEIL$", 13
- .string "MAGNET PULL$", 13
- .string "SOUNDPROOF$", 13
- .string "RAIN DISH$", 13
- .string "SAND STREAM$", 13
- .string "PRESSURE$", 13
- .string "THICK FAT$", 13
- .string "EARLY BIRD$", 13
- .string "FLAME BODY$", 13
- .string "RUN AWAY$", 13
- .string "KEEN EYE$", 13
- .string "HYPER CUTTER$", 13
- .string "PICKUP$", 13
- .string "TRUANT$", 13
- .string "HUSTLE$", 13
- .string "CUTE CHARM$", 13
- .string "PLUS$", 13
- .string "MINUS$", 13
- .string "FORECAST$", 13
- .string "STICKY HOLD$", 13
- .string "SHED SKIN$", 13
- .string "GUTS$", 13
- .string "MARVEL SCALE$", 13
- .string "LIQUID OOZE$", 13
- .string "OVERGROW$", 13
- .string "BLAZE$", 13
- .string "TORRENT$", 13
- .string "SWARM$", 13
- .string "ROCK HEAD$", 13
- .string "DROUGHT$", 13
- .string "ARENA TRAP$", 13
- .string "VITAL SPIRIT$", 13
- .string "WHITE SMOKE$", 13
- .string "PURE POWER$", 13
- .string "SHELL ARMOR$", 13
- .string "CACOPHONY$", 13
- .string "AIR LOCK$", 13
diff --git a/data/text/birch_speech.inc b/data/text/birch_speech.inc
index 9e7eea3bc..1dfc0242b 100644
--- a/data/text/birch_speech.inc
+++ b/data/text/birch_speech.inc
@@ -1,4 +1,4 @@
-gUnknown_082C897B:: @ 82C897B
+gText_Birch_Welcome:: @ 82C897B
.string "Hi! Sorry to keep you waiting!\p"
.string "Welcome to the world of POKéMON!\p"
.string "My name is BIRCH.\p"
@@ -6,12 +6,12 @@ gUnknown_082C897B:: @ 82C897B
.string "PROFESSOR.\p"
.string "$"
-gUnknown_082C89FB:: @ 82C89FB
+gText_Birch_Pokemon:: @ 82C89FB
.string "This is what we call a “POKéMON.”\p"
.string "\n"
.string "$"
-gUnknown_082C8A1F:: @ 82C8A1F
+gText_Birch_MainSpeech:: @ 82C8A1F
.string "This world is widely inhabited by\n"
.string "creatures known as POKéMON.\p"
.string "We humans live alongside POKéMON,\n"
@@ -28,28 +28,28 @@ gUnknown_082C8A1F:: @ 82C8A1F
.string "That’s what I do.\p"
.string "$"
-gUnknown_082C8BD0:: @ 82C8BD0
+gText_Birch_AndYouAre:: @ 82C8BD0
.string "And you are?$"
-gUnknown_082C8BDD:: @ 82C8BDD
+gText_Birch_BoyOrGirl:: @ 82C8BDD
.string "Are you a boy?\n"
.string "Or are you a girl?$"
-gUnknown_082C8BFF:: @ 82C8BFF
+gText_Birch_WhatsYourName:: @ 82C8BFF
.string "All right.\n"
.string "What’s your name?$"
-gUnknown_082C8C1C:: @ 82C8C1C
+gText_Birch_SoItsPlayer:: @ 82C8C1C
.string "So it’s {PLAYER}{KUN}?$"
-gUnknown_082C8C2A:: @ 82C8C2A
+gText_Birch_YourePlayer:: @ 82C8C2A
.string "Ah, okay!\p"
.string "You’re {PLAYER}{KUN} who’s moving to my\n"
.string "hometown of LITTLEROOT.\l"
.string "I get it now!\p"
.string "$"
-gUnknown_082C8C7A:: @ 82C8C7A
+gText_Birch_AreYouReady:: @ 82C8C7A
.string "All right, are you ready?\p"
.string "Your very own adventure is about\n"
.string "to unfold.\p"
diff --git a/data/text/item_descriptions.inc b/data/text/item_descriptions.inc
deleted file mode 100644
index 0ca85cc3b..000000000
--- a/data/text/item_descriptions.inc
+++ /dev/null
@@ -1,929 +0,0 @@
-gDummyItemDescription:: @ 857FEA0
- .string "?????$"
-
-gMasterBallItemDescription:: @ 857FEA6
- .string "The best BALL that\ncatches a POKéMON\nwithout fail.$"
-
-gUltraBallItemDescription:: @ 857FED9
- .string "A better BALL with\na higher catch rate\nthan a GREAT BALL.$"
-
-gGreatBallItemDescription:: @ 857FF13
- .string "A good BALL with a\nhigher catch rate\nthan a POKé BALL.$"
-
-gPokeBallItemDescription:: @ 857FF4A
- .string "A tool used for\ncatching wild\nPOKéMON.$"
-
-gSafariBallItemDescription:: @ 857FF71
- .string "A special BALL that\nis used only in the\nSAFARI ZONE.$"
-
-gNetBallItemDescription:: @ 857FFA6
- .string "A BALL that works\nwell on WATER- and\nBUG-type POKéMON.$"
-
-gDiveBallItemDescription:: @ 857FFDD
- .string "A BALL that works\nbetter on POKéMON\non the ocean floor.$"
-
-gNestBallItemDescription:: @ 8580015
- .string "A BALL that works\nbetter on weaker\nPOKéMON.$"
-
-gRepeatBallItemDescription:: @ 8580041
- .string "A BALL that works\nbetter on POKéMON\ncaught before.$"
-
-gTimerBallItemDescription:: @ 8580074
- .string "A BALL that gains\npower in battles\ntaking many turns.$"
-
-gLuxuryBallItemDescription:: @ 85800AA
- .string "A cozy BALL that\nmakes POKéMON\nmore friendly.$"
-
-gPremierBallItemDescription:: @ 85800D8
- .string "A rare BALL made\nin commemoration\nof some event.$"
-
-gPotionItemDescription:: @ 8580109
- .string "Restores the HP of\na POKéMON by\n20 points.$"
-
-gAntidoteItemDescription:: @ 8580134
- .string "Heals a poisoned\nPOKéMON.$"
-
-gBurnHealItemDescription:: @ 858014E
- .string "Heals POKéMON\nof a burn.$"
-
-gIceHealItemDescription:: @ 8580167
- .string "Defrosts a frozen\nPOKéMON.$"
-
-gAwakeningItemDescription:: @ 8580182
- .string "Awakens a sleeping\nPOKéMON.$"
-
-gParalyzeHealItemDescription:: @ 858019E
- .string "Heals a paralyzed\nPOKéMON.$"
-
-gFullRestoreItemDescription:: @ 85801B9
- .string "Fully restores the\nHP and status of a\nPOKéMON.$"
-
-gMaxPotionItemDescription:: @ 85801E8
- .string "Fully restores the\nHP of a POKéMON.$"
-
-gHyperPotionItemDescription:: @ 858020C
- .string "Restores the HP of\na POKéMON by\n200 points.$"
-
-gSuperPotionItemDescription:: @ 8580238
- .string "Restores the HP of\na POKéMON by\n50 points.$"
-
-gFullHealItemDescription:: @ 8580263
- .string "Heals all the\nstatus problems of\none POKéMON.$"
-
-gReviveItemDescription:: @ 8580291
- .string "Revives a fainted\nPOKéMON with half\nits HP.$"
-
-gMaxReviveItemDescription:: @ 85802BD
- .string "Revives a fainted\nPOKéMON with all\nits HP.$"
-
-gFreshWaterItemDescription:: @ 85802E8
- .string "A mineral water\nthat restores HP\nby 50 points.$"
-
-gSodaPopItemDescription:: @ 8580317
- .string "A fizzy soda drink\nthat restores HP\nby 60 points.$"
-
-gLemonadeItemDescription:: @ 8580349
- .string "A very sweet drink\nthat restores HP\nby 80 points.$"
-
-gMoomooMilkItemDescription:: @ 858037B
- .string "A nutritious milk\nthat restores HP\nby 100 points.$"
-
-gEnergyPowderItemDescription:: @ 85803AD
- .string "A bitter powder\nthat restores HP\nby 50 points.$"
-
-gEnergyRootItemDescription:: @ 85803DC
- .string "A bitter root\nthat restores HP\nby 200 points.$"
-
-gHealPowderItemDescription:: @ 858040A
- .string "A bitter powder\nthat heals all\nstatus problems.$"
-
-gRevivalHerbItemDescription:: @ 858043A
- .string "A very bitter herb\nthat revives a\nfainted POKéMON.$"
-
-gEtherItemDescription:: @ 858046D
- .string "Restores the PP\nof a selected move\nby 10.$"
-
-gMaxEtherItemDescription:: @ 8580497
- .string "Fully restores the\nPP of a selected\nmove.$"
-
-gElixirItemDescription:: @ 85804C1
- .string "Restores the PP\nof all moves by 10.$"
-
-gMaxElixirItemDescription:: @ 85804E5
- .string "Fully restores the\nPP of a POKéMON’s\nmoves.$"
-
-gLavaCookieItemDescription:: @ 8580511
- .string "A local specialty\nthat heals all\nstatus problems.$"
-
-gBlueFluteItemDescription:: @ 8580543
- .string "A glass flute that\nawakens sleeping\nPOKéMON.$"
-
-gYellowFluteItemDescription:: @ 8580570
- .string "A glass flute that\nsnaps POKéMON\nout of confusion.$"
-
-gRedFluteItemDescription:: @ 85805A3
- .string "A glass flute that\nsnaps POKéMON\nout of attraction.$"
-
-gBlackFluteItemDescription:: @ 85805D7
- .string "A glass flute that\nkeeps away wild\nPOKéMON.$"
-
-gWhiteFluteItemDescription:: @ 8580603
- .string "A glass flute that\nlures wild POKéMON.$"
-
-gBerryJuiceItemDescription:: @ 858062A
- .string "A 100% pure juice\nthat restores HP\nby 20 points.$"
-
-gSacredAshItemDescription:: @ 858065B
- .string "Fully revives and\nrestores all\nfainted POKéMON.$"
-
-gShoalSaltItemDescription:: @ 858068B
- .string "Salt obtained from\ndeep inside the\nSHOAL CAVE.$"
-
-gShoalShellItemDescription:: @ 85806BA
- .string "A seashell found\ndeep inside the\nSHOAL CAVE.$"
-
-gRedShardItemDescription:: @ 85806E7
- .string "A shard from an\nancient item. Can\nbe sold cheaply.$"
-
-gBlueShardItemDescription:: @ 858071A
- .string "A shard from an\nancient item. Can\nbe sold cheaply.$"
-
-gYellowShardItemDescription:: @ 858074D
- .string "A shard from an\nancient item. Can\nbe sold cheaply.$"
-
-gGreenShardItemDescription:: @ 8580780
- .string "A shard from an\nancient item. Can\nbe sold cheaply.$"
-
-gHPUpItemDescription:: @ 85807B3
- .string "Raises the base HP\nof one POKéMON.$"
-
-gProteinItemDescription:: @ 85807D6
- .string "Raises the base\nATTACK stat of one\nPOKéMON.$"
-
-gIronItemDescription:: @ 8580802
- .string "Raises the base\nDEFENSE stat of\none POKéMON.$"
-
-gCarbosItemDescription:: @ 858082F
- .string "Raises the base\nSPEED stat of one\nPOKéMON.$"
-
-gCalciumItemDescription:: @ 858085A
- .string "Raises the base\nSP. ATK stat of one\nPOKéMON.$"
-
-gRareCandyItemDescription:: @ 8580887
- .string "Raises the level\nof a POKéMON by\none.$"
-
-gPPUpItemDescription:: @ 85808AD
- .string "Raises the maximum\nPP of a selected\nmove.$"
-
-gZincItemDescription:: @ 85808D7
- .string "Raises the base\nSP. DEF stat of one\nPOKéMON.$"
-
-gPPMaxItemDescription:: @ 8580904
- .string "Raises the PP of a\nmove to its maximum\npoints.$"
-
-gGuardSpecItemDescription:: @ 8580933
- .string "Prevents stat\nreduction when\nused in battle.$"
-
-gDireHitItemDescription:: @ 8580960
- .string "Raises the\ncritical-hit ratio\nduring one battle.$"
-
-gXAttackItemDescription:: @ 8580991
- .string "Raises the stat\nATTACK during one\nbattle.$"
-
-gXDefendItemDescription:: @ 85809BB
- .string "Raises the stat\nDEFENSE during one\nbattle.$"
-
-gXSpeedItemDescription:: @ 85809E6
- .string "Raises the stat\nSPEED during one\nbattle.$"
-
-gXAccuracyItemDescription:: @ 8580A0F
- .string "Raises accuracy\nof attack moves\nduring one battle.$"
-
-gXSpecialItemDescription:: @ 8580A42
- .string "Raises the stat\nSP. ATK during one\nbattle.$"
-
-gPokeDollItemDescription:: @ 8580A6D
- .string "Use to flee from\nany battle with\na wild POKéMON.$"
-
-gFluffyTailItemDescription:: @ 8580A9E
- .string "Use to flee from\nany battle with\na wild POKéMON.$"
-
-gSuperRepelItemDescription:: @ 8580ACF
- .string "Repels weak wild\nPOKéMON for 200\nsteps.$"
-
-gMaxRepelItemDescription:: @ 8580AF7
- .string "Repels weak wild\nPOKéMON for 250\nsteps.$"
-
-gEscapeRopeItemDescription:: @ 8580B1F
- .string "Use to escape\ninstantly from a\ncave or a dungeon.$"
-
-gRepelItemDescription:: @ 8580B51
- .string "Repels weak wild\nPOKéMON for 100\nsteps.$"
-
-gSunStoneItemDescription:: @ 8580B79
- .string "Makes certain\nspecies of POKéMON\nevolve.$"
-
-gMoonStoneItemDescription:: @ 8580BA2
- .string "Makes certain\nspecies of POKéMON\nevolve.$"
-
-gFireStoneItemDescription:: @ 8580BCB
- .string "Makes certain\nspecies of POKéMON\nevolve.$"
-
-gThunderStoneItemDescription:: @ 8580BF4
- .string "Makes certain\nspecies of POKéMON\nevolve.$"
-
-gWaterStoneItemDescription:: @ 8580C1D
- .string "Makes certain\nspecies of POKéMON\nevolve.$"
-
-gLeafStoneItemDescription:: @ 8580C46
- .string "Makes certain\nspecies of POKéMON\nevolve.$"
-
-gTinyMushroomItemDescription:: @ 8580C6F
- .string "A plain mushroom\nthat would sell\nat a cheap price.$"
-
-gBigMushroomItemDescription:: @ 8580CA2
- .string "A rare mushroom\nthat would sell at a\nhigh price.$"
-
-gPearlItemDescription:: @ 8580CD3
- .string "A pretty pearl\nthat would sell at a\ncheap price.$"
-
-gBigPearlItemDescription:: @ 8580D04
- .string "A lovely large pearl\nthat would sell at a\nhigh price.$"
-
-gStardustItemDescription:: @ 8580D3A
- .string "Beautiful red sand.\nCan be sold at a\nhigh price.$"
-
-gStarPieceItemDescription:: @ 8580D6B
- .string "A red gem shard.\nIt would sell for a\nvery high price.$"
-
-gNuggetItemDescription:: @ 8580DA1
- .string "A nugget of pure\ngold. Can be sold at\na high price.$"
-
-gHeartScaleItemDescription:: @ 8580DD5
- .string "A lovely scale.\nIt is coveted by\ncollectors.$"
-
-gOrangeMailItemDescription:: @ 8580E02
- .string "A ZIGZAGOON-print\nMAIL to be held by\na POKéMON.$"
-
-gHarborMailItemDescription:: @ 8580E32
- .string "A WINGULL-print\nMAIL to be held by\na POKéMON.$"
-
-gGlitterMailItemDescription:: @ 8580E60
- .string "A PIKACHU-print\nMAIL to be held by\na POKéMON.$"
-
-gMechMailItemDescription:: @ 8580E8E
- .string "A MAGNEMITE-print\nMAIL to be held by\na POKéMON.$"
-
-gWoodMailItemDescription:: @ 8580EBE
- .string "A SLAKOTH-print\nMAIL to be held by\na POKéMON.$"
-
-gWaveMailItemDescription:: @ 8580EEC
- .string "A WAILMER-print\nMAIL to be held by\na POKéMON.$"
-
-gBeadMailItemDescription:: @ 8580F1A
- .string "MAIL featuring a\nsketch of the\nholding POKéMON.$"
-
-gShadowMailItemDescription:: @ 8580F4A
- .string "A DUSKULL-print\nMAIL to be held by\na POKéMON.$"
-
-gTropicMailItemDescription:: @ 8580F78
- .string "A BELLOSSOM-print\nMAIL to be held by\na POKéMON.$"
-
-gDreamMailItemDescription:: @ 8580FA8
- .string "MAIL featuring a\nsketch of the\nholding POKéMON.$"
-
-gFabMailItemDescription:: @ 8580FD8
- .string "A gorgeous-print\nMAIL to be held\nby a POKéMON.$"
-
-gRetroMailItemDescription:: @ 8581007
- .string "MAIL featuring the\ndrawings of three\nPOKéMON.$"
-
-gCheriBerryItemDescription:: @ 8581035
- .string "A hold item that\nheals paralysis\nin battle.$"
-
-gChestoBerryItemDescription:: @ 8581061
- .string "A hold item that\nawakens POKéMON\nin battle.$"
-
-gPechaBerryItemDescription:: @ 858108D
- .string "A hold item that\nheals poisoning\nin battle.$"
-
-gRawstBerryItemDescription:: @ 85810B9
- .string "A hold item that\nheals a burn in\nbattle.$"
-
-gAspearBerryItemDescription:: @ 85810E2
- .string "A hold item that\ndefrosts POKéMON\nin battle.$"
-
-gLeppaBerryItemDescription:: @ 858110F
- .string "A hold item that\nrestores 10 PP in\nbattle.$"
-
-gOranBerryItemDescription:: @ 858113A
- .string "A hold item that\nrestores 10 HP in\nbattle.$"
-
-gPersimBerryItemDescription:: @ 8581165
- .string "A hold item that\nheals confusion\nin battle.$"
-
-gLumBerryItemDescription:: @ 8581191
- .string "A hold item that\nheals any status\nproblem in battle.$"
-
-gSitrusBerryItemDescription:: @ 85811C6
- .string "A hold item that\nrestores 30 HP in\nbattle.$"
-
-gFigyBerryItemDescription:: @ 85811F1
- .string "A hold item that\nrestores HP but\nmay confuse.$"
-
-gWikiBerryItemDescription:: @ 858121F
- .string "A hold item that\nrestores HP but\nmay confuse.$"
-
-gMagoBerryItemDescription:: @ 858124D
- .string "A hold item that\nrestores HP but\nmay confuse.$"
-
-gAguavBerryItemDescription:: @ 858127B
- .string "A hold item that\nrestores HP but\nmay confuse.$"
-
-gIapapaBerryItemDescription:: @ 85812A9
- .string "A hold item that\nrestores HP but\nmay confuse.$"
-
-gRazzBerryItemDescription:: @ 85812D7
- .string "{POKEBLOCK} ingredient.\nPlant in loamy soil\nto grow RAZZ.$"
-
-gBlukBerryItemDescription:: @ 858130B
- .string "{POKEBLOCK} ingredient.\nPlant in loamy soil\nto grow BLUK.$"
-
-gNanabBerryItemDescription:: @ 858133F
- .string "{POKEBLOCK} ingredient.\nPlant in loamy soil\nto grow NANAB.$"
-
-gWepearBerryItemDescription:: @ 8581374
- .string "{POKEBLOCK} ingredient.\nPlant in loamy soil\nto grow WEPEAR.$"
-
-gPinapBerryItemDescription:: @ 85813AA
- .string "{POKEBLOCK} ingredient.\nPlant in loamy soil\nto grow PINAP.$"
-
-gPomegBerryItemDescription:: @ 85813DF
- .string "Makes a POKéMON\nfriendly but lowers\nbase HP.$"
-
-gKelpsyBerryItemDescription:: @ 858140C
- .string "Makes a POKéMON\nfriendly but lowers\nbase ATTACK.$"
-
-gQualotBerryItemDescription:: @ 858143D
- .string "Makes a POKéMON\nfriendly but lowers\nbase DEFENSE.$"
-
-gHondewBerryItemDescription:: @ 858146F
- .string "Makes a POKéMON\nfriendly but lowers\nbase SP. ATK.$"
-
-gGrepaBerryItemDescription:: @ 85814A1
- .string "Makes a POKéMON\nfriendly but lowers\nbase SP. DEF.$"
-
-gTamatoBerryItemDescription:: @ 85814D3
- .string "Makes a POKéMON\nfriendly but lowers\nbase SPEED.$"
-
-gCornnBerryItemDescription:: @ 8581503
- .string "{POKEBLOCK} ingredient.\nPlant in loamy soil\nto grow CORNN.$"
-
-gMagostBerryItemDescription:: @ 8581538
- .string "{POKEBLOCK} ingredient.\nPlant in loamy soil\nto grow MAGOST.$"
-
-gRabutaBerryItemDescription:: @ 858156E
- .string "{POKEBLOCK} ingredient.\nPlant in loamy soil\nto grow RABUTA.$"
-
-gNomelBerryItemDescription:: @ 85815A4
- .string "{POKEBLOCK} ingredient.\nPlant in loamy soil\nto grow NOMEL.$"
-
-gSpelonBerryItemDescription:: @ 85815D9
- .string "{POKEBLOCK} ingredient.\nPlant in loamy soil\nto grow SPELON.$"
-
-gPamtreBerryItemDescription:: @ 858160F
- .string "{POKEBLOCK} ingredient.\nPlant in loamy soil\nto grow PAMTRE.$"
-
-gWatmelBerryItemDescription:: @ 8581645
- .string "{POKEBLOCK} ingredient.\nPlant in loamy soil\nto grow WATMEL.$"
-
-gDurinBerryItemDescription:: @ 858167B
- .string "{POKEBLOCK} ingredient.\nPlant in loamy soil\nto grow DURIN.$"
-
-gBelueBerryItemDescription:: @ 85816B0
- .string "{POKEBLOCK} ingredient.\nPlant in loamy soil\nto grow BELUE.$"
-
-gLiechiBerryItemDescription:: @ 85816E5
- .string "A hold item that\nraises ATTACK in\na pinch.$"
-
-gGanlonBerryItemDescription:: @ 8581710
- .string "A hold item that\nraises DEFENSE in\na pinch.$"
-
-gSalacBerryItemDescription:: @ 858173C
- .string "A hold item that\nraises SPEED in\na pinch.$"
-
-gPetayaBerryItemDescription:: @ 8581766
- .string "A hold item that\nraises SP. ATK in\na pinch.$"
-
-gApicotBerryItemDescription:: @ 8581792
- .string "A hold item that\nraises SP. DEF in\na pinch.$"
-
-gLansatBerryItemDescription:: @ 85817BE
- .string "A hold item that\nups the critical-\nhit rate in a pinch.$"
-
-gStarfBerryItemDescription:: @ 85817F6
- .string "A hold item that\nsharply boosts a\nstat in a pinch.$"
-
-gEnigmaBerryItemDescription:: @ 8581829
- .string "{POKEBLOCK} ingredient.\nPlant in loamy soil\nto grow a mystery.$"
-
-gBrightPowderItemDescription:: @ 8581862
- .string "A hold item that\ncasts a glare to\nreduce accuracy.$"
-
-gWhiteHerbItemDescription:: @ 8581895
- .string "A hold item that\nrestores any\nlowered stat.$"
-
-gMachoBraceItemDescription:: @ 85818C1
- .string "A hold item that\npromotes growth,\nbut reduces SPEED.$"
-
-gExpShareItemDescription:: @ 85818F6
- .string "A hold item that\ngets EXP. points\nfrom battles.$"
-
-gQuickClawItemDescription:: @ 8581926
- .string "A hold item that\noccasionally allows\nthe first strike.$"
-
-gSootheBellItemDescription:: @ 858195D
- .string "A hold item that\ncalms spirits and\nfosters friendship.$"
-
-gMentalHerbItemDescription:: @ 8581994
- .string "A hold item that\nsnaps POKéMON out\nof infatuation.$"
-
-gChoiceBandItemDescription:: @ 85819C7
- .string "Raises a move’s\npower, but permits\nonly that move.$"
-
-gKingsRockItemDescription:: @ 85819FA
- .string "A hold item that\nmay cause flinching\nwhen the foe is hit.$"
-
-gSilverPowderItemDescription:: @ 8581A34
- .string "A hold item that\nraises the power of\nBUG-type moves.$"
-
-gAmuletCoinItemDescription:: @ 8581A69
- .string "Doubles money in\nbattle if the\nholder takes part.$"
-
-gCleanseTagItemDescription:: @ 8581A9B
- .string "A hold item that\nhelps repel wild\nPOKéMON.$"
-
-gSoulDewItemDescription:: @ 8581AC6
- .string "Hold item: raises\nSP. ATK & SP. DEF of\nLATIOS & LATIAS.$"
-
-gDeepSeaToothItemDescription:: @ 8581AFE
- .string "A hold item that\nraises the SP. ATK\nof CLAMPERL.$"
-
-gDeepSeaScaleItemDescription:: @ 8581B2F
- .string "A hold item that\nraises the SP. DEF\nof CLAMPERL.$"
-
-gSmokeBallItemDescription:: @ 8581B60
- .string "A hold item that\nassures fleeing\nfrom wild POKéMON.$"
-
-gEverstoneItemDescription:: @ 8581B94
- .string "A wondrous hold\nitem that prevents\nevolution.$"
-
-gFocusBandItemDescription:: @ 8581BC2
- .string "A hold item that\noccasionally\nprevents fainting.$"
-
-gLuckyEggItemDescription:: @ 8581BF3
- .string "A hold item that\nboosts EXP. points\nearned in battle.$"
-
-gScopeLensItemDescription:: @ 8581C29
- .string "A hold item that\nimproves the\ncritical-hit rate.$"
-
-gMetalCoatItemDescription:: @ 8581C5A
- .string "A hold item that\nraises the power of\nSTEEL-type moves.$"
-
-gLeftoversItemDescription:: @ 8581C91
- .string "A hold item that\ngradually restores\nHP in battle.$"
-
-gDragonScaleItemDescription:: @ 8581CC3
- .string "A strange scale\nheld by DRAGON-\ntype POKéMON.$"
-
-gLightBallItemDescription:: @ 8581CF1
- .string "A hold item that\nraises the SP. ATK\nof PIKACHU.$"
-
-gSoftSandItemDescription:: @ 8581D21
- .string "A hold item that\nraises the power of\nGROUND-type moves.$"
-
-gHardStoneItemDescription:: @ 8581D59
- .string "A hold item that\nraises the power of\nROCK-type moves.$"
-
-gMiracleSeedItemDescription:: @ 8581D8F
- .string "A hold item that\nraises the power of\nGRASS-type moves.$"
-
-gBlackGlassesItemDescription:: @ 8581DC6
- .string "A hold item that\nraises the power of\nDARK-type moves.$"
-
-gBlackBeltItemDescription:: @ 8581DFC
- .string "A hold item that\nboosts FIGHTING-\ntype moves.$"
-
-gMagnetItemDescription:: @ 8581E2A
- .string "A hold item that\nboosts ELECTRIC-\ntype moves.$"
-
-gMysticWaterItemDescription:: @ 8581E58
- .string "A hold item that\nraises the power of\nWATER-type moves.$"
-
-gSharpBeakItemDescription:: @ 8581E8F
- .string "A hold item that\nraises the power of\nFLYING-type moves.$"
-
-gPoisonBarbItemDescription:: @ 8581EC7
- .string "A hold item that\nraises the power of\nPOISON-type moves.$"
-
-gNeverMeltIceItemDescription:: @ 8581EFF
- .string "A hold item that\nraises the power of\nICE-type moves.$"
-
-gSpellTagItemDescription:: @ 8581F34
- .string "A hold item that\nraises the power of\nGHOST-type moves.$"
-
-gTwistedSpoonItemDescription:: @ 8581F6B
- .string "A hold item that\nboosts PSYCHIC-\ntype moves.$"
-
-gCharcoalItemDescription:: @ 8581F98
- .string "A hold item that\nraises the power of\nFIRE-type moves.$"
-
-gDragonFangItemDescription:: @ 8581FCE
- .string "A hold item that\nraises the power of\nDRAGON-type moves.$"
-
-gSilkScarfItemDescription:: @ 8582006
- .string "A hold item that\nraises the power of\nNORMAL-type moves.$"
-
-gUpGradeItemDescription:: @ 858203E
- .string "A peculiar box made\nby SILPH CO.$"
-
-gShellBellItemDescription:: @ 858205F
- .string "A hold item that\nrestores HP upon\nstriking the foe.$"
-
-gSeaIncenseItemDescription:: @ 8582093
- .string "A hold item that\nslightly boosts\nWATER-type moves.$"
-
-gLaxIncenseItemDescription:: @ 85820C6
- .string "A hold item that\nslightly lowers the\nfoe’s accuracy.$"
-
-gLuckyPunchItemDescription:: @ 85820FB
- .string "A hold item that\nraises CHANSEY’s\ncritical-hit rate.$"
-
-gMetalPowderItemDescription:: @ 8582130
- .string "A hold item that\nraises DITTO’s\nDEFENSE.$"
-
-gThickClubItemDescription:: @ 8582159
- .string "A hold item that \nraises CUBONE or\nMAROWAK’s ATTACK.$"
-
-gStickItemDescription:: @ 858218E
- .string "A hold item that\nraises FARFETCH’D’s\ncritical-hit ratio.$"
-
-gRedScarfItemDescription:: @ 85821C7
- .string "A hold item that\nraises COOL in\nCONTESTS.$"
-
-gBlueScarfItemDescription:: @ 85821F1
- .string "A hold item that\nraises BEAUTY in\nCONTESTS.$"
-
-gPinkScarfItemDescription:: @ 858221D
- .string "A hold item that\nraises CUTE in\nCONTESTS.$"
-
-gGreenScarfItemDescription:: @ 8582247
- .string "A hold item that\nraises SMART in\nCONTESTS.$"
-
-gYellowScarfItemDescription:: @ 8582272
- .string "A hold item that\nraises TOUGH in\nCONTESTS.$"
-
-gMachBikeItemDescription:: @ 858229D
- .string "A folding bicycle\nthat doubles your\nspeed or better.$"
-
-gCoinCaseItemDescription:: @ 85822D2
- .string "A case that holds\nup to 9,999 COINS.$"
-
-gItemfinderItemDescription:: @ 85822F7
- .string "A device that\nsignals an invisible\nitem by sound.$"
-
-gOldRodItemDescription:: @ 8582329
- .string "Use by any body of\nwater to fish for\nwild POKéMON.$"
-
-gGoodRodItemDescription:: @ 858235C
- .string "A decent fishing\nrod for catching\nwild POKéMON.$"
-
-gSuperRodItemDescription:: @ 858238C
- .string "The best fishing\nrod for catching\nwild POKéMON.$"
-
-gSSTicketItemDescription:: @ 85823BC
- .string "The ticket required\nfor sailing on a\nferry.$"
-
-gContestPassItemDescription:: @ 85823E8
- .string "The pass required\nfor entering\nPOKéMON CONTESTS.$"
-
-gWailmerPailItemDescription:: @ 8582419
- .string "A tool used for\nwatering BERRIES\nand plants.$"
-
-gDevonGoodsItemDescription:: @ 8582446
- .string "A package that\ncontains DEVON’s\nmachine parts.$"
-
-gSootSackItemDescription:: @ 8582475
- .string "A sack used to\ngather and hold\nvolcanic ash.$"
-
-gBasementKeyItemDescription:: @ 85824A2
- .string "The key for NEW\nMAUVILLE beneath\nMAUVILLE CITY.$"
-
-gAcroBikeItemDescription:: @ 85824D2
- .string "A folding bicycle\ncapable of jumps\nand wheelies.$"
-
-gPokeblockCaseItemDescription:: @ 8582503
- .string "A case for holding\n{POKEBLOCK}S made with\na BERRY BLENDER.$"
-
-gLetterItemDescription:: @ 8582538
- .string "A letter to STEVEN\nfrom the PRESIDENT\nof the DEVON CORP.$"
-
-gEonTicketItemDescription:: @ 8582571
- .string "The ticket for a\nferry to a distant\nsouthern island.$"
-
-gRedOrbItemDescription:: @ 85825A6
- .string "A red, glowing orb\nsaid to contain an\nancient power.$"
-
-gBlueOrbItemDescription:: @ 85825DB
- .string "A blue, glowing orb\nsaid to contain an\nancient power.$"
-
-gScannerItemDescription:: @ 8582611
- .string "A device found\ninside the\nABANDONED SHIP.$"
-
-gGoGogglesItemDescription:: @ 858263B
- .string "Nifty goggles that\nprotect eyes from\ndesert sandstorms.$"
-
-gMeteoriteItemDescription:: @ 8582673
- .string "A meteorite found\nat METEOR FALLS.$"
-
-gRoom1KeyItemDescription:: @ 8582696
- .string "A key that opens a\ndoor inside the\nABANDONED SHIP.$"
-
-gRoom2KeyItemDescription:: @ 85826C9
- .string "A key that opens a\ndoor inside the\nABANDONED SHIP.$"
-
-gRoom4KeyItemDescription:: @ 85826FC
- .string "A key that opens a\ndoor inside the\nABANDONED SHIP.$"
-
-gRoom6KeyItemDescription:: @ 858272F
- .string "A key that opens a\ndoor inside the\nABANDONED SHIP.$"
-
-gStorageKeyItemDescription:: @ 8582762
- .string "The key to the\nstorage inside the\nABANDONED SHIP.$"
-
-gRootFossilItemDescription:: @ 8582794
- .string "A fossil of an\nancient, seafloor-\ndwelling POKéMON.$"
-
-gClawFossilItemDescription:: @ 85827C8
- .string "A fossil of an\nancient, seafloor-\ndwelling POKéMON.$"
-
-gDevonScopeItemDescription:: @ 85827FC
- .string "A device by DEVON\nthat signals any\nunseeable POKéMON.$"
-
-gTM01ItemDescription:: @ 8582832
- .string "Powerful, but makes\nthe user flinch if\nhit by the foe.$"
-
-gTM02ItemDescription:: @ 8582869
- .string "Hooks and slashes\nthe foe with long,\nsharp claws.$"
-
-gTM03ItemDescription:: @ 858289B
- .string "Generates an\nultrasonic wave\nthat may confuse.$"
-
-gTM04ItemDescription:: @ 85828CA
- .string "Raises SP. ATK and\nSP. DEF by focusing\nthe mind.$"
-
-gTM05ItemDescription:: @ 85828FB
- .string "A savage roar that\nmakes the foe flee \nto end the battle.$"
-
-gTM06ItemDescription:: @ 8582935
- .string "Poisons the foe\nwith a toxin that\ngradually worsens.$"
-
-gTM07ItemDescription:: @ 858296A
- .string "Creates a hailstorm\nthat damages all\ntypes except ICE.$"
-
-gTM08ItemDescription:: @ 85829A1
- .string "Bulks up the body\nto boost both\nATTACK & DEFENSE.$"
-
-gTM09ItemDescription:: @ 85829D3
- .string "Shoots 2 to 5 seeds\nin a row to strike\nthe foe.$"
-
-gTM10ItemDescription:: @ 8582A03
- .string "The attack power\nvaries among\ndifferent POKéMON.$"
-
-gTM11ItemDescription:: @ 8582A34
- .string "Raises the power of\nFIRE-type moves\nfor 5 turns.$"
-
-gTM12ItemDescription:: @ 8582A65
- .string "Enrages the foe so\nit can only use\nattack moves.$"
-
-gTM13ItemDescription:: @ 8582A96
- .string "Fires an icy cold\nbeam that may\nfreeze the foe.$"
-
-gTM14ItemDescription:: @ 8582AC6
- .string "A brutal snow-and-\nwind attack that\nmay freeze the foe.$"
-
-gTM15ItemDescription:: @ 8582AFE
- .string "Powerful, but needs\nrecharging the\nnext turn.$"
-
-gTM16ItemDescription:: @ 8582B2C
- .string "Creates a wall of\nlight that lowers\nSP. ATK damage.$"
-
-gTM17ItemDescription:: @ 8582B60
- .string "Negates all damage,\nbut may fail if used\nin succession.$"
-
-gTM18ItemDescription:: @ 8582B98
- .string "Raises the power of\nWATER-type moves\nfor 5 turns.$"
-
-gTM19ItemDescription:: @ 8582BCA
- .string "Recovers half the\nHP of the damage \nthis move inflicts.$"
-
-gTM20ItemDescription:: @ 8582C02
- .string "Prevents status\nabnormality with a\nmystical power.$"
-
-gTM21ItemDescription:: @ 8582C35
- .string "The less the user\nlikes you, the more\npowerful this move.$"
-
-gTM22ItemDescription:: @ 8582C6F
- .string "Absorbs sunlight in\nthe 1st turn, then\nattacks next turn.$"
-
-gTM23ItemDescription:: @ 8582CA9
- .string "Slams the foe with\na hard tail. It may\nlower DEFENSE.$"
-
-gTM24ItemDescription:: @ 8582CDF
- .string "A powerful electric\nattack that may\ncause paralysis.$"
-
-gTM25ItemDescription:: @ 8582D14
- .string "Strikes the foe\nwith a thunderbolt.\nIt may paralyze.$"
-
-gTM26ItemDescription:: @ 8582D49
- .string "Causes a quake\nthat has no effect\non flying foes.$"
-
-gTM27ItemDescription:: @ 8582D7B
- .string "The more the user\nlikes you, the more\npowerful this move.$"
-
-gTM28ItemDescription:: @ 8582DB5
- .string "Digs underground\nthe 1st turn, then\nstrikes next turn.$"
-
-gTM29ItemDescription:: @ 8582DEC
- .string "A powerful psychic\nattack that may\nlower SP. DEF.$"
-
-gTM30ItemDescription:: @ 8582E1E
- .string "Hurls a dark lump\nat the foe. It may\nlower SP. DEF.$"
-
-gTM31ItemDescription:: @ 8582E52
- .string "Destroys barriers\nlike LIGHT SCREEN\nand causes damage.$"
-
-gTM32ItemDescription:: @ 8582E89
- .string "Creates illusory\ncopies to enhance\nelusiveness.$"
-
-gTM33ItemDescription:: @ 8582EB9
- .string "Creates a wall of\nlight that weakens\nphysical attacks.$"
-
-gTM34ItemDescription:: @ 8582EF0
- .string "Zaps the foe with a\njolt of electricity\nthat never misses.$"
-
-gTM35ItemDescription:: @ 8582F2B
- .string "Looses a stream of\nfire that may burn\nthe foe.$"
-
-gTM36ItemDescription:: @ 8582F5A
- .string "Hurls sludge at the\nfoe. It may poison\nthe foe.$"
-
-gTM37ItemDescription:: @ 8582F8A
- .string "Causes a sandstorm\nthat hits the foe\nover several turns.$"
-
-gTM38ItemDescription:: @ 8582FC3
- .string "A powerful fire\nattack that may\nburn the foe.$"
-
-gTM39ItemDescription:: @ 8582FF1
- .string "Stops the foe from\nmoving with rocks.\nMay lower SPEED.$"
-
-gTM40ItemDescription:: @ 8583028
- .string "An extremely fast\nattack that can’t\nbe avoided.$"
-
-gTM41ItemDescription:: @ 8583058
- .string "Prevents the foe\nfrom using the same\nmove in a row.$"
-
-gTM42ItemDescription:: @ 858308C
- .string "Raises ATTACK when\npoisoned, burned,\nor paralyzed.$"
-
-gTM43ItemDescription:: @ 85830BF
- .string "Adds an effect to\nattack depending\non the location.$"
-
-gTM44ItemDescription:: @ 85830F3
- .string "The user sleeps for\n2 turns to restore\nhealth and status.$"
-
-gTM45ItemDescription:: @ 858312D
- .string "Makes it tough to\nattack a foe of the\nopposite gender.$"
-
-gTM46ItemDescription:: @ 8583164
- .string "While attacking,\nit may steal the\nfoe’s held item.$"
-
-gTM47ItemDescription:: @ 8583197
- .string "Spreads hard-\nedged wings and\nslams into the foe.$"
-
-gTM48ItemDescription:: @ 85831C9
- .string "Switches abilities\nwith the foe on the\nturn this is used.$"
-
-gTM49ItemDescription:: @ 8583203
- .string "Steals the effects\nof the move the foe\nis trying to use.$"
-
-gTM50ItemDescription:: @ 858323C
- .string "Enables full-power\nattack, but sharply\nlowers SP. ATK.$"
-
-gHM01ItemDescription:: @ 8583273
- .string "Attacks the foe\nwith sharp blades\nor claws.$"
-
-gHM02ItemDescription:: @ 858329F
- .string "Flies up on the\nfirst turn, then\nattacks next turn.$"
-
-gHM03ItemDescription:: @ 85832D3
- .string "Creates a huge\nwave, then crashes\nit down on the foe.$"
-
-gHM04ItemDescription:: @ 8583309
- .string "Builds enormous\npower, then slams\nthe foe.$"
-
-gHM05ItemDescription:: @ 8583334
- .string "Looses a powerful\nblast of light that\nreduces accuracy.$"
-
-gHM06ItemDescription:: @ 858336C
- .string "A rock-crushingly\ntough attack that\nmay lower DEFENSE.$"
-
-gHM07ItemDescription:: @ 85833A3
- .string "Attacks the foe\nwith enough power\nto climb waterfalls.$"
-
-gHM08ItemDescription:: @ 85833DA
- .string "Dives underwater\nthe 1st turn, then\nattacks next turn.$"
-
-gOaksParcelItemDescription:: @ 8583411
- .string "A parcel for PROF.\nOAK from a POKéMON\nMART’s clerk.$"
-
-gPokeFluteItemDescription:: @ 8583445
- .string "A sweet-sounding\nflute that awakens\nPOKéMON.$"
-
-gSecretKeyItemDescription:: @ 8583472
- .string "The key to the\nCINNABAR ISLAND\nGYM’s entrance.$"
-
-gBikeVoucherItemDescription:: @ 85834A1
- .string "A voucher for\nobtaining a bicycle\nfrom the BIKE SHOP.$"
-
-gGoldTeethItemDescription:: @ 85834D7
- .string "Gold dentures lost\nby the SAFARI\nZONE’s WARDEN.$"
-
-gOldAmberItemDescription:: @ 8583507
- .string "A stone containing\nthe genes of an\nancient POKéMON.$"
-
-gCardKeyItemDescription:: @ 858353B
- .string "A card-type door\nkey used in SILPH\nCO’s office.$"
-
-gLiftKeyItemDescription:: @ 858356B
- .string "An elevator key\nused in TEAM\nROCKET’s HIDEOUT.$"
-
-gHelixFossilItemDescription:: @ 858359A
- .string "A piece of an\nancient marine\nPOKéMON’s seashell.$"
-
-gDomeFossilItemDescription:: @ 85835CB
- .string "A piece of an\nancient marine\nPOKéMON’s shell.$"
-
-gSilphScopeItemDescription:: @ 85835F9
- .string "SILPH CO’s scope\nmakes unseeable\nPOKéMON visible.$"
-
-gBicycleItemDescription:: @ 858362B
- .string "A folding bicycle\nthat is faster than\nthe RUNNING SHOES.$"
-
-gTownMapItemDescription:: @ 8583664
- .string "Can be viewed\nanytime. Shows your\npresent location.$"
-
-gVSSeekerItemDescription:: @ 8583698
- .string "A rechargeable unit\nthat flags battle-\nready TRAINERS.$"
-
-gFameCheckerItemDescription:: @ 85836CF
- .string "Stores information\non famous people\nfor instant recall.$"
-
-gTMCaseItemDescription:: @ 8583707
- .string "A convenient case \nthat holds TMs and\nHMs.$"
-
-gBerryPouchItemDescription:: @ 8583732
- .string "A convenient\ncontainer that\nholds BERRIES.$"
-
-gTeachyTVItemDescription:: @ 858375D
- .string "A TV set tuned to\nan advice program\nfor TRAINERS.$"
-
-gTriPassItemDescription:: @ 858378F
- .string "A pass for ferries\nbetween ONE, TWO,\nand THREE ISLAND.$"
-
-gRainbowPassItemDescription:: @ 85837C6
- .string "For ferries serving\nVERMILION and the\nSEVII ISLANDS.$"
-
-gTeaItemDescription:: @ 85837FB
- .string "A thirst-quenching\ntea prepared by an\nold lady.$"
-
-gMysticTicketItemDescription:: @ 858382B
- .string "A ticket required\nto board the ship\nto NAVEL ROCK.$"
-
-gAuroraTicketItemDescription:: @ 858385E
- .string "A ticket required\nto board the ship\nto BIRTH ISLAND.$"
-
-gPowderJarItemDescription:: @ 8583893
- .string "Stores BERRY\nPOWDER made using\na BERRY CRUSHER.$"
-
-gRubyItemDescription:: @ 85838C3
- .string "An exquisite, red-\nglowing gem that\nsymbolizes passion.$"
-
-gSapphireItemDescription:: @ 85838FB
- .string "A brilliant blue gem\nthat symbolizes\nhonesty.$"
-
-gMagmaEmblemItemDescription:: @ 8583929
- .string "A medal-like item in\nthe same shape as\nTEAM MAGMA’s mark.$"
-
-gOldSeaMapItemDescription:: @ 8583963
- .string "A faded sea chart\nthat shows the way\nto a certain island.$"
diff --git a/data/text/pokedex_rating.inc b/data/text/pokedex_rating.inc
index 735488b37..666c90867 100644
--- a/data/text/pokedex_rating.inc
+++ b/data/text/pokedex_rating.inc
@@ -12,99 +12,99 @@ gUnknown_082A5D2C:: @ 82A5D2C
.string "So, you’ve seen {STR_VAR_1} POKéMON,\n"
.string "and you’ve caught {STR_VAR_2} POKéMON…$"
-gUnknown_082A5D6C:: @ 82A5D6C
+gBirchDexRatingText_LessThan10:: @ 82A5D6C
.string "Go into grassy areas more and look\n"
.string "for POKéMON more carefully.$"
-gUnknown_082A5DAB:: @ 82A5DAB
+gBirchDexRatingText_LessThan20:: @ 82A5DAB
.string "I guess you’re getting the hang\n"
.string "of it. But, it gets harder from here.$"
-gUnknown_082A5DF1:: @ 82A5DF1
+gBirchDexRatingText_LessThan30:: @ 82A5DF1
.string "Some POKéMON only appear in\n"
.string "certain areas.\l"
.string "You must be persistent.$"
-gUnknown_082A5E34:: @ 82A5E34
+gBirchDexRatingText_LessThan40:: @ 82A5E34
.string "Well, it could use more quantity,\n"
.string "but this is looking more like\l"
.string "a POKéDEX now.$"
-gUnknown_082A5E83:: @ 82A5E83
+gBirchDexRatingText_LessThan50:: @ 82A5E83
.string "This is coming along pretty good.\n"
.string "Keep up the effort.$"
-gUnknown_082A5EB9:: @ 82A5EB9
+gBirchDexRatingText_LessThan60:: @ 82A5EB9
.string "Are you using any RODS?\n"
.string "There are many POKéMON in the sea.$"
-gUnknown_082A5EF4:: @ 82A5EF4
+gBirchDexRatingText_LessThan70:: @ 82A5EF4
.string "Instead of just catching POKéMON,\n"
.string "how about making them evolve, too?$"
-gUnknown_082A5F39:: @ 82A5F39
+gBirchDexRatingText_LessThan80:: @ 82A5F39
.string "This is going to be a fantastic\n"
.string "POKéDEX.\l"
.string "That’s the feeling I’m getting.$"
-gUnknown_082A5F82:: @ 82A5F82
+gBirchDexRatingText_LessThan90:: @ 82A5F82
.string "You’ve collected this many…\n"
.string "Your talent is remarkable!$"
-gUnknown_082A5FB9:: @ 82A5FB9
+gBirchDexRatingText_LessThan100:: @ 82A5FB9
.string "Have you visited the SAFARI ZONE?\p"
.string "I hear there are some POKéMON that\n"
.string "can only be caught there.$"
-gUnknown_082A6018:: @ 82A6018
+gBirchDexRatingText_LessThan110:: @ 82A6018
.string "You’ve finally reached\n"
.string "the 100-kind mark.\p"
.string "This is an impressive POKéDEX!$"
-gUnknown_082A6061:: @ 82A6061
+gBirchDexRatingText_LessThan120:: @ 82A6061
.string "There might be POKéMON that can be\n"
.string "found using ROCK SMASH.$"
-gUnknown_082A609C:: @ 82A609C
+gBirchDexRatingText_LessThan130:: @ 82A609C
.string "You should get some more POKéMON\n"
.string "by trading with others.$"
-gUnknown_082A60D5:: @ 82A60D5
+gBirchDexRatingText_LessThan140:: @ 82A60D5
.string "I’ve heard of POKéMON that evolve\n"
.string "when they come to fully love their\l"
.string "TRAINERS.$"
-gUnknown_082A6124:: @ 82A6124
+gBirchDexRatingText_LessThan150:: @ 82A6124
.string "I had no idea that there were so\n"
.string "many POKéMON species in the HOENN\l"
.string "region.$"
-gUnknown_082A616F:: @ 82A616F
+gBirchDexRatingText_LessThan160:: @ 82A616F
.string "On occasion, some POKéMON appear\n"
.string "in large numbers like outbreaks.\p"
.string "Don’t miss opportunities like\n"
.string "those.$"
-gUnknown_082A61D6:: @ 82A61D6
+gBirchDexRatingText_LessThan170:: @ 82A61D6
.string "One can get a very good idea about\n"
.string "the POKéMON of the HOENN region\l"
.string "by looking through your POKéDEX.$"
-gUnknown_082A623A:: @ 82A623A
+gBirchDexRatingText_LessThan180:: @ 82A623A
.string "I would say you already qualify as\n"
.string "a POKéMON PROFESSOR, and a good\l"
.string "one, too!$"
-gUnknown_082A6287:: @ 82A6287
+gBirchDexRatingText_LessThan190:: @ 82A6287
.string "With a POKéDEX this complete,\n"
.string "you’re a real professional at this!$"
-gUnknown_082A62C9:: @ 82A62C9
+gBirchDexRatingText_LessThan200:: @ 82A62C9
.string "You’re very close to completing\n"
.string "this POKéDEX.\l"
.string "I can feel it in my bones!$"
-gUnknown_082A6312:: @ 82A6312
+gBirchDexRatingText_DexCompleted:: @ 82A6312
.string "Congratulations!\n"
.string "Your POKéDEX is complete!$"
diff --git a/data/text/save.inc b/data/text/save.inc
index d909489ac..b252d61eb 100644
--- a/data/text/save.inc
+++ b/data/text/save.inc
@@ -1,18 +1,18 @@
-gUnknown_082C87B4:: @ 82C87B4
+gText_ConfirmSave:: @ 82C87B4
.string "Would you like to save the game?$"
-gUnknown_082C87D5:: @ 82C87D5
+gText_AlreadySavedFile:: @ 82C87D5
.string "There is already a saved file.\n"
.string "Is it okay to overwrite it?$"
-gUnknown_082C8810:: @ 82C8810
+gText_SavingDontTurnOff:: @ 82C8810
.string "SAVING…\n"
.string "DON’T TURN OFF THE POWER.$"
-gUnknown_082C8832:: @ 82C8832
+gText_PlayerSavedGame:: @ 82C8832
.string "{PLAYER} saved the game.$"
-gUnknown_082C8845:: @ 82C8845
+gText_DifferentSaveFile:: @ 82C8845
.string "WARNING!\p"
.string "There is a different game file that\n"
.string "is already saved.\p"
@@ -22,7 +22,7 @@ gUnknown_082C8845:: @ 82C8845
.string "Are you sure you want to save now\n"
.string "and overwrite the other save file?$"
-gUnknown_082C892A:: @ 82C892A
+gText_SaveError:: @ 82C892A
.string "Save error.\p"
.string "Please exchange the\n"
.string "backup memory.$"
diff --git a/data/text/type_names.inc b/data/text/type_names.inc
deleted file mode 100644
index c79e705c2..000000000
--- a/data/text/type_names.inc
+++ /dev/null
@@ -1,19 +0,0 @@
-gTypeNames:: @ 831AE38
- .string "NORMAL$", 7
- .string "FIGHT$", 7
- .string "FLYING$", 7
- .string "POISON$", 7
- .string "GROUND$", 7
- .string "ROCK$", 7
- .string "BUG$", 7
- .string "GHOST$", 7
- .string "STEEL$", 7
- .string "???$", 7
- .string "FIRE$", 7
- .string "WATER$", 7
- .string "GRASS$", 7
- .string "ELECTR$", 7
- .string "PSYCHC$", 7
- .string "ICE$", 7
- .string "DRAGON$", 7
- .string "DARK$", 7
diff --git a/data/trader.s b/data/trader.s
deleted file mode 100644
index 1fe929ae7..000000000
--- a/data/trader.s
+++ /dev/null
@@ -1,22 +0,0 @@
-
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 2
-gUnknown_085B09E4:: @ 85B09E4
- .4byte gText_Tristan
- .4byte gText_Philip
- .4byte gText_Dennis
- .4byte gText_Roberto
-
- .align 2
-gUnknown_085B09F4:: @ 85B09F4
- .byte 0x5b, 0x6b, 0x25, 0x15
-
- .align 2
-gUnknown_085B09F8:: @ 85B09F8
- .4byte 0x0a010100, 0x00010f0a
-
-
diff --git a/data/trainer_money.inc b/data/trainer_money.inc
deleted file mode 100644
index 5b8032d95..000000000
--- a/data/trainer_money.inc
+++ /dev/null
@@ -1,59 +0,0 @@
-@ This is a factor in how much money you get for beating a trainer.
- .align 2
-gTrainerMoneyTable:: @ 831AEB8
- .byte TRAINER_CLASS_TEAM_AQUA, 5, 0, 0
- .byte TRAINER_CLASS_AQUA_ADMIN, 10, 0, 0
- .byte TRAINER_CLASS_AQUA_LEADER, 20, 0, 0
- .byte TRAINER_CLASS_AROMA_LADY, 10, 0, 0
- .byte TRAINER_CLASS_RUIN_MANIAC, 15, 0, 0
- .byte TRAINER_CLASS_INTERVIEWER, 12, 0, 0
- .byte TRAINER_CLASS_TUBER_1, 1, 0, 0
- .byte TRAINER_CLASS_TUBER_2, 1, 0, 0
- .byte TRAINER_CLASS_SIS_AND_BRO, 3, 0, 0
- .byte TRAINER_CLASS_COOLTRAINER_1, 12, 0, 0
- .byte TRAINER_CLASS_HEX_MANIAC, 6, 0, 0
- .byte TRAINER_CLASS_LADY, 50, 0, 0
- .byte TRAINER_CLASS_BEAUTY, 20, 0, 0
- .byte TRAINER_CLASS_RICH_BOY, 50, 0, 0
- .byte TRAINER_CLASS_POKEMANIAC, 15, 0, 0
- .byte TRAINER_CLASS_SWIMMER_M, 2, 0, 0
- .byte TRAINER_CLASS_BLACK_BELT, 8, 0, 0
- .byte TRAINER_CLASS_GUITARIST, 8, 0, 0
- .byte TRAINER_CLASS_KINDLER, 8, 0, 0
- .byte TRAINER_CLASS_CAMPER, 4, 0, 0
- .byte TRAINER_CLASS_OLD_COUPLE, 10, 0, 0
- .byte TRAINER_CLASS_BUG_MANIAC, 15, 0, 0
- .byte TRAINER_CLASS_PSYCHIC, 6, 0, 0
- .byte TRAINER_CLASS_GENTLEMAN, 20, 0, 0
- .byte TRAINER_CLASS_ELITE_FOUR, 25, 0, 0
- .byte TRAINER_CLASS_LEADER, 25, 0, 0
- .byte TRAINER_CLASS_SCHOOL_KID, 5, 0, 0
- .byte TRAINER_CLASS_SR_AND_JR, 4, 0, 0
- .byte TRAINER_CLASS_POKEFAN, 20, 0, 0
- .byte TRAINER_CLASS_EXPERT, 10, 0, 0
- .byte TRAINER_CLASS_YOUNGSTER, 4, 0, 0
- .byte TRAINER_CLASS_CHAMPION, 50, 0, 0
- .byte TRAINER_CLASS_FISHERMAN, 10, 0, 0
- .byte TRAINER_CLASS_TRIATHLETE, 10, 0, 0
- .byte TRAINER_CLASS_DRAGON_TAMER, 12, 0, 0
- .byte TRAINER_CLASS_BIRD_KEEPER, 8, 0, 0
- .byte TRAINER_CLASS_NINJA_BOY, 3, 0, 0
- .byte TRAINER_CLASS_BATTLE_GIRL, 6, 0, 0
- .byte TRAINER_CLASS_PARASOL_LADY, 10, 0, 0
- .byte TRAINER_CLASS_SWIMMER_F, 2, 0, 0
- .byte TRAINER_CLASS_PICNICKER, 4, 0, 0
- .byte TRAINER_CLASS_TWINS, 3, 0, 0
- .byte TRAINER_CLASS_SAILOR, 8, 0, 0
- .byte TRAINER_CLASS_COLLECTOR, 15, 0, 0
- .byte TRAINER_CLASS_PKMN_TRAINER_3, 15, 0, 0
- .byte TRAINER_CLASS_PKMN_BREEDER, 10, 0, 0
- .byte TRAINER_CLASS_PKMN_RANGER, 12, 0, 0
- .byte TRAINER_CLASS_TEAM_MAGMA, 5, 0, 0
- .byte TRAINER_CLASS_MAGMA_ADMIN, 10, 0, 0
- .byte TRAINER_CLASS_MAGMA_LEADER, 20, 0, 0
- .byte TRAINER_CLASS_LASS, 4, 0, 0
- .byte TRAINER_CLASS_BUG_CATCHER, 4, 0, 0
- .byte TRAINER_CLASS_HIKER, 10, 0, 0
- .byte TRAINER_CLASS_YOUNG_COUPLE, 8, 0, 0
- .byte TRAINER_CLASS_WINSTRATE, 10, 0, 0
- .byte -1, 5, 0, 0
diff --git a/data/trainer_rematch.s b/data/trainer_rematch.s
deleted file mode 100644
index e3a05ba8b..000000000
--- a/data/trainer_rematch.s
+++ /dev/null
@@ -1,10 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
-gUnknown_0862AD34:: @ 862AD34
- .2byte 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048
-
-gUnknown_0862AD44:: @ 862AD44
- .2byte 0x0041, 0x0042, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0000
diff --git a/data/type_effectiveness.inc b/data/type_effectiveness.inc
deleted file mode 100644
index 0739199c2..000000000
--- a/data/type_effectiveness.inc
+++ /dev/null
@@ -1,119 +0,0 @@
-@ format: attacking type, defending type, damage multiplier
-@ the multiplier is a (decimal) fixed-point number:
-@ 20 is ×2.0
-@ 05 is ×0.5
-@ 00 is ×0
-
-gTypeEffectiveness:: @ 831ACE8
- .byte TYPE_NORMAL, TYPE_ROCK, 5
- .byte TYPE_NORMAL, TYPE_STEEL, 5
- .byte TYPE_FIRE, TYPE_FIRE, 5
- .byte TYPE_FIRE, TYPE_WATER, 5
- .byte TYPE_FIRE, TYPE_GRASS, 20
- .byte TYPE_FIRE, TYPE_ICE, 20
- .byte TYPE_FIRE, TYPE_BUG, 20
- .byte TYPE_FIRE, TYPE_ROCK, 5
- .byte TYPE_FIRE, TYPE_DRAGON, 5
- .byte TYPE_FIRE, TYPE_STEEL, 20
- .byte TYPE_WATER, TYPE_FIRE, 20
- .byte TYPE_WATER, TYPE_WATER, 5
- .byte TYPE_WATER, TYPE_GRASS, 5
- .byte TYPE_WATER, TYPE_GROUND, 20
- .byte TYPE_WATER, TYPE_ROCK, 20
- .byte TYPE_WATER, TYPE_DRAGON, 5
- .byte TYPE_ELECTRIC, TYPE_WATER, 20
- .byte TYPE_ELECTRIC, TYPE_ELECTRIC, 5
- .byte TYPE_ELECTRIC, TYPE_GRASS, 5
- .byte TYPE_ELECTRIC, TYPE_GROUND, 0
- .byte TYPE_ELECTRIC, TYPE_FLYING, 20
- .byte TYPE_ELECTRIC, TYPE_DRAGON, 5
- .byte TYPE_GRASS, TYPE_FIRE, 5
- .byte TYPE_GRASS, TYPE_WATER, 20
- .byte TYPE_GRASS, TYPE_GRASS, 5
- .byte TYPE_GRASS, TYPE_POISON, 5
- .byte TYPE_GRASS, TYPE_GROUND, 20
- .byte TYPE_GRASS, TYPE_FLYING, 5
- .byte TYPE_GRASS, TYPE_BUG, 5
- .byte TYPE_GRASS, TYPE_ROCK, 20
- .byte TYPE_GRASS, TYPE_DRAGON, 5
- .byte TYPE_GRASS, TYPE_STEEL, 5
- .byte TYPE_ICE, TYPE_WATER, 5
- .byte TYPE_ICE, TYPE_GRASS, 20
- .byte TYPE_ICE, TYPE_ICE, 5
- .byte TYPE_ICE, TYPE_GROUND, 20
- .byte TYPE_ICE, TYPE_FLYING, 20
- .byte TYPE_ICE, TYPE_DRAGON, 20
- .byte TYPE_ICE, TYPE_STEEL, 5
- .byte TYPE_ICE, TYPE_FIRE, 5
- .byte TYPE_FIGHTING, TYPE_NORMAL, 20
- .byte TYPE_FIGHTING, TYPE_ICE, 20
- .byte TYPE_FIGHTING, TYPE_POISON, 5
- .byte TYPE_FIGHTING, TYPE_FLYING, 5
- .byte TYPE_FIGHTING, TYPE_PSYCHIC, 5
- .byte TYPE_FIGHTING, TYPE_BUG, 5
- .byte TYPE_FIGHTING, TYPE_ROCK, 20
- .byte TYPE_FIGHTING, TYPE_DARK, 20
- .byte TYPE_FIGHTING, TYPE_STEEL, 20
- .byte TYPE_POISON, TYPE_GRASS, 20
- .byte TYPE_POISON, TYPE_POISON, 5
- .byte TYPE_POISON, TYPE_GROUND, 5
- .byte TYPE_POISON, TYPE_ROCK, 5
- .byte TYPE_POISON, TYPE_GHOST, 5
- .byte TYPE_POISON, TYPE_STEEL, 0
- .byte TYPE_GROUND, TYPE_FIRE, 20
- .byte TYPE_GROUND, TYPE_ELECTRIC, 20
- .byte TYPE_GROUND, TYPE_GRASS, 5
- .byte TYPE_GROUND, TYPE_POISON, 20
- .byte TYPE_GROUND, TYPE_FLYING, 0
- .byte TYPE_GROUND, TYPE_BUG, 5
- .byte TYPE_GROUND, TYPE_ROCK, 20
- .byte TYPE_GROUND, TYPE_STEEL, 20
- .byte TYPE_FLYING, TYPE_ELECTRIC, 5
- .byte TYPE_FLYING, TYPE_GRASS, 20
- .byte TYPE_FLYING, TYPE_FIGHTING, 20
- .byte TYPE_FLYING, TYPE_BUG, 20
- .byte TYPE_FLYING, TYPE_ROCK, 5
- .byte TYPE_FLYING, TYPE_STEEL, 5
- .byte TYPE_PSYCHIC, TYPE_FIGHTING, 20
- .byte TYPE_PSYCHIC, TYPE_POISON, 20
- .byte TYPE_PSYCHIC, TYPE_PSYCHIC, 5
- .byte TYPE_PSYCHIC, TYPE_DARK, 0
- .byte TYPE_PSYCHIC, TYPE_STEEL, 5
- .byte TYPE_BUG, TYPE_FIRE, 5
- .byte TYPE_BUG, TYPE_GRASS, 20
- .byte TYPE_BUG, TYPE_FIGHTING, 5
- .byte TYPE_BUG, TYPE_POISON, 5
- .byte TYPE_BUG, TYPE_FLYING, 5
- .byte TYPE_BUG, TYPE_PSYCHIC, 20
- .byte TYPE_BUG, TYPE_GHOST, 5
- .byte TYPE_BUG, TYPE_DARK, 20
- .byte TYPE_BUG, TYPE_STEEL, 5
- .byte TYPE_ROCK, TYPE_FIRE, 20
- .byte TYPE_ROCK, TYPE_ICE, 20
- .byte TYPE_ROCK, TYPE_FIGHTING, 5
- .byte TYPE_ROCK, TYPE_GROUND, 5
- .byte TYPE_ROCK, TYPE_FLYING, 20
- .byte TYPE_ROCK, TYPE_BUG, 20
- .byte TYPE_ROCK, TYPE_STEEL, 5
- .byte TYPE_GHOST, TYPE_NORMAL, 0
- .byte TYPE_GHOST, TYPE_PSYCHIC, 20
- .byte TYPE_GHOST, TYPE_DARK, 5
- .byte TYPE_GHOST, TYPE_STEEL, 5
- .byte TYPE_GHOST, TYPE_GHOST, 20
- .byte TYPE_DRAGON, TYPE_DRAGON, 20
- .byte TYPE_DRAGON, TYPE_STEEL, 5
- .byte TYPE_DARK, TYPE_FIGHTING, 5
- .byte TYPE_DARK, TYPE_PSYCHIC, 20
- .byte TYPE_DARK, TYPE_GHOST, 20
- .byte TYPE_DARK, TYPE_DARK, 5
- .byte TYPE_DARK, TYPE_STEEL, 5
- .byte TYPE_STEEL, TYPE_FIRE, 5
- .byte TYPE_STEEL, TYPE_WATER, 5
- .byte TYPE_STEEL, TYPE_ELECTRIC, 5
- .byte TYPE_STEEL, TYPE_ICE, 20
- .byte TYPE_STEEL, TYPE_ROCK, 20
- .byte TYPE_STEEL, TYPE_STEEL, 5
- .byte 0xFE, 0xFE, 0
- .byte TYPE_NORMAL, TYPE_GHOST, 0
- .byte TYPE_FIGHTING, TYPE_GHOST, 0
- .byte 0xFF, 0xFF, 0
diff --git a/data/unk_transition.s b/data/unk_transition.s
index 2dc54e22d..db5744d08 100644
--- a/data/unk_transition.s
+++ b/data/unk_transition.s
@@ -3,6 +3,7 @@
.section .rodata
+ .align 2, 0
gUnknown_0862AD54:: @ 862AD54
.incbin "graphics/battle_transitions/frontier_transition.4bpp.lz"
diff --git a/graphics/unknown/unknown_55C170.png b/graphics/unknown/unknown_55C170.png
index 95a2e2427..d601cb6e5 100644
--- a/graphics/unknown/unknown_55C170.png
+++ b/graphics/unknown/unknown_55C170.png
Binary files differ
diff --git a/graphics/unknown/unknown_55C190.png b/graphics/unknown/unknown_55C190.png
new file mode 100644
index 000000000..01f10cd07
--- /dev/null
+++ b/graphics/unknown/unknown_55C190.png
Binary files differ
diff --git a/graphics/unknown/unknown_55C1B0.png b/graphics/unknown/unknown_55C1B0.png
new file mode 100644
index 000000000..3f5b8d5c3
--- /dev/null
+++ b/graphics/unknown/unknown_55C1B0.png
Binary files differ
diff --git a/graphics/unknown/unknown_55C1D0.png b/graphics/unknown/unknown_55C1D0.png
new file mode 100644
index 000000000..7684451e4
--- /dev/null
+++ b/graphics/unknown/unknown_55C1D0.png
Binary files differ
diff --git a/graphics/unused/intro_birch_beauty.png b/graphics/unused/intro_birch_beauty.png
index 85951c902..f13221cf5 100644
--- a/graphics/unused/intro_birch_beauty.png
+++ b/graphics/unused/intro_birch_beauty.png
Binary files differ
diff --git a/graphics_file_rules.mk b/graphics_file_rules.mk
index 092ab5644..dad4ea026 100644
--- a/graphics_file_rules.mk
+++ b/graphics_file_rules.mk
@@ -470,7 +470,7 @@ $(SLOTMACHINEGFXDIR)/reel_time_gfx.4bpp: $(SLOTMACHINEGFXDIR)/reel_time_pikachu.
@cat $^ >$@
$(UNUSEDGFXDIR)/intro_birch_beauty.4bpp: %.4bpp: %.png
- $(GFX) $< $@ -num_tiles 374
+ $(GFX) $< $@ -num_tiles 822
$(PSSGFXDIR)/forest_frame.4bpp: %.4bpp: %.png
$(GFX) $< $@ -num_tiles 55
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/bard_music.h b/include/bard_music.h
index 7d9ca633e..9d3d0ad22 100644
--- a/include/bard_music.h
+++ b/include/bard_music.h
@@ -9,7 +9,7 @@ struct BardSound
/*0x00*/ u8 var00;
/*0x01*/ s8 var01;
/*0x02*/ u16 var02;
- /*0x04*/ u16 volume;
+ /*0x04*/ s16 volume;
/*0x06*/ u16 var06;
};
@@ -39,5 +39,7 @@ struct BardSong
// Exported ROM declarations
extern const u16 gUnknown_085F5490;
+const struct BardSound *GetWordSounds(u16 word);
+void GetWordPhonemes(struct BardSong *song, u16 word);
#endif //GUARD_BARD_MUSIC_H
diff --git a/include/battle.h b/include/battle.h
index 5225b72e3..ae8a1c98a 100644
--- a/include/battle.h
+++ b/include/battle.h
@@ -3,9 +3,9 @@
// should they be included here or included individually by every file?
#include "constants/battle.h"
+#include "battle_main.h"
#include "battle_util.h"
#include "battle_script_commands.h"
-#include "battle_main.h"
#include "battle_ai_switch_items.h"
#include "battle_gfx_sfx_util.h"
#include "battle_util2.h"
@@ -66,29 +66,14 @@
#define MSG_DISPLAY 0x7
#define BATTLE_COMMUNICATION_ENTRIES_COUNT 0x8
-#define MOVE_TARGET_SELECTED 0x0
-#define MOVE_TARGET_DEPENDS 0x1
-#define MOVE_TARGET_USER 0x2
-#define MOVE_TARGET_RANDOM 0x4
-#define MOVE_TARGET_x10 0x10
-#define MOVE_TARGET_BOTH 0x8
-#define MOVE_TARGET_FOES_AND_ALLY 0x20
-#define MOVE_TARGET_OPPONENTS_FIELD 0x40
-
-// defines for the u8 array gTypeEffectiveness
-#define TYPE_EFFECT_ATK_TYPE(i)((gTypeEffectiveness[i + 0]))
-#define TYPE_EFFECT_DEF_TYPE(i)((gTypeEffectiveness[i + 1]))
-#define TYPE_EFFECT_MULTIPLIER(i)((gTypeEffectiveness[i + 2]))
-
-// defines for the gTypeEffectiveness multipliers
-#define TYPE_MUL_NO_EFFECT 0
-#define TYPE_MUL_NOT_EFFECTIVE 5
-#define TYPE_MUL_NORMAL 10
-#define TYPE_MUL_SUPER_EFFECTIVE 20
-
-// special type table Ids
-#define TYPE_FORESIGHT 0xFE
-#define TYPE_ENDTABLE 0xFF
+#define MOVE_TARGET_SELECTED 0x0
+#define MOVE_TARGET_DEPENDS 0x1
+#define MOVE_TARGET_USER_OR_SELECTED 0x2
+#define MOVE_TARGET_RANDOM 0x4
+#define MOVE_TARGET_BOTH 0x8
+#define MOVE_TARGET_USER 0x10
+#define MOVE_TARGET_FOES_AND_ALLY 0x20
+#define MOVE_TARGET_OPPONENTS_FIELD 0x40
#define BATTLE_BUFFER_LINK_SIZE 0x1000
@@ -368,6 +353,91 @@ struct BattleResults
u8 catchAttempts[11]; // 0x36
};
+struct BattleTv_Side
+{
+ u32 spikesMonId:3;
+ u32 reflectMonId:3;
+ u32 lightScreenMonId:3;
+ u32 safeguardMonId:3;
+ u32 mistMonId:3;
+ u32 futureSightMonId:3;
+ u32 doomDesireMonId:3;
+ u32 perishSongMonId:3;
+ u32 wishMonId:3;
+ u32 grudgeMonId:3;
+ u32 usedMoveSlot:2;
+ u32 spikesMoveSlot:2;
+ u32 reflectMoveSlot:2;
+ u32 lightScreenMoveSlot:2;
+ u32 safeguardMoveSlot:2;
+ u32 mistMoveSlot:2;
+ u32 futureSightMoveSlot:2;
+ u32 doomDesireMoveSlot:2;
+ u32 perishSongMoveSlot:2;
+ u32 wishMoveSlot:2;
+ u32 grudgeMoveSlot:2;
+ u32 destinyBondMonId:3;
+ u32 destinyBondMoveSlot:2;
+ u32 faintCause:4;
+ u32 faintCauseMonId:3;
+ u32 explosion:1;
+ u32 explosionMoveSlot:2;
+ u32 explosionMonId:3;
+ u32 perishSong:1;
+};
+
+struct BattleTv_Position
+{
+ u32 curseMonId:3;
+ u32 leechSeedMonId:3;
+ u32 nightmareMonId:3;
+ u32 wrapMonId:3;
+ u32 attractMonId:3;
+ u32 confusionMonId:3;
+ u32 curseMoveSlot:2;
+ u32 leechSeedMoveSlot:2;
+ u32 nightmareMoveSlot:2;
+ u32 wrapMoveSlot:2;
+ u32 attractMoveSlot:2;
+ u32 confusionMoveSlot:2;
+ u32 waterSportMoveSlot:2;
+ u32 waterSportMonId:3;
+ u32 mudSportMonId:3;
+ u32 mudSportMoveSlot:2;
+ u32 ingrainMonId:3;
+ u32 ingrainMoveSlot:2;
+ u32 attackedByMonId:3;
+ u32 attackedByMoveSlot:2;
+};
+
+struct BattleTv_Mon
+{
+ u32 psnMonId:3;
+ u32 badPsnMonId:3;
+ u32 brnMonId:3;
+ u32 prlzMonId:3;
+ u32 slpMonId:3;
+ u32 frzMonId:3;
+ u32 psnMoveSlot:2;
+ u32 badPsnMoveSlot:2;
+ u32 brnMoveSlot:2;
+ u32 prlzMoveSlot:2;
+ u32 slpMoveSlot:2;
+ u32 frzMoveSlot:2;
+};
+
+struct BattleTv
+{
+ struct BattleTv_Mon mon[2][6]; // [side][partyId]
+ struct BattleTv_Position pos[2][2]; // [side][flank]
+ struct BattleTv_Side side[2]; // [side]
+};
+
+struct BattleTvMovePoints
+{
+ s16 points[2][PARTY_SIZE * 4];
+};
+
struct BattleStruct
{
u8 turnEffectsTracker;
@@ -447,7 +517,7 @@ struct BattleStruct
u8 field_B0;
u8 hpScale;
u8 synchronizeMoveEffect;
- u8 field_B3;
+ bool8 anyMonHasTransformed;
void (*savedCallback)(void);
u16 usedHeldItems[MAX_BATTLERS_COUNT];
u8 chosenItem[4]; // why is this an u8?
@@ -472,9 +542,9 @@ struct BattleStruct
u8 wishPerishSongBattlerId;
bool8 overworldWeatherDone;
u8 atkCancellerTracker;
- u8 field_1A4[96];
- u8 field_204[104];
- u8 field_26C[40];
+ struct BattleTvMovePoints tvMovePoints;
+ struct BattleTv tv;
+ u8 notSureWhatFieldLol[0x28];
u8 AI_monToSwitchIntoId[MAX_BATTLERS_COUNT];
u8 field_298[8];
u8 field_2A0;
@@ -493,6 +563,15 @@ struct BattleStruct
#define IS_MOVE_PHYSICAL(moveType)(moveType < TYPE_MYSTERY)
#define IS_MOVE_SPECIAL(moveType)(moveType > TYPE_MYSTERY)
+#define TARGET_TURN_DAMAGED ((gSpecialStatuses[gBattlerTarget].physicalDmg != 0 || gSpecialStatuses[gBattlerTarget].specialDmg != 0))
+
+#define IS_BATTLER_OF_TYPE(battlerId, type)((gBattleMons[battlerId].type1 == type || gBattleMons[battlerId].type2 == type))
+#define SET_BATTLER_TYPE(battlerId, type) \
+{ \
+ gBattleMons[battlerId].type1 = type; \
+ gBattleMons[battlerId].type2 = type; \
+}
+
#define GET_STAT_BUFF_ID(n)((n & 0xF)) // first four bits 0x1, 0x2, 0x4, 0x8
#define GET_STAT_BUFF_VALUE(n)(((n >> 4) & 7)) // 0x10, 0x20, 0x40
#define STAT_BUFF_NEGATIVE 0x80 // 0x80, the sign bit
diff --git a/include/battle_anim.h b/include/battle_anim.h
index aa62db46d..d6d4c05d6 100644
--- a/include/battle_anim.h
+++ b/include/battle_anim.h
@@ -47,7 +47,7 @@ extern s16 gBattleAnimArgs[ANIM_ARGS_COUNT];
extern u8 gAnimMoveTurn;
extern u8 gBattleAnimAttacker;
extern u8 gBattleAnimTarget;
-extern u16 gAnimSpeciesByBanks[MAX_BATTLERS_COUNT];
+extern u16 gAnimBattlerSpecies[MAX_BATTLERS_COUNT];
extern u8 gUnknown_02038440;
void ClearBattleAnimationVars(void);
@@ -61,7 +61,7 @@ void sub_80A438C(u8 battlerId, bool8 toBG_2, bool8 setSpriteInvisible);
bool8 IsContest(void);
s8 BattleAnimAdjustPanning(s8 pan);
s8 BattleAnimAdjustPanning2(s8 pan);
-s16 sub_80A52EC(s16 a);
+s16 KeepPanInRange(s16 a);
s16 CalculatePanIncrement(s16 sourcePan, s16 targetPan, s16 incrementPan);
// battle_anim_80FE840.s
diff --git a/include/battle_frontier_1.h b/include/battle_frontier_1.h
index 5483b28ef..b9c633efc 100644
--- a/include/battle_frontier_1.h
+++ b/include/battle_frontier_1.h
@@ -2,6 +2,7 @@
#define GUARD_BATTLE_FRONTIER_1_H
bool32 sub_8196094(void);
+void sub_8197080(u8 *);
void sub_8196080(const u8 *str);
#endif // GUARD_BATTLE_FRONTIER_1_H
diff --git a/include/battle_frontier_2.h b/include/battle_frontier_2.h
index 801c3f3ec..3f8f8049d 100644
--- a/include/battle_frontier_2.h
+++ b/include/battle_frontier_2.h
@@ -6,5 +6,7 @@ void sub_81A895C(void);
u16 sub_81A89A0(u8);
void sub_81A8AF8(void);
bool8 InBattlePike(void);
+void sub_819FA50(void);
+void sub_81AA078(u16*, u8);
#endif // GUARD_BATTLE_FRONTIER_2_H
diff --git a/include/battle_link_817C95C.h b/include/battle_link_817C95C.h
deleted file mode 100644
index cb2cb0b27..000000000
--- a/include/battle_link_817C95C.h
+++ /dev/null
@@ -1,11 +0,0 @@
-#ifndef GUARD_BATTLE_LINK_817C95C_H
-#define GUARD_BATTLE_LINK_817C95C_H
-
-void sub_817C95C(u16 stringId);
-void sub_817E0FC(u16 move, u16 weatherFlags, struct DisableStruct *disableStructPtr);
-void sub_817E32C(u8 animationId);
-void sub_817E3F4(void);
-void sub_817F2A8(void);
-u8 GetBattlerMoveSlotId(u8 bank, u16 move);
-
-#endif // GUARD_BATTLE_LINK_817C95C_H
diff --git a/include/battle_main.h b/include/battle_main.h
index d7a522f17..a725b631f 100644
--- a/include/battle_main.h
+++ b/include/battle_main.h
@@ -1,6 +1,30 @@
#ifndef GUARD_BATTLE_MAIN_H
#define GUARD_BATTLE_MAIN_H
+struct TrainerMoney
+{
+ u8 classId;
+ u8 value;
+};
+
+#define TYPE_NAME_LENGTH 6
+#define ABILITY_NAME_LENGTH 12
+
+// defines for the u8 array gTypeEffectiveness
+#define TYPE_EFFECT_ATK_TYPE(i)((gTypeEffectiveness[i + 0]))
+#define TYPE_EFFECT_DEF_TYPE(i)((gTypeEffectiveness[i + 1]))
+#define TYPE_EFFECT_MULTIPLIER(i)((gTypeEffectiveness[i + 2]))
+
+// defines for the gTypeEffectiveness multipliers
+#define TYPE_MUL_NO_EFFECT 0
+#define TYPE_MUL_NOT_EFFECTIVE 5
+#define TYPE_MUL_NORMAL 10
+#define TYPE_MUL_SUPER_EFFECTIVE 20
+
+// special type table Ids
+#define TYPE_FORESIGHT 0xFE
+#define TYPE_ENDTABLE 0xFF
+
void CB2_InitBattle(void);
void BattleMainCB2(void);
void CB2_QuitRecordedBattle(void);
@@ -42,6 +66,12 @@ void RunBattleScriptCommands_PopCallbacksStack(void);
void RunBattleScriptCommands(void);
bool8 TryRunFromBattle(u8 battlerId);
+extern const u8 gTypeEffectiveness[336];
+extern const u8 gTypeNames[][TYPE_NAME_LENGTH + 1];
+extern const struct TrainerMoney gTrainerMoneyTable[];
+extern const u8 gAbilityNames[][ABILITY_NAME_LENGTH + 1];
+extern const u8 *const gAbilityDescriptionPointers[];
+
extern const u8 gStatusConditionString_PoisonJpn[8];
extern const u8 gStatusConditionString_SleepJpn[8];
extern const u8 gStatusConditionString_ParalysisJpn[8];
diff --git a/include/battle_message.h b/include/battle_message.h
index 30ddca469..bf9b590af 100644
--- a/include/battle_message.h
+++ b/include/battle_message.h
@@ -229,6 +229,63 @@ extern const u8* const gPokeblockWasTooXStringTable[];
extern const u8* const gRefereeStringsTable[];
extern const u8* const gStatNamesTable2[];
+extern const u8 gText_PkmnIsEvolving[];
+extern const u8 gText_CongratsPkmnEvolved[];
+extern const u8 gText_PkmnStoppedEvolving[];
+extern const u8 gText_EllipsisQuestionMark[];
+extern const u8 gText_WhatWillPkmnDo[];
+extern const u8 gText_WhatWillPkmnDo2[];
+extern const u8 gText_WhatWillWallyDo[];
+extern const u8 gText_LinkStandby[];
+extern const u8 gText_BattleMenu[];
+extern const u8 gText_SafariZoneMenu[];
+extern const u8 gText_MoveInterfacePP[];
+extern const u8 gText_MoveInterfaceType[];
+extern const u8 gText_MoveInterfacePpType[];
+extern const u8 gText_MoveInterfaceDynamicColors[];
+extern const u8 gText_WhichMoveToForget4[];
+extern const u8 gText_BattleYesNoChoice[];
+extern const u8 gText_BattleSwitchWhich[];
+extern const u8 gText_BattleSwitchWhich2[];
+extern const u8 gText_BattleSwitchWhich3[];
+extern const u8 gText_BattleSwitchWhich4[];
+extern const u8 gText_BattleSwitchWhich5[];
+extern const u8 gText_SafariBalls[];
+extern const u8 gText_SafariBallLeft[];
+extern const u8 gText_SpaceAndSpace[];
+extern const u8 gText_CommaSpace[];
+extern const u8 gText_Space2[];
+extern const u8 gText_ScrollTextUp[];
+extern const u8 gText_NewLine[];
+extern const u8 gText_Are[];
+extern const u8 gText_Are2[];
+extern const u8 gText_BadEgg[];
+extern const u8 gText_BattleWallyName[];
+extern const u8 gText_Win[];
+extern const u8 gText_Loss[];
+extern const u8 gText_Draw[];
+extern const u8 gText_StatRose[];
+extern const u8 gText_PkmnsStatChanged2[];
+extern const u8 gText_PkmnGettingPumped[];
+extern const u8 gText_PkmnShroudedInMist[];
+extern const u8 gText_PkmnsXPreventsSwitching[];
+extern const u8 gText_TheGreatNewHope[];
+extern const u8 gText_WillChampinshipDreamComeTrue[];
+extern const u8 gText_AFormerChampion[];
+extern const u8 gText_ThePreviousChampion[];
+extern const u8 gText_TheUnbeatenChampion[];
+extern const u8 gText_PlayerMon1Name[];
+extern const u8 gText_Vs[];
+extern const u8 gText_OpponentMon1Name[];
+extern const u8 gText_Mind[];
+extern const u8 gText_Skill[];
+extern const u8 gText_Body[];
+extern const u8 gText_Judgement[];
+extern const u8 gText_EmptyString3[];
+extern const u8 gText_RecordBattleToPass[];
+extern const u8 gText_BattleRecordedOnPass[];
+extern const u8 gText_BattleTourney[];
+
extern const u16 gMissStringIds[];
extern const u16 gTrappingMoves[];
diff --git a/include/battle_records.h b/include/battle_records.h
new file mode 100644
index 000000000..88ff6adc9
--- /dev/null
+++ b/include/battle_records.h
@@ -0,0 +1,12 @@
+#ifndef GUARD_BATTLE_RECORDS_H
+#define GUARD_BATTLE_RECORDS_H
+
+extern u8 gRecordsWindowId;
+
+void ClearPlayerLinkBattleRecords(void);
+void UpdatePlayerLinkBattleRecords(s32 battlerId);
+void ShowLinkBattleRecords(void);
+void RemoveRecordsWindow(void);
+void ShowTrainerHillRecords(void);
+
+#endif // GUARD_BATTLE_RECORDS_H
diff --git a/include/battle_script_commands.h b/include/battle_script_commands.h
index 6c84d1f0f..142ac1f7b 100644
--- a/include/battle_script_commands.h
+++ b/include/battle_script_commands.h
@@ -4,16 +4,16 @@
#define WINDOW_CLEAR 0x1
#define WINDOW_x80 0x80
-void AI_CalcDmg(u8 bankAtk, u8 bankDef);
-u8 TypeCalc(u16 move, u8 bankAtk, u8 bankDef);
+void AI_CalcDmg(u8 battlerIdAtk, u8 battlerIdDef);
+u8 TypeCalc(u16 move, u8 battlerIdAtk, u8 battlerIdDef);
u8 AI_TypeCalc(u16 move, u16 targetSpecies, u8 targetAbility);
-u8 GetBattlerTurnOrderNum(u8 bank);
+u8 GetBattlerTurnOrderNum(u8 battlerId);
void SetMoveEffect(bool8 primary, u8 certain);
void BattleDestroyYesNoCursorAt(u8 cursorPosition);
void BattleCreateYesNoCursorAt(u8 cursorPosition);
void BufferMoveToLearnIntoBattleTextBuff2(void);
void HandleBattleWindow(u8 xStart, u8 yStart, u8 xEnd, u8 yEnd, u8 flags);
-bool8 UproarWakeUpCheck(u8 bank);
+bool8 UproarWakeUpCheck(u8 battlerId);
extern void (* const gBattleScriptingCommandsTable[])(void);
extern const u8 gUnknown_0831C494[][4];
diff --git a/include/battle_tv.h b/include/battle_tv.h
new file mode 100644
index 000000000..72466d73b
--- /dev/null
+++ b/include/battle_tv.h
@@ -0,0 +1,11 @@
+#ifndef GUARD_BATTLE_TV_H
+#define GUARD_BATTLE_TV_H
+
+void BattleTv_SetDataBasedOnString(u16 stringId);
+void BattleTv_SetDataBasedOnMove(u16 move, u16 weatherFlags, struct DisableStruct *disableStructPtr);
+void BattleTv_SetDataBasedOnAnimation(u8 animationId);
+void TryPutLinkBattleTvShowOnAir(void);
+void BattleTv_ClearExplosionFaintCause(void);
+u8 GetBattlerMoveSlotId(u8 battlerId, u16 moveId);
+
+#endif // GUARD_BATTLE_TV_H
diff --git a/include/battle_util.h b/include/battle_util.h
index d992faa47..e5c1aaf18 100644
--- a/include/battle_util.h
+++ b/include/battle_util.h
@@ -49,36 +49,36 @@ void PressurePPLose(u8 bankDef, u8 bankAtk, u16 move);
void PressurePPLoseOnUsingPerishSong(u8 bankAtk);
void PressurePPLoseOnUsingImprision(u8 bankAtk);
void MarkAllBattlersForControllerExec(void); // unused
-void MarkBattlerForControllerExec(u8 bank);
+void MarkBattlerForControllerExec(u8 battlerId);
void sub_803F850(u8 arg0);
-void CancelMultiTurnMoves(u8 bank);
-bool8 WasUnableToUseMove(u8 bank);
-void PrepareStringBattle(u16 stringId, u8 bank);
+void CancelMultiTurnMoves(u8 battlerId);
+bool8 WasUnableToUseMove(u8 battlerId);
+void PrepareStringBattle(u16 stringId, u8 battlerId);
void ResetSentPokesToOpponentValue(void);
-void sub_803F9EC(u8 bank);
-void sub_803FA70(u8 bank);
+void sub_803F9EC(u8 battlerId);
+void sub_803FA70(u8 battlerId);
void BattleScriptPush(const u8* bsPtr);
void BattleScriptPushCursor(void);
void BattleScriptPop(void);
u8 TrySetCantSelectMoveBattleScript(void);
-u8 CheckMoveLimitations(u8 bank, u8 unusableMoves, u8 check);
+u8 CheckMoveLimitations(u8 battlerId, u8 unusableMoves, u8 check);
bool8 AreAllMovesUnusable(void);
-u8 GetImprisonedMovesCount(u8 bank, u16 move);
+u8 GetImprisonedMovesCount(u8 battlerId, u16 move);
u8 UpdateTurnCounters(void);
u8 TurnBasedEffects(void);
bool8 HandleWishPerishSongOnTurnEnd(void);
bool8 HandleFaintedMonActions(void);
void TryClearRageStatuses(void);
u8 AtkCanceller_UnableToUseMove(void);
-bool8 sub_80423F4(u8 bank, u8 r1, u8 r2);
-u8 CastformDataTypeChange(u8 bank);
-u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg);
+bool8 sub_80423F4(u8 battlerId, u8 r1, u8 r2);
+u8 CastformDataTypeChange(u8 battlerId);
+u8 AbilityBattleEffects(u8 caseID, u8 battlerId, u8 ability, u8 special, u16 moveArg);
void BattleScriptExecute(const u8* BS_ptr);
void BattleScriptPushCursorAndCallback(const u8* BS_ptr);
-u8 ItemBattleEffects(u8 caseID, u8 bank, bool8 moveTurn);
-void ClearFuryCutterDestinyBondGrudge(u8 bank);
+u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn);
+void ClearFuryCutterDestinyBondGrudge(u8 battlerId);
void HandleAction_RunBattleScript(void);
-u8 GetMoveTarget(u16 move, u8 useMoveTarget);
+u8 GetMoveTarget(u16 move, u8 setTarget);
u8 IsMonDisobedient(void);
#endif // GUARD_BATTLE_UTIL_H
diff --git a/include/bg.h b/include/bg.h
index de3897fa4..ea84c1573 100644
--- a/include/bg.h
+++ b/include/bg.h
@@ -68,7 +68,7 @@ void UnsetBgTilemapBuffer(u8 bg);
void* GetBgTilemapBuffer(u8 bg);
void CopyToBgTilemapBuffer(u8 bg, const void *src, u16 mode, u16 destOffset);
void CopyBgTilemapBufferToVram(u8 bg);
-void CopyToBgTilemapBufferRect(u8 bg, void* src, u8 destX, u8 destY, u8 width, u8 height);
+void CopyToBgTilemapBufferRect(u8 bg, const void* src, u8 destX, u8 destY, u8 width, u8 height);
void CopyToBgTilemapBufferRect_ChangePalette(u8 bg, void *src, u8 destX, u8 destY, u8 rectWidth, u8 rectHeight, u8 palette);
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);
void FillBgTilemapBufferRect_Palette0(u8 bg, u16 tileNum, u8 x, u8 y, u8 width, u8 height);
diff --git a/include/bike.h b/include/bike.h
index e625ad438..46b668169 100644
--- a/include/bike.h
+++ b/include/bike.h
@@ -63,6 +63,10 @@ enum
ACRO_TRANS_WHEELIE_LOWERING_MOVING,
};
+// Exported RAM declarations
+extern bool8 gUnusedBikeCameraAheadPanback;
+
+// Exported ROM declarations
void MovePlayerOnBike(u8 direction, u16 newKeys, u16 heldKeys);
void Bike_TryAcroBikeHistoryUpdate(u16 newKeys, u16 heldKeys);
bool8 RS_IsRunningDisallowed(u8 tile);
diff --git a/include/blit.h b/include/blit.h
new file mode 100644
index 000000000..e7f384cc8
--- /dev/null
+++ b/include/blit.h
@@ -0,0 +1,10 @@
+#ifndef GUARD_BLIT_H
+#define GUARD_BLIT_H
+
+void BlitBitmapRect4BitWithoutColorKey(struct Bitmap *src, struct Bitmap *dst, u16 srcX, u16 srcY, u16 dstX, u16 dstY, u16 width, u16 height);
+void BlitBitmapRect4Bit(struct Bitmap *src, struct Bitmap *dst, u16 srcX, u16 srcY, u16 dstX, u16 dstY, u16 width, u16 height, u8 colorKey);
+void FillBitmapRect4Bit(struct Bitmap *surface, u16 x, u16 y, u16 width, u16 height, u8 fillValue);
+void BlitBitmapRect4BitTo8Bit(struct Bitmap *src, struct Bitmap *dst, u16 srcX, u16 srcY, u16 dstX, u16 dstY, u16 width, u16 height, u8 colorKey, u8 paletteOffset);
+void FillBitmapRect8Bit(struct Bitmap *surface, u16 x, u16 y, u16 width, u16 height, u8 fillValue);
+
+#endif // GUARD_BLIT_H
diff --git a/include/braille_puzzles.h b/include/braille_puzzles.h
new file mode 100644
index 000000000..d4c5a24d8
--- /dev/null
+++ b/include/braille_puzzles.h
@@ -0,0 +1,11 @@
+#ifndef GUARD_BRAILLE_PUZZLES_H
+#define GUARD_BRAILLE_PUZZLES_H
+
+bool8 ShouldDoBrailleFlyEffect(void);
+bool8 ShouldDoBrailleStrengthEffect(void);
+bool8 ShouldDoBrailleDigEffect(void);
+void DoBrailleDigEffect(void);
+void sub_8179918(void);
+void sub_8179834(void);
+
+#endif // GUARD_BRAILLE_PUZZLES_H
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/clock.h b/include/clock.h
index 4e6560c91..aa179bf6f 100644
--- a/include/clock.h
+++ b/include/clock.h
@@ -5,4 +5,4 @@
void DoTimeBasedEvents(void);
-#endif
+#endif // GUARD_CLOCK_H
diff --git a/include/constants/battle_move_effects.h b/include/constants/battle_move_effects.h
index 1b59f2f64..b54f01353 100644
--- a/include/constants/battle_move_effects.h
+++ b/include/constants/battle_move_effects.h
@@ -151,7 +151,7 @@
#define EFFECT_EARTHQUAKE 147
#define EFFECT_FUTURE_SIGHT 148
#define EFFECT_GUST 149
-#define EFFECT_FLINCH_HIT_2 150 // STOMP ASTONISH EXTRASENSORY NEEDLE_ARM
+#define EFFECT_FLINCH_MINIMIZE_HIT 150 // STOMP ASTONISH EXTRASENSORY NEEDLE_ARM
#define EFFECT_SOLARBEAM 151
#define EFFECT_THUNDER 152
#define EFFECT_TELEPORT 153
diff --git a/include/constants/battle_script_commands.h b/include/constants/battle_script_commands.h
index 0390f17f4..a1a4ed50a 100644
--- a/include/constants/battle_script_commands.h
+++ b/include/constants/battle_script_commands.h
@@ -92,6 +92,6 @@
#define ATK48_STAT_NEGATIVE 0x1
#define ATK48_STAT_BY_TWO 0x2
#define ATK48_BIT_x4 0x4
-#define ATK48_LOWER_FAIL_CHECK 0x8
+#define ATK48_DONT_CHECK_LOWER 0x8
#endif // GUARD_CONSTANTS_BATTLE_SCRIPT_COMMANDS_H
diff --git a/include/constants/decorations.h b/include/constants/decorations.h
index 2e3558721..b9f626d24 100644
--- a/include/constants/decorations.h
+++ b/include/constants/decorations.h
@@ -122,5 +122,6 @@
#define DECOR_REGIROCK_DOLL 118
#define DECOR_REGICE_DOLL 119
#define DECOR_REGISTEEL_DOLL 120
+#define NUM_DECORATIONS DECOR_REGISTEEL_DOLL
#endif // GUARD_CONSTANTS_DECORATIONS_H
diff --git a/include/constants/flags.h b/include/constants/flags.h
index 63e053cbd..641d74f19 100644
--- a/include/constants/flags.h
+++ b/include/constants/flags.h
@@ -91,7 +91,7 @@
#define FLAG_0x058 0x58
#define FLAG_0x059 0x59
#define FLAG_0x05A 0x5A
-#define FLAG_0x05B 0x5B
+#define FLAG_WATTSON_REMATCH_AVAILABLE 0x5B
#define FLAG_0x05C 0x5C
#define FLAG_0x05D 0x5D
#define FLAG_0x05E 0x5E
@@ -208,8 +208,8 @@
#define FLAG_0x0CD 0xCD
#define FLAG_0x0CE 0xCE
#define FLAG_0x0CF 0xCF
-#define FLAG_0x0D0 0xD0
-#define FLAG_0x0D1 0xD1
+#define FLAG_GOT_BASEMENT_KEY_FROM_WATTSON 0xD0
+#define FLAG_GOT_TM24_FROM_WATTSON 0xD1
#define FLAG_0x0D2 0xD2
#define FLAG_0x0D3 0xD3
#define FLAG_0x0D4 0xD4
@@ -348,6 +348,7 @@
#define FLAG_0x159 0x159
#define FLAG_0x15A 0x15A
#define FLAG_0x15B 0x15B
+
#define FLAG_MATCH_CALL_REGISTERED 0x15C
#define FLAG_0x15D 0x15D
#define FLAG_0x15E 0x15E
@@ -912,8 +913,8 @@
#define FLAG_0x38D 0x38D
#define FLAG_0x38E 0x38E
#define FLAG_0x38F 0x38F
-#define FLAG_0x390 0x390
-#define FLAG_0x391 0x391
+#define FLAG_SPRITEVIS_MAUVILLE_CITY_WATTSON 0x390
+#define FLAG_SPRITEVIS_MAUVILLE_GYM_WATTSON 0x391
#define FLAG_0x392 0x392
#define FLAG_0x393 0x393
#define FLAG_0x394 0x394
@@ -961,7 +962,7 @@
#define FLAG_0x3BE 0x3BE
#define FLAG_0x3BF 0x3BF
#define FLAG_0x3C0 0x3C0
-#define FLAG_0x3C1 0x3C1
+#define FLAG_SPRITEVIS_SLATEPORT_MUSEUM_POPULATION 0x3C1
#define FLAG_0x3C2 0x3C2
#define FLAG_0x3C3 0x3C3
#define FLAG_0x3C4 0x3C4
diff --git a/include/constants/game_stat.h b/include/constants/game_stat.h
index b1f3d4197..7ebf3501b 100644
--- a/include/constants/game_stat.h
+++ b/include/constants/game_stat.h
@@ -51,9 +51,10 @@
#define GAME_STAT_USED_DAYCARE 47
#define GAME_STAT_RODE_CABLE_CAR 48
#define GAME_STAT_ENTERED_HOT_SPRINGS 49
+#define GAME_STAT_50 50
+#define GAME_STAT_51 51
-/*TODO: add new stats added in Emerald*/
-
+#define NUM_USED_GAME_STATS 52
#define NUM_GAME_STATS 64
#endif // GUARD_CONSTANTS_GAME_STAT_H
diff --git a/include/constants/items.h b/include/constants/items.h
index ca6fdbf64..4ca5cb7df 100644
--- a/include/constants/items.h
+++ b/include/constants/items.h
@@ -108,6 +108,8 @@
#define ITEM_064 100
#define ITEM_065 101
#define ITEM_066 102
+
+// Unusable
#define ITEM_TINY_MUSHROOM 103
#define ITEM_BIG_MUSHROOM 104
#define ITEM_069 105
@@ -126,6 +128,8 @@
#define ITEM_076 118
#define ITEM_077 119
#define ITEM_078 120
+
+// Mails
#define ITEM_ORANGE_MAIL 121
#define ITEM_HARBOR_MAIL 122
#define ITEM_GLITTER_MAIL 123
@@ -138,6 +142,8 @@
#define ITEM_DREAM_MAIL 130
#define ITEM_FAB_MAIL 131
#define ITEM_RETRO_MAIL 132
+
+// Berries
#define ITEM_CHERI_BERRY 133
#define ITEM_CHESTO_BERRY 134
#define ITEM_PECHA_BERRY 135
@@ -185,7 +191,7 @@
#define ITEM_0B1 177
#define ITEM_0B2 178
-// hold items
+// Battle Held items
#define ITEM_BRIGHT_POWDER 179
#define ITEM_WHITE_HERB 180
#define ITEM_MACHO_BRACE 181
@@ -261,6 +267,8 @@
#define ITEM_0FB 251
#define ITEM_0FC 252
#define ITEM_0FD 253
+
+// Contest held items
#define ITEM_RED_SCARF 254
#define ITEM_BLUE_SCARF 255
#define ITEM_PINK_SCARF 256
@@ -464,4 +472,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/rgb.h b/include/constants/rgb.h
index 8b323799f..fd9c5c5a7 100644
--- a/include/constants/rgb.h
+++ b/include/constants/rgb.h
@@ -12,5 +12,6 @@
#define RGB_YELLOW RGB(31, 31, 0)
#define RGB_MAGENTA RGB(31, 0, 31)
#define RGB_CYAN RGB(0, 31, 31)
+#define RGB_WHITEALPHA RGB_WHITE | 0x8000
#endif // GUARD_RGB_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/constants/vars.h b/include/constants/vars.h
index c0e3313b6..be21f1730 100644
--- a/include/constants/vars.h
+++ b/include/constants/vars.h
@@ -184,7 +184,7 @@
#define VAR_0x40B0 0x40B0
#define VAR_0x40B1 0x40B1
#define VAR_0x40B2 0x40B2
-#define VAR_0x40B3 0x40B3
+#define VAR_WEATHER_INSTITUTE_STATE 0x40B3
#define VAR_PORTHOLE 0x40B4
#define VAR_0x40B5 0x40B5
#define VAR_0x40B6 0x40B6
diff --git a/include/credits.h b/include/credits.h
new file mode 100644
index 000000000..faad1058a
--- /dev/null
+++ b/include/credits.h
@@ -0,0 +1,11 @@
+#ifndef GUARD_CREDITS_H
+#define GUARD_CREDITS_H
+
+// Exported type declarations
+
+// Exported RAM declarations
+extern EWRAM_DATA bool8 gHasHallOfFameRecords;
+
+// Exported ROM declarations
+
+#endif //GUARD_CREDITS_H
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/battle_moves.h b/include/data/battle_moves.h
new file mode 100644
index 000000000..6489fe07f
--- /dev/null
+++ b/include/data/battle_moves.h
@@ -0,0 +1,3913 @@
+#ifndef GUARD_DATA_BATTLE_MOVES
+#define GUARD_DATA_BATTLE_MOVES
+
+const struct BattleMove gBattleMoves[LAST_MOVE_INDEX + 1] =
+{
+ { // MOVE_NONE
+ .effect = EFFECT_HIT,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 0,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = 0,
+ },
+ { // MOVE_POUND
+ .effect = EFFECT_HIT,
+ .power = 40,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 35,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_KARATE_CHOP
+ .effect = EFFECT_HIGH_CRITICAL,
+ .power = 50,
+ .type = TYPE_FIGHTING,
+ .accuracy = 100,
+ .pp = 25,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_DOUBLE_SLAP
+ .effect = EFFECT_MULTI_HIT,
+ .power = 15,
+ .type = TYPE_NORMAL,
+ .accuracy = 85,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_COMET_PUNCH
+ .effect = EFFECT_MULTI_HIT,
+ .power = 18,
+ .type = TYPE_NORMAL,
+ .accuracy = 85,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_MEGA_PUNCH
+ .effect = EFFECT_HIT,
+ .power = 80,
+ .type = TYPE_NORMAL,
+ .accuracy = 85,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_PAY_DAY
+ .effect = EFFECT_PAY_DAY,
+ .power = 40,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_FIRE_PUNCH
+ .effect = EFFECT_BURN_HIT,
+ .power = 75,
+ .type = TYPE_FIRE,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_ICE_PUNCH
+ .effect = EFFECT_FREEZE_HIT,
+ .power = 75,
+ .type = TYPE_ICE,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_THUNDER_PUNCH
+ .effect = EFFECT_PARALYZE_HIT,
+ .power = 75,
+ .type = TYPE_ELECTRIC,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_SCRATCH
+ .effect = EFFECT_HIT,
+ .power = 40,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 35,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_VICE_GRIP
+ .effect = EFFECT_HIT,
+ .power = 55,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 30,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_GUILLOTINE
+ .effect = EFFECT_OHKO,
+ .power = 1,
+ .type = TYPE_NORMAL,
+ .accuracy = 30,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_RAZOR_WIND
+ .effect = EFFECT_RAZOR_WIND,
+ .power = 80,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_SWORDS_DANCE
+ .effect = EFFECT_ATTACK_UP_2,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 30,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_CUT
+ .effect = EFFECT_HIT,
+ .power = 50,
+ .type = TYPE_NORMAL,
+ .accuracy = 95,
+ .pp = 30,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_GUST
+ .effect = EFFECT_GUST,
+ .power = 40,
+ .type = TYPE_FLYING,
+ .accuracy = 100,
+ .pp = 35,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_WING_ATTACK
+ .effect = EFFECT_HIT,
+ .power = 60,
+ .type = TYPE_FLYING,
+ .accuracy = 100,
+ .pp = 35,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_WHIRLWIND
+ .effect = EFFECT_ROAR,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = -6,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_FLY
+ .effect = EFFECT_SEMI_INVULNERABLE,
+ .power = 70,
+ .type = TYPE_FLYING,
+ .accuracy = 95,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_BIND
+ .effect = EFFECT_TRAP,
+ .power = 15,
+ .type = TYPE_NORMAL,
+ .accuracy = 75,
+ .pp = 20,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_SLAM
+ .effect = EFFECT_HIT,
+ .power = 80,
+ .type = TYPE_NORMAL,
+ .accuracy = 75,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_VINE_WHIP
+ .effect = EFFECT_HIT,
+ .power = 35,
+ .type = TYPE_GRASS,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_STOMP
+ .effect = EFFECT_FLINCH_MINIMIZE_HIT,
+ .power = 65,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_DOUBLE_KICK
+ .effect = EFFECT_DOUBLE_HIT,
+ .power = 30,
+ .type = TYPE_FIGHTING,
+ .accuracy = 100,
+ .pp = 30,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_MEGA_KICK
+ .effect = EFFECT_HIT,
+ .power = 120,
+ .type = TYPE_NORMAL,
+ .accuracy = 75,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_JUMP_KICK
+ .effect = EFFECT_RECOIL_IF_MISS,
+ .power = 70,
+ .type = TYPE_FIGHTING,
+ .accuracy = 95,
+ .pp = 25,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_ROLLING_KICK
+ .effect = EFFECT_FLINCH_HIT,
+ .power = 60,
+ .type = TYPE_FIGHTING,
+ .accuracy = 85,
+ .pp = 15,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_SAND_ATTACK
+ .effect = EFFECT_ACCURACY_DOWN,
+ .power = 0,
+ .type = TYPE_GROUND,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_HEADBUTT
+ .effect = EFFECT_FLINCH_HIT,
+ .power = 70,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_HORN_ATTACK
+ .effect = EFFECT_HIT,
+ .power = 65,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 25,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_FURY_ATTACK
+ .effect = EFFECT_MULTI_HIT,
+ .power = 15,
+ .type = TYPE_NORMAL,
+ .accuracy = 85,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_HORN_DRILL
+ .effect = EFFECT_OHKO,
+ .power = 1,
+ .type = TYPE_NORMAL,
+ .accuracy = 30,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_TACKLE
+ .effect = EFFECT_HIT,
+ .power = 35,
+ .type = TYPE_NORMAL,
+ .accuracy = 95,
+ .pp = 35,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_BODY_SLAM
+ .effect = EFFECT_PARALYZE_HIT,
+ .power = 85,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_WRAP
+ .effect = EFFECT_TRAP,
+ .power = 15,
+ .type = TYPE_NORMAL,
+ .accuracy = 85,
+ .pp = 20,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_TAKE_DOWN
+ .effect = EFFECT_RECOIL,
+ .power = 90,
+ .type = TYPE_NORMAL,
+ .accuracy = 85,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_THRASH
+ .effect = EFFECT_RAMPAGE,
+ .power = 90,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_RANDOM,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_DOUBLE_EDGE
+ .effect = EFFECT_DOUBLE_EDGE,
+ .power = 120,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_TAIL_WHIP
+ .effect = EFFECT_DEFENSE_DOWN,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 30,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_POISON_STING
+ .effect = EFFECT_POISON_HIT,
+ .power = 15,
+ .type = TYPE_POISON,
+ .accuracy = 100,
+ .pp = 35,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_TWINEEDLE
+ .effect = EFFECT_TWINEEDLE,
+ .power = 25,
+ .type = TYPE_BUG,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 20,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_PIN_MISSILE
+ .effect = EFFECT_MULTI_HIT,
+ .power = 14,
+ .type = TYPE_BUG,
+ .accuracy = 85,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_LEER
+ .effect = EFFECT_DEFENSE_DOWN,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 30,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_BITE
+ .effect = EFFECT_FLINCH_HIT,
+ .power = 60,
+ .type = TYPE_DARK,
+ .accuracy = 100,
+ .pp = 25,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_GROWL
+ .effect = EFFECT_ATTACK_DOWN,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 40,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_ROAR
+ .effect = EFFECT_ROAR,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = -6,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_SING
+ .effect = EFFECT_SLEEP,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 55,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_SUPERSONIC
+ .effect = EFFECT_CONFUSE,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 55,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_SONIC_BOOM
+ .effect = EFFECT_SONICBOOM,
+ .power = 1,
+ .type = TYPE_NORMAL,
+ .accuracy = 90,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_DISABLE
+ .effect = EFFECT_DISABLE,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 55,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_ACID
+ .effect = EFFECT_DEFENSE_DOWN_HIT,
+ .power = 40,
+ .type = TYPE_POISON,
+ .accuracy = 100,
+ .pp = 30,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_EMBER
+ .effect = EFFECT_BURN_HIT,
+ .power = 40,
+ .type = TYPE_FIRE,
+ .accuracy = 100,
+ .pp = 25,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_FLAMETHROWER
+ .effect = EFFECT_BURN_HIT,
+ .power = 95,
+ .type = TYPE_FIRE,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_MIST
+ .effect = EFFECT_MIST,
+ .power = 0,
+ .type = TYPE_ICE,
+ .accuracy = 0,
+ .pp = 30,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_WATER_GUN
+ .effect = EFFECT_HIT,
+ .power = 40,
+ .type = TYPE_WATER,
+ .accuracy = 100,
+ .pp = 25,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_HYDRO_PUMP
+ .effect = EFFECT_HIT,
+ .power = 120,
+ .type = TYPE_WATER,
+ .accuracy = 80,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_SURF
+ .effect = EFFECT_HIT,
+ .power = 95,
+ .type = TYPE_WATER,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_ICE_BEAM
+ .effect = EFFECT_FREEZE_HIT,
+ .power = 95,
+ .type = TYPE_ICE,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_BLIZZARD
+ .effect = EFFECT_FREEZE_HIT,
+ .power = 120,
+ .type = TYPE_ICE,
+ .accuracy = 70,
+ .pp = 5,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_PSYBEAM
+ .effect = EFFECT_CONFUSE_HIT,
+ .power = 65,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_BUBBLE_BEAM
+ .effect = EFFECT_SPEED_DOWN_HIT,
+ .power = 65,
+ .type = TYPE_WATER,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_AURORA_BEAM
+ .effect = EFFECT_ATTACK_DOWN_HIT,
+ .power = 65,
+ .type = TYPE_ICE,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_HYPER_BEAM
+ .effect = EFFECT_RECHARGE,
+ .power = 150,
+ .type = TYPE_NORMAL,
+ .accuracy = 90,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_PECK
+ .effect = EFFECT_HIT,
+ .power = 35,
+ .type = TYPE_FLYING,
+ .accuracy = 100,
+ .pp = 35,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_DRILL_PECK
+ .effect = EFFECT_HIT,
+ .power = 80,
+ .type = TYPE_FLYING,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_SUBMISSION
+ .effect = EFFECT_RECOIL,
+ .power = 80,
+ .type = TYPE_FIGHTING,
+ .accuracy = 80,
+ .pp = 25,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_LOW_KICK
+ .effect = EFFECT_LOW_KICK,
+ .power = 1,
+ .type = TYPE_FIGHTING,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_COUNTER
+ .effect = EFFECT_COUNTER,
+ .power = 1,
+ .type = TYPE_FIGHTING,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_DEPENDS,
+ .priority = -5,
+ .flags = FLAG_MAKES_CONTACT | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_SEISMIC_TOSS
+ .effect = EFFECT_LEVEL_DAMAGE,
+ .power = 1,
+ .type = TYPE_FIGHTING,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_STRENGTH
+ .effect = EFFECT_HIT,
+ .power = 80,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_ABSORB
+ .effect = EFFECT_ABSORB,
+ .power = 20,
+ .type = TYPE_GRASS,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_MEGA_DRAIN
+ .effect = EFFECT_ABSORB,
+ .power = 40,
+ .type = TYPE_GRASS,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_LEECH_SEED
+ .effect = EFFECT_LEECH_SEED,
+ .power = 0,
+ .type = TYPE_GRASS,
+ .accuracy = 90,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_GROWTH
+ .effect = EFFECT_SPECIAL_ATTACK_UP,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 40,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_RAZOR_LEAF
+ .effect = EFFECT_HIGH_CRITICAL,
+ .power = 55,
+ .type = TYPE_GRASS,
+ .accuracy = 95,
+ .pp = 25,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_SOLAR_BEAM
+ .effect = EFFECT_SOLARBEAM,
+ .power = 120,
+ .type = TYPE_GRASS,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_POISON_POWDER
+ .effect = EFFECT_POISON,
+ .power = 0,
+ .type = TYPE_POISON,
+ .accuracy = 75,
+ .pp = 35,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_STUN_SPORE
+ .effect = EFFECT_PARALYZE,
+ .power = 0,
+ .type = TYPE_GRASS,
+ .accuracy = 75,
+ .pp = 30,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_SLEEP_POWDER
+ .effect = EFFECT_SLEEP,
+ .power = 0,
+ .type = TYPE_GRASS,
+ .accuracy = 75,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_PETAL_DANCE
+ .effect = EFFECT_RAMPAGE,
+ .power = 70,
+ .type = TYPE_GRASS,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_RANDOM,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_STRING_SHOT
+ .effect = EFFECT_SPEED_DOWN,
+ .power = 0,
+ .type = TYPE_BUG,
+ .accuracy = 95,
+ .pp = 40,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_DRAGON_RAGE
+ .effect = EFFECT_DRAGON_RAGE,
+ .power = 1,
+ .type = TYPE_DRAGON,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_FIRE_SPIN
+ .effect = EFFECT_TRAP,
+ .power = 15,
+ .type = TYPE_FIRE,
+ .accuracy = 70,
+ .pp = 15,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_THUNDER_SHOCK
+ .effect = EFFECT_PARALYZE_HIT,
+ .power = 40,
+ .type = TYPE_ELECTRIC,
+ .accuracy = 100,
+ .pp = 30,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_THUNDERBOLT
+ .effect = EFFECT_PARALYZE_HIT,
+ .power = 95,
+ .type = TYPE_ELECTRIC,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_THUNDER_WAVE
+ .effect = EFFECT_PARALYZE,
+ .power = 0,
+ .type = TYPE_ELECTRIC,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_THUNDER
+ .effect = EFFECT_THUNDER,
+ .power = 120,
+ .type = TYPE_ELECTRIC,
+ .accuracy = 70,
+ .pp = 10,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_ROCK_THROW
+ .effect = EFFECT_HIT,
+ .power = 50,
+ .type = TYPE_ROCK,
+ .accuracy = 90,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_EARTHQUAKE
+ .effect = EFFECT_EARTHQUAKE,
+ .power = 100,
+ .type = TYPE_GROUND,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_FOES_AND_ALLY,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_FISSURE
+ .effect = EFFECT_OHKO,
+ .power = 1,
+ .type = TYPE_GROUND,
+ .accuracy = 30,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_DIG
+ .effect = EFFECT_SEMI_INVULNERABLE,
+ .power = 60,
+ .type = TYPE_GROUND,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_TOXIC
+ .effect = EFFECT_TOXIC,
+ .power = 0,
+ .type = TYPE_POISON,
+ .accuracy = 85,
+ .pp = 10,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_CONFUSION
+ .effect = EFFECT_CONFUSE_HIT,
+ .power = 50,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 100,
+ .pp = 25,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_PSYCHIC
+ .effect = EFFECT_SPECIAL_DEFENSE_DOWN_HIT,
+ .power = 90,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_HYPNOSIS
+ .effect = EFFECT_SLEEP,
+ .power = 0,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 60,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_MEDITATE
+ .effect = EFFECT_ATTACK_UP,
+ .power = 0,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 0,
+ .pp = 40,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_AGILITY
+ .effect = EFFECT_SPEED_UP_2,
+ .power = 0,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 0,
+ .pp = 30,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_QUICK_ATTACK
+ .effect = EFFECT_QUICK_ATTACK,
+ .power = 40,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 30,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 1,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_RAGE
+ .effect = EFFECT_RAGE,
+ .power = 20,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_TELEPORT
+ .effect = EFFECT_TELEPORT,
+ .power = 0,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 0,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = 0,
+ },
+ { // MOVE_NIGHT_SHADE
+ .effect = EFFECT_LEVEL_DAMAGE,
+ .power = 1,
+ .type = TYPE_GHOST,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_MIMIC
+ .effect = EFFECT_MIMIC,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED,
+ },
+ { // MOVE_SCREECH
+ .effect = EFFECT_DEFENSE_DOWN_2,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 85,
+ .pp = 40,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_DOUBLE_TEAM
+ .effect = EFFECT_EVASION_UP,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_RECOVER
+ .effect = EFFECT_RESTORE_HP,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_HARDEN
+ .effect = EFFECT_DEFENSE_UP,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 30,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_MINIMIZE
+ .effect = EFFECT_MINIMIZE,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_SMOKESCREEN
+ .effect = EFFECT_ACCURACY_DOWN,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_CONFUSE_RAY
+ .effect = EFFECT_CONFUSE,
+ .power = 0,
+ .type = TYPE_GHOST,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_WITHDRAW
+ .effect = EFFECT_DEFENSE_UP,
+ .power = 0,
+ .type = TYPE_WATER,
+ .accuracy = 0,
+ .pp = 40,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_DEFENSE_CURL
+ .effect = EFFECT_DEFENSE_CURL,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 40,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_BARRIER
+ .effect = EFFECT_DEFENSE_UP_2,
+ .power = 0,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 0,
+ .pp = 30,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_LIGHT_SCREEN
+ .effect = EFFECT_LIGHT_SCREEN,
+ .power = 0,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 0,
+ .pp = 30,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_HAZE
+ .effect = EFFECT_HAZE,
+ .power = 0,
+ .type = TYPE_ICE,
+ .accuracy = 0,
+ .pp = 30,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED,
+ },
+ { // MOVE_REFLECT
+ .effect = EFFECT_REFLECT,
+ .power = 0,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 0,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_FOCUS_ENERGY
+ .effect = EFFECT_FOCUS_ENERGY,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 30,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_BIDE
+ .effect = EFFECT_BIDE,
+ .power = 1,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_METRONOME
+ .effect = EFFECT_METRONOME,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_DEPENDS,
+ .priority = 0,
+ .flags = 0,
+ },
+ { // MOVE_MIRROR_MOVE
+ .effect = EFFECT_MIRROR_MOVE,
+ .power = 0,
+ .type = TYPE_FLYING,
+ .accuracy = 0,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_DEPENDS,
+ .priority = 0,
+ .flags = 0,
+ },
+ { // MOVE_SELF_DESTRUCT
+ .effect = EFFECT_EXPLOSION,
+ .power = 200,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_FOES_AND_ALLY,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_EGG_BOMB
+ .effect = EFFECT_HIT,
+ .power = 100,
+ .type = TYPE_NORMAL,
+ .accuracy = 75,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_LICK
+ .effect = EFFECT_PARALYZE_HIT,
+ .power = 20,
+ .type = TYPE_GHOST,
+ .accuracy = 100,
+ .pp = 30,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_SMOG
+ .effect = EFFECT_POISON_HIT,
+ .power = 20,
+ .type = TYPE_POISON,
+ .accuracy = 70,
+ .pp = 20,
+ .secondaryEffectChance = 40,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_SLUDGE
+ .effect = EFFECT_POISON_HIT,
+ .power = 65,
+ .type = TYPE_POISON,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_BONE_CLUB
+ .effect = EFFECT_FLINCH_HIT,
+ .power = 65,
+ .type = TYPE_GROUND,
+ .accuracy = 85,
+ .pp = 20,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_FIRE_BLAST
+ .effect = EFFECT_BURN_HIT,
+ .power = 120,
+ .type = TYPE_FIRE,
+ .accuracy = 85,
+ .pp = 5,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_WATERFALL
+ .effect = EFFECT_HIT,
+ .power = 80,
+ .type = TYPE_WATER,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_CLAMP
+ .effect = EFFECT_TRAP,
+ .power = 35,
+ .type = TYPE_WATER,
+ .accuracy = 75,
+ .pp = 10,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_SWIFT
+ .effect = EFFECT_ALWAYS_HIT,
+ .power = 60,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_SKULL_BASH
+ .effect = EFFECT_SKULL_BASH,
+ .power = 100,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_SPIKE_CANNON
+ .effect = EFFECT_MULTI_HIT,
+ .power = 20,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_CONSTRICT
+ .effect = EFFECT_SPEED_DOWN_HIT,
+ .power = 10,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 35,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_AMNESIA
+ .effect = EFFECT_SPECIAL_DEFENSE_UP_2,
+ .power = 0,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 0,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_KINESIS
+ .effect = EFFECT_ACCURACY_DOWN,
+ .power = 0,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 80,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_SOFT_BOILED
+ .effect = EFFECT_SOFTBOILED,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_HI_JUMP_KICK
+ .effect = EFFECT_RECOIL_IF_MISS,
+ .power = 85,
+ .type = TYPE_FIGHTING,
+ .accuracy = 90,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_GLARE
+ .effect = EFFECT_PARALYZE,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 75,
+ .pp = 30,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_DREAM_EATER
+ .effect = EFFECT_DREAM_EATER,
+ .power = 100,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_POISON_GAS
+ .effect = EFFECT_POISON,
+ .power = 0,
+ .type = TYPE_POISON,
+ .accuracy = 55,
+ .pp = 40,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_BARRAGE
+ .effect = EFFECT_MULTI_HIT,
+ .power = 15,
+ .type = TYPE_NORMAL,
+ .accuracy = 85,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_LEECH_LIFE
+ .effect = EFFECT_ABSORB,
+ .power = 20,
+ .type = TYPE_BUG,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_LOVELY_KISS
+ .effect = EFFECT_SLEEP,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 75,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_SKY_ATTACK
+ .effect = EFFECT_SKY_ATTACK,
+ .power = 140,
+ .type = TYPE_FLYING,
+ .accuracy = 90,
+ .pp = 5,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_TRANSFORM
+ .effect = EFFECT_TRANSFORM,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = 0,
+ },
+ { // MOVE_BUBBLE
+ .effect = EFFECT_SPEED_DOWN_HIT,
+ .power = 20,
+ .type = TYPE_WATER,
+ .accuracy = 100,
+ .pp = 30,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_DIZZY_PUNCH
+ .effect = EFFECT_CONFUSE_HIT,
+ .power = 70,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 20,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_SPORE
+ .effect = EFFECT_SLEEP,
+ .power = 0,
+ .type = TYPE_GRASS,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_FLASH
+ .effect = EFFECT_ACCURACY_DOWN,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 70,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_PSYWAVE
+ .effect = EFFECT_PSYWAVE,
+ .power = 1,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 80,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_SPLASH
+ .effect = EFFECT_SPLASH,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 40,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = 0,
+ },
+ { // MOVE_ACID_ARMOR
+ .effect = EFFECT_DEFENSE_UP_2,
+ .power = 0,
+ .type = TYPE_POISON,
+ .accuracy = 0,
+ .pp = 40,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_CRABHAMMER
+ .effect = EFFECT_HIGH_CRITICAL,
+ .power = 90,
+ .type = TYPE_WATER,
+ .accuracy = 85,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_EXPLOSION
+ .effect = EFFECT_EXPLOSION,
+ .power = 250,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_FOES_AND_ALLY,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_FURY_SWIPES
+ .effect = EFFECT_MULTI_HIT,
+ .power = 18,
+ .type = TYPE_NORMAL,
+ .accuracy = 80,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_BONEMERANG
+ .effect = EFFECT_DOUBLE_HIT,
+ .power = 50,
+ .type = TYPE_GROUND,
+ .accuracy = 90,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_REST
+ .effect = EFFECT_REST,
+ .power = 0,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_ROCK_SLIDE
+ .effect = EFFECT_FLINCH_HIT,
+ .power = 75,
+ .type = TYPE_ROCK,
+ .accuracy = 90,
+ .pp = 10,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_HYPER_FANG
+ .effect = EFFECT_FLINCH_HIT,
+ .power = 80,
+ .type = TYPE_NORMAL,
+ .accuracy = 90,
+ .pp = 15,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_SHARPEN
+ .effect = EFFECT_ATTACK_UP,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 30,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_CONVERSION
+ .effect = EFFECT_CONVERSION,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 30,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = 0,
+ },
+ { // MOVE_TRI_ATTACK
+ .effect = EFFECT_TRI_ATTACK,
+ .power = 80,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 20,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_SUPER_FANG
+ .effect = EFFECT_SUPER_FANG,
+ .power = 1,
+ .type = TYPE_NORMAL,
+ .accuracy = 90,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_SLASH
+ .effect = EFFECT_HIGH_CRITICAL,
+ .power = 70,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_SUBSTITUTE
+ .effect = EFFECT_SUBSTITUTE,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_STRUGGLE
+ .effect = EFFECT_RECOIL,
+ .power = 50,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 1,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_SKETCH
+ .effect = EFFECT_SKETCH,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 1,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = 0,
+ },
+ { // MOVE_TRIPLE_KICK
+ .effect = EFFECT_TRIPLE_KICK,
+ .power = 10,
+ .type = TYPE_FIGHTING,
+ .accuracy = 90,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_THIEF
+ .effect = EFFECT_THIEF,
+ .power = 40,
+ .type = TYPE_DARK,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_SPIDER_WEB
+ .effect = EFFECT_MEAN_LOOK,
+ .power = 0,
+ .type = TYPE_BUG,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_MIND_READER
+ .effect = EFFECT_LOCK_ON,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_NIGHTMARE
+ .effect = EFFECT_NIGHTMARE,
+ .power = 0,
+ .type = TYPE_GHOST,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_FLAME_WHEEL
+ .effect = EFFECT_THAW_HIT,
+ .power = 60,
+ .type = TYPE_FIRE,
+ .accuracy = 100,
+ .pp = 25,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_SNORE
+ .effect = EFFECT_SNORE,
+ .power = 40,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_CURSE
+ .effect = EFFECT_CURSE,
+ .power = 0,
+ .type = TYPE_MYSTERY,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = 0,
+ },
+ { // MOVE_FLAIL
+ .effect = EFFECT_FLAIL,
+ .power = 1,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_CONVERSION_2
+ .effect = EFFECT_CONVERSION_2,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 30,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = 0,
+ },
+ { // MOVE_AEROBLAST
+ .effect = EFFECT_HIGH_CRITICAL,
+ .power = 100,
+ .type = TYPE_FLYING,
+ .accuracy = 95,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_COTTON_SPORE
+ .effect = EFFECT_SPEED_DOWN_2,
+ .power = 0,
+ .type = TYPE_GRASS,
+ .accuracy = 85,
+ .pp = 40,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_REVERSAL
+ .effect = EFFECT_FLAIL,
+ .power = 1,
+ .type = TYPE_FIGHTING,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_SPITE
+ .effect = EFFECT_SPITE,
+ .power = 0,
+ .type = TYPE_GHOST,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_POWDER_SNOW
+ .effect = EFFECT_FREEZE_HIT,
+ .power = 40,
+ .type = TYPE_ICE,
+ .accuracy = 100,
+ .pp = 25,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_PROTECT
+ .effect = EFFECT_PROTECT,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 3,
+ .flags = 0,
+ },
+ { // MOVE_MACH_PUNCH
+ .effect = EFFECT_QUICK_ATTACK,
+ .power = 40,
+ .type = TYPE_FIGHTING,
+ .accuracy = 100,
+ .pp = 30,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 1,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_SCARY_FACE
+ .effect = EFFECT_SPEED_DOWN_2,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 90,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_FAINT_ATTACK
+ .effect = EFFECT_ALWAYS_HIT,
+ .power = 60,
+ .type = TYPE_DARK,
+ .accuracy = 0,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_SWEET_KISS
+ .effect = EFFECT_CONFUSE,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 75,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_BELLY_DRUM
+ .effect = EFFECT_BELLY_DRUM,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_SLUDGE_BOMB
+ .effect = EFFECT_POISON_HIT,
+ .power = 90,
+ .type = TYPE_POISON,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_MUD_SLAP
+ .effect = EFFECT_ACCURACY_DOWN_HIT,
+ .power = 20,
+ .type = TYPE_GROUND,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_OCTAZOOKA
+ .effect = EFFECT_ACCURACY_DOWN_HIT,
+ .power = 65,
+ .type = TYPE_WATER,
+ .accuracy = 85,
+ .pp = 10,
+ .secondaryEffectChance = 50,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_SPIKES
+ .effect = EFFECT_SPIKES,
+ .power = 0,
+ .type = TYPE_GROUND,
+ .accuracy = 0,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_OPPONENTS_FIELD,
+ .priority = 0,
+ .flags = 0,
+ },
+ { // MOVE_ZAP_CANNON
+ .effect = EFFECT_PARALYZE_HIT,
+ .power = 100,
+ .type = TYPE_ELECTRIC,
+ .accuracy = 50,
+ .pp = 5,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_FORESIGHT
+ .effect = EFFECT_FORESIGHT,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 40,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_DESTINY_BOND
+ .effect = EFFECT_DESTINY_BOND,
+ .power = 0,
+ .type = TYPE_GHOST,
+ .accuracy = 0,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = 0,
+ },
+ { // MOVE_PERISH_SONG
+ .effect = EFFECT_PERISH_SONG,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = 0,
+ },
+ { // MOVE_ICY_WIND
+ .effect = EFFECT_SPEED_DOWN_HIT,
+ .power = 55,
+ .type = TYPE_ICE,
+ .accuracy = 95,
+ .pp = 15,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_DETECT
+ .effect = EFFECT_PROTECT,
+ .power = 0,
+ .type = TYPE_FIGHTING,
+ .accuracy = 0,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 3,
+ .flags = 0,
+ },
+ { // MOVE_BONE_RUSH
+ .effect = EFFECT_MULTI_HIT,
+ .power = 25,
+ .type = TYPE_GROUND,
+ .accuracy = 80,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_LOCK_ON
+ .effect = EFFECT_LOCK_ON,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_OUTRAGE
+ .effect = EFFECT_RAMPAGE,
+ .power = 90,
+ .type = TYPE_DRAGON,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_RANDOM,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_SANDSTORM
+ .effect = EFFECT_SANDSTORM,
+ .power = 0,
+ .type = TYPE_ROCK,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = 0,
+ },
+ { // MOVE_GIGA_DRAIN
+ .effect = EFFECT_ABSORB,
+ .power = 60,
+ .type = TYPE_GRASS,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_ENDURE
+ .effect = EFFECT_ENDURE,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 3,
+ .flags = 0,
+ },
+ { // MOVE_CHARM
+ .effect = EFFECT_ATTACK_DOWN_2,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_ROLLOUT
+ .effect = EFFECT_ROLLOUT,
+ .power = 30,
+ .type = TYPE_ROCK,
+ .accuracy = 90,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_FALSE_SWIPE
+ .effect = EFFECT_FALSE_SWIPE,
+ .power = 40,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 40,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_SWAGGER
+ .effect = EFFECT_SWAGGER,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 90,
+ .pp = 15,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_MILK_DRINK
+ .effect = EFFECT_SOFTBOILED,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_SPARK
+ .effect = EFFECT_PARALYZE_HIT,
+ .power = 65,
+ .type = TYPE_ELECTRIC,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_FURY_CUTTER
+ .effect = EFFECT_FURY_CUTTER,
+ .power = 10,
+ .type = TYPE_BUG,
+ .accuracy = 95,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_STEEL_WING
+ .effect = EFFECT_DEFENSE_UP_HIT,
+ .power = 70,
+ .type = TYPE_STEEL,
+ .accuracy = 90,
+ .pp = 25,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_MEAN_LOOK
+ .effect = EFFECT_MEAN_LOOK,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_ATTRACT
+ .effect = EFFECT_ATTRACT,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_SLEEP_TALK
+ .effect = EFFECT_SLEEP_TALK,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_DEPENDS,
+ .priority = 0,
+ .flags = 0,
+ },
+ { // MOVE_HEAL_BELL
+ .effect = EFFECT_HEAL_BELL,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_RETURN
+ .effect = EFFECT_RETURN,
+ .power = 1,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_PRESENT
+ .effect = EFFECT_PRESENT,
+ .power = 1,
+ .type = TYPE_NORMAL,
+ .accuracy = 90,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_FRUSTRATION
+ .effect = EFFECT_FRUSTRATION,
+ .power = 1,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_SAFEGUARD
+ .effect = EFFECT_SAFEGUARD,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 25,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_PAIN_SPLIT
+ .effect = EFFECT_PAIN_SPLIT,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_SACRED_FIRE
+ .effect = EFFECT_THAW_HIT,
+ .power = 100,
+ .type = TYPE_FIRE,
+ .accuracy = 95,
+ .pp = 5,
+ .secondaryEffectChance = 50,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_MAGNITUDE
+ .effect = EFFECT_MAGNITUDE,
+ .power = 1,
+ .type = TYPE_GROUND,
+ .accuracy = 100,
+ .pp = 30,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_FOES_AND_ALLY,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_DYNAMIC_PUNCH
+ .effect = EFFECT_CONFUSE_HIT,
+ .power = 100,
+ .type = TYPE_FIGHTING,
+ .accuracy = 50,
+ .pp = 5,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_MEGAHORN
+ .effect = EFFECT_HIT,
+ .power = 120,
+ .type = TYPE_BUG,
+ .accuracy = 85,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_DRAGON_BREATH
+ .effect = EFFECT_PARALYZE_HIT,
+ .power = 60,
+ .type = TYPE_DRAGON,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_BATON_PASS
+ .effect = EFFECT_BATON_PASS,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 40,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = 0,
+ },
+ { // MOVE_ENCORE
+ .effect = EFFECT_ENCORE,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_PURSUIT
+ .effect = EFFECT_PURSUIT,
+ .power = 40,
+ .type = TYPE_DARK,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_RAPID_SPIN
+ .effect = EFFECT_RAPID_SPIN,
+ .power = 20,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 40,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_SWEET_SCENT
+ .effect = EFFECT_EVASION_DOWN,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_IRON_TAIL
+ .effect = EFFECT_DEFENSE_DOWN_HIT,
+ .power = 100,
+ .type = TYPE_STEEL,
+ .accuracy = 75,
+ .pp = 15,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_METAL_CLAW
+ .effect = EFFECT_ATTACK_UP_HIT,
+ .power = 50,
+ .type = TYPE_STEEL,
+ .accuracy = 95,
+ .pp = 35,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_VITAL_THROW
+ .effect = EFFECT_VITAL_THROW,
+ .power = 70,
+ .type = TYPE_FIGHTING,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = -1,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_MORNING_SUN
+ .effect = EFFECT_MORNING_SUN,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_SYNTHESIS
+ .effect = EFFECT_SYNTHESIS,
+ .power = 0,
+ .type = TYPE_GRASS,
+ .accuracy = 0,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_MOONLIGHT
+ .effect = EFFECT_MOONLIGHT,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_HIDDEN_POWER
+ .effect = EFFECT_HIDDEN_POWER,
+ .power = 1,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_CROSS_CHOP
+ .effect = EFFECT_HIGH_CRITICAL,
+ .power = 100,
+ .type = TYPE_FIGHTING,
+ .accuracy = 80,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_TWISTER
+ .effect = EFFECT_TWISTER,
+ .power = 40,
+ .type = TYPE_DRAGON,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 20,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_RAIN_DANCE
+ .effect = EFFECT_RAIN_DANCE,
+ .power = 0,
+ .type = TYPE_WATER,
+ .accuracy = 0,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = 0,
+ },
+ { // MOVE_SUNNY_DAY
+ .effect = EFFECT_SUNNY_DAY,
+ .power = 0,
+ .type = TYPE_FIRE,
+ .accuracy = 0,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = 0,
+ },
+ { // MOVE_CRUNCH
+ .effect = EFFECT_SPECIAL_DEFENSE_DOWN_HIT,
+ .power = 80,
+ .type = TYPE_DARK,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 20,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_MIRROR_COAT
+ .effect = EFFECT_MIRROR_COAT,
+ .power = 1,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_DEPENDS,
+ .priority = -5,
+ .flags = FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_PSYCH_UP
+ .effect = EFFECT_PSYCH_UP,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_EXTREME_SPEED
+ .effect = EFFECT_QUICK_ATTACK,
+ .power = 80,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 1,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_ANCIENT_POWER
+ .effect = EFFECT_ALL_STATS_UP_HIT,
+ .power = 60,
+ .type = TYPE_ROCK,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_SHADOW_BALL
+ .effect = EFFECT_SPECIAL_DEFENSE_DOWN_HIT,
+ .power = 80,
+ .type = TYPE_GHOST,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 20,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_FUTURE_SIGHT
+ .effect = EFFECT_FUTURE_SIGHT,
+ .power = 80,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 90,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = 0,
+ },
+ { // MOVE_ROCK_SMASH
+ .effect = EFFECT_DEFENSE_DOWN_HIT,
+ .power = 20,
+ .type = TYPE_FIGHTING,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 50,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_WHIRLPOOL
+ .effect = EFFECT_TRAP,
+ .power = 15,
+ .type = TYPE_WATER,
+ .accuracy = 70,
+ .pp = 15,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_BEAT_UP
+ .effect = EFFECT_BEAT_UP,
+ .power = 10,
+ .type = TYPE_DARK,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_FAKE_OUT
+ .effect = EFFECT_FAKE_OUT,
+ .power = 40,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 1,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_UPROAR
+ .effect = EFFECT_UPROAR,
+ .power = 50,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_RANDOM,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_STOCKPILE
+ .effect = EFFECT_STOCKPILE,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_SPIT_UP
+ .effect = EFFECT_SPIT_UP,
+ .power = 100,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_SWALLOW
+ .effect = EFFECT_SWALLOW,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_HEAT_WAVE
+ .effect = EFFECT_BURN_HIT,
+ .power = 100,
+ .type = TYPE_FIRE,
+ .accuracy = 90,
+ .pp = 10,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_HAIL
+ .effect = EFFECT_HAIL,
+ .power = 0,
+ .type = TYPE_ICE,
+ .accuracy = 0,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED,
+ },
+ { // MOVE_TORMENT
+ .effect = EFFECT_TORMENT,
+ .power = 0,
+ .type = TYPE_DARK,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_FLATTER
+ .effect = EFFECT_FLATTER,
+ .power = 0,
+ .type = TYPE_DARK,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_WILL_O_WISP
+ .effect = EFFECT_WILL_O_WISP,
+ .power = 0,
+ .type = TYPE_FIRE,
+ .accuracy = 75,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_MEMENTO
+ .effect = EFFECT_MEMENTO,
+ .power = 0,
+ .type = TYPE_DARK,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_FACADE
+ .effect = EFFECT_FACADE,
+ .power = 70,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_FOCUS_PUNCH
+ .effect = EFFECT_FOCUS_PUNCH,
+ .power = 150,
+ .type = TYPE_FIGHTING,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = -3,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED,
+ },
+ { // MOVE_SMELLING_SALT
+ .effect = EFFECT_SMELLINGSALT,
+ .power = 60,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_FOLLOW_ME
+ .effect = EFFECT_FOLLOW_ME,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 3,
+ .flags = 0,
+ },
+ { // MOVE_NATURE_POWER
+ .effect = EFFECT_NATURE_POWER,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 95,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_DEPENDS,
+ .priority = 0,
+ .flags = 0,
+ },
+ { // MOVE_CHARGE
+ .effect = EFFECT_CHARGE,
+ .power = 0,
+ .type = TYPE_ELECTRIC,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_TAUNT
+ .effect = EFFECT_TAUNT,
+ .power = 0,
+ .type = TYPE_DARK,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED,
+ },
+ { // MOVE_HELPING_HAND
+ .effect = EFFECT_HELPING_HAND,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 5,
+ .flags = 0,
+ },
+ { // MOVE_TRICK
+ .effect = EFFECT_TRICK,
+ .power = 0,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_ROLE_PLAY
+ .effect = EFFECT_ROLE_PLAY,
+ .power = 0,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = 0,
+ },
+ { // MOVE_WISH
+ .effect = EFFECT_WISH,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED,
+ },
+ { // MOVE_ASSIST
+ .effect = EFFECT_ASSIST,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_DEPENDS,
+ .priority = 0,
+ .flags = 0,
+ },
+ { // MOVE_INGRAIN
+ .effect = EFFECT_INGRAIN,
+ .power = 0,
+ .type = TYPE_GRASS,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_SUPERPOWER
+ .effect = EFFECT_SUPERPOWER,
+ .power = 120,
+ .type = TYPE_FIGHTING,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_MAGIC_COAT
+ .effect = EFFECT_MAGIC_COAT,
+ .power = 0,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_DEPENDS,
+ .priority = 4,
+ .flags = 0,
+ },
+ { // MOVE_RECYCLE
+ .effect = EFFECT_RECYCLE,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = 0,
+ },
+ { // MOVE_REVENGE
+ .effect = EFFECT_REVENGE,
+ .power = 60,
+ .type = TYPE_FIGHTING,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = -4,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_BRICK_BREAK
+ .effect = EFFECT_BRICK_BREAK,
+ .power = 75,
+ .type = TYPE_FIGHTING,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_YAWN
+ .effect = EFFECT_YAWN,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_KNOCK_OFF
+ .effect = EFFECT_KNOCK_OFF,
+ .power = 20,
+ .type = TYPE_DARK,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_ENDEAVOR
+ .effect = EFFECT_ENDEAVOR,
+ .power = 1,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_ERUPTION
+ .effect = EFFECT_ERUPTION,
+ .power = 150,
+ .type = TYPE_FIRE,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_SKILL_SWAP
+ .effect = EFFECT_SKILL_SWAP,
+ .power = 0,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_IMPRISON
+ .effect = EFFECT_IMPRISON,
+ .power = 0,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED,
+ },
+ { // MOVE_REFRESH
+ .effect = EFFECT_REFRESH,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_GRUDGE
+ .effect = EFFECT_GRUDGE,
+ .power = 0,
+ .type = TYPE_GHOST,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_SNATCH
+ .effect = EFFECT_SNATCH,
+ .power = 0,
+ .type = TYPE_DARK,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_DEPENDS,
+ .priority = 4,
+ .flags = FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_SECRET_POWER
+ .effect = EFFECT_SECRET_POWER,
+ .power = 70,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_DIVE
+ .effect = EFFECT_SEMI_INVULNERABLE,
+ .power = 60,
+ .type = TYPE_WATER,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_ARM_THRUST
+ .effect = EFFECT_MULTI_HIT,
+ .power = 15,
+ .type = TYPE_FIGHTING,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_CAMOUFLAGE
+ .effect = EFFECT_CAMOUFLAGE,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_TAIL_GLOW
+ .effect = EFFECT_SPECIAL_ATTACK_UP_2,
+ .power = 0,
+ .type = TYPE_BUG,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_LUSTER_PURGE
+ .effect = EFFECT_SPECIAL_DEFENSE_DOWN_HIT,
+ .power = 70,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 50,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_MIST_BALL
+ .effect = EFFECT_SPECIAL_ATTACK_DOWN_HIT,
+ .power = 70,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 50,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_FEATHER_DANCE
+ .effect = EFFECT_ATTACK_DOWN_2,
+ .power = 0,
+ .type = TYPE_FLYING,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_TEETER_DANCE
+ .effect = EFFECT_TEETER_DANCE,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_FOES_AND_ALLY,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED,
+ },
+ { // MOVE_BLAZE_KICK
+ .effect = EFFECT_BLAZE_KICK,
+ .power = 85,
+ .type = TYPE_FIRE,
+ .accuracy = 90,
+ .pp = 10,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_MUD_SPORT
+ .effect = EFFECT_MUD_SPORT,
+ .power = 0,
+ .type = TYPE_GROUND,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = 0,
+ },
+ { // MOVE_ICE_BALL
+ .effect = EFFECT_ROLLOUT,
+ .power = 30,
+ .type = TYPE_ICE,
+ .accuracy = 90,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_NEEDLE_ARM
+ .effect = EFFECT_FLINCH_MINIMIZE_HIT,
+ .power = 60,
+ .type = TYPE_GRASS,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_SLACK_OFF
+ .effect = EFFECT_RESTORE_HP,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_HYPER_VOICE
+ .effect = EFFECT_HIT,
+ .power = 90,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_POISON_FANG
+ .effect = EFFECT_POISON_FANG,
+ .power = 50,
+ .type = TYPE_POISON,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_CRUSH_CLAW
+ .effect = EFFECT_DEFENSE_DOWN_HIT,
+ .power = 75,
+ .type = TYPE_NORMAL,
+ .accuracy = 95,
+ .pp = 10,
+ .secondaryEffectChance = 50,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_BLAST_BURN
+ .effect = EFFECT_RECHARGE,
+ .power = 150,
+ .type = TYPE_FIRE,
+ .accuracy = 90,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_HYDRO_CANNON
+ .effect = EFFECT_RECHARGE,
+ .power = 150,
+ .type = TYPE_WATER,
+ .accuracy = 90,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_METEOR_MASH
+ .effect = EFFECT_ATTACK_UP_HIT,
+ .power = 100,
+ .type = TYPE_STEEL,
+ .accuracy = 85,
+ .pp = 10,
+ .secondaryEffectChance = 20,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_ASTONISH
+ .effect = EFFECT_FLINCH_MINIMIZE_HIT,
+ .power = 30,
+ .type = TYPE_GHOST,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_WEATHER_BALL
+ .effect = EFFECT_WEATHER_BALL,
+ .power = 50,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_AROMATHERAPY
+ .effect = EFFECT_HEAL_BELL,
+ .power = 0,
+ .type = TYPE_GRASS,
+ .accuracy = 0,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_FAKE_TEARS
+ .effect = EFFECT_SPECIAL_DEFENSE_DOWN_2,
+ .power = 0,
+ .type = TYPE_DARK,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_AIR_CUTTER
+ .effect = EFFECT_HIGH_CRITICAL,
+ .power = 55,
+ .type = TYPE_FLYING,
+ .accuracy = 95,
+ .pp = 25,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_OVERHEAT
+ .effect = EFFECT_OVERHEAT,
+ .power = 140,
+ .type = TYPE_FIRE,
+ .accuracy = 90,
+ .pp = 5,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_ODOR_SLEUTH
+ .effect = EFFECT_FORESIGHT,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 40,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_ROCK_TOMB
+ .effect = EFFECT_SPEED_DOWN_HIT,
+ .power = 50,
+ .type = TYPE_ROCK,
+ .accuracy = 80,
+ .pp = 10,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_SILVER_WIND
+ .effect = EFFECT_ALL_STATS_UP_HIT,
+ .power = 60,
+ .type = TYPE_BUG,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_METAL_SOUND
+ .effect = EFFECT_SPECIAL_DEFENSE_DOWN_2,
+ .power = 0,
+ .type = TYPE_STEEL,
+ .accuracy = 85,
+ .pp = 40,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_GRASS_WHISTLE
+ .effect = EFFECT_SLEEP,
+ .power = 0,
+ .type = TYPE_GRASS,
+ .accuracy = 55,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_TICKLE
+ .effect = EFFECT_TICKLE,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_COSMIC_POWER
+ .effect = EFFECT_COSMIC_POWER,
+ .power = 0,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 0,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_WATER_SPOUT
+ .effect = EFFECT_ERUPTION,
+ .power = 150,
+ .type = TYPE_WATER,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_SIGNAL_BEAM
+ .effect = EFFECT_CONFUSE_HIT,
+ .power = 75,
+ .type = TYPE_BUG,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_SHADOW_PUNCH
+ .effect = EFFECT_ALWAYS_HIT,
+ .power = 60,
+ .type = TYPE_GHOST,
+ .accuracy = 0,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_EXTRASENSORY
+ .effect = EFFECT_FLINCH_MINIMIZE_HIT,
+ .power = 80,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 100,
+ .pp = 30,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_SKY_UPPERCUT
+ .effect = EFFECT_SKY_UPPERCUT,
+ .power = 85,
+ .type = TYPE_FIGHTING,
+ .accuracy = 90,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_SAND_TOMB
+ .effect = EFFECT_TRAP,
+ .power = 15,
+ .type = TYPE_GROUND,
+ .accuracy = 70,
+ .pp = 15,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_SHEER_COLD
+ .effect = EFFECT_OHKO,
+ .power = 1,
+ .type = TYPE_ICE,
+ .accuracy = 30,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_MUDDY_WATER
+ .effect = EFFECT_ACCURACY_DOWN_HIT,
+ .power = 95,
+ .type = TYPE_WATER,
+ .accuracy = 85,
+ .pp = 10,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_BOTH,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_BULLET_SEED
+ .effect = EFFECT_MULTI_HIT,
+ .power = 10,
+ .type = TYPE_GRASS,
+ .accuracy = 100,
+ .pp = 30,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_AERIAL_ACE
+ .effect = EFFECT_ALWAYS_HIT,
+ .power = 60,
+ .type = TYPE_FLYING,
+ .accuracy = 0,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_ICICLE_SPEAR
+ .effect = EFFECT_MULTI_HIT,
+ .power = 10,
+ .type = TYPE_ICE,
+ .accuracy = 100,
+ .pp = 30,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_IRON_DEFENSE
+ .effect = EFFECT_DEFENSE_UP_2,
+ .power = 0,
+ .type = TYPE_STEEL,
+ .accuracy = 0,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_BLOCK
+ .effect = EFFECT_MEAN_LOOK,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MAGICCOAT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_HOWL
+ .effect = EFFECT_ATTACK_UP,
+ .power = 0,
+ .type = TYPE_NORMAL,
+ .accuracy = 0,
+ .pp = 40,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_DRAGON_CLAW
+ .effect = EFFECT_HIT,
+ .power = 80,
+ .type = TYPE_DRAGON,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_FRENZY_PLANT
+ .effect = EFFECT_RECHARGE,
+ .power = 150,
+ .type = TYPE_GRASS,
+ .accuracy = 90,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_BULK_UP
+ .effect = EFFECT_BULK_UP,
+ .power = 0,
+ .type = TYPE_FIGHTING,
+ .accuracy = 0,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_BOUNCE
+ .effect = EFFECT_SEMI_INVULNERABLE,
+ .power = 85,
+ .type = TYPE_FLYING,
+ .accuracy = 85,
+ .pp = 5,
+ .secondaryEffectChance = 30,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_MUD_SHOT
+ .effect = EFFECT_SPEED_DOWN_HIT,
+ .power = 55,
+ .type = TYPE_GROUND,
+ .accuracy = 95,
+ .pp = 15,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_POISON_TAIL
+ .effect = EFFECT_POISON_TAIL,
+ .power = 50,
+ .type = TYPE_POISON,
+ .accuracy = 100,
+ .pp = 25,
+ .secondaryEffectChance = 10,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_COVET
+ .effect = EFFECT_THIEF,
+ .power = 40,
+ .type = TYPE_NORMAL,
+ .accuracy = 100,
+ .pp = 40,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED,
+ },
+ { // MOVE_VOLT_TACKLE
+ .effect = EFFECT_DOUBLE_EDGE,
+ .power = 120,
+ .type = TYPE_ELECTRIC,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_MAGICAL_LEAF
+ .effect = EFFECT_ALWAYS_HIT,
+ .power = 60,
+ .type = TYPE_GRASS,
+ .accuracy = 0,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_WATER_SPORT
+ .effect = EFFECT_WATER_SPORT,
+ .power = 0,
+ .type = TYPE_WATER,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = 0,
+ },
+ { // MOVE_CALM_MIND
+ .effect = EFFECT_CALM_MIND,
+ .power = 0,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 0,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_LEAF_BLADE
+ .effect = EFFECT_HIGH_CRITICAL,
+ .power = 70,
+ .type = TYPE_GRASS,
+ .accuracy = 100,
+ .pp = 15,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_MAKES_CONTACT | FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_DRAGON_DANCE
+ .effect = EFFECT_DRAGON_DANCE,
+ .power = 0,
+ .type = TYPE_DRAGON,
+ .accuracy = 0,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_USER,
+ .priority = 0,
+ .flags = FLAG_SNATCH_AFFECTED,
+ },
+ { // MOVE_ROCK_BLAST
+ .effect = EFFECT_MULTI_HIT,
+ .power = 25,
+ .type = TYPE_ROCK,
+ .accuracy = 80,
+ .pp = 10,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_SHOCK_WAVE
+ .effect = EFFECT_ALWAYS_HIT,
+ .power = 60,
+ .type = TYPE_ELECTRIC,
+ .accuracy = 0,
+ .pp = 20,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_WATER_PULSE
+ .effect = EFFECT_CONFUSE_HIT,
+ .power = 60,
+ .type = TYPE_WATER,
+ .accuracy = 100,
+ .pp = 20,
+ .secondaryEffectChance = 20,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+ { // MOVE_DOOM_DESIRE
+ .effect = EFFECT_FUTURE_SIGHT,
+ .power = 120,
+ .type = TYPE_STEEL,
+ .accuracy = 85,
+ .pp = 5,
+ .secondaryEffectChance = 0,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = 0,
+ },
+ { // MOVE_PSYCHO_BOOST
+ .effect = EFFECT_OVERHEAT,
+ .power = 140,
+ .type = TYPE_PSYCHIC,
+ .accuracy = 90,
+ .pp = 5,
+ .secondaryEffectChance = 100,
+ .target = MOVE_TARGET_SELECTED,
+ .priority = 0,
+ .flags = FLAG_PROTECT_AFFECTED | FLAG_MIRROR_MOVE_AFFECTED | FLAG_KINGSROCK_AFFECTED,
+ },
+};
+
+#endif // GUARD_DATA_BATTLE_MOVES
diff --git a/include/data/item_icon_table.h b/include/data/item_icon_table.h
new file mode 100644
index 000000000..0a24c0572
--- /dev/null
+++ b/include/data/item_icon_table.h
@@ -0,0 +1,414 @@
+#ifndef GUARD_DATA_ITEM_ICON_TABLE_H
+#define GUARD_DATA_ITEM_ICON_TABLE_H
+
+#include "global.h"
+#include "graphics.h"
+
+const u8 * const gItemIconTable[][2] =
+{
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+// Pokeballs
+ gItemIcon_MasterBall, gItemIconPalette_MasterBall,
+ gItemIcon_UltraBall, gItemIconPalette_UltraBall,
+ gItemIcon_GreatBall, gItemIconPalette_GreatBall,
+ gItemIcon_PokeBall, gItemIconPalette_PokeBall,
+ gItemIcon_SafariBall, gItemIconPalette_SafariBall,
+ gItemIcon_NetBall, gItemIconPalette_NetBall,
+ gItemIcon_DiveBall, gItemIconPalette_DiveBall,
+ gItemIcon_NestBall, gItemIconPalette_NestBall,
+ gItemIcon_RepeatBall, gItemIconPalette_RepeatBall,
+ gItemIcon_TimerBall, gItemIconPalette_RepeatBall,
+ gItemIcon_LuxuryBall, gItemIconPalette_LuxuryBall,
+ gItemIcon_PremierBall, gItemIconPalette_LuxuryBall,
+// Medicine
+ gItemIcon_Potion, gItemIconPalette_Potion,
+ gItemIcon_Antidote, gItemIconPalette_Antidote,
+ gItemIcon_StatusHeal, gItemIconPalette_BurnHeal,
+ gItemIcon_StatusHeal, gItemIconPalette_IceHeal,
+ gItemIcon_StatusHeal, gItemIconPalette_Awakening,
+ gItemIcon_StatusHeal, gItemIconPalette_ParalyzeHeal,
+ gItemIcon_LargePotion, gItemIconPalette_FullRestore,
+ gItemIcon_LargePotion, gItemIconPalette_MaxPotion,
+ gItemIcon_Potion, gItemIconPalette_HyperPotion,
+ gItemIcon_Potion, gItemIconPalette_SuperPotion,
+ gItemIcon_FullHeal, gItemIconPalette_FullHeal,
+ gItemIcon_Revive, gItemIconPalette_Revive,
+ gItemIcon_MaxRevive, gItemIconPalette_Revive,
+ gItemIcon_FreshWater, gItemIconPalette_FreshWater,
+ gItemIcon_SodaPop, gItemIconPalette_SodaPop,
+ gItemIcon_Lemonade, gItemIconPalette_Lemonade,
+ gItemIcon_MoomooMilk, gItemIconPalette_MoomooMilk,
+ gItemIcon_Powder, gItemIconPalette_EnergyPowder,
+ gItemIcon_EnergyRoot, gItemIconPalette_EnergyRoot,
+ gItemIcon_Powder, gItemIconPalette_HealPowder,
+ gItemIcon_RevivalHerb, gItemIconPalette_RevivalHerb,
+ gItemIcon_Ether, gItemIconPalette_Ether,
+ gItemIcon_Ether, gItemIconPalette_MaxEther,
+ gItemIcon_Ether, gItemIconPalette_Elixir,
+ gItemIcon_Ether, gItemIconPalette_MaxElixir,
+ gItemIcon_LavaCookie, gItemIconPalette_LavaCookieAndLetter,
+ gItemIcon_Flute, gItemIconPalette_BlueFlute,
+ gItemIcon_Flute, gItemIconPalette_YellowFlute,
+ gItemIcon_Flute, gItemIconPalette_RedFlute,
+ gItemIcon_Flute, gItemIconPalette_BlackFlute,
+ gItemIcon_Flute, gItemIconPalette_WhiteFlute,
+ gItemIcon_BerryJuice, gItemIconPalette_BerryJuice,
+ gItemIcon_SacredAsh, gItemIconPalette_SacredAsh,
+// Collectibles
+ gItemIcon_Powder, gItemIconPalette_ShoalSalt,
+ gItemIcon_ShoalShell, gItemIconPalette_Shell,
+ gItemIcon_Shard, gItemIconPalette_RedShard,
+ gItemIcon_Shard, gItemIconPalette_BlueShard,
+ gItemIcon_Shard, gItemIconPalette_YellowShard,
+ gItemIcon_Shard, gItemIconPalette_GreenShard,
+// ????????
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+// Vitamins
+ gItemIcon_HPUp, gItemIconPalette_HPUp,
+ gItemIcon_Vitamin, gItemIconPalette_Protein,
+ gItemIcon_Vitamin, gItemIconPalette_Iron,
+ gItemIcon_Vitamin, gItemIconPalette_Carbos,
+ gItemIcon_Vitamin, gItemIconPalette_Calcium,
+ gItemIcon_RareCandy, gItemIconPalette_RareCandy,
+ gItemIcon_PPUp, gItemIconPalette_PPUp,
+ gItemIcon_Vitamin, gItemIconPalette_Zinc,
+ gItemIcon_PPMax, gItemIconPalette_PPMax,
+// ????????
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+// Battle items
+ gItemIcon_BattleStatItem, gItemIconPalette_GuardSpec,
+ gItemIcon_BattleStatItem, gItemIconPalette_DireHit,
+ gItemIcon_BattleStatItem, gItemIconPalette_XAttack,
+ gItemIcon_BattleStatItem, gItemIconPalette_XDefend,
+ gItemIcon_BattleStatItem, gItemIconPalette_XSpeed,
+ gItemIcon_BattleStatItem, gItemIconPalette_XAccuracy,
+ gItemIcon_BattleStatItem, gItemIconPalette_XSpecial,
+ gItemIcon_PokeDoll, gItemIconPalette_PokeDoll,
+ gItemIcon_FluffyTail, gItemIconPalette_FluffyTail,
+// ????????
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+// Field items
+ gItemIcon_Repel, gItemIconPalette_SuperRepel,
+ gItemIcon_Repel, gItemIconPalette_MaxRepel,
+ gItemIcon_EscapeRope, gItemIconPalette_EscapeRope,
+ gItemIcon_Repel, gItemIconPalette_Repel,
+// ????????
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+// Evolution stones
+ gItemIcon_SunStone, gItemIconPalette_SunStone,
+ gItemIcon_MoonStone, gItemIconPalette_MoonStone,
+ gItemIcon_FireStone, gItemIconPalette_FireStone,
+ gItemIcon_ThunderStone, gItemIconPalette_ThunderStone,
+ gItemIcon_WaterStone, gItemIconPalette_WaterStone,
+ gItemIcon_LeafStone, gItemIconPalette_LeafStone,
+// ????????
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+// Valuables
+ gItemIcon_TinyMushroom, gItemIconPalette_Mushroom,
+ gItemIcon_BigMushroom, gItemIconPalette_Mushroom,
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+ gItemIcon_Pearl, gItemIconPalette_Pearl,
+ gItemIcon_BigPearl, gItemIconPalette_Pearl,
+ gItemIcon_Stardust, gItemIconPalette_Star,
+ gItemIcon_StarPiece, gItemIconPalette_Star,
+ gItemIcon_Nugget, gItemIconPalette_Nugget,
+ gItemIcon_HeartScale, gItemIconPalette_HeartScale,
+// ????????
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+// Mail
+ gItemIcon_OrangeMail, gItemIconPalette_OrangeMail,
+ gItemIcon_HarborMail, gItemIconPalette_HarborMail,
+ gItemIcon_GlitterMail, gItemIconPalette_GlitterMail,
+ gItemIcon_MechMail, gItemIconPalette_MechMail,
+ gItemIcon_WoodMail, gItemIconPalette_WoodMail,
+ gItemIcon_WaveMail, gItemIconPalette_WaveMail,
+ gItemIcon_BeadMail, gItemIconPalette_BeadMail,
+ gItemIcon_ShadowMail, gItemIconPalette_ShadowMail,
+ gItemIcon_TropicMail, gItemIconPalette_TropicMail,
+ gItemIcon_DreamMail, gItemIconPalette_DreamMail,
+ gItemIcon_FabMail, gItemIconPalette_FabMail,
+ gItemIcon_RetroMail, gItemIconPalette_RetroMail,
+// Berries
+ gItemIcon_CheriBerry, gItemIconPalette_CheriBerry,
+ gItemIcon_ChestoBerry, gItemIconPalette_ChestoBerry,
+ gItemIcon_PechaBerry, gItemIconPalette_PechaBerry,
+ gItemIcon_RawstBerry, gItemIconPalette_RawstBerry,
+ gItemIcon_AspearBerry, gItemIconPalette_AspearBerry,
+ gItemIcon_LeppaBerry, gItemIconPalette_LeppaBerry,
+ gItemIcon_OranBerry, gItemIconPalette_OranBerry,
+ gItemIcon_PersimBerry, gItemIconPalette_PersimBerry,
+ gItemIcon_LumBerry, gItemIconPalette_LumBerry,
+ gItemIcon_SitrusBerry, gItemIconPalette_SitrusBerry,
+ gItemIcon_FigyBerry, gItemIconPalette_FigyBerry,
+ gItemIcon_WikiBerry, gItemIconPalette_WikiBerry,
+ gItemIcon_MagoBerry, gItemIconPalette_MagoBerry,
+ gItemIcon_AguavBerry, gItemIconPalette_AguavBerry,
+ gItemIcon_IapapaBerry, gItemIconPalette_IapapaBerry,
+ gItemIcon_RazzBerry, gItemIconPalette_RazzBerry,
+ gItemIcon_BlukBerry, gItemIconPalette_BlukBerry,
+ gItemIcon_NanabBerry, gItemIconPalette_NanabBerry,
+ gItemIcon_WepearBerry, gItemIconPalette_WepearBerry,
+ gItemIcon_PinapBerry, gItemIconPalette_PinapBerry,
+ gItemIcon_PomegBerry, gItemIconPalette_PomegBerry,
+ gItemIcon_KelpsyBerry, gItemIconPalette_KelpsyBerry,
+ gItemIcon_QualotBerry, gItemIconPalette_QualotBerry,
+ gItemIcon_HondewBerry, gItemIconPalette_HondewBerry,
+ gItemIcon_GrepaBerry, gItemIconPalette_GrepaBerry,
+ gItemIcon_TamatoBerry, gItemIconPalette_TamatoBerry,
+ gItemIcon_CornnBerry, gItemIconPalette_CornnBerry,
+ gItemIcon_MagostBerry, gItemIconPalette_MagostBerry,
+ gItemIcon_RabutaBerry, gItemIconPalette_RabutaBerry,
+ gItemIcon_NomelBerry, gItemIconPalette_NomelBerry,
+ gItemIcon_SpelonBerry, gItemIconPalette_SpelonBerry,
+ gItemIcon_PamtreBerry, gItemIconPalette_PamtreBerry,
+ gItemIcon_WatmelBerry, gItemIconPalette_WatmelBerry,
+ gItemIcon_DurinBerry, gItemIconPalette_DurinBerry,
+ gItemIcon_BelueBerry, gItemIconPalette_BelueBerry,
+ gItemIcon_LiechiBerry, gItemIconPalette_LiechiBerry,
+ gItemIcon_GanlonBerry, gItemIconPalette_GanlonBerry,
+ gItemIcon_SalacBerry, gItemIconPalette_SalacBerry,
+ gItemIcon_PetayaBerry, gItemIconPalette_PetayaBerry,
+ gItemIcon_ApicotBerry, gItemIconPalette_ApicotBerry,
+ gItemIcon_LansatBerry, gItemIconPalette_LansatBerry,
+ gItemIcon_StarfBerry, gItemIconPalette_StarfBerry,
+ gItemIcon_EnigmaBerry, gItemIconPalette_EnigmaBerry,
+// ????????
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+// Hold items
+ gItemIcon_BrightPowder, gItemIconPalette_BrightPowder,
+ gItemIcon_InBattleHerb, gItemIconPalette_WhiteHerb,
+ gItemIcon_MachoBrace, gItemIconPalette_MachoBrace,
+ gItemIcon_ExpShare, gItemIconPalette_ExpShare,
+ gItemIcon_QuickClaw, gItemIconPalette_QuickClaw,
+ gItemIcon_SootheBell, gItemIconPalette_SootheBell,
+ gItemIcon_InBattleHerb, gItemIconPalette_MentalHerb,
+ gItemIcon_ChoiceBand, gItemIconPalette_ChoiceBand,
+ gItemIcon_KingsRock, gItemIconPalette_KingsRock,
+ gItemIcon_SilverPowder, gItemIconPalette_SilverPowder,
+ gItemIcon_AmuletCoin, gItemIconPalette_AmuletCoin,
+ gItemIcon_CleanseTag, gItemIconPalette_CleanseTag,
+ gItemIcon_SoulDew, gItemIconPalette_SoulDew,
+ gItemIcon_DeepSeaTooth, gItemIconPalette_DeepSeaTooth,
+ gItemIcon_DeepSeaScale, gItemIconPalette_DeepSeaScale,
+ gItemIcon_SmokeBall, gItemIconPalette_SmokeBall,
+ gItemIcon_Everstone, gItemIconPalette_Everstone,
+ gItemIcon_FocusBand, gItemIconPalette_FocusBand,
+ gItemIcon_LuckyEgg, gItemIconPalette_LuckyEgg,
+ gItemIcon_ScopeLens, gItemIconPalette_ScopeLens,
+ gItemIcon_MetalCoat, gItemIconPalette_MetalCoat,
+ gItemIcon_Leftovers, gItemIconPalette_Leftovers,
+ gItemIcon_DragonScale, gItemIconPalette_DragonScale,
+ gItemIcon_LightBall, gItemIconPalette_LightBall,
+ gItemIcon_SoftSand, gItemIconPalette_SoftSand,
+ gItemIcon_HardStone, gItemIconPalette_HardStone,
+ gItemIcon_MiracleSeed, gItemIconPalette_MiracleSeed,
+ gItemIcon_BlackGlasses, gItemIconPalette_BlackTypeEnhancingItem,
+ gItemIcon_BlackBelt, gItemIconPalette_BlackTypeEnhancingItem,
+ gItemIcon_Magnet, gItemIconPalette_Magnet,
+ gItemIcon_MysticWater, gItemIconPalette_MysticWater,
+ gItemIcon_SharpBeak, gItemIconPalette_SharpBeak,
+ gItemIcon_PoisonBarb, gItemIconPalette_PoisonBarb,
+ gItemIcon_NeverMeltIce, gItemIconPalette_NeverMeltIce,
+ gItemIcon_SpellTag, gItemIconPalette_SpellTag,
+ gItemIcon_TwistedSpoon, gItemIconPalette_TwistedSpoon,
+ gItemIcon_Charcoal, gItemIconPalette_Charcoal,
+ gItemIcon_DragonFang, gItemIconPalette_DragonFang,
+ gItemIcon_SilkScarf, gItemIconPalette_SilkScarf,
+ gItemIcon_UpGrade, gItemIconPalette_UpGrade,
+ gItemIcon_ShellBell, gItemIconPalette_Shell,
+ gItemIcon_SeaIncense, gItemIconPalette_SeaIncense,
+ gItemIcon_LaxIncense, gItemIconPalette_LaxIncense,
+ gItemIcon_LuckyPunch, gItemIconPalette_LuckyPunch,
+ gItemIcon_MetalPowder, gItemIconPalette_MetalPowder,
+ gItemIcon_ThickClub, gItemIconPalette_ThickClub,
+ gItemIcon_Stick, gItemIconPalette_Stick,
+// ????????
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+// Contest hold items
+ gItemIcon_Scarf, gItemIconPalette_RedScarf,
+ gItemIcon_Scarf, gItemIconPalette_BlueScarf,
+ gItemIcon_Scarf, gItemIconPalette_PinkScarf,
+ gItemIcon_Scarf, gItemIconPalette_GreenScarf,
+ gItemIcon_Scarf, gItemIconPalette_YellowScarf,
+// Key items
+ gItemIcon_MachBike, gItemIconPalette_MachBike,
+ gItemIcon_CoinCase, gItemIconPalette_CoinCase,
+ gItemIcon_Itemfinder, gItemIconPalette_Itemfinder,
+ gItemIcon_OldRod, gItemIconPalette_OldRod,
+ gItemIcon_GoodRod, gItemIconPalette_GoodRod,
+ gItemIcon_SuperRod, gItemIconPalette_SuperRod,
+ gItemIcon_SSTicket, gItemIconPalette_SSTicket,
+ gItemIcon_ContestPass, gItemIconPalette_ContestPass,
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+ gItemIcon_WailmerPail, gItemIconPalette_WailmerPail,
+ gItemIcon_DevonGoods, gItemIconPalette_DevonGoods,
+ gItemIcon_SootSack, gItemIconPalette_SootSack,
+ gItemIcon_BasementKey, gItemIconPalette_OldKey,
+ gItemIcon_AcroBike, gItemIconPalette_AcroBike,
+ gItemIcon_PokeblockCase, gItemIconPalette_PokeblockCase,
+ gItemIcon_Letter, gItemIconPalette_LavaCookieAndLetter,
+ gItemIcon_EonTicket, gItemIconPalette_EonTicket,
+ gItemIcon_Orb, gItemIconPalette_RedOrb,
+ gItemIcon_Orb, gItemIconPalette_BlueOrb,
+ gItemIcon_Scanner, gItemIconPalette_Scanner,
+ gItemIcon_GoGoggles, gItemIconPalette_GoGoggles,
+ gItemIcon_Meteorite, gItemIconPalette_Meteorite,
+ gItemIcon_Room1Key, gItemIconPalette_Key,
+ gItemIcon_Room2Key, gItemIconPalette_Key,
+ gItemIcon_Room4Key, gItemIconPalette_Key,
+ gItemIcon_Room6Key, gItemIconPalette_Key,
+ gItemIcon_StorageKey, gItemIconPalette_OldKey,
+ gItemIcon_RootFossil, gItemIconPalette_HoennFossil,
+ gItemIcon_ClawFossil, gItemIconPalette_HoennFossil,
+ gItemIcon_DevonScope, gItemIconPalette_DevonScope,
+// TMs/HMs
+ gItemIcon_TM, gItemIconPalette_FightingTMHM, // TM01
+ gItemIcon_TM, gItemIconPalette_DragonTMHM, // TM02
+ gItemIcon_TM, gItemIconPalette_WaterTMHM, // TM03
+ gItemIcon_TM, gItemIconPalette_PsychicTMHM, // TM04
+ gItemIcon_TM, gItemIconPalette_NormalTMHM, // TM05
+ gItemIcon_TM, gItemIconPalette_PoisonTMHM, // TM06
+ gItemIcon_TM, gItemIconPalette_IceTMHM, // TM07
+ gItemIcon_TM, gItemIconPalette_FightingTMHM, // TM08
+ gItemIcon_TM, gItemIconPalette_GrassTMHM, // TM09
+ gItemIcon_TM, gItemIconPalette_NormalTMHM, // TM10
+ gItemIcon_TM, gItemIconPalette_FireTMHM, // TM11
+ gItemIcon_TM, gItemIconPalette_DarkTMHM, // TM12
+ gItemIcon_TM, gItemIconPalette_IceTMHM, // TM13
+ gItemIcon_TM, gItemIconPalette_IceTMHM, // TM14
+ gItemIcon_TM, gItemIconPalette_NormalTMHM, // TM15
+ gItemIcon_TM, gItemIconPalette_PsychicTMHM, // TM16
+ gItemIcon_TM, gItemIconPalette_NormalTMHM, // TM17
+ gItemIcon_TM, gItemIconPalette_WaterTMHM, // TM18
+ gItemIcon_TM, gItemIconPalette_GrassTMHM, // TM19
+ gItemIcon_TM, gItemIconPalette_NormalTMHM, // TM20
+ gItemIcon_TM, gItemIconPalette_NormalTMHM, // TM21
+ gItemIcon_TM, gItemIconPalette_GrassTMHM, // TM22
+ gItemIcon_TM, gItemIconPalette_SteelTMHM, // TM23
+ gItemIcon_TM, gItemIconPalette_ElectricTMHM, // TM24
+ gItemIcon_TM, gItemIconPalette_ElectricTMHM, // TM25
+ gItemIcon_TM, gItemIconPalette_GroundTMHM, // TM26
+ gItemIcon_TM, gItemIconPalette_NormalTMHM, // TM27
+ gItemIcon_TM, gItemIconPalette_GroundTMHM, // TM28
+ gItemIcon_TM, gItemIconPalette_PsychicTMHM, // TM29
+ gItemIcon_TM, gItemIconPalette_GhostTMHM, // TM30
+ gItemIcon_TM, gItemIconPalette_FightingTMHM, // TM31
+ gItemIcon_TM, gItemIconPalette_NormalTMHM, // TM32
+ gItemIcon_TM, gItemIconPalette_PsychicTMHM, // TM33
+ gItemIcon_TM, gItemIconPalette_ElectricTMHM, // TM34
+ gItemIcon_TM, gItemIconPalette_FireTMHM, // TM35
+ gItemIcon_TM, gItemIconPalette_PoisonTMHM, // TM36
+ gItemIcon_TM, gItemIconPalette_RockTMHM, // TM37
+ gItemIcon_TM, gItemIconPalette_FireTMHM, // TM38
+ gItemIcon_TM, gItemIconPalette_RockTMHM, // TM39
+ gItemIcon_TM, gItemIconPalette_FlyingTMHM, // TM40
+ gItemIcon_TM, gItemIconPalette_DarkTMHM, // TM41
+ gItemIcon_TM, gItemIconPalette_NormalTMHM, // TM42
+ gItemIcon_TM, gItemIconPalette_NormalTMHM, // TM43
+ gItemIcon_TM, gItemIconPalette_PsychicTMHM, // TM44
+ gItemIcon_TM, gItemIconPalette_NormalTMHM, // TM45
+ gItemIcon_TM, gItemIconPalette_DarkTMHM, // TM46
+ gItemIcon_TM, gItemIconPalette_SteelTMHM, // TM47
+ gItemIcon_TM, gItemIconPalette_PsychicTMHM, // TM48
+ gItemIcon_TM, gItemIconPalette_DarkTMHM, // TM49
+ gItemIcon_TM, gItemIconPalette_FireTMHM, // TM50
+ gItemIcon_HM, gItemIconPalette_NormalTMHM, // HM01
+ gItemIcon_HM, gItemIconPalette_FlyingTMHM, // HM02
+ gItemIcon_HM, gItemIconPalette_WaterTMHM, // HM03
+ gItemIcon_HM, gItemIconPalette_NormalTMHM, // HM04
+ gItemIcon_HM, gItemIconPalette_NormalTMHM, // HM05
+ gItemIcon_HM, gItemIconPalette_FightingTMHM, // HM06
+ gItemIcon_HM, gItemIconPalette_WaterTMHM, // HM07
+ gItemIcon_HM, gItemIconPalette_WaterTMHM, // HM08
+// ????????
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+ gItemIcon_QuestionMark, gItemIconPalette_QuestionMark,
+// FireRed/LeafGreen key items
+ gItemIcon_OaksParcel, gItemIconPalette_OaksParcel,
+ gItemIcon_PokeFlute, gItemIconPalette_PokeFlute,
+ gItemIcon_SecretKey, gItemIconPalette_SecretKey,
+ gItemIcon_BikeVoucher, gItemIconPalette_BikeVoucher,
+ gItemIcon_GoldTeeth, gItemIconPalette_GoldTeeth,
+ gItemIcon_OldAmber, gItemIconPalette_OldAmber,
+ gItemIcon_CardKey, gItemIconPalette_CardKey,
+ gItemIcon_LiftKey, gItemIconPalette_Key,
+ gItemIcon_HelixFossil, gItemIconPalette_KantoFossil,
+ gItemIcon_DomeFossil, gItemIconPalette_KantoFossil,
+ gItemIcon_SilphScope, gItemIconPalette_SilphScope,
+ gItemIcon_Bicycle, gItemIconPalette_Bicycle,
+ gItemIcon_TownMap, gItemIconPalette_TownMap,
+ gItemIcon_VSSeeker, gItemIconPalette_VSSeeker,
+ gItemIcon_FameChecker, gItemIconPalette_FameChecker,
+ gItemIcon_TMCase, gItemIconPalette_TMCase,
+ gItemIcon_BerryPouch, gItemIconPalette_BerryPouch,
+ gItemIcon_TeachyTV, gItemIconPalette_TeachyTV,
+ gItemIcon_TriPass, gItemIconPalette_TriPass,
+ gItemIcon_RainbowPass, gItemIconPalette_RainbowPass,
+ gItemIcon_Tea, gItemIconPalette_Tea,
+ gItemIcon_MysticTicket, gItemIconPalette_MysticTicket,
+ gItemIcon_AuroraTicket, gItemIconPalette_AuroraTicket,
+ gItemIcon_PowderJar, gItemIconPalette_PowderJar,
+ gItemIcon_Gem, gItemIconPalette_Ruby,
+ gItemIcon_Gem, gItemIconPalette_Sapphire,
+// Emerald-only key items
+ gItemIcon_MagmaEmblem, gItemIconPalette_MagmaEmblem,
+ gItemIcon_OldSeaMap, gItemIconPalette_OldSeaMap,
+// Return to field arrow
+ gItemIcon_ReturnToFieldArrow, gItemIconPalette_ReturnToFieldArrow,
+};
+#endif // GUARD_DATA_ITEM_ICON_TABLE_H
diff --git a/include/data/items.h b/include/data/items.h
new file mode 100644
index 000000000..49f981faf
--- /dev/null
+++ b/include/data/items.h
@@ -0,0 +1,6079 @@
+const struct Item gItems[] =
+{
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+
+//Pokeballs
+
+ {
+ .name = _("MASTER BALL"),
+ .itemId = ITEM_MASTER_BALL,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gMasterBallItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_POKE_BALLS,
+ .type = 0,
+ .fieldUseFunc = NULL,
+ .battleUsage = 2,
+ .battleUseFunc = ItemUseInBattle_PokeBall,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("ULTRA BALL"),
+ .itemId = ITEM_ULTRA_BALL,
+ .price = 1200,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gUltraBallItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_POKE_BALLS,
+ .type = 1,
+ .fieldUseFunc = NULL,
+ .battleUsage = 2,
+ .battleUseFunc = ItemUseInBattle_PokeBall,
+ .secondaryId = 1,
+ },
+ {
+ .name = _("GREAT BALL"),
+ .itemId = ITEM_GREAT_BALL,
+ .price = 600,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gGreatBallItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_POKE_BALLS,
+ .type = 2,
+ .fieldUseFunc = NULL,
+ .battleUsage = 2,
+ .battleUseFunc = ItemUseInBattle_PokeBall,
+ .secondaryId = 2,
+ },
+ {
+ .name = _("POKé BALL"),
+ .itemId = ITEM_POKE_BALL,
+ .price = 200,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gPokeBallItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_POKE_BALLS,
+ .type = 3,
+ .fieldUseFunc = NULL,
+ .battleUsage = 2,
+ .battleUseFunc = ItemUseInBattle_PokeBall,
+ .secondaryId = 3,
+ },
+ {
+ .name = _("SAFARI BALL"),
+ .itemId = ITEM_SAFARI_BALL,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gSafariBallItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_POKE_BALLS,
+ .type = 4,
+ .fieldUseFunc = NULL,
+ .battleUsage = 2,
+ .battleUseFunc = ItemUseInBattle_PokeBall,
+ .secondaryId = 4,
+ },
+ {
+ .name = _("NET BALL"),
+ .itemId = ITEM_NET_BALL,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gNetBallItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_POKE_BALLS,
+ .type = 5,
+ .fieldUseFunc = NULL,
+ .battleUsage = 2,
+ .battleUseFunc = ItemUseInBattle_PokeBall,
+ .secondaryId = 5,
+ },
+ {
+ .name = _("DIVE BALL"),
+ .itemId = ITEM_DIVE_BALL,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDiveBallItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_POKE_BALLS,
+ .type = 6,
+ .fieldUseFunc = NULL,
+ .battleUsage = 2,
+ .battleUseFunc = ItemUseInBattle_PokeBall,
+ .secondaryId = 6,
+ },
+ {
+ .name = _("NEST BALL"),
+ .itemId = ITEM_NEST_BALL,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gNestBallItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_POKE_BALLS,
+ .type = 7,
+ .fieldUseFunc = NULL,
+ .battleUsage = 2,
+ .battleUseFunc = ItemUseInBattle_PokeBall,
+ .secondaryId = 7,
+ },
+ {
+ .name = _("REPEAT BALL"),
+ .itemId = ITEM_REPEAT_BALL,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gRepeatBallItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_POKE_BALLS,
+ .type = 8,
+ .fieldUseFunc = NULL,
+ .battleUsage = 2,
+ .battleUseFunc = ItemUseInBattle_PokeBall,
+ .secondaryId = 8,
+ },
+ {
+ .name = _("TIMER BALL"),
+ .itemId = ITEM_TIMER_BALL,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gTimerBallItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_POKE_BALLS,
+ .type = 9,
+ .fieldUseFunc = NULL,
+ .battleUsage = 2,
+ .battleUseFunc = ItemUseInBattle_PokeBall,
+ .secondaryId = 9,
+ },
+ {
+ .name = _("LUXURY BALL"),
+ .itemId = ITEM_LUXURY_BALL,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gLuxuryBallItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_POKE_BALLS,
+ .type = 10,
+ .fieldUseFunc = NULL,
+ .battleUsage = 2,
+ .battleUseFunc = ItemUseInBattle_PokeBall,
+ .secondaryId = 10,
+ },
+ {
+ .name = _("PREMIER BALL"),
+ .itemId = ITEM_PREMIER_BALL,
+ .price = 200,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gPremierBallItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_POKE_BALLS,
+ .type = 11,
+ .fieldUseFunc = NULL,
+ .battleUsage = 2,
+ .battleUseFunc = ItemUseInBattle_PokeBall,
+ .secondaryId = 11,
+ },
+
+//Medicine
+
+ {
+ .name = _("POTION"),
+ .itemId = ITEM_POTION,
+ .price = 300,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 20,
+ .description = gPotionItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .battleUsage = 1,
+ .battleUseFunc = ItemUseInBattle_Medicine,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("ANTIDOTE"),
+ .itemId = ITEM_ANTIDOTE,
+ .price = 100,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gAntidoteItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .battleUsage = 1,
+ .battleUseFunc = ItemUseInBattle_Medicine,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("BURN HEAL"),
+ .itemId = ITEM_BURN_HEAL,
+ .price = 250,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gBurnHealItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .battleUsage = 1,
+ .battleUseFunc = ItemUseInBattle_Medicine,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("ICE HEAL"),
+ .itemId = ITEM_ICE_HEAL,
+ .price = 250,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gIceHealItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .battleUsage = 1,
+ .battleUseFunc = ItemUseInBattle_Medicine,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("AWAKENING"),
+ .itemId = ITEM_AWAKENING,
+ .price = 250,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gAwakeningItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .battleUsage = 1,
+ .battleUseFunc = ItemUseInBattle_Medicine,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("PARLYZ HEAL"),
+ .itemId = ITEM_PARALYZE_HEAL,
+ .price = 200,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gParalyzeHealItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .battleUsage = 1,
+ .battleUseFunc = ItemUseInBattle_Medicine,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("FULL RESTORE"),
+ .itemId = ITEM_FULL_RESTORE,
+ .price = 3000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 255,
+ .description = gFullRestoreItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .battleUsage = 1,
+ .battleUseFunc = ItemUseInBattle_Medicine,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("MAX POTION"),
+ .itemId = ITEM_MAX_POTION,
+ .price = 2500,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 255,
+ .description = gMaxPotionItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .battleUsage = 1,
+ .battleUseFunc = ItemUseInBattle_Medicine,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("HYPER POTION"),
+ .itemId = ITEM_HYPER_POTION,
+ .price = 1200,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 200,
+ .description = gHyperPotionItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .battleUsage = 1,
+ .battleUseFunc = ItemUseInBattle_Medicine,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("SUPER POTION"),
+ .itemId = ITEM_SUPER_POTION,
+ .price = 700,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 50,
+ .description = gSuperPotionItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .battleUsage = 1,
+ .battleUseFunc = ItemUseInBattle_Medicine,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("FULL HEAL"),
+ .itemId = ITEM_FULL_HEAL,
+ .price = 600,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gFullHealItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .battleUsage = 1,
+ .battleUseFunc = ItemUseInBattle_Medicine,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("REVIVE"),
+ .itemId = ITEM_REVIVE,
+ .price = 1500,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gReviveItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .battleUsage = 1,
+ .battleUseFunc = ItemUseInBattle_Medicine,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("MAX REVIVE"),
+ .itemId = ITEM_MAX_REVIVE,
+ .price = 4000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gMaxReviveItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .battleUsage = 1,
+ .battleUseFunc = ItemUseInBattle_Medicine,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("FRESH WATER"),
+ .itemId = ITEM_FRESH_WATER,
+ .price = 200,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 50,
+ .description = gFreshWaterItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .battleUsage = 1,
+ .battleUseFunc = ItemUseInBattle_Medicine,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("SODA POP"),
+ .itemId = ITEM_SODA_POP,
+ .price = 300,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 60,
+ .description = gSodaPopItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .battleUsage = 1,
+ .battleUseFunc = ItemUseInBattle_Medicine,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("LEMONADE"),
+ .itemId = ITEM_LEMONADE,
+ .price = 350,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 80,
+ .description = gLemonadeItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .battleUsage = 1,
+ .battleUseFunc = ItemUseInBattle_Medicine,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("MOOMOO MILK"),
+ .itemId = ITEM_MOOMOO_MILK,
+ .price = 500,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 100,
+ .description = gMoomooMilkItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .battleUsage = 1,
+ .battleUseFunc = ItemUseInBattle_Medicine,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("ENERGYPOWDER"),
+ .itemId = ITEM_ENERGY_POWDER,
+ .price = 500,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gEnergyPowderItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .battleUsage = 1,
+ .battleUseFunc = ItemUseInBattle_Medicine,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("ENERGY ROOT"),
+ .itemId = ITEM_ENERGY_ROOT,
+ .price = 800,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gEnergyRootItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .battleUsage = 1,
+ .battleUseFunc = ItemUseInBattle_Medicine,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("HEAL POWDER"),
+ .itemId = ITEM_HEAL_POWDER,
+ .price = 450,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gHealPowderItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .battleUsage = 1,
+ .battleUseFunc = ItemUseInBattle_Medicine,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("REVIVAL HERB"),
+ .itemId = ITEM_REVIVAL_HERB,
+ .price = 2800,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gRevivalHerbItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .battleUsage = 1,
+ .battleUseFunc = ItemUseInBattle_Medicine,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("ETHER"),
+ .itemId = ITEM_ETHER,
+ .price = 1200,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 10,
+ .description = gEtherItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_PPRecovery,
+ .battleUsage = 1,
+ .battleUseFunc = ItemUseInBattle_PPRecovery,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("MAX ETHER"),
+ .itemId = ITEM_MAX_ETHER,
+ .price = 2000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 255,
+ .description = gMaxEtherItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_PPRecovery,
+ .battleUsage = 1,
+ .battleUseFunc = ItemUseInBattle_PPRecovery,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("ELIXIR"),
+ .itemId = ITEM_ELIXIR,
+ .price = 3000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 10,
+ .description = gElixirItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_PPRecovery,
+ .battleUsage = 1,
+ .battleUseFunc = ItemUseInBattle_PPRecovery,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("MAX ELIXIR"),
+ .itemId = ITEM_MAX_ELIXIR,
+ .price = 4500,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 255,
+ .description = gMaxElixirItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_PPRecovery,
+ .battleUsage = 1,
+ .battleUseFunc = ItemUseInBattle_PPRecovery,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("LAVA COOKIE"),
+ .itemId = ITEM_LAVA_COOKIE,
+ .price = 200,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gLavaCookieItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .battleUsage = 1,
+ .battleUseFunc = ItemUseInBattle_Medicine,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("BLUE FLUTE"),
+ .itemId = ITEM_BLUE_FLUTE,
+ .price = 100,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gBlueFluteItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .battleUsage = 1,
+ .battleUseFunc = ItemUseInBattle_Medicine,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("YELLOW FLUTE"),
+ .itemId = ITEM_YELLOW_FLUTE,
+ .price = 200,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gYellowFluteItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 1,
+ .battleUseFunc = ItemUseInBattle_Medicine,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("RED FLUTE"),
+ .itemId = ITEM_RED_FLUTE,
+ .price = 300,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gRedFluteItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 1,
+ .battleUseFunc = ItemUseInBattle_Medicine,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("BLACK FLUTE"),
+ .itemId = ITEM_BLACK_FLUTE,
+ .price = 400,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 50,
+ .description = gBlackFluteItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_BlackWhiteFlute,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("WHITE FLUTE"),
+ .itemId = ITEM_WHITE_FLUTE,
+ .price = 500,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 150,
+ .description = gWhiteFluteItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_BlackWhiteFlute,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("BERRY JUICE"),
+ .itemId = ITEM_BERRY_JUICE,
+ .price = 100,
+ .holdEffect = HOLD_EFFECT_RESTORE_HP,
+ .holdEffectParam = 20,
+ .description = gBerryJuiceItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .battleUsage = 1,
+ .battleUseFunc = ItemUseInBattle_Medicine,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("SACRED ASH"),
+ .itemId = ITEM_SACRED_ASH,
+ .price = 200,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gSacredAshItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_SacredAsh,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+
+//Collectibles
+
+ {
+ .name = _("SHOAL SALT"),
+ .itemId = ITEM_SHOAL_SALT,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gShoalSaltItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("SHOAL SHELL"),
+ .itemId = ITEM_SHOAL_SHELL,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gShoalShellItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("RED SHARD"),
+ .itemId = ITEM_RED_SHARD,
+ .price = 200,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gRedShardItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("BLUE SHARD"),
+ .itemId = ITEM_BLUE_SHARD,
+ .price = 200,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gBlueShardItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("YELLOW SHARD"),
+ .itemId = ITEM_YELLOW_SHARD,
+ .price = 200,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gYellowShardItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("GREEN SHARD"),
+ .itemId = ITEM_GREEN_SHARD,
+ .price = 200,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gGreenShardItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+
+//Vitamins
+
+ {
+ .name = _("HP UP"),
+ .itemId = ITEM_HP_UP,
+ .price = 9800,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gHPUpItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("PROTEIN"),
+ .itemId = ITEM_PROTEIN,
+ .price = 9800,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gProteinItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("IRON"),
+ .itemId = ITEM_IRON,
+ .price = 9800,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gIronItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("CARBOS"),
+ .itemId = ITEM_CARBOS,
+ .price = 9800,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gCarbosItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("CALCIUM"),
+ .itemId = ITEM_CALCIUM,
+ .price = 9800,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gCalciumItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("RARE CANDY"),
+ .itemId = ITEM_RARE_CANDY,
+ .price = 4800,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gRareCandyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_RareCandy,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("PP UP"),
+ .itemId = ITEM_PP_UP,
+ .price = 9800,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gPPUpItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_PPUp,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("ZINC"),
+ .itemId = ITEM_ZINC,
+ .price = 9800,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gZincItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("PP MAX"),
+ .itemId = ITEM_PP_MAX,
+ .price = 9800,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gPPMaxItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_PPUp,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+
+//Battle items
+
+ {
+ .name = _("GUARD SPEC."),
+ .itemId = ITEM_GUARD_SPEC,
+ .price = 700,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gGuardSpecItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 2,
+ .battleUseFunc = ItemUseInBattle_StatIncrease,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("DIRE HIT"),
+ .itemId = ITEM_DIRE_HIT,
+ .price = 650,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDireHitItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 2,
+ .battleUseFunc = ItemUseInBattle_StatIncrease,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("X ATTACK"),
+ .itemId = ITEM_X_ATTACK,
+ .price = 500,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gXAttackItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 2,
+ .battleUseFunc = ItemUseInBattle_StatIncrease,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("X DEFEND"),
+ .itemId = ITEM_X_DEFEND,
+ .price = 550,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gXDefendItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 2,
+ .battleUseFunc = ItemUseInBattle_StatIncrease,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("X SPEED"),
+ .itemId = ITEM_X_SPEED,
+ .price = 350,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gXSpeedItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 2,
+ .battleUseFunc = ItemUseInBattle_StatIncrease,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("X ACCURACY"),
+ .itemId = ITEM_X_ACCURACY,
+ .price = 950,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gXAccuracyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 2,
+ .battleUseFunc = ItemUseInBattle_StatIncrease,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("X SPECIAL"),
+ .itemId = ITEM_X_SPECIAL,
+ .price = 350,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gXSpecialItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 2,
+ .battleUseFunc = ItemUseInBattle_StatIncrease,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("POKé DOLL"),
+ .itemId = ITEM_POKE_DOLL,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gPokeDollItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 2,
+ .battleUseFunc = ItemUseInBattle_Escape,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("FLUFFY TAIL"),
+ .itemId = ITEM_FLUFFY_TAIL,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gFluffyTailItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 2,
+ .battleUseFunc = ItemUseInBattle_Escape,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+
+//Field items
+
+ {
+ .name = _("SUPER REPEL"),
+ .itemId = ITEM_SUPER_REPEL,
+ .price = 500,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 200,
+ .description = gSuperRepelItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_Repel,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("MAX REPEL"),
+ .itemId = ITEM_MAX_REPEL,
+ .price = 700,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 250,
+ .description = gMaxRepelItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_Repel,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("ESCAPE ROPE"),
+ .itemId = ITEM_ESCAPE_ROPE,
+ .price = 550,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gEscapeRopeItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 2,
+ .fieldUseFunc = ItemUseOutOfBattle_EscapeRope,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("REPEL"),
+ .itemId = ITEM_REPEL,
+ .price = 350,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 100,
+ .description = gRepelItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_Repel,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+
+//Evolution stones
+
+ {
+ .name = _("SUN STONE"),
+ .itemId = ITEM_SUN_STONE,
+ .price = 2100,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gSunStoneItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("MOON STONE"),
+ .itemId = ITEM_MOON_STONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gMoonStoneItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("FIRE STONE"),
+ .itemId = ITEM_FIRE_STONE,
+ .price = 2100,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gFireStoneItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("THUNDERSTONE"),
+ .itemId = ITEM_THUNDER_STONE,
+ .price = 2100,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gThunderStoneItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("WATER STONE"),
+ .itemId = ITEM_WATER_STONE,
+ .price = 2100,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gWaterStoneItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("LEAF STONE"),
+ .itemId = ITEM_LEAF_STONE,
+ .price = 2100,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gLeafStoneItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_EvolutionStone,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+
+//Valuable items
+
+ {
+ .name = _("TINYMUSHROOM"),
+ .itemId = ITEM_TINY_MUSHROOM,
+ .price = 500,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gTinyMushroomItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("BIG MUSHROOM"),
+ .itemId = ITEM_BIG_MUSHROOM,
+ .price = 5000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gBigMushroomItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("PEARL"),
+ .itemId = ITEM_PEARL,
+ .price = 1400,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gPearlItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("BIG PEARL"),
+ .itemId = ITEM_BIG_PEARL,
+ .price = 7500,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gBigPearlItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("STARDUST"),
+ .itemId = ITEM_STARDUST,
+ .price = 2000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gStardustItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("STAR PIECE"),
+ .itemId = ITEM_STAR_PIECE,
+ .price = 9800,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gStarPieceItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("NUGGET"),
+ .itemId = ITEM_NUGGET,
+ .price = 10000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gNuggetItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("HEART SCALE"),
+ .itemId = ITEM_HEART_SCALE,
+ .price = 100,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gHeartScaleItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+
+//Mail
+ {
+ .name = _("ORANGE MAIL"),
+ .itemId = ITEM_ORANGE_MAIL,
+ .price = 50,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gOrangeMailItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 0,
+ .fieldUseFunc = ItemUseOutOfBattle_Mail,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("HARBOR MAIL"),
+ .itemId = ITEM_HARBOR_MAIL,
+ .price = 50,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gHarborMailItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 0,
+ .fieldUseFunc = ItemUseOutOfBattle_Mail,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 1,
+ },
+ {
+ .name = _("GLITTER MAIL"),
+ .itemId = ITEM_GLITTER_MAIL,
+ .price = 50,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gGlitterMailItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 0,
+ .fieldUseFunc = ItemUseOutOfBattle_Mail,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 2,
+ },
+ {
+ .name = _("MECH MAIL"),
+ .itemId = ITEM_MECH_MAIL,
+ .price = 50,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gMechMailItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 0,
+ .fieldUseFunc = ItemUseOutOfBattle_Mail,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 3,
+ },
+ {
+ .name = _("WOOD MAIL"),
+ .itemId = ITEM_WOOD_MAIL,
+ .price = 50,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gWoodMailItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 0,
+ .fieldUseFunc = ItemUseOutOfBattle_Mail,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 4,
+ },
+ {
+ .name = _("WAVE MAIL"),
+ .itemId = ITEM_WAVE_MAIL,
+ .price = 50,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gWaveMailItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 0,
+ .fieldUseFunc = ItemUseOutOfBattle_Mail,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 5,
+ },
+ {
+ .name = _("BEAD MAIL"),
+ .itemId = ITEM_BEAD_MAIL,
+ .price = 50,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gBeadMailItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 0,
+ .fieldUseFunc = ItemUseOutOfBattle_Mail,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 6,
+ },
+ {
+ .name = _("SHADOW MAIL"),
+ .itemId = ITEM_SHADOW_MAIL,
+ .price = 50,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gShadowMailItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 0,
+ .fieldUseFunc = ItemUseOutOfBattle_Mail,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 7,
+ },
+ {
+ .name = _("TROPIC MAIL"),
+ .itemId = ITEM_TROPIC_MAIL,
+ .price = 50,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gTropicMailItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 0,
+ .fieldUseFunc = ItemUseOutOfBattle_Mail,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 8,
+ },
+ {
+ .name = _("DREAM MAIL"),
+ .itemId = ITEM_DREAM_MAIL,
+ .price = 50,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDreamMailItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 0,
+ .fieldUseFunc = ItemUseOutOfBattle_Mail,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 9,
+ },
+ {
+ .name = _("FAB MAIL"),
+ .itemId = ITEM_FAB_MAIL,
+ .price = 50,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gFabMailItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 0,
+ .fieldUseFunc = ItemUseOutOfBattle_Mail,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 10,
+ },
+ {
+ .name = _("RETRO MAIL"),
+ .itemId = ITEM_RETRO_MAIL,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gRetroMailItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 0,
+ .fieldUseFunc = ItemUseOutOfBattle_Mail,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 11,
+ },
+
+//Berries
+
+ {
+ .name = _("CHERI BERRY"),
+ .itemId = ITEM_CHERI_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_CURE_PAR,
+ .holdEffectParam = 0,
+ .description = gCheriBerryItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_BERRIES,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .battleUsage = 1,
+ .battleUseFunc = ItemUseInBattle_Medicine,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("CHESTO BERRY"),
+ .itemId = ITEM_CHESTO_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_CURE_SLP,
+ .holdEffectParam = 0,
+ .description = gChestoBerryItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_BERRIES,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .battleUsage = 1,
+ .battleUseFunc = ItemUseInBattle_Medicine,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("PECHA BERRY"),
+ .itemId = ITEM_PECHA_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_CURE_PSN,
+ .holdEffectParam = 0,
+ .description = gPechaBerryItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_BERRIES,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .battleUsage = 1,
+ .battleUseFunc = ItemUseInBattle_Medicine,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("RAWST BERRY"),
+ .itemId = ITEM_RAWST_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_CURE_BRN,
+ .holdEffectParam = 0,
+ .description = gRawstBerryItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_BERRIES,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .battleUsage = 1,
+ .battleUseFunc = ItemUseInBattle_Medicine,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("ASPEAR BERRY"),
+ .itemId = ITEM_ASPEAR_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_CURE_FRZ,
+ .holdEffectParam = 0,
+ .description = gAspearBerryItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_BERRIES,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .battleUsage = 1,
+ .battleUseFunc = ItemUseInBattle_Medicine,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("LEPPA BERRY"),
+ .itemId = ITEM_LEPPA_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_RESTORE_PP,
+ .holdEffectParam = 10,
+ .description = gLeppaBerryItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_BERRIES,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_PPRecovery,
+ .battleUsage = 1,
+ .battleUseFunc = ItemUseInBattle_PPRecovery,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("ORAN BERRY"),
+ .itemId = ITEM_ORAN_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_RESTORE_HP,
+ .holdEffectParam = 10,
+ .description = gOranBerryItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_BERRIES,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .battleUsage = 1,
+ .battleUseFunc = ItemUseInBattle_Medicine,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("PERSIM BERRY"),
+ .itemId = ITEM_PERSIM_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_CURE_CONFUSION,
+ .holdEffectParam = 0,
+ .description = gPersimBerryItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_BERRIES,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 1,
+ .battleUseFunc = ItemUseInBattle_Medicine,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("LUM BERRY"),
+ .itemId = ITEM_LUM_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_CURE_STATUS,
+ .holdEffectParam = 0,
+ .description = gLumBerryItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_BERRIES,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .battleUsage = 1,
+ .battleUseFunc = ItemUseInBattle_Medicine,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("SITRUS BERRY"),
+ .itemId = ITEM_SITRUS_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_RESTORE_HP,
+ .holdEffectParam = 30,
+ .description = gSitrusBerryItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_BERRIES,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_Medicine,
+ .battleUsage = 1,
+ .battleUseFunc = ItemUseInBattle_Medicine,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("FIGY BERRY"),
+ .itemId = ITEM_FIGY_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_CONFUSE_SPICY,
+ .holdEffectParam = 8,
+ .description = gFigyBerryItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_BERRIES,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("WIKI BERRY"),
+ .itemId = ITEM_WIKI_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_CONFUSE_DRY,
+ .holdEffectParam = 8,
+ .description = gWikiBerryItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_BERRIES,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("MAGO BERRY"),
+ .itemId = ITEM_MAGO_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_CONFUSE_SWEET,
+ .holdEffectParam = 8,
+ .description = gMagoBerryItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_BERRIES,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("AGUAV BERRY"),
+ .itemId = ITEM_AGUAV_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_CONFUSE_BITTER,
+ .holdEffectParam = 8,
+ .description = gAguavBerryItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_BERRIES,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("IAPAPA BERRY"),
+ .itemId = ITEM_IAPAPA_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_CONFUSE_SOUR,
+ .holdEffectParam = 8,
+ .description = gIapapaBerryItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_BERRIES,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("RAZZ BERRY"),
+ .itemId = ITEM_RAZZ_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gRazzBerryItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_BERRIES,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("BLUK BERRY"),
+ .itemId = ITEM_BLUK_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gBlukBerryItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_BERRIES,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("NANAB BERRY"),
+ .itemId = ITEM_NANAB_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gNanabBerryItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_BERRIES,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("WEPEAR BERRY"),
+ .itemId = ITEM_WEPEAR_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gWepearBerryItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_BERRIES,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("PINAP BERRY"),
+ .itemId = ITEM_PINAP_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gPinapBerryItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_BERRIES,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("POMEG BERRY"),
+ .itemId = ITEM_POMEG_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gPomegBerryItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_BERRIES,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_ReduceEV,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("KELPSY BERRY"),
+ .itemId = ITEM_KELPSY_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gKelpsyBerryItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_BERRIES,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_ReduceEV,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("QUALOT BERRY"),
+ .itemId = ITEM_QUALOT_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gQualotBerryItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_BERRIES,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_ReduceEV,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("HONDEW BERRY"),
+ .itemId = ITEM_HONDEW_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gHondewBerryItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_BERRIES,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_ReduceEV,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("GREPA BERRY"),
+ .itemId = ITEM_GREPA_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gGrepaBerryItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_BERRIES,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_ReduceEV,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("TAMATO BERRY"),
+ .itemId = ITEM_TAMATO_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gTamatoBerryItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_BERRIES,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_ReduceEV,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("CORNN BERRY"),
+ .itemId = ITEM_CORNN_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gCornnBerryItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_BERRIES,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("MAGOST BERRY"),
+ .itemId = ITEM_MAGOST_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gMagostBerryItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_BERRIES,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("RABUTA BERRY"),
+ .itemId = ITEM_RABUTA_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gRabutaBerryItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_BERRIES,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("NOMEL BERRY"),
+ .itemId = ITEM_NOMEL_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gNomelBerryItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_BERRIES,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("SPELON BERRY"),
+ .itemId = ITEM_SPELON_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gSpelonBerryItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_BERRIES,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("PAMTRE BERRY"),
+ .itemId = ITEM_PAMTRE_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gPamtreBerryItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_BERRIES,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("WATMEL BERRY"),
+ .itemId = ITEM_WATMEL_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gWatmelBerryItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_BERRIES,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("DURIN BERRY"),
+ .itemId = ITEM_DURIN_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDurinBerryItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_BERRIES,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("BELUE BERRY"),
+ .itemId = ITEM_BELUE_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gBelueBerryItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_BERRIES,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("LIECHI BERRY"),
+ .itemId = ITEM_LIECHI_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_ATTACK_UP,
+ .holdEffectParam = 4,
+ .description = gLiechiBerryItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_BERRIES,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("GANLON BERRY"),
+ .itemId = ITEM_GANLON_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_DEFENSE_UP,
+ .holdEffectParam = 4,
+ .description = gGanlonBerryItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_BERRIES,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("SALAC BERRY"),
+ .itemId = ITEM_SALAC_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_SPEED_UP,
+ .holdEffectParam = 4,
+ .description = gSalacBerryItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_BERRIES,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("PETAYA BERRY"),
+ .itemId = ITEM_PETAYA_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_SP_ATTACK_UP,
+ .holdEffectParam = 4,
+ .description = gPetayaBerryItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_BERRIES,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("APICOT BERRY"),
+ .itemId = ITEM_APICOT_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_SP_DEFENSE_UP,
+ .holdEffectParam = 4,
+ .description = gApicotBerryItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_BERRIES,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("LANSAT BERRY"),
+ .itemId = ITEM_LANSAT_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_CRITICAL_UP,
+ .holdEffectParam = 4,
+ .description = gLansatBerryItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_BERRIES,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("STARF BERRY"),
+ .itemId = ITEM_STARF_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_RANDOM_STAT_UP,
+ .holdEffectParam = 4,
+ .description = gStarfBerryItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_BERRIES,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("ENIGMA BERRY"),
+ .itemId = ITEM_ENIGMA_BERRY,
+ .price = 20,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gEnigmaBerryItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_BERRIES,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_EnigmaBerry,
+ .battleUsage = 1,
+ .battleUseFunc = ItemUseInBattle_EnigmaBerry,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+
+//Hold items
+
+ {
+ .name = _("BRIGHTPOWDER"),
+ .itemId = ITEM_BRIGHT_POWDER,
+ .price = 10,
+ .holdEffect = HOLD_EFFECT_EVASION_UP,
+ .holdEffectParam = 10,
+ .description = gBrightPowderItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("WHITE HERB"),
+ .itemId = ITEM_WHITE_HERB,
+ .price = 100,
+ .holdEffect = HOLD_EFFECT_RESTORE_STATS,
+ .holdEffectParam = 0,
+ .description = gWhiteHerbItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("MACHO BRACE"),
+ .itemId = ITEM_MACHO_BRACE,
+ .price = 3000,
+ .holdEffect = HOLD_EFFECT_MACHO_BRACE,
+ .holdEffectParam = 0,
+ .description = gMachoBraceItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("EXP. SHARE"),
+ .itemId = ITEM_EXP_SHARE,
+ .price = 3000,
+ .holdEffect = HOLD_EFFECT_EXP_SHARE,
+ .holdEffectParam = 0,
+ .description = gExpShareItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("QUICK CLAW"),
+ .itemId = ITEM_QUICK_CLAW,
+ .price = 100,
+ .holdEffect = HOLD_EFFECT_QUICK_CLAW,
+ .holdEffectParam = 20,
+ .description = gQuickClawItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("SOOTHE BELL"),
+ .itemId = ITEM_SOOTHE_BELL,
+ .price = 100,
+ .holdEffect = HOLD_EFFECT_HAPPINESS_UP,
+ .holdEffectParam = 0,
+ .description = gSootheBellItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("MENTAL HERB"),
+ .itemId = ITEM_MENTAL_HERB,
+ .price = 100,
+ .holdEffect = HOLD_EFFECT_CURE_ATTRACT,
+ .holdEffectParam = 0,
+ .description = gMentalHerbItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("CHOICE BAND"),
+ .itemId = ITEM_CHOICE_BAND,
+ .price = 100,
+ .holdEffect = HOLD_EFFECT_CHOICE_BAND,
+ .holdEffectParam = 0,
+ .description = gChoiceBandItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("KING’S ROCK"),
+ .itemId = ITEM_KINGS_ROCK,
+ .price = 100,
+ .holdEffect = HOLD_EFFECT_FLINCH,
+ .holdEffectParam = 10,
+ .description = gKingsRockItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("SILVERPOWDER"),
+ .itemId = ITEM_SILVER_POWDER,
+ .price = 100,
+ .holdEffect = HOLD_EFFECT_BUG_POWER,
+ .holdEffectParam = 10,
+ .description = gSilverPowderItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("AMULET COIN"),
+ .itemId = ITEM_AMULET_COIN,
+ .price = 100,
+ .holdEffect = HOLD_EFFECT_DOUBLE_PRIZE,
+ .holdEffectParam = 10,
+ .description = gAmuletCoinItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("CLEANSE TAG"),
+ .itemId = ITEM_CLEANSE_TAG,
+ .price = 200,
+ .holdEffect = HOLD_EFFECT_REPEL,
+ .holdEffectParam = 0,
+ .description = gCleanseTagItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("SOUL DEW"),
+ .itemId = ITEM_SOUL_DEW,
+ .price = 200,
+ .holdEffect = HOLD_EFFECT_SOUL_DEW,
+ .holdEffectParam = 0,
+ .description = gSoulDewItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("DEEPSEATOOTH"),
+ .itemId = ITEM_DEEP_SEA_TOOTH,
+ .price = 200,
+ .holdEffect = HOLD_EFFECT_DEEP_SEA_TOOTH,
+ .holdEffectParam = 0,
+ .description = gDeepSeaToothItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("DEEPSEASCALE"),
+ .itemId = ITEM_DEEP_SEA_SCALE,
+ .price = 200,
+ .holdEffect = HOLD_EFFECT_DEEP_SEA_SCALE,
+ .holdEffectParam = 0,
+ .description = gDeepSeaScaleItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("SMOKE BALL"),
+ .itemId = ITEM_SMOKE_BALL,
+ .price = 200,
+ .holdEffect = HOLD_EFFECT_CAN_ALWAYS_RUN,
+ .holdEffectParam = 0,
+ .description = gSmokeBallItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("EVERSTONE"),
+ .itemId = ITEM_EVERSTONE,
+ .price = 200,
+ .holdEffect = HOLD_EFFECT_PREVENT_EVOLVE,
+ .holdEffectParam = 0,
+ .description = gEverstoneItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("FOCUS BAND"),
+ .itemId = ITEM_FOCUS_BAND,
+ .price = 200,
+ .holdEffect = HOLD_EFFECT_FOCUS_BAND,
+ .holdEffectParam = 10,
+ .description = gFocusBandItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("LUCKY EGG"),
+ .itemId = ITEM_LUCKY_EGG,
+ .price = 200,
+ .holdEffect = HOLD_EFFECT_LUCKY_EGG,
+ .holdEffectParam = 0,
+ .description = gLuckyEggItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("SCOPE LENS"),
+ .itemId = ITEM_SCOPE_LENS,
+ .price = 200,
+ .holdEffect = HOLD_EFFECT_SCOPE_LENS,
+ .holdEffectParam = 0,
+ .description = gScopeLensItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("METAL COAT"),
+ .itemId = ITEM_METAL_COAT,
+ .price = 100,
+ .holdEffect = HOLD_EFFECT_STEEL_POWER,
+ .holdEffectParam = 10,
+ .description = gMetalCoatItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("LEFTOVERS"),
+ .itemId = ITEM_LEFTOVERS,
+ .price = 200,
+ .holdEffect = HOLD_EFFECT_LEFTOVERS,
+ .holdEffectParam = 10,
+ .description = gLeftoversItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("DRAGON SCALE"),
+ .itemId = ITEM_DRAGON_SCALE,
+ .price = 2100,
+ .holdEffect = HOLD_EFFECT_DRAGON_SCALE,
+ .holdEffectParam = 10,
+ .description = gDragonScaleItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("LIGHT BALL"),
+ .itemId = ITEM_LIGHT_BALL,
+ .price = 100,
+ .holdEffect = HOLD_EFFECT_LIGHT_BALL,
+ .holdEffectParam = 0,
+ .description = gLightBallItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("SOFT SAND"),
+ .itemId = ITEM_SOFT_SAND,
+ .price = 100,
+ .holdEffect = HOLD_EFFECT_GROUND_POWER,
+ .holdEffectParam = 10,
+ .description = gSoftSandItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("HARD STONE"),
+ .itemId = ITEM_HARD_STONE,
+ .price = 100,
+ .holdEffect = HOLD_EFFECT_ROCK_POWER,
+ .holdEffectParam = 10,
+ .description = gHardStoneItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("MIRACLE SEED"),
+ .itemId = ITEM_MIRACLE_SEED,
+ .price = 100,
+ .holdEffect = HOLD_EFFECT_GRASS_POWER,
+ .holdEffectParam = 10,
+ .description = gMiracleSeedItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("BLACKGLASSES"),
+ .itemId = ITEM_BLACK_GLASSES,
+ .price = 100,
+ .holdEffect = HOLD_EFFECT_DARK_POWER,
+ .holdEffectParam = 10,
+ .description = gBlackGlassesItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("BLACK BELT"),
+ .itemId = ITEM_BLACK_BELT,
+ .price = 100,
+ .holdEffect = HOLD_EFFECT_FIGHTING_POWER,
+ .holdEffectParam = 10,
+ .description = gBlackBeltItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("MAGNET"),
+ .itemId = ITEM_MAGNET,
+ .price = 100,
+ .holdEffect = HOLD_EFFECT_ELECTRIC_POWER,
+ .holdEffectParam = 10,
+ .description = gMagnetItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("MYSTIC WATER"),
+ .itemId = ITEM_MYSTIC_WATER,
+ .price = 100,
+ .holdEffect = HOLD_EFFECT_WATER_POWER,
+ .holdEffectParam = 10,
+ .description = gMysticWaterItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("SHARP BEAK"),
+ .itemId = ITEM_SHARP_BEAK,
+ .price = 100,
+ .holdEffect = HOLD_EFFECT_FLYING_POWER,
+ .holdEffectParam = 10,
+ .description = gSharpBeakItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("POISON BARB"),
+ .itemId = ITEM_POISON_BARB,
+ .price = 100,
+ .holdEffect = HOLD_EFFECT_POISON_POWER,
+ .holdEffectParam = 10,
+ .description = gPoisonBarbItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("NEVERMELTICE"),
+ .itemId = ITEM_NEVER_MELT_ICE,
+ .price = 100,
+ .holdEffect = HOLD_EFFECT_ICE_POWER,
+ .holdEffectParam = 10,
+ .description = gNeverMeltIceItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("SPELL TAG"),
+ .itemId = ITEM_SPELL_TAG,
+ .price = 100,
+ .holdEffect = HOLD_EFFECT_GHOST_POWER,
+ .holdEffectParam = 10,
+ .description = gSpellTagItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("TWISTEDSPOON"),
+ .itemId = ITEM_TWISTED_SPOON,
+ .price = 100,
+ .holdEffect = HOLD_EFFECT_PSYCHIC_POWER,
+ .holdEffectParam = 10,
+ .description = gTwistedSpoonItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("CHARCOAL"),
+ .itemId = ITEM_CHARCOAL,
+ .price = 9800,
+ .holdEffect = HOLD_EFFECT_FIRE_POWER,
+ .holdEffectParam = 10,
+ .description = gCharcoalItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("DRAGON FANG"),
+ .itemId = ITEM_DRAGON_FANG,
+ .price = 100,
+ .holdEffect = HOLD_EFFECT_DRAGON_POWER,
+ .holdEffectParam = 10,
+ .description = gDragonFangItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("SILK SCARF"),
+ .itemId = ITEM_SILK_SCARF,
+ .price = 100,
+ .holdEffect = HOLD_EFFECT_NORMAL_POWER,
+ .holdEffectParam = 10,
+ .description = gSilkScarfItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("UP-GRADE"),
+ .itemId = ITEM_UP_GRADE,
+ .price = 2100,
+ .holdEffect = HOLD_EFFECT_UP_GRADE,
+ .holdEffectParam = 0,
+ .description = gUpGradeItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("SHELL BELL"),
+ .itemId = ITEM_SHELL_BELL,
+ .price = 200,
+ .holdEffect = HOLD_EFFECT_SHELL_BELL,
+ .holdEffectParam = 8,
+ .description = gShellBellItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("SEA INCENSE"),
+ .itemId = ITEM_SEA_INCENSE,
+ .price = 9600,
+ .holdEffect = HOLD_EFFECT_WATER_POWER,
+ .holdEffectParam = 5,
+ .description = gSeaIncenseItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("LAX INCENSE"),
+ .itemId = ITEM_LAX_INCENSE,
+ .price = 9600,
+ .holdEffect = HOLD_EFFECT_EVASION_UP,
+ .holdEffectParam = 5,
+ .description = gLaxIncenseItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("LUCKY PUNCH"),
+ .itemId = ITEM_LUCKY_PUNCH,
+ .price = 10,
+ .holdEffect = HOLD_EFFECT_LUCKY_PUNCH,
+ .holdEffectParam = 0,
+ .description = gLuckyPunchItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("METAL POWDER"),
+ .itemId = ITEM_METAL_POWDER,
+ .price = 10,
+ .holdEffect = HOLD_EFFECT_METAL_POWDER,
+ .holdEffectParam = 0,
+ .description = gMetalPowderItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("THICK CLUB"),
+ .itemId = ITEM_THICK_CLUB,
+ .price = 500,
+ .holdEffect = HOLD_EFFECT_THICK_CLUB,
+ .holdEffectParam = 0,
+ .description = gThickClubItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("STICK"),
+ .itemId = ITEM_STICK,
+ .price = 200,
+ .holdEffect = HOLD_EFFECT_STICK,
+ .holdEffectParam = 0,
+ .description = gStickItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("RED SCARF"),
+ .itemId = ITEM_RED_SCARF,
+ .price = 100,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gRedScarfItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("BLUE SCARF"),
+ .itemId = ITEM_BLUE_SCARF,
+ .price = 100,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gBlueScarfItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("PINK SCARF"),
+ .itemId = ITEM_PINK_SCARF,
+ .price = 100,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gPinkScarfItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("GREEN SCARF"),
+ .itemId = ITEM_GREEN_SCARF,
+ .price = 100,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gGreenScarfItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("YELLOW SCARF"),
+ .itemId = ITEM_YELLOW_SCARF,
+ .price = 100,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gYellowScarfItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+
+//Key items
+
+ {
+ .name = _("MACH BIKE"),
+ .itemId = ITEM_MACH_BIKE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gMachBikeItemDescription,
+ .importance = 1,
+ .unk19 = 1,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = 2,
+ .fieldUseFunc = ItemUseOutOfBattle_Bike,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("COIN CASE"),
+ .itemId = ITEM_COIN_CASE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gCoinCaseItemDescription,
+ .importance = 1,
+ .unk19 = 0,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CoinCase,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("ITEMFINDER"),
+ .itemId = ITEM_ITEMFINDER,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gItemfinderItemDescription,
+ .importance = 1,
+ .unk19 = 1,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = 2,
+ .fieldUseFunc = ItemUseOutOfBattle_Itemfinder,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("OLD ROD"),
+ .itemId = ITEM_OLD_ROD,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gOldRodItemDescription,
+ .importance = 1,
+ .unk19 = 1,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = 2,
+ .fieldUseFunc = ItemUseOutOfBattle_Rod,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("GOOD ROD"),
+ .itemId = ITEM_GOOD_ROD,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gGoodRodItemDescription,
+ .importance = 1,
+ .unk19 = 1,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = 2,
+ .fieldUseFunc = ItemUseOutOfBattle_Rod,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 1,
+ },
+ {
+ .name = _("SUPER ROD"),
+ .itemId = ITEM_SUPER_ROD,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gSuperRodItemDescription,
+ .importance = 1,
+ .unk19 = 1,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = 2,
+ .fieldUseFunc = ItemUseOutOfBattle_Rod,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 2,
+ },
+ {
+ .name = _("S.S. TICKET"),
+ .itemId = ITEM_SS_TICKET,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gSSTicketItemDescription,
+ .importance = 1,
+ .unk19 = 0,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("CONTEST PASS"),
+ .itemId = ITEM_CONTEST_PASS,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gContestPassItemDescription,
+ .importance = 1,
+ .unk19 = 0,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("WAILMER PAIL"),
+ .itemId = ITEM_WAILMER_PAIL,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gWailmerPailItemDescription,
+ .importance = 1,
+ .unk19 = 0,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = 2,
+ .fieldUseFunc = ItemUseOutOfBattle_WailmerPail,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("DEVON GOODS"),
+ .itemId = ITEM_DEVON_GOODS,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDevonGoodsItemDescription,
+ .importance = 2,
+ .unk19 = 0,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("SOOT SACK"),
+ .itemId = ITEM_SOOT_SACK,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gSootSackItemDescription,
+ .importance = 1,
+ .unk19 = 0,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("BASEMENT KEY"),
+ .itemId = ITEM_BASEMENT_KEY,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gBasementKeyItemDescription,
+ .importance = 1,
+ .unk19 = 0,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("ACRO BIKE"),
+ .itemId = ITEM_ACRO_BIKE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gAcroBikeItemDescription,
+ .importance = 1,
+ .unk19 = 1,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = 2,
+ .fieldUseFunc = ItemUseOutOfBattle_Bike,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 1,
+ },
+ {
+ .name = _("{POKEBLOCK} CASE"),
+ .itemId = ITEM_POKEBLOCK_CASE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gPokeblockCaseItemDescription,
+ .importance = 1,
+ .unk19 = 1,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = 3,
+ .fieldUseFunc = ItemUseOutOfBattle_PokeblockCase,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("LETTER"),
+ .itemId = ITEM_LETTER,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gLetterItemDescription,
+ .importance = 2,
+ .unk19 = 0,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("EON TICKET"),
+ .itemId = ITEM_EON_TICKET,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gEonTicketItemDescription,
+ .importance = 1,
+ .unk19 = 0,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 1,
+ },
+ {
+ .name = _("RED ORB"),
+ .itemId = ITEM_RED_ORB,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gRedOrbItemDescription,
+ .importance = 2,
+ .unk19 = 0,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("BLUE ORB"),
+ .itemId = ITEM_BLUE_ORB,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gBlueOrbItemDescription,
+ .importance = 2,
+ .unk19 = 0,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("SCANNER"),
+ .itemId = ITEM_SCANNER,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gScannerItemDescription,
+ .importance = 1,
+ .unk19 = 0,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("GO-GOGGLES"),
+ .itemId = ITEM_GO_GOGGLES,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gGoGogglesItemDescription,
+ .importance = 1,
+ .unk19 = 0,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("METEORITE"),
+ .itemId = ITEM_METEORITE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gMeteoriteItemDescription,
+ .importance = 1,
+ .unk19 = 0,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("RM. 1 KEY"),
+ .itemId = ITEM_ROOM_1_KEY,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gRoom1KeyItemDescription,
+ .importance = 1,
+ .unk19 = 0,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("RM. 2 KEY"),
+ .itemId = ITEM_ROOM_2_KEY,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gRoom2KeyItemDescription,
+ .importance = 1,
+ .unk19 = 0,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("RM. 4 KEY"),
+ .itemId = ITEM_ROOM_4_KEY,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gRoom4KeyItemDescription,
+ .importance = 1,
+ .unk19 = 0,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("RM. 6 KEY"),
+ .itemId = ITEM_ROOM_6_KEY,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gRoom6KeyItemDescription,
+ .importance = 1,
+ .unk19 = 0,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("STORAGE KEY"),
+ .itemId = ITEM_STORAGE_KEY,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gStorageKeyItemDescription,
+ .importance = 1,
+ .unk19 = 0,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("ROOT FOSSIL"),
+ .itemId = ITEM_ROOT_FOSSIL,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gRootFossilItemDescription,
+ .importance = 1,
+ .unk19 = 0,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("CLAW FOSSIL"),
+ .itemId = ITEM_CLAW_FOSSIL,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gClawFossilItemDescription,
+ .importance = 1,
+ .unk19 = 0,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("DEVON SCOPE"),
+ .itemId = ITEM_DEVON_SCOPE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDevonScopeItemDescription,
+ .importance = 1,
+ .unk19 = 0,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+
+//TMs/HMs
+
+ {
+ .name = _("TM01"),
+ .itemId = ITEM_TM01_FOCUS_PUNCH,
+ .price = 3000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gTM01ItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_TM_HM,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("TM02"),
+ .itemId = ITEM_TM02_DRAGON_CLAW,
+ .price = 3000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gTM02ItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_TM_HM,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("TM03"),
+ .itemId = ITEM_TM03_WATER_PULSE,
+ .price = 3000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gTM03ItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_TM_HM,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("TM04"),
+ .itemId = ITEM_TM04_CALM_MIND,
+ .price = 3000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gTM04ItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_TM_HM,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("TM05"),
+ .itemId = ITEM_TM05_ROAR,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gTM05ItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_TM_HM,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("TM06"),
+ .itemId = ITEM_TM06_TOXIC,
+ .price = 3000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gTM06ItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_TM_HM,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("TM07"),
+ .itemId = ITEM_TM07_HAIL,
+ .price = 3000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gTM07ItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_TM_HM,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("TM08"),
+ .itemId = ITEM_TM08_BULK_UP,
+ .price = 3000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gTM08ItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_TM_HM,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("TM09"),
+ .itemId = ITEM_TM09_BULLET_SEED,
+ .price = 3000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gTM09ItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_TM_HM,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("TM10"),
+ .itemId = ITEM_TM10_HIDDEN_POWER,
+ .price = 3000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gTM10ItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_TM_HM,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("TM11"),
+ .itemId = ITEM_TM11_SUNNY_DAY,
+ .price = 2000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gTM11ItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_TM_HM,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("TM12"),
+ .itemId = ITEM_TM12_TAUNT,
+ .price = 3000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gTM12ItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_TM_HM,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("TM13"),
+ .itemId = ITEM_TM13_ICE_BEAM,
+ .price = 3000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gTM13ItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_TM_HM,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("TM14"),
+ .itemId = ITEM_TM14_BLIZZARD,
+ .price = 5500,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gTM14ItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_TM_HM,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("TM15"),
+ .itemId = ITEM_TM15_HYPER_BEAM,
+ .price = 7500,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gTM15ItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_TM_HM,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("TM16"),
+ .itemId = ITEM_TM16_LIGHT_SCREEN,
+ .price = 3000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gTM16ItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_TM_HM,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("TM17"),
+ .itemId = ITEM_TM17_PROTECT,
+ .price = 3000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gTM17ItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_TM_HM,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("TM18"),
+ .itemId = ITEM_TM18_RAIN_DANCE,
+ .price = 2000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gTM18ItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_TM_HM,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("TM19"),
+ .itemId = ITEM_TM19_GIGA_DRAIN,
+ .price = 3000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gTM19ItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_TM_HM,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("TM20"),
+ .itemId = ITEM_TM20_SAFEGUARD,
+ .price = 3000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gTM20ItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_TM_HM,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("TM21"),
+ .itemId = ITEM_TM21_FRUSTRATION,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gTM21ItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_TM_HM,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("TM22"),
+ .itemId = ITEM_TM22_SOLARBEAM,
+ .price = 3000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gTM22ItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_TM_HM,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("TM23"),
+ .itemId = ITEM_TM23_IRON_TAIL,
+ .price = 3000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gTM23ItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_TM_HM,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("TM24"),
+ .itemId = ITEM_TM24_THUNDERBOLT,
+ .price = 3000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gTM24ItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_TM_HM,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("TM25"),
+ .itemId = ITEM_TM25_THUNDER,
+ .price = 5500,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gTM25ItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_TM_HM,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("TM26"),
+ .itemId = ITEM_TM26_EARTHQUAKE,
+ .price = 3000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gTM26ItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_TM_HM,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("TM27"),
+ .itemId = ITEM_TM27_RETURN,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gTM27ItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_TM_HM,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("TM28"),
+ .itemId = ITEM_TM28_DIG,
+ .price = 2000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gTM28ItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_TM_HM,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("TM29"),
+ .itemId = ITEM_TM29_PSYCHIC,
+ .price = 2000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gTM29ItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_TM_HM,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("TM30"),
+ .itemId = ITEM_TM30_SHADOW_BALL,
+ .price = 3000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gTM30ItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_TM_HM,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("TM31"),
+ .itemId = ITEM_TM31_BRICK_BREAK,
+ .price = 3000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gTM31ItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_TM_HM,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("TM32"),
+ .itemId = ITEM_TM32_DOUBLE_TEAM,
+ .price = 2000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gTM32ItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_TM_HM,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("TM33"),
+ .itemId = ITEM_TM33_REFLECT,
+ .price = 3000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gTM33ItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_TM_HM,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("TM34"),
+ .itemId = ITEM_TM34_SHOCK_WAVE,
+ .price = 3000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gTM34ItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_TM_HM,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("TM35"),
+ .itemId = ITEM_TM35_FLAMETHROWER,
+ .price = 3000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gTM35ItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_TM_HM,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("TM36"),
+ .itemId = ITEM_TM36_SLUDGE_BOMB,
+ .price = 1000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gTM36ItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_TM_HM,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("TM37"),
+ .itemId = ITEM_TM37_SANDSTORM,
+ .price = 2000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gTM37ItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_TM_HM,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("TM38"),
+ .itemId = ITEM_TM38_FIRE_BLAST,
+ .price = 5500,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gTM38ItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_TM_HM,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("TM39"),
+ .itemId = ITEM_TM39_ROCK_TOMB,
+ .price = 3000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gTM39ItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_TM_HM,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("TM40"),
+ .itemId = ITEM_TM40_AERIAL_ACE,
+ .price = 3000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gTM40ItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_TM_HM,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("TM41"),
+ .itemId = ITEM_TM41_TORMENT,
+ .price = 3000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gTM41ItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_TM_HM,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("TM42"),
+ .itemId = ITEM_TM42_FACADE,
+ .price = 3000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gTM42ItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_TM_HM,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("TM43"),
+ .itemId = ITEM_TM43_SECRET_POWER,
+ .price = 3000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gTM43ItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_TM_HM,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("TM44"),
+ .itemId = ITEM_TM44_REST,
+ .price = 3000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gTM44ItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_TM_HM,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("TM45"),
+ .itemId = ITEM_TM45_ATTRACT,
+ .price = 3000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gTM45ItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_TM_HM,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("TM46"),
+ .itemId = ITEM_TM46_THIEF,
+ .price = 3000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gTM46ItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_TM_HM,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("TM47"),
+ .itemId = ITEM_TM47_STEEL_WING,
+ .price = 3000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gTM47ItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_TM_HM,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("TM48"),
+ .itemId = ITEM_TM48_SKILL_SWAP,
+ .price = 3000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gTM48ItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_TM_HM,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("TM49"),
+ .itemId = ITEM_TM49_SNATCH,
+ .price = 3000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gTM49ItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_TM_HM,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("TM50"),
+ .itemId = ITEM_TM50_OVERHEAT,
+ .price = 3000,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gTM50ItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_TM_HM,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("HM01"),
+ .itemId = ITEM_HM01_CUT,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gHM01ItemDescription,
+ .importance = 1,
+ .unk19 = 0,
+ .pocket = POCKET_TM_HM,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("HM02"),
+ .itemId = ITEM_HM02_FLY,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gHM02ItemDescription,
+ .importance = 1,
+ .unk19 = 0,
+ .pocket = POCKET_TM_HM,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("HM03"),
+ .itemId = ITEM_HM03_SURF,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gHM03ItemDescription,
+ .importance = 1,
+ .unk19 = 0,
+ .pocket = POCKET_TM_HM,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("HM04"),
+ .itemId = ITEM_HM04_STRENGTH,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gHM04ItemDescription,
+ .importance = 1,
+ .unk19 = 0,
+ .pocket = POCKET_TM_HM,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("HM05"),
+ .itemId = ITEM_HM05_FLASH,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gHM05ItemDescription,
+ .importance = 1,
+ .unk19 = 0,
+ .pocket = POCKET_TM_HM,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("HM06"),
+ .itemId = ITEM_HM06_ROCK_SMASH,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gHM06ItemDescription,
+ .importance = 1,
+ .unk19 = 0,
+ .pocket = POCKET_TM_HM,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("HM07"),
+ .itemId = ITEM_HM07_WATERFALL,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gHM07ItemDescription,
+ .importance = 1,
+ .unk19 = 0,
+ .pocket = POCKET_TM_HM,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("HM08"),
+ .itemId = ITEM_HM08_DIVE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gHM08ItemDescription,
+ .importance = 1,
+ .unk19 = 0,
+ .pocket = POCKET_TM_HM,
+ .type = 1,
+ .fieldUseFunc = ItemUseOutOfBattle_TMHM,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("????????"),
+ .itemId = ITEM_NONE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDummyItemDescription,
+ .importance = 0,
+ .unk19 = 0,
+ .pocket = POCKET_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+
+//FireRed/LeafGreen key items
+
+ {
+ .name = _("OAK’S PARCEL"),
+ .itemId = ITEM_OAKS_PARCEL,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gOaksParcelItemDescription,
+ .importance = 2,
+ .unk19 = 0,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("POKé FLUTE"),
+ .itemId = ITEM_POKE_FLUTE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gPokeFluteItemDescription,
+ .importance = 1,
+ .unk19 = 0,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("SECRET KEY"),
+ .itemId = ITEM_SECRET_KEY,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gSecretKeyItemDescription,
+ .importance = 1,
+ .unk19 = 0,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("BIKE VOUCHER"),
+ .itemId = ITEM_BIKE_VOUCHER,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gBikeVoucherItemDescription,
+ .importance = 1,
+ .unk19 = 0,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("GOLD TEETH"),
+ .itemId = ITEM_GOLD_TEETH,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gGoldTeethItemDescription,
+ .importance = 1,
+ .unk19 = 0,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("OLD AMBER"),
+ .itemId = ITEM_OLD_AMBER,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gOldAmberItemDescription,
+ .importance = 1,
+ .unk19 = 0,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("CARD KEY"),
+ .itemId = ITEM_CARD_KEY,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gCardKeyItemDescription,
+ .importance = 1,
+ .unk19 = 0,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("LIFT KEY"),
+ .itemId = ITEM_LIFT_KEY,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gLiftKeyItemDescription,
+ .importance = 1,
+ .unk19 = 0,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("HELIX FOSSIL"),
+ .itemId = ITEM_HELIX_FOSSIL,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gHelixFossilItemDescription,
+ .importance = 1,
+ .unk19 = 0,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("DOME FOSSIL"),
+ .itemId = ITEM_DOME_FOSSIL,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gDomeFossilItemDescription,
+ .importance = 1,
+ .unk19 = 0,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("SILPH SCOPE"),
+ .itemId = ITEM_SILPH_SCOPE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gSilphScopeItemDescription,
+ .importance = 1,
+ .unk19 = 0,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("BICYCLE"),
+ .itemId = ITEM_BICYCLE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gBicycleItemDescription,
+ .importance = 1,
+ .unk19 = 1,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = 2,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("TOWN MAP"),
+ .itemId = ITEM_TOWN_MAP,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gTownMapItemDescription,
+ .importance = 1,
+ .unk19 = 1,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("VS SEEKER"),
+ .itemId = ITEM_VS_SEEKER,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gVSSeekerItemDescription,
+ .importance = 1,
+ .unk19 = 1,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = 2,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("FAME CHECKER"),
+ .itemId = ITEM_FAME_CHECKER,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gFameCheckerItemDescription,
+ .importance = 1,
+ .unk19 = 1,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("TM CASE"),
+ .itemId = ITEM_TM_CASE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gTMCaseItemDescription,
+ .importance = 1,
+ .unk19 = 1,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("BERRY POUCH"),
+ .itemId = ITEM_BERRY_POUCH,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gBerryPouchItemDescription,
+ .importance = 1,
+ .unk19 = 1,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("TEACHY TV"),
+ .itemId = ITEM_TEACHY_TV,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gTeachyTVItemDescription,
+ .importance = 1,
+ .unk19 = 1,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = 2,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("TRI-PASS"),
+ .itemId = ITEM_TRI_PASS,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gTriPassItemDescription,
+ .importance = 1,
+ .unk19 = 1,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("RAINBOW PASS"),
+ .itemId = ITEM_RAINBOW_PASS,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gRainbowPassItemDescription,
+ .importance = 1,
+ .unk19 = 1,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("TEA"),
+ .itemId = ITEM_TEA,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gTeaItemDescription,
+ .importance = 1,
+ .unk19 = 1,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("MYSTICTICKET"),
+ .itemId = ITEM_MYSTIC_TICKET,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gMysticTicketItemDescription,
+ .importance = 1,
+ .unk19 = 1,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("AURORATICKET"),
+ .itemId = ITEM_AURORA_TICKET,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gAuroraTicketItemDescription,
+ .importance = 1,
+ .unk19 = 1,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("POWDER JAR"),
+ .itemId = ITEM_POWDER_JAR,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gPowderJarItemDescription,
+ .importance = 1,
+ .unk19 = 1,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_PowderJar,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("RUBY"),
+ .itemId = ITEM_RUBY,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gRubyItemDescription,
+ .importance = 1,
+ .unk19 = 1,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("SAPPHIRE"),
+ .itemId = ITEM_SAPPHIRE,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gSapphireItemDescription,
+ .importance = 1,
+ .unk19 = 1,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+
+//Emerald-specific key items
+
+ {
+ .name = _("MAGMA EMBLEM"),
+ .itemId = ITEM_MAGMA_EMBLEM,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gMagmaEmblemItemDescription,
+ .importance = 1,
+ .unk19 = 1,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+ {
+ .name = _("OLD SEA MAP"),
+ .itemId = ITEM_OLD_SEA_MAP,
+ .price = 0,
+ .holdEffect = HOLD_EFFECT_NONE,
+ .holdEffectParam = 0,
+ .description = gOldSeaMapItemDescription,
+ .importance = 1,
+ .unk19 = 1,
+ .pocket = POCKET_KEY_ITEMS,
+ .type = 4,
+ .fieldUseFunc = ItemUseOutOfBattle_CannotUse,
+ .battleUsage = 0,
+ .battleUseFunc = NULL,
+ .secondaryId = 0,
+ },
+};
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/data/text/abilities.h b/include/data/text/abilities.h
new file mode 100644
index 000000000..2efd76afc
--- /dev/null
+++ b/include/data/text/abilities.h
@@ -0,0 +1,247 @@
+#ifndef POKEEMERALD_DATA_TEXT_ABILITIES_H
+#define POKEEMERALD_DATA_TEXT_ABILITIES_H
+
+static const u8 gNoneAbilityDescription[] = _("No special ability.");
+static const u8 gStenchAbilityDescription[] = _("Helps repel wild POKéMON.");
+static const u8 gDrizzleAbilityDescription[] = _("Summons rain in battle.");
+static const u8 gSpeedBoostAbilityDescription[] = _("Gradually boosts SPEED.");
+static const u8 gBattleArmorAbilityDescription[] = _("Blocks critical hits.");
+static const u8 gSturdyAbilityDescription[] = _("Negates 1-hit KO attacks.");
+static const u8 gDampAbilityDescription[] = _("Prevents self-destruction.");
+static const u8 gLimberAbilityDescription[] = _("Prevents paralysis.");
+static const u8 gSandVeilAbilityDescription[] = _("Ups evasion in a sandstorm.");
+static const u8 gStaticAbilityDescription[] = _("Paralyzes on contact.");
+static const u8 gVoltAbsorbAbilityDescription[] = _("Turns electricity into HP.");
+static const u8 gWaterAbsorbAbilityDescription[] = _("Changes water into HP.");
+static const u8 gObliviousAbilityDescription[] = _("Prevents attraction.");
+static const u8 gCloudNineAbilityDescription[] = _("Negates weather effects.");
+static const u8 gCompoundEyesAbilityDescription[] = _("Raises accuracy.");
+static const u8 gInsomniaAbilityDescription[] = _("Prevents sleep.");
+static const u8 gColorChangeAbilityDescription[] = _("Changes type to foe’s move.");
+static const u8 gImmunityAbilityDescription[] = _("Prevents poisoning.");
+static const u8 gFlashFireAbilityDescription[] = _("Powers up if hit by fire.");
+static const u8 gShieldDustAbilityDescription[] = _("Prevents added effects.");
+static const u8 gOwnTempoAbilityDescription[] = _("Prevents confusion.");
+static const u8 gSuctionCupsAbilityDescription[] = _("Firmly anchors the body.");
+static const u8 gIntimidateAbilityDescription[] = _("Lowers the foe’s ATTACK.");
+static const u8 gShadowTagAbilityDescription[] = _("Prevents the foe’s escape.");
+static const u8 gRoughSkinAbilityDescription[] = _("Hurts to touch.");
+static const u8 gWonderGuardAbilityDescription[] = _("“Super effective” hits.");
+static const u8 gLevitateAbilityDescription[] = _("Not hit by GROUND attacks.");
+static const u8 gEffectSporeAbilityDescription[] = _("Leaves spores on contact.");
+static const u8 gSynchronizeAbilityDescription[] = _("Passes on status problems.");
+static const u8 gClearBodyAbilityDescription[] = _("Prevents ability reduction.");
+static const u8 gNaturalCureAbilityDescription[] = _("Heals upon switching out.");
+static const u8 gLightningRodAbilityDescription[] = _("Draws electrical moves.");
+static const u8 gSereneGraceAbilityDescription[] = _("Promotes added effects.");
+static const u8 gSwiftSwimAbilityDescription[] = _("Raises SPEED in rain.");
+static const u8 gChlorophyllAbilityDescription[] = _("Raises SPEED in sunshine.");
+static const u8 gIlluminateAbilityDescription[] = _("Encounter rate increases.");
+static const u8 gTraceAbilityDescription[] = _("Copies special ability.");
+static const u8 gHugePowerAbilityDescription[] = _("Raises ATTACK.");
+static const u8 gPoisonPointAbilityDescription[] = _("Poisons foe on contact.");
+static const u8 gInnerFocusAbilityDescription[] = _("Prevents flinching.");
+static const u8 gMagmaArmorAbilityDescription[] = _("Prevents freezing.");
+static const u8 gWaterVeilAbilityDescription[] = _("Prevents burns.");
+static const u8 gMagnetPullAbilityDescription[] = _("Traps STEEL-type POKéMON.");
+static const u8 gSoundproofAbilityDescription[] = _("Avoids sound-based moves.");
+static const u8 gRainDishAbilityDescription[] = _("Slight HP recovery in rain.");
+static const u8 gSandStreamAbilityDescription[] = _("Summons a sandstorm.");
+static const u8 gPressureAbilityDescription[] = _("Raises foe’s PP usage.");
+static const u8 gThickFatAbilityDescription[] = _("Heat-and-cold protection.");
+static const u8 gEarlyBirdAbilityDescription[] = _("Awakens quickly from sleep.");
+static const u8 gFlameBodyAbilityDescription[] = _("Burns the foe on contact.");
+static const u8 gRunAwayAbilityDescription[] = _("Makes escaping easier.");
+static const u8 gKeenEyeAbilityDescription[] = _("Prevents loss of accuracy.");
+static const u8 gHyperCutterAbilityDescription[] = _("Prevents ATTACK reduction.");
+static const u8 gPickupAbilityDescription[] = _("May pick up items.");
+static const u8 gTruantAbilityDescription[] = _("Moves only every two turns.");
+static const u8 gHustleAbilityDescription[] = _("Trades accuracy for power.");
+static const u8 gCuteCharmAbilityDescription[] = _("Infatuates on contact.");
+static const u8 gPlusAbilityDescription[] = _("Powers up with MINUS.");
+static const u8 gMinusAbilityDescription[] = _("Powers up with PLUS.");
+static const u8 gForecastAbilityDescription[] = _("Changes with the weather.");
+static const u8 gStickyHoldAbilityDescription[] = _("Prevents item theft.");
+static const u8 gShedSkinAbilityDescription[] = _("Heals the body by shedding.");
+static const u8 gGutsAbilityDescription[] = _("Ups ATTACK if suffering.");
+static const u8 gMarvelScaleAbilityDescription[] = _("Ups DEFENSE if suffering.");
+static const u8 gLiquidOozeAbilityDescription[] = _("Draining causes injury.");
+static const u8 gOvergrowAbilityDescription[] = _("Ups GRASS moves in a pinch.");
+static const u8 gBlazeAbilityDescription[] = _("Ups FIRE moves in a pinch.");
+static const u8 gTorrentAbilityDescription[] = _("Ups WATER moves in a pinch.");
+static const u8 gSwarmAbilityDescription[] = _("Ups BUG moves in a pinch.");
+static const u8 gRockHeadAbilityDescription[] = _("Prevents recoil damage.");
+static const u8 gDroughtAbilityDescription[] = _("Summons sunlight in battle.");
+static const u8 gArenaTrapAbilityDescription[] = _("Prevents fleeing.");
+static const u8 gVitalSpiritAbilityDescription[] = _("Prevents sleep.");
+static const u8 gWhiteSmokeAbilityDescription[] = _("Prevents ability reduction.");
+static const u8 gPurePowerAbilityDescription[] = _("Raises ATTACK.");
+static const u8 gShellArmorAbilityDescription[] = _("Blocks critical hits.");
+static const u8 gCacophonyAbilityDescription[] = _("Avoids sound-based moves.");
+static const u8 gAirLockAbilityDescription[] = _("Negates weather effects.");
+
+const u8 gAbilityNames[][ABILITY_NAME_LENGTH + 1] =
+{
+ _("-------"),
+ _("STENCH"),
+ _("DRIZZLE"),
+ _("SPEED BOOST"),
+ _("BATTLE ARMOR"),
+ _("STURDY"),
+ _("DAMP"),
+ _("LIMBER"),
+ _("SAND VEIL"),
+ _("STATIC"),
+ _("VOLT ABSORB"),
+ _("WATER ABSORB"),
+ _("OBLIVIOUS"),
+ _("CLOUD NINE"),
+ _("COMPOUNDEYES"),
+ _("INSOMNIA"),
+ _("COLOR CHANGE"),
+ _("IMMUNITY"),
+ _("FLASH FIRE"),
+ _("SHIELD DUST"),
+ _("OWN TEMPO"),
+ _("SUCTION CUPS"),
+ _("INTIMIDATE"),
+ _("SHADOW TAG"),
+ _("ROUGH SKIN"),
+ _("WONDER GUARD"),
+ _("LEVITATE"),
+ _("EFFECT SPORE"),
+ _("SYNCHRONIZE"),
+ _("CLEAR BODY"),
+ _("NATURAL CURE"),
+ _("LIGHTNINGROD"),
+ _("SERENE GRACE"),
+ _("SWIFT SWIM"),
+ _("CHLOROPHYLL"),
+ _("ILLUMINATE"),
+ _("TRACE"),
+ _("HUGE POWER"),
+ _("POISON POINT"),
+ _("INNER FOCUS"),
+ _("MAGMA ARMOR"),
+ _("WATER VEIL"),
+ _("MAGNET PULL"),
+ _("SOUNDPROOF"),
+ _("RAIN DISH"),
+ _("SAND STREAM"),
+ _("PRESSURE"),
+ _("THICK FAT"),
+ _("EARLY BIRD"),
+ _("FLAME BODY"),
+ _("RUN AWAY"),
+ _("KEEN EYE"),
+ _("HYPER CUTTER"),
+ _("PICKUP"),
+ _("TRUANT"),
+ _("HUSTLE"),
+ _("CUTE CHARM"),
+ _("PLUS"),
+ _("MINUS"),
+ _("FORECAST"),
+ _("STICKY HOLD"),
+ _("SHED SKIN"),
+ _("GUTS"),
+ _("MARVEL SCALE"),
+ _("LIQUID OOZE"),
+ _("OVERGROW"),
+ _("BLAZE"),
+ _("TORRENT"),
+ _("SWARM"),
+ _("ROCK HEAD"),
+ _("DROUGHT"),
+ _("ARENA TRAP"),
+ _("VITAL SPIRIT"),
+ _("WHITE SMOKE"),
+ _("PURE POWER"),
+ _("SHELL ARMOR"),
+ _("CACOPHONY"),
+ _("AIR LOCK"),
+};
+
+const u8 *const gAbilityDescriptionPointers[] =
+{
+ gNoneAbilityDescription,
+ gStenchAbilityDescription,
+ gDrizzleAbilityDescription,
+ gSpeedBoostAbilityDescription,
+ gBattleArmorAbilityDescription,
+ gSturdyAbilityDescription,
+ gDampAbilityDescription,
+ gLimberAbilityDescription,
+ gSandVeilAbilityDescription,
+ gStaticAbilityDescription,
+ gVoltAbsorbAbilityDescription,
+ gWaterAbsorbAbilityDescription,
+ gObliviousAbilityDescription,
+ gCloudNineAbilityDescription,
+ gCompoundEyesAbilityDescription,
+ gInsomniaAbilityDescription,
+ gColorChangeAbilityDescription,
+ gImmunityAbilityDescription,
+ gFlashFireAbilityDescription,
+ gShieldDustAbilityDescription,
+ gOwnTempoAbilityDescription,
+ gSuctionCupsAbilityDescription,
+ gIntimidateAbilityDescription,
+ gShadowTagAbilityDescription,
+ gRoughSkinAbilityDescription,
+ gWonderGuardAbilityDescription,
+ gLevitateAbilityDescription,
+ gEffectSporeAbilityDescription,
+ gSynchronizeAbilityDescription,
+ gClearBodyAbilityDescription,
+ gNaturalCureAbilityDescription,
+ gLightningRodAbilityDescription,
+ gSereneGraceAbilityDescription,
+ gSwiftSwimAbilityDescription,
+ gChlorophyllAbilityDescription,
+ gIlluminateAbilityDescription,
+ gTraceAbilityDescription,
+ gHugePowerAbilityDescription,
+ gPoisonPointAbilityDescription,
+ gInnerFocusAbilityDescription,
+ gMagmaArmorAbilityDescription,
+ gWaterVeilAbilityDescription,
+ gMagnetPullAbilityDescription,
+ gSoundproofAbilityDescription,
+ gRainDishAbilityDescription,
+ gSandStreamAbilityDescription,
+ gPressureAbilityDescription,
+ gThickFatAbilityDescription,
+ gEarlyBirdAbilityDescription,
+ gFlameBodyAbilityDescription,
+ gRunAwayAbilityDescription,
+ gKeenEyeAbilityDescription,
+ gHyperCutterAbilityDescription,
+ gPickupAbilityDescription,
+ gTruantAbilityDescription,
+ gHustleAbilityDescription,
+ gCuteCharmAbilityDescription,
+ gPlusAbilityDescription,
+ gMinusAbilityDescription,
+ gForecastAbilityDescription,
+ gStickyHoldAbilityDescription,
+ gShedSkinAbilityDescription,
+ gGutsAbilityDescription,
+ gMarvelScaleAbilityDescription,
+ gLiquidOozeAbilityDescription,
+ gOvergrowAbilityDescription,
+ gBlazeAbilityDescription,
+ gTorrentAbilityDescription,
+ gSwarmAbilityDescription,
+ gRockHeadAbilityDescription,
+ gDroughtAbilityDescription,
+ gArenaTrapAbilityDescription,
+ gVitalSpiritAbilityDescription,
+ gWhiteSmokeAbilityDescription,
+ gPurePowerAbilityDescription,
+ gShellArmorAbilityDescription,
+ gCacophonyAbilityDescription,
+ gAirLockAbilityDescription,
+};
+
+#endif // POKEEMERALD_DATA_TEXT_ABILITIES_H
diff --git a/include/data/text/item_descriptions.h b/include/data/text/item_descriptions.h
new file mode 100644
index 000000000..8683978d7
--- /dev/null
+++ b/include/data/text/item_descriptions.h
@@ -0,0 +1,329 @@
+#ifndef POKEEMERALD_DATA_TEXT_ITEM_DESCRIPTIONS_H
+#define POKEEMERALD_DATA_TEXT_ITEM_DESCRIPTIONS_H
+const u8 gDummyItemDescription[] = _("?????");
+//Pokeballs
+const u8 gMasterBallItemDescription[] = _("The best BALL that\ncatches a POKéMON\nwithout fail.");
+const u8 gUltraBallItemDescription[] = _("A better BALL with\na higher catch rate\nthan a GREAT BALL.");
+const u8 gGreatBallItemDescription[] = _("A good BALL with a\nhigher catch rate\nthan a POKé BALL.");
+const u8 gPokeBallItemDescription[] = _("A tool used for\ncatching wild\nPOKéMON.");
+const u8 gSafariBallItemDescription[] = _("A special BALL that\nis used only in the\nSAFARI ZONE.");
+const u8 gNetBallItemDescription[] = _("A BALL that works\nwell on WATER- and\nBUG-type POKéMON.");
+const u8 gDiveBallItemDescription[] = _("A BALL that works\nbetter on POKéMON\non the ocean floor.");
+const u8 gNestBallItemDescription[] = _("A BALL that works\nbetter on weaker\nPOKéMON.");
+const u8 gRepeatBallItemDescription[] = _("A BALL that works\nbetter on POKéMON\ncaught before.");
+const u8 gTimerBallItemDescription[] = _("A BALL that gains\npower in battles\ntaking many turns.");
+const u8 gLuxuryBallItemDescription[] = _("A cozy BALL that\nmakes POKéMON\nmore friendly.");
+const u8 gPremierBallItemDescription[] = _("A rare BALL made\nin commemoration\nof some event.");
+//Medicine
+const u8 gPotionItemDescription[] = _("Restores the HP of\na POKéMON by\n20 points.");
+const u8 gAntidoteItemDescription[] = _("Heals a poisoned\nPOKéMON.");
+const u8 gBurnHealItemDescription[] = _("Heals POKéMON\nof a burn.");
+const u8 gIceHealItemDescription[] = _("Defrosts a frozen\nPOKéMON.");
+const u8 gAwakeningItemDescription[] = _("Awakens a sleeping\nPOKéMON.");
+const u8 gParalyzeHealItemDescription[] = _("Heals a paralyzed\nPOKéMON.");
+const u8 gFullRestoreItemDescription[] = _("Fully restores the\nHP and status of a\nPOKéMON.");
+const u8 gMaxPotionItemDescription[] = _("Fully restores the\nHP of a POKéMON.");
+const u8 gHyperPotionItemDescription[] = _("Restores the HP of\na POKéMON by\n200 points.");
+const u8 gSuperPotionItemDescription[] = _("Restores the HP of\na POKéMON by\n50 points.");
+const u8 gFullHealItemDescription[] = _("Heals all the\nstatus problems of\none POKéMON.");
+const u8 gReviveItemDescription[] = _("Revives a fainted\nPOKéMON with half\nits HP.");
+const u8 gMaxReviveItemDescription[] = _("Revives a fainted\nPOKéMON with all\nits HP.");
+const u8 gFreshWaterItemDescription[] = _("A mineral water\nthat restores HP\nby 50 points.");
+const u8 gSodaPopItemDescription[] = _("A fizzy soda drink\nthat restores HP\nby 60 points.");
+const u8 gLemonadeItemDescription[] = _("A very sweet drink\nthat restores HP\nby 80 points.");
+const u8 gMoomooMilkItemDescription[] = _("A nutritious milk\nthat restores HP\nby 100 points.");
+const u8 gEnergyPowderItemDescription[] = _("A bitter powder\nthat restores HP\nby 50 points.");
+const u8 gEnergyRootItemDescription[] = _("A bitter root\nthat restores HP\nby 200 points.");
+const u8 gHealPowderItemDescription[] = _("A bitter powder\nthat heals all\nstatus problems.");
+const u8 gRevivalHerbItemDescription[] = _("A very bitter herb\nthat revives a\nfainted POKéMON.");
+const u8 gEtherItemDescription[] = _("Restores the PP\nof a selected move\nby 10.");
+const u8 gMaxEtherItemDescription[] = _("Fully restores the\nPP of a selected\nmove.");
+const u8 gElixirItemDescription[] = _("Restores the PP\nof all moves by 10.");
+const u8 gMaxElixirItemDescription[] = _("Fully restores the\nPP of a POKéMON’s\nmoves.");
+const u8 gLavaCookieItemDescription[] = _("A local specialty\nthat heals all\nstatus problems.");
+const u8 gBlueFluteItemDescription[] = _("A glass flute that\nawakens sleeping\nPOKéMON.");
+const u8 gYellowFluteItemDescription[] = _("A glass flute that\nsnaps POKéMON\nout of confusion.");
+const u8 gRedFluteItemDescription[] = _("A glass flute that\nsnaps POKéMON\nout of attraction.");
+const u8 gBlackFluteItemDescription[] = _("A glass flute that\nkeeps away wild\nPOKéMON.");
+const u8 gWhiteFluteItemDescription[] = _("A glass flute that\nlures wild POKéMON.");
+const u8 gBerryJuiceItemDescription[] = _("A 100% pure juice\nthat restores HP\nby 20 points.");
+const u8 gSacredAshItemDescription[] = _("Fully revives and\nrestores all\nfainted POKéMON.");
+//Collectibles
+const u8 gShoalSaltItemDescription[] = _("Salt obtained from\ndeep inside the\nSHOAL CAVE.");
+const u8 gShoalShellItemDescription[] = _("A seashell found\ndeep inside the\nSHOAL CAVE.");
+const u8 gRedShardItemDescription[] = _("A shard from an\nancient item. Can\nbe sold cheaply.");
+const u8 gBlueShardItemDescription[] = _("A shard from an\nancient item. Can\nbe sold cheaply.");
+const u8 gYellowShardItemDescription[] = _("A shard from an\nancient item. Can\nbe sold cheaply.");
+const u8 gGreenShardItemDescription[] = _("A shard from an\nancient item. Can\nbe sold cheaply.");
+//Vitamins
+const u8 gHPUpItemDescription[] = _("Raises the base HP\nof one POKéMON.");
+const u8 gProteinItemDescription[] = _("Raises the base\nATTACK stat of one\nPOKéMON.");
+const u8 gIronItemDescription[] = _("Raises the base\nDEFENSE stat of\none POKéMON.");
+const u8 gCarbosItemDescription[] = _("Raises the base\nSPEED stat of one\nPOKéMON.");
+const u8 gCalciumItemDescription[] = _("Raises the base\nSP. ATK stat of one\nPOKéMON.");
+const u8 gRareCandyItemDescription[] = _("Raises the level\nof a POKéMON by\none.");
+const u8 gPPUpItemDescription[] = _("Raises the maximum\nPP of a selected\nmove.");
+const u8 gZincItemDescription[] = _("Raises the base\nSP. DEF stat of one\nPOKéMON.");
+const u8 gPPMaxItemDescription[] = _("Raises the PP of a\nmove to its maximum\npoints.");
+//Battle items
+const u8 gGuardSpecItemDescription[] = _("Prevents stat\nreduction when\nused in battle.");
+const u8 gDireHitItemDescription[] = _("Raises the\ncritical-hit ratio\nduring one battle.");
+const u8 gXAttackItemDescription[] = _("Raises the stat\nATTACK during one\nbattle.");
+const u8 gXDefendItemDescription[] = _("Raises the stat\nDEFENSE during one\nbattle.");
+const u8 gXSpeedItemDescription[] = _("Raises the stat\nSPEED during one\nbattle.");
+const u8 gXAccuracyItemDescription[] = _("Raises accuracy\nof attack moves\nduring one battle.");
+const u8 gXSpecialItemDescription[] = _("Raises the stat\nSP. ATK during one\nbattle.");
+const u8 gPokeDollItemDescription[] = _("Use to flee from\nany battle with\na wild POKéMON.");
+const u8 gFluffyTailItemDescription[] = _("Use to flee from\nany battle with\na wild POKéMON.");
+//Field items
+const u8 gSuperRepelItemDescription[] = _("Repels weak wild\nPOKéMON for 200\nsteps.");
+const u8 gMaxRepelItemDescription[] = _("Repels weak wild\nPOKéMON for 250\nsteps.");
+const u8 gEscapeRopeItemDescription[] = _("Use to escape\ninstantly from a\ncave or a dungeon.");
+const u8 gRepelItemDescription[] = _("Repels weak wild\nPOKéMON for 100\nsteps.");
+//Evolution stones
+const u8 gSunStoneItemDescription[] = _("Makes certain\nspecies of POKéMON\nevolve.");
+const u8 gMoonStoneItemDescription[] = _("Makes certain\nspecies of POKéMON\nevolve.");
+const u8 gFireStoneItemDescription[] = _("Makes certain\nspecies of POKéMON\nevolve.");
+const u8 gThunderStoneItemDescription[] = _("Makes certain\nspecies of POKéMON\nevolve.");
+const u8 gWaterStoneItemDescription[] = _("Makes certain\nspecies of POKéMON\nevolve.");
+const u8 gLeafStoneItemDescription[] = _("Makes certain\nspecies of POKéMON\nevolve.");
+//Valuable items
+const u8 gTinyMushroomItemDescription[] = _("A plain mushroom\nthat would sell\nat a cheap price.");
+const u8 gBigMushroomItemDescription[] = _("A rare mushroom\nthat would sell at a\nhigh price.");
+const u8 gPearlItemDescription[] = _("A pretty pearl\nthat would sell at a\ncheap price.");
+const u8 gBigPearlItemDescription[] = _("A lovely large pearl\nthat would sell at a\nhigh price.");
+const u8 gStardustItemDescription[] = _("Beautiful red sand.\nCan be sold at a\nhigh price.");
+const u8 gStarPieceItemDescription[] = _("A red gem shard.\nIt would sell for a\nvery high price.");
+const u8 gNuggetItemDescription[] = _("A nugget of pure\ngold. Can be sold at\na high price.");
+const u8 gHeartScaleItemDescription[] = _("A lovely scale.\nIt is coveted by\ncollectors.");
+//Mail
+const u8 gOrangeMailItemDescription[] = _("A ZIGZAGOON-print\nMAIL to be held by\na POKéMON.");
+const u8 gHarborMailItemDescription[] = _("A WINGULL-print\nMAIL to be held by\na POKéMON.");
+const u8 gGlitterMailItemDescription[] = _("A PIKACHU-print\nMAIL to be held by\na POKéMON.");
+const u8 gMechMailItemDescription[] = _("A MAGNEMITE-print\nMAIL to be held by\na POKéMON.");
+const u8 gWoodMailItemDescription[] = _("A SLAKOTH-print\nMAIL to be held by\na POKéMON.");
+const u8 gWaveMailItemDescription[] = _("A WAILMER-print\nMAIL to be held by\na POKéMON.");
+const u8 gBeadMailItemDescription[] = _("MAIL featuring a\nsketch of the\nholding POKéMON.");
+const u8 gShadowMailItemDescription[] = _("A DUSKULL-print\nMAIL to be held by\na POKéMON.");
+const u8 gTropicMailItemDescription[] = _("A BELLOSSOM-print\nMAIL to be held by\na POKéMON.");
+const u8 gDreamMailItemDescription[] = _("MAIL featuring a\nsketch of the\nholding POKéMON.");
+const u8 gFabMailItemDescription[] = _("A gorgeous-print\nMAIL to be held\nby a POKéMON.");
+const u8 gRetroMailItemDescription[] = _("MAIL featuring the\ndrawings of three\nPOKéMON.");
+//Berries
+const u8 gCheriBerryItemDescription[] = _("A hold item that\nheals paralysis\nin battle.");
+const u8 gChestoBerryItemDescription[] = _("A hold item that\nawakens POKéMON\nin battle.");
+const u8 gPechaBerryItemDescription[] = _("A hold item that\nheals poisoning\nin battle.");
+const u8 gRawstBerryItemDescription[] = _("A hold item that\nheals a burn in\nbattle.");
+const u8 gAspearBerryItemDescription[] = _("A hold item that\ndefrosts POKéMON\nin battle.");
+const u8 gLeppaBerryItemDescription[] = _("A hold item that\nrestores 10 PP in\nbattle.");
+const u8 gOranBerryItemDescription[] = _("A hold item that\nrestores 10 HP in\nbattle.");
+const u8 gPersimBerryItemDescription[] = _("A hold item that\nheals confusion\nin battle.");
+const u8 gLumBerryItemDescription[] = _("A hold item that\nheals any status\nproblem in battle.");
+const u8 gSitrusBerryItemDescription[] = _("A hold item that\nrestores 30 HP in\nbattle.");
+const u8 gFigyBerryItemDescription[] = _("A hold item that\nrestores HP but\nmay confuse.");
+const u8 gWikiBerryItemDescription[] = _("A hold item that\nrestores HP but\nmay confuse.");
+const u8 gMagoBerryItemDescription[] = _("A hold item that\nrestores HP but\nmay confuse.");
+const u8 gAguavBerryItemDescription[] = _("A hold item that\nrestores HP but\nmay confuse.");
+const u8 gIapapaBerryItemDescription[] = _("A hold item that\nrestores HP but\nmay confuse.");
+const u8 gRazzBerryItemDescription[] = _("{POKEBLOCK} ingredient.\nPlant in loamy soil\nto grow RAZZ.");
+const u8 gBlukBerryItemDescription[] = _("{POKEBLOCK} ingredient.\nPlant in loamy soil\nto grow BLUK.");
+const u8 gNanabBerryItemDescription[] = _("{POKEBLOCK} ingredient.\nPlant in loamy soil\nto grow NANAB.");
+const u8 gWepearBerryItemDescription[] = _("{POKEBLOCK} ingredient.\nPlant in loamy soil\nto grow WEPEAR.");
+const u8 gPinapBerryItemDescription[] = _("{POKEBLOCK} ingredient.\nPlant in loamy soil\nto grow PINAP.");
+const u8 gPomegBerryItemDescription[] = _("Makes a POKéMON\nfriendly but lowers\nbase HP.");
+const u8 gKelpsyBerryItemDescription[] = _("Makes a POKéMON\nfriendly but lowers\nbase ATTACK.");
+const u8 gQualotBerryItemDescription[] = _("Makes a POKéMON\nfriendly but lowers\nbase DEFENSE.");
+const u8 gHondewBerryItemDescription[] = _("Makes a POKéMON\nfriendly but lowers\nbase SP. ATK.");
+const u8 gGrepaBerryItemDescription[] = _("Makes a POKéMON\nfriendly but lowers\nbase SP. DEF.");
+const u8 gTamatoBerryItemDescription[] = _("Makes a POKéMON\nfriendly but lowers\nbase SPEED.");
+const u8 gCornnBerryItemDescription[] = _("{POKEBLOCK} ingredient.\nPlant in loamy soil\nto grow CORNN.");
+const u8 gMagostBerryItemDescription[] = _("{POKEBLOCK} ingredient.\nPlant in loamy soil\nto grow MAGOST.");
+const u8 gRabutaBerryItemDescription[] = _("{POKEBLOCK} ingredient.\nPlant in loamy soil\nto grow RABUTA.");
+const u8 gNomelBerryItemDescription[] = _("{POKEBLOCK} ingredient.\nPlant in loamy soil\nto grow NOMEL.");
+const u8 gSpelonBerryItemDescription[] = _("{POKEBLOCK} ingredient.\nPlant in loamy soil\nto grow SPELON.");
+const u8 gPamtreBerryItemDescription[] = _("{POKEBLOCK} ingredient.\nPlant in loamy soil\nto grow PAMTRE.");
+const u8 gWatmelBerryItemDescription[] = _("{POKEBLOCK} ingredient.\nPlant in loamy soil\nto grow WATMEL.");
+const u8 gDurinBerryItemDescription[] = _("{POKEBLOCK} ingredient.\nPlant in loamy soil\nto grow DURIN.");
+const u8 gBelueBerryItemDescription[] = _("{POKEBLOCK} ingredient.\nPlant in loamy soil\nto grow BELUE.");
+const u8 gLiechiBerryItemDescription[] = _("A hold item that\nraises ATTACK in\na pinch.");
+const u8 gGanlonBerryItemDescription[] = _("A hold item that\nraises DEFENSE in\na pinch.");
+const u8 gSalacBerryItemDescription[] = _("A hold item that\nraises SPEED in\na pinch.");
+const u8 gPetayaBerryItemDescription[] = _("A hold item that\nraises SP. ATK in\na pinch.");
+const u8 gApicotBerryItemDescription[] = _("A hold item that\nraises SP. DEF in\na pinch.");
+const u8 gLansatBerryItemDescription[] = _("A hold item that\nups the critical-\nhit rate in a pinch.");
+const u8 gStarfBerryItemDescription[] = _("A hold item that\nsharply boosts a\nstat in a pinch.");
+const u8 gEnigmaBerryItemDescription[] = _("{POKEBLOCK} ingredient.\nPlant in loamy soil\nto grow a mystery.");
+//Hold items
+const u8 gBrightPowderItemDescription[] = _("A hold item that\ncasts a glare to\nreduce accuracy.");
+const u8 gWhiteHerbItemDescription[] = _("A hold item that\nrestores any\nlowered stat.");
+const u8 gMachoBraceItemDescription[] = _("A hold item that\npromotes growth,\nbut reduces SPEED.");
+const u8 gExpShareItemDescription[] = _("A hold item that\ngets EXP. points\nfrom battles.");
+const u8 gQuickClawItemDescription[] = _("A hold item that\noccasionally allows\nthe first strike.");
+const u8 gSootheBellItemDescription[] = _("A hold item that\ncalms spirits and\nfosters friendship.");
+const u8 gMentalHerbItemDescription[] = _("A hold item that\nsnaps POKéMON out\nof infatuation.");
+const u8 gChoiceBandItemDescription[] = _("Raises a move’s\npower, but permits\nonly that move.");
+const u8 gKingsRockItemDescription[] = _("A hold item that\nmay cause flinching\nwhen the foe is hit.");
+const u8 gSilverPowderItemDescription[] = _("A hold item that\nraises the power of\nBUG-type moves.");
+const u8 gAmuletCoinItemDescription[] = _("Doubles money in\nbattle if the\nholder takes part.");
+const u8 gCleanseTagItemDescription[] = _("A hold item that\nhelps repel wild\nPOKéMON.");
+const u8 gSoulDewItemDescription[] = _("Hold item: raises\nSP. ATK & SP. DEF of\nLATIOS & LATIAS.");
+const u8 gDeepSeaToothItemDescription[] = _("A hold item that\nraises the SP. ATK\nof CLAMPERL.");
+const u8 gDeepSeaScaleItemDescription[] = _("A hold item that\nraises the SP. DEF\nof CLAMPERL.");
+const u8 gSmokeBallItemDescription[] = _("A hold item that\nassures fleeing\nfrom wild POKéMON.");
+const u8 gEverstoneItemDescription[] = _("A wondrous hold\nitem that prevents\nevolution.");
+const u8 gFocusBandItemDescription[] = _("A hold item that\noccasionally\nprevents fainting.");
+const u8 gLuckyEggItemDescription[] = _("A hold item that\nboosts EXP. points\nearned in battle.");
+const u8 gScopeLensItemDescription[] = _("A hold item that\nimproves the\ncritical-hit rate.");
+const u8 gMetalCoatItemDescription[] = _("A hold item that\nraises the power of\nSTEEL-type moves.");
+const u8 gLeftoversItemDescription[] = _("A hold item that\ngradually restores\nHP in battle.");
+const u8 gDragonScaleItemDescription[] = _("A strange scale\nheld by DRAGON-\ntype POKéMON.");
+const u8 gLightBallItemDescription[] = _("A hold item that\nraises the SP. ATK\nof PIKACHU.");
+const u8 gSoftSandItemDescription[] = _("A hold item that\nraises the power of\nGROUND-type moves.");
+const u8 gHardStoneItemDescription[] = _("A hold item that\nraises the power of\nROCK-type moves.");
+const u8 gMiracleSeedItemDescription[] = _("A hold item that\nraises the power of\nGRASS-type moves.");
+const u8 gBlackGlassesItemDescription[] = _("A hold item that\nraises the power of\nDARK-type moves.");
+const u8 gBlackBeltItemDescription[] = _("A hold item that\nboosts FIGHTING-\ntype moves.");
+const u8 gMagnetItemDescription[] = _("A hold item that\nboosts ELECTRIC-\ntype moves.");
+const u8 gMysticWaterItemDescription[] = _("A hold item that\nraises the power of\nWATER-type moves.");
+const u8 gSharpBeakItemDescription[] = _("A hold item that\nraises the power of\nFLYING-type moves.");
+const u8 gPoisonBarbItemDescription[] = _("A hold item that\nraises the power of\nPOISON-type moves.");
+const u8 gNeverMeltIceItemDescription[] = _("A hold item that\nraises the power of\nICE-type moves.");
+const u8 gSpellTagItemDescription[] = _("A hold item that\nraises the power of\nGHOST-type moves.");
+const u8 gTwistedSpoonItemDescription[] = _("A hold item that\nboosts PSYCHIC-\ntype moves.");
+const u8 gCharcoalItemDescription[] = _("A hold item that\nraises the power of\nFIRE-type moves.");
+const u8 gDragonFangItemDescription[] = _("A hold item that\nraises the power of\nDRAGON-type moves.");
+const u8 gSilkScarfItemDescription[] = _("A hold item that\nraises the power of\nNORMAL-type moves.");
+const u8 gUpGradeItemDescription[] = _("A peculiar box made\nby SILPH CO.");
+const u8 gShellBellItemDescription[] = _("A hold item that\nrestores HP upon\nstriking the foe.");
+const u8 gSeaIncenseItemDescription[] = _("A hold item that\nslightly boosts\nWATER-type moves.");
+const u8 gLaxIncenseItemDescription[] = _("A hold item that\nslightly lowers the\nfoe’s accuracy.");
+const u8 gLuckyPunchItemDescription[] = _("A hold item that\nraises CHANSEY’s\ncritical-hit rate.");
+const u8 gMetalPowderItemDescription[] = _("A hold item that\nraises DITTO’s\nDEFENSE.");
+const u8 gThickClubItemDescription[] = _("A hold item that \nraises CUBONE or\nMAROWAK’s ATTACK.");
+const u8 gStickItemDescription[] = _("A hold item that\nraises FARFETCH’D’s\ncritical-hit ratio.");
+const u8 gRedScarfItemDescription[] = _("A hold item that\nraises COOL in\nCONTESTS.");
+const u8 gBlueScarfItemDescription[] = _("A hold item that\nraises BEAUTY in\nCONTESTS.");
+const u8 gPinkScarfItemDescription[] = _("A hold item that\nraises CUTE in\nCONTESTS.");
+const u8 gGreenScarfItemDescription[] = _("A hold item that\nraises SMART in\nCONTESTS.");
+const u8 gYellowScarfItemDescription[] = _("A hold item that\nraises TOUGH in\nCONTESTS.");
+//Key items
+const u8 gMachBikeItemDescription[] = _("A folding bicycle\nthat doubles your\nspeed or better.");
+const u8 gCoinCaseItemDescription[] = _("A case that holds\nup to 9,999 COINS.");
+const u8 gItemfinderItemDescription[] = _("A device that\nsignals an invisible\nitem by sound.");
+const u8 gOldRodItemDescription[] = _("Use by any body of\nwater to fish for\nwild POKéMON.");
+const u8 gGoodRodItemDescription[] = _("A decent fishing\nrod for catching\nwild POKéMON.");
+const u8 gSuperRodItemDescription[] = _("The best fishing\nrod for catching\nwild POKéMON.");
+const u8 gSSTicketItemDescription[] = _("The ticket required\nfor sailing on a\nferry.");
+const u8 gContestPassItemDescription[] = _("The pass required\nfor entering\nPOKéMON CONTESTS.");
+const u8 gWailmerPailItemDescription[] = _("A tool used for\nwatering BERRIES\nand plants.");
+const u8 gDevonGoodsItemDescription[] = _("A package that\ncontains DEVON’s\nmachine parts.");
+const u8 gSootSackItemDescription[] = _("A sack used to\ngather and hold\nvolcanic ash.");
+const u8 gBasementKeyItemDescription[] = _("The key for NEW\nMAUVILLE beneath\nMAUVILLE CITY.");
+const u8 gAcroBikeItemDescription[] = _("A folding bicycle\ncapable of jumps\nand wheelies.");
+const u8 gPokeblockCaseItemDescription[] = _("A case for holding\n{POKEBLOCK}S made with\na BERRY BLENDER.");
+const u8 gLetterItemDescription[] = _("A letter to STEVEN\nfrom the PRESIDENT\nof the DEVON CORP.");
+const u8 gEonTicketItemDescription[] = _("The ticket for a\nferry to a distant\nsouthern island.");
+const u8 gRedOrbItemDescription[] = _("A red, glowing orb\nsaid to contain an\nancient power.");
+const u8 gBlueOrbItemDescription[] = _("A blue, glowing orb\nsaid to contain an\nancient power.");
+const u8 gScannerItemDescription[] = _("A device found\ninside the\nABANDONED SHIP.");
+const u8 gGoGogglesItemDescription[] = _("Nifty goggles that\nprotect eyes from\ndesert sandstorms.");
+const u8 gMeteoriteItemDescription[] = _("A meteorite found\nat METEOR FALLS.");
+const u8 gRoom1KeyItemDescription[] = _("A key that opens a\ndoor inside the\nABANDONED SHIP.");
+const u8 gRoom2KeyItemDescription[] = _("A key that opens a\ndoor inside the\nABANDONED SHIP.");
+const u8 gRoom4KeyItemDescription[] = _("A key that opens a\ndoor inside the\nABANDONED SHIP.");
+const u8 gRoom6KeyItemDescription[] = _("A key that opens a\ndoor inside the\nABANDONED SHIP.");
+const u8 gStorageKeyItemDescription[] = _("The key to the\nstorage inside the\nABANDONED SHIP.");
+const u8 gRootFossilItemDescription[] = _("A fossil of an\nancient, seafloor-\ndwelling POKéMON.");
+const u8 gClawFossilItemDescription[] = _("A fossil of an\nancient, seafloor-\ndwelling POKéMON.");
+const u8 gDevonScopeItemDescription[] = _("A device by DEVON\nthat signals any\nunseeable POKéMON.");
+//TMs/HMs
+const u8 gTM01ItemDescription[] = _("Powerful, but makes\nthe user flinch if\nhit by the foe.");
+const u8 gTM02ItemDescription[] = _("Hooks and slashes\nthe foe with long,\nsharp claws.");
+const u8 gTM03ItemDescription[] = _("Generates an\nultrasonic wave\nthat may confuse.");
+const u8 gTM04ItemDescription[] = _("Raises SP. ATK and\nSP. DEF by focusing\nthe mind.");
+const u8 gTM05ItemDescription[] = _("A savage roar that\nmakes the foe flee \nto end the battle.");
+const u8 gTM06ItemDescription[] = _("Poisons the foe\nwith a toxin that\ngradually worsens.");
+const u8 gTM07ItemDescription[] = _("Creates a hailstorm\nthat damages all\ntypes except ICE.");
+const u8 gTM08ItemDescription[] = _("Bulks up the body\nto boost both\nATTACK & DEFENSE.");
+const u8 gTM09ItemDescription[] = _("Shoots 2 to 5 seeds\nin a row to strike\nthe foe.");
+const u8 gTM10ItemDescription[] = _("The attack power\nvaries among\ndifferent POKéMON.");
+const u8 gTM11ItemDescription[] = _("Raises the power of\nFIRE-type moves\nfor 5 turns.");
+const u8 gTM12ItemDescription[] = _("Enrages the foe so\nit can only use\nattack moves.");
+const u8 gTM13ItemDescription[] = _("Fires an icy cold\nbeam that may\nfreeze the foe.");
+const u8 gTM14ItemDescription[] = _("A brutal snow-and-\nwind attack that\nmay freeze the foe.");
+const u8 gTM15ItemDescription[] = _("Powerful, but needs\nrecharging the\nnext turn.");
+const u8 gTM16ItemDescription[] = _("Creates a wall of\nlight that lowers\nSP. ATK damage.");
+const u8 gTM17ItemDescription[] = _("Negates all damage,\nbut may fail if used\nin succession.");
+const u8 gTM18ItemDescription[] = _("Raises the power of\nWATER-type moves\nfor 5 turns.");
+const u8 gTM19ItemDescription[] = _("Recovers half the\nHP of the damage \nthis move inflicts.");
+const u8 gTM20ItemDescription[] = _("Prevents status\nabnormality with a\nmystical power.");
+const u8 gTM21ItemDescription[] = _("The less the user\nlikes you, the more\npowerful this move.");
+const u8 gTM22ItemDescription[] = _("Absorbs sunlight in\nthe 1st turn, then\nattacks next turn.");
+const u8 gTM23ItemDescription[] = _("Slams the foe with\na hard tail. It may\nlower DEFENSE.");
+const u8 gTM24ItemDescription[] = _("A powerful electric\nattack that may\ncause paralysis.");
+const u8 gTM25ItemDescription[] = _("Strikes the foe\nwith a thunderbolt.\nIt may paralyze.");
+const u8 gTM26ItemDescription[] = _("Causes a quake\nthat has no effect\non flying foes.");
+const u8 gTM27ItemDescription[] = _("The more the user\nlikes you, the more\npowerful this move.");
+const u8 gTM28ItemDescription[] = _("Digs underground\nthe 1st turn, then\nstrikes next turn.");
+const u8 gTM29ItemDescription[] = _("A powerful psychic\nattack that may\nlower SP. DEF.");
+const u8 gTM30ItemDescription[] = _("Hurls a dark lump\nat the foe. It may\nlower SP. DEF.");
+const u8 gTM31ItemDescription[] = _("Destroys barriers\nlike LIGHT SCREEN\nand causes damage.");
+const u8 gTM32ItemDescription[] = _("Creates illusory\ncopies to enhance\nelusiveness.");
+const u8 gTM33ItemDescription[] = _("Creates a wall of\nlight that weakens\nphysical attacks.");
+const u8 gTM34ItemDescription[] = _("Zaps the foe with a\njolt of electricity\nthat never misses.");
+const u8 gTM35ItemDescription[] = _("Looses a stream of\nfire that may burn\nthe foe.");
+const u8 gTM36ItemDescription[] = _("Hurls sludge at the\nfoe. It may poison\nthe foe.");
+const u8 gTM37ItemDescription[] = _("Causes a sandstorm\nthat hits the foe\nover several turns.");
+const u8 gTM38ItemDescription[] = _("A powerful fire\nattack that may\nburn the foe.");
+const u8 gTM39ItemDescription[] = _("Stops the foe from\nmoving with rocks.\nMay lower SPEED.");
+const u8 gTM40ItemDescription[] = _("An extremely fast\nattack that can’t\nbe avoided.");
+const u8 gTM41ItemDescription[] = _("Prevents the foe\nfrom using the same\nmove in a row.");
+const u8 gTM42ItemDescription[] = _("Raises ATTACK when\npoisoned, burned,\nor paralyzed.");
+const u8 gTM43ItemDescription[] = _("Adds an effect to\nattack depending\non the location.");
+const u8 gTM44ItemDescription[] = _("The user sleeps for\n2 turns to restore\nhealth and status.");
+const u8 gTM45ItemDescription[] = _("Makes it tough to\nattack a foe of the\nopposite gender.");
+const u8 gTM46ItemDescription[] = _("While attacking,\nit may steal the\nfoe’s held item.");
+const u8 gTM47ItemDescription[] = _("Spreads hard-\nedged wings and\nslams into the foe.");
+const u8 gTM48ItemDescription[] = _("Switches abilities\nwith the foe on the\nturn this is used.");
+const u8 gTM49ItemDescription[] = _("Steals the effects\nof the move the foe\nis trying to use.");
+const u8 gTM50ItemDescription[] = _("Enables full-power\nattack, but sharply\nlowers SP. ATK.");
+
+const u8 gHM01ItemDescription[] = _("Attacks the foe\nwith sharp blades\nor claws.");
+const u8 gHM02ItemDescription[] = _("Flies up on the\nfirst turn, then\nattacks next turn.");
+const u8 gHM03ItemDescription[] = _("Creates a huge\nwave, then crashes\nit down on the foe.");
+const u8 gHM04ItemDescription[] = _("Builds enormous\npower, then slams\nthe foe.");
+const u8 gHM05ItemDescription[] = _("Looses a powerful\nblast of light that\nreduces accuracy.");
+const u8 gHM06ItemDescription[] = _("A rock-crushingly\ntough attack that\nmay lower DEFENSE.");
+const u8 gHM07ItemDescription[] = _("Attacks the foe\nwith enough power\nto climb waterfalls.");
+const u8 gHM08ItemDescription[] = _("Dives underwater\nthe 1st turn, then\nattacks next turn.");
+//FireRed/LeafGreen key items
+const u8 gOaksParcelItemDescription[] = _("A parcel for PROF.\nOAK from a POKéMON\nMART’s clerk.");
+const u8 gPokeFluteItemDescription[] = _("A sweet-sounding\nflute that awakens\nPOKéMON.");
+const u8 gSecretKeyItemDescription[] = _("The key to the\nCINNABAR ISLAND\nGYM’s entrance.");
+const u8 gBikeVoucherItemDescription[] = _("A voucher for\nobtaining a bicycle\nfrom the BIKE SHOP.");
+const u8 gGoldTeethItemDescription[] = _("Gold dentures lost\nby the SAFARI\nZONE’s WARDEN.");
+const u8 gOldAmberItemDescription[] = _("A stone containing\nthe genes of an\nancient POKéMON.");
+const u8 gCardKeyItemDescription[] = _("A card-type door\nkey used in SILPH\nCO’s office.");
+const u8 gLiftKeyItemDescription[] = _("An elevator key\nused in TEAM\nROCKET’s HIDEOUT.");
+const u8 gHelixFossilItemDescription[] = _("A piece of an\nancient marine\nPOKéMON’s seashell.");
+const u8 gDomeFossilItemDescription[] = _("A piece of an\nancient marine\nPOKéMON’s shell.");
+const u8 gSilphScopeItemDescription[] = _("SILPH CO’s scope\nmakes unseeable\nPOKéMON visible.");
+const u8 gBicycleItemDescription[] = _("A folding bicycle\nthat is faster than\nthe RUNNING SHOES.");
+const u8 gTownMapItemDescription[] = _("Can be viewed\nanytime. Shows your\npresent location.");
+const u8 gVSSeekerItemDescription[] = _("A rechargeable unit\nthat flags battle-\nready TRAINERS.");
+const u8 gFameCheckerItemDescription[] = _("Stores information\non famous people\nfor instant recall.");
+const u8 gTMCaseItemDescription[] = _("A convenient case \nthat holds TMs and\nHMs.");
+const u8 gBerryPouchItemDescription[] = _("A convenient\ncontainer that\nholds BERRIES.");
+const u8 gTeachyTVItemDescription[] = _("A TV set tuned to\nan advice program\nfor TRAINERS.");
+const u8 gTriPassItemDescription[] = _("A pass for ferries\nbetween ONE, TWO,\nand THREE ISLAND.");
+const u8 gRainbowPassItemDescription[] = _("For ferries serving\nVERMILION and the\nSEVII ISLANDS.");
+const u8 gTeaItemDescription[] = _("A thirst-quenching\ntea prepared by an\nold lady.");
+const u8 gMysticTicketItemDescription[] = _("A ticket required\nto board the ship\nto NAVEL ROCK.");
+const u8 gAuroraTicketItemDescription[] = _("A ticket required\nto board the ship\nto BIRTH ISLAND.");
+const u8 gPowderJarItemDescription[] = _("Stores BERRY\nPOWDER made using\na BERRY CRUSHER.");
+const u8 gRubyItemDescription[] = _("An exquisite, red-\nglowing gem that\nsymbolizes passion.");
+const u8 gSapphireItemDescription[] = _("A brilliant blue gem\nthat symbolizes\nhonesty.");
+//Emerald-specific key items
+const u8 gMagmaEmblemItemDescription[] = _("A medal-like item in\nthe same shape as\nTEAM MAGMA’s mark.");
+const u8 gOldSeaMapItemDescription[] = _("A faded sea chart\nthat shows the way\nto a certain island.");
+#endif // POKEEMERALD_DATA_TEXT_ITEM_DESCRIPTIONS_H
diff --git a/include/data2.h b/include/data2.h
index be0f33ab8..d71958201 100644
--- a/include/data2.h
+++ b/include/data2.h
@@ -14,7 +14,9 @@ extern struct MonCoords gTrainerFrontPicCoords[];
extern const u8 gSpeciesNames[][POKEMON_NAME_LENGTH + 1];
extern const u8 gMoveNames[][13];
-extern const u8 gAbilityNames[][13];
-extern const u8 gTypeNames[][7];
+extern struct CompressedSpriteSheet gUnknown_0831C620;
+extern struct CompressedSpritePalette gUnknown_0831C628;
+extern const struct SpriteTemplate gUnknown_0831C688;
+
#endif // GUARD_DATA2_H
diff --git a/include/decoration.h b/include/decoration.h
index c841bbfc1..76b2f2ec4 100644
--- a/include/decoration.h
+++ b/include/decoration.h
@@ -69,5 +69,9 @@ extern EWRAM_DATA u8 gCurDecorationIndex;
void sub_8126968(void);
void sub_8126AD8(u8 taskId);
void sub_8127D38(u16 mapX, u16 mapY, u16 decor);
+void sub_8126B2C(u8 taskId);
+void sub_8127208(u8 taskId);
+void sub_8127250(u8 *dest, u8 decorCat);
+bool8 IsSelectedDecorInThePC(void);
#endif //GUARD_DECORATION_H
diff --git a/include/easy_chat.h b/include/easy_chat.h
index f0ac51c22..541fa6c1b 100644
--- a/include/easy_chat.h
+++ b/include/easy_chat.h
@@ -1,39 +1,16 @@
#ifndef GUARD_EASYCHAT_H
#define GUARD_EASYCHAT_H
-// Taken from Pokeruby, check if it's correct
-enum
-{
- EC_GROUP_POKEMON,
- EC_GROUP_TRAINER,
- EC_GROUP_STATUS,
- EC_GROUP_BATTLE,
- EC_GROUP_GREETINGS,
- EC_GROUP_PEOPLE,
- EC_GROUP_VOICES,
- EC_GROUP_SPEECH,
- EC_GROUP_ENDINGS,
- EC_GROUP_FEELINGS,
- EC_GROUP_CONDITIONS,
- EC_GROUP_ACTIONS,
- EC_GROUP_LIFESTYLE,
- EC_GROUP_HOBBIES,
- EC_GROUP_TIME,
- EC_GROUP_MISC,
- EC_GROUP_ADJECTIVES,
- EC_GROUP_EVENTS,
- EC_GROUP_MOVE_1,
- EC_GROUP_MOVE_2,
- EC_GROUP_TRENDY_SAYING,
- EC_GROUP_POKEMON_2,
-};
-
void InitEasyChatPhrases(void);
void easy_chat_input_maybe(void);
-void CopyEasyChatWord(u8 *dest, u16 word);
+u8 * CopyEasyChatWord(u8 *dest, u16 word);
bool32 sub_811F8D8(u16 word);
void InitializeEasyChatWordArray(u16 *words, u16 length);
void ConvertEasyChatWordsToString(u8 *dest, const u16 *src, u16 length1, u16 length2);
bool8 ECWord_CheckIfOutsideOfValidRange(u16 word);
+u16 sub_811EE38(u16 group);
+u16 sub_811F01C(void);
+bool16 EasyChat_GetNumWordsInGroup(u8);
+u16 sub_811EE90(u16);
#endif // GUARD_EASYCHAT_H
diff --git a/include/event_scripts.h b/include/event_scripts.h
index a54e0e463..c187682b0 100644
--- a/include/event_scripts.h
+++ b/include/event_scripts.h
@@ -22,6 +22,7 @@ extern const u8 EventScript_2713D1[];
extern const u8 EventScript_2766A2[];
extern const u8 EventScript_2766A6[];
+
extern const u8 gTVBravoTrainerText00[];
extern const u8 gTVBravoTrainerText01[];
extern const u8 gTVBravoTrainerText02[];
@@ -380,4 +381,147 @@ extern const u8 SecretBase_RedCave1_Text_274E75[];
extern const u8 SecretBase_RedCave1_Text_2751E1[];
extern const u8 SecretBase_RedCave1_Text_2754F6[];
extern const u8 SecretBase_RedCave1_Text_2758CC[];
+
+extern const u8 BattleFrontier_BattlePyramidEmptySquare_EventScript_252C88[];
+
+//field effects
+extern const u8 FieryPath_EventScript_2908FD[];
+extern const u8 EventScript_290CAE[];
+extern const u8 EventScript_2926F8[];
+extern const u8 Route111_EventScript_2907F0[];
+
+//player pc
+extern const u8 LittlerootTown_BrendansHouse_2F_EventScript_1F863F[];
+extern const u8 LittlerootTown_MaysHouse_2F_EventScript_1F958F[];
+
+//mauville_old_man
+extern const u8 gOtherText_Is[];
+extern const u8 gOtherText_DontYouAgree[];
+extern const u8 gText_SoPretty[];
+extern const u8 gText_SoDarling[];
+extern const u8 gText_SoRelaxed[];
+extern const u8 gText_SoSunny[];
+extern const u8 gText_SoDesirable[];
+extern const u8 gText_SoExciting[];
+extern const u8 gText_SoAmusing[];
+extern const u8 gText_SoMagical[];
+extern const u8 gUnknown_08294313[];
+extern const u8 gUnknown_08294359[];
+extern const u8 gUnknown_08294398[];
+extern const u8 gUnknown_082943DA[];
+extern const u8 gUnknown_0829441C[];
+extern const u8 gUnknown_08294460[];
+extern const u8 gUnknown_082944A0[];
+extern const u8 gUnknown_082944D5[];
+
+
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28E930[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28E947[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28E956[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28E9D7[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28E9EF[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28E9FE[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28EA7D[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28EA98[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28EAA8[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28EB19[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28EB31[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28EB3E[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28EBB5[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28EBCD[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28EBDD[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28EC60[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28EC79[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28EC81[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28ED04[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28ED21[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28ED30[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28EDA1[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28EDB5[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28EDCF[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28EE45[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28EE5D[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28EE6A[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28EEDD[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28EEF1[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28EF01[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28EF73[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28EF95[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28EFAA[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28F045[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28F05A[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28F071[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28F0F3[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28F10D[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28F125[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28F1BE[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28F1D5[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28F1DE[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28F24F[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28F269[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28F277[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28F2FC[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28F314[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28F32A[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28F3AD[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28F3C6[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28F3D2[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28F44B[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28F461[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28F47C[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28F50C[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28F51B[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28F538[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28F5BE[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28F5D1[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28F5F2[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28F678[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28F694[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28F6B4[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28F751[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28F76A[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28F776[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28F7F6[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28F811[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28F822[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28F89C[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28F8AF[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28F8BC[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28F92F[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28F941[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28F949[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28F9D1[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28F9EA[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28F9FD[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28FA81[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28FA99[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28FAA7[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28FB1D[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28FB35[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28FB47[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28FBC4[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28FBD9[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28FBEA[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28FC6B[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28FC85[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28FC98[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28FD1D[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28FD35[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28FD40[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28FDA2[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28FDBD[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28FDCE[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28FE57[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28FE72[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28FE88[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28FF0C[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28FF27[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28FF44[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28FFDD[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_28FFFA[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_29000D[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_290097[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_2900B5[];
+extern const u8 MauvilleCity_PokemonCenter_1F_Text_2900CB[];
+
#endif //GUARD_EVENT_SCRIPTS_H
diff --git a/include/field_camera.h b/include/field_camera.h
index 6daa9a8a2..fcc19ce9a 100644
--- a/include/field_camera.h
+++ b/include/field_camera.h
@@ -6,25 +6,31 @@
struct CameraObject
{
void (*callback)(struct CameraObject *);
- u32 unk4;
+ u32 spriteId;
s32 unk8;
s32 unkC;
s32 x;
s32 y;
};
-extern struct CameraObject gUnknown_03005DD0;
-
// Exported RAM declarations
-
+extern struct CameraObject gUnknown_03005DD0;
extern u16 gUnknown_03005DEC;
extern u16 gUnknown_03005DE8;
// Exported ROM declarations
-
void DrawWholeMapView(void);
void CurrentMapDrawMetatileAt(int x, int y);
void sub_8089C08(s16 *a0, s16 *a1);
void DrawDoorMetatileAt(int x, int y, u16 *arr);
+void move_tilemap_camera_to_upper_left_corner(void);
+void sub_8057A58(void);
+void ResetCameraUpdateInfo(void);
+u32 InitCameraUpdateCallback(u8 a);
+void CameraUpdate(void);
+void SetCameraPanningCallback(void (*a)(void));
+void SetCameraPanning(s16 a, s16 b);
+void InstallCameraPanAheadCallback(void);
+void UpdateCameraPanning(void);
#endif //GUARD_FIELD_CAMERA_H
diff --git a/include/field_control_avatar.h b/include/field_control_avatar.h
new file mode 100644
index 000000000..b915d1419
--- /dev/null
+++ b/include/field_control_avatar.h
@@ -0,0 +1,41 @@
+#ifndef GUARD_FIELDCONTROLAVATAR_H
+#define GUARD_FIELDCONTROLAVATAR_H
+
+struct FieldInput
+{
+ u8 pressedAButton:1;
+ u8 input_field_0_1:1;
+ u8 pressedStartButton:1;
+ u8 pressedSelectButton:1;
+ u8 input_field_0_4:1;
+ u8 input_field_0_5:1;
+ u8 input_field_0_6:1;
+ u8 pressedBButton:1;
+ u8 input_field_1_0:1;
+ u8 input_field_1_1:1;
+ u8 input_field_1_2:1;
+ u8 input_field_1_3:1;
+ u8 input_field_1_4:1;
+ u8 input_field_1_5:1;
+ u8 input_field_1_6:1;
+ u8 input_field_1_7:1;
+ u8 dpadDirection;
+ u8 input_field_3;
+};
+
+void FieldClearPlayerInput(struct FieldInput *pStruct);
+void FieldGetPlayerInput(struct FieldInput *pStruct, u16 keys, u16 heldKeys);
+int sub_809C014(struct FieldInput *pStruct);
+u8 *sub_80682A8(struct MapPosition *, u8, u8);
+void overworld_poison_timer_set(void);
+void prev_quest_postbuffer_cursor_backup_reset(void);
+u8 *sub_8068E24(struct MapPosition *);
+u8 *GetFieldObjectScriptPointerPlayerFacing(void);
+bool8 mapheader_trigger_activate_at__run_now(struct MapPosition *);
+bool8 sub_8068870(u16 a);
+bool8 sub_8068894(void);
+bool8 sub_8068A64(struct MapPosition *, u16);
+u8 sub_8068F18(void);
+bool8 dive_warp(struct MapPosition *position, u16 b);
+
+#endif // GUARD_FIELDCONTROLAVATAR_H
diff --git a/include/field_effect.h b/include/field_effect.h
index 7395270f9..9cd26f6b8 100644
--- a/include/field_effect.h
+++ b/include/field_effect.h
@@ -1,6 +1,14 @@
#ifndef GUARD_FIELD_EFFECTS_H
#define GUARD_FIELD_EFFECTS_H
+#include "task.h"
+
+extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[2];
+extern const struct SpritePalette gNewGameBirchObjectPaletteInfo;
+extern const struct CompressedSpriteSheet gTrainerFrontPicTable[2];
+extern const struct SpriteTemplate gNewGameBirchObjectTemplate;
+extern const struct OamData gNewGameBirchOamAttributes;
+
enum FieldEffectScriptIdx
{
FLDEFF_EXCLAMATION_MARK_ICON_1,
@@ -69,15 +77,157 @@ enum FieldEffectScriptIdx
FLDEFF_USE_TELEPORT
};
-extern u32 gFieldEffectArguments[8];
+extern s32 gFieldEffectArguments[8];
+extern void (*gUnknown_0203CEEC)(void);
+extern bool8 (*gUnknown_03005DB0)(void);
u32 FieldEffectStart(u8);
bool8 FieldEffectActiveListContains(u8 id);
void sub_80B69DC(void);
+u8 AddNewGameBirchObject(s16, s16, u8);
void FieldEffectStop(struct Sprite *sprite, u8 id);
u8 CreateTrainerSprite(u8 trainerSpriteID, s16 x, s16 y, u8 subpriority, u8 *buffer);
-void sub_80B7FC8(void);
+void CreateTeleportFieldEffectTask(void);
void FieldEffectActiveListRemove(u8 id);
void MultiplyInvertedPaletteRGBComponents(u16, u8, u8, u8);
+void FieldEffectActiveListAdd(u8 id);
+void FieldEffectScript_LoadTiles(u8 **script);
+void FieldEffectScript_LoadFadedPalette(u8 **script);
+void FieldEffectScript_LoadPalette(u8 **script);
+void FieldEffectScript_CallNative(u8 **script, u32 *val);
+void FieldEffectFreeTilesIfUnused(u16 tileStart);
+void FieldEffectFreePaletteIfUnused(u8 paletteNum);
+bool8 FieldEffectCmd_loadtiles(u8 **script, u32 *val);
+bool8 FieldEffectCmd_loadfadedpal(u8 **script, u32 *val);
+bool8 FieldEffectCmd_loadpal(u8 **script, u32 *val);
+bool8 FieldEffectCmd_callnative(u8 **script, u32 *val);
+bool8 FieldEffectCmd_end(u8 **script, u32 *val);
+bool8 FieldEffectCmd_loadgfx_callnative(u8 **script, u32 *val);
+bool8 FieldEffectCmd_loadtiles_callnative(u8 **script, u32 *val);
+bool8 FieldEffectCmd_loadfadedpal_callnative(u8 **script, u32 *val);
+
+void PokecenterHealEffect_0(struct Task *);
+void PokecenterHealEffect_1(struct Task *);
+void PokecenterHealEffect_2(struct Task *);
+void PokecenterHealEffect_3(struct Task *);
+
+void HallOfFameRecordEffect_0(struct Task *);
+void HallOfFameRecordEffect_1(struct Task *);
+void HallOfFameRecordEffect_2(struct Task *);
+void HallOfFameRecordEffect_3(struct Task *);
+
+void PokeballGlowEffect_0(struct Sprite *);
+void PokeballGlowEffect_1(struct Sprite *);
+void PokeballGlowEffect_2(struct Sprite *);
+void PokeballGlowEffect_3(struct Sprite *);
+void PokeballGlowEffect_4(struct Sprite *);
+void PokeballGlowEffect_5(struct Sprite *);
+void PokeballGlowEffect_6(struct Sprite *);
+void PokeballGlowEffect_7(struct Sprite *);
+
+bool8 sub_80B6BCC(struct Task *);
+bool8 sub_80B6C74(struct Task *);
+bool8 sub_80B6C90(struct Task *);
+bool8 sub_80B6D04(struct Task *);
+bool8 sub_80B6DBC(struct Task *);
+bool8 sub_80B6DD8(struct Task *);
+bool8 sub_80B6E18(struct Task *);
+
+bool8 sub_80B6EC0(struct Task *);
+bool8 sub_80B6EE0(struct Task *);
+bool8 sub_80B6F50(struct Task *);
+bool8 sub_80B6F74(struct Task *);
+bool8 sub_80B6F84(struct Task *);
+bool8 sub_80B6FA8(struct Task *);
+
+bool8 sub_80B7114(struct Task *);
+bool8 sub_80B7190(struct Task *);
+bool8 sub_80B71D0(struct Task *);
+bool8 sub_80B7230(struct Task *);
+bool8 sub_80B7270(struct Task *);
+bool8 sub_80B72D0(struct Task *);
+bool8 sub_80B72F4(struct Task *);
+
+bool8 sub_80B73D0(struct Task *, struct MapObject *);
+bool8 waterfall_1_do_anim_probably(struct Task *, struct MapObject *);
+bool8 waterfall_2_wait_anim_finish_probably(struct Task *, struct MapObject *);
+bool8 sub_80B7450(struct Task *, struct MapObject *);
+bool8 sub_80B7478(struct Task *, struct MapObject *);
+
+bool8 dive_1_lock(struct Task *);
+bool8 dive_2_unknown(struct Task *);
+bool8 dive_3_unknown(struct Task *);
+
+bool8 sub_80B764C(struct Task *, struct MapObject *, struct Sprite *);
+bool8 sub_80B7684(struct Task *, struct MapObject *, struct Sprite *);
+bool8 sub_80B76B8(struct Task *, struct MapObject *, struct Sprite *);
+bool8 sub_80B7704(struct Task *, struct MapObject *, struct Sprite *);
+bool8 sub_80B77F8(struct Task *, struct MapObject *, struct Sprite *);
+bool8 sub_80B7814(struct Task *, struct MapObject *, struct Sprite *);
+
+bool8 sub_80B78EC(struct Task *, struct MapObject *, struct Sprite *);
+bool8 sub_80B791C(struct Task *, struct MapObject *, struct Sprite *);
+bool8 sub_80B7968(struct Task *, struct MapObject *, struct Sprite *);
+bool8 sub_80B79BC(struct Task *, struct MapObject *, struct Sprite *);
+
+bool8 sub_80B7AE8(struct Task *, struct MapObject *, struct Sprite *);
+bool8 sub_80B7B18(struct Task *, struct MapObject *, struct Sprite *);
+bool8 sub_80B7B94(struct Task *, struct MapObject *, struct Sprite *);
+bool8 sub_80B7BCC(struct Task *, struct MapObject *, struct Sprite *);
+bool8 sub_80B7BF4(struct Task *, struct MapObject *, struct Sprite *);
+
+void sub_80B7D14(struct Task *);
+void sub_80B7D34(struct Task *);
+
+void sub_80B7EC4(struct Task *);
+void sub_80B7EE8(struct Task *);
+
+void sub_80B8280(struct Task *);
+void sub_80B830C(struct Task *);
+void sub_80B8410(struct Task *);
+
+void sub_80B8584(struct Task *);
+void sub_80B85F8(struct Task *);
+void sub_80B8660(struct Task *);
+void sub_80B86EC(struct Task *);
+void sub_80B871C(struct Task *);
+void sub_80B8770(struct Task *);
+void overworld_bg_setup_2(struct Task *);
+
+void sub_80B88E4(struct Task *);
+void sub_80B8920(struct Task *);
+void sub_80B898C(struct Task *);
+void sub_80B89DC(struct Task *);
+void sub_80B8A0C(struct Task *);
+void sub_80B8A44(struct Task *);
+void sub_80B8A64(struct Task *);
+
+void sub_80B8DB4(struct Task *);
+void sub_80B8E14(struct Task *);
+void sub_80B8E60(struct Task *);
+void sub_80B8EA8(struct Task *);
+void sub_80B8F24(struct Task *);
+
+void sub_80B9204(struct Task *);
+void sub_80B925C(struct Task *);
+void sub_80B92A0(struct Task *);
+void sub_80B92F8(struct Task *);
+void sub_80B933C(struct Task *);
+void sub_80B9390(struct Task *);
+void sub_80B9418(struct Task *);
+void sub_80B9474(struct Task *);
+void sub_80B9494(struct Task *);
+
+void sub_80B9804(struct Task *);
+void sub_80B98B8(struct Task *);
+void sub_80B9924(struct Task *);
+void sub_80B9978(struct Task *);
+void sub_80B99F0(struct Task *);
+void sub_80B9A28(struct Task *);
+void sub_80B9A60(struct Task *);
+
+void sub_80B9C28(s16*, u8);
+void sub_80B9C54(s16*, u8);
+void sub_80B9CDC(s16*, u8);
#endif //GUARD_FIELD_EFFECTS_H
diff --git a/include/field_effect_helpers.h b/include/field_effect_helpers.h
index 15928eba3..9e4cca64d 100644
--- a/include/field_effect_helpers.h
+++ b/include/field_effect_helpers.h
@@ -13,5 +13,6 @@
u8 sub_8154228(void);
bool8 sub_8155DA0(struct MapObject *);
void sub_8155D78(struct MapObject *);
+void sub_81555AC(u8, u8);
#endif //GUARD_FIELD_EFFECT_HELPERS_H
diff --git a/include/field_ground_effect.h b/include/field_ground_effect.h
index 63b67ceaf..89b14aed1 100644
--- a/include/field_ground_effect.h
+++ b/include/field_ground_effect.h
@@ -10,6 +10,8 @@
// Exported RAM declarations
// Exported ROM declarations
+u8 ZCoordToPriority(u8);
+void FieldObjectUpdateZCoord(struct MapObject *pObject);
void SetObjectSubpriorityByZCoord(u8, struct Sprite *, u8);
void InitObjectPriorityByZCoord(struct Sprite *, u8);
bool8 IsZCoordMismatchAt(u8, s16, s16);
diff --git a/include/field_map_obj.h b/include/field_map_obj.h
index 198dd9759..1bf3915e1 100644
--- a/include/field_map_obj.h
+++ b/include/field_map_obj.h
@@ -25,6 +25,7 @@ enum SpinnerRunnerFollowPatterns {
// Exported ROM declarations
void sub_808D438(void);
+u8 get_go_image_anim_num(u8);
u8 GetFieldObjectIdByLocalIdAndMap(u8, u8, u8);
bool8 TryGetFieldObjectIdByLocalIdAndMap(u8, u8, u8, u8 *);
u8 GetFieldObjectIdByXY(s16, s16);
@@ -88,6 +89,12 @@ bool8 FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(struct MapObject *ma
u8 FieldObjectCheckIfSpecialAnimFinishedOrInactive(struct MapObject *mapObject);
void sub_808F23C(const struct MapObject *mapObject, u8 movementType);
void sub_808F208(const struct MapObject *mapObject);
+void npc_coords_shift_still(struct MapObject *pObject);
+void FieldObjectMoveDestCoords(struct MapObject *pObject, u32 unk_19, s16 *pInt, s16 *pInt1);
+u8 AddCameraObject(u8 linkedSpriteId);
+void UpdateFieldObjectsForCameraUpdate(s16 x, s16 y);
+u8 GetSimpleGoAnimId(u32);
+u8 sub_8093514(u32);
// Exported data declarations
diff --git a/include/field_map_obj_helpers.h b/include/field_map_obj_helpers.h
index 031c7a8ab..2e9f1d0cc 100644
--- a/include/field_map_obj_helpers.h
+++ b/include/field_map_obj_helpers.h
@@ -27,5 +27,9 @@ void sub_8098044(u8);
void UnfreezeMapObjects(void);
void FreezeMapObjectsExceptOne(u8 mapObjectId);
void sub_8097B78(u8, u8);
+void sub_8098074(u8 var1, u8 var2);
+void FreezeMapObjects(void);
+bool8 FreezeMapObject(struct MapObject *mapObject);
+
#endif //GUARD_FIELD_MAP_OBJ_HELPERS_H
diff --git a/include/field_player_avatar.h b/include/field_player_avatar.h
index af602245b..0b9ea385c 100644
--- a/include/field_player_avatar.h
+++ b/include/field_player_avatar.h
@@ -1,10 +1,12 @@
#ifndef GUARD_FIELD_PLAYER_AVATAR_H
#define GUARD_FIELD_PLAYER_AVATAR_H
+void player_step(u8 a, u16 b, u16 c);
void ClearPlayerAvatarInfo(void);
void SetPlayerAvatarExtraStateTransition(u8, u8);
u8 GetPlayerAvatarGenderByGraphicsId(u8);
bool8 TestPlayerAvatarFlags(u8);
+u8 GetPlayerAvatarObjectId(void);
void PlayerGetDestCoords(s16 *, s16 *);
u8 player_get_direction_lower_nybble(void);
u8 player_get_direction_upper_nybble(void);
@@ -31,9 +33,16 @@ 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 InitPlayerAvatar(s16 a, s16 b, u8 c, u8 d);
+void sub_808B864(void);
+void sub_808BCF4(void);
void sub_808D074(u8);
void GetXYCoordsOneStepInFrontOfPlayer(s16 *xPtr, s16 *yPtr);
u8 GetRivalAvatarGraphicsIdByStateIdAndGender(u8, u8);
+void sub_808C114(void);
+u8 GetPlayerAvatarGraphicsIdByCurrentState(void);
+void SetPlayerAvatarStateMask(u8 a);
+u8 GetPlayerAvatarGraphicsIdByStateId(u8 a);
+u8 sub_8093540(u32);
-#endif //GUARD_FIELD_PLAYER_AVATAR_H
+#endif // GUARD_FIELD_PLAYER_AVATAR_H
diff --git a/include/field_screen.h b/include/field_screen.h
index 5d6240f8b..d9a2bb5fa 100644
--- a/include/field_screen.h
+++ b/include/field_screen.h
@@ -7,9 +7,12 @@
// Exported ROM declarations
void pal_fill_black(void);
-bool8 sub_80ABDFC(void);
+bool8 IsWeatherNotFadingIn(void);
void sub_80AF168(void);
void sub_80AF2B4(u8 taskId);
void UpdateWeatherPerDay(u16 days);
+void sub_80AC3D0(void);
+void sub_80AC3E4(void);
+void PreservePaletteInWeather(u8);
#endif //GUARD_FIELD_SCREEN_H
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/fieldmap.h b/include/fieldmap.h
index 06cb7cc77..699595580 100644
--- a/include/fieldmap.h
+++ b/include/fieldmap.h
@@ -1,19 +1,35 @@
#ifndef GUARD_FIELDMAP_H
#define GUARD_FIELDMAP_H
-extern struct MapCoords {
- int width;
- int height;
-} gUnknown_03005DC0;
+extern struct BackupMapData gUnknown_03005DC0;
u32 MapGridGetMetatileIdAt(int, int);
u32 MapGridGetMetatileBehaviorAt(int, int);
void MapGridSetMetatileIdAt(int, int, u16);
void MapGridSetMetatileEntryAt(int, int, u16);
void GetCameraCoords(u16*, u16*);
-bool8 MapGridIsImpassableAt(s16, s16);
-s32 GetMapBorderIdAt(s16, s16);
-bool32 CanCameraMoveInDirection(u8);
+bool8 MapGridIsImpassableAt(int, int);
+int GetMapBorderIdAt(int x, int y);
+int CanCameraMoveInDirection(int direction);
u16 GetBehaviorByMetatileId(u16 metatileId);
+void sav1_camera_get_focus_coords(u16 *x, u16 *y);
+u8 MapGridGetMetatileLayerTypeAt(s32 x, s32 y);
+u8 CameraMove(s32 deltaX, s32 deltaY);
+void mapheader_copy_mapdata_with_padding(struct MapHeader *mapHeader);
+void map_copy_with_padding(u16 *map, u16 width, u16 height);
+void mapheader_copy_mapdata_of_adjacent_maps(struct MapHeader *);
+void fillSouthConnection(struct MapHeader const *, struct MapHeader const *, s32);
+void fillNorthConnection(struct MapHeader const *, struct MapHeader const *, s32);
+void fillWestConnection(struct MapHeader const *, struct MapHeader const *, s32);
+void fillEastConnection(struct MapHeader const *, struct MapHeader const *, s32);
+void mapdata_from_sav2(void);
+bool8 sub_8088BF0(u16*, u16, u8);
+struct MapConnection *sub_8088950(u8 direction, int x, int y);
+bool8 sub_80889A8(u8 direction, int x, int y, struct MapConnection *connection);
+bool8 sub_8088A0C(int x, int src_width, int dest_width, int offset);
+
+void SpriteCB_PokeballGlow(struct Sprite *);
+void SpriteCB_PokecenterMonitor(struct Sprite *);
+void SpriteCB_HallOfFameMonitor(struct Sprite *);
#endif //GUARD_FIELDMAP_H
diff --git a/include/fldeff_80F9BCC.h b/include/fldeff_80F9BCC.h
index a210b8545..4169e328d 100644
--- a/include/fldeff_80F9BCC.h
+++ b/include/fldeff_80F9BCC.h
@@ -12,5 +12,6 @@ void sub_80FA794(s16 x, s16 y);
void sub_80FB00C(void);
void sub_80FB074(void);
void overworld_poison_effect(void);
+bool8 sub_80FADE4(u16, u8);
#endif //GUARD_FLDEFF_80F9BCC_H
diff --git a/include/fldeff_cut.h b/include/fldeff_cut.h
new file mode 100644
index 000000000..f985fd82d
--- /dev/null
+++ b/include/fldeff_cut.h
@@ -0,0 +1,7 @@
+#ifndef GUARD_FLDEFF_CUT_H
+#define GUARD_FLDEFF_CUT_H
+
+void sub_80D423C(s16, s16);
+void sub_80D42B8(s16, s16);
+
+#endif // GUARD_FLDEFF_CUT_H
diff --git a/include/fldeff_groundshake.h b/include/fldeff_groundshake.h
new file mode 100644
index 000000000..c1629f9bd
--- /dev/null
+++ b/include/fldeff_groundshake.h
@@ -0,0 +1,6 @@
+#ifndef GUARD_FLDEFF_GROUNDSHAKE_H
+#define GUARD_FLDEFF_GROUNDSHAKE_H
+
+void sub_81BE72C(void);
+
+#endif // GUARD_FLDEFF_GROUNDSHAKE_H
diff --git a/include/gba/io_reg.h b/include/gba/io_reg.h
index 0364c38bc..03fe505b5 100644
--- a/include/gba/io_reg.h
+++ b/include/gba/io_reg.h
@@ -501,23 +501,24 @@
// I/O register fields
// DISPCNT
-#define DISPCNT_MODE_0 0x0000 // BG0: text, BG1: text, BG2: text, BG3: text
-#define DISPCNT_MODE_1 0x0001 // BG0: text, BG1: text, BG2: affine, BG3: off
-#define DISPCNT_MODE_2 0x0002 // BG0: off, BG1: off, BG2: affine, BG3: affine
-#define DISPCNT_MODE_3 0x0003 // Bitmap mode, 240x160, BGR555 color
-#define DISPCNT_MODE_4 0x0004 // Bitmap mode, 240x160, 256 color palette
-#define DISPCNT_MODE_5 0x0005 // Bitmap mode, 160x128, BGR555 color
-#define DISPCNT_OBJ_1D_MAP 0x0040
-#define DISPCNT_FORCED_BLANK 0x0080
-#define DISPCNT_BG0_ON 0x0100
-#define DISPCNT_BG1_ON 0x0200
-#define DISPCNT_BG2_ON 0x0400
-#define DISPCNT_BG3_ON 0x0800
-#define DISPCNT_BG_ALL_ON 0x0F00
-#define DISPCNT_OBJ_ON 0x1000
-#define DISPCNT_WIN0_ON 0x2000
-#define DISPCNT_WIN1_ON 0x4000
-#define DISPCNT_OBJWIN_ON 0x8000
+#define DISPCNT_MODE_0 0x0000 // BG0: text, BG1: text, BG2: text, BG3: text
+#define DISPCNT_MODE_1 0x0001 // BG0: text, BG1: text, BG2: affine, BG3: off
+#define DISPCNT_MODE_2 0x0002 // BG0: off, BG1: off, BG2: affine, BG3: affine
+#define DISPCNT_MODE_3 0x0003 // Bitmap mode, 240x160, BGR555 color
+#define DISPCNT_MODE_4 0x0004 // Bitmap mode, 240x160, 256 color palette
+#define DISPCNT_MODE_5 0x0005 // Bitmap mode, 160x128, BGR555 color
+#define DISPCNT_HBLANK_INTERVAL 0x0020 // Allow access to OAM during H-Blank
+#define DISPCNT_OBJ_1D_MAP 0x0040
+#define DISPCNT_FORCED_BLANK 0x0080
+#define DISPCNT_BG0_ON 0x0100
+#define DISPCNT_BG1_ON 0x0200
+#define DISPCNT_BG2_ON 0x0400
+#define DISPCNT_BG3_ON 0x0800
+#define DISPCNT_BG_ALL_ON 0x0F00
+#define DISPCNT_OBJ_ON 0x1000
+#define DISPCNT_WIN0_ON 0x2000
+#define DISPCNT_WIN1_ON 0x4000
+#define DISPCNT_OBJWIN_ON 0x8000
// DISPSTAT
#define DISPSTAT_VBLANK 0x0001 // in V-Blank
diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h
index b12febefd..94127c554 100644
--- a/include/global.fieldmap.h
+++ b/include/global.fieldmap.h
@@ -162,10 +162,10 @@ struct MapConnections
struct MapHeader
{
- /* 0x00 */ struct MapData *mapData;
- /* 0x04 */ struct MapEvents *events;
- /* 0x08 */ u8 *mapScripts;
- /* 0x0C */ struct MapConnections *connections;
+ /* 0x00 */ const struct MapData *mapData;
+ /* 0x04 */ const struct MapEvents *events;
+ /* 0x08 */ const u8 *mapScripts;
+ /* 0x0C */ const struct MapConnections *connections;
/* 0x10 */ u16 music;
/* 0x12 */ u16 mapDataId;
/* 0x14 */ u8 regionMapSectionId;
diff --git a/include/global.h b/include/global.h
index 308fb4d42..a117a6391 100644
--- a/include/global.h
+++ b/include/global.h
@@ -11,9 +11,10 @@
// to help in decompiling
#define asm_comment(x) asm volatile("@ -- " x " -- ")
#define asm_unified(x) asm(".syntax unified\n" x "\n.syntax divided")
+#define NAKED __attribute__((naked))
// IDE support
-#if defined (__APPLE__) || defined (__CYGWIN__)
+#if defined (__APPLE__) || defined (__CYGWIN__) || defined (_MSC_VER)
#define _(x) x
#define __(x) x
#define INCBIN_U8 {0}
@@ -22,7 +23,7 @@
#define INCBIN_S8 {0}
#define INCBIN_S16 {0}
#define INCBIN_S32 {0}
-#endif // __APPLE__
+#endif // IDE support
#define ARRAY_COUNT(array) (size_t)(sizeof(array) / sizeof((array)[0]))
@@ -34,10 +35,13 @@
// Converts a number to Q4.12 fixed-point format
#define Q_4_12(n) ((s16)((n) * 4096))
-#define PARTY_SIZE 6
+// Converts a Q8.8 fixed-point format number to a regular integer
+#define Q_8_8_TO_INT(n) ((int)((n) / 256))
-#define POKEMON_NAME_LENGTH 10
-#define OT_NAME_LENGTH 7
+// Converts a Q4.12 fixed-point format number to a regular integer
+#define Q_4_12_TO_INT(n) ((int)((n) / 4096))
+
+#define PARTY_SIZE 6
#define min(a, b) ((a) < (b) ? (a) : (b))
#define max(a, b) ((a) >= (b) ? (a) : (b))
@@ -87,8 +91,34 @@ enum LanguageId
LANGUAGE_SPANISH = 7,
};
+#define GAME_VERSION (VERSION_EMERALD)
#define GAME_LANGUAGE (LANGUAGE_ENGLISH)
+// capacities of various saveblock objects
+#define DAYCARE_MON_COUNT 2
+#define POKEBLOCKS_COUNT 40
+#define MAP_OBJECTS_COUNT 16
+#define BERRY_TREES_COUNT 128
+#define FLAGS_COUNT 300
+#define VARS_COUNT 256
+#define MAIL_COUNT 16
+#define SECRET_BASES_COUNT 20
+#define PC_ITEMS_COUNT 50
+#define BAG_ITEMS_COUNT 30
+#define BAG_KEYITEMS_COUNT 30
+#define BAG_POKEBALLS_COUNT 16
+#define BAG_TMHM_COUNT 64
+#define BAG_BERRIES_COUNT 46
+
+#define PYRAMID_BAG_ITEMS_COUNT 10
+
+// string lengths
+#define ITEM_NAME_LENGTH 14
+#define POKEMON_NAME_LENGTH 10
+#define OT_NAME_LENGTH 7
+#define PLAYER_NAME_LENGTH 8
+#define MAIL_WORDS_COUNT 9
+
enum
{
MALE,
@@ -121,15 +151,6 @@ enum
OPTIONS_BATTLE_STYLE_SET
};
-enum
-{
- BAG_ITEMS = 1,
- BAG_POKEBALLS,
- BAG_TMsHMs,
- BAG_BERRIES,
- BAG_KEYITEMS
-};
-
struct Coords16
{
s16 x;
@@ -142,6 +163,18 @@ struct UCoords16
u16 y;
};
+struct Coords32
+{
+ s32 x;
+ s32 y;
+};
+
+struct UCoords32
+{
+ u32 x;
+ u32 y;
+};
+
struct Time
{
/*0x00*/ s16 days;
@@ -189,11 +222,11 @@ struct BerryPickingResults // possibly used in the game itself? Size may be wron
u8 field_F;
};
+// two arrays for lvl50 and open level
struct PyramidBag
{
- u16 items_Lvl50[10];
- u16 items_OpenLvl[10];
- u8 quantity[10];
+ u16 itemId[2][PYRAMID_BAG_ITEMS_COUNT];
+ u8 quantity[2][PYRAMID_BAG_ITEMS_COUNT];
};
struct BerryCrush
@@ -203,8 +236,6 @@ struct BerryCrush
u32 unk;
};
-#define PLAYER_NAME_LENGTH 8
-
struct UnknownSaveBlock2Struct
{
u8 field_0;
@@ -284,7 +315,7 @@ struct SaveBlock2
/*0xE1A*/ u16 battlePyramidFloor; // possibly?
/*0xE1C*/ u8 field_E1C[16];
/*0xE2C*/ struct PyramidBag pyramidBag;
- /*0x???*/ u8 field_notSure[13];
+ /*0x???*/ u8 field_unkown[6];
/*0xE6E*/ u16 battleTentWinStreak;
/*0xE70*/ u8 field_E70[72];
/*0xEB8*/ u16 frontierBattlePoints;
@@ -398,8 +429,6 @@ struct EasyChatPair
u16 words[2];
}; /*size = 0x8*/
-#define MAIL_WORDS_COUNT 9
-
struct MailStruct
{
/*0x00*/ u16 words[MAIL_WORDS_COUNT];
@@ -409,41 +438,68 @@ struct MailStruct
/*0x20*/ u16 itemId;
};
-struct UnkMauvilleOldManStruct
+struct MauvilleManCommon
+{
+ u8 id;
+};
+
+struct MauvilleManBard
{
- u8 unk_2D94;
- u8 unk_2D95;
- /*0x2D96*/ u16 mauvilleOldMan_ecArray[6];
- /*0x2DA2*/ u16 mauvilleOldMan_ecArray2[6];
- /*0x2DAE*/ u8 playerName[8];
- /*0x2DB6*/ u8 filler_2DB6[0x3];
- /*0x2DB9*/ u8 playerTrainerId[4];
- u8 unk_2DBD;
+ /*0x00*/ u8 id;
+ /*0x02*/ u16 songLyrics[6];
+ /*0x0E*/ u16 temporaryLyrics[6];
+ /*0x1A*/ u8 playerName[8];
+ /*0x22*/ u8 filler_2DB6[0x3];
+ /*0x25*/ u8 playerTrainerId[4];
+ /*0x29*/ bool8 hasChangedSong;
+ /*0x2A*/ u8 language;
}; /*size = 0x2C*/
-struct UnkMauvilleOldManStruct2
+struct MauvilleManStoryteller
{
- u8 filler0;
- u8 unk1;
- u8 unk2;
- u16 mauvilleOldMan_ecArray[10];
- u8 mauvilleOldMan_ecArray2[12];
- u8 fillerF[0x2];
+ u8 id;
+ bool8 alreadyRecorded;
+ u8 filler2[2];
+ u8 gameStatIDs[4];
+ u8 trainerNames[4][7];
+ u8 statValues[4][4];
+ u8 language[4];
+};
+
+struct MauvilleManGiddy
+{
+ /*0x00*/ u8 id;
+ /*0x01*/ u8 taleCounter;
+ /*0x02*/ u8 questionNum;
+ /*0x04*/ u16 randomWords[10];
+ /*0x18*/ u8 questionList[8];
+ /*0x20*/ u8 language;
}; /*size = 0x2C*/
+struct MauvilleManHipster
+{
+ u8 id;
+ bool8 alreadySpoken;
+ u8 language;
+};
+
struct MauvilleOldManTrader
{
- u8 unk0;
- u8 unk1[4];
- u8 unk5[4][11];
- u8 unk31;
+ u8 id;
+ u8 decorIds[4];
+ u8 playerNames[4][11];
+ u8 alreadyTraded;
+ u8 language[4];
};
typedef union OldMan
{
- struct UnkMauvilleOldManStruct oldMan1;
- struct UnkMauvilleOldManStruct2 oldMan2;
+ struct MauvilleManCommon common;
+ struct MauvilleManBard bard;
+ struct MauvilleManGiddy giddy;
+ struct MauvilleManHipster hipster;
struct MauvilleOldManTrader trader;
+ struct MauvilleManStoryteller storyteller;
u8 filler[0x40];
} OldMan;
@@ -461,6 +517,8 @@ struct RecordMixing_UnknownStruct
u16 unk74[0x2];
};
+#define LINK_B_RECORDS_COUNT 5
+
struct LinkBattleRecord
{
u8 name[8];
@@ -470,6 +528,12 @@ struct LinkBattleRecord
u16 draws;
};
+struct LinkBattleRecords
+{
+ struct LinkBattleRecord entries[LINK_B_RECORDS_COUNT];
+ u8 languages[LINK_B_RECORDS_COUNT];
+};
+
struct RecordMixingGiftData
{
u8 unk0;
@@ -511,8 +575,6 @@ struct DaycareMon
u32 steps;
};
-#define DAYCARE_MON_COUNT 2
-
struct DayCare
{
struct DaycareMon mons[DAYCARE_MON_COUNT];
@@ -533,13 +595,6 @@ struct RecordMixingDayCareMail
bool16 holdsItem[DAYCARE_MON_COUNT];
};
-#define POKEBLOCKS_COUNT 40
-#define MAP_OBJECTS_COUNT 16
-#define BERRY_TREES_COUNT 128
-#define FLAGS_COUNT 300
-#define VARS_COUNT 256
-#define MAIL_COUNT 16
-
enum
{
LILYCOVE_LADY_QUIZ,
@@ -607,31 +662,36 @@ struct WaldaPhrase
bool8 patternUnlocked;
};
+struct UnkSaveSubstruct_3b98 {
+ u32 trainerId;
+ u8 trainerName[8];
+};
+
struct SaveBlock1
{
/*0x00*/ struct Coords16 pos;
/*0x04*/ struct WarpData location;
/*0x0C*/ struct WarpData warp1;
/*0x14*/ struct WarpData warp2;
- /*0x1C*/ struct WarpData warp3;
+ /*0x1C*/ struct WarpData lastHealLocation;
/*0x24*/ struct WarpData warp4;
- /*0x2C*/ u16 battleMusic;
+ /*0x2C*/ u16 savedMusic;
/*0x2E*/ u8 weather;
/*0x2F*/ u8 filler_2F;
- /*0x30*/ u8 flashUsed;
+ /*0x30*/ u8 flashLevel;
/*0x32*/ u16 mapDataId;
/*0x34*/ u16 mapView[0x100];
/*0x234*/ u8 playerPartyCount;
- /*0x238*/ struct Pokemon playerParty[6];
+ /*0x238*/ struct Pokemon playerParty[PARTY_SIZE];
/*0x490*/ u32 money;
/*0x494*/ u16 coins;
/*0x496*/ u16 registeredItem; // registered for use with SELECT button
- /*0x498*/ struct ItemSlot pcItems[50];
- /*0x560*/ struct ItemSlot bagPocket_Items[30];
- /*0x5D8*/ struct ItemSlot bagPocket_KeyItems[30];
- /*0x650*/ struct ItemSlot bagPocket_PokeBalls[16];
- /*0x690*/ struct ItemSlot bagPocket_TMHM[64];
- /*0x790*/ struct ItemSlot bagPocket_Berries[46];
+ /*0x498*/ struct ItemSlot pcItems[PC_ITEMS_COUNT];
+ /*0x560*/ struct ItemSlot bagPocket_Items[BAG_ITEMS_COUNT];
+ /*0x5D8*/ struct ItemSlot bagPocket_KeyItems[BAG_KEYITEMS_COUNT];
+ /*0x650*/ struct ItemSlot bagPocket_PokeBalls[BAG_POKEBALLS_COUNT];
+ /*0x690*/ struct ItemSlot bagPocket_TMHM[BAG_TMHM_COUNT];
+ /*0x790*/ struct ItemSlot bagPocket_Berries[BAG_BERRIES_COUNT];
/*0x848*/ struct Pokeblock pokeblocks[POKEBLOCKS_COUNT];
/*0x988*/ u8 seen1[52];
/*0x9BC*/ u16 berryBlenderRecords[3];
@@ -644,7 +704,7 @@ struct SaveBlock1
/*0x139C*/ u16 vars[VARS_COUNT];
/*0x159C*/ u32 gameStats[NUM_GAME_STATS];
/*0x169C*/ struct BerryTree berryTrees[BERRY_TREES_COUNT];
- /*0x1A9C*/ struct SecretBaseRecord secretBases[20];
+ /*0x1A9C*/ struct SecretBaseRecord secretBases[SECRET_BASES_COUNT];
/*0x271C*/ u8 playerRoomDecor[12];
/*0x2728*/ u8 playerRoomDecorPos[12];
/*0x2734*/ u8 decorDesk[10];
@@ -680,9 +740,7 @@ struct SaveBlock1
/*0x2e64*/ struct EasyChatPair easyChatPairs[5]; //Dewford trend [0] and some other stuff
/*0x2e90*/ struct ContestWinner contestWinners[13]; // 0 - 5 used in contest hall, 6 - 7 unused?, 8 - 12 museum
/*0x3030*/ struct DayCare daycare;
- /*0x3150*/ struct LinkBattleRecord linkBattleRecords[5];
- /*0x31A0*/ u8 unk_31A0;
- /*0x31A1*/ u8 filler_31A1[7];
+ /*0x3150*/ struct LinkBattleRecords linkBattleRecords;
/*0x31A8*/ u8 giftRibbons[52];
/*0x31DC*/ struct Roamer roamer;
/*0x31F8*/ struct EnigmaBerry enigmaBerry;
@@ -691,13 +749,32 @@ struct SaveBlock1
/*0x3B14*/ struct RecordMixingGift recordMixingGift;
/*0x3B24*/ u8 seen2[52];
/*0x3B58*/ LilycoveLady lilycoveLady;
- /*0x3B98*/ u8 filler_3B88[0x1D8];
+ /*0x3B88*/ u8 filler_3B88[0x10];
+ /*0x3B98*/ struct UnkSaveSubstruct_3b98 unk_3B98[20];
+ /*0x3C88*/ u8 filler_3C88[0xE8];
/*0x3D70*/ struct WaldaPhrase waldaPhrase;
// sizeof: 0x3D88
};
extern struct SaveBlock1* gSaveBlock1Ptr;
+struct MapPosition
+{
+ s16 x;
+ s16 y;
+ u8 height;
+};
+
+struct UnkStruct_8054FF8
+{
+ u8 a;
+ u8 b;
+ u8 c;
+ u8 d;
+ struct MapPosition sub;
+ u16 field_C;
+};
+
struct Bitmap // TODO: Find a better spot for this
{
u8* pixels;
diff --git a/include/global.tv.h b/include/global.tv.h
index 5f65aa8e0..81f181cf3 100644
--- a/include/global.tv.h
+++ b/include/global.tv.h
@@ -188,11 +188,11 @@ typedef union // size = 0x24
struct {
/*0x00*/ u8 kind;
/*0x01*/ bool8 active;
- /*0x02*/ u16 species;
+ /*0x02*/ u16 speciesOpponent;
/*0x04*/ u8 playerName[8];
/*0x0C*/ u8 linkOpponentName[8];
/*0x14*/ u16 move;
- /*0x16*/ u16 species2;
+ /*0x16*/ u16 speciesPlayer;
/*0x18*/ u8 battleType;
/*0x19*/ u8 language;
/*0x1A*/ u8 linkOpponentLanguage;
diff --git a/include/graphics.h b/include/graphics.h
index 39662c8c1..3feed6d08 100644
--- a/include/graphics.h
+++ b/include/graphics.h
@@ -2713,10 +2713,654 @@ extern const u8 gRaySceneHushBg_Pal[];
extern const u8 gRaySceneHushBg_Gfx[];
extern const u8 gRaySceneHushRing_Gfx[];
+// Item icons
+extern const u8 gItemIcon_QuestionMark[];
+extern const u8 gItemIconPalette_QuestionMark[];
+// Pokeballs
+extern const u8 gItemIcon_MasterBall[];
+extern const u8 gItemIconPalette_MasterBall[];
+extern const u8 gItemIcon_UltraBall[];
+extern const u8 gItemIconPalette_UltraBall[];
+extern const u8 gItemIcon_GreatBall[];
+extern const u8 gItemIconPalette_GreatBall[];
+extern const u8 gItemIcon_PokeBall[];
+extern const u8 gItemIconPalette_PokeBall[];
+extern const u8 gItemIcon_SafariBall[];
+extern const u8 gItemIconPalette_SafariBall[];
+extern const u8 gItemIcon_NetBall[];
+extern const u8 gItemIconPalette_NetBall[];
+extern const u8 gItemIcon_DiveBall[];
+extern const u8 gItemIconPalette_DiveBall[];
+extern const u8 gItemIcon_NestBall[];
+extern const u8 gItemIconPalette_NestBall[];
+extern const u8 gItemIcon_RepeatBall[];
+extern const u8 gItemIconPalette_RepeatBall[];
+extern const u8 gItemIcon_TimerBall[];
+extern const u8 gItemIcon_LuxuryBall[];
+extern const u8 gItemIconPalette_LuxuryBall[];
+extern const u8 gItemIcon_PremierBall[];
+// Medicine
+extern const u8 gItemIcon_Potion[];
+extern const u8 gItemIconPalette_Potion[];
+extern const u8 gItemIcon_Antidote[];
+extern const u8 gItemIconPalette_Antidote[];
+extern const u8 gItemIcon_StatusHeal[];
+extern const u8 gItemIconPalette_BurnHeal[];
+extern const u8 gItemIconPalette_IceHeal[];
+extern const u8 gItemIconPalette_Awakening[];
+extern const u8 gItemIconPalette_ParalyzeHeal[];
+extern const u8 gItemIcon_LargePotion[];
+extern const u8 gItemIconPalette_FullRestore[];
+extern const u8 gItemIconPalette_MaxPotion[];
+extern const u8 gItemIconPalette_HyperPotion[];
+extern const u8 gItemIconPalette_SuperPotion[];
+extern const u8 gItemIcon_FullHeal[];
+extern const u8 gItemIconPalette_FullHeal[];
+extern const u8 gItemIcon_Revive[];
+extern const u8 gItemIconPalette_Revive[];
+extern const u8 gItemIcon_MaxRevive[];
+extern const u8 gItemIcon_FreshWater[];
+extern const u8 gItemIconPalette_FreshWater[];
+extern const u8 gItemIcon_SodaPop[];
+extern const u8 gItemIconPalette_SodaPop[];
+extern const u8 gItemIcon_Lemonade[];
+extern const u8 gItemIconPalette_Lemonade[];
+extern const u8 gItemIcon_MoomooMilk[];
+extern const u8 gItemIconPalette_MoomooMilk[];
+extern const u8 gItemIcon_Powder[];
+extern const u8 gItemIconPalette_EnergyPowder[];
+extern const u8 gItemIcon_EnergyRoot[];
+extern const u8 gItemIconPalette_EnergyRoot[];
+extern const u8 gItemIconPalette_HealPowder[];
+extern const u8 gItemIcon_RevivalHerb[];
+extern const u8 gItemIconPalette_RevivalHerb[];
+extern const u8 gItemIcon_Ether[];
+extern const u8 gItemIconPalette_Ether[];
+extern const u8 gItemIconPalette_MaxEther[];
+extern const u8 gItemIconPalette_Elixir[];
+extern const u8 gItemIconPalette_MaxElixir[];
+extern const u8 gItemIcon_LavaCookie[];
+extern const u8 gItemIconPalette_LavaCookieAndLetter[];
+extern const u8 gItemIcon_Flute[];
+extern const u8 gItemIconPalette_BlueFlute[];
+extern const u8 gItemIconPalette_YellowFlute[];
+extern const u8 gItemIconPalette_RedFlute[];
+extern const u8 gItemIconPalette_BlackFlute[];
+extern const u8 gItemIconPalette_WhiteFlute[];
+extern const u8 gItemIcon_BerryJuice[];
+extern const u8 gItemIconPalette_BerryJuice[];
+extern const u8 gItemIcon_SacredAsh[];
+extern const u8 gItemIconPalette_SacredAsh[];
+// Collectibles
+extern const u8 gItemIconPalette_ShoalSalt[];
+extern const u8 gItemIcon_ShoalShell[];
+extern const u8 gItemIconPalette_Shell[];
+extern const u8 gItemIcon_Shard[];
+extern const u8 gItemIconPalette_RedShard[];
+extern const u8 gItemIconPalette_BlueShard[];
+extern const u8 gItemIconPalette_YellowShard[];
+extern const u8 gItemIconPalette_GreenShard[];
+// Vitamins
+extern const u8 gItemIcon_HPUp[];
+extern const u8 gItemIconPalette_HPUp[];
+extern const u8 gItemIcon_Vitamin[];
+extern const u8 gItemIconPalette_Protein[];
+extern const u8 gItemIconPalette_Iron[];
+extern const u8 gItemIconPalette_Carbos[];
+extern const u8 gItemIconPalette_Calcium[];
+extern const u8 gItemIcon_RareCandy[];
+extern const u8 gItemIconPalette_RareCandy[];
+extern const u8 gItemIcon_PPUp[];
+extern const u8 gItemIconPalette_PPUp[];
+extern const u8 gItemIconPalette_Zinc[];
+extern const u8 gItemIcon_PPMax[];
+extern const u8 gItemIconPalette_PPMax[];
+// Battle items
+extern const u8 gItemIcon_BattleStatItem[];
+extern const u8 gItemIconPalette_GuardSpec[];
+extern const u8 gItemIconPalette_DireHit[];
+extern const u8 gItemIconPalette_XAttack[];
+extern const u8 gItemIconPalette_XDefend[];
+extern const u8 gItemIconPalette_XSpeed[];
+extern const u8 gItemIconPalette_XAccuracy[];
+extern const u8 gItemIconPalette_XSpecial[];
+extern const u8 gItemIcon_PokeDoll[];
+extern const u8 gItemIconPalette_PokeDoll[];
+extern const u8 gItemIcon_FluffyTail[];
+extern const u8 gItemIconPalette_FluffyTail[];
+// Field items
+extern const u8 gItemIcon_Repel[];
+extern const u8 gItemIconPalette_SuperRepel[];
+extern const u8 gItemIconPalette_MaxRepel[];
+extern const u8 gItemIcon_EscapeRope[];
+extern const u8 gItemIconPalette_EscapeRope[];
+extern const u8 gItemIcon_Repel[];
+extern const u8 gItemIconPalette_Repel[];
+// Evolution stones
+extern const u8 gItemIcon_SunStone[];
+extern const u8 gItemIconPalette_SunStone[];
+extern const u8 gItemIcon_MoonStone[];
+extern const u8 gItemIconPalette_MoonStone[];
+extern const u8 gItemIcon_FireStone[];
+extern const u8 gItemIconPalette_FireStone[];
+extern const u8 gItemIcon_ThunderStone[];
+extern const u8 gItemIconPalette_ThunderStone[];
+extern const u8 gItemIcon_WaterStone[];
+extern const u8 gItemIconPalette_WaterStone[];
+extern const u8 gItemIcon_LeafStone[];
+extern const u8 gItemIconPalette_LeafStone[];
+// Valuables
+extern const u8 gItemIcon_TinyMushroom[];
+extern const u8 gItemIconPalette_Mushroom[];
+extern const u8 gItemIcon_BigMushroom[];
+extern const u8 gItemIcon_Pearl[];
+extern const u8 gItemIconPalette_Pearl[];
+extern const u8 gItemIcon_BigPearl[];
+extern const u8 gItemIcon_Stardust[];
+extern const u8 gItemIconPalette_Star[];
+extern const u8 gItemIcon_StarPiece[];
+extern const u8 gItemIcon_Nugget[];
+extern const u8 gItemIconPalette_Nugget[];
+extern const u8 gItemIcon_HeartScale[];
+extern const u8 gItemIconPalette_HeartScale[];
+// Mail
+extern const u8 gItemIcon_OrangeMail[];
+extern const u8 gItemIconPalette_OrangeMail[];
+extern const u8 gItemIcon_HarborMail[];
+extern const u8 gItemIconPalette_HarborMail[];
+extern const u8 gItemIcon_GlitterMail[];
+extern const u8 gItemIconPalette_GlitterMail[];
+extern const u8 gItemIcon_MechMail[];
+extern const u8 gItemIconPalette_MechMail[];
+extern const u8 gItemIcon_WoodMail[];
+extern const u8 gItemIconPalette_WoodMail[];
+extern const u8 gItemIcon_WaveMail[];
+extern const u8 gItemIconPalette_WaveMail[];
+extern const u8 gItemIcon_BeadMail[];
+extern const u8 gItemIconPalette_BeadMail[];
+extern const u8 gItemIcon_ShadowMail[];
+extern const u8 gItemIconPalette_ShadowMail[];
+extern const u8 gItemIcon_TropicMail[];
+extern const u8 gItemIconPalette_TropicMail[];
+extern const u8 gItemIcon_DreamMail[];
+extern const u8 gItemIconPalette_DreamMail[];
+extern const u8 gItemIcon_FabMail[];
+extern const u8 gItemIconPalette_FabMail[];
+extern const u8 gItemIcon_RetroMail[];
+extern const u8 gItemIconPalette_RetroMail[];
+// Berries
+extern const u8 gItemIcon_CheriBerry[];
+extern const u8 gItemIconPalette_CheriBerry[];
+extern const u8 gItemIcon_ChestoBerry[];
+extern const u8 gItemIconPalette_ChestoBerry[];
+extern const u8 gItemIcon_PechaBerry[];
+extern const u8 gItemIconPalette_PechaBerry[];
+extern const u8 gItemIcon_RawstBerry[];
+extern const u8 gItemIconPalette_RawstBerry[];
+extern const u8 gItemIcon_AspearBerry[];
+extern const u8 gItemIconPalette_AspearBerry[];
+extern const u8 gItemIcon_LeppaBerry[];
+extern const u8 gItemIconPalette_LeppaBerry[];
+extern const u8 gItemIcon_OranBerry[];
+extern const u8 gItemIconPalette_OranBerry[];
+extern const u8 gItemIcon_PersimBerry[];
+extern const u8 gItemIconPalette_PersimBerry[];
+extern const u8 gItemIcon_LumBerry[];
+extern const u8 gItemIconPalette_LumBerry[];
+extern const u8 gItemIcon_SitrusBerry[];
+extern const u8 gItemIconPalette_SitrusBerry[];
+extern const u8 gItemIcon_FigyBerry[];
+extern const u8 gItemIconPalette_FigyBerry[];
+extern const u8 gItemIcon_WikiBerry[];
+extern const u8 gItemIconPalette_WikiBerry[];
+extern const u8 gItemIcon_MagoBerry[];
+extern const u8 gItemIconPalette_MagoBerry[];
+extern const u8 gItemIcon_AguavBerry[];
+extern const u8 gItemIconPalette_AguavBerry[];
+extern const u8 gItemIcon_IapapaBerry[];
+extern const u8 gItemIconPalette_IapapaBerry[];
+extern const u8 gItemIcon_RazzBerry[];
+extern const u8 gItemIconPalette_RazzBerry[];
+extern const u8 gItemIcon_BlukBerry[];
+extern const u8 gItemIconPalette_BlukBerry[];
+extern const u8 gItemIcon_NanabBerry[];
+extern const u8 gItemIconPalette_NanabBerry[];
+extern const u8 gItemIcon_WepearBerry[];
+extern const u8 gItemIconPalette_WepearBerry[];
+extern const u8 gItemIcon_PinapBerry[];
+extern const u8 gItemIconPalette_PinapBerry[];
+extern const u8 gItemIcon_PomegBerry[];
+extern const u8 gItemIconPalette_PomegBerry[];
+extern const u8 gItemIcon_KelpsyBerry[];
+extern const u8 gItemIconPalette_KelpsyBerry[];
+extern const u8 gItemIcon_QualotBerry[];
+extern const u8 gItemIconPalette_QualotBerry[];
+extern const u8 gItemIcon_HondewBerry[];
+extern const u8 gItemIconPalette_HondewBerry[];
+extern const u8 gItemIcon_GrepaBerry[];
+extern const u8 gItemIconPalette_GrepaBerry[];
+extern const u8 gItemIcon_TamatoBerry[];
+extern const u8 gItemIconPalette_TamatoBerry[];
+extern const u8 gItemIcon_CornnBerry[];
+extern const u8 gItemIconPalette_CornnBerry[];
+extern const u8 gItemIcon_MagostBerry[];
+extern const u8 gItemIconPalette_MagostBerry[];
+extern const u8 gItemIcon_RabutaBerry[];
+extern const u8 gItemIconPalette_RabutaBerry[];
+extern const u8 gItemIcon_NomelBerry[];
+extern const u8 gItemIconPalette_NomelBerry[];
+extern const u8 gItemIcon_SpelonBerry[];
+extern const u8 gItemIconPalette_SpelonBerry[];
+extern const u8 gItemIcon_PamtreBerry[];
+extern const u8 gItemIconPalette_PamtreBerry[];
+extern const u8 gItemIcon_WatmelBerry[];
+extern const u8 gItemIconPalette_WatmelBerry[];
+extern const u8 gItemIcon_DurinBerry[];
+extern const u8 gItemIconPalette_DurinBerry[];
+extern const u8 gItemIcon_BelueBerry[];
+extern const u8 gItemIconPalette_BelueBerry[];
+extern const u8 gItemIcon_LiechiBerry[];
+extern const u8 gItemIconPalette_LiechiBerry[];
+extern const u8 gItemIcon_GanlonBerry[];
+extern const u8 gItemIconPalette_GanlonBerry[];
+extern const u8 gItemIcon_SalacBerry[];
+extern const u8 gItemIconPalette_SalacBerry[];
+extern const u8 gItemIcon_PetayaBerry[];
+extern const u8 gItemIconPalette_PetayaBerry[];
+extern const u8 gItemIcon_ApicotBerry[];
+extern const u8 gItemIconPalette_ApicotBerry[];
+extern const u8 gItemIcon_LansatBerry[];
+extern const u8 gItemIconPalette_LansatBerry[];
+extern const u8 gItemIcon_StarfBerry[];
+extern const u8 gItemIconPalette_StarfBerry[];
+extern const u8 gItemIcon_EnigmaBerry[];
+extern const u8 gItemIconPalette_EnigmaBerry[];
+// Hold items
+extern const u8 gItemIcon_BrightPowder[];
+extern const u8 gItemIconPalette_BrightPowder[];
+extern const u8 gItemIcon_InBattleHerb[];
+extern const u8 gItemIconPalette_WhiteHerb[];
+extern const u8 gItemIcon_MachoBrace[];
+extern const u8 gItemIconPalette_MachoBrace[];
+extern const u8 gItemIcon_ExpShare[];
+extern const u8 gItemIconPalette_ExpShare[];
+extern const u8 gItemIcon_QuickClaw[];
+extern const u8 gItemIconPalette_QuickClaw[];
+extern const u8 gItemIcon_SootheBell[];
+extern const u8 gItemIconPalette_SootheBell[];
+extern const u8 gItemIcon_InBattleHerb[];
+extern const u8 gItemIconPalette_MentalHerb[];
+extern const u8 gItemIcon_ChoiceBand[];
+extern const u8 gItemIconPalette_ChoiceBand[];
+extern const u8 gItemIcon_KingsRock[];
+extern const u8 gItemIconPalette_KingsRock[];
+extern const u8 gItemIcon_SilverPowder[];
+extern const u8 gItemIconPalette_SilverPowder[];
+extern const u8 gItemIcon_AmuletCoin[];
+extern const u8 gItemIconPalette_AmuletCoin[];
+extern const u8 gItemIcon_CleanseTag[];
+extern const u8 gItemIconPalette_CleanseTag[];
+extern const u8 gItemIcon_SoulDew[];
+extern const u8 gItemIconPalette_SoulDew[];
+extern const u8 gItemIcon_DeepSeaTooth[];
+extern const u8 gItemIconPalette_DeepSeaTooth[];
+extern const u8 gItemIcon_DeepSeaScale[];
+extern const u8 gItemIconPalette_DeepSeaScale[];
+extern const u8 gItemIcon_SmokeBall[];
+extern const u8 gItemIconPalette_SmokeBall[];
+extern const u8 gItemIcon_Everstone[];
+extern const u8 gItemIconPalette_Everstone[];
+extern const u8 gItemIcon_FocusBand[];
+extern const u8 gItemIconPalette_FocusBand[];
+extern const u8 gItemIcon_LuckyEgg[];
+extern const u8 gItemIconPalette_LuckyEgg[];
+extern const u8 gItemIcon_ScopeLens[];
+extern const u8 gItemIconPalette_ScopeLens[];
+extern const u8 gItemIcon_MetalCoat[];
+extern const u8 gItemIconPalette_MetalCoat[];
+extern const u8 gItemIcon_Leftovers[];
+extern const u8 gItemIconPalette_Leftovers[];
+extern const u8 gItemIcon_DragonScale[];
+extern const u8 gItemIconPalette_DragonScale[];
+extern const u8 gItemIcon_LightBall[];
+extern const u8 gItemIconPalette_LightBall[];
+extern const u8 gItemIcon_SoftSand[];
+extern const u8 gItemIconPalette_SoftSand[];
+extern const u8 gItemIcon_HardStone[];
+extern const u8 gItemIconPalette_HardStone[];
+extern const u8 gItemIcon_MiracleSeed[];
+extern const u8 gItemIconPalette_MiracleSeed[];
+extern const u8 gItemIcon_BlackGlasses[];
+extern const u8 gItemIconPalette_BlackTypeEnhancingItem[];
+extern const u8 gItemIcon_BlackBelt[];
+extern const u8 gItemIconPalette_BlackTypeEnhancingItem[];
+extern const u8 gItemIcon_Magnet[];
+extern const u8 gItemIconPalette_Magnet[];
+extern const u8 gItemIcon_MysticWater[];
+extern const u8 gItemIconPalette_MysticWater[];
+extern const u8 gItemIcon_SharpBeak[];
+extern const u8 gItemIconPalette_SharpBeak[];
+extern const u8 gItemIcon_PoisonBarb[];
+extern const u8 gItemIconPalette_PoisonBarb[];
+extern const u8 gItemIcon_NeverMeltIce[];
+extern const u8 gItemIconPalette_NeverMeltIce[];
+extern const u8 gItemIcon_SpellTag[];
+extern const u8 gItemIconPalette_SpellTag[];
+extern const u8 gItemIcon_TwistedSpoon[];
+extern const u8 gItemIconPalette_TwistedSpoon[];
+extern const u8 gItemIcon_Charcoal[];
+extern const u8 gItemIconPalette_Charcoal[];
+extern const u8 gItemIcon_DragonFang[];
+extern const u8 gItemIconPalette_DragonFang[];
+extern const u8 gItemIcon_SilkScarf[];
+extern const u8 gItemIconPalette_SilkScarf[];
+extern const u8 gItemIcon_UpGrade[];
+extern const u8 gItemIconPalette_UpGrade[];
+extern const u8 gItemIcon_ShellBell[];
+extern const u8 gItemIconPalette_Shell[];
+extern const u8 gItemIcon_SeaIncense[];
+extern const u8 gItemIconPalette_SeaIncense[];
+extern const u8 gItemIcon_LaxIncense[];
+extern const u8 gItemIconPalette_LaxIncense[];
+extern const u8 gItemIcon_LuckyPunch[];
+extern const u8 gItemIconPalette_LuckyPunch[];
+extern const u8 gItemIcon_MetalPowder[];
+extern const u8 gItemIconPalette_MetalPowder[];
+extern const u8 gItemIcon_ThickClub[];
+extern const u8 gItemIconPalette_ThickClub[];
+extern const u8 gItemIcon_Stick[];
+extern const u8 gItemIconPalette_Stick[];
+// Contest hold items
+extern const u8 gItemIcon_Scarf[];
+extern const u8 gItemIconPalette_RedScarf[];
+extern const u8 gItemIconPalette_BlueScarf[];
+extern const u8 gItemIconPalette_PinkScarf[];
+extern const u8 gItemIconPalette_GreenScarf[];
+extern const u8 gItemIconPalette_YellowScarf[];
+// Key items
+extern const u8 gItemIcon_MachBike[];
+extern const u8 gItemIconPalette_MachBike[];
+extern const u8 gItemIcon_CoinCase[];
+extern const u8 gItemIconPalette_CoinCase[];
+extern const u8 gItemIcon_Itemfinder[];
+extern const u8 gItemIconPalette_Itemfinder[];
+extern const u8 gItemIcon_OldRod[];
+extern const u8 gItemIconPalette_OldRod[];
+extern const u8 gItemIcon_GoodRod[];
+extern const u8 gItemIconPalette_GoodRod[];
+extern const u8 gItemIcon_SuperRod[];
+extern const u8 gItemIconPalette_SuperRod[];
+extern const u8 gItemIcon_SSTicket[];
+extern const u8 gItemIconPalette_SSTicket[];
+extern const u8 gItemIcon_ContestPass[];
+extern const u8 gItemIconPalette_ContestPass[];
+extern const u8 gItemIcon_WailmerPail[];
+extern const u8 gItemIconPalette_WailmerPail[];
+extern const u8 gItemIcon_DevonGoods[];
+extern const u8 gItemIconPalette_DevonGoods[];
+extern const u8 gItemIcon_SootSack[];
+extern const u8 gItemIconPalette_SootSack[];
+extern const u8 gItemIcon_BasementKey[];
+extern const u8 gItemIconPalette_OldKey[];
+extern const u8 gItemIcon_AcroBike[];
+extern const u8 gItemIconPalette_AcroBike[];
+extern const u8 gItemIcon_PokeblockCase[];
+extern const u8 gItemIconPalette_PokeblockCase[];
+extern const u8 gItemIcon_Letter[];
+extern const u8 gItemIcon_EonTicket[];
+extern const u8 gItemIconPalette_EonTicket[];
+extern const u8 gItemIcon_Orb[];
+extern const u8 gItemIconPalette_RedOrb[];
+extern const u8 gItemIconPalette_BlueOrb[];
+extern const u8 gItemIcon_Scanner[];
+extern const u8 gItemIconPalette_Scanner[];
+extern const u8 gItemIcon_GoGoggles[];
+extern const u8 gItemIconPalette_GoGoggles[];
+extern const u8 gItemIcon_Meteorite[];
+extern const u8 gItemIconPalette_Meteorite[];
+extern const u8 gItemIcon_Room1Key[];
+extern const u8 gItemIconPalette_Key[];
+extern const u8 gItemIcon_Room2Key[];
+extern const u8 gItemIcon_Room4Key[];
+extern const u8 gItemIcon_Room6Key[];
+extern const u8 gItemIcon_StorageKey[];
+extern const u8 gItemIcon_RootFossil[];
+extern const u8 gItemIconPalette_HoennFossil[];
+extern const u8 gItemIcon_ClawFossil[];
+extern const u8 gItemIcon_DevonScope[];
+extern const u8 gItemIconPalette_DevonScope[];
+// TMs/HMs
+extern const u8 gItemIcon_TM[];
+extern const u8 gItemIconPalette_FightingTMHM[];
+extern const u8 gItemIconPalette_DragonTMHM[];
+extern const u8 gItemIconPalette_WaterTMHM[];
+extern const u8 gItemIconPalette_PsychicTMHM[];
+extern const u8 gItemIconPalette_NormalTMHM[];
+extern const u8 gItemIconPalette_PoisonTMHM[];
+extern const u8 gItemIconPalette_IceTMHM[];
+extern const u8 gItemIconPalette_GrassTMHM[];
+extern const u8 gItemIconPalette_FireTMHM[];
+extern const u8 gItemIconPalette_DarkTMHM[];
+extern const u8 gItemIconPalette_SteelTMHM[];
+extern const u8 gItemIconPalette_ElectricTMHM[];
+extern const u8 gItemIconPalette_GroundTMHM[];
+extern const u8 gItemIconPalette_GhostTMHM[];
+extern const u8 gItemIconPalette_RockTMHM[];
+extern const u8 gItemIconPalette_FlyingTMHM[];
+extern const u8 gItemIcon_HM[];
+// FireRed/LeafGreen key items
+extern const u8 gItemIcon_OaksParcel[];
+extern const u8 gItemIconPalette_OaksParcel[];
+extern const u8 gItemIcon_PokeFlute[];
+extern const u8 gItemIconPalette_PokeFlute[];
+extern const u8 gItemIcon_SecretKey[];
+extern const u8 gItemIconPalette_SecretKey[];
+extern const u8 gItemIcon_BikeVoucher[];
+extern const u8 gItemIconPalette_BikeVoucher[];
+extern const u8 gItemIcon_GoldTeeth[];
+extern const u8 gItemIconPalette_GoldTeeth[];
+extern const u8 gItemIcon_OldAmber[];
+extern const u8 gItemIconPalette_OldAmber[];
+extern const u8 gItemIcon_CardKey[];
+extern const u8 gItemIconPalette_CardKey[];
+extern const u8 gItemIcon_LiftKey[];
+extern const u8 gItemIconPalette_Key[];
+extern const u8 gItemIcon_HelixFossil[];
+extern const u8 gItemIconPalette_KantoFossil[];
+extern const u8 gItemIcon_DomeFossil[];
+extern const u8 gItemIcon_SilphScope[];
+extern const u8 gItemIconPalette_SilphScope[];
+extern const u8 gItemIcon_Bicycle[];
+extern const u8 gItemIconPalette_Bicycle[];
+extern const u8 gItemIcon_TownMap[];
+extern const u8 gItemIconPalette_TownMap[];
+extern const u8 gItemIcon_VSSeeker[];
+extern const u8 gItemIconPalette_VSSeeker[];
+extern const u8 gItemIcon_FameChecker[];
+extern const u8 gItemIconPalette_FameChecker[];
+extern const u8 gItemIcon_TMCase[];
+extern const u8 gItemIconPalette_TMCase[];
+extern const u8 gItemIcon_BerryPouch[];
+extern const u8 gItemIconPalette_BerryPouch[];
+extern const u8 gItemIcon_TeachyTV[];
+extern const u8 gItemIconPalette_TeachyTV[];
+extern const u8 gItemIcon_TriPass[];
+extern const u8 gItemIconPalette_TriPass[];
+extern const u8 gItemIcon_RainbowPass[];
+extern const u8 gItemIconPalette_RainbowPass[];
+extern const u8 gItemIcon_Tea[];
+extern const u8 gItemIconPalette_Tea[];
+extern const u8 gItemIcon_MysticTicket[];
+extern const u8 gItemIconPalette_MysticTicket[];
+extern const u8 gItemIcon_AuroraTicket[];
+extern const u8 gItemIconPalette_AuroraTicket[];
+extern const u8 gItemIcon_PowderJar[];
+extern const u8 gItemIconPalette_PowderJar[];
+extern const u8 gItemIcon_Gem[];
+extern const u8 gItemIconPalette_Ruby[];
+extern const u8 gItemIconPalette_Sapphire[];
+// Emerald-only key items
+extern const u8 gItemIcon_MagmaEmblem[];
+extern const u8 gItemIconPalette_MagmaEmblem[];
+extern const u8 gItemIcon_OldSeaMap[];
+extern const u8 gItemIconPalette_OldSeaMap[];
+
+extern const u8 gItemIcon_ReturnToFieldArrow[];
+extern const u8 gItemIconPalette_ReturnToFieldArrow[];
+
//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[];
+
+// item menu icons graphics
+extern const u8 gBagMaleTiles[];
+extern const u8 gBagFemaleTiles[];
+extern const u8 gBagPalette[];
+extern const u8 gBerryCheckCircle_Gfx[];
+
+//intro graphics
+extern const u8 gIntro1SparkleGfx[];
+extern const u8 gIntro1FlygonGfx[];
+extern const u16 gIntro3LightningPal[];
+extern const u8 gIntroCopyright_Gfx[];
+extern const u8 gIntroCopyright_Tilemap[];
+extern const u16 gIntroCopyright_Pal[16];
+extern const u8 gIntro2VolbeatGfx[];
+extern const u8 gIntro2TorchicGfx[];
+extern const u8 gIntro2ManectricGfx[];
+extern const u16 gIntro2VolbeatPal[];
+extern const u16 gIntro2TorchicPal[];
+extern const u16 gIntro2ManectricPal[];
+extern const u8 gIntro2BubblesGfx[];
+extern const u16 gIntro2BubblesPal[];
+extern const u8 gIntro3LightningGfx[];
+extern const u8 gIntro3GroudonGfx[];
+extern const u8 gIntro3GroudonTilemap[];
+extern const u8 gIntro3LegendBgGfx[];
+extern const u8 gIntro3GroudonBgTilemap[];
+extern const u8 gIntro3GroudonBgTilemap[];
+extern const u8 gIntro3BgPal[0x200];
+extern const u8 gIntro3KyogreGfx[];
+extern const u8 gIntro3KyogreTilemap[];
+extern const u8 gIntro3KyogreBgTilemap[];
+extern const u8 gIntro3CloudsGfx[];
+extern const u8 gIntro3Clouds1Tilemap[];
+extern const u8 gIntro3Clouds2Tilemap[];
+extern const u8 gIntro3Clouds3Tilemap[];
+extern const u8 gIntro3Clouds4Tilemap[];
+extern const u8 gIntro3RayquazaTilemap[];
+extern const u8 gIntro3RayquazaGfx[];
+extern const u8 gIntro3Clouds2Gfx[];
+extern const u16 gIntro1GameFreakTextFadePal[];
+
+//intro/credits graphics
+extern const u8 gIntro2BrendanNoTurnGfx[];
+extern const u8 gIntro2MayNoTurnGfx[];
+extern const u16 gIntro2BrendanNoTurnPal[];
+extern const u16 gIntro2FlygonPal[];
+extern const u8 gIntro2FlygonGfx[];
+
+// berry pics
+extern const u8 gBerryPic_Cheri[];
+extern const u8 gBerryPalette_Cheri[];
+extern const u8 gBerryPic_Chesto[];
+extern const u8 gBerryPalette_Chesto[];
+extern const u8 gBerryPic_Pecha[];
+extern const u8 gBerryPalette_Pecha[];
+extern const u8 gBerryPic_Rawst[];
+extern const u8 gBerryPalette_Rawst[];
+extern const u8 gBerryPic_Aspear[];
+extern const u8 gBerryPalette_Aspear[];
+extern const u8 gBerryPic_Leppa[];
+extern const u8 gBerryPalette_Leppa[];
+extern const u8 gBerryPic_Oran[];
+extern const u8 gBerryPalette_Oran[];
+extern const u8 gBerryPic_Persim[];
+extern const u8 gBerryPalette_Persim[];
+extern const u8 gBerryPic_Lum[];
+extern const u8 gBerryPalette_Lum[];
+extern const u8 gBerryPic_Sitrus[];
+extern const u8 gBerryPalette_Sitrus[];
+extern const u8 gBerryPic_Figy[];
+extern const u8 gBerryPalette_Figy[];
+extern const u8 gBerryPic_Wiki[];
+extern const u8 gBerryPalette_Wiki[];
+extern const u8 gBerryPic_Mago[];
+extern const u8 gBerryPalette_Mago[];
+extern const u8 gBerryPic_Aguav[];
+extern const u8 gBerryPalette_Aguav[];
+extern const u8 gBerryPic_Iapapa[];
+extern const u8 gBerryPalette_Iapapa[];
+extern const u8 gBerryPic_Razz[];
+extern const u8 gBerryPalette_Razz[];
+extern const u8 gBerryPic_Bluk[];
+extern const u8 gBerryPalette_Bluk[];
+extern const u8 gBerryPic_Nanab[];
+extern const u8 gBerryPalette_Nanab[];
+extern const u8 gBerryPic_Wepear[];
+extern const u8 gBerryPalette_Wepear[];
+extern const u8 gBerryPic_Pinap[];
+extern const u8 gBerryPalette_Pinap[];
+extern const u8 gBerryPic_Pomeg[];
+extern const u8 gBerryPalette_Pomeg[];
+extern const u8 gBerryPic_Kelpsy[];
+extern const u8 gBerryPalette_Kelpsy[];
+extern const u8 gBerryPic_Qualot[];
+extern const u8 gBerryPalette_Qualot[];
+extern const u8 gBerryPic_Hondew[];
+extern const u8 gBerryPalette_Hondew[];
+extern const u8 gBerryPic_Grepa[];
+extern const u8 gBerryPalette_Grepa[];
+extern const u8 gBerryPic_Tamato[];
+extern const u8 gBerryPalette_Tamato[];
+extern const u8 gBerryPic_Cornn[];
+extern const u8 gBerryPalette_Cornn[];
+extern const u8 gBerryPic_Magost[];
+extern const u8 gBerryPalette_Magost[];
+extern const u8 gBerryPic_Rabuta[];
+extern const u8 gBerryPalette_Rabuta[];
+extern const u8 gBerryPic_Nomel[];
+extern const u8 gBerryPalette_Nomel[];
+extern const u8 gBerryPic_Spelon[];
+extern const u8 gBerryPalette_Spelon[];
+extern const u8 gBerryPic_Pamtre[];
+extern const u8 gBerryPalette_Pamtre[];
+extern const u8 gBerryPic_Watmel[];
+extern const u8 gBerryPalette_Watmel[];
+extern const u8 gBerryPic_Durin[];
+extern const u8 gBerryPalette_Durin[];
+extern const u8 gBerryPic_Belue[];
+extern const u8 gBerryPalette_Belue[];
+extern const u8 gBerryPic_Liechi[];
+extern const u8 gBerryPalette_Liechi[];
+extern const u8 gBerryPic_Ganlon[];
+extern const u8 gBerryPalette_Ganlon[];
+extern const u8 gBerryPic_Salac[];
+extern const u8 gBerryPalette_Salac[];
+extern const u8 gBerryPic_Petaya[];
+extern const u8 gBerryPalette_Petaya[];
+extern const u8 gBerryPic_Apicot[];
+extern const u8 gBerryPalette_Apicot[];
+extern const u8 gBerryPic_Lansat[];
+extern const u8 gBerryPalette_Lansat[];
+extern const u8 gBerryPic_Starf[];
+extern const u8 gBerryPalette_Starf[];
+extern const u8 gBerryPic_Enigma[];
+extern const u8 gBerryPalette_Enigma[];
+
+//credits
+extern const u8 gCreditsCopyrightEnd_Gfx[];
+
+//pokenav condition marker
+extern const u8 gPokenavConditionMarker_Gfx[];
+extern const u16 gPokenavConditionMarker_Pal[];
+
#endif //GUARD_GRAPHICS_H
diff --git a/include/gym_leader_rematch.h b/include/gym_leader_rematch.h
new file mode 100644
index 000000000..ef0e5fef1
--- /dev/null
+++ b/include/gym_leader_rematch.h
@@ -0,0 +1,87 @@
+#ifndef GUARD_TRAINER_REMATCH_H
+#define GUARD_TRAINER_REMATCH_H
+
+enum {
+ REMATCH_ROSE,
+ REMATCH_ANDRES,
+ REMATCH_DUSTY,
+ REMATCH_LOLA,
+ REMATCH_RICKY,
+ REMATCH_LILA_AND_ROY,
+ REMATCH_CRISTIN,
+ REMATCH_BROOKE,
+ REMATCH_WILTON,
+ REMATCH_VALERIE,
+ REMATCH_CINDY,
+ REMATCH_THALIA,
+ REMATCH_JESSICA,
+ REMATCH_WINSTON,
+ REMATCH_STEVE,
+ REMATCH_TONY,
+ REMATCH_NOB,
+ REMATCH_KOJI,
+ REMATCH_FERNANDO,
+ REMATCH_DALTON,
+ REMATCH_BERNIE,
+ REMATCH_ETHAN,
+ REMATCH_JOHN_AND_JAY,
+ REMATCH_JEFFREY,
+ REMATCH_CAMERON,
+ REMATCH_JACKI,
+ REMATCH_WALTER,
+ REMATCH_KAREN,
+ REMATCH_JERRY,
+ REMATCH_ANNA_AND_MEG,
+ REMATCH_ISABEL,
+ REMATCH_MIGUEL,
+ REMATCH_TIMOTHY,
+ REMATCH_SHELBY,
+ REMATCH_CALVIN,
+ REMATCH_ELLIOT,
+ REMATCH_ISAIAH,
+ REMATCH_MARIA,
+ REMATCH_ABIGAIL,
+ REMATCH_DYLAN,
+ REMATCH_KATELYN,
+ REMATCH_BENJAMIN,
+ REMATCH_PABLO,
+ REMATCH_NICOLAS,
+ REMATCH_ROBERT,
+ REMATCH_LAO,
+ REMATCH_CYNDY,
+ REMATCH_MADELINE,
+ REMATCH_JENNY,
+ REMATCH_DIANA,
+ REMATCH_AMY_AND_LIV,
+ REMATCH_ERNEST,
+ REMATCH_CORY,
+ REMATCH_EDWIN,
+ REMATCH_LYDIA,
+ REMATCH_ISAAC,
+ REMATCH_GABRIELLE,
+ REMATCH_CATHERINE,
+ REMATCH_JACKSON,
+ REMATCH_HALEY,
+ REMATCH_JAMES,
+ REMATCH_TRENT,
+ REMATCH_SAWYER,
+ REMATCH_KIRA_AND_DAN,
+ REMATCH_WALLY_3,
+ REMATCH_ROXANNE,
+ REMATCH_BRAWLY,
+ REMATCH_WATTSON,
+ REMATCH_FLANNERY,
+ REMATCH_NORMAN,
+ REMATCH_WINONA,
+ REMATCH_TATE_AND_LIZA,
+ REMATCH_JUAN,
+ REMATCH_SIDNEY,
+ REMATCH_PHOEBE,
+ REMATCH_GLACIA,
+ REMATCH_DRAKE,
+ REMATCH_WALLACE
+};
+
+void UpdateGymLeaderRematch(void);
+
+#endif //GUARD_TRAINER_REMATCH_H
diff --git a/include/international_string_util.h b/include/international_string_util.h
index f4ba827e3..426a2d48c 100644
--- a/include/international_string_util.h
+++ b/include/international_string_util.h
@@ -10,12 +10,12 @@ s32 GetStringRightAlignXOffset(s32 fontId, const u8 *str, s32 totalWidth);
s32 GetStringCenterAlignXOffsetWithLetterSpacing(s32 fontId, const u8 *str, s32 totalWidth, s32 letterSpacing);
s32 GetStringWidthDifference(s32 fontId, const u8 *str, s32 totalWidth, s32 letterSpacing);
s32 GetMaxWidthInMenuTable(const struct MenuAction *str, s32 arg1);
-s32 sub_81DB3D8(const struct MenuAction *str, u8* arg1, s32 arg2);
+s32 sub_81DB3D8(const struct MenuAction *str, const u8* arg1, s32 arg2);
// sub_81DB41C
// CopyMonCategoryText
// sub_81DB494
void PadNameString(u8 *dst, u8 padWith);
-// sub_81DB554
+void sub_81DB554(u8 *, u8);
// sub_81DB5AC
u32 sub_81DB604(const u8 *);
// sub_81DB620
diff --git a/include/intro.h b/include/intro.h
index 53a446418..b1bfe20a4 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 CB2_InitCopyrightScreenAfterBootup(void);
void CB2_InitCopyrightScreenAfterBootup(void);
void CB2_InitCopyrightScreenAfterTitleScreen(void);
void sub_816F2A8(u16, u16, u16, u16);
diff --git a/include/intro_credits_graphics.h b/include/intro_credits_graphics.h
new file mode 100644
index 000000000..354d62e05
--- /dev/null
+++ b/include/intro_credits_graphics.h
@@ -0,0 +1,30 @@
+#ifndef GUARD_INTRO_CREDITS_GRAPHICS_H
+#define GUARD_INTRO_CREDITS_GRAPHICS_H
+
+extern u16 gUnknown_0203BD24;
+extern s16 gUnknown_0203BD26;
+extern s16 gUnknown_0203BD28;
+
+extern const struct CompressedSpriteSheet gIntro2BrendanSpriteSheet[];
+extern const struct CompressedSpriteSheet gIntro2MaySpriteSheet[];
+extern const struct CompressedSpriteSheet gIntro2BicycleSpriteSheet[];
+extern const struct CompressedSpriteSheet gIntro2FlygonSpriteSheet[];
+extern const struct SpritePalette gUnknown_085F530C[];
+extern const struct CompressedSpriteSheet gUnknown_085F5334[];
+extern const struct CompressedSpriteSheet gUnknown_085F5344[];
+extern const struct CompressedSpriteSheet gUnknown_085F5354[];
+extern const struct CompressedSpriteSheet gUnknown_085F53AC[];
+extern const struct CompressedSpriteSheet gUnknown_085F53BC[];
+extern const struct SpritePalette gUnknown_085F5384[];
+
+void load_intro_part2_graphics(u8 a);
+void sub_817B150(u8 a);
+void sub_817B1C8(u8);
+void sub_817B3A8(u8);
+u8 sub_817B3DC(u8 a, u16 b, u16 c, u16 d);
+void sub_817B540(u8);
+u8 intro_create_brendan_sprite(s16 a, s16 b);
+u8 intro_create_may_sprite(s16 a, s16 b);
+u8 intro_create_flygon_sprite(s16 a, s16 b);
+
+#endif // GUARD_INTRO_CREDITS_GRAPHICS_H
diff --git a/include/item.h b/include/item.h
index 06eb08046..881d3a3d4 100644
--- a/include/item.h
+++ b/include/item.h
@@ -1,11 +1,32 @@
-#ifndef ITEM_H
-#define ITEM_H
+#ifndef GUARD_ITEM_H
+#define GUARD_ITEM_H
+
+// These constants are used in gItems
+enum
+{
+ POCKET_NONE,
+ POCKET_ITEMS,
+ POCKET_POKE_BALLS,
+ POCKET_TM_HM,
+ POCKET_BERRIES,
+ POCKET_KEY_ITEMS,
+};
+
+enum
+{
+ ITEMS_POCKET,
+ BALLS_POCKET,
+ TMHM_POCKET,
+ BERRIES_POCKET,
+ KEYITEMS_POCKET,
+ POCKETS_COUNT
+};
typedef void (*ItemUseFunc)(u8);
struct Item
{
- u8 name[14];
+ u8 name[ITEM_NAME_LENGTH];
u16 itemId;
u16 price;
u8 holdEffect;
@@ -29,28 +50,41 @@ struct BagPocket
extern struct BagPocket gBagPockets[];
-void GetBerryCountString(u8* dst, const u8* berryName, u32 quantity);
-void CopyItemName(u16 itemId, u8 *string);
-void CopyItemNameHandlePlural(u16 itemId, u8 *string, u32 quantity);
+void ApplyNewEncryptionKeyToBagItems(u32 newKey);
+void ApplyNewEncryptionKeyToBagItems_(u32 newKey);
+void SetBagItemsPointers(void);
+void CopyItemName(u16 itemId, u8 *dst);
+void CopyItemNameHandlePlural(u16 itemId, u8 *dst, u32 quantity);
+void GetBerryCountString(u8 *dst, const u8 *berryName, u32 quantity);
bool8 IsBagPocketNonEmpty(u8 pocket);
bool8 CheckBagHasItem(u16 itemId, u16 count);
+bool8 HasAtLeastOneBerry(void);
bool8 CheckBagHasSpace(u16 itemId, u16 count);
bool8 AddBagItem(u16 itemId, u16 count);
bool8 RemoveBagItem(u16 itemId, u16 count);
u8 GetPocketByItemId(u16 itemId);
-void ClearItemSlots(struct ItemSlot *itemSlots, u8 b);
+void ClearItemSlots(struct ItemSlot *itemSlots, u8 itemCount);
u8 CountUsedPCItemSlots(void);
bool8 CheckPCHasItem(u16 itemId, u16 count);
bool8 AddPCItem(u16 itemId, u16 count);
void RemovePCItem(u8 index, u16 count);
+void CompactPCItems(void);
void SwapRegisteredBike(void);
-const struct Item *ItemId_GetItem(u16 itemId);
+u16 BagGetItemIdByPocketPosition(u8 pocketId, u16 pocketPos);
+u16 BagGetQuantityByPocketPosition(u8 pocketId, u16 pocketPos);
+void CompactItemsInBagPocket(struct BagPocket *bagPocket);
+void SortBerriesOrTMHMs(struct BagPocket *bagPocket);
+void MoveItemSlotInList(struct ItemSlot* itemSlots_, u32 from, u32 to_);
+void ClearBag(void);
+u16 CountTotalItemQuantityInBag(u16 itemId);
+bool8 AddPyramidBagItem(u16 itemId, u16 count);
+bool8 RemovePyramidBagItem(u16 itemId, u16 count);
+const u8 *ItemId_GetName(u16 itemId);
u16 ItemId_GetId(u16 itemId);
u16 ItemId_GetPrice(u16 itemId);
u8 ItemId_GetHoldEffect(u16 itemId);
u8 ItemId_GetHoldEffectParam(u16 itemId);
const u8 *ItemId_GetDescription(u16 itemId);
-bool32 ItemId_CopyDescription(u8 *a, u32 itemId, u32 c);
u8 ItemId_GetImportance(u16 itemId);
u8 ItemId_GetUnknownValue(u16 itemId);
u8 ItemId_GetPocket(u16 itemId);
@@ -59,7 +93,5 @@ ItemUseFunc ItemId_GetFieldFunc(u16 itemId);
u8 ItemId_GetBattleUsage(u16 itemId);
ItemUseFunc ItemId_GetBattleFunc(u16 itemId);
u8 ItemId_GetSecondaryId(u16 itemId);
-u16 itemid_get_market_price(u16 itemId);
-u16 BagGetItemIdByPocketPosition(u8 pocketId, u16 pocketPos);
-#endif // ITEM_H
+#endif // GUARD_ITEM_H
diff --git a/include/item_menu.h b/include/item_menu.h
index 0ddd6766b..40c015a8e 100644
--- a/include/item_menu.h
+++ b/include/item_menu.h
@@ -4,22 +4,58 @@
// Exported type declarations
struct BagStruct
{
- void *func;
- u8 unk4;
+ void (*bagCallback)(void);
+ u8 location;
u8 pocket;
u8 unk6[2];
- u16 unk8[5];
- u16 unk12[5];
- void *unk1C;
+ u16 cursorPosition[5];
+ u16 scrollPosition[5];
};
extern struct BagStruct gUnknown_0203CE58;
+struct UnkBagStruct
+{
+ void (*unk0)(void);
+ u8 unk4[0x800];
+ u8 unk804[12];
+ u8 unk810[7];
+ u8 unk817;
+ u8 unk818;
+ u8 unk819;
+ u8 unk81A;
+ u8 unk81B:4;
+ u8 unk81B_1:2;
+ u8 unk81B_3:1;
+ u8 unk81B_2:1;
+ u8 filler3[2];
+ u8 unk81E;
+ u8 unk81F;
+ const u8* unk820;
+ u8 unk824;
+ u8 unk825;
+ u8 filler[2];
+ u8 unk828;
+ u8 unk829[5];
+ u8 unk82E[6];
+ s16 unk834;
+ u8 filler4[0xE];
+ u8 unk844[32][32];
+ u8 filler2[4];
+};
+
+extern struct UnkBagStruct *gUnknown_0203CE54;
+
// Exported RAM declarations
+extern u16 gSpecialVar_ItemId;
+
// Exported ROM declarations
+void sub_81AAC14(void);
void sub_81AAC50(void);
void sub_81AAC70(void);
void bag_menu_mail_related(void);
+void CB2_BagMenuFromStartMenu(void);
+u8 sub_81ABB2C(u8 pocketId);
#endif //GUARD_item_menu_H
diff --git a/include/item_menu_icons.h b/include/item_menu_icons.h
index c3932390c..aee7599df 100644
--- a/include/item_menu_icons.h
+++ b/include/item_menu_icons.h
@@ -1,12 +1,25 @@
#ifndef GUARD_ITEM_MENU_ICONS
#define GUARD_ITEM_MENU_ICONS
+extern const struct CompressedSpriteSheet gUnknown_0857FB34;
+extern const struct CompressedSpriteSheet gUnknown_0857FB3C;
+extern const struct CompressedSpritePalette gUnknown_0857FB44;
extern const struct CompressedSpriteSheet gUnknown_0857FDEC;
extern const struct CompressedSpritePalette gUnknown_0857FDF4;
-u8 sub_80D511C(u8 a0, u8 a1, u8 a2, u8 a3);
+void RemoveBagSprite(u8 id);
+void AddBagVisualSprite(u8 bagPocketId);
+void SetBagVisualPocketId(u8 bagPocketId, bool8 isSwitchingPockets);
+void ShakeBagVisual(void);
+void AddSwitchPocketRotatingBallSprite(s16 rotationDirection);
+void AddBagItemIconSprite(u16 itemId, u8 id);
+void RemoveBagItemIconSprite(u8 id);
+void sub_80D4FAC(void);
+void sub_80D4FC8(u8 arg0);
+void sub_80D4FEC(u8 arg0);
u8 CreateBerryTagSprite(u8 id, s16 x, s16 y);
void FreeBerryTagSpritePalette(void);
+u8 sub_80D511C(u8 berryId, u8 x, u8 y, bool8 startAffine);
u8 CreateBerryFlavorCircleSprite(s16 x);
#endif // GUARD_ITEM_MENU_ICONS
diff --git a/include/item_use.h b/include/item_use.h
index ee7939824..7874f7ee9 100644
--- a/include/item_use.h
+++ b/include/item_use.h
@@ -12,7 +12,7 @@ void ItemUseOutOfBattle_Itemfinder(u8);
void ItemUseOnFieldCB_Itemfinder(u8);
void RunItemfinderResults(u8);
void ExitItemfinder(u8);
-bool8 ItemfinderCheckForHiddenItems(struct MapEvents *, u8);
+bool8 ItemfinderCheckForHiddenItems(const struct MapEvents *, u8);
void sub_80C9720(u8);
void sub_80C9838(u8, s16, s16);
u8 GetPlayerDirectionTowardsHiddenItem(s16, s16);
@@ -21,11 +21,13 @@ void DisplayItemRespondingMessageAndExitItemfinder(u8);
void RotatePlayerAndExitItemfinder(u8);
void ItemUseOutOfBattle_PokeblockCase(u8);
void ItemUseOutOfBattle_CoinCase(u8);
+void ItemUseOutOfBattle_PowderJar(u8);
void ItemUseOutOfBattle_SSTicket(u8);
void sub_80C9D00(u8);
void ItemUseOutOfBattle_WailmerPail(u8);
void sub_80C9D74(u8);
void ItemUseOutOfBattle_Medicine(u8);
+void ItemUseOutOfBattle_ReduceEV(u8);
void ItemUseOutOfBattle_SacredAsh(u8);
void ItemUseOutOfBattle_PPRecovery(u8);
void ItemUseOutOfBattle_PPUp(u8);
@@ -50,5 +52,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/libgcnmultiboot.h b/include/libgcnmultiboot.h
new file mode 100644
index 000000000..7d347df05
--- /dev/null
+++ b/include/libgcnmultiboot.h
@@ -0,0 +1,17 @@
+#ifndef GUARD_LIBGCMMULTIBOOT_H
+#define GUARD_LIBGCNMULTIBOOT_H
+
+struct GcmbStruct
+{
+ u16 gcmb_field_0;
+ vu8 gcmb_field_2;
+ u8 filler3[0x2C - 0x3];
+};
+
+void GameCubeMultiBoot_Main(struct GcmbStruct *pStruct);
+void GameCubeMultiBoot_ExecuteProgram(struct GcmbStruct *pStruct);
+void GameCubeMultiBoot_Init(struct GcmbStruct *pStruct);
+void GameCubeMultiBoot_HandleSerialInterrupt(struct GcmbStruct *pStruct);
+void GameCubeMultiBoot_Quit(void);
+
+#endif // GUARD_LIBGCNMULTIBOOT_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 709bdc399..9dd85460e 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,26 +189,30 @@ 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;
+
+void c2_mystery_gift(void);
+void sub_801867C(void);
+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);
@@ -163,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);
@@ -176,29 +232,73 @@ 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);
+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);
+bool32 sub_800A07C(void);
+
+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;
+
bool32 Link_AnyPartnersPlayingRubyOrSapphire(void);
bool32 sub_800A03C(void);
void sub_8009628(u8);
u8 sub_800AA48(void);
void sub_8009FAC(void);
-void sub_800A4D8(u8);
+bool8 sub_800A4D8(u8 a0);
u8 sub_800A9D8(void);
bool8 sub_801048C(u8);
u8 sub_800A0C8(s32, s32);
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..0aa66a524 100644
--- a/include/list_menu.h
+++ b/include/list_menu.h
@@ -4,9 +4,11 @@
#define LIST_NOTHING_CHOSEN -1
#define LIST_B_PRESSED -2
-// Exported type declarations
+#define LIST_NO_MULTIPLE_SCROLL 0
+#define LIST_MULTIPLE_SCROLL_DPAD 1
+#define LIST_MULTIPLE_SCROLL_L_R 2
-// Exported RAM declarations
+struct ListMenu;
struct ListMenuItem
{
@@ -14,33 +16,31 @@ struct ListMenuItem
s32 id;
};
-struct ListMenu;
-
struct ListMenuTemplate
{
const struct ListMenuItem *items;
- void (* moveCursorFunc)(u32, bool8, struct ListMenu *);
- void (* unk_08)(u8, s32, u8);
+ void (* moveCursorFunc)(s32, bool8, struct ListMenu *);
+ void (* unk_08)(u8 windowId, s32 itemId, u8 y);
u16 totalItems;
u16 maxShowed;
- u8 unk_10;
+ u8 windowId;
u8 unk_11;
u8 unk_12;
- u8 cursor_Y;
- u32 upText_Y:4; // x1, x2, x4, x8 = xF
- u32 cursorColor:4; // x10, x20, x40, x80 = xF0
- u32 fillColor:4; // x100, x200, x400, x800 = xF00
- u32 cursorShadowColor:4; // x1000, x2000, x4000, x8000 = xF000
- u32 unk_16_0:1; // x10000
- u32 spaceBetweenItems:6; // x20000, x40000, x80000, x100000, x200000, x400000 = x7E0000
- u32 unk_16_7:1; // x800000
- u32 unk_17_0:6; // x1000000, x2000000, x4000000, x8000000, x10000000, x20000000 = x3F000000
- u32 cursorKind:2; // x40000000, x80000000
+ u8 cursor_X;
+ u8 upText_Y:4; // x1, x2, x4, x8 = xF
+ u8 cursorPal:4; // x10, x20, x40, x80 = xF0
+ u8 fillValue:4; // x1, x2, x4, x8 = xF
+ u8 cursorShadowPal:4; // x10, x20, x40, x80 = xF0
+ u8 lettersSpacing:3;
+ u8 unk_16_3:3;
+ u8 scrollMultiple:2; // x40, x80 = xC0
+ u8 fontId:6; // x1, x2, x4, x8, x10, x20 = x3F
+ u8 cursorKind:2; // x40, x80
};
struct ListMenu
{
- struct ListMenuTemplate _template;
+ struct ListMenuTemplate template;
u16 scrollOffset;
u16 selectedRow;
u8 unk_1C;
@@ -49,13 +49,30 @@ struct ListMenu
u8 unk_1F;
};
-extern struct ListMenuTemplate gMultiuseListMenuTemplate;
+struct UnknownListMenuWindowStruct
+{
+ u8 x;
+ u8 y;
+ u8 width;
+ u8 height;
+ u8 palNum;
+};
-// Exported ROM declarations
+extern struct ListMenuTemplate gMultiuseListMenuTemplate;
-u8 ListMenuInit(struct ListMenuTemplate *template, u16 cursorPage, u16 cursorPosition);
+s32 DoMysteryGiftListMenu(struct WindowTemplate *windowTemplate, struct ListMenuTemplate *listMenuTemplate, u8 arg2, u16 tileNum, u16 palNum);
+u8 ListMenuInit(struct ListMenuTemplate *listMenuTemplate, u16 scrollOffset, u16 selectedRow);
+u8 ListMenuInitWithWindows(struct ListMenuTemplate *listMenuTemplate, struct UnknownListMenuWindowStruct *arg1, u16 scrollOffset, u16 selectedRow);
s32 ListMenuHandleInputGetItemId(u8 listTaskId);
-void sub_81AE860(u8 listTaskId, u16 *a1, u16 *a2);
-void sub_81AE6C8(u8 listTaskId, u16 *a1, u16 *a2);
+void DestroyListMenuTask(u8 listTaskId, u16 *scrollOffset, u16 *selectedRow);
+void sub_81AE70C(u8 listTaskId);
+void ChangeListMenuPals(u8 listTaskId, u8 cursorPal, u8 fillValue, u8 cursorShadowPal);
+void ChangeListMenuCoords(u8 listTaskId, u8 x, u8 y);
+s32 ListMenuTestInput(struct ListMenuTemplate *template, u32 scrollOffset, u32 selectedRow, u16 keys, u16 *newScrollOffset, u16 *newSelectedRow);
+void ListMenuGetCurrentItemArrayId(u8 listTaskId, u16 *arrayId);
+void ListMenuGetScrollAndRow(u8 listTaskId, u16 *scrollOffset, u16 *selectedRow);
+u16 ListMenuGetYCoordForPrintingArrowCursor(u8 listTaskId);
+void sub_81AF028(u8 cursorPal, u8 fillValue, u8 cursorShadowPal);
+void sub_81AF078(s32 arg0, u8 arg1, struct ListMenu *list);
#endif //GUARD_LIST_MENU_H
diff --git a/include/load_save.h b/include/load_save.h
index ba85d4ad8..0868316c8 100644
--- a/include/load_save.h
+++ b/include/load_save.h
@@ -1,25 +1,35 @@
#ifndef GUARD_LOAD_SAVE_H
#define GUARD_LOAD_SAVE_H
+extern struct SaveBlock1 gSaveblock1;
+extern struct SaveBlock2 gSaveblock2;
+extern struct PokemonStorage gPokemonStorage;
+
extern bool32 gFlashMemoryPresent;
+extern struct SaveBlock1 *gSaveBlock1Ptr;
+extern struct SaveBlock2 *gSaveBlock2Ptr;
+extern struct PokemonStorage *gPokemonStoragePtr;
+void CheckForFlashMemory(void);
void ClearSav2(void);
void ClearSav1(void);
-void CheckForFlashMemory(void);
+void SetSaveBlocksPointers(u16 offset);
void MoveSaveBlocks_ResetHeap(void);
-bool32 GetSecretBase2Field_9(void);
+u32 GetSecretBase2Field_9(void);
void ClearSecretBase2Field_9(void);
-void SetSecretBase2Field_9(void);
-void SetSecretBase2Field_9_AndHideBG(void);
-void ClearSecretBase2Field_9_2(void);
+void sub_8076D48(void);
+void sub_8076D5C(void);
+void sav2_gender2_inplace_and_xFE(void);
void SavePlayerParty(void);
void LoadPlayerParty(void);
+void SaveMapObjects(void);
+void LoadMapObjects(void);
void SaveSerializedGame(void);
void LoadSerializedGame(void);
void LoadPlayerBag(void);
void SavePlayerBag(void);
-void SetSaveBlocksPointers(u16);
-void sub_8076D5C(void);
-void sav2_gender2_inplace_and_xFE(void);
+void ApplyNewEncryptionKeyToHword(u16 *hWord, u32 newKey);
+void ApplyNewEncryptionKeyToWord(u32 *word, u32 newKey);
+void ApplyNewEncryptionKeyToAllEncryptedData(u32 encryptionKey);
#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/map_name_popup.h b/include/map_name_popup.h
index 8a9043a3f..85d2f0795 100644
--- a/include/map_name_popup.h
+++ b/include/map_name_popup.h
@@ -7,5 +7,5 @@
// Exported ROM declarations
void HideMapNamePopUpWindow(void);
-
+void ShowMapNamePopup(void);
#endif //GUARD_MAP_NAME_POPUP_H
diff --git a/include/match_call.h b/include/match_call.h
new file mode 100644
index 000000000..9698e7cd3
--- /dev/null
+++ b/include/match_call.h
@@ -0,0 +1,13 @@
+#ifndef GUARD_MATCH_CALL_H
+#define GUARD_MATCH_CALL_H
+
+enum {
+ MATCH_CALL_TYPE_NON_TRAINER,
+ MATCH_CALL_TYPE_TRAINER,
+ MATCH_CALL_TYPE_WALLY,
+ MATCH_CALL_TYPE_BIRCH,
+ MATCH_CALL_TYPE_MAY_BRENDAN,
+ MATCH_CALL_TYPE_GYMLEADER_ELITEFOUR
+};
+
+#endif //GUARD_MATCH_CALL_H
diff --git a/include/mauville_old_man.h b/include/mauville_old_man.h
index 0c0ed624a..b1f10314a 100644
--- a/include/mauville_old_man.h
+++ b/include/mauville_old_man.h
@@ -2,11 +2,25 @@
#ifndef GUARD_MAUVILLE_OLD_MAN_H
#define GUARD_MAUVILLE_OLD_MAN_H
+enum MauvilleOldManType
+{
+ MAUVILLE_MAN_BARD,
+ MAUVILLE_MAN_HIPSTER,
+ MAUVILLE_MAN_TRADER,
+ MAUVILLE_MAN_STORYTELLER,
+ MAUVILLE_MAN_GIDDY
+};
+
+extern struct BardSong gBardSong;
+
void SetMauvilleOldMan(void);
+u8 GetCurrentMauvilleOldMan(void);
+void ScrSpecial_SetMauvilleOldManMapObjGfx(void);
u8 sub_81201C8(void);
void sub_8120B70(OldMan *dest);
-void sub_8120D34(OldMan *dest, u8 version, u16 language);
-void sub_8120CD0(OldMan *dest, u8 version, u16 language);
void sub_8120670(void);
+void sub_8120D34(union OldMan * oldMan, u32 r1, u32 r6);
+void sub_8120CD0(union OldMan * oldMan, u32 unused, u32 a2);
+void ResetMauvilleOldManFlag(void);
#endif // GUARD_MAUVILLE_OLD_MAN_H
diff --git a/include/menu.h b/include/menu.h
index 2046f7d2b..888d898b6 100644
--- a/include/menu.h
+++ b/include/menu.h
@@ -1,3 +1,4 @@
+
#ifndef GUARD_MENU_H
#define GUARD_MENU_H
@@ -17,6 +18,8 @@ struct MenuAction
} func;
};
+extern const u16 gUnknown_0860F074[];
+
void sub_81971D0(void);
void sub_8197200(void);
u16 sub_8197224(void);
@@ -25,13 +28,15 @@ void NewMenuHelpers_DrawDialogueFrame(u8, u8);
void sub_819746C(u8 windowId, bool8 copyToVram);
void NewMenuHelpers_DrawStdWindowFrame(u8, u8);
u16 AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 *str, u8 speed, void (*callback)(struct TextSubPrinter *, u16), u8 fgColor, u8 bgColor, u8 shadowColor);
+void PrintPlayerNameOnWindow(u8, const u8*, u16, u16);
void DisplayItemMessageOnField(u8 taskId, const u8 *src, TaskFunc callback);
-void sub_8197434(u8 a0, u8 a1);
+void sub_8197434(u8 windowId, bool8 copyToVram);
void SetStandardWindowBorderStyle(u8 a0, u8 a1);
void sub_8197930(void);
u8 GetPlayerTextSpeed(void);
void sub_81978B0(u16 arg0);
+void AddTextPrinterWithCallbackForMessage(bool8 a1, void (*callback)(struct TextSubPrinter *, u16));
void box_print(u8 windowId, u8 fontId, u8 left, u8 top, const u8 *color, s8 speed, const u8 *str);
void sub_8198070(u8 windowId, bool8 copyToVram);
void SetWindowTemplateFields(struct WindowTemplate* template, u8 priority, u8 tilemapLeft, u8 tilemapTop, u8 width, u8 height, u8 palNum, u16 baseBlock);
@@ -48,7 +53,9 @@ 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);
+s8 ProcessMenuInput_other(void);
void do_scheduled_bg_tilemap_copies_to_vram(void);
void clear_scheduled_bg_copies_to_vram(void);
void AddTextPrinterParameterized2(u8 windowId, u8 fontId, u8 x, u8 y, u8 letterSpacing, u8 lineSpacing, const u8 *color, s8 speed, const u8 *str);
@@ -59,5 +66,23 @@ 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);
+u8 GetStartMenuWindowId(void);
+void sub_819A2BC(u8, u8);
+u8 MoveMenuCursor(s8 cursorDelta);
+void NewMenuHelpers_DrawStdWindowFrame(u8 windowId, bool8 CopyToVram);
+u8 sub_81979C4(u8 a1);
+u8 sub_81983AC(u8 windowId, u8 fontId, u8 left, u8 top, u8 cursorHeight, u8 numChoices, u8 initialCursorPos);
+void sub_819786C(u8 windowId, bool8 copyToVram);
+void AddTextPrinterForMessage_2(bool8 allowSkippingDelayWithButtonPress);
+void RemoveStartMenuWindow(void);
+void sub_8197948(u8 initialCursorPos);
+void sub_819A344(u8 a0, u8 *dest, u8 color);
+void RemoveMapNamePopUpWindow(void);
+u8 GetMapNamePopUpWindowId(void);
+u8 AddMapNamePopUpWindow(void);
#endif // GUARD_MENU_H
diff --git a/include/menu_helpers.h b/include/menu_helpers.h
index 048a4aa43..387a89fdd 100644
--- a/include/menu_helpers.h
+++ b/include/menu_helpers.h
@@ -14,23 +14,27 @@ struct YesNoFuncTable
// Exported RAM declarations
// Exported ROM declarations
-
-void sub_812225C(u16 *, u16 *, u8, u8);
-void sub_8122298(u16 *, u16 *, u8, u8, u8);
-void sub_8121F68(u8 taskId, const struct YesNoFuncTable *data);
-bool8 sub_81221AC(void);
-bool8 sub_81221EC(void);
void ResetVramOamAndBgCntRegs(void);
-void SetVBlankHBlankCallbacksToNull(void);
void ResetAllBgsCoordinates(void);
+void SetVBlankHBlankCallbacksToNull(void);
+void DisplayMessageAndContinueTask(u8 taskId, u8 windowId, u16 arg2, u8 arg3, u8 fontId, u8 textSpeed, const u8 *string, void *taskFunc);
bool16 RunTextPrintersRetIsActive(u8 textPrinterId);
-void sub_8122344(void *arg0, u8 arg1);
-void LoadListMenuArrowsGfx(void);
-void sub_81223FC(u8 *a0, u8 count, u8 a2);
-void sub_8122448(u8 *a0, u8 count, u16 x, u16 y);
-void DisplayMessageAndContinueTask(u8 taskId, u8 arg1, u16 arg2, u8 arg3, u8 arg4, u8 textSpeed, const u8 *string, void *taskFunc);
+void sub_8121F68(u8 taskId, const struct YesNoFuncTable *data);
void CreateYesNoMenuWithCallbacks(u8 taskId, const struct WindowTemplate *template, u8 arg2, u8 arg3, u8 arg4, u16 tileStart, u8 palette, const struct YesNoFuncTable *yesNo);
+bool8 AdjustQuantityAccordingToDPadInput(s16 *arg0, u16 arg1);
u8 GetLRKeysState(void);
u8 sub_812210C(void);
+bool8 sub_8122148(u16 itemId);
+bool8 itemid_80BF6D8_mail_related(u16 itemId);
+bool8 sub_81221AC(void);
+bool8 sub_81221EC(void);
+void sub_812220C(struct ItemSlot *slots, u8 count, u8 *arg2, u8 *usedSlotsCount, u8 maxUsedSlotsCount);
+void sub_812225C(u16 *arg0, u16 *arg1, u8 arg2, u8 arg3);
+void sub_8122298(u16 *arg0, u16 *arg1, u8 arg2, u8 arg3, u8 arg4);
+void LoadListMenuArrowsGfx(void);
+void sub_8122344(u8 *spriteIds, u8 count);
+void sub_81223B0(u8 *spriteIds, u8 count);
+void sub_81223FC(u8 *spriteIds, u8 count, bool8 invisible);
+void sub_8122448(u8 *spriteIds, u8 count, s16 x, u16 y);
#endif //GUARD_MENU_HELPERS_H
diff --git a/include/menu_indicators.h b/include/menu_indicators.h
index d0baac810..a099cffab 100644
--- a/include/menu_indicators.h
+++ b/include/menu_indicators.h
@@ -6,7 +6,32 @@
// Exported RAM declarations
// Exported ROM declarations
+
+struct ArrowStruct
+{
+ u8 unk0[6];
+ u16 unk6[4];
+ u8 unkE;
+};
+
+struct CursorStruct
+{
+ u8 unk0;
+ u8 unk1;
+ u16 unk2;
+ u16 unk4;
+ u16 unk6;
+ u16 unk8;
+ u8 unkA;
+};
+
+void Task_ScrollIndicatorArrowPairOnMainMenu(u8);
u8 AddScrollIndicatorArrowPairParametrized(u8, u8, u8, u8, s32, u16, u16, u16 *);
void RemoveScrollIndicatorArrowPair(u8);
+u8 AddScrollIndicatorArrowPair(const struct ArrowStruct*, void*);
+void sub_81AF15C(u8, u8, u8);
+void ListMenuRemoveCursorObject(u8 taskId, u32 cursorKind);
+void ListMenuUpdateCursorObject(u8 taskId, u16 x, u16 y, u32 cursorKind);
+u8 ListMenuAddCursorObjectInternal(struct CursorStruct *cursor, u32 cursorKind);
#endif //GUARD_MENU_INDICATORS_H
diff --git a/include/mon_markings.h b/include/mon_markings.h
new file mode 100644
index 000000000..852e8b4eb
--- /dev/null
+++ b/include/mon_markings.h
@@ -0,0 +1,24 @@
+#ifndef POKEEMERALD_MON_MARKINGS_H
+#define POKEEMERALD_MON_MARKINGS_H
+
+struct PokemonMarkMenu
+{
+ /*0x0000*/ u16 baseTileTag;
+ /*0x0002*/ u16 basePaletteTag;
+ /*0x0004*/ u8 markings; // bit flags
+ /*0x0005*/ s8 cursorPos;
+ /*0x0006*/ bool8 markingsArray[4];
+ /*0x000A*/ u8 cursorBaseY;
+ /*0x000B*/ bool8 spriteSheetLoadRequired;
+ /*0x000C*/ struct Sprite *menuWindowSprites[2]; // upper and lower halves of menu window
+ /*0x0014*/ struct Sprite *menuMarkingSprites[4];
+ /*0x0024*/ struct Sprite *unkSprite;
+ /*0x0028*/ struct Sprite *menuTextSprite;
+ /*0x002C*/ const u8 *frameTiles;
+ /*0x0030*/ const u16 *framePalette;
+ /*0x0034*/ u8 menuWindowSpriteTiles[0x1000];
+ /*0x1034*/ u8 filler1030[0x80];
+ /*0x10B4*/ u8 tileLoadState;
+}; // 10b8
+
+#endif //POKEEMERALD_MON_MARKINGS_H
diff --git a/include/multiboot_pokemon_colosseum.h b/include/multiboot_pokemon_colosseum.h
new file mode 100644
index 000000000..33e4bc33c
--- /dev/null
+++ b/include/multiboot_pokemon_colosseum.h
@@ -0,0 +1,6 @@
+#ifndef GUARD_MULTIBOOT_POKEMON_COLOSSEUM_H
+#define GUARD_MULTIBOOT_POKEMON_COLOSSEUM_H
+
+extern const u16 gMultiBootProgram_PokemonColosseum_Start[0x14000];
+
+#endif // GUARD_MULTIBOOT_POKEMON_COLOSSEUM_H
diff --git a/include/overworld.h b/include/overworld.h
index b7ed920db..15d7bb362 100644
--- a/include/overworld.h
+++ b/include/overworld.h
@@ -1,7 +1,5 @@
-#ifndef GUARD_ROM4_H
-#define GUARD_ROM4_H
-
-#include "main.h"
+#ifndef GUARD_OVERWORLD_H
+#define GUARD_OVERWORLD_H
struct UnkPlayerStruct
{
@@ -17,66 +15,132 @@ struct LinkPlayerMapObject
u8 mode;
};
-struct UCoords32
-{
- u32 x, y;
-};
-
+// Exported RAM declarations
+extern struct WarpData gUnknown_020322DC;
extern struct LinkPlayerMapObject gLinkPlayerMapObjects[4];
-extern MainCallback gFieldCallback;
-
-void IncrementGameStat(u8 index);
-
-void Overworld_SetMapObjTemplateCoords(u8, s16, s16);
-void Overworld_SetMapObjTemplateMovementType(u8, u8);
-void Overworld_SetWarpDestination(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y);
+extern u16 *gBGTilemapBuffers1;
+extern u16 *gBGTilemapBuffers2;
+extern u16 *gBGTilemapBuffers3;
-void saved_warp2_set(int unused, s8 mapGroup, s8 mapNum, s8 warpId);
-void saved_warp2_set_2(int unused, s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y);
-void Overworld_SetHealLocationWarp(u8);
-void sub_8084DD4(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y);
-void sub_8084E2C(s8, s8, s8, s8, s8);
-void sub_8084E80(s8, s8, s8, s8, s8);
-void sub_8084EBC(s16, s16);
+extern void (*gFieldCallback)(void);
-void player_avatar_init_params_reset(void);
+// Exported ROM declarations
+extern const struct UCoords32 gUnknown_08339D64[];
-bool8 Overworld_MapTypeAllowsTeleportAndFly(u8 mapType);
+void DoWhiteOut(void);
+void Overworld_ResetStateAfterFly(void);
void Overworld_ResetStateAfterTeleport(void);
-
-void Overworld_SetFlashLevel(s32 a1);
-//u8 Overworld_GetFlashLevel(void);
-void sub_8085524(u16);
-
-void Overworld_SetSavedMusic(u16);
-void Overworld_ChangeMusicToDefault(void);
-void Overworld_ChangeMusicTo(u16);
-
-bool32 is_c1_link_related_active(void);
-
-void strange_npc_table_clear(void);
-const struct MapHeader *get_mapheader_by_bank_and_number(u16, u16);
-void FieldObjectMoveDestCoords(struct MapObject *, u32, s16 *, s16 *);
-void sub_8086230(void);
-void c2_exit_to_overworld_2_switch(void);
-bool32 sub_8087598(void);
-void c2_exit_to_overworld_1_continue_scripts_restart_music(void);
+void Overworld_ResetStateAfterDigEscRope(void);
+void ResetGameStats(void);
+void IncrementGameStat(u8 index);
+u32 GetGameStat(u8 index);
+void SetGameStat(u8 index, u32 value);
+void ApplyNewEncryptionKeyToGameStats(u32 newKey);
+void LoadMapObjTemplatesFromHeader(void);
+void LoadSaveblockMapObjScripts(void);
+void Overworld_SetMapObjTemplateCoords(u8 localId, s16 x, s16 y);
+void Overworld_SetMapObjTemplateMovementType(u8 localId, u8 movementType);
+const struct MapData *get_mapdata_header(void);
+void ApplyCurrentWarp(void);
+void set_warp2_warp3_to_neg_1(void);
+void SetWarpData(struct WarpData *warp, s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y);
+bool32 warp_data_is_not_neg_1(struct WarpData *warp);
+struct MapHeader const *const Overworld_GetMapHeaderByGroupAndId(u16 mapGroup, u16 mapNum);
+struct MapHeader const *const warp1_get_mapheader(void);
+void set_current_map_header_from_sav1_save_old_name(void);
+void LoadSaveblockMapHeader(void);
+void update_camera_pos_from_warpid(void);
void warp_in(void);
-u8 get_map_light_level_by_bank_and_number(s8 mapGroup, s8 mapNum);
-void sub_8086194(void);
-void sub_8084CCC(u8 spawn);
-void warp1_set_2(s8 mapGroup, s8 mapNum, s8 warpNum);
-void c2_load_new_map(void);
+void Overworld_SetWarpDestination(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y);
+void warp1_set_2(s8 mapGroup, s8 mapNum, s8 warpId);
+void saved_warp2_set(s32 unused, s8 mapGroup, s8 mapNum, s8 warpId);
+void saved_warp2_set_2(s32 unused, s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y);
void copy_saved_warp2_bank_and_enter_x_to_warp1(u8 unused);
-void mapldr_default(void);
-void sub_808729C(void);
+void sub_8084CCC(u8 a1);
+void Overworld_SetWarpDestToLastHealLoc(void);
+void Overworld_SetHealLocationWarp(u8 healLocationId);
+void sub_8084D5C(s16 a1, s16 a2);
+void sub_8084DD4(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y);
+void sub_8084E14(void);
+void sub_8084E2C(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y);
+void warp1_set_to_warp2(void);
+void sub_8084E80(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y);
+void sub_8084EBC(s16 x, s16 y);
+void warp1_set_to_sav1w(void);
+void sub_8084F2C(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y);
+void sub_8084F6C(u8 a1);
+void sub_8084FAC(void);
+const struct MapConnection *GetMapConnection(u8 dir);
+bool8 sub_8084FF8(u8 dir, u16 x, u16 y);
+bool8 sub_8085058(u16 x, u16 y);
+bool8 sub_8085078(u16 x, u16 y);
+void mliX_load_map(u8 mapGroup, u8 mapNum);
+void player_avatar_init_params_reset(void);
+void walkrun_find_lowest_active_bit_in_bitfield(void);
+bool32 Overworld_IsBikingAllowed(void);
+void SetDefaultFlashLevel(void);
+void Overworld_SetFlashLevel(s32 flashLevel);
+u8 Overworld_GetFlashLevel(void);
+void sub_8085524(u16 mapDataId);
+void sub_8085540(u8 var);
+u8 sub_808554C(void);
+u16 GetLocationMusic(struct WarpData *warp);
+u16 GetCurrLocationDefaultMusic(void);
+u16 GetWarpDestinationMusic(void);
+void Overworld_ResetMapMusic(void);
+void Overworld_PlaySpecialMapMusic(void);
+void Overworld_SetSavedMusic(u16 songNum);
+void Overworld_ClearSavedMusic(void);
+void Overworld_ChangeMusicToDefault(void);
+void Overworld_ChangeMusicTo(u16 newMusic);
+u8 GetMapMusicFadeoutSpeed(void);
+void music_something(void);
+bool8 sub_80859A0(void);
+void Overworld_FadeOutMapMusic(void);
+void UpdateAmbientCry(s16 *state, u16 *delayCounter);
+u8 GetMapTypeByGroupAndId(s8 mapGroup, s8 mapNum);
+u8 GetMapTypeByWarpData(struct WarpData *warp);
+u8 Overworld_GetMapTypeOfSaveblockLocation(void);
u8 get_map_light_from_warp0(void);
-bool8 is_light_level_1_2_3_5_or_6(u8 a1);
-
-void IncrementGameStat(u8);
-u32 GetGameStat(u8);
-
+bool8 is_map_type_1_2_3_5_or_6(u8 mapType);
+bool8 Overworld_MapTypeAllowsTeleportAndFly(u8 mapType);
+bool8 Overworld_MapTypeIsIndoors(u8 mapType);
+u8 sav1_saved_warp2_map_get_name(void);
+u8 sav1_map_get_name(void);
+u8 GetCurrentMapBattleScene(void);
+void overworld_free_bg_tilemaps(void);
+bool32 is_c1_link_related_active(void);
+void CB1_Overworld(void);
void CB2_OverworldBasic(void);
+void CB2_Overworld(void);
+void SetMainCallback1(void (*cb)(void));
+void sub_8085E94(void *a0);
+void CB2_NewGame(void);
+void CB2_WhiteOut(void);
+void CB2_LoadMap(void);
+void sub_8086024(void);
+void sub_8086074(void);
+void CB2_ReturnToField(void);
+void CB2_ReturnToFieldLocal(void);
+void CB2_ReturnToFieldLink(void);
+void c2_8056854(void);
+void CB2_ReturnToFieldWithOpenMenu(void);
+void sub_80861B0(void);
+void CB2_ReturnToFieldContinueScript(void);
+void sub_80861E8(void);
+void CB2_ContinueSavedGame(void);
+void sub_8086C2C(void);
+u32 sub_8087214(void);
+bool32 sub_808727C(void);
+u16 sub_8087288(void);
+u16 sub_808729C(void);
+u16 sub_80872B0(void);
+u16 sub_80872C4(void);
+bool32 sub_8087598(void);
+bool32 sub_80875C8(void);
+bool32 sub_8087634(void);
+bool32 sub_808766C(void);
+void ZeroAllLinkPlayerMapObjects(void);
-#endif //GUARD_ROM4_H
+#endif // GUARD_OVERWORLD_H
diff --git a/include/palette.h b/include/palette.h
index 41cef4048..a1259d327 100644
--- a/include/palette.h
+++ b/include/palette.h
@@ -1,8 +1,6 @@
#ifndef GUARD_PALETTE_H
#define GUARD_PALETTE_H
-#include "global.h"
-
#define gPaletteFade_selectedPalettes (gPaletteFade.multipurpose1) // normal and fast fade
#define gPaletteFade_blendCnt (gPaletteFade.multipurpose1) // hardware fade
#define gPaletteFade_delay (gPaletteFade.multipurpose2) // normal and hardware fade
diff --git a/include/party_menu.h b/include/party_menu.h
index 1d1661cee..c96eb0d9d 100644
--- a/include/party_menu.h
+++ b/include/party_menu.h
@@ -1,6 +1,6 @@
#ifndef GUARD_PARTY_MENU_H
#define GUARD_PARTY_MENU_H
-
+#include "task.h"
enum
{
AILMENT_NONE,
@@ -11,6 +11,17 @@ enum
AILMENT_BRN
};
+struct Struct203CEC8
+{
+ u8 filler[0x9];
+ s8 unk9;
+ s8 unkA;
+ u8 unkB;
+ u8 filler2[0x2];
+};
+
+extern struct Struct203CEC8 gUnknown_0203CEC8;
+
bool8 pokemon_has_move(struct Pokemon *, u16);
void sub_81B58A8(void);
void DoWallyTutorialBagMenu(void);
@@ -18,5 +29,14 @@ 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);
+
+void sub_81B0FCC(u8 partyIdx, u8 a);
+void sub_81B1370(u8 taskId);
+void display_pokemon_menu_message(u8 windowId);
+void sub_81B1F18(u8 taskId, u8 pokemonIdx, s8 a, s16 hp, TaskFunc func);
+void sub_81B1B5C(void *a, u8 b);
+u8 sub_81B1BD4();
+void sub_81B8448();
#endif // GUARD_PARTY_MENU_H
diff --git a/include/player_pc.h b/include/player_pc.h
index b14d1ede3..bd060faa8 100644
--- a/include/player_pc.h
+++ b/include/player_pc.h
@@ -1,12 +1,88 @@
#ifndef GUARD_PLAYER_PC_H
#define GUARD_PLAYER_PC_H
+// local task defines
+#define PAGE_INDEX data[0]
+#define ITEMS_ABOVE_TOP data[1]
+#define NUM_ITEMS data[1]
+#define NUM_QUANTITY_ROLLER data[3]
+#define NUM_PAGE_ITEMS data[4]
+// not used
+#define CURRENT_ITEM_STORAGE_MENU data[3]
+// not used
+#define SWAP_ITEM_INDEX data[8]
+#define SWITCH_MODE_ACTIVE data[9]
+
+// this is potentially an ewram access occuring in high ewram. TODO: investigate this further.
+#define NEW_GAME_PC_ITEMS(i, type) ((u16)((u16 *)gNewGamePCItems + type)[i * 2])
+
+// defined and used in the above macro
+enum
+{
+ PC_ITEM_ID,
+ PC_QUANTITY
+};
+
+// player PC menu options
+enum
+{
+ PLAYERPC_MENU_ITEMSTORAGE,
+ PLAYERPC_MENU_MAILBOX,
+ PLAYERPC_MENU_DECORATION,
+ PLAYERPC_MENU_TURNOFF
+};
+
+// item storage menus
+enum
+{
+ ITEMPC_MENU_WITHDRAW,
+ ITEMPC_MENU_DEPOSIT,
+ ITEMPC_MENU_TOSS,
+ ITEMPC_MENU_EXIT
+};
+
+// mailbox mail options
+enum
+{
+ MAILBOX_READ,
+ MAILBOX_MOVE_TO_BAG,
+ MAILBOX_GIVE,
+ MAILBOX_CANCEL,
+};
+
+// special item description handlers
+enum
+{
+ ITEMPC_SWITCH_WHICH_ITEM = 0xFFF7,
+ ITEMPC_OKAY_TO_THROW_AWAY,
+ ITEMPC_TOO_IMPORTANT,
+ ITEMPC_NO_MORE_ROOM,
+ ITEMPC_THREW_AWAY_ITEM,
+ ITEMPC_HOW_MANY_TO_TOSS,
+ ITEMPC_WITHDREW_THING,
+ ITEMPC_HOW_MANY_TO_WITHDRAW,
+ ITEMPC_GO_BACK_TO_PREV
+};
+
+struct PlayerPCItemPageStruct
+{
+ u16 cursorPos;
+ u16 itemsAbove;
+ u8 pageItems;
+ u8 count;
+ u8 filler[3];
+ u8 scrollIndicatorId;
+};
+
// Exported type declarations
// Exported RAM declarations
+extern struct PlayerPCItemPageStruct playerPCItemPageInfo;
// Exported ROM declarations
+extern const struct MenuAction gMailboxMailOptions[];
-void sub_816B060(u8 taskId);
+void ReshowPlayerPC(u8 taskId);
+void sub_816B31C(void);
#endif //GUARD_PLAYER_PC_H
diff --git a/include/pokedex.h b/include/pokedex.h
index 236feac45..19e1162e2 100644
--- a/include/pokedex.h
+++ b/include/pokedex.h
@@ -17,7 +17,6 @@ enum
};
s8 GetSetPokedexFlag(u16 nationalNum, u8 caseId);
-u16 pokedex_count(u8);
-u16 sub_80C0844(u8);
+u16 sub_80C0E9C(u16, s16, s16, u16);
#endif // GUARD_POKEDEX_H
diff --git a/include/pokemon.h b/include/pokemon.h
index de52696dd..b6b0d6d36 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -2,6 +2,7 @@
#define GUARD_POKEMON_H
#include "constants/pokemon.h"
+#include "sprite.h"
#define MON_DATA_PERSONALITY 0
#define MON_DATA_OT_ID 1
@@ -266,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
@@ -424,17 +465,24 @@ 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 struct BattleMove gBattleMoves[];
+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[];
+extern const struct CompressedSpritePalette gMonPaletteTable[];
void ZeroBoxMonData(struct BoxPokemon *boxMon);
void ZeroMonData(struct Pokemon *mon);
@@ -448,26 +496,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.
@@ -476,93 +543,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_3.h b/include/pokemon_3.h
index 82dfacf48..263839b19 100644
--- a/include/pokemon_3.h
+++ b/include/pokemon_3.h
@@ -1,6 +1,7 @@
#ifndef GUARD_POKEMON_3_H
#define GUARD_POKEMON_3_H
+u16 sub_806EFF0(u16);
const u8* GetTrainerClassNameFromId(u16 trainerId);
const u8* GetTrainerNameFromId(u16 trainerId);
void PlayMapChosenOrBattleBGM(u16 song);
diff --git a/include/pokemon_icon.h b/include/pokemon_icon.h
index e7fc81ce4..f1c8a3e61 100644
--- a/include/pokemon_icon.h
+++ b/include/pokemon_icon.h
@@ -1,15 +1,20 @@
#ifndef GUARD_POKEMON_ICON_H
#define GUARD_POKEMON_ICON_H
+const u8 *GetMonIconTiles(u16 species, bool32);
const u8 *GetMonIconPtr(u16 speciesId, u32 personality, u32 frameNo);
const u16 *GetValidMonIconPalettePtr(u16 speciesId);
u16 GetUnownLetterByPersonality(u32 personality);
u16 sub_80D2E84(u16 speciesId);
-void sub_80D2F04(void);
-void sub_80D2F68(u16 iconId);
-u8 sub_80D2D78(u16 iconId, void callback(struct Sprite *), u16 x, u16 y, u16 a4, u8 a5);
-void sub_80D2FF0(u16 iconId);
+void LoadMonIconPalettes(void);
+void LoadMonIconPalette(u16 species);
+void FreeMonIconPalettes(void);
+u8 sub_80D2D78(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority, bool32 extra);
+void FreeMonIconPalette(u16 species);
void sub_80D2EF8(struct Sprite *sprite);
-u8 CreateMonIcon(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority, u32 personality, int a7);
+u8 CreateMonIcon(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority, u32 personality, bool32 extra);
+u8 UpdateMonIconFrame(struct Sprite *sprite);
+void LoadMonIconPalette(u16 species);
+void sub_80D328C(struct Sprite *sprite);
#endif // GUARD_POKEMON_ICON_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/pokenav.h b/include/pokenav.h
index ebe3b325c..42affc938 100644
--- a/include/pokenav.h
+++ b/include/pokenav.h
@@ -1,5 +1,6 @@
#ifndef GUARD_POKENAV_H
#define GUARD_POKENAV_H
+#include "player_pc.h"
bool8 sub_81D5C18(void);
bool8 sub_81D20BC(void *arg0);
@@ -13,5 +14,13 @@ void sub_81D3480(void *arg0, u8 arg1);
void sub_81D2754(void *arg0, void *arg1);
void sub_81D1F84(void *arg0, void *arg1, void *arg2);
const u8 *sub_81D62AC(void);
+u8 sub_81D1C84(u8);
+u8 sub_81D1DC0(struct PlayerPCItemPageStruct *);
+void sub_81D1E90(struct PlayerPCItemPageStruct *);
+void sub_81D1EC0(void);
+void sub_81D1D04(u8);
+bool8 sub_81D1C44(u8);
+void sub_81D5FB4(u16*);
+
#endif //GUARD_POKENAV_H
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/rom6.h b/include/rom6.h
index f91b34b4a..058504fe2 100644
--- a/include/rom6.h
+++ b/include/rom6.h
@@ -11,6 +11,8 @@ void UpdateBirchState(u16 days);
void UpdateFrontierManiac(u16 days);
void UpdateFrontierGambler(u16 days);
void SetShoalItemFlag(u16 days);
+
+bool8 npc_before_player_of_type(u8);
u8 oei_task_add(void);
#endif //GUARD_ROM6_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/rotating_gate.h b/include/rotating_gate.h
new file mode 100644
index 000000000..50a838953
--- /dev/null
+++ b/include/rotating_gate.h
@@ -0,0 +1,8 @@
+#ifndef GUARD_ROTATING_GATE_H
+#define GUARD_ROTATING_GATE_H
+
+void RotatingGatePuzzleCameraUpdate(s16, s16);
+void RotatingGate_InitPuzzleAndGraphics();
+u32 CheckForRotatingGatePuzzleCollision(u8, s16, s16);
+
+#endif // GUARD_ROTATING_GATE_H
diff --git a/include/roulette_util.h b/include/roulette_util.h
new file mode 100644
index 000000000..f59c4e44c
--- /dev/null
+++ b/include/roulette_util.h
@@ -0,0 +1,17 @@
+#ifndef GUARD_ROULETTE_UTIL_H
+#define GUARD_ROULETTE_UTIL_H
+
+// structures
+struct InnerStruct203CF18
+{
+ u8 filler[0xC4];
+};
+
+void sub_8151B68(struct InnerStruct203CF18 *, const u8*);
+void sub_8151B3C(struct InnerStruct203CF18 *);
+void sub_8151CA8(struct InnerStruct203CF18 *, u8, u8);
+void sub_8151C50(struct InnerStruct203CF18 *, u8, u8);
+void sub_8151D28(struct InnerStruct203CF18 *, u8, u8);
+void sub_8151E50(struct InnerStruct203CF18 *);
+
+#endif // GUARD_ROULETTE_UTIL_H
diff --git a/include/save.h b/include/save.h
index df03c4183..7b271129a 100644
--- a/include/save.h
+++ b/include/save.h
@@ -47,19 +47,19 @@ enum
// Do save types
enum
{
- NORMAL_SAVE,
- LINK_SAVE,
- //EREADER_SAVE, // depreciated in Emerald
- LINK2_SAVE, // unknown 2nd link save
- HOF_SAVE,
- DIFFERENT_FILE_SAVE,
- HOF_DELETE_SAVE // unused
+ SAVE_NORMAL,
+ SAVE_LINK,
+ //EREADER_SAVE, // deprecated in Emerald
+ SAVE_LINK2, // unknown 2nd link save
+ SAVE_HALL_OF_FAME,
+ SAVE_OVERWRITE_DIFFERENT_FILE,
+ SAVE_HALL_OF_FAME_ERASE_BEFORE // unused
};
#define SECTION_ID_RECORDED_BATTLE 31
void ClearSaveData(void);
-void ResetSaveCounters(void);
+void Save_ResetSaveCounters(void);
bool32 SetDamagedSectorBits(u8 op, u8 bit);
u8 save_write_to_flash(u16 a1, const struct SaveSectionLocation *location);
u8 HandleWriteSector(u16 a1, const struct SaveSectionLocation *location);
@@ -88,7 +88,7 @@ u8 sub_81533E0(void);
u8 sub_8153408(void);
u8 sub_8153430(void);
bool8 sub_8153474(void);
-u8 sub_81534D0(u8 a1);
+u8 Save_LoadGameData(u8 a1);
u16 sub_815355C(void);
u8 sub_81534D0(u8);
u8 sub_8153430(void);
diff --git a/include/script_menu.h b/include/script_menu.h
index 717eda041..0555d0f78 100644
--- a/include/script_menu.h
+++ b/include/script_menu.h
@@ -9,5 +9,8 @@ bool8 ScriptMenu_YesNo(u8 var1, u8 var2);
bool8 ScriptMenu_MultichoiceGrid(u8 left, u8 top, u8 multichoiceId, u8 a4, u8 columnCount);
bool8 ScriptMenu_ShowPokemonPic(u16 var1, u8 var2, u8 var3);
bool8 (*ScriptMenu_GetPicboxWaitFunc(void))(void);
+u8 convert_pixel_width_to_tile_width(s32);
+u8 CreateWindowFromRect(u8, u8, u8, u8);
+void sub_80E2A78(u8);
#endif //GUARD_SCRIPT_MENU_H
diff --git a/include/secret_base.h b/include/secret_base.h
index 91e7083b3..ae3049fbd 100644
--- a/include/secret_base.h
+++ b/include/secret_base.h
@@ -12,5 +12,8 @@ void sub_80EB18C(struct SecretBaseRecord *dest);
void sub_80E9914(void);
u8 *GetSecretBaseMapName(u8 *dest);
const u8 *GetSecretBaseTrainerLoseText(void);
+void sub_80E8EE0(struct MapEvents const *events);
+void sub_80E9238(u8 flagIn);
+bool8 CurrentMapIsSecretBase(void);
#endif //GUARD_SECRET_BASE_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/start_menu.h b/include/start_menu.h
index 6c7cb3237..5551b149d 100644
--- a/include/start_menu.h
+++ b/include/start_menu.h
@@ -1,6 +1,16 @@
#ifndef GUARD_START_MENU_H
#define GUARD_START_MENU_H
+extern bool8 (*gMenuCallback)(void); // Defined in sym_common.txt
+
+void sub_809FA18(void);
+void sub_809FA34(u8 taskId);
+void ShowStartMenu(void);
+void sub_809FDD4(void);
+void SaveGame(void);
+void sub_80A0514(void);
+void sub_80A08CC(void);
+void HideStartMenu(void);
void AppendToList(u8* list, u8* pos, u8 newEntry);
#endif // GUARD_START_MENU_H
diff --git a/include/starter_choose.h b/include/starter_choose.h
index 61bc17735..18af478aa 100644
--- a/include/starter_choose.h
+++ b/include/starter_choose.h
@@ -1,6 +1,11 @@
#ifndef GUARD_STARTER_CHOOSE_H
#define GUARD_STARTER_CHOOSE_H
+extern const u16 gBirchBagGrassPal[2][16];
+extern const u8 gBirchBagTilemap[];
+extern const u8 gBirchGrassTilemap[];
+extern const u8 gBirchHelpGfx[];
+
u16 GetStarterPokemon(u16 chosenStarterId);
void CB2_ChooseStarter(void);
diff --git a/include/strings.h b/include/strings.h
index 9c7f9e4f0..a86ab25fe 100644
--- a/include/strings.h
+++ b/include/strings.h
@@ -74,6 +74,10 @@ extern const u8 gText_DecorationWillBeDiscarded[];
extern const u8 gText_CantThrowAwayInUse[];
extern const u8 gText_DecorationThrownAway[];
+extern const u8 gText_PokeBalls[];
+extern const u8 gText_Berries[];
+extern const u8 gText_Berry[];
+
extern const u8 gText_Desk[];
extern const u8 gText_Chair[];
extern const u8 gText_Plant[];
@@ -101,6 +105,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_MixingRecords[];
extern const u8 gText_RecordMixingComplete[];
extern const u8 gText_EmptyString2[];
@@ -109,9 +118,6 @@ extern const u8 gText_Cancel4[];
extern const u8 gText_IsThisTheCorrectTime[];
extern const u8 gText_PkmnFainted3[];
extern const u8 gText_Coins[];
-extern const u8 gText_Draw[];
-extern const u8 gText_Loss[];
-extern const u8 gText_Win[];
extern const u8 gText_Var1AteTheVar2[];
extern const u8 gText_Var1HappilyAteVar2[];
@@ -136,6 +142,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[];
@@ -189,6 +203,23 @@ extern const u8 gText_Peak[];
extern const u8 gText_SafariBallStock[];
extern const u8 gText_BattlePyramidFloor[];
+// save menu texts
+extern const u8 gText_ConfirmSave[];
+extern const u8 gText_DifferentSaveFile[];
+extern const u8 gText_AlreadySavedFile[];
+extern const u8 gText_SavingDontTurnOff[];
+extern const u8 gText_PlayerSavedGame[];
+extern const u8 gText_SaveError[];
+extern const u8 gText_SavingDontTurnOffPower[];
+extern const u8 gText_SavingPlayer[];
+extern const u8 gText_SavingBadges[];
+extern const u8 gText_SavingPokedex[];
+extern const u8 gText_SavingTime[];
+
+// Battle pyramid menu texts
+extern const u8 gText_BattlePyramidConfirmRest[];
+extern const u8 gText_BattlePyramidConfirmRetire[];
+
// option menu texts
extern const u8 gText_TextSpeedSlow[];
extern const u8 gText_TextSpeedMid[];
@@ -220,6 +251,76 @@ extern const u8 gText_FemaleSymbol[];
extern const u8 gText_SelectorArrow3[];
extern const u8 gText_YesNo[];
+// main menu/birch speech text
+extern const u8 gText_SaveFileErased[];
+extern const u8 gText_SaveFileCorrupted[];
+extern const u8 gJPText_No1MSubCircuit[];
+extern const u8 gText_BatteryRunDry[];
+extern const u8 gText_MainMenuNewGame[];
+extern const u8 gText_MainMenuOption[];
+extern const u8 gText_MainMenuContinue[];
+extern const u8 gText_MainMenuMysteryGift2[];
+extern const u8 gText_MainMenuMysteryEvents[];
+extern const u8 gText_MainMenuMysteryGift[];
+extern const u8 gText_WirelessNotConnected[];
+extern const u8 gText_MysteryGiftCantUse[];
+extern const u8 gText_MysteryEventsCantUse[];
+extern const u8 gText_Birch_Welcome[];
+extern const u8 gText_ThisIsAPokemon[];
+extern const u8 gText_Birch_MainSpeech[];
+extern const u8 gText_Birch_AndYouAre[];
+extern const u8 gText_Birch_BoyOrGirl[];
+extern const u8 gText_Birch_WhatsYourName[];
+extern const u8 gText_Birch_SoItsPlayer[];
+extern const u8 gText_Birch_YourePlayer[];
+extern const u8 gText_Birch_AreYouReady[];
+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[];
extern const u8 gText_LoadErrorEndingSession[];
@@ -241,4 +342,108 @@ 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[];
+
+// party menu text
+extern const u8 gText_PkmnHPRestoredByVar2[];
+extern const u8 gText_CantBeUsedOnPkmn[];
+
+// birch dex rating text
+extern const u8 gBirchDexRatingText_LessThan10[];
+extern const u8 gBirchDexRatingText_LessThan20[];
+extern const u8 gBirchDexRatingText_LessThan30[];
+extern const u8 gBirchDexRatingText_LessThan40[];
+extern const u8 gBirchDexRatingText_LessThan50[];
+extern const u8 gBirchDexRatingText_LessThan60[];
+extern const u8 gBirchDexRatingText_LessThan70[];
+extern const u8 gBirchDexRatingText_LessThan80[];
+extern const u8 gBirchDexRatingText_LessThan90[];
+extern const u8 gBirchDexRatingText_LessThan100[];
+extern const u8 gBirchDexRatingText_LessThan110[];
+extern const u8 gBirchDexRatingText_LessThan120[];
+extern const u8 gBirchDexRatingText_LessThan130[];
+extern const u8 gBirchDexRatingText_LessThan140[];
+extern const u8 gBirchDexRatingText_LessThan150[];
+extern const u8 gBirchDexRatingText_LessThan160[];
+extern const u8 gBirchDexRatingText_LessThan170[];
+extern const u8 gBirchDexRatingText_LessThan180[];
+extern const u8 gBirchDexRatingText_LessThan190[];
+extern const u8 gBirchDexRatingText_LessThan200[];
+extern const u8 gBirchDexRatingText_DexCompleted[];
+
+// player pc text
+extern const u8 gText_WhatWouldYouLike[];
+extern const u8 gText_NoMailHere[];
+
+extern const u8 gText_TakeOutItemsFromPC[];
+extern const u8 gText_StoreItemsInPC[];
+extern const u8 gText_ThrowAwayItemsInPC[];
+extern const u8 gText_GoBackPrevMenu[];
+
+extern const u8 gText_ItemStorage[];
+extern const u8 gText_Mailbox[];
+extern const u8 gText_Decoration[];
+extern const u8 gText_TurnOff[];
+
+extern const u8 gText_WithdrawItem[];
+extern const u8 gText_DepositItem[];
+extern const u8 gText_TossItem[];
+extern const u8 gText_Cancel[];
+
+extern const u8 gText_Read[];
+extern const u8 gText_MoveToBag[];
+extern const u8 gText_Give2[];
+extern const u8 gText_Cancel2[];
+
+extern const u8 gText_NoItems[];
+extern const u8 gText_WhatToDoWithVar1sMail[];
+extern const u8 gText_MessageWillBeLost[];
+extern const u8 gText_BagIsFull[];
+
+extern const u8 gText_MailToBagMessageErased[];
+extern const u8 gText_GoBackPrevMenu[];
+extern const u8 gText_WithdrawHowManyItems[];
+extern const u8 gText_WithdrawXItems[];
+extern const u8 gText_TossHowManyVar1s[];
+extern const u8 gText_ThrewAwayVar2Var1s[];
+extern const u8 gText_NoRoomInBag[];
+extern const u8 gText_TooImportantToToss[];
+extern const u8 gText_ConfirmTossItems[];
+extern const u8 gText_MoveVar1Where[];
+
+extern const u8 gText_Friend[];
+extern const u8 gText_Tristan[];
+extern const u8 gText_Philip[];
+extern const u8 gText_Dennis[];
+extern const u8 gText_Roberto[];
+extern const u8 gText_FiveMarks[];
+
+extern const u8 gText_TotalRecordWLD[];
+extern const u8 gText_PlayersBattleResults[];
+extern const u8 gText_WinLoseDraw[];
+
#endif //GUARD_STRINGS_H
diff --git a/include/text.h b/include/text.h
index e073c3762..2566b51b7 100644
--- a/include/text.h
+++ b/include/text.h
@@ -82,6 +82,12 @@
#define TEXT_COLOR_TRANSPARENT 0x0
#define TEXT_COLOR_WHITE 0x1
#define TEXT_COLOR_DARK_GREY 0x2
+// 0x3
+#define TEXT_COLOR_RED 0x4
+// 0x5
+#define TEXT_COLOR_GREEN 0x6
+// 0x7
+#define TEXT_COLOR_BLUE 0x8
// battle placeholders are located in battle_message.h
@@ -208,6 +214,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/text_window.h b/include/text_window.h
index e6a753fcb..2ac13fab7 100644
--- a/include/text_window.h
+++ b/include/text_window.h
@@ -5,11 +5,11 @@
struct TilesPal
{
- const u32 *tiles;
+ const u8 *tiles;
const u16 *pal;
};
-extern const u32 gTextWindowFrame1_Gfx[];
+extern const u8 gTextWindowFrame1_Gfx[];
extern const u16 gTextWindowFrame1_Pal[];
const struct TilesPal* GetWindowFrameTilesPal(u8 id);
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/trader.h b/include/trader.h
index 71fd1f7c2..c07ea81bd 100644
--- a/include/trader.h
+++ b/include/trader.h
@@ -7,5 +7,7 @@
void sub_8133DA0(u8 taskId);
void sub_8133E1C(u8 taskId);
+void TraderSetup(void);
+void Trader_ResetFlag(void);
#endif //GUARD_TRADER_H
diff --git a/include/trainer_card.h b/include/trainer_card.h
new file mode 100644
index 000000000..5cb93dba0
--- /dev/null
+++ b/include/trainer_card.h
@@ -0,0 +1,35 @@
+#ifndef GUARD_TRAINER_CARD_H
+#define GUARD_TRAINER_CARD_H
+
+struct TrainerCard
+{
+ /*0x00*/ u8 gender;
+ /*0x01*/ u8 stars;
+ /*0x02*/ bool8 hasPokedex;
+ /*0x03*/ bool8 var_3;
+ /*0x04*/ bool8 var_4;
+ /*0x05*/ u8 var_5;
+ /*0x06*/ u16 firstHallOfFameA;
+ /*0x08*/ u16 firstHallOfFameB;
+ /*0x0A*/ u16 firstHallOfFameC;
+ /*0x0C*/ u16 pokedexSeen;
+ /*0x0E*/ u16 trainerId;
+ /*0x10*/ u16 playTimeHours;
+ /*0x12*/ u16 playTimeMinutes;
+ /*0x14*/ u16 linkBattleWins;
+ /*0x16*/ u16 linkBattleLosses;
+ /*0x18*/ u16 battleTowerWins;
+ /*0x1A*/ u16 battleTowerLosses;
+ /*0x1C*/ u16 contestsWithFriends;
+ /*0x1E*/ u16 pokeblocksWithFriends;
+ /*0x20*/ u16 pokemonTrades;
+ /*0x22*/ u16 var_22;
+ /*0x24*/ u32 money;
+ /*0x28*/ u16 var_28[4];
+ /*0x30*/ u8 playerName[8];
+ /*0x38*/ u8 emeraldAddedUnknownFields[0x64-0x38];
+};
+
+extern struct TrainerCard gTrainerCards[4];
+
+#endif // GUARD_TRAINER_CARD_H
diff --git a/include/tv.h b/include/tv.h
index e0f3e2b0d..1b3423275 100644
--- a/include/tv.h
+++ b/include/tv.h
@@ -4,19 +4,49 @@
extern u8 *const gTVStringVarPtrs[3];
void ClearTVShowData(void);
-void PutPokemonTodayCaughtOnAir(void);
+void sub_80EE184(void);
+void sub_80EE35C(u16 foeSpecies, u16 species, u8 moveIdx, const u16 *movePtr, u16 betterMove);
+void sub_80EE8C8(u16 winStreak, u8 facility);
+void DoTVShow(void);
+void DoTVShowInSearchOfTrainers(void);
+void sub_80EDCE8(void);
+void sub_80EE2CC(void);
+void sub_80EE72C(void);
+void sub_80EED10(void);
+void sub_80EED34(void);
+void sub_80EED60(u16 delta);
+void sub_80F01B8(void);
+void sub_80F01E8(void *src, u32 size, u8 masterIdx);
+void sub_80EE4DC(struct Pokemon *pokemon, u8 ribbonMonDataIdx);
u32 GetPlayerIDAsU32(void);
bool8 GetPriceReduction(u8 newsKind);
+void sub_80F14F8(TVShow *shows);
+size_t CountDigits(int value);
u8 GetRibbonCount(struct Pokemon *pokemon);
-void TV_PutSecretBaseVisitOnTheAir(void);
-void sub_80EE184(void);
+void sub_80EDE70(u16 nCoinsSpent);
+void sub_80EDE84(u16 nCoinsSpent);
+void sub_80EDD78(u16 nCoinsPaidOut);
void sub_80EEA70(void);
+void sub_80EDB44(void);
+void sub_80EDC60(const u16 *words);
+void sub_80EDA80(void);
+void sub_80F0C7C(void *src, u32 size, u8 masterIdx);
+void sub_80F0BB8(void);
+void sub_80ED950(bool8 flag);
+void sub_80EEC80(void);
+void sub_80EECA4(void);
+void sub_80EECC8(void);
+void sub_80EECEC(void);
+void sub_80F1208(TVShow *shows);
+void sub_80EE44C(u8 nMonsCaught, u8 nPkblkUsed);
void sub_80F14F8(TVShow *shows);
size_t sub_80EF370(int value);
-void sub_80F1208(TVShow *dest);
-void sub_80F0BB8(void);
bool8 Put3CheersForPokeblocksOnTheAir(const u8 *partnersName, u8 flavor, u8 unused, u8 sheen, u8 language);
void SetPokemonAnglerSpecies(u16 species);
void UpdateTVShowsPerDay(u16 days);
+void PutPokemonTodayCaughtOnAir(void);
+void TV_PutSecretBaseVisitOnTheAir(void);
+void PutBattleUpdateOnTheAir(u8 opponentLinkPlayerId, u16 move, u16 speciesPlayer, u16 speciesOpponent);
+void UpdateTVScreensOnMap(int, int);
#endif //GUARD_TV_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 eb9db642c..e75c810a9 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -47,14 +47,17 @@ SECTIONS {
src/dma3_manager.o(.text);
src/gpu_regs.o(.text);
src/bg.o(.text);
- asm/blit.o(.text);
+ src/blit.o(.text);
src/window.o(.text);
src/text.o(.text);
src/sprite.o(.text);
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);
- asm/main_menu.o(.text);
+ src/main_menu.o(.text);
src/battle_controllers.o(.text);
src/decompress.o(.text);
asm/rom_8034C54.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);
@@ -82,24 +79,24 @@ SECTIONS {
src/daycare.o(.text);
src/egg_hatch.o(.text);
src/battle_interface.o(.text);
- asm/smokescreen.o(.text);
+ src/smokescreen.o(.text);
src/pokeball.o(.text);
src/load_save.o(.text);
asm/trade.o(.text);
src/berry_blender.o(.text);
src/play_time.o(.text);
src/new_game.o(.text);
- asm/overworld.o(.text);
- asm/fieldmap.o(.text);
+ src/overworld.o(.text);
+ src/fieldmap.o(.text);
src/metatile_behavior.o(.text);
- asm/field_camera.o(.text);
+ src/field_camera.o(.text);
src/field_door.o(.text);
asm/field_player_avatar.o(.text);
src/field_map_obj.o(.text);
asm/field_ground_effect.o(.text);
src/field_map_obj_helpers.o(.text);
src/field_message_box.o(.text);
- asm/map_obj_lock.o(.text);
+ src/map_obj_lock.o(.text);
src/text_window.o(.text);
src/script.o(.text);
src/scrcmd.o(.text);
@@ -110,7 +107,6 @@ SECTIONS {
src/clock.o(.text);
src/reset_rtc_screen.o(.text);
src/start_menu.o(.text);
- asm/start_menu.o(.text);
src/tileset_anims.o(.text);
src/palette.o(.text);
src/sound.o(.text);
@@ -125,7 +121,7 @@ SECTIONS {
asm/cable_club.o(.text);
src/trainer_see.o(.text);
src/wild_encounter.o(.text);
- asm/field_effect.o(.text);
+ src/field_effect.o(.text);
src/scanline_effect.o(.text);
src/option_menu.o(.text);
src/pokedex.o(.text);
@@ -134,15 +130,13 @@ SECTIONS {
src/pokemon_storage_system.o(.text);
asm/pokemon_storage_system.o(.text);
src/pokemon_icon.o(.text);
- asm/pokemon_icon.o(.text);
- asm/script_movement.o(.text);
+ src/script_movement.o(.text);
asm/fldeff_cut.o(.text);
src/mail_data.o(.text);
- asm/map_name_popup.o(.text);
- asm/item_menu_icons.o(.text);
+ src/map_name_popup.o(.text);
+ src/item_menu_icons.o(.text);
asm/battle_anim_80D51AC.o(.text);
src/item.o(.text);
- asm/item.o(.text);
asm/contest.o(.text);
asm/shop.o(.text);
src/berry.o(.text);
@@ -160,18 +154,18 @@ SECTIONS {
src/pokemon_size_record.o(.text);
asm/fldeff_80F9BCC.o(.text);
src/field_special_scene.o(.text);
- asm/rotating_gate.o(.text);
+ src/rotating_gate.o(.text);
src/safari_zone.o(.text);
asm/contest_link_80FC4F4.o(.text);
src/item_use.o(.text);
asm/battle_anim_80FE840.o(.text);
src/bike.o(.text);
asm/easy_chat.o(.text);
- asm/mon_markings.o(.text);
- asm/mauville_old_man.o(.text);
+ src/mon_markings.o(.text);
+ src/mauville_old_man.o(.text);
src/mail.o(.text);
- asm/menu_helpers.o(.text);
- asm/dewford_trend.o(.text);
+ src/menu_helpers.o(.text);
+ src/dewford_trend.o(.text);
src/heal_location.o(.text);
src/region_map.o(.text);
asm/cute_sketch.o(.text);
@@ -179,25 +173,25 @@ SECTIONS {
asm/slot_machine.o(.text);
asm/contest_painting.o(.text);
src/battle_ai_script_commands.o(.text);
- asm/trader.o(.text);
+ src/trader.o(.text);
src/starter_choose.o(.text);
src/wallclock.o(.text);
- asm/rom6.o(.text);
+ src/rom6.o(.text);
src/pokeblock.o(.text);
- asm/fldeff_flash.o(.text);
+ src/fldeff_flash.o(.text);
asm/post_battle_event_funcs.o(.text);
src/time_events.o(.text);
- asm/birch_pc.o(.text);
+ src/birch_pc.o(.text);
src/hof_pc.o(.text);
asm/field_specials.o(.text);
- asm/battle_records.o(.text);
+ src/battle_records.o(.text);
asm/pokedex_area_screen.o(.text);
src/evolution_scene.o(.text);
asm/roulette.o(.text);
asm/pokedex_cry_screen.o(.text);
src/coins.o(.text);
src/landmark.o(.text);
- asm/fldeff_strength.o(.text);
+ src/fldeff_strength.o(.text);
src/battle_transition.o(.text);
src/battle_controller_link_partner.o(.text);
src/battle_message.o(.text);
@@ -209,25 +203,25 @@ SECTIONS {
src/mystery_event_script.o(.text);
asm/field_effect_helpers.o(.text);
asm/contest_ai.o(.text);
- asm/battle_anim_sound_tasks.o(.text);
+ src/battle_anim_sound_tasks.o(.text);
src/battle_controller_safari.o(.text);
- asm/fldeff_sweetscent.o(.text);
+ src/fldeff_sweetscent.o(.text);
asm/battle_anim_815A0D4.o(.text);
asm/learn_move.o(.text);
- asm/fldeff_softboiled.o(.text);
+ src/fldeff_softboiled.o(.text);
src/decoration_inventory.o(.text);
src/roamer.o(.text);
asm/battle_tower.o(.text);
src/use_pokeblock.o(.text);
asm/use_pokeblock.o(.text);
src/battle_controller_wally.o(.text);
- asm/player_pc.o(.text);
- asm/intro.o(.text);
+ src/player_pc.o(.text);
+ src/intro.o(.text);
src/reset_save_heap.o(.text);
src/field_region_map.o(.text);
asm/battle_anim_8170478.o(.text);
src/hall_of_fame.o(.text);
- asm/credits.o(.text);
+ src/credits.o(.text);
src/lottery_corner.o(.text);
src/diploma.o(.text);
src/berry_tag_screen.o(.text);
@@ -236,11 +230,11 @@ SECTIONS {
src/braille_puzzles.o(.text);
src/pokeblock_feed.o(.text);
src/clear_save_data_screen.o(.text);
- asm/intro_credits_graphics.o(.text);
+ src/intro_credits_graphics.o(.text);
src/evolution_graphics.o(.text);
src/bard_music.o(.text);
src/fldeff_teleport.o(.text);
- asm/battle_link_817C95C.o(.text);
+ src/battle_tv.o(.text);
src/pokemon_animation.o(.text);
src/recorded_battle.o(.text);
src/battle_controller_recorded_opponent.o(.text);
@@ -250,8 +244,8 @@ SECTIONS {
asm/battle_frontier_1.o(.text);
src/menu.o(.text);
asm/battle_frontier_2.o(.text);
- asm/item_menu.o(.text);
- asm/list_menu.o(.text);
+ src/item_menu.o(.text);
+ src/list_menu.o(.text);
asm/menu_indicators.o(.text);
src/unk_text_util.o(.text);
src/save_location.o(.text);
@@ -262,16 +256,19 @@ SECTIONS {
src/multiboot.o(.text);
src/unk_81BAD84.o(.text);
src/battle_controller_player_partner.o(.text);
- asm/fldeff_groundshake.o(.text);
+ src/fldeff_groundshake.o(.text);
+ src/fossil_specials.o(.text);
asm/fossil_specials.o(.text);
src/berry_fix_program.o(.text);
src/pokemon_summary_screen.o(.text);
asm/pokemon_summary_screen.o(.text);
asm/pokenav.o(.text);
+ src/match_call.o(.text);
+ asm/pokenav.o(.text.after.match.call);
src/rayquaza_scene.o(.text);
src/walda_phrase.o(.text);
asm/contest_link_81D9DE4.o(.text);
- asm/trainer_rematch.o(.text);
+ src/gym_leader_rematch.o(.text);
src/unk_transition.o(.text);
src/international_string_util.o(.text);
asm/international_string_util.o(.text);
@@ -371,9 +368,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,9 +382,7 @@ SECTIONS {
data/smokescreen.o(.rodata);
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);
@@ -396,10 +393,10 @@ SECTIONS {
data/trade.o(.rodata);
src/berry_blender.o(.rodata);
src/new_game.o(.rodata);
- data/overworld.o(.rodata);
+ src/overworld.o(.rodata);
data/tilesets.o(.rodata);
data/maps.o(.rodata);
- data/fieldmap.o(.rodata);
+ src/fieldmap.o(.rodata);
src/metatile_behavior.o(.rodata);
src/field_door.o(.rodata);
data/field_player_avatar.o(.rodata);
@@ -426,7 +423,7 @@ SECTIONS {
data/cable_club.o(.rodata);
src/trainer_see.o(.rodata);
src/wild_encounter.o(.rodata);
- data/field_effect.o(.rodata);
+ src/field_effect.o(.rodata);
src/option_menu.o(.rodata);
src/pokedex.o(.rodata);
data/pokedex.o(.rodata);
@@ -435,8 +432,8 @@ SECTIONS {
data/pokemon_storage_system.o(.rodata);
src/pokemon_icon.o(.rodata);
data/fldeff_cut.o(.rodata);
- data/map_name_popup.o(.rodata);
- data/item_menu_icons.o(.rodata);
+ src/map_name_popup.o(.rodata);
+ src/item_menu_icons.o(.rodata);
data/contest.o(.rodata);
data/shop.o(.rodata);
src/berry.o(.rodata);
@@ -452,15 +449,15 @@ SECTIONS {
src/pokemon_size_record.o(.rodata)
data/field_effect_misc.o(.rodata);
data/field_special_scene.o(.rodata);
- data/rotating_gate.o(.rodata);
+ src/rotating_gate.o(.rodata);
data/item_use.o(.rodata);
data/battle_anim_80FE840.o(.rodata);
src/bike.o(.rodata);
data/easy_chat.o(.rodata);
- data/mon_markings.o(.rodata);
- data/mauville_old_man.o(.rodata);
+ src/mon_markings.o(.rodata);
+ src/mauville_old_man.o(.rodata);
src/mail.o(.rodata);
- data/menu_helpers.o(.rodata);
+ src/menu_helpers.o(.rodata);
src/heal_location.o(.rodata);
src/region_map.o(.rodata);
data/cute_sketch.o(.rodata);
@@ -468,14 +465,14 @@ SECTIONS {
data/slot_machine.o(.rodata);
data/contest_painting.o(.rodata);
src/battle_ai_script_commands.o(.rodata);
- data/trader.o(.rodata);
+ src/trader.o(.rodata);
data/starter_choose.o(.rodata);
src/wallclock.o(.rodata);
src/pokeblock.o(.rodata);
- data/fldeff_flash.o(.rodata);
+ src/fldeff_flash.o(.rodata);
src/time_events.o(.rodata);
data/field_specials.o(.rodata);
- data/battle_records.o(.rodata);
+ src/battle_records.o(.rodata);
data/pokedex_area_screen.o(.rodata);
src/evolution_scene.o(.rodata);
data/roulette.o(.rodata);
@@ -496,12 +493,12 @@ SECTIONS {
src/use_pokeblock.o(.rodata);
data/use_pokeblock.o(.rodata);
src/battle_controller_wally.o(.rodata);
- data/player_pc.o(.rodata);
- data/intro.o(.rodata);
+ src/player_pc.o(.rodata);
+ src/intro.o(.rodata);
src/field_region_map.o(.rodata);
data/battle_anim_8170478.o(.rodata);
src/hall_of_fame.o(.rodata);
- data/credits.o(.rodata);
+ src/credits.o(.rodata);
src/lottery_corner.o(.rodata);
src/diploma.o(.rodata);
data/strings.o(.rodata);
@@ -511,10 +508,10 @@ SECTIONS {
data/braille_puzzles.o(.rodata);
src/pokeblock_feed.o(.rodata);
src/clear_save_data_screen.o(.rodata);
- data/intro_credits_graphics.o(.rodata);
+ src/intro_credits_graphics.o(.rodata);
src/evolution_graphics.o(.rodata);
src/bard_music.o(.rodata);
- data/battle_link_817C95C.o(.rodata);
+ src/battle_tv.o(.rodata);
src/pokemon_animation.o(.rodata);
src/battle_controller_recorded_opponent.o(.rodata);
src/battle_controller_recorded_player.o(.rodata);
@@ -523,23 +520,25 @@ 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);
src/item_icon.o(.rodata);
data/party_menu.o(.rodata);
data/battle_tent.o(.rodata);
src/unk_text_util_2.o(.rodata);
src/unk_81BAD84.o(.rodata);
src/battle_controller_player_partner.o(.rodata);
- data/fossil_special_fldeff_groundshake.o(.rodata);
+ src/fossil_specials.o(.rodata);
+ src/fldeff_groundshake.o(.rodata);
src/berry_fix_program.o(.rodata);
data/pokemon_summary_screen.o(.rodata);
data/pokenav.o(.rodata);
+ src/match_call.o(.rodata);
+ data/pokenav.o(.rodata.after.match.call);
src/rayquaza_scene.o(.rodata);
src/walda_phrase.o(.rodata);
- data/trainer_rematch.o(.rodata);
+ src/gym_leader_rematch.o(.rodata);
data/unk_transition.o(.rodata);
src/unk_transition.o(.rodata);
data/text_input_strings.o(.rodata);
diff --git a/src/bard_music.c b/src/bard_music.c
index 6fb1496e5..6c2578071 100644
--- a/src/bard_music.c
+++ b/src/bard_music.c
@@ -2,6 +2,7 @@
// Includes
#include "global.h"
#include "bard_music.h"
+#include "constants/easy_chat.h"
#include "easy_chat.h"
#include "data/bard_music/bard_sounds.h"
diff --git a/src/battle_ai_script_commands.c b/src/battle_ai_script_commands.c
index d6ccf9305..e1a9168a9 100644
--- a/src/battle_ai_script_commands.c
+++ b/src/battle_ai_script_commands.c
@@ -12,10 +12,6 @@
#include "util.h"
#include "constants/battle_ai.h"
-#define AIScriptRead32(ptr) ((ptr)[0] | (ptr)[1] << 8 | (ptr)[2] << 16 | (ptr)[3] << 24)
-#define AIScriptRead16(ptr) ((ptr)[0] | (ptr)[1] << 8)
-#define AIScriptReadPtr(ptr) (const u8*) AIScriptRead32(ptr)
-
#define AI_ACTION_DONE 0x0001
#define AI_ACTION_FLEE 0x0002
#define AI_ACTION_WATCH 0x0004
@@ -45,7 +41,6 @@ in order to read the next command correctly. refer to battle_ai_scripts.s for th
AI scripts.
*/
-extern const struct BattleMove gBattleMoves[];
extern const u8 * const gBattleAI_ScriptsTable[];
extern u32 GetAiScriptsInRecordedBattle();
@@ -346,7 +341,7 @@ void BattleAI_SetupAIData(u8 defaultScoreMoves)
}
gBattleResources->AI_ScriptsStack->size = 0;
sBattler_AI = gActiveBattler;
- // decide a random target bank in doubles
+ // decide a random target battlerId in doubles
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
{
gBattlerTarget = (Random() & BIT_FLANK) + (GetBattlerSide(gActiveBattler) ^ BIT_SIDE);
@@ -620,32 +615,32 @@ static void RecordLastUsedMoveByTarget(void)
}
}
-void ClearBattlerMoveHistory(u8 bank)
+void ClearBattlerMoveHistory(u8 battlerId)
{
s32 i;
for (i = 0; i < 4; i++)
- gBattleResources->battleHistory->usedMoves[bank].moves[i] = 0;
+ gBattleResources->battleHistory->usedMoves[battlerId].moves[i] = 0;
}
-void RecordAbilityBattle(u8 bank, u8 abilityId)
+void RecordAbilityBattle(u8 battlerId, u8 abilityId)
{
- gBattleResources->battleHistory->abilities[bank] = abilityId;
+ gBattleResources->battleHistory->abilities[battlerId] = abilityId;
}
-void ClearBattlerAbilityHistory(u8 bank)
+void ClearBattlerAbilityHistory(u8 battlerId)
{
- gBattleResources->battleHistory->abilities[bank] = 0;
+ gBattleResources->battleHistory->abilities[battlerId] = 0;
}
-void RecordItemEffectBattle(u8 bank, u8 itemEffect)
+void RecordItemEffectBattle(u8 battlerId, u8 itemEffect)
{
- gBattleResources->battleHistory->itemEffects[bank] = itemEffect;
+ gBattleResources->battleHistory->itemEffects[battlerId] = itemEffect;
}
-void ClearBankItemEffectHistory(u8 bank)
+void ClearBankItemEffectHistory(u8 battlerId)
{
- gBattleResources->battleHistory->itemEffects[bank] = 0;
+ gBattleResources->battleHistory->itemEffects[battlerId] = 0;
}
static void BattleAICmd_if_random_less_than(void)
@@ -653,7 +648,7 @@ static void BattleAICmd_if_random_less_than(void)
u16 random = Random();
if (random % 256 < gAIScriptPtr[1])
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
else
gAIScriptPtr += 6;
}
@@ -663,7 +658,7 @@ static void BattleAICmd_if_random_greater_than(void)
u16 random = Random();
if (random % 256 > gAIScriptPtr[1])
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
else
gAIScriptPtr += 6;
}
@@ -673,7 +668,7 @@ static void BattleAICmd_if_random_equal(void)
u16 random = Random();
if (random % 256 == gAIScriptPtr[1])
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
else
gAIScriptPtr += 6;
}
@@ -683,7 +678,7 @@ static void BattleAICmd_if_random_not_equal(void)
u16 random = Random();
if (random % 256 != gAIScriptPtr[1])
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
else
gAIScriptPtr += 6;
}
@@ -700,206 +695,206 @@ static void BattleAICmd_score(void)
static void BattleAICmd_if_hp_less_than(void)
{
- u16 bank;
+ u16 battlerId;
if (gAIScriptPtr[1] == AI_USER)
- bank = sBattler_AI;
+ battlerId = sBattler_AI;
else
- bank = gBattlerTarget;
+ battlerId = gBattlerTarget;
- if ((u32)(100 * gBattleMons[bank].hp / gBattleMons[bank].maxHP) < gAIScriptPtr[2])
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3);
+ if ((u32)(100 * gBattleMons[battlerId].hp / gBattleMons[battlerId].maxHP) < gAIScriptPtr[2])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3);
else
gAIScriptPtr += 7;
}
static void BattleAICmd_if_hp_more_than(void)
{
- u16 bank;
+ u16 battlerId;
if (gAIScriptPtr[1] == AI_USER)
- bank = sBattler_AI;
+ battlerId = sBattler_AI;
else
- bank = gBattlerTarget;
+ battlerId = gBattlerTarget;
- if ((u32)(100 * gBattleMons[bank].hp / gBattleMons[bank].maxHP) > gAIScriptPtr[2])
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3);
+ if ((u32)(100 * gBattleMons[battlerId].hp / gBattleMons[battlerId].maxHP) > gAIScriptPtr[2])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3);
else
gAIScriptPtr += 7;
}
static void BattleAICmd_if_hp_equal(void)
{
- u16 bank;
+ u16 battlerId;
if (gAIScriptPtr[1] == AI_USER)
- bank = sBattler_AI;
+ battlerId = sBattler_AI;
else
- bank = gBattlerTarget;
+ battlerId = gBattlerTarget;
- if ((u32)(100 * gBattleMons[bank].hp / gBattleMons[bank].maxHP) == gAIScriptPtr[2])
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3);
+ if ((u32)(100 * gBattleMons[battlerId].hp / gBattleMons[battlerId].maxHP) == gAIScriptPtr[2])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3);
else
gAIScriptPtr += 7;
}
static void BattleAICmd_if_hp_not_equal(void)
{
- u16 bank;
+ u16 battlerId;
if (gAIScriptPtr[1] == AI_USER)
- bank = sBattler_AI;
+ battlerId = sBattler_AI;
else
- bank = gBattlerTarget;
+ battlerId = gBattlerTarget;
- if ((u32)(100 * gBattleMons[bank].hp / gBattleMons[bank].maxHP) != gAIScriptPtr[2])
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3);
+ if ((u32)(100 * gBattleMons[battlerId].hp / gBattleMons[battlerId].maxHP) != gAIScriptPtr[2])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3);
else
gAIScriptPtr += 7;
}
static void BattleAICmd_if_status(void)
{
- u16 bank;
+ u16 battlerId;
u32 status;
if (gAIScriptPtr[1] == AI_USER)
- bank = sBattler_AI;
+ battlerId = sBattler_AI;
else
- bank = gBattlerTarget;
+ battlerId = gBattlerTarget;
- status = AIScriptRead32(gAIScriptPtr + 2);
+ status = T1_READ_32(gAIScriptPtr + 2);
- if ((gBattleMons[bank].status1 & status) != 0)
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6);
+ if ((gBattleMons[battlerId].status1 & status) != 0)
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6);
else
gAIScriptPtr += 10;
}
static void BattleAICmd_if_not_status(void)
{
- u16 bank;
+ u16 battlerId;
u32 status;
if (gAIScriptPtr[1] == AI_USER)
- bank = sBattler_AI;
+ battlerId = sBattler_AI;
else
- bank = gBattlerTarget;
+ battlerId = gBattlerTarget;
- status = AIScriptRead32(gAIScriptPtr + 2);
+ status = T1_READ_32(gAIScriptPtr + 2);
- if ((gBattleMons[bank].status1 & status) == 0)
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6);
+ if ((gBattleMons[battlerId].status1 & status) == 0)
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6);
else
gAIScriptPtr += 10;
}
static void BattleAICmd_if_status2(void)
{
- u16 bank;
+ u16 battlerId;
u32 status;
if (gAIScriptPtr[1] == AI_USER)
- bank = sBattler_AI;
+ battlerId = sBattler_AI;
else
- bank = gBattlerTarget;
+ battlerId = gBattlerTarget;
- status = AIScriptRead32(gAIScriptPtr + 2);
+ status = T1_READ_32(gAIScriptPtr + 2);
- if ((gBattleMons[bank].status2 & status) != 0)
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6);
+ if ((gBattleMons[battlerId].status2 & status) != 0)
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6);
else
gAIScriptPtr += 10;
}
static void BattleAICmd_if_not_status2(void)
{
- u16 bank;
+ u16 battlerId;
u32 status;
if (gAIScriptPtr[1] == AI_USER)
- bank = sBattler_AI;
+ battlerId = sBattler_AI;
else
- bank = gBattlerTarget;
+ battlerId = gBattlerTarget;
- status = AIScriptRead32(gAIScriptPtr + 2);
+ status = T1_READ_32(gAIScriptPtr + 2);
- if ((gBattleMons[bank].status2 & status) == 0)
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6);
+ if ((gBattleMons[battlerId].status2 & status) == 0)
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6);
else
gAIScriptPtr += 10;
}
static void BattleAICmd_if_status3(void)
{
- u16 bank;
+ u16 battlerId;
u32 status;
if (gAIScriptPtr[1] == AI_USER)
- bank = sBattler_AI;
+ battlerId = sBattler_AI;
else
- bank = gBattlerTarget;
+ battlerId = gBattlerTarget;
- status = AIScriptRead32(gAIScriptPtr + 2);
+ status = T1_READ_32(gAIScriptPtr + 2);
- if ((gStatuses3[bank] & status) != 0)
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6);
+ if ((gStatuses3[battlerId] & status) != 0)
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6);
else
gAIScriptPtr += 10;
}
static void BattleAICmd_if_not_status3(void)
{
- u16 bank;
+ u16 battlerId;
u32 status;
if (gAIScriptPtr[1] == AI_USER)
- bank = sBattler_AI;
+ battlerId = sBattler_AI;
else
- bank = gBattlerTarget;
+ battlerId = gBattlerTarget;
- status = AIScriptRead32(gAIScriptPtr + 2);
+ status = T1_READ_32(gAIScriptPtr + 2);
- if ((gStatuses3[bank] & status) == 0)
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6);
+ if ((gStatuses3[battlerId] & status) == 0)
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6);
else
gAIScriptPtr += 10;
}
static void BattleAICmd_if_side_affecting(void)
{
- u16 bank;
+ u16 battlerId;
u32 side, status;
if (gAIScriptPtr[1] == AI_USER)
- bank = sBattler_AI;
+ battlerId = sBattler_AI;
else
- bank = gBattlerTarget;
+ battlerId = gBattlerTarget;
- side = GET_BATTLER_SIDE(bank);
- status = AIScriptRead32(gAIScriptPtr + 2);
+ side = GET_BATTLER_SIDE(battlerId);
+ status = T1_READ_32(gAIScriptPtr + 2);
if ((gSideStatuses[side] & status) != 0)
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6);
else
gAIScriptPtr += 10;
}
static void BattleAICmd_if_not_side_affecting(void)
{
- u16 bank;
+ u16 battlerId;
u32 side, status;
if (gAIScriptPtr[1] == AI_USER)
- bank = sBattler_AI;
+ battlerId = sBattler_AI;
else
- bank = gBattlerTarget;
+ battlerId = gBattlerTarget;
- side = GET_BATTLER_SIDE(bank);
- status = AIScriptRead32(gAIScriptPtr + 2);
+ side = GET_BATTLER_SIDE(battlerId);
+ status = T1_READ_32(gAIScriptPtr + 2);
if ((gSideStatuses[side] & status) == 0)
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6);
else
gAIScriptPtr += 10;
}
@@ -907,7 +902,7 @@ static void BattleAICmd_if_not_side_affecting(void)
static void BattleAICmd_if_less_than(void)
{
if (AI_THINKING_STRUCT->funcResult < gAIScriptPtr[1])
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
else
gAIScriptPtr += 6;
}
@@ -915,7 +910,7 @@ static void BattleAICmd_if_less_than(void)
static void BattleAICmd_if_more_than(void)
{
if (AI_THINKING_STRUCT->funcResult > gAIScriptPtr[1])
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
else
gAIScriptPtr += 6;
}
@@ -923,7 +918,7 @@ static void BattleAICmd_if_more_than(void)
static void BattleAICmd_if_equal(void)
{
if (AI_THINKING_STRUCT->funcResult == gAIScriptPtr[1])
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
else
gAIScriptPtr += 6;
}
@@ -931,80 +926,80 @@ static void BattleAICmd_if_equal(void)
static void BattleAICmd_if_not_equal(void)
{
if (AI_THINKING_STRUCT->funcResult != gAIScriptPtr[1])
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
else
gAIScriptPtr += 6;
}
static void BattleAICmd_if_less_than_ptr(void)
{
- const u8 *value = AIScriptReadPtr(gAIScriptPtr + 1);
+ const u8 *value = T1_READ_PTR(gAIScriptPtr + 1);
if (AI_THINKING_STRUCT->funcResult < *value)
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5);
else
gAIScriptPtr += 9;
}
static void BattleAICmd_if_more_than_ptr(void)
{
- const u8 *value = AIScriptReadPtr(gAIScriptPtr + 1);
+ const u8 *value = T1_READ_PTR(gAIScriptPtr + 1);
if (AI_THINKING_STRUCT->funcResult > *value)
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5);
else
gAIScriptPtr += 9;
}
static void BattleAICmd_if_equal_ptr(void)
{
- const u8 *value = AIScriptReadPtr(gAIScriptPtr + 1);
+ const u8 *value = T1_READ_PTR(gAIScriptPtr + 1);
if (AI_THINKING_STRUCT->funcResult == *value)
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5);
else
gAIScriptPtr += 9;
}
static void BattleAICmd_if_not_equal_ptr(void)
{
- const u8 *value = AIScriptReadPtr(gAIScriptPtr + 1);
+ const u8 *value = T1_READ_PTR(gAIScriptPtr + 1);
if (AI_THINKING_STRUCT->funcResult != *value)
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5);
else
gAIScriptPtr += 9;
}
static void BattleAICmd_if_move(void)
{
- u16 move = AIScriptRead16(gAIScriptPtr + 1);
+ u16 move = T1_READ_16(gAIScriptPtr + 1);
if (AI_THINKING_STRUCT->moveConsidered == move)
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3);
else
gAIScriptPtr += 7;
}
static void BattleAICmd_if_not_move(void)
{
- u16 move = AIScriptRead16(gAIScriptPtr + 1);
+ u16 move = T1_READ_16(gAIScriptPtr + 1);
if (AI_THINKING_STRUCT->moveConsidered != move)
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3);
else
gAIScriptPtr += 7;
}
static void BattleAICmd_if_in_bytes(void)
{
- const u8 *ptr = AIScriptReadPtr(gAIScriptPtr + 1);
+ const u8 *ptr = T1_READ_PTR(gAIScriptPtr + 1);
while (*ptr != 0xFF)
{
if (AI_THINKING_STRUCT->funcResult == *ptr)
{
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5);
return;
}
ptr++;
@@ -1014,7 +1009,7 @@ static void BattleAICmd_if_in_bytes(void)
static void BattleAICmd_if_not_in_bytes(void)
{
- const u8 *ptr = AIScriptReadPtr(gAIScriptPtr + 1);
+ const u8 *ptr = T1_READ_PTR(gAIScriptPtr + 1);
while (*ptr != 0xFF)
{
@@ -1025,18 +1020,18 @@ static void BattleAICmd_if_not_in_bytes(void)
}
ptr++;
}
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5);
}
static void BattleAICmd_if_in_hwords(void)
{
- const u16 *ptr = (const u16 *)AIScriptReadPtr(gAIScriptPtr + 1);
+ const u16 *ptr = (const u16 *)T1_READ_PTR(gAIScriptPtr + 1);
while (*ptr != 0xFFFF)
{
if (AI_THINKING_STRUCT->funcResult == *ptr)
{
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5);
return;
}
ptr++;
@@ -1046,7 +1041,7 @@ static void BattleAICmd_if_in_hwords(void)
static void BattleAICmd_if_not_in_hwords(void)
{
- const u16 *ptr = (u16 *)AIScriptReadPtr(gAIScriptPtr + 1);
+ const u16 *ptr = (u16 *)T1_READ_PTR(gAIScriptPtr + 1);
while (*ptr != 0xFFFF)
{
@@ -1057,7 +1052,7 @@ static void BattleAICmd_if_not_in_hwords(void)
}
ptr++;
}
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 5);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 5);
}
static void BattleAICmd_if_user_has_attacking_move(void)
@@ -1073,7 +1068,7 @@ static void BattleAICmd_if_user_has_attacking_move(void)
if (i == 4)
gAIScriptPtr += 5;
else
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
}
static void BattleAICmd_if_user_has_no_attacking_moves(void)
@@ -1089,7 +1084,7 @@ static void BattleAICmd_if_user_has_no_attacking_moves(void)
if (i != 4)
gAIScriptPtr += 5;
else
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
}
static void BattleAICmd_get_turn_count(void)
@@ -1123,9 +1118,9 @@ static void BattleAICmd_get_type(void)
gAIScriptPtr += 2;
}
-static u8 BattleAI_GetWantedBank(u8 bank)
+static u8 BattleAI_GetWantedBank(u8 battlerId)
{
- switch (bank)
+ switch (battlerId)
{
case AI_USER:
return sBattler_AI;
@@ -1141,9 +1136,9 @@ static u8 BattleAI_GetWantedBank(u8 bank)
static void BattleAICmd_is_of_type(void)
{
- u8 bank = BattleAI_GetWantedBank(gAIScriptPtr[1]);
+ u8 battlerId = BattleAI_GetWantedBank(gAIScriptPtr[1]);
- if(gBattleMons[bank].type1 == gAIScriptPtr[2] || gBattleMons[bank].type2 == gAIScriptPtr[2])
+ if(gBattleMons[battlerId].type1 == gAIScriptPtr[2] || gBattleMons[battlerId].type2 == gAIScriptPtr[2])
{
AI_THINKING_STRUCT->funcResult = TRUE;
}
@@ -1238,7 +1233,7 @@ static void BattleAICmd_get_last_used_bank_move(void)
static void BattleAICmd_if_equal_(void) // same as if_equal
{
if (gAIScriptPtr[1] == AI_THINKING_STRUCT->funcResult)
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
else
gAIScriptPtr += 6;
}
@@ -1246,7 +1241,7 @@ static void BattleAICmd_if_equal_(void) // same as if_equal
static void BattleAICmd_if_not_equal_(void) // same as if_not_equal
{
if (gAIScriptPtr[1] != AI_THINKING_STRUCT->funcResult)
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
else
gAIScriptPtr += 6;
}
@@ -1254,7 +1249,7 @@ static void BattleAICmd_if_not_equal_(void) // same as if_not_equal
static void BattleAICmd_if_user_goes(void)
{
if (GetWhoStrikesFirst(sBattler_AI, gBattlerTarget, TRUE) == gAIScriptPtr[1])
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
else
gAIScriptPtr += 6;
}
@@ -1262,7 +1257,7 @@ static void BattleAICmd_if_user_goes(void)
static void BattleAICmd_if_user_doesnt_go(void)
{
if (GetWhoStrikesFirst(sBattler_AI, gBattlerTarget, TRUE) != gAIScriptPtr[1])
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
else
gAIScriptPtr += 6;
}
@@ -1277,7 +1272,7 @@ static void BattleAICmd_nullsub_2B(void)
static void BattleAICmd_count_usable_party_mons(void)
{
- u8 bank;
+ u8 battlerId;
u8 bankOnField1, bankOnField2;
struct Pokemon *party;
int i;
@@ -1285,11 +1280,11 @@ static void BattleAICmd_count_usable_party_mons(void)
AI_THINKING_STRUCT->funcResult = 0;
if (gAIScriptPtr[1] == AI_USER)
- bank = sBattler_AI;
+ battlerId = sBattler_AI;
else
- bank = gBattlerTarget;
+ battlerId = gBattlerTarget;
- if (GetBattlerSide(bank) == B_SIDE_PLAYER)
+ if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
party = gPlayerParty;
else
party = gEnemyParty;
@@ -1297,14 +1292,14 @@ static void BattleAICmd_count_usable_party_mons(void)
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
{
u32 position;
- bankOnField1 = gBattlerPartyIndexes[bank];
- position = GetBattlerPosition(bank) ^ BIT_FLANK;
+ bankOnField1 = gBattlerPartyIndexes[battlerId];
+ position = GetBattlerPosition(battlerId) ^ BIT_FLANK;
bankOnField2 = gBattlerPartyIndexes[GetBattlerAtPosition(position)];
}
- else // in singles there's only one bank by side
+ else // in singles there's only one battlerId by side
{
- bankOnField1 = gBattlerPartyIndexes[bank];
- bankOnField2 = gBattlerPartyIndexes[bank];
+ bankOnField1 = gBattlerPartyIndexes[battlerId];
+ bankOnField2 = gBattlerPartyIndexes[battlerId];
}
for (i = 0; i < PARTY_SIZE; i++)
@@ -1335,110 +1330,110 @@ static void BattleAICmd_get_considered_move_effect(void)
static void BattleAICmd_get_ability(void)
{
- u8 bank;
+ u8 battlerId;
if (gAIScriptPtr[1] == AI_USER)
- bank = sBattler_AI;
+ battlerId = sBattler_AI;
else
- bank = gBattlerTarget;
+ battlerId = gBattlerTarget;
- if (gActiveBattler != bank)
+ if (gActiveBattler != battlerId)
{
- if (BATTLE_HISTORY->abilities[bank] != 0)
+ if (BATTLE_HISTORY->abilities[battlerId] != 0)
{
- AI_THINKING_STRUCT->funcResult = BATTLE_HISTORY->abilities[bank];
+ AI_THINKING_STRUCT->funcResult = BATTLE_HISTORY->abilities[battlerId];
gAIScriptPtr += 2;
return;
}
// abilities that prevent fleeing.
- if (gBattleMons[bank].ability == ABILITY_SHADOW_TAG
- || gBattleMons[bank].ability == ABILITY_MAGNET_PULL
- || gBattleMons[bank].ability == ABILITY_ARENA_TRAP)
+ if (gBattleMons[battlerId].ability == ABILITY_SHADOW_TAG
+ || gBattleMons[battlerId].ability == ABILITY_MAGNET_PULL
+ || gBattleMons[battlerId].ability == ABILITY_ARENA_TRAP)
{
- AI_THINKING_STRUCT->funcResult = gBattleMons[bank].ability;
+ AI_THINKING_STRUCT->funcResult = gBattleMons[battlerId].ability;
gAIScriptPtr += 2;
return;
}
- if (gBaseStats[gBattleMons[bank].species].ability1 != ABILITY_NONE)
+ if (gBaseStats[gBattleMons[battlerId].species].ability1 != ABILITY_NONE)
{
- if (gBaseStats[gBattleMons[bank].species].ability2 != ABILITY_NONE)
+ if (gBaseStats[gBattleMons[battlerId].species].ability2 != ABILITY_NONE)
{
// AI has no knowledge of opponent, so it guesses which ability.
if (Random() & 1)
{
- AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[bank].species].ability1;
+ AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[battlerId].species].ability1;
}
else
{
- AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[bank].species].ability2;
+ AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[battlerId].species].ability2;
}
}
else
{
- AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[bank].species].ability1; // it's definitely ability 1.
+ AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[battlerId].species].ability1; // it's definitely ability 1.
}
}
else
{
- AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[bank].species].ability2; // AI cant actually reach this part since every mon has at least 1 ability.
+ AI_THINKING_STRUCT->funcResult = gBaseStats[gBattleMons[battlerId].species].ability2; // AI cant actually reach this part since every mon has at least 1 ability.
}
}
else
{
// The AI knows its own ability.
- AI_THINKING_STRUCT->funcResult = gBattleMons[bank].ability;
+ AI_THINKING_STRUCT->funcResult = gBattleMons[battlerId].ability;
}
gAIScriptPtr += 2;
}
static void BattleAICmd_check_ability(void)
{
- u32 bank = BattleAI_GetWantedBank(gAIScriptPtr[1]);
+ u32 battlerId = BattleAI_GetWantedBank(gAIScriptPtr[1]);
u32 ability = gAIScriptPtr[2];
if (gAIScriptPtr[1] == AI_TARGET || gAIScriptPtr[1] == AI_TARGET_PARTNER)
{
- if (BATTLE_HISTORY->abilities[bank] != 0)
+ if (BATTLE_HISTORY->abilities[battlerId] != 0)
{
- ability = BATTLE_HISTORY->abilities[bank];
+ ability = BATTLE_HISTORY->abilities[battlerId];
AI_THINKING_STRUCT->funcResult = ability;
}
// abilities that prevent fleeing.
- else if (gBattleMons[bank].ability == ABILITY_SHADOW_TAG
- || gBattleMons[bank].ability == ABILITY_MAGNET_PULL
- || gBattleMons[bank].ability == ABILITY_ARENA_TRAP)
+ else if (gBattleMons[battlerId].ability == ABILITY_SHADOW_TAG
+ || gBattleMons[battlerId].ability == ABILITY_MAGNET_PULL
+ || gBattleMons[battlerId].ability == ABILITY_ARENA_TRAP)
{
- ability = gBattleMons[bank].ability;
+ ability = gBattleMons[battlerId].ability;
}
- else if (gBaseStats[gBattleMons[bank].species].ability1 != ABILITY_NONE)
+ else if (gBaseStats[gBattleMons[battlerId].species].ability1 != ABILITY_NONE)
{
- if (gBaseStats[gBattleMons[bank].species].ability2 != ABILITY_NONE)
+ if (gBaseStats[gBattleMons[battlerId].species].ability2 != ABILITY_NONE)
{
u8 abilityDummyVariable = ability; // needed to match
- if (gBaseStats[gBattleMons[bank].species].ability1 != abilityDummyVariable
- && gBaseStats[gBattleMons[bank].species].ability2 != abilityDummyVariable)
+ if (gBaseStats[gBattleMons[battlerId].species].ability1 != abilityDummyVariable
+ && gBaseStats[gBattleMons[battlerId].species].ability2 != abilityDummyVariable)
{
- ability = gBaseStats[gBattleMons[bank].species].ability1;
+ ability = gBaseStats[gBattleMons[battlerId].species].ability1;
}
else
ability = 0;
}
else
{
- ability = gBaseStats[gBattleMons[bank].species].ability1;
+ ability = gBaseStats[gBattleMons[battlerId].species].ability1;
}
}
else
{
- ability = gBaseStats[gBattleMons[bank].species].ability2; // AI cant actually reach this part since every mon has at least 1 ability.
+ ability = gBaseStats[gBattleMons[battlerId].species].ability2; // AI cant actually reach this part since every mon has at least 1 ability.
}
}
else
{
// The AI knows its own or partner's ability.
- ability = gBattleMons[bank].ability;
+ ability = gBattleMons[battlerId].ability;
}
if (ability == 0)
{
@@ -1528,7 +1523,7 @@ static void BattleAICmd_if_type_effectiveness(void)
damageVar = gBattleMoveDamage;
if (damageVar == gAIScriptPtr[1])
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
else
gAIScriptPtr += 6;
}
@@ -1546,21 +1541,21 @@ static void BattleAICmd_if_status_in_party(void)
struct Pokemon *party;
int i;
u32 statusToCompareTo;
- u8 bank;
+ u8 battlerId;
switch(gAIScriptPtr[1])
{
case AI_USER:
- bank = sBattler_AI;
+ battlerId = sBattler_AI;
break;
default:
- bank = gBattlerTarget;
+ battlerId = gBattlerTarget;
break;
}
- party = (GetBattlerSide(bank) == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty;
+ party = (GetBattlerSide(battlerId) == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty;
- statusToCompareTo = AIScriptRead32(gAIScriptPtr + 2);
+ statusToCompareTo = T1_READ_32(gAIScriptPtr + 2);
for (i = 0; i < PARTY_SIZE; i++)
{
@@ -1570,7 +1565,7 @@ static void BattleAICmd_if_status_in_party(void)
if (species != SPECIES_NONE && species != SPECIES_EGG && hp != 0 && status == statusToCompareTo)
{
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6);
return;
}
}
@@ -1583,21 +1578,21 @@ static void BattleAICmd_if_status_not_in_party(void)
struct Pokemon *party;
int i;
u32 statusToCompareTo;
- u8 bank;
+ u8 battlerId;
switch(gAIScriptPtr[1])
{
case 1:
- bank = sBattler_AI;
+ battlerId = sBattler_AI;
break;
default:
- bank = gBattlerTarget;
+ battlerId = gBattlerTarget;
break;
}
- party = (GetBattlerSide(bank) == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty;
+ party = (GetBattlerSide(battlerId) == B_SIDE_PLAYER) ? gPlayerParty : gEnemyParty;
- statusToCompareTo = AIScriptRead32(gAIScriptPtr + 2);
+ statusToCompareTo = T1_READ_32(gAIScriptPtr + 2);
for (i = 0; i < PARTY_SIZE; i++)
{
@@ -1611,7 +1606,7 @@ static void BattleAICmd_if_status_not_in_party(void)
}
}
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 6);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 6);
}
static void BattleAICmd_get_weather(void)
@@ -1631,7 +1626,7 @@ static void BattleAICmd_get_weather(void)
static void BattleAICmd_if_effect(void)
{
if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].effect == gAIScriptPtr[1])
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
else
gAIScriptPtr += 6;
}
@@ -1639,67 +1634,67 @@ static void BattleAICmd_if_effect(void)
static void BattleAICmd_if_not_effect(void)
{
if (gBattleMoves[AI_THINKING_STRUCT->moveConsidered].effect != gAIScriptPtr[1])
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
else
gAIScriptPtr += 6;
}
static void BattleAICmd_if_stat_level_less_than(void)
{
- u32 bank;
+ u32 battlerId;
if (gAIScriptPtr[1] == AI_USER)
- bank = sBattler_AI;
+ battlerId = sBattler_AI;
else
- bank = gBattlerTarget;
+ battlerId = gBattlerTarget;
- if (gBattleMons[bank].statStages[gAIScriptPtr[2]] < gAIScriptPtr[3])
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4);
+ if (gBattleMons[battlerId].statStages[gAIScriptPtr[2]] < gAIScriptPtr[3])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4);
else
gAIScriptPtr += 8;
}
static void BattleAICmd_if_stat_level_more_than(void)
{
- u32 bank;
+ u32 battlerId;
if (gAIScriptPtr[1] == AI_USER)
- bank = sBattler_AI;
+ battlerId = sBattler_AI;
else
- bank = gBattlerTarget;
+ battlerId = gBattlerTarget;
- if (gBattleMons[bank].statStages[gAIScriptPtr[2]] > gAIScriptPtr[3])
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4);
+ if (gBattleMons[battlerId].statStages[gAIScriptPtr[2]] > gAIScriptPtr[3])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4);
else
gAIScriptPtr += 8;
}
static void BattleAICmd_if_stat_level_equal(void)
{
- u32 bank;
+ u32 battlerId;
if (gAIScriptPtr[1] == AI_USER)
- bank = sBattler_AI;
+ battlerId = sBattler_AI;
else
- bank = gBattlerTarget;
+ battlerId = gBattlerTarget;
- if (gBattleMons[bank].statStages[gAIScriptPtr[2]] == gAIScriptPtr[3])
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4);
+ if (gBattleMons[battlerId].statStages[gAIScriptPtr[2]] == gAIScriptPtr[3])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4);
else
gAIScriptPtr += 8;
}
static void BattleAICmd_if_stat_level_not_equal(void)
{
- u32 bank;
+ u32 battlerId;
if (gAIScriptPtr[1] == AI_USER)
- bank = sBattler_AI;
+ battlerId = sBattler_AI;
else
- bank = gBattlerTarget;
+ battlerId = gBattlerTarget;
- if (gBattleMons[bank].statStages[gAIScriptPtr[2]] != gAIScriptPtr[3])
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4);
+ if (gBattleMons[battlerId].statStages[gAIScriptPtr[2]] != gAIScriptPtr[3])
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4);
else
gAIScriptPtr += 8;
}
@@ -1728,7 +1723,7 @@ static void BattleAICmd_if_can_faint(void)
gBattleMoveDamage = 1;
if (gBattleMons[gBattlerTarget].hp <= gBattleMoveDamage)
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
else
gAIScriptPtr += 5;
}
@@ -1755,7 +1750,7 @@ static void BattleAICmd_if_cant_faint(void)
// this macro is missing the damage 0 = 1 assumption.
if (gBattleMons[gBattlerTarget].hp > gBattleMoveDamage)
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
else
gAIScriptPtr += 5;
}
@@ -1780,7 +1775,7 @@ static void BattleAICmd_if_has_move(void)
}
else
{
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4);
return;
}
case AI_USER_PARTNER:
@@ -1804,7 +1799,7 @@ static void BattleAICmd_if_has_move(void)
}
else
{
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4);
return;
}
case AI_TARGET:
@@ -1821,7 +1816,7 @@ static void BattleAICmd_if_has_move(void)
}
else
{
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4);
return;
}
}
@@ -1848,7 +1843,7 @@ static void BattleAICmd_if_doesnt_have_move(void)
}
else
{
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4);
return;
}
case AI_TARGET:
@@ -1865,7 +1860,7 @@ static void BattleAICmd_if_doesnt_have_move(void)
}
else
{
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4);
return;
}
}
@@ -1887,7 +1882,7 @@ static void BattleAICmd_if_has_move_with_effect(void)
if (i == 4)
gAIScriptPtr += 7;
else
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3);
break;
case AI_TARGET:
case AI_TARGET_PARTNER:
@@ -1900,7 +1895,7 @@ static void BattleAICmd_if_has_move_with_effect(void)
if (i == 4)
gAIScriptPtr += 7;
else
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3);
break;
}
}
@@ -1921,7 +1916,7 @@ static void BattleAICmd_if_doesnt_have_move_with_effect(void)
if (i != 4)
gAIScriptPtr += 7;
else
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3);
break;
case AI_TARGET:
case AI_TARGET_PARTNER:
@@ -1933,28 +1928,28 @@ static void BattleAICmd_if_doesnt_have_move_with_effect(void)
if (i != 4)
gAIScriptPtr += 7;
else
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3);
break;
}
}
static void BattleAICmd_if_any_move_disabled_or_encored(void)
{
- u8 bank;
+ u8 battlerId;
if (gAIScriptPtr[1] == AI_USER)
- bank = sBattler_AI;
+ battlerId = sBattler_AI;
else
- bank = gBattlerTarget;
+ battlerId = gBattlerTarget;
if (gAIScriptPtr[2] == 0)
{
- if (gDisableStructs[bank].disabledMove == 0)
+ if (gDisableStructs[battlerId].disabledMove == 0)
{
gAIScriptPtr += 7;
return;
}
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3);
return;
}
else if (gAIScriptPtr[2] != 1) // ignore the macro if its not 0 or 1.
@@ -1962,9 +1957,9 @@ static void BattleAICmd_if_any_move_disabled_or_encored(void)
gAIScriptPtr += 7;
return;
}
- else if (gDisableStructs[bank].encoredMove != 0)
+ else if (gDisableStructs[battlerId].encoredMove != 0)
{
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 3);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 3);
return;
}
gAIScriptPtr += 7;
@@ -1977,7 +1972,7 @@ static void BattleAICmd_if_curr_move_disabled_or_encored(void)
case 0:
if (gDisableStructs[gActiveBattler].disabledMove == AI_THINKING_STRUCT->moveConsidered)
{
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
return;
}
gAIScriptPtr += 6;
@@ -1985,7 +1980,7 @@ static void BattleAICmd_if_curr_move_disabled_or_encored(void)
case 1:
if (gDisableStructs[gActiveBattler].encoredMove == AI_THINKING_STRUCT->moveConsidered)
{
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
return;
}
gAIScriptPtr += 6;
@@ -2006,7 +2001,7 @@ static void BattleAICmd_if_random_safari_flee(void)
u8 safariFleeRate = gBattleStruct->field_7B * 5; // safari flee rate, from 0-20
if ((u8)(Random() % 100) < safariFleeRate)
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
else
gAIScriptPtr += 5;
}
@@ -2018,80 +2013,80 @@ static void BattleAICmd_watch(void)
static void BattleAICmd_get_hold_effect(void)
{
- u8 bank;
+ u8 battlerId;
if (gAIScriptPtr[1] == AI_USER)
- bank = sBattler_AI;
+ battlerId = sBattler_AI;
else
- bank = gBattlerTarget;
+ battlerId = gBattlerTarget;
- if (gActiveBattler != bank)
- AI_THINKING_STRUCT->funcResult = ItemId_GetHoldEffect(BATTLE_HISTORY->itemEffects[bank]);
+ if (gActiveBattler != battlerId)
+ AI_THINKING_STRUCT->funcResult = ItemId_GetHoldEffect(BATTLE_HISTORY->itemEffects[battlerId]);
else
- AI_THINKING_STRUCT->funcResult = ItemId_GetHoldEffect(gBattleMons[bank].item);
+ AI_THINKING_STRUCT->funcResult = ItemId_GetHoldEffect(gBattleMons[battlerId].item);
gAIScriptPtr += 2;
}
static void BattleAICmd_if_holds_item(void)
{
- u8 bank = BattleAI_GetWantedBank(gAIScriptPtr[1]);
+ u8 battlerId = BattleAI_GetWantedBank(gAIScriptPtr[1]);
u16 item;
u8 var1, var2;
- if ((bank & BIT_SIDE) == (sBattler_AI & BIT_SIDE))
- item = gBattleMons[bank].item;
+ if ((battlerId & BIT_SIDE) == (sBattler_AI & BIT_SIDE))
+ item = gBattleMons[battlerId].item;
else
- item = BATTLE_HISTORY->itemEffects[bank];
+ item = BATTLE_HISTORY->itemEffects[battlerId];
// UB: doesn't properly read an unaligned u16
var2 = gAIScriptPtr[2];
var1 = gAIScriptPtr[3];
if ((var1 | var2) == item)
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 4);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 4);
else
gAIScriptPtr += 8;
}
static void BattleAICmd_get_gender(void)
{
- u8 bank;
+ u8 battlerId;
if (gAIScriptPtr[1] == AI_USER)
- bank = sBattler_AI;
+ battlerId = sBattler_AI;
else
- bank = gBattlerTarget;
+ battlerId = gBattlerTarget;
- AI_THINKING_STRUCT->funcResult = GetGenderFromSpeciesAndPersonality(gBattleMons[bank].species, gBattleMons[bank].personality);
+ AI_THINKING_STRUCT->funcResult = GetGenderFromSpeciesAndPersonality(gBattleMons[battlerId].species, gBattleMons[battlerId].personality);
gAIScriptPtr += 2;
}
static void BattleAICmd_is_first_turn_for(void)
{
- u8 bank;
+ u8 battlerId;
if (gAIScriptPtr[1] == AI_USER)
- bank = sBattler_AI;
+ battlerId = sBattler_AI;
else
- bank = gBattlerTarget;
+ battlerId = gBattlerTarget;
- AI_THINKING_STRUCT->funcResult = gDisableStructs[bank].isFirstTurn;
+ AI_THINKING_STRUCT->funcResult = gDisableStructs[battlerId].isFirstTurn;
gAIScriptPtr += 2;
}
static void BattleAICmd_get_stockpile_count(void)
{
- u8 bank;
+ u8 battlerId;
if (gAIScriptPtr[1] == AI_USER)
- bank = sBattler_AI;
+ battlerId = sBattler_AI;
else
- bank = gBattlerTarget;
+ battlerId = gBattlerTarget;
- AI_THINKING_STRUCT->funcResult = gDisableStructs[bank].stockpileCounter;
+ AI_THINKING_STRUCT->funcResult = gDisableStructs[battlerId].stockpileCounter;
gAIScriptPtr += 2;
}
@@ -2105,18 +2100,18 @@ static void BattleAICmd_is_double_battle(void)
static void BattleAICmd_get_used_held_item(void)
{
- u8 bank;
+ u8 battlerId;
if (gAIScriptPtr[1] == AI_USER)
- bank = sBattler_AI;
+ battlerId = sBattler_AI;
else
- bank = gBattlerTarget;
+ battlerId = gBattlerTarget;
// This is likely a leftover from Ruby's code and its ugly ewram access
#ifdef NONMATCHING
- AI_THINKING_STRUCT->funcResult = gBattleStruct->usedHeldItems[bank];
+ AI_THINKING_STRUCT->funcResult = gBattleStruct->usedHeldItems[battlerId];
#else
- AI_THINKING_STRUCT->funcResult = *(u8*)((u8*)(gBattleStruct) + offsetof(struct BattleStruct, usedHeldItems) + (bank * 2));
+ AI_THINKING_STRUCT->funcResult = *(u8*)((u8*)(gBattleStruct) + offsetof(struct BattleStruct, usedHeldItems) + (battlerId * 2));
#endif // NONMATCHING
gAIScriptPtr += 2;
@@ -2145,14 +2140,14 @@ static void BattleAICmd_get_move_effect_from_result(void)
static void BattleAICmd_get_protect_count(void)
{
- u8 bank;
+ u8 battlerId;
if (gAIScriptPtr[1] == AI_USER)
- bank = sBattler_AI;
+ battlerId = sBattler_AI;
else
- bank = gBattlerTarget;
+ battlerId = gBattlerTarget;
- AI_THINKING_STRUCT->funcResult = gDisableStructs[bank].protectUses;
+ AI_THINKING_STRUCT->funcResult = gDisableStructs[battlerId].protectUses;
gAIScriptPtr += 2;
}
@@ -2184,12 +2179,12 @@ static void BattleAICmd_nullsub_57(void)
static void BattleAICmd_call(void)
{
AIStackPushVar(gAIScriptPtr + 5);
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
}
static void BattleAICmd_goto(void)
{
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
}
static void BattleAICmd_end(void)
@@ -2205,7 +2200,7 @@ static void BattleAICmd_if_level_cond(void)
case 0: // greater than
if (gBattleMons[sBattler_AI].level > gBattleMons[gBattlerTarget].level)
{
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
return;
}
gAIScriptPtr += 6;
@@ -2213,7 +2208,7 @@ static void BattleAICmd_if_level_cond(void)
case 1: // less than
if (gBattleMons[sBattler_AI].level < gBattleMons[gBattlerTarget].level)
{
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
return;
}
gAIScriptPtr += 6;
@@ -2221,7 +2216,7 @@ static void BattleAICmd_if_level_cond(void)
case 2: // equal
if (gBattleMons[sBattler_AI].level == gBattleMons[gBattlerTarget].level)
{
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
return;
}
gAIScriptPtr += 6;
@@ -2232,7 +2227,7 @@ static void BattleAICmd_if_level_cond(void)
static void BattleAICmd_if_target_taunted(void)
{
if (gDisableStructs[gBattlerTarget].tauntTimer1 != 0)
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
else
gAIScriptPtr += 5;
}
@@ -2240,7 +2235,7 @@ static void BattleAICmd_if_target_taunted(void)
static void BattleAICmd_if_target_not_taunted(void)
{
if (gDisableStructs[gBattlerTarget].tauntTimer1 == 0)
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
else
gAIScriptPtr += 5;
}
@@ -2248,17 +2243,17 @@ static void BattleAICmd_if_target_not_taunted(void)
static void BattleAICmd_if_target_is_ally(void)
{
if ((sBattler_AI & BIT_SIDE) == (gBattlerTarget & BIT_SIDE))
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 1);
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 1);
else
gAIScriptPtr += 5;
}
static void BattleAICmd_if_flash_fired(void)
{
- u8 bank = BattleAI_GetWantedBank(gAIScriptPtr[1]);
+ u8 battlerId = BattleAI_GetWantedBank(gAIScriptPtr[1]);
- if (gBattleResources->flags->flags[bank] & UNKNOWN_FLAG_FLASH_FIRE)
- gAIScriptPtr = AIScriptReadPtr(gAIScriptPtr + 2);
+ if (gBattleResources->flags->flags[battlerId] & UNKNOWN_FLAG_FLASH_FIRE)
+ gAIScriptPtr = T1_READ_PTR(gAIScriptPtr + 2);
else
gAIScriptPtr += 6;
}
diff --git a/src/battle_ai_switch_items.c b/src/battle_ai_switch_items.c
index b0fcc2e29..83ad2b4fd 100644
--- a/src/battle_ai_switch_items.c
+++ b/src/battle_ai_switch_items.c
@@ -8,11 +8,6 @@
#include "random.h"
#include "util.h"
#include "constants/items.h"
-#include "pokemon_item_effects.h"
-
-extern const struct BattleMove gBattleMoves[];
-extern const u8 gTypeEffectiveness[];
-extern const u8 * const gItemEffectTable[]; // todo: fix once struct is declared
// this file's functions
static bool8 HasSuperEffectiveMoveAgainstOpponents(bool8 noRng);
diff --git a/src/battle_anim.c b/src/battle_anim.c
index 7606f701d..8071736e6 100644
--- a/src/battle_anim.c
+++ b/src/battle_anim.c
@@ -19,10 +19,6 @@
// sprites start at 10000 and thus must be subtracted of 10000 to account for the true index.
#define GET_TRUE_SPRITE_INDEX(i) ((i - 10000))
-#define SCRIPT_READ_16(ptr) ((ptr)[0] | ((ptr)[1] << 8))
-#define SCRIPT_READ_32(ptr) (((ptr)[0]) + ((ptr)[1] << 8) + ((ptr)[2] << 16) + ((ptr)[3] << 24))
-#define SCRIPT_READ_PTR(ptr) ((const u8*)(SCRIPT_READ_32(ptr)))
-
#define ANIM_SPRITE_INDEX_COUNT 8
extern u16 gBattle_WIN0H;
@@ -127,7 +123,7 @@ EWRAM_DATA static u8 sAnimBackgroundFadeState = 0;
EWRAM_DATA static u16 sAnimMoveIndex = 0; // set but unused.
EWRAM_DATA u8 gBattleAnimAttacker = 0;
EWRAM_DATA u8 gBattleAnimTarget = 0;
-EWRAM_DATA u16 gAnimSpeciesByBanks[MAX_BATTLERS_COUNT] = {0};
+EWRAM_DATA u16 gAnimBattlerSpecies[MAX_BATTLERS_COUNT] = {0};
EWRAM_DATA u8 gUnknown_02038440 = 0;
// const rom data
@@ -232,15 +228,15 @@ void LaunchBattleAnimation(const u8 *const animsTable[], u16 tableId, bool8 isMo
for (i = 0; i < MAX_BATTLERS_COUNT; i++)
{
if (GetBattlerSide(i) != 0)
- gAnimSpeciesByBanks[i] = GetMonData(&gEnemyParty[gBattlerPartyIndexes[i]], MON_DATA_SPECIES);
+ gAnimBattlerSpecies[i] = GetMonData(&gEnemyParty[gBattlerPartyIndexes[i]], MON_DATA_SPECIES);
else
- gAnimSpeciesByBanks[i] = GetMonData(&gPlayerParty[gBattlerPartyIndexes[i]], MON_DATA_SPECIES);
+ gAnimBattlerSpecies[i] = GetMonData(&gPlayerParty[gBattlerPartyIndexes[i]], MON_DATA_SPECIES);
}
}
else
{
for (i = 0; i < 4; i++)
- gAnimSpeciesByBanks[i] = gContestResources->field_18->field_0;
+ gAnimBattlerSpecies[i] = gContestResources->field_18->field_0;
}
if (!isMoveAnim)
@@ -352,7 +348,7 @@ static void ScriptCmd_loadspritegfx(void)
u16 index;
sBattleAnimScriptPtr++;
- index = SCRIPT_READ_16(sBattleAnimScriptPtr);
+ index = T1_READ_16(sBattleAnimScriptPtr);
LoadCompressedObjectPicUsingHeap(&gBattleAnimPicTable[GET_TRUE_SPRITE_INDEX(index)]);
LoadCompressedObjectPaletteUsingHeap(&gBattleAnimPaletteTable[GET_TRUE_SPRITE_INDEX(index)]);
sBattleAnimScriptPtr += 2;
@@ -366,7 +362,7 @@ static void ScriptCmd_unloadspritegfx(void)
u16 index;
sBattleAnimScriptPtr++;
- index = SCRIPT_READ_16(sBattleAnimScriptPtr);
+ index = T1_READ_16(sBattleAnimScriptPtr);
FreeSpriteTilesByTag(gBattleAnimPicTable[GET_TRUE_SPRITE_INDEX(index)].tag);
FreeSpritePaletteByTag(gBattleAnimPicTable[GET_TRUE_SPRITE_INDEX(index)].tag);
sBattleAnimScriptPtr += 2;
@@ -382,7 +378,7 @@ static void ScriptCmd_createsprite(void)
s16 subpriority;
sBattleAnimScriptPtr++;
- template = (const struct SpriteTemplate *)(SCRIPT_READ_32(sBattleAnimScriptPtr));
+ template = (const struct SpriteTemplate *)(T2_READ_32(sBattleAnimScriptPtr));
sBattleAnimScriptPtr += 4;
argVar = sBattleAnimScriptPtr[0];
@@ -392,7 +388,7 @@ static void ScriptCmd_createsprite(void)
sBattleAnimScriptPtr++;
for (i = 0; i < argsCount; i++)
{
- gBattleAnimArgs[i] = SCRIPT_READ_16(sBattleAnimScriptPtr);
+ gBattleAnimArgs[i] = T1_READ_16(sBattleAnimScriptPtr);
sBattleAnimScriptPtr += 2;
}
@@ -433,7 +429,7 @@ static void ScriptCmd_createvisualtask(void)
sBattleAnimScriptPtr++;
- taskFunc = (TaskFunc)SCRIPT_READ_32(sBattleAnimScriptPtr);
+ taskFunc = (TaskFunc)T2_READ_32(sBattleAnimScriptPtr);
sBattleAnimScriptPtr += 4;
taskPriority = sBattleAnimScriptPtr[0];
@@ -444,7 +440,7 @@ static void ScriptCmd_createvisualtask(void)
for (i = 0; i < numArgs; i++)
{
- gBattleAnimArgs[i] = SCRIPT_READ_16(sBattleAnimScriptPtr);
+ gBattleAnimArgs[i] = T1_READ_16(sBattleAnimScriptPtr);
sBattleAnimScriptPtr += 2;
}
@@ -542,26 +538,26 @@ static void ScriptCmd_end(void)
static void ScriptCmd_playse(void)
{
sBattleAnimScriptPtr++;
- PlaySE(SCRIPT_READ_16(sBattleAnimScriptPtr));
+ PlaySE(T1_READ_16(sBattleAnimScriptPtr));
sBattleAnimScriptPtr += 2;
}
-#define t1_MONBG_BANK 0
+#define t1_MONBG_BATTLER 0
#define t1_MON_IN_BG2 1
#define t1_CREATE_ANOTHER_TASK 2
#define t1_IS_SECONDMON_BG 3
-#define t2_BANK_SPRITE_ID 0
+#define t2_BATTLER_SPRITE_ID 0
#define t2_MON_IN_BG2 5
-#define t2_MONBG_BANK 6
+#define t2_MONBG_BATTLER 6
static void sub_80A40F4(u8 taskId)
{
u8 newTaskId;
s16 *selfData = gTasks[taskId].data;
- u8 bankSpriteId = gBattlerSpriteIds[selfData[t1_MONBG_BANK]];
- gSprites[bankSpriteId].invisible = 1;
+ u8 battlerSpriteId = gBattlerSpriteIds[selfData[t1_MONBG_BATTLER]];
+ gSprites[battlerSpriteId].invisible = 1;
if (!selfData[t1_CREATE_ANOTHER_TASK])
{
@@ -570,9 +566,9 @@ static void sub_80A40F4(u8 taskId)
}
newTaskId = CreateTask(task_pA_ma0A_obj_to_bg_pal, 10);
- gTasks[newTaskId].data[t2_BANK_SPRITE_ID] = bankSpriteId;
- gTasks[newTaskId].data[1] = gSprites[bankSpriteId].pos1.x + gSprites[bankSpriteId].pos2.x;
- gTasks[newTaskId].data[2] = gSprites[bankSpriteId].pos1.y + gSprites[bankSpriteId].pos2.y;
+ gTasks[newTaskId].data[t2_BATTLER_SPRITE_ID] = battlerSpriteId;
+ gTasks[newTaskId].data[1] = gSprites[battlerSpriteId].pos1.x + gSprites[battlerSpriteId].pos2.x;
+ gTasks[newTaskId].data[2] = gSprites[battlerSpriteId].pos1.y + gSprites[battlerSpriteId].pos2.y;
if (!selfData[t1_MON_IN_BG2])
{
@@ -586,7 +582,7 @@ static void sub_80A40F4(u8 taskId)
}
gTasks[newTaskId].data[t2_MON_IN_BG2] = selfData[t1_MON_IN_BG2];
- gTasks[newTaskId].data[t2_MONBG_BANK] = selfData[t1_MONBG_BANK];
+ gTasks[newTaskId].data[t2_MONBG_BATTLER] = selfData[t1_MONBG_BATTLER];
sMonAnimTaskIdArray[selfData[t1_IS_SECONDMON_BG]] = newTaskId;
DestroyAnimVisualTask(taskId);
}
@@ -595,48 +591,48 @@ static void ScriptCmd_monbg(void)
{
bool8 toBG_2;
u8 taskId;
- u8 bank;
+ u8 battlerId;
u8 animBank;
sBattleAnimScriptPtr++;
animBank = sBattleAnimScriptPtr[0];
if (animBank & ANIM_TARGET)
- bank = gBattleAnimTarget;
+ battlerId = gBattleAnimTarget;
else
- bank = gBattleAnimAttacker;
+ battlerId = gBattleAnimAttacker;
- if (IsBattlerSpriteVisible(bank))
+ if (IsBattlerSpriteVisible(battlerId))
{
- u8 position = GetBattlerPosition(bank);
+ u8 position = GetBattlerPosition(battlerId);
if (position == B_POSITION_OPPONENT_LEFT || position == B_POSITION_PLAYER_RIGHT || IsContest())
toBG_2 = FALSE;
else
toBG_2 = TRUE;
- sub_80A438C(bank, toBG_2, FALSE);
+ sub_80A438C(battlerId, toBG_2, FALSE);
taskId = CreateTask(sub_80A40F4, 10);
gAnimVisualTaskCount++;
- gTasks[taskId].data[t1_MONBG_BANK] = bank;
+ gTasks[taskId].data[t1_MONBG_BATTLER] = battlerId;
gTasks[taskId].data[t1_MON_IN_BG2] = toBG_2;
gTasks[taskId].data[t1_CREATE_ANOTHER_TASK] = TRUE;
gTasks[taskId].data[t1_IS_SECONDMON_BG] = 0;
}
- bank ^= BIT_FLANK;
- if (IsBattlerSpriteVisible(bank))
+ battlerId ^= BIT_FLANK;
+ if (IsBattlerSpriteVisible(battlerId))
{
- u8 position = GetBattlerPosition(bank);
+ u8 position = GetBattlerPosition(battlerId);
if (position == B_POSITION_OPPONENT_LEFT || position == B_POSITION_PLAYER_RIGHT || IsContest())
toBG_2 = FALSE;
else
toBG_2 = TRUE;
- sub_80A438C(bank, toBG_2, FALSE);
+ sub_80A438C(battlerId, toBG_2, FALSE);
taskId = CreateTask(sub_80A40F4, 10);
gAnimVisualTaskCount++;
- gTasks[taskId].data[0] = bank;
+ gTasks[taskId].data[0] = battlerId;
gTasks[taskId].data[1] = toBG_2;
gTasks[taskId].data[t1_CREATE_ANOTHER_TASK] = TRUE;
gTasks[taskId].data[t1_IS_SECONDMON_BG] = 1;
@@ -647,33 +643,33 @@ static void ScriptCmd_monbg(void)
gAnimScriptCallback = WaitAnimFrameCount;
}
-bool8 IsBattlerSpriteVisible(u8 bank)
+bool8 IsBattlerSpriteVisible(u8 battlerId)
{
if (IsContest())
{
- if (bank == gBattleAnimAttacker)
+ if (battlerId == gBattleAnimAttacker)
return TRUE;
else
return FALSE;
}
- if (!IsBattlerSpritePresent(bank))
+ if (!IsBattlerSpritePresent(battlerId))
return FALSE;
if (IsContest())
return TRUE; // this line wont ever be reached.
- if (!gBattleSpritesDataPtr->battlerData[bank].invisible || !gSprites[gBattlerSpriteIds[bank]].invisible)
+ if (!gBattleSpritesDataPtr->battlerData[battlerId].invisible || !gSprites[gBattlerSpriteIds[battlerId]].invisible)
return TRUE;
return FALSE;
}
-void sub_80A438C(u8 bank, bool8 toBG_2, bool8 setSpriteInvisible)
+void sub_80A438C(u8 battlerId, bool8 toBG_2, bool8 setSpriteInvisible)
{
struct UnknownAnimStruct2 unknownStruct;
- u8 bankSpriteId;
+ u8 battlerSpriteId;
if (!toBG_2)
{
- u8 bankIdentity;
+ u8 battlerPosition;
if (IsContest() == TRUE)
{
@@ -694,28 +690,28 @@ void sub_80A438C(u8 bank, bool8 toBG_2, bool8 setSpriteInvisible)
SetAnimBgAttribute(1, BG_ANIM_SCREEN_SIZE, 1);
SetAnimBgAttribute(1, BG_ANIM_AREA_OVERFLOW_MODE, 0);
- bankSpriteId = gBattlerSpriteIds[bank];
+ battlerSpriteId = gBattlerSpriteIds[battlerId];
- gBattle_BG1_X = -(gSprites[bankSpriteId].pos1.x + gSprites[bankSpriteId].pos2.x) + 0x20;
+ gBattle_BG1_X = -(gSprites[battlerSpriteId].pos1.x + gSprites[battlerSpriteId].pos2.x) + 0x20;
if (IsContest() && IsSpeciesNotUnown(gContestResources->field_18->field_0))
gBattle_BG1_X--;
- gBattle_BG1_Y = -(gSprites[bankSpriteId].pos1.y + gSprites[bankSpriteId].pos2.y) + 0x20;
+ gBattle_BG1_Y = -(gSprites[battlerSpriteId].pos1.y + gSprites[battlerSpriteId].pos2.y) + 0x20;
if (setSpriteInvisible)
- gSprites[gBattlerSpriteIds[bank]].invisible = 1;
+ gSprites[gBattlerSpriteIds[battlerId]].invisible = 1;
SetGpuReg(REG_OFFSET_BG1HOFS, gBattle_BG1_X);
SetGpuReg(REG_OFFSET_BG1VOFS, gBattle_BG1_Y);
- LoadPalette(&gPlttBufferUnfaded[0x100 + bank * 16], unknownStruct.unk8 * 16, 0x20);
- CpuCopy32(&gPlttBufferUnfaded[0x100 + bank * 16], (void*)(BG_PLTT + unknownStruct.unk8 * 32), 0x20);
+ LoadPalette(&gPlttBufferUnfaded[0x100 + battlerId * 16], unknownStruct.unk8 * 16, 0x20);
+ CpuCopy32(&gPlttBufferUnfaded[0x100 + battlerId * 16], (void*)(BG_PLTT + unknownStruct.unk8 * 32), 0x20);
if (IsContest())
- bankIdentity = 0;
+ battlerPosition = 0;
else
- bankIdentity = GetBattlerPosition(bank);
+ battlerPosition = GetBattlerPosition(battlerId);
- sub_8118FBC(1, 0, 0, bankIdentity, unknownStruct.unk8, unknownStruct.unk0, unknownStruct.unk4, unknownStruct.unkA);
+ sub_8118FBC(1, 0, 0, battlerPosition, unknownStruct.unk8, unknownStruct.unk0, unknownStruct.unk4, unknownStruct.unkA);
if (IsContest())
sub_80A46A0();
@@ -731,21 +727,21 @@ void sub_80A438C(u8 bank, bool8 toBG_2, bool8 setSpriteInvisible)
SetAnimBgAttribute(2, BG_ANIM_SCREEN_SIZE, 1);
SetAnimBgAttribute(2, BG_ANIM_AREA_OVERFLOW_MODE, 0);
- bankSpriteId = gBattlerSpriteIds[bank];
+ battlerSpriteId = gBattlerSpriteIds[battlerId];
- gBattle_BG2_X = -(gSprites[bankSpriteId].pos1.x + gSprites[bankSpriteId].pos2.x) + 0x20;
- gBattle_BG2_Y = -(gSprites[bankSpriteId].pos1.y + gSprites[bankSpriteId].pos2.y) + 0x20;
+ gBattle_BG2_X = -(gSprites[battlerSpriteId].pos1.x + gSprites[battlerSpriteId].pos2.x) + 0x20;
+ gBattle_BG2_Y = -(gSprites[battlerSpriteId].pos1.y + gSprites[battlerSpriteId].pos2.y) + 0x20;
if (setSpriteInvisible)
- gSprites[gBattlerSpriteIds[bank]].invisible = 1;
+ gSprites[gBattlerSpriteIds[battlerId]].invisible = 1;
SetGpuReg(REG_OFFSET_BG2HOFS, gBattle_BG2_X);
SetGpuReg(REG_OFFSET_BG2VOFS, gBattle_BG2_Y);
- LoadPalette(&gPlttBufferUnfaded[0x100 + bank * 16], 0x90, 0x20);
- CpuCopy32(&gPlttBufferUnfaded[0x100 + bank * 16], (void*)(BG_PLTT + 0x120), 0x20);
+ LoadPalette(&gPlttBufferUnfaded[0x100 + battlerId * 16], 0x90, 0x20);
+ CpuCopy32(&gPlttBufferUnfaded[0x100 + battlerId * 16], (void*)(BG_PLTT + 0x120), 0x20);
- sub_8118FBC(2, 0, 0, GetBattlerPosition(bank), unknownStruct.unk8, unknownStruct.unk0 + 0x1000, unknownStruct.unk4 + 0x400, unknownStruct.unkA);
+ sub_8118FBC(2, 0, 0, GetBattlerPosition(battlerId), unknownStruct.unk8, unknownStruct.unk0 + 0x1000, unknownStruct.unk4 + 0x400, unknownStruct.unkA);
}
}
@@ -852,7 +848,7 @@ static void task_pA_ma0A_obj_to_bg_pal(u8 taskId)
static void ScriptCmd_clearmonbg(void)
{
u8 animBankId;
- u8 bank;
+ u8 battlerId;
u8 taskId;
sBattleAnimScriptPtr++;
@@ -864,20 +860,20 @@ static void ScriptCmd_clearmonbg(void)
animBankId = ANIM_DEF_PARTNER;
if (animBankId == ANIM_ATTACKER || animBankId == ANIM_ATK_PARTNER)
- bank = gBattleAnimAttacker;
+ battlerId = gBattleAnimAttacker;
else
- bank = gBattleAnimTarget;
+ battlerId = gBattleAnimTarget;
if (sMonAnimTaskIdArray[0] != 0xFF)
- gSprites[gBattlerSpriteIds[bank]].invisible = 0;
+ gSprites[gBattlerSpriteIds[battlerId]].invisible = 0;
if (animBankId > 1 && sMonAnimTaskIdArray[1] != 0xFF)
- gSprites[gBattlerSpriteIds[bank ^ BIT_FLANK]].invisible = 0;
+ gSprites[gBattlerSpriteIds[battlerId ^ BIT_FLANK]].invisible = 0;
else
animBankId = 0;
taskId = CreateTask(sub_80A4980, 5);
gTasks[taskId].data[0] = animBankId;
- gTasks[taskId].data[2] = bank;
+ gTasks[taskId].data[2] = battlerId;
sBattleAnimScriptPtr++;
}
@@ -913,7 +909,7 @@ static void sub_80A4980(u8 taskId)
static void ScriptCmd_monbg_22(void)
{
bool8 toBG_2;
- u8 bank;
+ u8 battlerId;
u8 animBankId;
sBattleAnimScriptPtr++;
@@ -926,31 +922,31 @@ static void ScriptCmd_monbg_22(void)
animBankId = ANIM_DEF_PARTNER;
if (animBankId == ANIM_ATTACKER || animBankId == ANIM_ATK_PARTNER)
- bank = gBattleAnimAttacker;
+ battlerId = gBattleAnimAttacker;
else
- bank = gBattleAnimTarget;
+ battlerId = gBattleAnimTarget;
- if (IsBattlerSpriteVisible(bank))
+ if (IsBattlerSpriteVisible(battlerId))
{
- u8 position = GetBattlerPosition(bank);
+ u8 position = GetBattlerPosition(battlerId);
if (position == B_POSITION_OPPONENT_LEFT || position == B_POSITION_PLAYER_RIGHT || IsContest())
toBG_2 = FALSE;
else
toBG_2 = TRUE;
- sub_80A438C(bank, toBG_2, FALSE);
+ sub_80A438C(battlerId, toBG_2, FALSE);
}
- bank ^= BIT_FLANK;
- if (animBankId > 1 && IsBattlerSpriteVisible(bank))
+ battlerId ^= BIT_FLANK;
+ if (animBankId > 1 && IsBattlerSpriteVisible(battlerId))
{
- u8 position = GetBattlerPosition(bank);
+ u8 position = GetBattlerPosition(battlerId);
if (position == B_POSITION_OPPONENT_LEFT || position == B_POSITION_PLAYER_RIGHT || IsContest())
toBG_2 = FALSE;
else
toBG_2 = TRUE;
- sub_80A438C(bank, toBG_2, FALSE);
+ sub_80A438C(battlerId, toBG_2, FALSE);
}
sBattleAnimScriptPtr++;
@@ -959,7 +955,7 @@ static void ScriptCmd_monbg_22(void)
static void ScriptCmd_clearmonbg_23(void)
{
u8 animBankId;
- u8 bank;
+ u8 battlerId;
u8 taskId;
sBattleAnimScriptPtr++;
@@ -971,20 +967,20 @@ static void ScriptCmd_clearmonbg_23(void)
animBankId = ANIM_DEF_PARTNER;
if (animBankId == ANIM_ATTACKER || animBankId == ANIM_ATK_PARTNER)
- bank = gBattleAnimAttacker;
+ battlerId = gBattleAnimAttacker;
else
- bank = gBattleAnimTarget;
+ battlerId = gBattleAnimTarget;
- if (IsBattlerSpriteVisible(bank))
- gSprites[gBattlerSpriteIds[bank]].invisible = 0;
- if (animBankId > 1 && IsBattlerSpriteVisible(bank ^ BIT_FLANK))
- gSprites[gBattlerSpriteIds[bank ^ BIT_FLANK]].invisible = 0;
+ if (IsBattlerSpriteVisible(battlerId))
+ gSprites[gBattlerSpriteIds[battlerId]].invisible = 0;
+ if (animBankId > 1 && IsBattlerSpriteVisible(battlerId ^ BIT_FLANK))
+ gSprites[gBattlerSpriteIds[battlerId ^ BIT_FLANK]].invisible = 0;
else
animBankId = 0;
taskId = CreateTask(sub_80A4BB0, 5);
gTasks[taskId].data[0] = animBankId;
- gTasks[taskId].data[2] = bank;
+ gTasks[taskId].data[2] = battlerId;
sBattleAnimScriptPtr++;
}
@@ -995,30 +991,30 @@ static void sub_80A4BB0(u8 taskId)
if (gTasks[taskId].data[1] != 1)
{
bool8 toBG_2;
- u8 bank = gTasks[taskId].data[2];
- u8 position = GetBattlerPosition(bank);
+ u8 battlerId = gTasks[taskId].data[2];
+ u8 position = GetBattlerPosition(battlerId);
if (position == B_POSITION_OPPONENT_LEFT || position == B_POSITION_PLAYER_RIGHT || IsContest())
toBG_2 = FALSE;
else
toBG_2 = TRUE;
- if (IsBattlerSpriteVisible(bank))
+ if (IsBattlerSpriteVisible(battlerId))
sub_80A477C(toBG_2);
- if (gTasks[taskId].data[0] > 1 && IsBattlerSpriteVisible(bank ^ BIT_FLANK))
+ if (gTasks[taskId].data[0] > 1 && IsBattlerSpriteVisible(battlerId ^ BIT_FLANK))
sub_80A477C(toBG_2 ^ 1);
DestroyTask(taskId);
}
}
-#undef t1_MONBG_BANK
+#undef t1_MONBG_BATTLER
#undef t1_MON_IN_BG2
#undef t1_CREATE_ANOTHER_TASK
#undef t1_IS_SECONDMON_BG
-#undef t2_BANK_SPRITE_ID
+#undef t2_BATTLER_SPRITE_ID
#undef t2_MON_IN_BG2
-#undef t2_MONBG_BANK
+#undef t2_MONBG_BATTLER
static void ScriptCmd_setalpha(void)
{
@@ -1052,7 +1048,7 @@ static void ScriptCmd_call(void)
{
sBattleAnimScriptPtr++;
sBattleAnimScriptRetAddr = sBattleAnimScriptPtr + 4;
- sBattleAnimScriptPtr = SCRIPT_READ_PTR(sBattleAnimScriptPtr);
+ sBattleAnimScriptPtr = T2_READ_PTR(sBattleAnimScriptPtr);
}
static void ScriptCmd_return(void)
@@ -1069,7 +1065,7 @@ static void ScriptCmd_setarg(void)
sBattleAnimScriptPtr++;
argId = sBattleAnimScriptPtr[0];
sBattleAnimScriptPtr++;
- value = SCRIPT_READ_16(sBattleAnimScriptPtr);
+ value = T1_READ_16(sBattleAnimScriptPtr);
sBattleAnimScriptPtr = addr + 4;
gBattleAnimArgs[argId] = value;
}
@@ -1079,7 +1075,7 @@ static void ScriptCmd_choosetwoturnanim(void)
sBattleAnimScriptPtr++;
if (gAnimMoveTurn & 1)
sBattleAnimScriptPtr += 4;
- sBattleAnimScriptPtr = SCRIPT_READ_PTR(sBattleAnimScriptPtr);
+ sBattleAnimScriptPtr = T2_READ_PTR(sBattleAnimScriptPtr);
}
static void ScriptCmd_jumpifmoveturn(void)
@@ -1090,7 +1086,7 @@ static void ScriptCmd_jumpifmoveturn(void)
sBattleAnimScriptPtr++;
if (toCheck == gAnimMoveTurn)
- sBattleAnimScriptPtr = SCRIPT_READ_PTR(sBattleAnimScriptPtr);
+ sBattleAnimScriptPtr = T2_READ_PTR(sBattleAnimScriptPtr);
else
sBattleAnimScriptPtr += 4;
}
@@ -1098,7 +1094,7 @@ static void ScriptCmd_jumpifmoveturn(void)
static void ScriptCmd_goto(void)
{
sBattleAnimScriptPtr++;
- sBattleAnimScriptPtr = SCRIPT_READ_PTR(sBattleAnimScriptPtr);
+ sBattleAnimScriptPtr = T2_READ_PTR(sBattleAnimScriptPtr);
}
// Uses of this function that rely on a TRUE return are expecting inBattle to not be ticked as defined in contest behavior. As a result, if misused, this function cannot reliably discern between field and contest status and could result in undefined behavior.
@@ -1322,16 +1318,16 @@ s8 BattleAnimAdjustPanning2(s8 pan)
return pan;
}
-s16 sub_80A52EC(s16 a)
+s16 KeepPanInRange(s16 panArg)
{
- s16 var = a;
+ s16 pan = panArg;
- if (var > 63)
- var = 63;
- else if (var < -64)
- var = -64;
+ if (pan > PAN_SIDE_OPPONENT)
+ pan = PAN_SIDE_OPPONENT;
+ else if (pan < PAN_SIDE_PLAYER)
+ pan = PAN_SIDE_PLAYER;
- return var;
+ return pan;
}
s16 CalculatePanIncrement(s16 sourcePan, s16 targetPan, s16 incrementPan)
@@ -1354,7 +1350,7 @@ static void ScriptCmd_playsewithpan(void)
s8 pan;
sBattleAnimScriptPtr++;
- songId = SCRIPT_READ_16(sBattleAnimScriptPtr);
+ songId = T1_READ_16(sBattleAnimScriptPtr);
pan = sBattleAnimScriptPtr[2];
PlaySE12WithPanning(songId, BattleAnimAdjustPanning(pan));
sBattleAnimScriptPtr += 3;
@@ -1385,7 +1381,7 @@ static void ScriptCmd_panse_1B(void)
u8 taskId;
sBattleAnimScriptPtr++;
- songNum = SCRIPT_READ_16(sBattleAnimScriptPtr);
+ songNum = T1_READ_16(sBattleAnimScriptPtr);
currentPanArg = sBattleAnimScriptPtr[2];
incrementPan = sBattleAnimScriptPtr[3];
incrementPanArg = sBattleAnimScriptPtr[4];
@@ -1457,7 +1453,7 @@ static void ScriptCmd_panse_26(void)
u8 taskId;
sBattleAnimScriptPtr++;
- songId = SCRIPT_READ_16(sBattleAnimScriptPtr);
+ songId = T1_READ_16(sBattleAnimScriptPtr);
currentPan = sBattleAnimScriptPtr[2];
targetPan = sBattleAnimScriptPtr[3];
incrementPan = sBattleAnimScriptPtr[4];
@@ -1484,7 +1480,7 @@ static void ScriptCmd_panse_27(void)
u8 taskId;
sBattleAnimScriptPtr++;
- songId = SCRIPT_READ_16(sBattleAnimScriptPtr);
+ songId = T1_READ_16(sBattleAnimScriptPtr);
currentPanArg = sBattleAnimScriptPtr[2];
targetPanArg = sBattleAnimScriptPtr[3];
incrementPanArg = sBattleAnimScriptPtr[4];
@@ -1528,7 +1524,7 @@ static void ScriptCmd_loopsewithpan(void)
u8 taskId;
sBattleAnimScriptPtr++;
- songId = SCRIPT_READ_16(sBattleAnimScriptPtr);
+ songId = T1_READ_16(sBattleAnimScriptPtr);
panningArg = sBattleAnimScriptPtr[2];
framesToWait = sBattleAnimScriptPtr[3];
numberOfPlays = sBattleAnimScriptPtr[4];
@@ -1585,7 +1581,7 @@ static void ScriptCmd_waitplaysewithpan(void)
u8 taskId;
sBattleAnimScriptPtr++;
- songId = SCRIPT_READ_16(sBattleAnimScriptPtr);
+ songId = T1_READ_16(sBattleAnimScriptPtr);
panningArg = sBattleAnimScriptPtr[2];
framesToWait = sBattleAnimScriptPtr[3];
panning = BattleAnimAdjustPanning(panningArg);
@@ -1620,13 +1616,13 @@ static void ScriptCmd_createsoundtask(void)
s32 i;
sBattleAnimScriptPtr++;
- func = (TaskFunc)SCRIPT_READ_32(sBattleAnimScriptPtr);
+ func = (TaskFunc)T2_READ_32(sBattleAnimScriptPtr);
sBattleAnimScriptPtr += 4;
numArgs = sBattleAnimScriptPtr[0];
sBattleAnimScriptPtr++;
for (i = 0; i < numArgs; i++)
{
- gBattleAnimArgs[i] = SCRIPT_READ_16(sBattleAnimScriptPtr);
+ gBattleAnimArgs[i] = T1_READ_16(sBattleAnimScriptPtr);
sBattleAnimScriptPtr += 2;
}
taskId = CreateTask(func, 1);
@@ -1669,10 +1665,10 @@ static void ScriptCmd_jumpargeq(void)
sBattleAnimScriptPtr++;
argId = sBattleAnimScriptPtr[0];
- valueToCheck = SCRIPT_READ_16(sBattleAnimScriptPtr + 1);
+ valueToCheck = T1_READ_16(sBattleAnimScriptPtr + 1);
if (valueToCheck == gBattleAnimArgs[argId])
- sBattleAnimScriptPtr = SCRIPT_READ_PTR(sBattleAnimScriptPtr + 3);
+ sBattleAnimScriptPtr = T2_READ_PTR(sBattleAnimScriptPtr + 3);
else
sBattleAnimScriptPtr += 7;
}
@@ -1681,7 +1677,7 @@ static void ScriptCmd_jumpifcontest(void)
{
sBattleAnimScriptPtr++;
if (IsContest())
- sBattleAnimScriptPtr = SCRIPT_READ_PTR(sBattleAnimScriptPtr);
+ sBattleAnimScriptPtr = T2_READ_PTR(sBattleAnimScriptPtr);
else
sBattleAnimScriptPtr += 4;
}
@@ -1689,19 +1685,19 @@ static void ScriptCmd_jumpifcontest(void)
static void ScriptCmd_monbgprio_28(void)
{
u8 wantedBank;
- u8 bank;
- u8 bankIdentity;
+ u8 battlerId;
+ u8 battlerPosition;
wantedBank = sBattleAnimScriptPtr[1];
sBattleAnimScriptPtr += 2;
if (wantedBank != ANIM_ATTACKER)
- bank = gBattleAnimTarget;
+ battlerId = gBattleAnimTarget;
else
- bank = gBattleAnimAttacker;
+ battlerId = gBattleAnimAttacker;
- bankIdentity = GetBattlerPosition(bank);
- if (!IsContest() && (bankIdentity == B_POSITION_PLAYER_LEFT || bankIdentity == B_POSITION_OPPONENT_RIGHT))
+ battlerPosition = GetBattlerPosition(battlerId);
+ if (!IsContest() && (battlerPosition == B_POSITION_PLAYER_LEFT || battlerPosition == B_POSITION_OPPONENT_RIGHT))
{
SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1);
SetAnimBgAttribute(2, BG_ANIM_PRIORITY, 2);
@@ -1721,20 +1717,20 @@ static void ScriptCmd_monbgprio_29(void)
static void ScriptCmd_monbgprio_2A(void)
{
u8 wantedBank;
- u8 bankIdentity;
- u8 bank;
+ u8 battlerPosition;
+ u8 battlerId;
wantedBank = sBattleAnimScriptPtr[1];
sBattleAnimScriptPtr += 2;
if (GetBattlerSide(gBattleAnimAttacker) != GetBattlerSide(gBattleAnimTarget))
{
if (wantedBank != ANIM_ATTACKER)
- bank = gBattleAnimTarget;
+ battlerId = gBattleAnimTarget;
else
- bank = gBattleAnimAttacker;
+ battlerId = gBattleAnimAttacker;
- bankIdentity = GetBattlerPosition(bank);
- if (!IsContest() && (bankIdentity == B_POSITION_PLAYER_LEFT || bankIdentity == B_POSITION_OPPONENT_RIGHT))
+ battlerPosition = GetBattlerPosition(battlerId);
+ if (!IsContest() && (battlerPosition == B_POSITION_PLAYER_LEFT || battlerPosition == B_POSITION_OPPONENT_RIGHT))
{
SetAnimBgAttribute(1, BG_ANIM_PRIORITY, 1);
SetAnimBgAttribute(2, BG_ANIM_PRIORITY, 2);
diff --git a/src/battle_anim_sound_tasks.c b/src/battle_anim_sound_tasks.c
new file mode 100644
index 000000000..2316b9759
--- /dev/null
+++ b/src/battle_anim_sound_tasks.c
@@ -0,0 +1,438 @@
+#include "global.h"
+#include "battle.h"
+#include "constants/battle_anim.h"
+#include "constants/species.h"
+#include "battle_anim.h"
+#include "task.h"
+#include "sound.h"
+#include "contest.h"
+
+// this file's functions
+static void sub_8158B98(u8 taskId);
+static void sub_8158C04(u8 taskId);
+static void sub_8158D08(u8 taskId);
+static void sub_8158FF4(u8 taskId);
+static void sub_815913C(u8 taskId);
+static void sub_8159308(u8 taskId);
+
+// task start
+void sub_8158B30(u8 taskId)
+{
+ s8 pan1, pan2, panIncrement;
+
+ gTasks[taskId].data[0] = gBattleAnimArgs[0];
+ gTasks[taskId].data[1] = gBattleAnimArgs[1];
+
+ pan1 = BattleAnimAdjustPanning(PAN_SIDE_PLAYER);
+ pan2 = BattleAnimAdjustPanning(PAN_SIDE_OPPONENT);
+ panIncrement = CalculatePanIncrement(pan1, pan2, 2);
+
+ gTasks[taskId].data[2] = pan1;
+ gTasks[taskId].data[3] = pan2;
+ gTasks[taskId].data[4] = panIncrement;
+ gTasks[taskId].data[10] = 10;
+
+ gTasks[taskId].func = sub_8158B98;
+}
+
+static void sub_8158B98(u8 taskId)
+{
+ s16 pan = gTasks[taskId].data[2];
+ s8 panIncrement = gTasks[taskId].data[4];
+ if (++gTasks[taskId].data[11] == 111)
+ {
+ gTasks[taskId].data[10] = 5;
+ gTasks[taskId].data[11] = 0;
+ gTasks[taskId].func = sub_8158C04;
+ }
+ else
+ {
+ if (++gTasks[taskId].data[10] == 11)
+ {
+ gTasks[taskId].data[10] = 0;
+ PlaySE12WithPanning(gTasks[taskId].data[0], pan);
+ }
+ pan += panIncrement;
+ gTasks[taskId].data[2] = KeepPanInRange(pan);
+ }
+}
+
+static void sub_8158C04(u8 taskId)
+{
+ if (++gTasks[taskId].data[10] == 6)
+ {
+ s8 pan;
+
+ gTasks[taskId].data[10] = 0;
+ pan = BattleAnimAdjustPanning(PAN_SIDE_OPPONENT);
+ PlaySE12WithPanning(gTasks[taskId].data[1], pan);
+ if (++gTasks[taskId].data[11] == 2)
+ DestroyAnimSoundTask(taskId);
+ }
+}
+// task end
+
+// task start
+void sub_8158C58(u8 taskId)
+{
+ u16 songId = gBattleAnimArgs[0];
+ s8 targetPan = gBattleAnimArgs[2];
+ s8 panIncrement = gBattleAnimArgs[3];
+ u8 r10 = gBattleAnimArgs[4];
+ u8 r7 = gBattleAnimArgs[5];
+ u8 r9 = gBattleAnimArgs[6];
+ s8 sourcePan = BattleAnimAdjustPanning(gBattleAnimArgs[1]);
+
+ targetPan = BattleAnimAdjustPanning(targetPan);
+ panIncrement = CalculatePanIncrement(sourcePan, targetPan, panIncrement);
+
+ gTasks[taskId].data[0] = songId;
+ gTasks[taskId].data[1] = sourcePan;
+ gTasks[taskId].data[2] = targetPan;
+ gTasks[taskId].data[3] = panIncrement;
+ gTasks[taskId].data[4] = r10;
+ gTasks[taskId].data[5] = r7;
+ gTasks[taskId].data[6] = r9;
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[11] = sourcePan;
+ gTasks[taskId].data[12] = r9;
+
+ gTasks[taskId].func = sub_8158D08;
+ sub_8158D08(taskId);
+}
+
+static void sub_8158D08(u8 taskId)
+{
+ if (gTasks[taskId].data[12]++ == gTasks[taskId].data[6])
+ {
+ gTasks[taskId].data[12] = 0;
+ PlaySE12WithPanning(gTasks[taskId].data[0], gTasks[taskId].data[11]);
+ if (--gTasks[taskId].data[4] == 0)
+ {
+ DestroyAnimSoundTask(taskId);
+ return;
+ }
+ }
+
+ if (gTasks[taskId].data[10]++ == gTasks[taskId].data[5])
+ {
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[11] += gTasks[taskId].data[3];
+ gTasks[taskId].data[11] = KeepPanInRange(gTasks[taskId].data[11]);
+ }
+}
+// task end
+
+// task start
+void sub_8158D8C(u8 taskId)
+{
+ u16 species = 0;
+ s8 pan = BattleAnimAdjustPanning(PAN_SIDE_PLAYER);
+ if (IsContest())
+ {
+ if (gBattleAnimArgs[0] == ANIM_ATTACKER)
+ species = gContestResources->field_18->field_0;
+ else
+ DestroyAnimVisualTask(taskId); // UB: function should return upon destroying task
+ }
+ else
+ {
+ u8 battlerId;
+
+ // get wanted battler
+ if (gBattleAnimArgs[0] == ANIM_ATTACKER)
+ battlerId = gBattleAnimAttacker;
+ else if (gBattleAnimArgs[0] == ANIM_TARGET)
+ battlerId = gBattleAnimTarget;
+ else if (gBattleAnimArgs[0] == ANIM_ATK_PARTNER)
+ battlerId = BATTLE_PARTNER(gBattleAnimAttacker);
+ else
+ battlerId = BATTLE_PARTNER(gBattleAnimTarget);
+
+ // check if battler is visible
+ if ((gBattleAnimArgs[0] == ANIM_TARGET || gBattleAnimArgs[0] == ANIM_DEF_PARTNER) && !IsBattlerSpriteVisible(battlerId))
+ {
+ DestroyAnimVisualTask(taskId);
+ return;
+ }
+
+ if (GetBattlerSide(battlerId) != B_SIDE_PLAYER)
+ species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
+ else
+ species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
+ }
+
+ if (species != SPECIES_NONE)
+ PlayCry3(species, pan, 3);
+
+ DestroyAnimVisualTask(taskId);
+}
+// task end
+
+// task start
+void sub_8158E9C(u8 taskId)
+{
+ u16 species = 0;
+ s8 pan = BattleAnimAdjustPanning(PAN_SIDE_PLAYER);
+ if (IsContest())
+ {
+ if (gBattleAnimArgs[0] == ANIM_ATTACKER)
+ species = gContestResources->field_18->field_0;
+ else
+ DestroyAnimVisualTask(taskId); // UB: function should return upon destroying task
+ }
+ else
+ {
+ u8 battlerId;
+
+ // get wanted battler
+ if (gBattleAnimArgs[0] == ANIM_ATTACKER)
+ battlerId = gBattleAnimAttacker;
+ else if (gBattleAnimArgs[0] == ANIM_TARGET)
+ battlerId = gBattleAnimTarget;
+ else if (gBattleAnimArgs[0] == ANIM_ATK_PARTNER)
+ battlerId = BATTLE_PARTNER(gBattleAnimAttacker);
+ else
+ battlerId = BATTLE_PARTNER(gBattleAnimTarget);
+
+ // check if battler is visible
+ if ((gBattleAnimArgs[0] == ANIM_TARGET || gBattleAnimArgs[0] == ANIM_DEF_PARTNER) && !IsBattlerSpriteVisible(battlerId))
+ {
+ DestroyAnimVisualTask(taskId);
+ return;
+ }
+
+ if (GetBattlerSide(battlerId) != B_SIDE_PLAYER)
+ species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
+ else
+ species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
+ }
+
+ gTasks[taskId].data[0] = gBattleAnimArgs[1];
+ gTasks[taskId].data[1] = species;
+ gTasks[taskId].data[2] = pan;
+
+ if (species != SPECIES_NONE)
+ {
+ if (gBattleAnimArgs[1] == 0xFF)
+ PlayCry3(species, pan, 9);
+ else
+ PlayCry3(species, pan, 7);
+
+ gTasks[taskId].func = sub_8158FF4;
+ }
+ else
+ {
+ DestroyAnimVisualTask(taskId);
+ }
+}
+
+static void sub_8158FF4(u8 taskId)
+{
+ u16 species = gTasks[taskId].data[1];
+ s8 pan = gTasks[taskId].data[2];
+
+ if (gTasks[taskId].data[9] < 2)
+ {
+ gTasks[taskId].data[9]++;
+ }
+ else
+ {
+ if (gTasks[taskId].data[0] == 0xFF)
+ {
+ if (!IsCryPlaying())
+ {
+ PlayCry3(species, pan, 10);
+ DestroyAnimVisualTask(taskId);
+ }
+ }
+ else
+ {
+ if (!IsCryPlaying())
+ {
+ PlayCry3(species, pan, 8);
+ DestroyAnimVisualTask(taskId);
+ }
+ }
+ }
+}
+// task end
+
+void sub_8159078(u8 taskId)
+{
+ if (gTasks[taskId].data[9] < 2)
+ {
+ gTasks[taskId].data[9]++;
+ }
+ else
+ {
+ if (!IsCryPlaying())
+ DestroyAnimVisualTask(taskId);
+ }
+}
+
+// task start
+void sub_81590B8(u8 taskId)
+{
+ u16 species;
+ s8 pan;
+
+ gTasks[taskId].data[10] = gBattleAnimArgs[0];
+ pan = BattleAnimAdjustPanning(PAN_SIDE_PLAYER);
+
+ if (IsContest())
+ species = gContestResources->field_18->field_0;
+ else
+ species = gAnimBattlerSpecies[gBattleAnimAttacker];
+
+ gTasks[taskId].data[1] = species;
+ gTasks[taskId].data[2] = pan;
+
+ if (species != SPECIES_NONE)
+ gTasks[taskId].func = sub_815913C;
+ else
+ DestroyAnimVisualTask(taskId);
+}
+
+static void sub_815913C(u8 taskId)
+{
+ u16 species = gTasks[taskId].data[1];
+ s8 pan = gTasks[taskId].data[2];
+
+ switch (gTasks[taskId].data[9])
+ {
+ case 2:
+ PlayCry6(species, pan, 4);
+ gTasks[taskId].data[9]++;
+ break;
+ case 1:
+ case 3:
+ case 4:
+ gTasks[taskId].data[9]++;
+ break;
+ case 5:
+ if (IsCryPlaying())
+ break;
+ case 0:
+ StopCryAndClearCrySongs();
+ gTasks[taskId].data[9]++;
+ break;
+ default:
+ if (gTasks[taskId].data[10] == 0)
+ PlayCry6(species, pan, 6);
+ else
+ PlayCry3(species, pan, 6);
+
+ DestroyAnimVisualTask(taskId);
+ break;
+ }
+}
+// task end
+
+void sub_8159210(u8 taskId)
+{
+ u16 songId = gBattleAnimArgs[0];
+ s8 pan = BattleAnimAdjustPanning(gBattleAnimArgs[1]);
+
+ PlaySE1WithPanning(songId, pan);
+ DestroyAnimVisualTask(taskId);
+}
+
+void sub_8159244(u8 taskId)
+{
+ u16 songId = gBattleAnimArgs[0];
+ s8 pan = BattleAnimAdjustPanning(gBattleAnimArgs[1]);
+
+ PlaySE2WithPanning(songId, pan);
+ DestroyAnimVisualTask(taskId);
+}
+
+void sub_8159278(u8 taskId)
+{
+ s8 targetPan = gBattleAnimArgs[1];
+ s8 panIncrement = gBattleAnimArgs[2];
+ u16 r9 = gBattleAnimArgs[3];
+ s8 sourcePan = BattleAnimAdjustPanning(gBattleAnimArgs[0]);
+
+ targetPan = BattleAnimAdjustPanning(targetPan);
+ panIncrement = CalculatePanIncrement(sourcePan, targetPan, panIncrement);
+
+ gTasks[taskId].data[1] = sourcePan;
+ gTasks[taskId].data[2] = targetPan;
+ gTasks[taskId].data[3] = panIncrement;
+ gTasks[taskId].data[5] = r9;
+ gTasks[taskId].data[10] = 0;
+ gTasks[taskId].data[11] = sourcePan;
+
+ gTasks[taskId].func = sub_8159308;
+ sub_8159308(taskId);
+}
+
+#ifdef NONMATCHING
+void sub_8159308(u8 taskId)
+{
+ s16 panIncrement = gTasks[taskId].data[3];
+
+ if (gTasks[taskId].data[10]++ == gTasks[taskId].data[5])
+ {
+ gTasks[taskId].data[10] = 0;
+
+ gTasks[taskId].data[11] += panIncrement;
+ gTasks[taskId].data[11] = KeepPanInRange(gTasks[taskId].data[11]);
+ }
+
+ gUnknown_02038440 = gTasks[taskId].data[11];
+ if (gTasks[taskId].data[11] == gTasks[taskId].data[2])
+ DestroyAnimVisualTask(taskId);
+}
+#else
+NAKED
+void sub_8159308(u8 taskId)
+{
+ asm_unified(" push {r4,r5,lr}\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ adds r5, r0, 0\n\
+ ldr r1, =gTasks\n\
+ lsls r0, r5, 2\n\
+ adds r0, r5\n\
+ lsls r0, 3\n\
+ adds r4, r0, r1\n\
+ ldrh r2, [r4, 0xE]\n\
+ ldrh r0, [r4, 0x1C]\n\
+ adds r1, r0, 0x1\n\
+ strh r1, [r4, 0x1C]\n\
+ lsls r0, 16\n\
+ asrs r0, 16\n\
+ movs r3, 0x12\n\
+ ldrsh r1, [r4, r3]\n\
+ cmp r0, r1\n\
+ bne _08159342\n\
+ movs r0, 0\n\
+ strh r0, [r4, 0x1C]\n\
+ ldrh r1, [r4, 0x1E]\n\
+ adds r0, r2, r1\n\
+ strh r0, [r4, 0x1E]\n\
+ movs r2, 0x1E\n\
+ ldrsh r0, [r4, r2]\n\
+ bl KeepPanInRange\n\
+ strh r0, [r4, 0x1E]\n\
+_08159342:\n\
+ ldr r1, =gUnknown_02038440\n\
+ ldrh r0, [r4, 0x1E]\n\
+ strb r0, [r1]\n\
+ movs r3, 0x1E\n\
+ ldrsh r1, [r4, r3]\n\
+ movs r2, 0xC\n\
+ ldrsh r0, [r4, r2]\n\
+ cmp r1, r0\n\
+ bne _0815935A\n\
+ adds r0, r5, 0\n\
+ bl DestroyAnimVisualTask\n\
+_0815935A:\n\
+ pop {r4,r5}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .pool");
+}
+#endif
diff --git a/src/battle_bg.c b/src/battle_bg.c
index f493bafea..d4bfd297a 100644
--- a/src/battle_bg.c
+++ b/src/battle_bg.c
@@ -14,7 +14,6 @@
#include "trig.h"
#include "sound.h"
#include "constants/songs.h"
-#include "strings.h"
#include "window.h"
#include "text_window.h"
#include "menu.h"
diff --git a/src/battle_controller_link_opponent.c b/src/battle_controller_link_opponent.c
index 290236f4a..a4aac55e2 100644
--- a/src/battle_controller_link_opponent.c
+++ b/src/battle_controller_link_opponent.c
@@ -6,7 +6,7 @@
#include "battle_anim.h"
#include "constants/battle_anim.h"
#include "battle_ai_script_commands.h"
-#include "battle_link_817C95C.h"
+#include "battle_tv.h"
#include "pokemon.h"
#include "link.h"
#include "util.h"
@@ -26,17 +26,14 @@
#include "data2.h"
#include "battle_setup.h"
-extern struct SpriteTemplate gUnknown_0202499C;
extern u16 gBattle_BG0_X;
extern u16 gBattle_BG0_Y;
extern struct MusicPlayerInfo gMPlayInfo_BGM;
extern struct UnusedControllerStruct gUnknown_02022D0C;
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_8172EF0(u8 battlerId, struct Pokemon *mon);
extern void sub_806A068(u16, u8);
extern void sub_81851A8(u8 *);
extern u16 sub_8068B48(void);
@@ -106,7 +103,7 @@ static void LinkOpponentBufferExecCompleted(void);
static void sub_8064DD0(void);
static u32 CopyLinkOpponentMonData(u8 monId, u8 *dst);
static void SetLinkOpponentMonData(u8 monId);
-static void sub_8066494(u8 bank, bool8 dontClearSubstituteBit);
+static void sub_8066494(u8 battlerId, bool8 dontClearSubstituteBit);
static void DoSwitchOutAnimation(void);
static void LinkOpponentDoMoveAnimation(void);
static void sub_8067618(u8 taskId);
@@ -1162,36 +1159,36 @@ static void LinkOpponentHandleSwitchInAnim(void)
gBattlerControllerFuncs[gActiveBattler] = sub_8064F40;
}
-static void sub_8066494(u8 bank, bool8 dontClearSubstituteBit)
+static void sub_8066494(u8 battlerId, bool8 dontClearSubstituteBit)
{
u16 species;
- ClearTemporarySpeciesSpriteData(bank, dontClearSubstituteBit);
- gBattlerPartyIndexes[bank] = gBattleBufferA[bank][1];
- species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[bank]], MON_DATA_SPECIES);
- gUnknown_03005D7C[bank] = CreateInvisibleSpriteWithCallback(sub_805D714);
- BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[bank]], bank);
- sub_806A068(species, GetBattlerPosition(bank));
+ ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit);
+ gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1];
+ species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
+ gUnknown_03005D7C[battlerId] = CreateInvisibleSpriteWithCallback(sub_805D714);
+ BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId);
+ sub_806A068(species, GetBattlerPosition(battlerId));
- gBattlerSpriteIds[bank] = CreateSprite(
+ gBattlerSpriteIds[battlerId] = CreateSprite(
&gUnknown_0202499C,
- GetBattlerSpriteCoord(bank, 2),
- GetBattlerSpriteDefault_Y(bank),
- sub_80A82E4(bank));
+ GetBattlerSpriteCoord(battlerId, 2),
+ GetBattlerSpriteDefault_Y(battlerId),
+ sub_80A82E4(battlerId));
- gSprites[gUnknown_03005D7C[bank]].data[1] = gBattlerSpriteIds[bank];
- gSprites[gUnknown_03005D7C[bank]].data[2] = bank;
+ gSprites[gUnknown_03005D7C[battlerId]].data[1] = gBattlerSpriteIds[battlerId];
+ gSprites[gUnknown_03005D7C[battlerId]].data[2] = battlerId;
- gSprites[gBattlerSpriteIds[bank]].data[0] = bank;
- gSprites[gBattlerSpriteIds[bank]].data[2] = species;
- gSprites[gBattlerSpriteIds[bank]].oam.paletteNum = bank;
+ gSprites[gBattlerSpriteIds[battlerId]].data[0] = battlerId;
+ gSprites[gBattlerSpriteIds[battlerId]].data[2] = species;
+ gSprites[gBattlerSpriteIds[battlerId]].oam.paletteNum = battlerId;
- StartSpriteAnim(&gSprites[gBattlerSpriteIds[bank]], gBattleMonForms[bank]);
+ StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], gBattleMonForms[battlerId]);
- gSprites[gBattlerSpriteIds[bank]].invisible = TRUE;
- gSprites[gBattlerSpriteIds[bank]].callback = SpriteCallbackDummy;
+ gSprites[gBattlerSpriteIds[battlerId]].invisible = TRUE;
+ gSprites[gBattlerSpriteIds[battlerId]].callback = SpriteCallbackDummy;
- gSprites[gUnknown_03005D7C[bank]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_OPPONENT_SENDOUT);
+ gSprites[gUnknown_03005D7C[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_OPPONENT_SENDOUT);
}
static void LinkOpponentHandleReturnMonToBall(void)
@@ -1246,7 +1243,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);
@@ -1256,18 +1253,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
{
@@ -1286,17 +1283,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
{
@@ -1340,7 +1337,7 @@ static void LinkOpponentHandleTrainerSlide(void)
gSprites[gBattlerSpriteIds[gActiveBattler]].oam.affineParam = trainerPicId;
gSprites[gBattlerSpriteIds[gActiveBattler]].callback = sub_805D7AC;
- gBattlerControllerFuncs[gActiveBattler] = CompleteOnBankSpriteCallbackDummy2; // this line is redundant, because LinkOpponentBufferExecCompleted changes the battle bank function
+ gBattlerControllerFuncs[gActiveBattler] = CompleteOnBankSpriteCallbackDummy2; // this line is redundant, because LinkOpponentBufferExecCompleted changes the battle battlerId function
LinkOpponentBufferExecCompleted();
}
@@ -1416,7 +1413,7 @@ static void LinkOpponentHandleMoveAnimation(void)
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
gBattlerControllerFuncs[gActiveBattler] = LinkOpponentDoMoveAnimation;
- sub_817E0FC(move, gWeatherMoveAnim, gAnimDisableStructPtr);
+ BattleTv_SetDataBasedOnMove(move, gWeatherMoveAnim, gAnimDisableStructPtr);
}
}
}
@@ -1480,7 +1477,7 @@ static void LinkOpponentHandlePrintString(void)
BufferStringBattle(*stringId);
BattleHandleAddTextPrinter(gDisplayedStringBattle, 0);
gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter;
- sub_817C95C(*stringId);
+ BattleTv_SetDataBasedOnString(*stringId);
}
static void LinkOpponentHandlePrintSelectionString(void)
@@ -1551,11 +1548,11 @@ static void LinkOpponentHandleStatusIconUpdate(void)
{
if (!mplay_80342A4(gActiveBattler))
{
- u8 bank;
+ u8 battlerId;
UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_STATUS_ICON);
- bank = gActiveBattler;
- gBattleSpritesDataPtr->healthBoxesData[bank].statusAnimActive = 0;
+ battlerId = gActiveBattler;
+ gBattleSpritesDataPtr->healthBoxesData[battlerId].statusAnimActive = 0;
gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation;
}
}
@@ -1833,7 +1830,7 @@ static void LinkOpponentHandleBattleAnimation(void)
else
gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedBattleAnimation;
- sub_817E32C(animationId);
+ BattleTv_SetDataBasedOnAnimation(animationId);
}
}
diff --git a/src/battle_controller_link_partner.c b/src/battle_controller_link_partner.c
index 9d2c79922..d742d5df2 100644
--- a/src/battle_controller_link_partner.c
+++ b/src/battle_controller_link_partner.c
@@ -6,7 +6,7 @@
#include "battle_anim.h"
#include "constants/battle_anim.h"
#include "battle_ai_script_commands.h"
-#include "battle_link_817C95C.h"
+#include "battle_tv.h"
#include "pokemon.h"
#include "link.h"
#include "util.h"
@@ -25,16 +25,14 @@
#include "data2.h"
#include "battle_setup.h"
-extern struct SpriteTemplate gUnknown_0202499C;
extern u16 gBattle_BG0_X;
extern u16 gBattle_BG0_Y;
extern struct UnusedControllerStruct gUnknown_02022D0C;
extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[];
-extern const struct BattleMove gBattleMoves[];
-extern void sub_8172EF0(u8 bank, struct Pokemon *mon);
+extern void sub_8172EF0(u8 battlerId, struct Pokemon *mon);
extern void sub_806A068(u16, u8);
extern void sub_81851A8(u8 *);
extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId);
@@ -103,7 +101,7 @@ static void LinkPartnerBufferExecCompleted(void);
static void sub_814B554(void);
static u32 CopyLinkPartnerMonData(u8 monId, u8 *dst);
static void SetLinkPartnerMonData(u8 monId);
-static void sub_814CC98(u8 bank, bool8 dontClearSubstituteBit);
+static void sub_814CC98(u8 battlerId, bool8 dontClearSubstituteBit);
static void DoSwitchOutAnimation(void);
static void LinkPartnerDoMoveAnimation(void);
static void sub_814DCCC(u8 taskId);
@@ -1047,35 +1045,35 @@ static void LinkPartnerHandleSwitchInAnim(void)
gBattlerControllerFuncs[gActiveBattler] = sub_814B69C;
}
-static void sub_814CC98(u8 bank, bool8 dontClearSubstituteBit)
+static void sub_814CC98(u8 battlerId, bool8 dontClearSubstituteBit)
{
u16 species;
- ClearTemporarySpeciesSpriteData(bank, dontClearSubstituteBit);
- gBattlerPartyIndexes[bank] = gBattleBufferA[bank][1];
- species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_SPECIES);
- gUnknown_03005D7C[bank] = CreateInvisibleSpriteWithCallback(sub_805D714);
- sub_806A068(species, GetBattlerPosition(bank));
+ ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit);
+ gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1];
+ species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
+ gUnknown_03005D7C[battlerId] = CreateInvisibleSpriteWithCallback(sub_805D714);
+ sub_806A068(species, GetBattlerPosition(battlerId));
- gBattlerSpriteIds[bank] = CreateSprite(
+ gBattlerSpriteIds[battlerId] = CreateSprite(
&gUnknown_0202499C,
- GetBattlerSpriteCoord(bank, 2),
- GetBattlerSpriteDefault_Y(bank),
- sub_80A82E4(bank));
+ GetBattlerSpriteCoord(battlerId, 2),
+ GetBattlerSpriteDefault_Y(battlerId),
+ sub_80A82E4(battlerId));
- gSprites[gUnknown_03005D7C[bank]].data[1] = gBattlerSpriteIds[bank];
- gSprites[gUnknown_03005D7C[bank]].data[2] = bank;
+ gSprites[gUnknown_03005D7C[battlerId]].data[1] = gBattlerSpriteIds[battlerId];
+ gSprites[gUnknown_03005D7C[battlerId]].data[2] = battlerId;
- gSprites[gBattlerSpriteIds[bank]].data[0] = bank;
- gSprites[gBattlerSpriteIds[bank]].data[2] = species;
- gSprites[gBattlerSpriteIds[bank]].oam.paletteNum = bank;
+ gSprites[gBattlerSpriteIds[battlerId]].data[0] = battlerId;
+ gSprites[gBattlerSpriteIds[battlerId]].data[2] = species;
+ gSprites[gBattlerSpriteIds[battlerId]].oam.paletteNum = battlerId;
- StartSpriteAnim(&gSprites[gBattlerSpriteIds[bank]], gBattleMonForms[bank]);
+ StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], gBattleMonForms[battlerId]);
- gSprites[gBattlerSpriteIds[bank]].invisible = TRUE;
- gSprites[gBattlerSpriteIds[bank]].callback = SpriteCallbackDummy;
+ gSprites[gBattlerSpriteIds[battlerId]].invisible = TRUE;
+ gSprites[gBattlerSpriteIds[battlerId]].callback = SpriteCallbackDummy;
- gSprites[gUnknown_03005D7C[bank]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT);
+ gSprites[gUnknown_03005D7C[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT);
}
static void LinkPartnerHandleReturnMonToBall(void)
@@ -1239,7 +1237,7 @@ static void LinkPartnerHandleMoveAnimation(void)
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
gBattlerControllerFuncs[gActiveBattler] = LinkPartnerDoMoveAnimation;
- sub_817E0FC(move, gWeatherMoveAnim, gAnimDisableStructPtr);
+ BattleTv_SetDataBasedOnMove(move, gWeatherMoveAnim, gAnimDisableStructPtr);
}
}
}
@@ -1303,7 +1301,7 @@ static void LinkPartnerHandlePrintString(void)
BufferStringBattle(*stringId);
BattleHandleAddTextPrinter(gDisplayedStringBattle, 0);
gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter;
- sub_817C95C(*stringId);
+ BattleTv_SetDataBasedOnString(*stringId);
}
static void LinkPartnerHandlePrintSelectionString(void)
@@ -1374,11 +1372,11 @@ static void LinkPartnerHandleStatusIconUpdate(void)
{
if (!mplay_80342A4(gActiveBattler))
{
- u8 bank;
+ u8 battlerId;
UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_STATUS_ICON);
- bank = gActiveBattler;
- gBattleSpritesDataPtr->healthBoxesData[bank].statusAnimActive = 0;
+ battlerId = gActiveBattler;
+ gBattleSpritesDataPtr->healthBoxesData[battlerId].statusAnimActive = 0;
gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation;
}
}
@@ -1667,7 +1665,7 @@ static void LinkPartnerHandleBattleAnimation(void)
else
gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedBattleAnimation;
- sub_817E32C(animationId);
+ BattleTv_SetDataBasedOnAnimation(animationId);
}
}
diff --git a/src/battle_controller_opponent.c b/src/battle_controller_opponent.c
index 5a3732f8b..64cf16b86 100644
--- a/src/battle_controller_opponent.c
+++ b/src/battle_controller_opponent.c
@@ -5,7 +5,7 @@
#include "battle_interface.h"
#include "battle_anim.h"
#include "constants/battle_anim.h"
-#include "battle_link_817C95C.h"
+#include "battle_tv.h"
#include "battle_ai_script_commands.h"
#include "pokemon.h"
#include "link.h"
@@ -29,18 +29,16 @@
#include "data2.h"
#include "battle_setup.h"
-extern struct SpriteTemplate gUnknown_0202499C;
extern u16 gBattle_BG0_X;
extern u16 gBattle_BG0_Y;
extern struct MusicPlayerInfo gMPlayInfo_BGM;
extern struct UnusedControllerStruct gUnknown_02022D0C;
extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
-extern const struct BattleMove gBattleMoves[];
-extern void sub_8172EF0(u8 bank, struct Pokemon *mon);
+extern void sub_8172EF0(u8 battlerId, struct Pokemon *mon);
extern void sub_806A068(u16, u8);
-extern void sub_81A57E4(u8 bank, u16 stringId);
+extern void sub_81A57E4(u8 battlerId, u16 stringId);
extern u8 sub_81A4CB0(void);
extern u8 sub_81D5588(u16 trainerId);
extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId);
@@ -110,7 +108,7 @@ static void OpponentBufferExecCompleted(void);
static void sub_805FC80(void);
static u32 GetOpponentMonData(u8 monId, u8 *dst);
static void SetOpponentMonData(u8 monId);
-static void sub_80613DC(u8 bank, bool8 dontClearSubstituteBit);
+static void sub_80613DC(u8 battlerId, bool8 dontClearSubstituteBit);
static void DoSwitchOutAnimation(void);
static void OpponentDoMoveAnimation(void);
static void sub_806280C(struct Sprite *sprite);
@@ -1155,36 +1153,36 @@ static void OpponentHandleSwitchInAnim(void)
gBattlerControllerFuncs[gActiveBattler] = sub_805FDF0;
}
-static void sub_80613DC(u8 bank, bool8 dontClearSubstituteBit)
+static void sub_80613DC(u8 battlerId, bool8 dontClearSubstituteBit)
{
u16 species;
- ClearTemporarySpeciesSpriteData(bank, dontClearSubstituteBit);
- gBattlerPartyIndexes[bank] = gBattleBufferA[bank][1];
- species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[bank]], MON_DATA_SPECIES);
- gUnknown_03005D7C[bank] = CreateInvisibleSpriteWithCallback(sub_805D714);
- BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[bank]], bank);
- sub_806A068(species, GetBattlerPosition(bank));
+ ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit);
+ gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1];
+ species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
+ gUnknown_03005D7C[battlerId] = CreateInvisibleSpriteWithCallback(sub_805D714);
+ BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId);
+ sub_806A068(species, GetBattlerPosition(battlerId));
- gBattlerSpriteIds[bank] = CreateSprite(&gUnknown_0202499C,
- GetBattlerSpriteCoord(bank, 2),
- GetBattlerSpriteDefault_Y(bank),
- sub_80A82E4(bank));
+ gBattlerSpriteIds[battlerId] = CreateSprite(&gUnknown_0202499C,
+ GetBattlerSpriteCoord(battlerId, 2),
+ GetBattlerSpriteDefault_Y(battlerId),
+ sub_80A82E4(battlerId));
- gSprites[gBattlerSpriteIds[bank]].data[0] = bank;
- gSprites[gBattlerSpriteIds[bank]].data[2] = species;
+ gSprites[gBattlerSpriteIds[battlerId]].data[0] = battlerId;
+ gSprites[gBattlerSpriteIds[battlerId]].data[2] = species;
- gSprites[gUnknown_03005D7C[bank]].data[1] = gBattlerSpriteIds[bank];
- gSprites[gUnknown_03005D7C[bank]].data[2] = bank;
+ gSprites[gUnknown_03005D7C[battlerId]].data[1] = gBattlerSpriteIds[battlerId];
+ gSprites[gUnknown_03005D7C[battlerId]].data[2] = battlerId;
- gSprites[gBattlerSpriteIds[bank]].oam.paletteNum = bank;
+ gSprites[gBattlerSpriteIds[battlerId]].oam.paletteNum = battlerId;
- StartSpriteAnim(&gSprites[gBattlerSpriteIds[bank]], gBattleMonForms[bank]);
+ StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], gBattleMonForms[battlerId]);
- gSprites[gBattlerSpriteIds[bank]].invisible = TRUE;
- gSprites[gBattlerSpriteIds[bank]].callback = SpriteCallbackDummy;
+ gSprites[gBattlerSpriteIds[battlerId]].invisible = TRUE;
+ gSprites[gBattlerSpriteIds[battlerId]].callback = SpriteCallbackDummy;
- gSprites[gUnknown_03005D7C[bank]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_OPPONENT_SENDOUT);
+ gSprites[gUnknown_03005D7C[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_OPPONENT_SENDOUT);
}
static void OpponentHandleReturnMonToBall(void)
@@ -1564,7 +1562,7 @@ static void OpponentHandleChooseMove(void)
BtlController_EmitTwoReturnValues(1, 15, gBattlerTarget);
break;
default:
- if (gBattleMoves[moveInfo->moves[chosenMoveId]].target & (MOVE_TARGET_USER | MOVE_TARGET_x10))
+ if (gBattleMoves[moveInfo->moves[chosenMoveId]].target & (MOVE_TARGET_USER_OR_SELECTED | MOVE_TARGET_USER))
gBattlerTarget = gActiveBattler;
if (gBattleMoves[moveInfo->moves[chosenMoveId]].target & MOVE_TARGET_BOTH)
{
@@ -1586,7 +1584,7 @@ static void OpponentHandleChooseMove(void)
move = moveInfo->moves[chosenMoveId];
} while (move == MOVE_NONE);
- if (gBattleMoves[move].target & (MOVE_TARGET_USER | MOVE_TARGET_x10))
+ if (gBattleMoves[move].target & (MOVE_TARGET_USER_OR_SELECTED | MOVE_TARGET_USER))
BtlController_EmitTwoReturnValues(1, 10, (chosenMoveId) | (gActiveBattler << 8));
else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
BtlController_EmitTwoReturnValues(1, 10, (chosenMoveId) | (GetBattlerAtPosition(Random() & 2) << 8));
@@ -1699,11 +1697,11 @@ static void OpponentHandleStatusIconUpdate(void)
{
if (!mplay_80342A4(gActiveBattler))
{
- u8 bank;
+ u8 battlerId;
UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_STATUS_ICON);
- bank = gActiveBattler;
- gBattleSpritesDataPtr->healthBoxesData[bank].statusAnimActive = 0;
+ battlerId = gActiveBattler;
+ gBattleSpritesDataPtr->healthBoxesData[battlerId].statusAnimActive = 0;
gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation;
}
}
diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c
index 897122ddd..e0694029a 100644
--- a/src/battle_controller_player.c
+++ b/src/battle_controller_player.c
@@ -5,7 +5,7 @@
#include "battle_interface.h"
#include "battle_anim.h"
#include "constants/battle_anim.h"
-#include "battle_link_817C95C.h"
+#include "battle_tv.h"
#include "pokemon.h"
#include "link.h"
#include "util.h"
@@ -42,22 +42,12 @@ extern struct SpriteTemplate gUnknown_0202499C;
extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[];
-extern const u8 gTypeNames[][7];
-extern const struct BattleMove gBattleMoves[];
-
-extern const u8 gText_BattleSwitchWhich[];
-extern const u8 gText_MoveInterfacePP[];
-extern const u8 gText_MoveInterfaceType[];
-extern const u8 gText_LinkStandby[];
-extern const u8 gText_BattleMenu[];
-extern const u8 gText_WhatWillPkmnDo[];
-extern const u8 gText_BattleYesNoChoice[];
-
-extern void sub_8172EF0(u8 bank, struct Pokemon *mon);
+
+extern void sub_8172EF0(u8 battlerId, struct Pokemon *mon);
extern void sub_81B89AC(u8 arg0);
extern void sub_81AABB0(void);
extern void sub_806A068(u16, u8);
-extern void sub_81A57E4(u8 bank, u16 stringId);
+extern void sub_81A57E4(u8 battlerId, u16 stringId);
extern void sub_81851A8(u8 *);
// this file's functions
@@ -140,7 +130,7 @@ static void sub_80595A4(u8 taskId);
static void PrintLinkStandbyMsg(void);
static u32 CopyPlayerMonData(u8 monId, u8 *dst);
static void SetPlayerMonData(u8 monId);
-static void sub_805B258(u8 bank, bool8 dontClearSubstituteBit);
+static void sub_805B258(u8 battlerId, bool8 dontClearSubstituteBit);
static void DoSwitchOutAnimation(void);
static void PlayerDoMoveAnimation(void);
static void task05_08033660(u8 taskId);
@@ -432,7 +422,7 @@ static void HandleInputChooseTarget(void)
case B_POSITION_PLAYER_RIGHT:
if (gActiveBattler != gMultiUsePlayerCursor)
i++;
- else if (gBattleMoves[GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MOVE1 + gMoveSelectionCursor[gActiveBattler])].target & MOVE_TARGET_USER)
+ else if (gBattleMoves[GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MOVE1 + gMoveSelectionCursor[gActiveBattler])].target & MOVE_TARGET_USER_OR_SELECTED)
i++;
break;
case B_POSITION_OPPONENT_LEFT:
@@ -474,7 +464,7 @@ static void HandleInputChooseTarget(void)
case B_POSITION_PLAYER_RIGHT:
if (gActiveBattler != gMultiUsePlayerCursor)
i++;
- else if (gBattleMoves[GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MOVE1 + gMoveSelectionCursor[gActiveBattler])].target & MOVE_TARGET_USER)
+ else if (gBattleMoves[GetMonData(&gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], MON_DATA_MOVE1 + gMoveSelectionCursor[gActiveBattler])].target & MOVE_TARGET_USER_OR_SELECTED)
i++;
break;
case B_POSITION_OPPONENT_LEFT:
@@ -508,7 +498,7 @@ static void HandleInputChooseMove(void)
if (moveInfo->moves[gMoveSelectionCursor[gActiveBattler]] == MOVE_CURSE)
{
if (moveInfo->monType1 != TYPE_GHOST && moveInfo->monType2 != TYPE_GHOST)
- moveTarget = MOVE_TARGET_x10;
+ moveTarget = MOVE_TARGET_USER;
else
moveTarget = MOVE_TARGET_SELECTED;
}
@@ -517,26 +507,26 @@ static void HandleInputChooseMove(void)
moveTarget = gBattleMoves[moveInfo->moves[gMoveSelectionCursor[gActiveBattler]]].target;
}
- if (moveTarget & MOVE_TARGET_x10)
+ if (moveTarget & MOVE_TARGET_USER)
gMultiUsePlayerCursor = gActiveBattler;
else
gMultiUsePlayerCursor = GetBattlerAtPosition((GetBattlerPosition(gActiveBattler) & BIT_SIDE) ^ BIT_SIDE);
if (!gBattleBufferA[gActiveBattler][1]) // not a double battle
{
- if (moveTarget & MOVE_TARGET_USER && !gBattleBufferA[gActiveBattler][2])
+ if (moveTarget & MOVE_TARGET_USER_OR_SELECTED && !gBattleBufferA[gActiveBattler][2])
canSelectTarget++;
}
else // double battle
{
- if (!(moveTarget & (MOVE_TARGET_RANDOM | MOVE_TARGET_BOTH | MOVE_TARGET_DEPENDS | MOVE_TARGET_FOES_AND_ALLY | MOVE_TARGET_OPPONENTS_FIELD | MOVE_TARGET_x10)))
+ if (!(moveTarget & (MOVE_TARGET_RANDOM | MOVE_TARGET_BOTH | MOVE_TARGET_DEPENDS | MOVE_TARGET_FOES_AND_ALLY | MOVE_TARGET_OPPONENTS_FIELD | MOVE_TARGET_USER)))
canSelectTarget++; // either selected or user
if (moveInfo->currentPp[gMoveSelectionCursor[gActiveBattler]] == 0)
{
canSelectTarget = FALSE;
}
- else if (!(moveTarget & (MOVE_TARGET_x10 | MOVE_TARGET_USER)) && CountAliveMonsInBattle(BATTLE_ALIVE_EXCEPT_ACTIVE) <= 1)
+ else if (!(moveTarget & (MOVE_TARGET_USER | MOVE_TARGET_USER_OR_SELECTED)) && CountAliveMonsInBattle(BATTLE_ALIVE_EXCEPT_ACTIVE) <= 1)
{
gMultiUsePlayerCursor = GetDefaultMoveTarget(gActiveBattler);
canSelectTarget = FALSE;
@@ -552,7 +542,7 @@ static void HandleInputChooseMove(void)
{
gBattlerControllerFuncs[gActiveBattler] = HandleInputChooseTarget;
- if (moveTarget & (MOVE_TARGET_x10 | MOVE_TARGET_USER))
+ if (moveTarget & (MOVE_TARGET_USER | MOVE_TARGET_USER_OR_SELECTED))
gMultiUsePlayerCursor = gActiveBattler;
else if (gAbsentBattlerFlags & gBitTable[GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT)])
gMultiUsePlayerCursor = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
@@ -872,7 +862,7 @@ static void HandleMoveSwitchting(void)
static void sub_80586F8(void)
{
- if (gLinkVSyncDisabled == 0)
+ if (gWirelessCommType == 0)
{
if (gReceivedRemoteLinkPlayers == 0)
{
@@ -881,7 +871,7 @@ static void sub_80586F8(void)
gMain.callback1 = gPreBattleCallback1;
SetMainCallback2(sub_8038D64);
if (gBattleOutcome == B_OUTCOME_WON)
- sub_817E3F4();
+ TryPutLinkBattleTvShowOnAir();
FreeAllWindowBuffers();
}
}
@@ -894,7 +884,7 @@ static void sub_80586F8(void)
gMain.callback1 = gPreBattleCallback1;
SetMainCallback2(sub_8038D64);
if (gBattleOutcome == B_OUTCOME_WON)
- sub_817E3F4();
+ TryPutLinkBattleTvShowOnAir();
FreeAllWindowBuffers();
}
}
@@ -908,7 +898,7 @@ void sub_80587B0(void)
{
if (sub_800A520())
{
- if (gLinkVSyncDisabled == 0)
+ if (gWirelessCommType == 0)
sub_800AC34();
else
sub_800ADF8();
@@ -1159,10 +1149,10 @@ static void CompleteOnInactiveTextPrinter(void)
static void Task_GiveExpToMon(u8 taskId)
{
u32 monId = (u8)(gTasks[taskId].tExpTask_monId);
- u8 bank = gTasks[taskId].tExpTask_bank;
+ u8 battlerId = gTasks[taskId].tExpTask_bank;
s16 gainedExp = gTasks[taskId].tExpTask_gainedExp;
- if (IsDoubleBattle() == TRUE || monId != gBattlerPartyIndexes[bank]) // give exp without the expbar
+ if (IsDoubleBattle() == TRUE || monId != gBattlerPartyIndexes[battlerId]) // give exp without the expbar
{
struct Pokemon *mon = &gPlayerParty[monId];
u16 species = GetMonData(mon, MON_DATA_SPECIES);
@@ -1178,12 +1168,12 @@ static void Task_GiveExpToMon(u8 taskId)
CalculateMonStats(mon);
gainedExp -= nextLvlExp - currExp;
savedActiveBank = gActiveBattler;
- gActiveBattler = bank;
+ gActiveBattler = battlerId;
BtlController_EmitTwoReturnValues(1, RET_VALUE_LEVELLED_UP, gainedExp);
gActiveBattler = savedActiveBank;
if (IsDoubleBattle() == TRUE
- && ((u16)(monId) == gBattlerPartyIndexes[bank] || (u16)(monId) == gBattlerPartyIndexes[bank ^ BIT_FLANK]))
+ && ((u16)(monId) == gBattlerPartyIndexes[battlerId] || (u16)(monId) == gBattlerPartyIndexes[battlerId ^ BIT_FLANK]))
gTasks[taskId].func = sub_8059544;
else
gTasks[taskId].func = DestroyExpTaskAndCompleteOnInactiveTextPrinter;
@@ -1192,7 +1182,7 @@ static void Task_GiveExpToMon(u8 taskId)
{
currExp += gainedExp;
SetMonData(mon, MON_DATA_EXP, &currExp);
- gBattlerControllerFuncs[bank] = CompleteOnInactiveTextPrinter;
+ gBattlerControllerFuncs[battlerId] = CompleteOnInactiveTextPrinter;
DestroyTask(taskId);
}
}
@@ -1206,7 +1196,7 @@ static void Task_PrepareToGiveExpWithExpBar(u8 taskId)
{
u8 monIndex = gTasks[taskId].tExpTask_monId;
s32 gainedExp = gTasks[taskId].tExpTask_gainedExp;
- u8 bank = gTasks[taskId].tExpTask_bank;
+ u8 battlerId = gTasks[taskId].tExpTask_bank;
struct Pokemon *mon = &gPlayerParty[monIndex];
u8 level = GetMonData(mon, MON_DATA_LEVEL);
u16 species = GetMonData(mon, MON_DATA_SPECIES);
@@ -1216,7 +1206,7 @@ static void Task_PrepareToGiveExpWithExpBar(u8 taskId)
exp -= currLvlExp;
expToNextLvl = gExperienceTables[gBaseStats[species].growthRate][level + 1] - currLvlExp;
- SetBattleBarStruct(bank, gHealthboxSpriteIds[bank], expToNextLvl, exp, -gainedExp);
+ SetBattleBarStruct(battlerId, gHealthboxSpriteIds[battlerId], expToNextLvl, exp, -gainedExp);
PlaySE(SE_EXP);
gTasks[taskId].func = sub_8059400;
}
@@ -1231,11 +1221,11 @@ static void sub_8059400(u8 taskId)
{
u8 monId = gTasks[taskId].tExpTask_monId;
s16 gainedExp = gTasks[taskId].tExpTask_gainedExp;
- u8 bank = gTasks[taskId].tExpTask_bank;
+ u8 battlerId = gTasks[taskId].tExpTask_bank;
s16 r4;
- r4 = sub_8074AA0(bank, gHealthboxSpriteIds[bank], EXP_BAR, 0);
- SetHealthboxSpriteVisible(gHealthboxSpriteIds[bank]);
+ r4 = sub_8074AA0(battlerId, gHealthboxSpriteIds[battlerId], EXP_BAR, 0);
+ SetHealthboxSpriteVisible(gHealthboxSpriteIds[battlerId]);
if (r4 == -1)
{
u8 level;
@@ -1257,7 +1247,7 @@ static void sub_8059400(u8 taskId)
CalculateMonStats(&gPlayerParty[monId]);
gainedExp -= expOnNextLvl - currExp;
savedActiveBank = gActiveBattler;
- gActiveBattler = bank;
+ gActiveBattler = battlerId;
BtlController_EmitTwoReturnValues(1, RET_VALUE_LEVELLED_UP, gainedExp);
gActiveBattler = savedActiveBank;
gTasks[taskId].func = sub_8059544;
@@ -1266,7 +1256,7 @@ static void sub_8059400(u8 taskId)
{
currExp += gainedExp;
SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &currExp);
- gBattlerControllerFuncs[bank] = CompleteOnInactiveTextPrinter;
+ gBattlerControllerFuncs[battlerId] = CompleteOnInactiveTextPrinter;
DestroyTask(taskId);
}
}
@@ -1275,30 +1265,30 @@ static void sub_8059400(u8 taskId)
static void sub_8059544(u8 taskId)
{
- u8 bank = gTasks[taskId].tExpTask_bank;
+ u8 battlerId = gTasks[taskId].tExpTask_bank;
u8 monIndex = gTasks[taskId].tExpTask_monId;
- if (IsDoubleBattle() == TRUE && monIndex == gBattlerPartyIndexes[bank ^ BIT_FLANK])
- bank ^= BIT_FLANK;
+ if (IsDoubleBattle() == TRUE && monIndex == gBattlerPartyIndexes[battlerId ^ BIT_FLANK])
+ battlerId ^= BIT_FLANK;
- InitAndLaunchSpecialAnimation(bank, bank, bank, B_ANIM_LVL_UP);
+ InitAndLaunchSpecialAnimation(battlerId, battlerId, battlerId, B_ANIM_LVL_UP);
gTasks[taskId].func = sub_80595A4;
}
static void sub_80595A4(u8 taskId)
{
- u8 bank = gTasks[taskId].tExpTask_bank;
+ u8 battlerId = gTasks[taskId].tExpTask_bank;
- if (!gBattleSpritesDataPtr->healthBoxesData[bank].specialAnimActive)
+ if (!gBattleSpritesDataPtr->healthBoxesData[battlerId].specialAnimActive)
{
u8 monIndex = gTasks[taskId].tExpTask_monId;
GetMonData(&gPlayerParty[monIndex], MON_DATA_LEVEL); // Unused return value
- if (IsDoubleBattle() == TRUE && monIndex == gBattlerPartyIndexes[bank ^ BIT_FLANK])
- UpdateHealthboxAttribute(gHealthboxSpriteIds[bank ^ BIT_FLANK], &gPlayerParty[monIndex], HEALTHBOX_ALL);
+ if (IsDoubleBattle() == TRUE && monIndex == gBattlerPartyIndexes[battlerId ^ BIT_FLANK])
+ UpdateHealthboxAttribute(gHealthboxSpriteIds[battlerId ^ BIT_FLANK], &gPlayerParty[monIndex], HEALTHBOX_ALL);
else
- UpdateHealthboxAttribute(gHealthboxSpriteIds[bank], &gPlayerParty[monIndex], HEALTHBOX_ALL);
+ UpdateHealthboxAttribute(gHealthboxSpriteIds[battlerId], &gPlayerParty[monIndex], HEALTHBOX_ALL);
gTasks[taskId].func = DestroyExpTaskAndCompleteOnInactiveTextPrinter;
}
@@ -1307,12 +1297,12 @@ static void sub_80595A4(u8 taskId)
static void DestroyExpTaskAndCompleteOnInactiveTextPrinter(u8 taskId)
{
u8 monIndex;
- u8 bank;
+ u8 battlerId;
monIndex = gTasks[taskId].tExpTask_monId;
GetMonData(&gPlayerParty[monIndex], MON_DATA_LEVEL); // Unused return value
- bank = gTasks[taskId].tExpTask_bank;
- gBattlerControllerFuncs[bank] = CompleteOnInactiveTextPrinter;
+ battlerId = gTasks[taskId].tExpTask_bank;
+ gBattlerControllerFuncs[battlerId] = CompleteOnInactiveTextPrinter;
DestroyTask(taskId);
}
@@ -2201,35 +2191,35 @@ static void PlayerHandleSwitchInAnim(void)
gBattlerControllerFuncs[gActiveBattler] = sub_805902C;
}
-static void sub_805B258(u8 bank, bool8 dontClearSubstituteBit)
+static void sub_805B258(u8 battlerId, bool8 dontClearSubstituteBit)
{
u16 species;
- ClearTemporarySpeciesSpriteData(bank, dontClearSubstituteBit);
- gBattlerPartyIndexes[bank] = gBattleBufferA[bank][1];
- species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_SPECIES);
- gUnknown_03005D7C[bank] = CreateInvisibleSpriteWithCallback(sub_805D714);
- sub_806A068(species, GetBattlerPosition(bank));
+ ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit);
+ gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1];
+ species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
+ gUnknown_03005D7C[battlerId] = CreateInvisibleSpriteWithCallback(sub_805D714);
+ sub_806A068(species, GetBattlerPosition(battlerId));
- gBattlerSpriteIds[bank] = CreateSprite(
+ gBattlerSpriteIds[battlerId] = CreateSprite(
&gUnknown_0202499C,
- GetBattlerSpriteCoord(bank, 2),
- GetBattlerSpriteDefault_Y(bank),
- sub_80A82E4(bank));
+ GetBattlerSpriteCoord(battlerId, 2),
+ GetBattlerSpriteDefault_Y(battlerId),
+ sub_80A82E4(battlerId));
- gSprites[gUnknown_03005D7C[bank]].data[1] = gBattlerSpriteIds[bank];
- gSprites[gUnknown_03005D7C[bank]].data[2] = bank;
+ gSprites[gUnknown_03005D7C[battlerId]].data[1] = gBattlerSpriteIds[battlerId];
+ gSprites[gUnknown_03005D7C[battlerId]].data[2] = battlerId;
- gSprites[gBattlerSpriteIds[bank]].data[0] = bank;
- gSprites[gBattlerSpriteIds[bank]].data[2] = species;
- gSprites[gBattlerSpriteIds[bank]].oam.paletteNum = bank;
+ gSprites[gBattlerSpriteIds[battlerId]].data[0] = battlerId;
+ gSprites[gBattlerSpriteIds[battlerId]].data[2] = species;
+ gSprites[gBattlerSpriteIds[battlerId]].oam.paletteNum = battlerId;
- StartSpriteAnim(&gSprites[gBattlerSpriteIds[bank]], gBattleMonForms[bank]);
+ StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], gBattleMonForms[battlerId]);
- gSprites[gBattlerSpriteIds[bank]].invisible = TRUE;
- gSprites[gBattlerSpriteIds[bank]].callback = SpriteCallbackDummy;
+ gSprites[gBattlerSpriteIds[battlerId]].invisible = TRUE;
+ gSprites[gBattlerSpriteIds[battlerId]].callback = SpriteCallbackDummy;
- gSprites[gUnknown_03005D7C[bank]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT);
+ gSprites[gUnknown_03005D7C[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT);
}
static void PlayerHandleReturnMonToBall(void)
@@ -2484,7 +2474,7 @@ static void PlayerHandleMoveAnimation(void)
{
gBattleSpritesDataPtr->healthBoxesData[gActiveBattler].animationState = 0;
gBattlerControllerFuncs[gActiveBattler] = PlayerDoMoveAnimation;
- sub_817E0FC(move, gWeatherMoveAnim, gAnimDisableStructPtr);
+ BattleTv_SetDataBasedOnMove(move, gWeatherMoveAnim, gAnimDisableStructPtr);
}
}
}
@@ -2548,7 +2538,7 @@ static void PlayerHandlePrintString(void)
BufferStringBattle(*stringId);
BattleHandleAddTextPrinter(gDisplayedStringBattle, 0);
gBattlerControllerFuncs[gActiveBattler] = CompleteOnInactiveTextPrinter2;
- sub_817C95C(*stringId);
+ BattleTv_SetDataBasedOnString(*stringId);
sub_81A57E4(gActiveBattler, *stringId);
}
@@ -2575,7 +2565,7 @@ static void PlayerHandleChooseAction(void)
s32 i;
gBattlerControllerFuncs[gActiveBattler] = HandleChooseActionAfterDma3;
- sub_817F2A8();
+ BattleTv_ClearExplosionFaintCause();
BattleHandleAddTextPrinter(gText_BattleMenu, 2);
for (i = 0; i < 4; i++)
@@ -2751,11 +2741,11 @@ static void PlayerHandleStatusIconUpdate(void)
{
if (!mplay_80342A4(gActiveBattler))
{
- u8 bank;
+ u8 battlerId;
UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_STATUS_ICON);
- bank = gActiveBattler;
- gBattleSpritesDataPtr->healthBoxesData[bank].statusAnimActive = 0;
+ battlerId = gActiveBattler;
+ gBattleSpritesDataPtr->healthBoxesData[battlerId].statusAnimActive = 0;
gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation;
}
}
@@ -2964,13 +2954,13 @@ static void PlayerHandleIntroTrainerBallThrow(void)
void sub_805CC00(struct Sprite *sprite)
{
- u8 bank = sprite->data[5];
+ u8 battlerId = sprite->data[5];
FreeSpriteOamMatrix(sprite);
FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(sprite->oam.paletteNum));
DestroySprite(sprite);
- BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[bank]], bank);
- StartSpriteAnim(&gSprites[gBattlerSpriteIds[bank]], 0);
+ BattleLoadPlayerMonSpriteGfx(&gPlayerParty[gBattlerPartyIndexes[battlerId]], battlerId);
+ StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], 0);
}
static void task05_08033660(u8 taskId)
@@ -3069,7 +3059,7 @@ static void PlayerHandleBattleAnimation(void)
else
gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedBattleAnimation;
- sub_817E32C(animationId);
+ BattleTv_SetDataBasedOnAnimation(animationId);
}
}
diff --git a/src/battle_controller_player_partner.c b/src/battle_controller_player_partner.c
index 159fdb2ff..f18f582f7 100644
--- a/src/battle_controller_player_partner.c
+++ b/src/battle_controller_player_partner.c
@@ -25,17 +25,15 @@
#include "battle_setup.h"
#include "item_use.h"
-extern struct SpriteTemplate gUnknown_0202499C;
extern u16 gBattle_BG0_X;
extern u16 gBattle_BG0_Y;
extern struct UnusedControllerStruct gUnknown_02022D0C;
extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[];
-extern const struct BattleMove gBattleMoves[];
extern void sub_81358F4(void);
-extern void sub_8172EF0(u8 bank, struct Pokemon *mon);
+extern void sub_8172EF0(u8 battlerId, struct Pokemon *mon);
extern void sub_806A068(u16, u8);
extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId);
@@ -109,7 +107,7 @@ static void sub_81BB688(u8 taskId);
static void sub_81BB9A0(void);
static u32 CopyPlayerPartnerMonData(u8 monId, u8 *dst);
static void SetPlayerPartnerMonData(u8 monId);
-static void sub_81BD0E4(u8 bank, bool8 dontClearSubstituteBit);
+static void sub_81BD0E4(u8 battlerId, bool8 dontClearSubstituteBit);
static void DoSwitchOutAnimation(void);
static void PlayerPartnerDoMoveAnimation(void);
static void sub_81BE2C8(u8 taskId);
@@ -326,10 +324,10 @@ static void CompleteOnInactiveTextPrinter(void)
static void Task_GiveExpToMon(u8 taskId)
{
u32 monId = (u8)(gTasks[taskId].tExpTask_monId);
- u8 bank = gTasks[taskId].tExpTask_bank;
+ u8 battlerId = gTasks[taskId].tExpTask_bank;
s16 gainedExp = gTasks[taskId].tExpTask_gainedExp;
- if (IsDoubleBattle() == TRUE || monId != gBattlerPartyIndexes[bank]) // give exp without the expbar
+ if (IsDoubleBattle() == TRUE || monId != gBattlerPartyIndexes[battlerId]) // give exp without the expbar
{
struct Pokemon *mon = &gPlayerParty[monId];
u16 species = GetMonData(mon, MON_DATA_SPECIES);
@@ -345,12 +343,12 @@ static void Task_GiveExpToMon(u8 taskId)
CalculateMonStats(mon);
gainedExp -= nextLvlExp - currExp;
savedActiveBank = gActiveBattler;
- gActiveBattler = bank;
+ gActiveBattler = battlerId;
BtlController_EmitTwoReturnValues(1, RET_VALUE_LEVELLED_UP, gainedExp);
gActiveBattler = savedActiveBank;
if (IsDoubleBattle() == TRUE
- && ((u16)(monId) == gBattlerPartyIndexes[bank] || (u16)(monId) == gBattlerPartyIndexes[bank ^ BIT_FLANK]))
+ && ((u16)(monId) == gBattlerPartyIndexes[battlerId] || (u16)(monId) == gBattlerPartyIndexes[battlerId ^ BIT_FLANK]))
gTasks[taskId].func = sub_81BB628;
else
gTasks[taskId].func = DestroyExpTaskAndCompleteOnInactiveTextPrinter;
@@ -359,7 +357,7 @@ static void Task_GiveExpToMon(u8 taskId)
{
currExp += gainedExp;
SetMonData(mon, MON_DATA_EXP, &currExp);
- gBattlerControllerFuncs[bank] = CompleteOnInactiveTextPrinter;
+ gBattlerControllerFuncs[battlerId] = CompleteOnInactiveTextPrinter;
DestroyTask(taskId);
}
}
@@ -373,7 +371,7 @@ static void Task_PrepareToGiveExpWithExpBar(u8 taskId)
{
u8 monIndex = gTasks[taskId].tExpTask_monId;
s32 gainedExp = gTasks[taskId].tExpTask_gainedExp;
- u8 bank = gTasks[taskId].tExpTask_bank;
+ u8 battlerId = gTasks[taskId].tExpTask_bank;
struct Pokemon *mon = &gPlayerParty[monIndex];
u8 level = GetMonData(mon, MON_DATA_LEVEL);
u16 species = GetMonData(mon, MON_DATA_SPECIES);
@@ -383,7 +381,7 @@ static void Task_PrepareToGiveExpWithExpBar(u8 taskId)
exp -= currLvlExp;
expToNextLvl = gExperienceTables[gBaseStats[species].growthRate][level + 1] - currLvlExp;
- SetBattleBarStruct(bank, gHealthboxSpriteIds[bank], expToNextLvl, exp, -gainedExp);
+ SetBattleBarStruct(battlerId, gHealthboxSpriteIds[battlerId], expToNextLvl, exp, -gainedExp);
PlaySE(SE_EXP);
gTasks[taskId].func = sub_81BB4E4;
}
@@ -398,11 +396,11 @@ static void sub_81BB4E4(u8 taskId)
{
u8 monId = gTasks[taskId].tExpTask_monId;
s16 gainedExp = gTasks[taskId].tExpTask_gainedExp;
- u8 bank = gTasks[taskId].tExpTask_bank;
+ u8 battlerId = gTasks[taskId].tExpTask_bank;
s16 r4;
- r4 = sub_8074AA0(bank, gHealthboxSpriteIds[bank], EXP_BAR, 0);
- SetHealthboxSpriteVisible(gHealthboxSpriteIds[bank]);
+ r4 = sub_8074AA0(battlerId, gHealthboxSpriteIds[battlerId], EXP_BAR, 0);
+ SetHealthboxSpriteVisible(gHealthboxSpriteIds[battlerId]);
if (r4 == -1)
{
u8 level;
@@ -424,7 +422,7 @@ static void sub_81BB4E4(u8 taskId)
CalculateMonStats(&gPlayerParty[monId]);
gainedExp -= expOnNextLvl - currExp;
savedActiveBank = gActiveBattler;
- gActiveBattler = bank;
+ gActiveBattler = battlerId;
BtlController_EmitTwoReturnValues(1, RET_VALUE_LEVELLED_UP, gainedExp);
gActiveBattler = savedActiveBank;
gTasks[taskId].func = sub_81BB628;
@@ -433,7 +431,7 @@ static void sub_81BB4E4(u8 taskId)
{
currExp += gainedExp;
SetMonData(&gPlayerParty[monId], MON_DATA_EXP, &currExp);
- gBattlerControllerFuncs[bank] = CompleteOnInactiveTextPrinter;
+ gBattlerControllerFuncs[battlerId] = CompleteOnInactiveTextPrinter;
DestroyTask(taskId);
}
}
@@ -442,30 +440,30 @@ static void sub_81BB4E4(u8 taskId)
static void sub_81BB628(u8 taskId)
{
- u8 bank = gTasks[taskId].tExpTask_bank;
+ u8 battlerId = gTasks[taskId].tExpTask_bank;
u8 monIndex = gTasks[taskId].tExpTask_monId;
- if (IsDoubleBattle() == TRUE && monIndex == gBattlerPartyIndexes[bank ^ BIT_FLANK])
- bank ^= BIT_FLANK;
+ if (IsDoubleBattle() == TRUE && monIndex == gBattlerPartyIndexes[battlerId ^ BIT_FLANK])
+ battlerId ^= BIT_FLANK;
- InitAndLaunchSpecialAnimation(bank, bank, bank, B_ANIM_LVL_UP);
+ InitAndLaunchSpecialAnimation(battlerId, battlerId, battlerId, B_ANIM_LVL_UP);
gTasks[taskId].func = sub_81BB688;
}
static void sub_81BB688(u8 taskId)
{
- u8 bank = gTasks[taskId].tExpTask_bank;
+ u8 battlerId = gTasks[taskId].tExpTask_bank;
- if (!gBattleSpritesDataPtr->healthBoxesData[bank].specialAnimActive)
+ if (!gBattleSpritesDataPtr->healthBoxesData[battlerId].specialAnimActive)
{
u8 monIndex = gTasks[taskId].tExpTask_monId;
GetMonData(&gPlayerParty[monIndex], MON_DATA_LEVEL); // Unused return value
- if (IsDoubleBattle() == TRUE && monIndex == gBattlerPartyIndexes[bank ^ BIT_FLANK])
- UpdateHealthboxAttribute(gHealthboxSpriteIds[bank ^ BIT_FLANK], &gPlayerParty[monIndex], HEALTHBOX_ALL);
+ if (IsDoubleBattle() == TRUE && monIndex == gBattlerPartyIndexes[battlerId ^ BIT_FLANK])
+ UpdateHealthboxAttribute(gHealthboxSpriteIds[battlerId ^ BIT_FLANK], &gPlayerParty[monIndex], HEALTHBOX_ALL);
else
- UpdateHealthboxAttribute(gHealthboxSpriteIds[bank], &gPlayerParty[monIndex], HEALTHBOX_ALL);
+ UpdateHealthboxAttribute(gHealthboxSpriteIds[battlerId], &gPlayerParty[monIndex], HEALTHBOX_ALL);
gTasks[taskId].func = DestroyExpTaskAndCompleteOnInactiveTextPrinter;
}
@@ -474,12 +472,12 @@ static void sub_81BB688(u8 taskId)
static void DestroyExpTaskAndCompleteOnInactiveTextPrinter(u8 taskId)
{
u8 monIndex;
- u8 bank;
+ u8 battlerId;
monIndex = gTasks[taskId].tExpTask_monId;
GetMonData(&gPlayerParty[monIndex], MON_DATA_LEVEL); // Unused return value
- bank = gTasks[taskId].tExpTask_bank;
- gBattlerControllerFuncs[bank] = CompleteOnInactiveTextPrinter;
+ battlerId = gTasks[taskId].tExpTask_bank;
+ gBattlerControllerFuncs[battlerId] = CompleteOnInactiveTextPrinter;
DestroyTask(taskId);
}
@@ -1234,35 +1232,35 @@ static void PlayerPartnerHandleSwitchInAnim(void)
gBattlerControllerFuncs[gActiveBattler] = sub_81BBAE8;
}
-static void sub_81BD0E4(u8 bank, bool8 dontClearSubstituteBit)
+static void sub_81BD0E4(u8 battlerId, bool8 dontClearSubstituteBit)
{
u16 species;
- ClearTemporarySpeciesSpriteData(bank, dontClearSubstituteBit);
- gBattlerPartyIndexes[bank] = gBattleBufferA[bank][1];
- species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_SPECIES);
- gUnknown_03005D7C[bank] = CreateInvisibleSpriteWithCallback(sub_805D714);
- sub_806A068(species, GetBattlerPosition(bank));
+ ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit);
+ gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1];
+ species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
+ gUnknown_03005D7C[battlerId] = CreateInvisibleSpriteWithCallback(sub_805D714);
+ sub_806A068(species, GetBattlerPosition(battlerId));
- gBattlerSpriteIds[bank] = CreateSprite(
+ gBattlerSpriteIds[battlerId] = CreateSprite(
&gUnknown_0202499C,
- GetBattlerSpriteCoord(bank, 2),
- GetBattlerSpriteDefault_Y(bank),
- sub_80A82E4(bank));
+ GetBattlerSpriteCoord(battlerId, 2),
+ GetBattlerSpriteDefault_Y(battlerId),
+ sub_80A82E4(battlerId));
- gSprites[gUnknown_03005D7C[bank]].data[1] = gBattlerSpriteIds[bank];
- gSprites[gUnknown_03005D7C[bank]].data[2] = bank;
+ gSprites[gUnknown_03005D7C[battlerId]].data[1] = gBattlerSpriteIds[battlerId];
+ gSprites[gUnknown_03005D7C[battlerId]].data[2] = battlerId;
- gSprites[gBattlerSpriteIds[bank]].data[0] = bank;
- gSprites[gBattlerSpriteIds[bank]].data[2] = species;
- gSprites[gBattlerSpriteIds[bank]].oam.paletteNum = bank;
+ gSprites[gBattlerSpriteIds[battlerId]].data[0] = battlerId;
+ gSprites[gBattlerSpriteIds[battlerId]].data[2] = species;
+ gSprites[gBattlerSpriteIds[battlerId]].oam.paletteNum = battlerId;
- StartSpriteAnim(&gSprites[gBattlerSpriteIds[bank]], gBattleMonForms[bank]);
+ StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], gBattleMonForms[battlerId]);
- gSprites[gBattlerSpriteIds[bank]].invisible = TRUE;
- gSprites[gBattlerSpriteIds[bank]].callback = SpriteCallbackDummy;
+ gSprites[gBattlerSpriteIds[battlerId]].invisible = TRUE;
+ gSprites[gBattlerSpriteIds[battlerId]].callback = SpriteCallbackDummy;
- gSprites[gUnknown_03005D7C[bank]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT);
+ gSprites[gUnknown_03005D7C[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT);
}
static void PlayerPartnerHandleReturnMonToBall(void)
@@ -1522,7 +1520,7 @@ static void PlayerPartnerHandleChooseMove(void)
BattleAI_SetupAIData(0xF);
chosenMoveId = BattleAI_ChooseMoveOrAction();
- if (gBattleMoves[moveInfo->moves[chosenMoveId]].target & (MOVE_TARGET_x10 | MOVE_TARGET_USER))
+ if (gBattleMoves[moveInfo->moves[chosenMoveId]].target & (MOVE_TARGET_USER | MOVE_TARGET_USER_OR_SELECTED))
gBattlerTarget = gActiveBattler;
if (gBattleMoves[moveInfo->moves[chosenMoveId]].target & MOVE_TARGET_BOTH)
{
@@ -1627,11 +1625,11 @@ static void PlayerPartnerHandleStatusIconUpdate(void)
{
if (!mplay_80342A4(gActiveBattler))
{
- u8 bank;
+ u8 battlerId;
UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_STATUS_ICON);
- bank = gActiveBattler;
- gBattleSpritesDataPtr->healthBoxesData[bank].statusAnimActive = 0;
+ battlerId = gActiveBattler;
+ gBattleSpritesDataPtr->healthBoxesData[battlerId].statusAnimActive = 0;
gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation;
}
}
diff --git a/src/battle_controller_recorded_opponent.c b/src/battle_controller_recorded_opponent.c
index 855dfc554..4d1ccbaca 100644
--- a/src/battle_controller_recorded_opponent.c
+++ b/src/battle_controller_recorded_opponent.c
@@ -6,7 +6,7 @@
#include "battle_anim.h"
#include "constants/battle_anim.h"
#include "battle_ai_script_commands.h"
-#include "battle_link_817C95C.h"
+#include "battle_tv.h"
#include "recorded_battle.h"
#include "pokemon.h"
#include "link.h"
@@ -27,7 +27,6 @@
#include "item_use.h"
#include "battle_setup.h"
-extern struct SpriteTemplate gUnknown_0202499C;
extern u16 gBattle_BG0_X;
extern u16 gBattle_BG0_Y;
extern struct MusicPlayerInfo gMPlayInfo_BGM;
@@ -36,7 +35,7 @@ extern u8 gUnknown_0203C7B4;
extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
-extern void sub_8172EF0(u8 bank, struct Pokemon *mon);
+extern void sub_8172EF0(u8 battlerId, struct Pokemon *mon);
extern void sub_806A068(u16, u8);
extern u16 sub_8068B48(void);
extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId);
@@ -105,7 +104,7 @@ static void RecordedOpponentBufferExecCompleted(void);
static void sub_8186F14(void);
static u32 CopyRecordedOpponentMonData(u8 monId, u8 *dst);
static void SetRecordedOpponentMonData(u8 monId);
-static void sub_81885D8(u8 bank, bool8 dontClearSubstituteBit);
+static void sub_81885D8(u8 battlerId, bool8 dontClearSubstituteBit);
static void DoSwitchOutAnimation(void);
static void RecordedOpponentDoMoveAnimation(void);
static void sub_8189548(u8 taskId);
@@ -1145,35 +1144,35 @@ static void RecordedOpponentHandleSwitchInAnim(void)
gBattlerControllerFuncs[gActiveBattler] = sub_8187084;
}
-static void sub_81885D8(u8 bank, bool8 dontClearSubstituteBit)
+static void sub_81885D8(u8 battlerId, bool8 dontClearSubstituteBit)
{
u16 species;
- ClearTemporarySpeciesSpriteData(bank, dontClearSubstituteBit);
- gBattlerPartyIndexes[bank] = gBattleBufferA[bank][1];
- species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[bank]], MON_DATA_SPECIES);
- gUnknown_03005D7C[bank] = CreateInvisibleSpriteWithCallback(sub_805D714);
- BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[bank]], bank);
- sub_806A068(species, GetBattlerPosition(bank));
+ ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit);
+ gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1];
+ species = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
+ gUnknown_03005D7C[battlerId] = CreateInvisibleSpriteWithCallback(sub_805D714);
+ BattleLoadOpponentMonSpriteGfx(&gEnemyParty[gBattlerPartyIndexes[battlerId]], battlerId);
+ sub_806A068(species, GetBattlerPosition(battlerId));
- gBattlerSpriteIds[bank] = CreateSprite(&gUnknown_0202499C,
- GetBattlerSpriteCoord(bank, 2),
- GetBattlerSpriteDefault_Y(bank),
- sub_80A82E4(bank));
+ gBattlerSpriteIds[battlerId] = CreateSprite(&gUnknown_0202499C,
+ GetBattlerSpriteCoord(battlerId, 2),
+ GetBattlerSpriteDefault_Y(battlerId),
+ sub_80A82E4(battlerId));
- gSprites[gUnknown_03005D7C[bank]].data[1] = gBattlerSpriteIds[bank];
- gSprites[gUnknown_03005D7C[bank]].data[2] = bank;
+ gSprites[gUnknown_03005D7C[battlerId]].data[1] = gBattlerSpriteIds[battlerId];
+ gSprites[gUnknown_03005D7C[battlerId]].data[2] = battlerId;
- gSprites[gBattlerSpriteIds[bank]].data[0] = bank;
- gSprites[gBattlerSpriteIds[bank]].data[2] = species;
- gSprites[gBattlerSpriteIds[bank]].oam.paletteNum = bank;
+ gSprites[gBattlerSpriteIds[battlerId]].data[0] = battlerId;
+ gSprites[gBattlerSpriteIds[battlerId]].data[2] = species;
+ gSprites[gBattlerSpriteIds[battlerId]].oam.paletteNum = battlerId;
- StartSpriteAnim(&gSprites[gBattlerSpriteIds[bank]], gBattleMonForms[bank]);
+ StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], gBattleMonForms[battlerId]);
- gSprites[gBattlerSpriteIds[bank]].invisible = TRUE;
- gSprites[gBattlerSpriteIds[bank]].callback = SpriteCallbackDummy;
+ gSprites[gBattlerSpriteIds[battlerId]].invisible = TRUE;
+ gSprites[gBattlerSpriteIds[battlerId]].callback = SpriteCallbackDummy;
- gSprites[gUnknown_03005D7C[bank]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_OPPONENT_SENDOUT);
+ gSprites[gUnknown_03005D7C[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_OPPONENT_SENDOUT);
}
static void RecordedOpponentHandleReturnMonToBall(void)
@@ -1491,11 +1490,11 @@ static void RecordedOpponentHandleStatusIconUpdate(void)
{
if (!mplay_80342A4(gActiveBattler))
{
- u8 bank;
+ u8 battlerId;
UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gEnemyParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_STATUS_ICON);
- bank = gActiveBattler;
- gBattleSpritesDataPtr->healthBoxesData[bank].statusAnimActive = 0;
+ battlerId = gActiveBattler;
+ gBattleSpritesDataPtr->healthBoxesData[battlerId].statusAnimActive = 0;
gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation;
}
}
diff --git a/src/battle_controller_recorded_player.c b/src/battle_controller_recorded_player.c
index 4efe5babf..b16c3f307 100644
--- a/src/battle_controller_recorded_player.c
+++ b/src/battle_controller_recorded_player.c
@@ -25,7 +25,6 @@
#include "data2.h"
#include "item_use.h"
-extern struct SpriteTemplate gUnknown_0202499C;
extern u16 gBattle_BG0_X;
extern u16 gBattle_BG0_Y;
extern u32 gTransformedPersonalities[MAX_BATTLERS_COUNT];
@@ -35,9 +34,8 @@ extern struct UnusedControllerStruct gUnknown_02022D0C;
extern const struct CompressedSpritePalette gTrainerFrontPicPaletteTable[];
extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[];
-extern const struct BattleMove gBattleMoves[];
-extern void sub_8172EF0(u8 bank, struct Pokemon *mon);
+extern void sub_8172EF0(u8 battlerId, struct Pokemon *mon);
extern void sub_806A068(u16, u8);
extern u8 GetFrontierTrainerFrontSpriteId(u16 trainerId);
@@ -105,7 +103,7 @@ static void RecordedPlayerBufferExecCompleted(void);
static void sub_818A328(void);
static u32 CopyRecordedPlayerMonData(u8 monId, u8 *dst);
static void SetRecordedPlayerMonData(u8 monId);
-static void sub_818BA6C(u8 bank, bool8 dontClearSubstituteBit);
+static void sub_818BA6C(u8 battlerId, bool8 dontClearSubstituteBit);
static void DoSwitchOutAnimation(void);
static void RecordedPlayerDoMoveAnimation(void);
static void sub_818CC24(u8 taskId);
@@ -1131,35 +1129,35 @@ static void RecordedPlayerHandleSwitchInAnim(void)
gBattlerControllerFuncs[gActiveBattler] = sub_818A470;
}
-static void sub_818BA6C(u8 bank, bool8 dontClearSubstituteBit)
+static void sub_818BA6C(u8 battlerId, bool8 dontClearSubstituteBit)
{
u16 species;
- ClearTemporarySpeciesSpriteData(bank, dontClearSubstituteBit);
- gBattlerPartyIndexes[bank] = gBattleBufferA[bank][1];
- species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_SPECIES);
- gUnknown_03005D7C[bank] = CreateInvisibleSpriteWithCallback(sub_805D714);
- sub_806A068(species, GetBattlerPosition(bank));
+ ClearTemporarySpeciesSpriteData(battlerId, dontClearSubstituteBit);
+ gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1];
+ species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
+ gUnknown_03005D7C[battlerId] = CreateInvisibleSpriteWithCallback(sub_805D714);
+ sub_806A068(species, GetBattlerPosition(battlerId));
- gBattlerSpriteIds[bank] = CreateSprite(
+ gBattlerSpriteIds[battlerId] = CreateSprite(
&gUnknown_0202499C,
- GetBattlerSpriteCoord(bank, 2),
- GetBattlerSpriteDefault_Y(bank),
- sub_80A82E4(bank));
+ GetBattlerSpriteCoord(battlerId, 2),
+ GetBattlerSpriteDefault_Y(battlerId),
+ sub_80A82E4(battlerId));
- gSprites[gUnknown_03005D7C[bank]].data[1] = gBattlerSpriteIds[bank];
- gSprites[gUnknown_03005D7C[bank]].data[2] = bank;
+ gSprites[gUnknown_03005D7C[battlerId]].data[1] = gBattlerSpriteIds[battlerId];
+ gSprites[gUnknown_03005D7C[battlerId]].data[2] = battlerId;
- gSprites[gBattlerSpriteIds[bank]].data[0] = bank;
- gSprites[gBattlerSpriteIds[bank]].data[2] = species;
- gSprites[gBattlerSpriteIds[bank]].oam.paletteNum = bank;
+ gSprites[gBattlerSpriteIds[battlerId]].data[0] = battlerId;
+ gSprites[gBattlerSpriteIds[battlerId]].data[2] = species;
+ gSprites[gBattlerSpriteIds[battlerId]].oam.paletteNum = battlerId;
- StartSpriteAnim(&gSprites[gBattlerSpriteIds[bank]], gBattleMonForms[bank]);
+ StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], gBattleMonForms[battlerId]);
- gSprites[gBattlerSpriteIds[bank]].invisible = TRUE;
- gSprites[gBattlerSpriteIds[bank]].callback = SpriteCallbackDummy;
+ gSprites[gBattlerSpriteIds[battlerId]].invisible = TRUE;
+ gSprites[gBattlerSpriteIds[battlerId]].callback = SpriteCallbackDummy;
- gSprites[gUnknown_03005D7C[bank]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT);
+ gSprites[gUnknown_03005D7C[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT);
}
static void RecordedPlayerHandleReturnMonToBall(void)
@@ -1514,11 +1512,11 @@ static void RecordedPlayerHandleStatusIconUpdate(void)
{
if (!mplay_80342A4(gActiveBattler))
{
- u8 bank;
+ u8 battlerId;
UpdateHealthboxAttribute(gHealthboxSpriteIds[gActiveBattler], &gPlayerParty[gBattlerPartyIndexes[gActiveBattler]], HEALTHBOX_STATUS_ICON);
- bank = gActiveBattler;
- gBattleSpritesDataPtr->healthBoxesData[bank].statusAnimActive = 0;
+ battlerId = gActiveBattler;
+ gBattleSpritesDataPtr->healthBoxesData[battlerId].statusAnimActive = 0;
gBattlerControllerFuncs[gActiveBattler] = CompleteOnFinishedStatusAnimation;
}
}
diff --git a/src/battle_controller_safari.c b/src/battle_controller_safari.c
index f65d11a84..09776f150 100644
--- a/src/battle_controller_safari.c
+++ b/src/battle_controller_safari.c
@@ -23,16 +23,11 @@
#include "pokeblock.h"
#include "item_use.h"
-extern struct BattlePokemon gBattleMons[MAX_BATTLERS_COUNT];
-extern struct SpriteTemplate gUnknown_0202499C;
extern u16 gBattle_BG0_X;
extern u16 gBattle_BG0_Y;
extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[];
-extern const u8 gText_SafariZoneMenu[];
-extern const u8 gText_WhatWillPkmnDo2[];
-
extern void sub_81358F4(void);
// this file's functions
diff --git a/src/battle_controller_wally.c b/src/battle_controller_wally.c
index ad028b719..ca7b2fd44 100644
--- a/src/battle_controller_wally.c
+++ b/src/battle_controller_wally.c
@@ -5,7 +5,7 @@
#include "battle_interface.h"
#include "battle_anim.h"
#include "constants/battle_anim.h"
-#include "battle_link_817C95C.h"
+#include "battle_tv.h"
#include "pokemon.h"
#include "link.h"
#include "util.h"
@@ -30,8 +30,6 @@
#include "battle_setup.h"
#include "item_use.h"
-extern struct MusicPlayerInfo gMPlayInfo_BGM;
-extern struct SpriteTemplate gUnknown_0202499C;
extern u16 gBattle_BG0_X;
extern u16 gBattle_BG0_Y;
extern s32 gUnknown_0203CD70;
@@ -39,10 +37,7 @@ extern struct UnusedControllerStruct gUnknown_02022D0C;
extern const struct CompressedSpritePalette gTrainerBackPicPaletteTable[];
-extern const u8 gText_WhatWillWallyDo[];
-extern const u8 gText_BattleMenu[];
-
-extern void sub_8172EF0(u8 bank, struct Pokemon *mon);
+extern void sub_8172EF0(u8 battlerId, struct Pokemon *mon);
extern void sub_806A068(u16, u8);
// this file's functions
@@ -1462,31 +1457,31 @@ static void WallyHandleIntroTrainerBallThrow(void)
gBattlerControllerFuncs[gActiveBattler] = nullsub_21;
}
-static void sub_816AA80(u8 bank)
+static void sub_816AA80(u8 battlerId)
{
u16 species;
- gBattleSpritesDataPtr->battlerData[bank].transformSpecies = 0;
- gBattlerPartyIndexes[bank] = gBattleBufferA[bank][1];
- species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_SPECIES);
- gUnknown_03005D7C[bank] = CreateInvisibleSpriteWithCallback(sub_805D714);
- sub_806A068(species, GetBattlerPosition(bank));
- gBattlerSpriteIds[bank] = CreateSprite(&gUnknown_0202499C,
- GetBattlerSpriteCoord(bank, 2),
- GetBattlerSpriteDefault_Y(bank),
- sub_80A82E4(bank));
-
- gSprites[gUnknown_03005D7C[bank]].data[1] = gBattlerSpriteIds[bank];
- gSprites[gUnknown_03005D7C[bank]].data[2] = bank;
-
- gSprites[gBattlerSpriteIds[bank]].data[0] = bank;
- gSprites[gBattlerSpriteIds[bank]].data[2] = species;
- gSprites[gBattlerSpriteIds[bank]].oam.paletteNum = bank;
-
- StartSpriteAnim(&gSprites[gBattlerSpriteIds[bank]], gBattleMonForms[bank]);
- gSprites[gBattlerSpriteIds[bank]].invisible = TRUE;
- gSprites[gBattlerSpriteIds[bank]].callback = SpriteCallbackDummy;
- gSprites[gUnknown_03005D7C[bank]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT);
+ gBattleSpritesDataPtr->battlerData[battlerId].transformSpecies = 0;
+ gBattlerPartyIndexes[battlerId] = gBattleBufferA[battlerId][1];
+ species = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES);
+ gUnknown_03005D7C[battlerId] = CreateInvisibleSpriteWithCallback(sub_805D714);
+ sub_806A068(species, GetBattlerPosition(battlerId));
+ gBattlerSpriteIds[battlerId] = CreateSprite(&gUnknown_0202499C,
+ GetBattlerSpriteCoord(battlerId, 2),
+ GetBattlerSpriteDefault_Y(battlerId),
+ sub_80A82E4(battlerId));
+
+ gSprites[gUnknown_03005D7C[battlerId]].data[1] = gBattlerSpriteIds[battlerId];
+ gSprites[gUnknown_03005D7C[battlerId]].data[2] = battlerId;
+
+ gSprites[gBattlerSpriteIds[battlerId]].data[0] = battlerId;
+ gSprites[gBattlerSpriteIds[battlerId]].data[2] = species;
+ gSprites[gBattlerSpriteIds[battlerId]].oam.paletteNum = battlerId;
+
+ StartSpriteAnim(&gSprites[gBattlerSpriteIds[battlerId]], gBattleMonForms[battlerId]);
+ gSprites[gBattlerSpriteIds[battlerId]].invisible = TRUE;
+ gSprites[gBattlerSpriteIds[battlerId]].callback = SpriteCallbackDummy;
+ gSprites[gUnknown_03005D7C[battlerId]].data[0] = DoPokeballSendOutAnimation(0, POKEBALL_PLAYER_SENDOUT);
}
static void sub_816AC04(u8 taskId)
diff --git a/src/battle_controllers.c b/src/battle_controllers.c
index cbb4fff69..2b918d018 100644
--- a/src/battle_controllers.c
+++ b/src/battle_controllers.c
@@ -12,18 +12,14 @@
#include "constants/abilities.h"
#include "battle_message.h"
-extern u8 gBattleBuffersTransferData[0x100];
-extern u8 gUnknown_0202428C;
-extern u32 gUnknown_02022FF4;
-extern u8 gUnknown_0203C7B4;
extern u8 gUnknown_02022D08;
extern u8 gUnknown_02022D09;
extern u8 gUnknown_02022D0A;
-extern const struct BattleMove gBattleMoves[];
+static EWRAM_DATA u8 sBattleBuffersTransferData[0x100] = {};
extern void task00_08081A90(u8 taskId); // cable_club
-extern void sub_81B8D64(u8 bank, u8 arg1); // party_menu
+extern void sub_81B8D64(u8 battlerId, u8 arg1); // party_menu
// this file's funcionts
static void CreateTasksForSendRecvLinkBuffers(void);
@@ -37,7 +33,7 @@ void HandleLinkBattleSetup(void)
{
if (gBattleTypeFlags & BATTLE_TYPE_LINK)
{
- if (gLinkVSyncDisabled)
+ if (gWirelessCommType)
sub_800B488();
if (!gReceivedRemoteLinkPlayers)
OpenLink();
@@ -81,7 +77,6 @@ void SetUpBattleVarsAndBirchZigzagoon(void)
void sub_8032768(void)
{
s32 i;
- u8 *data;
if (!(gBattleTypeFlags & BATTLE_TYPE_RECORDED))
sub_8184DA4(1);
@@ -104,11 +99,11 @@ void sub_8032768(void)
sub_81B8D64(i, 0);
}
- for (i = 0; i < sizeof(gBattleStruct->field_1A4); i++)
- *(gBattleStruct->field_1A4 + i) = 0;
+ for (i = 0; i < sizeof(gBattleStruct->tvMovePoints); i++)
+ *((u8*)(&gBattleStruct->tvMovePoints) + i) = 0;
- for (i = 0; i < sizeof(gBattleStruct->field_204); i++)
- *(gBattleStruct->field_204 + i) = 0;
+ for (i = 0; i < sizeof(gBattleStruct->tv); i++)
+ *((u8*)(&gBattleStruct->tv) + i) = 0;
}
static void InitSinglePlayerBtlControllers(void)
@@ -758,7 +753,7 @@ static void Task_HandleSendLinkBuffersData(u8 taskId)
gTasks[taskId].data[11]++;
break;
case 2:
- if (gLinkVSyncDisabled)
+ if (gWirelessCommType)
{
gTasks[taskId].data[11]++;
}
@@ -871,7 +866,7 @@ void sub_8033648(void)
static void Task_HandleCopyReceivedLinkBuffersData(u8 taskId)
{
u16 blockSize;
- u8 bank;
+ u8 battlerId;
u8 var;
if (gTasks[taskId].data[15] != gTasks[taskId].data[14])
@@ -882,17 +877,17 @@ static void Task_HandleCopyReceivedLinkBuffersData(u8 taskId)
gTasks[taskId].data[12] = 0;
gTasks[taskId].data[15] = 0;
}
- bank = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_ACTIVE_BANK];
+ battlerId = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_ACTIVE_BANK];
blockSize = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_SIZE_LO] | (gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_SIZE_HI] << 8);
switch (gLinkBattleRecvBuffer[gTasks[taskId].data[15] + 0])
{
case 0:
- if (gBattleControllerExecFlags & gBitTable[bank])
+ if (gBattleControllerExecFlags & gBitTable[battlerId])
return;
- memcpy(gBattleBufferA[bank], &gLinkBattleRecvBuffer[gTasks[taskId].data[15] + 8], blockSize);
- sub_803F850(bank);
+ memcpy(gBattleBufferA[battlerId], &gLinkBattleRecvBuffer[gTasks[taskId].data[15] + 8], blockSize);
+ sub_803F850(battlerId);
if (!(gBattleTypeFlags & BATTLE_TYPE_WILD))
{
@@ -903,11 +898,11 @@ static void Task_HandleCopyReceivedLinkBuffersData(u8 taskId)
}
break;
case 1:
- memcpy(gBattleBufferB[bank], &gLinkBattleRecvBuffer[gTasks[taskId].data[15] + 8], blockSize);
+ memcpy(gBattleBufferB[battlerId], &gLinkBattleRecvBuffer[gTasks[taskId].data[15] + 8], blockSize);
break;
case 2:
var = gLinkBattleRecvBuffer[gTasks[taskId].data[15] + LINK_BUFF_DATA];
- gBattleControllerExecFlags &= ~(gBitTable[bank] << (var * 4));
+ gBattleControllerExecFlags &= ~(gBitTable[battlerId] << (var * 4));
break;
}
@@ -917,171 +912,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)
@@ -1089,12 +1084,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;
@@ -1113,7 +1108,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)
@@ -1121,12 +1116,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;
@@ -1142,386 +1137,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 803b3eeab..d2c242553 100644
--- a/src/battle_gfx_sfx_util.c
+++ b/src/battle_gfx_sfx_util.c
@@ -28,7 +28,6 @@ extern struct MusicPlayerInfo gMPlayInfo_SE1;
extern struct MusicPlayerInfo gMPlayInfo_SE2;
extern struct MusicPlayerInfo gMPlayInfo_BGM;
-extern const struct BattleMove gBattleMoves[];
extern const u8 gUnknown_0831C604[];
extern const u8 * const gBattleAnims_VariousTable[];
extern const u8 * const gBattleAnims_Special[];
@@ -39,7 +38,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[];
@@ -238,7 +236,7 @@ u16 ChooseMoveAndTargetInBattlePalace(void)
if (moveInfo->moves[chosenMoveId] == MOVE_CURSE)
{
if (moveInfo->monType1 != TYPE_GHOST && moveInfo->monType2 != TYPE_GHOST)
- var1 = MOVE_TARGET_x10;
+ var1 = MOVE_TARGET_USER;
else
var1 = MOVE_TARGET_SELECTED;
}
@@ -247,7 +245,7 @@ u16 ChooseMoveAndTargetInBattlePalace(void)
var1 = gBattleMoves[moveInfo->moves[chosenMoveId]].target;
}
- if (var1 & MOVE_TARGET_x10)
+ if (var1 & MOVE_TARGET_USER)
chosenMoveId |= (gActiveBattler << 8);
else if (var1 == MOVE_TARGET_SELECTED)
chosenMoveId |= (BattlePalaceGetTargetRetValue());
@@ -262,7 +260,7 @@ static u8 sub_805D4A8(u16 move)
switch (gBattleMoves[move].target)
{
case MOVE_TARGET_SELECTED:
- case MOVE_TARGET_USER:
+ case MOVE_TARGET_USER_OR_SELECTED:
case MOVE_TARGET_RANDOM:
case MOVE_TARGET_BOTH:
case MOVE_TARGET_FOES_AND_ALLY:
@@ -274,7 +272,7 @@ static u8 sub_805D4A8(u16 move)
case MOVE_TARGET_DEPENDS:
case MOVE_TARGET_OPPONENTS_FIELD:
return 2;
- case MOVE_TARGET_x10:
+ case MOVE_TARGET_USER:
return 1;
default:
return 0;
diff --git a/src/battle_interface.c b/src/battle_interface.c
index bc6ff1122..9ef45020d 100644
--- a/src/battle_interface.c
+++ b/src/battle_interface.c
@@ -21,6 +21,7 @@
#include "safari_zone.h"
#include "battle_anim.h"
#include "constants/rgb.h"
+#include "data2.h"
struct TestingBar
{
@@ -154,7 +155,6 @@ enum
};
extern const u8 * const gNatureNamePointers[];
-extern const u8 gSpeciesNames[][POKEMON_NAME_LENGTH + 1];
// strings
extern const u8 gText_Slash[];
@@ -162,8 +162,6 @@ extern const u8 gText_HighlightDarkGrey[];
extern const u8 gText_DynColor2[];
extern const u8 gText_DynColor2Male[];
extern const u8 gText_DynColor1Female[];
-extern const u8 gText_SafariBalls[];
-extern const u8 gText_SafariBallLeft[];
// graphics
extern const u8 gBattleInterface_BallStatusBarGfx[];
@@ -198,10 +196,10 @@ static void SpriteCB_StatusSummaryBar(struct Sprite *sprite);
static void SpriteCB_StatusSummaryBallsOnBattleStart(struct Sprite *sprite);
static void SpriteCB_StatusSummaryBallsOnSwitchout(struct Sprite *sprite);
-static u8 GetStatusIconForBankId(u8 statusElementId, u8 bank);
+static u8 GetStatusIconForBankId(u8 statusElementId, u8 battlerId);
static s32 sub_8074DB8(s32 maxValue, s32 currValue, s32 receivedValue, s32 *arg3, u8 arg4, u16 arg5);
static u8 GetScaledExpFraction(s32 currValue, s32 receivedValue, s32 maxValue, u8 scale);
-static void sub_8074B9C(u8 bank, u8 whichBar);
+static void sub_8074B9C(u8 battlerId, u8 whichBar);
static u8 sub_8074E8C(s32 maxValue, s32 currValue, s32 receivedValue, s32 *arg3, u8 *arg4, u8 arg5);
static void sub_8074F88(struct TestingBar *barInfo, s32 *arg1, u16 *arg2);
@@ -650,7 +648,7 @@ static void sub_8072308(s16 arg0, u16 *arg1, u8 arg2)
}
#else
-__attribute__((naked))
+NAKED
static void sub_8072308(s16 arg0, u16 *arg1, u8 arg2)
{
asm(".syntax unified\n\
@@ -1034,13 +1032,13 @@ static void sub_8072924(struct Sprite *sprite)
sprite->pos2.y = gSprites[otherSpriteId].pos2.y;
}
-void SetBattleBarStruct(u8 bank, u8 healthboxSpriteId, s32 maxVal, s32 currVal, s32 receivedValue)
+void SetBattleBarStruct(u8 battlerId, u8 healthboxSpriteId, s32 maxVal, s32 currVal, s32 receivedValue)
{
- gBattleSpritesDataPtr->battleBars[bank].healthboxSpriteId = healthboxSpriteId;
- gBattleSpritesDataPtr->battleBars[bank].maxValue = maxVal;
- gBattleSpritesDataPtr->battleBars[bank].currentValue = currVal;
- gBattleSpritesDataPtr->battleBars[bank].receivedValue = receivedValue;
- gBattleSpritesDataPtr->battleBars[bank].field_10 = -32768;
+ gBattleSpritesDataPtr->battleBars[battlerId].healthboxSpriteId = healthboxSpriteId;
+ gBattleSpritesDataPtr->battleBars[battlerId].maxValue = maxVal;
+ gBattleSpritesDataPtr->battleBars[battlerId].currentValue = currVal;
+ gBattleSpritesDataPtr->battleBars[battlerId].receivedValue = receivedValue;
+ gBattleSpritesDataPtr->battleBars[battlerId].field_10 = -32768;
}
void SetHealthboxSpriteInvisible(u8 healthboxSpriteId)
@@ -1281,12 +1279,12 @@ static void UpdateHpTextInHealthboxInDoubles(u8 healthboxSpriteId, s16 value, u8
}
else
{
- u8 bank;
+ u8 battlerId;
memcpy(text, sUnknown_0832C3D8, sizeof(sUnknown_0832C3D8));
- bank = gSprites[healthboxSpriteId].data[6];
+ battlerId = gSprites[healthboxSpriteId].data[6];
- if (gBattleSpritesDataPtr->battlerData[bank].hpNumbersNoBars) // don't print text if only bars are visible
+ if (gBattleSpritesDataPtr->battlerData[battlerId].hpNumbersNoBars) // don't print text if only bars are visible
{
u8 var = 4;
u8 r7;
@@ -1327,7 +1325,7 @@ static void UpdateHpTextInHealthboxInDoubles(u8 healthboxSpriteId, s16 value, u8
}
else
{
- if (GetBattlerSide(bank) == B_SIDE_PLAYER) // impossible to reach part, because the bank is from the opponent's side
+ if (GetBattlerSide(battlerId) == B_SIDE_PLAYER) // impossible to reach part, because the battlerId is from the opponent's side
{
CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_116),
(void*)(OBJ_VRAM0) + ((gSprites[healthboxSpriteId].oam.tileNum + 52) * 32),
@@ -1469,7 +1467,7 @@ void SwapHpBarsWithHpText(void)
}
}
-u8 CreatePartyStatusSummarySprites(u8 bank, struct HpAndStatus *partyInfo, u8 arg2, bool8 isBattleStart)
+u8 CreatePartyStatusSummarySprites(u8 battlerId, struct HpAndStatus *partyInfo, u8 arg2, bool8 isBattleStart)
{
bool8 isOpponent;
s16 bar_X, bar_Y, bar_pos2_X, bar_data0;
@@ -1478,9 +1476,9 @@ u8 CreatePartyStatusSummarySprites(u8 bank, struct HpAndStatus *partyInfo, u8 ar
u8 ballIconSpritesIds[6];
u8 taskId;
- if (!arg2 || GetBattlerPosition(bank) != B_POSITION_OPPONENT_RIGHT)
+ if (!arg2 || GetBattlerPosition(battlerId) != B_POSITION_OPPONENT_RIGHT)
{
- if (GetBattlerSide(bank) == B_SIDE_PLAYER)
+ if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
{
isOpponent = FALSE;
bar_X = 136, bar_Y = 96;
@@ -1559,7 +1557,7 @@ u8 CreatePartyStatusSummarySprites(u8 bank, struct HpAndStatus *partyInfo, u8 ar
gSprites[ballIconSpritesIds[i]].data[2] = isOpponent;
}
- if (GetBattlerSide(bank) == B_SIDE_PLAYER)
+ if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
{
if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
{
@@ -1658,7 +1656,7 @@ u8 CreatePartyStatusSummarySprites(u8 bank, struct HpAndStatus *partyInfo, u8 ar
}
taskId = CreateTask(TaskDummy, 5);
- gTasks[taskId].data[0] = bank;
+ gTasks[taskId].data[0] = battlerId;
gTasks[taskId].data[1] = barSpriteId;
for (i = 0; i < 6; i++)
@@ -1680,12 +1678,12 @@ void sub_8073C30(u8 taskId)
u8 sp[6];
u8 r7;
u8 r10;
- u8 bank;
+ u8 battlerId;
s32 i;
r7 = gTasks[taskId].data[10];
r10 = gTasks[taskId].data[1];
- bank = gTasks[taskId].data[0];
+ battlerId = gTasks[taskId].data[0];
for (i = 0; i < 6; i++)
sp[i] = gTasks[taskId].data[3 + i];
@@ -1704,7 +1702,7 @@ void sub_8073C30(u8 taskId)
{
for (i = 0; i < 6; i++)
{
- if (GetBattlerSide(bank) != B_SIDE_PLAYER)
+ if (GetBattlerSide(battlerId) != B_SIDE_PLAYER)
{
gSprites[sp[5 - i]].data[1] = 7 * i;
gSprites[sp[5 - i]].data[3] = 0;
@@ -1752,7 +1750,7 @@ static void sub_8073E64(u8 taskId)
u8 sp[6];
s32 i;
- u8 bank = gTasks[taskId].data[0];
+ u8 battlerId = gTasks[taskId].data[0];
gTasks[taskId].data[15]--;
if (gTasks[taskId].data[15] == -1)
{
@@ -1780,7 +1778,7 @@ static void sub_8073E64(u8 taskId)
}
else if (gTasks[taskId].data[15] == -3)
{
- gBattleSpritesDataPtr->healthBoxesData[bank].flag_x1 = 0;
+ gBattleSpritesDataPtr->healthBoxesData[battlerId].flag_x1 = 0;
SetGpuReg(REG_OFFSET_BLDCNT, 0);
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
DestroyTask(taskId);
@@ -1792,7 +1790,7 @@ static void sub_8073F98(u8 taskId)
u8 sp[6];
s32 i;
- u8 bank = gTasks[taskId].data[0];
+ u8 battlerId = gTasks[taskId].data[0];
gTasks[taskId].data[15]--;
if (gTasks[taskId].data[15] >= 0)
{
@@ -1813,7 +1811,7 @@ static void sub_8073F98(u8 taskId)
}
else if (gTasks[taskId].data[15] == -3)
{
- gBattleSpritesDataPtr->healthBoxesData[bank].flag_x1 = 0;
+ gBattleSpritesDataPtr->healthBoxesData[battlerId].flag_x1 = 0;
SetGpuReg(REG_OFFSET_BLDCNT, 0);
SetGpuReg(REG_OFFSET_BLDALPHA, 0);
DestroyTask(taskId);
@@ -1976,17 +1974,17 @@ static void UpdateNickInHealthbox(u8 healthboxSpriteId, struct Pokemon *mon)
static void TryAddPokeballIconToHealthbox(u8 healthboxSpriteId, bool8 noStatus)
{
- u8 bank, healthboxSpriteId_2;
+ u8 battlerId, healthboxSpriteId_2;
if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL)
return;
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
return;
- bank = gSprites[healthboxSpriteId].data[6];
- if (GetBattlerSide(bank) == B_SIDE_PLAYER)
+ battlerId = gSprites[healthboxSpriteId].data[6];
+ if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
return;
- if (!GetSetPokedexFlag(SpeciesToNationalPokedexNum(GetMonData(&gEnemyParty[gBattlerPartyIndexes[bank]], MON_DATA_SPECIES)), FLAG_GET_CAUGHT))
+ if (!GetSetPokedexFlag(SpeciesToNationalPokedexNum(GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_SPECIES)), FLAG_GET_CAUGHT))
return;
healthboxSpriteId_2 = gSprites[healthboxSpriteId].data[5];
@@ -2000,17 +1998,17 @@ static void TryAddPokeballIconToHealthbox(u8 healthboxSpriteId, bool8 noStatus)
static void UpdateStatusIconInHealthbox(u8 healthboxSpriteId)
{
s32 i;
- u8 bank, healthboxSpriteId_2;
+ u8 battlerId, healthboxSpriteId_2;
u32 status, pltAdder;
const u8 *statusGfxPtr;
s16 tileNumAdder;
u8 statusPalId;
- bank = gSprites[healthboxSpriteId].data[6];
+ battlerId = gSprites[healthboxSpriteId].data[6];
healthboxSpriteId_2 = gSprites[healthboxSpriteId].data[5];
- if (GetBattlerSide(bank) == B_SIDE_PLAYER)
+ if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
{
- status = GetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_STATUS);
+ status = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_STATUS);
if (!IsDoubleBattle())
tileNumAdder = 0x1A;
else
@@ -2018,33 +2016,33 @@ static void UpdateStatusIconInHealthbox(u8 healthboxSpriteId)
}
else
{
- status = GetMonData(&gEnemyParty[gBattlerPartyIndexes[bank]], MON_DATA_STATUS);
+ status = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_STATUS);
tileNumAdder = 0x11;
}
if (status & STATUS1_SLEEP)
{
- statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBankId(HEALTHBOX_GFX_STATUS_SLP_BANK0, bank));
+ statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBankId(HEALTHBOX_GFX_STATUS_SLP_BANK0, battlerId));
statusPalId = PAL_STATUS_SLP;
}
else if (status & STATUS1_PSN_ANY)
{
- statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBankId(HEALTHBOX_GFX_STATUS_PSN_BANK0, bank));
+ statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBankId(HEALTHBOX_GFX_STATUS_PSN_BANK0, battlerId));
statusPalId = PAL_STATUS_PSN;
}
else if (status & STATUS1_BURN)
{
- statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBankId(HEALTHBOX_GFX_STATUS_BRN_BANK0, bank));
+ statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBankId(HEALTHBOX_GFX_STATUS_BRN_BANK0, battlerId));
statusPalId = PAL_STATUS_BRN;
}
else if (status & STATUS1_FREEZE)
{
- statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBankId(HEALTHBOX_GFX_STATUS_FRZ_BANK0, bank));
+ statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBankId(HEALTHBOX_GFX_STATUS_FRZ_BANK0, battlerId));
statusPalId = PAL_STATUS_FRZ;
}
else if (status & STATUS1_PARALYSIS)
{
- statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBankId(HEALTHBOX_GFX_STATUS_PRZ_BANK0, bank));
+ statusGfxPtr = GetHealthboxElementGfxPtr(GetStatusIconForBankId(HEALTHBOX_GFX_STATUS_PRZ_BANK0, battlerId));
statusPalId = PAL_STATUS_PAR;
}
else
@@ -2054,7 +2052,7 @@ static void UpdateStatusIconInHealthbox(u8 healthboxSpriteId)
for (i = 0; i < 3; i++)
CpuCopy32(statusGfxPtr, (void*)(OBJ_VRAM0 + (gSprites[healthboxSpriteId].oam.tileNum + tileNumAdder + i) * 32), 32);
- if (!gBattleSpritesDataPtr->battlerData[bank].hpNumbersNoBars)
+ if (!gBattleSpritesDataPtr->battlerData[battlerId].hpNumbersNoBars)
CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_1), (void *)(OBJ_VRAM0 + gSprites[healthboxSpriteId_2].oam.tileNum * 32), 64);
TryAddPokeballIconToHealthbox(healthboxSpriteId, TRUE);
@@ -2062,14 +2060,14 @@ static void UpdateStatusIconInHealthbox(u8 healthboxSpriteId)
}
pltAdder = gSprites[healthboxSpriteId].oam.paletteNum * 16;
- pltAdder += bank + 12;
+ pltAdder += battlerId + 12;
FillPalette(sStatusIconColors[statusPalId], pltAdder + 0x100, 2);
CpuCopy16(gPlttBufferUnfaded + 0x100 + pltAdder, (void*)(OBJ_PLTT + pltAdder * 2), 2);
CpuCopy32(statusGfxPtr, (void*)(OBJ_VRAM0 + (gSprites[healthboxSpriteId].oam.tileNum + tileNumAdder) * 32), 96);
- if (IsDoubleBattle() == TRUE || GetBattlerSide(bank) == B_SIDE_OPPONENT)
+ if (IsDoubleBattle() == TRUE || GetBattlerSide(battlerId) == B_SIDE_OPPONENT)
{
- if (!gBattleSpritesDataPtr->battlerData[bank].hpNumbersNoBars)
+ if (!gBattleSpritesDataPtr->battlerData[battlerId].hpNumbersNoBars)
{
CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_0), (void*)(OBJ_VRAM0 + gSprites[healthboxSpriteId_2].oam.tileNum * 32), 32);
CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_65), (void*)(OBJ_VRAM0 + (gSprites[healthboxSpriteId_2].oam.tileNum + 1) * 32), 32);
@@ -2078,58 +2076,58 @@ static void UpdateStatusIconInHealthbox(u8 healthboxSpriteId)
TryAddPokeballIconToHealthbox(healthboxSpriteId, FALSE);
}
-static u8 GetStatusIconForBankId(u8 statusElementId, u8 bank)
+static u8 GetStatusIconForBankId(u8 statusElementId, u8 battlerId)
{
u8 ret = statusElementId;
switch (statusElementId)
{
case HEALTHBOX_GFX_STATUS_PSN_BANK0:
- if (bank == 0)
+ if (battlerId == 0)
ret = HEALTHBOX_GFX_STATUS_PSN_BANK0;
- else if (bank == 1)
+ else if (battlerId == 1)
ret = HEALTHBOX_GFX_STATUS_PSN_BANK1;
- else if (bank == 2)
+ else if (battlerId == 2)
ret = HEALTHBOX_GFX_STATUS_PSN_BANK2;
else
ret = HEALTHBOX_GFX_STATUS_PSN_BANK3;
break;
case HEALTHBOX_GFX_STATUS_PRZ_BANK0:
- if (bank == 0)
+ if (battlerId == 0)
ret = HEALTHBOX_GFX_STATUS_PRZ_BANK0;
- else if (bank == 1)
+ else if (battlerId == 1)
ret = HEALTHBOX_GFX_STATUS_PRZ_BANK1;
- else if (bank == 2)
+ else if (battlerId == 2)
ret = HEALTHBOX_GFX_STATUS_PRZ_BANK2;
else
ret = HEALTHBOX_GFX_STATUS_PRZ_BANK3;
break;
case HEALTHBOX_GFX_STATUS_SLP_BANK0:
- if (bank == 0)
+ if (battlerId == 0)
ret = HEALTHBOX_GFX_STATUS_SLP_BANK0;
- else if (bank == 1)
+ else if (battlerId == 1)
ret = HEALTHBOX_GFX_STATUS_SLP_BANK1;
- else if (bank == 2)
+ else if (battlerId == 2)
ret = HEALTHBOX_GFX_STATUS_SLP_BANK2;
else
ret = HEALTHBOX_GFX_STATUS_SLP_BANK3;
break;
case HEALTHBOX_GFX_STATUS_FRZ_BANK0:
- if (bank == 0)
+ if (battlerId == 0)
ret = HEALTHBOX_GFX_STATUS_FRZ_BANK0;
- else if (bank == 1)
+ else if (battlerId == 1)
ret = HEALTHBOX_GFX_STATUS_FRZ_BANK1;
- else if (bank == 2)
+ else if (battlerId == 2)
ret = HEALTHBOX_GFX_STATUS_FRZ_BANK2;
else
ret = HEALTHBOX_GFX_STATUS_FRZ_BANK3;
break;
case HEALTHBOX_GFX_STATUS_BRN_BANK0:
- if (bank == 0)
+ if (battlerId == 0)
ret = HEALTHBOX_GFX_STATUS_BRN_BANK0;
- else if (bank == 1)
+ else if (battlerId == 1)
ret = HEALTHBOX_GFX_STATUS_BRN_BANK1;
- else if (bank == 2)
+ else if (battlerId == 2)
ret = HEALTHBOX_GFX_STATUS_BRN_BANK2;
else
ret = HEALTHBOX_GFX_STATUS_BRN_BANK3;
@@ -2170,10 +2168,10 @@ static void UpdateLeftNoOfBallsTextOnHealthbox(u8 healthboxSpriteId)
void UpdateHealthboxAttribute(u8 healthboxSpriteId, struct Pokemon *mon, u8 elementId)
{
s32 maxHp, currHp;
- u8 bank = gSprites[healthboxSpriteId].data[6];
+ u8 battlerId = gSprites[healthboxSpriteId].data[6];
if (elementId == HEALTHBOX_ALL && !IsDoubleBattle())
- GetBattlerSide(bank); // pointless function call
+ GetBattlerSide(battlerId); // pointless function call
if (GetBattlerSide(gSprites[healthboxSpriteId].data[6]) == B_SIDE_PLAYER)
{
@@ -2190,8 +2188,8 @@ void UpdateHealthboxAttribute(u8 healthboxSpriteId, struct Pokemon *mon, u8 elem
LoadBattleBarGfx(0);
maxHp = GetMonData(mon, MON_DATA_MAX_HP);
currHp = GetMonData(mon, MON_DATA_HP);
- SetBattleBarStruct(bank, healthboxSpriteId, maxHp, currHp, 0);
- sub_8074AA0(bank, healthboxSpriteId, HEALTH_BAR, 0);
+ SetBattleBarStruct(battlerId, healthboxSpriteId, maxHp, currHp, 0);
+ sub_8074AA0(battlerId, healthboxSpriteId, HEALTH_BAR, 0);
}
isDoubles = IsDoubleBattle();
if (!isDoubles && (elementId == HEALTHBOX_EXP_BAR || elementId == HEALTHBOX_ALL))
@@ -2208,8 +2206,8 @@ void UpdateHealthboxAttribute(u8 healthboxSpriteId, struct Pokemon *mon, u8 elem
currLevelExp = gExperienceTables[gBaseStats[species].growthRate][level];
currExpBarValue = exp - currLevelExp;
maxExpBarValue = gExperienceTables[gBaseStats[species].growthRate][level + 1] - currLevelExp;
- SetBattleBarStruct(bank, healthboxSpriteId, maxExpBarValue, currExpBarValue, isDoubles);
- sub_8074AA0(bank, healthboxSpriteId, EXP_BAR, 0);
+ SetBattleBarStruct(battlerId, healthboxSpriteId, maxExpBarValue, currExpBarValue, isDoubles);
+ sub_8074AA0(battlerId, healthboxSpriteId, EXP_BAR, 0);
}
if (elementId == HEALTHBOX_NICK || elementId == HEALTHBOX_ALL)
UpdateNickInHealthbox(healthboxSpriteId, mon);
@@ -2229,8 +2227,8 @@ void UpdateHealthboxAttribute(u8 healthboxSpriteId, struct Pokemon *mon, u8 elem
LoadBattleBarGfx(0);
maxHp = GetMonData(mon, MON_DATA_MAX_HP);
currHp = GetMonData(mon, MON_DATA_HP);
- SetBattleBarStruct(bank, healthboxSpriteId, maxHp, currHp, 0);
- sub_8074AA0(bank, healthboxSpriteId, HEALTH_BAR, 0);
+ SetBattleBarStruct(battlerId, healthboxSpriteId, maxHp, currHp, 0);
+ sub_8074AA0(battlerId, healthboxSpriteId, HEALTH_BAR, 0);
}
if (elementId == HEALTHBOX_NICK || elementId == HEALTHBOX_ALL)
UpdateNickInHealthbox(healthboxSpriteId, mon);
@@ -2239,44 +2237,44 @@ void UpdateHealthboxAttribute(u8 healthboxSpriteId, struct Pokemon *mon, u8 elem
}
}
-s32 sub_8074AA0(u8 bank, u8 healthboxSpriteId, u8 whichBar, u8 arg3)
+s32 sub_8074AA0(u8 battlerId, u8 healthboxSpriteId, u8 whichBar, u8 arg3)
{
s32 var;
if (whichBar == HEALTH_BAR) // health bar
{
- var = sub_8074DB8(gBattleSpritesDataPtr->battleBars[bank].maxValue,
- gBattleSpritesDataPtr->battleBars[bank].currentValue,
- gBattleSpritesDataPtr->battleBars[bank].receivedValue,
- &gBattleSpritesDataPtr->battleBars[bank].field_10,
+ var = sub_8074DB8(gBattleSpritesDataPtr->battleBars[battlerId].maxValue,
+ gBattleSpritesDataPtr->battleBars[battlerId].currentValue,
+ gBattleSpritesDataPtr->battleBars[battlerId].receivedValue,
+ &gBattleSpritesDataPtr->battleBars[battlerId].field_10,
6, 1);
}
else // exp bar
{
- u16 expFraction = GetScaledExpFraction(gBattleSpritesDataPtr->battleBars[bank].currentValue,
- gBattleSpritesDataPtr->battleBars[bank].receivedValue,
- gBattleSpritesDataPtr->battleBars[bank].maxValue, 8);
+ u16 expFraction = GetScaledExpFraction(gBattleSpritesDataPtr->battleBars[battlerId].currentValue,
+ gBattleSpritesDataPtr->battleBars[battlerId].receivedValue,
+ gBattleSpritesDataPtr->battleBars[battlerId].maxValue, 8);
if (expFraction == 0)
expFraction = 1;
- expFraction = abs(gBattleSpritesDataPtr->battleBars[bank].receivedValue / expFraction);
+ expFraction = abs(gBattleSpritesDataPtr->battleBars[battlerId].receivedValue / expFraction);
- var = sub_8074DB8(gBattleSpritesDataPtr->battleBars[bank].maxValue,
- gBattleSpritesDataPtr->battleBars[bank].currentValue,
- gBattleSpritesDataPtr->battleBars[bank].receivedValue,
- &gBattleSpritesDataPtr->battleBars[bank].field_10,
+ var = sub_8074DB8(gBattleSpritesDataPtr->battleBars[battlerId].maxValue,
+ gBattleSpritesDataPtr->battleBars[battlerId].currentValue,
+ gBattleSpritesDataPtr->battleBars[battlerId].receivedValue,
+ &gBattleSpritesDataPtr->battleBars[battlerId].field_10,
8, expFraction);
}
- if (whichBar == EXP_BAR || (whichBar == HEALTH_BAR && !gBattleSpritesDataPtr->battlerData[bank].hpNumbersNoBars))
- sub_8074B9C(bank, whichBar);
+ if (whichBar == EXP_BAR || (whichBar == HEALTH_BAR && !gBattleSpritesDataPtr->battlerData[battlerId].hpNumbersNoBars))
+ sub_8074B9C(battlerId, whichBar);
if (var == -1)
- gBattleSpritesDataPtr->battleBars[bank].field_10 = 0;
+ gBattleSpritesDataPtr->battleBars[battlerId].field_10 = 0;
return var;
}
-static void sub_8074B9C(u8 bank, u8 whichBar)
+static void sub_8074B9C(u8 battlerId, u8 whichBar)
{
u8 array[8];
u8 subRet, level;
@@ -2286,10 +2284,10 @@ static void sub_8074B9C(u8 bank, u8 whichBar)
switch (whichBar)
{
case HEALTH_BAR:
- subRet = sub_8074E8C(gBattleSpritesDataPtr->battleBars[bank].maxValue,
- gBattleSpritesDataPtr->battleBars[bank].currentValue,
- gBattleSpritesDataPtr->battleBars[bank].receivedValue,
- &gBattleSpritesDataPtr->battleBars[bank].field_10,
+ subRet = sub_8074E8C(gBattleSpritesDataPtr->battleBars[battlerId].maxValue,
+ gBattleSpritesDataPtr->battleBars[battlerId].currentValue,
+ gBattleSpritesDataPtr->battleBars[battlerId].receivedValue,
+ &gBattleSpritesDataPtr->battleBars[battlerId].field_10,
array, 6);
barElementId = 3;
if (subRet <= 0x18)
@@ -2300,7 +2298,7 @@ static void sub_8074B9C(u8 bank, u8 whichBar)
}
for (i = 0; i < 6; i++)
{
- u8 healthboxSpriteId_2 = gSprites[gBattleSpritesDataPtr->battleBars[bank].healthboxSpriteId].data[5];
+ u8 healthboxSpriteId_2 = gSprites[gBattleSpritesDataPtr->battleBars[battlerId].healthboxSpriteId].data[5];
if (i < 2)
CpuCopy32(GetHealthboxElementGfxPtr(barElementId) + array[i] * 32,
(void*)(OBJ_VRAM0 + (gSprites[healthboxSpriteId_2].oam.tileNum + 2 + i) * 32), 32);
@@ -2310,12 +2308,12 @@ static void sub_8074B9C(u8 bank, u8 whichBar)
}
break;
case EXP_BAR:
- sub_8074E8C(gBattleSpritesDataPtr->battleBars[bank].maxValue,
- gBattleSpritesDataPtr->battleBars[bank].currentValue,
- gBattleSpritesDataPtr->battleBars[bank].receivedValue,
- &gBattleSpritesDataPtr->battleBars[bank].field_10,
+ sub_8074E8C(gBattleSpritesDataPtr->battleBars[battlerId].maxValue,
+ gBattleSpritesDataPtr->battleBars[battlerId].currentValue,
+ gBattleSpritesDataPtr->battleBars[battlerId].receivedValue,
+ &gBattleSpritesDataPtr->battleBars[battlerId].field_10,
array, 8);
- level = GetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_LEVEL);
+ level = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_LEVEL);
if (level == MAX_MON_LEVEL)
{
for (i = 0; i < 8; i++)
@@ -2325,10 +2323,10 @@ static void sub_8074B9C(u8 bank, u8 whichBar)
{
if (i < 4)
CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_12) + array[i] * 32,
- (void*)(OBJ_VRAM0 + (gSprites[gBattleSpritesDataPtr->battleBars[bank].healthboxSpriteId].oam.tileNum + 0x24 + i) * 32), 32);
+ (void*)(OBJ_VRAM0 + (gSprites[gBattleSpritesDataPtr->battleBars[battlerId].healthboxSpriteId].oam.tileNum + 0x24 + i) * 32), 32);
else
CpuCopy32(GetHealthboxElementGfxPtr(HEALTHBOX_GFX_12) + array[i] * 32,
- (void*)(OBJ_VRAM0 + 0xB80 + (i + gSprites[gBattleSpritesDataPtr->battleBars[bank].healthboxSpriteId].oam.tileNum) * 32), 32);
+ (void*)(OBJ_VRAM0 + 0xB80 + (i + gSprites[gBattleSpritesDataPtr->battleBars[battlerId].healthboxSpriteId].oam.tileNum) * 32), 32);
}
break;
}
diff --git a/src/battle_main.c b/src/battle_main.c
index 3c4a61600..8649209c0 100644
--- a/src/battle_main.c
+++ b/src/battle_main.c
@@ -20,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"
@@ -50,7 +51,7 @@
#include "international_string_util.h"
#include "pokeball.h"
-struct UnknownPokemonStruct2
+struct UnknownPokemonStruct4
{
/*0x00*/ u16 species;
/*0x02*/ u16 heldItem;
@@ -80,12 +81,10 @@ extern struct MusicPlayerInfo gMPlayInfo_SE1;
extern struct MusicPlayerInfo gMPlayInfo_SE2;
extern u8 gUnknown_0203CF00[];
-extern const struct BattleMove gBattleMoves[];
extern const u16 gBattleTextboxPalette[]; // battle textbox palette
extern const struct BgTemplate gUnknown_0831AA08[];
extern const struct WindowTemplate * const gUnknown_0831ABA0[];
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[];
@@ -95,12 +94,8 @@ extern const struct ScanlineEffectParams gUnknown_0831AC70;
// strings
extern const u8 gText_LinkStandby3[];
-extern const u8 gText_RecordBattleToPass[];
-extern const u8 gText_BattleYesNoChoice[];
extern const u8 gText_BattleRecordCouldntBeSaved[];
-extern const u8 gText_BattleRecordedOnPass[];
extern const u8 gText_ShedinjaJapaneseName[];
-extern const u8 gText_EmptyString3[];
extern const u8 gText_Poison[];
extern const u8 gText_Sleep[];
extern const u8 gText_Paralysis[];
@@ -198,8 +193,8 @@ 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 UnknownPokemonStruct2 gUnknown_02022FF8[3] = {0}; // what is it used for?
-EWRAM_DATA struct UnknownPokemonStruct2* gUnknown_02023058 = NULL; // what is it used for?
+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};
@@ -301,6 +296,214 @@ u8 gNumberOfMovesToChoose;
u8 gUnknown_03005D7C[MAX_BATTLERS_COUNT];
// rom const data
+
+// format: attacking type, defending type, damage multiplier
+// the multiplier is a (decimal) fixed-point number:
+// 20 is ×2.0 TYPE_MUL_SUPER_EFFECTIVE
+// 10 is ×1.0 TYPE_MUL_NORMAL
+// 05 is ×0.5 TYPE_MUL_NOT_EFFECTIVE
+// 00 is ×0.0 TYPE_MUL_NO_EFFECT
+const u8 gTypeEffectiveness[336] =
+{
+ TYPE_NORMAL, TYPE_ROCK, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_NORMAL, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_FIRE, TYPE_FIRE, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_FIRE, TYPE_WATER, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_FIRE, TYPE_GRASS, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_FIRE, TYPE_ICE, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_FIRE, TYPE_BUG, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_FIRE, TYPE_ROCK, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_FIRE, TYPE_DRAGON, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_FIRE, TYPE_STEEL, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_WATER, TYPE_FIRE, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_WATER, TYPE_WATER, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_WATER, TYPE_GRASS, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_WATER, TYPE_GROUND, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_WATER, TYPE_ROCK, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_WATER, TYPE_DRAGON, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_ELECTRIC, TYPE_WATER, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_ELECTRIC, TYPE_ELECTRIC, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_ELECTRIC, TYPE_GRASS, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_ELECTRIC, TYPE_GROUND, TYPE_MUL_NO_EFFECT,
+ TYPE_ELECTRIC, TYPE_FLYING, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_ELECTRIC, TYPE_DRAGON, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_GRASS, TYPE_FIRE, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_GRASS, TYPE_WATER, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_GRASS, TYPE_GRASS, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_GRASS, TYPE_POISON, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_GRASS, TYPE_GROUND, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_GRASS, TYPE_FLYING, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_GRASS, TYPE_BUG, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_GRASS, TYPE_ROCK, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_GRASS, TYPE_DRAGON, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_GRASS, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_ICE, TYPE_WATER, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_ICE, TYPE_GRASS, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_ICE, TYPE_ICE, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_ICE, TYPE_GROUND, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_ICE, TYPE_FLYING, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_ICE, TYPE_DRAGON, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_ICE, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_ICE, TYPE_FIRE, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_FIGHTING, TYPE_NORMAL, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_FIGHTING, TYPE_ICE, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_FIGHTING, TYPE_POISON, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_FIGHTING, TYPE_FLYING, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_FIGHTING, TYPE_PSYCHIC, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_FIGHTING, TYPE_BUG, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_FIGHTING, TYPE_ROCK, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_FIGHTING, TYPE_DARK, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_FIGHTING, TYPE_STEEL, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_POISON, TYPE_GRASS, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_POISON, TYPE_POISON, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_POISON, TYPE_GROUND, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_POISON, TYPE_ROCK, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_POISON, TYPE_GHOST, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_POISON, TYPE_STEEL, TYPE_MUL_NO_EFFECT,
+ TYPE_GROUND, TYPE_FIRE, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_GROUND, TYPE_ELECTRIC, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_GROUND, TYPE_GRASS, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_GROUND, TYPE_POISON, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_GROUND, TYPE_FLYING, TYPE_MUL_NO_EFFECT,
+ TYPE_GROUND, TYPE_BUG, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_GROUND, TYPE_ROCK, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_GROUND, TYPE_STEEL, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_FLYING, TYPE_ELECTRIC, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_FLYING, TYPE_GRASS, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_FLYING, TYPE_FIGHTING, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_FLYING, TYPE_BUG, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_FLYING, TYPE_ROCK, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_FLYING, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_PSYCHIC, TYPE_FIGHTING, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_PSYCHIC, TYPE_POISON, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_PSYCHIC, TYPE_PSYCHIC, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_PSYCHIC, TYPE_DARK, TYPE_MUL_NO_EFFECT,
+ TYPE_PSYCHIC, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_BUG, TYPE_FIRE, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_BUG, TYPE_GRASS, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_BUG, TYPE_FIGHTING, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_BUG, TYPE_POISON, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_BUG, TYPE_FLYING, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_BUG, TYPE_PSYCHIC, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_BUG, TYPE_GHOST, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_BUG, TYPE_DARK, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_BUG, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_ROCK, TYPE_FIRE, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_ROCK, TYPE_ICE, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_ROCK, TYPE_FIGHTING, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_ROCK, TYPE_GROUND, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_ROCK, TYPE_FLYING, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_ROCK, TYPE_BUG, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_ROCK, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_GHOST, TYPE_NORMAL, TYPE_MUL_NO_EFFECT,
+ TYPE_GHOST, TYPE_PSYCHIC, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_GHOST, TYPE_DARK, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_GHOST, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_GHOST, TYPE_GHOST, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_DRAGON, TYPE_DRAGON, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_DRAGON, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_DARK, TYPE_FIGHTING, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_DARK, TYPE_PSYCHIC, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_DARK, TYPE_GHOST, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_DARK, TYPE_DARK, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_DARK, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_STEEL, TYPE_FIRE, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_STEEL, TYPE_WATER, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_STEEL, TYPE_ELECTRIC, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_STEEL, TYPE_ICE, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_STEEL, TYPE_ROCK, TYPE_MUL_SUPER_EFFECTIVE,
+ TYPE_STEEL, TYPE_STEEL, TYPE_MUL_NOT_EFFECTIVE,
+ TYPE_FORESIGHT, TYPE_FORESIGHT, TYPE_MUL_NO_EFFECT,
+ TYPE_NORMAL, TYPE_GHOST, TYPE_MUL_NO_EFFECT,
+ TYPE_FIGHTING, TYPE_GHOST, TYPE_MUL_NO_EFFECT,
+ TYPE_ENDTABLE, TYPE_ENDTABLE, TYPE_MUL_NO_EFFECT
+};
+
+const u8 gTypeNames[][TYPE_NAME_LENGTH + 1] =
+{
+ _("NORMAL"),
+ _("FIGHT"),
+ _("FLYING"),
+ _("POISON"),
+ _("GROUND"),
+ _("ROCK"),
+ _("BUG"),
+ _("GHOST"),
+ _("STEEL"),
+ _("???"),
+ _("FIRE"),
+ _("WATER"),
+ _("GRASS"),
+ _("ELECTR"),
+ _("PSYCHC"),
+ _("ICE"),
+ _("DRAGON"),
+ _("DARK"),
+};
+
+// This is a factor in how much money you get for beating a trainer.
+const struct TrainerMoney gTrainerMoneyTable[] =
+{
+ {TRAINER_CLASS_TEAM_AQUA, 5},
+ {TRAINER_CLASS_AQUA_ADMIN, 10},
+ {TRAINER_CLASS_AQUA_LEADER, 20},
+ {TRAINER_CLASS_AROMA_LADY, 10},
+ {TRAINER_CLASS_RUIN_MANIAC, 15},
+ {TRAINER_CLASS_INTERVIEWER, 12},
+ {TRAINER_CLASS_TUBER_1, 1},
+ {TRAINER_CLASS_TUBER_2, 1},
+ {TRAINER_CLASS_SIS_AND_BRO, 3},
+ {TRAINER_CLASS_COOLTRAINER_1, 12},
+ {TRAINER_CLASS_HEX_MANIAC, 6},
+ {TRAINER_CLASS_LADY, 50},
+ {TRAINER_CLASS_BEAUTY, 20},
+ {TRAINER_CLASS_RICH_BOY, 50},
+ {TRAINER_CLASS_POKEMANIAC, 15},
+ {TRAINER_CLASS_SWIMMER_M, 2},
+ {TRAINER_CLASS_BLACK_BELT, 8},
+ {TRAINER_CLASS_GUITARIST, 8},
+ {TRAINER_CLASS_KINDLER, 8},
+ {TRAINER_CLASS_CAMPER, 4},
+ {TRAINER_CLASS_OLD_COUPLE, 10},
+ {TRAINER_CLASS_BUG_MANIAC, 15},
+ {TRAINER_CLASS_PSYCHIC, 6},
+ {TRAINER_CLASS_GENTLEMAN, 20},
+ {TRAINER_CLASS_ELITE_FOUR, 25},
+ {TRAINER_CLASS_LEADER, 25},
+ {TRAINER_CLASS_SCHOOL_KID, 5},
+ {TRAINER_CLASS_SR_AND_JR, 4},
+ {TRAINER_CLASS_POKEFAN, 20},
+ {TRAINER_CLASS_EXPERT, 10},
+ {TRAINER_CLASS_YOUNGSTER, 4},
+ {TRAINER_CLASS_CHAMPION, 50},
+ {TRAINER_CLASS_FISHERMAN, 10},
+ {TRAINER_CLASS_TRIATHLETE, 10},
+ {TRAINER_CLASS_DRAGON_TAMER, 12},
+ {TRAINER_CLASS_BIRD_KEEPER, 8},
+ {TRAINER_CLASS_NINJA_BOY, 3},
+ {TRAINER_CLASS_BATTLE_GIRL, 6},
+ {TRAINER_CLASS_PARASOL_LADY, 10},
+ {TRAINER_CLASS_SWIMMER_F, 2},
+ {TRAINER_CLASS_PICNICKER, 4},
+ {TRAINER_CLASS_TWINS, 3},
+ {TRAINER_CLASS_SAILOR, 8},
+ {TRAINER_CLASS_COLLECTOR, 15},
+ {TRAINER_CLASS_PKMN_TRAINER_3, 15},
+ {TRAINER_CLASS_PKMN_BREEDER, 10},
+ {TRAINER_CLASS_PKMN_RANGER, 12},
+ {TRAINER_CLASS_TEAM_MAGMA, 5},
+ {TRAINER_CLASS_MAGMA_ADMIN, 10},
+ {TRAINER_CLASS_MAGMA_LEADER, 20},
+ {TRAINER_CLASS_LASS, 4},
+ {TRAINER_CLASS_BUG_CATCHER, 4},
+ {TRAINER_CLASS_HIKER, 10},
+ {TRAINER_CLASS_YOUNG_COUPLE, 8},
+ {TRAINER_CLASS_WINSTRATE, 10},
+ {0xFF, 5},
+};
+
+#include "data/text/abilities.h"
+
static void (* const sTurnActionsFuncsTable[])(void) =
{
HandleAction_UseMove, // B_ACTION_USE_MOVE
@@ -738,7 +941,7 @@ static void CB2_HandleStartBattle(void)
sub_805EF14();
gBattleCommunication[MULTIUSE_STATE] = 1;
}
- if (gLinkVSyncDisabled)
+ if (gWirelessCommType)
sub_800E0E8();
break;
case 1:
@@ -762,8 +965,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
@@ -790,7 +993,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;
@@ -933,7 +1136,7 @@ static void CB2_HandleStartMultiPartnerBattle(void)
sub_805EF14();
gBattleCommunication[MULTIUSE_STATE] = 1;
}
- if (gLinkVSyncDisabled)
+ if (gWirelessCommType)
sub_800E0E8();
// fall through
case 1:
@@ -964,8 +1167,8 @@ static void CB2_HandleStartMultiPartnerBattle(void)
gBattleCommunication[MULTIUSE_STATE] = 2;
}
- if (gLinkVSyncDisabled)
- sub_800DFB4(0, 0);
+ if (gWirelessCommType)
+ CreateWirelessStatusIndicatorSprite(0, 0);
}
}
else
@@ -1202,9 +1405,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;
@@ -1222,12 +1425,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]++;
@@ -1241,14 +1444,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())
{
@@ -1286,7 +1489,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;
@@ -1333,7 +1536,7 @@ static void CB2_HandleStartMultiBattle(void)
sub_805EF14();
gBattleCommunication[MULTIUSE_STATE] = 1;
}
- if (gLinkVSyncDisabled)
+ if (gWirelessCommType)
sub_800E0E8();
break;
case 1:
@@ -1351,8 +1554,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
@@ -1369,7 +1572,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;
@@ -1627,7 +1830,7 @@ static void FreeRestoreBattleData(void)
gScanlineEffect.state = 3;
gMain.inBattle = 0;
ZeroEnemyPartyMons();
- m4aSongNumStop(0x5A);
+ m4aSongNumStop(SE_HINSI);
FreeMonSpritesGfx();
FreeBattleSpritesData();
FreeBattleResources();
@@ -2136,12 +2339,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);
@@ -2320,13 +2523,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)
@@ -3387,9 +3590,8 @@ static void BattleIntroOpponent1SendsOutMonAnimation(void)
gBattleMainFunc = BattleIntroRecordMonsToDex;
}
-
#else
-__attribute__((naked))
+NAKED
static void BattleIntroOpponent1SendsOutMonAnimation(void)
{
asm(".syntax unified\n\
@@ -3474,7 +3676,6 @@ _0803B2F2:\n\
.pool\n\
.syntax divided");
}
-
#endif // NONMATCHING
static void BattleIntroRecordMonsToDex(void)
@@ -3835,8 +4036,7 @@ u8 IsRunningFromBattleImpossible(void)
}
if (side != GetBattlerSide(i)
&& gBattleMons[gActiveBattler].ability != ABILITY_LEVITATE
- && gBattleMons[gActiveBattler].type1 != TYPE_FLYING
- && gBattleMons[gActiveBattler].type2 != TYPE_FLYING
+ && !IS_BATTLER_OF_TYPE(gActiveBattler, TYPE_FLYING)
&& gBattleMons[i].ability == ABILITY_ARENA_TRAP)
{
gBattleScripting.battler = i;
@@ -3846,7 +4046,7 @@ u8 IsRunningFromBattleImpossible(void)
}
}
i = AbilityBattleEffects(ABILITYEFFECT_CHECK_FIELD_EXCEPT_BANK, gActiveBattler, ABILITY_MAGNET_PULL, 0, 0);
- if (i != 0 && (gBattleMons[gActiveBattler].type1 == TYPE_STEEL || gBattleMons[gActiveBattler].type2 == TYPE_STEEL))
+ if (i != 0 && IS_BATTLER_OF_TYPE(gActiveBattler, TYPE_STEEL))
{
gBattleScripting.battler = i - 1;
gLastUsedAbility = gBattleMons[i - 1].ability;
@@ -4033,12 +4233,10 @@ static void HandleTurnActionSelectionState(void)
}
else if ((i = AbilityBattleEffects(ABILITYEFFECT_CHECK_OTHER_SIDE, gActiveBattler, ABILITY_SHADOW_TAG, 0, 0))
|| ((i = AbilityBattleEffects(ABILITYEFFECT_CHECK_OTHER_SIDE, gActiveBattler, ABILITY_ARENA_TRAP, 0, 0))
- && gBattleMons[gActiveBattler].type1 != TYPE_FLYING
- && gBattleMons[gActiveBattler].type2 != TYPE_FLYING
+ && !IS_BATTLER_OF_TYPE(gActiveBattler, TYPE_FLYING)
&& gBattleMons[gActiveBattler].ability != ABILITY_LEVITATE)
|| ((i = AbilityBattleEffects(ABILITYEFFECT_CHECK_FIELD_EXCEPT_BANK, gActiveBattler, ABILITY_MAGNET_PULL, 0, 0))
- && (gBattleMons[gActiveBattler].type1 == TYPE_STEEL
- || gBattleMons[gActiveBattler].type2 == TYPE_STEEL)))
+ && IS_BATTLER_OF_TYPE(gActiveBattler, TYPE_STEEL)))
{
BtlController_EmitChoosePokemon(0, ((i - 1) << 4) | 4, 6, gLastUsedAbility, gBattleStruct->field_60[gActiveBattler]);
}
@@ -5026,7 +5224,7 @@ static void ReturnFromBattleToOverworld(void)
SetRoamerInactive();
}
- m4aSongNumStop(0x5A);
+ m4aSongNumStop(SE_HINSI);
SetMainCallback2(gMain.savedCallback);
}
@@ -5133,7 +5331,7 @@ static void HandleAction_UseMove(void)
else if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
&& gSideTimers[side].followmeTimer == 0
&& (gBattleMoves[gCurrentMove].power != 0
- || gBattleMoves[gCurrentMove].target != MOVE_TARGET_x10)
+ || gBattleMoves[gCurrentMove].target != MOVE_TARGET_USER)
&& gBattleMons[*(gBattleStruct->moveTarget + gBattlerAttacker)].ability != ABILITY_LIGHTNING_ROD
&& gBattleMoves[gCurrentMove].type == TYPE_ELECTRIC)
{
diff --git a/src/battle_message.c b/src/battle_message.c
index 2b9783f1a..1f338db92 100644
--- a/src/battle_message.c
+++ b/src/battle_message.c
@@ -22,9 +22,7 @@ extern u8 gUnknown_0203C7B4;
extern struct StringInfoBattle *gStringInfo;
extern const u8 gMoveNames[LAST_MOVE_INDEX + 1][13];
-extern const u8 gAbilityNames[][13];
extern const u8 gTrainerClassNames[][13];
-extern const u8 gTypeNames[][7];
extern const u16 gUnknown_08D85620[];
// strings
@@ -59,832 +57,832 @@ EWRAM_DATA u8 gBattleTextBuff3[TEXT_BUFF_ARRAY_COUNT] = {0};
// const rom data
// todo: make some of those names less vague: attacker/target vs pkmn, etc.
-const u8 gText_Trainer1LoseText[] = _("{B_TRAINER1_LOSE_TEXT}");
-const u8 gText_PkmnGainedEXP[] = _("{B_BUFF1} gained{B_BUFF2}\n{B_BUFF3} EXP. Points!\p");
-const u8 gText_EmptyString4[] = _("");
-const u8 gText_ABoosted[] = _(" a boosted");
-const u8 gText_PkmnGrewToLv[] = _("{B_BUFF1} grew to\nLV. {B_BUFF2}!{UNKNOWN_A}\p");
-const u8 gText_PkmnLearnedMove[] = _("{B_BUFF1} learned\n{B_BUFF2}!{UNKNOWN_A}\p");
-const u8 gText_TryToLearnMove1[] = _("{B_BUFF1} is trying to\nlearn {B_BUFF2}.\p");
-const u8 gText_TryToLearnMove2[] = _("But, {B_BUFF1} can’t learn\nmore than four moves.\p");
-const u8 gText_TryToLearnMove3[] = _("Delete a move to make\nroom for {B_BUFF2}?");
-const u8 gText_PkmnForgotMove[] = _("{B_BUFF1} forgot\n{B_BUFF2}.\p");
-const u8 gText_StopLearningMove[] = _("{PAUSE 32}Stop learning\n{B_BUFF2}?");
-const u8 gText_DidNotLearnMove[] = _("{B_BUFF1} did not learn\n{B_BUFF2}.\p");
-const u8 gText_UseNextPkmn[] = _("Use next POKéMON?");
-const u8 gText_AttackMissed[] = _("{B_ATK_NAME_WITH_PREFIX}’s\nattack missed!");
-const u8 gText_PkmnProtectedItself[] = _("{B_DEF_NAME_WITH_PREFIX}\nprotected itself!");
-const u8 gText_AvoidedDamage[] = _("{B_DEF_NAME_WITH_PREFIX} avoided\ndamage with {B_DEF_ABILITY}!");
-const u8 gText_PkmnMakesGroundMiss[] = _("{B_DEF_NAME_WITH_PREFIX} makes GROUND\nmoves miss with {B_DEF_ABILITY}!");
-const u8 gText_PkmnAvoidedAttack[] = _("{B_DEF_NAME_WITH_PREFIX} avoided\nthe attack!");
-const u8 gText_ItDoesntAffect[] = _("It doesn’t affect\n{B_DEF_NAME_WITH_PREFIX}…");
-const u8 gText_AttackerFainted[] = _("{B_ATK_NAME_WITH_PREFIX}\nfainted!\p");
-const u8 gText_TargetFainted[] = _("{B_DEF_NAME_WITH_PREFIX}\nfainted!\p");
-const u8 gText_PlayerGotMoney[] = _("{B_PLAYER_NAME} got ¥{B_BUFF1}\nfor winning!\p");
-const u8 gText_PlayerWhiteout[] = _("{B_PLAYER_NAME} is out of\nusable POKéMON!\p");
-const u8 gText_PlayerWhiteout2[] = _("{B_PLAYER_NAME} whited out!{PAUSE_UNTIL_PRESS}");
-const u8 gText_PreventsEscape[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} prevents\nescape with {B_SCR_ACTIVE_ABILITY}!\p");
-const u8 gText_CantEscape2[] = _("Can’t escape!\p");
-const u8 gText_AttackerCantEscape[] = _("{B_ATK_NAME_WITH_PREFIX} can’t escape!");
-const u8 gText_HitXTimes[] = _("Hit {B_BUFF1} time(s)!");
-const u8 gText_PkmnFellAsleep[] = _("{B_EFF_NAME_WITH_PREFIX}\nfell asleep!");
-const u8 gText_PkmnMadeSleep[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nmade {B_EFF_NAME_WITH_PREFIX} sleep!");
-const u8 gText_PkmnAlreadyAsleep[] = _("{B_DEF_NAME_WITH_PREFIX} is\nalready asleep!");
-const u8 gText_PkmnAlreadyAsleep2[] = _("{B_ATK_NAME_WITH_PREFIX} is\nalready asleep!");
-const u8 gText_PkmnWasntAffected[] = _("{B_DEF_NAME_WITH_PREFIX}\nwasn’t affected!");
-const u8 gText_PkmnWasPoisoned[] = _("{B_EFF_NAME_WITH_PREFIX}\nwas poisoned!");
-const u8 gText_PkmnPoisonedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\npoisoned {B_EFF_NAME_WITH_PREFIX}!");
-const u8 gText_PkmnHurtByPoison[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt\nby poison!");
-const u8 gText_PkmnAlreadyPoisoned[] = _("{B_DEF_NAME_WITH_PREFIX} is already\npoisoned.");
-const u8 gText_PkmnBadlyPoisoned[] = _("{B_EFF_NAME_WITH_PREFIX} is badly\npoisoned!");
-const u8 gText_PkmnEnergyDrained[] = _("{B_DEF_NAME_WITH_PREFIX} had its\nenergy drained!");
-const u8 gText_PkmnWasBurned[] = _("{B_EFF_NAME_WITH_PREFIX} was burned!");
-const u8 gText_PkmnBurnedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nburned {B_EFF_NAME_WITH_PREFIX}!");
-const u8 gText_PkmnHurtByBurn[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt\nby its burn!");
-const u8 gText_PkmnAlreadyHasBurn[] = _("{B_DEF_NAME_WITH_PREFIX} already\nhas a burn.");
-const u8 gText_PkmnWasFrozen[] = _("{B_EFF_NAME_WITH_PREFIX} was\nfrozen solid!");
-const u8 gText_PkmnFrozenBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nfroze {B_EFF_NAME_WITH_PREFIX} solid!");
-const u8 gText_PkmnIsFrozen[] = _("{B_ATK_NAME_WITH_PREFIX} is\nfrozen solid!");
-const u8 gText_PkmnWasDefrosted[] = _("{B_DEF_NAME_WITH_PREFIX} was\ndefrosted!");
-const u8 gText_PkmnWasDefrosted2[] = _("{B_ATK_NAME_WITH_PREFIX} was\ndefrosted!");
-const u8 gText_PkmnWasDefrostedBy[] = _("{B_ATK_NAME_WITH_PREFIX} was\ndefrosted by {B_CURRENT_MOVE}!");
-const u8 gText_PkmnWasParalyzed[] = _("{B_EFF_NAME_WITH_PREFIX} is paralyzed!\nIt may be unable to move!");
-const u8 gText_PkmnWasParalyzedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nparalyzed {B_EFF_NAME_WITH_PREFIX}!\lIt may be unable to move!");
-const u8 gText_PkmnIsParalyzed[] = _("{B_ATK_NAME_WITH_PREFIX} is paralyzed!\nIt can’t move!");
-const u8 gText_PkmnIsAlreadyParalyzed[] = _("{B_DEF_NAME_WITH_PREFIX} is\nalready paralyzed!");
-const u8 gText_PkmnHealedParalysis[] = _("{B_DEF_NAME_WITH_PREFIX} was\nhealed of paralysis!");
-const u8 gText_PkmnDreamEaten[] = _("{B_DEF_NAME_WITH_PREFIX}’s\ndream was eaten!");
-const u8 gText_StatsWontIncrease[] = _("{B_ATK_NAME_WITH_PREFIX}’s {B_BUFF1}\nwon’t go higher!");
-const u8 gText_StatsWontDecrease[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_BUFF1}\nwon’t go lower!");
-const u8 gText_TeamStoppedWorking[] = _("Your team’s {B_BUFF1}\nstopped working!");
-const u8 gText_FoeStoppedWorking[] = _("The foe’s {B_BUFF1}\nstopped working!");
-const u8 gText_PkmnIsConfused[] = _("{B_ATK_NAME_WITH_PREFIX} is\nconfused!");
-const u8 gText_PkmnHealedConfusion[] = _("{B_ATK_NAME_WITH_PREFIX} snapped\nout of confusion!");
-const u8 gText_PkmnWasConfused[] = _("{B_EFF_NAME_WITH_PREFIX} became\nconfused!");
-const u8 gText_PkmnAlreadyConfused[] = _("{B_DEF_NAME_WITH_PREFIX} is\nalready confused!");
-const u8 gText_PkmnFellInLove[] = _("{B_DEF_NAME_WITH_PREFIX}\nfell in love!");
-const u8 gText_PkmnInLove[] = _("{B_ATK_NAME_WITH_PREFIX} is in love\nwith {B_SCR_ACTIVE_NAME_WITH_PREFIX}!");
-const u8 gText_PkmnImmobilizedByLove[] = _("{B_ATK_NAME_WITH_PREFIX} is\nimmobilized by love!");
-const u8 gText_PkmnBlownAway[] = _("{B_DEF_NAME_WITH_PREFIX} was\nblown away!");
-const u8 gText_PkmnChangedType[] = _("{B_ATK_NAME_WITH_PREFIX} transformed\ninto the {B_BUFF1} type!");
-const u8 gText_PkmnFlinched[] = _("{B_ATK_NAME_WITH_PREFIX} flinched!");
-const u8 gText_PkmnRegainedHealth[] = _("{B_DEF_NAME_WITH_PREFIX} regained\nhealth!");
-const u8 gText_PkmnHPFull[] = _("{B_DEF_NAME_WITH_PREFIX}’s\nHP is full!");
-const u8 gText_PkmnRaisedSpDef[] = _("{B_ATK_PREFIX2}’s {B_CURRENT_MOVE}\nraised SP. DEF!");
-const u8 gText_PkmnRaisedSpDefALittle[] = _("{B_ATK_PREFIX2}’s {B_CURRENT_MOVE}\nraised SP. DEF a little!");
-const u8 gText_PkmnRaisedDef[] = _("{B_ATK_PREFIX2}’s {B_CURRENT_MOVE}\nraised DEFENSE!");
-const u8 gText_PkmnRaisedDefALittle[] = _("{B_ATK_PREFIX2}’s {B_CURRENT_MOVE}\nraised DEFENSE a little!");
-const u8 gText_PkmnCoveredByVeil[] = _("{B_ATK_PREFIX2}’s party is covered\nby a veil!");
-const u8 gText_PkmnUsedSafeguard[] = _("{B_DEF_NAME_WITH_PREFIX}’s party is protected\nby SAFEGUARD!");
-const u8 gText_PkmnSafeguardExpired[] = _("{B_ATK_PREFIX3}’s party is no longer\nprotected by SAFEGUARD!");
-const u8 gText_PkmnWentToSleep[] = _("{B_ATK_NAME_WITH_PREFIX} went\nto sleep!");
-const u8 gText_PkmnSleptHealthy[] = _("{B_ATK_NAME_WITH_PREFIX} slept and\nbecame healthy!");
-const u8 gText_PkmnWhippedWhirlwind[] = _("{B_ATK_NAME_WITH_PREFIX} whipped\nup a whirlwind!");
-const u8 gText_PkmnTookSunlight[] = _("{B_ATK_NAME_WITH_PREFIX} took\nin sunlight!");
-const u8 gText_PkmnLoweredHead[] = _("{B_ATK_NAME_WITH_PREFIX} lowered\nits head!");
-const u8 gText_PkmnIsGlowing[] = _("{B_ATK_NAME_WITH_PREFIX} is glowing!");
-const u8 gText_PkmnFlewHigh[] = _("{B_ATK_NAME_WITH_PREFIX} flew\nup high!");
-const u8 gText_PkmnDugHole[] = _("{B_ATK_NAME_WITH_PREFIX} dug a hole!");
-const u8 gText_PkmnHidUnderwater[] = _("{B_ATK_NAME_WITH_PREFIX} hid\nunderwater!");
-const u8 gText_PkmnSprangUp[] = _("{B_ATK_NAME_WITH_PREFIX} sprang up!");
-const u8 gText_PkmnSqueezedByBind[] = _("{B_DEF_NAME_WITH_PREFIX} was squeezed by\n{B_ATK_NAME_WITH_PREFIX}’s BIND!");
-const u8 gText_PkmnTrappedInVortex[] = _("{B_DEF_NAME_WITH_PREFIX} was trapped\nin the vortex!");
-const u8 gText_PkmnTrappedBySandTomb[] = _("{B_DEF_NAME_WITH_PREFIX} was trapped\nby SAND TOMB!");
-const u8 gText_PkmnWrappedBy[] = _("{B_DEF_NAME_WITH_PREFIX} was WRAPPED by\n{B_ATK_NAME_WITH_PREFIX}!");
-const u8 gText_PkmnClamped[] = _("{B_ATK_NAME_WITH_PREFIX} CLAMPED\n{B_DEF_NAME_WITH_PREFIX}!");
-const u8 gText_PkmnHurtBy[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt\nby {B_BUFF1}!");
-const u8 gText_PkmnFreedFrom[] = _("{B_ATK_NAME_WITH_PREFIX} was freed\nfrom {B_BUFF1}!");
-const u8 gText_PkmnCrashed[] = _("{B_ATK_NAME_WITH_PREFIX} kept going\nand crashed!");
+static const u8 sText_Trainer1LoseText[] = _("{B_TRAINER1_LOSE_TEXT}");
+static const u8 sText_PkmnGainedEXP[] = _("{B_BUFF1} gained{B_BUFF2}\n{B_BUFF3} EXP. Points!\p");
+static const u8 sText_EmptyString4[] = _("");
+static const u8 sText_ABoosted[] = _(" a boosted");
+static const u8 sText_PkmnGrewToLv[] = _("{B_BUFF1} grew to\nLV. {B_BUFF2}!{UNKNOWN_A}\p");
+static const u8 sText_PkmnLearnedMove[] = _("{B_BUFF1} learned\n{B_BUFF2}!{UNKNOWN_A}\p");
+static const u8 sText_TryToLearnMove1[] = _("{B_BUFF1} is trying to\nlearn {B_BUFF2}.\p");
+static const u8 sText_TryToLearnMove2[] = _("But, {B_BUFF1} can’t learn\nmore than four moves.\p");
+static const u8 sText_TryToLearnMove3[] = _("Delete a move to make\nroom for {B_BUFF2}?");
+static const u8 sText_PkmnForgotMove[] = _("{B_BUFF1} forgot\n{B_BUFF2}.\p");
+static const u8 sText_StopLearningMove[] = _("{PAUSE 32}Stop learning\n{B_BUFF2}?");
+static const u8 sText_DidNotLearnMove[] = _("{B_BUFF1} did not learn\n{B_BUFF2}.\p");
+static const u8 sText_UseNextPkmn[] = _("Use next POKéMON?");
+static const u8 sText_AttackMissed[] = _("{B_ATK_NAME_WITH_PREFIX}’s\nattack missed!");
+static const u8 sText_PkmnProtectedItself[] = _("{B_DEF_NAME_WITH_PREFIX}\nprotected itself!");
+static const u8 sText_AvoidedDamage[] = _("{B_DEF_NAME_WITH_PREFIX} avoided\ndamage with {B_DEF_ABILITY}!");
+static const u8 sText_PkmnMakesGroundMiss[] = _("{B_DEF_NAME_WITH_PREFIX} makes GROUND\nmoves miss with {B_DEF_ABILITY}!");
+static const u8 sText_PkmnAvoidedAttack[] = _("{B_DEF_NAME_WITH_PREFIX} avoided\nthe attack!");
+static const u8 sText_ItDoesntAffect[] = _("It doesn’t affect\n{B_DEF_NAME_WITH_PREFIX}…");
+static const u8 sText_AttackerFainted[] = _("{B_ATK_NAME_WITH_PREFIX}\nfainted!\p");
+static const u8 sText_TargetFainted[] = _("{B_DEF_NAME_WITH_PREFIX}\nfainted!\p");
+static const u8 sText_PlayerGotMoney[] = _("{B_PLAYER_NAME} got ¥{B_BUFF1}\nfor winning!\p");
+static const u8 sText_PlayerWhiteout[] = _("{B_PLAYER_NAME} is out of\nusable POKéMON!\p");
+static const u8 sText_PlayerWhiteout2[] = _("{B_PLAYER_NAME} whited out!{PAUSE_UNTIL_PRESS}");
+static const u8 sText_PreventsEscape[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} prevents\nescape with {B_SCR_ACTIVE_ABILITY}!\p");
+static const u8 sText_CantEscape2[] = _("Can’t escape!\p");
+static const u8 sText_AttackerCantEscape[] = _("{B_ATK_NAME_WITH_PREFIX} can’t escape!");
+static const u8 sText_HitXTimes[] = _("Hit {B_BUFF1} time(s)!");
+static const u8 sText_PkmnFellAsleep[] = _("{B_EFF_NAME_WITH_PREFIX}\nfell asleep!");
+static const u8 sText_PkmnMadeSleep[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nmade {B_EFF_NAME_WITH_PREFIX} sleep!");
+static const u8 sText_PkmnAlreadyAsleep[] = _("{B_DEF_NAME_WITH_PREFIX} is\nalready asleep!");
+static const u8 sText_PkmnAlreadyAsleep2[] = _("{B_ATK_NAME_WITH_PREFIX} is\nalready asleep!");
+static const u8 sText_PkmnWasntAffected[] = _("{B_DEF_NAME_WITH_PREFIX}\nwasn’t affected!");
+static const u8 sText_PkmnWasPoisoned[] = _("{B_EFF_NAME_WITH_PREFIX}\nwas poisoned!");
+static const u8 sText_PkmnPoisonedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\npoisoned {B_EFF_NAME_WITH_PREFIX}!");
+static const u8 sText_PkmnHurtByPoison[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt\nby poison!");
+static const u8 sText_PkmnAlreadyPoisoned[] = _("{B_DEF_NAME_WITH_PREFIX} is already\npoisoned.");
+static const u8 sText_PkmnBadlyPoisoned[] = _("{B_EFF_NAME_WITH_PREFIX} is badly\npoisoned!");
+static const u8 sText_PkmnEnergyDrained[] = _("{B_DEF_NAME_WITH_PREFIX} had its\nenergy drained!");
+static const u8 sText_PkmnWasBurned[] = _("{B_EFF_NAME_WITH_PREFIX} was burned!");
+static const u8 sText_PkmnBurnedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nburned {B_EFF_NAME_WITH_PREFIX}!");
+static const u8 sText_PkmnHurtByBurn[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt\nby its burn!");
+static const u8 sText_PkmnAlreadyHasBurn[] = _("{B_DEF_NAME_WITH_PREFIX} already\nhas a burn.");
+static const u8 sText_PkmnWasFrozen[] = _("{B_EFF_NAME_WITH_PREFIX} was\nfrozen solid!");
+static const u8 sText_PkmnFrozenBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nfroze {B_EFF_NAME_WITH_PREFIX} solid!");
+static const u8 sText_PkmnIsFrozen[] = _("{B_ATK_NAME_WITH_PREFIX} is\nfrozen solid!");
+static const u8 sText_PkmnWasDefrosted[] = _("{B_DEF_NAME_WITH_PREFIX} was\ndefrosted!");
+static const u8 sText_PkmnWasDefrosted2[] = _("{B_ATK_NAME_WITH_PREFIX} was\ndefrosted!");
+static const u8 sText_PkmnWasDefrostedBy[] = _("{B_ATK_NAME_WITH_PREFIX} was\ndefrosted by {B_CURRENT_MOVE}!");
+static const u8 sText_PkmnWasParalyzed[] = _("{B_EFF_NAME_WITH_PREFIX} is paralyzed!\nIt may be unable to move!");
+static const u8 sText_PkmnWasParalyzedBy[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nparalyzed {B_EFF_NAME_WITH_PREFIX}!\lIt may be unable to move!");
+static const u8 sText_PkmnIsParalyzed[] = _("{B_ATK_NAME_WITH_PREFIX} is paralyzed!\nIt can’t move!");
+static const u8 sText_PkmnIsAlreadyParalyzed[] = _("{B_DEF_NAME_WITH_PREFIX} is\nalready paralyzed!");
+static const u8 sText_PkmnHealedParalysis[] = _("{B_DEF_NAME_WITH_PREFIX} was\nhealed of paralysis!");
+static const u8 sText_PkmnDreamEaten[] = _("{B_DEF_NAME_WITH_PREFIX}’s\ndream was eaten!");
+static const u8 sText_StatsWontIncrease[] = _("{B_ATK_NAME_WITH_PREFIX}’s {B_BUFF1}\nwon’t go higher!");
+static const u8 sText_StatsWontDecrease[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_BUFF1}\nwon’t go lower!");
+static const u8 sText_TeamStoppedWorking[] = _("Your team’s {B_BUFF1}\nstopped working!");
+static const u8 sText_FoeStoppedWorking[] = _("The foe’s {B_BUFF1}\nstopped working!");
+static const u8 sText_PkmnIsConfused[] = _("{B_ATK_NAME_WITH_PREFIX} is\nconfused!");
+static const u8 sText_PkmnHealedConfusion[] = _("{B_ATK_NAME_WITH_PREFIX} snapped\nout of confusion!");
+static const u8 sText_PkmnWasConfused[] = _("{B_EFF_NAME_WITH_PREFIX} became\nconfused!");
+static const u8 sText_PkmnAlreadyConfused[] = _("{B_DEF_NAME_WITH_PREFIX} is\nalready confused!");
+static const u8 sText_PkmnFellInLove[] = _("{B_DEF_NAME_WITH_PREFIX}\nfell in love!");
+static const u8 sText_PkmnInLove[] = _("{B_ATK_NAME_WITH_PREFIX} is in love\nwith {B_SCR_ACTIVE_NAME_WITH_PREFIX}!");
+static const u8 sText_PkmnImmobilizedByLove[] = _("{B_ATK_NAME_WITH_PREFIX} is\nimmobilized by love!");
+static const u8 sText_PkmnBlownAway[] = _("{B_DEF_NAME_WITH_PREFIX} was\nblown away!");
+static const u8 sText_PkmnChangedType[] = _("{B_ATK_NAME_WITH_PREFIX} transformed\ninto the {B_BUFF1} type!");
+static const u8 sText_PkmnFlinched[] = _("{B_ATK_NAME_WITH_PREFIX} flinched!");
+static const u8 sText_PkmnRegainedHealth[] = _("{B_DEF_NAME_WITH_PREFIX} regained\nhealth!");
+static const u8 sText_PkmnHPFull[] = _("{B_DEF_NAME_WITH_PREFIX}’s\nHP is full!");
+static const u8 sText_PkmnRaisedSpDef[] = _("{B_ATK_PREFIX2}’s {B_CURRENT_MOVE}\nraised SP. DEF!");
+static const u8 sText_PkmnRaisedSpDefALittle[] = _("{B_ATK_PREFIX2}’s {B_CURRENT_MOVE}\nraised SP. DEF a little!");
+static const u8 sText_PkmnRaisedDef[] = _("{B_ATK_PREFIX2}’s {B_CURRENT_MOVE}\nraised DEFENSE!");
+static const u8 sText_PkmnRaisedDefALittle[] = _("{B_ATK_PREFIX2}’s {B_CURRENT_MOVE}\nraised DEFENSE a little!");
+static const u8 sText_PkmnCoveredByVeil[] = _("{B_ATK_PREFIX2}’s party is covered\nby a veil!");
+static const u8 sText_PkmnUsedSafeguard[] = _("{B_DEF_NAME_WITH_PREFIX}’s party is protected\nby SAFEGUARD!");
+static const u8 sText_PkmnSafeguardExpired[] = _("{B_ATK_PREFIX3}’s party is no longer\nprotected by SAFEGUARD!");
+static const u8 sText_PkmnWentToSleep[] = _("{B_ATK_NAME_WITH_PREFIX} went\nto sleep!");
+static const u8 sText_PkmnSleptHealthy[] = _("{B_ATK_NAME_WITH_PREFIX} slept and\nbecame healthy!");
+static const u8 sText_PkmnWhippedWhirlwind[] = _("{B_ATK_NAME_WITH_PREFIX} whipped\nup a whirlwind!");
+static const u8 sText_PkmnTookSunlight[] = _("{B_ATK_NAME_WITH_PREFIX} took\nin sunlight!");
+static const u8 sText_PkmnLoweredHead[] = _("{B_ATK_NAME_WITH_PREFIX} lowered\nits head!");
+static const u8 sText_PkmnIsGlowing[] = _("{B_ATK_NAME_WITH_PREFIX} is glowing!");
+static const u8 sText_PkmnFlewHigh[] = _("{B_ATK_NAME_WITH_PREFIX} flew\nup high!");
+static const u8 sText_PkmnDugHole[] = _("{B_ATK_NAME_WITH_PREFIX} dug a hole!");
+static const u8 sText_PkmnHidUnderwater[] = _("{B_ATK_NAME_WITH_PREFIX} hid\nunderwater!");
+static const u8 sText_PkmnSprangUp[] = _("{B_ATK_NAME_WITH_PREFIX} sprang up!");
+static const u8 sText_PkmnSqueezedByBind[] = _("{B_DEF_NAME_WITH_PREFIX} was squeezed by\n{B_ATK_NAME_WITH_PREFIX}’s BIND!");
+static const u8 sText_PkmnTrappedInVortex[] = _("{B_DEF_NAME_WITH_PREFIX} was trapped\nin the vortex!");
+static const u8 sText_PkmnTrappedBySandTomb[] = _("{B_DEF_NAME_WITH_PREFIX} was trapped\nby SAND TOMB!");
+static const u8 sText_PkmnWrappedBy[] = _("{B_DEF_NAME_WITH_PREFIX} was WRAPPED by\n{B_ATK_NAME_WITH_PREFIX}!");
+static const u8 sText_PkmnClamped[] = _("{B_ATK_NAME_WITH_PREFIX} CLAMPED\n{B_DEF_NAME_WITH_PREFIX}!");
+static const u8 sText_PkmnHurtBy[] = _("{B_ATK_NAME_WITH_PREFIX} is hurt\nby {B_BUFF1}!");
+static const u8 sText_PkmnFreedFrom[] = _("{B_ATK_NAME_WITH_PREFIX} was freed\nfrom {B_BUFF1}!");
+static const u8 sText_PkmnCrashed[] = _("{B_ATK_NAME_WITH_PREFIX} kept going\nand crashed!");
const u8 gText_PkmnShroudedInMist[] = _("{B_ATK_PREFIX2} became\nshrouded in MIST!");
-const u8 gText_PkmnProtectedByMist[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is protected\nby MIST!");
+static const u8 sText_PkmnProtectedByMist[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is protected\nby MIST!");
const u8 gText_PkmnGettingPumped[] = _("{B_ATK_NAME_WITH_PREFIX} is getting\npumped!");
-const u8 gText_PkmnHitWithRecoil[] = _("{B_ATK_NAME_WITH_PREFIX} is hit\nwith recoil!");
-const u8 gText_PkmnProtectedItself2[] = _("{B_ATK_NAME_WITH_PREFIX} protected\nitself!");
-const u8 gText_PkmnBuffetedBySandstorm[] = _("{B_ATK_NAME_WITH_PREFIX} is buffeted\nby the sandstorm!");
-const u8 gText_PkmnPeltedByHail[] = _("{B_ATK_NAME_WITH_PREFIX} is pelted\nby HAIL!");
-const u8 gText_PkmnsXWoreOff[] = _("{B_ATK_PREFIX1}’s {B_BUFF1}\nwore off!");
-const u8 gText_PkmnSeeded[] = _("{B_DEF_NAME_WITH_PREFIX} was seeded!");
-const u8 gText_PkmnEvadedAttack[] = _("{B_DEF_NAME_WITH_PREFIX} evaded\nthe attack!");
-const u8 gText_PkmnSappedByLeechSeed[] = _("{B_ATK_NAME_WITH_PREFIX}’s health is\nsapped by LEECH SEED!");
-const u8 gText_PkmnFastAsleep[] = _("{B_ATK_NAME_WITH_PREFIX} is fast\nasleep.");
-const u8 gText_PkmnWokeUp[] = _("{B_ATK_NAME_WITH_PREFIX} woke up!");
-const u8 gText_PkmnUproarKeptAwake[] = _("But {B_SCR_ACTIVE_NAME_WITH_PREFIX}’s UPROAR\nkept it awake!");
-const u8 gText_PkmnWokeUpInUproar[] = _("{B_ATK_NAME_WITH_PREFIX} woke up\nin the UPROAR!");
-const u8 gText_PkmnCausedUproar[] = _("{B_ATK_NAME_WITH_PREFIX} caused\nan UPROAR!");
-const u8 gText_PkmnMakingUproar[] = _("{B_ATK_NAME_WITH_PREFIX} is making\nan UPROAR!");
-const u8 gText_PkmnCalmedDown[] = _("{B_ATK_NAME_WITH_PREFIX} calmed down.");
-const u8 gText_PkmnCantSleepInUproar[] = _("But {B_DEF_NAME_WITH_PREFIX} can’t\nsleep in an UPROAR!");
-const u8 gText_PkmnStockpiled[] = _("{B_ATK_NAME_WITH_PREFIX} STOCKPILED\n{B_BUFF1}!");
-const u8 gText_PkmnCantStockpile[] = _("{B_ATK_NAME_WITH_PREFIX} can’t\nSTOCKPILE any more!");
-const u8 gText_PkmnCantSleepInUproar2[] = _("But {B_DEF_NAME_WITH_PREFIX} can’t\nsleep in an UPROAR!");
-const u8 gText_UproarKeptPkmnAwake[] = _("But the UPROAR kept\n{B_DEF_NAME_WITH_PREFIX} awake!");
-const u8 gText_PkmnStayedAwakeUsing[] = _("{B_DEF_NAME_WITH_PREFIX} stayed awake\nusing its {B_DEF_ABILITY}!");
-const u8 gText_PkmnStoringEnergy[] = _("{B_ATK_NAME_WITH_PREFIX} is storing\nenergy!");
-const u8 gText_PkmnUnleashedEnergy[] = _("{B_ATK_NAME_WITH_PREFIX} unleashed\nenergy!");
-const u8 gText_PkmnFatigueConfusion[] = _("{B_ATK_NAME_WITH_PREFIX} became\nconfused due to fatigue!");
-const u8 gText_PkmnPickedUpItem[] = _("{B_PLAYER_NAME} picked up\n¥{B_BUFF1}!\p");
-const u8 gText_PkmnUnaffected[] = _("{B_DEF_NAME_WITH_PREFIX} is\nunaffected!");
-const u8 gText_PkmnTransformedInto[] = _("{B_ATK_NAME_WITH_PREFIX} transformed\ninto {B_BUFF1}!");
-const u8 gText_PkmnMadeSubstitute[] = _("{B_ATK_NAME_WITH_PREFIX} made\na SUBSTITUTE!");
-const u8 gText_PkmnHasSubstitute[] = _("{B_ATK_NAME_WITH_PREFIX} already\nhas a SUBSTITUTE!");
-const u8 gText_SubstituteDamaged[] = _("The SUBSTITUTE took damage\nfor {B_DEF_NAME_WITH_PREFIX}!\p");
-const u8 gText_PkmnSubstituteFaded[] = _("{B_DEF_NAME_WITH_PREFIX}’s\nSUBSTITUTE faded!\p");
-const u8 gText_PkmnMustRecharge[] = _("{B_ATK_NAME_WITH_PREFIX} must\nrecharge!");
-const u8 gText_PkmnRageBuilding[] = _("{B_DEF_NAME_WITH_PREFIX}’s RAGE\nis building!");
-const u8 gText_PkmnMoveWasDisabled[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_BUFF1}\nwas disabled!");
-const u8 gText_PkmnMoveDisabledNoMore[] = _("{B_ATK_NAME_WITH_PREFIX} is disabled\nno more!");
-const u8 gText_PkmnGotEncore[] = _("{B_DEF_NAME_WITH_PREFIX} got\nan ENCORE!");
-const u8 gText_PkmnEncoreEnded[] = _("{B_ATK_NAME_WITH_PREFIX}’s ENCORE\nended!");
-const u8 gText_PkmnTookAim[] = _("{B_ATK_NAME_WITH_PREFIX} took aim\nat {B_DEF_NAME_WITH_PREFIX}!");
-const u8 gText_PkmnSketchedMove[] = _("{B_ATK_NAME_WITH_PREFIX} SKETCHED\n{B_BUFF1}!");
-const u8 gText_PkmnTryingToTakeFoe[] = _("{B_ATK_NAME_WITH_PREFIX} is trying\nto take its foe with it!");
-const u8 gText_PkmnTookFoe[] = _("{B_DEF_NAME_WITH_PREFIX} took\n{B_ATK_NAME_WITH_PREFIX} with it!");
-const u8 gText_PkmnReducedPP[] = _("Reduced {B_DEF_NAME_WITH_PREFIX}’s\n{B_BUFF1} by {B_BUFF2}!");
-const u8 gText_PkmnStoleItem[] = _("{B_ATK_NAME_WITH_PREFIX} stole\n{B_DEF_NAME_WITH_PREFIX}’s {B_LAST_ITEM}!");
-const u8 gText_TargetCantEscapeNow[] = _("{B_DEF_NAME_WITH_PREFIX} can’t\nescape now!");
-const u8 gText_PkmnFellIntoNightmare[] = _("{B_DEF_NAME_WITH_PREFIX} fell into\na NIGHTMARE!");
-const u8 gText_PkmnLockedInNightmare[] = _("{B_ATK_NAME_WITH_PREFIX} is locked\nin a NIGHTMARE!");
-const u8 gText_PkmnLaidCurse[] = _("{B_ATK_NAME_WITH_PREFIX} cut its own HP and\nlaid a CURSE on {B_DEF_NAME_WITH_PREFIX}!");
-const u8 gText_PkmnAfflictedByCurse[] = _("{B_ATK_NAME_WITH_PREFIX} is afflicted\nby the CURSE!");
-const u8 gText_SpikesScattered[] = _("SPIKES were scattered all around\nthe opponent’s side!");
-const u8 gText_PkmnHurtBySpikes[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is hurt\nby SPIKES!");
-const u8 gText_PkmnIdentified[] = _("{B_ATK_NAME_WITH_PREFIX} identified\n{B_DEF_NAME_WITH_PREFIX}!");
-const u8 gText_PkmnPerishCountFell[] = _("{B_ATK_NAME_WITH_PREFIX}’s PERISH count\nfell to {B_BUFF1}!");
-const u8 gText_PkmnBracedItself[] = _("{B_ATK_NAME_WITH_PREFIX} braced\nitself!");
-const u8 gText_PkmnEnduredHit[] = _("{B_DEF_NAME_WITH_PREFIX} ENDURED\nthe hit!");
-const u8 gText_MagnitudeStrength[] = _("MAGNITUDE {B_BUFF1}!");
-const u8 gText_PkmnCutHPMaxedAttack[] = _("{B_ATK_NAME_WITH_PREFIX} cut its own HP\nand maximized ATTACK!");
-const u8 gText_PkmnCopiedStatChanges[] = _("{B_ATK_NAME_WITH_PREFIX} copied\n{B_DEF_NAME_WITH_PREFIX}’s stat changes!");
-const u8 gText_PkmnGotFree[] = _("{B_ATK_NAME_WITH_PREFIX} got free of\n{B_DEF_NAME_WITH_PREFIX}’s {B_BUFF1}!");
-const u8 gText_PkmnShedLeechSeed[] = _("{B_ATK_NAME_WITH_PREFIX} shed\nLEECH SEED!");
-const u8 gText_PkmnBlewAwaySpikes[] = _("{B_ATK_NAME_WITH_PREFIX} blew away\nSPIKES!");
-const u8 gText_PkmnFledFromBattle[] = _("{B_ATK_NAME_WITH_PREFIX} fled from\nbattle!");
-const u8 gText_PkmnForesawAttack[] = _("{B_ATK_NAME_WITH_PREFIX} foresaw\nan attack!");
-const u8 gText_PkmnTookAttack[] = _("{B_DEF_NAME_WITH_PREFIX} took the\n{B_BUFF1} attack!");
-const u8 gText_PkmnChoseXAsDestiny[] = _("{B_ATK_NAME_WITH_PREFIX} chose\n{B_CURRENT_MOVE} as its destiny!");
-const u8 gText_PkmnAttack[] = _("{B_BUFF1}’s attack!");
-const u8 gText_PkmnCenterAttention[] = _("{B_ATK_NAME_WITH_PREFIX} became the\ncenter of attention!");
-const u8 gText_PkmnChargingPower[] = _("{B_ATK_NAME_WITH_PREFIX} began\ncharging power!");
-const u8 gText_NaturePowerTurnedInto[] = _("NATURE POWER turned into\n{B_CURRENT_MOVE}!");
-const u8 gText_PkmnStatusNormal[] = _("{B_ATK_NAME_WITH_PREFIX}’s status\nreturned to normal!");
-const u8 gText_PkmnSubjectedToTorment[] = _("{B_DEF_NAME_WITH_PREFIX} was subjected\nto TORMENT!");
-const u8 gText_PkmnTighteningFocus[] = _("{B_ATK_NAME_WITH_PREFIX} is tightening\nits focus!");
-const u8 gText_PkmnFellForTaunt[] = _("{B_DEF_NAME_WITH_PREFIX} fell for\nthe TAUNT!");
-const u8 gText_PkmnReadyToHelp[] = _("{B_ATK_NAME_WITH_PREFIX} is ready to\nhelp {B_DEF_NAME_WITH_PREFIX}!");
-const u8 gText_PkmnSwitchedItems[] = _("{B_ATK_NAME_WITH_PREFIX} switched\nitems with its opponent!");
-const u8 gText_PkmnObtainedX[] = _("{B_ATK_NAME_WITH_PREFIX} obtained\n{B_BUFF1}.");
-const u8 gText_PkmnObtainedX2[] = _("{B_DEF_NAME_WITH_PREFIX} obtained\n{B_BUFF2}.");
-const u8 gText_PkmnObtainedXYObtainedZ[] = _("{B_ATK_NAME_WITH_PREFIX} obtained\n{B_BUFF1}.\p{B_DEF_NAME_WITH_PREFIX} obtained\n{B_BUFF2}.");
-const u8 gText_PkmnCopiedFoe[] = _("{B_ATK_NAME_WITH_PREFIX} copied\n{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}!");
-const u8 gText_PkmnMadeWish[] = _("{B_ATK_NAME_WITH_PREFIX} made a WISH!");
-const u8 gText_PkmnWishCameTrue[] = _("{B_BUFF1}’s WISH\ncame true!");
-const u8 gText_PkmnPlantedRoots[] = _("{B_ATK_NAME_WITH_PREFIX} planted its roots!");
-const u8 gText_PkmnAbsorbedNutrients[] = _("{B_ATK_NAME_WITH_PREFIX} absorbed\nnutrients with its roots!");
-const u8 gText_PkmnAnchoredItself[] = _("{B_DEF_NAME_WITH_PREFIX} anchored\nitself with its roots!");
-const u8 gText_PkmnWasMadeDrowsy[] = _("{B_ATK_NAME_WITH_PREFIX} made\n{B_DEF_NAME_WITH_PREFIX} drowsy!");
-const u8 gText_PkmnKnockedOff[] = _("{B_ATK_NAME_WITH_PREFIX} knocked off\n{B_DEF_NAME_WITH_PREFIX}’s {B_LAST_ITEM}!");
-const u8 gText_PkmnSwappedAbilities[] = _("{B_ATK_NAME_WITH_PREFIX} swapped abilities\nwith its opponent!");
-const u8 gText_PkmnSealedOpponentMove[] = _("{B_ATK_NAME_WITH_PREFIX} sealed the\nopponent’s move(s)!");
-const u8 gText_PkmnWantsGrudge[] = _("{B_ATK_NAME_WITH_PREFIX} wants the\nopponent to bear a GRUDGE!");
-const u8 gText_PkmnLostPPGrudge[] = _("{B_ATK_NAME_WITH_PREFIX}’s {B_BUFF1} lost\nall its PP due to the GRUDGE!");
-const u8 gText_PkmnShroudedItself[] = _("{B_ATK_NAME_WITH_PREFIX} shrouded\nitself in {B_CURRENT_MOVE}!");
-const u8 gText_PkmnMoveBounced[] = _("{B_ATK_NAME_WITH_PREFIX}’s {B_CURRENT_MOVE}\nwas bounced back by MAGIC COAT!");
-const u8 gText_PkmnWaitsForTarget[] = _("{B_ATK_NAME_WITH_PREFIX} waits for a target\nto make a move!");
-const u8 gText_PkmnSnatchedMove[] = _("{B_DEF_NAME_WITH_PREFIX} SNATCHED\n{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s move!");
-const u8 gText_ElectricityWeakened[] = _("Electricity’s power was\nweakened!");
-const u8 gText_FireWeakened[] = _("Fire’s power was\nweakened!");
-const u8 gText_XFoundOneY[] = _("{B_ATK_NAME_WITH_PREFIX} found\none {B_LAST_ITEM}!");
-const u8 gText_SoothingAroma[] = _("A soothing aroma wafted\nthrough the area!");
-const u8 gText_ItemsCantBeUsedNow[] = _("Items can’t be used now.{PAUSE 64}");
-const u8 gText_ForXCommaYZ[] = _("For {B_SCR_ACTIVE_NAME_WITH_PREFIX},\n{B_LAST_ITEM} {B_BUFF1}");
-const u8 gText_PkmnUsedXToGetPumped[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} used\n{B_LAST_ITEM} to get pumped!");
-const u8 gText_PkmnLostFocus[] = _("{B_ATK_NAME_WITH_PREFIX} lost its\nfocus and couldn’t move!");
-const u8 gText_PkmnWasDraggedOut[] = _("{B_DEF_NAME_WITH_PREFIX} was\ndragged out!\p");
-const u8 gText_TheWallShattered[] = _("The wall shattered!");
-const u8 gText_ButNoEffect[] = _("But it had no effect!");
-const u8 gText_PkmnHasNoMovesLeft[] = _("{B_ACTIVE_NAME_WITH_PREFIX} has no\nmoves left!\p");
-const u8 gText_PkmnMoveIsDisabled[] = _("{B_ACTIVE_NAME_WITH_PREFIX}’s {B_CURRENT_MOVE}\nis disabled!\p");
-const u8 gText_PkmnCantUseMoveTorment[] = _("{B_ACTIVE_NAME_WITH_PREFIX} can’t use the same\nmove in a row due to the TORMENT!\p");
-const u8 gText_PkmnCantUseMoveTaunt[] = _("{B_ACTIVE_NAME_WITH_PREFIX} can’t use\n{B_CURRENT_MOVE} after the TAUNT!\p");
-const u8 gText_PkmnCantUseMoveSealed[] = _("{B_ACTIVE_NAME_WITH_PREFIX} can’t use the\nsealed {B_CURRENT_MOVE}!\p");
-const u8 gText_PkmnMadeItRain[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nmade it rain!");
-const u8 gText_PkmnRaisedSpeed[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nraised its SPEED!");
-const u8 gText_PkmnProtectedBy[] = _("{B_DEF_NAME_WITH_PREFIX} was protected\nby {B_DEF_ABILITY}!");
-const u8 gText_PkmnPreventsUsage[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nprevents {B_ATK_NAME_WITH_PREFIX}\lfrom using {B_CURRENT_MOVE}!");
-const u8 gText_PkmnRestoredHPUsing[] = _("{B_DEF_NAME_WITH_PREFIX} restored HP\nusing its {B_DEF_ABILITY}!");
-const u8 gText_PkmnsXMadeYUseless[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nmade {B_CURRENT_MOVE} useless!");
-const u8 gText_PkmnChangedTypeWith[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nmade it the {B_BUFF1} type!");
-const u8 gText_PkmnPreventsParalysisWith[] = _("{B_EFF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nprevents paralysis!");
-const u8 gText_PkmnPreventsRomanceWith[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nprevents romance!");
-const u8 gText_PkmnPreventsPoisoningWith[] = _("{B_EFF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nprevents poisoning!");
-const u8 gText_PkmnPreventsConfusionWith[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nprevents confusion!");
-const u8 gText_PkmnRaisedFirePowerWith[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nraised its FIRE power!");
-const u8 gText_PkmnAnchorsItselfWith[] = _("{B_DEF_NAME_WITH_PREFIX} anchors\nitself with {B_DEF_ABILITY}!");
-const u8 gText_PkmnCutsAttackWith[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\ncuts {B_DEF_NAME_WITH_PREFIX}’s ATTACK!");
-const u8 gText_PkmnPreventsStatLossWith[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nprevents stat loss!");
-const u8 gText_PkmnHurtsWith[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nhurt {B_ATK_NAME_WITH_PREFIX}!");
-const u8 gText_PkmnTraced[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} TRACED\n{B_BUFF1}’s {B_BUFF2}!");
-const u8 gText_PkmnsXPreventsBurns[] = _("{B_EFF_NAME_WITH_PREFIX}’s {B_EFF_ABILITY}\nprevents burns!");
-const u8 gText_PkmnsXBlocksY[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nblocks {B_CURRENT_MOVE}!");
-const u8 gText_PkmnsXBlocksY2[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nblocks {B_CURRENT_MOVE}!");
-const u8 gText_PkmnsXRestoredHPALittle2[] = _("{B_ATK_NAME_WITH_PREFIX}’s {B_ATK_ABILITY}\nrestored its HP a little!");
-const u8 gText_PkmnsXWhippedUpSandstorm[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nwhipped up a sandstorm!");
-const u8 gText_PkmnsXIntensifiedSun[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nintensified the sun’s rays!");
-const u8 gText_PkmnsXPreventsYLoss[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nprevents {B_BUFF1} loss!");
-const u8 gText_PkmnsXInfatuatedY[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\ninfatuated {B_ATK_NAME_WITH_PREFIX}!");
-const u8 gText_PkmnsXMadeYIneffective[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nmade {B_CURRENT_MOVE} ineffective!");
-const u8 gText_PkmnsXCuredYProblem[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\ncured its {B_BUFF1} problem!");
-const u8 gText_ItSuckedLiquidOoze[] = _("It sucked up the\nLIQUID OOZE!");
-const u8 gText_PkmnTransformed[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} transformed!");
-const u8 gText_PkmnsXTookAttack[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\ntook the attack!");
+static const u8 sText_PkmnHitWithRecoil[] = _("{B_ATK_NAME_WITH_PREFIX} is hit\nwith recoil!");
+static const u8 sText_PkmnProtectedItself2[] = _("{B_ATK_NAME_WITH_PREFIX} protected\nitself!");
+static const u8 sText_PkmnBuffetedBySandstorm[] = _("{B_ATK_NAME_WITH_PREFIX} is buffeted\nby the sandstorm!");
+static const u8 sText_PkmnPeltedByHail[] = _("{B_ATK_NAME_WITH_PREFIX} is pelted\nby HAIL!");
+static const u8 sText_PkmnsXWoreOff[] = _("{B_ATK_PREFIX1}’s {B_BUFF1}\nwore off!");
+static const u8 sText_PkmnSeeded[] = _("{B_DEF_NAME_WITH_PREFIX} was seeded!");
+static const u8 sText_PkmnEvadedAttack[] = _("{B_DEF_NAME_WITH_PREFIX} evaded\nthe attack!");
+static const u8 sText_PkmnSappedByLeechSeed[] = _("{B_ATK_NAME_WITH_PREFIX}’s health is\nsapped by LEECH SEED!");
+static const u8 sText_PkmnFastAsleep[] = _("{B_ATK_NAME_WITH_PREFIX} is fast\nasleep.");
+static const u8 sText_PkmnWokeUp[] = _("{B_ATK_NAME_WITH_PREFIX} woke up!");
+static const u8 sText_PkmnUproarKeptAwake[] = _("But {B_SCR_ACTIVE_NAME_WITH_PREFIX}’s UPROAR\nkept it awake!");
+static const u8 sText_PkmnWokeUpInUproar[] = _("{B_ATK_NAME_WITH_PREFIX} woke up\nin the UPROAR!");
+static const u8 sText_PkmnCausedUproar[] = _("{B_ATK_NAME_WITH_PREFIX} caused\nan UPROAR!");
+static const u8 sText_PkmnMakingUproar[] = _("{B_ATK_NAME_WITH_PREFIX} is making\nan UPROAR!");
+static const u8 sText_PkmnCalmedDown[] = _("{B_ATK_NAME_WITH_PREFIX} calmed down.");
+static const u8 sText_PkmnCantSleepInUproar[] = _("But {B_DEF_NAME_WITH_PREFIX} can’t\nsleep in an UPROAR!");
+static const u8 sText_PkmnStockpiled[] = _("{B_ATK_NAME_WITH_PREFIX} STOCKPILED\n{B_BUFF1}!");
+static const u8 sText_PkmnCantStockpile[] = _("{B_ATK_NAME_WITH_PREFIX} can’t\nSTOCKPILE any more!");
+static const u8 sText_PkmnCantSleepInUproar2[] = _("But {B_DEF_NAME_WITH_PREFIX} can’t\nsleep in an UPROAR!");
+static const u8 sText_UproarKeptPkmnAwake[] = _("But the UPROAR kept\n{B_DEF_NAME_WITH_PREFIX} awake!");
+static const u8 sText_PkmnStayedAwakeUsing[] = _("{B_DEF_NAME_WITH_PREFIX} stayed awake\nusing its {B_DEF_ABILITY}!");
+static const u8 sText_PkmnStoringEnergy[] = _("{B_ATK_NAME_WITH_PREFIX} is storing\nenergy!");
+static const u8 sText_PkmnUnleashedEnergy[] = _("{B_ATK_NAME_WITH_PREFIX} unleashed\nenergy!");
+static const u8 sText_PkmnFatigueConfusion[] = _("{B_ATK_NAME_WITH_PREFIX} became\nconfused due to fatigue!");
+static const u8 sText_PkmnPickedUpItem[] = _("{B_PLAYER_NAME} picked up\n¥{B_BUFF1}!\p");
+static const u8 sText_PkmnUnaffected[] = _("{B_DEF_NAME_WITH_PREFIX} is\nunaffected!");
+static const u8 sText_PkmnTransformedInto[] = _("{B_ATK_NAME_WITH_PREFIX} transformed\ninto {B_BUFF1}!");
+static const u8 sText_PkmnMadeSubstitute[] = _("{B_ATK_NAME_WITH_PREFIX} made\na SUBSTITUTE!");
+static const u8 sText_PkmnHasSubstitute[] = _("{B_ATK_NAME_WITH_PREFIX} already\nhas a SUBSTITUTE!");
+static const u8 sText_SubstituteDamaged[] = _("The SUBSTITUTE took damage\nfor {B_DEF_NAME_WITH_PREFIX}!\p");
+static const u8 sText_PkmnSubstituteFaded[] = _("{B_DEF_NAME_WITH_PREFIX}’s\nSUBSTITUTE faded!\p");
+static const u8 sText_PkmnMustRecharge[] = _("{B_ATK_NAME_WITH_PREFIX} must\nrecharge!");
+static const u8 sText_PkmnRageBuilding[] = _("{B_DEF_NAME_WITH_PREFIX}’s RAGE\nis building!");
+static const u8 sText_PkmnMoveWasDisabled[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_BUFF1}\nwas disabled!");
+static const u8 sText_PkmnMoveDisabledNoMore[] = _("{B_ATK_NAME_WITH_PREFIX} is disabled\nno more!");
+static const u8 sText_PkmnGotEncore[] = _("{B_DEF_NAME_WITH_PREFIX} got\nan ENCORE!");
+static const u8 sText_PkmnEncoreEnded[] = _("{B_ATK_NAME_WITH_PREFIX}’s ENCORE\nended!");
+static const u8 sText_PkmnTookAim[] = _("{B_ATK_NAME_WITH_PREFIX} took aim\nat {B_DEF_NAME_WITH_PREFIX}!");
+static const u8 sText_PkmnSketchedMove[] = _("{B_ATK_NAME_WITH_PREFIX} SKETCHED\n{B_BUFF1}!");
+static const u8 sText_PkmnTryingToTakeFoe[] = _("{B_ATK_NAME_WITH_PREFIX} is trying\nto take its foe with it!");
+static const u8 sText_PkmnTookFoe[] = _("{B_DEF_NAME_WITH_PREFIX} took\n{B_ATK_NAME_WITH_PREFIX} with it!");
+static const u8 sText_PkmnReducedPP[] = _("Reduced {B_DEF_NAME_WITH_PREFIX}’s\n{B_BUFF1} by {B_BUFF2}!");
+static const u8 sText_PkmnStoleItem[] = _("{B_ATK_NAME_WITH_PREFIX} stole\n{B_DEF_NAME_WITH_PREFIX}’s {B_LAST_ITEM}!");
+static const u8 sText_TargetCantEscapeNow[] = _("{B_DEF_NAME_WITH_PREFIX} can’t\nescape now!");
+static const u8 sText_PkmnFellIntoNightmare[] = _("{B_DEF_NAME_WITH_PREFIX} fell into\na NIGHTMARE!");
+static const u8 sText_PkmnLockedInNightmare[] = _("{B_ATK_NAME_WITH_PREFIX} is locked\nin a NIGHTMARE!");
+static const u8 sText_PkmnLaidCurse[] = _("{B_ATK_NAME_WITH_PREFIX} cut its own HP and\nlaid a CURSE on {B_DEF_NAME_WITH_PREFIX}!");
+static const u8 sText_PkmnAfflictedByCurse[] = _("{B_ATK_NAME_WITH_PREFIX} is afflicted\nby the CURSE!");
+static const u8 sText_SpikesScattered[] = _("SPIKES were scattered all around\nthe opponent’s side!");
+static const u8 sText_PkmnHurtBySpikes[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is hurt\nby SPIKES!");
+static const u8 sText_PkmnIdentified[] = _("{B_ATK_NAME_WITH_PREFIX} identified\n{B_DEF_NAME_WITH_PREFIX}!");
+static const u8 sText_PkmnPerishCountFell[] = _("{B_ATK_NAME_WITH_PREFIX}’s PERISH count\nfell to {B_BUFF1}!");
+static const u8 sText_PkmnBracedItself[] = _("{B_ATK_NAME_WITH_PREFIX} braced\nitself!");
+static const u8 sText_PkmnEnduredHit[] = _("{B_DEF_NAME_WITH_PREFIX} ENDURED\nthe hit!");
+static const u8 sText_MagnitudeStrength[] = _("MAGNITUDE {B_BUFF1}!");
+static const u8 sText_PkmnCutHPMaxedAttack[] = _("{B_ATK_NAME_WITH_PREFIX} cut its own HP\nand maximized ATTACK!");
+static const u8 sText_PkmnCopiedStatChanges[] = _("{B_ATK_NAME_WITH_PREFIX} copied\n{B_DEF_NAME_WITH_PREFIX}’s stat changes!");
+static const u8 sText_PkmnGotFree[] = _("{B_ATK_NAME_WITH_PREFIX} got free of\n{B_DEF_NAME_WITH_PREFIX}’s {B_BUFF1}!");
+static const u8 sText_PkmnShedLeechSeed[] = _("{B_ATK_NAME_WITH_PREFIX} shed\nLEECH SEED!");
+static const u8 sText_PkmnBlewAwaySpikes[] = _("{B_ATK_NAME_WITH_PREFIX} blew away\nSPIKES!");
+static const u8 sText_PkmnFledFromBattle[] = _("{B_ATK_NAME_WITH_PREFIX} fled from\nbattle!");
+static const u8 sText_PkmnForesawAttack[] = _("{B_ATK_NAME_WITH_PREFIX} foresaw\nan attack!");
+static const u8 sText_PkmnTookAttack[] = _("{B_DEF_NAME_WITH_PREFIX} took the\n{B_BUFF1} attack!");
+static const u8 sText_PkmnChoseXAsDestiny[] = _("{B_ATK_NAME_WITH_PREFIX} chose\n{B_CURRENT_MOVE} as its destiny!");
+static const u8 sText_PkmnAttack[] = _("{B_BUFF1}’s attack!");
+static const u8 sText_PkmnCenterAttention[] = _("{B_ATK_NAME_WITH_PREFIX} became the\ncenter of attention!");
+static const u8 sText_PkmnChargingPower[] = _("{B_ATK_NAME_WITH_PREFIX} began\ncharging power!");
+static const u8 sText_NaturePowerTurnedInto[] = _("NATURE POWER turned into\n{B_CURRENT_MOVE}!");
+static const u8 sText_PkmnStatusNormal[] = _("{B_ATK_NAME_WITH_PREFIX}’s status\nreturned to normal!");
+static const u8 sText_PkmnSubjectedToTorment[] = _("{B_DEF_NAME_WITH_PREFIX} was subjected\nto TORMENT!");
+static const u8 sText_PkmnTighteningFocus[] = _("{B_ATK_NAME_WITH_PREFIX} is tightening\nits focus!");
+static const u8 sText_PkmnFellForTaunt[] = _("{B_DEF_NAME_WITH_PREFIX} fell for\nthe TAUNT!");
+static const u8 sText_PkmnReadyToHelp[] = _("{B_ATK_NAME_WITH_PREFIX} is ready to\nhelp {B_DEF_NAME_WITH_PREFIX}!");
+static const u8 sText_PkmnSwitchedItems[] = _("{B_ATK_NAME_WITH_PREFIX} switched\nitems with its opponent!");
+static const u8 sText_PkmnObtainedX[] = _("{B_ATK_NAME_WITH_PREFIX} obtained\n{B_BUFF1}.");
+static const u8 sText_PkmnObtainedX2[] = _("{B_DEF_NAME_WITH_PREFIX} obtained\n{B_BUFF2}.");
+static const u8 sText_PkmnObtainedXYObtainedZ[] = _("{B_ATK_NAME_WITH_PREFIX} obtained\n{B_BUFF1}.\p{B_DEF_NAME_WITH_PREFIX} obtained\n{B_BUFF2}.");
+static const u8 sText_PkmnCopiedFoe[] = _("{B_ATK_NAME_WITH_PREFIX} copied\n{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}!");
+static const u8 sText_PkmnMadeWish[] = _("{B_ATK_NAME_WITH_PREFIX} made a WISH!");
+static const u8 sText_PkmnWishCameTrue[] = _("{B_BUFF1}’s WISH\ncame true!");
+static const u8 sText_PkmnPlantedRoots[] = _("{B_ATK_NAME_WITH_PREFIX} planted its roots!");
+static const u8 sText_PkmnAbsorbedNutrients[] = _("{B_ATK_NAME_WITH_PREFIX} absorbed\nnutrients with its roots!");
+static const u8 sText_PkmnAnchoredItself[] = _("{B_DEF_NAME_WITH_PREFIX} anchored\nitself with its roots!");
+static const u8 sText_PkmnWasMadeDrowsy[] = _("{B_ATK_NAME_WITH_PREFIX} made\n{B_DEF_NAME_WITH_PREFIX} drowsy!");
+static const u8 sText_PkmnKnockedOff[] = _("{B_ATK_NAME_WITH_PREFIX} knocked off\n{B_DEF_NAME_WITH_PREFIX}’s {B_LAST_ITEM}!");
+static const u8 sText_PkmnSwappedAbilities[] = _("{B_ATK_NAME_WITH_PREFIX} swapped abilities\nwith its opponent!");
+static const u8 sText_PkmnSealedOpponentMove[] = _("{B_ATK_NAME_WITH_PREFIX} sealed the\nopponent’s move(s)!");
+static const u8 sText_PkmnWantsGrudge[] = _("{B_ATK_NAME_WITH_PREFIX} wants the\nopponent to bear a GRUDGE!");
+static const u8 sText_PkmnLostPPGrudge[] = _("{B_ATK_NAME_WITH_PREFIX}’s {B_BUFF1} lost\nall its PP due to the GRUDGE!");
+static const u8 sText_PkmnShroudedItself[] = _("{B_ATK_NAME_WITH_PREFIX} shrouded\nitself in {B_CURRENT_MOVE}!");
+static const u8 sText_PkmnMoveBounced[] = _("{B_ATK_NAME_WITH_PREFIX}’s {B_CURRENT_MOVE}\nwas bounced back by MAGIC COAT!");
+static const u8 sText_PkmnWaitsForTarget[] = _("{B_ATK_NAME_WITH_PREFIX} waits for a target\nto make a move!");
+static const u8 sText_PkmnSnatchedMove[] = _("{B_DEF_NAME_WITH_PREFIX} SNATCHED\n{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s move!");
+static const u8 sText_ElectricityWeakened[] = _("Electricity’s power was\nweakened!");
+static const u8 sText_FireWeakened[] = _("Fire’s power was\nweakened!");
+static const u8 sText_XFoundOneY[] = _("{B_ATK_NAME_WITH_PREFIX} found\none {B_LAST_ITEM}!");
+static const u8 sText_SoothingAroma[] = _("A soothing aroma wafted\nthrough the area!");
+static const u8 sText_ItemsCantBeUsedNow[] = _("Items can’t be used now.{PAUSE 64}");
+static const u8 sText_ForXCommaYZ[] = _("For {B_SCR_ACTIVE_NAME_WITH_PREFIX},\n{B_LAST_ITEM} {B_BUFF1}");
+static const u8 sText_PkmnUsedXToGetPumped[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} used\n{B_LAST_ITEM} to get pumped!");
+static const u8 sText_PkmnLostFocus[] = _("{B_ATK_NAME_WITH_PREFIX} lost its\nfocus and couldn’t move!");
+static const u8 sText_PkmnWasDraggedOut[] = _("{B_DEF_NAME_WITH_PREFIX} was\ndragged out!\p");
+static const u8 sText_TheWallShattered[] = _("The wall shattered!");
+static const u8 sText_ButNoEffect[] = _("But it had no effect!");
+static const u8 sText_PkmnHasNoMovesLeft[] = _("{B_ACTIVE_NAME_WITH_PREFIX} has no\nmoves left!\p");
+static const u8 sText_PkmnMoveIsDisabled[] = _("{B_ACTIVE_NAME_WITH_PREFIX}’s {B_CURRENT_MOVE}\nis disabled!\p");
+static const u8 sText_PkmnCantUseMoveTorment[] = _("{B_ACTIVE_NAME_WITH_PREFIX} can’t use the same\nmove in a row due to the TORMENT!\p");
+static const u8 sText_PkmnCantUseMoveTaunt[] = _("{B_ACTIVE_NAME_WITH_PREFIX} can’t use\n{B_CURRENT_MOVE} after the TAUNT!\p");
+static const u8 sText_PkmnCantUseMoveSealed[] = _("{B_ACTIVE_NAME_WITH_PREFIX} can’t use the\nsealed {B_CURRENT_MOVE}!\p");
+static const u8 sText_PkmnMadeItRain[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nmade it rain!");
+static const u8 sText_PkmnRaisedSpeed[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nraised its SPEED!");
+static const u8 sText_PkmnProtectedBy[] = _("{B_DEF_NAME_WITH_PREFIX} was protected\nby {B_DEF_ABILITY}!");
+static const u8 sText_PkmnPreventsUsage[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nprevents {B_ATK_NAME_WITH_PREFIX}\lfrom using {B_CURRENT_MOVE}!");
+static const u8 sText_PkmnRestoredHPUsing[] = _("{B_DEF_NAME_WITH_PREFIX} restored HP\nusing its {B_DEF_ABILITY}!");
+static const u8 sText_PkmnsXMadeYUseless[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nmade {B_CURRENT_MOVE} useless!");
+static const u8 sText_PkmnChangedTypeWith[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nmade it the {B_BUFF1} type!");
+static const u8 sText_PkmnPreventsParalysisWith[] = _("{B_EFF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nprevents paralysis!");
+static const u8 sText_PkmnPreventsRomanceWith[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nprevents romance!");
+static const u8 sText_PkmnPreventsPoisoningWith[] = _("{B_EFF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nprevents poisoning!");
+static const u8 sText_PkmnPreventsConfusionWith[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nprevents confusion!");
+static const u8 sText_PkmnRaisedFirePowerWith[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nraised its FIRE power!");
+static const u8 sText_PkmnAnchorsItselfWith[] = _("{B_DEF_NAME_WITH_PREFIX} anchors\nitself with {B_DEF_ABILITY}!");
+static const u8 sText_PkmnCutsAttackWith[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\ncuts {B_DEF_NAME_WITH_PREFIX}’s ATTACK!");
+static const u8 sText_PkmnPreventsStatLossWith[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nprevents stat loss!");
+static const u8 sText_PkmnHurtsWith[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nhurt {B_ATK_NAME_WITH_PREFIX}!");
+static const u8 sText_PkmnTraced[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} TRACED\n{B_BUFF1}’s {B_BUFF2}!");
+static const u8 sText_PkmnsXPreventsBurns[] = _("{B_EFF_NAME_WITH_PREFIX}’s {B_EFF_ABILITY}\nprevents burns!");
+static const u8 sText_PkmnsXBlocksY[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nblocks {B_CURRENT_MOVE}!");
+static const u8 sText_PkmnsXBlocksY2[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nblocks {B_CURRENT_MOVE}!");
+static const u8 sText_PkmnsXRestoredHPALittle2[] = _("{B_ATK_NAME_WITH_PREFIX}’s {B_ATK_ABILITY}\nrestored its HP a little!");
+static const u8 sText_PkmnsXWhippedUpSandstorm[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nwhipped up a sandstorm!");
+static const u8 sText_PkmnsXIntensifiedSun[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nintensified the sun’s rays!");
+static const u8 sText_PkmnsXPreventsYLoss[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nprevents {B_BUFF1} loss!");
+static const u8 sText_PkmnsXInfatuatedY[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\ninfatuated {B_ATK_NAME_WITH_PREFIX}!");
+static const u8 sText_PkmnsXMadeYIneffective[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nmade {B_CURRENT_MOVE} ineffective!");
+static const u8 sText_PkmnsXCuredYProblem[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\ncured its {B_BUFF1} problem!");
+static const u8 sText_ItSuckedLiquidOoze[] = _("It sucked up the\nLIQUID OOZE!");
+static const u8 sText_PkmnTransformed[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} transformed!");
+static const u8 sText_PkmnsXTookAttack[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\ntook the attack!");
const u8 gText_PkmnsXPreventsSwitching[] = _("{B_BUFF1}’s {B_LAST_ABILITY}\nprevents switching!\p");
-const u8 gText_PreventedFromWorking[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nprevented {B_SCR_ACTIVE_NAME_WITH_PREFIX}’s\l{B_BUFF1} from working!");
-const u8 gText_PkmnsXMadeItIneffective[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nmade it ineffective!");
-const u8 gText_PkmnsXPreventsFlinching[] = _("{B_EFF_NAME_WITH_PREFIX}’s {B_EFF_ABILITY}\nprevents flinching!");
-const u8 gText_PkmnsXPreventsYsZ[] = _("{B_ATK_NAME_WITH_PREFIX}’s {B_ATK_ABILITY}\nprevents {B_DEF_NAME_WITH_PREFIX}’s\l{B_DEF_ABILITY} from working!");
-const u8 gText_PkmnsXCuredItsYProblem[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\ncured its {B_BUFF1} problem!");
-const u8 gText_PkmnsXHadNoEffectOnY[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nhad no effect on {B_EFF_NAME_WITH_PREFIX}!");
-const u8 gText_StatSharply[] = _("sharply ");
+static const u8 sText_PreventedFromWorking[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_DEF_ABILITY}\nprevented {B_SCR_ACTIVE_NAME_WITH_PREFIX}’s\l{B_BUFF1} from working!");
+static const u8 sText_PkmnsXMadeItIneffective[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nmade it ineffective!");
+static const u8 sText_PkmnsXPreventsFlinching[] = _("{B_EFF_NAME_WITH_PREFIX}’s {B_EFF_ABILITY}\nprevents flinching!");
+static const u8 sText_PkmnsXPreventsYsZ[] = _("{B_ATK_NAME_WITH_PREFIX}’s {B_ATK_ABILITY}\nprevents {B_DEF_NAME_WITH_PREFIX}’s\l{B_DEF_ABILITY} from working!");
+static const u8 sText_PkmnsXCuredItsYProblem[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\ncured its {B_BUFF1} problem!");
+static const u8 sText_PkmnsXHadNoEffectOnY[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_SCR_ACTIVE_ABILITY}\nhad no effect on {B_EFF_NAME_WITH_PREFIX}!");
+static const u8 sText_StatSharply[] = _("sharply ");
const u8 gText_StatRose[] = _("rose!");
-const u8 gText_StatHarshly[] = _("harshly ");
-const u8 gText_StatFell[] = _("fell!");
-const u8 gText_PkmnsStatChanged[] = _("{B_ATK_NAME_WITH_PREFIX}’s {B_BUFF1}\n{B_BUFF2}");
+static const u8 sText_StatHarshly[] = _("harshly ");
+static const u8 sText_StatFell[] = _("fell!");
+static const u8 sText_PkmnsStatChanged[] = _("{B_ATK_NAME_WITH_PREFIX}’s {B_BUFF1}\n{B_BUFF2}");
const u8 gText_PkmnsStatChanged2[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_BUFF1}\n{B_BUFF2}");
-const u8 gText_UsingXTheYOfZN[] = _("Using {B_LAST_ITEM}, the {B_BUFF1}\nof {B_SCR_ACTIVE_NAME_WITH_PREFIX} {B_BUFF2}");
-const u8 gText_PkmnsStatChanged3[] = _("{B_ATK_NAME_WITH_PREFIX}’s {B_BUFF1}\n{B_BUFF2}");
-const u8 gText_PkmnsStatChanged4[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_BUFF1}\n{B_BUFF2}");
-const u8 gText_StatsWontIncrease2[] = _("{B_ATK_NAME_WITH_PREFIX}’s stats won’t\ngo any higher!");
-const u8 gText_StatsWontDecrease2[] = _("{B_DEF_NAME_WITH_PREFIX}’s stats won’t\ngo any lower!");
-const u8 gText_CriticalHit[] = _("A critical hit!");
-const u8 gText_OneHitKO[] = _("It’s a one-hit KO!");
-const u8 gText_123Poof[] = _("{PAUSE 32}1, {PAUSE 15}2, and{PAUSE 15}… {PAUSE 15}… {PAUSE 15}… {PAUSE 15}{PLAY_SE 0x0038}Poof!\p");
-const u8 gText_AndEllipsis[] = _("And…\p");
-const u8 gText_HMMovesCantBeForgotten[] = _("HM moves can’t be\nforgotten now.\p");
-const u8 gText_NotVeryEffective[] = _("It’s not very effective…");
-const u8 gText_SuperEffective[] = _("It’s super effective!");
-const u8 gText_GotAwaySafely[] = _("{PLAY_SE 0x0011}Got away safely!\p");
-const u8 gText_PkmnFledUsingIts[] = _("{PLAY_SE 0x0011}{B_ATK_NAME_WITH_PREFIX} fled\nusing its {B_LAST_ITEM}!\p");
-const u8 gText_PkmnFledUsing[] = _("{PLAY_SE 0x0011}{B_ATK_NAME_WITH_PREFIX} fled\nusing {B_ATK_ABILITY}!\p");
-const u8 gText_WildPkmnFled[] = _("{PLAY_SE 0x0011}Wild {B_BUFF1} fled!");
-const u8 gText_PlayerDefeatedLinkTrainer[] = _("Player defeated\n{B_20}!");
-const u8 gText_TwoLinkTrainersDefeated[] = _("Player beat {B_20}\nand {B_21}!");
-const u8 gText_PlayerLostAgainstLinkTrainer[] = _("Player lost against\n{B_20}!");
-const u8 gText_PlayerLostToTwo[] = _("Player lost to {B_20}\nand {B_21}!");
-const u8 gText_PlayerBattledToDrawLinkTrainer[] = _("Player battled to a draw against\n{B_20}!");
-const u8 gText_PlayerBattledToDrawVsTwo[] = _("Player battled to a draw against\n{B_20} and {B_21}!");
-const u8 gText_WildFled[] = _("{PLAY_SE 0x0011}{B_20} fled!");
-const u8 gText_TwoWildFled[] = _("{PLAY_SE 0x0011}{B_20} and\n{B_21} fled!");
-const u8 gText_NoRunningFromTrainers[] = _("No! There’s no running\nfrom a TRAINER battle!\p");
-const u8 gText_CantEscape[] = _("Can’t escape!\p");
-const u8 gText_DontLeaveBirch[] = _("PROF. BIRCH: Don’t leave me like this!\p");
-const u8 gText_ButNothingHappened[] = _("But nothing happened!");
-const u8 gText_ButItFailed[] = _("But it failed!");
-const u8 gText_ItHurtConfusion[] = _("It hurt itself in its\nconfusion!");
-const u8 gText_MirrorMoveFailed[] = _("The MIRROR MOVE failed!");
-const u8 gText_StartedToRain[] = _("It started to rain!");
-const u8 gText_DownpourStarted[] = _("A downpour started!");
-const u8 gText_RainContinues[] = _("Rain continues to fall.");
-const u8 gText_DownpourContinues[] = _("The downpour continues.");
-const u8 gText_RainStopped[] = _("The rain stopped.");
-const u8 gText_SandstormBrewed[] = _("A sandstorm brewed!");
-const u8 gText_SandstormRages[] = _("The sandstorm rages.");
-const u8 gText_SandstormSubsided[] = _("The sandstorm subsided.");
-const u8 gText_SunlightGotBright[] = _("The sunlight got bright!");
-const u8 gText_SunlightStrong[] = _("The sunlight is strong.");
-const u8 gText_SunlightFaded[] = _("The sunlight faded.");
-const u8 gText_StartedHail[] = _("It started to hail!");
-const u8 gText_HailContinues[] = _("Hail continues to fall.");
-const u8 gText_HailStopped[] = _("The hail stopped.");
-const u8 gText_FailedToSpitUp[] = _("But it failed to SPIT UP\na thing!");
-const u8 gText_FailedToSwallow[] = _("But it failed to SWALLOW\na thing!");
-const u8 gText_WindBecameHeatWave[] = _("The wind turned into a\nHEAT WAVE!");
-const u8 gText_StatChangesGone[] = _("All stat changes were\neliminated!");
-const u8 gText_CoinsScattered[] = _("Coins scattered everywhere!");
-const u8 gText_TooWeakForSubstitute[] = _("It was too weak to make\na SUBSTITUTE!");
-const u8 gText_SharedPain[] = _("The battlers shared\ntheir pain!");
-const u8 gText_BellChimed[] = _("A bell chimed!");
-const u8 gText_FaintInThree[] = _("All affected POKéMON will\nfaint in three turns!");
-const u8 gText_NoPPLeft[] = _("There’s no PP left for\nthis move!\p");
-const u8 gText_ButNoPPLeft[] = _("But there was no PP left\nfor the move!");
-const u8 gText_PkmnIgnoresAsleep[] = _("{B_ATK_NAME_WITH_PREFIX} ignored\norders while asleep!");
-const u8 gText_PkmnIgnoredOrders[] = _("{B_ATK_NAME_WITH_PREFIX} ignored\norders!");
-const u8 gText_PkmnBeganToNap[] = _("{B_ATK_NAME_WITH_PREFIX} began to nap!");
-const u8 gText_PkmnLoafing[] = _("{B_ATK_NAME_WITH_PREFIX} is\nloafing around!");
-const u8 gText_PkmnWontObey[] = _("{B_ATK_NAME_WITH_PREFIX} won’t\nobey!");
-const u8 gText_PkmnTurnedAway[] = _("{B_ATK_NAME_WITH_PREFIX} turned away!");
-const u8 gText_PkmnPretendNotNotice[] = _("{B_ATK_NAME_WITH_PREFIX} pretended\nnot to notice!");
-const u8 gText_EnemyAboutToSwitchPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} is\nabout to use {B_BUFF2}.\pWill {B_PLAYER_NAME} change\nPOKéMON?");
-const u8 gText_PkmnLearnedMove2[] = _("{B_ATK_NAME_WITH_PREFIX} learned\n{B_BUFF1}!");
-const u8 gText_PlayerDefeatedLinkTrainerTrainer1[] = _("Player defeated\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!\p");
-const u8 gText_CreptCloser[] = _("{B_PLAYER_NAME} crept closer to\n{B_OPPONENT_MON1_NAME}!");
-const u8 gText_CantGetCloser[] = _("{B_PLAYER_NAME} can’t get any closer!");
-const u8 gText_PkmnWatchingCarefully[] = _("{B_OPPONENT_MON1_NAME} is watching\ncarefully!");
-const u8 gText_PkmnCuriousAboutX[] = _("{B_OPPONENT_MON1_NAME} is curious about\nthe {B_BUFF1}!");
-const u8 gText_PkmnEnthralledByX[] = _("{B_OPPONENT_MON1_NAME} is enthralled by\nthe {B_BUFF1}!");
-const u8 gText_PkmnIgnoredX[] = _("{B_OPPONENT_MON1_NAME} completely ignored\nthe {B_BUFF1}!");
-const u8 gText_ThrewPokeblockAtPkmn[] = _("{B_PLAYER_NAME} threw a {POKEBLOCK}\nat the {B_OPPONENT_MON1_NAME}!");
-const u8 gText_OutOfSafariBalls[] = _("{PLAY_SE 0x0049}ANNOUNCER: You’re out of\nSAFARI BALLS! Game over!\p");
-const u8 gText_OpponentMon1Appeared[] = _("{B_OPPONENT_MON1_NAME} appeared!\p");
-const u8 gText_WildPkmnAppeared[] = _("Wild {B_OPPONENT_MON1_NAME} appeared!\p");
-const u8 gText_WildPkmnAppeared2[] = _("Wild {B_OPPONENT_MON1_NAME} appeared!\p");
-const u8 gText_WildPkmnAppearedPause[] = _("Wild {B_OPPONENT_MON1_NAME} appeared!{PAUSE 127}");
-const u8 gText_TwoWildPkmnAppeared[] = _("Wild {B_OPPONENT_MON1_NAME} and\n{B_OPPONENT_MON2_NAME} appeared!\p");
-const u8 gText_Trainer1WantsToBattle[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME}\nwould like to battle!\p");
-const u8 gText_LinkTrainerWantsToBattle[] = _("{B_20}\nwants to battle!");
-const u8 gText_TwoLinkTrainersWantToBattle[] = _("{B_20} and {B_21}\nwant to battle!");
-const u8 gText_Trainer1SentOutPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent\nout {B_OPPONENT_MON1_NAME}!");
-const u8 gText_Trainer1SentOutTwoPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent\nout {B_OPPONENT_MON1_NAME} and {B_OPPONENT_MON2_NAME}!");
-const u8 gText_Trainer1SentOutPkmn2[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent\nout {B_BUFF1}!");
-const u8 gText_LinkTrainerSentOutPkmn[] = _("{B_20} sent out\n{B_OPPONENT_MON1_NAME}!");
-const u8 gText_LinkTrainerSentOutTwoPkmn[] = _("{B_20} sent out\n{B_OPPONENT_MON1_NAME} and {B_OPPONENT_MON2_NAME}!");
-const u8 gText_TwoLinkTrainersSentOutPkmn[] = _("{B_20} sent out {B_LINK_OPPONENT_MON1_NAME}!\n{B_21} sent out {B_LINK_OPPONENT_MON2_NAME}!");
-const u8 gText_LinkTrainerSentOutPkmn2[] = _("{B_20} sent out\n{B_BUFF1}!");
-const u8 gText_LinkTrainerMultiSentOutPkmn[] = _("{B_22} sent out\n{B_BUFF1}!");
-const u8 gText_GoPkmn[] = _("Go! {B_PLAYER_MON1_NAME}!");
-const u8 gText_GoTwoPkmn[] = _("Go! {B_PLAYER_MON1_NAME} and\n{B_PLAYER_MON2_NAME}!");
-const u8 gText_GoPkmn2[] = _("Go! {B_BUFF1}!");
-const u8 gText_DoItPkmn[] = _("Do it! {B_BUFF1}!");
-const u8 gText_GoForItPkmn[] = _("Go for it, {B_BUFF1}!");
-const u8 gText_YourFoesWeakGetEmPkmn[] = _("Your foe’s weak!\nGet ’em, {B_BUFF1}!");
-const u8 gText_LinkPartnerSentOutPkmnGoPkmn[] = _("{B_1F} sent out {B_LINK_PLAYER_MON2_NAME}!\nGo! {B_LINK_PLAYER_MON1_NAME}!");
-const u8 gText_PkmnThatsEnough[] = _("{B_BUFF1}, that’s enough!\nCome back!");
-const u8 gText_PkmnComeBack[] = _("{B_BUFF1}, come back!");
-const u8 gText_PkmnOkComeBack[] = _("{B_BUFF1}, OK!\nCome back!");
-const u8 gText_PkmnGoodComeBack[] = _("{B_BUFF1}, good!\nCome back!");
-const u8 gText_Trainer1WithdrewPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME}\nwithdrew {B_BUFF1}!");
-const u8 gText_LinkTrainer1WithdrewPkmn[] = _("{B_20} withdrew\n{B_BUFF1}!");
-const u8 gText_LinkTrainer2WithdrewPkmn[] = _("{B_22} withdrew\n{B_BUFF1}!");
-const u8 gText_WildPkmnPrefix[] = _("Wild ");
-const u8 gText_FoePkmnPrefix[] = _("Foe ");
-const u8 gText_EmptyString8[] = _( "");
-const u8 gText_FoePkmnPrefix2[] = _("Foe");
-const u8 gText_AllyPkmnPrefix[] = _("Ally");
-const u8 gText_FoePkmnPrefix3[] = _("Foe");
-const u8 gText_AllyPkmnPrefix2[] = _("Ally");
-const u8 gText_FoePkmnPrefix4[] = _("Foe");
-const u8 gText_AllyPkmnPrefix3[] = _("Ally");
-const u8 gText_AttackerUsedX[] = _("{B_ATK_NAME_WITH_PREFIX} used\n{B_BUFF2}");
-const u8 gText_ExclamationMark[] = _("!");
-const u8 gText_ExclamationMark2[] = _("!");
-const u8 gText_ExclamationMark3[] = _("!");
-const u8 gText_ExclamationMark4[] = _("!");
-const u8 gText_ExclamationMark5[] = _("!");
-const u8 gText_HP2[] = _("HP");
-const u8 gText_Attack2[] = _("ATTACK");
-const u8 gText_Defense2[] = _("DEFENSE");
-const u8 gText_Speed[] = _("SPEED");
-const u8 gText_SpAtk2[] = _("SP. ATK");
-const u8 gText_SpDef2[] = _("SP. DEF");
-const u8 gText_Accuracy[] = _("accuracy");
-const u8 gText_Evasiveness[] = _("evasiveness");
+static const u8 sText_UsingXTheYOfZN[] = _("Using {B_LAST_ITEM}, the {B_BUFF1}\nof {B_SCR_ACTIVE_NAME_WITH_PREFIX} {B_BUFF2}");
+static const u8 sText_PkmnsStatChanged3[] = _("{B_ATK_NAME_WITH_PREFIX}’s {B_BUFF1}\n{B_BUFF2}");
+static const u8 sText_PkmnsStatChanged4[] = _("{B_DEF_NAME_WITH_PREFIX}’s {B_BUFF1}\n{B_BUFF2}");
+static const u8 sText_StatsWontIncrease2[] = _("{B_ATK_NAME_WITH_PREFIX}’s stats won’t\ngo any higher!");
+static const u8 sText_StatsWontDecrease2[] = _("{B_DEF_NAME_WITH_PREFIX}’s stats won’t\ngo any lower!");
+static const u8 sText_CriticalHit[] = _("A critical hit!");
+static const u8 sText_OneHitKO[] = _("It’s a one-hit KO!");
+static const u8 sText_123Poof[] = _("{PAUSE 32}1, {PAUSE 15}2, and{PAUSE 15}… {PAUSE 15}… {PAUSE 15}… {PAUSE 15}{PLAY_SE 0x0038}Poof!\p");
+static const u8 sText_AndEllipsis[] = _("And…\p");
+static const u8 sText_HMMovesCantBeForgotten[] = _("HM moves can’t be\nforgotten now.\p");
+static const u8 sText_NotVeryEffective[] = _("It’s not very effective…");
+static const u8 sText_SuperEffective[] = _("It’s super effective!");
+static const u8 sText_GotAwaySafely[] = _("{PLAY_SE 0x0011}Got away safely!\p");
+static const u8 sText_PkmnFledUsingIts[] = _("{PLAY_SE 0x0011}{B_ATK_NAME_WITH_PREFIX} fled\nusing its {B_LAST_ITEM}!\p");
+static const u8 sText_PkmnFledUsing[] = _("{PLAY_SE 0x0011}{B_ATK_NAME_WITH_PREFIX} fled\nusing {B_ATK_ABILITY}!\p");
+static const u8 sText_WildPkmnFled[] = _("{PLAY_SE 0x0011}Wild {B_BUFF1} fled!");
+static const u8 sText_PlayerDefeatedLinkTrainer[] = _("Player defeated\n{B_20}!");
+static const u8 sText_TwoLinkTrainersDefeated[] = _("Player beat {B_20}\nand {B_21}!");
+static const u8 sText_PlayerLostAgainstLinkTrainer[] = _("Player lost against\n{B_20}!");
+static const u8 sText_PlayerLostToTwo[] = _("Player lost to {B_20}\nand {B_21}!");
+static const u8 sText_PlayerBattledToDrawLinkTrainer[] = _("Player battled to a draw against\n{B_20}!");
+static const u8 sText_PlayerBattledToDrawVsTwo[] = _("Player battled to a draw against\n{B_20} and {B_21}!");
+static const u8 sText_WildFled[] = _("{PLAY_SE 0x0011}{B_20} fled!");
+static const u8 sText_TwoWildFled[] = _("{PLAY_SE 0x0011}{B_20} and\n{B_21} fled!");
+static const u8 sText_NoRunningFromTrainers[] = _("No! There’s no running\nfrom a TRAINER battle!\p");
+static const u8 sText_CantEscape[] = _("Can’t escape!\p");
+static const u8 sText_DontLeaveBirch[] = _("PROF. BIRCH: Don’t leave me like this!\p");
+static const u8 sText_ButNothingHappened[] = _("But nothing happened!");
+static const u8 sText_ButItFailed[] = _("But it failed!");
+static const u8 sText_ItHurtConfusion[] = _("It hurt itself in its\nconfusion!");
+static const u8 sText_MirrorMoveFailed[] = _("The MIRROR MOVE failed!");
+static const u8 sText_StartedToRain[] = _("It started to rain!");
+static const u8 sText_DownpourStarted[] = _("A downpour started!");
+static const u8 sText_RainContinues[] = _("Rain continues to fall.");
+static const u8 sText_DownpourContinues[] = _("The downpour continues.");
+static const u8 sText_RainStopped[] = _("The rain stopped.");
+static const u8 sText_SandstormBrewed[] = _("A sandstorm brewed!");
+static const u8 sText_SandstormRages[] = _("The sandstorm rages.");
+static const u8 sText_SandstormSubsided[] = _("The sandstorm subsided.");
+static const u8 sText_SunlightGotBright[] = _("The sunlight got bright!");
+static const u8 sText_SunlightStrong[] = _("The sunlight is strong.");
+static const u8 sText_SunlightFaded[] = _("The sunlight faded.");
+static const u8 sText_StartedHail[] = _("It started to hail!");
+static const u8 sText_HailContinues[] = _("Hail continues to fall.");
+static const u8 sText_HailStopped[] = _("The hail stopped.");
+static const u8 sText_FailedToSpitUp[] = _("But it failed to SPIT UP\na thing!");
+static const u8 sText_FailedToSwallow[] = _("But it failed to SWALLOW\na thing!");
+static const u8 sText_WindBecameHeatWave[] = _("The wind turned into a\nHEAT WAVE!");
+static const u8 sText_StatChangesGone[] = _("All stat changes were\neliminated!");
+static const u8 sText_CoinsScattered[] = _("Coins scattered everywhere!");
+static const u8 sText_TooWeakForSubstitute[] = _("It was too weak to make\na SUBSTITUTE!");
+static const u8 sText_SharedPain[] = _("The battlers shared\ntheir pain!");
+static const u8 sText_BellChimed[] = _("A bell chimed!");
+static const u8 sText_FaintInThree[] = _("All affected POKéMON will\nfaint in three turns!");
+static const u8 sText_NoPPLeft[] = _("There’s no PP left for\nthis move!\p");
+static const u8 sText_ButNoPPLeft[] = _("But there was no PP left\nfor the move!");
+static const u8 sText_PkmnIgnoresAsleep[] = _("{B_ATK_NAME_WITH_PREFIX} ignored\norders while asleep!");
+static const u8 sText_PkmnIgnoredOrders[] = _("{B_ATK_NAME_WITH_PREFIX} ignored\norders!");
+static const u8 sText_PkmnBeganToNap[] = _("{B_ATK_NAME_WITH_PREFIX} began to nap!");
+static const u8 sText_PkmnLoafing[] = _("{B_ATK_NAME_WITH_PREFIX} is\nloafing around!");
+static const u8 sText_PkmnWontObey[] = _("{B_ATK_NAME_WITH_PREFIX} won’t\nobey!");
+static const u8 sText_PkmnTurnedAway[] = _("{B_ATK_NAME_WITH_PREFIX} turned away!");
+static const u8 sText_PkmnPretendNotNotice[] = _("{B_ATK_NAME_WITH_PREFIX} pretended\nnot to notice!");
+static const u8 sText_EnemyAboutToSwitchPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} is\nabout to use {B_BUFF2}.\pWill {B_PLAYER_NAME} change\nPOKéMON?");
+static const u8 sText_PkmnLearnedMove2[] = _("{B_ATK_NAME_WITH_PREFIX} learned\n{B_BUFF1}!");
+static const u8 sText_PlayerDefeatedLinkTrainerTrainer1[] = _("Player defeated\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!\p");
+static const u8 sText_CreptCloser[] = _("{B_PLAYER_NAME} crept closer to\n{B_OPPONENT_MON1_NAME}!");
+static const u8 sText_CantGetCloser[] = _("{B_PLAYER_NAME} can’t get any closer!");
+static const u8 sText_PkmnWatchingCarefully[] = _("{B_OPPONENT_MON1_NAME} is watching\ncarefully!");
+static const u8 sText_PkmnCuriousAboutX[] = _("{B_OPPONENT_MON1_NAME} is curious about\nthe {B_BUFF1}!");
+static const u8 sText_PkmnEnthralledByX[] = _("{B_OPPONENT_MON1_NAME} is enthralled by\nthe {B_BUFF1}!");
+static const u8 sText_PkmnIgnoredX[] = _("{B_OPPONENT_MON1_NAME} completely ignored\nthe {B_BUFF1}!");
+static const u8 sText_ThrewPokeblockAtPkmn[] = _("{B_PLAYER_NAME} threw a {POKEBLOCK}\nat the {B_OPPONENT_MON1_NAME}!");
+static const u8 sText_OutOfSafariBalls[] = _("{PLAY_SE 0x0049}ANNOUNCER: You’re out of\nSAFARI BALLS! Game over!\p");
+static const u8 sText_OpponentMon1Appeared[] = _("{B_OPPONENT_MON1_NAME} appeared!\p");
+static const u8 sText_WildPkmnAppeared[] = _("Wild {B_OPPONENT_MON1_NAME} appeared!\p");
+static const u8 sText_WildPkmnAppeared2[] = _("Wild {B_OPPONENT_MON1_NAME} appeared!\p");
+static const u8 sText_WildPkmnAppearedPause[] = _("Wild {B_OPPONENT_MON1_NAME} appeared!{PAUSE 127}");
+static const u8 sText_TwoWildPkmnAppeared[] = _("Wild {B_OPPONENT_MON1_NAME} and\n{B_OPPONENT_MON2_NAME} appeared!\p");
+static const u8 sText_Trainer1WantsToBattle[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME}\nwould like to battle!\p");
+static const u8 sText_LinkTrainerWantsToBattle[] = _("{B_20}\nwants to battle!");
+static const u8 sText_TwoLinkTrainersWantToBattle[] = _("{B_20} and {B_21}\nwant to battle!");
+static const u8 sText_Trainer1SentOutPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent\nout {B_OPPONENT_MON1_NAME}!");
+static const u8 sText_Trainer1SentOutTwoPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent\nout {B_OPPONENT_MON1_NAME} and {B_OPPONENT_MON2_NAME}!");
+static const u8 sText_Trainer1SentOutPkmn2[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent\nout {B_BUFF1}!");
+static const u8 sText_LinkTrainerSentOutPkmn[] = _("{B_20} sent out\n{B_OPPONENT_MON1_NAME}!");
+static const u8 sText_LinkTrainerSentOutTwoPkmn[] = _("{B_20} sent out\n{B_OPPONENT_MON1_NAME} and {B_OPPONENT_MON2_NAME}!");
+static const u8 sText_TwoLinkTrainersSentOutPkmn[] = _("{B_20} sent out {B_LINK_OPPONENT_MON1_NAME}!\n{B_21} sent out {B_LINK_OPPONENT_MON2_NAME}!");
+static const u8 sText_LinkTrainerSentOutPkmn2[] = _("{B_20} sent out\n{B_BUFF1}!");
+static const u8 sText_LinkTrainerMultiSentOutPkmn[] = _("{B_22} sent out\n{B_BUFF1}!");
+static const u8 sText_GoPkmn[] = _("Go! {B_PLAYER_MON1_NAME}!");
+static const u8 sText_GoTwoPkmn[] = _("Go! {B_PLAYER_MON1_NAME} and\n{B_PLAYER_MON2_NAME}!");
+static const u8 sText_GoPkmn2[] = _("Go! {B_BUFF1}!");
+static const u8 sText_DoItPkmn[] = _("Do it! {B_BUFF1}!");
+static const u8 sText_GoForItPkmn[] = _("Go for it, {B_BUFF1}!");
+static const u8 sText_YourFoesWeakGetEmPkmn[] = _("Your foe’s weak!\nGet ’em, {B_BUFF1}!");
+static const u8 sText_LinkPartnerSentOutPkmnGoPkmn[] = _("{B_1F} sent out {B_LINK_PLAYER_MON2_NAME}!\nGo! {B_LINK_PLAYER_MON1_NAME}!");
+static const u8 sText_PkmnThatsEnough[] = _("{B_BUFF1}, that’s enough!\nCome back!");
+static const u8 sText_PkmnComeBack[] = _("{B_BUFF1}, come back!");
+static const u8 sText_PkmnOkComeBack[] = _("{B_BUFF1}, OK!\nCome back!");
+static const u8 sText_PkmnGoodComeBack[] = _("{B_BUFF1}, good!\nCome back!");
+static const u8 sText_Trainer1WithdrewPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME}\nwithdrew {B_BUFF1}!");
+static const u8 sText_LinkTrainer1WithdrewPkmn[] = _("{B_20} withdrew\n{B_BUFF1}!");
+static const u8 sText_LinkTrainer2WithdrewPkmn[] = _("{B_22} withdrew\n{B_BUFF1}!");
+static const u8 sText_WildPkmnPrefix[] = _("Wild ");
+static const u8 sText_FoePkmnPrefix[] = _("Foe ");
+static const u8 sText_EmptyString8[] = _( "");
+static const u8 sText_FoePkmnPrefix2[] = _("Foe");
+static const u8 sText_AllyPkmnPrefix[] = _("Ally");
+static const u8 sText_FoePkmnPrefix3[] = _("Foe");
+static const u8 sText_AllyPkmnPrefix2[] = _("Ally");
+static const u8 sText_FoePkmnPrefix4[] = _("Foe");
+static const u8 sText_AllyPkmnPrefix3[] = _("Ally");
+static const u8 sText_AttackerUsedX[] = _("{B_ATK_NAME_WITH_PREFIX} used\n{B_BUFF2}");
+static const u8 sText_ExclamationMark[] = _("!");
+static const u8 sText_ExclamationMark2[] = _("!");
+static const u8 sText_ExclamationMark3[] = _("!");
+static const u8 sText_ExclamationMark4[] = _("!");
+static const u8 sText_ExclamationMark5[] = _("!");
+static const u8 sText_HP2[] = _("HP");
+static const u8 sText_Attack2[] = _("ATTACK");
+static const u8 sText_Defense2[] = _("DEFENSE");
+static const u8 sText_Speed[] = _("SPEED");
+static const u8 sText_SpAtk2[] = _("SP. ATK");
+static const u8 sText_SpDef2[] = _("SP. DEF");
+static const u8 sText_Accuracy[] = _("accuracy");
+static const u8 sText_Evasiveness[] = _("evasiveness");
const u8 * const gStatNamesTable[] =
{
- gText_HP2, gText_Attack2, gText_Defense2,
- gText_Speed, gText_SpAtk2, gText_SpDef2,
- gText_Accuracy, gText_Evasiveness
+ sText_HP2, sText_Attack2, sText_Defense2,
+ sText_Speed, sText_SpAtk2, sText_SpDef2,
+ sText_Accuracy, sText_Evasiveness
};
-const u8 gText_PokeblockWasTooSpicy[] = _("was too spicy!");
-const u8 gText_PokeblockWasTooDry[] = _("was too dry!");
-const u8 gText_PokeblockWasTooSweet[] = _("was too sweet!");
-const u8 gText_PokeblockWasTooBitter[] = _("was too bitter!");
-const u8 gText_PokeblockWasTooSour[] = _("was too sour!");
+static const u8 sText_PokeblockWasTooSpicy[] = _("was too spicy!");
+static const u8 sText_PokeblockWasTooDry[] = _("was too dry!");
+static const u8 sText_PokeblockWasTooSweet[] = _("was too sweet!");
+static const u8 sText_PokeblockWasTooBitter[] = _("was too bitter!");
+static const u8 sText_PokeblockWasTooSour[] = _("was too sour!");
const u8 * const gPokeblockWasTooXStringTable[] =
{
- gText_PokeblockWasTooSpicy, gText_PokeblockWasTooDry,
- gText_PokeblockWasTooSweet, gText_PokeblockWasTooBitter,
- gText_PokeblockWasTooSour
+ sText_PokeblockWasTooSpicy, sText_PokeblockWasTooDry,
+ sText_PokeblockWasTooSweet, sText_PokeblockWasTooBitter,
+ sText_PokeblockWasTooSour
};
-const u8 gText_PlayerUsedItem[] = _("{B_PLAYER_NAME} used\n{B_LAST_ITEM}!");
-const u8 gText_WallyUsedItem[] = _("WALLY used\n{B_LAST_ITEM}!");
-const u8 gText_Trainer1UsedItem[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME}\nused {B_LAST_ITEM}!");
-const u8 gText_TrainerBlockedBall[] = _("The TRAINER blocked the BALL!");
-const u8 gText_DontBeAThief[] = _("Don’t be a thief!");
-const u8 gText_ItDodgedBall[] = _("It dodged the thrown BALL!\nThis POKéMON can’t be caught!");
-const u8 gText_YouMissedPkmn[] = _("You missed the POKéMON!");
-const u8 gText_PkmnBrokeFree[] = _("Oh, no!\nThe POKéMON broke free!");
-const u8 gText_ItAppearedCaught[] = _("Aww!\nIt appeared to be caught!");
-const u8 gText_AarghAlmostHadIt[] = _("Aargh!\nAlmost had it!");
-const u8 gText_ShootSoClose[] = _("Shoot!\nIt was so close, too!");
-const u8 gText_GotchaPkmnCaught[] = _("Gotcha!\n{B_OPPONENT_MON1_NAME} was caught!{UNKNOWN_A}{PLAY_BGM MUS_KACHI22}\p");
-const u8 gText_GotchaPkmnCaught2[] = _("Gotcha!\n{B_OPPONENT_MON1_NAME} was caught!{UNKNOWN_A}{PLAY_BGM MUS_KACHI22}{PAUSE 127}");
-const u8 gText_GiveNicknameCaptured[] = _("Give a nickname to the\ncaptured {B_OPPONENT_MON1_NAME}?");
-const u8 gText_PkmnSentToPC[] = _("{B_OPPONENT_MON1_NAME} was sent to\n{B_PC_CREATOR_NAME} PC.");
-const u8 gText_Someones[] = _("someone’s");
-const u8 gText_Lanettes[] = _("LANETTE’s");
-const u8 gText_PkmnDataAddedToDex[] = _("{B_OPPONENT_MON1_NAME}’s data was\nadded to the POKéDEX.\p");
-const u8 gText_ItIsRaining[] = _("It is raining.");
-const u8 gText_SandstormIsRaging[] = _("A sandstorm is raging.");
-const u8 gText_BoxIsFull[] = _("The BOX is full!\nYou can’t catch any more!\p");
-const u8 gText_EnigmaBerry[] = _("ENIGMA BERRY");
-const u8 gText_BerrySuffix[] = _(" BERRY");
-const u8 gText_PkmnsItemCuredParalysis[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\ncured paralysis!");
-const u8 gText_PkmnsItemCuredPoison[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\ncured poison!");
-const u8 gText_PkmnsItemHealedBurn[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\nhealed its burn!");
-const u8 gText_PkmnsItemDefrostedIt[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\ndefrosted it!");
-const u8 gText_PkmnsItemWokeIt[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\nwoke it from its sleep!");
-const u8 gText_PkmnsItemSnappedOut[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\nsnapped it out of confusion!");
-const u8 gText_PkmnsItemCuredProblem[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\ncured its {B_BUFF1} problem!");
-const u8 gText_PkmnsItemNormalizedStatus[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\nnormalized its status!");
-const u8 gText_PkmnsItemRestoredHealth[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\nrestored health!");
-const u8 gText_PkmnsItemRestoredPP[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\nrestored {B_BUFF1}’s PP!");
-const u8 gText_PkmnsItemRestoredStatus[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\nrestored its status!");
-const u8 gText_PkmnsItemRestoredHPALittle[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\nrestored its HP a little!");
-const u8 gText_ItemAllowsOnlyYMove[] = _("{B_LAST_ITEM} allows the\nuse of only {B_CURRENT_MOVE}!\p");
-const u8 gText_PkmnHungOnWithX[] = _("{B_DEF_NAME_WITH_PREFIX} hung on\nusing its {B_LAST_ITEM}!");
+static const u8 sText_PlayerUsedItem[] = _("{B_PLAYER_NAME} used\n{B_LAST_ITEM}!");
+static const u8 sText_WallyUsedItem[] = _("WALLY used\n{B_LAST_ITEM}!");
+static const u8 sText_Trainer1UsedItem[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME}\nused {B_LAST_ITEM}!");
+static const u8 sText_TrainerBlockedBall[] = _("The TRAINER blocked the BALL!");
+static const u8 sText_DontBeAThief[] = _("Don’t be a thief!");
+static const u8 sText_ItDodgedBall[] = _("It dodged the thrown BALL!\nThis POKéMON can’t be caught!");
+static const u8 sText_YouMissedPkmn[] = _("You missed the POKéMON!");
+static const u8 sText_PkmnBrokeFree[] = _("Oh, no!\nThe POKéMON broke free!");
+static const u8 sText_ItAppearedCaught[] = _("Aww!\nIt appeared to be caught!");
+static const u8 sText_AarghAlmostHadIt[] = _("Aargh!\nAlmost had it!");
+static const u8 sText_ShootSoClose[] = _("Shoot!\nIt was so close, too!");
+static const u8 sText_GotchaPkmnCaught[] = _("Gotcha!\n{B_OPPONENT_MON1_NAME} was caught!{UNKNOWN_A}{PLAY_BGM MUS_KACHI22}\p");
+static const u8 sText_GotchaPkmnCaught2[] = _("Gotcha!\n{B_OPPONENT_MON1_NAME} was caught!{UNKNOWN_A}{PLAY_BGM MUS_KACHI22}{PAUSE 127}");
+static const u8 sText_GiveNicknameCaptured[] = _("Give a nickname to the\ncaptured {B_OPPONENT_MON1_NAME}?");
+static const u8 sText_PkmnSentToPC[] = _("{B_OPPONENT_MON1_NAME} was sent to\n{B_PC_CREATOR_NAME} PC.");
+static const u8 sText_Someones[] = _("someone’s");
+static const u8 sText_Lanettes[] = _("LANETTE’s");
+static const u8 sText_PkmnDataAddedToDex[] = _("{B_OPPONENT_MON1_NAME}’s data was\nadded to the POKéDEX.\p");
+static const u8 sText_ItIsRaining[] = _("It is raining.");
+static const u8 sText_SandstormIsRaging[] = _("A sandstorm is raging.");
+static const u8 sText_BoxIsFull[] = _("The BOX is full!\nYou can’t catch any more!\p");
+static const u8 sText_EnigmaBerry[] = _("ENIGMA BERRY");
+static const u8 sText_BerrySuffix[] = _(" BERRY");
+static const u8 sText_PkmnsItemCuredParalysis[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\ncured paralysis!");
+static const u8 sText_PkmnsItemCuredPoison[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\ncured poison!");
+static const u8 sText_PkmnsItemHealedBurn[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\nhealed its burn!");
+static const u8 sText_PkmnsItemDefrostedIt[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\ndefrosted it!");
+static const u8 sText_PkmnsItemWokeIt[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\nwoke it from its sleep!");
+static const u8 sText_PkmnsItemSnappedOut[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\nsnapped it out of confusion!");
+static const u8 sText_PkmnsItemCuredProblem[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\ncured its {B_BUFF1} problem!");
+static const u8 sText_PkmnsItemNormalizedStatus[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\nnormalized its status!");
+static const u8 sText_PkmnsItemRestoredHealth[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\nrestored health!");
+static const u8 sText_PkmnsItemRestoredPP[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\nrestored {B_BUFF1}’s PP!");
+static const u8 sText_PkmnsItemRestoredStatus[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\nrestored its status!");
+static const u8 sText_PkmnsItemRestoredHPALittle[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s {B_LAST_ITEM}\nrestored its HP a little!");
+static const u8 sText_ItemAllowsOnlyYMove[] = _("{B_LAST_ITEM} allows the\nuse of only {B_CURRENT_MOVE}!\p");
+static const u8 sText_PkmnHungOnWithX[] = _("{B_DEF_NAME_WITH_PREFIX} hung on\nusing its {B_LAST_ITEM}!");
const u8 gText_EmptyString3[] = _("");
-const u8 gText_YouThrowABallNowRight[] = _("You throw a BALL now, right?\nI… I’ll do my best!");
+static const u8 sText_YouThrowABallNowRight[] = _("You throw a BALL now, right?\nI… I’ll do my best!");
// early declaration of strings
-const u8 gText_PkmnIncapableOfPower[];
-const u8 gText_GlintAppearsInEye[];
-const u8 gText_PkmnGettingIntoPosition[];
-const u8 gText_PkmnBeganGrowlingDeeply[];
-const u8 gText_PkmnEagerForMore[];
-const u8 gText_DefeatedOpponentByReferee[];
-const u8 gText_LostToOpponentByReferee[];
-const u8 gText_TiedOpponentByReferee[];
-const u8 gText_QuestionForfeitMatch[];
-const u8 gText_ForfeitedMatch[];
-const u8 gText_Trainer1WinText[];
-const u8 gText_Trainer2WinText[];
-const u8 gText_TwoInGameTrainersDefeated[];
-const u8 gText_Trainer2LoseText[];
+static const u8 sText_PkmnIncapableOfPower[];
+static const u8 sText_GlintAppearsInEye[];
+static const u8 sText_PkmnGettingIntoPosition[];
+static const u8 sText_PkmnBeganGrowlingDeeply[];
+static const u8 sText_PkmnEagerForMore[];
+static const u8 sText_DefeatedOpponentByReferee[];
+static const u8 sText_LostToOpponentByReferee[];
+static const u8 sText_TiedOpponentByReferee[];
+static const u8 sText_QuestionForfeitMatch[];
+static const u8 sText_ForfeitedMatch[];
+static const u8 sText_Trainer1WinText[];
+static const u8 sText_Trainer2WinText[];
+static const u8 sText_TwoInGameTrainersDefeated[];
+static const u8 sText_Trainer2LoseText[];
const u8 * const gBattleStringsTable[BATTLESTRINGS_COUNT] =
{
- gText_Trainer1LoseText,
- gText_PkmnGainedEXP,
- gText_PkmnGrewToLv,
- gText_PkmnLearnedMove,
- gText_TryToLearnMove1,
- gText_TryToLearnMove2,
- gText_TryToLearnMove3,
- gText_PkmnForgotMove,
- gText_StopLearningMove,
- gText_DidNotLearnMove,
- gText_PkmnLearnedMove2,
- gText_AttackMissed,
- gText_PkmnProtectedItself,
- gText_StatsWontIncrease2,
- gText_AvoidedDamage,
- gText_ItDoesntAffect,
- gText_AttackerFainted,
- gText_TargetFainted,
- gText_PlayerGotMoney,
- gText_PlayerWhiteout,
- gText_PlayerWhiteout2,
- gText_PreventsEscape,
- gText_HitXTimes,
- gText_PkmnFellAsleep,
- gText_PkmnMadeSleep,
- gText_PkmnAlreadyAsleep,
- gText_PkmnAlreadyAsleep2,
- gText_PkmnWasntAffected,
- gText_PkmnWasPoisoned,
- gText_PkmnPoisonedBy,
- gText_PkmnHurtByPoison,
- gText_PkmnAlreadyPoisoned,
- gText_PkmnBadlyPoisoned,
- gText_PkmnEnergyDrained,
- gText_PkmnWasBurned,
- gText_PkmnBurnedBy,
- gText_PkmnHurtByBurn,
- gText_PkmnWasFrozen,
- gText_PkmnFrozenBy,
- gText_PkmnIsFrozen,
- gText_PkmnWasDefrosted,
- gText_PkmnWasDefrosted2,
- gText_PkmnWasDefrostedBy,
- gText_PkmnWasParalyzed,
- gText_PkmnWasParalyzedBy,
- gText_PkmnIsParalyzed,
- gText_PkmnIsAlreadyParalyzed,
- gText_PkmnHealedParalysis,
- gText_PkmnDreamEaten,
- gText_StatsWontIncrease,
- gText_StatsWontDecrease,
- gText_TeamStoppedWorking,
- gText_FoeStoppedWorking,
- gText_PkmnIsConfused,
- gText_PkmnHealedConfusion,
- gText_PkmnWasConfused,
- gText_PkmnAlreadyConfused,
- gText_PkmnFellInLove,
- gText_PkmnInLove,
- gText_PkmnImmobilizedByLove,
- gText_PkmnBlownAway,
- gText_PkmnChangedType,
- gText_PkmnFlinched,
- gText_PkmnRegainedHealth,
- gText_PkmnHPFull,
- gText_PkmnRaisedSpDef,
- gText_PkmnRaisedDef,
- gText_PkmnCoveredByVeil,
- gText_PkmnUsedSafeguard,
- gText_PkmnSafeguardExpired,
- gText_PkmnWentToSleep,
- gText_PkmnSleptHealthy,
- gText_PkmnWhippedWhirlwind,
- gText_PkmnTookSunlight,
- gText_PkmnLoweredHead,
- gText_PkmnIsGlowing,
- gText_PkmnFlewHigh,
- gText_PkmnDugHole,
- gText_PkmnSqueezedByBind,
- gText_PkmnTrappedInVortex,
- gText_PkmnWrappedBy,
- gText_PkmnClamped,
- gText_PkmnHurtBy,
- gText_PkmnFreedFrom,
- gText_PkmnCrashed,
- gText_PkmnShroudedInMist,
- gText_PkmnProtectedByMist,
- gText_PkmnGettingPumped,
- gText_PkmnHitWithRecoil,
- gText_PkmnProtectedItself2,
- gText_PkmnBuffetedBySandstorm,
- gText_PkmnPeltedByHail,
- gText_PkmnSeeded,
- gText_PkmnEvadedAttack,
- gText_PkmnSappedByLeechSeed,
- gText_PkmnFastAsleep,
- gText_PkmnWokeUp,
- gText_PkmnUproarKeptAwake,
- gText_PkmnWokeUpInUproar,
- gText_PkmnCausedUproar,
- gText_PkmnMakingUproar,
- gText_PkmnCalmedDown,
- gText_PkmnCantSleepInUproar,
- gText_PkmnStockpiled,
- gText_PkmnCantStockpile,
- gText_PkmnCantSleepInUproar2,
- gText_UproarKeptPkmnAwake,
- gText_PkmnStayedAwakeUsing,
- gText_PkmnStoringEnergy,
- gText_PkmnUnleashedEnergy,
- gText_PkmnFatigueConfusion,
- gText_PkmnPickedUpItem,
- gText_PkmnUnaffected,
- gText_PkmnTransformedInto,
- gText_PkmnMadeSubstitute,
- gText_PkmnHasSubstitute,
- gText_SubstituteDamaged,
- gText_PkmnSubstituteFaded,
- gText_PkmnMustRecharge,
- gText_PkmnRageBuilding,
- gText_PkmnMoveWasDisabled,
- gText_PkmnMoveIsDisabled,
- gText_PkmnMoveDisabledNoMore,
- gText_PkmnGotEncore,
- gText_PkmnEncoreEnded,
- gText_PkmnTookAim,
- gText_PkmnSketchedMove,
- gText_PkmnTryingToTakeFoe,
- gText_PkmnTookFoe,
- gText_PkmnReducedPP,
- gText_PkmnStoleItem,
- gText_TargetCantEscapeNow,
- gText_PkmnFellIntoNightmare,
- gText_PkmnLockedInNightmare,
- gText_PkmnLaidCurse,
- gText_PkmnAfflictedByCurse,
- gText_SpikesScattered,
- gText_PkmnHurtBySpikes,
- gText_PkmnIdentified,
- gText_PkmnPerishCountFell,
- gText_PkmnBracedItself,
- gText_PkmnEnduredHit,
- gText_MagnitudeStrength,
- gText_PkmnCutHPMaxedAttack,
- gText_PkmnCopiedStatChanges,
- gText_PkmnGotFree,
- gText_PkmnShedLeechSeed,
- gText_PkmnBlewAwaySpikes,
- gText_PkmnFledFromBattle,
- gText_PkmnForesawAttack,
- gText_PkmnTookAttack,
- gText_PkmnAttack,
- gText_PkmnCenterAttention,
- gText_PkmnChargingPower,
- gText_NaturePowerTurnedInto,
- gText_PkmnStatusNormal,
- gText_PkmnHasNoMovesLeft,
- gText_PkmnSubjectedToTorment,
- gText_PkmnCantUseMoveTorment,
- gText_PkmnTighteningFocus,
- gText_PkmnFellForTaunt,
- gText_PkmnCantUseMoveTaunt,
- gText_PkmnReadyToHelp,
- gText_PkmnSwitchedItems,
- gText_PkmnCopiedFoe,
- gText_PkmnMadeWish,
- gText_PkmnWishCameTrue,
- gText_PkmnPlantedRoots,
- gText_PkmnAbsorbedNutrients,
- gText_PkmnAnchoredItself,
- gText_PkmnWasMadeDrowsy,
- gText_PkmnKnockedOff,
- gText_PkmnSwappedAbilities,
- gText_PkmnSealedOpponentMove,
- gText_PkmnCantUseMoveSealed,
- gText_PkmnWantsGrudge,
- gText_PkmnLostPPGrudge,
- gText_PkmnShroudedItself,
- gText_PkmnMoveBounced,
- gText_PkmnWaitsForTarget,
- gText_PkmnSnatchedMove,
- gText_PkmnMadeItRain,
- gText_PkmnRaisedSpeed,
- gText_PkmnProtectedBy,
- gText_PkmnPreventsUsage,
- gText_PkmnRestoredHPUsing,
- gText_PkmnChangedTypeWith,
- gText_PkmnPreventsParalysisWith,
- gText_PkmnPreventsRomanceWith,
- gText_PkmnPreventsPoisoningWith,
- gText_PkmnPreventsConfusionWith,
- gText_PkmnRaisedFirePowerWith,
- gText_PkmnAnchorsItselfWith,
- gText_PkmnCutsAttackWith,
- gText_PkmnPreventsStatLossWith,
- gText_PkmnHurtsWith,
- gText_PkmnTraced,
- gText_StatSharply,
- gText_StatRose,
- gText_StatHarshly,
- gText_StatFell,
- gText_PkmnsStatChanged,
- gText_PkmnsStatChanged2,
- gText_PkmnsStatChanged3,
- gText_PkmnsStatChanged4,
- gText_CriticalHit,
- gText_OneHitKO,
- gText_123Poof,
- gText_AndEllipsis,
- gText_NotVeryEffective,
- gText_SuperEffective,
- gText_GotAwaySafely,
- gText_WildPkmnFled,
- gText_NoRunningFromTrainers,
- gText_CantEscape,
- gText_DontLeaveBirch,
- gText_ButNothingHappened,
- gText_ButItFailed,
- gText_ItHurtConfusion,
- gText_MirrorMoveFailed,
- gText_StartedToRain,
- gText_DownpourStarted,
- gText_RainContinues,
- gText_DownpourContinues,
- gText_RainStopped,
- gText_SandstormBrewed,
- gText_SandstormRages,
- gText_SandstormSubsided,
- gText_SunlightGotBright,
- gText_SunlightStrong,
- gText_SunlightFaded,
- gText_StartedHail,
- gText_HailContinues,
- gText_HailStopped,
- gText_FailedToSpitUp,
- gText_FailedToSwallow,
- gText_WindBecameHeatWave,
- gText_StatChangesGone,
- gText_CoinsScattered,
- gText_TooWeakForSubstitute,
- gText_SharedPain,
- gText_BellChimed,
- gText_FaintInThree,
- gText_NoPPLeft,
- gText_ButNoPPLeft,
- gText_PlayerUsedItem,
- gText_WallyUsedItem,
- gText_TrainerBlockedBall,
- gText_DontBeAThief,
- gText_ItDodgedBall,
- gText_YouMissedPkmn,
- gText_PkmnBrokeFree,
- gText_ItAppearedCaught,
- gText_AarghAlmostHadIt,
- gText_ShootSoClose,
- gText_GotchaPkmnCaught,
- gText_GotchaPkmnCaught2,
- gText_GiveNicknameCaptured,
- gText_PkmnSentToPC,
- gText_PkmnDataAddedToDex,
- gText_ItIsRaining,
- gText_SandstormIsRaging,
- gText_CantEscape2,
- gText_PkmnIgnoresAsleep,
- gText_PkmnIgnoredOrders,
- gText_PkmnBeganToNap,
- gText_PkmnLoafing,
- gText_PkmnWontObey,
- gText_PkmnTurnedAway,
- gText_PkmnPretendNotNotice,
- gText_EnemyAboutToSwitchPkmn,
- gText_CreptCloser,
- gText_CantGetCloser,
- gText_PkmnWatchingCarefully,
- gText_PkmnCuriousAboutX,
- gText_PkmnEnthralledByX,
- gText_PkmnIgnoredX,
- gText_ThrewPokeblockAtPkmn,
- gText_OutOfSafariBalls,
- gText_PkmnsItemCuredParalysis,
- gText_PkmnsItemCuredPoison,
- gText_PkmnsItemHealedBurn,
- gText_PkmnsItemDefrostedIt,
- gText_PkmnsItemWokeIt,
- gText_PkmnsItemSnappedOut,
- gText_PkmnsItemCuredProblem,
- gText_PkmnsItemRestoredHealth,
- gText_PkmnsItemRestoredPP,
- gText_PkmnsItemRestoredStatus,
- gText_PkmnsItemRestoredHPALittle,
- gText_ItemAllowsOnlyYMove,
- gText_PkmnHungOnWithX,
- gText_EmptyString3,
- gText_PkmnsXPreventsBurns,
- gText_PkmnsXBlocksY,
- gText_PkmnsXRestoredHPALittle2,
- gText_PkmnsXWhippedUpSandstorm,
- gText_PkmnsXPreventsYLoss,
- gText_PkmnsXInfatuatedY,
- gText_PkmnsXMadeYIneffective,
- gText_PkmnsXCuredYProblem,
- gText_ItSuckedLiquidOoze,
- gText_PkmnTransformed,
- gText_ElectricityWeakened,
- gText_FireWeakened,
- gText_PkmnHidUnderwater,
- gText_PkmnSprangUp,
- gText_HMMovesCantBeForgotten,
- gText_XFoundOneY,
- gText_PlayerDefeatedLinkTrainerTrainer1,
- gText_SoothingAroma,
- gText_ItemsCantBeUsedNow,
- gText_ForXCommaYZ,
- gText_UsingXTheYOfZN,
- gText_PkmnUsedXToGetPumped,
- gText_PkmnsXMadeYUseless,
- gText_PkmnTrappedBySandTomb,
- gText_EmptyString4,
- gText_ABoosted,
- gText_PkmnsXIntensifiedSun,
- gText_PkmnMakesGroundMiss,
- gText_YouThrowABallNowRight,
- gText_PkmnsXTookAttack,
- gText_PkmnChoseXAsDestiny,
- gText_PkmnLostFocus,
- gText_UseNextPkmn,
- gText_PkmnFledUsingIts,
- gText_PkmnFledUsing,
- gText_PkmnWasDraggedOut,
- gText_PreventedFromWorking,
- gText_PkmnsItemNormalizedStatus,
- gText_Trainer1UsedItem,
- gText_BoxIsFull,
- gText_PkmnAvoidedAttack,
- gText_PkmnsXMadeItIneffective,
- gText_PkmnsXPreventsFlinching,
- gText_PkmnAlreadyHasBurn,
- gText_StatsWontDecrease2,
- gText_PkmnsXBlocksY2,
- gText_PkmnsXWoreOff,
- gText_PkmnRaisedDefALittle,
- gText_PkmnRaisedSpDefALittle,
- gText_TheWallShattered,
- gText_PkmnsXPreventsYsZ,
- gText_PkmnsXCuredItsYProblem,
- gText_AttackerCantEscape,
- gText_PkmnObtainedX,
- gText_PkmnObtainedX2,
- gText_PkmnObtainedXYObtainedZ,
- gText_ButNoEffect,
- gText_PkmnsXHadNoEffectOnY,
- gText_TwoInGameTrainersDefeated,
- gText_Trainer2LoseText,
- gText_PkmnIncapableOfPower,
- gText_GlintAppearsInEye,
- gText_PkmnGettingIntoPosition,
- gText_PkmnBeganGrowlingDeeply,
- gText_PkmnEagerForMore,
- gText_DefeatedOpponentByReferee,
- gText_LostToOpponentByReferee,
- gText_TiedOpponentByReferee,
- gText_QuestionForfeitMatch,
- gText_ForfeitedMatch,
- gText_PkmnTransferredSomeonesPC,
- gText_PkmnTransferredLanettesPC,
- gText_PkmnBoxSomeonesPCFull,
- gText_PkmnBoxLanettesPCFull,
- gText_Trainer1WinText,
- gText_Trainer2WinText,
+ sText_Trainer1LoseText, // 12
+ sText_PkmnGainedEXP, // 13
+ sText_PkmnGrewToLv, // 14
+ sText_PkmnLearnedMove, // 15
+ sText_TryToLearnMove1, // 16
+ sText_TryToLearnMove2, // 17
+ sText_TryToLearnMove3, // 18
+ sText_PkmnForgotMove, // 19
+ sText_StopLearningMove, // 20
+ sText_DidNotLearnMove, // 21
+ sText_PkmnLearnedMove2, // 22
+ sText_AttackMissed, // 23
+ sText_PkmnProtectedItself, // 24
+ sText_StatsWontIncrease2, // 25
+ sText_AvoidedDamage, // 26
+ sText_ItDoesntAffect, // 27
+ sText_AttackerFainted, // 28
+ sText_TargetFainted, // 29
+ sText_PlayerGotMoney, // 30
+ sText_PlayerWhiteout, // 31
+ sText_PlayerWhiteout2, // 32
+ sText_PreventsEscape, // 33
+ sText_HitXTimes, // 34
+ sText_PkmnFellAsleep, // 35
+ sText_PkmnMadeSleep, // 36
+ sText_PkmnAlreadyAsleep, // 37
+ sText_PkmnAlreadyAsleep2, // 38
+ sText_PkmnWasntAffected, // 39
+ sText_PkmnWasPoisoned, // 40
+ sText_PkmnPoisonedBy, // 41
+ sText_PkmnHurtByPoison, // 42
+ sText_PkmnAlreadyPoisoned, // 43
+ sText_PkmnBadlyPoisoned, // 44
+ sText_PkmnEnergyDrained, // 45
+ sText_PkmnWasBurned, // 46
+ sText_PkmnBurnedBy, // 47
+ sText_PkmnHurtByBurn, // 48
+ sText_PkmnWasFrozen, // 49
+ sText_PkmnFrozenBy, // 50
+ sText_PkmnIsFrozen, // 51
+ sText_PkmnWasDefrosted, // 52
+ sText_PkmnWasDefrosted2, // 53
+ sText_PkmnWasDefrostedBy, // 54
+ sText_PkmnWasParalyzed, // 55
+ sText_PkmnWasParalyzedBy, // 56
+ sText_PkmnIsParalyzed, // 57
+ sText_PkmnIsAlreadyParalyzed, // 58
+ sText_PkmnHealedParalysis, // 59
+ sText_PkmnDreamEaten, // 60
+ sText_StatsWontIncrease, // 61
+ sText_StatsWontDecrease, // 62
+ sText_TeamStoppedWorking, // 63
+ sText_FoeStoppedWorking, // 64
+ sText_PkmnIsConfused, // 65
+ sText_PkmnHealedConfusion, // 66
+ sText_PkmnWasConfused, // 67
+ sText_PkmnAlreadyConfused, // 68
+ sText_PkmnFellInLove, // 69
+ sText_PkmnInLove, // 70
+ sText_PkmnImmobilizedByLove, // 71
+ sText_PkmnBlownAway, // 72
+ sText_PkmnChangedType, // 73
+ sText_PkmnFlinched, // 74
+ sText_PkmnRegainedHealth, // 75
+ sText_PkmnHPFull, // 76
+ sText_PkmnRaisedSpDef, // 77
+ sText_PkmnRaisedDef, // 78
+ sText_PkmnCoveredByVeil, // 79
+ sText_PkmnUsedSafeguard, // 80
+ sText_PkmnSafeguardExpired, // 81
+ sText_PkmnWentToSleep, // 82
+ sText_PkmnSleptHealthy, // 83
+ sText_PkmnWhippedWhirlwind, // 84
+ sText_PkmnTookSunlight, // 85
+ sText_PkmnLoweredHead, // 86
+ sText_PkmnIsGlowing, // 87
+ sText_PkmnFlewHigh, // 88
+ sText_PkmnDugHole, // 89
+ sText_PkmnSqueezedByBind, // 90
+ sText_PkmnTrappedInVortex, // 91
+ sText_PkmnWrappedBy, // 92
+ sText_PkmnClamped, // 93
+ sText_PkmnHurtBy, // 94
+ sText_PkmnFreedFrom, // 95
+ sText_PkmnCrashed, // 96
+ gText_PkmnShroudedInMist, // 97
+ sText_PkmnProtectedByMist, // 98
+ gText_PkmnGettingPumped, // 99
+ sText_PkmnHitWithRecoil, // 100
+ sText_PkmnProtectedItself2, // 101
+ sText_PkmnBuffetedBySandstorm, // 102
+ sText_PkmnPeltedByHail, // 103
+ sText_PkmnSeeded, // 104
+ sText_PkmnEvadedAttack, // 105
+ sText_PkmnSappedByLeechSeed, // 106
+ sText_PkmnFastAsleep, // 107
+ sText_PkmnWokeUp, // 108
+ sText_PkmnUproarKeptAwake, // 109
+ sText_PkmnWokeUpInUproar, // 110
+ sText_PkmnCausedUproar, // 111
+ sText_PkmnMakingUproar, // 112
+ sText_PkmnCalmedDown, // 113
+ sText_PkmnCantSleepInUproar, // 114
+ sText_PkmnStockpiled, // 115
+ sText_PkmnCantStockpile, // 116
+ sText_PkmnCantSleepInUproar2, // 117
+ sText_UproarKeptPkmnAwake, // 118
+ sText_PkmnStayedAwakeUsing, // 119
+ sText_PkmnStoringEnergy, // 120
+ sText_PkmnUnleashedEnergy, // 121
+ sText_PkmnFatigueConfusion, // 122
+ sText_PkmnPickedUpItem, // 123
+ sText_PkmnUnaffected, // 124
+ sText_PkmnTransformedInto, // 125
+ sText_PkmnMadeSubstitute, // 126
+ sText_PkmnHasSubstitute, // 127
+ sText_SubstituteDamaged, // 128
+ sText_PkmnSubstituteFaded, // 129
+ sText_PkmnMustRecharge, // 130
+ sText_PkmnRageBuilding, // 131
+ sText_PkmnMoveWasDisabled, // 132
+ sText_PkmnMoveIsDisabled, // 133
+ sText_PkmnMoveDisabledNoMore, // 134
+ sText_PkmnGotEncore, // 135
+ sText_PkmnEncoreEnded, // 136
+ sText_PkmnTookAim, // 137
+ sText_PkmnSketchedMove, // 138
+ sText_PkmnTryingToTakeFoe, // 139
+ sText_PkmnTookFoe, // 140
+ sText_PkmnReducedPP, // 141
+ sText_PkmnStoleItem, // 142
+ sText_TargetCantEscapeNow, // 143
+ sText_PkmnFellIntoNightmare, // 144
+ sText_PkmnLockedInNightmare, // 145
+ sText_PkmnLaidCurse, // 146
+ sText_PkmnAfflictedByCurse, // 147
+ sText_SpikesScattered, // 148
+ sText_PkmnHurtBySpikes, // 149
+ sText_PkmnIdentified, // 150
+ sText_PkmnPerishCountFell, // 151
+ sText_PkmnBracedItself, // 152
+ sText_PkmnEnduredHit, // 153
+ sText_MagnitudeStrength, // 154
+ sText_PkmnCutHPMaxedAttack, // 155
+ sText_PkmnCopiedStatChanges, // 156
+ sText_PkmnGotFree, // 157
+ sText_PkmnShedLeechSeed, // 158
+ sText_PkmnBlewAwaySpikes, // 159
+ sText_PkmnFledFromBattle, // 160
+ sText_PkmnForesawAttack, // 161
+ sText_PkmnTookAttack, // 162
+ sText_PkmnAttack, // 163
+ sText_PkmnCenterAttention, // 164
+ sText_PkmnChargingPower, // 165
+ sText_NaturePowerTurnedInto, // 166
+ sText_PkmnStatusNormal, // 167
+ sText_PkmnHasNoMovesLeft, // 168
+ sText_PkmnSubjectedToTorment, // 169
+ sText_PkmnCantUseMoveTorment, // 170
+ sText_PkmnTighteningFocus, // 171
+ sText_PkmnFellForTaunt, // 172
+ sText_PkmnCantUseMoveTaunt, // 173
+ sText_PkmnReadyToHelp, // 174
+ sText_PkmnSwitchedItems, // 175
+ sText_PkmnCopiedFoe, // 176
+ sText_PkmnMadeWish, // 177
+ sText_PkmnWishCameTrue, // 178
+ sText_PkmnPlantedRoots, // 179
+ sText_PkmnAbsorbedNutrients, // 180
+ sText_PkmnAnchoredItself, // 181
+ sText_PkmnWasMadeDrowsy, // 182
+ sText_PkmnKnockedOff, // 183
+ sText_PkmnSwappedAbilities, // 184
+ sText_PkmnSealedOpponentMove, // 185
+ sText_PkmnCantUseMoveSealed, // 186
+ sText_PkmnWantsGrudge, // 187
+ sText_PkmnLostPPGrudge, // 188
+ sText_PkmnShroudedItself, // 189
+ sText_PkmnMoveBounced, // 190
+ sText_PkmnWaitsForTarget, // 191
+ sText_PkmnSnatchedMove, // 192
+ sText_PkmnMadeItRain, // 193
+ sText_PkmnRaisedSpeed, // 194
+ sText_PkmnProtectedBy, // 195
+ sText_PkmnPreventsUsage, // 196
+ sText_PkmnRestoredHPUsing, // 197
+ sText_PkmnChangedTypeWith, // 198
+ sText_PkmnPreventsParalysisWith, // 199
+ sText_PkmnPreventsRomanceWith, // 200
+ sText_PkmnPreventsPoisoningWith, // 201
+ sText_PkmnPreventsConfusionWith, // 202
+ sText_PkmnRaisedFirePowerWith, // 203
+ sText_PkmnAnchorsItselfWith, // 204
+ sText_PkmnCutsAttackWith, // 205
+ sText_PkmnPreventsStatLossWith, // 206
+ sText_PkmnHurtsWith, // 207
+ sText_PkmnTraced, // 208
+ sText_StatSharply, // 209
+ gText_StatRose, // 210
+ sText_StatHarshly, // 211
+ sText_StatFell, // 212
+ sText_PkmnsStatChanged, // 213
+ gText_PkmnsStatChanged2, // 214
+ sText_PkmnsStatChanged3, // 215
+ sText_PkmnsStatChanged4, // 216
+ sText_CriticalHit, // 217
+ sText_OneHitKO, // 218
+ sText_123Poof, // 219
+ sText_AndEllipsis, // 220
+ sText_NotVeryEffective, // 221
+ sText_SuperEffective, // 222
+ sText_GotAwaySafely, // 223
+ sText_WildPkmnFled, // 224
+ sText_NoRunningFromTrainers, // 225
+ sText_CantEscape, // 226
+ sText_DontLeaveBirch, // 227
+ sText_ButNothingHappened, // 228
+ sText_ButItFailed, // 229
+ sText_ItHurtConfusion, // 230
+ sText_MirrorMoveFailed, // 231
+ sText_StartedToRain, // 232
+ sText_DownpourStarted, // 233
+ sText_RainContinues, // 234
+ sText_DownpourContinues, // 235
+ sText_RainStopped, // 236
+ sText_SandstormBrewed, // 237
+ sText_SandstormRages, // 238
+ sText_SandstormSubsided, // 239
+ sText_SunlightGotBright, // 240
+ sText_SunlightStrong, // 241
+ sText_SunlightFaded, // 242
+ sText_StartedHail, // 243
+ sText_HailContinues, // 244
+ sText_HailStopped, // 245
+ sText_FailedToSpitUp, // 246
+ sText_FailedToSwallow, // 247
+ sText_WindBecameHeatWave, // 248
+ sText_StatChangesGone, // 249
+ sText_CoinsScattered, // 250
+ sText_TooWeakForSubstitute, // 251
+ sText_SharedPain, // 252
+ sText_BellChimed, // 253
+ sText_FaintInThree, // 254
+ sText_NoPPLeft, // 255
+ sText_ButNoPPLeft, // 256
+ sText_PlayerUsedItem, // 257
+ sText_WallyUsedItem, // 258
+ sText_TrainerBlockedBall, // 259
+ sText_DontBeAThief, // 260
+ sText_ItDodgedBall, // 261
+ sText_YouMissedPkmn, // 262
+ sText_PkmnBrokeFree, // 263
+ sText_ItAppearedCaught, // 264
+ sText_AarghAlmostHadIt, // 265
+ sText_ShootSoClose, // 266
+ sText_GotchaPkmnCaught, // 267
+ sText_GotchaPkmnCaught2, // 268
+ sText_GiveNicknameCaptured, // 269
+ sText_PkmnSentToPC, // 270
+ sText_PkmnDataAddedToDex, // 271
+ sText_ItIsRaining, // 272
+ sText_SandstormIsRaging, // 273
+ sText_CantEscape2, // 274
+ sText_PkmnIgnoresAsleep, // 275
+ sText_PkmnIgnoredOrders, // 276
+ sText_PkmnBeganToNap, // 277
+ sText_PkmnLoafing, // 278
+ sText_PkmnWontObey, // 279
+ sText_PkmnTurnedAway, // 280
+ sText_PkmnPretendNotNotice, // 281
+ sText_EnemyAboutToSwitchPkmn, // 282
+ sText_CreptCloser, // 283
+ sText_CantGetCloser, // 284
+ sText_PkmnWatchingCarefully, // 285
+ sText_PkmnCuriousAboutX, // 286
+ sText_PkmnEnthralledByX, // 287
+ sText_PkmnIgnoredX, // 288
+ sText_ThrewPokeblockAtPkmn, // 289
+ sText_OutOfSafariBalls, // 290
+ sText_PkmnsItemCuredParalysis, // 291
+ sText_PkmnsItemCuredPoison, // 292
+ sText_PkmnsItemHealedBurn, // 293
+ sText_PkmnsItemDefrostedIt, // 294
+ sText_PkmnsItemWokeIt, // 295
+ sText_PkmnsItemSnappedOut, // 296
+ sText_PkmnsItemCuredProblem, // 297
+ sText_PkmnsItemRestoredHealth, // 298
+ sText_PkmnsItemRestoredPP, // 299
+ sText_PkmnsItemRestoredStatus, // 300
+ sText_PkmnsItemRestoredHPALittle, // 301
+ sText_ItemAllowsOnlyYMove, // 302
+ sText_PkmnHungOnWithX, // 303
+ gText_EmptyString3, // 304
+ sText_PkmnsXPreventsBurns, // 305
+ sText_PkmnsXBlocksY, // 306
+ sText_PkmnsXRestoredHPALittle2, // 307
+ sText_PkmnsXWhippedUpSandstorm, // 308
+ sText_PkmnsXPreventsYLoss, // 309
+ sText_PkmnsXInfatuatedY, // 310
+ sText_PkmnsXMadeYIneffective, // 311
+ sText_PkmnsXCuredYProblem, // 312
+ sText_ItSuckedLiquidOoze, // 313
+ sText_PkmnTransformed, // 314
+ sText_ElectricityWeakened, // 315
+ sText_FireWeakened, // 316
+ sText_PkmnHidUnderwater, // 317
+ sText_PkmnSprangUp, // 318
+ sText_HMMovesCantBeForgotten, // 319
+ sText_XFoundOneY, // 320
+ sText_PlayerDefeatedLinkTrainerTrainer1, // 321
+ sText_SoothingAroma, // 322
+ sText_ItemsCantBeUsedNow, // 323
+ sText_ForXCommaYZ, // 324
+ sText_UsingXTheYOfZN, // 325
+ sText_PkmnUsedXToGetPumped, // 326
+ sText_PkmnsXMadeYUseless, // 327
+ sText_PkmnTrappedBySandTomb, // 328
+ sText_EmptyString4, // 329
+ sText_ABoosted, // 330
+ sText_PkmnsXIntensifiedSun, // 331
+ sText_PkmnMakesGroundMiss, // 332
+ sText_YouThrowABallNowRight, // 333
+ sText_PkmnsXTookAttack, // 334
+ sText_PkmnChoseXAsDestiny, // 335
+ sText_PkmnLostFocus, // 336
+ sText_UseNextPkmn, // 337
+ sText_PkmnFledUsingIts, // 338
+ sText_PkmnFledUsing, // 339
+ sText_PkmnWasDraggedOut, // 340
+ sText_PreventedFromWorking, // 341
+ sText_PkmnsItemNormalizedStatus, // 342
+ sText_Trainer1UsedItem, // 343
+ sText_BoxIsFull, // 344
+ sText_PkmnAvoidedAttack, // 345
+ sText_PkmnsXMadeItIneffective, // 346
+ sText_PkmnsXPreventsFlinching, // 347
+ sText_PkmnAlreadyHasBurn, // 348
+ sText_StatsWontDecrease2, // 349
+ sText_PkmnsXBlocksY2, // 350
+ sText_PkmnsXWoreOff, // 351
+ sText_PkmnRaisedDefALittle, // 352
+ sText_PkmnRaisedSpDefALittle, // 353
+ sText_TheWallShattered, // 354
+ sText_PkmnsXPreventsYsZ, // 355
+ sText_PkmnsXCuredItsYProblem, // 356
+ sText_AttackerCantEscape, // 357
+ sText_PkmnObtainedX, // 358
+ sText_PkmnObtainedX2, // 359
+ sText_PkmnObtainedXYObtainedZ, // 360
+ sText_ButNoEffect, // 361
+ sText_PkmnsXHadNoEffectOnY, // 362
+ sText_TwoInGameTrainersDefeated, // 363
+ sText_Trainer2LoseText, // 364
+ sText_PkmnIncapableOfPower, // 365
+ sText_GlintAppearsInEye, // 366
+ sText_PkmnGettingIntoPosition, // 367
+ sText_PkmnBeganGrowlingDeeply, // 368
+ sText_PkmnEagerForMore, // 369
+ sText_DefeatedOpponentByReferee, // 370
+ sText_LostToOpponentByReferee, // 371
+ sText_TiedOpponentByReferee, // 372
+ sText_QuestionForfeitMatch, // 373
+ sText_ForfeitedMatch, // 374
+ gText_PkmnTransferredSomeonesPC, // 375
+ gText_PkmnTransferredLanettesPC, // 376
+ gText_PkmnBoxSomeonesPCFull, // 377
+ gText_PkmnBoxLanettesPCFull, // 378
+ sText_Trainer1WinText, // 379
+ sText_Trainer2WinText, // 380
};
const u16 gMissStringIds[] =
@@ -1176,16 +1174,16 @@ const u8 gText_BattleSwitchWhich3[] = _("{UP_ARROW}");
const u8 gText_BattleSwitchWhich4[] = _("{ESCAPE 4}");
const u8 gText_BattleSwitchWhich5[] = _("-");
-const u8 gText_HP[] = _("HP");
-const u8 gText_Attack[] = _("ATTACK");
-const u8 gText_Defense[] = _("DEFENSE");
-const u8 gText_SpAtk[] = _("SP. ATK");
-const u8 gText_SpDef[] = _("SP. DEF");
+static const u8 sText_HP[] = _("HP");
+static const u8 sText_Attack[] = _("ATTACK");
+static const u8 sText_Defense[] = _("DEFENSE");
+static const u8 sText_SpAtk[] = _("SP. ATK");
+static const u8 sText_SpDef[] = _("SP. DEF");
const u8 * const gStatNamesTable2[] =
{
- gText_HP, gText_SpAtk, gText_Attack,
- gText_SpDef, gText_Defense, gText_Speed
+ sText_HP, sText_SpAtk, sText_Attack,
+ sText_SpDef, sText_Defense, sText_Speed
};
const u8 gText_SafariBalls[] = _("{HIGHLIGHT DARK_GREY}SAFARI BALLS");
@@ -1202,10 +1200,10 @@ const u8 gText_BattleWallyName[] = _("WALLY");
const u8 gText_Win[] = _("{HIGHLIGHT TRANSPARENT}Win");
const u8 gText_Loss[] = _("{HIGHLIGHT TRANSPARENT}Loss");
const u8 gText_Draw[] = _("{HIGHLIGHT TRANSPARENT}Draw");
-const u8 gText_SpaceIs[] = _(" is");
-const u8 gText_ApostropheS[] = _("’s");
+static const u8 sText_SpaceIs[] = _(" is");
+static const u8 sText_ApostropheS[] = _("’s");
-const u8 gText_UnknownMoveTypes[][17] =
+static const u8 sATypeMove_Table[][17] =
{
_("a NORMAL move"),
_("a FIGHTING move"),
@@ -1228,17 +1226,17 @@ const u8 gText_UnknownMoveTypes[][17] =
};
const u8 gText_BattleTourney[] = _("BATTLE TOURNEY");
-const u8 gText_Round1[] = _("Round 1");
-const u8 gText_Round2[] = _("Round 2");
-const u8 gText_Semifinal[] = _("Semifinal");
-const u8 gText_Final[] = _("Final");
+static const u8 sText_Round1[] = _("Round 1");
+static const u8 sText_Round2[] = _("Round 2");
+static const u8 sText_Semifinal[] = _("Semifinal");
+static const u8 sText_Final[] = _("Final");
const u8 * const gRoundsStringTable[] =
{
- gText_Round1,
- gText_Round2,
- gText_Semifinal,
- gText_Final
+ sText_Round1,
+ sText_Round2,
+ sText_Semifinal,
+ sText_Final
};
const u8 gText_TheGreatNewHope[] = _("The great new hope!\p");
@@ -1253,17 +1251,17 @@ const u8 gText_Mind[] = _("Mind");
const u8 gText_Skill[] = _("Skill");
const u8 gText_Body[] = _("Body");
const u8 gText_Judgement[] = _("{B_BUFF1}{CLEAR 13}Judgment{CLEAR 13}{B_BUFF2}");
-const u8 gText_TwoTrainersSentPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent\nout {B_OPPONENT_MON1_NAME}!\p{B_TRAINER2_CLASS} {B_TRAINER2_NAME} sent\nout {B_OPPONENT_MON2_NAME}!");
-const u8 gText_Trainer2SentOutPkmn[] = _("{B_TRAINER2_CLASS} {B_TRAINER2_NAME} sent\nout {B_BUFF1}!");
-const u8 gText_TwoTrainersWantToBattle[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} and\n{B_TRAINER2_CLASS} {B_TRAINER2_NAME}\lwant to battle!\p");
-const u8 gText_InGamePartnerSentOutZGoN[] = _("{B_PARTNER_CLASS} {B_PARTNER_NAME} sent\nout {B_PLAYER_MON2_NAME}!\lGo, {B_PLAYER_MON1_NAME}!");
-const u8 gText_TwoInGameTrainersDefeated[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} and\n{B_TRAINER2_CLASS} {B_TRAINER2_NAME}\lwere defeated!\p");
-const u8 gText_Trainer2LoseText[] = _("{B_TRAINER2_LOSE_TEXT}");
-const u8 gText_PkmnIncapableOfPower[] = _("{B_ATK_NAME_WITH_PREFIX} appears incapable\nof using its power!");
-const u8 gText_GlintAppearsInEye[] = _("A glint appears in\n{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s eyes!");
-const u8 gText_PkmnGettingIntoPosition[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is getting into\nposition!");
-const u8 gText_PkmnBeganGrowlingDeeply[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} began growling deeply!");
-const u8 gText_PkmnEagerForMore[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is eager for more!");
+static const u8 sText_TwoTrainersSentPkmn[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} sent\nout {B_OPPONENT_MON1_NAME}!\p{B_TRAINER2_CLASS} {B_TRAINER2_NAME} sent\nout {B_OPPONENT_MON2_NAME}!");
+static const u8 sText_Trainer2SentOutPkmn[] = _("{B_TRAINER2_CLASS} {B_TRAINER2_NAME} sent\nout {B_BUFF1}!");
+static const u8 sText_TwoTrainersWantToBattle[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} and\n{B_TRAINER2_CLASS} {B_TRAINER2_NAME}\lwant to battle!\p");
+static const u8 sText_InGamePartnerSentOutZGoN[] = _("{B_PARTNER_CLASS} {B_PARTNER_NAME} sent\nout {B_PLAYER_MON2_NAME}!\lGo, {B_PLAYER_MON1_NAME}!");
+static const u8 sText_TwoInGameTrainersDefeated[] = _("{B_TRAINER1_CLASS} {B_TRAINER1_NAME} and\n{B_TRAINER2_CLASS} {B_TRAINER2_NAME}\lwere defeated!\p");
+static const u8 sText_Trainer2LoseText[] = _("{B_TRAINER2_LOSE_TEXT}");
+static const u8 sText_PkmnIncapableOfPower[] = _("{B_ATK_NAME_WITH_PREFIX} appears incapable\nof using its power!");
+static const u8 sText_GlintAppearsInEye[] = _("A glint appears in\n{B_SCR_ACTIVE_NAME_WITH_PREFIX}’s eyes!");
+static const u8 sText_PkmnGettingIntoPosition[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is getting into\nposition!");
+static const u8 sText_PkmnBeganGrowlingDeeply[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} began growling deeply!");
+static const u8 sText_PkmnEagerForMore[] = _("{B_SCR_ACTIVE_NAME_WITH_PREFIX} is eager for more!");
const u16 gStringIds_85CCF0A[] =
{
@@ -1271,43 +1269,43 @@ const u16 gStringIds_85CCF0A[] =
STRINGID_PKMNBEGANGROWLINGDEEPLY, STRINGID_PKMNEAGERFORMORE
};
-const u8 gText_RefIfNothingIsDecided[] = _("REFEREE: If nothing is decided in\n3 turns, we will go to judging!");
-const u8 gText_RefThatsIt[] = _("REFEREE: That’s it! We will now go to\njudging to determine the winner!");
-const u8 gText_RefJudgeMind[] = _("REFEREE: Judging category 1, Mind!\nThe POKéMON showing the most guts!\p");
-const u8 gText_RefJudgeSkill[] = _("REFEREE: Judging category 2, Skill!\nThe POKéMON using moves the best!\p");
-const u8 gText_RefJudgeBody[] = _("REFEREE: Judging category 3, Body!\nThe POKéMON with the most vitality!\p");
-const u8 gText_RefJudgement1[] = _("REFEREE: Judgment: {B_BUFF1} to {B_BUFF2}!\nThe winner is {B_PLAYER_NAME}’s {B_PLAYER_MON1_NAME}!\p");
-const u8 gText_RefJudgement2[] = _("REFEREE: Judgment: {B_BUFF1} to {B_BUFF2}!\nThe winner is {B_TRAINER1_NAME}’s {B_OPPONENT_MON1_NAME}!\p");
-const u8 gText_RefJudgement3[] = _("REFEREE: Judgment: 3 to 3!\nWe have a draw!\p");
-const u8 gText_DefeatedOpponentByReferee[] = _("{B_PLAYER_MON1_NAME} defeated the opponent\n{B_OPPONENT_MON1_NAME} in a REFEREE’s decision!");
-const u8 gText_LostToOpponentByReferee[] = _("{B_PLAYER_MON1_NAME} lost to the opponent\n{B_OPPONENT_MON1_NAME} in a REFEREE’s decision!");
-const u8 gText_TiedOpponentByReferee[] = _("{B_PLAYER_MON1_NAME} tied the opponent\n{B_OPPONENT_MON1_NAME} in a REFEREE’s decision!");
-const u8 gText_RefCommenceBattle[] = _("REFEREE: {B_PLAYER_MON1_NAME} VS {B_OPPONENT_MON1_NAME}!\nCommence battling!");
+static const u8 sText_RefIfNothingIsDecided[] = _("REFEREE: If nothing is decided in\n3 turns, we will go to judging!");
+static const u8 sText_RefThatsIt[] = _("REFEREE: That’s it! We will now go to\njudging to determine the winner!");
+static const u8 sText_RefJudgeMind[] = _("REFEREE: Judging category 1, Mind!\nThe POKéMON showing the most guts!\p");
+static const u8 sText_RefJudgeSkill[] = _("REFEREE: Judging category 2, Skill!\nThe POKéMON using moves the best!\p");
+static const u8 sText_RefJudgeBody[] = _("REFEREE: Judging category 3, Body!\nThe POKéMON with the most vitality!\p");
+static const u8 sText_RefJudgement1[] = _("REFEREE: Judgment: {B_BUFF1} to {B_BUFF2}!\nThe winner is {B_PLAYER_NAME}’s {B_PLAYER_MON1_NAME}!\p");
+static const u8 sText_RefJudgement2[] = _("REFEREE: Judgment: {B_BUFF1} to {B_BUFF2}!\nThe winner is {B_TRAINER1_NAME}’s {B_OPPONENT_MON1_NAME}!\p");
+static const u8 sText_RefJudgement3[] = _("REFEREE: Judgment: 3 to 3!\nWe have a draw!\p");
+static const u8 sText_DefeatedOpponentByReferee[] = _("{B_PLAYER_MON1_NAME} defeated the opponent\n{B_OPPONENT_MON1_NAME} in a REFEREE’s decision!");
+static const u8 sText_LostToOpponentByReferee[] = _("{B_PLAYER_MON1_NAME} lost to the opponent\n{B_OPPONENT_MON1_NAME} in a REFEREE’s decision!");
+static const u8 sText_TiedOpponentByReferee[] = _("{B_PLAYER_MON1_NAME} tied the opponent\n{B_OPPONENT_MON1_NAME} in a REFEREE’s decision!");
+static const u8 sText_RefCommenceBattle[] = _("REFEREE: {B_PLAYER_MON1_NAME} VS {B_OPPONENT_MON1_NAME}!\nCommence battling!");
const u8 * const gRefereeStringsTable[] =
{
- gText_RefIfNothingIsDecided,
- gText_RefThatsIt,
- gText_RefJudgeMind,
- gText_RefJudgeSkill,
- gText_RefJudgeBody,
- gText_RefJudgement1,
- gText_RefJudgement2,
- gText_RefJudgement3,
- gText_RefCommenceBattle,
+ sText_RefIfNothingIsDecided,
+ sText_RefThatsIt,
+ sText_RefJudgeMind,
+ sText_RefJudgeSkill,
+ sText_RefJudgeBody,
+ sText_RefJudgement1,
+ sText_RefJudgement2,
+ sText_RefJudgement3,
+ sText_RefCommenceBattle,
};
-const u8 gText_QuestionForfeitMatch[] = _("Would you like to forfeit the match\nand quit now?");
-const u8 gText_ForfeitedMatch[] = _("{B_PLAYER_NAME} forfeited the match!");
-const u8 gText_Trainer1WinText[] = _("{B_TRAINER1_WIN_TEXT}");
-const u8 gText_Trainer2WinText[] = _("{B_TRAINER2_WIN_TEXT}");
-const u8 gText_Trainer1Fled[] = _( "{PLAY_SE 0x0011}{B_TRAINER1_CLASS} {B_TRAINER1_NAME} fled!");
-const u8 gText_PlayerLostAgainstTrainer1[] = _("Player lost against\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!");
-const u8 gText_PlayerBattledToDrawTrainer1[] = _("Player battled to a draw against\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!");
+static const u8 sText_QuestionForfeitMatch[] = _("Would you like to forfeit the match\nand quit now?");
+static const u8 sText_ForfeitedMatch[] = _("{B_PLAYER_NAME} forfeited the match!");
+static const u8 sText_Trainer1WinText[] = _("{B_TRAINER1_WIN_TEXT}");
+static const u8 sText_Trainer2WinText[] = _("{B_TRAINER2_WIN_TEXT}");
+static const u8 sText_Trainer1Fled[] = _( "{PLAY_SE 0x0011}{B_TRAINER1_CLASS} {B_TRAINER1_NAME} fled!");
+static const u8 sText_PlayerLostAgainstTrainer1[] = _("Player lost against\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!");
+static const u8 sText_PlayerBattledToDrawTrainer1[] = _("Player battled to a draw against\n{B_TRAINER1_CLASS} {B_TRAINER1_NAME}!");
const u8 gText_RecordBattleToPass[] = _("Would you like to record your battle\non your FRONTIER PASS?");
const u8 gText_BattleRecordedOnPass[] = _("{B_PLAYER_NAME}’s battle result was recorded\non the FRONTIER PASS.");
-const u8 gText_LinkTrainerWantsToBattlePause[] = _("{B_20}\nwants to battle!{PAUSE 49}");
-const u8 gText_TwoLinkTrainersWantToBattlePause[] = _("{B_20} and {B_21}\nwant to battle!{PAUSE 49}");
+static const u8 sText_LinkTrainerWantsToBattlePause[] = _("{B_20}\nwants to battle!{PAUSE 49}");
+static const u8 sText_TwoLinkTrainersWantToBattlePause[] = _("{B_20} and {B_21}\nwant to battle!{PAUSE 49}");
// This is four lists of moves which use a different attack string in Japanese
// to the default. See the documentation for sub_814F950 for more detail.
@@ -1444,45 +1442,45 @@ void BufferStringBattle(u16 stringID)
{
if (gBattleTypeFlags & BATTLE_TYPE_x800000)
{
- stringPtr = gText_TwoTrainersWantToBattle;
+ stringPtr = sText_TwoTrainersWantToBattle;
}
else if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
{
if (gBattleTypeFlags & BATTLE_TYPE_RECORDED)
- stringPtr = gText_TwoLinkTrainersWantToBattlePause;
+ stringPtr = sText_TwoLinkTrainersWantToBattlePause;
else
- stringPtr = gText_TwoLinkTrainersWantToBattle;
+ stringPtr = sText_TwoLinkTrainersWantToBattle;
}
else
{
if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00)
- stringPtr = gText_Trainer1WantsToBattle;
+ stringPtr = sText_Trainer1WantsToBattle;
else if (gBattleTypeFlags & BATTLE_TYPE_RECORDED)
- stringPtr = gText_LinkTrainerWantsToBattlePause;
+ stringPtr = sText_LinkTrainerWantsToBattlePause;
else
- stringPtr = gText_LinkTrainerWantsToBattle;
+ stringPtr = sText_LinkTrainerWantsToBattle;
}
}
else
{
if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER)
- stringPtr = gText_TwoTrainersWantToBattle;
+ stringPtr = sText_TwoTrainersWantToBattle;
else if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS)
- stringPtr = gText_TwoTrainersWantToBattle;
+ stringPtr = sText_TwoTrainersWantToBattle;
else
- stringPtr = gText_Trainer1WantsToBattle;
+ stringPtr = sText_Trainer1WantsToBattle;
}
}
else
{
if (gBattleTypeFlags & BATTLE_TYPE_LEGENDARY)
- stringPtr = gText_WildPkmnAppeared2;
+ stringPtr = sText_WildPkmnAppeared2;
else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE) // interesting, looks like they had something planned for wild double battles
- stringPtr = gText_TwoWildPkmnAppeared;
+ stringPtr = sText_TwoWildPkmnAppeared;
else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL)
- stringPtr = gText_WildPkmnAppearedPause;
+ stringPtr = sText_WildPkmnAppearedPause;
else
- stringPtr = gText_WildPkmnAppeared;
+ stringPtr = sText_WildPkmnAppeared;
}
break;
case STRINGID_INTROSENDOUT: // poke first send-out
@@ -1491,17 +1489,17 @@ void BufferStringBattle(u16 stringID)
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
{
if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER)
- stringPtr = gText_InGamePartnerSentOutZGoN;
+ stringPtr = sText_InGamePartnerSentOutZGoN;
else if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS)
- stringPtr = gText_GoTwoPkmn;
+ stringPtr = sText_GoTwoPkmn;
else if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
- stringPtr = gText_LinkPartnerSentOutPkmnGoPkmn;
+ stringPtr = sText_LinkPartnerSentOutPkmnGoPkmn;
else
- stringPtr = gText_GoTwoPkmn;
+ stringPtr = sText_GoTwoPkmn;
}
else
{
- stringPtr = gText_GoPkmn;
+ stringPtr = sText_GoPkmn;
}
}
else
@@ -1509,24 +1507,24 @@ void BufferStringBattle(u16 stringID)
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
{
if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS)
- stringPtr = gText_TwoTrainersSentPkmn;
+ stringPtr = sText_TwoTrainersSentPkmn;
else if (gBattleTypeFlags & BATTLE_TYPE_x800000)
- stringPtr = gText_TwoTrainersSentPkmn;
+ stringPtr = sText_TwoTrainersSentPkmn;
else if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
- stringPtr = gText_TwoLinkTrainersSentOutPkmn;
+ stringPtr = sText_TwoLinkTrainersSentOutPkmn;
else if (gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000))
- stringPtr = gText_LinkTrainerSentOutTwoPkmn;
+ stringPtr = sText_LinkTrainerSentOutTwoPkmn;
else
- stringPtr = gText_Trainer1SentOutTwoPkmn;
+ stringPtr = sText_Trainer1SentOutTwoPkmn;
}
else
{
if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000)))
- stringPtr = gText_Trainer1SentOutPkmn;
+ stringPtr = sText_Trainer1SentOutPkmn;
else if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00)
- stringPtr = gText_Trainer1SentOutPkmn;
+ stringPtr = sText_Trainer1SentOutPkmn;
else
- stringPtr = gText_LinkTrainerSentOutPkmn;
+ stringPtr = sText_LinkTrainerSentOutPkmn;
}
}
break;
@@ -1534,26 +1532,26 @@ void BufferStringBattle(u16 stringID)
if (GetBattlerSide(gActiveBattler) == B_SIDE_PLAYER)
{
if (*(&gBattleStruct->hpScale) == 0)
- stringPtr = gText_PkmnThatsEnough;
+ stringPtr = sText_PkmnThatsEnough;
else if (*(&gBattleStruct->hpScale) == 1 || gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
- stringPtr = gText_PkmnComeBack;
+ stringPtr = sText_PkmnComeBack;
else if (*(&gBattleStruct->hpScale) == 2)
- stringPtr = gText_PkmnOkComeBack;
+ stringPtr = sText_PkmnOkComeBack;
else
- stringPtr = gText_PkmnGoodComeBack;
+ stringPtr = sText_PkmnGoodComeBack;
}
else
{
if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_800 || gBattleTypeFlags & BATTLE_TYPE_x2000000)
{
if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
- stringPtr = gText_LinkTrainer2WithdrewPkmn;
+ stringPtr = sText_LinkTrainer2WithdrewPkmn;
else
- stringPtr = gText_LinkTrainer1WithdrewPkmn;
+ stringPtr = sText_LinkTrainer1WithdrewPkmn;
}
else
{
- stringPtr = gText_Trainer1WithdrewPkmn;
+ stringPtr = sText_Trainer1WithdrewPkmn;
}
}
break;
@@ -1561,13 +1559,13 @@ void BufferStringBattle(u16 stringID)
if (GetBattlerSide(gBattleScripting.battler) == B_SIDE_PLAYER)
{
if (*(&gBattleStruct->hpScale) == 0 || gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
- stringPtr = gText_GoPkmn2;
+ stringPtr = sText_GoPkmn2;
else if (*(&gBattleStruct->hpScale) == 1)
- stringPtr = gText_DoItPkmn;
+ stringPtr = sText_DoItPkmn;
else if (*(&gBattleStruct->hpScale) == 2)
- stringPtr = gText_GoForItPkmn;
+ stringPtr = sText_GoForItPkmn;
else
- stringPtr = gText_YourFoesWeakGetEmPkmn;
+ stringPtr = sText_YourFoesWeakGetEmPkmn;
}
else
{
@@ -1576,18 +1574,18 @@ void BufferStringBattle(u16 stringID)
if (gBattleTypeFlags & BATTLE_TYPE_x800000)
{
if (gBattleScripting.battler == 1)
- stringPtr = gText_Trainer1SentOutPkmn2;
+ stringPtr = sText_Trainer1SentOutPkmn2;
else
- stringPtr = gText_Trainer2SentOutPkmn;
+ stringPtr = sText_Trainer2SentOutPkmn;
}
else
{
if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
- stringPtr = gText_LinkTrainerMultiSentOutPkmn;
+ stringPtr = sText_LinkTrainerMultiSentOutPkmn;
else if (gTrainerBattleOpponent_A == TRAINER_OPPONENT_C00)
- stringPtr = gText_Trainer1SentOutPkmn2;
+ stringPtr = sText_Trainer1SentOutPkmn2;
else
- stringPtr = gText_LinkTrainerSentOutPkmn2;
+ stringPtr = sText_LinkTrainerSentOutPkmn2;
}
}
else
@@ -1595,13 +1593,13 @@ void BufferStringBattle(u16 stringID)
if (gBattleTypeFlags & BATTLE_TYPE_TWO_OPPONENTS)
{
if (gBattleScripting.battler == 1)
- stringPtr = gText_Trainer1SentOutPkmn2;
+ stringPtr = sText_Trainer1SentOutPkmn2;
else
- stringPtr = gText_Trainer2SentOutPkmn;
+ stringPtr = sText_Trainer2SentOutPkmn;
}
else
{
- stringPtr = gText_Trainer1SentOutPkmn2;
+ stringPtr = sText_Trainer1SentOutPkmn2;
}
}
}
@@ -1610,12 +1608,12 @@ void BufferStringBattle(u16 stringID)
sub_814F8F8(gBattleTextBuff1); // buff1 doesn't appear in the string, leftover from japanese move names?
if (gStringInfo->currentMove > LAST_MOVE_INDEX)
- StringCopy(gBattleTextBuff2, gText_UnknownMoveTypes[*(&gBattleStruct->stringMoveType)]);
+ StringCopy(gBattleTextBuff2, sATypeMove_Table[*(&gBattleStruct->stringMoveType)]);
else
StringCopy(gBattleTextBuff2, gMoveNames[gStringInfo->currentMove]);
sub_814F950(gBattleTextBuff2);
- stringPtr = gText_AttackerUsedX;
+ stringPtr = sText_AttackerUsedX;
break;
case STRINGID_BATTLEEND: // battle end
if (gBattleTextBuff1[0] & B_OUTCOME_LINK_BATTLE_RAN)
@@ -1625,11 +1623,11 @@ void BufferStringBattle(u16 stringID)
gBattleTextBuff1[0] ^= (B_OUTCOME_LOST | B_OUTCOME_WON);
if (gBattleTextBuff1[0] == B_OUTCOME_LOST || gBattleTextBuff1[0] == B_OUTCOME_DREW)
- stringPtr = gText_GotAwaySafely;
+ stringPtr = sText_GotAwaySafely;
else if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
- stringPtr = gText_TwoWildFled;
+ stringPtr = sText_TwoWildFled;
else
- stringPtr = gText_WildFled;
+ stringPtr = sText_WildFled;
}
else
{
@@ -1642,15 +1640,15 @@ void BufferStringBattle(u16 stringID)
{
case B_OUTCOME_WON:
if (gBattleTypeFlags & BATTLE_TYPE_x800000)
- stringPtr = gText_TwoInGameTrainersDefeated;
+ stringPtr = sText_TwoInGameTrainersDefeated;
else
- stringPtr = gText_TwoLinkTrainersDefeated;
+ stringPtr = sText_TwoLinkTrainersDefeated;
break;
case B_OUTCOME_LOST:
- stringPtr = gText_PlayerLostToTwo;
+ stringPtr = sText_PlayerLostToTwo;
break;
case B_OUTCOME_DREW:
- stringPtr = gText_PlayerBattledToDrawVsTwo;
+ stringPtr = sText_PlayerBattledToDrawVsTwo;
break;
}
}
@@ -1659,13 +1657,13 @@ void BufferStringBattle(u16 stringID)
switch (gBattleTextBuff1[0])
{
case B_OUTCOME_WON:
- stringPtr = gText_PlayerDefeatedLinkTrainerTrainer1;
+ stringPtr = sText_PlayerDefeatedLinkTrainerTrainer1;
break;
case B_OUTCOME_LOST:
- stringPtr = gText_PlayerLostAgainstTrainer1;
+ stringPtr = sText_PlayerLostAgainstTrainer1;
break;
case B_OUTCOME_DREW:
- stringPtr = gText_PlayerBattledToDrawTrainer1;
+ stringPtr = sText_PlayerBattledToDrawTrainer1;
break;
}
}
@@ -1674,13 +1672,13 @@ void BufferStringBattle(u16 stringID)
switch (gBattleTextBuff1[0])
{
case B_OUTCOME_WON:
- stringPtr = gText_PlayerDefeatedLinkTrainer;
+ stringPtr = sText_PlayerDefeatedLinkTrainer;
break;
case B_OUTCOME_LOST:
- stringPtr = gText_PlayerLostAgainstLinkTrainer;
+ stringPtr = sText_PlayerLostAgainstLinkTrainer;
break;
case B_OUTCOME_DREW:
- stringPtr = gText_PlayerBattledToDrawLinkTrainer;
+ stringPtr = sText_PlayerBattledToDrawLinkTrainer;
break;
}
}
@@ -1707,7 +1705,7 @@ u32 BattleStringExpandPlaceholdersToDisplayedString(const u8* src)
BattleStringExpandPlaceholders(src, gDisplayedStringBattle);
}
-static const u8* TryGetStatusString(u8* src)
+static const u8* TryGetStatusString(u8 *src)
{
u32 i;
u8 status[8];
@@ -1738,13 +1736,13 @@ static const u8* TryGetStatusString(u8* src)
return NULL;
}
-#define HANDLE_NICKNAME_STRING_CASE(bank, monIndex) \
- if (GetBattlerSide(bank) != B_SIDE_PLAYER) \
+#define HANDLE_NICKNAME_STRING_CASE(battlerId, monIndex) \
+ if (GetBattlerSide(battlerId) != B_SIDE_PLAYER) \
{ \
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER) \
- toCpy = gText_FoePkmnPrefix; \
+ toCpy = sText_FoePkmnPrefix; \
else \
- toCpy = gText_WildPkmnPrefix; \
+ toCpy = sText_WildPkmnPrefix; \
while (*toCpy != EOS) \
{ \
dst[dstID] = *toCpy; \
@@ -1760,10 +1758,10 @@ static const u8* TryGetStatusString(u8* src)
StringGetEnd10(text); \
toCpy = text;
-u32 BattleStringExpandPlaceholders(const u8* src, u8* dst)
+u32 BattleStringExpandPlaceholders(const u8 *src, u8 *dst)
{
u32 dstID = 0; // if they used dstID, why not use srcID as well?
- const u8* toCpy = NULL;
+ const u8 *toCpy = NULL;
u8 text[30];
u8 multiplayerID;
s32 i;
@@ -1868,7 +1866,7 @@ u32 BattleStringExpandPlaceholders(const u8* src, u8* dst)
StringGetEnd10(text);
toCpy = text;
break;
- case B_TXT_ATK_NAME_WITH_PREFIX_MON1: // attacker name with prefix, only bank 0/1
+ case B_TXT_ATK_NAME_WITH_PREFIX_MON1: // attacker name with prefix, only battlerId 0/1
HANDLE_NICKNAME_STRING_CASE(gBattlerAttacker,
gBattlerPartyIndexes[GetBattlerAtPosition(GET_BATTLER_SIDE(gBattlerAttacker))])
break;
@@ -1887,24 +1885,24 @@ u32 BattleStringExpandPlaceholders(const u8* src, u8* dst)
case B_TXT_DEF_NAME_WITH_PREFIX: // target name with prefix
HANDLE_NICKNAME_STRING_CASE(gBattlerTarget, gBattlerPartyIndexes[gBattlerTarget])
break;
- case B_TXT_EFF_NAME_WITH_PREFIX: // effect bank name with prefix
+ case B_TXT_EFF_NAME_WITH_PREFIX: // effect battlerId name with prefix
HANDLE_NICKNAME_STRING_CASE(gEffectBattler, gBattlerPartyIndexes[gEffectBattler])
break;
- case B_TXT_ACTIVE_NAME_WITH_PREFIX: // active bank name with prefix
+ case B_TXT_ACTIVE_NAME_WITH_PREFIX: // active battlerId name with prefix
HANDLE_NICKNAME_STRING_CASE(gActiveBattler, gBattlerPartyIndexes[gActiveBattler])
break;
- case B_TXT_SCR_ACTIVE_NAME_WITH_PREFIX: // scripting active bank name with prefix
+ case B_TXT_SCR_ACTIVE_NAME_WITH_PREFIX: // scripting active battlerId name with prefix
HANDLE_NICKNAME_STRING_CASE(gBattleScripting.battler, gBattlerPartyIndexes[gBattleScripting.battler])
break;
case B_TXT_CURRENT_MOVE: // current move name
if (gStringInfo->currentMove > LAST_MOVE_INDEX)
- toCpy = gText_UnknownMoveTypes[gBattleStruct->stringMoveType];
+ toCpy = sATypeMove_Table[gBattleStruct->stringMoveType];
else
toCpy = gMoveNames[gStringInfo->currentMove];
break;
case B_TXT_LAST_MOVE: // originally used move name
if (gStringInfo->originallyUsedMove > LAST_MOVE_INDEX)
- toCpy = gText_UnknownMoveTypes[gBattleStruct->stringMoveType];
+ toCpy = sATypeMove_Table[gBattleStruct->stringMoveType];
else
toCpy = gMoveNames[gStringInfo->originallyUsedMove];
break;
@@ -1919,12 +1917,12 @@ u32 BattleStringExpandPlaceholders(const u8* src, u8* dst)
|| (gBattleScripting.multiplayerId == 0 && !(gPotentialItemEffectBattler & BIT_SIDE)))
{
StringCopy(text, gEnigmaBerries[gPotentialItemEffectBattler].name);
- StringAppend(text, gText_BerrySuffix);
+ StringAppend(text, sText_BerrySuffix);
toCpy = text;
}
else
{
- toCpy = gText_EnigmaBerry;
+ toCpy = sText_EnigmaBerry;
}
}
else
@@ -1932,11 +1930,11 @@ u32 BattleStringExpandPlaceholders(const u8* src, u8* dst)
if (gLinkPlayers[gBattleScripting.multiplayerId].lp_field_18 == gPotentialItemEffectBattler)
{
StringCopy(text, gEnigmaBerries[gPotentialItemEffectBattler].name);
- StringAppend(text, gText_BerrySuffix);
+ StringAppend(text, sText_BerrySuffix);
toCpy = text;
}
else
- toCpy = gText_EnigmaBerry;
+ toCpy = sText_EnigmaBerry;
}
}
else
@@ -1963,12 +1961,12 @@ u32 BattleStringExpandPlaceholders(const u8* src, u8* dst)
case B_TXT_SCR_ACTIVE_ABILITY: // scripting active ability
toCpy = gAbilityNames[gBattlerAbilities[gBattleScripting.battler]];
break;
- case B_TXT_EFF_ABILITY: // effect bank ability
+ case B_TXT_EFF_ABILITY: // effect battlerId ability
toCpy = gAbilityNames[gBattlerAbilities[gEffectBattler]];
break;
case B_TXT_TRAINER1_CLASS: // trainer class name
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)
@@ -2074,45 +2072,45 @@ u32 BattleStringExpandPlaceholders(const u8* src, u8* dst)
break;
case B_TXT_PC_CREATOR_NAME: // lanette pc
if (FlagGet(FLAG_SYS_PC_LANETTE))
- toCpy = gText_Lanettes;
+ toCpy = sText_Lanettes;
else
- toCpy = gText_Someones;
+ toCpy = sText_Someones;
break;
case B_TXT_ATK_PREFIX2:
if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER)
- toCpy = gText_AllyPkmnPrefix2;
+ toCpy = sText_AllyPkmnPrefix2;
else
- toCpy = gText_FoePkmnPrefix3;
+ toCpy = sText_FoePkmnPrefix3;
break;
case B_TXT_DEF_PREFIX2:
if (GetBattlerSide(gBattlerTarget) == B_SIDE_PLAYER)
- toCpy = gText_AllyPkmnPrefix2;
+ toCpy = sText_AllyPkmnPrefix2;
else
- toCpy = gText_FoePkmnPrefix3;
+ toCpy = sText_FoePkmnPrefix3;
break;
case B_TXT_ATK_PREFIX1:
if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER)
- toCpy = gText_AllyPkmnPrefix;
+ toCpy = sText_AllyPkmnPrefix;
else
- toCpy = gText_FoePkmnPrefix2;
+ toCpy = sText_FoePkmnPrefix2;
break;
case B_TXT_DEF_PREFIX1:
if (GetBattlerSide(gBattlerTarget) == B_SIDE_PLAYER)
- toCpy = gText_AllyPkmnPrefix;
+ toCpy = sText_AllyPkmnPrefix;
else
- toCpy = gText_FoePkmnPrefix2;
+ toCpy = sText_FoePkmnPrefix2;
break;
case B_TXT_ATK_PREFIX3:
if (GetBattlerSide(gBattlerAttacker) == B_SIDE_PLAYER)
- toCpy = gText_AllyPkmnPrefix3;
+ toCpy = sText_AllyPkmnPrefix3;
else
- toCpy = gText_FoePkmnPrefix4;
+ toCpy = sText_FoePkmnPrefix4;
break;
case B_TXT_DEF_PREFIX3:
if (GetBattlerSide(gBattlerTarget) == B_SIDE_PLAYER)
- toCpy = gText_AllyPkmnPrefix3;
+ toCpy = sText_AllyPkmnPrefix3;
else
- toCpy = gText_FoePkmnPrefix4;
+ toCpy = sText_FoePkmnPrefix4;
break;
case B_TXT_TRAINER2_CLASS:
if (gBattleTypeFlags & BATTLE_TYPE_FRONTIER)
@@ -2258,9 +2256,9 @@ static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst)
else
{
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
- StringAppend(dst, gText_FoePkmnPrefix);
+ StringAppend(dst, sText_FoePkmnPrefix);
else
- StringAppend(dst, gText_WildPkmnPrefix);
+ StringAppend(dst, sText_WildPkmnPrefix);
GetMonData(&gEnemyParty[src[srcID + 2]], MON_DATA_NICKNAME, text);
}
@@ -2301,10 +2299,10 @@ static void ExpandBattleTextBuffPlaceholders(const u8 *src, u8 *dst)
if (gLinkPlayers[gBattleScripting.multiplayerId].lp_field_18 == gPotentialItemEffectBattler)
{
StringCopy(dst, gEnigmaBerries[gPotentialItemEffectBattler].name);
- StringAppend(dst, gText_BerrySuffix);
+ StringAppend(dst, sText_BerrySuffix);
}
else
- StringAppend(dst, gText_EnigmaBerry);
+ StringAppend(dst, sText_EnigmaBerry);
}
else
CopyItemName(hword, dst);
@@ -2337,29 +2335,29 @@ static void sub_814F8F8(u8* textBuff)
if (counter >= 0)
{
if (counter <= 2)
- StringCopy(textBuff, gText_SpaceIs); // is
+ StringCopy(textBuff, sText_SpaceIs); // is
else if (counter <= 4)
- StringCopy(textBuff, gText_ApostropheS); // 's
+ StringCopy(textBuff, sText_ApostropheS); // 's
}
}
// Appends "!" to the text buffer `dst`. In the original Japanese this looked
// into the table of moves at sUnknownMoveTable and varied the line accordingly.
//
-// gText_ExclamationMark was a plain "!", used for any attack not on the list.
+// sText_ExclamationMark was a plain "!", used for any attack not on the list.
// It resulted in the translation "<NAME>'s <ATTACK>!".
//
-// gText_ExclamationMark2 was "を つかった!". This resulted in the translation
+// sText_ExclamationMark2 was "を つかった!". This resulted in the translation
// "<NAME> used <ATTACK>!", which was used for all attacks in English.
//
-// gText_ExclamationMark3 was "した!". This was used for those moves whose
+// sText_ExclamationMark3 was "した!". This was used for those moves whose
// names were verbs, such as Recover, and resulted in translations like "<NAME>
// recovered itself!".
//
-// gText_ExclamationMark4 was "を した!" This resulted in a translation of
+// sText_ExclamationMark4 was "を した!" This resulted in a translation of
// "<NAME> did an <ATTACK>!".
//
-// gText_ExclamationMark5 was " こうげき!" This resulted in a translation of
+// sText_ExclamationMark5 was " こうげき!" This resulted in a translation of
// "<NAME>'s <ATTACK> attack!".
static void sub_814F950(u8* dst)
{
@@ -2380,19 +2378,19 @@ static void sub_814F950(u8* dst)
switch (counter)
{
case 0:
- StringCopy(dst, gText_ExclamationMark);
+ StringCopy(dst, sText_ExclamationMark);
break;
case 1:
- StringCopy(dst, gText_ExclamationMark2);
+ StringCopy(dst, sText_ExclamationMark2);
break;
case 2:
- StringCopy(dst, gText_ExclamationMark3);
+ StringCopy(dst, sText_ExclamationMark3);
break;
case 3:
- StringCopy(dst, gText_ExclamationMark4);
+ StringCopy(dst, sText_ExclamationMark4);
break;
case 4:
- StringCopy(dst, gText_ExclamationMark5);
+ StringCopy(dst, sText_ExclamationMark5);
break;
}
}
diff --git a/src/battle_records.c b/src/battle_records.c
new file mode 100644
index 000000000..a148f998f
--- /dev/null
+++ b/src/battle_records.c
@@ -0,0 +1,510 @@
+#include "global.h"
+#include "battle_records.h"
+#include "bg.h"
+#include "window.h"
+#include "link.h"
+#include "battle.h"
+#include "overworld.h"
+#include "text.h"
+#include "text_window.h"
+#include "strings.h"
+#include "string_util.h"
+#include "trainer_card.h"
+#include "menu.h"
+#include "menu_helpers.h"
+#include "palette.h"
+#include "main.h"
+#include "scanline_effect.h"
+#include "international_string_util.h"
+#include "sound.h"
+#include "constants/songs.h"
+#include "malloc.h"
+#include "gpu_regs.h"
+#include "constants/game_stat.h"
+
+extern void PrintOnTrainerHillRecordsWindow(void); // pokenav.s
+
+// this file's functions
+static void Task_CloseTrainerHillRecordsOnButton(u8 taskId);
+static void Task_BeginPaletteFade(u8 taskId);
+static void Task_ExitTrainerHillRecords(u8 taskId);
+static void RemoveTrainerHillRecordsWindow(u8 windowId);
+static void CB2_ShowTrainerHillRecords(void);
+
+// EWRAM variables
+EWRAM_DATA u8 gRecordsWindowId = 0;
+EWRAM_DATA static u8 *sTilemapBuffer = NULL;
+
+// const rom data
+static const u32 sTrainerHillWindowTileset[] = INCBIN_U32("graphics/unknown/unknown_5B3484.4bpp");
+static const u16 sTrainerHillWindowPalette[] = INCBIN_U16("graphics/unknown/unknown_5B3484.gbapal");
+static const u32 sTrainerHillWindowTilemap[] = INCBIN_U32("graphics/unknown/unknown_5B3564.bin");
+
+static const struct BgTemplate sTrainerHillRecordsBgTemplates[] =
+{
+ {
+ .bg = 0,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 31,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 0,
+ .baseTile = 0
+ },
+ {
+ .bg = 3,
+ .charBaseIndex = 1,
+ .mapBaseIndex = 30,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 3,
+ .baseTile = 0
+ }
+};
+
+static const struct WindowTemplate sTrainerHillRecordsWindowTemplates[] =
+{
+ {0x0, 0x2, 0x1, 0x1A, 0x12, 0xF, 0x14},
+ DUMMY_WIN_TEMPLATE
+};
+
+static const struct WindowTemplate sLinkBattleRecordsWindow = {0x0, 0x2, 0x1, 0x1A, 0x11, 0xF, 0x1};
+
+static const u8 sText_DashesNoPlayer[] = _("-------");
+static const u8 sText_DashesNoScore[] = _("----");
+
+// code
+static void ClearLinkBattleRecord(struct LinkBattleRecord *record)
+{
+ CpuFill16(0, record, sizeof(struct LinkBattleRecord));
+ record->name[0] = EOS;
+ record->trainerId = 0;
+ record->wins = 0;
+ record->losses = 0;
+ record->draws = 0;
+}
+
+static void ClearLinkBattleRecords(struct LinkBattleRecord *records)
+{
+ s32 i;
+ for (i = 0; i < LINK_B_RECORDS_COUNT; i++)
+ {
+ ClearLinkBattleRecord(records + i);
+ }
+ SetGameStat(GAME_STAT_LINK_BATTLE_WINS, 0);
+ SetGameStat(GAME_STAT_LINK_BATTLE_LOSSES, 0);
+ SetGameStat(GAME_STAT_LINK_BATTLE_DRAWS, 0);
+}
+
+static s32 GetLinkBattleRecordTotalBattles(struct LinkBattleRecord *record)
+{
+ return record->wins + record->losses + record->draws;
+}
+
+static s32 FindLinkBattleRecord(struct LinkBattleRecord *records, const u8 *name, u16 trainerId)
+{
+ s32 i;
+
+ for (i = 0; i < LINK_B_RECORDS_COUNT; i++)
+ {
+ if (!StringCompareN(records[i].name, name, OT_NAME_LENGTH) && records[i].trainerId == trainerId)
+ return i;
+ }
+
+ return LINK_B_RECORDS_COUNT;
+}
+
+static void SortLinkBattleRecords(struct LinkBattleRecords *records)
+{
+ s32 i, j;
+
+ for (i = LINK_B_RECORDS_COUNT - 1; i > 0; i--)
+ {
+ for (j = i - 1; j >= 0; j--)
+ {
+ s32 totalBattlesI = GetLinkBattleRecordTotalBattles(&records->entries[i]);
+ s32 totalBattlesJ = GetLinkBattleRecordTotalBattles(&records->entries[j]);
+
+ if (totalBattlesI > totalBattlesJ)
+ {
+ struct LinkBattleRecord temp1;
+ u8 temp2;
+
+ temp1 = records->entries[i];
+ records->entries[i] = records->entries[j];
+ records->entries[j] = temp1;
+
+ temp2 = records->languages[i];
+ records->languages[i] = records->languages[j];
+ records->languages[j] = temp2;
+ }
+ }
+ }
+}
+
+static void UpdateLinkBattleRecord(struct LinkBattleRecord *record, s32 battleOutcome)
+{
+ switch (battleOutcome)
+ {
+ case B_OUTCOME_WON:
+ record->wins++;
+ if (record->wins > 9999)
+ record->wins = 9999;
+ break;
+ case B_OUTCOME_LOST:
+ record->losses++;
+ if (record->losses > 9999)
+ record->losses = 9999;
+ break;
+ case B_OUTCOME_DREW:
+ record->draws++;
+ if (record->draws > 9999)
+ record->draws = 9999;
+ break;
+ }
+}
+
+static void UpdateLinkBattleGameStats(s32 battleOutcome)
+{
+ u8 stat;
+
+ switch (battleOutcome)
+ {
+ case B_OUTCOME_WON:
+ stat = GAME_STAT_LINK_BATTLE_WINS;
+ break;
+ case B_OUTCOME_LOST:
+ stat = GAME_STAT_LINK_BATTLE_LOSSES;
+ break;
+ case B_OUTCOME_DREW:
+ stat = GAME_STAT_LINK_BATTLE_DRAWS;
+ break;
+ default:
+ return;
+ }
+
+ if (GetGameStat(stat) < 9999)
+ IncrementGameStat(stat);
+}
+
+static void UpdateLinkBattleRecords(struct LinkBattleRecords *records, const u8 *name, u16 trainerId, s32 battleOutcome, u8 battlerId)
+{
+ s32 index;
+
+ UpdateLinkBattleGameStats(battleOutcome);
+ SortLinkBattleRecords(records);
+ index = FindLinkBattleRecord(records->entries, name, trainerId);
+ if (index == LINK_B_RECORDS_COUNT)
+ {
+ index = LINK_B_RECORDS_COUNT - 1;
+ ClearLinkBattleRecord(&records->entries[index]);
+ StringCopyN(records->entries[index].name, name, OT_NAME_LENGTH);
+ records->entries[index].trainerId = trainerId;
+ records->languages[index] = gLinkPlayers[battlerId].language;
+ }
+ UpdateLinkBattleRecord(&records->entries[index], battleOutcome);
+ SortLinkBattleRecords(records);
+}
+
+void ClearPlayerLinkBattleRecords(void)
+{
+ ClearLinkBattleRecords(gSaveBlock1Ptr->linkBattleRecords.entries);
+}
+
+static void IncTrainerCardWins(s32 battlerId)
+{
+ u16 *wins = &gTrainerCards[battlerId].linkBattleWins;
+ (*wins)++;
+ if (*wins > 9999)
+ *wins = 9999;
+}
+
+static void IncTrainerCardLosses(s32 battlerId)
+{
+ u16 *losses = &gTrainerCards[battlerId].linkBattleLosses;
+ (*losses)++;
+ if (*losses > 9999)
+ *losses = 9999;
+}
+
+static void UpdateTrainerCardWinsLosses(s32 battlerId)
+{
+ switch (gBattleOutcome)
+ {
+ case B_OUTCOME_WON:
+ IncTrainerCardWins(BATTLE_OPPOSITE(battlerId));
+ IncTrainerCardLosses(battlerId);
+ break;
+ case B_OUTCOME_LOST:
+ IncTrainerCardLosses(BATTLE_OPPOSITE(battlerId));
+ IncTrainerCardWins(battlerId);
+ break;
+ }
+}
+
+void UpdatePlayerLinkBattleRecords(s32 battlerId)
+{
+ if (InUnionRoom() != TRUE)
+ {
+ UpdateTrainerCardWinsLosses(battlerId);
+ UpdateLinkBattleRecords(
+ &gSaveBlock1Ptr->linkBattleRecords,
+ gTrainerCards[battlerId].playerName,
+ gTrainerCards[battlerId].trainerId,
+ gBattleOutcome,
+ battlerId);
+ }
+}
+
+static void PrintLinkBattleWinsLossesDraws(struct LinkBattleRecord *records)
+{
+ s32 x;
+
+ ConvertIntToDecimalStringN(gStringVar1, GetGameStat(GAME_STAT_LINK_BATTLE_WINS), STR_CONV_MODE_LEFT_ALIGN, 4);
+ ConvertIntToDecimalStringN(gStringVar2, GetGameStat(GAME_STAT_LINK_BATTLE_LOSSES), STR_CONV_MODE_LEFT_ALIGN, 4);
+ ConvertIntToDecimalStringN(gStringVar3, GetGameStat(GAME_STAT_LINK_BATTLE_DRAWS), STR_CONV_MODE_LEFT_ALIGN, 4);
+ StringExpandPlaceholders(gStringVar4, gText_TotalRecordWLD);
+
+ x = GetStringCenterAlignXOffset(1, gStringVar4, 0xD0);
+ PrintTextOnWindow(gRecordsWindowId, 1, gStringVar4, x, 0x11, 0, NULL);
+}
+
+static void PrintLinkBattleRecord(struct LinkBattleRecord *record, u8 y, s32 language)
+{
+ if (record->wins == 0 && record->losses == 0 && record->draws == 0)
+ {
+ // empty slot
+ PrintTextOnWindow(gRecordsWindowId, 1, sText_DashesNoPlayer, 8, (y * 8) + 1, 0, NULL);
+ PrintTextOnWindow(gRecordsWindowId, 1, sText_DashesNoScore, 80, (y * 8) + 1, 0, NULL);
+ PrintTextOnWindow(gRecordsWindowId, 1, sText_DashesNoScore, 128, (y * 8) + 1, 0, NULL);
+ PrintTextOnWindow(gRecordsWindowId, 1, sText_DashesNoScore, 176, (y * 8) + 1, 0, NULL);
+ }
+ else
+ {
+ StringFillWithTerminator(gStringVar1, 8);
+ StringCopyN(gStringVar1, record->name, 7);
+ ConvertInternationalString(gStringVar1, language);
+
+ PrintTextOnWindow(gRecordsWindowId, 1, gStringVar1, 8, (y * 8) + 1, 0, NULL);
+
+ ConvertIntToDecimalStringN(gStringVar1, record->wins, STR_CONV_MODE_RIGHT_ALIGN, 4);
+ PrintTextOnWindow(gRecordsWindowId, 1, gStringVar1, 80, (y * 8) + 1, 0, NULL);
+
+ ConvertIntToDecimalStringN(gStringVar1, record->losses, STR_CONV_MODE_RIGHT_ALIGN, 4);
+ PrintTextOnWindow(gRecordsWindowId, 1, gStringVar1, 128, (y * 8) + 1, 0, NULL);
+
+ ConvertIntToDecimalStringN(gStringVar1, record->draws, STR_CONV_MODE_RIGHT_ALIGN, 4);
+ PrintTextOnWindow(gRecordsWindowId, 1, gStringVar1, 176, (y * 8) + 1, 0, NULL);
+ }
+}
+
+void ShowLinkBattleRecords(void)
+{
+ s32 i, x;
+
+ gRecordsWindowId = AddWindow(&sLinkBattleRecordsWindow);
+ NewMenuHelpers_DrawStdWindowFrame(gRecordsWindowId, FALSE);
+ FillWindowPixelBuffer(gRecordsWindowId, 0x11);
+ StringExpandPlaceholders(gStringVar4, gText_PlayersBattleResults);
+
+ x = GetStringCenterAlignXOffset(1, gStringVar4, 208);
+ PrintTextOnWindow(gRecordsWindowId, 1, gStringVar4, x, 1, 0, NULL);
+ PrintLinkBattleWinsLossesDraws(gSaveBlock1Ptr->linkBattleRecords.entries);
+
+ StringExpandPlaceholders(gStringVar4, gText_WinLoseDraw);
+ PrintTextOnWindow(gRecordsWindowId, 1, gStringVar4, 0, 41, 0, NULL);
+
+ for (i = 0; i < LINK_B_RECORDS_COUNT; i++)
+ {
+ PrintLinkBattleRecord(&gSaveBlock1Ptr->linkBattleRecords.entries[i], 7 + (i * 2), gSaveBlock1Ptr->linkBattleRecords.languages[i]);
+ }
+
+ PutWindowTilemap(gRecordsWindowId);
+ CopyWindowToVram(gRecordsWindowId, 3);
+}
+
+void RemoveRecordsWindow(void)
+{
+ sub_819746C(gRecordsWindowId, FALSE);
+ RemoveWindow(gRecordsWindowId);
+}
+
+static void Task_TrainerHillWaitForPaletteFade(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ gTasks[taskId].func = Task_CloseTrainerHillRecordsOnButton;
+}
+
+static void Task_CloseTrainerHillRecordsOnButton(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ if (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ task->func = Task_BeginPaletteFade;
+ }
+}
+
+static void Task_BeginPaletteFade(u8 taskId)
+{
+ BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
+ gTasks[taskId].func = Task_ExitTrainerHillRecords;
+}
+
+static void Task_ExitTrainerHillRecords(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ SetMainCallback2(CB2_ReturnToFieldContinueScript);
+ Free(sTilemapBuffer);
+ RemoveTrainerHillRecordsWindow(0);
+ FreeAllWindowBuffers();
+ DestroyTask(taskId);
+ }
+}
+
+static void RemoveTrainerHillRecordsWindow(u8 windowId)
+{
+ FillWindowPixelBuffer(windowId, 0);
+ ClearWindowTilemap(windowId);
+ CopyWindowToVram(windowId, 2);
+ RemoveWindow(windowId);
+}
+
+static void ClearVramOamPlttRegs(void)
+{
+ DmaClearLarge16(3, (void*)(VRAM), VRAM_SIZE, 0x1000);
+ DmaClear32(3, OAM, OAM_SIZE);
+ DmaClear16(3, PLTT, PLTT_SIZE);
+
+ SetGpuReg(REG_OFFSET_DISPCNT, 0);
+ SetGpuReg(REG_OFFSET_BG0CNT, 0);
+ SetGpuReg(REG_OFFSET_BG0HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG0VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG1CNT, 0);
+ SetGpuReg(REG_OFFSET_BG1HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG1VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG2CNT, 0);
+ SetGpuReg(REG_OFFSET_BG2HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG2VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG3CNT, 0);
+ SetGpuReg(REG_OFFSET_BG3HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG3VOFS, 0);
+ SetGpuReg(REG_OFFSET_WIN0H, 0);
+ SetGpuReg(REG_OFFSET_WIN0V, 0);
+ SetGpuReg(REG_OFFSET_WININ, 0);
+ SetGpuReg(REG_OFFSET_WINOUT, 0);
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ SetGpuReg(REG_OFFSET_BLDY, 0);
+}
+
+static void ClearTasksAndGraphicalStructs(void)
+{
+ ScanlineEffect_Stop();
+ ResetTasks();
+ ResetSpriteData();
+ ResetPaletteFade();
+ FreeAllSpritePalettes();
+}
+
+static void ResetBgCoordinates(void)
+{
+ ChangeBgX(0, 0, 0);
+ ChangeBgY(0, 0, 0);
+ ChangeBgX(1, 0, 0);
+ ChangeBgY(1, 0, 0);
+ ChangeBgX(2, 0, 0);
+ ChangeBgY(2, 0, 0);
+ ChangeBgX(3, 0, 0);
+ ChangeBgY(3, 0, 0);
+}
+
+static void SetDispcntReg(void)
+{
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_BG0_ON | DISPCNT_BG3_ON | DISPCNT_OBJ_1D_MAP);
+}
+
+static void LoadTrainerHillRecordsWindowGfx(u8 bgId)
+{
+ LoadBgTiles(bgId, sTrainerHillWindowTileset, sizeof(sTrainerHillWindowTileset), 0);
+ CopyToBgTilemapBufferRect(bgId, sTrainerHillWindowTilemap, 0, 0, 0x20, 0x20);
+ LoadPalette(sTrainerHillWindowPalette, 0, 0x20);
+}
+
+static void VblankCB_TrainerHillRecords(void)
+{
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+}
+
+static void MainCB2_TrainerHillRecords(void)
+{
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
+void ShowTrainerHillRecords(void)
+{
+ SetVBlankCallback(NULL);
+ SetMainCallback2(CB2_ShowTrainerHillRecords);
+}
+
+static void CB2_ShowTrainerHillRecords(void)
+{
+ switch (gMain.state)
+ {
+ case 0:
+ SetVBlankCallback(NULL);
+ ClearVramOamPlttRegs();
+ gMain.state++;
+ break;
+ case 1:
+ ClearTasksAndGraphicalStructs();
+ gMain.state++;
+ break;
+ case 2:
+ sTilemapBuffer = AllocZeroed(0x800);
+ ResetBgsAndClearDma3BusyFlags(0);
+ InitBgsFromTemplates(0, sTrainerHillRecordsBgTemplates, ARRAY_COUNT(sTrainerHillRecordsBgTemplates));
+ SetBgTilemapBuffer(3, sTilemapBuffer);
+ ResetBgCoordinates();
+ gMain.state++;
+ break;
+ case 3:
+ LoadTrainerHillRecordsWindowGfx(3);
+ LoadPalette(stdpal_get(0), 0xF0, 0x20);
+ gMain.state++;
+ break;
+ case 4:
+ if (IsDma3ManagerBusyWithBgCopy() != TRUE)
+ {
+ ShowBg(0);
+ ShowBg(3);
+ CopyBgTilemapBufferToVram(3);
+ gMain.state++;
+ }
+ break;
+ case 5:
+ InitWindows(sTrainerHillRecordsWindowTemplates);
+ DeactivateAllTextPrinters();
+ gMain.state++;
+ break;
+ case 6:
+ BeginNormalPaletteFade(-1, 0, 0x10, 0, 0);
+ gMain.state++;
+ break;
+ case 7:
+ SetDispcntReg();
+ SetVBlankCallback(VblankCB_TrainerHillRecords);
+ PrintOnTrainerHillRecordsWindow();
+ CreateTask(Task_TrainerHillWaitForPaletteFade, 8);
+ SetMainCallback2(MainCB2_TrainerHillRecords);
+ gMain.state = 0;
+ break;
+ }
+}
diff --git a/src/battle_script_commands.c b/src/battle_script_commands.c
index 4d40d83a8..811aba128 100644
--- a/src/battle_script_commands.c
+++ b/src/battle_script_commands.c
@@ -12,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"
@@ -32,7 +31,6 @@
#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"
@@ -50,15 +48,6 @@ extern u16 gBattle_BG2_Y;
extern u16 gBattle_BG3_X;
extern struct MusicPlayerInfo gMPlayInfo_BGM;
-struct TrainerMoney
-{
- u8 classId;
- u8 value;
-};
-
-extern const struct BattleMove gBattleMoves[];
-extern const u8 gTypeEffectiveness[336];
-extern const struct TrainerMoney gTrainerMoneyTable[];
extern const u8* const gBattleScriptsForMoveEffects[];
// functions
@@ -78,28 +67,12 @@ extern bool8 sub_81B1250(void); // ?
extern bool8 InBattlePike(void);
extern bool8 InBattlePyramid(void);
extern u16 GetBattlePyramidPickupItemId(void);
-extern u8 sav1_map_get_light_level(void);
+extern u8 Overworld_GetMapTypeOfSaveblockLocation(void);
extern u8 sub_813B21C(void);
extern u16 get_unknown_box_id(void);
-// strings
-extern const u8 gText_BattleYesNoChoice[];
-
-// read via orr
-#define BSScriptRead32(ptr) ((ptr)[0] | (ptr)[1] << 8 | (ptr)[2] << 16 | (ptr)[3] << 24)
-#define BSScriptRead16(ptr) ((ptr)[0] | ((ptr)[1] << 8))
-#define BSScriptReadPtr(ptr) ((void *)BSScriptRead32(ptr))
-
-// read via add
-#define BS2ScriptRead32(ptr) ((ptr)[0] + ((ptr)[1] << 8) + ((ptr)[2] << 16) + ((ptr)[3] << 24))
-#define BS2ScriptRead16(ptr) ((ptr)[0] + ((ptr)[1] << 8))
-#define BS2ScriptReadPtr(ptr) ((void *)BS2ScriptRead32(ptr))
-
#define DEFENDER_IS_PROTECTED ((gProtectStructs[gBattlerTarget].protected) && (gBattleMoves[gCurrentMove].flags & FLAG_PROTECT_AFFECTED))
-#define TARGET_TURN_DAMAGED (gSpecialStatuses[gBattlerTarget].physicalDmg != 0 \
- || gSpecialStatuses[gBattlerTarget].specialDmg != 0)
-
// this file's functions
static bool8 IsTwoTurnsMove(u16 move);
static void TrySetDestinyBondToHappen(void);
@@ -1036,7 +1009,7 @@ static void atk00_attackcanceler(void)
RecordAbilityBattle(gBattlerTarget, gLastUsedAbility);
}
else if (DEFENDER_IS_PROTECTED
- && (gCurrentMove != MOVE_CURSE || (gBattleMons[gBattlerAttacker].type1 == TYPE_GHOST || gBattleMons[gBattlerAttacker].type2 == TYPE_GHOST))
+ && (gCurrentMove != MOVE_CURSE || IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_GHOST))
&& ((!IsTwoTurnsMove(gCurrentMove) || (gBattleMons[gBattlerAttacker].status2 & STATUS2_MULTIPLETURNS))))
{
CancelMultiTurnMoves(gBattlerAttacker);
@@ -1059,7 +1032,7 @@ static void JumpIfMoveFailed(u8 adder, u16 move)
{
gLastLandedMoves[gBattlerTarget] = 0;
gLastHitByType[gBattlerTarget] = 0;
- BS_ptr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ BS_ptr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else
{
@@ -1144,14 +1117,14 @@ static bool8 AccuracyCalcHelper(u16 move)
static void atk01_accuracycheck(void)
{
- u16 move = BS2ScriptRead16(gBattlescriptCurrInstr + 5);
+ u16 move = T2_READ_16(gBattlescriptCurrInstr + 5);
if (move == 0xFFFE || move == 0xFFFF)
{
if (gStatuses3[gBattlerTarget] & STATUS3_ALWAYS_HITS && move == 0xFFFF && gDisableStructs[gBattlerTarget].battlerWithSureHit == gBattlerAttacker)
gBattlescriptCurrInstr += 7;
else if (gStatuses3[gBattlerTarget] & (STATUS3_ON_AIR | STATUS3_UNDERGROUND | STATUS3_UNDERWATER))
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
else if (!JumpIfMoveAffectedByProtect(0))
gBattlescriptCurrInstr += 7;
}
@@ -1410,7 +1383,7 @@ static void atk06_typecalc(void)
GET_MOVE_TYPE(gCurrentMove, moveType);
// check stab
- if (gBattleMons[gBattlerAttacker].type1 == moveType || gBattleMons[gBattlerAttacker].type2 == moveType)
+ if (IS_BATTLER_OF_TYPE(gBattlerAttacker, moveType))
{
gBattleMoveDamage = gBattleMoveDamage * 15;
gBattleMoveDamage = gBattleMoveDamage / 10;
@@ -1588,7 +1561,7 @@ u8 TypeCalc(u16 move, u8 attacker, u8 defender)
moveType = gBattleMoves[move].type;
// check stab
- if (gBattleMons[attacker].type1 == moveType || gBattleMons[attacker].type2 == moveType)
+ if (IS_BATTLER_OF_TYPE(attacker, moveType))
{
gBattleMoveDamage = gBattleMoveDamage * 15;
gBattleMoveDamage = gBattleMoveDamage / 10;
@@ -2169,7 +2142,7 @@ static void atk10_printstring(void)
{
if (gBattleControllerExecFlags == 0)
{
- u16 var = BS2ScriptRead16(gBattlescriptCurrInstr + 1);
+ u16 var = T2_READ_16(gBattlescriptCurrInstr + 1);
PrepareStringBattle(var, gBattlerAttacker);
gBattlescriptCurrInstr += 3;
gBattleCommunication[MSG_DISPLAY] = 1;
@@ -2180,7 +2153,7 @@ static void atk11_printselectionstring(void)
{
gActiveBattler = gBattlerAttacker;
- BtlController_EmitPrintSelectionString(0, BS2ScriptRead16(gBattlescriptCurrInstr + 1));
+ BtlController_EmitPrintSelectionString(0, T2_READ_16(gBattlescriptCurrInstr + 1));
MarkBattlerForControllerExec(gActiveBattler);
gBattlescriptCurrInstr += 3;
@@ -2197,7 +2170,7 @@ static void atk12_waitmessage(void)
}
else
{
- u16 toWait = BS2ScriptRead16(gBattlescriptCurrInstr + 1);
+ u16 toWait = T2_READ_16(gBattlescriptCurrInstr + 1);
if (++gPauseCounterBattle >= toWait)
{
gPauseCounterBattle = 0;
@@ -2212,7 +2185,7 @@ static void atk13_printfromtable(void)
{
if (gBattleControllerExecFlags == 0)
{
- const u16 *ptr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ const u16 *ptr = (const u16*) T1_READ_PTR(gBattlescriptCurrInstr + 1);
ptr += gBattleCommunication[MULTISTRING_CHOOSER];
PrepareStringBattle(*ptr, gBattlerAttacker);
@@ -2226,7 +2199,7 @@ static void atk14_printselectionstringfromtable(void)
{
if (gBattleControllerExecFlags == 0)
{
- const u16 *ptr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ const u16 *ptr = (const u16*) T1_READ_PTR(gBattlescriptCurrInstr + 1);
ptr += gBattleCommunication[MULTISTRING_CHOOSER];
gActiveBattler = gBattlerAttacker;
@@ -2346,8 +2319,7 @@ void SetMoveEffect(bool8 primary, u8 certain)
}
RESET_RETURN
}
- if ((gBattleMons[gEffectBattler].type1 == TYPE_POISON || gBattleMons[gEffectBattler].type2 == TYPE_POISON
- || gBattleMons[gEffectBattler].type1 == TYPE_STEEL || gBattleMons[gEffectBattler].type2 == TYPE_STEEL)
+ if ((IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_POISON) || IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_STEEL))
&& (gHitMarker & HITMARKER_IGNORE_SAFEGUARD)
&& (primary == TRUE || certain == MOVE_EFFECT_CERTAIN))
{
@@ -2357,13 +2329,9 @@ void SetMoveEffect(bool8 primary, u8 certain)
gBattleCommunication[MULTISTRING_CHOOSER] = 2;
RESET_RETURN
}
- if (gBattleMons[gEffectBattler].type1 == TYPE_POISON)
- break;
- if (gBattleMons[gEffectBattler].type2 == TYPE_POISON)
- break;
- if (gBattleMons[gEffectBattler].type1 == TYPE_STEEL)
+ if (IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_POISON))
break;
- if (gBattleMons[gEffectBattler].type2 == TYPE_STEEL)
+ if (IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_STEEL))
break;
if (gBattleMons[gEffectBattler].status1)
break;
@@ -2392,8 +2360,7 @@ void SetMoveEffect(bool8 primary, u8 certain)
}
RESET_RETURN
}
- if ((gBattleMons[gEffectBattler].type1 == TYPE_FIRE
- || gBattleMons[gEffectBattler].type2 == TYPE_FIRE)
+ if (IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_FIRE)
&& (gHitMarker & HITMARKER_IGNORE_SAFEGUARD)
&& (primary == TRUE || certain == MOVE_EFFECT_CERTAIN))
{
@@ -2403,9 +2370,7 @@ void SetMoveEffect(bool8 primary, u8 certain)
gBattleCommunication[MULTISTRING_CHOOSER] = 2;
RESET_RETURN
}
- if (gBattleMons[gEffectBattler].type1 == TYPE_FIRE)
- break;
- if (gBattleMons[gEffectBattler].type2 == TYPE_FIRE)
+ if (IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_FIRE))
break;
if (gBattleMons[gEffectBattler].ability == ABILITY_WATER_VEIL)
break;
@@ -2417,9 +2382,7 @@ void SetMoveEffect(bool8 primary, u8 certain)
case STATUS1_FREEZE:
if (WEATHER_HAS_EFFECT && gBattleWeather & WEATHER_SUN_ANY)
noSunCanFreeze = FALSE;
- if (gBattleMons[gEffectBattler].type1 == TYPE_ICE)
- break;
- if (gBattleMons[gEffectBattler].type2 == TYPE_ICE)
+ if (IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_ICE))
break;
if (gBattleMons[gEffectBattler].status1)
break;
@@ -2481,8 +2444,7 @@ void SetMoveEffect(bool8 primary, u8 certain)
}
RESET_RETURN
}
- if ((gBattleMons[gEffectBattler].type1 == TYPE_POISON || gBattleMons[gEffectBattler].type2 == TYPE_POISON
- || gBattleMons[gEffectBattler].type1 == TYPE_STEEL || gBattleMons[gEffectBattler].type2 == TYPE_STEEL)
+ if ((IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_POISON) || IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_STEEL))
&& (gHitMarker & HITMARKER_IGNORE_SAFEGUARD)
&& (primary == TRUE || certain == MOVE_EFFECT_CERTAIN))
{
@@ -2494,10 +2456,7 @@ void SetMoveEffect(bool8 primary, u8 certain)
}
if (gBattleMons[gEffectBattler].status1)
break;
- if (gBattleMons[gEffectBattler].type1 != TYPE_POISON
- && gBattleMons[gEffectBattler].type2 != TYPE_POISON
- && gBattleMons[gEffectBattler].type1 != TYPE_STEEL
- && gBattleMons[gEffectBattler].type2 != TYPE_STEEL)
+ if (!IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_POISON) && !IS_BATTLER_OF_TYPE(gEffectBattler, TYPE_STEEL))
{
if (gBattleMons[gEffectBattler].ability == ABILITY_IMMUNITY)
break;
@@ -3014,7 +2973,7 @@ static void atk19_tryfaintmon(void)
gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
if (gHitMarker & HITMARKER_FAINTED(gActiveBattler))
{
- BS_ptr = BSScriptReadPtr(gBattlescriptCurrInstr + 3);
+ BS_ptr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
BattleScriptPop();
gBattlescriptCurrInstr = BS_ptr;
@@ -3124,8 +3083,8 @@ static void atk1B_cleareffectsonfaint(void)
static void atk1C_jumpifstatus(void)
{
u8 battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
- u32 flags = BS2ScriptRead32(gBattlescriptCurrInstr + 2);
- const u8* jumpPtr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 6);
+ u32 flags = T2_READ_32(gBattlescriptCurrInstr + 2);
+ const u8* jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 6);
if (gBattleMons[battlerId].status1 & flags && gBattleMons[battlerId].hp)
gBattlescriptCurrInstr = jumpPtr;
@@ -3136,8 +3095,8 @@ static void atk1C_jumpifstatus(void)
static void atk1D_jumpifstatus2(void)
{
u8 battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
- u32 flags = BS2ScriptRead32(gBattlescriptCurrInstr + 2);
- const u8* jumpPtr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 6);
+ u32 flags = T2_READ_32(gBattlescriptCurrInstr + 2);
+ const u8* jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 6);
if (gBattleMons[battlerId].status2 & flags && gBattleMons[battlerId].hp)
gBattlescriptCurrInstr = jumpPtr;
@@ -3149,7 +3108,7 @@ static void atk1E_jumpifability(void)
{
u8 battlerId;
u8 ability = gBattlescriptCurrInstr[2];
- const u8* jumpPtr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 3);
+ const u8* jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 3);
if (gBattlescriptCurrInstr[1] == BS_ATTACKER_SIDE)
{
@@ -3203,8 +3162,8 @@ static void atk1F_jumpifsideaffecting(void)
else
side = GET_BATTLER_SIDE(gBattlerTarget);
- flags = BS2ScriptRead16(gBattlescriptCurrInstr + 2);
- jumpPtr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 4);
+ flags = T2_READ_16(gBattlescriptCurrInstr + 2);
+ jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 4);
if (gSideStatuses[side] & flags)
gBattlescriptCurrInstr = jumpPtr;
@@ -3247,7 +3206,7 @@ static void atk20_jumpifstat(void)
}
if (ret)
- gBattlescriptCurrInstr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 5);
+ gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 5);
else
gBattlescriptCurrInstr += 9;
}
@@ -3258,8 +3217,8 @@ static void atk21_jumpifstatus3condition(void)
const u8 *jumpPtr;
gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
- flags = BS2ScriptRead32(gBattlescriptCurrInstr + 2);
- jumpPtr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 7);
+ flags = T2_READ_32(gBattlescriptCurrInstr + 2);
+ jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 7);
if (gBattlescriptCurrInstr[6])
{
@@ -3281,9 +3240,9 @@ static void atk22_jumpiftype(void)
{
u8 battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
u8 type = gBattlescriptCurrInstr[2];
- const u8* jumpPtr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 3);
+ const u8* jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 3);
- if (gBattleMons[battlerId].type1 == type || gBattleMons[battlerId].type2 == type)
+ if (IS_BATTLER_OF_TYPE(battlerId, type))
gBattlescriptCurrInstr = jumpPtr;
else
gBattlescriptCurrInstr += 7;
@@ -3398,7 +3357,7 @@ static void atk23_getexp(void)
if (!(gBattleTypeFlags & BATTLE_TYPE_TRAINER) && gBattleMons[0].hp && !gBattleStruct->wildVictorySong)
{
BattleStopLowHpSound();
- PlayBGM(0x161);
+ PlayBGM(MUS_KACHI2);
gBattleStruct->wildVictorySong++;
}
@@ -3631,14 +3590,14 @@ static void atk24(void)
if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
{
if (foundOpponent + foundPlayer > 1)
- gBattlescriptCurrInstr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 1);
else
gBattlescriptCurrInstr += 5;
}
else
{
if (foundOpponent != 0 && foundPlayer != 0)
- gBattlescriptCurrInstr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 1);
else
gBattlescriptCurrInstr += 5;
}
@@ -3649,7 +3608,7 @@ static void atk24(void)
}
}
#else
-__attribute__((naked))
+NAKED
static void atk24(void)
{
asm("\n\
@@ -3972,20 +3931,20 @@ static void atk27_decrementmultihit(void)
if (--gMultiHitCounter == 0)
gBattlescriptCurrInstr += 5;
else
- gBattlescriptCurrInstr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 1);
}
static void atk28_goto(void)
{
- gBattlescriptCurrInstr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T2_READ_PTR(gBattlescriptCurrInstr + 1);
}
static void atk29_jumpifbyte(void)
{
u8 caseID = gBattlescriptCurrInstr[1];
- const u8* memByte = BS2ScriptReadPtr(gBattlescriptCurrInstr + 2);
+ const u8* memByte = T2_READ_PTR(gBattlescriptCurrInstr + 2);
u8 value = gBattlescriptCurrInstr[6];
- const u8* jumpPtr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 7);
+ const u8* jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 7);
gBattlescriptCurrInstr += 11;
@@ -4021,9 +3980,9 @@ static void atk29_jumpifbyte(void)
static void atk2A_jumpifhalfword(void)
{
u8 caseID = gBattlescriptCurrInstr[1];
- const u16* memHword = BS2ScriptReadPtr(gBattlescriptCurrInstr + 2);
- u16 value = BS2ScriptRead16(gBattlescriptCurrInstr + 6);
- const u8* jumpPtr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 8);
+ const u16* memHword = T2_READ_PTR(gBattlescriptCurrInstr + 2);
+ u16 value = T2_READ_16(gBattlescriptCurrInstr + 6);
+ const u8* jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 8);
gBattlescriptCurrInstr += 12;
@@ -4059,9 +4018,9 @@ static void atk2A_jumpifhalfword(void)
static void atk2B_jumpifword(void)
{
u8 caseID = gBattlescriptCurrInstr[1];
- const u32* memWord = BS2ScriptReadPtr(gBattlescriptCurrInstr + 2);
- u32 value = BSScriptRead32(gBattlescriptCurrInstr + 6);
- const u8* jumpPtr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 10);
+ const u32* memWord = T2_READ_PTR(gBattlescriptCurrInstr + 2);
+ u32 value = T1_READ_32(gBattlescriptCurrInstr + 6);
+ const u8* jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 10);
gBattlescriptCurrInstr += 14;
@@ -4096,10 +4055,10 @@ static void atk2B_jumpifword(void)
static void atk2C_jumpifarrayequal(void)
{
- const u8* mem1 = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1);
- const u8* mem2 = BS2ScriptReadPtr(gBattlescriptCurrInstr + 5);
+ const u8* mem1 = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+ const u8* mem2 = T2_READ_PTR(gBattlescriptCurrInstr + 5);
u32 size = gBattlescriptCurrInstr[9];
- const u8* jumpPtr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 10);
+ const u8* jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 10);
u8 i;
for (i = 0; i < size; i++)
@@ -4119,10 +4078,10 @@ static void atk2C_jumpifarrayequal(void)
static void atk2D_jumpifarraynotequal(void)
{
u8 equalBytes = 0;
- const u8* mem1 = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1);
- const u8* mem2 = BS2ScriptReadPtr(gBattlescriptCurrInstr + 5);
+ const u8* mem1 = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+ const u8* mem2 = T2_READ_PTR(gBattlescriptCurrInstr + 5);
u32 size = gBattlescriptCurrInstr[9];
- const u8* jumpPtr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 10);
+ const u8* jumpPtr = T2_READ_PTR(gBattlescriptCurrInstr + 10);
u8 i;
for (i = 0; i < size; i++)
@@ -4142,7 +4101,7 @@ static void atk2D_jumpifarraynotequal(void)
static void atk2E_setbyte(void)
{
- u8* memByte = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1);
+ u8* memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1);
*memByte = gBattlescriptCurrInstr[5];
gBattlescriptCurrInstr += 6;
@@ -4150,22 +4109,22 @@ static void atk2E_setbyte(void)
static void atk2F_addbyte(void)
{
- u8* memByte = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1);
+ u8* memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1);
*memByte += gBattlescriptCurrInstr[5];
gBattlescriptCurrInstr += 6;
}
static void atk30_subbyte(void)
{
- u8* memByte = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1);
+ u8* memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1);
*memByte -= gBattlescriptCurrInstr[5];
gBattlescriptCurrInstr += 6;
}
static void atk31_copyarray(void)
{
- u8* dest = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1);
- const u8* src = BS2ScriptReadPtr(gBattlescriptCurrInstr + 5);
+ u8* dest = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+ const u8* src = T2_READ_PTR(gBattlescriptCurrInstr + 5);
s32 size = gBattlescriptCurrInstr[9];
s32 i;
@@ -4179,9 +4138,9 @@ static void atk31_copyarray(void)
static void atk32_copyarraywithindex(void)
{
- u8* dest = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1);
- const u8* src = BS2ScriptReadPtr(gBattlescriptCurrInstr + 5);
- const u8* index = BS2ScriptReadPtr(gBattlescriptCurrInstr + 9);
+ u8* dest = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+ const u8* src = T2_READ_PTR(gBattlescriptCurrInstr + 5);
+ const u8* index = T2_READ_PTR(gBattlescriptCurrInstr + 9);
s32 size = gBattlescriptCurrInstr[13];
s32 i;
@@ -4195,15 +4154,15 @@ static void atk32_copyarraywithindex(void)
static void atk33_orbyte(void)
{
- u8* memByte = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1);
+ u8* memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1);
*memByte |= gBattlescriptCurrInstr[5];
gBattlescriptCurrInstr += 6;
}
static void atk34_orhalfword(void)
{
- u16* memHword = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1);
- u16 val = BS2ScriptRead16(gBattlescriptCurrInstr + 5);
+ u16* memHword = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+ u16 val = T2_READ_16(gBattlescriptCurrInstr + 5);
*memHword |= val;
gBattlescriptCurrInstr += 7;
@@ -4211,8 +4170,8 @@ static void atk34_orhalfword(void)
static void atk35_orword(void)
{
- u32* memWord = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1);
- u32 val = BS2ScriptRead32(gBattlescriptCurrInstr + 5);
+ u32* memWord = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+ u32 val = T2_READ_32(gBattlescriptCurrInstr + 5);
*memWord |= val;
gBattlescriptCurrInstr += 9;
@@ -4220,15 +4179,15 @@ static void atk35_orword(void)
static void atk36_bicbyte(void)
{
- u8* memByte = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1);
+ u8* memByte = T2_READ_PTR(gBattlescriptCurrInstr + 1);
*memByte &= ~(gBattlescriptCurrInstr[5]);
gBattlescriptCurrInstr += 6;
}
static void atk37_bichalfword(void)
{
- u16* memHword = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1);
- u16 val = BS2ScriptRead16(gBattlescriptCurrInstr + 5);
+ u16* memHword = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+ u16 val = T2_READ_16(gBattlescriptCurrInstr + 5);
*memHword &= ~val;
gBattlescriptCurrInstr += 7;
@@ -4236,8 +4195,8 @@ static void atk37_bichalfword(void)
static void atk38_bicword(void)
{
- u32* memWord = BS2ScriptReadPtr(gBattlescriptCurrInstr + 1);
- u32 val = BS2ScriptRead32(gBattlescriptCurrInstr + 5);
+ u32* memWord = T2_READ_PTR(gBattlescriptCurrInstr + 1);
+ u32 val = T2_READ_32(gBattlescriptCurrInstr + 5);
*memWord &= ~val;
gBattlescriptCurrInstr += 9;
@@ -4247,7 +4206,7 @@ static void atk39_pause(void)
{
if (gBattleControllerExecFlags == 0)
{
- u16 value = BS2ScriptRead16(gBattlescriptCurrInstr + 1);
+ u16 value = T2_READ_16(gBattlescriptCurrInstr + 1);
if (++gPauseCounterBattle >= value)
{
gPauseCounterBattle = 0;
@@ -4306,7 +4265,7 @@ static void atk3F_end3(void) // pops the main function stack
static void atk41_call(void)
{
BattleScriptPush(gBattlescriptCurrInstr + 5);
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
static void atk42_jumpiftype2(void)
@@ -4314,7 +4273,7 @@ static void atk42_jumpiftype2(void)
u8 battlerId = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
if (gBattlescriptCurrInstr[2] == gBattleMons[battlerId].type1 || gBattlescriptCurrInstr[2] == gBattleMons[battlerId].type2)
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 3);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 3);
else
gBattlescriptCurrInstr += 7;
}
@@ -4322,7 +4281,7 @@ static void atk42_jumpiftype2(void)
static void atk43_jumpifabilitypresent(void)
{
if (AbilityBattleEffects(ABILITYEFFECT_CHECK_ON_FIELD, 0, gBattlescriptCurrInstr[1], 0, 0))
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2);
else
gBattlescriptCurrInstr += 6;
}
@@ -4337,7 +4296,7 @@ static void atk45_playanimation(void)
const u16* argumentPtr;
gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
- argumentPtr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 3);
+ argumentPtr = T2_READ_PTR(gBattlescriptCurrInstr + 3);
if (gBattlescriptCurrInstr[2] == B_ANIM_STATS_CHANGE
|| gBattlescriptCurrInstr[2] == B_ANIM_SNATCH_MOVE
@@ -4379,8 +4338,8 @@ static void atk46_playanimation2(void) // animation Id is stored in the first po
const u8* animationIdPtr;
gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
- animationIdPtr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 2);
- argumentPtr = BS2ScriptReadPtr(gBattlescriptCurrInstr + 6);
+ animationIdPtr = T2_READ_PTR(gBattlescriptCurrInstr + 2);
+ argumentPtr = T2_READ_PTR(gBattlescriptCurrInstr + 6);
if (*animationIdPtr == B_ANIM_STATS_CHANGE
|| *animationIdPtr == B_ANIM_SNATCH_MOVE
@@ -4438,31 +4397,34 @@ static void atk47_setgraphicalstatchangevalues(void)
gBattlescriptCurrInstr++;
}
-#ifdef NONMATCHING
static void atk48_playstatchangeanimation(void)
{
u32 currStat = 0;
- s16 statAnimId = 0;
- s16 checkingStatAnimId = 0;
- s32 changeableStats = 0;
- u32 statsToCheck = 0;
+ u16 statAnimId = 0;
+ s32 changeableStatsCount = 0;
+ u8 statsToCheck = 0;
gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
statsToCheck = gBattlescriptCurrInstr[2];
if (gBattlescriptCurrInstr[3] & ATK48_STAT_NEGATIVE) // goes down
{
- checkingStatAnimId = (gBattlescriptCurrInstr[3] & ATK48_STAT_BY_TWO) ? 0x2D : 0x15;
+ s16 startingStatAnimId;
+ if (gBattlescriptCurrInstr[3] & ATK48_STAT_BY_TWO)
+ startingStatAnimId = 0x2D;
+ else
+ startingStatAnimId = 0x15;
+
while (statsToCheck != 0)
{
if (statsToCheck & 1)
{
- if (!(gBattlescriptCurrInstr[3] & ATK48_LOWER_FAIL_CHECK))
+ if (gBattlescriptCurrInstr[3] & ATK48_DONT_CHECK_LOWER)
{
if (gBattleMons[gActiveBattler].statStages[currStat] > 0)
{
- statAnimId = checkingStatAnimId;
- changeableStats++;
+ statAnimId = startingStatAnimId + currStat;
+ changeableStatsCount++;
}
}
else if (!gSideTimers[GET_BATTLER_SIDE(gActiveBattler)].mistTimer
@@ -4473,15 +4435,15 @@ static void atk48_playstatchangeanimation(void)
{
if (gBattleMons[gActiveBattler].statStages[currStat] > 0)
{
- statAnimId = checkingStatAnimId;
- changeableStats++;
+ statAnimId = startingStatAnimId + currStat;
+ changeableStatsCount++;
}
}
}
- statsToCheck >>= 1, checkingStatAnimId++, currStat++;
+ statsToCheck >>= 1, currStat++;
}
- if (changeableStats > 1) // more than one stat, so the color is gray
+ if (changeableStatsCount > 1) // more than one stat, so the color is gray
{
if (gBattlescriptCurrInstr[3] & ATK48_STAT_BY_TWO)
statAnimId = 0x3A;
@@ -4491,18 +4453,23 @@ static void atk48_playstatchangeanimation(void)
}
else // goes up
{
- checkingStatAnimId = (gBattlescriptCurrInstr[3] & ATK48_STAT_BY_TWO) ? 0x26 : 0xE;
+ s16 startingStatAnimId;
+ if (gBattlescriptCurrInstr[3] & ATK48_STAT_BY_TWO)
+ startingStatAnimId = 0x26;
+ else
+ startingStatAnimId = 0xE;
+
while (statsToCheck != 0)
{
if (statsToCheck & 1 && gBattleMons[gActiveBattler].statStages[currStat] < 0xC)
{
- statAnimId = checkingStatAnimId;
- changeableStats++;
+ statAnimId = startingStatAnimId + currStat;
+ changeableStatsCount++;
}
- statsToCheck >>= 1, checkingStatAnimId += 1, currStat++;
+ statsToCheck >>= 1, currStat++;
}
- if (changeableStats > 1) // more than one stat, so the color is gray
+ if (changeableStatsCount > 1) // more than one stat, so the color is gray
{
if (gBattlescriptCurrInstr[3] & ATK48_STAT_BY_TWO)
statAnimId = 0x38;
@@ -4511,15 +4478,15 @@ static void atk48_playstatchangeanimation(void)
}
}
- if (gBattlescriptCurrInstr[3] & ATK48_BIT_x4 && changeableStats < 2)
+ if (gBattlescriptCurrInstr[3] & ATK48_BIT_x4 && changeableStatsCount < 2)
{
gBattlescriptCurrInstr += 4;
}
- else if (changeableStats != 0 && gBattleScripting.field_1B == 0)
+ else if (changeableStatsCount != 0 && gBattleScripting.field_1B == 0)
{
BtlController_EmitBattleAnimation(0, B_ANIM_STATS_CHANGE, statAnimId);
MarkBattlerForControllerExec(gActiveBattler);
- if (gBattlescriptCurrInstr[3] & ATK48_BIT_x4 && changeableStats > 1)
+ if (gBattlescriptCurrInstr[3] & ATK48_BIT_x4 && changeableStatsCount > 1)
gBattleScripting.field_1B = 1;
gBattlescriptCurrInstr += 4;
}
@@ -4528,261 +4495,6 @@ static void atk48_playstatchangeanimation(void)
gBattlescriptCurrInstr += 4;
}
}
-#else
-__attribute__((naked))
-static void atk48_playstatchangeanimation(void)
-{
- asm("\n\
- .syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- sub sp, 0x4\n\
- movs r7, 0\n\
- movs r0, 0\n\
- mov r8, r0\n\
- movs r3, 0\n\
- ldr r5, =gBattlescriptCurrInstr\n\
- ldr r0, [r5]\n\
- ldrb r0, [r0, 0x1]\n\
- str r3, [sp]\n\
- bl GetBattlerForBattleScript\n\
- ldr r2, =gActiveBattler\n\
- strb r0, [r2]\n\
- ldr r0, [r5]\n\
- ldrb r4, [r0, 0x2]\n\
- ldrb r1, [r0, 0x3]\n\
- movs r0, 0x1\n\
- ands r0, r1\n\
- ldr r3, [sp]\n\
- cmp r0, 0\n\
- beq _0804BAEC\n\
- movs r0, 0x2\n\
- ands r0, r1\n\
- movs r1, 0x15\n\
- cmp r0, 0\n\
- beq _0804BA18\n\
- movs r1, 0x2D\n\
-_0804BA18:\n\
- cmp r4, 0\n\
- beq _0804BAC0\n\
- movs r0, 0x1\n\
- mov r10, r0\n\
- ldr r0, =gBattleMons + 0x18\n\
- mov r9, r0\n\
- lsls r5, r1, 16\n\
-_0804BA26:\n\
- adds r0, r4, 0\n\
- mov r1, r10\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0804BAB2\n\
- ldr r0, =gBattlescriptCurrInstr\n\
- ldr r0, [r0]\n\
- ldrb r1, [r0, 0x3]\n\
- movs r0, 0x8\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0804BA58\n\
- ldr r0, =gActiveBattler\n\
- ldrb r1, [r0]\n\
- movs r0, 0x58\n\
- muls r0, r1\n\
- adds r0, r7, r0\n\
- b _0804BAA0\n\
- .pool\n\
-_0804BA58:\n\
- ldr r6, =gActiveBattler\n\
- ldrb r0, [r6]\n\
- str r3, [sp]\n\
- bl GetBattlerPosition\n\
- mov r1, r10\n\
- ands r1, r0\n\
- lsls r0, r1, 1\n\
- adds r0, r1\n\
- lsls r0, 2\n\
- ldr r1, =gSideTimers\n\
- adds r0, r1\n\
- ldrb r0, [r0, 0x4]\n\
- ldr r3, [sp]\n\
- cmp r0, 0\n\
- bne _0804BAB2\n\
- ldr r0, =gBattleMons\n\
- ldrb r2, [r6]\n\
- movs r1, 0x58\n\
- muls r2, r1\n\
- adds r0, r2, r0\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- cmp r0, 0x1D\n\
- beq _0804BAB2\n\
- cmp r0, 0x49\n\
- beq _0804BAB2\n\
- cmp r0, 0x33\n\
- bne _0804BA96\n\
- cmp r7, 0x6\n\
- beq _0804BAB2\n\
-_0804BA96:\n\
- cmp r0, 0x34\n\
- bne _0804BA9E\n\
- cmp r7, 0x1\n\
- beq _0804BAB2\n\
-_0804BA9E:\n\
- adds r0, r7, r2\n\
-_0804BAA0:\n\
- add r0, r9\n\
- ldrb r0, [r0]\n\
- lsls r0, 24\n\
- asrs r0, 24\n\
- cmp r0, 0\n\
- ble _0804BAB2\n\
- lsrs r0, r5, 16\n\
- mov r8, r0\n\
- adds r3, 0x1\n\
-_0804BAB2:\n\
- lsrs r4, 1\n\
- movs r1, 0x80\n\
- lsls r1, 9\n\
- adds r5, r1\n\
- adds r7, 0x1\n\
- cmp r4, 0\n\
- bne _0804BA26\n\
-_0804BAC0:\n\
- ldr r0, =gBattlescriptCurrInstr\n\
- mov r9, r0\n\
- cmp r3, 0x1\n\
- ble _0804BB4E\n\
- ldr r0, [r0]\n\
- ldrb r1, [r0, 0x3]\n\
- movs r0, 0x2\n\
- ands r0, r1\n\
- movs r1, 0x39\n\
- mov r8, r1\n\
- cmp r0, 0\n\
- beq _0804BB4E\n\
- movs r0, 0x3A\n\
- b _0804BB4C\n\
- .pool\n\
-_0804BAEC:\n\
- movs r0, 0x2\n\
- ands r0, r1\n\
- movs r1, 0xE\n\
- cmp r0, 0\n\
- beq _0804BAF8\n\
- movs r1, 0x26\n\
-_0804BAF8:\n\
- mov r9, r5\n\
- cmp r4, 0\n\
- beq _0804BB34\n\
- ldr r6, =gBattleMons + 0x18\n\
- adds r5, r2, 0\n\
- lsls r2, r1, 16\n\
-_0804BB04:\n\
- movs r0, 0x1\n\
- ands r0, r4\n\
- cmp r0, 0\n\
- beq _0804BB26\n\
- ldrb r1, [r5]\n\
- movs r0, 0x58\n\
- muls r0, r1\n\
- adds r0, r7, r0\n\
- adds r0, r6\n\
- ldrb r0, [r0]\n\
- lsls r0, 24\n\
- asrs r0, 24\n\
- cmp r0, 0xB\n\
- bgt _0804BB26\n\
- lsrs r1, r2, 16\n\
- mov r8, r1\n\
- adds r3, 0x1\n\
-_0804BB26:\n\
- lsrs r4, 1\n\
- movs r0, 0x80\n\
- lsls r0, 9\n\
- adds r2, r0\n\
- adds r7, 0x1\n\
- cmp r4, 0\n\
- bne _0804BB04\n\
-_0804BB34:\n\
- cmp r3, 0x1\n\
- ble _0804BB4E\n\
- mov r1, r9\n\
- ldr r0, [r1]\n\
- ldrb r1, [r0, 0x3]\n\
- movs r0, 0x2\n\
- ands r0, r1\n\
- movs r1, 0x37\n\
- mov r8, r1\n\
- cmp r0, 0\n\
- beq _0804BB4E\n\
- movs r0, 0x38\n\
-_0804BB4C:\n\
- mov r8, r0\n\
-_0804BB4E:\n\
- mov r1, r9\n\
- ldr r2, [r1]\n\
- ldrb r1, [r2, 0x3]\n\
- movs r0, 0x4\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0804BB6C\n\
- cmp r3, 0x1\n\
- bgt _0804BB6C\n\
- adds r0, r2, 0x4\n\
- mov r1, r9\n\
- b _0804BBBA\n\
- .pool\n\
-_0804BB6C:\n\
- cmp r3, 0\n\
- beq _0804BBB4\n\
- ldr r4, =gBattleScripting\n\
- ldrb r0, [r4, 0x1B]\n\
- cmp r0, 0\n\
- bne _0804BBB4\n\
- movs r0, 0\n\
- movs r1, 0x1\n\
- mov r2, r8\n\
- str r3, [sp]\n\
- bl BtlController_EmitBattleAnimation\n\
- ldr r0, =gActiveBattler\n\
- ldrb r0, [r0]\n\
- bl MarkBattlerForControllerExec\n\
- ldr r0, =gBattlescriptCurrInstr\n\
- ldr r0, [r0]\n\
- ldrb r1, [r0, 0x3]\n\
- movs r0, 0x4\n\
- ands r0, r1\n\
- ldr r3, [sp]\n\
- cmp r0, 0\n\
- beq _0804BBA4\n\
- cmp r3, 0x1\n\
- ble _0804BBA4\n\
- movs r0, 0x1\n\
- strb r0, [r4, 0x1B]\n\
-_0804BBA4:\n\
- ldr r1, =gBattlescriptCurrInstr\n\
- b _0804BBB6\n\
- .pool\n\
-_0804BBB4:\n\
- mov r1, r9\n\
-_0804BBB6:\n\
- ldr r0, [r1]\n\
- adds r0, 0x4\n\
-_0804BBBA:\n\
- str r0, [r1]\n\
- add sp, 0x4\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .syntax divided");
-}
-#endif // NONMATCHING
#define ATK49_LAST_CASE 17
@@ -5273,10 +4985,9 @@ static void atk4E_switchinanim(void)
static void atk4F_jumpifcantswitch(void)
{
- s32 val = 0;
- s32 compareVar = 0;
- struct Pokemon *party = NULL;
- s32 r7 = 0;
+ s32 i;
+ s32 lastMonId;
+ struct Pokemon *party;
gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1] & ~(ATK4F_DONT_CHECK_STATUSES));
@@ -5284,7 +4995,7 @@ static void atk4F_jumpifcantswitch(void)
&& ((gBattleMons[gActiveBattler].status2 & (STATUS2_WRAPPED | STATUS2_ESCAPE_PREVENTION))
|| (gStatuses3[gActiveBattler] & STATUS3_ROOTED)))
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2);
}
else if (gBattleTypeFlags & BATTLE_TYPE_INGAME_PARTNER)
{
@@ -5296,21 +5007,21 @@ static void atk4F_jumpifcantswitch(void)
else
party = gPlayerParty;
- val = 0;
- if (2 & gActiveBattler)
- val = 3;
+ i = 0;
+ if (gActiveBattler & 2)
+ i = 3;
- for (compareVar = val + 3; val < compareVar; val++)
+ for (lastMonId = i + 3; i < lastMonId; i++)
{
- if (GetMonData(&party[val], MON_DATA_SPECIES) != SPECIES_NONE
- && !GetMonData(&party[val], MON_DATA_IS_EGG)
- && GetMonData(&party[val], MON_DATA_HP) != 0
- && gBattlerPartyIndexes[gActiveBattler] != val)
+ if (GetMonData(&party[i], MON_DATA_SPECIES) != SPECIES_NONE
+ && !GetMonData(&party[i], MON_DATA_IS_EGG)
+ && GetMonData(&party[i], MON_DATA_HP) != 0
+ && gBattlerPartyIndexes[gActiveBattler] != i)
break;
}
- if (val == compareVar)
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2);
+ if (i == lastMonId)
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2);
else
gBattlescriptCurrInstr += 6;
}
@@ -5322,18 +5033,18 @@ static void atk4F_jumpifcantswitch(void)
{
party = gPlayerParty;
- val = 0;
+ i = 0;
if (sub_806D82C(GetBattlerMultiplayerId(gActiveBattler)) == TRUE)
- val = 3;
+ i = 3;
}
else
{
party = gEnemyParty;
if (gActiveBattler == 1)
- val = 0;
+ i = 0;
else
- val = 3;
+ i = 3;
}
}
else
@@ -5343,23 +5054,22 @@ static void atk4F_jumpifcantswitch(void)
else
party = gPlayerParty;
-
- val = 0;
+ i = 0;
if (sub_806D82C(GetBattlerMultiplayerId(gActiveBattler)) == TRUE)
- val = 3;
+ i = 3;
}
- for (compareVar = val + 3; val < compareVar; val++)
+ for (lastMonId = i + 3; i < lastMonId; i++)
{
- if (GetMonData(&party[val], MON_DATA_SPECIES) != SPECIES_NONE
- && !GetMonData(&party[val], MON_DATA_IS_EGG)
- && GetMonData(&party[val], MON_DATA_HP) != 0
- && gBattlerPartyIndexes[gActiveBattler] != val)
+ if (GetMonData(&party[i], MON_DATA_SPECIES) != SPECIES_NONE
+ && !GetMonData(&party[i], MON_DATA_IS_EGG)
+ && GetMonData(&party[i], MON_DATA_HP) != 0
+ && gBattlerPartyIndexes[gActiveBattler] != i)
break;
}
- if (val == compareVar)
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2);
+ if (i == lastMonId)
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2);
else
gBattlescriptCurrInstr += 6;
}
@@ -5367,59 +5077,62 @@ static void atk4F_jumpifcantswitch(void)
{
party = gEnemyParty;
- val = 0;
- if (gActiveBattler == 3)
- val = 3;
+ i = 0;
+ if (gActiveBattler == B_POSITION_OPPONENT_RIGHT)
+ i = 3;
- for (compareVar = val + 3; val < compareVar; val++)
+ for (lastMonId = i + 3; i < lastMonId; i++)
{
- if (GetMonData(&party[val], MON_DATA_SPECIES) != SPECIES_NONE
- && !GetMonData(&party[val], MON_DATA_IS_EGG)
- && GetMonData(&party[val], MON_DATA_HP) != 0
- && gBattlerPartyIndexes[gActiveBattler] != val)
+ if (GetMonData(&party[i], MON_DATA_SPECIES) != SPECIES_NONE
+ && !GetMonData(&party[i], MON_DATA_IS_EGG)
+ && GetMonData(&party[i], MON_DATA_HP) != 0
+ && gBattlerPartyIndexes[gActiveBattler] != i)
break;
}
- if (val == compareVar)
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2);
+ if (i == lastMonId)
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2);
else
gBattlescriptCurrInstr += 6;
}
else
{
+ u8 battlerIn1, battlerIn2;
+
if (GetBattlerSide(gActiveBattler) == B_SIDE_OPPONENT)
{
- r7 = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
+ battlerIn1 = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
- compareVar = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
+ battlerIn2 = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
else
- compareVar = r7;
+ battlerIn2 = battlerIn1;
party = gEnemyParty;
}
else
{
- r7 = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
+ battlerIn1 = GetBattlerAtPosition(B_POSITION_PLAYER_LEFT);
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
- compareVar = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT);
+ battlerIn2 = GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT);
else
- compareVar = r7;
+ battlerIn2 = battlerIn1;
party = gPlayerParty;
}
- for (val = 0; val < 6; val++)
+
+ for (i = 0; i < PARTY_SIZE; i++)
{
- if (GetMonData(&party[val], MON_DATA_HP) != 0
- && GetMonData(&party[val], MON_DATA_SPECIES) != SPECIES_NONE
- && !GetMonData(&party[val], MON_DATA_IS_EGG)
- && val != gBattlerPartyIndexes[r7] && val != gBattlerPartyIndexes[compareVar])
+ if (GetMonData(&party[i], MON_DATA_HP) != 0
+ && GetMonData(&party[i], MON_DATA_SPECIES) != SPECIES_NONE
+ && !GetMonData(&party[i], MON_DATA_IS_EGG)
+ && i != gBattlerPartyIndexes[battlerIn1] && i != gBattlerPartyIndexes[battlerIn2])
break;
}
- if (val == 6)
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2);
+ if (i == 6)
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2);
else
gBattlescriptCurrInstr += 6;
}
@@ -5444,7 +5157,7 @@ static void atk50_openpartyscreen(void)
battlerId = 0;
flags = 0;
- jumpPtr = BSScriptReadPtr(gBattlescriptCurrInstr + 2);
+ jumpPtr = T1_READ_PTR(gBattlescriptCurrInstr + 2);
if (gBattlescriptCurrInstr[1] == 5)
{
@@ -5804,8 +5517,7 @@ static void atk52_switchineffects(void)
if (!(gSideStatuses[GetBattlerSide(gActiveBattler)] & SIDE_STATUS_SPIKES_DAMAGED)
&& (gSideStatuses[GetBattlerSide(gActiveBattler)] & SIDE_STATUS_SPIKES)
- && gBattleMons[gActiveBattler].type1 != TYPE_FLYING
- && gBattleMons[gActiveBattler].type2 != TYPE_FLYING
+ && !IS_BATTLER_OF_TYPE(gActiveBattler, TYPE_FLYING)
&& gBattleMons[gActiveBattler].ability != ABILITY_LEVITATE)
{
u8 spikesDmg;
@@ -5885,7 +5597,7 @@ static void atk53_trainerslidein(void)
static void atk54_playse(void)
{
gActiveBattler = gBattlerAttacker;
- BtlController_EmitPlaySE(0, BS2ScriptRead16(gBattlescriptCurrInstr + 1));
+ BtlController_EmitPlaySE(0, T2_READ_16(gBattlescriptCurrInstr + 1));
MarkBattlerForControllerExec(gActiveBattler);
gBattlescriptCurrInstr += 3;
@@ -5894,7 +5606,7 @@ static void atk54_playse(void)
static void atk55_fanfare(void)
{
gActiveBattler = gBattlerAttacker;
- BtlController_EmitPlayFanfareOrBGM(0, BS2ScriptRead16(gBattlescriptCurrInstr + 1), FALSE);
+ BtlController_EmitPlayFanfareOrBGM(0, T2_READ_16(gBattlescriptCurrInstr + 1), FALSE);
MarkBattlerForControllerExec(gActiveBattler);
gBattlescriptCurrInstr += 3;
@@ -5929,8 +5641,8 @@ static void atk58_returntoball(void)
static void atk59_handlelearnnewmove(void)
{
- const u8 *jumpPtr1 = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
- const u8 *jumpPtr2 = BSScriptReadPtr(gBattlescriptCurrInstr + 5);
+ const u8 *jumpPtr1 = T1_READ_PTR(gBattlescriptCurrInstr + 1);
+ const u8 *jumpPtr2 = T1_READ_PTR(gBattlescriptCurrInstr + 5);
u16 ret = MonTryLearningNewMove(&gPlayerParty[gBattleStruct->expGetterMonId], gBattlescriptCurrInstr[9]);
while (ret == 0xFFFE)
@@ -6047,7 +5759,7 @@ static void atk5A_yesnoboxlearnmove(void)
}
else
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
PREPARE_MOVE_BUFFER(gBattleTextBuff2, moveId)
@@ -6117,7 +5829,7 @@ static void atk5B_yesnoboxstoplearningmove(void)
PlaySE(SE_SELECT);
if (gBattleCommunication[1] != 0)
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
else
gBattlescriptCurrInstr += 5;
@@ -6126,7 +5838,7 @@ static void atk5B_yesnoboxstoplearningmove(void)
else if (gMain.newKeys & B_BUTTON)
{
PlaySE(SE_SELECT);
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
HandleBattleWindow(0x18, 0x8, 0x1D, 0xD, WINDOW_CLEAR);
}
break;
@@ -6351,7 +6063,7 @@ static void atk65_status2animation(void)
if (gBattleControllerExecFlags == 0)
{
gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
- wantedToAnimate = BSScriptRead32(gBattlescriptCurrInstr + 2);
+ wantedToAnimate = T1_READ_32(gBattlescriptCurrInstr + 2);
if (!(gStatuses3[gActiveBattler] & STATUS3_SEMI_INVULNERABLE)
&& gDisableStructs[gActiveBattler].substituteHP == 0
&& !(gHitMarker & HITMARKER_NO_ANIMATIONS))
@@ -6370,7 +6082,7 @@ static void atk66_chosenstatusanimation(void)
if (gBattleControllerExecFlags == 0)
{
gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
- wantedStatus = BSScriptRead32(gBattlescriptCurrInstr + 3);
+ wantedStatus = T1_READ_32(gBattlescriptCurrInstr + 3);
if (!(gStatuses3[gActiveBattler] & STATUS3_SEMI_INVULNERABLE)
&& gDisableStructs[gActiveBattler].substituteHP == 0
&& !(gHitMarker & HITMARKER_NO_ANIMATIONS))
@@ -6821,7 +6533,7 @@ static void atk71_buffermovetolearn(void)
static void atk72_jumpifplayerran(void)
{
if (TryRunFromBattle(gBattlerFainted))
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
else
gBattlescriptCurrInstr += 5;
}
@@ -6882,8 +6594,7 @@ static void atk74_hpthresholds2(void)
static void atk75_useitemonopponent(void)
{
gBattlerInMenuId = gBattlerAttacker;
- ExecuteTableBasedItemEffect(&gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker]], gLastUsedItem, gBattlerPartyIndexes[gBattlerAttacker], 0, 1);
-
+ PokemonUseItemEffects(&gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker]], gLastUsedItem, gBattlerPartyIndexes[gBattlerAttacker], 0, 1);
gBattlescriptCurrInstr += 1;
}
@@ -7151,7 +6862,7 @@ static void atk79_setatkhptozero(void)
static void atk7A_jumpifnexttargetvalid(void)
{
- const u8 *jumpPtr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ const u8 *jumpPtr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
{
@@ -7176,7 +6887,7 @@ static void atk7A_jumpifnexttargetvalid(void)
static void atk7B_tryhealhalfhealth(void)
{
- const u8* failPtr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ const u8* failPtr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
if (gBattlescriptCurrInstr[5] == BS_ATTACKER)
gBattlerTarget = gBattlerAttacker;
@@ -7286,7 +6997,7 @@ static void atk7F_setseeded(void)
gMoveResultFlags |= MOVE_RESULT_MISSED;
gBattleCommunication[MULTISTRING_CHOOSER] = 1;
}
- else if (gBattleMons[gBattlerTarget].type1 == TYPE_GRASS || gBattleMons[gBattlerTarget].type2 == TYPE_GRASS)
+ else if (IS_BATTLER_OF_TYPE(gBattlerTarget, TYPE_GRASS))
{
gMoveResultFlags |= MOVE_RESULT_MISSED;
gBattleCommunication[MULTISTRING_CHOOSER] = 2;
@@ -7325,7 +7036,7 @@ static void atk80_manipulatedamage(void)
static void atk81_trysetrest(void)
{
- const u8 *failJump = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ const u8 *failJump = T1_READ_PTR(gBattlescriptCurrInstr + 1);
gActiveBattler = gBattlerTarget = gBattlerAttacker;
gBattleMoveDamage = gBattleMons[gBattlerTarget].maxHP * (-1);
@@ -7349,7 +7060,7 @@ static void atk81_trysetrest(void)
static void atk82_jumpifnotfirstturn(void)
{
- const u8* failJump = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ const u8* failJump = T1_READ_PTR(gBattlescriptCurrInstr + 1);
if (gDisableStructs[gBattlerAttacker].isFirstTurn)
gBattlescriptCurrInstr += 5;
@@ -7391,7 +7102,7 @@ bool8 UproarWakeUpCheck(u8 battlerId)
static void atk84_jumpifcantmakeasleep(void)
{
- const u8 *jumpPtr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ const u8 *jumpPtr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
if (UproarWakeUpCheck(gBattlerTarget))
{
@@ -7431,7 +7142,7 @@ static void atk85_stockpile(void)
static void atk86_stockpiletobasedamage(void)
{
- const u8* jumpPtr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ const u8* jumpPtr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
if (gDisableStructs[gBattlerAttacker].stockpileCounter == 0)
{
gBattlescriptCurrInstr = jumpPtr;
@@ -7457,7 +7168,7 @@ static void atk86_stockpiletobasedamage(void)
static void atk87_stockpiletohpheal(void)
{
- const u8* jumpPtr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ const u8* jumpPtr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
if (gDisableStructs[gBattlerAttacker].stockpileCounter == 0)
{
@@ -7667,7 +7378,7 @@ static u8 ChangeStatBuffs(s8 statValue, u8 statId, u8 flags, const u8 *BS_ptr)
static void atk89_statbuffchange(void)
{
- const u8* jumpPtr = BSScriptReadPtr(gBattlescriptCurrInstr + 2);
+ const u8* jumpPtr = T1_READ_PTR(gBattlescriptCurrInstr + 2);
if (ChangeStatBuffs(gBattleScripting.statChanger & 0xF0, GET_STAT_BUFF_ID(gBattleScripting.statChanger), gBattlescriptCurrInstr[1], jumpPtr) == STAT_CHANGE_WORKED)
gBattlescriptCurrInstr += 6;
}
@@ -7739,7 +7450,7 @@ static bool8 TryDoForceSwitchOut(void)
u16 random = Random() & 0xFF;
if ((u32)((random * (gBattleMons[gBattlerAttacker].level + gBattleMons[gBattlerTarget].level) >> 8) + 1) <= (gBattleMons[gBattlerTarget].level / 4))
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
return FALSE;
}
*(gBattleStruct->field_58 + gBattlerTarget) = gBattlerPartyIndexes[gBattlerTarget];
@@ -7869,7 +7580,7 @@ static void atk8F_forcerandomswitch(void)
if (validMons <= minNeeded)
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else
{
@@ -7930,7 +7641,7 @@ static void atk90_tryconversiontypechange(void) // randomly changes user's type
if (moveType == TYPE_MYSTERY)
{
- if (gBattleMons[gBattlerAttacker].type1 == TYPE_GHOST || gBattleMons[gBattlerAttacker].type2 == TYPE_GHOST)
+ if (IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_GHOST))
moveType = TYPE_GHOST;
else
moveType = TYPE_NORMAL;
@@ -7944,7 +7655,7 @@ static void atk90_tryconversiontypechange(void) // randomly changes user's type
if (moveChecked == validMoves)
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else
{
@@ -7957,7 +7668,7 @@ static void atk90_tryconversiontypechange(void) // randomly changes user's type
if (moveType == TYPE_MYSTERY)
{
- if (gBattleMons[gBattlerAttacker].type1 == TYPE_GHOST || gBattleMons[gBattlerAttacker].type2 == TYPE_GHOST)
+ if (IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_GHOST))
moveType = TYPE_GHOST;
else
moveType = TYPE_NORMAL;
@@ -7965,10 +7676,8 @@ static void atk90_tryconversiontypechange(void) // randomly changes user's type
}
while (moveType == gBattleMons[gBattlerAttacker].type1 || moveType == gBattleMons[gBattlerAttacker].type2);
- gBattleMons[gBattlerAttacker].type1 = moveType;
- gBattleMons[gBattlerAttacker].type2 = moveType;
-
- PREPARE_TYPE_BUFFER(gBattleTextBuff1, moveType)
+ SET_BATTLER_TYPE(gBattlerAttacker, moveType);
+ PREPARE_TYPE_BUFFER(gBattleTextBuff1, moveType);
gBattlescriptCurrInstr += 5;
}
@@ -8095,7 +7804,7 @@ static void atk93_tryKO(void)
gBattleCommunication[MULTISTRING_CHOOSER] = 0;
else
gBattleCommunication[MULTISTRING_CHOOSER] = 1;
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
}
}
@@ -8152,8 +7861,7 @@ static void atk96_weatherdamage(void)
}
if (gBattleWeather & WEATHER_HAIL)
{
- if (gBattleMons[gBattlerAttacker].type1 != TYPE_ICE
- && gBattleMons[gBattlerAttacker].type2 != TYPE_ICE
+ if (!IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_ICE)
&& !(gStatuses3[gBattlerAttacker] & STATUS3_UNDERGROUND)
&& !(gStatuses3[gBattlerAttacker] & STATUS3_UNDERWATER))
{
@@ -8213,7 +7921,7 @@ static void atk97_tryinfatuating(void)
|| GetGenderFromSpeciesAndPersonality(speciesAttacker, personalityAttacker) == MON_GENDERLESS
|| GetGenderFromSpeciesAndPersonality(speciesTarget, personalityTarget) == MON_GENDERLESS)
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else
{
@@ -8377,7 +8085,7 @@ static void atk9D_mimicattackcopy(void)
|| gLastMoves[gBattlerTarget] == 0
|| gLastMoves[gBattlerTarget] == 0xFFFF)
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else
{
@@ -8405,7 +8113,7 @@ static void atk9D_mimicattackcopy(void)
}
else
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
}
}
@@ -8480,7 +8188,7 @@ static void atkA1_counterdamagecalculator(void)
else
{
gSpecialStatuses[gBattlerAttacker].flag20 = 1;
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
}
@@ -8503,7 +8211,7 @@ static void atkA2_mirrorcoatdamagecalculator(void) // a copy of atkA1 with the p
else
{
gSpecialStatuses[gBattlerAttacker].flag20 = 1;
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
}
@@ -8528,7 +8236,7 @@ static void atkA3_disablelastusedattack(void)
}
else
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
}
@@ -8560,7 +8268,7 @@ static void atkA4_trysetencore(void)
}
else
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
}
@@ -8584,7 +8292,7 @@ static void atkA5_painsplitdmgcalc(void)
}
else
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
}
@@ -8593,12 +8301,12 @@ static void atkA6_settypetorandomresistance(void) // conversion 2
if (gLastLandedMoves[gBattlerAttacker] == 0
|| gLastLandedMoves[gBattlerAttacker] == 0xFFFF)
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else if (IsTwoTurnsMove(gLastLandedMoves[gBattlerAttacker])
&& gBattleMons[gLastHitBy[gBattlerAttacker]].status2 & STATUS2_MULTIPLETURNS)
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else
{
@@ -8612,13 +8320,10 @@ static void atkA6_settypetorandomresistance(void) // conversion 2
if (TYPE_EFFECT_ATK_TYPE(i) == gLastHitByType[gBattlerAttacker]
&& TYPE_EFFECT_MULTIPLIER(i) <= TYPE_MUL_NOT_EFFECTIVE
- && gBattleMons[gBattlerAttacker].type1 != TYPE_EFFECT_DEF_TYPE(i)
- && gBattleMons[gBattlerAttacker].type2 != TYPE_EFFECT_DEF_TYPE(i))
+ && !IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_EFFECT_DEF_TYPE(i)))
{
- gBattleMons[gBattlerAttacker].type1 = TYPE_EFFECT_DEF_TYPE(i);
- gBattleMons[gBattlerAttacker].type2 = TYPE_EFFECT_DEF_TYPE(i);
-
- PREPARE_TYPE_BUFFER(gBattleTextBuff1, TYPE_EFFECT_DEF_TYPE(i))
+ SET_BATTLER_TYPE(gBattlerAttacker, TYPE_EFFECT_DEF_TYPE(i));
+ PREPARE_TYPE_BUFFER(gBattleTextBuff1, TYPE_EFFECT_DEF_TYPE(i));
gBattlescriptCurrInstr += 5;
return;
@@ -8635,12 +8340,9 @@ static void atkA6_settypetorandomresistance(void) // conversion 2
default:
if (TYPE_EFFECT_ATK_TYPE(j) == gLastHitByType[gBattlerAttacker]
&& TYPE_EFFECT_MULTIPLIER(j) <= 5
- && gBattleMons[gBattlerAttacker].type1 != TYPE_EFFECT_DEF_TYPE(i)
- && gBattleMons[gBattlerAttacker].type2 != TYPE_EFFECT_DEF_TYPE(i))
+ && !IS_BATTLER_OF_TYPE(gBattlerAttacker, TYPE_EFFECT_DEF_TYPE(i)))
{
- gBattleMons[gBattlerAttacker].type1 = TYPE_EFFECT_DEF_TYPE(rands);
- gBattleMons[gBattlerAttacker].type2 = TYPE_EFFECT_DEF_TYPE(rands);
-
+ SET_BATTLER_TYPE(gBattlerAttacker, TYPE_EFFECT_DEF_TYPE(rands));
PREPARE_TYPE_BUFFER(gBattleTextBuff1, TYPE_EFFECT_DEF_TYPE(rands))
gBattlescriptCurrInstr += 5;
@@ -8650,7 +8352,7 @@ static void atkA6_settypetorandomresistance(void) // conversion 2
}
}
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
}
@@ -8684,7 +8386,7 @@ static void atkA8_copymovepermanently(void) // sketch
if (i != 4)
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else // sketch worked
{
@@ -8711,7 +8413,7 @@ static void atkA8_copymovepermanently(void) // sketch
}
else
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
}
@@ -8792,7 +8494,7 @@ static void atkA9_trychoosesleeptalkmove(void)
gCurrMovePos = movePosition;
gHitMarker &= ~(HITMARKER_ATTACKSTRING_PRINTED);
gBattlerTarget = GetMoveTarget(gRandomMove, 0);
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
}
@@ -8877,12 +8579,12 @@ static void atkAD_tryspiteppreduce(void)
}
else
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
}
else
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
}
@@ -8986,7 +8688,7 @@ static void atkAF_cursetarget(void)
{
if (gBattleMons[gBattlerTarget].status2 & STATUS2_CURSED)
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else
{
@@ -9006,7 +8708,7 @@ static void atkB0_trysetspikes(void)
if (gSideTimers[targetSide].spikesAmount == 3)
{
gSpecialStatuses[gBattlerAttacker].flag20 = 1;
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else
{
@@ -9045,7 +8747,7 @@ static void atkB2_trysetperishsong(void)
PressurePPLoseOnUsingPerishSong(gBattlerAttacker);
if (notAffectedCount == gBattlersCount)
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
else
gBattlescriptCurrInstr += 5;
}
@@ -9089,7 +8791,7 @@ static void atkB4_jumpifconfusedandstatmaxed(void)
{
if (gBattleMons[gBattlerTarget].status2 & STATUS2_CONFUSION
&& gBattleMons[gBattlerTarget].statStages[gBattlescriptCurrInstr[1]] == 0xC)
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2);
else
gBattlescriptCurrInstr += 6;
}
@@ -9267,7 +8969,7 @@ static void atkBA_jumpifnopursuitswitchdmg(void)
}
else
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
}
@@ -9307,7 +9009,7 @@ static void atkBC_maxattackhalvehp(void) // belly drum
}
else
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
}
@@ -9387,185 +9089,39 @@ static void atkC0_recoverbasedonsunlight(void)
}
else
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
}
-#ifdef NONMATCHING
static void atkC1_hiddenpowercalc(void)
{
- u32 powerBits = 0;
- u32 typeBits = 0;
+ u8 powerBits;
+ u8 typeBits;
- powerBits |= ((gBattleMons[gBattlerAttacker].hpIV & 2) >> 1);
- powerBits |= ((gBattleMons[gBattlerAttacker].attackIV & 2) << 0);
- powerBits |= ((gBattleMons[gBattlerAttacker].defenseIV & 2) << 1);
- powerBits |= ((gBattleMons[gBattlerAttacker].speedIV & 2) << 2);
- powerBits |= ((gBattleMons[gBattlerAttacker].spAttackIV & 2) << 3);
- powerBits |= ((gBattleMons[gBattlerAttacker].spDefenseIV & 2) << 4);
+ powerBits = ((gBattleMons[gBattlerAttacker].hpIV & 2) >> 1)
+ | ((gBattleMons[gBattlerAttacker].attackIV & 2) << 0)
+ | ((gBattleMons[gBattlerAttacker].defenseIV & 2) << 1)
+ | ((gBattleMons[gBattlerAttacker].speedIV & 2) << 2)
+ | ((gBattleMons[gBattlerAttacker].spAttackIV & 2) << 3)
+ | ((gBattleMons[gBattlerAttacker].spDefenseIV & 2) << 4);
- typeBits |= ((gBattleMons[gBattlerAttacker].hpIV & 1) << 0);
- typeBits |= ((gBattleMons[gBattlerAttacker].attackIV & 1) << 1);
- typeBits |= ((gBattleMons[gBattlerAttacker].defenseIV & 1) << 2);
- typeBits |= ((gBattleMons[gBattlerAttacker].speedIV & 1) << 3);
- typeBits |= ((gBattleMons[gBattlerAttacker].spAttackIV & 1) << 4);
- typeBits |= ((gBattleMons[gBattlerAttacker].spDefenseIV & 1) << 5);
+ typeBits = ((gBattleMons[gBattlerAttacker].hpIV & 1) << 0)
+ | ((gBattleMons[gBattlerAttacker].attackIV & 1) << 1)
+ | ((gBattleMons[gBattlerAttacker].defenseIV & 1) << 2)
+ | ((gBattleMons[gBattlerAttacker].speedIV & 1) << 3)
+ | ((gBattleMons[gBattlerAttacker].spAttackIV & 1) << 4)
+ | ((gBattleMons[gBattlerAttacker].spDefenseIV & 1) << 5);
gDynamicBasePower = (40 * powerBits) / 63 + 30;
gBattleStruct->dynamicMoveType = (15 * typeBits) / 63 + 1;
- if (gBattleStruct->dynamicMoveType > 8)
+ if (gBattleStruct->dynamicMoveType >= TYPE_MYSTERY)
gBattleStruct->dynamicMoveType++;
gBattleStruct->dynamicMoveType |= 0xC0;
gBattlescriptCurrInstr++;
}
-#else
-__attribute__((naked))
-static void atkC1_hiddenpowercalc(void)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r10\n\
- mov r6, r9\n\
- mov r5, r8\n\
- push {r5-r7}\n\
- ldr r2, =gBattleMons\n\
- ldr r0, =gBattlerAttacker\n\
- ldrb r1, [r0]\n\
- movs r0, 0x58\n\
- adds r4, r1, 0\n\
- muls r4, r0\n\
- adds r4, r2\n\
- ldrb r0, [r4, 0x14]\n\
- mov r10, r0\n\
- mov r7, r10\n\
- lsls r7, 27\n\
- adds r0, r7, 0\n\
- lsrs r0, 27\n\
- mov r10, r0\n\
- movs r1, 0x2\n\
- mov r2, r10\n\
- ands r2, r1\n\
- asrs r2, 1\n\
- ldrh r7, [r4, 0x14]\n\
- mov r9, r7\n\
- mov r0, r9\n\
- lsls r0, 22\n\
- mov r9, r0\n\
- lsrs r3, r0, 27\n\
- adds r0, r1, 0\n\
- ands r0, r3\n\
- orrs r2, r0\n\
- ldrb r7, [r4, 0x15]\n\
- mov r8, r7\n\
- mov r0, r8\n\
- lsls r0, 25\n\
- mov r8, r0\n\
- lsrs r3, r0, 27\n\
- adds r0, r1, 0\n\
- ands r0, r3\n\
- lsls r0, 1\n\
- orrs r2, r0\n\
- ldr r6, [r4, 0x14]\n\
- lsls r6, 12\n\
- lsrs r3, r6, 27\n\
- adds r0, r1, 0\n\
- ands r0, r3\n\
- lsls r0, 2\n\
- orrs r2, r0\n\
- ldrh r5, [r4, 0x16]\n\
- lsls r5, 23\n\
- lsrs r3, r5, 27\n\
- adds r0, r1, 0\n\
- ands r0, r3\n\
- lsls r0, 3\n\
- orrs r2, r0\n\
- ldrb r3, [r4, 0x17]\n\
- lsls r3, 26\n\
- lsrs r0, r3, 27\n\
- ands r1, r0\n\
- lsls r1, 4\n\
- orrs r2, r1\n\
- movs r1, 0x1\n\
- adds r4, r1, 0\n\
- mov r7, r10\n\
- ands r4, r7\n\
- mov r0, r9\n\
- lsrs r0, 27\n\
- mov r9, r0\n\
- adds r0, r1, 0\n\
- mov r7, r9\n\
- ands r0, r7\n\
- lsls r0, 1\n\
- orrs r4, r0\n\
- mov r0, r8\n\
- lsrs r0, 27\n\
- mov r8, r0\n\
- adds r0, r1, 0\n\
- mov r7, r8\n\
- ands r0, r7\n\
- lsls r0, 2\n\
- orrs r4, r0\n\
- lsrs r6, 27\n\
- adds r0, r1, 0\n\
- ands r0, r6\n\
- lsls r0, 3\n\
- orrs r4, r0\n\
- lsrs r5, 27\n\
- adds r0, r1, 0\n\
- ands r0, r5\n\
- lsls r0, 4\n\
- orrs r4, r0\n\
- lsrs r3, 27\n\
- ands r1, r3\n\
- lsls r1, 5\n\
- orrs r4, r1\n\
- ldr r5, =gDynamicBasePower\n\
- lsls r0, r2, 2\n\
- adds r0, r2\n\
- lsls r0, 3\n\
- movs r1, 0x3F\n\
- bl __divsi3\n\
- adds r0, 0x1E\n\
- strh r0, [r5]\n\
- ldr r6, =gBattleStruct\n\
- ldr r5, [r6]\n\
- lsls r0, r4, 4\n\
- subs r0, r4\n\
- movs r1, 0x3F\n\
- bl __divsi3\n\
- adds r0, 0x1\n\
- strb r0, [r5, 0x13]\n\
- ldr r1, [r6]\n\
- ldrb r0, [r1, 0x13]\n\
- cmp r0, 0x8\n\
- bls _080544F0\n\
- adds r0, 0x1\n\
- strb r0, [r1, 0x13]\n\
-_080544F0:\n\
- ldr r2, [r6]\n\
- ldrb r0, [r2, 0x13]\n\
- movs r1, 0xC0\n\
- orrs r0, r1\n\
- strb r0, [r2, 0x13]\n\
- ldr r1, =gBattlescriptCurrInstr\n\
- ldr r0, [r1]\n\
- adds r0, 0x1\n\
- str r0, [r1]\n\
- pop {r3-r5}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- mov r10, r5\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .pool\n\
- .syntax divided");
-}
-#endif // NONMATCHING
-
static void atkC2_selectfirstvalidtarget(void)
{
for (gBattlerTarget = 0; gBattlerTarget < gBattlersCount; gBattlerTarget++)
@@ -9582,7 +9138,7 @@ static void atkC3_trysetfutureattack(void)
{
if (gWishFutureKnock.futureSightCounter[gBattlerTarget] != 0)
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else
{
@@ -9617,7 +9173,7 @@ static void atkC4_trydobeatup(void)
if (gBattleMons[gBattlerTarget].hp == 0)
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else
{
@@ -9647,9 +9203,9 @@ static void atkC4_trydobeatup(void)
gBattleCommunication[0]++;
}
else if (beforeLoop != 0)
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
else
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 5);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 5);
}
}
@@ -9722,7 +9278,7 @@ static void atkC9_jumpifattackandspecialattackcannotfall(void) // memento
&& gBattleMons[gBattlerTarget].statStages[STAT_SPATK] == 0
&& gBattleCommunication[6] != 1)
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else
{
@@ -9770,7 +9326,7 @@ static void atkCD_cureifburnedparalysedorpoisoned(void) // refresh
}
else
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
}
@@ -9778,7 +9334,7 @@ static void atkCE_settorment(void)
{
if (gBattleMons[gBattlerTarget].status2 & STATUS2_TORMENT)
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else
{
@@ -9792,7 +9348,7 @@ static void atkCF_jumpifnodamage(void)
if (gProtectStructs[gBattlerAttacker].physicalDmg || gProtectStructs[gBattlerAttacker].specialDmg)
gBattlescriptCurrInstr += 5;
else
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
static void atkD0_settaunt(void)
@@ -9805,7 +9361,7 @@ static void atkD0_settaunt(void)
}
else
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
}
@@ -9823,7 +9379,7 @@ static void atkD1_trysethelpinghand(void)
}
else
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
}
@@ -9838,7 +9394,7 @@ static void atkD2_tryswapitems(void) // trick
| BATTLE_TYPE_SECRET_BASE
| BATTLE_TYPE_x2000000))))
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else
{
@@ -9854,7 +9410,7 @@ static void atkD2_tryswapitems(void) // trick
&& (gWishFutureKnock.knockedOffPokes[sideAttacker] & gBitTable[gBattlerPartyIndexes[gBattlerAttacker]]
|| gWishFutureKnock.knockedOffPokes[sideTarget] & gBitTable[gBattlerPartyIndexes[gBattlerTarget]]))
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
// can't swap if two pokemon don't have an item
// or if either of them is an enigma berry or a mail
@@ -9864,7 +9420,7 @@ static void atkD2_tryswapitems(void) // trick
|| IS_ITEM_MAIL(gBattleMons[gBattlerAttacker].item)
|| IS_ITEM_MAIL(gBattleMons[gBattlerTarget].item))
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
// check if ability prevents swapping
else if (gBattleMons[gBattlerTarget].ability == ABILITY_STICKY_HOLD)
@@ -9925,7 +9481,7 @@ static void atkD3_trycopyability(void) // role play
}
else
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
}
@@ -9942,7 +9498,7 @@ static void atkD4_trywish(void)
}
else
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2);
}
break;
case 1: // heal effect
@@ -9954,7 +9510,7 @@ static void atkD4_trywish(void)
gBattleMoveDamage *= -1;
if (gBattleMons[gBattlerTarget].hp == gBattleMons[gBattlerTarget].maxHP)
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2);
else
gBattlescriptCurrInstr += 6;
@@ -9966,7 +9522,7 @@ static void atkD5_trysetroots(void) // ingrain
{
if (gStatuses3[gBattlerAttacker] & STATUS3_ROOTED)
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else
{
@@ -9993,7 +9549,7 @@ static void atkD7_setyawn(void)
if (gStatuses3[gBattlerTarget] & STATUS3_YAWN
|| gBattleMons[gBattlerTarget].status1 & STATUS1_ANY)
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else
{
@@ -10006,7 +9562,7 @@ static void atkD8_setdamagetohealthdifference(void)
{
if (gBattleMons[gBattlerTarget].hp <= gBattleMons[gBattlerAttacker].hp)
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else
{
@@ -10035,7 +9591,7 @@ static void atkDA_tryswapabilities(void) // skill swap
|| gBattleMons[gBattlerTarget].ability == ABILITY_WONDER_GUARD
|| gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else
{
@@ -10051,7 +9607,7 @@ static void atkDB_tryimprision(void)
{
if ((gStatuses3[gBattlerAttacker] & STATUS3_IMPRISONED_OTHERS))
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else
{
@@ -10085,7 +9641,7 @@ static void atkDB_tryimprision(void)
}
}
if (battlerId == gBattlersCount) // In Generation 3 games, Imprison fails if the user doesn't share any moves with any of the foes
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
}
@@ -10093,7 +9649,7 @@ static void atkDC_trysetgrudge(void)
{
if (gStatuses3[gBattlerAttacker] & STATUS3_GRUDGE)
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else
{
@@ -10168,7 +9724,7 @@ static void atkDE_asistattackselect(void)
}
else
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
}
@@ -10178,7 +9734,7 @@ static void atkDF_trysetmagiccoat(void)
gSpecialStatuses[gBattlerAttacker].flag20 = 1;
if (gCurrentTurnActionNumber == gBattlersCount - 1) // moves last turn
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else
{
@@ -10192,7 +9748,7 @@ static void atkE0_trysetsnatch(void) // snatch
gSpecialStatuses[gBattlerAttacker].flag20 = 1;
if (gCurrentTurnActionNumber == gBattlersCount - 1) // moves last turn
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else
{
@@ -10219,7 +9775,7 @@ static void atkE1_trygetintimidatetarget(void)
}
if (gBattlerTarget >= gBattlersCount)
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
else
gBattlescriptCurrInstr += 5;
}
@@ -10245,7 +9801,7 @@ static void atkE3_jumpifhasnohp(void)
gActiveBattler = GetBattlerForBattleScript(gBattlescriptCurrInstr[1]);
if (gBattleMons[gActiveBattler].hp == 0)
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 2);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 2);
else
gBattlescriptCurrInstr += 6;
}
@@ -10413,7 +9969,7 @@ static void atkE8_settypebasedhalvers(void) // water and mud sport
if (worked)
gBattlescriptCurrInstr += 5;
else
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
static void atkE9_setweatherballtype(void)
@@ -10456,25 +10012,22 @@ static void atkEA_tryrecycleitem(void)
}
else
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
}
static void atkEB_settypetoterrain(void)
{
- if (gBattleMons[gBattlerAttacker].type1 != sTerrainToType[gBattleTerrain]
- && gBattleMons[gBattlerAttacker].type2 != sTerrainToType[gBattleTerrain])
+ if (!IS_BATTLER_OF_TYPE(gBattlerAttacker, sTerrainToType[gBattleTerrain]))
{
- gBattleMons[gBattlerAttacker].type1 = sTerrainToType[gBattleTerrain];
- gBattleMons[gBattlerAttacker].type2 = sTerrainToType[gBattleTerrain];
-
- PREPARE_TYPE_BUFFER(gBattleTextBuff1, sTerrainToType[gBattleTerrain])
+ SET_BATTLER_TYPE(gBattlerAttacker, sTerrainToType[gBattleTerrain]);
+ PREPARE_TYPE_BUFFER(gBattleTextBuff1, sTerrainToType[gBattleTerrain]);
gBattlescriptCurrInstr += 5;
}
else
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
}
@@ -10496,7 +10049,7 @@ static void atkEC_pursuitrelated(void)
}
else
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
}
@@ -10572,16 +10125,13 @@ static void atkEF_handleballthrow(void)
switch (gLastUsedItem)
{
case ITEM_NET_BALL:
- if (gBattleMons[gBattlerTarget].type1 == TYPE_WATER
- || gBattleMons[gBattlerTarget].type2 == TYPE_WATER
- || gBattleMons[gBattlerTarget].type1 == TYPE_BUG
- || gBattleMons[gBattlerTarget].type2 == TYPE_BUG)
+ if (IS_BATTLER_OF_TYPE(gBattlerTarget, TYPE_WATER) || IS_BATTLER_OF_TYPE(gBattlerTarget, TYPE_BUG))
ballMultiplier = 30;
else
ballMultiplier = 10;
break;
case ITEM_DIVE_BALL:
- if (sav1_map_get_light_level() == 5)
+ if (Overworld_GetMapTypeOfSaveblockLocation() == 5)
ballMultiplier = 35;
else
ballMultiplier = 10;
@@ -10722,7 +10272,7 @@ static void atkF1_trysetcaughtmondexflags(void)
if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), FLAG_GET_CAUGHT))
{
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
else
{
@@ -10914,14 +10464,14 @@ static void atkF3_trygivecaughtmonnick(void)
if (gMain.callback2 == BattleMainCB2 && !gPaletteFade.active )
{
SetMonData(&gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker ^ BIT_SIDE]], MON_DATA_NICKNAME, gBattleStruct->caughtMonNick);
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
}
break;
case 4:
if (CalculatePlayerPartyCount() == 6)
gBattlescriptCurrInstr += 5;
else
- gBattlescriptCurrInstr = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
+ gBattlescriptCurrInstr = T1_READ_PTR(gBattlescriptCurrInstr + 1);
break;
}
}
diff --git a/src/battle_setup.c b/src/battle_setup.c
index 52ed99b21..15af005c4 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"
@@ -32,6 +31,8 @@
#include "string_util.h"
#include "overworld.h"
#include "field_weather.h"
+#include "gym_leader_rematch.h"
+#include "field_map_obj_helpers.h"
enum
{
@@ -54,19 +55,12 @@ extern bool8 InBattlePyramid(void);
extern bool8 InBattlePike(void);
extern bool32 InTrainerHill(void);
extern bool32 FieldPoisonEffectIsRunning(void);
-extern void overworld_free_bg_tilemaps(void);
extern void prev_quest_postbuffer_cursor_backup_reset(void);
extern void ResetPoisonStepCounter(void);
extern void sub_81BE72C(void);
-extern void FreezeMapObjects(void);
extern void sub_808BCF4(void);
extern void sub_80EECC8(void);
-extern void Overworld_ClearSavedMusic(void);
-extern void CB2_WhiteOut(void);
extern void sub_80AF6F0(void);
-extern void PlayBattleBGM(void);
-extern void sub_81DA57C(void);
-extern u8 Overworld_GetFlashLevel(void);
extern u16 sub_81A9AA8(u8 localId);
extern u16 sub_81D6180(u8 localId);
extern bool8 GetBattlePyramidTrainerFlag(u8 mapObjId);
@@ -251,84 +245,84 @@ static const struct TrainerBattleParameter sTrainerBContinueScriptBattleParams[]
const struct RematchTrainer gRematchTable[REMATCH_TABLE_ENTRIES] =
{
- {{0x0025, 0x0028, 0x0029, 0x002a, 0x002b}, 0x0000, 0x0021},
- {{0x02e1, 0x032c, 0x032d, 0x032e, 0x032f}, 0x0000, 0x0014},
- {{0x002c, 0x002f, 0x0030, 0x0031, 0x0032}, 0x0000, 0x001a},
- {{0x0039, 0x003c, 0x003d, 0x003e, 0x003f}, 0x0000, 0x0018},
- {{0x0040, 0x0043, 0x0044, 0x0045, 0x0046}, 0x0000, 0x0018},
- {{0x02af, 0x02b0, 0x02b1, 0x02b2, 0x02b3}, 0x0000, 0x0027},
- {{0x02ff, 0x033c, 0x033d, 0x033e, 0x033f}, 0x0000, 0x0024},
- {{0x005e, 0x0065, 0x0066, 0x0067, 0x0068}, 0x0000, 0x001a},
- {{0x004e, 0x0054, 0x0055, 0x0056, 0x0057}, 0x0000, 0x001a},
- {{0x006c, 0x006e, 0x006f, 0x0070, 0x0071}, 0x0018, 0x0014},
- {{0x0072, 0x0078, 0x0079, 0x007a, 0x007b}, 0x0000, 0x0013},
- {{0x0090, 0x034c, 0x034d, 0x034e, 0x034f}, 0x0018, 0x0038},
- {{0x007f, 0x0084, 0x0085, 0x0086, 0x0087}, 0x0000, 0x0024},
- {{0x0088, 0x008b, 0x008c, 0x008d, 0x008e}, 0x0000, 0x0013},
- {{0x008f, 0x0093, 0x0094, 0x0095, 0x0096}, 0x0000, 0x001d},
- {{0x009b, 0x00af, 0x00b0, 0x00b1, 0x00b2}, 0x0000, 0x0016},
- {{0x00b7, 0x00b8, 0x00b9, 0x00ba, 0x00bb}, 0x0000, 0x001e},
- {{0x02a0, 0x0338, 0x0339, 0x033a, 0x033b}, 0x0000, 0x002a},
- {{0x00c3, 0x0340, 0x0341, 0x0342, 0x0343}, 0x0000, 0x0026},
- {{0x00c4, 0x00c5, 0x00c6, 0x00c7, 0x00c8}, 0x0000, 0x0021},
- {{0x00ce, 0x00cf, 0x00d0, 0x00d1, 0x00d2}, 0x0000, 0x001d},
- {{0x00d8, 0x00db, 0x00dc, 0x00dd, 0x00de}, 0x0018, 0x000d},
- {{0x02a9, 0x02aa, 0x02ab, 0x02ac, 0x02ad}, 0x0018, 0x0001},
- {{0x00e2, 0x00e4, 0x00e5, 0x00e6, 0x00e7}, 0x0000, 0x0023},
- {{0x00ee, 0x00ef, 0x00f0, 0x00f1, 0x00f2}, 0x0000, 0x0026},
- {{0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd}, 0x0000, 0x0026},
- {{0x00fe, 0x0101, 0x0102, 0x0103, 0x0104}, 0x0000, 0x0024},
- {{0x0118, 0x011a, 0x011b, 0x011c, 0x011d}, 0x0000, 0x001f},
- {{0x0111, 0x0114, 0x0115, 0x0116, 0x0117}, 0x0000, 0x001f},
- {{0x011f, 0x0120, 0x0121, 0x0122, 0x0123}, 0x0000, 0x0020},
- {{0x012e, 0x012f, 0x0130, 0x0131, 0x0132}, 0x0000, 0x0019},
- {{0x0125, 0x0127, 0x0128, 0x0129, 0x012a}, 0x0000, 0x0012},
- {{0x0133, 0x0134, 0x0135, 0x0136, 0x0137}, 0x0000, 0x001e},
- {{0x0139, 0x013a, 0x013b, 0x013c, 0x013d}, 0x0018, 0x000c},
- {{0x013e, 0x0148, 0x0149, 0x014a, 0x014b}, 0x0000, 0x0011},
- {{0x0153, 0x015a, 0x015b, 0x015c, 0x015d}, 0x0000, 0x0015},
- {{0x0178, 0x017b, 0x017c, 0x017d, 0x017e}, 0x0000, 0x002b},
- {{0x0171, 0x0172, 0x0173, 0x0174, 0x0175}, 0x0000, 0x0020},
- {{0x0166, 0x0168, 0x0169, 0x016a, 0x016b}, 0x0000, 0x0019},
- {{0x016c, 0x016d, 0x016e, 0x016f, 0x0170}, 0x0000, 0x0020},
- {{0x0182, 0x0184, 0x0185, 0x0186, 0x0187}, 0x0000, 0x002b},
- {{0x0161, 0x0162, 0x0163, 0x0164, 0x0165}, 0x0000, 0x0019},
- {{0x0179, 0x0334, 0x0335, 0x0336, 0x0337}, 0x0000, 0x0029},
- {{0x0188, 0x0189, 0x018a, 0x018b, 0x018c}, 0x0018, 0x0001},
- {{0x0196, 0x0199, 0x019a, 0x019b, 0x019c}, 0x0000, 0x0023},
- {{0x01a3, 0x01a5, 0x01a6, 0x01a7, 0x01a8}, 0x0000, 0x001c},
- {{0x01ab, 0x01ae, 0x01af, 0x01b0, 0x01b1}, 0x0000, 0x001e},
- {{0x01b2, 0x01b5, 0x01b6, 0x01b7, 0x01b8}, 0x0000, 0x001c},
- {{0x01c1, 0x01d1, 0x01d2, 0x01d3, 0x01d4}, 0x0000, 0x0027},
- {{0x01da, 0x01dd, 0x01de, 0x01df, 0x01e0}, 0x0018, 0x000d},
- {{0x01e1, 0x01e2, 0x01e7, 0x01e8, 0x01e9}, 0x0000, 0x0012},
- {{0x01ec, 0x01f1, 0x01f2, 0x01f3, 0x01f4}, 0x0000, 0x0028},
- {{0x02e4, 0x0330, 0x0331, 0x0332, 0x0333}, 0x0000, 0x0017},
- {{0x0200, 0x0203, 0x0204, 0x0205, 0x0206}, 0x0000, 0x0019},
- {{0x0221, 0x0224, 0x0225, 0x0226, 0x0227}, 0x0000, 0x0020},
- {{0x021a, 0x021d, 0x021e, 0x021f, 0x0220}, 0x0000, 0x0020},
- {{0x0009, 0x0348, 0x0349, 0x034a, 0x034b}, 0x0018, 0x0011},
- {{0x022f, 0x0232, 0x0233, 0x0234, 0x0235}, 0x0000, 0x0022},
- {{0x0228, 0x022b, 0x022c, 0x022d, 0x022e}, 0x0000, 0x0022},
- {{0x025c, 0x025f, 0x0260, 0x0261, 0x0262}, 0x0000, 0x0013},
- {{0x026d, 0x026e, 0x026f, 0x0270, 0x0271}, 0x0018, 0x000b},
- {{0x0273, 0x027c, 0x027d, 0x027e, 0x027f}, 0x0000, 0x001b},
- {{0x0001, 0x0344, 0x0345, 0x0346, 0x0347}, 0x0018, 0x000c},
- {{0x0282, 0x0283, 0x0284, 0x0285, 0x0286}, 0x0018, 0x003e},
- {{0x0291, 0x0292, 0x0293, 0x0294, 0x0294}, 0x0018, 0x002b},
- {{0x0109, 0x0302, 0x0303, 0x0304, 0x0305}, 0x0000, 0x0003},
- {{0x010a, 0x0306, 0x0307, 0x0308, 0x0309}, 0x0000, 0x000b},
- {{0x010b, 0x030a, 0x030b, 0x030c, 0x030d}, 0x0000, 0x0002},
- {{0x010c, 0x030e, 0x030f, 0x0310, 0x0311}, 0x0000, 0x000c},
- {{0x010d, 0x0312, 0x0313, 0x0314, 0x0315}, 0x0000, 0x0000},
- {{0x010e, 0x0316, 0x0317, 0x0318, 0x0319}, 0x0000, 0x0004},
- {{0x010f, 0x031a, 0x031b, 0x031c, 0x031d}, 0x0000, 0x0006},
- {{0x0110, 0x031e, 0x031f, 0x0320, 0x0321}, 0x0000, 0x0007},
- {{0x0105, 0x0105, 0x0105, 0x0105, 0x0105}, 0x0000, 0x0008},
- {{0x0106, 0x0106, 0x0106, 0x0106, 0x0106}, 0x0000, 0x0008},
- {{0x0107, 0x0107, 0x0107, 0x0107, 0x0107}, 0x0000, 0x0008},
- {{0x0108, 0x0108, 0x0108, 0x0108, 0x0108}, 0x0000, 0x0008},
- {{0x014f, 0x014f, 0x014f, 0x014f, 0x014f}, 0x0000, 0x0008},
+ {{TRAINER_ROSE_1, TRAINER_ROSE_2, TRAINER_ROSE_3, TRAINER_ROSE_4, TRAINER_ROSE_5}, 0x0, 0x21},
+ {{TRAINER_ANDRES_1, TRAINER_ANDRES_2, TRAINER_ANDRES_3, TRAINER_ANDRES_4, TRAINER_ANDRES_5}, 0x0, 0x14},
+ {{TRAINER_DUSTY_1, TRAINER_DUSTY_2, TRAINER_DUSTY_3, TRAINER_DUSTY_4, TRAINER_DUSTY_5}, 0x0, 0x1a},
+ {{TRAINER_LOLA_1, TRAINER_LOLA_2, TRAINER_LOLA_3, TRAINER_LOLA_4, TRAINER_LOLA_5}, 0x0, 0x18},
+ {{TRAINER_RICKY_1, TRAINER_RICKY_2, TRAINER_RICKY_3, TRAINER_RICKY_4, TRAINER_RICKY_5}, 0x0, 0x18},
+ {{TRAINER_LILA_AND_ROY_1, TRAINER_LILA_AND_ROY_2, TRAINER_LILA_AND_ROY_3, TRAINER_LILA_AND_ROY_4, TRAINER_LILA_AND_ROY_5}, 0x0, 0x27},
+ {{TRAINER_CRISTIN_1, TRAINER_CRISTIN_2, TRAINER_CRISTIN_3, TRAINER_CRISTIN_4, TRAINER_CRISTIN_5}, 0x0, 0x24},
+ {{TRAINER_BROOKE_1, TRAINER_BROOKE_2, TRAINER_BROOKE_3, TRAINER_BROOKE_4, TRAINER_BROOKE_5}, 0x0, 0x1a},
+ {{TRAINER_WILTON_1, TRAINER_WILTON_2, TRAINER_WILTON_3, TRAINER_WILTON_4, TRAINER_WILTON_5}, 0x0, 0x1a},
+ {{TRAINER_VALERIE_1, TRAINER_VALERIE_2, TRAINER_VALERIE_3, TRAINER_VALERIE_4, TRAINER_VALERIE_5}, 0x18, 0x14},
+ {{TRAINER_CINDY_1, TRAINER_CINDY_3, TRAINER_CINDY_4, TRAINER_CINDY_5, TRAINER_CINDY_6}, 0x0, 0x13},
+ {{TRAINER_THALIA_1, TRAINER_THALIA_2, TRAINER_THALIA_3, TRAINER_THALIA_4, TRAINER_THALIA_5}, 0x18, 0x38},
+ {{TRAINER_JESSICA_1, TRAINER_JESSICA_2, TRAINER_JESSICA_3, TRAINER_JESSICA_4, TRAINER_JESSICA_5}, 0x0, 0x24},
+ {{TRAINER_WINSTON_1, TRAINER_WINSTON_2, TRAINER_WINSTON_3, TRAINER_WINSTON_4, TRAINER_WINSTON_5}, 0x0, 0x13},
+ {{TRAINER_STEVE_1, TRAINER_STEVE_2, TRAINER_STEVE_3, TRAINER_STEVE_4, TRAINER_STEVE_5}, 0x0, 0x1d},
+ {{TRAINER_TONY_1, TRAINER_TONY_2, TRAINER_TONY_3, TRAINER_TONY_4, TRAINER_TONY_5}, 0x0, 0x16},
+ {{TRAINER_NOB_1, TRAINER_NOB_2, TRAINER_NOB_3, TRAINER_NOB_4, TRAINER_NOB_5}, 0x0, 0x1e},
+ {{TRAINER_KOJI_1, TRAINER_KOJI_2, TRAINER_KOJI_3, TRAINER_KOJI_4, TRAINER_KOJI_5}, 0x0, 0x2a},
+ {{TRAINER_FERNANDO_1, TRAINER_FERNANDO_2, TRAINER_FERNANDO_3, TRAINER_FERNANDO_4, TRAINER_FERNANDO_5}, 0x0, 0x26},
+ {{TRAINER_DALTON_1, TRAINER_DALTON_2, TRAINER_DALTON_3, TRAINER_DALTON_4, TRAINER_DALTON_5}, 0x0, 0x21},
+ {{TRAINER_BERNIE_1, TRAINER_BERNIE_2, TRAINER_BERNIE_3, TRAINER_BERNIE_4, TRAINER_BERNIE_5}, 0x0, 0x1d},
+ {{TRAINER_ETHAN_1, TRAINER_ETHAN_2, TRAINER_ETHAN_3, TRAINER_ETHAN_4, TRAINER_ETHAN_5}, 0x18, 0xd},
+ {{TRAINER_JOHN_AND_JAY_1, TRAINER_JOHN_AND_JAY_2, TRAINER_JOHN_AND_JAY_3, TRAINER_JOHN_AND_JAY_4, TRAINER_JOHN_AND_JAY_5}, 0x18, 0x1},
+ {{TRAINER_JEFFREY_1, TRAINER_JEFFREY_2, TRAINER_JEFFREY_3, TRAINER_JEFFREY_4, TRAINER_JEFFREY_5}, 0x0, 0x23},
+ {{TRAINER_CAMERON_1, TRAINER_CAMERON_2, TRAINER_CAMERON_3, TRAINER_CAMERON_4, TRAINER_CAMERON_5}, 0x0, 0x26},
+ {{TRAINER_JACKI_1, TRAINER_JACKI_2, TRAINER_JACKI_3, TRAINER_JACKI_4, TRAINER_JACKI_5}, 0x0, 0x26},
+ {{TRAINER_WALTER_1, TRAINER_WALTER_2, TRAINER_WALTER_3, TRAINER_WALTER_4, TRAINER_WALTER_5}, 0x0, 0x24},
+ {{TRAINER_KAREN_1, TRAINER_KAREN_2, TRAINER_KAREN_3, TRAINER_KAREN_4, TRAINER_KAREN_5}, 0x0, 0x1f},
+ {{TRAINER_JERRY_1, TRAINER_JERRY_2, TRAINER_JERRY_3, TRAINER_JERRY_4, TRAINER_JERRY_5}, 0x0, 0x1f},
+ {{TRAINER_ANNA_AND_MEG_1, TRAINER_ANNA_AND_MEG_2, TRAINER_ANNA_AND_MEG_3, TRAINER_ANNA_AND_MEG_4, TRAINER_ANNA_AND_MEG_5}, 0x0, 0x20},
+ {{TRAINER_ISABEL_1, TRAINER_ISABEL_2, TRAINER_ISABEL_3, TRAINER_ISABEL_4, TRAINER_ISABEL_5}, 0x0, 0x19},
+ {{TRAINER_MIGUEL_1, TRAINER_MIGUEL_2, TRAINER_MIGUEL_3, TRAINER_MIGUEL_4, TRAINER_MIGUEL_5}, 0x0, 0x12},
+ {{TRAINER_TIMOTHY_1, TRAINER_TIMOTHY_2, TRAINER_TIMOTHY_3, TRAINER_TIMOTHY_4, TRAINER_TIMOTHY_5}, 0x0, 0x1e},
+ {{TRAINER_SHELBY_1, TRAINER_SHELBY_2, TRAINER_SHELBY_3, TRAINER_SHELBY_4, TRAINER_SHELBY_5}, 0x18, 0xc},
+ {{TRAINER_CALVIN_1, TRAINER_CALVIN_2, TRAINER_CALVIN_3, TRAINER_CALVIN_4, TRAINER_CALVIN_5}, 0x0, 0x11},
+ {{TRAINER_ELLIOT_1, TRAINER_ELLIOT_2, TRAINER_ELLIOT_3, TRAINER_ELLIOT_4, TRAINER_ELLIOT_5}, 0x0, 0x15},
+ {{TRAINER_ISAIAH_1, TRAINER_ISAIAH_2, TRAINER_ISAIAH_3, TRAINER_ISAIAH_4, TRAINER_ISAIAH_5}, 0x0, 0x2b},
+ {{TRAINER_MARIA_1, TRAINER_MARIA_2, TRAINER_MARIA_3, TRAINER_MARIA_4, TRAINER_MARIA_5}, 0x0, 0x20},
+ {{TRAINER_ABIGAIL_1, TRAINER_ABIGAIL_2, TRAINER_ABIGAIL_3, TRAINER_ABIGAIL_4, TRAINER_ABIGAIL_5}, 0x0, 0x19},
+ {{TRAINER_DYLAN_1, TRAINER_DYLAN_2, TRAINER_DYLAN_3, TRAINER_DYLAN_4, TRAINER_DYLAN_5}, 0x0, 0x20},
+ {{TRAINER_KATELYN_1, TRAINER_KATELYN_2, TRAINER_KATELYN_3, TRAINER_KATELYN_4, TRAINER_KATELYN_5}, 0x0, 0x2b},
+ {{TRAINER_BENJAMIN_1, TRAINER_BENJAMIN_2, TRAINER_BENJAMIN_3, TRAINER_BENJAMIN_4, TRAINER_BENJAMIN_5}, 0x0, 0x19},
+ {{TRAINER_PABLO_1, TRAINER_PABLO_2, TRAINER_PABLO_3, TRAINER_PABLO_4, TRAINER_PABLO_5}, 0x0, 0x29},
+ {{TRAINER_NICOLAS_1, TRAINER_NICOLAS_2, TRAINER_NICOLAS_3, TRAINER_NICOLAS_4, TRAINER_NICOLAS_5}, 0x18, 0x1},
+ {{TRAINER_ROBERT_1, TRAINER_ROBERT_2, TRAINER_ROBERT_3, TRAINER_ROBERT_4, TRAINER_ROBERT_5}, 0x0, 0x23},
+ {{TRAINER_LAO_1, TRAINER_LAO_2, TRAINER_LAO_3, TRAINER_LAO_4, TRAINER_LAO_5}, 0x0, 0x1c},
+ {{TRAINER_CYNDY_1, TRAINER_CYNDY_2, TRAINER_CYNDY_3, TRAINER_CYNDY_4, TRAINER_CYNDY_5}, 0x0, 0x1e},
+ {{TRAINER_MADELINE_1, TRAINER_MADELINE_2, TRAINER_MADELINE_3, TRAINER_MADELINE_4, TRAINER_MADELINE_5}, 0x0, 0x1c},
+ {{TRAINER_JENNY_1, TRAINER_JENNY_2, TRAINER_JENNY_3, TRAINER_JENNY_4, TRAINER_JENNY_5}, 0x0, 0x27},
+ {{TRAINER_DIANA_1, TRAINER_DIANA_2, TRAINER_DIANA_3, TRAINER_DIANA_4, TRAINER_DIANA_5}, 0x18, 0xd},
+ {{TRAINER_AMY_AND_LIV_1, TRAINER_AMY_AND_LIV_2, TRAINER_AMY_AND_LIV_4, TRAINER_AMY_AND_LIV_5, TRAINER_AMY_AND_LIV_6}, 0x0, 0x12},
+ {{TRAINER_ERNEST_1, TRAINER_ERNEST_2, TRAINER_ERNEST_3, TRAINER_ERNEST_4, TRAINER_ERNEST_5}, 0x0, 0x28},
+ {{TRAINER_CORY_1, TRAINER_CORY_2, TRAINER_CORY_3, TRAINER_CORY_4, TRAINER_CORY_5}, 0x0, 0x17},
+ {{TRAINER_EDWIN_1, TRAINER_EDWIN_2, TRAINER_EDWIN_3, TRAINER_EDWIN_4, TRAINER_EDWIN_5}, 0x0, 0x19},
+ {{TRAINER_LYDIA_1, TRAINER_LYDIA_2, TRAINER_LYDIA_3, TRAINER_LYDIA_4, TRAINER_LYDIA_5}, 0x0, 0x20},
+ {{TRAINER_ISAAC_1, TRAINER_ISAAC_2, TRAINER_ISAAC_3, TRAINER_ISAAC_4, TRAINER_ISAAC_5}, 0x0, 0x20},
+ {{TRAINER_GABRIELLE_1, TRAINER_GABRIELLE_2, TRAINER_GABRIELLE_3, TRAINER_GABRIELLE_4, TRAINER_GABRIELLE_5}, 0x18, 0x11},
+ {{TRAINER_CATHERINE_1, TRAINER_CATHERINE_2, TRAINER_CATHERINE_3, TRAINER_CATHERINE_4, TRAINER_CATHERINE_5}, 0x0, 0x22},
+ {{TRAINER_JACKSON_1, TRAINER_JACKSON_2, TRAINER_JACKSON_3, TRAINER_JACKSON_4, TRAINER_JACKSON_5}, 0x0, 0x22},
+ {{TRAINER_HALEY_1, TRAINER_HALEY_2, TRAINER_HALEY_3, TRAINER_HALEY_4, TRAINER_HALEY_5}, 0x0, 0x13},
+ {{TRAINER_JAMES_1, TRAINER_JAMES_2, TRAINER_JAMES_3, TRAINER_JAMES_4, TRAINER_JAMES_5}, 0x18, 0xb},
+ {{TRAINER_TRENT_1, TRAINER_TRENT_2, TRAINER_TRENT_3, TRAINER_TRENT_4, TRAINER_TRENT_5}, 0x0, 0x1b},
+ {{TRAINER_SAWYER_1, TRAINER_SAWYER_2, TRAINER_SAWYER_3, TRAINER_SAWYER_4, TRAINER_SAWYER_5}, 0x18, 0xc},
+ {{TRAINER_KIRA_AND_DAN_1, TRAINER_KIRA_AND_DAN_2, TRAINER_KIRA_AND_DAN_3, TRAINER_KIRA_AND_DAN_4, TRAINER_KIRA_AND_DAN_5}, 0x18, 0x3e},
+ {{TRAINER_WALLY_3, 0x292, 0x293, 0x294, 0x294}, 0x18, 0x2b},
+ {{TRAINER_ROXANNE_1, TRAINER_ROXANNE_2, TRAINER_ROXANNE_3, TRAINER_ROXANNE_4, TRAINER_ROXANNE_5}, 0x0, 0x3},
+ {{TRAINER_BRAWLY_1, TRAINER_BRAWLY_2, TRAINER_BRAWLY_3, TRAINER_BRAWLY_4, TRAINER_BRAWLY_5}, 0x0, 0xb},
+ {{TRAINER_WATTSON_1, TRAINER_WATTSON_2, TRAINER_WATTSON_3, TRAINER_WATTSON_4, TRAINER_WATTSON_5}, 0x0, 0x2},
+ {{TRAINER_FLANNERY_1, TRAINER_FLANNERY_2, TRAINER_FLANNERY_3, TRAINER_FLANNERY_4, TRAINER_FLANNERY_5}, 0x0, 0xc},
+ {{TRAINER_NORMAN_1, TRAINER_NORMAN_2, TRAINER_NORMAN_3, TRAINER_NORMAN_4, TRAINER_NORMAN_5}, 0x0, 0x0},
+ {{TRAINER_WINONA_1, TRAINER_WINONA_2, TRAINER_WINONA_3, TRAINER_WINONA_4, TRAINER_WINONA_5}, 0x0, 0x4},
+ {{TRAINER_TATE_AND_LIZA_1, TRAINER_TATE_AND_LIZA_2, TRAINER_TATE_AND_LIZA_3, TRAINER_TATE_AND_LIZA_4, TRAINER_TATE_AND_LIZA_5}, 0x0, 0x6},
+ {{TRAINER_JUAN_1, TRAINER_JUAN_2, TRAINER_JUAN_3, TRAINER_JUAN_4, TRAINER_JUAN_5}, 0x0, 0x7},
+ {{TRAINER_SIDNEY, TRAINER_SIDNEY, TRAINER_SIDNEY, TRAINER_SIDNEY, TRAINER_SIDNEY}, 0x0, 0x8},
+ {{TRAINER_PHOEBE, TRAINER_PHOEBE, TRAINER_PHOEBE, TRAINER_PHOEBE, TRAINER_PHOEBE}, 0x0, 0x8},
+ {{TRAINER_GLACIA, TRAINER_GLACIA, TRAINER_GLACIA, TRAINER_GLACIA, TRAINER_GLACIA}, 0x0, 0x8},
+ {{TRAINER_DRAKE, TRAINER_DRAKE, TRAINER_DRAKE, TRAINER_DRAKE, TRAINER_DRAKE}, 0x0, 0x8},
+ {{TRAINER_WALLACE, TRAINER_WALLACE, TRAINER_WALLACE, TRAINER_WALLACE, TRAINER_WALLACE}, 0x0, 0x8},
};
static const u16 sBadgeFlags[8] =
@@ -473,7 +467,7 @@ void StartWallyTutorialBattle(void)
{
CreateMaleMon(&gEnemyParty[0], SPECIES_RALTS, 5);
ScriptContext2_Enable();
- gMain.savedCallback = c2_exit_to_overworld_1_continue_scripts_restart_music;
+ gMain.savedCallback = CB2_ReturnToFieldContinueScript;
gBattleTypeFlags = BATTLE_TYPE_WALLY_TUTORIAL;
CreateBattleStartTask(B_TRANSITION_SLICE, 0);
}
@@ -602,7 +596,7 @@ static void CB2_EndWildBattle(void)
}
else
{
- SetMainCallback2(c2_exit_to_overworld_2_switch);
+ SetMainCallback2(CB2_ReturnToField);
gFieldCallback = sub_80AF6F0;
}
}
@@ -615,13 +609,13 @@ static void CB2_EndScriptedWildBattle(void)
if (IsPlayerDefeated(gBattleOutcome) == TRUE)
{
if (InBattlePyramid())
- SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music);
+ SetMainCallback2(CB2_ReturnToFieldContinueScript);
else
SetMainCallback2(CB2_WhiteOut);
}
else
{
- SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music);
+ SetMainCallback2(CB2_ReturnToFieldContinueScript);
}
}
@@ -938,19 +932,19 @@ static void CB2_StartFirstBattle(void)
static void CB2_EndFirstBattle(void)
{
Overworld_ClearSavedMusic();
- SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music);
+ SetMainCallback2(CB2_ReturnToFieldContinueScript);
}
static void sub_80B1218(void)
{
if (GetGameStat(GAME_STAT_WILD_BATTLES) % 60 == 0)
- sub_81DA57C();
+ UpdateGymLeaderRematch();
}
static void sub_80B1234(void)
{
if (GetGameStat(GAME_STAT_TRAINER_BATTLES) % 20 == 0)
- sub_81DA57C();
+ UpdateGymLeaderRematch();
}
// why not just use the macros? maybe its because they didnt want to uncast const every time?
@@ -1314,18 +1308,18 @@ static void CB2_EndTrainerBattle(void)
{
if (gTrainerBattleOpponent_A == SECRET_BASE_OPPONENT)
{
- SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music);
+ SetMainCallback2(CB2_ReturnToFieldContinueScript);
}
else if (IsPlayerDefeated(gBattleOutcome) == TRUE)
{
if (InBattlePyramid() || sub_81D5C18())
- SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music);
+ SetMainCallback2(CB2_ReturnToFieldContinueScript);
else
SetMainCallback2(CB2_WhiteOut);
}
else
{
- SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music);
+ SetMainCallback2(CB2_ReturnToFieldContinueScript);
if (!InBattlePyramid() && !sub_81D5C18())
{
RegisterTrainerInMatchCall();
@@ -1338,7 +1332,7 @@ static void CB2_EndRematchBattle(void)
{
if (gTrainerBattleOpponent_A == SECRET_BASE_OPPONENT)
{
- SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music);
+ SetMainCallback2(CB2_ReturnToFieldContinueScript);
}
else if (IsPlayerDefeated(gBattleOutcome) == TRUE)
{
@@ -1346,7 +1340,7 @@ static void CB2_EndRematchBattle(void)
}
else
{
- SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music);
+ SetMainCallback2(CB2_ReturnToFieldContinueScript);
RegisterTrainerInMatchCall();
SetBattledTrainersFlags();
HandleRematchVarsOnBattleEnd();
diff --git a/src/battle_transition.c b/src/battle_transition.c
index e0d208f23..8b9b50140 100644
--- a/src/battle_transition.c
+++ b/src/battle_transition.c
@@ -919,7 +919,7 @@ static void CB2_TestBattleTransition(void)
if (IsBattleTransitionDone())
{
sTestingTransitionState = 0;
- SetMainCallback2(c2_exit_to_overworld_2_switch);
+ SetMainCallback2(CB2_ReturnToField);
}
break;
}
diff --git a/src/battle_tv.c b/src/battle_tv.c
new file mode 100644
index 000000000..e5d97be30
--- /dev/null
+++ b/src/battle_tv.c
@@ -0,0 +1,1576 @@
+#include "global.h"
+#include "pokemon.h"
+#include "battle.h"
+#include "battle_tv.h"
+#include "constants/battle_string_ids.h"
+#include "constants/battle_anim.h"
+#include "constants/moves.h"
+#include "constants/species.h"
+#include "battle_message.h"
+#include "tv.h"
+
+extern struct StringInfoBattle *gStringInfo;
+
+// this file's functions
+static bool8 sub_817E0B8(u16 stringId);
+static void AddMovePoints(u8 caseId, u16 arg1, u8 arg2, u8 arg3);
+static void TrySetBattleSeminarShow(void);
+static void AddPointsOnFainting(bool8 targetFainted);
+static void AddPointsBasedOnWeather(u16 weatherFlags, u16 moveId, u8 moveSlot);
+static bool8 ShouldCalculateDamage(u16 moveId, s32 *dmg, u16 *powerOverride);
+
+// const rom data
+static const u16 sVariableDmgMoves[] =
+{
+ MOVE_COUNTER, MOVE_FISSURE, MOVE_BIDE, MOVE_MIRROR_COAT,
+ MOVE_HORN_DRILL, MOVE_FLAIL, MOVE_REVERSAL, MOVE_HIDDEN_POWER,
+ MOVE_SHEER_COLD, MOVE_FOCUS_PUNCH, MOVE_ERUPTION,
+ MOVE_WATER_SPOUT, MOVE_DREAM_EATER, MOVE_WEATHER_BALL,
+ MOVE_SNORE, MOVE_PAIN_SPLIT, MOVE_GUILLOTINE,
+ MOVE_FRUSTRATION, MOVE_RETURN, MOVE_ENDEAVOR,
+ MOVE_PRESENT, MOVE_REVENGE, 0xFFFF,
+ // those are handled by the function itself
+ MOVE_MAGNITUDE, MOVE_PSYWAVE, 0xFFFF
+};
+
+static const u16 sUnknown_0860A4E0[] =
+{
+ 0x0001, 0x0001, 0x0001, 0x0004, 0x0001, 0x0001, 0x0001, 0x0000, 0x0005, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
+ 0x0001, 0x0002, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0005, 0x0005, 0x0004, 0x0005, 0x0001, 0x0003, 0x0001,
+ 0x0003, 0x0005, 0x0001, 0x0007, 0x0001, 0x0007, 0x0007, 0x0001, 0x0005, 0x0002, 0x0004, 0x0001, 0x0001, 0x0001, 0x0005, 0x0001,
+ 0x0002, 0x0004, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0000, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
+ 0x0001, 0x0007, 0x0004, 0x0004, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0004, 0x0001, 0x0001, 0x0001, 0x0004,
+ 0x0005, 0x0002, 0x0004, 0x0001, 0x0004, 0x0001, 0x0007, 0x0002, 0x0001, 0x0005, 0x0007, 0x0003, 0x0003, 0x0004, 0x0003, 0x0003,
+ 0x0003, 0x0003, 0x0003, 0x0002, 0x0004, 0x0001, 0x0005, 0x0001, 0x0001, 0x0004, 0x0005, 0x0003, 0x0001, 0x0002, 0x0001, 0x0005,
+ 0x0004, 0x0003, 0x0006, 0x0004, 0x0003, 0x0003, 0x0003, 0x0002, 0x0004, 0x0001, 0x0001, 0x0001, 0x0005, 0x0001, 0x0001, 0x0007,
+ 0x0002, 0x0002, 0x0001, 0x0001, 0x0004, 0x0004, 0x0004, 0x0001, 0x0004, 0x0004, 0x0001, 0x0001, 0x0001, 0x0001, 0x0007, 0x0007,
+ 0x0006, 0x0003, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0002, 0x0003, 0x0001, 0x0001, 0x0004, 0x0004,
+ 0x0003, 0x0003, 0x0003, 0x0001, 0x0004, 0x0007, 0x0007, 0x0005, 0x0007, 0x0001, 0x0007, 0x0001, 0x0005, 0x0000, 0x0004, 0x0004,
+ 0x0004, 0x0004, 0x0004, 0x0002, 0x0002, 0x0006, 0x0003, 0x0006, 0x0004, 0x0004, 0x0002, 0x0005, 0x0002, 0x0001, 0x0001, 0x0006,
+ 0x0006, 0x0006, 0x0001, 0x0001, 0x0001, 0x0001, 0x0002, 0x0006, 0x0001, 0x0004, 0x0001, 0x0001, 0x0003, 0x0001, 0x0001, 0x0001,
+ 0x0001, 0x0001, 0x0004, 0x0001, 0x0001, 0x0003
+};
+static const u16 sUnknown_0860A68C[] =
+{
+ 0x0004, 0xfffd, 0xfffa
+};
+static const u16 sUnknown_0860A692[] =
+{
+ 0x0004, 0x0004, 0x0006, 0x0006, 0x0007, 0x0006, 0x0002
+};
+static const u16 sUnknown_0860A6A0[] =
+{
+ 0x0091, 0x0003, 0x00fa, 0x0003, 0x00be, 0x0003, 0x0080, 0x0003, 0x006e, 0x0003, 0x0098, 0x0003, 0x0143, 0x0003, 0x0123, 0x0003,
+ 0x007f, 0x0003, 0x014a, 0x0003, 0x0039, 0x0003, 0x0134, 0x0003, 0x0038, 0x0003, 0x003d, 0x0003, 0x015a, 0x0000, 0x0037, 0x0003,
+ 0x0160, 0x0003, 0x0137, 0x0003, 0x0057, 0x0003, 0x004c, 0xfffc, 0x013b, 0xfffc, 0x00ac, 0xfffc, 0x0035, 0xfffc, 0x00dd, 0xfffc,
+ 0x007e, 0xfffc, 0x0101, 0xfffc, 0x0034, 0xfffc, 0x0133, 0xfffc, 0x012b, 0xfffc, 0x011c, 0xfffc, 0x0053, 0xfffc, 0x0007, 0xfffc,
+ 0x004c, 0xfffc, 0xffff, 0x0000
+};
+static const u16 sUnknown_0860A728[] =
+{
+ 0x013b, 0x0003, 0x00ac, 0x0003, 0x0035, 0x0003, 0x00dd, 0x0003, 0x007e, 0x0003, 0x0101, 0x0003, 0x0034, 0x0003, 0x0133, 0x0003,
+ 0x012b, 0x0003, 0x011c, 0x0003, 0x0053, 0x0003, 0x0007, 0x0003, 0x004c, 0x0005, 0x00eb, 0x0003, 0x00ea, 0x0003, 0x00ec, 0x0003,
+ 0x0137, 0x0003, 0xffff, 0x0000
+};
+static const u16 sUnknown_0860A770[] =
+{
+ 0x0137, 0x0003, 0x004c, 0xfffd, 0xffff, 0x0000
+};
+static const u16 sUnknown_0860A77C[] =
+{
+ 0x0137, 0x0003, 0x004c, 0xfffd, 0xffff, 0x0000
+};
+static const u16 sUnknown_0860A788[] =
+{
+ 0x0055, 0x0003, 0x0009, 0x0003, 0x00d1, 0x0003, 0x0054, 0x0003, 0x00c0, 0x0003, 0x015f, 0x0003, 0x0056, 0x0000, 0x0057, 0x0003,
+ 0x0158, 0x0003, 0xffff, 0x0000
+};
+static const u16 sUnknown_0860A7B0[] =
+{
+ 0x0005, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003
+};
+static const u16 sUnknown_0860A7BE[] =
+{
+ 0x0005, 0x0005, 0x0005, 0x0005, 0x0005
+};
+static const u16 sUnknown_0860A7C8[] =
+{
+ 0x0004
+};
+static const u16 sUnknown_0860A7CA[] =
+{
+ 0x0005
+};
+static const u16 sUnknown_0860A7CC[] =
+{
+ 0x0005
+};
+static const u16 sUnknown_0860A7CE[] =
+{
+ 0x0003
+};
+static const u16 sUnknown_0860A7D0[] =
+{
+ 0x0003
+};
+static const u16 sUnknown_0860A7D2[] =
+{
+ 0x0004
+};
+static const u16 sUnknown_0860A7D4[] =
+{
+ 0x0003
+};
+static const u16 sUnknown_0860A7D6[] =
+{
+ 0x0006
+};
+static const u16 sUnknown_0860A7D8[] =
+{
+ 0x0006
+};
+static const u16 sUnknown_0860A7DA[] =
+{
+ 0x0006
+};
+static const u16 sUnknown_0860A7DC[] =
+{
+ 0x0004
+};
+static const u16 sUnknown_0860A7DE[] =
+{
+ 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002
+};
+static const u16 sUnknown_0860A7EC[] =
+{
+ 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004
+};
+static const u16 sUnknown_0860A7FA[] =
+{
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff
+};
+static const u16 sUnknown_0860A808[] =
+{
+ 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002
+};
+static const u16 sUnknown_0860A816[] =
+{
+ 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004, 0x0004
+};
+static const u16 sUnknown_0860A824[] =
+{
+ 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe
+};
+
+static const u16 *const sPointsArray[] =
+{
+ sUnknown_0860A4E0,
+ sUnknown_0860A68C,
+ sUnknown_0860A692,
+ sUnknown_0860A6A0,
+ sUnknown_0860A728,
+ sUnknown_0860A770,
+ sUnknown_0860A77C,
+ sUnknown_0860A788,
+ sUnknown_0860A7B0,
+ sUnknown_0860A7BE,
+ sUnknown_0860A7C8,
+ sUnknown_0860A7CA,
+ sUnknown_0860A7CC,
+ sUnknown_0860A7CE,
+ sUnknown_0860A7D0,
+ sUnknown_0860A7D2,
+ sUnknown_0860A7D4,
+ sUnknown_0860A7D6,
+ sUnknown_0860A7D8,
+ sUnknown_0860A7DA,
+ sUnknown_0860A7DA,
+ sUnknown_0860A7DC,
+ sUnknown_0860A7DE,
+ sUnknown_0860A7EC,
+ sUnknown_0860A7FA,
+ sUnknown_0860A808,
+ sUnknown_0860A816,
+ sUnknown_0860A824
+};
+
+static const u16 sUnknown_0860A8A4[] =
+{
+ STRINGID_PKMNPERISHCOUNTFELL, STRINGID_PKMNWISHCAMETRUE, STRINGID_PKMNLOSTPPGRUDGE,
+ STRINGID_PKMNTOOKFOE, STRINGID_PKMNABSORBEDNUTRIENTS, STRINGID_PKMNANCHOREDITSELF,
+ STRINGID_PKMNAFFLICTEDBYCURSE, STRINGID_PKMNSAPPEDBYLEECHSEED, STRINGID_PKMNLOCKEDINNIGHTMARE,
+ STRINGID_PKMNHURTBY, STRINGID_PKMNHURTBYBURN, STRINGID_PKMNHURTBYPOISON,
+ STRINGID_PKMNHURTBYSPIKES, STRINGID_ATTACKERFAINTED, STRINGID_TARGETFAINTED,
+ STRINGID_PKMNHITWITHRECOIL, STRINGID_PKMNCRASHED, 0xFFFF
+};
+
+// code
+void BattleTv_SetDataBasedOnString(u16 stringId)
+{
+ struct BattleTv *tvPtr;
+ u32 atkSide, defSide, effSide, scriptingSide;
+ struct Pokemon *atkMon, *defMon;
+ u8 moveSlot;
+ u32 atkFlank, defFlank, effFlank;
+ u8 *perishCount;
+ u16 *statStringId, *finishedMoveId;
+
+ if (!(gBattleTypeFlags & BATTLE_TYPE_LINK) && stringId != STRINGID_ITDOESNTAFFECT && stringId != STRINGID_NOTVERYEFFECTIVE)
+ return;
+
+ tvPtr = &gBattleStruct->tv;
+
+ atkSide = GetBattlerSide(gBattlerAttacker);
+ defSide = GetBattlerSide(gBattlerTarget);
+ effSide = GetBattlerSide(gEffectBattler);
+ scriptingSide = GetBattlerSide(gStringInfo->scrActive);
+
+ if (atkSide == B_SIDE_PLAYER)
+ atkMon = &gPlayerParty[gBattlerPartyIndexes[gBattlerAttacker]];
+ else
+ atkMon = &gEnemyParty[gBattlerPartyIndexes[gBattlerAttacker]];
+
+ if (defSide == B_SIDE_PLAYER)
+ defMon = &gPlayerParty[gBattlerPartyIndexes[gBattlerTarget]];
+ else
+ defMon = &gEnemyParty[gBattlerPartyIndexes[gBattlerTarget]];
+
+ moveSlot = GetBattlerMoveSlotId(gBattlerAttacker, gStringInfo->currentMove);
+
+ if (moveSlot >= 4 && sub_817E0B8(stringId) && stringId > BATTLESTRINGS_ID_ADDER)
+ {
+ tvPtr->side[atkSide].faintCause = 15;
+ return;
+ }
+
+ perishCount = (u8 *)(gBattleTextBuff1 + 4);
+ statStringId = (u16 *)(gBattleTextBuff2 + 2);
+ finishedMoveId = (u16 *)(gBattleTextBuff1 + 2);
+
+ atkFlank = GetBattlerPosition(gBattlerAttacker) / 2;
+ defFlank = GetBattlerPosition(gBattlerTarget) / 2;
+ effFlank = GetBattlerPosition(gEffectBattler) / 2;
+
+ switch (stringId)
+ {
+ case STRINGID_ITDOESNTAFFECT:
+ AddMovePoints(1, moveSlot, 2, 0);
+ if (!(gBattleTypeFlags & BATTLE_TYPE_LINK))
+ TrySetBattleSeminarShow();
+ break;
+ case STRINGID_NOTVERYEFFECTIVE:
+ AddMovePoints(1, moveSlot, 1, 0);
+ if (!(gBattleTypeFlags & BATTLE_TYPE_LINK) && GetMonData(defMon, MON_DATA_HP, NULL) != 0)
+ TrySetBattleSeminarShow();
+ break;
+ case STRINGID_SUPEREFFECTIVE:
+ AddMovePoints(1, moveSlot, 0, 0);
+ break;
+ case STRINGID_PKMNFORESAWATTACK:
+ tvPtr->side[atkSide].futureSightMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->side[atkSide].futureSightMoveSlot = moveSlot;
+ break;
+ case STRINGID_PKMNCHOSEXASDESTINY:
+ tvPtr->side[atkSide].doomDesireMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->side[atkSide].doomDesireMoveSlot = moveSlot;
+ break;
+ case STRINGID_FAINTINTHREE:
+ tvPtr->side[atkSide].perishSongMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->side[atkSide].perishSongMoveSlot = moveSlot;
+ tvPtr->side[atkSide].perishSong = 1;
+ break;
+ case STRINGID_PKMNPERISHCOUNTFELL:
+ if (*perishCount == 0)
+ tvPtr->side[atkSide].faintCause = 10;
+ break;
+ case STRINGID_PKMNWISHCAMETRUE:
+ if (tvPtr->side[defSide].wishMonId != 0)
+ {
+ AddMovePoints(2, 3, defSide,
+ (tvPtr->side[defSide].wishMonId - 1) * 4 + tvPtr->side[defSide].wishMoveSlot);
+ }
+ break;
+ case STRINGID_PKMNWANTSGRUDGE:
+ tvPtr->side[atkSide].grudgeMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->side[atkSide].grudgeMoveSlot = moveSlot;
+ break;
+ case STRINGID_PKMNLOSTPPGRUDGE:
+ if (tvPtr->side[defSide].grudgeMonId != 0)
+ {
+ AddMovePoints(2, 4, defSide,
+ (tvPtr->side[defSide].grudgeMonId - 1) * 4 + tvPtr->side[defSide].grudgeMoveSlot);
+ }
+ break;
+ case STRINGID_PKMNTRYINGTOTAKEFOE:
+ tvPtr->side[atkSide].destinyBondMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->side[atkSide].destinyBondMoveSlot = moveSlot;
+ break;
+ case STRINGID_PKMNTOOKFOE:
+ if (tvPtr->side[defSide].destinyBondMonId != 0)
+ tvPtr->side[atkSide].faintCause = 11;
+ break;
+ case STRINGID_PKMNPLANTEDROOTS:
+ tvPtr->pos[atkSide][atkFlank].ingrainMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->pos[atkSide][atkFlank].ingrainMoveSlot = moveSlot;
+ break;
+ case STRINGID_PKMNABSORBEDNUTRIENTS:
+ if (tvPtr->pos[atkSide][atkFlank].ingrainMonId != 0)
+ {
+ AddMovePoints(2, 6, atkSide,
+ (tvPtr->pos[atkSide][atkFlank].ingrainMonId - 1) * 4 + tvPtr->pos[atkSide][atkFlank].ingrainMoveSlot);
+ }
+ break;
+ case STRINGID_PKMNANCHOREDITSELF:
+ if (tvPtr->pos[defSide][defFlank].ingrainMonId != 0)
+ {
+ AddMovePoints(2, 6, defSide,
+ (tvPtr->pos[defSide][defFlank].ingrainMonId - 1) * 4 + tvPtr->pos[defSide][defFlank].ingrainMoveSlot);
+ }
+ break;
+ case STRINGID_PKMNTRANSFORMEDINTO:
+ gBattleStruct->anyMonHasTransformed = TRUE;
+ break;
+ case STRINGID_CRITICALHIT:
+ AddMovePoints(0x12, moveSlot, 0, 0);
+ break;
+ case STRINGID_PKMNSSTATCHANGED:
+ if (gBattleTextBuff1[2] != 0)
+ {
+ if (*statStringId == STRINGID_STATSHARPLY)
+ AddMovePoints(0x17, moveSlot, gBattleTextBuff1[2] - 1, 0);
+ else
+ AddMovePoints(0x16, moveSlot, gBattleTextBuff1[2] - 1, 0);
+ }
+ break;
+ case STRINGID_PKMNSSTATCHANGED2:
+ if (gBattleTextBuff1[2] != 0)
+ {
+ if (gBattlerAttacker == gBattlerTarget)
+ {
+ if (*statStringId == STRINGID_STATSHARPLY)
+ AddMovePoints(0x17, moveSlot, gBattleTextBuff1[2] - 1, 0);
+ else
+ AddMovePoints(0x16, moveSlot, gBattleTextBuff1[2] - 1, 0);
+ }
+ else
+ {
+ AddMovePoints(0x1B, moveSlot, gBattleTextBuff1[2] - 1, 0);
+ }
+ }
+ break;
+ case STRINGID_PKMNSSTATCHANGED3:
+ if (gBattleTextBuff1[2] != 0)
+ AddMovePoints(0x18, moveSlot, gBattleTextBuff1[2] - 1, 0);
+ break;
+ case STRINGID_PKMNSSTATCHANGED4:
+ if (gBattleTextBuff1[2] != 0)
+ {
+ if (*statStringId == STRINGID_STATHARSHLY)
+ AddMovePoints(0x1A, moveSlot, gBattleTextBuff1[2] - 1, 0);
+ else
+ AddMovePoints(0x19, moveSlot, gBattleTextBuff1[2] - 1, 0);
+ }
+ break;
+ case STRINGID_PKMNLAIDCURSE:
+ tvPtr->pos[defSide][defFlank].curseMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->pos[defSide][defFlank].curseMoveSlot = moveSlot;
+ break;
+ case STRINGID_PKMNAFFLICTEDBYCURSE:
+ if (GetMonData(atkMon, MON_DATA_HP, NULL)
+ && tvPtr->pos[atkSide][atkFlank].curseMonId != 0)
+ {
+ AddMovePoints(8, 0, tvPtr->pos[atkSide][atkFlank].curseMonId - 1, tvPtr->pos[atkSide][atkFlank].curseMoveSlot);
+ tvPtr->side[atkSide].faintCause = 1;
+ tvPtr->side[atkSide].faintCauseMonId = atkFlank;
+ }
+ break;
+ case STRINGID_PKMNSEEDED:
+ tvPtr->pos[defSide][defFlank].leechSeedMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->pos[defSide][defFlank].leechSeedMoveSlot = moveSlot;
+ break;
+ case STRINGID_PKMNSAPPEDBYLEECHSEED:
+ if (tvPtr->pos[atkSide][atkFlank].leechSeedMonId != 0)
+ {
+ AddMovePoints(8, 1, tvPtr->pos[atkSide][atkFlank].leechSeedMonId - 1, tvPtr->pos[atkSide][atkFlank].leechSeedMoveSlot);
+ tvPtr->side[atkSide].faintCause = 2;
+ tvPtr->side[atkSide].faintCauseMonId = atkFlank;
+ }
+ break;
+ case STRINGID_PKMNFELLINTONIGHTMARE:
+ tvPtr->pos[defSide][defFlank].nightmareMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->pos[defSide][defFlank].nightmareMoveSlot = moveSlot;
+ break;
+ case STRINGID_PKMNLOCKEDINNIGHTMARE:
+ if (GetMonData(atkMon, MON_DATA_HP, NULL) != 0
+ && tvPtr->pos[atkSide][atkFlank].nightmareMonId != 0)
+ {
+ AddMovePoints(8, 5, tvPtr->pos[atkSide][atkFlank].nightmareMonId - 1, tvPtr->pos[atkSide][atkFlank].nightmareMoveSlot);
+ tvPtr->side[atkSide].faintCause = 5;
+ tvPtr->side[atkSide].faintCauseMonId = atkFlank;
+ }
+ break;
+ case STRINGID_PKMNSQUEEZEDBYBIND:
+ case STRINGID_PKMNTRAPPEDINVORTEX:
+ case STRINGID_PKMNWRAPPEDBY:
+ case STRINGID_PKMNCLAMPED:
+ case STRINGID_PKMNTRAPPEDBYSANDTOMB:
+ tvPtr->pos[defSide][defFlank].wrapMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->pos[defSide][defFlank].wrapMoveSlot = moveSlot;
+ break;
+ case STRINGID_PKMNHURTBY:
+ if (GetMonData(atkMon, MON_DATA_HP, NULL) != 0
+ && tvPtr->pos[atkSide][atkFlank].wrapMonId != 0)
+ {
+ AddMovePoints(8, 6, tvPtr->pos[atkSide][atkFlank].wrapMonId - 1, tvPtr->pos[atkSide][atkFlank].wrapMoveSlot);
+ tvPtr->side[atkSide].faintCause = 6;
+ tvPtr->side[atkSide].faintCauseMonId = atkFlank;
+ }
+ break;
+ case STRINGID_PKMNWASBURNED:
+ tvPtr->mon[effSide][gBattlerPartyIndexes[gEffectBattler]].brnMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->mon[effSide][gBattlerPartyIndexes[gEffectBattler]].brnMoveSlot = moveSlot;
+ break;
+ case STRINGID_PKMNHURTBYBURN:
+ if (GetMonData(atkMon, MON_DATA_HP, NULL) != 0)
+ {
+ if (tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].brnMonId != 0)
+ AddMovePoints(8, 4, tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].brnMonId - 1, tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].brnMoveSlot);
+ tvPtr->side[atkSide].faintCause = 4;
+ tvPtr->side[atkSide].faintCauseMonId = gBattlerPartyIndexes[gBattlerAttacker];
+ }
+ break;
+ case STRINGID_PKMNWASPOISONED:
+ tvPtr->mon[effSide][gBattlerPartyIndexes[gEffectBattler]].psnMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->mon[effSide][gBattlerPartyIndexes[gEffectBattler]].psnMoveSlot = moveSlot;
+ break;
+ case STRINGID_PKMNBADLYPOISONED:
+ tvPtr->mon[effSide][gBattlerPartyIndexes[gEffectBattler]].badPsnMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->mon[effSide][gBattlerPartyIndexes[gEffectBattler]].badPsnMoveSlot = moveSlot;
+ break;
+ case STRINGID_PKMNHURTBYPOISON:
+ if (GetMonData(atkMon, MON_DATA_HP, NULL) != 0)
+ {
+ if (tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].psnMonId != 0)
+ AddMovePoints(8, 2, tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].psnMonId - 1, tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].psnMoveSlot);
+ if (tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].badPsnMonId != 0)
+ AddMovePoints(8, 3, tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].badPsnMonId - 1, tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].badPsnMoveSlot);
+ tvPtr->side[atkSide].faintCause = 3;
+ tvPtr->side[atkSide].faintCauseMonId = gBattlerPartyIndexes[gBattlerAttacker];
+ }
+ break;
+ case STRINGID_PKMNFELLINLOVE:
+ tvPtr->pos[defSide][defFlank].attractMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->pos[defSide][defFlank].attractMoveSlot = moveSlot;
+ break;
+ case STRINGID_PKMNIMMOBILIZEDBYLOVE:
+ if (tvPtr->pos[atkSide][atkFlank].attractMonId != 0)
+ AddMovePoints(9, 0, tvPtr->pos[atkSide][atkFlank].attractMonId - 1, tvPtr->pos[atkSide][atkFlank].attractMoveSlot);
+ break;
+ case STRINGID_PKMNWASPARALYZED:
+ tvPtr->mon[effSide][gBattlerPartyIndexes[gEffectBattler]].prlzMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->mon[effSide][gBattlerPartyIndexes[gEffectBattler]].prlzMoveSlot = moveSlot;
+ break;
+ case STRINGID_PKMNISPARALYZED:
+ if (tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].prlzMonId != 0)
+ AddMovePoints(9, 2, tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].prlzMonId - 1, tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].prlzMoveSlot);
+ break;
+ case STRINGID_PKMNFELLASLEEP:
+ tvPtr->mon[effSide][gBattlerPartyIndexes[gEffectBattler]].slpMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->mon[effSide][gBattlerPartyIndexes[gEffectBattler]].slpMoveSlot = moveSlot;
+ break;
+ case STRINGID_PKMNFASTASLEEP:
+ if (tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].slpMonId != 0
+ && gStringInfo->currentMove != MOVE_SNORE
+ && gStringInfo->currentMove != MOVE_SLEEP_TALK)
+ AddMovePoints(9, 3, tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].slpMonId - 1, tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].slpMoveSlot);
+ break;
+ case STRINGID_PKMNWASFROZEN:
+ tvPtr->mon[effSide][gBattlerPartyIndexes[gEffectBattler]].frzMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->mon[effSide][gBattlerPartyIndexes[gEffectBattler]].frzMoveSlot = moveSlot;
+ break;
+ case STRINGID_PKMNISFROZEN:
+ if (tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].frzMonId != 0)
+ AddMovePoints(9, 4, tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].frzMonId - 1, tvPtr->mon[atkSide][gBattlerPartyIndexes[gBattlerAttacker]].frzMoveSlot);
+ break;
+ case STRINGID_PKMNWASCONFUSED:
+ tvPtr->pos[effSide][effFlank].confusionMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->pos[effSide][effFlank].confusionMoveSlot = moveSlot;
+ break;
+ case STRINGID_ITHURTCONFUSION:
+ if (tvPtr->pos[atkSide][atkFlank].confusionMonId != 0)
+ AddMovePoints(9, 1, tvPtr->pos[atkSide][atkFlank].confusionMonId - 1, tvPtr->pos[atkSide][atkFlank].confusionMoveSlot);
+ tvPtr->side[atkSide].faintCause = 12;
+ break;
+ case STRINGID_SPIKESSCATTERED:
+ tvPtr->side[defSide].spikesMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->side[defSide].spikesMoveSlot = moveSlot;
+ break;
+ case STRINGID_PKMNHURTBYSPIKES:
+ if (tvPtr->side[scriptingSide].spikesMonId != 0)
+ {
+ AddMovePoints(10, scriptingSide ^ BIT_SIDE, tvPtr->side[scriptingSide].spikesMonId - 1, tvPtr->side[scriptingSide].spikesMoveSlot);
+ tvPtr->side[scriptingSide].faintCause = 7;
+ }
+ break;
+ case STRINGID_PKMNBLEWAWAYSPIKES:
+ tvPtr->side[atkSide].spikesMonId = 0;
+ tvPtr->side[atkSide].spikesMoveSlot = 0;
+ break;
+ case STRINGID_FIREWEAKENED:
+ tvPtr->pos[atkSide][atkFlank].waterSportMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->pos[atkSide][atkFlank].waterSportMoveSlot = moveSlot;
+ break;
+ case STRINGID_ELECTRICITYWEAKENED:
+ tvPtr->pos[atkSide][atkFlank].mudSportMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->pos[atkSide][atkFlank].mudSportMoveSlot = moveSlot;
+ break;
+ case STRINGID_ATTACKERFAINTED:
+ AddPointsOnFainting(FALSE);
+ case STRINGID_RETURNMON:
+ if (tvPtr->pos[atkSide][atkFlank].waterSportMonId != 0)
+ {
+ tvPtr->pos[atkSide][atkFlank].waterSportMonId = 0;
+ tvPtr->pos[atkSide][atkFlank].waterSportMoveSlot = 0;
+ }
+ if (tvPtr->pos[atkSide][atkFlank].mudSportMonId != 0)
+ {
+ tvPtr->pos[atkSide][atkFlank].mudSportMonId = 0;
+ tvPtr->pos[atkSide][atkFlank].mudSportMoveSlot = 0;
+ }
+ break;
+ case STRINGID_TARGETFAINTED:
+ AddPointsOnFainting(TRUE);
+ if (tvPtr->pos[atkSide][defFlank].waterSportMonId != 0)
+ {
+ tvPtr->pos[atkSide][defFlank].waterSportMonId = 0;
+ tvPtr->pos[atkSide][defFlank].waterSportMoveSlot = 0;
+ }
+ if (tvPtr->pos[atkSide][defFlank].mudSportMonId != 0)
+ {
+ tvPtr->pos[atkSide][defFlank].mudSportMonId = 0;
+ tvPtr->pos[atkSide][defFlank].mudSportMoveSlot = 0;
+ }
+ break;
+ case STRINGID_PKMNRAISEDDEF:
+ case STRINGID_PKMNRAISEDDEFALITTLE:
+ tvPtr->side[atkSide].reflectMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->side[atkSide].reflectMoveSlot = moveSlot;
+ break;
+ case STRINGID_PKMNRAISEDSPDEF:
+ case STRINGID_PKMNRAISEDSPDEFALITTLE:
+ tvPtr->side[atkSide].lightScreenMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->side[atkSide].lightScreenMoveSlot = moveSlot;
+ break;
+ case STRINGID_PKMNSXWOREOFF:
+ if (*finishedMoveId == MOVE_REFLECT)
+ {
+ tvPtr->side[atkSide].reflectMonId = 0;
+ tvPtr->side[atkSide].reflectMoveSlot = 0;
+ }
+ if (*finishedMoveId == MOVE_LIGHT_SCREEN)
+ {
+ tvPtr->side[atkSide].lightScreenMonId = 0;
+ tvPtr->side[atkSide].lightScreenMoveSlot = 0;
+ }
+ if (*finishedMoveId == MOVE_MIST)
+ {
+ tvPtr->side[atkSide].mistMonId = 0;
+ tvPtr->side[atkSide].mistMoveSlot = 0;
+ }
+ break;
+ case STRINGID_PKMNCOVEREDBYVEIL:
+ tvPtr->side[atkSide].safeguardMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->side[atkSide].safeguardMoveSlot = moveSlot;
+ break;
+ case STRINGID_PKMNUSEDSAFEGUARD:
+ if (tvPtr->side[defSide].safeguardMonId != 0)
+ AddMovePoints(15, 0, tvPtr->side[defSide].safeguardMonId - 1, tvPtr->side[defSide].safeguardMoveSlot);
+ break;
+ case STRINGID_PKMNSAFEGUARDEXPIRED:
+ tvPtr->side[atkSide].safeguardMonId = 0;
+ tvPtr->side[atkSide].safeguardMoveSlot = 0;
+ break;
+ case STRINGID_PKMNSHROUDEDINMIST:
+ tvPtr->side[atkSide].mistMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->side[atkSide].mistMoveSlot = moveSlot;
+ break;
+ case STRINGID_PKMNPROTECTEDBYMIST:
+ if (tvPtr->side[defSide].mistMonId != 0)
+ AddMovePoints(16, 0, tvPtr->side[defSide].mistMonId - 1, tvPtr->side[defSide].mistMoveSlot);
+ break;
+ case STRINGID_THEWALLSHATTERED:
+ tvPtr->side[defSide].reflectMonId = 0;
+ tvPtr->side[defSide].reflectMoveSlot = 0;
+ tvPtr->side[defSide].lightScreenMonId = 0;
+ tvPtr->side[defSide].lightScreenMoveSlot = 0;
+ AddMovePoints(17, 0, gBattlerPartyIndexes[gBattlerAttacker], moveSlot);
+ break;
+ case STRINGID_PKMNFLINCHED:
+ if (tvPtr->pos[atkSide][0].attackedByMonId != 0)
+ AddMovePoints(21, 0, tvPtr->pos[atkSide][0].attackedByMonId - 1, tvPtr->pos[atkSide][0].attackedByMoveSlot);
+ if (tvPtr->pos[atkSide][1].attackedByMonId != 0)
+ AddMovePoints(21, 0, tvPtr->pos[atkSide][1].attackedByMonId - 1, tvPtr->pos[atkSide][1].attackedByMoveSlot);
+ break;
+ case STRINGID_PKMNCRASHED:
+ case STRINGID_PKMNHITWITHRECOIL:
+ tvPtr->side[atkSide].faintCause = 14;
+ break;
+ }
+}
+
+static bool8 sub_817E0B8(u16 stringId)
+{
+ s32 i = 0;
+
+ do
+ {
+ if (sUnknown_0860A8A4[i] == stringId)
+ break;
+ i++;
+ } while (sUnknown_0860A8A4[i] != 0xFFFF);
+
+ if (sUnknown_0860A8A4[i] == 0xFFFF)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+void BattleTv_SetDataBasedOnMove(u16 move, u16 weatherFlags, struct DisableStruct *disableStructPtr)
+{
+ struct BattleTv *tvPtr;
+ u32 atkSide, defSide;
+ u8 moveSlot;
+
+ if (!(gBattleTypeFlags & BATTLE_TYPE_LINK))
+ return;
+
+ tvPtr = &gBattleStruct->tv;
+
+ atkSide = GetBattlerSide(gBattlerAttacker);
+ defSide = GetBattlerSide(gBattlerTarget);
+ moveSlot = GetBattlerMoveSlotId(gBattlerAttacker, move);
+
+ if (moveSlot >= 4)
+ {
+ tvPtr->side[atkSide].faintCause = 15;
+ return;
+ }
+
+ tvPtr->pos[defSide][GetBattlerPosition(gBattlerAttacker) / 2].attackedByMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->pos[defSide][GetBattlerPosition(gBattlerAttacker) / 2].attackedByMoveSlot = moveSlot;
+ tvPtr->side[atkSide].usedMoveSlot = moveSlot;
+ AddMovePoints(0, moveSlot, gBattleMoves[move].effect, 0);
+ AddPointsBasedOnWeather(weatherFlags, move, moveSlot);
+ if (disableStructPtr->chargeTimer1 != 0)
+ AddMovePoints(7, move, moveSlot, 0);
+
+ if (move == MOVE_WISH)
+ {
+ tvPtr->side[atkSide].wishMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->side[atkSide].wishMoveSlot = moveSlot;
+ }
+ if (move == MOVE_SELF_DESTRUCT || move == MOVE_EXPLOSION)
+ {
+ tvPtr->side[atkSide ^ BIT_SIDE].explosionMonId = gBattlerPartyIndexes[gBattlerAttacker] + 1;
+ tvPtr->side[atkSide ^ BIT_SIDE].explosionMoveSlot = moveSlot;
+ tvPtr->side[atkSide ^ BIT_SIDE].faintCause = 13;
+ tvPtr->side[atkSide ^ BIT_SIDE].explosion = 1;
+ }
+
+ AddMovePoints(13, gBattleMoves[move].type, gBattleMoves[move].power, 0);
+ AddMovePoints(14, gBattleMoves[move].type, gBattleMoves[move].power, 0);
+ AddMovePoints(11, gBattleMoves[move].type, 0, 0);
+ AddMovePoints(12, gBattleMoves[move].type, 0, 0);
+}
+
+void BattleTv_SetDataBasedOnAnimation(u8 animationId)
+{
+ struct BattleTv *tvPtr;
+ u32 atkSide;
+
+ if (!(gBattleTypeFlags & BATTLE_TYPE_LINK))
+ return;
+
+ tvPtr = &gBattleStruct->tv;
+ atkSide = GetBattlerSide(gBattlerAttacker);
+ switch (animationId)
+ {
+ case B_ANIM_FUTURE_SIGHT_HIT:
+ if (tvPtr->side[atkSide].futureSightMonId != 0)
+ {
+ AddMovePoints(2, 0, atkSide,
+ (tvPtr->side[atkSide].futureSightMonId - 1) * 4 + tvPtr->side[atkSide].futureSightMoveSlot);
+ tvPtr->side[atkSide].faintCause = 8;
+ }
+ break;
+ case B_ANIM_DOOM_DESIRE_HIT:
+ if (tvPtr->side[atkSide].doomDesireMonId != 0)
+ {
+ AddMovePoints(2, 1, atkSide,
+ (tvPtr->side[atkSide].doomDesireMonId - 1) * 4 + tvPtr->side[atkSide].doomDesireMoveSlot);
+ tvPtr->side[atkSide].faintCause = 9;
+ }
+ break;
+ }
+}
+
+#ifdef NONMATCHING
+// for loop has an unused stack variable
+void TryPutLinkBattleTvShowOnAir(void)
+{
+ u16 playerBestSpecies = 0, opponentBestSpecies = 0;
+ s16 playerBestSum = 0, opponentBestSum = SHRT_MAX;
+ u8 playerBestMonId = 0, opponentBestMonId = 0;
+ struct BattleTvMovePoints *movePoints = NULL;
+ u8 countPlayer = 0, countOpponent = 0;
+ s16 sum = 0;
+ u16 species = 0;
+ u16 moveId = 0;
+ s32 i, j;
+
+ if (gBattleStruct->anyMonHasTransformed)
+ return;
+
+ movePoints = &gBattleStruct->tvMovePoints;
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES, NULL) != SPECIES_NONE)
+ countPlayer++;
+ if (GetMonData(&gEnemyParty[i], MON_DATA_SPECIES, NULL) != SPECIES_NONE)
+ countOpponent++;
+ }
+
+ if (!(gBattleTypeFlags & BATTLE_TYPE_LINK) || countPlayer != countOpponent)
+ return;
+
+ for (i = 0; i < PARTY_SIZE; i++)
+ {
+ species = GetMonData(&gPlayerParty[i], MON_DATA_SPECIES, NULL);
+ if (species != SPECIES_NONE && !GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG, NULL))
+ {
+ for (sum = 0, j = 0; j < 4; j++)
+ sum += movePoints->points[0][i * 4 + j];
+
+ if (playerBestSum < sum)
+ {
+ playerBestMonId = i;
+ playerBestSum = sum;
+ playerBestSpecies = species;
+ }
+ }
+
+ species = GetMonData(&gEnemyParty[i], MON_DATA_SPECIES, NULL);
+ if (species != SPECIES_NONE && !GetMonData(&gEnemyParty[i], MON_DATA_IS_EGG, NULL))
+ {
+ for (sum = 0, j = 0; j < 4; j++)
+ sum += movePoints->points[1][i * 4 + j];
+
+ if (opponentBestSum == sum)
+ {
+ if (GetMonData(&gEnemyParty[i], MON_DATA_EXP, NULL) > GetMonData(&gEnemyParty[opponentBestMonId], MON_DATA_EXP, NULL))
+ {
+ opponentBestMonId = i;
+ opponentBestSum = sum;
+ opponentBestSpecies = species;
+ }
+ }
+ else if (opponentBestSum > sum)
+ {
+ opponentBestMonId = i;
+ opponentBestSum = sum;
+ opponentBestSpecies = species;
+ }
+ }
+ }
+
+ for (sum = 0, i = 0, j = 0; j < 4; j++)
+ {
+ if (sum < movePoints->points[0][playerBestMonId * 4 + j])
+ {
+ sum = movePoints->points[0][playerBestMonId * 4 + j];
+ i = j;
+ }
+ }
+
+ moveId = GetMonData(&gPlayerParty[playerBestMonId], MON_DATA_MOVE1 + i, NULL);
+ if (playerBestSum == 0 || moveId == 0)
+ return;
+
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ {
+ if ((playerBestMonId < 3 && !sub_806D82C(gBattleScripting.multiplayerId))
+ || (playerBestMonId >= 3 && sub_806D82C(gBattleScripting.multiplayerId)))
+ {
+ j = (opponentBestMonId < 3) ? 0 : 1;
+ PutBattleUpdateOnTheAir(sub_806EF84(j, gBattleScripting.multiplayerId), moveId, playerBestSpecies, opponentBestSpecies);
+ }
+ }
+ else
+ {
+ PutBattleUpdateOnTheAir(gBattleScripting.multiplayerId ^ 1, moveId, playerBestSpecies, opponentBestSpecies);
+ }
+}
+
+#else
+NAKED
+void TryPutLinkBattleTvShowOnAir(void)
+{
+ asm_unified(
+ "push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, 0x20\n\
+ movs r0, 0\n\
+ str r0, [sp]\n\
+ movs r1, 0\n\
+ str r1, [sp, 0x4]\n\
+ movs r2, 0\n\
+ str r2, [sp, 0x8]\n\
+ ldr r3, =0x00007fff\n\
+ str r3, [sp, 0xC]\n\
+ movs r4, 0\n\
+ str r4, [sp, 0x10]\n\
+ movs r7, 0\n\
+ str r7, [sp, 0x14]\n\
+ mov r8, r0\n\
+ ldr r0, =gBattleStruct\n\
+ ldr r1, [r0]\n\
+ adds r0, r1, 0\n\
+ adds r0, 0xB3\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0\n\
+ beq _0817E42A\n\
+ b _0817E670\n\
+_0817E42A:\n\
+ movs r2, 0xD2\n\
+ lsls r2, 1\n\
+ adds r2, r1\n\
+ mov r10, r2\n\
+ movs r6, 0\n\
+_0817E434:\n\
+ movs r0, 0x64\n\
+ adds r4, r6, 0\n\
+ muls r4, r0\n\
+ ldr r0, =gPlayerParty\n\
+ adds r0, r4, r0\n\
+ movs r1, 0xB\n\
+ movs r2, 0\n\
+ bl GetMonData\n\
+ cmp r0, 0\n\
+ beq _0817E454\n\
+ mov r0, r8\n\
+ adds r0, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r8, r0\n\
+_0817E454:\n\
+ ldr r5, =gEnemyParty\n\
+ adds r0, r4, r5\n\
+ movs r1, 0xB\n\
+ movs r2, 0\n\
+ bl GetMonData\n\
+ cmp r0, 0\n\
+ beq _0817E46A\n\
+ adds r0, r7, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r7, r0, 24\n\
+_0817E46A:\n\
+ adds r6, 0x1\n\
+ cmp r6, 0x5\n\
+ ble _0817E434\n\
+ ldr r0, =gBattleTypeFlags\n\
+ ldr r0, [r0]\n\
+ movs r1, 0x2\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _0817E47E\n\
+ b _0817E670\n\
+_0817E47E:\n\
+ cmp r8, r7\n\
+ beq _0817E484\n\
+ b _0817E670\n\
+_0817E484:\n\
+ movs r6, 0\n\
+ lsls r3, r6, 1\n\
+ str r3, [sp, 0x18]\n\
+ movs r4, 0x64\n\
+ mov r8, r4\n\
+_0817E48E:\n\
+ mov r1, r8\n\
+ muls r1, r6\n\
+ ldr r0, =gPlayerParty\n\
+ adds r4, r1, r0\n\
+ adds r0, r4, 0\n\
+ movs r1, 0xB\n\
+ movs r2, 0\n\
+ bl GetMonData\n\
+ lsls r0, 16\n\
+ lsrs r7, r0, 16\n\
+ adds r0, r6, 0x1\n\
+ mov r9, r0\n\
+ cmp r7, 0\n\
+ beq _0817E4EE\n\
+ adds r0, r4, 0\n\
+ movs r1, 0x2D\n\
+ movs r2, 0\n\
+ bl GetMonData\n\
+ cmp r0, 0\n\
+ bne _0817E4EE\n\
+ movs r4, 0\n\
+ lsls r0, r6, 3\n\
+ mov r2, r10\n\
+ adds r1, r0, r2\n\
+ movs r3, 0x3\n\
+_0817E4C4:\n\
+ lsls r0, r4, 16\n\
+ asrs r0, 16\n\
+ ldrh r4, [r1]\n\
+ adds r0, r4\n\
+ lsls r0, 16\n\
+ lsrs r4, r0, 16\n\
+ adds r1, 0x2\n\
+ subs r3, 0x1\n\
+ cmp r3, 0\n\
+ bge _0817E4C4\n\
+ ldr r1, [sp, 0x8]\n\
+ lsls r0, r1, 16\n\
+ lsls r1, r4, 16\n\
+ cmp r0, r1\n\
+ bge _0817E4EE\n\
+ lsls r0, r6, 24\n\
+ lsrs r0, 24\n\
+ str r0, [sp, 0x10]\n\
+ lsrs r1, 16\n\
+ str r1, [sp, 0x8]\n\
+ str r7, [sp]\n\
+_0817E4EE:\n\
+ mov r0, r8\n\
+ muls r0, r6\n\
+ ldr r2, =gEnemyParty\n\
+ adds r4, r0, r2\n\
+ adds r0, r4, 0\n\
+ movs r1, 0xB\n\
+ movs r2, 0\n\
+ bl GetMonData\n\
+ lsls r0, 16\n\
+ lsrs r7, r0, 16\n\
+ ldr r3, [sp, 0x8]\n\
+ lsls r3, 16\n\
+ str r3, [sp, 0x1C]\n\
+ cmp r7, 0\n\
+ beq _0817E5A0\n\
+ adds r0, r4, 0\n\
+ movs r1, 0x2D\n\
+ movs r2, 0\n\
+ bl GetMonData\n\
+ cmp r0, 0\n\
+ bne _0817E5A0\n\
+ movs r4, 0\n\
+ ldr r0, [sp, 0xC]\n\
+ lsls r2, r0, 16\n\
+ movs r3, 0x1\n\
+ lsls r1, r3, 1\n\
+ adds r1, 0x1\n\
+ lsls r1, 4\n\
+ lsls r0, r6, 3\n\
+ adds r0, r1\n\
+ mov r3, r10\n\
+ adds r1, r0, r3\n\
+ movs r3, 0x3\n\
+_0817E534:\n\
+ lsls r0, r4, 16\n\
+ asrs r0, 16\n\
+ ldrh r4, [r1]\n\
+ adds r0, r4\n\
+ lsls r0, 16\n\
+ lsrs r4, r0, 16\n\
+ adds r1, 0x2\n\
+ subs r3, 0x1\n\
+ cmp r3, 0\n\
+ bge _0817E534\n\
+ asrs r1, r2, 16\n\
+ lsls r5, r4, 16\n\
+ asrs r0, r5, 16\n\
+ cmp r1, r0\n\
+ bne _0817E590\n\
+ mov r0, r8\n\
+ muls r0, r6\n\
+ ldr r1, =gEnemyParty\n\
+ adds r0, r1\n\
+ movs r1, 0x19\n\
+ movs r2, 0\n\
+ bl GetMonData\n\
+ adds r4, r0, 0\n\
+ ldr r2, [sp, 0x14]\n\
+ mov r0, r8\n\
+ muls r0, r2\n\
+ ldr r3, =gEnemyParty\n\
+ adds r0, r3\n\
+ movs r1, 0x19\n\
+ movs r2, 0\n\
+ bl GetMonData\n\
+ cmp r4, r0\n\
+ bls _0817E5A0\n\
+ b _0817E594\n\
+ .pool\n\
+_0817E590:\n\
+ cmp r1, r0\n\
+ ble _0817E5A0\n\
+_0817E594:\n\
+ lsls r0, r6, 24\n\
+ lsrs r0, 24\n\
+ str r0, [sp, 0x14]\n\
+ lsrs r5, 16\n\
+ str r5, [sp, 0xC]\n\
+ str r7, [sp, 0x4]\n\
+_0817E5A0:\n\
+ mov r6, r9\n\
+ cmp r6, 0x5\n\
+ bgt _0817E5A8\n\
+ b _0817E48E\n\
+_0817E5A8:\n\
+ movs r4, 0\n\
+ movs r6, 0\n\
+ movs r3, 0\n\
+ ldr r5, =gPlayerParty\n\
+ ldr r7, [sp, 0x10]\n\
+ lsls r0, r7, 3\n\
+ mov r1, r10\n\
+ adds r2, r0, r1\n\
+_0817E5B8:\n\
+ lsls r0, r4, 16\n\
+ asrs r0, 16\n\
+ movs r7, 0\n\
+ ldrsh r1, [r2, r7]\n\
+ cmp r0, r1\n\
+ bge _0817E5C8\n\
+ ldrh r4, [r2]\n\
+ adds r6, r3, 0\n\
+_0817E5C8:\n\
+ adds r2, 0x2\n\
+ adds r3, 0x1\n\
+ cmp r3, 0x3\n\
+ ble _0817E5B8\n\
+ movs r0, 0x64\n\
+ ldr r1, [sp, 0x10]\n\
+ muls r0, r1\n\
+ adds r0, r5\n\
+ adds r1, r6, 0\n\
+ adds r1, 0xD\n\
+ movs r2, 0\n\
+ bl GetMonData\n\
+ lsls r0, 16\n\
+ lsrs r4, r0, 16\n\
+ ldr r2, [sp, 0x1C]\n\
+ cmp r2, 0\n\
+ beq _0817E670\n\
+ cmp r4, 0\n\
+ beq _0817E670\n\
+ ldr r0, =gBattleTypeFlags\n\
+ ldr r0, [r0]\n\
+ movs r1, 0x40\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0817E65C\n\
+ ldr r3, [sp, 0x10]\n\
+ cmp r3, 0x2\n\
+ bhi _0817E620\n\
+ ldr r0, =gBattleScripting\n\
+ adds r0, 0x25\n\
+ ldrb r0, [r0]\n\
+ bl sub_806D82C\n\
+ lsls r0, 16\n\
+ cmp r0, 0\n\
+ beq _0817E630\n\
+ b _0817E670\n\
+ .pool\n\
+_0817E620:\n\
+ ldr r0, =gBattleScripting\n\
+ adds r0, 0x25\n\
+ ldrb r0, [r0]\n\
+ bl sub_806D82C\n\
+ lsls r0, 16\n\
+ cmp r0, 0\n\
+ beq _0817E670\n\
+_0817E630:\n\
+ movs r3, 0\n\
+ ldr r7, [sp, 0x14]\n\
+ cmp r7, 0x2\n\
+ bls _0817E63A\n\
+ movs r3, 0x1\n\
+_0817E63A:\n\
+ lsls r0, r3, 24\n\
+ lsrs r0, 24\n\
+ ldr r1, =gBattleScripting\n\
+ adds r1, 0x25\n\
+ ldrb r1, [r1]\n\
+ bl sub_806EF84\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ adds r1, r4, 0\n\
+ ldr r2, [sp]\n\
+ ldr r3, [sp, 0x4]\n\
+ bl PutBattleUpdateOnTheAir\n\
+ b _0817E670\n\
+ .pool\n\
+_0817E65C:\n\
+ ldr r0, =gBattleScripting\n\
+ adds r0, 0x25\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x1\n\
+ eors r0, r1\n\
+ adds r1, r4, 0\n\
+ ldr r2, [sp]\n\
+ ldr r3, [sp, 0x4]\n\
+ bl PutBattleUpdateOnTheAir\n\
+_0817E670:\n\
+ add sp, 0x20\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .pool");
+}
+#endif
+
+static void AddMovePoints(u8 caseId, u16 arg1, u8 arg2, u8 arg3)
+{
+ struct BattleTvMovePoints *movePoints = &gBattleStruct->tvMovePoints;
+ struct BattleTv *tvPtr = &gBattleStruct->tv;
+ u32 atkSide = GetBattlerSide(gBattlerAttacker);
+ u32 defSide = GetBattlerSide(gBattlerTarget);
+ const u16 *ptr;
+ s32 i;
+
+ switch (caseId)
+ {
+ case 0:
+ case 1:
+ case 18:
+ case 22 ... 27:
+ movePoints->points[atkSide][gBattlerPartyIndexes[gBattlerAttacker] * 4 + arg1] += sPointsArray[caseId][arg2];
+ break;
+ case 3 ... 7:
+ i = 0;
+ ptr = sPointsArray[caseId];
+ do
+ {
+ if (arg1 == ptr[i])
+ {
+ movePoints->points[atkSide][gBattlerPartyIndexes[gBattlerAttacker] * 4 + arg2] += ptr[i+1];
+ break;
+ }
+ i += 2;
+ } while (ptr[i] != 0xFFFF);
+ break;
+ case 19:
+ tvPtr->side[arg2 ^ 1].faintCause = 0;
+ movePoints->points[arg2][0 * 4 + arg3] += sPointsArray[caseId][arg1];
+ break;
+ case 20:
+ tvPtr->side[arg2].faintCause = 0;
+ case 2:
+ movePoints->points[arg2][0 * 4 + arg3] += sPointsArray[caseId][arg1];
+ break;
+ case 17:
+ movePoints->points[atkSide][arg2 * 4 + arg3] += sPointsArray[caseId][arg1];
+ break;
+ case 8:
+ case 9:
+ case 15:
+ case 16:
+ case 21:
+ movePoints->points[atkSide ^ BIT_SIDE][arg2 * 4 + arg3] += sPointsArray[caseId][arg1];
+ break;
+ case 10:
+ movePoints->points[arg1][arg2 * 4 + arg3] += sPointsArray[caseId][0];
+ break;
+ case 11:
+ if (tvPtr->pos[defSide][0].waterSportMonId != -(tvPtr->pos[defSide][1].waterSportMonId) && arg1 == 10)
+ {
+ if (tvPtr->pos[defSide][0].waterSportMonId != 0)
+ {
+ u32 id = (tvPtr->pos[defSide][0].waterSportMonId - 1) * 4;
+ movePoints->points[defSide][id + tvPtr->pos[defSide][0].waterSportMoveSlot] += sPointsArray[caseId][0];
+ }
+ if (tvPtr->pos[defSide][1].waterSportMonId != 0)
+ {
+ u32 id = (tvPtr->pos[defSide][1].waterSportMonId - 1) * 4;
+ movePoints->points[defSide][id + tvPtr->pos[defSide][1].waterSportMoveSlot] += sPointsArray[caseId][0];
+ }
+ }
+ break;
+ case 12:
+ if (tvPtr->pos[defSide][0].mudSportMonId != -(tvPtr->pos[defSide][1].mudSportMonId) && arg1 == 13)
+ {
+ if (tvPtr->pos[defSide][0].mudSportMonId != 0)
+ {
+ u32 id = (tvPtr->pos[defSide][0].mudSportMonId - 1) * 4;
+ movePoints->points[defSide][id + tvPtr->pos[defSide][0].mudSportMoveSlot] += sPointsArray[caseId][0];
+ }
+ if (tvPtr->pos[defSide][1].mudSportMonId != 0)
+ {
+ u32 id = (tvPtr->pos[defSide][1].mudSportMonId - 1) * 4;
+ movePoints->points[defSide][id + tvPtr->pos[defSide][1].mudSportMoveSlot] += sPointsArray[caseId][0];
+ }
+ }
+ break;
+ case 13:
+ if (arg1 <= 8 && arg2 != 0 && tvPtr->side[defSide].reflectMonId != 0)
+ {
+ u32 id = (tvPtr->side[defSide].reflectMonId - 1) * 4;
+ movePoints->points[defSide][id + tvPtr->side[defSide].reflectMoveSlot] += sPointsArray[caseId][0];
+ }
+ break;
+ case 14:
+ if (arg1 > 8 && arg2 != 0 && tvPtr->side[defSide].lightScreenMonId != 0)
+ {
+ u32 id = (tvPtr->side[defSide].lightScreenMonId - 1) * 4;
+ movePoints->points[defSide][id + tvPtr->side[defSide].lightScreenMoveSlot] += sPointsArray[caseId][0];
+ }
+ break;
+ }
+}
+
+static void AddPointsOnFainting(bool8 targetFainted)
+{
+ struct BattleTv *tvPtr = &gBattleStruct->tv;
+ u32 atkSide = GetBattlerSide(gBattlerAttacker);
+ u32 defSide = GetBattlerSide(gBattlerTarget);
+ u32 atkArrId = tvPtr->side[atkSide].faintCauseMonId;
+ s32 i;
+
+ if (tvPtr->side[atkSide].faintCause != 0)
+ {
+ switch (tvPtr->side[atkSide].faintCause)
+ {
+ case 1:
+ if (tvPtr->pos[atkSide][atkArrId].curseMonId != 0)
+ {
+ AddMovePoints(19, 0, atkSide ^ BIT_SIDE,
+ (tvPtr->pos[atkSide][atkArrId].curseMonId - 1) * 4 + tvPtr->pos[atkSide][atkArrId].curseMoveSlot);
+ }
+ break;
+ case 2:
+ if (tvPtr->pos[atkSide][atkArrId].leechSeedMonId != 0)
+ {
+ AddMovePoints(19, 0, atkSide ^ BIT_SIDE,
+ (tvPtr->pos[atkSide][atkArrId].leechSeedMonId - 1) * 4 + tvPtr->pos[atkSide][atkArrId].leechSeedMoveSlot);
+ }
+ break;
+ case 3:
+ if (tvPtr->mon[atkSide][atkArrId].psnMonId != 0)
+ {
+ AddMovePoints(19, 0, atkSide ^ BIT_SIDE,
+ (tvPtr->mon[atkSide][atkArrId].psnMonId - 1) * 4 + tvPtr->mon[atkSide][atkArrId].psnMoveSlot);
+ }
+ if (tvPtr->mon[atkSide][atkArrId].badPsnMonId != 0)
+ {
+ AddMovePoints(19, 0, atkSide ^ BIT_SIDE,
+ (tvPtr->mon[atkSide][atkArrId].badPsnMonId - 1) * 4 + tvPtr->mon[atkSide][atkArrId].badPsnMoveSlot);
+ }
+ break;
+ case 4:
+ if (tvPtr->mon[atkSide][atkArrId].brnMonId != 0)
+ {
+ AddMovePoints(19, 0, atkSide ^ BIT_SIDE,
+ (tvPtr->mon[atkSide][atkArrId].brnMonId - 1) * 4 + tvPtr->mon[atkSide][atkArrId].brnMoveSlot);
+ }
+ break;
+ case 5:
+ if (tvPtr->pos[atkSide][atkArrId].nightmareMonId != 0)
+ {
+ AddMovePoints(19, 0, atkSide ^ BIT_SIDE,
+ (tvPtr->pos[atkSide][atkArrId].nightmareMonId - 1) * 4 + tvPtr->pos[atkSide][atkArrId].nightmareMoveSlot);
+ }
+ break;
+ case 6:
+ if (tvPtr->pos[atkSide][atkArrId].wrapMonId != 0)
+ {
+ AddMovePoints(19, 0, atkSide ^ BIT_SIDE,
+ (tvPtr->pos[atkSide][atkArrId].wrapMonId - 1) * 4 + tvPtr->pos[atkSide][atkArrId].wrapMoveSlot);
+ }
+ break;
+ case 7:
+ if (tvPtr->side[atkSide].spikesMonId != 0)
+ {
+ AddMovePoints(19, 0, atkSide ^ BIT_SIDE,
+ (tvPtr->side[atkSide].spikesMonId - 1) * 4 + tvPtr->side[atkSide].spikesMoveSlot);
+ }
+ break;
+ case 8:
+ if (tvPtr->side[atkSide].futureSightMonId != 0)
+ {
+ AddMovePoints(20, 0, atkSide,
+ (tvPtr->side[atkSide].futureSightMonId - 1) * 4 + tvPtr->side[atkSide].futureSightMoveSlot);
+ }
+ break;
+ case 9:
+ if (tvPtr->side[atkSide].doomDesireMonId != 0)
+ {
+ AddMovePoints(20, 0, atkSide,
+ (tvPtr->side[atkSide].doomDesireMonId - 1) * 4 + tvPtr->side[atkSide].doomDesireMoveSlot);
+ }
+ break;
+ case 10:
+ if (tvPtr->side[atkSide].perishSong
+ && tvPtr->side[atkSide].perishSongMonId - 1 != gBattlerPartyIndexes[gBattlerAttacker])
+ {
+ AddMovePoints(19, 0, atkSide,
+ (tvPtr->side[atkSide].perishSongMonId - 1) * 4 + tvPtr->side[atkSide].perishSongMoveSlot);
+ }
+ if (tvPtr->side[atkSide ^ BIT_SIDE].perishSong)
+ {
+ AddMovePoints(19, 0, atkSide ^ BIT_SIDE,
+ (tvPtr->side[atkSide ^ BIT_SIDE].perishSongMonId - 1) * 4 + tvPtr->side[atkSide ^ BIT_SIDE].perishSongMoveSlot);
+ }
+ break;
+ case 11:
+ if (tvPtr->side[atkSide ^ BIT_SIDE].destinyBondMonId != 0)
+ {
+ AddMovePoints(19, 0, atkSide ^ BIT_SIDE,
+ (tvPtr->side[atkSide ^ BIT_SIDE].destinyBondMonId - 1) * 4 + tvPtr->side[atkSide ^ BIT_SIDE].destinyBondMoveSlot);
+ }
+ break;
+ case 12:
+ for (i = 0; i < 2; i++)
+ {
+ if (tvPtr->pos[atkSide][i].confusionMonId != 0)
+ {
+ AddMovePoints(19, 0, atkSide ^ BIT_SIDE,
+ (tvPtr->pos[atkSide][i].confusionMonId - 1) * 4 + tvPtr->pos[atkSide][i].confusionMoveSlot);
+ }
+ }
+ break;
+ case 13:
+ if (tvPtr->side[atkSide].explosion)
+ {
+ AddMovePoints(19, 0, atkSide,
+ (tvPtr->side[atkSide].explosionMonId - 1) * 4 + tvPtr->side[atkSide].explosionMoveSlot);
+ }
+ if (tvPtr->side[atkSide ^ BIT_SIDE].explosion)
+ {
+ AddMovePoints(19, 0, atkSide ^ BIT_SIDE,
+ (tvPtr->side[atkSide ^ BIT_SIDE].explosionMonId - 1) * 4 + tvPtr->side[atkSide ^ BIT_SIDE].explosionMoveSlot);
+ }
+ break;
+ case 14:
+ if (targetFainted == TRUE)
+ {
+ AddMovePoints(20, 0, atkSide,
+ (gBattlerPartyIndexes[gBattlerAttacker]) * 4 + tvPtr->side[atkSide].usedMoveSlot);
+ }
+ break;
+ case 15:
+ break;
+ }
+ }
+ else
+ {
+ if (tvPtr->side[defSide].faintCause == 7)
+ {
+ if (tvPtr->side[defSide].spikesMonId != 0)
+ {
+ AddMovePoints(19, 0, defSide ^ BIT_SIDE,
+ (tvPtr->side[defSide].spikesMonId - 1) * 4 + tvPtr->side[defSide].spikesMoveSlot);
+ }
+ }
+ else
+ {
+ AddMovePoints(20, 0, atkSide,
+ (gBattlerPartyIndexes[gBattlerAttacker]) * 4 + tvPtr->side[atkSide].usedMoveSlot);
+ }
+ }
+}
+
+static void TrySetBattleSeminarShow(void)
+{
+ s32 i;
+ s32 dmgByMove[4];
+ u16 powerOverride;
+ u16 currMoveSaved;
+
+ if (gBattleTypeFlags & (BATTLE_TYPE_DOUBLE | BATTLE_TYPE_LINK | BATTLE_TYPE_x2000000))
+ return;
+ else if (GetBattlerSide(gBattlerAttacker) == B_SIDE_OPPONENT)
+ return;
+ else if (gBattleMons[gBattlerAttacker].statStages[STAT_ACC] <= 5)
+ return;
+ else if (gBattleMons[gBattlerTarget].statStages[STAT_EVASION] > 6)
+ return;
+ else if (gCurrentMove == MOVE_HIDDEN_POWER || gCurrentMove == MOVE_WEATHER_BALL)
+ return;
+ else if (gBattleTypeFlags & (BATTLE_TYPE_PALACE | BATTLE_TYPE_PIKE | BATTLE_TYPE_PYRAMID))
+ return;
+ else if (gBattleMoves[gBattleMons[gBattlerAttacker].moves[gMoveSelectionCursor[gBattlerAttacker]]].power == 0)
+ return;
+
+ i = 0;
+ currMoveSaved = gBattleMons[gBattlerAttacker].moves[gMoveSelectionCursor[gBattlerAttacker]];
+ do
+ {
+ if (currMoveSaved == sVariableDmgMoves[i])
+ break;
+ i++;
+ } while (sVariableDmgMoves[i] != 0xFFFF);
+
+ if (sVariableDmgMoves[i] != 0xFFFF)
+ return;
+
+ dmgByMove[gMoveSelectionCursor[gBattlerAttacker]] = gBattleMoveDamage;
+ currMoveSaved = gCurrentMove;
+ for (i = 0; i < 4; i++)
+ {
+ gCurrentMove = gBattleMons[gBattlerAttacker].moves[i];
+ powerOverride = 0;
+ if (ShouldCalculateDamage(gCurrentMove, &dmgByMove[i], &powerOverride))
+ {
+ u8 moveResultFlags;
+ u16 sideStatus = gSideStatuses[GET_BATTLER_SIDE(gBattlerTarget)];
+ gBattleMoveDamage = CalculateBaseDamage(&gBattleMons[gBattlerAttacker], &gBattleMons[gBattlerTarget], gCurrentMove,
+ sideStatus, powerOverride,
+ 0, gBattlerAttacker, gBattlerTarget);
+
+ if (gStatuses3[gBattlerAttacker] & STATUS3_CHARGED_UP && gBattleMoves[gCurrentMove].type == TYPE_ELECTRIC)
+ gBattleMoveDamage *= 2;
+ if (gProtectStructs[gBattlerAttacker].helpingHand)
+ gBattleMoveDamage = gBattleMoveDamage * 15 / 10;
+
+ moveResultFlags = TypeCalc(gCurrentMove, gBattlerAttacker, gBattlerTarget);
+ dmgByMove[i] = gBattleMoveDamage;
+ if (dmgByMove[i] == 0 && !(moveResultFlags & MOVE_RESULT_NO_EFFECT))
+ dmgByMove[i] = 1;
+ }
+ }
+
+ for (i = 0; i < 4; i++)
+ {
+ if (i != gMoveSelectionCursor[gBattlerAttacker] && dmgByMove[i] > dmgByMove[gMoveSelectionCursor[gBattlerAttacker]])
+ {
+ u16 opponentSpecies, playerSpecies;
+ s32 bestMoveId;
+
+ if (gMoveSelectionCursor[gBattlerAttacker] != 0)
+ bestMoveId = 0;
+ else
+ bestMoveId = 1;
+
+ for (i = 0; i < 4; i++)
+ {
+ if (i != gMoveSelectionCursor[gBattlerAttacker] && dmgByMove[i] > dmgByMove[bestMoveId])
+ bestMoveId = i;
+ }
+
+ opponentSpecies = GetMonData(&gEnemyParty [gBattlerPartyIndexes[gBattlerTarget]], MON_DATA_SPECIES, NULL);
+ playerSpecies = GetMonData(&gPlayerParty[gBattlerPartyIndexes[gBattlerAttacker]], MON_DATA_SPECIES, NULL);
+ sub_80EE35C(opponentSpecies, playerSpecies, gMoveSelectionCursor[gBattlerAttacker], gBattleMons[gBattlerAttacker].moves, gBattleMons[gBattlerAttacker].moves[bestMoveId]);
+ break;
+ }
+ }
+
+ gBattleMoveDamage = dmgByMove[gMoveSelectionCursor[gBattlerAttacker]];
+ gCurrentMove = currMoveSaved;
+}
+
+static bool8 ShouldCalculateDamage(u16 moveId, s32 *dmg, u16 *powerOverride)
+{
+ if (gBattleMoves[moveId].power == 0)
+ {
+ *dmg = 0;
+ return FALSE;
+ }
+ else
+ {
+ s32 i = 0;
+ do
+ {
+ if (moveId == sVariableDmgMoves[i])
+ break;
+ i++;
+ } while (sVariableDmgMoves[i] != 0xFFFF);
+
+ if (sVariableDmgMoves[i] != 0xFFFF)
+ {
+ *dmg = 0;
+ return FALSE;
+ }
+ else if (moveId == MOVE_PSYWAVE)
+ {
+ *dmg = gBattleMons[gBattlerAttacker].level;
+ *dmg /= 2;
+ return FALSE;
+ }
+ else if (moveId == MOVE_MAGNITUDE)
+ {
+ *powerOverride = 10;
+ return TRUE;
+ }
+ else
+ {
+ return TRUE;
+ }
+ }
+}
+
+void BattleTv_ClearExplosionFaintCause(void)
+{
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ struct BattleTv *tvPtr = &gBattleStruct->tv;
+
+ tvPtr->side[B_SIDE_PLAYER].faintCause = 0;
+ tvPtr->side[B_SIDE_OPPONENT].faintCause = 0;
+
+ tvPtr->side[B_SIDE_PLAYER].faintCauseMonId = 0;
+ tvPtr->side[B_SIDE_OPPONENT].faintCauseMonId = 0;
+
+ tvPtr->side[B_SIDE_PLAYER].explosionMonId = 0;
+ tvPtr->side[B_SIDE_OPPONENT].explosionMonId = 0;
+
+ tvPtr->side[B_SIDE_PLAYER].explosionMoveSlot = 0;
+ tvPtr->side[B_SIDE_OPPONENT].explosionMoveSlot = 0;
+
+ tvPtr->side[B_SIDE_PLAYER].explosion = 0;
+ tvPtr->side[B_SIDE_OPPONENT].explosion = 0;
+ }
+}
+
+u8 GetBattlerMoveSlotId(u8 battlerId, u16 moveId)
+{
+ s32 i;
+ struct Pokemon *party;
+
+ if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
+ party = gPlayerParty;
+ else
+ party = gEnemyParty;
+
+ i = 0;
+ while (1)
+ {
+ if (i >= 4)
+ break;
+ if (GetMonData(&party[gBattlerPartyIndexes[battlerId]], MON_DATA_MOVE1 + i, NULL) == moveId)
+ break;
+ i++;
+ }
+
+ return i;
+}
+
+static void AddPointsBasedOnWeather(u16 weatherFlags, u16 moveId, u8 moveSlot)
+{
+ if (weatherFlags & WEATHER_RAIN_ANY)
+ AddMovePoints(3, moveId, moveSlot, 0);
+ else if (weatherFlags & WEATHER_SUN_ANY)
+ AddMovePoints(4, moveId, moveSlot, 0);
+ else if (weatherFlags & WEATHER_SANDSTORM_ANY)
+ AddMovePoints(5, moveId, moveSlot, 0);
+ else if (weatherFlags & WEATHER_HAIL_ANY)
+ AddMovePoints(6, moveId, moveSlot, 0);
+}
diff --git a/src/battle_util.c b/src/battle_util.c
index ddd61ae19..172ec6659 100644
--- a/src/battle_util.c
+++ b/src/battle_util.c
@@ -20,12 +20,9 @@
#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 struct BattleMove gBattleMoves[];
-
extern u8 weather_get_current(void);
// rom const data
@@ -1666,36 +1663,31 @@ u8 CastformDataTypeChange(u8 battler)
u8 formChange = 0;
if (gBattleMons[battler].species != SPECIES_CASTFORM || gBattleMons[battler].ability != ABILITY_FORECAST || gBattleMons[battler].hp == 0)
return CASTFORM_NO_CHANGE;
- if (!WEATHER_HAS_EFFECT && gBattleMons[battler].type1 != TYPE_NORMAL && gBattleMons[battler].type2 != TYPE_NORMAL)
+ if (!WEATHER_HAS_EFFECT && !IS_BATTLER_OF_TYPE(battler, TYPE_NORMAL))
{
- gBattleMons[battler].type1 = TYPE_NORMAL;
- gBattleMons[battler].type2 = TYPE_NORMAL;
+ SET_BATTLER_TYPE(battler, TYPE_NORMAL);
return CASTFORM_TO_NORMAL;
}
if (!WEATHER_HAS_EFFECT)
return CASTFORM_NO_CHANGE;
- if (!(gBattleWeather & (WEATHER_RAIN_ANY | WEATHER_SUN_ANY | WEATHER_HAIL)) && gBattleMons[battler].type1 != TYPE_NORMAL && gBattleMons[battler].type2 != TYPE_NORMAL)
+ if (!(gBattleWeather & (WEATHER_RAIN_ANY | WEATHER_SUN_ANY | WEATHER_HAIL_ANY)) && !IS_BATTLER_OF_TYPE(battler, TYPE_NORMAL))
{
- gBattleMons[battler].type1 = TYPE_NORMAL;
- gBattleMons[battler].type2 = TYPE_NORMAL;
+ SET_BATTLER_TYPE(battler, TYPE_NORMAL);
formChange = CASTFORM_TO_NORMAL;
}
- if (gBattleWeather & WEATHER_SUN_ANY && gBattleMons[battler].type1 != TYPE_FIRE && gBattleMons[battler].type2 != TYPE_FIRE)
+ if (gBattleWeather & WEATHER_SUN_ANY && !IS_BATTLER_OF_TYPE(battler, TYPE_FIRE))
{
- gBattleMons[battler].type1 = TYPE_FIRE;
- gBattleMons[battler].type2 = TYPE_FIRE;
+ SET_BATTLER_TYPE(battler, TYPE_FIRE);
formChange = CASTFORM_TO_FIRE;
}
- if (gBattleWeather & WEATHER_RAIN_ANY && gBattleMons[battler].type1 != TYPE_WATER && gBattleMons[battler].type2 != TYPE_WATER)
+ if (gBattleWeather & WEATHER_RAIN_ANY && !IS_BATTLER_OF_TYPE(battler, TYPE_WATER))
{
- gBattleMons[battler].type1 = TYPE_WATER;
- gBattleMons[battler].type2 = TYPE_WATER;
+ SET_BATTLER_TYPE(battler, TYPE_WATER);
formChange = CASTFORM_TO_WATER;
}
- if (gBattleWeather & WEATHER_HAIL && gBattleMons[battler].type1 != TYPE_ICE && gBattleMons[battler].type2 != TYPE_ICE)
+ if (gBattleWeather & WEATHER_HAIL_ANY && !IS_BATTLER_OF_TYPE(battler, TYPE_ICE))
{
- gBattleMons[battler].type1 = TYPE_ICE;
- gBattleMons[battler].type2 = TYPE_ICE;
+ SET_BATTLER_TYPE(battler, TYPE_ICE);
formChange = CASTFORM_TO_ICE;
}
return formChange;
@@ -2025,14 +2017,12 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA
if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
&& move != MOVE_STRUGGLE
&& gBattleMoves[move].power != 0
- && (gSpecialStatuses[gBattlerTarget].physicalDmg || gSpecialStatuses[gBattlerTarget].specialDmg)
- && gBattleMons[battler].type1 != moveType
- && gBattleMons[battler].type2 != moveType
+ && TARGET_TURN_DAMAGED
+ && !IS_BATTLER_OF_TYPE(battler, moveType)
&& gBattleMons[battler].hp != 0)
{
- gBattleMons[battler].type1 = moveType;
- gBattleMons[battler].type2 = moveType;
- PREPARE_TYPE_BUFFER(gBattleTextBuff1, moveType)
+ SET_BATTLER_TYPE(battler, moveType);
+ PREPARE_TYPE_BUFFER(gBattleTextBuff1, moveType);
BattleScriptPushCursor();
gBattlescriptCurrInstr = BattleScript_ColorChangeActivates;
effect++;
@@ -2042,7 +2032,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA
if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
&& gBattleMons[gBattlerAttacker].hp != 0
&& !gProtectStructs[gBattlerAttacker].confusionSelfDmg
- && (gSpecialStatuses[gBattlerTarget].physicalDmg || gSpecialStatuses[gBattlerTarget].specialDmg)
+ && TARGET_TURN_DAMAGED
&& (gBattleMoves[move].flags & FLAG_MAKES_CONTACT))
{
gBattleMoveDamage = gBattleMons[gBattlerAttacker].maxHP / 16;
@@ -2057,7 +2047,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA
if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
&& gBattleMons[gBattlerAttacker].hp != 0
&& !gProtectStructs[gBattlerAttacker].confusionSelfDmg
- && (gSpecialStatuses[gBattlerTarget].physicalDmg || gSpecialStatuses[gBattlerTarget].specialDmg)
+ && TARGET_TURN_DAMAGED
&& (gBattleMoves[move].flags & FLAG_MAKES_CONTACT)
&& (Random() % 10) == 0)
{
@@ -2080,7 +2070,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA
if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
&& gBattleMons[gBattlerAttacker].hp != 0
&& !gProtectStructs[gBattlerAttacker].confusionSelfDmg
- && (gSpecialStatuses[gBattlerTarget].physicalDmg || gSpecialStatuses[gBattlerTarget].specialDmg)
+ && TARGET_TURN_DAMAGED
&& (gBattleMoves[move].flags & FLAG_MAKES_CONTACT)
&& (Random() % 3) == 0)
{
@@ -2095,7 +2085,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA
if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
&& gBattleMons[gBattlerAttacker].hp != 0
&& !gProtectStructs[gBattlerAttacker].confusionSelfDmg
- && (gSpecialStatuses[gBattlerTarget].physicalDmg || gSpecialStatuses[gBattlerTarget].specialDmg)
+ && TARGET_TURN_DAMAGED
&& (gBattleMoves[move].flags & FLAG_MAKES_CONTACT)
&& (Random() % 3) == 0)
{
@@ -2111,7 +2101,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA
&& gBattleMons[gBattlerAttacker].hp != 0
&& !gProtectStructs[gBattlerAttacker].confusionSelfDmg
&& (gBattleMoves[move].flags & FLAG_MAKES_CONTACT)
- && (gSpecialStatuses[gBattlerTarget].physicalDmg || gSpecialStatuses[gBattlerTarget].specialDmg)
+ && TARGET_TURN_DAMAGED
&& (Random() % 3) == 0)
{
gBattleCommunication[MOVE_EFFECT_BYTE] = MOVE_EFFECT_AFFECTS_USER | MOVE_EFFECT_BURN;
@@ -2126,7 +2116,7 @@ u8 AbilityBattleEffects(u8 caseID, u8 battler, u8 ability, u8 special, u16 moveA
&& gBattleMons[gBattlerAttacker].hp != 0
&& !gProtectStructs[gBattlerAttacker].confusionSelfDmg
&& (gBattleMoves[move].flags & FLAG_MAKES_CONTACT)
- && (gSpecialStatuses[gBattlerTarget].physicalDmg || gSpecialStatuses[gBattlerTarget].specialDmg)
+ && TARGET_TURN_DAMAGED
&& gBattleMons[gBattlerTarget].hp != 0
&& (Random() % 3) == 0
&& gBattleMons[gBattlerAttacker].ability != ABILITY_OBLIVIOUS
@@ -3136,7 +3126,7 @@ u8 ItemBattleEffects(u8 caseID, u8 battlerId, bool8 moveTurn)
{
case HOLD_EFFECT_FLINCH:
if (!(gMoveResultFlags & MOVE_RESULT_NO_EFFECT)
- && (gSpecialStatuses[gBattlerTarget].physicalDmg || gSpecialStatuses[gBattlerTarget].specialDmg)
+ && TARGET_TURN_DAMAGED
&& (Random() % 100) < atkQuality
&& gBattleMoves[gCurrentMove].flags & FLAG_KINGSROCK_AFFECTED
&& gBattleMons[gBattlerTarget].hp)
@@ -3188,14 +3178,14 @@ void HandleAction_RunBattleScript(void) // identical to RunBattleScriptCommands
gBattleScriptingCommandsTable[*gBattlescriptCurrInstr]();
}
-u8 GetMoveTarget(u16 move, u8 useMoveTarget)
+u8 GetMoveTarget(u16 move, u8 setTarget)
{
u8 targetBank = 0;
u8 moveTarget;
u8 side;
- if (useMoveTarget)
- moveTarget = useMoveTarget - 1;
+ if (setTarget)
+ moveTarget = setTarget - 1;
else
moveTarget = gBattleMoves[move].target;
@@ -3256,8 +3246,8 @@ u8 GetMoveTarget(u16 move, u8 useMoveTarget)
else
targetBank = GetBattlerAtPosition((GetBattlerPosition(gBattlerAttacker) & BIT_SIDE) ^ BIT_SIDE);
break;
+ case MOVE_TARGET_USER_OR_SELECTED:
case MOVE_TARGET_USER:
- case MOVE_TARGET_x10:
targetBank = gBattlerAttacker;
break;
}
diff --git a/src/battle_util2.c b/src/battle_util2.c
index c1bbabc85..1d2f1e95b 100644
--- a/src/battle_util2.c
+++ b/src/battle_util2.c
@@ -76,26 +76,26 @@ void FreeBattleResources(void)
void AdjustFriendshipOnBattleFaint(u8 battlerId)
{
- u8 opposingBank;
+ u8 opposingBattlerId;
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
{
- u8 opposingBank2;
+ u8 opposingBattlerId2;
- opposingBank = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
- opposingBank2 = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
+ opposingBattlerId = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
+ opposingBattlerId2 = GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT);
- if (gBattleMons[opposingBank2].level > gBattleMons[opposingBank].level)
- opposingBank = opposingBank2;
+ if (gBattleMons[opposingBattlerId2].level > gBattleMons[opposingBattlerId].level)
+ opposingBattlerId = opposingBattlerId2;
}
else
{
- opposingBank = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
+ opposingBattlerId = GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT);
}
- if (gBattleMons[opposingBank].level > gBattleMons[battlerId].level)
+ if (gBattleMons[opposingBattlerId].level > gBattleMons[battlerId].level)
{
- if (gBattleMons[opposingBank].level - gBattleMons[battlerId].level > 29)
+ if (gBattleMons[opposingBattlerId].level - gBattleMons[battlerId].level > 29)
AdjustFriendship(&gPlayerParty[gBattlerPartyIndexes[battlerId]], 8);
else
AdjustFriendship(&gPlayerParty[gBattlerPartyIndexes[battlerId]], 6);
diff --git a/src/berry.c b/src/berry.c
index 74b7090c0..e128eb0ec 100644
--- a/src/berry.c
+++ b/src/berry.c
@@ -1218,7 +1218,7 @@ void FieldObjectInteractionRemoveBerryTree(void)
u8 PlayerHasBerries(void)
{
- return IsBagPocketNonEmpty(BAG_BERRIES);
+ return IsBagPocketNonEmpty(POCKET_BERRIES);
}
void ResetBerryTreeSparkleFlags(void)
diff --git a/src/berry_blender.c b/src/berry_blender.c
index 848798442..48034a8c2 100644
--- a/src/berry_blender.c
+++ b/src/berry_blender.c
@@ -29,6 +29,8 @@
#include "pokeblock.h"
#include "trig.h"
#include "tv.h"
+#include "item_menu.h"
+#include "battle_records.h"
#define BLENDER_SCORE_BEST 0
#define BLENDER_SCORE_GOOD 1
@@ -128,10 +130,8 @@ struct BerryBlenderData
extern struct MusicPlayerInfo gMPlayInfo_SE2;
extern struct MusicPlayerInfo gMPlayInfo_BGM;
-extern u16 gSpecialVar_ItemId;
extern u8 gInGameOpponentsNo;
extern u8 gUnknown_020322D5;
-extern u8 gResultsWindowId;
// graphics
extern const u8 gBerryBlenderArrowTiles[];
@@ -152,10 +152,12 @@ extern const u8 gText_BlenderMaxSpeedRecord[];
extern const u8 gText_234Players[];
extern void sub_800A418(void);
+extern u8 sub_800A9D8(void);
extern void sub_809882C(u8, u16, u8);
extern void copy_textbox_border_tile_patterns_to_vram(u8, u16, u8);
extern void sub_81AABF0(void (*callback)(void));
extern void sub_800B4C0(void);
+extern void ClearLinkCallback(void);
extern void sub_8009F8C(void);
extern void sub_8153430(void);
extern bool8 sub_8153474(void);
@@ -947,10 +949,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++;
@@ -1153,10 +1155,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;
@@ -1869,7 +1871,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;
@@ -2311,7 +2313,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;
@@ -2340,7 +2342,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)
@@ -2360,7 +2362,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;
@@ -2389,7 +2391,7 @@ static void CB2_HandleBlenderEndGame(void)
ResetBlockReceivedFlags();
sBerryBlenderData->gameEndState++;
- if (gReceivedRemoteLinkPlayers != 0 && gLinkVSyncDisabled)
+ if (gReceivedRemoteLinkPlayers != 0 && gWirelessCommType)
{
struct BlenderGameBlock *receivedBlock = (struct BlenderGameBlock*)(&gBlockRecvBuffer);
@@ -2469,7 +2471,7 @@ static void CB2_HandleBlenderEndGame(void)
sub_8081F94(&gSendCmd[0]);
if (sBerryBlenderData->yesNoAnswer == 0)
{
- if (IsBagPocketNonEmpty(BAG_BERRIES) == FALSE) // no berries
+ if (IsBagPocketNonEmpty(POCKET_BERRIES) == FALSE) // no berries
{
sBerryBlenderData->playAgainState = CANT_PLAY_NO_BERRIES;
gSendCmd[1] = 0x9999;
@@ -2687,7 +2689,7 @@ static void CB2_HandlePlayerLinkPlayAgainChoice(void)
if (gReceivedRemoteLinkPlayers == 0)
{
FREE_AND_SET_NULL(sBerryBlenderData);
- SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music);
+ SetMainCallback2(CB2_ReturnToFieldContinueScript);
}
break;
}
@@ -2737,7 +2739,7 @@ static void CB2_HandlePlayerPlayAgainChoice(void)
if (sBerryBlenderData->playAgainState == PLAY_AGAIN_OK)
SetMainCallback2(DoBerryBlending);
else
- SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music);
+ SetMainCallback2(CB2_ReturnToFieldContinueScript);
FreeAllWindowBuffers();
UnsetBgTilemapBuffer(2);
@@ -2866,7 +2868,7 @@ static void sub_8082D28(void)
if (gReceivedRemoteLinkPlayers != 0)
playerId = GetMultiplayerId();
- if (gLinkVSyncDisabled && gReceivedRemoteLinkPlayers != 0)
+ if (gWirelessCommType && gReceivedRemoteLinkPlayers != 0)
{
if (playerId == 0)
{
@@ -3482,13 +3484,13 @@ void ShowBerryBlenderRecordWindow(void)
u8 text[32];
winTemplate = sBlenderRecordWindowTemplate;
- gResultsWindowId = AddWindow(&winTemplate);
- NewMenuHelpers_DrawStdWindowFrame(gResultsWindowId, 0);
- FillWindowPixelBuffer(gResultsWindowId, 0x11);
+ gRecordsWindowId = AddWindow(&winTemplate);
+ NewMenuHelpers_DrawStdWindowFrame(gRecordsWindowId, 0);
+ FillWindowPixelBuffer(gRecordsWindowId, 0x11);
xPos = GetStringCenterAlignXOffset(1, gText_BlenderMaxSpeedRecord, 0x90);
- PrintTextOnWindow(gResultsWindowId, 1, gText_BlenderMaxSpeedRecord, xPos, 1, 0, NULL);
- PrintTextOnWindow(gResultsWindowId, 1, gText_234Players, 4, 0x29, 0, NULL);
+ PrintTextOnWindow(gRecordsWindowId, 1, gText_BlenderMaxSpeedRecord, xPos, 1, 0, NULL);
+ PrintTextOnWindow(gRecordsWindowId, 1, gText_234Players, 4, 0x29, 0, NULL);
for (i = 0, yPos = 0x29; i < BLENDER_SCORES_NO; i++)
{
@@ -3503,11 +3505,11 @@ void ShowBerryBlenderRecordWindow(void)
txtPtr = StringAppend(txtPtr, sText_RPM);
xPos = GetStringRightAlignXOffset(1, text, 0x8C);
- PrintTextOnWindow(gResultsWindowId, 1, text, xPos, yPos + (i * 16), 0, NULL);
+ PrintTextOnWindow(gRecordsWindowId, 1, text, xPos, yPos + (i * 16), 0, NULL);
}
- PutWindowTilemap(gResultsWindowId);
- CopyWindowToVram(gResultsWindowId, 3);
+ PutWindowTilemap(gRecordsWindowId);
+ CopyWindowToVram(gRecordsWindowId, 3);
}
static void sub_8083F3C(u8 taskId)
diff --git a/src/berry_tag_screen.c b/src/berry_tag_screen.c
index f86f350bf..9a6e78c81 100644
--- a/src/berry_tag_screen.c
+++ b/src/berry_tag_screen.c
@@ -515,9 +515,9 @@ static void Task_HandleInput(u8 taskId)
static void TryChangeDisplayedBerry(u8 taskId, s8 toMove)
{
s16 *data = gTasks[taskId].data;
- s16 currPocketPosition = gUnknown_0203CE58.unk12[3] + gUnknown_0203CE58.unk8[3];
+ s16 currPocketPosition = gUnknown_0203CE58.scrollPosition[3] + gUnknown_0203CE58.cursorPosition[3];
u32 newPocketPosition = currPocketPosition + toMove;
- if (newPocketPosition < 46 && BagGetItemIdByPocketPosition(BAG_BERRIES, newPocketPosition) != 0)
+ if (newPocketPosition < 46 && BagGetItemIdByPocketPosition(POCKET_BERRIES, newPocketPosition) != 0)
{
if (toMove < 0)
data[1] = 2;
@@ -533,11 +533,11 @@ static void TryChangeDisplayedBerry(u8 taskId, s8 toMove)
static void HandleBagCursorPositionChange(s8 toMove)
{
- u16 *scrollPos = &gUnknown_0203CE58.unk12[3];
- u16 *cursorPos = &gUnknown_0203CE58.unk8[3];
+ u16 *scrollPos = &gUnknown_0203CE58.scrollPosition[3];
+ u16 *cursorPos = &gUnknown_0203CE58.cursorPosition[3];
if (toMove > 0)
{
- if (*cursorPos < 4 || BagGetItemIdByPocketPosition(BAG_BERRIES, *scrollPos + 8) == 0)
+ if (*cursorPos < 4 || BagGetItemIdByPocketPosition(POCKET_BERRIES, *scrollPos + 8) == 0)
*cursorPos += toMove;
else
*scrollPos += toMove;
@@ -550,7 +550,7 @@ static void HandleBagCursorPositionChange(s8 toMove)
*scrollPos += toMove;
}
- sBerryTag->berryId = ItemIdToBerryType(BagGetItemIdByPocketPosition(BAG_BERRIES, *scrollPos + *cursorPos));
+ sBerryTag->berryId = ItemIdToBerryType(BagGetItemIdByPocketPosition(POCKET_BERRIES, *scrollPos + *cursorPos));
}
static void Task_DisplayAnotherBerry(u8 taskId)
diff --git a/src/bg.c b/src/bg.c
index b699a0b1f..2f4cdc856 100644
--- a/src/bg.c
+++ b/src/bg.c
@@ -463,7 +463,7 @@ bool8 IsDma3ManagerBusyWithBgCopy(void)
return FALSE;
}
#else
-__attribute__((naked))
+NAKED
bool8 IsDma3ManagerBusyWithBgCopy(void)
{
asm("push {r4-r7,lr}\n\
@@ -965,9 +965,9 @@ void CopyBgTilemapBufferToVram(u8 bg)
}
}
-void CopyToBgTilemapBufferRect(u8 bg, void* src, u8 destX, u8 destY, u8 width, u8 height)
+void CopyToBgTilemapBufferRect(u8 bg, const void* src, u8 destX, u8 destY, u8 width, u8 height)
{
- void* srcCopy;
+ const void* srcCopy;
u16 destX16;
u16 destY16;
u16 mode;
@@ -1048,7 +1048,7 @@ void CopyRectToBgTilemapBufferRect(u8 bg, const void* src, u8 srcX, u8 srcY, u8
}
}
}*/
-__attribute__((naked))
+NAKED
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))
+NAKED
void CopyTileMapEntry(u16 *src, u16 *dest, s32 palette1, u32 tileOffset, u32 palette2)
{
asm("push {r4-r6,lr}\n\
diff --git a/src/bike.c b/src/bike.c
index 64af7c711..e827707cd 100644
--- a/src/bike.c
+++ b/src/bike.c
@@ -12,9 +12,7 @@
extern bool8 gBikeCyclingChallenge;
extern u8 gBikeCollisions;
-extern bool8 gUnknown_02037348;
-extern u8 sub_8093514(u8 direction);
extern u8 sub_808B980(u8 direction);
extern u8 sub_808B9BC(u8 direction);
extern u8 sub_808B9A4(u8 direction);
@@ -989,7 +987,7 @@ bool8 player_should_look_direction_be_enforced_upon_movement(void)
void GetOnOffBike(u8 transitionFlags)
{
- gUnknown_02037348 = FALSE;
+ gUnusedBikeCameraAheadPanback = FALSE;
if (gPlayerAvatar.flags & (PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE))
{
diff --git a/src/birch_pc.c b/src/birch_pc.c
new file mode 100644
index 000000000..3148832be
--- /dev/null
+++ b/src/birch_pc.c
@@ -0,0 +1,89 @@
+#include "global.h"
+#include "event_data.h"
+#include "field_message_box.h"
+#include "pokedex.h"
+#include "constants/species.h"
+#include "strings.h"
+
+bool16 ScriptGetPokedexInfo(void)
+{
+ if (gSpecialVar_0x8004 == 0) // is national dex not present?
+ {
+ gSpecialVar_0x8005 = GetHoennPokedexCount(0);
+ gSpecialVar_0x8006 = GetHoennPokedexCount(1);
+ }
+ else
+ {
+ gSpecialVar_0x8005 = GetNationalPokedexCount(0);
+ gSpecialVar_0x8006 = GetNationalPokedexCount(1);
+ }
+
+ return IsNationalPokedexEnabled();
+}
+
+// This shows your Hoenn Pokedex rating and not your National Dex.
+const u8 *GetPokedexRatingText(u16 count)
+{
+ if (count < 10)
+ return gBirchDexRatingText_LessThan10;
+ if (count < 20)
+ return gBirchDexRatingText_LessThan20;
+ if (count < 30)
+ return gBirchDexRatingText_LessThan30;
+ if (count < 40)
+ return gBirchDexRatingText_LessThan40;
+ if (count < 50)
+ return gBirchDexRatingText_LessThan50;
+ if (count < 60)
+ return gBirchDexRatingText_LessThan60;
+ if (count < 70)
+ return gBirchDexRatingText_LessThan70;
+ if (count < 80)
+ return gBirchDexRatingText_LessThan80;
+ if (count < 90)
+ return gBirchDexRatingText_LessThan90;
+ if (count < 100)
+ return gBirchDexRatingText_LessThan100;
+ if (count < 110)
+ return gBirchDexRatingText_LessThan110;
+ if (count < 120)
+ return gBirchDexRatingText_LessThan120;
+ if (count < 130)
+ return gBirchDexRatingText_LessThan130;
+ if (count < 140)
+ return gBirchDexRatingText_LessThan140;
+ if (count < 150)
+ return gBirchDexRatingText_LessThan150;
+ if (count < 160)
+ return gBirchDexRatingText_LessThan160;
+ if (count < 170)
+ return gBirchDexRatingText_LessThan170;
+ if (count < 180)
+ return gBirchDexRatingText_LessThan180;
+ if (count < 190)
+ return gBirchDexRatingText_LessThan190;
+ if (count < 200)
+ return gBirchDexRatingText_LessThan200;
+ if (count == 200)
+ {
+ if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(SPECIES_JIRACHI), 1)
+ || GetSetPokedexFlag(SpeciesToNationalPokedexNum(SPECIES_DEOXYS), 1)) // Jirachi or Deoxys is not counted towards the dex completion. If either of these flags are enabled, it means the actual count is less than 200.
+ return gBirchDexRatingText_LessThan200;
+ return gBirchDexRatingText_DexCompleted;
+ }
+ if (count == 201)
+ {
+ if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(SPECIES_JIRACHI), 1)
+ && GetSetPokedexFlag(SpeciesToNationalPokedexNum(SPECIES_DEOXYS), 1)) // If both of these flags are enabled, it means the actual count is less than 200.
+ return gBirchDexRatingText_LessThan200;
+ return gBirchDexRatingText_DexCompleted;
+ }
+ if (count == 202)
+ return gBirchDexRatingText_DexCompleted; // Hoenn dex is considered complete, even though the hoenn dex count is 210.
+ return gBirchDexRatingText_LessThan10;
+}
+
+void ShowPokedexRatingMessage(void)
+{
+ ShowFieldMessage(GetPokedexRatingText(gSpecialVar_0x8004));
+}
diff --git a/src/blit.c b/src/blit.c
new file mode 100644
index 000000000..b4d5f7de5
--- /dev/null
+++ b/src/blit.c
@@ -0,0 +1,209 @@
+#include "global.h"
+#include "blit.h"
+
+void BlitBitmapRect4BitWithoutColorKey(struct Bitmap *src, struct Bitmap *dst, u16 srcX, u16 srcY, u16 dstX, u16 dstY, u16 width, u16 height)
+{
+ BlitBitmapRect4Bit(src, dst, srcX, srcY, dstX, dstY, width, height, 0xFF);
+}
+
+void BlitBitmapRect4Bit(struct Bitmap *src, struct Bitmap *dst, u16 srcX, u16 srcY, u16 dstX, u16 dstY, u16 width, u16 height, u8 colorKey)
+{
+ s32 xEnd;
+ s32 yEnd;
+ s32 multiplierSrcY;
+ s32 multiplierDstY;
+ s32 loopSrcY, loopDstY;
+ s32 loopSrcX, loopDstX;
+ u8 *pixelsSrc;
+ u8 *pixelsDst;
+ s32 toOrr;
+ s32 toAnd;
+ s32 toShift;
+
+ if (dst->width - dstX < width)
+ xEnd = (dst->width - dstX) + srcX;
+ else
+ xEnd = srcX + width;
+
+ if (dst->height - dstY < height)
+ yEnd = (dst->height - dstY) + srcY;
+ else
+ yEnd = height + srcY;
+
+ multiplierSrcY = (src->width + (src->width & 7)) >> 3;
+ multiplierDstY = (dst->width + (dst->width & 7)) >> 3;
+
+ if (colorKey == 0xFF)
+ {
+ for (loopSrcY = srcY, loopDstY = dstY; loopSrcY < yEnd; loopSrcY++, loopDstY++)
+ {
+ for (loopSrcX = srcX, loopDstX = dstX; loopSrcX < xEnd; loopSrcX++, loopDstX++)
+ {
+ pixelsSrc = src->pixels + ((loopSrcX >> 1) & 3) + ((loopSrcX >> 3) << 5) + (((loopSrcY >> 3) * multiplierSrcY) << 5) + ((u32)(loopSrcY << 0x1d) >> 0x1B);
+ pixelsDst = dst->pixels + ((loopDstX >> 1) & 3) + ((loopDstX >> 3) << 5) + (((loopDstY >> 3) * multiplierDstY) << 5) + ((u32)(loopDstY << 0x1d) >> 0x1B);
+ toOrr = ((*pixelsSrc >> ((loopSrcX & 1) << 2)) & 0xF);
+ toShift = ((loopDstX & 1) << 2);
+ toOrr <<= toShift;
+ toAnd = 0xF0 >> (toShift);
+ *pixelsDst = toOrr | (*pixelsDst & toAnd);
+ }
+ }
+ }
+ else
+ {
+ for (loopSrcY = srcY, loopDstY = dstY; loopSrcY < yEnd; loopSrcY++, loopDstY++)
+ {
+ for (loopSrcX = srcX, loopDstX = dstX; loopSrcX < xEnd; loopSrcX++, loopDstX++)
+ {
+ pixelsSrc = src->pixels + ((loopSrcX >> 1) & 3) + ((loopSrcX >> 3) << 5) + (((loopSrcY >> 3) * multiplierSrcY) << 5) + ((u32)(loopSrcY << 0x1d) >> 0x1B);
+ pixelsDst = dst->pixels + ((loopDstX >> 1) & 3) + ((loopDstX >> 3) << 5) + (((loopDstY >> 3) * multiplierDstY) << 5) + ((u32)(loopDstY << 0x1d) >> 0x1B);
+ toOrr = ((*pixelsSrc >> ((loopSrcX & 1) << 2)) & 0xF);
+ if (toOrr != colorKey)
+ {
+ toShift = ((loopDstX & 1) << 2);
+ toOrr <<= toShift;
+ toAnd = 0xF0 >> (toShift);
+ *pixelsDst = toOrr | (*pixelsDst & toAnd);
+ }
+ }
+ }
+ }
+}
+
+void FillBitmapRect4Bit(struct Bitmap *surface, u16 x, u16 y, u16 width, u16 height, u8 fillValue)
+{
+ s32 xEnd;
+ s32 yEnd;
+ s32 multiplierY;
+ s32 loopX, loopY;
+ s32 toOrr1, toOrr2;
+
+ xEnd = x + width;
+ if (xEnd > surface->width)
+ xEnd = surface->width;
+
+ yEnd = y + height;
+ if (yEnd > surface->height)
+ yEnd = surface->height;
+
+ multiplierY = (surface->width + (surface->width & 7)) >> 3;
+ toOrr1 = (u32)(fillValue << 0x1C) >> 0x18;
+ toOrr2 = (fillValue & 0xF);
+
+ for (loopY = y; loopY < yEnd; loopY++)
+ {
+ for (loopX = x; loopX < xEnd; loopX++)
+ {
+ u8 *pixels = surface->pixels + ((loopX >> 1) & 3) + ((loopX >> 3) << 5) + (((loopY >> 3) * multiplierY) << 5) + ((u32)(loopY << 0x1d) >> 0x1B);
+ if ((loopX << 0x1F) != 0)
+ *pixels = toOrr1 | (*pixels & 0xF);
+ else
+ *pixels = toOrr2 | (*pixels & 0xF0);
+ }
+ }
+}
+
+void BlitBitmapRect4BitTo8Bit(struct Bitmap *src, struct Bitmap *dst, u16 srcX, u16 srcY, u16 dstX, u16 dstY, u16 width, u16 height, u8 colorKey, u8 paletteOffset)
+{
+ s32 palOffsetBits;
+ s32 xEnd;
+ s32 yEnd;
+ s32 multiplierSrcY;
+ s32 multiplierDstY;
+ s32 loopSrcY, loopDstY;
+ s32 loopSrcX, loopDstX;
+ u8 *pixelsSrc;
+ u8 *pixelsDst;
+ s32 colorKeyBits;
+
+ palOffsetBits = (u32)(paletteOffset << 0x1C) >> 0x18;
+ colorKeyBits = (u32)(colorKey << 0x1C) >> 0x18;
+
+ if (dst->width - dstX < width)
+ xEnd = (dst->width - dstX) + srcX;
+ else
+ xEnd = width + srcX;
+
+ if (dst->height - dstY < height)
+ yEnd = (srcY + dst->height) - dstY;
+ else
+ yEnd = srcY + height;
+
+ multiplierSrcY = (src->width + (src->width & 7)) >> 3;
+ multiplierDstY = (dst->width + (dst->width & 7)) >> 3;
+
+ if (colorKey == 0xFF)
+ {
+ for (loopSrcY = srcY, loopDstY = dstY; loopSrcY < yEnd; loopSrcY++, loopDstY++)
+ {
+ pixelsSrc = src->pixels + ((srcX >> 1) & 3) + ((srcX >> 3) << 5) + (((loopSrcY >> 3) * multiplierSrcY) << 5) + ((u32)(loopSrcY << 0x1d) >> 0x1b);
+ for (loopSrcX = srcX, loopDstX = dstX; loopSrcX < xEnd; loopSrcX++, loopDstX++)
+ {
+ pixelsDst = dst->pixels + (loopDstX & 7) + ((loopDstX >> 3) << 6) + (((loopDstY >> 3) * multiplierDstY) << 6) + ((u32)(loopDstY << 0x1d) >> 0x1a);
+ if (loopSrcX & 1)
+ {
+ *pixelsDst = palOffsetBits + (*pixelsSrc >> 4);
+ }
+ else
+ {
+ pixelsSrc = src->pixels + ((loopSrcX >> 1) & 3) + ((loopSrcX >> 3) << 5) + (((loopSrcY >> 3) * multiplierSrcY) << 5) + ((u32)(loopSrcY << 0x1d) >> 0x1b);
+ *pixelsDst = palOffsetBits + (*pixelsSrc & 0xF);
+ }
+ }
+ }
+ }
+ else
+ {
+ for (loopSrcY = srcY, loopDstY = dstY; loopSrcY < yEnd; loopSrcY++, loopDstY++)
+ {
+ pixelsSrc = src->pixels + ((srcX >> 1) & 3) + ((srcX >> 3) << 5) + (((loopSrcY >> 3) * multiplierSrcY) << 5) + ((u32)(loopSrcY << 0x1d) >> 0x1b);
+ for (loopSrcX = srcX, loopDstX = dstX; loopSrcX < xEnd; loopSrcX++, loopDstX++)
+ {
+ if (loopSrcX & 1)
+ {
+ if ((*pixelsSrc & 0xF0) != colorKeyBits)
+ {
+ pixelsDst = dst->pixels + (loopDstX & 7) + ((loopDstX >> 3) << 6) + (((loopDstY >> 3) * multiplierDstY) << 6) + ((u32)(loopDstY << 0x1d) >> 0x1a);
+ *pixelsDst = palOffsetBits + (*pixelsSrc >> 4);
+ }
+ }
+ else
+ {
+ pixelsSrc = src->pixels + ((loopSrcX >> 1) & 3) + ((loopSrcX >> 3) << 5) + (((loopSrcY >> 3) * multiplierSrcY) << 5) + ((u32)(loopSrcY << 0x1d) >> 0x1b);
+ if ((*pixelsSrc & 0xF) != colorKey)
+ {
+ pixelsDst = dst->pixels + (loopDstX & 7) + ((loopDstX >> 3) << 6) + (((loopDstY >> 3) * multiplierDstY) << 6) + ((u32)(loopDstY << 0x1d) >> 0x1a);
+ *pixelsDst = palOffsetBits + (*pixelsSrc & 0xF);
+ }
+ }
+ }
+ }
+ }
+}
+
+void FillBitmapRect8Bit(struct Bitmap *surface, u16 x, u16 y, u16 width, u16 height, u8 fillValue)
+{
+ s32 xEnd;
+ s32 yEnd;
+ s32 multiplierY;
+ s32 loopX, loopY;
+
+ xEnd = x + width;
+ if (xEnd > surface->width)
+ xEnd = surface->width;
+
+ yEnd = y + height;
+ if (yEnd > surface->height)
+ yEnd = surface->height;
+
+ multiplierY = (surface->width + (surface->width & 7)) >> 3;
+
+ for (loopY = y; loopY < yEnd; loopY++)
+ {
+ for (loopX = x; loopX < xEnd; loopX++)
+ {
+ u8 *pixels = surface->pixels + (loopX & 7) + ((loopX >> 3) << 6) + (((loopY >> 3) * multiplierY) << 6) + ((u32)(loopY << 0x1d) >> 0x1a);
+ *pixels = fillValue;
+ }
+ }
+}
diff --git a/src/braille_puzzles.c b/src/braille_puzzles.c
index d6924de9f..35277fe87 100644
--- a/src/braille_puzzles.c
+++ b/src/braille_puzzles.c
@@ -25,7 +25,7 @@ enum
};
extern u8 gBraillePuzzleCallbackFlag;
-extern u8 gUnknown_085EFE74[][2];
+extern const u8 gUnknown_085EFE74[][2];
void SealedChamberShakingEffect(u8);
void sub_8179860(void);
@@ -375,37 +375,49 @@ bool8 FldEff_UsePuzzleEffect(void)
return FALSE;
}
-// can't get this one to match due to the weird macro-like varsets with strange bitshifting.
-// to note: 0x10000 is loaded in, and its obviously supposed to be 1, but i cant get 0x80 << 9 to be loaded in without using it directly.
-// maybe there's some way of writing it that works?
-#ifdef NONMATCHING
-// ShouldDoBrailleRegicePuzzle
bool8 ShouldDoBrailleRegicePuzzle(void)
{
u8 i;
- if (gSaveBlock1Ptr->location.mapGroup == 0x18 && gSaveBlock1Ptr->location.mapNum == 0x43)
+ if (gSaveBlock1Ptr->location.mapGroup == 0x18
+ && gSaveBlock1Ptr->location.mapNum == 0x43)
{
- // _08179A1A
if (FlagGet(FLAG_SYS_BRAILLE_WAIT) != FALSE)
return FALSE;
- if (FlagGet(2) == FALSE)
+ if (FlagGet(FLAG_0x002) == FALSE)
return FALSE;
- if (FlagGet(3) == TRUE)
+ if (FlagGet(FLAG_0x003) == TRUE)
return FALSE;
for (i = 0; i < 36; i++)
{
- if (gSaveBlock1Ptr->pos.x == gUnknown_085EFE74[i][0] && gSaveBlock1Ptr->pos.y == gUnknown_085EFE74[i][1])
+ u8 xPos = gUnknown_085EFE74[i][0];
+ u8 yPos = gUnknown_085EFE74[i][1];
+ if (gSaveBlock1Ptr->pos.x == xPos && gSaveBlock1Ptr->pos.y == yPos)
{
+ u16 varValue;
+
if (i < 16)
- VarSet(0x403B, (0x10000 << i | VarGet(0x403B) << 16) >> 16); // correct
+ {
+ u16 val = VarGet(0x403B);
+ val |= 1 << i;
+ VarSet(0x403B, val);
+ }
else if (i < 32)
- VarSet(0x403C, (0x10000 << (i - 16) | VarGet(0x403C) << 16) >> 16); // hmm?
+ {
+ u16 val = VarGet(0x403C);
+ val |= 1 << (i - 16);
+ VarSet(0x403C, val);
+ }
else
- VarSet(0x403D, (0x10000 << (i - 32) | VarGet(0x403D) << 16) >> 16); // hmm?
-
- if (VarGet(0x403B) != 0xFFFF || VarGet(0x403C) != 0xFF || VarGet(0x403D) != 0xF)
+ {
+ u16 val = VarGet(0x403D);
+ val |= 1 << (i - 32);
+ VarSet(0x403D, val);
+ }
+
+ varValue = VarGet(0x403B);
+ if (varValue != 0xFFFF || VarGet(0x403C) != varValue || VarGet(0x403D) != 0xF)
return FALSE;
if (gSaveBlock1Ptr->pos.x == 8 && gSaveBlock1Ptr->pos.y == 21)
@@ -414,170 +426,10 @@ bool8 ShouldDoBrailleRegicePuzzle(void)
return FALSE;
}
}
+
+ FlagSet(FLAG_0x003);
+ FlagClear(FLAG_0x002);
}
- // TODO: Find what flags 2 and 3 are.
- FlagSet(3);
- FlagClear(2);
+
return FALSE;
}
-#else
-__attribute__((naked))
-bool8 ShouldDoBrailleRegicePuzzle(void)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r9\n\
- mov r6, r8\n\
- push {r6,r7}\n\
- ldr r4, =gSaveBlock1Ptr\n\
- ldr r0, [r4]\n\
- ldrh r1, [r0, 0x4]\n\
- ldr r0, =0x00004318\n\
- cmp r1, r0\n\
- beq _08179A1A\n\
- b _08179B5A\n\
-_08179A1A:\n\
- ldr r0, =0x000008b1\n\
- bl FlagGet\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- beq _08179A28\n\
- b _08179B5A\n\
-_08179A28:\n\
- movs r0, 0x2\n\
- bl FlagGet\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- bne _08179A36\n\
- b _08179B5A\n\
-_08179A36:\n\
- movs r0, 0x3\n\
- bl FlagGet\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- cmp r0, 0x1\n\
- bne _08179A58\n\
- b _08179B5A\n\
- .pool\n\
-_08179A54:\n\
- movs r0, 0x1\n\
- b _08179B5C\n\
-_08179A58:\n\
- movs r5, 0\n\
- mov r8, r4\n\
- ldr r4, =gUnknown_085EFE74\n\
- adds r0, r4, 0x1\n\
- mov r12, r0\n\
- ldr r6, =0x0000403b\n\
- ldr r1, =0x0000403c\n\
- mov r9, r1\n\
-_08179A68:\n\
- lsls r0, r5, 1\n\
- adds r1, r0, r4\n\
- add r0, r12\n\
- ldrb r3, [r0]\n\
- mov r7, r8\n\
- ldr r2, [r7]\n\
- movs r7, 0\n\
- ldrsh r0, [r2, r7]\n\
- ldrb r1, [r1]\n\
- cmp r0, r1\n\
- bne _08179B44\n\
- movs r1, 0x2\n\
- ldrsh r0, [r2, r1]\n\
- cmp r0, r3\n\
- bne _08179B44\n\
- cmp r5, 0xF\n\
- bhi _08179AB0\n\
- adds r0, r6, 0\n\
- bl VarGet\n\
- lsls r0, 16\n\
- movs r1, 0x80\n\
- lsls r1, 9\n\
- lsls r1, r5\n\
- orrs r1, r0\n\
- lsrs r1, 16\n\
- adds r0, r6, 0\n\
- bl VarSet\n\
- b _08179AF0\n\
- .pool\n\
-_08179AB0:\n\
- cmp r5, 0x1F\n\
- bhi _08179AD2\n\
- mov r0, r9\n\
- bl VarGet\n\
- lsls r0, 16\n\
- adds r2, r5, 0\n\
- subs r2, 0x10\n\
- movs r1, 0x80\n\
- lsls r1, 9\n\
- lsls r1, r2\n\
- orrs r1, r0\n\
- lsrs r1, 16\n\
- mov r0, r9\n\
- bl VarSet\n\
- b _08179AF0\n\
-_08179AD2:\n\
- ldr r4, =0x0000403d\n\
- adds r0, r4, 0\n\
- bl VarGet\n\
- lsls r0, 16\n\
- adds r2, r5, 0\n\
- subs r2, 0x20\n\
- movs r1, 0x80\n\
- lsls r1, 9\n\
- lsls r1, r2\n\
- orrs r1, r0\n\
- lsrs r1, 16\n\
- adds r0, r4, 0\n\
- bl VarSet\n\
-_08179AF0:\n\
- ldr r0, =0x0000403b\n\
- bl VarGet\n\
- lsls r0, 16\n\
- lsrs r4, r0, 16\n\
- ldr r0, =0x0000ffff\n\
- cmp r4, r0\n\
- bne _08179B5A\n\
- ldr r0, =0x0000403c\n\
- bl VarGet\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- cmp r0, r4\n\
- bne _08179B5A\n\
- ldr r0, =0x0000403d\n\
- bl VarGet\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- cmp r0, 0xF\n\
- bne _08179B5A\n\
- ldr r0, =gSaveBlock1Ptr\n\
- ldr r0, [r0]\n\
- ldr r1, [r0]\n\
- ldr r0, =0x00150008\n\
- cmp r1, r0\n\
- beq _08179A54\n\
- b _08179B5A\n\
- .pool\n\
-_08179B44:\n\
- adds r0, r5, 0x1\n\
- lsls r0, 24\n\
- lsrs r5, r0, 24\n\
- cmp r5, 0x23\n\
- bls _08179A68\n\
- movs r0, 0x3\n\
- bl FlagSet\n\
- movs r0, 0x2\n\
- bl FlagClear\n\
-_08179B5A:\n\
- movs r0, 0\n\
-_08179B5C:\n\
- pop {r3,r4}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- pop {r4-r7}\n\
- pop {r1}\n\
- bx r1\n\
- .syntax divided");
-}
-#endif
diff --git a/src/calculate_base_damage.c b/src/calculate_base_damage.c
deleted file mode 100644
index 98468caa2..000000000
--- a/src/calculate_base_damage.c
+++ /dev/null
@@ -1,275 +0,0 @@
-#include "global.h"
-#include "constants/abilities.h"
-#include "battle.h"
-#include "battle_setup.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"
-
-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 (IS_MOVE_PHYSICAL(type))
- {
- 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 (IS_MOVE_SPECIAL(type))
- {
- 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;
-}
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/clock.c b/src/clock.c
index 7cea30166..71c433ed2 100644
--- a/src/clock.c
+++ b/src/clock.c
@@ -83,7 +83,7 @@ static void UpdatePerMinute(struct Time *localTime)
static void ReturnFromStartWallClock(void)
{
InitTimeBasedEvents();
- SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music);
+ SetMainCallback2(CB2_ReturnToFieldContinueScript);
}
void StartWallClock(void)
diff --git a/src/credits.c b/src/credits.c
new file mode 100644
index 000000000..168f3e8a3
--- /dev/null
+++ b/src/credits.c
@@ -0,0 +1,2355 @@
+#include "global.h"
+#include "palette.h"
+#include "main.h"
+#include "task.h"
+#include "bg.h"
+#include "malloc.h"
+#include "window.h"
+#include "text.h"
+#include "menu.h"
+#include "international_string_util.h"
+#include "constants/songs.h"
+#include "gpu_regs.h"
+#include "m4a.h"
+#include "constants/rgb.h"
+#include "battle_dome_cards.h"
+#include "starter_choose.h"
+#include "decompress.h"
+#include "intro_credits_graphics.h"
+#include "sound.h"
+#include "trig.h"
+#include "graphics.h"
+#include "pokedex.h"
+#include "constants/vars.h"
+#include "event_data.h"
+#include "random.h"
+
+enum
+{
+ PAGE_TITLE,
+ PAGE_DIRECTOR,
+ PAGE_ART_DIRECTOR,
+ PAGE_WORLD_DIRECTOR,
+ PAGE_LEAD_PROGRAMMER,
+ PAGE_PROGRAMMERS_1,
+ PAGE_PROGRAMMERS_2,
+ PAGE_PROGRAMMERS_3,
+ PAGE_PROGRAMMERS_4,
+ PAGE_GRAPHIC_DESIGNERS_1,
+ PAGE_GRAPHIC_DESIGNERS_2,
+ PAGE_GRAPHIC_DESIGNERS_3,
+ PAGE_MUSIC_COMPOSITION,
+ PAGE_SOUND_EFFECTS,
+ PAGE_GAME_DESIGNERS_1,
+ PAGE_GAME_DESIGNERS_2,
+ PAGE_GAME_DESIGNERS_3,
+ PAGE_SCENARIO_PLOT,
+ PAGE_SCENARIO,
+ PAGE_SCRIPT_DESIGNERS,
+ PAGE_MAP_DESIGNERS,
+ PAGE_BATTLE_FRONTIER_DATA,
+ PAGE_PARAMETRIC_DESIGNERS,
+ PAGE_POKEDEX_TEXT,
+ PAGE_ENVIRONMENT_AND_TOOL_PROGRAMS_1,
+ PAGE_PKMN_DESIGNERS_1,
+ PAGE_PKMN_DESIGNERS_2,
+ PAGE_PKMN_DESIGNERS_3,
+ PAGE_PKMN_DESIGNERS_4,
+ PAGE_SUPPORT_PROGRAMMERS,
+ PAGE_NCL_PRODUCT_TESTING,
+ PAGE_PACKAGE_AND_MANUAL,
+ PAGE_SPECIAL_THANKS_1,
+ PAGE_SPECIAL_THANKS_2,
+ PAGE_SPECIAL_THANKS_3,
+ PAGE_SPECIAL_THANKS_4,
+ PAGE_INFORMATION_SUPERVISORS,
+ PAGE_ARTWORK_1,
+ PAGE_ARTWORK_2,
+ PAGE_ARTWORK_3,
+ PAGE_COORDINATORS,
+ PAGE_ENGLISH_VERSION,
+ PAGE_TRANSLATOR,
+ PAGE_TEXT_EDITOR,
+ PAGE_NCL_COORDINATOR,
+ PAGE_PROGRAMMERS_5,
+ PAGE_GRAPHIC_DESIGNER,
+ PAGE_ENVIRONMENT_AND_TOOL_PROGRAMS_2,
+ PAGE_NOA_TESTING,
+ PAGE_BRAILLE_CODE_CHECK_1,
+ PAGE_BRAILLE_CODE_CHECK_2,
+ PAGE_SPECIAL_THANKS_5,
+ PAGE_TASK_MANAGERS,
+ PAGE_PRODUCERS,
+ PAGE_EXECUTIVE_DIRECTOR,
+ PAGE_EXECUTIVE_PRODUCERS_1,
+ PAGE_EXECUTIVE_PRODUCERS_2,
+ PAGE_COUNT
+};
+
+#define COLOR_DARK_GREEN RGB(7, 11, 6)
+#define COLOR_LIGHT_GREEN RGB(13, 20, 12)
+
+enum
+{
+ TDA_0 = 0,
+ TDA_TASK_C_ID = 1,
+ TDA_TASK_E_ID = 2,
+ TDA_TASK_D_ID = 3,
+ TDA_4 = 4,
+ TDA_PLAYER_CYCLIST = 5,
+ TDA_RIVAL_CYCLIST = 6,
+ TDA_7 = 7, // Has something to do with the bike scene
+ TDA_11 = 11, // Gets set depending on whether the bike or the grass scene should be shown
+ TDA_12 = 12,
+ TDA_13 = 13,
+ TDA_14 = 14,
+ TDA_TASK_B_ID = 15,
+
+ // Appears to be responsible for text
+ TDB_0 = 0,
+ TDB_TASK_A_ID = 1,
+ TDB_CURRENT_PAGE = 2,
+ TDB_3 = 3,
+
+ TDC_0 = 0,
+ TDC_1 = 1,
+ TDC_2 = 2,
+ TDC_3 = 3,
+ TDC_4 = 4,
+ TDC_5 = 5,
+
+ TDD_STATE = 0,
+ TDD_TASK_A_ID = 1,
+ TDD_2 = 2,
+ TDD_3 = 3,
+
+ TDE_0 = 0,
+ TDE_1 = 1,
+ TDE_TASK_A_ID = 2,
+};
+
+struct Unk201C000
+{
+ u16 unk0[71];
+ u16 unk8E;
+ u16 unk90;
+ u16 unk92;
+ u16 unk94;
+ u16 unk96[386];
+ u16 unk39A;
+ u16 unk39C[7];
+};
+
+struct CreditsEntry
+{
+ u8 var_0;
+ u8 var_1;
+ const u8 *text;
+};
+
+static EWRAM_DATA s16 gUnknown_0203BCE0 = 0;
+static EWRAM_DATA u16 gUnknown_0203BCE2 = 0; // TASK A
+EWRAM_DATA bool8 gHasHallOfFameRecords = 0;
+static EWRAM_DATA u8 gUnknown_0203BCE5 = 0;
+static EWRAM_DATA struct Unk201C000 *gUnknown_0203BCE8 = {0};
+
+static const u16 gUnknown_085E56F0[][16] =
+{
+ INCBIN_U16("graphics/credits/credits_1.gbapal"),
+ INCBIN_U16("graphics/credits/credits_2.gbapal"),
+ INCBIN_U16("graphics/credits/credits_3.gbapal"),
+ INCBIN_U16("graphics/credits/credits_4.gbapal"),
+};
+
+static const u8 gCreditsCopyrightEnd_Gfx[] = INCBIN_U8("graphics/credits/the_end_copyright.4bpp.lz");
+
+static void sub_81772B8(struct Sprite *sprite);
+
+static const u8 gUnknown_085E5BAC[] =
+{
+ 0, 1, 0,
+ 0xFF, 1, 0xFF,
+ 0xFF, 1, 0xFF,
+ 0xFF, 1, 0xFF,
+ 0xFF, 1, 0xFF,
+};
+
+static const u8 gUnknown_085E5BBB[] =
+{
+ 1, 0xFF, 1,
+ 1, 0xFF, 1,
+ 1, 2, 1,
+ 1, 0xFF, 1,
+ 1, 0xFF, 1,
+};
+
+static const u8 gUnknown_085E5BCA[] =
+{
+ 1, 0, 0,
+ 1, 0xFF, 0xFF,
+ 1, 2, 2,
+ 1, 0xFF, 0xFF,
+ 1, 0x80, 0x80,
+};
+
+static const u8 gUnknown_085E5BD9[] =
+{
+ 1, 3, 1,
+ 1, 4, 1,
+ 1, 5, 1,
+ 1, 0xC4, 1,
+ 1, 0xC3, 1,
+};
+
+static const u8 gUnknown_085E5BE8[] =
+{
+ 1, 6, 7,
+ 1, 8, 9,
+ 1, 0xFF, 1,
+ 1, 0x88, 0x89,
+ 1, 0x86, 0x87,
+};
+
+static const u8 gCreditsText_EmptyString[] = _("");
+static const u8 gCreditsText_PkmnEmeraldVersion[] = _("POKéMON EMERALD VERSION");
+static const u8 gCreditsText_Credits[] = _("Credits");
+static const u8 gCreditsText_ExecutiveDirector[] = _("Executive Director");
+static const u8 gCreditsText_Director[] = _("Director");
+static const u8 gCreditsText_ArtDirector[] = _("Art Director");
+static const u8 gCreditsText_BattleDirector[] = _("Battle Director");
+static const u8 gCreditsText_MainProgrammer[] = _("Main Programmer");
+static const u8 gCreditsText_BattleSystemPgrms[] = _("Battle System Programmers");
+static const u8 gCreditsText_FieldSystemPgrms[] = _("Field System Programmer");
+static const u8 gCreditsText_Programmers[] = _("Programmers");
+static const u8 gCreditsText_MainGraphicDesigner[] = _("Main Graphic Designer");
+static const u8 gCreditsText_GraphicDesigners[] = _("Graphic Designers");
+static const u8 gCreditsText_PkmnDesigners[] = _("POKéMON Designers");
+static const u8 gCreditsText_MusicComposition[] = _("Music Composition");
+static const u8 gCreditsText_SoundEffectsAndPkmnVoices[] = _("Sound Effects & POKéMON Voices");
+static const u8 gCreditsText_GameDesigners[] = _("Game Designers");
+static const u8 gCreditsText_ScenarioPlot[] = _("Scenario Plot");
+static const u8 gCreditsText_Scenario[] = _("Scenario");
+static const u8 gCreditsText_ScriptDesigners[] = _("Script Designers");
+static const u8 gCreditsText_MapDesigners[] = _("Map Designers");
+static const u8 gCreditsText_MapDataDesigners[] = _("Map Data Designers");
+static const u8 gCreditsText_ParametricDesigners[] = _("Parametric Designers");
+static const u8 gCreditsText_PokedexText[] = _("POKéDEX Text");
+static const u8 gCreditsText_EnvAndToolPgrms[] = _("Environment & Tool Programmers");
+static const u8 gCreditsText_NCLProductTesting[] = _("NCL Product Testing");
+static const u8 gCreditsText_SpecialThanks[] = _("Special Thanks");
+static const u8 gCreditsText_Coordinators[] = _("Coordinators");
+static const u8 gCreditsText_Producers[] = _("Producers");
+static const u8 gCreditsText_ExecProducers[] = _("Executive Producers");
+static const u8 gCreditsText_InfoSupervisors[] = _("Information Supervisors");
+static const u8 gCreditsText_TaskManagers[] = _("Task Managers");
+static const u8 gCreditsText_BrailleCodeCheck[] = _("Braille Code Check");
+static const u8 gCreditsText_WorldDirector[] = _("World Director");
+static const u8 gCreditsText_BattleFrontierData[] = _("Battle Frontier Data");
+static const u8 gCreditsText_SupportProgrammers[] = _("Support Programmers");
+static const u8 gCreditsText_Artwork[] = _("Artwork");
+static const u8 gCreditsText_LeadProgrammer[] = _("Lead Programmer");
+static const u8 gCreditsText_LeadGraphicArtist[] = _("Lead Graphic Artist");
+static const u8 gCreditsText_SatoshiTajiri[] = _("Satoshi Tajiri");
+static const u8 gCreditsText_JunichiMasuda[] = _("Junichi Masuda");
+static const u8 gCreditsText_KenSugimori[] = _("Ken Sugimori");
+static const u8 gCreditsText_ShigekiMorimoto[] = _("Shigeki Morimoto");
+static const u8 gCreditsText_TetsuyaWatanabe[] = _("Tetsuya Watanabe");
+static const u8 gCreditsText_HisashiSogabe[] = _("Hisashi Sogabe");
+static const u8 gCreditsText_SosukeTamada[] = _("Sosuke Tamada");
+static const u8 gCreditsText_AkitoMori[] = _("Akito Mori");
+static const u8 gCreditsText_KeitaKagaya[] = _("Keita Kagaya");
+static const u8 gCreditsText_YoshinoriMatsuda[] = _("Yoshinori Matsuda");
+static const u8 gCreditsText_HiroyukiNakamura[] = _("Hiroyuki Nakamura");
+static const u8 gCreditsText_MasaoTaya[] = _("Masao Taya");
+static const u8 gCreditsText_SatoshiNohara[] = _("Satoshi Nohara");
+static const u8 gCreditsText_TomomichiOhta[] = _("Tomomichi Ohta");
+static const u8 gCreditsText_MiyukiIwasawa[] = _("Miyuki Iwasawa");
+static const u8 gCreditsText_TakenoriOhta[] = _("Takenori Ohta");
+static const u8 gCreditsText_HironobuYoshida[] = _("Hironobu Yoshida");
+static const u8 gCreditsText_MotofumiFujiwara[] = _("Motofumi Fujiwara");
+static const u8 gCreditsText_SatoshiOhta[] = _("Satoshi Ohta");
+static const u8 gCreditsText_AsukaIwashita[] = _("Asuka Iwashita");
+static const u8 gCreditsText_AimiTomita[] = _("Aimi Tomita");
+static const u8 gCreditsText_TakaoUnno[] = _("Takao Unno");
+static const u8 gCreditsText_KanakoEo[] = _("Kanako Eo");
+static const u8 gCreditsText_JunOkutani[] = _("Jun Okutani");
+static const u8 gCreditsText_AtsukoNishida[] = _("Atsuko Nishida");
+static const u8 gCreditsText_MuneoSaito[] = _("Muneo Saito");
+static const u8 gCreditsText_RenaYoshikawa[] = _("Rena Yoshikawa");
+static const u8 gCreditsText_GoIchinose[] = _("Go Ichinose");
+static const u8 gCreditsText_MorikazuAoki[] = _("Morikazu Aoki");
+static const u8 gCreditsText_KojiNishino[] = _("Koji Nishino");
+static const u8 gCreditsText_KenjiMatsushima[] = _("Kenji Matsushima");
+static const u8 gCreditsText_TetsujiOhta[] = _("Tetsuji Ohta");
+static const u8 gCreditsText_HitomiSato[] = _("Hitomi Sato");
+static const u8 gCreditsText_TakeshiKawachimaru[] = _("Takeshi Kawachimaru");
+static const u8 gCreditsText_TeruyukiShimoyamada[] = _("Teruyuki Shimoyamada");
+static const u8 gCreditsText_ShigeruOhmori[] = _("Shigeru Ohmori");
+static const u8 gCreditsText_TadashiTakahashi[] = _("Tadashi Takahashi");
+static const u8 gCreditsText_ToshinobuMatsumiya[] = _("Toshinobu Matsumiya");
+static const u8 gCreditsText_AkihitoTomisawa[] = _("Akihito Tomisawa");
+static const u8 gCreditsText_HirokiEnomoto[] = _("Hiroki Enomoto");
+static const u8 gCreditsText_KazuyukiTerada[] = _("Kazuyuki Terada");
+static const u8 gCreditsText_YuriSakurai[] = _("Yuri Sakurai");
+static const u8 gCreditsText_HiromiSagawa[] = _("Hiromi Sagawa");
+static const u8 gCreditsText_KenjiTominaga[] = _("Kenji Tominaga");
+static const u8 gCreditsText_YoshioTajiri[] = _("Yoshio Tajiri");
+static const u8 gCreditsText_TeikoSasaki[] = _("Teiko Sasaki");
+static const u8 gCreditsText_SachikoHamano[] = _("Sachiko Hamano");
+static const u8 gCreditsText_ChieMatsumiya[] = _("Chie Matsumiya");
+static const u8 gCreditsText_AkikoShinozaki[] = _("Akiko Shinozaki");
+static const u8 gCreditsText_AstukoFujii[] = _("Astuko Fujii");
+static const u8 gCreditsText_NozomuSaito[] = _("Nozomu Saito");
+static const u8 gCreditsText_KenkichiToyama[] = _("Kenkichi Toyama");
+static const u8 gCreditsText_SuguruNakatsui[] = _("Suguru Nakatsui");
+static const u8 gCreditsText_YumiFunasaka[] = _("Yumi Funasaka");
+static const u8 gCreditsText_NaokoYanase[] = _("Naoko Yanase");
+static const u8 gCreditsText_NCLSuperMarioClub[] = _("NCL Super Mario Club");
+static const u8 gCreditsText_AtsushiTada[] = _("Atsushi Tada");
+static const u8 gCreditsText_TakahiroOhnishi[] = _("Takahiro Ohnishi");
+static const u8 gCreditsText_NorihideOkamura[] = _("Norihide Okamura");
+static const u8 gCreditsText_HiroNakamura[] = _("Hiro Nakamura");
+static const u8 gCreditsText_HiroyukiUesugi[] = _("Hiroyuki Uesugi");
+static const u8 gCreditsText_TerukiMurakawa[] = _("Teruki Murakawa");
+static const u8 gCreditsText_AkiraKinashi[] = _("Akira Kinashi");
+static const u8 gCreditsText_MichikoTakizawa[] = _("Michiko Takizawa");
+static const u8 gCreditsText_MakikoTakada[] = _("Makiko Takada");
+static const u8 gCreditsText_TakanaoKondo[] = _("Takanao Kondo");
+static const u8 gCreditsText_AiMashima[] = _("Ai Mashima");
+static const u8 gCreditsText_GakujiNomoto[] = _("Gakuji Nomoto");
+static const u8 gCreditsText_TakehiroIzushi[] = _("Takehiro Izushi");
+static const u8 gCreditsText_HitoshiYamagami[] = _("Hitoshi Yamagami");
+static const u8 gCreditsText_KyokoWatanabe[] = _("Kyoko Watanabe");
+static const u8 gCreditsText_TakaoNakano[] = _("Takao Nakano");
+static const u8 gCreditsText_HiroyukiJinnai[] = _("Hiroyuki Jinnai");
+static const u8 gCreditsText_HiroakiTsuru[] = _("Hiroaki Tsuru");
+static const u8 gCreditsText_TsunekazIshihara[] = _("Tsunekaz Ishihara");
+static const u8 gCreditsText_SatoruIwata[] = _("Satoru Iwata");
+static const u8 gCreditsText_KazuyaSuyama[] = _("Kazuya Suyama");
+static const u8 gCreditsText_SatoshiMitsuhara[] = _("Satoshi Mitsuhara");
+static const u8 gCreditsText_JapanBrailleLibrary[] = _("Japan Braille Library");
+static const u8 gCreditsText_TomotakaKomura[] = _("Tomotaka Komura");
+static const u8 gCreditsText_MikikoOhhashi[] = _("Mikiko Ohhashi");
+static const u8 gCreditsText_DaisukeHoshino[] = _("Daisuke Hoshino");
+static const u8 gCreditsText_KenjiroIto[] = _("Kenjiro Ito");
+static const u8 gCreditsText_RuiKawaguchi[] = _("Rui Kawaguchi");
+static const u8 gCreditsText_ShunsukeKohori[] = _("Shunsuke Kohori");
+static const u8 gCreditsText_SachikoNakamichi[] = _("Sachiko Nakamichi");
+static const u8 gCreditsText_FujikoNomura[] = _("Fujiko Nomura");
+static const u8 gCreditsText_KazukiYoshihara[] = _("Kazuki Yoshihara");
+static const u8 gCreditsText_RetsujiNomoto[] = _("Retsuji Nomoto");
+static const u8 gCreditsText_AzusaTajima[] = _("Azusa Tajima");
+static const u8 gCreditsText_ShusakuEgami[] = _("Shusaku Egami");
+static const u8 gCreditsText_PackageAndManual[] = _("Package & Manual Illustration");
+static const u8 gCreditsText_EnglishVersion[] = _("English Version Coordinators");
+static const u8 gCreditsText_Translator[] = _("Translator");
+static const u8 gCreditsText_TextEditor[] = _("Text Editor");
+static const u8 gCreditsText_NCLCoordinator[] = _("NCL Coordinator");
+static const u8 gCreditsText_GraphicDesigner[] = _("Graphic Designer");
+static const u8 gCreditsText_NOAProductTesting[] = _("NOA Product Testing");
+static const u8 gCreditsText_HideyukiNakajima[] = _("Hideyuki Nakajima");
+static const u8 gCreditsText_HidenoriSaeki[] = _("Hidenori Saeki");
+static const u8 gCreditsText_YokoWatanabe[] = _("Yoko Watanabe");
+static const u8 gCreditsText_SakaeKimura[] = _("Sakae Kimura");
+static const u8 gCreditsText_ChiakiShinkai[] = _("Chiaki Shinkai");
+static const u8 gCreditsText_SethMcMahill[] = _("Seth McMahill");
+static const u8 gCreditsText_NobOgasawara[] = _("Nob Ogasawara");
+static const u8 gCreditsText_TeresaLillygren[] = _("Teresa Lillygren");
+static const u8 gCreditsText_KimikoNakamichi[] = _("Kimiko Nakamichi");
+static const u8 gCreditsText_SouichiYamamoto[] = _("Souichi Yamamoto");
+static const u8 gCreditsText_YuichiroIto[] = _("Yuichiro Ito");
+static const u8 gCreditsText_ThomasHertzog[] = _("Thomas Hertzog");
+static const u8 gCreditsText_MikaKurosawa[] = _("Mika Kurosawa");
+static const u8 gCreditsText_NationalFederationBlind[] = _("National Federation of the Blind");
+static const u8 gCreditsText_PatriciaAMaurer[] = _("Patricia A. Maurer");
+static const u8 gCreditsText_EuropeanBlindUnion[] = _("European Blind Union");
+static const u8 gCreditsText_AustralianBrailleAuthority[] = _("Australian Braille Authority");
+static const u8 gCreditsText_RoyalNewZealandFederationBlind[] = _("Royal New Zealand Federation for the Blind");
+static const u8 gCreditsText_MotoyasuTojima[] = _("Motoyasu Tojima");
+static const u8 gCreditsText_NicolaPrattBarlow[] = _("Nicola Pratt-Barlow");
+static const u8 gCreditsText_ShellieDow[] = _("Shellie Dow");
+static const u8 gCreditsText_ErikJohnson[] = _("Erik Johnson");
+static const struct CreditsEntry gCreditsEntry_EmptyString[] = {0, 0, gCreditsText_EmptyString};
+static const struct CreditsEntry gCreditsEntry_PkmnEmeraldVersion[] = {7, 1, gCreditsText_PkmnEmeraldVersion};
+static const struct CreditsEntry gCreditsEntry_Credits[] = {11, 1, gCreditsText_Credits};
+static const struct CreditsEntry gCreditsEntry_ExecutiveDirector[] = {8, 1, gCreditsText_ExecutiveDirector};
+static const struct CreditsEntry gCreditsEntry_Director[] = {12, 1, gCreditsText_Director};
+static const struct CreditsEntry gCreditsEntry_ArtDirector[] = {10, 1, gCreditsText_ArtDirector};
+static const struct CreditsEntry gCreditsEntry_BattleDirector[] = {10, 1, gCreditsText_BattleDirector};
+static const struct CreditsEntry gCreditsEntry_MainProgrammer[] = {10, 1, gCreditsText_MainProgrammer};
+static const struct CreditsEntry gCreditsEntry_BattleSystemPgrms[] = {8, 1, gCreditsText_BattleSystemPgrms};
+static const struct CreditsEntry gCreditsEntry_FieldSystemPgrms[] = {7, 1, gCreditsText_FieldSystemPgrms};
+static const struct CreditsEntry gCreditsEntry_Programmers[] = {12, 1, gCreditsText_Programmers};
+static const struct CreditsEntry gCreditsEntry_MainGraphicDesigner[] = {7, 1, gCreditsText_MainGraphicDesigner};
+static const struct CreditsEntry gCreditsEntry_GraphicDesigners[] = {9, 1, gCreditsText_GraphicDesigners};
+static const struct CreditsEntry gCreditsEntry_PkmnDesigners[] = {10, 1, gCreditsText_PkmnDesigners};
+static const struct CreditsEntry gCreditsEntry_MusicComposition[] = {13, 1, gCreditsText_MusicComposition};
+static const struct CreditsEntry gCreditsEntry_SoundEffectsAndPkmnVoices[] = {4, 1, gCreditsText_SoundEffectsAndPkmnVoices};
+static const struct CreditsEntry gCreditsEntry_GameDesigners[] = {11, 1, gCreditsText_GameDesigners};
+static const struct CreditsEntry gCreditsEntry_ScenarioPlot[] = {11, 1, gCreditsText_ScenarioPlot};
+static const struct CreditsEntry gCreditsEntry_Scenario[] = {13, 1, gCreditsText_Scenario};
+static const struct CreditsEntry gCreditsEntry_ScriptDesigners[] = {10, 1, gCreditsText_ScriptDesigners};
+static const struct CreditsEntry gCreditsEntry_MapDesigners[] = {11, 1, gCreditsText_MapDesigners};
+static const struct CreditsEntry gCreditsEntry_MapDataDesigners[] = {9, 1, gCreditsText_MapDataDesigners};
+static const struct CreditsEntry gCreditsEntry_ParametricDesigners[] = {9, 1, gCreditsText_ParametricDesigners};
+static const struct CreditsEntry gCreditsEntry_PokedexText[] = {11, 1, gCreditsText_PokedexText};
+static const struct CreditsEntry gCreditsEntry_EnvAndToolPgrms[] = {6, 1, gCreditsText_EnvAndToolPgrms};
+static const struct CreditsEntry gCreditsEntry_NCLProductTesting[] = {11, 1, gCreditsText_NCLProductTesting};
+static const struct CreditsEntry gCreditsEntry_SpecialThanks[] = {10, 1, gCreditsText_SpecialThanks};
+static const struct CreditsEntry gCreditsEntry_Coordinators[] = {11, 1, gCreditsText_Coordinators};
+static const struct CreditsEntry gCreditsEntry_Producers[] = {11, 1, gCreditsText_Producers};
+static const struct CreditsEntry gCreditsEntry_ExecProducers[] = {7, 1, gCreditsText_ExecProducers};
+static const struct CreditsEntry gCreditsEntry_InfoSupervisors[] = {10, 1, gCreditsText_InfoSupervisors};
+static const struct CreditsEntry gCreditsEntry_TaskManagers[] = {8, 1, gCreditsText_TaskManagers};
+static const struct CreditsEntry gCreditsEntry_BrailleCodeCheck[] = {10, 1, gCreditsText_BrailleCodeCheck};
+static const struct CreditsEntry gCreditsEntry_WorldDirector[] = {10, 1, gCreditsText_WorldDirector};
+static const struct CreditsEntry gCreditsEntry_BattleFrontierData[] = {8, 1, gCreditsText_BattleFrontierData};
+static const struct CreditsEntry gCreditsEntry_SupportProgrammers[] = {10, 1, gCreditsText_SupportProgrammers};
+static const struct CreditsEntry gCreditsEntry_Artwork[] = {12, 1, gCreditsText_Artwork};
+static const struct CreditsEntry gCreditsEntry_LeadProgrammer[] = {10, 1, gCreditsText_LeadProgrammer};
+static const struct CreditsEntry gCreditsEntry_LeadGraphicArtist[] = {9, 1, gCreditsText_LeadGraphicArtist};
+static const struct CreditsEntry gCreditsEntry_SatoshiTajiri[] = {11, 0, gCreditsText_SatoshiTajiri};
+static const struct CreditsEntry gCreditsEntry_JunichiMasuda[] = {11, 0, gCreditsText_JunichiMasuda};
+static const struct CreditsEntry gCreditsEntry_KenSugimori[] = {11, 0, gCreditsText_KenSugimori};
+static const struct CreditsEntry gCreditsEntry_ShigekiMorimoto[] = {11, 0, gCreditsText_ShigekiMorimoto};
+static const struct CreditsEntry gCreditsEntry_TetsuyaWatanabe[] = {11, 0, gCreditsText_TetsuyaWatanabe};
+static const struct CreditsEntry gCreditsEntry_HisashiSogabe[] = {11, 0, gCreditsText_HisashiSogabe};
+static const struct CreditsEntry gCreditsEntry_SosukeTamada[] = {11, 0, gCreditsText_SosukeTamada};
+static const struct CreditsEntry gCreditsEntry_AkitoMori[] = {11, 0, gCreditsText_AkitoMori};
+static const struct CreditsEntry gCreditsEntry_KeitaKagaya[] = {11, 0, gCreditsText_KeitaKagaya};
+static const struct CreditsEntry gCreditsEntry_YoshinoriMatsuda[] = {11, 0, gCreditsText_YoshinoriMatsuda};
+static const struct CreditsEntry gCreditsEntry_HiroyukiNakamura[] = {11, 0, gCreditsText_HiroyukiNakamura};
+static const struct CreditsEntry gCreditsEntry_MasaoTaya[] = {11, 0, gCreditsText_MasaoTaya};
+static const struct CreditsEntry gCreditsEntry_SatoshiNohara[] = {11, 0, gCreditsText_SatoshiNohara};
+static const struct CreditsEntry gCreditsEntry_TomomichiOhta[] = {11, 0, gCreditsText_TomomichiOhta};
+static const struct CreditsEntry gCreditsEntry_MiyukiIwasawa[] = {11, 0, gCreditsText_MiyukiIwasawa};
+static const struct CreditsEntry gCreditsEntry_TakenoriOhta[] = {11, 0, gCreditsText_TakenoriOhta};
+static const struct CreditsEntry gCreditsEntry_HironobuYoshida[] = {11, 0, gCreditsText_HironobuYoshida};
+static const struct CreditsEntry gCreditsEntry_MotofumiFujiwara[] = {11, 0, gCreditsText_MotofumiFujiwara};
+static const struct CreditsEntry gCreditsEntry_SatoshiOhta[] = {11, 0, gCreditsText_SatoshiOhta};
+static const struct CreditsEntry gCreditsEntry_AsukaIwashita[] = {11, 0, gCreditsText_AsukaIwashita};
+static const struct CreditsEntry gCreditsEntry_AimiTomita[] = {11, 0, gCreditsText_AimiTomita};
+static const struct CreditsEntry gCreditsEntry_TakaoUnno[] = {11, 0, gCreditsText_TakaoUnno};
+static const struct CreditsEntry gCreditsEntry_KanakoEo[] = {11, 0, gCreditsText_KanakoEo};
+static const struct CreditsEntry gCreditsEntry_JunOkutani[] = {11, 0, gCreditsText_JunOkutani};
+static const struct CreditsEntry gCreditsEntry_AtsukoNishida[] = {11, 0, gCreditsText_AtsukoNishida};
+static const struct CreditsEntry gCreditsEntry_MuneoSaito[] = {11, 0, gCreditsText_MuneoSaito};
+static const struct CreditsEntry gCreditsEntry_RenaYoshikawa[] = {11, 0, gCreditsText_RenaYoshikawa};
+static const struct CreditsEntry gCreditsEntry_GoIchinose[] = {11, 0, gCreditsText_GoIchinose};
+static const struct CreditsEntry gCreditsEntry_MorikazuAoki[] = {11, 0, gCreditsText_MorikazuAoki};
+static const struct CreditsEntry gCreditsEntry_KojiNishino[] = {11, 0, gCreditsText_KojiNishino};
+static const struct CreditsEntry gCreditsEntry_KenjiMatsushima[] = {11, 0, gCreditsText_KenjiMatsushima};
+static const struct CreditsEntry gCreditsEntry_TetsujiOhta[] = {11, 0, gCreditsText_TetsujiOhta};
+static const struct CreditsEntry gCreditsEntry_HitomiSato[] = {11, 0, gCreditsText_HitomiSato};
+static const struct CreditsEntry gCreditsEntry_TakeshiKawachimaru[] = {11, 0, gCreditsText_TakeshiKawachimaru};
+static const struct CreditsEntry gCreditsEntry_TeruyukiShimoyamada[] = {11, 0, gCreditsText_TeruyukiShimoyamada};
+static const struct CreditsEntry gCreditsEntry_ShigeruOhmori[] = {11, 0, gCreditsText_ShigeruOhmori};
+static const struct CreditsEntry gCreditsEntry_TadashiTakahashi[] = {11, 0, gCreditsText_TadashiTakahashi};
+static const struct CreditsEntry gCreditsEntry_ToshinobuMatsumiya[] = {11, 0, gCreditsText_ToshinobuMatsumiya};
+static const struct CreditsEntry gCreditsEntry_AkihitoTomisawa[] = {11, 0, gCreditsText_AkihitoTomisawa};
+static const struct CreditsEntry gCreditsEntry_HirokiEnomoto[] = {11, 0, gCreditsText_HirokiEnomoto};
+static const struct CreditsEntry gCreditsEntry_KazuyukiTerada[] = {11, 0, gCreditsText_KazuyukiTerada};
+static const struct CreditsEntry gCreditsEntry_YuriSakurai[] = {11, 0, gCreditsText_YuriSakurai};
+static const struct CreditsEntry gCreditsEntry_HiromiSagawa[] = {11, 0, gCreditsText_HiromiSagawa};
+static const struct CreditsEntry gCreditsEntry_KenjiTominaga[] = {11, 0, gCreditsText_KenjiTominaga};
+static const struct CreditsEntry gCreditsEntry_YoshioTajiri[] = {11, 0, gCreditsText_YoshioTajiri};
+static const struct CreditsEntry gCreditsEntry_TeikoSasaki[] = {11, 0, gCreditsText_TeikoSasaki};
+static const struct CreditsEntry gCreditsEntry_SachikoHamano[] = {11, 0, gCreditsText_SachikoHamano};
+static const struct CreditsEntry gCreditsEntry_ChieMatsumiya[] = {11, 0, gCreditsText_ChieMatsumiya};
+static const struct CreditsEntry gCreditsEntry_AkikoShinozaki[] = {11, 0, gCreditsText_AkikoShinozaki};
+static const struct CreditsEntry gCreditsEntry_AstukoFujii[] = {11, 0, gCreditsText_AstukoFujii};
+static const struct CreditsEntry gCreditsEntry_NozomuSaito[] = {11, 0, gCreditsText_NozomuSaito};
+static const struct CreditsEntry gCreditsEntry_KenkichiToyama[] = {11, 0, gCreditsText_KenkichiToyama};
+static const struct CreditsEntry gCreditsEntry_SuguruNakatsui[] = {11, 0, gCreditsText_SuguruNakatsui};
+static const struct CreditsEntry gCreditsEntry_YumiFunasaka[] = {11, 0, gCreditsText_YumiFunasaka};
+static const struct CreditsEntry gCreditsEntry_NaokoYanase[] = {11, 0, gCreditsText_NaokoYanase};
+static const struct CreditsEntry gCreditsEntry_NCLSuperMarioClub[] = {11, 0, gCreditsText_NCLSuperMarioClub};
+static const struct CreditsEntry gCreditsEntry_AtsushiTada[] = {11, 0, gCreditsText_AtsushiTada};
+static const struct CreditsEntry gCreditsEntry_TakahiroOhnishi[] = {11, 0, gCreditsText_TakahiroOhnishi};
+static const struct CreditsEntry gCreditsEntry_NorihideOkamura[] = {11, 0, gCreditsText_NorihideOkamura};
+static const struct CreditsEntry gCreditsEntry_HiroNakamura[] = {11, 0, gCreditsText_HiroNakamura};
+static const struct CreditsEntry gCreditsEntry_HiroyukiUesugi[] = {11, 0, gCreditsText_HiroyukiUesugi};
+static const struct CreditsEntry gCreditsEntry_TerukiMurakawa[] = {11, 0, gCreditsText_TerukiMurakawa};
+static const struct CreditsEntry gCreditsEntry_AkiraKinashi[] = {11, 0, gCreditsText_AkiraKinashi};
+static const struct CreditsEntry gCreditsEntry_MichikoTakizawa[] = {11, 0, gCreditsText_MichikoTakizawa};
+static const struct CreditsEntry gCreditsEntry_MakikoTakada[] = {11, 0, gCreditsText_MakikoTakada};
+static const struct CreditsEntry gCreditsEntry_TakanaoKondo[] = {11, 0, gCreditsText_TakanaoKondo};
+static const struct CreditsEntry gCreditsEntry_AiMashima[] = {11, 0, gCreditsText_AiMashima};
+static const struct CreditsEntry gCreditsEntry_GakujiNomoto[] = {11, 0, gCreditsText_GakujiNomoto};
+static const struct CreditsEntry gCreditsEntry_TakehiroIzushi[] = {11, 0, gCreditsText_TakehiroIzushi};
+static const struct CreditsEntry gCreditsEntry_HitoshiYamagami[] = {11, 0, gCreditsText_HitoshiYamagami};
+static const struct CreditsEntry gCreditsEntry_KyokoWatanabe[] = {11, 0, gCreditsText_KyokoWatanabe};
+static const struct CreditsEntry gCreditsEntry_TakaoNakano[] = {11, 0, gCreditsText_TakaoNakano};
+static const struct CreditsEntry gCreditsEntry_HiroyukiJinnai[] = {11, 0, gCreditsText_HiroyukiJinnai};
+static const struct CreditsEntry gCreditsEntry_HiroakiTsuru[] = {11, 0, gCreditsText_HiroakiTsuru};
+static const struct CreditsEntry gCreditsEntry_TsunekazIshihara[] = {11, 0, gCreditsText_TsunekazIshihara};
+static const struct CreditsEntry gCreditsEntry_SatoruIwata[] = {11, 0, gCreditsText_SatoruIwata};
+static const struct CreditsEntry gCreditsEntry_KazuyaSuyama[] = {11, 0, gCreditsText_KazuyaSuyama};
+static const struct CreditsEntry gCreditsEntry_SatoshiMitsuhara[] = {11, 0, gCreditsText_SatoshiMitsuhara};
+static const struct CreditsEntry gCreditsEntry_JapanBrailleLibrary[] = {9, 0, gCreditsText_JapanBrailleLibrary};
+static const struct CreditsEntry gCreditsEntry_TomotakaKomura[] = {11, 0, gCreditsText_TomotakaKomura};
+static const struct CreditsEntry gCreditsEntry_MikikoOhhashi[] = {11, 0, gCreditsText_MikikoOhhashi};
+static const struct CreditsEntry gCreditsEntry_DaisukeHoshino[] = {11, 0, gCreditsText_DaisukeHoshino};
+static const struct CreditsEntry gCreditsEntry_KenjiroIto[] = {11, 0, gCreditsText_KenjiroIto};
+static const struct CreditsEntry gCreditsEntry_RuiKawaguchi[] = {11, 0, gCreditsText_RuiKawaguchi};
+static const struct CreditsEntry gCreditsEntry_ShunsukeKohori[] = {11, 0, gCreditsText_ShunsukeKohori};
+static const struct CreditsEntry gCreditsEntry_SachikoNakamichi[] = {11, 0, gCreditsText_SachikoNakamichi};
+static const struct CreditsEntry gCreditsEntry_FujikoNomura[] = {11, 0, gCreditsText_FujikoNomura};
+static const struct CreditsEntry gCreditsEntry_KazukiYoshihara[] = {11, 0, gCreditsText_KazukiYoshihara};
+static const struct CreditsEntry gCreditsEntry_RetsujiNomoto[] = {11, 0, gCreditsText_RetsujiNomoto};
+static const struct CreditsEntry gCreditsEntry_AzusaTajima[] = {11, 0, gCreditsText_AzusaTajima};
+static const struct CreditsEntry gCreditsEntry_ShusakuEgami[] = {11, 0, gCreditsText_ShusakuEgami};
+static const struct CreditsEntry gCreditsEntry_PackageAndManual[] = {0, 1, gCreditsText_PackageAndManual};
+static const struct CreditsEntry gCreditsEntry_EnglishVersion[] = {0, 1, gCreditsText_EnglishVersion};
+static const struct CreditsEntry gCreditsEntry_Translator[] = {0, 1, gCreditsText_Translator};
+static const struct CreditsEntry gCreditsEntry_TextEditor[] = {0, 1, gCreditsText_TextEditor};
+static const struct CreditsEntry gCreditsEntry_NCLCoordinator[] = {0, 1, gCreditsText_NCLCoordinator};
+static const struct CreditsEntry gCreditsEntry_GraphicDesigner[] = {0, 1, gCreditsText_GraphicDesigner};
+static const struct CreditsEntry gCreditsEntry_NOAProductTesting[] = {0, 1, gCreditsText_NOAProductTesting};
+static const struct CreditsEntry gCreditsEntry_HideyukiNakajima[] = {0, 0, gCreditsText_HideyukiNakajima};
+static const struct CreditsEntry gCreditsEntry_HidenoriSaeki[] = {0, 0, gCreditsText_HidenoriSaeki};
+static const struct CreditsEntry gCreditsEntry_YokoWatanabe[] = {0, 0, gCreditsText_YokoWatanabe};
+static const struct CreditsEntry gCreditsEntry_SakaeKimura[] = {0, 0, gCreditsText_SakaeKimura};
+static const struct CreditsEntry gCreditsEntry_ChiakiShinkai[] = {0, 0, gCreditsText_ChiakiShinkai};
+static const struct CreditsEntry gCreditsEntry_SethMcMahill[] = {0, 0, gCreditsText_SethMcMahill};
+static const struct CreditsEntry gCreditsEntry_NobOgasawara[] = {0, 0, gCreditsText_NobOgasawara};
+static const struct CreditsEntry gCreditsEntry_TeresaLillygren[] = {0, 0, gCreditsText_TeresaLillygren};
+static const struct CreditsEntry gCreditsEntry_KimikoNakamichi[] = {0, 0, gCreditsText_KimikoNakamichi};
+static const struct CreditsEntry gCreditsEntry_SouichiYamamoto[] = {0, 0, gCreditsText_SouichiYamamoto};
+static const struct CreditsEntry gCreditsEntry_YuichiroIto[] = {0, 0, gCreditsText_YuichiroIto};
+static const struct CreditsEntry gCreditsEntry_ThomasHertzog[] = {0, 0, gCreditsText_ThomasHertzog};
+static const struct CreditsEntry gCreditsEntry_MikaKurosawa[] = {0, 0, gCreditsText_MikaKurosawa};
+static const struct CreditsEntry gCreditsEntry_NationalFederationBlind[] = {0, 0, gCreditsText_NationalFederationBlind};
+static const struct CreditsEntry gCreditsEntry_PatriciaAMaurer[] = {0, 0, gCreditsText_PatriciaAMaurer};
+static const struct CreditsEntry gCreditsEntry_EuropeanBlindUnion[] = {0, 0, gCreditsText_EuropeanBlindUnion};
+static const struct CreditsEntry gCreditsEntry_AustralianBrailleAuthority[] = {0, 0, gCreditsText_AustralianBrailleAuthority};
+static const struct CreditsEntry gCreditsEntry_RoyalNewZealandFederationBlind[] = {0, 0, gCreditsText_RoyalNewZealandFederationBlind};
+static const struct CreditsEntry gCreditsEntry_MotoyasuTojima[] = {0, 0, gCreditsText_MotoyasuTojima};
+static const struct CreditsEntry gCreditsEntry_NicolaPrattBarlow[] = {0, 0, gCreditsText_NicolaPrattBarlow};
+static const struct CreditsEntry gCreditsEntry_ShellieDow[] = {0, 0, gCreditsText_ShellieDow};
+static const struct CreditsEntry gCreditsEntry_ErikJohnson[] = {0, 0, gCreditsText_ErikJohnson};
+
+#define _ gCreditsEntry_EmptyString
+static const struct CreditsEntry *const gCreditsEntryPointerTable[][5] =
+{
+ {
+ _,
+ gCreditsEntry_PkmnEmeraldVersion,
+ gCreditsEntry_Credits,
+ _,
+ _
+ },
+ {
+ _,
+ gCreditsEntry_Director,
+ gCreditsEntry_ShigekiMorimoto,
+ _,
+ _,
+ },
+ {
+ _,
+ gCreditsEntry_ArtDirector,
+ gCreditsEntry_KenSugimori,
+ _,
+ _,
+ },
+ {
+ _,
+ gCreditsEntry_WorldDirector,
+ gCreditsEntry_JunichiMasuda,
+ _,
+ _,
+ },
+ {
+ gCreditsEntry_LeadProgrammer,
+ gCreditsEntry_HisashiSogabe,
+ gCreditsEntry_LeadGraphicArtist,
+ gCreditsEntry_MotofumiFujiwara,
+ _,
+ },
+ {
+ gCreditsEntry_Programmers,
+ gCreditsEntry_HisashiSogabe,
+ gCreditsEntry_TomomichiOhta,
+ gCreditsEntry_NozomuSaito,
+ gCreditsEntry_EmptyString,
+ },
+ {
+ gCreditsEntry_Programmers,
+ gCreditsEntry_AkitoMori,
+ gCreditsEntry_HiroyukiNakamura,
+ gCreditsEntry_MasaoTaya,
+ _,
+ },
+ {
+ gCreditsEntry_Programmers,
+ gCreditsEntry_SatoshiNohara,
+ gCreditsEntry_MiyukiIwasawa,
+ gCreditsEntry_YoshinoriMatsuda,
+ gCreditsEntry_KeitaKagaya,
+ },
+ {
+ gCreditsEntry_Programmers,
+ gCreditsEntry_TetsuyaWatanabe,
+ gCreditsEntry_SosukeTamada,
+ gCreditsEntry_TakenoriOhta,
+ _,
+ },
+ {
+ _,
+ gCreditsEntry_GraphicDesigners,
+ gCreditsEntry_MotofumiFujiwara,
+ gCreditsEntry_SatoshiOhta,
+ _,
+ },
+ {
+ gCreditsEntry_GraphicDesigners,
+ gCreditsEntry_KenkichiToyama,
+ gCreditsEntry_AsukaIwashita,
+ gCreditsEntry_TakaoUnno,
+ _,
+ },
+ {
+ gCreditsEntry_GraphicDesigners,
+ gCreditsEntry_KenSugimori,
+ gCreditsEntry_HironobuYoshida,
+ gCreditsEntry_AimiTomita,
+ gCreditsEntry_KanakoEo,
+ },
+ {
+ gCreditsEntry_MusicComposition,
+ gCreditsEntry_GoIchinose,
+ gCreditsEntry_JunichiMasuda,
+ gCreditsEntry_MorikazuAoki,
+ gCreditsEntry_HitomiSato,
+ },
+ {
+ _,
+ gCreditsEntry_SoundEffectsAndPkmnVoices,
+ gCreditsEntry_GoIchinose,
+ gCreditsEntry_MorikazuAoki,
+ _,
+ },
+ {
+ gCreditsEntry_GameDesigners,
+ gCreditsEntry_ShigekiMorimoto,
+ gCreditsEntry_TeruyukiShimoyamada,
+ gCreditsEntry_TakeshiKawachimaru,
+ gCreditsEntry_AkihitoTomisawa,
+ },
+ {
+ gCreditsEntry_GameDesigners,
+ gCreditsEntry_SuguruNakatsui,
+ gCreditsEntry_TetsujiOhta,
+ gCreditsEntry_HitomiSato,
+ gCreditsEntry_KenjiMatsushima,
+ },
+ {
+ gCreditsEntry_GameDesigners,
+ gCreditsEntry_JunichiMasuda,
+ gCreditsEntry_KojiNishino,
+ gCreditsEntry_ShigeruOhmori,
+ gCreditsEntry_TadashiTakahashi,
+ },
+ {
+ gCreditsEntry_ScenarioPlot,
+ gCreditsEntry_AkihitoTomisawa,
+ gCreditsEntry_JunichiMasuda,
+ gCreditsEntry_KojiNishino,
+ _,
+ },
+ {
+ gCreditsEntry_Scenario,
+ gCreditsEntry_AkihitoTomisawa,
+ gCreditsEntry_HitomiSato,
+ gCreditsEntry_ToshinobuMatsumiya,
+ _,
+ },
+ {
+ gCreditsEntry_ScriptDesigners,
+ gCreditsEntry_TomomichiOhta,
+ gCreditsEntry_SatoshiNohara,
+ _,
+ _,
+ },
+ {
+ gCreditsEntry_MapDesigners,
+ gCreditsEntry_SuguruNakatsui,
+ gCreditsEntry_TeruyukiShimoyamada,
+ gCreditsEntry_ShigeruOhmori,
+ gCreditsEntry_TetsujiOhta,
+ },
+ {
+ _,
+ gCreditsEntry_BattleFrontierData,
+ gCreditsEntry_TetsujiOhta,
+ _,
+ _,
+ },
+ {
+ gCreditsEntry_ParametricDesigners,
+ gCreditsEntry_TeruyukiShimoyamada,
+ gCreditsEntry_ShigekiMorimoto,
+ gCreditsEntry_TetsujiOhta,
+ gCreditsEntry_KojiNishino,
+ },
+ {
+ _,
+ gCreditsEntry_PokedexText,
+ gCreditsEntry_KenjiMatsushima,
+ _,
+ _,
+ },
+ {
+ gCreditsEntry_EnvAndToolPgrms,
+ gCreditsEntry_HisashiSogabe,
+ gCreditsEntry_SosukeTamada,
+ gCreditsEntry_HiroyukiNakamura,
+ gCreditsEntry_AkitoMori,
+ },
+ {
+ gCreditsEntry_PkmnDesigners,
+ gCreditsEntry_KenSugimori,
+ gCreditsEntry_MotofumiFujiwara,
+ gCreditsEntry_ShigekiMorimoto,
+ _,
+ },
+ {
+ gCreditsEntry_PkmnDesigners,
+ gCreditsEntry_HironobuYoshida,
+ gCreditsEntry_SatoshiOhta,
+ gCreditsEntry_AsukaIwashita,
+ _,
+ },
+ {
+ gCreditsEntry_PkmnDesigners,
+ gCreditsEntry_TakaoUnno,
+ gCreditsEntry_KanakoEo,
+ gCreditsEntry_AimiTomita,
+ _,
+ },
+ {
+ gCreditsEntry_PkmnDesigners,
+ gCreditsEntry_AtsukoNishida,
+ gCreditsEntry_MuneoSaito,
+ gCreditsEntry_RenaYoshikawa,
+ gCreditsEntry_JunOkutani,
+ },
+ {
+ _,
+ gCreditsEntry_SupportProgrammers,
+ gCreditsEntry_SatoshiMitsuhara,
+ gCreditsEntry_DaisukeHoshino,
+ _,
+ },
+ {
+ _,
+ gCreditsEntry_NCLProductTesting,
+ gCreditsEntry_NCLSuperMarioClub,
+ _,
+ _,
+ },
+ {
+ _,
+ gCreditsEntry_PackageAndManual,
+ gCreditsEntry_KenSugimori,
+ _,
+ _,
+ },
+ {
+ _,
+ gCreditsEntry_SpecialThanks,
+ gCreditsEntry_KenjiTominaga,
+ gCreditsEntry_HirokiEnomoto,
+ _,
+ },
+ {
+ gCreditsEntry_SpecialThanks,
+ gCreditsEntry_KazuyaSuyama,
+ gCreditsEntry_KenjiroIto,
+ gCreditsEntry_MichikoTakizawa,
+ gCreditsEntry_MakikoTakada,
+ },
+ {
+ gCreditsEntry_SpecialThanks,
+ gCreditsEntry_MikikoOhhashi,
+ gCreditsEntry_TakanaoKondo,
+ gCreditsEntry_RuiKawaguchi,
+ _,
+ },
+ {
+ gCreditsEntry_SpecialThanks,
+ gCreditsEntry_TakahiroOhnishi,
+ gCreditsEntry_NorihideOkamura,
+ gCreditsEntry_ShunsukeKohori,
+ _,
+ },
+ {
+ gCreditsEntry_InfoSupervisors,
+ gCreditsEntry_KazuyukiTerada,
+ gCreditsEntry_YuriSakurai,
+ gCreditsEntry_YumiFunasaka,
+ gCreditsEntry_NaokoYanase,
+ },
+ {
+ _,
+ gCreditsEntry_Artwork,
+ gCreditsEntry_SachikoNakamichi,
+ gCreditsEntry_FujikoNomura,
+ _,
+ },
+ {
+ _,
+ gCreditsEntry_Artwork,
+ gCreditsEntry_HideyukiNakajima,
+ gCreditsEntry_HidenoriSaeki,
+ _,
+ },
+ {
+ gCreditsEntry_Artwork,
+ gCreditsEntry_YokoWatanabe,
+ gCreditsEntry_SakaeKimura,
+ gCreditsEntry_ChiakiShinkai,
+ _,
+ },
+ {
+ gCreditsEntry_Coordinators,
+ gCreditsEntry_KazukiYoshihara,
+ gCreditsEntry_AkiraKinashi,
+ gCreditsEntry_RetsujiNomoto,
+ _,
+ },
+ {
+ _,
+ gCreditsEntry_EnglishVersion,
+ gCreditsEntry_HiroNakamura,
+ gCreditsEntry_SethMcMahill,
+ _,
+ },
+ {
+ _,
+ gCreditsEntry_Translator,
+ gCreditsEntry_NobOgasawara,
+ _,
+ _,
+ },
+ {
+ _,
+ gCreditsEntry_TextEditor,
+ gCreditsEntry_TeresaLillygren,
+ _,
+ _,
+ },
+ {
+ _,
+ gCreditsEntry_NCLCoordinator,
+ gCreditsEntry_KimikoNakamichi,
+ _,
+ _,
+ },
+ {
+ gCreditsEntry_Programmers,
+ gCreditsEntry_TerukiMurakawa,
+ gCreditsEntry_SouichiYamamoto,
+ gCreditsEntry_YuichiroIto,
+ gCreditsEntry_AkiraKinashi,
+ },
+ {
+ _,
+ gCreditsEntry_GraphicDesigner,
+ gCreditsEntry_AkiraKinashi,
+ _,
+ _,
+ },
+ {
+ gCreditsEntry_EnvAndToolPgrms,
+ gCreditsEntry_TerukiMurakawa,
+ gCreditsEntry_SouichiYamamoto,
+ gCreditsEntry_KimikoNakamichi,
+ _,
+ },
+ {
+ gCreditsEntry_NOAProductTesting,
+ gCreditsEntry_ThomasHertzog,
+ gCreditsEntry_ErikJohnson,
+ gCreditsEntry_MikaKurosawa,
+ _,
+ },
+ {
+ gCreditsEntry_BrailleCodeCheck,
+ gCreditsEntry_NationalFederationBlind,
+ gCreditsEntry_PatriciaAMaurer,
+ gCreditsEntry_JapanBrailleLibrary,
+ gCreditsEntry_EuropeanBlindUnion,
+ },
+ {
+ _,
+ gCreditsEntry_BrailleCodeCheck,
+ gCreditsEntry_AustralianBrailleAuthority,
+ gCreditsEntry_RoyalNewZealandFederationBlind,
+ _,
+ },
+ {
+ gCreditsEntry_SpecialThanks,
+ gCreditsEntry_HiroyukiUesugi,
+ gCreditsEntry_MotoyasuTojima,
+ gCreditsEntry_NicolaPrattBarlow,
+ gCreditsEntry_ShellieDow,
+ },
+ {
+ _,
+ gCreditsEntry_TaskManagers,
+ gCreditsEntry_AzusaTajima,
+ gCreditsEntry_ShusakuEgami,
+ _,
+ },
+ {
+ gCreditsEntry_Producers,
+ gCreditsEntry_HiroyukiJinnai,
+ gCreditsEntry_HitoshiYamagami,
+ gCreditsEntry_GakujiNomoto,
+ gCreditsEntry_HiroakiTsuru,
+ },
+ {
+ _,
+ gCreditsEntry_ExecutiveDirector,
+ gCreditsEntry_SatoshiTajiri,
+ _,
+ _,
+ },
+ {
+ _,
+ gCreditsEntry_ExecProducers,
+ gCreditsEntry_SatoruIwata,
+ _,
+ _,
+ },
+ {
+ _,
+ gCreditsEntry_ExecProducers,
+ gCreditsEntry_TsunekazIshihara,
+ _,
+ _,
+ },
+};
+#undef _
+
+static const struct BgTemplate gUnknown_085E6F68[] =
+{
+ {
+ .bg = 0,
+ .charBaseIndex = 2,
+ .mapBaseIndex = 28,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 0,
+ .baseTile = 0
+ },
+};
+static const struct WindowTemplate gUnknown_085E6F6C[] =
+{
+ { 0x00, 0x00, 0x09, 0x1E, 0x0C, 0x08, 0x0001 },
+ DUMMY_WIN_TEMPLATE,
+};
+static const u8 gUnknown_085E6F7C[][2] =
+{
+ {104, 36},
+ {120, 36},
+ {136, 36},
+};
+
+static const union AnimCmd gUnknown_085E6F84[] =
+{
+ ANIMCMD_FRAME(0, 8),
+ ANIMCMD_FRAME(64, 8),
+ ANIMCMD_FRAME(128, 8),
+ ANIMCMD_FRAME(192, 8),
+ ANIMCMD_JUMP(0),
+};
+
+static const union AnimCmd gUnknown_085E6F98[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(64, 4),
+ ANIMCMD_FRAME(128, 4),
+ ANIMCMD_FRAME(192, 4),
+ ANIMCMD_JUMP(0),
+};
+
+static const union AnimCmd gUnknown_085E6FAC[] =
+{
+ ANIMCMD_FRAME(256, 4),
+ ANIMCMD_FRAME(320, 4),
+ ANIMCMD_FRAME(384, 4),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gUnknown_085E6FBC[] =
+{
+ ANIMCMD_FRAME(384, 30),
+ ANIMCMD_FRAME(320, 30),
+ ANIMCMD_FRAME(256, 30),
+ ANIMCMD_FRAME(256, 30),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd *const gUnknown_085E6FD0[] =
+{
+ gUnknown_085E6F84,
+ gUnknown_085E6F98,
+ gUnknown_085E6FAC,
+ gUnknown_085E6FBC,
+};
+
+static const union AnimCmd gUnknown_085E6FE0[] =
+{
+ ANIMCMD_FRAME(0, 8),
+ ANIMCMD_FRAME(64, 8),
+ ANIMCMD_FRAME(128, 8),
+ ANIMCMD_FRAME(192, 8),
+ ANIMCMD_JUMP(0),
+};
+
+static const union AnimCmd gUnknown_085E6FF4[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(64, 4),
+ ANIMCMD_FRAME(128, 4),
+ ANIMCMD_FRAME(192, 4),
+ ANIMCMD_JUMP(0),
+};
+
+static const union AnimCmd gUnknown_085E7008[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd *const gUnknown_085E7010[] =
+{
+ gUnknown_085E6FE0,
+ gUnknown_085E6FF4,
+ gUnknown_085E7008,
+};
+
+static const struct SpriteSheet gUnknown_085E701C[] = {
+ { gDecompressionBuffer, 6144, 1001 },
+ { NULL },
+};
+static const struct SpritePalette gUnknown_085E702C[] = {
+ { (const u16 *)(gDecompressionBuffer + 0x1800), 1001 },
+ { NULL },
+};
+
+static const struct OamData gUnknown_085E703C =
+{
+ .y = 160,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 3,
+ .tileNum = 0,
+ .priority = 1,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+static const union AnimCmd gUnknown_085E7044[] =
+{
+ ANIMCMD_FRAME(0, 8),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gUnknown_085E704C[] =
+{
+ ANIMCMD_FRAME(64, 8),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gUnknown_085E7054[] =
+{
+ ANIMCMD_FRAME(128, 8),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd *const gUnknown_085E705C[] =
+{
+ gUnknown_085E7044,
+ gUnknown_085E704C,
+ gUnknown_085E7054,
+};
+
+static const struct SpriteTemplate gUnknown_085E7068 =
+{
+ .tileTag = 1001,
+ .paletteTag = 1001,
+ .oam = &gUnknown_085E703C,
+ .anims = gUnknown_085E705C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_81772B8,
+};
+
+void sub_8175620(void);
+static void sub_8175744(u8 taskIdA);
+static void sub_8175774(u8 taskIdA);
+static void sub_8175808(u8 taskIdA);
+static void c2_080C9BFC(u8 taskIdA);
+static void sub_81758E4(u8 taskIdA);
+static void sub_81758A4(u8 taskIdA);
+static void sub_8175A9C(u8 taskIdA);
+static void sub_8175AE4(u8 taskIdA);
+static void sub_8175B1C(u8 taskIdA);
+static void sub_8175B90(u8 taskIdA);
+static void sub_8175BD8(u8 taskIdA);
+static void sub_8175C34(u8 taskIdA);
+static void sub_8175CC8(u8 taskIdA);
+static void sub_8175CE4(void);
+static void sub_8175DA0(u8 taskIdB);
+static u8 sub_817603C(u8 page, u8 taskIdA);
+static void sub_81760FC(u8 taskIdA);
+static void sub_817651C(u8 taskIdA);
+static void sub_817624C(u8 taskIdA);
+static bool8 sub_8176AB0(u8 data, u8 taskIdA);
+static void sub_8176CA0(u8 taskIdA);
+static void sub_8176D1C(u16, u16, u16);
+static void sub_8176E40(u16 arg0, u16 palette);
+static void sub_8176EE8(struct Sprite *sprite);
+static void sub_8176F90(struct Sprite *sprite);
+static u8 sub_8177224(u16 species, s16 x, s16 y, u16 position);
+static void sub_8177388(void);
+
+static void sub_81754C8(void)
+{
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+}
+
+static void sub_81754DC(void)
+{
+ RunTasks();
+ AnimateSprites();
+
+ if ((gMain.heldKeys & B_BUTTON)
+ && gHasHallOfFameRecords != 0
+ && gTasks[gUnknown_0203BCE2].func == sub_8175774)
+ {
+ sub_81754C8();
+ RunTasks();
+ AnimateSprites();
+ gUnknown_0203BCE5 = 1;
+ }
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
+static void sub_8175548(void)
+{
+ ResetBgsAndClearDma3BusyFlags(0);
+ InitBgsFromTemplates(0, gUnknown_085E6F68, 1);
+ SetBgTilemapBuffer(0, AllocZeroed(0x800));
+ LoadPalette(gUnknown_085E56F0, 0x80, 0x40);
+ InitWindows(gUnknown_085E6F6C);
+ DeactivateAllTextPrinters();
+ PutWindowTilemap(0);
+ CopyWindowToVram(0, 3);
+ ShowBg(0);
+}
+
+static void sub_81755A4(void)
+{
+ void *ptr;
+ FreeAllWindowBuffers();
+ ptr = GetBgTilemapBuffer(0);
+ if (ptr)
+ Free(ptr);
+}
+
+static void sub_81755BC(const u8 *string, u8 y, u8 a2)
+{
+ u8 x;
+ u8 color[3];
+
+ color[0] = 0;
+
+ if (a2 == 1)
+ {
+ color[1] = 3;
+ color[2] = 4;
+ }
+ else
+ {
+ color[1] = 1;
+ color[2] = 2;
+ }
+
+ x = GetStringCenterAlignXOffsetWithLetterSpacing(1, string, 0xF0, 1);
+ AddTextPrinterParameterized2(0, 1, x, y, 1, 0, color, -1, string);
+}
+
+void sub_8175620(void)
+{
+ u8 taskIdA;
+ s16 taskIdC;
+ u8 taskIdB;
+ u16 savedIme;
+
+ sub_8175CE4();
+ SetVBlankCallback(NULL);
+ InitHeap(gHeap, HEAP_SIZE);
+ ResetPaletteFade();
+ ResetTasks();
+ sub_8175548();
+
+ taskIdA = CreateTask(sub_8175744, 0);
+
+ gTasks[taskIdA].data[TDA_4] = 0;
+ gTasks[taskIdA].data[TDA_7] = 0;
+ gTasks[taskIdA].data[TDA_11] = 0;
+ gTasks[taskIdA].data[TDA_13] = 1;
+
+ while (TRUE)
+ {
+ if (sub_8176AB0(0, taskIdA))
+ break;
+ }
+
+ taskIdC = gTasks[taskIdA].data[TDA_TASK_C_ID];
+ gTasks[taskIdC].data[TDC_0] = 40;
+
+ SetGpuReg(REG_OFFSET_BG0VOFS, 0xFFFC);
+
+ taskIdB = CreateTask(sub_8175DA0, 0);
+
+ gTasks[taskIdB].data[TDB_TASK_A_ID] = taskIdA;
+ gTasks[taskIdA].data[TDA_TASK_B_ID] = taskIdB;
+
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
+ EnableInterrupts(INTR_FLAG_VBLANK);
+ SetVBlankCallback(sub_81754C8);
+ m4aSongNumStart(MUS_THANKFOR);
+ SetMainCallback2(sub_81754DC);
+ gUnknown_0203BCE5 = 0;
+ gUnknown_0203BCE8 = AllocZeroed(sizeof(struct Unk201C000));
+
+ sub_8177388();
+
+ gUnknown_0203BCE8->unk8E = 0;
+ gUnknown_0203BCE8->unk90 = 0;
+ gUnknown_0203BCE8->unk92 = 0;
+
+ gUnknown_0203BCE2 = taskIdA;
+}
+
+static void sub_8175744(u8 taskIdA)
+{
+ if (!gPaletteFade.active)
+ gTasks[taskIdA].func = sub_8175774;
+}
+
+static void sub_8175774(u8 taskIdA)
+{
+ u16 data1;
+
+ if (gTasks[taskIdA].data[TDA_4])
+ {
+ s16 taskIdC;
+
+ taskIdC = gTasks[taskIdA].data[TDA_TASK_C_ID];
+ gTasks[taskIdC].data[TDC_0] = 30;
+
+ gTasks[taskIdA].data[TDA_12] = 0x100;
+ gTasks[taskIdA].func = sub_8175A9C;
+ return;
+ }
+
+ gUnknown_0203BCE0 = 0;
+ data1 = gTasks[taskIdA].data[TDA_11];
+
+ if (gTasks[taskIdA].data[TDA_11] == 1)
+ {
+ gTasks[taskIdA].data[TDA_13] = data1;
+ gTasks[taskIdA].data[TDA_11] = 0;
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
+ gTasks[taskIdA].func = sub_8175808;
+ }
+ else if (gTasks[taskIdA].data[TDA_11] == 2)
+ {
+ gTasks[taskIdA].data[TDA_13] = data1;
+ gTasks[taskIdA].data[TDA_11] = 0;
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_BLACK);
+ gTasks[taskIdA].func = sub_81758A4;
+ }
+}
+
+static void sub_8175808(u8 taskIdA)
+{
+ if (!gPaletteFade.active)
+ {
+ SetGpuReg(REG_OFFSET_DISPCNT, 0);
+ sub_8176CA0(taskIdA);
+ gTasks[taskIdA].func = c2_080C9BFC;
+ }
+}
+
+static void c2_080C9BFC(u8 taskIdA)
+{
+ u16 backup;
+
+ SetVBlankCallback(NULL);
+
+ if (sub_8176AB0(gTasks[taskIdA].data[TDA_7], taskIdA))
+ {
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
+ EnableInterrupts(INTR_FLAG_VBLANK);
+ SetVBlankCallback(sub_81754C8);
+ gTasks[taskIdA].func = sub_8175744;
+ }
+}
+
+static void sub_81758A4(u8 taskIdA)
+{
+ if (!gPaletteFade.active)
+ {
+ SetGpuReg(REG_OFFSET_DISPCNT, 0);
+ sub_8176CA0(taskIdA);
+ gTasks[taskIdA].func = sub_81758E4;
+ }
+}
+
+static void sub_81758E4(u8 taskIdA)
+{
+ switch (gMain.state)
+ {
+ default:
+ case 0:
+ {
+ u16 i;
+ u16 *temp;
+
+ ResetSpriteData();
+ dp13_810BB8C();
+ FreeAllSpritePalettes();
+ gReservedSpritePaletteCount = 8;
+ LZ77UnCompVram(&gBirchHelpGfx, (void *)VRAM);
+ LZ77UnCompVram(&gBirchGrassTilemap, (void *)(VRAM + 0x3800));
+ LoadPalette(gBirchBagGrassPal[0] + 1, 1, 31 * 2);
+
+ for (i = 0; i < 0x800; i++)
+ gDecompressionBuffer[i] = 0x11;
+ for (i = 0; i < 0x800; i++)
+ (gDecompressionBuffer + 0x800)[i] = 0x22;
+ for (i = 0; i < 0x800; i++)
+ (gDecompressionBuffer + 0x1000)[i] = 0x33;
+
+ temp = (u16 *)(&gDecompressionBuffer[0x1800]);
+ temp[0] = RGB_BLACK;
+ temp[1] = RGB(31, 31, 20); // light yellow
+ temp[2] = RGB(31, 20, 20); // light red
+ temp[3] = RGB(20, 20, 31); // light blue
+
+ LoadSpriteSheet(gUnknown_085E701C);
+ LoadSpritePalette(gUnknown_085E702C);
+
+ gMain.state += 1;
+ break;
+ }
+ case 1:
+ gTasks[taskIdA].data[TDA_TASK_D_ID] = CreateTask(sub_81760FC, 0);
+ gTasks[gTasks[taskIdA].data[TDA_TASK_D_ID]].data[TDD_STATE] = 1;
+ gTasks[gTasks[taskIdA].data[TDA_TASK_D_ID]].data[TDD_TASK_A_ID] = taskIdA;
+ gTasks[gTasks[taskIdA].data[TDA_TASK_D_ID]].data[TDD_2] = gTasks[taskIdA].data[TDA_7];
+
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
+ SetGpuReg(REG_OFFSET_BG3HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG3VOFS, 32);
+ SetGpuReg(REG_OFFSET_BG3CNT, BGCNT_PRIORITY(3)
+ | BGCNT_CHARBASE(0)
+ | BGCNT_SCREENBASE(7)
+ | BGCNT_16COLOR
+ | BGCNT_TXT256x256);
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0
+ | DISPCNT_OBJ_1D_MAP
+ | DISPCNT_BG0_ON
+ | DISPCNT_BG3_ON
+ | DISPCNT_OBJ_ON);
+
+ gMain.state = 0;
+ gUnknown_0203BD28 = 0;
+ gTasks[taskIdA].func = sub_8175744;
+ break;
+ }
+}
+
+static void sub_8175A9C(u8 taskIdA)
+{
+ if (gTasks[taskIdA].data[TDA_12])
+ {
+ gTasks[taskIdA].data[TDA_12] -= 1;
+ return;
+ }
+
+ BeginNormalPaletteFade(0xFFFFFFFF, 12, 0, 16, RGB_BLACK);
+ gTasks[taskIdA].func = sub_8175AE4;
+}
+
+static void sub_8175AE4(u8 taskIdA)
+{
+ if (!gPaletteFade.active)
+ {
+ sub_8176CA0(taskIdA);
+ gTasks[taskIdA].func = sub_8175B1C;
+ }
+}
+
+static void sub_8175B1C(u8 taskIdA)
+{
+ sub_8175CE4();
+ ResetPaletteFade();
+ sub_8176D1C(0, 0x3800, 0);
+ ResetSpriteData();
+ FreeAllSpritePalettes();
+ BeginNormalPaletteFade(0xFFFFFFFF, 8, 16, 0, RGB_BLACK);
+
+ SetGpuReg(REG_OFFSET_BG0CNT, BGCNT_PRIORITY(0)
+ | BGCNT_CHARBASE(0)
+ | BGCNT_SCREENBASE(7)
+ | BGCNT_16COLOR
+ | BGCNT_TXT256x256);
+ EnableInterrupts(INTR_FLAG_VBLANK);
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0
+ | DISPCNT_OBJ_1D_MAP
+ | DISPCNT_BG0_ON);
+
+ gTasks[taskIdA].data[TDA_0] = 0xEB;
+ gTasks[taskIdA].func = sub_8175B90;
+}
+
+static void sub_8175B90(u8 taskIdA)
+{
+ if (gTasks[taskIdA].data[TDA_0])
+ {
+ gTasks[taskIdA].data[TDA_0] -= 1;
+ return;
+ }
+
+ BeginNormalPaletteFade(0xFFFFFFFF, 6, 0, 16, RGB_BLACK);
+ gTasks[taskIdA].func = sub_8175BD8;
+}
+
+static void sub_8175BD8(u8 taskIdA)
+{
+ if (!gPaletteFade.active)
+ {
+ sub_8176E40(0x3800, 0);
+
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0, RGB_BLACK);
+ gTasks[taskIdA].data[TDA_0] = 7200;
+ gTasks[taskIdA].func = sub_8175C34;
+ }
+}
+
+static void sub_8175C34(u8 taskIdA)
+{
+ if (!gPaletteFade.active)
+ {
+ if (gTasks[taskIdA].data[TDA_0] == 0 || gMain.newKeys)
+ {
+ FadeOutBGM(4);
+ BeginNormalPaletteFade(0xFFFFFFFF, 8, 0, 16, RGB_WHITEALPHA);
+ gTasks[taskIdA].func = sub_8175CC8;
+ return;
+ }
+
+ if (gTasks[taskIdA].data[TDA_0] == 7144)
+ FadeOutBGM(8);
+
+ if (gTasks[taskIdA].data[TDA_0] == 6840)
+ m4aSongNumStart(MUS_END);
+
+ gTasks[taskIdA].data[TDA_0] -= 1;
+ }
+}
+
+static void sub_8175CC8(u8 taskIdA)
+{
+ if (!gPaletteFade.active)
+ SoftReset(0xFF);
+}
+
+static void sub_8175CE4(void)
+{
+ SetGpuReg(REG_OFFSET_DISPCNT, 0);
+
+ SetGpuReg(REG_OFFSET_BG3HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG3VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG2HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG2VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG1HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG1VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG0HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG0VOFS, 0);
+
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ SetGpuReg(REG_OFFSET_BLDY, 0);
+
+ DmaFill16(3, 0, (void *)VRAM, VRAM_SIZE);
+ DmaFill32(3, 0, (void *)OAM, OAM_SIZE);
+ DmaFill16(3, 0, (void *)(PLTT + 2), PLTT_SIZE - 2);
+}
+
+static void sub_8175DA0(u8 taskIdB)
+{
+ int i;
+
+ switch (gTasks[taskIdB].data[TDB_0])
+ {
+ case 0:
+ case 6:
+ case 7:
+ case 8:
+ case 9:
+ default:
+ if (!gPaletteFade.active)
+ {
+ gTasks[taskIdB].data[TDB_0] = 1;
+ gTasks[taskIdB].data[TDB_3] = 0x48;
+ gTasks[gTasks[taskIdB].data[TDB_TASK_A_ID]].data[TDA_14] = 0;
+ gUnknown_0203BCE0 = 0;
+ }
+ return;
+ case 1:
+ if (gTasks[taskIdB].data[TDB_3] != 0)
+ {
+ gTasks[taskIdB].data[TDB_3] -= 1;
+ return;
+ }
+ gTasks[taskIdB].data[TDB_0] += 1;
+ return;
+ case 2:
+ if (gTasks[gTasks[taskIdB].data[TDB_TASK_A_ID]].func == sub_8175774)
+ {
+ if (gTasks[taskIdB].data[TDB_CURRENT_PAGE] < PAGE_COUNT)
+ {
+ for (i = 0; i < 5; i++)
+ sub_81755BC(gCreditsEntryPointerTable[gTasks[taskIdB].data[TDB_CURRENT_PAGE]][i]->text, 5 + i * 16, gCreditsEntryPointerTable[gTasks[taskIdB].data[TDB_CURRENT_PAGE]][i]->var_1);
+
+ CopyWindowToVram(0, 2);
+
+ gTasks[taskIdB].data[TDB_CURRENT_PAGE] += 1;
+ gTasks[taskIdB].data[TDB_0] += 1;
+
+ gTasks[gTasks[taskIdB].data[TDB_TASK_A_ID]].data[TDA_14] = 1;
+
+ if (gTasks[gTasks[taskIdB].data[TDB_TASK_A_ID]].data[TDA_13] == 1)
+ BeginNormalPaletteFade(0x00000300, 0, 16, 0, COLOR_LIGHT_GREEN);
+ else
+ BeginNormalPaletteFade(0x00000300, 0, 16, 0, COLOR_DARK_GREEN);
+ return;
+ }
+ gTasks[taskIdB].data[TDB_0] = 10;
+ return;
+ }
+ gTasks[gTasks[taskIdB].data[TDB_TASK_A_ID]].data[TDA_14] = 0;
+ return;
+ case 3:
+ if (!gPaletteFade.active)
+ {
+ gTasks[taskIdB].data[TDB_3] = 0x73;
+ gTasks[taskIdB].data[TDB_0] += 1;
+ }
+ return;
+ case 4:
+ if (gTasks[taskIdB].data[TDB_3] != 0)
+ {
+ gTasks[taskIdB].data[TDB_3] -= 1;
+ return;
+ }
+
+ if (sub_817603C((u8)gTasks[taskIdB].data[TDB_CURRENT_PAGE], (u8)gTasks[taskIdB].data[TDB_TASK_A_ID]))
+ {
+ gTasks[taskIdB].data[TDB_0] += 1;
+ return;
+ }
+ gTasks[taskIdB].data[TDB_0] += 1;
+ if (gTasks[gTasks[taskIdB].data[TDB_TASK_A_ID]].data[TDA_13] == 1)
+ BeginNormalPaletteFade(0x00000300, 0, 0, 16, COLOR_LIGHT_GREEN);
+ else
+ BeginNormalPaletteFade(0x00000300, 0, 0, 16, COLOR_DARK_GREEN);
+ return;
+ case 5:
+ if (!gPaletteFade.active)
+ {
+ FillWindowPixelBuffer(0, 0);
+ CopyWindowToVram(0, 2);
+ gTasks[taskIdB].data[TDB_0] = 2;
+ }
+ return;
+ case 10:
+ gTasks[gTasks[taskIdB].data[TDB_TASK_A_ID]].data[TDA_4] = 1;
+ DestroyTask(taskIdB);
+ sub_81755A4();
+ FREE_AND_SET_NULL(gUnknown_0203BCE8);
+ return;
+ }
+}
+
+static u8 sub_817603C(u8 page, u8 taskIdA)
+{
+ // Starts with bike + ocean + morning
+
+ if (page == 6)
+ {
+ // Grass patch
+ gTasks[taskIdA].data[TDA_11] = 2;
+ }
+
+ if (page == 12)
+ {
+ // Bike + ocean + sunset
+ gTasks[taskIdA].data[TDA_7] = 1;
+ gTasks[taskIdA].data[TDA_11] = 1;
+ }
+
+ if (page == 18)
+ {
+ // Grass patch
+ gTasks[taskIdA].data[TDA_11] = 2;
+ }
+
+ if (page == 24)
+ {
+ // Bike + forest + sunset
+ gTasks[taskIdA].data[TDA_7] = 2;
+ gTasks[taskIdA].data[TDA_11] = 1;
+ }
+
+ if (page == 30)
+ {
+ // Grass patch
+ gTasks[taskIdA].data[TDA_11] = 2;
+ }
+
+ if (page == 36)
+ {
+ // Bike + forest + sunset
+ gTasks[taskIdA].data[TDA_7] = 3;
+ gTasks[taskIdA].data[TDA_11] = 1;
+ }
+
+ if (page == 42)
+ {
+ // Grass patch
+ gTasks[taskIdA].data[TDA_11] = 2;
+ }
+
+ if (page == 48)
+ {
+ // Bike + town + night
+ gTasks[taskIdA].data[TDA_7] = 4;
+ gTasks[taskIdA].data[TDA_11] = 1;
+ }
+
+ if (gTasks[taskIdA].data[TDA_11] != 0)
+ {
+ // Returns true if changed?
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static void sub_81760FC(u8 taskIdD)
+{
+ u8 r2;
+
+ switch (gTasks[taskIdD].data[TDD_STATE])
+ {
+ case 0:
+ break;
+ case 1:
+ if (gUnknown_0203BCE8->unk90 == 0 && gTasks[gTasks[taskIdD].data[TDD_TASK_A_ID]].data[TDA_14] == 0)
+ break;
+ gTasks[taskIdD].data[TDD_STATE]++;
+ break;
+ case 2:
+ if (gUnknown_0203BCE8->unk8E == 71 || gTasks[gTasks[taskIdD].data[TDD_TASK_A_ID]].func != sub_8175774)
+ break;
+ r2 = sub_8177224(gUnknown_0203BCE8->unk0[gUnknown_0203BCE8->unk92], gUnknown_085E6F7C[gUnknown_0203BCE8->unk90][0], gUnknown_085E6F7C[gUnknown_0203BCE8->unk90][1], gUnknown_0203BCE8->unk90);
+ if (gUnknown_0203BCE8->unk92 < gUnknown_0203BCE8->unk94 - 1)
+ {
+ gUnknown_0203BCE8->unk92++;
+ gSprites[r2].data[3] = 50;
+ }
+ else
+ {
+ gUnknown_0203BCE8->unk92 = 0;
+ gSprites[r2].data[3] = 512;
+ }
+ gUnknown_0203BCE8->unk8E++;
+ if (gUnknown_0203BCE8->unk90 == 2)
+ gUnknown_0203BCE8->unk90 = 0;
+ else
+ gUnknown_0203BCE8->unk90++;
+ gTasks[taskIdD].data[TDD_3] = 50;
+ gTasks[taskIdD].data[TDD_STATE]++;
+ break;
+ case 3:
+ if (gTasks[taskIdD].data[TDD_3] != 0)
+ gTasks[taskIdD].data[TDD_3]--;
+ else
+ gTasks[taskIdD].data[TDD_STATE] = 1;
+ break;
+ }
+}
+
+static void sub_817624C(u8 taskIdC)
+{
+ switch (gTasks[taskIdC].data[TDC_0])
+ {
+ case 0:
+ gUnknown_0203BD26 = Sin((gTasks[taskIdC].data[TDC_5] >> 1) & 0x7F, 12);
+ gTasks[taskIdC].data[TDC_5]++;
+ break;
+ case 1:
+ if (gUnknown_0203BD26 != 0)
+ {
+ gUnknown_0203BD26 = Sin((gTasks[taskIdC].data[TDC_5] >> 1) & 0x7F, 12);
+ gTasks[taskIdC].data[TDC_5]++;
+ }
+ else
+ {
+ gSprites[gTasks[taskIdC].data[TDC_2]].data[0] = 2;
+ gTasks[taskIdC].data[TDC_5] = 0;
+ gTasks[taskIdC].data[TDC_0]++;
+ }
+ break;
+ case 2:
+ if (gTasks[taskIdC].data[TDC_5] < 64)
+ {
+ gTasks[taskIdC].data[TDC_5]++;
+ gUnknown_0203BD26 = Sin(gTasks[taskIdC].data[TDC_5] & 0x7F, 20);
+ }
+ else
+ {
+ gTasks[taskIdC].data[TDC_0]++;
+ }
+ break;
+ case 3:
+ gSprites[gTasks[taskIdC].data[TDC_2]].data[0] = 3;
+ gSprites[gTasks[taskIdC].data[TDC_3]].data[0] = 1;
+ gTasks[taskIdC].data[TDC_4] = 120;
+ gTasks[taskIdC].data[TDC_0]++;
+ break;
+ case 4:
+ if (gTasks[taskIdC].data[TDC_4] != 0)
+ {
+ gTasks[taskIdC].data[TDC_4]--;
+ }
+ else
+ {
+ gTasks[taskIdC].data[TDC_5] = 64;
+ gTasks[taskIdC].data[TDC_0]++;
+ }
+ break;
+ case 5:
+ if (gTasks[taskIdC].data[TDC_5] > 0)
+ {
+ gTasks[taskIdC].data[TDC_5]--;
+ gUnknown_0203BD26 = Sin(gTasks[taskIdC].data[TDC_5] & 0x7F, 20);
+ }
+ else
+ {
+ gSprites[gTasks[taskIdC].data[TDC_2]].data[0] = 1;
+ gTasks[taskIdC].data[TDC_0]++;
+ }
+ break;
+ case 6:
+ gTasks[taskIdC].data[TDC_0] = 50;
+ break;
+ case 10:
+ gSprites[gTasks[taskIdC].data[TDC_3]].data[0] = 2;
+ gTasks[taskIdC].data[TDC_0] = 50;
+ break;
+ case 20:
+ gSprites[gTasks[taskIdC].data[TDC_2]].data[0] = 4;
+ gTasks[taskIdC].data[TDC_0] = 50;
+ break;
+ case 30:
+ gSprites[gTasks[taskIdC].data[TDC_2]].data[0] = 5;
+ gSprites[gTasks[taskIdC].data[TDC_3]].data[0] = 3;
+ gTasks[taskIdC].data[TDC_0] = 50;
+ break;
+ case 50:
+ gTasks[taskIdC].data[TDC_0] = 0;
+ break;
+ }
+}
+
+static void sub_817651C(u8 taskIdE)
+{
+ s16 taskIdC;
+
+ switch (gTasks[taskIdE].data[TDE_0])
+ {
+ default:
+ case 0:
+ if (gTasks[taskIdE].data[TDE_1] != 0x7FFF)
+ {
+
+ if (gTasks[gTasks[gTasks[taskIdE].data[TDE_TASK_A_ID]].data[TDA_TASK_B_ID]].data[TDB_CURRENT_PAGE] == 2)
+ {
+ gTasks[gTasks[gTasks[taskIdE].data[TDE_TASK_A_ID]].data[TDA_TASK_C_ID]].data[TDC_0] = 20;
+ gTasks[taskIdE].data[TDE_1] = 0x7FFF;
+ }
+ }
+ sub_817B540(0);
+ break;
+ case 1:
+ sub_817B540(0);
+ break;
+ case 2:
+ if (gTasks[taskIdE].data[TDE_1] != 0x7FFF)
+ {
+ taskIdC = gTasks[gTasks[taskIdE].data[TDE_TASK_A_ID]].data[TDA_TASK_C_ID];
+
+ // Floor to multiple of 128
+ if ((gTasks[taskIdC].data[TDC_5] & -128) == 640)
+ {
+ gTasks[taskIdC].data[TDC_0] = 1;
+ gTasks[taskIdE].data[TDE_1] = 0x7FFF;
+ }
+ }
+ sub_817B540(1);
+ break;
+ case 3:
+ if (gTasks[taskIdE].data[TDE_1] != 0x7FFF)
+ {
+
+ if (gTasks[taskIdE].data[TDE_1] == 0x248)
+ {
+ gTasks[gTasks[gTasks[taskIdE].data[TDE_TASK_A_ID]].data[TDA_TASK_C_ID]].data[TDC_0] = 10;
+ gTasks[taskIdE].data[TDE_1] = 0x7FFF;
+ }
+ else
+ {
+ gTasks[taskIdE].data[TDE_1] += 1;
+ }
+ }
+ sub_817B540(1);
+ break;
+ case 4:
+ sub_817B540(2);
+ break;
+ }
+}
+
+static void sub_817664C(u8 data, u8 taskIdA)
+{
+ switch (data)
+ {
+ case 0:
+ gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].invisible = 0;
+ gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].invisible = 0;
+ gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.x = 272;
+ gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.x = 272;
+ gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.y = 46;
+ gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.y = 46;
+ gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].data[0] = 0;
+ gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].data[0] = 0;
+ gTasks[taskIdA].data[TDA_0] = sub_817B3DC(0, 0x2000, 0x20, 8);
+ break;
+ case 1:
+ gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].invisible = 0;
+ gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].invisible = 0;
+ gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.x = 120;
+ gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.x = 272;
+ gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.y = 46;
+ gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.y = 46;
+ gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].data[0] = 0;
+ gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].data[0] = 0;
+ gTasks[taskIdA].data[TDA_0] = sub_817B3DC(0, 0x2000, 0x20, 8);
+ break;
+ case 2:
+ gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].invisible = 0;
+ gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].invisible = 0;
+ gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.x = 120;
+ gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.x = 272;
+ gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.y = 46;
+ gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.y = 46;
+ gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].data[0] = 0;
+ gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].data[0] = 0;
+ gTasks[taskIdA].data[TDA_0] = sub_817B3DC(1, 0x2000, 0x200, 8);
+ break;
+ case 3:
+ gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].invisible = 0;
+ gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].invisible = 0;
+ gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.x = 120;
+ gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.x = -32;
+ gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.y = 46;
+ gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.y = 46;
+ gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].data[0] = 0;
+ gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].data[0] = 0;
+ gTasks[taskIdA].data[TDA_0] = sub_817B3DC(1, 0x2000, 0x200, 8);
+ break;
+ case 4:
+ gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].invisible = 0;
+ gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].invisible = 0;
+ gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.x = 88;
+ gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.x = 152;
+ gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].pos1.y = 46;
+ gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].pos1.y = 46;
+ gSprites[gTasks[taskIdA].data[TDA_PLAYER_CYCLIST]].data[0] = 0;
+ gSprites[gTasks[taskIdA].data[TDA_RIVAL_CYCLIST]].data[0] = 0;
+ gTasks[taskIdA].data[TDA_0] = sub_817B3DC(2, 0x2000, 0x200, 8);
+ break;
+ }
+
+ gTasks[taskIdA].data[TDA_TASK_E_ID] = CreateTask(sub_817651C, 0);
+ gTasks[gTasks[taskIdA].data[TDA_TASK_E_ID]].data[TDE_0] = data;
+ gTasks[gTasks[taskIdA].data[TDA_TASK_E_ID]].data[TDE_1] = 0;
+ gTasks[gTasks[taskIdA].data[TDA_TASK_E_ID]].data[TDE_TASK_A_ID] = taskIdA;
+
+ gTasks[taskIdA].data[TDA_TASK_C_ID] = CreateTask(sub_817624C, 0);
+ gTasks[gTasks[taskIdA].data[TDA_TASK_C_ID]].data[TDC_0] = 0;
+ gTasks[gTasks[taskIdA].data[TDA_TASK_C_ID]].data[TDC_1] = taskIdA;
+ gTasks[gTasks[taskIdA].data[TDA_TASK_C_ID]].data[TDC_2] = gTasks[taskIdA].data[TDA_PLAYER_CYCLIST];
+ gTasks[gTasks[taskIdA].data[TDA_TASK_C_ID]].data[TDC_3] = gTasks[taskIdA].data[TDA_RIVAL_CYCLIST];
+ gTasks[gTasks[taskIdA].data[TDA_TASK_C_ID]].data[TDC_4] = 0;
+
+ if (data == 2)
+ gTasks[gTasks[taskIdA].data[TDA_TASK_C_ID]].data[TDC_5] = 0x45;
+}
+
+static bool8 sub_8176AB0(u8 data, u8 taskIdA)
+{
+ u8 spriteId;
+
+ switch (gMain.state)
+ {
+ default:
+ case 0:
+ SetGpuReg(REG_OFFSET_DISPCNT, 0);
+ SetGpuReg(REG_OFFSET_BG3HOFS, 8);
+ SetGpuReg(REG_OFFSET_BG3VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG2HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG2VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG1HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG1VOFS, 0);
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ ResetSpriteData();
+ FreeAllSpritePalettes();
+ gMain.state = 1;
+ break;
+ case 1:
+ gUnknown_0203BD24 = 34;
+ gUnknown_0203BD26 = 0;
+ sub_817B1C8(data);
+ gMain.state += 1;
+ break;
+ case 2:
+ if (gSaveBlock2Ptr->playerGender == MALE)
+ {
+ LoadCompressedObjectPic(gUnknown_085F5334);
+ LoadCompressedObjectPic(gUnknown_085F53BC);
+ LoadCompressedObjectPic(gUnknown_085F5354);
+ LoadSpritePalettes(gUnknown_085F5384);
+
+ spriteId = intro_create_brendan_sprite(120, 46);
+ gTasks[taskIdA].data[TDA_PLAYER_CYCLIST] = spriteId;
+ gSprites[spriteId].callback = sub_8176EE8;
+ gSprites[spriteId].anims = gUnknown_085E6FD0;
+
+ spriteId = intro_create_may_sprite(272, 46);
+ gTasks[taskIdA].data[TDA_RIVAL_CYCLIST] = spriteId;
+ gSprites[spriteId].callback = sub_8176F90;
+ gSprites[spriteId].anims = gUnknown_085E7010;
+ }
+ else
+ {
+ LoadCompressedObjectPic(gUnknown_085F5344);
+ LoadCompressedObjectPic(gUnknown_085F53AC);
+ LoadCompressedObjectPic(gUnknown_085F5354);
+ LoadSpritePalettes(gUnknown_085F5384);
+
+ spriteId = intro_create_may_sprite(120, 46);
+ gTasks[taskIdA].data[TDA_PLAYER_CYCLIST] = spriteId;
+ gSprites[spriteId].callback = sub_8176EE8;
+ gSprites[spriteId].anims = gUnknown_085E6FD0;
+
+ spriteId = intro_create_brendan_sprite(272, 46);
+ gTasks[taskIdA].data[TDA_RIVAL_CYCLIST] = spriteId;
+ gSprites[spriteId].callback = sub_8176F90;
+ gSprites[spriteId].anims = gUnknown_085E7010;
+ };
+ gMain.state += 1;
+ break;
+ case 3:
+ sub_817664C(data, taskIdA);
+ sub_817B3A8(data);
+ gMain.state = 0;
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static void sub_8176CA0(u8 taskIdA)
+{
+ if (gTasks[taskIdA].data[TDA_0] != 0)
+ {
+ DestroyTask(gTasks[taskIdA].data[TDA_0]);
+ gTasks[taskIdA].data[TDA_0] = 0;
+ }
+
+ if (gTasks[taskIdA].data[TDA_TASK_C_ID] != 0)
+ {
+ DestroyTask(gTasks[taskIdA].data[TDA_TASK_C_ID]);
+ gTasks[taskIdA].data[TDA_TASK_C_ID] = 0;
+ }
+
+ if (gTasks[taskIdA].data[TDA_TASK_E_ID] != 0)
+ {
+ DestroyTask(gTasks[taskIdA].data[TDA_TASK_E_ID]);
+ gTasks[taskIdA].data[TDA_TASK_E_ID] = 0;
+ }
+
+ if (gTasks[taskIdA].data[TDA_TASK_D_ID] != 0)
+ {
+ DestroyTask(gTasks[taskIdA].data[TDA_TASK_D_ID]);
+ gTasks[taskIdA].data[TDA_TASK_D_ID] = 0;
+ }
+
+ gUnknown_0203BD28 = 1;
+}
+
+static void sub_8176D1C(u16 arg0, u16 arg1, u16 arg2)
+{
+ u16 baseTile;
+ u16 i;
+
+ LZ77UnCompVram(gCreditsCopyrightEnd_Gfx, (void *)(VRAM + arg0));
+ LoadPalette(gIntroCopyright_Pal, arg2, sizeof(gIntroCopyright_Pal));
+
+ baseTile = (arg2 / 16) << 12;
+
+ for (i = 0; i < 32 * 32; i++)
+ ((u16 *) (VRAM + arg1))[i] = baseTile + 1;
+}
+
+static u16 sub_8176D78(u8 arg0)
+{
+ u16 out = (arg0 & 0x3F) + 80;
+
+ if (arg0 == 0xFF)
+ return 1;
+
+ if (arg0 & (1 << 7))
+ out |= 1 << 11;
+ if (arg0 & (1 << 6))
+ out |= 1 << 10;
+
+ return out;
+}
+
+static void sub_8176DBC(const u8 arg0[], u8 baseX, u8 baseY, u16 arg3, u16 palette)
+{
+ u8 y, x;
+ const u16 tileOffset = (palette / 16) << 12;
+
+ for (y = 0; y < 5; y++)
+ {
+ for (x = 0; x < 3; x++)
+ ((u16 *) (VRAM + arg3 + (baseY + y) * 64))[baseX + x] = tileOffset + sub_8176D78(arg0[y * 3 + x]);
+ }
+}
+
+static void sub_8176E40(u16 arg0, u16 palette)
+{
+ u16 pos;
+ u16 baseTile = (palette / 16) << 12;
+
+ for (pos = 0; pos < 32 * 32; pos++)
+ ((u16 *) (VRAM + arg0))[pos] = baseTile + 1;
+
+ sub_8176DBC(gUnknown_085E5BAC, 3, 7, arg0, palette);
+ sub_8176DBC(gUnknown_085E5BBB, 7, 7, arg0, palette);
+ sub_8176DBC(gUnknown_085E5BCA, 11, 7, arg0, palette);
+ sub_8176DBC(gUnknown_085E5BCA, 16, 7, arg0, palette);
+ sub_8176DBC(gUnknown_085E5BD9, 20, 7, arg0, palette);
+ sub_8176DBC(gUnknown_085E5BE8, 24, 7, arg0, palette);
+}
+
+static void sub_8176EE8(struct Sprite *sprite)
+{
+ if (gUnknown_0203BD28 != 0)
+ {
+ DestroySprite(sprite);
+ return;
+ }
+
+ switch (sprite->data[0])
+ {
+ case 0:
+ StartSpriteAnimIfDifferent(sprite, 0);
+ break;
+ case 1:
+ StartSpriteAnimIfDifferent(sprite, 1);
+ if (sprite->pos1.x > -32)
+ sprite->pos1.x -= 1;
+ break;
+ case 2:
+ StartSpriteAnimIfDifferent(sprite, 2);
+ break;
+ case 3:
+ StartSpriteAnimIfDifferent(sprite, 3);
+ break;
+ case 4:
+ StartSpriteAnimIfDifferent(sprite, 0);
+ if (sprite->pos1.x > 120)
+ sprite->pos1.x -= 1;
+ break;
+ case 5:
+ StartSpriteAnimIfDifferent(sprite, 0);
+ if (sprite->pos1.x > -32)
+ sprite->pos1.x -= 1;
+ break;
+ }
+}
+
+static void sub_8176F90(struct Sprite *sprite)
+{
+ if (gUnknown_0203BD28 != 0)
+ {
+ DestroySprite(sprite);
+ return;
+ }
+
+ switch (sprite->data[0])
+ {
+ case 0:
+ sprite->pos2.y = 0;
+ StartSpriteAnimIfDifferent(sprite, 0);
+ break;
+ case 1:
+ if (sprite->pos1.x > 200)
+ StartSpriteAnimIfDifferent(sprite, 1);
+ else
+ StartSpriteAnimIfDifferent(sprite, 2);
+ if (sprite->pos1.x > -32)
+ sprite->pos1.x -= 2;
+ sprite->pos2.y = -gUnknown_0203BD26;
+ break;
+ case 2:
+ sprite->data[7] += 1;
+ StartSpriteAnimIfDifferent(sprite, 0);
+ if ((sprite->data[7] & 3) == 0)
+ sprite->pos1.x += 1;
+ break;
+ case 3:
+ StartSpriteAnimIfDifferent(sprite, 0);
+ if (sprite->pos1.x > -32)
+ sprite->pos1.x -= 1;
+ break;
+ }
+}
+
+static void sub_8177050(struct Sprite *sprite)
+{
+ if (gUnknown_0203BD28)
+ {
+ sub_818D820(sprite->data[6]);
+ return;
+ }
+
+ sprite->data[7] += 1;
+ switch (sprite->data[0])
+ {
+ case 0:
+ default:
+ sprite->oam.affineMode = 1;
+ sprite->oam.matrixNum = sprite->data[1];
+ sprite->data[2] = 16;
+ SetOamMatrix(sprite->data[1], 0x10000 / sprite->data[2], 0, 0, 0x10000 / sprite->data[2]);
+ sprite->invisible = FALSE;
+ sprite->data[0] = 1;
+ break;
+ case 1:
+ if (sprite->data[2] < 256)
+ {
+ sprite->data[2] += 8;
+ SetOamMatrix(sprite->data[1], 0x10000 / sprite->data[2], 0, 0, 0x10000 / sprite->data[2]);
+ }
+ else
+ {
+ sprite->data[0] += 1;
+ }
+ switch (sprite->data[1])
+ {
+ case 1:
+ if ((sprite->data[7] & 3) == 0)
+ sprite->pos1.y += 1;
+ sprite->pos1.x -= 2;
+ break;
+ case 2:
+ break;
+ case 3:
+ if ((sprite->data[7] & 3) == 0)
+ sprite->pos1.y += 1;
+ sprite->pos1.x += 2;
+ break;
+ }
+ break;
+ case 2:
+ if (sprite->data[3] != 0)
+ {
+ sprite->data[3] -= 1;
+ }
+ else
+ {
+ SetGpuReg(REG_OFFSET_BLDCNT, 0xF40);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0x10);
+ sprite->oam.objMode = 1;
+ sprite->data[3] = 16;
+ sprite->data[0] += 1;
+ }
+ break;
+ case 3:
+ if (sprite->data[3] != 0)
+ {
+ int data3;
+
+ sprite->data[3] -= 1;
+
+ data3 = 16 - sprite->data[3];
+ SetGpuReg(REG_OFFSET_BLDALPHA, (data3 << 8) + sprite->data[3]);
+ }
+ else
+ {
+ sprite->invisible = TRUE;
+ sprite->data[0] = 9;
+ }
+ break;
+ case 9:
+ sprite->data[0] += 1;
+ break;
+ case 10:
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ sub_818D820(sprite->data[6]);
+ break;
+ }
+}
+
+static u8 sub_8177224(u16 species, s16 x, s16 y, u16 position)
+{
+ u8 spriteId;
+ u8 spriteId2;
+
+ spriteId = sub_80C0E9C(species, x, y, position);
+ gSprites[spriteId].oam.priority = 1;
+ gSprites[spriteId].data[1] = position + 1;
+ gSprites[spriteId].invisible = TRUE;
+ gSprites[spriteId].callback = sub_8177050;
+ gSprites[spriteId].data[6] = spriteId;
+
+ spriteId2 = CreateSprite(&gUnknown_085E7068, gSprites[spriteId].pos1.x, gSprites[spriteId].pos1.y, 1);
+ gSprites[spriteId2].data[0] = spriteId;
+
+ StartSpriteAnimIfDifferent(&gSprites[spriteId2], position);
+
+ return spriteId;
+}
+
+static void sub_81772B8(struct Sprite *sprite)
+{
+ if (gSprites[sprite->data[0]].data[0] == 10 || gUnknown_0203BD28)
+ {
+ DestroySprite(sprite);
+ return;
+ }
+
+ sprite->invisible = gSprites[sprite->data[0]].invisible;
+ sprite->oam.objMode = gSprites[sprite->data[0]].oam.objMode;
+ sprite->oam.affineMode = gSprites[sprite->data[0]].oam.affineMode;
+ sprite->oam.matrixNum = gSprites[sprite->data[0]].oam.matrixNum;
+ sprite->pos1.x = gSprites[sprite->data[0]].pos1.x;
+ sprite->pos1.y = gSprites[sprite->data[0]].pos1.y;
+}
+
+static void sub_8177388(void)
+{
+ u16 starter = SpeciesToNationalPokedexNum(GetStarterPokemon(VarGet(VAR_FIRST_POKE)));
+ u16 page;
+ u16 dexNum;
+ u16 j;
+
+ for (dexNum = 1, j = 0; dexNum < 386; dexNum++)
+ {
+ if (GetSetPokedexFlag(dexNum, 1))
+ {
+ gUnknown_0203BCE8->unk96[j] = dexNum;
+ j++;
+ }
+ }
+
+ for (dexNum = j; dexNum < 386; dexNum++)
+ gUnknown_0203BCE8->unk96[dexNum] = 0;
+
+ gUnknown_0203BCE8->unk39A = j;
+ if (gUnknown_0203BCE8->unk39A < 71)
+ gUnknown_0203BCE8->unk94 = j;
+ else
+ gUnknown_0203BCE8->unk94 = 71;
+
+ j = 0;
+ do
+ {
+ page = Random() % gUnknown_0203BCE8->unk39A;
+ gUnknown_0203BCE8->unk0[j] = gUnknown_0203BCE8->unk96[page];
+
+ j++;
+ gUnknown_0203BCE8->unk96[page] = 0;
+ gUnknown_0203BCE8->unk39A--;
+ if (page != gUnknown_0203BCE8->unk39A)
+ {
+ gUnknown_0203BCE8->unk96[page] = gUnknown_0203BCE8->unk96[gUnknown_0203BCE8->unk39A];
+ gUnknown_0203BCE8->unk96[gUnknown_0203BCE8->unk39A] = 0;
+ }
+ }
+ while (gUnknown_0203BCE8->unk39A != 0 && j < 71);
+
+ if (gUnknown_0203BCE8->unk94 < 71)
+ {
+ for (j = gUnknown_0203BCE8->unk94, page = 0; j < 71; j++)
+ {
+ gUnknown_0203BCE8->unk0[j] = gUnknown_0203BCE8->unk0[page];
+
+ page++;
+ if (page == gUnknown_0203BCE8->unk94)
+ page = 0;
+ }
+ gUnknown_0203BCE8->unk0[70] = starter;
+ }
+ else
+ {
+ for (dexNum = 0; gUnknown_0203BCE8->unk0[dexNum] != starter && dexNum < 71; dexNum++);
+
+ if (dexNum < gUnknown_0203BCE8->unk94 - 1)
+ {
+ gUnknown_0203BCE8->unk0[dexNum] = gUnknown_0203BCE8->unk0[70];
+ gUnknown_0203BCE8->unk0[70] = starter;
+ }
+ else
+ {
+ gUnknown_0203BCE8->unk0[70] = starter;
+ }
+ }
+ gUnknown_0203BCE8->unk94 = 71;
+}
diff --git a/src/daycare.c b/src/daycare.c
index 89c0a48d8..d567ff79a 100644
--- a/src/daycare.c
+++ b/src/daycare.c
@@ -41,12 +41,11 @@ extern const u8 gDaycareText_PlayOther[];
extern u8 GetCursorSelectionMonId(void);
extern u16 ItemIdToBattleMoveId(u16);
extern s32 ListMenuHandleInputGetItemId(u8);
-extern void sub_81AE6C8(u8, u16*, u16*);
+extern void DestroyListMenuTask(u8, u16*, u16*);
extern void sub_819746C(u8, bool8);
extern void NewMenuHelpers_DrawStdWindowFrame(u8, bool8);
extern void sub_81B9328(void);
-extern void sub_81AF078(u32, bool8, struct ListMenu *);
-extern void c2_exit_to_overworld_2_switch(void);
+extern void CB2_ReturnToField(void);
// this file's functions
static void ClearDaycareMonMisc(struct DaycareMiscMon *misc);
@@ -79,18 +78,18 @@ static const struct ListMenuTemplate sDaycareListMenuLevelTemplate =
.unk_08 = DaycarePrintMonInfo,
.totalItems = 3,
.maxShowed = 3,
- .unk_10 = 0,
+ .windowId = 0,
.unk_11 = 0,
.unk_12 = 8,
- .cursor_Y = 0,
+ .cursor_X = 0,
.upText_Y = 1,
- .cursorColor = 2,
- .fillColor = 1,
- .cursorShadowColor = 3,
- .unk_16_0 = TRUE,
- .spaceBetweenItems = 0,
- .unk_16_7 = FALSE,
- .unk_17_0 = 1,
+ .cursorPal = 2,
+ .fillValue = 1,
+ .cursorShadowPal = 3,
+ .lettersSpacing = 1,
+ .unk_16_3 = 0,
+ .scrollMultiple = LIST_NO_MULTIPLE_SCROLL,
+ .fontId = 1,
.cursorKind = 0
};
@@ -1271,7 +1270,7 @@ static void Task_HandleDaycareLevelMenuInput(u8 taskId)
gSpecialVar_Result = 2;
break;
}
- sub_81AE6C8(gTasks[taskId].tMenuListTaskId, NULL, NULL);
+ DestroyListMenuTask(gTasks[taskId].tMenuListTaskId, NULL, NULL);
sub_819746C(gTasks[taskId].tWindowId, TRUE);
RemoveWindow(gTasks[taskId].tWindowId);
DestroyTask(taskId);
@@ -1280,7 +1279,7 @@ static void Task_HandleDaycareLevelMenuInput(u8 taskId)
else if (gMain.newKeys & B_BUTTON)
{
gSpecialVar_Result = 2;
- sub_81AE6C8(gTasks[taskId].tMenuListTaskId, NULL, NULL);
+ DestroyListMenuTask(gTasks[taskId].tMenuListTaskId, NULL, NULL);
sub_819746C(gTasks[taskId].tWindowId, TRUE);
RemoveWindow(gTasks[taskId].tWindowId);
DestroyTask(taskId);
@@ -1299,7 +1298,7 @@ void ShowDaycareLevelMenu(void)
NewMenuHelpers_DrawStdWindowFrame(windowId, FALSE);
menuTemplate = sDaycareListMenuLevelTemplate;
- menuTemplate.unk_10 = windowId;
+ menuTemplate.windowId = windowId;
listMenuTaskId = ListMenuInit(&menuTemplate, 0, 0);
CopyWindowToVram(windowId, 3);
@@ -1315,5 +1314,5 @@ void ShowDaycareLevelMenu(void)
void ChooseSendDaycareMon(void)
{
sub_81B9328();
- gMain.savedCallback = c2_exit_to_overworld_2_switch;
+ gMain.savedCallback = CB2_ReturnToField;
}
diff --git a/src/decompress.c b/src/decompress.c
index 8e8827194..1d4165d75 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))
+NAKED
void sub_803471C()
{
asm(".syntax unified\n\
diff --git a/src/decoration.c b/src/decoration.c
index db19ff4c6..1fc94c80e 100644
--- a/src/decoration.c
+++ b/src/decoration.c
@@ -111,7 +111,7 @@ void sub_812719C(u8 taskId);
void sub_81271CC(u8 taskId);
void sub_8127268(u8 taskId);
void sub_8127454(u8 *dest, u16 decorId);
-void sub_8127480(u32 a0, bool8 flag, struct ListMenu *menu);
+void sub_8127480(s32 a0, bool8 flag, struct ListMenu *menu);
void sub_81274A0(u8 a0, s32 a1, u8 a2);
void sub_8127620(u8 taskId);
void sub_812764C(u8 taskId);
@@ -560,7 +560,7 @@ void SecretBasePC_Cancel(u8 taskId)
}
else
{
- sub_816B060(taskId);
+ ReshowPlayerPC(taskId);
}
}
@@ -799,7 +799,7 @@ void sub_8127330(u8 taskId)
sDecorPCBuffer->items[i].name = sDecorPCBuffer->names[i];
sDecorPCBuffer->items[i].id = -2;
gMultiuseListMenuTemplate = gUnknown_085A6BD0;
- gMultiuseListMenuTemplate.unk_10 = sDecorMenuWindowIndices[1];
+ gMultiuseListMenuTemplate.windowId = sDecorMenuWindowIndices[1];
gMultiuseListMenuTemplate.totalItems = sDecorPCBuffer->unk_520;
gMultiuseListMenuTemplate.items = sDecorPCBuffer->items;
gMultiuseListMenuTemplate.maxShowed = sDecorPCBuffer->unk_521;
@@ -811,7 +811,7 @@ void sub_8127454(u8 *dest, u16 decorId)
StringAppend(dest, gDecorations[decorId].name);
}
-void sub_8127480(u32 a0, bool8 flag, struct ListMenu *menu)
+void sub_8127480(s32 a0, bool8 flag, struct ListMenu *menu)
{
if (flag != TRUE)
{
@@ -890,7 +890,7 @@ void sub_812764C(u8 taskId)
if (!gPaletteFade.active)
{
input = ListMenuHandleInputGetItemId(data[13]);
- sub_81AE860(data[13], &sSecretBasePCSelectDecorPageNo, &sSecretBasePCSelectDecorLineNo);
+ ListMenuGetScrollAndRow(data[13], &sSecretBasePCSelectDecorPageNo, &sSecretBasePCSelectDecorLineNo);
switch (input)
{
case -1:
@@ -903,7 +903,7 @@ void sub_812764C(u8 taskId)
PlaySE(SE_SELECT);
gCurDecorationIndex = input;
sub_8127554();
- sub_81AE6C8(data[13], &sSecretBasePCSelectDecorPageNo, &sSecretBasePCSelectDecorLineNo);
+ DestroyListMenuTask(data[13], &sSecretBasePCSelectDecorPageNo, &sSecretBasePCSelectDecorLineNo);
sub_8126A58(1);
sub_81277A8();
free(sDecorPCBuffer);
@@ -1072,7 +1072,7 @@ void sub_8127A8C(u8 taskId)
data = gTasks[taskId].data;
sub_8127554();
sub_81277A8();
- sub_81AE6C8(data[13], NULL, NULL);
+ DestroyListMenuTask(data[13], NULL, NULL);
free(sDecorPCBuffer);
sub_8126E44(taskId);
}
@@ -1292,7 +1292,7 @@ void sub_8128060(u8 taskId)
gTasks[taskId].data[2] = 2;
break;
case 2:
- if (sub_80ABDFC() == TRUE)
+ if (IsWeatherNotFadingIn() == TRUE)
{
gTasks[taskId].data[12] = 0;
sub_8128FD8(taskId);
@@ -1303,12 +1303,12 @@ void sub_8128060(u8 taskId)
void ConfigureCameraObjectForPlacingDecoration(struct PlaceDecorationGraphicsDataBuffer *data, u8 decor)
{
- sDecor_CameraSpriteObjectIdx1 = gSprites[gUnknown_03005DD0.unk4].data[0];
- gUnknown_03005DD0.unk4 = gpu_pal_decompress_alloc_tag_and_upload(data, decor);
- gSprites[gUnknown_03005DD0.unk4].oam.priority = 1;
- gSprites[gUnknown_03005DD0.unk4].callback = sub_81292D0;
- gSprites[gUnknown_03005DD0.unk4].pos1.x = gUnknown_085A7250[data->decoration->shape].x;
- gSprites[gUnknown_03005DD0.unk4].pos1.y = gUnknown_085A7250[data->decoration->shape].y;
+ sDecor_CameraSpriteObjectIdx1 = gSprites[gUnknown_03005DD0.spriteId].data[0];
+ gUnknown_03005DD0.spriteId = gpu_pal_decompress_alloc_tag_and_upload(data, decor);
+ gSprites[gUnknown_03005DD0.spriteId].oam.priority = 1;
+ gSprites[gUnknown_03005DD0.spriteId].callback = sub_81292D0;
+ gSprites[gUnknown_03005DD0.spriteId].pos1.x = gUnknown_085A7250[data->decoration->shape].x;
+ gSprites[gUnknown_03005DD0.spriteId].pos1.y = gUnknown_085A7250[data->decoration->shape].y;
}
void SetUpPlacingDecorationPlayerAvatar(u8 taskId, struct PlaceDecorationGraphicsDataBuffer *data)
@@ -1330,7 +1330,7 @@ void SetUpPlacingDecorationPlayerAvatar(u8 taskId, struct PlaceDecorationGraphic
}
gSprites[sDecor_CameraSpriteObjectIdx2].oam.priority = 1;
DestroySprite(&gSprites[sDecor_CameraSpriteObjectIdx1]);
- sDecor_CameraSpriteObjectIdx1 = gUnknown_03005DD0.unk4;
+ sDecor_CameraSpriteObjectIdx1 = gUnknown_03005DD0.spriteId;
}
void sub_812826C(u8 taskId)
@@ -1682,7 +1682,7 @@ void c1_overworld_prev_quest(u8 taskId)
sub_812A3C8();
FreeSpritePaletteByTag(OVERWORLD_PLACE_DECOR_SELECTOR_PAL_TAG);
gFieldCallback = sub_8128CD4;
- SetMainCallback2(c2_exit_to_overworld_2_switch);
+ SetMainCallback2(CB2_ReturnToField);
DestroyTask(taskId);
break;
}
@@ -1708,7 +1708,7 @@ void sub_8128C64(u8 taskId)
data[2] ++;
break;
case 3:
- if (sub_80ABDFC() == TRUE)
+ if (IsWeatherNotFadingIn() == TRUE)
{
gTasks[taskId].func = sub_812764C;
}
@@ -2218,7 +2218,7 @@ void sub_81298EC(u8 taskId)
gTasks[taskId].data[2] = 3;
break;
case 3:
- if (sub_80ABDFC() == TRUE)
+ if (IsWeatherNotFadingIn() == TRUE)
{
StringExpandPlaceholders(gStringVar4, gText_DecorationReturnedToPC);
DisplayItemMessageOnField(taskId, gStringVar4, sub_8129D64);
@@ -2249,9 +2249,9 @@ bool8 sub_81299AC(u8 taskId)
void SetUpPuttingAwayDecorationPlayerAvatar(void)
{
player_get_direction_lower_nybble();
- sDecor_CameraSpriteObjectIdx1 = gSprites[gUnknown_03005DD0.unk4].data[0];
+ sDecor_CameraSpriteObjectIdx1 = gSprites[gUnknown_03005DD0.spriteId].data[0];
sub_812A39C();
- gUnknown_03005DD0.unk4 = CreateSprite(&gUnknown_085A7404, 0x78, 0x50, 0);
+ gUnknown_03005DD0.spriteId = CreateSprite(&gUnknown_085A7404, 0x78, 0x50, 0);
if (gSaveBlock2Ptr->playerGender == MALE)
{
sDecor_CameraSpriteObjectIdx2 = AddPseudoFieldObject(0xC1, SpriteCallbackDummy, 0x88, 0x48, 0);
@@ -2262,7 +2262,7 @@ void SetUpPuttingAwayDecorationPlayerAvatar(void)
}
gSprites[sDecor_CameraSpriteObjectIdx2].oam.priority = 1;
DestroySprite(&gSprites[sDecor_CameraSpriteObjectIdx1]);
- sDecor_CameraSpriteObjectIdx1 = gUnknown_03005DD0.unk4;
+ sDecor_CameraSpriteObjectIdx1 = gUnknown_03005DD0.spriteId;
gSprites[sDecor_CameraSpriteObjectIdx1].oam.priority = 1;
}
@@ -2288,7 +2288,7 @@ void sub_8129ABC(u8 taskId)
data[2] = 2;
break;
case 2:
- if (sub_80ABDFC() == TRUE)
+ if (IsWeatherNotFadingIn() == TRUE)
{
data[12] = 1;
sub_8129B34(taskId);
@@ -2505,30 +2505,27 @@ void sub_812A040(u8 left, u8 top, u8 right, u8 bottom)
}
}
-#ifdef NONMATCHING
void sub_812A0E8(u8 taskId)
{
u8 i;
u8 xOff;
u8 yOff;
- u8 decor;
- register u8 decor asm("r1");
- struct DecorRearrangementDataBuffer *data;
+ u8 var1;
+ u32 var2;
sCurDecorSelectedInRearrangement = 0;
if (sub_8129FC8(taskId) != TRUE)
{
- for (i = 0; i < gUnknown_0203A17C.size; i ++)
+ for (i = 0; i < gUnknown_0203A17C.size; i++)
{
- decor = gUnknown_0203A17C.items[i];
- if (decor != DECOR_NONE)
+ var1 = gUnknown_0203A17C.items[i];
+ if (var1 != DECOR_NONE)
{
- data = &sDecorRearrangementDataBuffer[0];
- sub_8129D8C(decor, data);
- if (sub_8129E74(taskId, i, data) == TRUE)
+ sub_8129D8C(var1, &sDecorRearrangementDataBuffer[0]);
+ if (sub_8129E74(taskId, i, &sDecorRearrangementDataBuffer[0]) == TRUE)
{
- data->idx = i;
- sCurDecorSelectedInRearrangement ++;
+ sDecorRearrangementDataBuffer[0].idx = i;
+ sCurDecorSelectedInRearrangement++;
break;
}
}
@@ -2537,95 +2534,13 @@ void sub_812A0E8(u8 taskId)
{
xOff = gUnknown_0203A17C.pos[sDecorRearrangementDataBuffer[0].idx] >> 4;
yOff = gUnknown_0203A17C.pos[sDecorRearrangementDataBuffer[0].idx] & 0x0F;
- sub_812A040(xOff, yOff - sDecorRearrangementDataBuffer[0].height + 1, xOff + sDecorRearrangementDataBuffer[0].width - 1, yOff); // Arithmetic register swap at the r2 argument: `add r2, r0, r2` instead of `add r2, r2, r0`
+ var1 = yOff - sDecorRearrangementDataBuffer[0].height + 1;
+ var2 = sDecorRearrangementDataBuffer[0].width + xOff - 1;
+
+ sub_812A040(xOff, var1, var2, yOff);
}
}
}
-#else
-__attribute__((naked)) void sub_812A0E8(u8 taskId)
-{
- asm_unified("\tpush {r4-r7,lr}\n"
- "\tlsls r0, 24\n"
- "\tlsrs r6, r0, 24\n"
- "\tldr r4, =sCurDecorSelectedInRearrangement\n"
- "\tmovs r0, 0\n"
- "\tstrb r0, [r4]\n"
- "\tadds r0, r6, 0\n"
- "\tbl sub_8129FC8\n"
- "\tlsls r0, 24\n"
- "\tlsrs r0, 24\n"
- "\tcmp r0, 0x1\n"
- "\tbeq _0812A18C\n"
- "\tmovs r5, 0\n"
- "\tldr r0, =gUnknown_0203A17C\n"
- "\tldrb r1, [r0, 0x8]\n"
- "\tcmp r5, r1\n"
- "\tbcs _0812A15A\n"
- "\tadds r7, r4, 0\n"
- "_0812A10E:\n"
- "\tldr r0, [r0]\n"
- "\tadds r0, r5\n"
- "\tldrb r1, [r0]\n"
- "\tcmp r1, 0\n"
- "\tbeq _0812A14C\n"
- "\tldr r4, =sDecorRearrangementDataBuffer\n"
- "\tadds r0, r1, 0\n"
- "\tadds r1, r4, 0\n"
- "\tbl sub_8129D8C\n"
- "\tadds r0, r6, 0\n"
- "\tadds r1, r5, 0\n"
- "\tadds r2, r4, 0\n"
- "\tbl sub_8129E74\n"
- "\tlsls r0, 24\n"
- "\tlsrs r0, 24\n"
- "\tcmp r0, 0x1\n"
- "\tbne _0812A14C\n"
- "\tstrb r5, [r4]\n"
- "\tldrb r0, [r7]\n"
- "\tadds r0, 0x1\n"
- "\tstrb r0, [r7]\n"
- "\tb _0812A15A\n"
- "\t.pool\n"
- "_0812A14C:\n"
- "\tadds r0, r5, 0x1\n"
- "\tlsls r0, 24\n"
- "\tlsrs r5, r0, 24\n"
- "\tldr r0, =gUnknown_0203A17C\n"
- "\tldrb r1, [r0, 0x8]\n"
- "\tcmp r5, r1\n"
- "\tbcc _0812A10E\n"
- "_0812A15A:\n"
- "\tldr r0, =sCurDecorSelectedInRearrangement\n"
- "\tldrb r0, [r0]\n"
- "\tcmp r0, 0\n"
- "\tbeq _0812A18C\n"
- "\tldr r0, =gUnknown_0203A17C\n"
- "\tldr r2, =sDecorRearrangementDataBuffer\n"
- "\tldrb r1, [r2]\n"
- "\tldr r0, [r0, 0x4]\n"
- "\tadds r0, r1\n"
- "\tldrb r1, [r0]\n"
- "\tlsrs r0, r1, 4\n"
- "\tmovs r3, 0xF\n"
- "\tands r3, r1\n"
- "\tldrb r1, [r2, 0x2]\n"
- "\tsubs r1, r3, r1\n"
- "\tadds r1, 0x1\n"
- "\tlsls r1, 24\n"
- "\tlsrs r1, 24\n"
- "\tldrb r2, [r2, 0x1]\n"
- "\tadds r2, r0\n"
- "\tsubs r2, 0x1\n"
- "\tlsls r2, 24\n"
- "\tlsrs r2, 24\n"
- "\tbl sub_812A040\n"
- "_0812A18C:\n"
- "\tpop {r4-r7}\n"
- "\tpop {r0}\n"
- "\tbx r0\n"
- "\t.pool");
-}
-#endif
void sub_812A1A0(u8 taskId)
{
@@ -2673,7 +2588,7 @@ void sub_812A25C(u8 taskId)
case 1:
sub_812A3C8();
gFieldCallback = sub_812A334;
- SetMainCallback2(c2_exit_to_overworld_2_switch);
+ SetMainCallback2(CB2_ReturnToField);
DestroyTask(taskId);
break;
}
@@ -2699,7 +2614,7 @@ void sub_812A2C4(u8 taskId)
data[2] ++;
break;
case 3:
- if (sub_80ABDFC() == TRUE)
+ if (IsWeatherNotFadingIn() == TRUE)
{
gTasks[taskId].func = sub_8126B80;
}
diff --git a/src/dewford_trend.c b/src/dewford_trend.c
new file mode 100644
index 000000000..3ceec6563
--- /dev/null
+++ b/src/dewford_trend.c
@@ -0,0 +1,340 @@
+#include "global.h"
+#include "dewford_trend.h"
+#include "easy_chat.h"
+#include "constants/easy_chat.h"
+#include "event_data.h"
+#include "link.h"
+#include "malloc.h"
+#include "random.h"
+#include "text.h"
+#include "tv.h"
+
+// static functions
+static void sub_8122804(struct EasyChatPair *s, u16 b, u8 c);
+static bool8 sub_8122A58(struct EasyChatPair *a, struct EasyChatPair *b, u8 c);
+static void sub_8122B28(struct EasyChatPair *s);
+static bool8 SB1ContainsWords(u16 *a);
+static bool8 IsEasyChatPairEqual(u16 *words1, u16 *words2);
+static s16 GetEqualEasyChatPairIndex(struct EasyChatPair *s, struct EasyChatPair *a, u16 b);
+
+// text
+void InitDewfordTrend(void)
+{
+ u16 i;
+
+ for (i = 0; i < 5; i++)
+ {
+ gSaveBlock1Ptr->easyChatPairs[i].words[0] = sub_811EE38(EC_GROUP_CONDITIONS);
+
+ if (Random() & 1)
+ gSaveBlock1Ptr->easyChatPairs[i].words[1] = sub_811EE38(EC_GROUP_LIFESTYLE);
+ else
+ gSaveBlock1Ptr->easyChatPairs[i].words[1] = sub_811EE38(EC_GROUP_HOBBIES);
+
+ gSaveBlock1Ptr->easyChatPairs[i].unk1_6 = Random() & 1;
+ sub_8122B28(&(gSaveBlock1Ptr->easyChatPairs[i]));
+ }
+ sub_8122804(gSaveBlock1Ptr->easyChatPairs, 5, 0);
+}
+
+void UpdateDewfordTrendPerDay(u16 a)
+{
+ u16 i;
+
+ if (a != 0)
+ {
+ u32 sp0 = a * 5;
+
+ for (i = 0; i < 5; i++)
+ {
+ u32 r4;
+ u32 r2 = sp0;
+ struct EasyChatPair *r5 = &(gSaveBlock1Ptr->easyChatPairs[i]);
+
+ if (r5->unk1_6 == 0)
+ {
+ if (r5->unk0_0 >= (u16)r2)
+ {
+ r5->unk0_0 -= r2;
+ if (r5->unk0_0 == 0)
+ r5->unk1_6 = 1;
+ continue;
+ }
+ r2 -= r5->unk0_0;
+ r5->unk0_0 = 0;
+ r5->unk1_6 = 1;
+ }
+ r4 = r5->unk0_0 + r2;
+ if ((u16)r4 > r5->unk0_7)
+ {
+ u32 sp4 = r4 % r5->unk0_7;
+ r4 = r4 / r5->unk0_7;
+
+ r5->unk1_6 = r4 ^ 1;
+ if (r5->unk1_6)
+ r5->unk0_0 = sp4;
+ else
+ r5->unk0_0 = r5->unk0_7 - sp4;
+ }
+ else
+ {
+ r5->unk0_0 = r4;
+
+ if (r5->unk0_0 == r5->unk0_7)
+ r5->unk1_6 = 0;
+ }
+ }
+ sub_8122804(gSaveBlock1Ptr->easyChatPairs, 5, 0);
+ }
+}
+
+
+bool8 sub_81226D8(u16 *a)
+{
+ struct EasyChatPair s = {0};
+ u16 i;
+
+ if (!SB1ContainsWords(a))
+ {
+ if (!FlagGet(FLAG_SYS_POPWORD_INPUT))
+ {
+ FlagSet(FLAG_SYS_POPWORD_INPUT);
+ if (!FlagGet(FLAG_SYS_MIX_RECORD))
+ {
+ gSaveBlock1Ptr->easyChatPairs[0].words[0] = a[0];
+ gSaveBlock1Ptr->easyChatPairs[0].words[1] = a[1];
+ return TRUE;
+ }
+ }
+
+ s.words[0] = a[0];
+ s.words[1] = a[1];
+ s.unk1_6 = 1;
+ sub_8122B28(&s);
+
+ for (i = 0; i < 5; i++)
+ {
+ if (sub_8122A58(&s, &(gSaveBlock1Ptr->easyChatPairs[i]), 0))
+ {
+ u16 r3 = 4;
+
+ while (r3 > i)
+ {
+ gSaveBlock1Ptr->easyChatPairs[r3] = gSaveBlock1Ptr->easyChatPairs[r3 - 1];
+ r3--;
+ }
+ gSaveBlock1Ptr->easyChatPairs[i] = s;
+ if(i == 4)
+ sub_80EDC60(a);
+ return (i == 0);
+ }
+ }
+ gSaveBlock1Ptr->easyChatPairs[4] = s;
+ sub_80EDC60(a);
+ }
+ return FALSE;
+}
+
+
+static void sub_8122804(struct EasyChatPair *s, u16 b, u8 c)
+{
+ u16 h;
+
+ for (h = 0; h < b; h++)
+ {
+ u16 i;
+
+ for (i = h + 1; i < b; i++)
+ {
+ if (sub_8122A58(&s[i], &s[h], c))
+ {
+ struct EasyChatPair temp;
+
+ temp = s[i];
+ s[i] = s[h];
+ s[h] = temp;
+ }
+ }
+ }
+}
+
+void sub_812287C(void *a, u32 b, u8 unused)
+{
+ u16 i, j, r3, players;
+ struct EasyChatPair *buffer1, *buffer2, *src, *dst, *foo_of_buffer2;
+
+ buffer1 = Alloc(0x100);
+ if(buffer1 != NULL)
+ {
+ buffer2 = Alloc(0x100);
+ if(buffer2 == NULL)
+ {
+ Free(buffer1);
+ }
+ else
+ {
+ players = GetLinkPlayerCount();
+ for (i = 0; i < players; i++)
+ memcpy(&(buffer1[i * 5]), (u8 *)a + i * b, 40);
+ src = buffer1;
+ dst = buffer2;
+ r3 = 0;
+ for (i = 0; i < players; i++)
+ {
+ for (j = 0; j < 5; j++)
+ {
+ s16 foo = GetEqualEasyChatPairIndex(buffer2, src, r3);
+ if (foo < 0)
+ {
+ *(dst++) = *src;
+ r3++;
+ }
+ else
+ {
+ foo_of_buffer2 = (struct EasyChatPair *)((u32)buffer2 + (foo * 8)); //required to do this to reverse the order of register operands in add ASM statement
+ if (foo_of_buffer2->unk0_0 < src->unk0_0)
+ {
+ *foo_of_buffer2 = *src;
+ }
+ }
+ src++;
+ }
+ }
+ sub_8122804(buffer2, r3, 2);
+ src = buffer2;
+ dst = gSaveBlock1Ptr->easyChatPairs;
+ for (i = 0; i < 5; i++)
+ *(dst++) = *(src++);
+ Free(buffer1);
+ Free(buffer2);
+ }
+ }
+}
+
+void BufferTrendyPhraseString(void)
+{
+ struct EasyChatPair *s = &gSaveBlock1Ptr->easyChatPairs[gSpecialVar_0x8004];
+
+ ConvertEasyChatWordsToString(gStringVar1, s->words, 2, 1);
+}
+
+void TrendyPhraseIsOld(void)
+{
+ u16 result = 0;
+
+ if (gSaveBlock1Ptr->easyChatPairs[0].unk0_0 - gSaveBlock1Ptr->easyChatPairs[1].unk0_0 < 2)
+ {
+ asm("":::"r2"); //Force the compiler to store address of gSaveBlock1 in r3 instead of r2
+ if (!gSaveBlock1Ptr->easyChatPairs[0].unk1_6 && gSaveBlock1Ptr->easyChatPairs[1].unk1_6)
+ result = 1;
+ }
+ gSpecialVar_Result = result;
+}
+
+void GetDewfordHallPaintingNameIndex(void)
+{
+ gSpecialVar_Result = (gSaveBlock1Ptr->easyChatPairs[0].words[0] + gSaveBlock1Ptr->easyChatPairs[0].words[1]) & 7;
+}
+
+static bool8 sub_8122A58(struct EasyChatPair *a, struct EasyChatPair *b, u8 c)
+{
+ switch (c)
+ {
+ case 0:
+ if (a->unk0_0 > b->unk0_0)
+ return 1;
+ if (a->unk0_0 < b->unk0_0)
+ return 0;
+ if (a->unk0_7 > b->unk0_7)
+ return 1;
+ if (a->unk0_7 < b->unk0_7)
+ return 0;
+ break;
+ case 1:
+ if (a->unk0_7 > b->unk0_7)
+ return 1;
+ if (a->unk0_7 < b->unk0_7)
+ return 0;
+ if (a->unk0_0 > b->unk0_0)
+ return 1;
+ if (a->unk0_0 < b->unk0_0)
+ return 0;
+ break;
+ case 2:
+ if (a->unk0_0 > b->unk0_0)
+ return 1;
+ if (a->unk0_0 < b->unk0_0)
+ return 0;
+ if (a->unk0_7 > b->unk0_7)
+ return 1;
+ if (a->unk0_7 < b->unk0_7)
+ return 0;
+ if (a->unk2 > b->unk2)
+ return 1;
+ if (a->unk2 < b->unk2)
+ return 0;
+ if (a->words[0] > b->words[0])
+ return 1;
+ if (a->words[0] < b->words[0])
+ return 0;
+ if (a->words[1] > b->words[1])
+ return 1;
+ if (a->words[1] < b->words[1])
+ return 0;
+ return 1;
+ }
+ return Random() & 1;
+}
+
+static void sub_8122B28(struct EasyChatPair *s)
+{
+ u16 r4;
+
+ r4 = Random() % 98;
+ if (r4 > 50)
+ {
+ r4 = Random() % 98;
+ if (r4 > 80)
+ r4 = Random() % 98;
+ }
+ s->unk0_7 = r4 + 30;
+ s->unk0_0 = (Random() % (r4 + 1)) + 30;
+ s->unk2 = Random();
+}
+
+static bool8 SB1ContainsWords(u16 *a)
+{
+ u16 i;
+
+ for (i = 0; i < 5; i++)
+ {
+ if (IsEasyChatPairEqual(a, gSaveBlock1Ptr->easyChatPairs[i].words) != 0)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static bool8 IsEasyChatPairEqual(u16 *words1, u16 *words2)
+{
+ u16 i;
+
+ for (i = 0; i < 2; i++)
+ {
+ if (*(words1++) != *(words2++))
+ return FALSE;
+ }
+ return TRUE;
+}
+
+static s16 GetEqualEasyChatPairIndex(struct EasyChatPair*s, struct EasyChatPair *a, u16 b)
+{
+ s16 i;
+
+ for (i = 0; i < b; i++)
+ {
+ if (IsEasyChatPairEqual(a->words, s->words))
+ return i;
+ s++;
+ }
+ return -1;
+}
diff --git a/src/egg_hatch.c b/src/egg_hatch.c
index 5a2fe5ca2..8914d6ff3 100644
--- a/src/egg_hatch.c
+++ b/src/egg_hatch.c
@@ -25,6 +25,7 @@
#include "window.h"
#include "constants/abilities.h"
#include "daycare.h"
+#include "overworld.h"
#include "battle.h" // to get rid of later
struct EggHatchData
@@ -44,9 +45,6 @@ struct EggHatchData
u8 textColor[3];
};
-extern struct SpriteTemplate gUnknown_0202499C;
-extern void (*gFieldCallback)(void);
-
extern const struct CompressedSpriteSheet gMonFrontPicTable[];
extern const u8 gBattleTextboxTiles[];
extern const u8 gBattleTextboxTilemap[];
@@ -58,20 +56,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 CB2_ReturnToField(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 +432,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;
@@ -571,7 +563,7 @@ static void EggHatchSetMonNickname(void)
SetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_NICKNAME, gStringVar3);
FreeMonSpritesGfx();
Free(sEggHatchData);
- SetMainCallback2(c2_exit_to_overworld_2_switch);
+ SetMainCallback2(CB2_ReturnToField);
}
static void Task_EggHatchPlayBGM(u8 taskID)
@@ -582,10 +574,10 @@ static void Task_EggHatchPlayBGM(u8 taskID)
play_some_sound();
}
if (gTasks[taskID].data[0] == 1)
- PlayBGM(376);
+ PlayBGM(MUS_ME_SHINKA);
if (gTasks[taskID].data[0] > 60)
{
- PlayBGM(377);
+ PlayBGM(MUS_SHINKA);
DestroyTask(taskID);
// UB: task is destroyed, yet the value is incremented
}
@@ -695,7 +687,7 @@ static void CB2_EggHatch_1(void)
UnsetBgTilemapBuffer(0);
UnsetBgTilemapBuffer(1);
Free(sEggHatchData);
- SetMainCallback2(c2_exit_to_overworld_2_switch);
+ SetMainCallback2(CB2_ReturnToField);
}
break;
}
diff --git a/src/evolution_scene.c b/src/evolution_scene.c
index f38f9f19c..74eac32de 100644
--- a/src/evolution_scene.c
+++ b/src/evolution_scene.c
@@ -48,9 +48,7 @@ extern u16 gBattle_BG2_X;
extern u16 gBattle_BG2_Y;
extern u16 gBattle_BG3_X;
extern u16 gBattle_BG3_Y;
-extern struct SpriteTemplate gUnknown_0202499C;
extern bool8 gAffineAnimsDisabled;
-extern u16 gMoveToLearn;
extern const u8 gSpeciesNames[][11];
#define sEvoCursorPos gBattleCommunication[1] // when learning a new move
@@ -60,16 +58,8 @@ extern const struct WindowTemplate gUnknown_0833900C;
extern const struct CompressedSpriteSheet gMonFrontPicTable[];
// strings
-extern const u8 gText_PkmnIsEvolving[];
-extern const u8 gText_CongratsPkmnEvolved[];
-extern const u8 gText_BattleYesNoChoice[];
-extern const u8 gText_PkmnStoppedEvolving[];
-extern const u8 gText_EllipsisQuestionMark[];
extern const u8 gText_CommunicationStandby5[];
-extern void 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);
@@ -471,10 +461,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++;
@@ -1255,7 +1245,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/field_camera.c b/src/field_camera.c
index 17ced6aa5..95167ee10 100644
--- a/src/field_camera.c
+++ b/src/field_camera.c
@@ -1,9 +1,20 @@
-
-// Includes
#include "global.h"
+#include "berry.h"
+#include "bike.h"
+#include "field_camera.h"
+#include "field_player_avatar.h"
+#include "fieldmap.h"
+#include "field_map_obj.h"
+#include "gpu_regs.h"
+#include "menu.h"
+#include "overworld.h"
+#include "rotating_gate.h"
+#include "sprite.h"
+#include "text.h"
-// Static type declarations
+EWRAM_DATA bool8 gUnusedBikeCameraAheadPanback = FALSE;
+// Static type declarations
struct FieldCameraUnknownStruct
{
u8 unk0;
@@ -13,16 +24,478 @@ struct FieldCameraUnknownStruct
bool8 unk4;
};
-// Static RAM declarations
+// static functions
+static void RedrawMapSliceNorth(struct FieldCameraUnknownStruct *a, const struct MapData *mapData);
+static void RedrawMapSliceSouth(struct FieldCameraUnknownStruct *a, const struct MapData *mapData);
+static void RedrawMapSliceEast(struct FieldCameraUnknownStruct *a, const struct MapData *mapData);
+static void RedrawMapSliceWest(struct FieldCameraUnknownStruct *a, const struct MapData *mapData);
+static s32 MapPosToBgTilemapOffset(struct FieldCameraUnknownStruct *a, s32 x, s32 y);
+static void DrawWholeMapViewInternal(int x, int y, const struct MapData *mapData);
+static void DrawMetatileAt(const struct MapData *mapData, u16, int, int);
+static void DrawMetatile(s32 a, u16 *b, u16 c);
+static void CameraPanningCB_PanAhead(void);
+
+// IWRAM bss vars
+static IWRAM_DATA struct FieldCameraUnknownStruct gUnknown_03000E20;
+static IWRAM_DATA s16 gUnknown_03000E28;
+static IWRAM_DATA s16 gUnknown_03000E2A;
+static IWRAM_DATA u8 gUnknown_03000E2C;
+static IWRAM_DATA void (*gUnknown_03000E30)(void);
+
+struct CameraObject gUnknown_03005DD0;
+u16 gUnknown_03005DE8;
+u16 gUnknown_03005DEC;
+
+// text
+static void move_tilemap_camera_to_upper_left_corner_(struct FieldCameraUnknownStruct *a)
+{
+ a->unk2 = 0;
+ a->unk3 = 0;
+ a->unk0 = 0;
+ a->unk1 = 0;
+ a->unk4 = TRUE;
+}
+
+static void tilemap_move_something(struct FieldCameraUnknownStruct *a, u32 b, u32 c)
+{
+ a->unk2 += b;
+ a->unk2 %= 32;
+ a->unk3 += c;
+ a->unk3 %= 32;
+}
+
+static void coords8_add(struct FieldCameraUnknownStruct *a, u32 b, u32 c)
+{
+ a->unk0 += b;
+ a->unk1 += c;
+}
+
+void move_tilemap_camera_to_upper_left_corner(void)
+{
+ move_tilemap_camera_to_upper_left_corner_(&gUnknown_03000E20);
+}
+
+void FieldUpdateBgTilemapScroll(void)
+{
+ u32 r4, r5;
+ r5 = gUnknown_03000E20.unk0 + gUnknown_03000E28;
+ r4 = gUnknown_03000E2A + gUnknown_03000E20.unk1 + 8;
+
+ SetGpuReg(REG_OFFSET_BG1HOFS, r5);
+ SetGpuReg(REG_OFFSET_BG1VOFS, r4);
+ SetGpuReg(REG_OFFSET_BG2HOFS, r5);
+ SetGpuReg(REG_OFFSET_BG2VOFS, r4);
+ SetGpuReg(REG_OFFSET_BG3HOFS, r5);
+ SetGpuReg(REG_OFFSET_BG3VOFS, r4);
+}
+
+void sub_8089C08(s16 *a, s16 *b)
+{
+ *a = gUnknown_03000E20.unk0 + gUnknown_03000E28;
+ *b = gUnknown_03000E20.unk1 + gUnknown_03000E2A + 8;
+}
+
+void DrawWholeMapView(void)
+{
+ DrawWholeMapViewInternal(gSaveBlock1Ptr->pos.x, gSaveBlock1Ptr->pos.y, gMapHeader.mapData);
+ gUnknown_03000E20.unk4 = TRUE;
+}
+
+static void DrawWholeMapViewInternal(int x, int y, const struct MapData *mapData)
+{
+ u8 i;
+ u8 j;
+ u32 r6;
+ u8 temp;
+
+ for (i = 0; i < 32; i += 2)
+ {
+ temp = gUnknown_03000E20.unk3 + i;
+ if (temp >= 32)
+ temp -= 32;
+ r6 = temp * 32;
+ for (j = 0; j < 32; j += 2)
+ {
+ temp = gUnknown_03000E20.unk2 + j;
+ if (temp >= 32)
+ temp -= 32;
+ DrawMetatileAt(mapData, r6 + temp, x + j / 2, y + i / 2);
+ }
+ }
+}
+
+static void RedrawMapSlicesForCameraUpdate(struct FieldCameraUnknownStruct *a, int x, int y)
+{
+ const struct MapData *mapData = gMapHeader.mapData;
+
+ if (x > 0)
+ RedrawMapSliceWest(a, mapData);
+ if (x < 0)
+ RedrawMapSliceEast(a, mapData);
+ if (y > 0)
+ RedrawMapSliceNorth(a, mapData);
+ if (y < 0)
+ RedrawMapSliceSouth(a, mapData);
+ a->unk4 = TRUE;
+}
+
+static void RedrawMapSliceNorth(struct FieldCameraUnknownStruct *a, const struct MapData *mapData)
+{
+ u8 i;
+ u8 temp;
+ u32 r7;
+
+ temp = a->unk3 + 28;
+ if (temp >= 32)
+ temp -= 32;
+ r7 = temp * 32;
+ for (i = 0; i < 32; i += 2)
+ {
+ temp = a->unk2 + i;
+ if (temp >= 32)
+ temp -= 32;
+ DrawMetatileAt(mapData, r7 + temp, gSaveBlock1Ptr->pos.x + i / 2, gSaveBlock1Ptr->pos.y + 14);
+ }
+}
+
+static void RedrawMapSliceSouth(struct FieldCameraUnknownStruct *a, const struct MapData *mapData)
+{
+ u8 i;
+ u8 temp;
+ u32 r7 = a->unk3 * 32;
+
+ for (i = 0; i < 32; i += 2)
+ {
+ temp = a->unk2 + i;
+ if (temp >= 32)
+ temp -= 32;
+ DrawMetatileAt(mapData, r7 + temp, gSaveBlock1Ptr->pos.x + i / 2, gSaveBlock1Ptr->pos.y);
+ }
+}
+
+static void RedrawMapSliceEast(struct FieldCameraUnknownStruct *a, const struct MapData *mapData)
+{
+ u8 i;
+ u8 temp;
+ u32 r6 = a->unk2;
+
+ for (i = 0; i < 32; i += 2)
+ {
+ temp = a->unk3 + i;
+ if (temp >= 32)
+ temp -= 32;
+ DrawMetatileAt(mapData, temp * 32 + r6, gSaveBlock1Ptr->pos.x, gSaveBlock1Ptr->pos.y + i / 2);
+ }
+}
+
+static void RedrawMapSliceWest(struct FieldCameraUnknownStruct *a, const struct MapData *mapData)
+{
+ u8 i;
+ u8 temp;
+ u8 r5 = a->unk2 + 28;
+
+ if (r5 >= 32)
+ r5 -= 32;
+ for (i = 0; i < 32; i += 2)
+ {
+ temp = a->unk3 + i;
+ if (temp >= 32)
+ temp -= 32;
+ DrawMetatileAt(mapData, temp * 32 + r5, gSaveBlock1Ptr->pos.x + 14, gSaveBlock1Ptr->pos.y + i / 2);
+ }
+}
+
+void CurrentMapDrawMetatileAt(int a, int b)
+{
+ int offset = MapPosToBgTilemapOffset(&gUnknown_03000E20, a, b);
+
+ if (offset >= 0)
+ {
+ DrawMetatileAt(gMapHeader.mapData, offset, a, b);
+ gUnknown_03000E20.unk4 = TRUE;
+ }
+}
+
+void DrawDoorMetatileAt(int x, int y, u16 *arr)
+{
+ int offset = MapPosToBgTilemapOffset(&gUnknown_03000E20, x, y);
+
+ if (offset >= 0)
+ {
+ DrawMetatile(1, arr, offset);
+ gUnknown_03000E20.unk4 = TRUE;
+ }
+}
+
+static void DrawMetatileAt(const struct MapData *mapData, u16 b, int c, int d)
+{
+ u16 metatileId = MapGridGetMetatileIdAt(c, d);
+ u16 *metatiles;
+
+ if (metatileId > 1024)
+ metatileId = 0;
+ if (metatileId < 512)
+ metatiles = mapData->primaryTileset->metatiles;
+ else
+ {
+ metatiles = mapData->secondaryTileset->metatiles;
+ metatileId -= 512;
+ }
+ DrawMetatile(MapGridGetMetatileLayerTypeAt(c, d), metatiles + metatileId * 8, b);
+}
+
+static void DrawMetatile(s32 a, u16 *b, u16 c)
+{
+ switch (a)
+ {
+ case 2:
+ gBGTilemapBuffers3[c] = b[0];
+ gBGTilemapBuffers3[c + 1] = b[1];
+ gBGTilemapBuffers3[c + 0x20] = b[2];
+ gBGTilemapBuffers3[c + 0x21] = b[3];
+
+ gBGTilemapBuffers1[c] = 0;
+ gBGTilemapBuffers1[c + 1] = 0;
+ gBGTilemapBuffers1[c + 0x20] = 0;
+ gBGTilemapBuffers1[c + 0x21] = 0;
+
+ gBGTilemapBuffers2[c] = b[4];
+ gBGTilemapBuffers2[c + 1] = b[5];
+ gBGTilemapBuffers2[c + 0x20] = b[6];
+ gBGTilemapBuffers2[c + 0x21] = b[7];
+ break;
+ case 1:
+ gBGTilemapBuffers3[c] = b[0];
+ gBGTilemapBuffers3[c + 1] = b[1];
+ gBGTilemapBuffers3[c + 0x20] = b[2];
+ gBGTilemapBuffers3[c + 0x21] = b[3];
+
+ gBGTilemapBuffers1[c] = b[4];
+ gBGTilemapBuffers1[c + 1] = b[5];
+ gBGTilemapBuffers1[c + 0x20] = b[6];
+ gBGTilemapBuffers1[c + 0x21] = b[7];
+
+ gBGTilemapBuffers2[c] = 0;
+ gBGTilemapBuffers2[c + 1] = 0;
+ gBGTilemapBuffers2[c + 0x20] = 0;
+ gBGTilemapBuffers2[c + 0x21] = 0;
+ break;
+ case 0:
+ gBGTilemapBuffers3[c] = 0x3014;
+ gBGTilemapBuffers3[c + 1] = 0x3014;
+ gBGTilemapBuffers3[c + 0x20] = 0x3014;
+ gBGTilemapBuffers3[c + 0x21] = 0x3014;
+
+ gBGTilemapBuffers1[c] = b[0];
+ gBGTilemapBuffers1[c + 1] = b[1];
+ gBGTilemapBuffers1[c + 0x20] = b[2];
+ gBGTilemapBuffers1[c + 0x21] = b[3];
+
+ gBGTilemapBuffers2[c] = b[4];
+ gBGTilemapBuffers2[c + 1] = b[5];
+ gBGTilemapBuffers2[c + 0x20] = b[6];
+ gBGTilemapBuffers2[c + 0x21] = b[7];
+ break;
+ }
+ schedule_bg_copy_tilemap_to_vram(1);
+ schedule_bg_copy_tilemap_to_vram(2);
+ schedule_bg_copy_tilemap_to_vram(3);
+}
+
+static s32 MapPosToBgTilemapOffset(struct FieldCameraUnknownStruct *a, s32 x, s32 y)
+{
+ x -= gSaveBlock1Ptr->pos.x;
+ x *= 2;
+ if (x >= 32 || x < 0)
+ return -1;
+ x = x + a->unk2;
+ if (x >= 32)
+ x -= 32;
+
+ y = (y - gSaveBlock1Ptr->pos.y) * 2;
+ if (y >= 32 || y < 0)
+ return -1;
+ y = y + a->unk3;
+ if (y >= 32)
+ y -= 32;
+
+ return y * 32 + x;
+}
+
+static void CameraUpdateCallback(struct CameraObject *a)
+{
+ if (a->spriteId != 0)
+ {
+ a->unk8 = gSprites[a->spriteId].data[2];
+ a->unkC = gSprites[a->spriteId].data[3];
+ }
+}
+
+void ResetCameraUpdateInfo(void)
+{
+ gUnknown_03005DD0.unk8 = 0;
+ gUnknown_03005DD0.unkC = 0;
+ gUnknown_03005DD0.x = 0;
+ gUnknown_03005DD0.y = 0;
+ gUnknown_03005DD0.spriteId = 0;
+ gUnknown_03005DD0.callback = NULL;
+}
-IWRAM_DATA struct FieldCameraUnknownStruct gUnknown_03000E20;
-IWRAM_DATA s16 gUnknown_03000E28;
-IWRAM_DATA s16 gUnknown_03000E2A;
-IWRAM_DATA u8 gUnknown_03000E2C;
-IWRAM_DATA void (*gUnknown_03000E30)(void);
+u32 InitCameraUpdateCallback(u8 a)
+{
+ if (gUnknown_03005DD0.spriteId != 0)
+ DestroySprite(&gSprites[gUnknown_03005DD0.spriteId]);
+ gUnknown_03005DD0.spriteId = AddCameraObject(a);
+ gUnknown_03005DD0.callback = CameraUpdateCallback;
+ return 0;
+}
+
+void CameraUpdate(void)
+{
+ int deltaX;
+ int deltaY;
+ int r0;
+ int r1;
+ int r7;
+ int r8;
+
+ if (gUnknown_03005DD0.callback != NULL)
+ gUnknown_03005DD0.callback(&gUnknown_03005DD0);
+ r7 = gUnknown_03005DD0.unk8;
+ r8 = gUnknown_03005DD0.unkC;
+ deltaX = 0;
+ deltaY = 0;
+ r1 = gUnknown_03005DD0.x;
+ r0 = gUnknown_03005DD0.y;
+
+
+ if (r1 == 0 && r7 != 0)
+ {
+ if (r7 > 0)
+ deltaX = 1;
+ else
+ deltaX = -1;
+ }
+ if (r0 == 0 && r8 != 0)
+ {
+ if (r8 > 0)
+ deltaY = 1;
+ else
+ deltaY = -1;
+ }
+ if (r1 != 0 && r1 == -r7)
+ {
+ if (r7 > 0)
+ deltaX = 1;
+ else
+ deltaX = -1;
+ }
+ if (r0 != 0 && r0 == -r8)
+ {
+ if (r8 > 0)
+ deltaX = 1;
+ else
+ deltaX = -1;
+ }
+
+ gUnknown_03005DD0.x += r7;
+ gUnknown_03005DD0.x = gUnknown_03005DD0.x - 16 * (gUnknown_03005DD0.x / 16);
+ gUnknown_03005DD0.y += r8;
+ gUnknown_03005DD0.y = gUnknown_03005DD0.y - 16 * (gUnknown_03005DD0.y / 16);
+
+ if (deltaX != 0 || deltaY != 0)
+ {
+ CameraMove(deltaX, deltaY);
+ UpdateFieldObjectsForCameraUpdate(deltaX, deltaY);
+ RotatingGatePuzzleCameraUpdate(deltaX, deltaY);
+ ResetBerryTreeSparkleFlags();
+ tilemap_move_something(&gUnknown_03000E20, deltaX * 2, deltaY * 2);
+ RedrawMapSlicesForCameraUpdate(&gUnknown_03000E20, deltaX * 2, deltaY * 2);
+ }
+
+ coords8_add(&gUnknown_03000E20, r7, r8);
+ gUnknown_03005DEC -= r7;
+ gUnknown_03005DE8 -= r8;
+}
+
+void camera_move_and_redraw(int a, int b) //unused
+{
+ CameraMove(a, b);
+ UpdateFieldObjectsForCameraUpdate(a, b);
+ DrawWholeMapView();
+ gUnknown_03005DEC -= a * 16;
+ gUnknown_03005DE8 -= b * 16;
+}
+
+void SetCameraPanningCallback(void (*a)(void))
+{
+ gUnknown_03000E30 = a;
+}
+
+void SetCameraPanning(s16 a, s16 b)
+{
+ gUnknown_03000E28 = a;
+ gUnknown_03000E2A = b + 32;
+}
+
+void InstallCameraPanAheadCallback(void)
+{
+ gUnknown_03000E30 = CameraPanningCB_PanAhead;
+ gUnknown_03000E2C = 0;
+ gUnknown_03000E28 = 0;
+ gUnknown_03000E2A = 32;
+}
+
+void UpdateCameraPanning(void)
+{
+ if (gUnknown_03000E30 != NULL)
+ gUnknown_03000E30();
+ //Update sprite offset of overworld objects
+ gSpriteCoordOffsetX = gUnknown_03005DEC - gUnknown_03000E28;
+ gSpriteCoordOffsetY = gUnknown_03005DE8 - gUnknown_03000E2A - 8;
+}
+
+static void CameraPanningCB_PanAhead(void)
+{
+ u8 var;
-// Static ROM declarations
+ if (gUnusedBikeCameraAheadPanback == FALSE)
+ {
+ InstallCameraPanAheadCallback();
+ }
+ else
+ {
+ // this code is never reached.
+ if (gPlayerAvatar.tileTransitionState == T_TILE_TRANSITION)
+ {
+ gUnknown_03000E2C ^= 1;
+ if (gUnknown_03000E2C == 0)
+ return;
+ }
+ else
+ {
+ gUnknown_03000E2C = 0;
+ }
-// .rodata
+ var = player_get_direction_upper_nybble();
+ if (var == 2)
+ {
+ if (gUnknown_03000E2A > -8)
+ gUnknown_03000E2A -= 2;
+ }
+ else if (var == 1)
+ {
+ if (gUnknown_03000E2A < 72)
+ gUnknown_03000E2A += 2;
+ }
+ else if (gUnknown_03000E2A < 32)
+ {
+ gUnknown_03000E2A += 2;
+ }
+ else if (gUnknown_03000E2A > 32)
+ {
+ gUnknown_03000E2A -= 2;
+ }
+ }
+}
-// .text
diff --git a/src/field_effect.c b/src/field_effect.c
index 628dc776a..692090779 100644
--- a/src/field_effect.c
+++ b/src/field_effect.c
@@ -1,15 +1,3897 @@
// Includes
#include "global.h"
+#include "field_effect.h"
+#include "battle_dome_cards.h"
+#include "decompress.h"
+#include "field_camera.h"
+#include "field_effect_helpers.h"
+#include "field_map_obj.h"
+#include "field_map_obj_helpers.h"
+#include "field_player_avatar.h"
+#include "field_screen.h"
+#include "field_weather.h"
+#include "fieldmap.h"
+#include "fldeff_groundshake.h"
+#include "gpu_regs.h"
+#include "main.h"
+#include "menu.h"
+#include "metatile_behavior.h"
+#include "overworld.h"
+#include "palette.h"
+#include "party_menu.h"
+#include "pokemon.h"
+#include "script.h"
+#include "sound.h"
+#include "sprite.h"
+#include "task.h"
+#include "trig.h"
+#include "util.h"
+#include "constants/rgb.h"
+#include "constants/songs.h"
+
+#define subsprite_table(ptr) {.subsprites = ptr, .subspriteCount = (sizeof ptr) / (sizeof(struct Subsprite))}
+
+EWRAM_DATA s32 gFieldEffectArguments[8] = {0};
// Static type declarations
// Static RAM declarations
-IWRAM_DATA u8 gUnknown_03000F58[32];
+static IWRAM_DATA u8 sActiveList[32];
// Static ROM declarations
+extern u8 *gFieldEffectScriptPointers[];
+
// .rodata
+const u32 gNewGameBirchPic[] = INCBIN_U32("graphics/birch_speech/birch.4bpp");
+const u32 gUnusedBirchBeauty[] = INCBIN_U32("graphics/unused/intro_birch_beauty.4bpp");
+const u16 gNewGameBirchPalette[16] = INCBIN_U16("graphics/birch_speech/birch.gbapal");
+const u32 gSpriteImage_855A970[] = INCBIN_U32("graphics/misc/pokeball_glow.4bpp");
+const u16 gFieldEffectObjectPalette4[16] = INCBIN_U16("graphics/map_objects/palettes/field_effect_object_palette_04.gbapal");
+const u32 gSpriteImage_855A9B0[] = INCBIN_U32("graphics/misc/pokecenter_monitor/0.4bpp");
+const u32 gSpriteImage_855AA70[] = INCBIN_U32("graphics/misc/pokecenter_monitor/1.4bpp");
+const u32 gSpriteImage_855AB30[] = INCBIN_U32("graphics/misc/big_hof_monitor.4bpp");
+const u8 gSpriteImage_855AD30[] = INCBIN_U8("graphics/misc/small_hof_monitor.4bpp");
+const u16 gFieldEffectObjectPalette5[16] = INCBIN_U16("graphics/map_objects/palettes/field_effect_object_palette_05.gbapal");
+
+// Graphics for the lights streaking past your Pokemon when it uses a field move.
+const u32 gFieldMoveStreaksTiles[] = INCBIN_U32("graphics/misc/field_move_streaks.4bpp");
+const u16 gFieldMoveStreaksPalette[16] = INCBIN_U16("graphics/misc/field_move_streaks.gbapal");
+const u16 gFieldMoveStreaksTilemap[] = INCBIN_U16("graphics/misc/field_move_streaks_map.bin");
+
+// The following light streaks effect is used when the map is dark (e.g. a cave).
+const u32 gDarknessFieldMoveStreaksTiles[] = INCBIN_U32("graphics/misc/darkness_field_move_streaks.4bpp");
+const u16 gDarknessFieldMoveStreaksPalette[16] = INCBIN_U16("graphics/misc/darkness_field_move_streaks.gbapal");
+const u16 gDarknessFieldMoveStreaksTilemap[] = INCBIN_U16("graphics/misc/darkness_field_move_streaks_map.bin");
+
+const u16 gUnknown_0855B610[16] = INCBIN_U16("graphics/misc/spotlight.gbapal");
+const u8 gUnknown_0855B630[] = INCBIN_U8("graphics/misc/spotlight.4bpp");
+const u8 gUnknown_0855C170[] = INCBIN_U8("graphics/unknown/unknown_55C170.4bpp");
+const u8 gUnknown_0855C190[] = INCBIN_U8("graphics/unknown/unknown_55C190.4bpp");
+const u8 gUnknown_0855C1B0[] = INCBIN_U8("graphics/unknown/unknown_55C1B0.4bpp");
+const u8 gUnknown_0855C1D0[] = INCBIN_U8("graphics/unknown/unknown_55C1D0.4bpp");
+
+bool8 (*const gFieldEffectScriptFuncs[])(u8 **, u32 *) = {
+ FieldEffectCmd_loadtiles,
+ FieldEffectCmd_loadfadedpal,
+ FieldEffectCmd_loadpal,
+ FieldEffectCmd_callnative,
+ FieldEffectCmd_end,
+ FieldEffectCmd_loadgfx_callnative,
+ FieldEffectCmd_loadtiles_callnative,
+ FieldEffectCmd_loadfadedpal_callnative,
+};
+
+const struct OamData gNewGameBirchOamAttributes = {.size = 3};
+const struct OamData gOamData_855C218 = {.size = 0};
+const struct OamData gOamData_855C220 = {.size = 1};
+
+const struct SpriteFrameImage gNewGameBirchPicTable[] = {
+ obj_frame_tiles(gNewGameBirchPic)
+};
+const struct SpritePalette gNewGameBirchObjectPaletteInfo = {.data = gNewGameBirchPalette, .tag = 0x1006};
+
+const union AnimCmd gNewGameBirchImageAnim[] = {
+ ANIMCMD_FRAME(.imageValue = 0, .duration = 1),
+ ANIMCMD_END
+};
+
+const union AnimCmd *const gNewGameBirchImageAnimTable[] = {
+ gNewGameBirchImageAnim
+};
+
+const struct SpriteTemplate gNewGameBirchObjectTemplate = {
+ .tileTag = 0xffff,
+ .paletteTag = 4102,
+ .oam = &gNewGameBirchOamAttributes,
+ .anims = gNewGameBirchImageAnimTable,
+ .images = gNewGameBirchPicTable,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy
+};
+
+const struct SpritePalette gFieldEffectObjectPaletteInfo4 = {.data = gFieldEffectObjectPalette4, .tag = 0x1007};
+const struct SpritePalette gFieldEffectObjectPaletteInfo5 = {.data = gFieldEffectObjectPalette5, .tag = 0x1010};
+const struct OamData gOamData_855C26C = {
+ .shape = 1,
+ .size = 2
+};
+
+const struct SpriteFrameImage gSpriteImageTable_855C274[] = {
+ obj_frame_tiles(gSpriteImage_855A970)
+};
+
+const struct SpriteFrameImage gSpriteImageTable_855C27C[] = {
+ obj_frame_tiles(gSpriteImage_855A9B0),
+ obj_frame_tiles(gSpriteImage_855AA70)
+};
+
+const struct SpriteFrameImage gSpriteImageTable_855C28C[] = {
+ obj_frame_tiles(gSpriteImage_855AB30)
+};
+
+const struct SpriteFrameImage gSpriteImageTable_855C294[] = {
+ {.data = gSpriteImage_855AD30, .size = 0x200} // the macro breaks down here
+};
+
+const struct Subsprite gSubspriteTable_855C29C[] = {
+ {.x = -12, .y = -8, .priority = 2, .tileOffset = 0, .shape = 1, .size = 0},
+ {.x = 4, .y = -8, .priority = 2, .tileOffset = 2, .shape = 0, .size = 0},
+ {.x = -12, .y = 0, .priority = 2, .tileOffset = 3, .shape = 1, .size = 0},
+ {.x = 4, .y = 0, .priority = 2, .tileOffset = 5, .shape = 0, .size = 0}
+};
+
+const struct SubspriteTable gUnknown_0855C2AC = subsprite_table(gSubspriteTable_855C29C);
+
+const struct Subsprite gSubspriteTable_855C2B4[] = {
+ {.x = -32, .y = -8, .priority = 2, .tileOffset = 0, .shape = 1, .size = 1},
+ {.x = 0, .y = -8, .priority = 2, .tileOffset = 4, .shape = 1, .size = 1},
+ {.x = -32, .y = 0, .priority = 2, .tileOffset = 8, .shape = 1, .size = 1},
+ {.x = 0, .y = 0, .priority = 2, .tileOffset = 12, .shape = 1, .size = 1}
+};
+
+const struct SubspriteTable gUnknown_0855C2C4 = subsprite_table(gSubspriteTable_855C2B4);
+
+const union AnimCmd gSpriteAnim_855C2CC[] = {
+ ANIMCMD_FRAME(.imageValue = 0, .duration = 1),
+ ANIMCMD_JUMP(0)
+};
+
+const union AnimCmd gSpriteAnim_855C2D4[] = {
+ ANIMCMD_FRAME(.imageValue = 0, .duration = 16),
+ ANIMCMD_FRAME(.imageValue = 1, .duration = 16),
+ ANIMCMD_FRAME(.imageValue = 0, .duration = 16),
+ ANIMCMD_FRAME(.imageValue = 1, .duration = 16),
+ ANIMCMD_FRAME(.imageValue = 0, .duration = 16),
+ ANIMCMD_FRAME(.imageValue = 1, .duration = 16),
+ ANIMCMD_FRAME(.imageValue = 0, .duration = 16),
+ ANIMCMD_FRAME(.imageValue = 1, .duration = 16),
+ ANIMCMD_END
+};
+
+const union AnimCmd *const gSpriteAnimTable_855C2F8[] = {
+ gSpriteAnim_855C2CC,
+ gSpriteAnim_855C2D4
+};
+
+const union AnimCmd *const gSpriteAnimTable_855C300[] = {
+ gSpriteAnim_855C2CC
+};
+
+const struct SpriteTemplate gSpriteTemplate_855C304 = {
+ .tileTag = 0xffff,
+ .paletteTag = 4103,
+ .oam = &gOamData_855C218,
+ .anims = gSpriteAnimTable_855C2F8,
+ .images = gSpriteImageTable_855C274,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_PokeballGlow
+};
+
+const struct SpriteTemplate gSpriteTemplate_855C31C = {
+ .tileTag = 0xffff,
+ .paletteTag = 4100,
+ .oam = &gOamData_855C220,
+ .anims = gSpriteAnimTable_855C2F8,
+ .images = gSpriteImageTable_855C27C,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_PokecenterMonitor
+};
+
+const struct SpriteTemplate gSpriteTemplate_855C334 = {
+ .tileTag = 0xffff,
+ .paletteTag = 4112,
+ .oam = &gOamData_855C220,
+ .anims = gSpriteAnimTable_855C300,
+ .images = gSpriteImageTable_855C28C,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_HallOfFameMonitor
+};
+
+const struct SpriteTemplate gSpriteTemplate_855C34C = {
+ .tileTag = 0xffff,
+ .paletteTag = 4112,
+ .oam = &gOamData_855C26C,
+ .anims = gSpriteAnimTable_855C300,
+ .images = gSpriteImageTable_855C294,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCB_HallOfFameMonitor
+};
+
+void (*const gUnknown_0855C364[])(struct Task *) = {
+ PokecenterHealEffect_0,
+ PokecenterHealEffect_1,
+ PokecenterHealEffect_2,
+ PokecenterHealEffect_3
+};
+
+void (*const gUnknown_0855C374[])(struct Task *) = {
+ HallOfFameRecordEffect_0,
+ HallOfFameRecordEffect_1,
+ HallOfFameRecordEffect_2,
+ HallOfFameRecordEffect_3
+};
+
+void (*const gUnknown_0855C384[])(struct Sprite *) = {
+ PokeballGlowEffect_0,
+ PokeballGlowEffect_1,
+ PokeballGlowEffect_2,
+ PokeballGlowEffect_3,
+ PokeballGlowEffect_4,
+ PokeballGlowEffect_5,
+ PokeballGlowEffect_6,
+ PokeballGlowEffect_7
+};
+
+const struct Coords16 gUnknown_0855C3A4[] = {
+ {.x = 0, .y = 0},
+ {.x = 6, .y = 0},
+ {.x = 0, .y = 4},
+ {.x = 6, .y = 4},
+ {.x = 0, .y = 8},
+ {.x = 6, .y = 8}
+};
+
+const u8 gUnknown_0855C3BC[] = {16, 12, 8, 0};
+const u8 gUnknown_0855C3C0[] = {16, 12, 8, 0};
+const u8 gUnknown_0855C3C4[] = { 0, 0, 0, 0};
+
+bool8 (*const gUnknown_0855C3C8[])(struct Task *) = {
+ sub_80B6BCC,
+ sub_80B6C74,
+ sub_80B6C90,
+ sub_80B6D04,
+ sub_80B6DBC,
+ sub_80B6DD8,
+ sub_80B6E18,
+};
+
+bool8 (*const gUnknown_0855C3E4[])(struct Task *) = {
+ sub_80B6EC0,
+ sub_80B6EE0,
+ sub_80B6F50,
+ sub_80B6F74,
+ sub_80B6F84,
+ sub_80B6FA8,
+};
+
+bool8 (*const gUnknown_0855C3FC[])(struct Task *) = {
+ sub_80B7114,
+ sub_80B7190,
+ sub_80B71D0,
+ sub_80B7230,
+ sub_80B7270,
+ sub_80B72D0,
+ sub_80B72F4,
+};
+
+bool8 (*const gUnknown_0855C418[])(struct Task *, struct MapObject *) = {
+ sub_80B73D0,
+ waterfall_1_do_anim_probably,
+ waterfall_2_wait_anim_finish_probably,
+ sub_80B7450,
+ sub_80B7478,
+};
+
+bool8 (*const gUnknown_0855C42C[])(struct Task *) = {
+ dive_1_lock,
+ dive_2_unknown,
+ dive_3_unknown,
+};
+
+bool8 (*const gUnknown_0855C438[])(struct Task *, struct MapObject *, struct Sprite *) = {
+ sub_80B764C,
+ sub_80B7684,
+ sub_80B76B8,
+ sub_80B7704,
+ sub_80B77F8,
+ sub_80B7814,
+};
+
+bool8 (*const gUnknown_0855C450[])(struct Task *, struct MapObject *, struct Sprite *) = {
+ sub_80B78EC,
+ sub_80B791C,
+ sub_80B7968,
+ sub_80B79BC,
+};
+
+bool8 (*const gUnknown_0855C460[])(struct Task *, struct MapObject *, struct Sprite *) = {
+ sub_80B7AE8,
+ sub_80B7B18,
+ sub_80B7B94,
+ sub_80B7BCC,
+ sub_80B7BF4,
+};
+
+void (*const gUnknown_0855C474[])(struct Task *) = {
+ sub_80B7D14,
+ sub_80B7D34,
+};
// .text
+
+u32 FieldEffectStart(u8 id)
+{
+ u8 *script;
+ u32 val;
+
+ FieldEffectActiveListAdd(id);
+
+ script = gFieldEffectScriptPointers[id];
+
+ while (gFieldEffectScriptFuncs[*script](&script, &val))
+ ;
+
+ return val;
+}
+
+bool8 FieldEffectCmd_loadtiles(u8 **script, u32 *val)
+{
+ (*script)++;
+ FieldEffectScript_LoadTiles(script);
+ return TRUE;
+}
+
+bool8 FieldEffectCmd_loadfadedpal(u8 **script, u32 *val)
+{
+ (*script)++;
+ FieldEffectScript_LoadFadedPalette(script);
+ return TRUE;
+}
+
+bool8 FieldEffectCmd_loadpal(u8 **script, u32 *val)
+{
+ (*script)++;
+ FieldEffectScript_LoadPalette(script);
+ return TRUE;
+}
+
+bool8 FieldEffectCmd_callnative(u8 **script, u32 *val)
+{
+ (*script)++;
+ FieldEffectScript_CallNative(script, val);
+ return TRUE;
+}
+
+bool8 FieldEffectCmd_end(u8 **script, u32 *val)
+{
+ return FALSE;
+}
+
+bool8 FieldEffectCmd_loadgfx_callnative(u8 **script, u32 *val)
+{
+ (*script)++;
+ FieldEffectScript_LoadTiles(script);
+ FieldEffectScript_LoadFadedPalette(script);
+ FieldEffectScript_CallNative(script, val);
+ return TRUE;
+}
+
+bool8 FieldEffectCmd_loadtiles_callnative(u8 **script, u32 *val)
+{
+ (*script)++;
+ FieldEffectScript_LoadTiles(script);
+ FieldEffectScript_CallNative(script, val);
+ return TRUE;
+}
+
+bool8 FieldEffectCmd_loadfadedpal_callnative(u8 **script, u32 *val)
+{
+ (*script)++;
+ FieldEffectScript_LoadFadedPalette(script);
+ FieldEffectScript_CallNative(script, val);
+ return TRUE;
+}
+
+u32 FieldEffectScript_ReadWord(u8 **script)
+{
+ return (*script)[0]
+ + ((*script)[1] << 8)
+ + ((*script)[2] << 16)
+ + ((*script)[3] << 24);
+}
+
+void FieldEffectScript_LoadTiles(u8 **script)
+{
+ struct SpriteSheet *sheet = (struct SpriteSheet *)FieldEffectScript_ReadWord(script);
+ if (GetSpriteTileStartByTag(sheet->tag) == 0xFFFF)
+ LoadSpriteSheet(sheet);
+ (*script) += 4;
+}
+
+void FieldEffectScript_LoadFadedPalette(u8 **script)
+{
+ struct SpritePalette *palette = (struct SpritePalette *)FieldEffectScript_ReadWord(script);
+ LoadSpritePalette(palette);
+ UpdateSpritePaletteWithWeather(IndexOfSpritePaletteTag(palette->tag));
+ (*script) += 4;
+}
+
+void FieldEffectScript_LoadPalette(u8 **script)
+{
+ struct SpritePalette *palette = (struct SpritePalette *)FieldEffectScript_ReadWord(script);
+ LoadSpritePalette(palette);
+ (*script) += 4;
+}
+
+void FieldEffectScript_CallNative(u8 **script, u32 *val)
+{
+ u32 (*func)(void) = (u32 (*)(void))FieldEffectScript_ReadWord(script);
+ *val = func();
+ (*script) += 4;
+}
+
+void FieldEffectFreeGraphicsResources(struct Sprite *sprite)
+{
+ u16 sheetTileStart = sprite->sheetTileStart;
+ u32 paletteNum = sprite->oam.paletteNum;
+ DestroySprite(sprite);
+ FieldEffectFreeTilesIfUnused(sheetTileStart);
+ FieldEffectFreePaletteIfUnused(paletteNum);
+}
+
+void FieldEffectStop(struct Sprite *sprite, u8 id)
+{
+ FieldEffectFreeGraphicsResources(sprite);
+ FieldEffectActiveListRemove(id);
+}
+
+void FieldEffectFreeTilesIfUnused(u16 tileStart)
+{
+ u8 i;
+ u16 tag = GetSpriteTileTagByTileStart(tileStart);
+
+ if (tag != 0xFFFF)
+ {
+ for (i = 0; i < MAX_SPRITES; i++)
+ if (gSprites[i].inUse && gSprites[i].usingSheet && tileStart == gSprites[i].sheetTileStart)
+ return;
+ FreeSpriteTilesByTag(tag);
+ }
+}
+
+void FieldEffectFreePaletteIfUnused(u8 paletteNum)
+{
+ u8 i;
+ u16 tag = GetSpritePaletteTagByPaletteNum(paletteNum);
+
+ if (tag != 0xFFFF)
+ {
+ for (i = 0; i < MAX_SPRITES; i++)
+ if (gSprites[i].inUse && gSprites[i].oam.paletteNum == paletteNum)
+ return;
+ FreeSpritePaletteByTag(tag);
+ }
+}
+
+void FieldEffectActiveListClear(void)
+{
+ u8 i;
+ for (i = 0; i < ARRAY_COUNT(sActiveList); i++)
+ sActiveList[i] = 0xFF;
+}
+
+void FieldEffectActiveListAdd(u8 id)
+{
+ u8 i;
+ for (i = 0; i < ARRAY_COUNT(sActiveList); i++)
+ {
+ if (sActiveList[i] == 0xFF)
+ {
+ sActiveList[i] = id;
+ return;
+ }
+ }
+}
+
+void FieldEffectActiveListRemove(u8 id)
+{
+ u8 i;
+ for (i = 0; i < ARRAY_COUNT(sActiveList); i++)
+ {
+ if (sActiveList[i] == id)
+ {
+ sActiveList[i] = 0xFF;
+ return;
+ }
+ }
+}
+
+bool8 FieldEffectActiveListContains(u8 id)
+{
+ u8 i;
+ for (i = 0; i < ARRAY_COUNT(sActiveList); i++)
+ if (sActiveList[i] == id)
+ return TRUE;
+ return FALSE;
+}
+
+u8 CreateTrainerSprite(u8 trainerSpriteID, s16 x, s16 y, u8 subpriority, u8 *buffer)
+{
+ struct SpriteTemplate spriteTemplate;
+ LoadCompressedObjectPaletteOverrideBuffer(&gTrainerFrontPicPaletteTable[trainerSpriteID], buffer);
+ LoadCompressedObjectPicOverrideBuffer(&gTrainerFrontPicTable[trainerSpriteID], buffer);
+ spriteTemplate.tileTag = gTrainerFrontPicTable[trainerSpriteID].tag;
+ spriteTemplate.paletteTag = gTrainerFrontPicPaletteTable[trainerSpriteID].tag;
+ spriteTemplate.oam = &gNewGameBirchOamAttributes;
+ spriteTemplate.anims = gDummySpriteAnimTable;
+ spriteTemplate.images = NULL;
+ spriteTemplate.affineAnims = gDummySpriteAffineAnimTable;
+ spriteTemplate.callback = SpriteCallbackDummy;
+ return CreateSprite(&spriteTemplate, x, y, subpriority);
+}
+
+void LoadTrainerGfx_TrainerCard(u8 gender, u16 palOffset, u8 *dest)
+{
+ LZDecompressVram(gTrainerFrontPicTable[gender].data, dest);
+ LoadCompressedPalette(gTrainerFrontPicPaletteTable[gender].data, palOffset, 0x20);
+}
+
+u8 AddNewGameBirchObject(s16 x, s16 y, u8 subpriority)
+{
+ LoadSpritePalette(&gNewGameBirchObjectPaletteInfo);
+ return CreateSprite(&gNewGameBirchObjectTemplate, x, y, subpriority);
+}
+
+#ifdef NONMATCHING
+u8 CreateMonSprite_PicBox(u16 species, s16 x, s16 y)
+{
+ u16 spriteId = sub_818D7D8(species, 0, 0x8000, 1, x, y, 0, gMonPaletteTable[species].tag);
+ PreservePaletteInWeather(IndexOfSpritePaletteTag(gMonPaletteTable[species].tag) + 0x10);
+ if (spriteId == 0xFFFF)
+ return 0x40;
+
+ return spriteId;
+}
+#else
+NAKED
+u8 CreateMonSprite_PicBox(u16 species, s16 x, s16 y)
+{
+ asm_unified("push {r4,r5,lr}\n\
+ sub sp, 0x10\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ movs r3, 0x80\n\
+ lsls r3, 8\n\
+ lsls r1, 16\n\
+ asrs r1, 16\n\
+ str r1, [sp]\n\
+ lsls r2, 16\n\
+ asrs r2, 16\n\
+ str r2, [sp, 0x4]\n\
+ movs r1, 0\n\
+ str r1, [sp, 0x8]\n\
+ ldr r1, =gMonPaletteTable\n\
+ lsls r4, r0, 3\n\
+ adds r4, r1\n\
+ ldrh r1, [r4, 0x4]\n\
+ str r1, [sp, 0xC]\n\
+ movs r1, 0\n\
+ adds r2, r3, 0\n\
+ movs r3, 0x1\n\
+ bl sub_818D7D8\n\
+ lsls r0, 16\n\
+ lsrs r5, r0, 16\n\
+ ldrh r0, [r4, 0x4]\n\
+ bl IndexOfSpritePaletteTag\n\
+ adds r0, 0x10\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ bl PreservePaletteInWeather\n\
+ ldr r0, =0x0000ffff\n\
+ cmp r5, r0\n\
+ beq _080B5FDC\n\
+ lsls r0, r5, 24\n\
+ lsrs r0, 24\n\
+ b _080B5FDE\n\
+ .pool\n\
+_080B5FDC:\n\
+ movs r0, 0x40\n\
+_080B5FDE:\n\
+ add sp, 0x10\n\
+ pop {r4,r5}\n\
+ pop {r1}\n\
+ bx r1");
+}
+#endif //NONMATCHING
+
+u8 CreateMonSprite_FieldMove(u16 species, u32 d, u32 g, s16 x, s16 y, u8 subpriority)
+{
+ const struct CompressedSpritePalette *spritePalette = GetMonSpritePalStructFromOtIdPersonality(species, d, g);
+ u16 spriteId = sub_818D7D8(species, d, g, 1, x, y, 0, spritePalette->tag);
+ PreservePaletteInWeather(IndexOfSpritePaletteTag(spritePalette->tag) + 0x10);
+ if (spriteId == 0xFFFF)
+ return 0x40;
+
+ return spriteId;
+}
+
+void FreeResourcesAndDestroySprite(struct Sprite *sprite, u8 spriteId)
+{
+ ResetPreservedPalettesInWeather();
+ if (sprite->oam.affineMode != 0)
+ {
+ FreeOamMatrix(sprite->oam.matrixNum);
+ }
+ sub_818D820(spriteId);
+}
+
+#ifdef NONMATCHING
+void MultiplyInvertedPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b)
+{
+ int curRed;
+ int curGreen;
+ int curBlue;
+
+ curRed = gPlttBufferUnfaded[i] & 0x1f;
+ curGreen = (gPlttBufferUnfaded[i] & (0x1f << 5)) >> 5;
+ curBlue = (gPlttBufferUnfaded[i] & (0x1f << 10)) >> 10;
+ curRed += (((0x1f - curRed) * r) >> 4);
+ curGreen += (((0x1f - curGreen) * g) >> 4);
+ curBlue += (((0x1f - curBlue) * b) >> 4);
+ gPlttBufferFaded[i] = RGB(curRed, curGreen, curBlue);
+}
+
+void MultiplyPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b)
+{
+ int curRed;
+ int curGreen;
+ int curBlue;
+
+ curRed = gPlttBufferUnfaded[i] & 0x1f;
+ curGreen = (gPlttBufferUnfaded[i] & (0x1f << 5)) >> 5;
+ curBlue = (gPlttBufferUnfaded[i] & (0x1f << 10)) >> 10;
+ curRed -= ((curRed * r) >> 4);
+ curGreen -= ((curGreen * g) >> 4);
+ curBlue -= ((curBlue * b) >> 4);
+ gPlttBufferFaded[i] = RGB(curRed, curGreen, curBlue);
+}
+#else
+NAKED
+void MultiplyInvertedPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b)
+{
+ asm(".syntax unified\n"
+ "\tpush {r4-r7,lr}\n"
+ "\tmov r7, r9\n"
+ "\tmov r6, r8\n"
+ "\tpush {r6,r7}\n"
+ "\tlsls r0, 16\n"
+ "\tlsls r1, 24\n"
+ "\tlsrs r1, 24\n"
+ "\tlsls r2, 24\n"
+ "\tlsrs r2, 24\n"
+ "\tlsls r3, 24\n"
+ "\tlsrs r3, 24\n"
+ "\tldr r4, _08085D00 @ =gPlttBufferUnfaded\n"
+ "\tlsrs r0, 15\n"
+ "\tadds r4, r0, r4\n"
+ "\tldrh r4, [r4]\n"
+ "\tmovs r5, 0x1F\n"
+ "\tmov r9, r5\n"
+ "\tmov r8, r4\n"
+ "\tmov r6, r8\n"
+ "\tands r6, r5\n"
+ "\tmov r8, r6\n"
+ "\tmovs r6, 0xF8\n"
+ "\tlsls r6, 2\n"
+ "\tands r6, r4\n"
+ "\tlsrs r6, 5\n"
+ "\tmovs r5, 0xF8\n"
+ "\tlsls r5, 7\n"
+ "\tands r4, r5\n"
+ "\tlsrs r4, 10\n"
+ "\tmov r7, r9\n"
+ "\tmov r5, r8\n"
+ "\tsubs r7, r5\n"
+ "\tmov r12, r7\n"
+ "\tmov r7, r12\n"
+ "\tmuls r7, r1\n"
+ "\tadds r1, r7, 0\n"
+ "\tasrs r1, 4\n"
+ "\tadd r8, r1\n"
+ "\tmov r5, r9\n"
+ "\tsubs r1, r5, r6\n"
+ "\tmuls r1, r2\n"
+ "\tasrs r1, 4\n"
+ "\tadds r6, r1\n"
+ "\tsubs r5, r4\n"
+ "\tmov r9, r5\n"
+ "\tmov r1, r9\n"
+ "\tmuls r1, r3\n"
+ "\tasrs r1, 4\n"
+ "\tadds r4, r1\n"
+ "\tmov r7, r8\n"
+ "\tlsls r7, 16\n"
+ "\tlsls r6, 21\n"
+ "\torrs r6, r7\n"
+ "\tlsls r4, 26\n"
+ "\torrs r4, r6\n"
+ "\tlsrs r4, 16\n"
+ "\tldr r1, _08085D04 @ =gPlttBufferFaded\n"
+ "\tadds r0, r1\n"
+ "\tstrh r4, [r0]\n"
+ "\tpop {r3,r4}\n"
+ "\tmov r8, r3\n"
+ "\tmov r9, r4\n"
+ "\tpop {r4-r7}\n"
+ "\tpop {r0}\n"
+ "\tbx r0\n"
+ "\t.align 2, 0\n"
+ "_08085D00: .4byte gPlttBufferUnfaded\n"
+ "_08085D04: .4byte gPlttBufferFaded\n"
+ ".syntax divided");
+}
+
+NAKED
+void MultiplyPaletteRGBComponents(u16 i, u8 r, u8 g, u8 b)
+{
+ asm(".syntax unified\n"
+ "\tpush {r4-r6,lr}\n"
+ "\tmov r6, r8\n"
+ "\tpush {r6}\n"
+ "\tlsls r0, 16\n"
+ "\tlsls r1, 24\n"
+ "\tlsrs r1, 24\n"
+ "\tlsls r2, 24\n"
+ "\tlsrs r2, 24\n"
+ "\tlsls r3, 24\n"
+ "\tlsrs r3, 24\n"
+ "\tldr r4, _08085D78 @ =gPlttBufferUnfaded\n"
+ "\tlsrs r0, 15\n"
+ "\tadds r4, r0, r4\n"
+ "\tldrh r4, [r4]\n"
+ "\tmovs r5, 0x1F\n"
+ "\tmov r8, r5\n"
+ "\tmov r6, r8\n"
+ "\tands r6, r4\n"
+ "\tmov r8, r6\n"
+ "\tmovs r5, 0xF8\n"
+ "\tlsls r5, 2\n"
+ "\tands r5, r4\n"
+ "\tlsrs r5, 5\n"
+ "\tmovs r6, 0xF8\n"
+ "\tlsls r6, 7\n"
+ "\tands r4, r6\n"
+ "\tlsrs r4, 10\n"
+ "\tmov r6, r8\n"
+ "\tmuls r6, r1\n"
+ "\tadds r1, r6, 0\n"
+ "\tasrs r1, 4\n"
+ "\tmov r6, r8\n"
+ "\tsubs r6, r1\n"
+ "\tadds r1, r5, 0\n"
+ "\tmuls r1, r2\n"
+ "\tasrs r1, 4\n"
+ "\tsubs r5, r1\n"
+ "\tadds r1, r4, 0\n"
+ "\tmuls r1, r3\n"
+ "\tasrs r1, 4\n"
+ "\tsubs r4, r1\n"
+ "\tlsls r6, 16\n"
+ "\tlsls r5, 21\n"
+ "\torrs r5, r6\n"
+ "\tlsls r4, 26\n"
+ "\torrs r4, r5\n"
+ "\tlsrs r4, 16\n"
+ "\tldr r1, _08085D7C @ =gPlttBufferFaded\n"
+ "\tadds r0, r1\n"
+ "\tstrh r4, [r0]\n"
+ "\tpop {r3}\n"
+ "\tmov r8, r3\n"
+ "\tpop {r4-r6}\n"
+ "\tpop {r0}\n"
+ "\tbx r0\n"
+ "\t.align 2, 0\n"
+ "_08085D78: .4byte gPlttBufferUnfaded\n"
+ "_08085D7C: .4byte gPlttBufferFaded\n"
+ ".syntax divided");
+}
+#endif
+
+void Task_PokecenterHeal(u8 taskId);
+u8 CreatePokeballGlowSprite(s16, s16, s16, u16);
+u8 PokecenterHealEffectHelper(s16, s16);
+
+bool8 FldEff_PokecenterHeal(void)
+{
+ u8 nPokemon;
+ struct Task *task;
+
+ nPokemon = CalculatePlayerPartyCount();
+ task = &gTasks[CreateTask(Task_PokecenterHeal, 0xff)];
+ task->data[1] = nPokemon;
+ task->data[2] = 0x5d;
+ task->data[3] = 0x24;
+ task->data[4] = 0x7c;
+ task->data[5] = 0x18;
+ return FALSE;
+}
+
+void Task_PokecenterHeal(u8 taskId)
+{
+ struct Task *task;
+ task = &gTasks[taskId];
+ gUnknown_0855C364[task->data[0]](task);
+}
+
+void PokecenterHealEffect_0(struct Task *task)
+{
+ task->data[0]++;
+ task->data[6] = CreatePokeballGlowSprite(task->data[1], task->data[2], task->data[3], 1);
+ task->data[7] = PokecenterHealEffectHelper(task->data[4], task->data[5]);
+}
+
+void PokecenterHealEffect_1(struct Task *task)
+{
+ if (gSprites[task->data[6]].data[0] > 1)
+ {
+ gSprites[task->data[7]].data[0]++;
+ task->data[0]++;
+ }
+}
+
+void PokecenterHealEffect_2(struct Task *task)
+{
+ if (gSprites[task->data[6]].data[0] > 4)
+ {
+ task->data[0]++;
+ }
+}
+
+void PokecenterHealEffect_3(struct Task *task)
+{
+ if (gSprites[task->data[6]].data[0] > 6)
+ {
+ DestroySprite(&gSprites[task->data[6]]);
+ FieldEffectActiveListRemove(FLDEFF_POKECENTER_HEAL);
+ DestroyTask(FindTaskIdByFunc(Task_PokecenterHeal));
+ }
+}
+
+void Task_HallOfFameRecord(u8 taskId);
+void HallOfFameRecordEffectHelper(s16, s16, s16, u8);
+
+bool8 FldEff_HallOfFameRecord(void)
+{
+ u8 nPokemon;
+ struct Task *task;
+
+ nPokemon = CalculatePlayerPartyCount();
+ task = &gTasks[CreateTask(Task_HallOfFameRecord, 0xff)];
+ task->data[1] = nPokemon;
+ task->data[2] = 0x75;
+ task->data[3] = 0x34;
+ return FALSE;
+}
+
+void Task_HallOfFameRecord(u8 taskId)
+{
+ struct Task *task;
+ task = &gTasks[taskId];
+ gUnknown_0855C374[task->data[0]](task);
+}
+
+void HallOfFameRecordEffect_0(struct Task *task)
+{
+ u8 taskId;
+ task->data[0]++;
+ task->data[6] = CreatePokeballGlowSprite(task->data[1], task->data[2], task->data[3], 0);
+ taskId = FindTaskIdByFunc(Task_HallOfFameRecord);
+ HallOfFameRecordEffectHelper(taskId, 0x78, 0x18, 0);
+ HallOfFameRecordEffectHelper(taskId, 0x28, 0x08, 1);
+ HallOfFameRecordEffectHelper(taskId, 0x48, 0x08, 1);
+ HallOfFameRecordEffectHelper(taskId, 0xa8, 0x08, 1);
+ HallOfFameRecordEffectHelper(taskId, 0xc8, 0x08, 1);
+}
+
+void HallOfFameRecordEffect_1(struct Task *task)
+{
+ if (gSprites[task->data[6]].data[0] > 1)
+ {
+ task->data[15]++; // was this ever initialized? is this ever used?
+ task->data[0]++;
+ }
+}
+
+void HallOfFameRecordEffect_2(struct Task *task)
+{
+ if (gSprites[task->data[6]].data[0] > 4)
+ {
+ task->data[0]++;
+ }
+}
+
+void HallOfFameRecordEffect_3(struct Task *task)
+{
+ if (gSprites[task->data[6]].data[0] > 6)
+ {
+ DestroySprite(&gSprites[task->data[6]]);
+ FieldEffectActiveListRemove(FLDEFF_HALL_OF_FAME_RECORD);
+ DestroyTask(FindTaskIdByFunc(Task_HallOfFameRecord));
+ }
+}
+
+void SpriteCB_PokeballGlowEffect(struct Sprite *);
+
+u8 CreatePokeballGlowSprite(s16 data6, s16 x, s16 y, u16 data5)
+{
+ u8 spriteId;
+ struct Sprite *sprite;
+ spriteId = CreateInvisibleSprite(SpriteCB_PokeballGlowEffect);
+ sprite = &gSprites[spriteId];
+ sprite->pos2.x = x;
+ sprite->pos2.y = y;
+ sprite->data[5] = data5;
+ sprite->data[6] = data6;
+ sprite->data[7] = spriteId;
+ return spriteId;
+}
+
+void SpriteCB_PokeballGlowEffect(struct Sprite *sprite)
+{
+ gUnknown_0855C384[sprite->data[0]](sprite);
+}
+
+void PokeballGlowEffect_0(struct Sprite *sprite)
+{
+ u8 endSpriteId;
+ if (sprite->data[1] == 0 || (--sprite->data[1]) == 0)
+ {
+ sprite->data[1] = 25;
+ endSpriteId = CreateSpriteAtEnd(&gSpriteTemplate_855C304, gUnknown_0855C3A4[sprite->data[2]].x + sprite->pos2.x, gUnknown_0855C3A4[sprite->data[2]].y + sprite->pos2.y, 0);
+ gSprites[endSpriteId].oam.priority = 2;
+ gSprites[endSpriteId].data[0] = sprite->data[7];
+ sprite->data[2]++;
+ sprite->data[6]--;
+ PlaySE(SE_BOWA);
+ }
+ if (sprite->data[6] == 0)
+ {
+ sprite->data[1] = 32;
+ sprite->data[0]++;
+ }
+}
+
+void PokeballGlowEffect_1(struct Sprite *sprite)
+{
+ if ((--sprite->data[1]) == 0)
+ {
+ sprite->data[0]++;
+ sprite->data[1] = 8;
+ sprite->data[2] = 0;
+ sprite->data[3] = 0;
+ if (sprite->data[5])
+ {
+ PlayFanfare(MUS_ME_ASA);
+ }
+ }
+}
+
+void PokeballGlowEffect_2(struct Sprite *sprite)
+{
+ u8 phase;
+ if ((--sprite->data[1]) == 0)
+ {
+ sprite->data[1] = 8;
+ sprite->data[2]++;
+ sprite->data[2] &= 3;
+ if (sprite->data[2] == 0)
+ {
+ sprite->data[3]++;
+ }
+ }
+ phase = (sprite->data[2] + 3) & 3;
+ MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x108, gUnknown_0855C3BC[phase], gUnknown_0855C3C0[phase], gUnknown_0855C3C4[phase]);
+ phase = (sprite->data[2] + 2) & 3;
+ MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x106, gUnknown_0855C3BC[phase], gUnknown_0855C3C0[phase], gUnknown_0855C3C4[phase]);
+ phase = (sprite->data[2] + 1) & 3;
+ MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x102, gUnknown_0855C3BC[phase], gUnknown_0855C3C0[phase], gUnknown_0855C3C4[phase]);
+ phase = sprite->data[2];
+ MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x105, gUnknown_0855C3BC[phase], gUnknown_0855C3C0[phase], gUnknown_0855C3C4[phase]);
+ MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x103, gUnknown_0855C3BC[phase], gUnknown_0855C3C0[phase], gUnknown_0855C3C4[phase]);
+ if (sprite->data[3] > 2)
+ {
+ sprite->data[0]++;
+ sprite->data[1] = 8;
+ sprite->data[2] = 0;
+ }
+}
+
+void PokeballGlowEffect_3(struct Sprite *sprite)
+{
+ u8 phase;
+ if ((--sprite->data[1]) == 0)
+ {
+ sprite->data[1] = 8;
+ sprite->data[2]++;
+ sprite->data[2] &= 3;
+ if (sprite->data[2] == 3)
+ {
+ sprite->data[0]++;
+ sprite->data[1] = 30;
+ }
+ }
+ phase = sprite->data[2];
+ MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x108, gUnknown_0855C3BC[phase], gUnknown_0855C3C0[phase], gUnknown_0855C3C4[phase]);
+ MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x106, gUnknown_0855C3BC[phase], gUnknown_0855C3C0[phase], gUnknown_0855C3C4[phase]);
+ MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x102, gUnknown_0855C3BC[phase], gUnknown_0855C3C0[phase], gUnknown_0855C3C4[phase]);
+ MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x105, gUnknown_0855C3BC[phase], gUnknown_0855C3C0[phase], gUnknown_0855C3C4[phase]);
+ MultiplyInvertedPaletteRGBComponents((IndexOfSpritePaletteTag(0x1007) << 4) + 0x103, gUnknown_0855C3BC[phase], gUnknown_0855C3C0[phase], gUnknown_0855C3C4[phase]);
+}
+
+void PokeballGlowEffect_4(struct Sprite *sprite)
+{
+ if ((--sprite->data[1]) == 0)
+ {
+ sprite->data[0]++;
+ }
+}
+
+void PokeballGlowEffect_5(struct Sprite *sprite)
+{
+ sprite->data[0]++;
+}
+
+void PokeballGlowEffect_6(struct Sprite *sprite)
+{
+ if (sprite->data[5] == 0 || IsFanfareTaskInactive())
+ {
+ sprite->data[0]++;
+ }
+}
+
+void PokeballGlowEffect_7(struct Sprite *sprite)
+{
+}
+
+void SpriteCB_PokeballGlow(struct Sprite *sprite)
+{
+ if (gSprites[sprite->data[0]].data[0] > 4)
+ {
+ FieldEffectFreeGraphicsResources(sprite);
+ }
+}
+
+u8 PokecenterHealEffectHelper(s16 x, s16 y)
+{
+ u8 spriteIdAtEnd;
+ struct Sprite *sprite;
+ spriteIdAtEnd = CreateSpriteAtEnd(&gSpriteTemplate_855C31C, x, y, 0);
+ sprite = &gSprites[spriteIdAtEnd];
+ sprite->oam.priority = 2;
+ sprite->invisible = 1;
+ SetSubspriteTables(sprite, &gUnknown_0855C2AC);
+ return spriteIdAtEnd;
+}
+
+void SpriteCB_PokecenterMonitor(struct Sprite *sprite)
+{
+ if (sprite->data[0] != 0)
+ {
+ sprite->data[0] = 0;
+ sprite->invisible = 0;
+ StartSpriteAnim(sprite, 1);
+ }
+ if (sprite->animEnded)
+ {
+ FieldEffectFreeGraphicsResources(sprite);
+ }
+}
+
+void HallOfFameRecordEffectHelper(s16 a0, s16 a1, s16 a2, u8 a3)
+{
+ u8 spriteIdAtEnd;
+ if (!a3)
+ {
+ spriteIdAtEnd = CreateSpriteAtEnd(&gSpriteTemplate_855C334, a1, a2, 0);
+ SetSubspriteTables(&gSprites[spriteIdAtEnd], &gUnknown_0855C2C4);
+ } else
+ {
+ spriteIdAtEnd = CreateSpriteAtEnd(&gSpriteTemplate_855C34C, a1, a2, 0);
+ }
+ gSprites[spriteIdAtEnd].invisible = 1;
+ gSprites[spriteIdAtEnd].data[0] = a0;
+}
+
+void SpriteCB_HallOfFameMonitor(struct Sprite *sprite)
+{
+ if (gTasks[sprite->data[0]].data[15])
+ {
+ if (sprite->data[1] == 0 || (--sprite->data[1]) == 0)
+ {
+ sprite->data[1] = 16;
+ sprite->invisible ^= 1;
+ }
+ sprite->data[2]++;
+ }
+ if (sprite->data[2] > 127)
+ {
+ FieldEffectFreeGraphicsResources(sprite);
+ }
+}
+
+void mapldr_080842E8(void);
+void mapldr_08084390(void);
+void task00_8084310(u8);
+void c3_080843F8(u8);
+
+void sub_80B69DC(void)
+{
+ SetMainCallback2(CB2_ReturnToField);
+ gFieldCallback = mapldr_080842E8;
+}
+
+void mapldr_080842E8(void)
+{
+ pal_fill_black();
+ CreateTask(task00_8084310, 0);
+ ScriptContext2_Enable();
+ FreezeMapObjects();
+ gFieldCallback = NULL;
+}
+
+void task00_8084310(u8 taskId)
+{
+ struct Task *task;
+ task = &gTasks[taskId];
+ if (!task->data[0])
+ {
+ if (!IsWeatherNotFadingIn())
+ {
+ return;
+ }
+ gFieldEffectArguments[0] = GetCursorSelectionMonId();
+ if ((int)gFieldEffectArguments[0] > 5)
+ {
+ gFieldEffectArguments[0] = 0;
+ }
+ FieldEffectStart(FLDEFF_USE_FLY);
+ task->data[0]++;
+ }
+ if (!FieldEffectActiveListContains(FLDEFF_USE_FLY))
+ {
+ Overworld_ResetStateAfterFly();
+ warp_in();
+ SetMainCallback2(CB2_LoadMap);
+ gFieldCallback = mapldr_08084390;
+ DestroyTask(taskId);
+ }
+}
+
+void mapldr_08084390(void)
+{
+ Overworld_PlaySpecialMapMusic();
+ pal_fill_black();
+ CreateTask(c3_080843F8, 0);
+ gMapObjects[gPlayerAvatar.mapObjectId].mapobj_bit_13 = 1;
+ if (gPlayerAvatar.flags & 0x08)
+ {
+ FieldObjectTurn(&gMapObjects[gPlayerAvatar.mapObjectId], DIR_WEST);
+ }
+ ScriptContext2_Enable();
+ FreezeMapObjects();
+ gFieldCallback = NULL;
+}
+
+void c3_080843F8(u8 taskId)
+{
+ struct Task *task;
+ task = &gTasks[taskId];
+ if (task->data[0] == 0)
+ {
+ if (gPaletteFade.active)
+ {
+ return;
+ }
+ FieldEffectStart(FLDEFF_FLY_IN);
+ task->data[0]++;
+ }
+ if (!FieldEffectActiveListContains(FLDEFF_FLY_IN))
+ {
+ ScriptContext2_Disable();
+ UnfreezeMapObjects();
+ DestroyTask(taskId);
+ }
+}
+
+extern void pal_fill_for_maplights(void);
+void sub_80B6B94(u8);
+extern void CameraObjectReset2(void);
+extern void CameraObjectReset1(void);
+
+void sub_80B6B68(void)
+{
+ Overworld_PlaySpecialMapMusic();
+ pal_fill_for_maplights();
+ ScriptContext2_Enable();
+ FreezeMapObjects();
+ CreateTask(sub_80B6B94, 0);
+ gFieldCallback = NULL;
+}
+
+void sub_80B6B94(u8 taskId)
+{
+ struct Task *task;
+ task = &gTasks[taskId];
+ while (gUnknown_0855C3C8[task->data[0]](task)); // return code signifies whether to continue blocking here
+}
+
+bool8 sub_80B6BCC(struct Task *task) // gUnknown_0855C3C8[0]
+{
+ struct MapObject *playerObject;
+ struct Sprite *playerSprite;
+ playerObject = &gMapObjects[gPlayerAvatar.mapObjectId];
+ playerSprite = &gSprites[gPlayerAvatar.spriteId];
+ CameraObjectReset2();
+ gMapObjects[gPlayerAvatar.mapObjectId].mapobj_bit_13 = 1;
+ gPlayerAvatar.preventStep = TRUE;
+ FieldObjectSetSpecialAnim(playerObject, GetFaceDirectionAnimId(player_get_direction_lower_nybble()));
+ task->data[4] = playerSprite->subspriteMode;
+ playerObject->mapobj_bit_26 = 1;
+ playerSprite->oam.priority = 1;
+ playerSprite->subspriteMode = 2;
+ task->data[0]++;
+ return TRUE;
+}
+
+bool8 sub_80B6C74(struct Task *task) // gUnknown_0855C3C8[1]
+{
+ if (IsWeatherNotFadingIn())
+ {
+ task->data[0]++;
+ }
+ return FALSE;
+}
+
+bool8 sub_80B6C90(struct Task *task) // gUnknown_0855C3C8[2]
+{
+ struct Sprite *sprite;
+ s16 centerToCornerVecY;
+ sprite = &gSprites[gPlayerAvatar.spriteId];
+ centerToCornerVecY = -(sprite->centerToCornerVecY << 1);
+ sprite->pos2.y = -(sprite->pos1.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY + centerToCornerVecY);
+ task->data[1] = 1;
+ task->data[2] = 0;
+ gMapObjects[gPlayerAvatar.mapObjectId].mapobj_bit_13 = 0;
+ PlaySE(SE_RU_HYUU);
+ task->data[0]++;
+ return FALSE;
+}
+
+bool8 sub_80B6D04(struct Task *task)
+{
+ struct MapObject *mapObject;
+ struct Sprite *sprite;
+
+ mapObject = &gMapObjects[gPlayerAvatar.mapObjectId];
+ sprite = &gSprites[gPlayerAvatar.spriteId];
+ sprite->pos2.y += task->data[1];
+ if (task->data[1] < 8)
+ {
+ task->data[2] += task->data[1];
+ if (task->data[2] & 0xf)
+ {
+ task->data[1] <<= 1;
+ }
+ }
+ if (task->data[3] == 0 && sprite->pos2.y >= -16)
+ {
+ task->data[3]++;
+ mapObject->mapobj_bit_26 = 0;
+ sprite->subspriteMode = task->data[4];
+ mapObject->mapobj_bit_2 = 1;
+ }
+ if (sprite->pos2.y >= 0)
+ {
+ PlaySE(SE_W070);
+ mapObject->mapobj_bit_3 = 1;
+ mapObject->mapobj_bit_5 = 1;
+ sprite->pos2.y = 0;
+ task->data[0]++;
+ }
+ return FALSE;
+}
+
+bool8 sub_80B6DBC(struct Task *task)
+{
+ task->data[0]++;
+ task->data[1] = 4;
+ task->data[2] = 0;
+ SetCameraPanningCallback(NULL);
+ return TRUE;
+}
+
+bool8 sub_80B6DD8(struct Task *task)
+{
+ SetCameraPanning(0, task->data[1]);
+ task->data[1] = -task->data[1];
+ task->data[2]++;
+ if ((task->data[2] & 3) == 0)
+ {
+ task->data[1] >>= 1;
+ }
+ if (task->data[1] == 0)
+ {
+ task->data[0]++;
+ }
+ return FALSE;
+}
+
+bool8 sub_80B6E18(struct Task *task)
+{
+ gPlayerAvatar.preventStep = FALSE;
+ ScriptContext2_Disable();
+ CameraObjectReset1();
+ UnfreezeMapObjects();
+ InstallCameraPanAheadCallback();
+ DestroyTask(FindTaskIdByFunc(sub_80B6B94));
+ return FALSE;
+}
+
+void sub_80B6E88(u8);
+extern void sub_80E1558(u8);
+extern void sub_80AF0B4(void);
+
+void sub_80B6FB8(struct Task *);
+void sub_80B7004(struct Task *);
+void sub_80B7050(void);
+void sub_80B7060(void);
+bool8 sub_80859A0(void);
+void sub_80B70B4(void);
+void sub_80E1570(void);
+void sub_80B70DC(u8);
+
+void sub_80B6E4C(u8 a0, u8 priority)
+{
+ u8 taskId;
+ taskId = CreateTask(sub_80B6E88, priority);
+ gTasks[taskId].data[1] = 0;
+ if (a0 == 0x6a)
+ {
+ gTasks[taskId].data[1] = 1;
+ }
+}
+
+void sub_80B6E88(u8 taskId)
+{
+ struct Task *task;
+ task = &gTasks[taskId];
+ while (gUnknown_0855C3E4[task->data[0]](task));
+}
+
+bool8 sub_80B6EC0(struct Task *task)
+{
+ FreezeMapObjects();
+ CameraObjectReset2();
+ sub_80E1558(task->data[1]);
+ task->data[0]++;
+ return FALSE;
+}
+
+bool8 sub_80B6EE0(struct Task *task)
+{
+ struct MapObject *mapObject;
+ mapObject = &gMapObjects[gPlayerAvatar.mapObjectId];
+ if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(mapObject) || FieldObjectClearAnimIfSpecialAnimFinished(mapObject))
+ {
+ FieldObjectSetSpecialAnim(mapObject, GetFaceDirectionAnimId(player_get_direction_lower_nybble()));
+ task->data[0]++;
+ task->data[2] = 0;
+ task->data[3] = 0;
+ if ((u8)task->data[1] == 0)
+ {
+ task->data[0] = 4;
+ }
+ PlaySE(SE_ESUKA);
+ }
+ return FALSE;
+}
+
+bool8 sub_80B6F50(struct Task *task)
+{
+ sub_80B6FB8(task);
+ if (task->data[2] > 3)
+ {
+ sub_80B7050();
+ task->data[0]++;
+ }
+ return FALSE;
+}
+
+bool8 sub_80B6F74(struct Task *task)
+{
+ sub_80B6FB8(task);
+ sub_80B7060();
+ return FALSE;
+}
+
+bool8 sub_80B6F84(struct Task *task)
+{
+ sub_80B7004(task);
+ if (task->data[2] > 3)
+ {
+ sub_80B7050();
+ task->data[0]++;
+ }
+ return FALSE;
+}
+
+bool8 sub_80B6FA8(struct Task *task)
+{
+ sub_80B7004(task);
+ sub_80B7060();
+ return FALSE;
+}
+
+void sub_80B6FB8(struct Task *task)
+{
+ struct Sprite *sprite;
+ sprite = &gSprites[gPlayerAvatar.spriteId];
+ sprite->pos2.x = Cos(0x84, task->data[2]);
+ sprite->pos2.y = Sin(0x94, task->data[2]);
+ task->data[3]++;
+ if (task->data[3] & 1)
+ {
+ task->data[2]++;
+ }
+}
+
+void sub_80B7004(struct Task *task)
+{
+ struct Sprite *sprite;
+ sprite = &gSprites[gPlayerAvatar.spriteId];
+ sprite->pos2.x = Cos(0x7c, task->data[2]);
+ sprite->pos2.y = Sin(0x76, task->data[2]);
+ task->data[3]++;
+ if (task->data[3] & 1)
+ {
+ task->data[2]++;
+ }
+}
+
+void sub_80B7050(void)
+{
+ music_something();
+ sub_80AF0B4();
+}
+
+void sub_80B7060(void)
+{
+ if (!gPaletteFade.active && sub_80859A0() == TRUE)
+ {
+ sub_80E1570();
+ warp_in();
+ gFieldCallback = sub_80B70B4;
+ SetMainCallback2(CB2_LoadMap);
+ DestroyTask(FindTaskIdByFunc(sub_80B6E88));
+ }
+}
+
+void sub_80B70B4(void)
+{
+ Overworld_PlaySpecialMapMusic();
+ pal_fill_for_maplights();
+ ScriptContext2_Enable();
+ CreateTask(sub_80B70DC, 0);
+ gFieldCallback = NULL;
+}
+
+void sub_80B70DC(u8 taskId)
+{
+ struct Task *task;
+ task = &gTasks[taskId];
+ while (gUnknown_0855C3FC[task->data[0]](task));
+}
+
+bool8 sub_80B7114(struct Task *task)
+{
+ struct MapObject *mapObject;
+ s16 x;
+ s16 y;
+ u8 behavior;
+ CameraObjectReset2();
+ mapObject = &gMapObjects[gPlayerAvatar.mapObjectId];
+ FieldObjectSetSpecialAnim(mapObject, GetFaceDirectionAnimId(DIR_EAST));
+ PlayerGetDestCoords(&x, &y);
+ behavior = MapGridGetMetatileBehaviorAt(x, y);
+ task->data[0]++;
+ task->data[1] = 16;
+ if (behavior == 0x6b)
+ {
+ behavior = 1;
+ task->data[0] = 3;
+ } else
+ {
+ behavior = 0;
+ }
+ sub_80E1558(behavior);
+ return TRUE;
+}
+
+bool8 sub_80B7190(struct Task *task)
+{
+ struct Sprite *sprite;
+ sprite = &gSprites[gPlayerAvatar.spriteId];
+ sprite->pos2.x = Cos(0x84, task->data[1]);
+ sprite->pos2.y = Sin(0x94, task->data[1]);
+ task->data[0]++;
+ return FALSE;
+}
+
+bool8 sub_80B71D0(struct Task *task)
+{
+ struct Sprite *sprite;
+ sprite = &gSprites[gPlayerAvatar.spriteId];
+ sprite->pos2.x = Cos(0x84, task->data[1]);
+ sprite->pos2.y = Sin(0x94, task->data[1]);
+ task->data[2]++;
+ if (task->data[2] & 1)
+ {
+ task->data[1]--;
+ }
+ if (task->data[1] == 0)
+ {
+ sprite->pos2.x = 0;
+ sprite->pos2.y = 0;
+ task->data[0] = 5;
+ }
+ return FALSE;
+}
+
+bool8 sub_80B7230(struct Task *task)
+{
+ struct Sprite *sprite;
+ sprite = &gSprites[gPlayerAvatar.spriteId];
+ sprite->pos2.x = Cos(0x7c, task->data[1]);
+ sprite->pos2.y = Sin(0x76, task->data[1]);
+ task->data[0]++;
+ return FALSE;
+}
+
+bool8 sub_80B7270(struct Task *task)
+{
+ struct Sprite *sprite;
+ sprite = &gSprites[gPlayerAvatar.spriteId];
+ sprite->pos2.x = Cos(0x7c, task->data[1]);
+ sprite->pos2.y = Sin(0x76, task->data[1]);
+ task->data[2]++;
+ if (task->data[2] & 1)
+ {
+ task->data[1]--;
+ }
+ if (task->data[1] == 0)
+ {
+ sprite->pos2.x = 0;
+ sprite->pos2.y = 0;
+ task->data[0]++;
+ }
+ return FALSE;
+}
+
+extern bool8 sub_80E1584(void);
+
+bool8 sub_80B72D0(struct Task *task)
+{
+ if (sub_80E1584())
+ {
+ return FALSE;
+ }
+ sub_80E1570();
+ task->data[0]++;
+ return TRUE;
+}
+
+bool8 sub_80B72F4(struct Task *task)
+{
+ struct MapObject *mapObject;
+ mapObject = &gMapObjects[gPlayerAvatar.mapObjectId];
+ if (FieldObjectClearAnimIfSpecialAnimFinished(mapObject))
+ {
+ CameraObjectReset1();
+ ScriptContext2_Disable();
+ FieldObjectSetSpecialAnim(mapObject, GetGoSpeed0AnimId(DIR_EAST));
+ DestroyTask(FindTaskIdByFunc(sub_80B70DC));
+ }
+ return FALSE;
+}
+
+void sub_80B7384(u8);
+
+bool8 FldEff_UseWaterfall(void)
+{
+ u8 taskId;
+ taskId = CreateTask(sub_80B7384, 0xff);
+ gTasks[taskId].data[1] = gFieldEffectArguments[0];
+ sub_80B7384(taskId);
+ return FALSE;
+}
+
+void sub_80B7384(u8 taskId)
+{
+ while (gUnknown_0855C418[gTasks[taskId].data[0]](&gTasks[taskId], &gMapObjects[gPlayerAvatar.mapObjectId]));
+}
+
+bool8 sub_80B73D0(struct Task *task, struct MapObject *mapObject)
+{
+ ScriptContext2_Enable();
+ gPlayerAvatar.preventStep = TRUE;
+ task->data[0]++;
+ return FALSE;
+}
+
+bool8 waterfall_1_do_anim_probably(struct Task *task, struct MapObject *mapObject)
+{
+ ScriptContext2_Enable();
+ if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(mapObject))
+ {
+ FieldObjectClearAnimIfSpecialAnimFinished(mapObject);
+ gFieldEffectArguments[0] = task->data[1];
+ FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT);
+ task->data[0]++;
+ }
+ return FALSE;
+}
+
+bool8 waterfall_2_wait_anim_finish_probably(struct Task *task, struct MapObject *mapObject)
+{
+ if (FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON))
+ {
+ return FALSE;
+ }
+ task->data[0]++;
+ return TRUE;
+}
+
+bool8 sub_80B7450(struct Task *task, struct MapObject *mapObject)
+{
+ FieldObjectSetSpecialAnim(mapObject, GetSimpleGoAnimId(DIR_NORTH));
+ task->data[0]++;
+ return FALSE;
+}
+
+bool8 sub_80B7478(struct Task *task, struct MapObject *mapObject)
+{
+ if (!FieldObjectClearAnimIfSpecialAnimFinished(mapObject))
+ {
+ return FALSE;
+ }
+ if (MetatileBehavior_IsWaterfall(mapObject->mapobj_unk_1E))
+ {
+ task->data[0] = 3;
+ return TRUE;
+ }
+ ScriptContext2_Disable();
+ gPlayerAvatar.preventStep = FALSE;
+ DestroyTask(FindTaskIdByFunc(sub_80B7384));
+ FieldEffectActiveListRemove(FLDEFF_USE_WATERFALL);
+ return FALSE;
+}
+
+void Task_Dive(u8);
+extern int dive_warp(struct MapPosition *, u16);
+
+bool8 FldEff_UseDive(void)
+{
+ u8 taskId;
+ taskId = CreateTask(Task_Dive, 0xff);
+ gTasks[taskId].data[15] = gFieldEffectArguments[0];
+ gTasks[taskId].data[14] = gFieldEffectArguments[1];
+ Task_Dive(taskId);
+ return FALSE;
+}
+
+void Task_Dive(u8 taskId)
+{
+ while (gUnknown_0855C42C[gTasks[taskId].data[0]](&gTasks[taskId]));
+}
+
+bool8 dive_1_lock(struct Task *task)
+{
+ gPlayerAvatar.preventStep = TRUE;
+ task->data[0]++;
+ return FALSE;
+}
+
+bool8 dive_2_unknown(struct Task *task)
+{
+ ScriptContext2_Enable();
+ gFieldEffectArguments[0] = task->data[15];
+ FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT);
+ task->data[0]++;
+ return FALSE;
+}
+
+bool8 dive_3_unknown(struct Task *task)
+{
+ struct MapPosition mapPosition;
+ PlayerGetDestCoords(&mapPosition.x, &mapPosition.y);
+ if (!FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON))
+ {
+ dive_warp(&mapPosition, gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1E);
+ DestroyTask(FindTaskIdByFunc(Task_Dive));
+ FieldEffectActiveListRemove(FLDEFF_USE_DIVE);
+ }
+ return FALSE;
+}
+
+void sub_80B75F0(u8);
+void mapldr_080851BC(void);
+
+void sub_80B75D8(u8 priority)
+{
+ CreateTask(sub_80B75F0, priority);
+}
+
+void sub_80B75F0(u8 taskId)
+{
+ while (gUnknown_0855C438[gTasks[taskId].data[0]](&gTasks[taskId], &gMapObjects[gPlayerAvatar.mapObjectId], &gSprites[gPlayerAvatar.spriteId]));
+}
+
+bool8 sub_80B764C(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite)
+{
+ FreezeMapObjects();
+ CameraObjectReset2();
+ SetCameraPanningCallback(NULL);
+ gPlayerAvatar.preventStep = TRUE;
+ mapObject->mapobj_bit_26 = 1;
+ task->data[1] = 1;
+ task->data[0]++;
+ return TRUE;
+}
+
+bool8 sub_80B7684(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite)
+{
+ SetCameraPanning(0, task->data[1]);
+ task->data[1] = -task->data[1];
+ task->data[2]++;
+ if (task->data[2] > 7)
+ {
+ task->data[2] = 0;
+ task->data[0]++;
+ }
+ return FALSE;
+}
+
+bool8 sub_80B76B8(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite)
+{
+ sprite->pos2.y = 0;
+ task->data[3] = 1;
+ gFieldEffectArguments[0] = mapObject->coords2.x;
+ gFieldEffectArguments[1] = mapObject->coords2.y;
+ gFieldEffectArguments[2] = sprite->subpriority - 1;
+ gFieldEffectArguments[3] = sprite->oam.priority;
+ FieldEffectStart(FLDEFF_LAVARIDGE_GYM_WARP);
+ PlaySE(SE_W153);
+ task->data[0]++;
+ return TRUE;
+}
+
+bool8 sub_80B7704(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite)
+{
+ s16 centerToCornerVecY;
+ SetCameraPanning(0, task->data[1]);
+ if (task->data[1] = -task->data[1], ++task->data[2] <= 17)
+ {
+ if (!(task->data[2] & 1) && (task->data[1] <= 3))
+ {
+ task->data[1] <<= 1;
+ }
+ } else if (!(task->data[2] & 4) && (task->data[1] > 0))
+ {
+ task->data[1] >>= 1;
+ }
+ if (task->data[2] > 6)
+ {
+ centerToCornerVecY = -(sprite->centerToCornerVecY << 1);
+ if (sprite->pos2.y > -(sprite->pos1.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY + centerToCornerVecY))
+ {
+ sprite->pos2.y -= task->data[3];
+ if (task->data[3] <= 7)
+ {
+ task->data[3]++;
+ }
+ } else
+ {
+ task->data[4] = 1;
+ }
+ }
+ if (task->data[5] == 0 && sprite->pos2.y < -0x10)
+ {
+ task->data[5]++;
+ mapObject->mapobj_bit_26 = 1;
+ sprite->oam.priority = 1;
+ sprite->subspriteMode = 2;
+ }
+ if (task->data[1] == 0 && task->data[4] != 0)
+ {
+ task->data[0]++;
+ }
+ return FALSE;
+}
+
+bool8 sub_80B77F8(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite)
+{
+ music_something();
+ sub_80AF0B4();
+ task->data[0]++;
+ return FALSE;
+}
+
+bool8 sub_80B7814(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite)
+{
+ if (!gPaletteFade.active && sub_80859A0() == TRUE)
+ {
+ warp_in();
+ gFieldCallback = mapldr_080851BC;
+ SetMainCallback2(CB2_LoadMap);
+ DestroyTask(FindTaskIdByFunc(sub_80B75F0));
+ }
+ return FALSE;
+}
+
+void sub_80B7890(u8);
+
+void mapldr_080851BC(void)
+{
+ Overworld_PlaySpecialMapMusic();
+ pal_fill_for_maplights();
+ ScriptContext2_Enable();
+ gFieldCallback = NULL;
+ CreateTask(sub_80B7890, 0);
+}
+
+void sub_80B7890(u8 taskId)
+{
+ while (gUnknown_0855C450[gTasks[taskId].data[0]](&gTasks[taskId], &gMapObjects[gPlayerAvatar.mapObjectId], &gSprites[gPlayerAvatar.spriteId]));
+}
+
+bool8 sub_80B78EC(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite)
+{
+ CameraObjectReset2();
+ FreezeMapObjects();
+ gPlayerAvatar.preventStep = TRUE;
+ mapObject->mapobj_bit_13 = 1;
+ task->data[0]++;
+ return FALSE;
+}
+
+bool8 sub_80B791C(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite)
+{
+ if (IsWeatherNotFadingIn())
+ {
+ gFieldEffectArguments[0] = mapObject->coords2.x;
+ gFieldEffectArguments[1] = mapObject->coords2.y;
+ gFieldEffectArguments[2] = sprite->subpriority - 1;
+ gFieldEffectArguments[3] = sprite->oam.priority;
+ task->data[1] = FieldEffectStart(FLDEFF_POP_OUT_OF_ASH);
+ task->data[0]++;
+ }
+ return FALSE;
+}
+
+bool8 sub_80B7968(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite)
+{
+ sprite = &gSprites[task->data[1]];
+ if (sprite->animCmdIndex > 1)
+ {
+ task->data[0]++;
+ mapObject->mapobj_bit_13 = 0;
+ CameraObjectReset1();
+ PlaySE(SE_W091);
+ FieldObjectSetSpecialAnim(mapObject, sub_8093514(DIR_EAST));
+ }
+ return FALSE;
+}
+
+bool8 sub_80B79BC(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite)
+{
+ if (FieldObjectClearAnimIfSpecialAnimFinished(mapObject))
+ {
+ gPlayerAvatar.preventStep = FALSE;
+ ScriptContext2_Disable();
+ UnfreezeMapObjects();
+ DestroyTask(FindTaskIdByFunc(sub_80B7890));
+ }
+ return FALSE;
+}
+
+extern const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[36];
+
+u8 FldEff_LavaridgeGymWarp(void)
+{
+ u8 spriteId;
+ sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[33], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ gSprites[spriteId].oam.priority = gFieldEffectArguments[3];
+ gSprites[spriteId].coordOffsetEnabled = 1;
+ return spriteId;
+}
+
+void sub_80B7A58(struct Sprite *sprite)
+{
+ if (sprite->animEnded)
+ {
+ FieldEffectStop(sprite, FLDEFF_LAVARIDGE_GYM_WARP);
+ }
+}
+
+void sub_80B7A8C(u8);
+
+void sub_80B7A74(u8 priority)
+{
+ CreateTask(sub_80B7A8C, priority);
+}
+
+void sub_80B7A8C(u8 taskId)
+{
+ while(gUnknown_0855C460[gTasks[taskId].data[0]](&gTasks[taskId], &gMapObjects[gPlayerAvatar.mapObjectId], &gSprites[gPlayerAvatar.spriteId]));
+}
+
+bool8 sub_80B7AE8(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite)
+{
+ FreezeMapObjects();
+ CameraObjectReset2();
+ gPlayerAvatar.preventStep = TRUE;
+ mapObject->mapobj_bit_26 = 1;
+ task->data[0]++;
+ return FALSE;
+}
+
+bool8 sub_80B7B18(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite)
+{
+ if (FieldObjectClearAnimIfSpecialAnimFinished(mapObject))
+ {
+ if (task->data[1] > 3)
+ {
+ gFieldEffectArguments[0] = mapObject->coords2.x;
+ gFieldEffectArguments[1] = mapObject->coords2.y;
+ gFieldEffectArguments[2] = sprite->subpriority - 1;
+ gFieldEffectArguments[3] = sprite->oam.priority;
+ task->data[1] = FieldEffectStart(FLDEFF_POP_OUT_OF_ASH);
+ task->data[0]++;
+ } else
+ {
+ task->data[1]++;
+ FieldObjectSetSpecialAnim(mapObject, GetStepInPlaceDelay4AnimId(mapObject->mapobj_unk_18));
+ PlaySE(SE_FU_ZUZUZU);
+ }
+ }
+ return FALSE;
+}
+
+bool8 sub_80B7B94(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite)
+{
+ if (gSprites[task->data[1]].animCmdIndex == 2)
+ {
+ mapObject->mapobj_bit_13 = 1;
+ task->data[0]++;
+ }
+ return FALSE;
+}
+
+bool8 sub_80B7BCC(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite)
+{
+ if (!FieldEffectActiveListContains(FLDEFF_POP_OUT_OF_ASH))
+ {
+ music_something();
+ sub_80AF0B4();
+ task->data[0]++;
+ }
+ return FALSE;
+}
+
+void sub_80B7CE4(u8);
+void mapldr_080859D4(void);
+
+bool8 sub_80B7BF4(struct Task *task, struct MapObject *mapObject, struct Sprite *sprite)
+{
+ if (!gPaletteFade.active && sub_80859A0() == TRUE)
+ {
+ warp_in();
+ gFieldCallback = sub_80B6B68;
+ SetMainCallback2(CB2_LoadMap);
+ DestroyTask(FindTaskIdByFunc(sub_80B7A8C));
+ }
+ return FALSE;
+}
+
+u8 FldEff_PopOutOfAsh(void)
+{
+ u8 spriteId;
+ sub_80930E0((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[32], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ gSprites[spriteId].oam.priority = gFieldEffectArguments[3];
+ gSprites[spriteId].coordOffsetEnabled = 1;
+ return spriteId;
+}
+
+void sub_80B7CAC(struct Sprite *sprite)
+{
+ if (sprite->animEnded)
+ {
+ FieldEffectStop(sprite, FLDEFF_POP_OUT_OF_ASH);
+ }
+}
+
+void sub_80B7CC8(void)
+{
+ ScriptContext2_Enable();
+ FreezeMapObjects();
+ CreateTask(sub_80B7CE4, 0x50);
+}
+
+void sub_80B7CE4(u8 taskId)
+{
+ gUnknown_0855C474[gTasks[taskId].data[0]](&gTasks[taskId]);
+}
+
+void sub_80B7D14(struct Task *task)
+{
+ task->data[0]++;
+ task->data[14] = 64;
+ task->data[15] = player_get_direction_lower_nybble();
+}
+
+void sub_80B7D34(struct Task *task)
+{
+ struct MapObject *mapObject;
+ u8 spinDirections[5] = {1, 3, 4, 2, 1};
+ if (task->data[14] != 0 && (--task->data[14]) == 0)
+ {
+ music_something();
+ sub_80AF0B4();
+ }
+ mapObject = &gMapObjects[gPlayerAvatar.mapObjectId];
+ if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(mapObject) || FieldObjectClearAnimIfSpecialAnimFinished(mapObject))
+ {
+ if (task->data[14] == 0 && !gPaletteFade.active && sub_80859A0() == TRUE)
+ {
+ FieldObjectSetDirection(mapObject, task->data[15]);
+ sub_8084E14();
+ warp_in();
+ gFieldCallback = mapldr_080859D4;
+ SetMainCallback2(CB2_LoadMap);
+ DestroyTask(FindTaskIdByFunc(sub_80B7CE4));
+ } else if (task->data[1] == 0 || (--task->data[1]) == 0)
+ {
+ FieldObjectSetSpecialAnim(mapObject, GetFaceDirectionAnimId(spinDirections[mapObject->mapobj_unk_18]));
+ if (task->data[2] < 12)
+ {
+ task->data[2]++;
+ }
+ task->data[1] = 8 >> (task->data[2] >> 2);
+ }
+ }
+}
+
+void (*const gUnknown_0855C484[])(struct Task *) = {
+ sub_80B7EC4,
+ sub_80B7EE8
+};
+
+void sub_80B7E94(u8);
+
+void mapldr_080859D4(void)
+{
+ Overworld_PlaySpecialMapMusic();
+ pal_fill_for_maplights();
+ ScriptContext2_Enable();
+ FreezeMapObjects();
+ gFieldCallback = NULL;
+ gMapObjects[gPlayerAvatar.mapObjectId].mapobj_bit_13 = 1;
+ CreateTask(sub_80B7E94, 0);
+}
+
+void sub_80B7E94(u8 taskId)
+{
+ gUnknown_0855C484[gTasks[taskId].data[0]](&gTasks[taskId]);
+}
+
+void sub_80B7EC4(struct Task *task)
+{
+ if (IsWeatherNotFadingIn())
+ {
+ task->data[0]++;
+ task->data[15] = player_get_direction_lower_nybble();
+ }
+}
+
+void sub_80B7EE8(struct Task *task)
+{
+ u8 spinDirections[5] = {1, 3, 4, 2, 1};
+ struct MapObject *mapObject = &gMapObjects[gPlayerAvatar.mapObjectId];
+ if (task->data[1] == 0 || (--task->data[1]) == 0)
+ {
+ if (FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(mapObject) && !FieldObjectClearAnimIfSpecialAnimFinished(mapObject))
+ {
+ return;
+ }
+ if (task->data[2] >= 32 && task->data[15] == player_get_direction_lower_nybble())
+ {
+ mapObject->mapobj_bit_13 = 0;
+ ScriptContext2_Disable();
+ UnfreezeMapObjects();
+ DestroyTask(FindTaskIdByFunc(sub_80B7E94));
+ return;
+ }
+ FieldObjectSetSpecialAnim(mapObject, GetFaceDirectionAnimId(spinDirections[mapObject->mapobj_unk_18]));
+ if (task->data[2] < 32)
+ {
+ task->data[2]++;
+ }
+ task->data[1] = task->data[2] >> 2;
+ }
+ mapObject->mapobj_bit_13 ^= 1;
+}
+
+static void ExecuteTeleportFieldEffectTask(u8);
+static void TeleportFieldEffectTask1(struct Task*);
+static void TeleportFieldEffectTask2(struct Task*);
+static void TeleportFieldEffectTask3(struct Task*);
+static void TeleportFieldEffectTask4(struct Task*);
+static void mapldr_08085D88(void);
+
+void CreateTeleportFieldEffectTask(void)
+{
+ CreateTask(ExecuteTeleportFieldEffectTask, 0);
+}
+
+static void (*const sTeleportFieldEffectTasks[])(struct Task *) = {
+ TeleportFieldEffectTask1,
+ TeleportFieldEffectTask2,
+ TeleportFieldEffectTask3,
+ TeleportFieldEffectTask4
+};
+
+static void ExecuteTeleportFieldEffectTask(u8 taskId)
+{
+ sTeleportFieldEffectTasks[gTasks[taskId].data[0]](&gTasks[taskId]);
+}
+
+static void TeleportFieldEffectTask1(struct Task *task)
+{
+ ScriptContext2_Enable();
+ FreezeMapObjects();
+ CameraObjectReset2();
+ task->data[15] = player_get_direction_lower_nybble();
+ task->data[0]++;
+}
+
+static void TeleportFieldEffectTask2(struct Task *task)
+{
+ u8 spinDirections[5] = {DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_NORTH, DIR_SOUTH};
+ struct MapObject *mapObject = &gMapObjects[gPlayerAvatar.mapObjectId];
+ if (task->data[1] == 0 || (--task->data[1]) == 0)
+ {
+ FieldObjectTurn(mapObject, spinDirections[mapObject->mapobj_unk_18]);
+ task->data[1] = 8;
+ task->data[2]++;
+ }
+ if (task->data[2] > 7 && task->data[15] == mapObject->mapobj_unk_18)
+ {
+ task->data[0]++;
+ task->data[1] = 4;
+ task->data[2] = 8;
+ task->data[3] = 1;
+ PlaySE(SE_TK_WARPIN);
+ }
+}
+
+static void TeleportFieldEffectTask3(struct Task *task)
+{
+ u8 spinDirections[5] = {DIR_SOUTH, DIR_WEST, DIR_EAST, DIR_NORTH, DIR_SOUTH};
+ struct MapObject *mapObject = &gMapObjects[gPlayerAvatar.mapObjectId];
+ struct Sprite *sprite = &gSprites[gPlayerAvatar.spriteId];
+ if ((--task->data[1]) <= 0)
+ {
+ task->data[1] = 4;
+ FieldObjectTurn(mapObject, spinDirections[mapObject->mapobj_unk_18]);
+ }
+ sprite->pos1.y -= task->data[3];
+ task->data[4] += task->data[3];
+ if ((--task->data[2]) <= 0 && (task->data[2] = 4, task->data[3] < 8))
+ {
+ task->data[3] <<= 1;
+ }
+ if (task->data[4] > 8 && (sprite->oam.priority = 1, sprite->subspriteMode != 0))
+ {
+ sprite->subspriteMode = 2;
+ }
+ if (task->data[4] >= 0xa8)
+ {
+ task->data[0]++;
+ music_something();
+ sub_80AF0B4();
+ }
+}
+
+static void TeleportFieldEffectTask4(struct Task *task)
+{
+ if (!gPaletteFade.active)
+ {
+ if (task->data[5] == FALSE)
+ {
+ sub_81BE72C();
+ task->data[5] = TRUE;
+ }
+
+ if (sub_80859A0() == TRUE)
+ {
+ Overworld_SetWarpDestToLastHealLoc();
+ warp_in();
+ SetMainCallback2(CB2_LoadMap);
+ gFieldCallback = mapldr_08085D88;
+ DestroyTask(FindTaskIdByFunc(ExecuteTeleportFieldEffectTask));
+ }
+ }
+}
+
+void sub_80B8250(u8);
+
+static void mapldr_08085D88(void)
+{
+ Overworld_PlaySpecialMapMusic();
+ pal_fill_for_maplights();
+ ScriptContext2_Enable();
+ FreezeMapObjects();
+ gFieldCallback = NULL;
+ gMapObjects[gPlayerAvatar.mapObjectId].mapobj_bit_13 = 1;
+ CameraObjectReset2();
+ CreateTask(sub_80B8250, 0);
+}
+
+void (*const gUnknown_0855C49C[])(struct Task *) = {
+ sub_80B8280,
+ sub_80B830C,
+ sub_80B8410
+};
+
+void sub_80B8250(u8 taskId)
+{
+ gUnknown_0855C49C[gTasks[taskId].data[0]](&gTasks[taskId]);
+}
+
+void sub_80B8280(struct Task *task)
+{
+ struct Sprite *sprite;
+ s16 centerToCornerVecY;
+ if (IsWeatherNotFadingIn())
+ {
+ sprite = &gSprites[gPlayerAvatar.spriteId];
+ centerToCornerVecY = -(sprite->centerToCornerVecY << 1);
+ sprite->pos2.y = -(sprite->pos1.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY + centerToCornerVecY);
+ gMapObjects[gPlayerAvatar.mapObjectId].mapobj_bit_13 = 0;
+ task->data[0]++;
+ task->data[1] = 8;
+ task->data[2] = 1;
+ task->data[14] = sprite->subspriteMode;
+ task->data[15] = player_get_direction_lower_nybble();
+ PlaySE(SE_TK_WARPIN);
+ }
+}
+
+void sub_80B830C(struct Task *task)
+{
+ u8 spinDirections[5] = {1, 3, 4, 2, 1};
+ struct MapObject *mapObject = &gMapObjects[gPlayerAvatar.mapObjectId];
+ struct Sprite *sprite = &gSprites[gPlayerAvatar.spriteId];
+ if ((sprite->pos2.y += task->data[1]) >= -8)
+ {
+ if (task->data[13] == 0)
+ {
+ task->data[13]++;
+ mapObject->mapobj_bit_2 = 1;
+ sprite->subspriteMode = task->data[14];
+ }
+ } else
+ {
+ sprite->oam.priority = 1;
+ if (sprite->subspriteMode != 0)
+ {
+ sprite->subspriteMode = 2;
+ }
+ }
+ if (sprite->pos2.y >= -0x30 && task->data[1] > 1 && !(sprite->pos2.y & 1))
+ {
+ task->data[1]--;
+ }
+ if ((--task->data[2]) == 0)
+ {
+ task->data[2] = 4;
+ FieldObjectTurn(mapObject, spinDirections[mapObject->mapobj_unk_18]);
+ }
+ if (sprite->pos2.y >= 0)
+ {
+ sprite->pos2.y = 0;
+ task->data[0]++;
+ task->data[1] = 1;
+ task->data[2] = 0;
+ }
+}
+
+void sub_80B8410(struct Task *task)
+{
+ u8 spinDirections[5] = {1, 3, 4, 2, 1};
+ struct MapObject *mapObject = &gMapObjects[gPlayerAvatar.mapObjectId];
+ if ((--task->data[1]) == 0)
+ {
+ FieldObjectTurn(mapObject, spinDirections[mapObject->mapobj_unk_18]);
+ task->data[1] = 8;
+ if ((++task->data[2]) > 4 && task->data[14] == mapObject->mapobj_unk_18)
+ {
+ ScriptContext2_Disable();
+ CameraObjectReset1();
+ UnfreezeMapObjects();
+ DestroyTask(FindTaskIdByFunc(sub_80B8250));
+ }
+ }
+}
+
+void sub_80B8554(u8);
+void sub_80B88B4(u8);
+u8 sub_80B8C60(u32, u32, u32);
+void sub_80B880C(void);
+void sub_80B8874(u16);
+void sub_80B8CC0(struct Sprite *);
+
+bool8 FldEff_FieldMoveShowMon(void)
+{
+ u8 taskId;
+ if (is_map_type_1_2_3_5_or_6(Overworld_GetMapTypeOfSaveblockLocation()) == TRUE)
+ {
+ taskId = CreateTask(sub_80B8554, 0xff);
+ } else
+ {
+ taskId = CreateTask(sub_80B88B4, 0xff);
+ }
+ gTasks[taskId].data[15] = sub_80B8C60(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ return FALSE;
+}
+
+bool8 FldEff_FieldMoveShowMonInit(void)
+{
+ struct Pokemon *pokemon;
+ u32 flag = gFieldEffectArguments[0] & 0x80000000;
+ pokemon = &gPlayerParty[(u8)gFieldEffectArguments[0]];
+ gFieldEffectArguments[0] = GetMonData(pokemon, MON_DATA_SPECIES);
+ gFieldEffectArguments[1] = GetMonData(pokemon, MON_DATA_OT_ID);
+ gFieldEffectArguments[2] = GetMonData(pokemon, MON_DATA_PERSONALITY);
+ gFieldEffectArguments[0] |= flag;
+ FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON);
+ FieldEffectActiveListRemove(FLDEFF_FIELD_MOVE_SHOW_MON_INIT);
+ return FALSE;
+}
+
+void (*const gUnknown_0855C4A8[])(struct Task *) = {
+ sub_80B8584,
+ sub_80B85F8,
+ sub_80B8660,
+ sub_80B86EC,
+ sub_80B871C,
+ sub_80B8770,
+ overworld_bg_setup_2,
+};
+
+void sub_80B8554(u8 taskId)
+{
+ gUnknown_0855C4A8[gTasks[taskId].data[0]](&gTasks[taskId]);
+}
+
+void sub_80B8584(struct Task *task)
+{
+ task->data[11] = REG_WININ;
+ task->data[12] = REG_WINOUT;
+ StoreWordInTwoHalfwords(&task->data[13], (u32)gMain.vblankCallback);
+ task->data[1] = 0xf0f1;
+ task->data[2] = 0x5051;
+ task->data[3] = 0x3f;
+ task->data[4] = 0x3e;
+ SetGpuReg(REG_OFFSET_WIN0H, task->data[1]);
+ SetGpuReg(REG_OFFSET_WIN0V, task->data[2]);
+ SetGpuReg(REG_OFFSET_WININ, task->data[3]);
+ SetGpuReg(REG_OFFSET_WINOUT, task->data[4]);
+ SetVBlankCallback(sub_80B880C);
+ task->data[0]++;
+}
+
+void sub_80B85F8(struct Task *task)
+{
+ u16 offset;
+ u16 delta;
+ offset = ((REG_BG0CNT >> 2) << 14);
+ delta = ((REG_BG0CNT >> 8) << 11);
+ CpuCopy16(gFieldMoveStreaksTiles, (void *)(VRAM + offset), 0x200);
+ CpuFill32(0, (void *)(VRAM + delta), 0x800);
+ LoadPalette(gFieldMoveStreaksPalette, 0xf0, 0x20);
+ sub_80B8874(delta);
+ task->data[0]++;
+}
+
+void sub_80B8660(struct Task *task)
+{
+ s16 v0;
+ s16 v2;
+ s16 v3;
+ task->data[5] -= 16;
+ v0 = ((u16)task->data[1] >> 8);
+ v2 = ((u16)task->data[2] >> 8);
+ v3 = ((u16)task->data[2] & 0xff);
+ v0 -= 16;
+ v2 -= 2;
+ v3 += 2;
+ if (v0 < 0)
+ {
+ v0 = 0;
+ }
+ if (v2 < 0x28)
+ {
+ v2 = 0x28;
+ }
+ if (v3 > 0x78)
+ {
+ v3 = 0x78;
+ }
+ task->data[1] = (v0 << 8) | (task->data[1] & 0xff);
+ task->data[2] = (v2 << 8) | v3;
+ if (v0 == 0 && v2 == 0x28 && v3 == 0x78)
+ {
+ gSprites[task->data[15]].callback = sub_80B8CC0;
+ task->data[0]++;
+ }
+}
+
+void sub_80B86EC(struct Task *task)
+{
+ task->data[5] -= 16;
+ if (gSprites[task->data[15]].data[7])
+ {
+ task->data[0]++;
+ }
+}
+
+void sub_80B871C(struct Task *task)
+{
+ s16 v2;
+ s16 v3;
+ task->data[5] -= 16;
+ v2 = (task->data[2] >> 8);
+ v3 = (task->data[2] & 0xff);
+ v2 += 6;
+ v3 -= 6;
+ if (v2 > 0x50)
+ {
+ v2 = 0x50;
+ }
+ if (v3 < 0x51)
+ {
+ v3 = 0x51;
+ }
+ task->data[2] = (v2 << 8) | v3;
+ if (v2 == 0x50 && v3 == 0x51)
+ {
+ task->data[0]++;
+ }
+}
+
+void sub_80B8770(struct Task *task)
+{
+ u16 bg0cnt;
+ bg0cnt = (REG_BG0CNT >> 8) << 11;
+ CpuFill32(0, (void *)VRAM + bg0cnt, 0x800);
+ task->data[1] = 0xf1;
+ task->data[2] = 0xa1;
+ task->data[3] = task->data[11];
+ task->data[4] = task->data[12];
+ task->data[0]++;
+}
+
+void overworld_bg_setup_2(struct Task *task)
+{
+ IntrCallback callback;
+ LoadWordFromTwoHalfwords((u16 *)&task->data[13], (u32 *)&callback);
+ SetVBlankCallback(callback);
+ sub_8197200();
+ FreeResourcesAndDestroySprite(&gSprites[task->data[15]], task->data[15]);
+ FieldEffectActiveListRemove(FLDEFF_FIELD_MOVE_SHOW_MON);
+ DestroyTask(FindTaskIdByFunc(sub_80B8554));
+}
+
+void sub_80B880C(void)
+{
+ struct Task *task;
+ IntrCallback callback;
+ task = &gTasks[FindTaskIdByFunc(sub_80B8554)];
+ LoadWordFromTwoHalfwords((u16 *)&task->data[13], (u32 *)&callback);
+ callback();
+ SetGpuReg(REG_OFFSET_WIN0H, task->data[1]);
+ SetGpuReg(REG_OFFSET_WIN0V, task->data[2]);
+ SetGpuReg(REG_OFFSET_WININ, task->data[3]);
+ SetGpuReg(REG_OFFSET_WINOUT, task->data[4]);
+ SetGpuReg(REG_OFFSET_BG0HOFS, task->data[5]);
+ SetGpuReg(REG_OFFSET_BG0VOFS, task->data[6]);
+}
+
+void sub_80B8874(u16 offs)
+{
+ u16 i;
+ u16 *dest;
+ dest = (u16 *)(VRAM + 0x140 + offs);
+ for (i = 0; i < 0x140; i++, dest++)
+ {
+ *dest = gFieldMoveStreaksTilemap[i] | 0xf000;
+ }
+}
+
+void sub_80B8AE0(void);
+bool8 sub_80B8B38(struct Task *);
+void sub_80B8B28(struct Task *);
+bool8 sub_80B8BF0(struct Task *);
+
+void (*const gUnknown_0855C4C4[])(struct Task *) = {
+ sub_80B88E4,
+ sub_80B8920,
+ sub_80B898C,
+ sub_80B89DC,
+ sub_80B8A0C,
+ sub_80B8A44,
+ sub_80B8A64,
+};
+
+void sub_80B88B4(u8 taskId)
+{
+ gUnknown_0855C4C4[gTasks[taskId].data[0]](&gTasks[taskId]);
+}
+
+void sub_80B88E4(struct Task *task)
+{
+ SetGpuReg(REG_OFFSET_BG0HOFS, task->data[1]);
+ SetGpuReg(REG_OFFSET_BG0VOFS, task->data[2]);
+ StoreWordInTwoHalfwords((u16 *)&task->data[13], (u32)gMain.vblankCallback);
+ SetVBlankCallback(sub_80B8AE0);
+ task->data[0]++;
+}
+
+void sub_80B8920(struct Task *task)
+{
+ u16 offset;
+ u16 delta;
+ offset = ((REG_BG0CNT >> 2) << 14);
+ delta = ((REG_BG0CNT >> 8) << 11);
+ task->data[12] = delta;
+ CpuCopy16(gDarknessFieldMoveStreaksTiles, (void *)(VRAM + offset), 0x80);
+ CpuFill32(0, (void *)(VRAM + delta), 0x800);
+ LoadPalette(gDarknessFieldMoveStreaksPalette, 0xf0, 0x20);
+ task->data[0]++;
+}
+
+void sub_80B898C(struct Task *task)
+{
+ if (sub_80B8B38(task))
+ {
+ SetGpuReg(REG_OFFSET_WIN1H, 0x00f0);
+ SetGpuReg(REG_OFFSET_WIN1V, 0x2878);
+ gSprites[task->data[15]].callback = sub_80B8CC0;
+ task->data[0]++;
+ }
+ sub_80B8B28(task);
+}
+
+void sub_80B89DC(struct Task *task)
+{
+ sub_80B8B28(task);
+ if (gSprites[task->data[15]].data[7])
+ {
+ task->data[0]++;
+ }
+}
+
+void sub_80B8A0C(struct Task *task)
+{
+ sub_80B8B28(task);
+ task->data[3] = task->data[1] & 7;
+ task->data[4] = 0;
+ SetGpuReg(REG_OFFSET_WIN1H, 0xffff);
+ SetGpuReg(REG_OFFSET_WIN1V, 0xffff);
+ task->data[0]++;
+}
+
+void sub_80B8A44(struct Task *task)
+{
+ sub_80B8B28(task);
+ if (sub_80B8BF0(task))
+ {
+ task->data[0]++;
+ }
+}
+
+void sub_80B8A64(struct Task *task)
+{
+ IntrCallback intrCallback;
+ u16 bg0cnt;
+ bg0cnt = (REG_BG0CNT >> 8) << 11;
+ CpuFill32(0, (void *)VRAM + bg0cnt, 0x800);
+ LoadWordFromTwoHalfwords((u16 *)&task->data[13], (u32 *)&intrCallback);
+ SetVBlankCallback(intrCallback);
+ sub_8197200();
+ FreeResourcesAndDestroySprite(&gSprites[task->data[15]], task->data[15]);
+ FieldEffectActiveListRemove(FLDEFF_FIELD_MOVE_SHOW_MON);
+ DestroyTask(FindTaskIdByFunc(sub_80B88B4));
+}
+
+void sub_80B8AE0(void)
+{
+ IntrCallback intrCallback;
+ struct Task *task;
+ task = &gTasks[FindTaskIdByFunc(sub_80B88B4)];
+ LoadWordFromTwoHalfwords((u16 *)&task->data[13], (u32 *)&intrCallback);
+ intrCallback();
+ SetGpuReg(REG_OFFSET_BG0HOFS, task->data[1]);
+ SetGpuReg(REG_OFFSET_BG0VOFS, task->data[2]);
+}
+
+void sub_80B8B28(struct Task *task)
+{
+ task->data[1] -= 16;
+ task->data[3] += 16;
+}
+
+#ifdef NONMATCHING
+bool8 sub_80B8B38(struct Task *task)
+{
+ u16 i;
+ u16 srcOffs;
+ u16 dstOffs;
+ u16 *dest;
+ if (task->data[4] >= 32)
+ {
+ return TRUE;
+ }
+ dstOffs = (task->data[3] >> 3) & 0x1f;
+ if (dstOffs >= task->data[4])
+ {
+ dstOffs = (32 - dstOffs) & 0x1f;
+ srcOffs = (32 - task->data[4]) & 0x1f;
+ dest = (u16 *)(VRAM + 0x140 + (u16)task->data[12]);
+ for (i=0; i<10; i++)
+ {
+ dest[dstOffs + i * 32] = gDarknessFieldMoveStreaksTilemap[srcOffs + i * 32] | 0xf000;
+ dest[((dstOffs + 1) & 0x1f) + i * 32] = gDarknessFieldMoveStreaksTilemap[((srcOffs + 1) & 0x1f) + i * 32] | 0xf000;
+ }
+ task->data[4] += 2;
+ }
+ return FALSE;
+}
+#else
+NAKED
+bool8 sub_80B8B38(struct Task *task)
+{
+ asm_unified("\tpush {r4-r7,lr}\n"
+ "\tmov r7, r10\n"
+ "\tmov r6, r9\n"
+ "\tmov r5, r8\n"
+ "\tpush {r5-r7}\n"
+ "\tsub sp, 0x4\n"
+ "\tadds r5, r0, 0\n"
+ "\tldrh r2, [r5, 0x10]\n"
+ "\tmovs r1, 0x10\n"
+ "\tldrsh r0, [r5, r1]\n"
+ "\tcmp r0, 0x1F\n"
+ "\tble _08088724\n"
+ "\tmovs r0, 0x1\n"
+ "\tb _080887A8\n"
+ "_08088724:\n"
+ "\tldrh r0, [r5, 0xE]\n"
+ "\tlsls r0, 16\n"
+ "\tasrs r3, r0, 19\n"
+ "\tmovs r1, 0x1F\n"
+ "\tands r3, r1\n"
+ "\tmovs r4, 0x10\n"
+ "\tldrsh r0, [r5, r4]\n"
+ "\tcmp r3, r0\n"
+ "\tblt _080887A6\n"
+ "\tmovs r0, 0x20\n"
+ "\tsubs r3, r0, r3\n"
+ "\tands r3, r1\n"
+ "\tsubs r0, r2\n"
+ "\tmov r12, r0\n"
+ "\tmov r7, r12\n"
+ "\tands r7, r1\n"
+ "\tmov r12, r7\n"
+ "\tldrh r0, [r5, 0x20]\n"
+ "\tldr r1, _080887B8 @ =0x06000140\n"
+ "\tadds r1, r0\n"
+ "\tmov r8, r1\n"
+ "\tmovs r4, 0\n"
+ "\tldr r7, _080887BC @ =gDarknessFieldMoveStreaksTilemap\n"
+ "\tmov r10, r7\n"
+ "\tmovs r0, 0xF0\n"
+ "\tlsls r0, 8\n"
+ "\tmov r9, r0\n"
+ "\tadds r1, r3, 0x1\n"
+ "\tmovs r0, 0x1F\n"
+ "\tands r1, r0\n"
+ "\tstr r1, [sp]\n"
+ "\tmov r6, r12\n"
+ "\tadds r6, 0x1\n"
+ "\tands r6, r0\n"
+ "_08088768:\n"
+ "\tlsls r1, r4, 5\n"
+ "\tadds r2, r1, r3\n"
+ "\tlsls r2, 1\n"
+ "\tadd r2, r8\n"
+ "\tmov r7, r12\n"
+ "\tadds r0, r7, r1\n"
+ "\tlsls r0, 1\n"
+ "\tadd r0, r10\n"
+ "\tldrh r0, [r0]\n"
+ "\tmov r7, r9\n"
+ "\torrs r0, r7\n"
+ "\tstrh r0, [r2]\n"
+ "\tldr r0, [sp]\n"
+ "\tadds r2, r1, r0\n"
+ "\tlsls r2, 1\n"
+ "\tadd r2, r8\n"
+ "\tadds r1, r6, r1\n"
+ "\tlsls r1, 1\n"
+ "\tadd r1, r10\n"
+ "\tldrh r0, [r1]\n"
+ "\tmov r1, r9\n"
+ "\torrs r0, r1\n"
+ "\tstrh r0, [r2]\n"
+ "\tadds r0, r4, 0x1\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r4, r0, 16\n"
+ "\tcmp r4, 0x9\n"
+ "\tbls _08088768\n"
+ "\tldrh r0, [r5, 0x10]\n"
+ "\tadds r0, 0x2\n"
+ "\tstrh r0, [r5, 0x10]\n"
+ "_080887A6:\n"
+ "\tmovs r0, 0\n"
+ "_080887A8:\n"
+ "\tadd sp, 0x4\n"
+ "\tpop {r3-r5}\n"
+ "\tmov r8, r3\n"
+ "\tmov r9, r4\n"
+ "\tmov r10, r5\n"
+ "\tpop {r4-r7}\n"
+ "\tpop {r1}\n"
+ "\tbx r1\n"
+ "\t.align 2, 0\n"
+ "_080887B8: .4byte 0x06000140\n"
+ "_080887BC: .4byte gDarknessFieldMoveStreaksTilemap");
+}
+#endif
+
+bool8 sub_80B8BF0(struct Task *task)
+{
+ u16 i;
+ u16 dstOffs;
+ u16 *dest;
+ if (task->data[4] >= 32)
+ {
+ return TRUE;
+ }
+ dstOffs = task->data[3] >> 3;
+ if (dstOffs >= task->data[4])
+ {
+ dstOffs = (task->data[1] >> 3) & 0x1f;
+ dest = (u16 *)(VRAM + 0x140 + (u16)task->data[12]);
+ for (i=0; i<10; i++)
+ {
+ dest[dstOffs + i * 32] = 0xf000;
+ dest[((dstOffs + 1) & 0x1f) + i * 32] = 0xf000;
+ }
+ task->data[4] += 2;
+ }
+ return FALSE;
+}
+
+u8 sub_80B8C60(u32 a0, u32 a1, u32 a2)
+{
+ u16 v0;
+ u8 monSprite;
+ struct Sprite *sprite;
+ v0 = (a0 & 0x80000000) >> 16;
+ a0 &= 0x7fffffff;
+ monSprite = CreateMonSprite_FieldMove(a0, a1, a2, 0x140, 0x50, 0);
+ sprite = &gSprites[monSprite];
+ sprite->callback = SpriteCallbackDummy;
+ sprite->oam.priority = 0;
+ sprite->data[0] = a0;
+ sprite->data[6] = v0;
+ return monSprite;
+}
+
+void sub_80B8D04(struct Sprite *);
+
+void sub_80B8CC0(struct Sprite *sprite)
+{
+ if ((sprite->pos1.x -= 20) <= 0x78)
+ {
+ sprite->pos1.x = 0x78;
+ sprite->data[1] = 30;
+ sprite->callback = sub_80B8D04;
+ if (sprite->data[6])
+ {
+ PlayCry2(sprite->data[0], 0, 0x7d, 0xa);
+ } else
+ {
+ PlayCry1(sprite->data[0], 0);
+ }
+ }
+}
+
+void sub_80B8D20(struct Sprite *);
+
+void sub_80B8D04(struct Sprite *sprite)
+{
+ if ((--sprite->data[1]) == 0)
+ {
+ sprite->callback = sub_80B8D20;
+ }
+}
+
+void sub_80B8D20(struct Sprite *sprite)
+{
+ if (sprite->pos1.x < -0x40)
+ {
+ sprite->data[7] = 1;
+ } else
+ {
+ sprite->pos1.x -= 20;
+ }
+}
+
+void sub_80B8D84(u8);
+
+u8 FldEff_UseSurf(void)
+{
+ u8 taskId;
+ taskId = CreateTask(sub_80B8D84, 0xff);
+ gTasks[taskId].data[15] = gFieldEffectArguments[0];
+ Overworld_ClearSavedMusic();
+ Overworld_ChangeMusicTo(MUS_NAMINORI);
+ return FALSE;
+}
+
+void (*const gUnknown_0855C4E0[])(struct Task *) = {
+ sub_80B8DB4,
+ sub_80B8E14,
+ sub_80B8E60,
+ sub_80B8EA8,
+ sub_80B8F24,
+};
+
+void sub_80B8D84(u8 taskId)
+{
+ gUnknown_0855C4E0[gTasks[taskId].data[0]](&gTasks[taskId]);
+}
+
+void sub_80B8DB4(struct Task *task)
+{
+ ScriptContext2_Enable();
+ FreezeMapObjects();
+ gPlayerAvatar.preventStep = TRUE;
+ SetPlayerAvatarStateMask(8);
+ PlayerGetDestCoords(&task->data[1], &task->data[2]);
+ MoveCoords(gMapObjects[gPlayerAvatar.mapObjectId].placeholder18, &task->data[1], &task->data[2]);
+ task->data[0]++;
+}
+
+void sub_80B8E14(struct Task *task)
+{
+ struct MapObject *mapObject;
+ mapObject = &gMapObjects[gPlayerAvatar.mapObjectId];
+ if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(mapObject) || FieldObjectClearAnimIfSpecialAnimFinished(mapObject))
+ {
+ sub_808C114();
+ FieldObjectSetSpecialAnim(mapObject, 0x39);
+ task->data[0]++;
+ }
+}
+
+void sub_80B8E60(struct Task *task)
+{
+ struct MapObject *mapObject;
+ mapObject = &gMapObjects[gPlayerAvatar.mapObjectId];
+ if (FieldObjectCheckIfSpecialAnimFinishedOrInactive(mapObject))
+ {
+ gFieldEffectArguments[0] = task->data[15] | 0x80000000;
+ FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT);
+ task->data[0]++;
+ }
+}
+
+void sub_80B8EA8(struct Task *task)
+{
+ struct MapObject *mapObject;
+ if (!FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON))
+ {
+ mapObject = &gMapObjects[gPlayerAvatar.mapObjectId];
+ FieldObjectSetGraphicsId(mapObject, GetPlayerAvatarGraphicsIdByStateId(3));
+ FieldObjectClearAnimIfSpecialAnimFinished(mapObject);
+ FieldObjectSetSpecialAnim(mapObject, sub_8093540(mapObject->placeholder18));
+ gFieldEffectArguments[0] = task->data[1];
+ gFieldEffectArguments[1] = task->data[2];
+ gFieldEffectArguments[2] = gPlayerAvatar.mapObjectId;
+ mapObject->mapobj_unk_1A = FieldEffectStart(FLDEFF_SURF_BLOB);
+ task->data[0]++;
+ }
+}
+
+void sub_80B8F24(struct Task *task)
+{
+ struct MapObject *mapObject;
+ mapObject = &gMapObjects[gPlayerAvatar.mapObjectId];
+ if (FieldObjectClearAnimIfSpecialAnimFinished(mapObject))
+ {
+ gPlayerAvatar.preventStep = FALSE;
+ gPlayerAvatar.flags &= 0xdf;
+ FieldObjectSetSpecialAnim(mapObject, GetFaceDirectionAnimId(mapObject->placeholder18));
+ sub_81555AC(mapObject->mapobj_unk_1A, 1);
+ UnfreezeMapObjects();
+ ScriptContext2_Disable();
+ FieldEffectActiveListRemove(FLDEFF_USE_SURF);
+ DestroyTask(FindTaskIdByFunc(sub_80B8D84));
+ }
+}
+
+#ifdef NONMATCHING
+u8 sub_80B8F98(void)
+{
+ u8 spriteId, i, j, k, l;
+ struct Sprite *sprite;
+ spriteId = CreateSprite(gFieldEffectObjectTemplatePointers[36], 0x78, -0x18, 1);
+ sprite = &gSprites[spriteId];
+ sprite->oam.priority = 1;
+ sprite->oam.paletteNum = 4;
+ sprite->data[0] = 0;
+ sprite->data[1] = 0;
+ sprite->data[2] = 0;
+ sprite->data[3] = -1;
+ sprite->data[4] = sprite->pos1.y;
+ sprite->data[5] = 0;
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG0 | BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2 | BLDCNT_TGT2_BG3 | BLDCNT_TGT2_OBJ | BLDCNT_TGT2_BD);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(14, 14));
+ SetGpuReg(REG_OFFSET_WININ, 0x3F3F);
+ LoadPalette(gUnknown_0855B610, 0xC0, sizeof(gUnknown_0855B610));
+ SetGpuReg(REG_OFFSET_BG0VOFS, 120);
+ for (i = 3; i < 15; i++)
+ {
+ for (j = 12; j < 18; j++)
+ {
+ ((u16*)(VRAM + 0xF800))[i * 32 + j] = 0xBFF4 + i * 6 + j + 1;
+ }
+ }
+ for (k = 0; k < 90; k++)
+ {
+ for (l = 0; l < 8; l++)
+ {
+ *(u16*)(VRAM + 0x8000 + (k + 1) * 32 + l * 4) = (gUnknown_0855B630[k * 32 + l * 4 + 1] << 8) + gUnknown_0855B630[k * 32 + l * 4];
+ *(u16*)(VRAM + 0x8000 + (k + 1) * 32 + l * 4 + 2) = (gUnknown_0855B630[k * 32 + l * 4 + 3] << 8) + gUnknown_0855B630[k * 32 + l * 4 + 2];
+ }
+ }
+ return spriteId;
+}
+#else
+NAKED
+u8 sub_80B8F98(void)
+{
+ asm_unified("push {r4-r7,lr}\n\
+ mov r7, r8\n\
+ push {r7}\n\
+ ldr r0, =gFieldEffectObjectTemplatePointers\n\
+ adds r0, 0x90\n\
+ ldr r0, [r0]\n\
+ movs r2, 0x18\n\
+ negs r2, r2\n\
+ movs r1, 0x78\n\
+ movs r3, 0x1\n\
+ bl CreateSprite\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r8, r0\n\
+ lsls r1, r0, 4\n\
+ add r1, r8\n\
+ lsls r1, 2\n\
+ ldr r0, =gSprites\n\
+ adds r1, r0\n\
+ ldrb r2, [r1, 0x5]\n\
+ movs r0, 0xD\n\
+ negs r0, r0\n\
+ ands r0, r2\n\
+ movs r2, 0x4\n\
+ orrs r0, r2\n\
+ movs r2, 0xF\n\
+ ands r0, r2\n\
+ movs r2, 0x40\n\
+ orrs r0, r2\n\
+ strb r0, [r1, 0x5]\n\
+ movs r2, 0\n\
+ strh r2, [r1, 0x2E]\n\
+ strh r2, [r1, 0x30]\n\
+ strh r2, [r1, 0x32]\n\
+ ldr r0, =0x0000ffff\n\
+ strh r0, [r1, 0x34]\n\
+ ldrh r0, [r1, 0x22]\n\
+ strh r0, [r1, 0x36]\n\
+ strh r2, [r1, 0x38]\n\
+ ldr r1, =0x00003e41\n\
+ movs r0, 0x50\n\
+ bl SetGpuReg\n\
+ ldr r1, =0x00000e0e\n\
+ movs r0, 0x52\n\
+ bl SetGpuReg\n\
+ ldr r1, =0x00003f3f\n\
+ movs r0, 0x48\n\
+ bl SetGpuReg\n\
+ ldr r0, =gUnknown_0855B610\n\
+ movs r1, 0xC0\n\
+ movs r2, 0x20\n\
+ bl LoadPalette\n\
+ movs r0, 0x12\n\
+ movs r1, 0x78\n\
+ bl SetGpuReg\n\
+ movs r4, 0x3\n\
+ ldr r7, =0x0600f800\n\
+ ldr r0, =0x0000bff4\n\
+ adds r6, r0, 0\n\
+_080B901A:\n\
+ movs r2, 0xC\n\
+ lsls r0, r4, 1\n\
+ lsls r5, r4, 5\n\
+ adds r0, r4\n\
+ lsls r3, r0, 1\n\
+_080B9024:\n\
+ adds r0, r5, r2\n\
+ lsls r0, 1\n\
+ adds r0, r7\n\
+ adds r1, r2, r6\n\
+ adds r1, r3, r1\n\
+ adds r1, 0x1\n\
+ strh r1, [r0]\n\
+ adds r0, r2, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r2, r0, 24\n\
+ cmp r2, 0x11\n\
+ bls _080B9024\n\
+ adds r0, r4, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r4, r0, 24\n\
+ cmp r4, 0xE\n\
+ bls _080B901A\n\
+ movs r0, 0\n\
+ ldr r5, =gUnknown_0855B630\n\
+_080B904A:\n\
+ movs r4, 0\n\
+ adds r7, r0, 0x1\n\
+ lsls r6, r0, 5\n\
+_080B9050:\n\
+ lsls r1, r4, 2\n\
+ adds r1, r6, r1\n\
+ ldr r0, =0x06008020\n\
+ adds r3, r1, r0\n\
+ adds r0, r1, 0x1\n\
+ adds r0, r5\n\
+ ldrb r2, [r0]\n\
+ lsls r2, 8\n\
+ adds r0, r1, r5\n\
+ ldrb r0, [r0]\n\
+ adds r0, r2\n\
+ strh r0, [r3]\n\
+ ldr r0, =0x06008022\n\
+ adds r3, r1, r0\n\
+ adds r0, r1, 0x3\n\
+ adds r0, r5\n\
+ ldrb r2, [r0]\n\
+ lsls r2, 8\n\
+ adds r1, 0x2\n\
+ adds r1, r5\n\
+ ldrb r0, [r1]\n\
+ adds r0, r2\n\
+ strh r0, [r3]\n\
+ adds r0, r4, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r4, r0, 24\n\
+ cmp r4, 0x7\n\
+ bls _080B9050\n\
+ lsls r0, r7, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, 0x59\n\
+ bls _080B904A\n\
+ mov r0, r8\n\
+ pop {r3}\n\
+ mov r8, r3\n\
+ pop {r4-r7}\n\
+ pop {r1}\n\
+ bx r1\n\
+ .pool");
+}
+#endif // NONMATCHING
+
+void sub_80B9128(struct Sprite *);
+
+u8 FldEff_NPCFlyOut(void)
+{
+ u8 spriteId;
+ struct Sprite *sprite;
+ spriteId = CreateSprite(gFieldEffectObjectTemplatePointers[26], 0x78, 0, 1);
+ sprite = &gSprites[spriteId];
+ sprite->oam.paletteNum = 0;
+ sprite->oam.priority = 1;
+ sprite->callback = sub_80B9128;
+ sprite->data[1] = gFieldEffectArguments[0];
+ PlaySE(SE_W019);
+ return spriteId;
+}
+
+void sub_80B9128(struct Sprite *sprite)
+{
+ struct Sprite *npcSprite;
+ sprite->pos2.x = Cos(sprite->data[2], 0x8c);
+ sprite->pos2.y = Sin(sprite->data[2], 0x48);
+ sprite->data[2] = (sprite->data[2] + 4) & 0xff;
+ if (sprite->data[0])
+ {
+ npcSprite = &gSprites[sprite->data[1]];
+ npcSprite->coordOffsetEnabled = 0;
+ npcSprite->pos1.x = sprite->pos1.x + sprite->pos2.x;
+ npcSprite->pos1.y = sprite->pos1.y + sprite->pos2.y - 8;
+ npcSprite->pos2.x = 0;
+ npcSprite->pos2.y = 0;
+ }
+ if (sprite->data[2] >= 0x80)
+ {
+ FieldEffectStop(sprite, FLDEFF_NPCFLY_OUT);
+ }
+}
+
+void sub_80B91D4(u8);
+extern void sub_81555D8(u8, u8);
+u8 sub_80B94C4(void);
+bool8 sub_80B9508(u8);
+void sub_80B9524(u8);
+void sub_80B9560(u8, u8);
+void sub_80B957C(struct Sprite *);
+void sub_80B963C(struct Sprite *);
+
+u8 FldEff_UseFly(void)
+{
+ u8 taskId;
+ taskId = CreateTask(sub_80B91D4, 0xfe);
+ gTasks[taskId].data[1] = gFieldEffectArguments[0];
+ return 0;
+}
+
+void (*const gUnknown_0855C4F4[])(struct Task *) = {
+ sub_80B9204,
+ sub_80B925C,
+ sub_80B92A0,
+ sub_80B92F8,
+ sub_80B933C,
+ sub_80B9390,
+ sub_80B9418,
+ sub_80B9474,
+ sub_80B9494,
+};
+
+void sub_80B91D4(u8 taskId)
+{
+ gUnknown_0855C4F4[gTasks[taskId].data[0]](&gTasks[taskId]);
+}
+
+void sub_80B9204(struct Task *task)
+{
+ struct MapObject *mapObject;
+ mapObject = &gMapObjects[gPlayerAvatar.mapObjectId];
+ if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(mapObject) || FieldObjectClearAnimIfSpecialAnimFinished(mapObject))
+ {
+ task->data[15] = gPlayerAvatar.flags;
+ gPlayerAvatar.preventStep = TRUE;
+ SetPlayerAvatarStateMask(1);
+ sub_808C114();
+ FieldObjectSetSpecialAnim(mapObject, 0x39);
+ task->data[0]++;
+ }
+}
+
+void sub_80B925C(struct Task *task)
+{
+ struct MapObject *mapObject;
+ mapObject = &gMapObjects[gPlayerAvatar.mapObjectId];
+ if (FieldObjectClearAnimIfSpecialAnimFinished(mapObject))
+ {
+ task->data[0]++;
+ gFieldEffectArguments[0] = task->data[1];
+ FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT);
+ }
+}
+
+void sub_80B92A0(struct Task *task)
+{
+ struct MapObject *mapObject;
+ if (!FieldEffectActiveListContains(FLDEFF_FIELD_MOVE_SHOW_MON))
+ {
+ mapObject = &gMapObjects[gPlayerAvatar.mapObjectId];
+ if (task->data[15] & 0x08)
+ {
+ sub_81555AC(mapObject->mapobj_unk_1A, 2);
+ sub_81555D8(mapObject->mapobj_unk_1A, 0);
+ }
+ task->data[1] = sub_80B94C4();
+ task->data[0]++;
+ }
+}
+
+void sub_80B92F8(struct Task *task)
+{
+ if (sub_80B9508(task->data[1]))
+ {
+ task->data[0]++;
+ task->data[2] = 16;
+ SetPlayerAvatarTransitionFlags(PLAYER_AVATAR_FLAG_ON_FOOT);
+ FieldObjectSetSpecialAnim(&gMapObjects[gPlayerAvatar.mapObjectId], 0x02);
+ }
+}
+
+void sub_80B933C(struct Task *task)
+{
+ struct MapObject *mapObject;
+ mapObject = &gMapObjects[gPlayerAvatar.mapObjectId];
+ if ((task->data[2] == 0 || (--task->data[2]) == 0) && FieldObjectClearAnimIfSpecialAnimFinished(mapObject))
+ {
+ task->data[0]++;
+ PlaySE(SE_W019);
+ sub_80B9524(task->data[1]);
+ }
+}
+
+void sub_80B9390(struct Task *task)
+{
+ struct MapObject *mapObject;
+ if ((++task->data[2]) >= 8)
+ {
+ mapObject = &gMapObjects[gPlayerAvatar.mapObjectId];
+ FieldObjectSetGraphicsId(mapObject, GetPlayerAvatarGraphicsIdByStateId(0x03));
+ StartSpriteAnim(&gSprites[mapObject->spriteId], 0x16);
+ mapObject->mapobj_bit_12 = 1;
+ FieldObjectSetSpecialAnim(mapObject, 0x48);
+ if (task->data[15] & 0x08)
+ {
+ DestroySprite(&gSprites[mapObject->mapobj_unk_1A]);
+ }
+ task->data[0]++;
+ task->data[2] = 0;
+ }
+}
+
+void sub_80B9418(struct Task *task)
+{
+ struct MapObject *mapObject;
+ if ((++task->data[2]) >= 10)
+ {
+ mapObject = &gMapObjects[gPlayerAvatar.mapObjectId];
+ FieldObjectClearAnimIfSpecialAnimActive(mapObject);
+ mapObject->mapobj_bit_12 = 0;
+ mapObject->mapobj_bit_22 = 0;
+ sub_80B9560(task->data[1], mapObject->spriteId);
+ CameraObjectReset2();
+ task->data[0]++;
+ }
+}
+
+void sub_80B9474(struct Task *task)
+{
+ if (sub_80B9508(task->data[1]))
+ {
+ sub_80AF0B4();
+ task->data[0]++;
+ }
+}
+
+void sub_80B9494(struct Task *task)
+{
+ if (!gPaletteFade.active)
+ {
+ FieldEffectActiveListRemove(FLDEFF_USE_FLY);
+ DestroyTask(FindTaskIdByFunc(sub_80B91D4));
+ }
+}
+
+u8 sub_80B94C4(void)
+{
+ u8 spriteId;
+ struct Sprite *sprite;
+ spriteId = CreateSprite(gFieldEffectObjectTemplatePointers[26], 0xff, 0xb4, 0x1);
+ sprite = &gSprites[spriteId];
+ sprite->oam.paletteNum = 0;
+ sprite->oam.priority = 1;
+ sprite->callback = sub_80B957C;
+ return spriteId;
+}
+
+u8 sub_80B9508(u8 spriteId)
+{
+ return gSprites[spriteId].data[7];
+}
+
+void sub_80B9524(u8 spriteId)
+{
+ struct Sprite *sprite;
+ sprite = &gSprites[spriteId];
+ sprite->callback = sub_80B963C;
+ sprite->pos1.x = 0x78;
+ sprite->pos1.y = 0x00;
+ sprite->pos2.x = 0;
+ sprite->pos2.y = 0;
+ memset(&sprite->data[0], 0, 8 * sizeof(u16) /* zero all data cells */);
+ sprite->data[6] = 0x40;
+}
+
+void sub_80B9560(u8 a0, u8 a1)
+{
+ gSprites[a0].data[6] = a1;
+}
+
+const union AffineAnimCmd SpriteAffineAnim_855C518[] = {
+ AFFINEANIMCMD_FRAME(8, 8, -30, 0),
+ AFFINEANIMCMD_FRAME(28, 28, 0, 30),
+ AFFINEANIMCMD_END
+};
+
+const union AffineAnimCmd SpriteAffineAnim_855C530[] = {
+ AFFINEANIMCMD_FRAME(256, 256, 64, 0),
+ AFFINEANIMCMD_FRAME(-10, -10, 0, 22),
+ AFFINEANIMCMD_END
+};
+
+const union AffineAnimCmd *const gSpriteAffineAnimTable_0855C548[] = {
+ SpriteAffineAnim_855C518,
+ SpriteAffineAnim_855C530
+};
+
+void sub_80B957C(struct Sprite *sprite)
+{
+ if (sprite->data[7] == 0)
+ {
+ if (sprite->data[0] == 0)
+ {
+ sprite->oam.affineMode = 3;
+ sprite->affineAnims = gSpriteAffineAnimTable_0855C548;
+ InitSpriteAffineAnim(sprite);
+ StartSpriteAffineAnim(sprite, 0);
+ sprite->pos1.x = 0x76;
+ sprite->pos1.y = -0x30;
+ sprite->data[0]++;
+ sprite->data[1] = 0x40;
+ sprite->data[2] = 0x100;
+ }
+ sprite->data[1] += (sprite->data[2] >> 8);
+ sprite->pos2.x = Cos(sprite->data[1], 0x78);
+ sprite->pos2.y = Sin(sprite->data[1], 0x78);
+ if (sprite->data[2] < 0x800)
+ {
+ sprite->data[2] += 0x60;
+ }
+ if (sprite->data[1] > 0x81)
+ {
+ sprite->data[7]++;
+ sprite->oam.affineMode = 0;
+ FreeOamMatrix(sprite->oam.matrixNum);
+ CalcCenterToCornerVec(sprite, sprite->oam.shape, sprite->oam.size, 0);
+ }
+ }
+}
+
+void sub_80B963C(struct Sprite *sprite)
+{
+ struct Sprite *sprite1;
+ sprite->pos2.x = Cos(sprite->data[2], 0x8c);
+ sprite->pos2.y = Sin(sprite->data[2], 0x48);
+ sprite->data[2] = (sprite->data[2] + 4) & 0xff;
+ if (sprite->data[6] != 0x40)
+ {
+ sprite1 = &gSprites[sprite->data[6]];
+ sprite1->coordOffsetEnabled = 0;
+ sprite1->pos1.x = sprite->pos1.x + sprite->pos2.x;
+ sprite1->pos1.y = sprite->pos1.y + sprite->pos2.y - 8;
+ sprite1->pos2.x = 0;
+ sprite1->pos2.y = 0;
+ }
+ if (sprite->data[2] >= 0x80)
+ {
+ sprite->data[7] = 1;
+ }
+}
+
+void sub_80B96B0(struct Sprite *sprite)
+{
+ if (sprite->data[7] == 0)
+ {
+ if (sprite->data[0] == 0)
+ {
+ sprite->oam.affineMode = 3;
+ sprite->affineAnims = gSpriteAffineAnimTable_0855C548;
+ InitSpriteAffineAnim(sprite);
+ StartSpriteAffineAnim(sprite, 1);
+ sprite->pos1.x = 0x5e;
+ sprite->pos1.y = -0x20;
+ sprite->data[0]++;
+ sprite->data[1] = 0xf0;
+ sprite->data[2] = 0x800;
+ sprite->data[4] = 0x80;
+ }
+ sprite->data[1] += sprite->data[2] >> 8;
+ sprite->data[3] += sprite->data[2] >> 8;
+ sprite->data[1] &= 0xff;
+ sprite->pos2.x = Cos(sprite->data[1], 0x20);
+ sprite->pos2.y = Sin(sprite->data[1], 0x78);
+ if (sprite->data[2] > 0x100)
+ {
+ sprite->data[2] -= sprite->data[4];
+ }
+ if (sprite->data[4] < 0x100)
+ {
+ sprite->data[4] += 24;
+ }
+ if (sprite->data[2] < 0x100)
+ {
+ sprite->data[2] = 0x100;
+ }
+ if (sprite->data[3] >= 60)
+ {
+ sprite->data[7]++;
+ sprite->oam.affineMode = 0;
+ FreeOamMatrix(sprite->oam.matrixNum);
+ sprite->invisible = 1;
+ }
+ }
+}
+
+void sub_80B9794(u8 spriteId)
+{
+ sub_80B9524(spriteId);
+ gSprites[spriteId].callback = sub_80B96B0;
+}
+
+void sub_80B97D4(u8);
+
+u8 FldEff_FlyIn(void)
+{
+ CreateTask(sub_80B97D4, 0xfe);
+ return 0;
+}
+
+void (*const gUnknown_0855C550[])(struct Task *) = {
+ sub_80B9804,
+ sub_80B98B8,
+ sub_80B9924,
+ sub_80B9978,
+ sub_80B99F0,
+ sub_80B9A28,
+ sub_80B9A60,
+};
+
+void sub_80B97D4(u8 taskId)
+{
+ gUnknown_0855C550[gTasks[taskId].data[0]](&gTasks[taskId]);
+}
+
+void sub_80B9804(struct Task *task)
+{
+ struct MapObject *mapObject;
+ mapObject = &gMapObjects[gPlayerAvatar.mapObjectId];
+ if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(mapObject) || FieldObjectClearAnimIfSpecialAnimFinished(mapObject))
+ {
+ task->data[0]++;
+ task->data[2] = 17;
+ task->data[15] = gPlayerAvatar.flags;
+ gPlayerAvatar.preventStep = TRUE;
+ SetPlayerAvatarStateMask(0x01);
+ if (task->data[15] & 0x08)
+ {
+ sub_81555AC(mapObject->mapobj_unk_1A, 0);
+ }
+ FieldObjectSetGraphicsId(mapObject, GetPlayerAvatarGraphicsIdByStateId(0x3));
+ CameraObjectReset2();
+ FieldObjectTurn(mapObject, DIR_WEST);
+ StartSpriteAnim(&gSprites[mapObject->spriteId], 0x16);
+ mapObject->mapobj_bit_13 = 0;
+ task->data[1] = sub_80B94C4();
+ sub_80B9524(task->data[1]);
+ sub_80B9560(task->data[1], mapObject->spriteId);
+ }
+}
+
+void sub_80B98B8(struct Task *task)
+{
+ struct MapObject *mapObject;
+ struct Sprite *sprite;
+ if (task->data[2] == 0 || (--task->data[2]) == 0)
+ {
+ mapObject = &gMapObjects[gPlayerAvatar.mapObjectId];
+ sprite = &gSprites[mapObject->spriteId];
+ sub_80B9560(task->data[1], 0x40);
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->pos2.x = 0;
+ sprite->pos2.y = 0;
+ task->data[0]++;
+ task->data[2] = 0;
+ }
+}
+
+void sub_80B9924(struct Task *task)
+{
+ s16 unknown_0855C56C[18] = {
+ -2,
+ -4,
+ -5,
+ -6,
+ -7,
+ -8,
+ -8,
+ -8,
+ -7,
+ -7,
+ -6,
+ -5,
+ -3,
+ -2,
+ 0,
+ 2,
+ 4,
+ 8
+ };
+ struct Sprite *sprite = &gSprites[gPlayerAvatar.spriteId];
+ sprite->pos2.y = unknown_0855C56C[task->data[2]];
+ if ((++task->data[2]) >= 18)
+ {
+ task->data[0]++;
+ }
+}
+
+void sub_80B9978(struct Task *task)
+{
+ struct MapObject *mapObject;
+ struct Sprite *sprite;
+ if (sub_80B9508(task->data[1]))
+ {
+ mapObject = &gMapObjects[gPlayerAvatar.mapObjectId];
+ sprite = &gSprites[mapObject->spriteId];
+ mapObject->mapobj_bit_12 = 0;
+ sub_808EB08(mapObject, mapObject->coords2.x, mapObject->coords2.y);
+ sprite->pos2.x = 0;
+ sprite->pos2.y = 0;
+ sprite->coordOffsetEnabled = 1;
+ sub_808C114();
+ FieldObjectSetSpecialAnim(mapObject, 0x39);
+ task->data[0]++;
+ }
+}
+
+void sub_80B99F0(struct Task *task)
+{
+ if (FieldObjectClearAnimIfSpecialAnimFinished(&gMapObjects[gPlayerAvatar.mapObjectId]))
+ {
+ task->data[0]++;
+ sub_80B9794(task->data[1]);
+ }
+}
+
+void sub_80B9A28(struct Task *task)
+{
+ if (sub_80B9508(task->data[1]))
+ {
+ DestroySprite(&gSprites[task->data[1]]);
+ task->data[0]++;
+ task->data[1] = 0x10;
+ }
+}
+
+void sub_80B9A60(struct Task *task)
+{
+ u8 state;
+ struct MapObject *mapObject;
+ if ((--task->data[1]) == 0)
+ {
+ mapObject = &gMapObjects[gPlayerAvatar.mapObjectId];
+ state = 0;
+ if (task->data[15] & 0x08)
+ {
+ state = 3;
+ sub_81555AC(mapObject->mapobj_unk_1A, 1);
+ }
+ FieldObjectSetGraphicsId(mapObject, GetPlayerAvatarGraphicsIdByStateId(state));
+ FieldObjectTurn(mapObject, DIR_SOUTH);
+ gPlayerAvatar.flags = task->data[15];
+ gPlayerAvatar.preventStep = FALSE;
+ FieldEffectActiveListRemove(FLDEFF_FLY_IN);
+ DestroyTask(FindTaskIdByFunc(sub_80B97D4));
+ }
+}
+
+void sub_80B9BE8(u8 taskId);
+
+bool8 sub_80B9ADC(void)
+{
+ u8 taskId;
+ u8 mapObjectIdBuffer;
+ if (!TryGetFieldObjectIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2], &mapObjectIdBuffer))
+ {
+ taskId = CreateTask(sub_80B9BE8, 0x50);
+ gTasks[taskId].data[2] = mapObjectIdBuffer;
+ gTasks[taskId].data[6] = gFieldEffectArguments[0];
+ gTasks[taskId].data[7] = gFieldEffectArguments[1];
+ gTasks[taskId].data[8] = gFieldEffectArguments[2];
+ }
+ else
+ {
+ FieldEffectActiveListRemove(0x41);
+ }
+ return FALSE;
+}
+
+void sub_80B9B3C(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+ if (data[7] != 0)
+ {
+ if (++data[6] > 20)
+ {
+ data[6] = 0;
+ if (data[5] != 0)
+ data[5]--;
+ }
+ }
+ else
+ {
+ data[5] = 4;
+ }
+
+ if (++data[0] > 1)
+ {
+ data[0] = 0;
+ if (++data[1] & 1)
+ {
+ SetCameraPanning(0, -data[5]);
+ }
+ else
+ {
+ SetCameraPanning(0, data[5]);
+ }
+ }
+ UpdateCameraPanning();
+ if (data[5] == 0)
+ DestroyTask(taskId);
+}
+
+void sub_80B9BD0(u8 taskId)
+{
+ gTasks[taskId].data[7] = 1;
+}
+
+void (*const gUnknown_0855C590[])(s16*, u8) = {
+ sub_80B9C28,
+ sub_80B9C54,
+ sub_80B9CDC,
+};
+
+void sub_80B9BE8(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+ InstallCameraPanAheadCallback();
+ SetCameraPanningCallback(0);
+ gUnknown_0855C590[data[1]](data, taskId);
+}
+
+void sub_80B9C28(s16* data, u8 taskId)
+{
+ u8 newTaskId = CreateTask(sub_80B9B3C, 0x5A);
+ PlaySE(SE_T_KAMI2);
+ data[5] = newTaskId;
+ data[1]++;
+}
+
+void sub_80B9D24(struct Sprite*);
+
+void sub_80B9C54(s16* data, u8 taskId)
+{
+ if (++data[3] > 0x78)
+ {
+ struct Sprite *sprite = &gSprites[gMapObjects[data[2]].spriteId];
+ gMapObjects[data[2]].mapobj_bit_13 = TRUE;
+ BlendPalettes(0x0000FFFF, 0x10, RGB_WHITE);
+ BeginNormalPaletteFade(0x0000FFFF, 0, 0x10, 0, RGB_WHITE);
+ sub_80B9D24(sprite);
+ PlaySE(SE_T_KAMI);
+ sub_80B9BD0(data[5]);
+ data[3] = 0;
+ data[1]++;
+ }
+}
+
+void sub_80B9CDC(s16* a0, u8 taskId)
+{
+ if (!gPaletteFade.active && !FuncIsActiveTask(sub_80B9B3C))
+ {
+ InstallCameraPanAheadCallback();
+ RemoveFieldObjectByLocalIdAndMap(a0[6], a0[7], a0[8]);
+ FieldEffectActiveListRemove(0x41);
+ DestroyTask(taskId);
+ }
+}
+
+void sub_80B9DB8(struct Sprite* sprite);
+
+const struct SpriteFrameImage gSpriteImageTable_855C59C[] = {
+ obj_frame_tiles(gUnknown_0855C170),
+ obj_frame_tiles(gUnknown_0855C190),
+ obj_frame_tiles(gUnknown_0855C1B0),
+ obj_frame_tiles(gUnknown_0855C1D0),
+};
+
+const union AnimCmd gSpriteAnim_855C5BC[] = {
+ ANIMCMD_FRAME(.imageValue = 0),
+ ANIMCMD_END
+};
+
+const union AnimCmd gSpriteAnim_855C5C4[] = {
+ ANIMCMD_FRAME(.imageValue = 1),
+ ANIMCMD_END
+};
+
+const union AnimCmd gSpriteAnim_855C5CC[] = {
+ ANIMCMD_FRAME(.imageValue = 2),
+ ANIMCMD_END
+};
+
+const union AnimCmd gSpriteAnim_855C5D4[] = {
+ ANIMCMD_FRAME(.imageValue = 3),
+ ANIMCMD_END
+};
+
+const union AnimCmd *const gSpriteAnimTable_855C5DC[] = {
+ gSpriteAnim_855C5BC,
+ gSpriteAnim_855C5C4,
+ gSpriteAnim_855C5CC,
+ gSpriteAnim_855C5D4,
+};
+
+const struct SpriteTemplate gUnknown_0855C5EC = {
+ .tileTag = 0xffff,
+ .paletteTag = 4378,
+ .oam = &gOamData_855C218,
+ .anims = gSpriteAnimTable_855C5DC,
+ .images = gSpriteImageTable_855C59C,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80B9DB8
+};
+
+void sub_80B9D24(struct Sprite* sprite)
+{
+ int i;
+ int xPos = (s16)gUnknown_03005DEC + sprite->pos1.x + sprite->pos2.x;
+ int yPos = (s16)gUnknown_03005DE8 + sprite->pos1.y + sprite->pos2.y - 4;
+
+ for (i = 0; i < 4; i++)
+ {
+ u8 spriteId = CreateSprite(&gUnknown_0855C5EC, xPos, yPos, 0);
+ if (spriteId != 0x40)
+ {
+ StartSpriteAnim(&gSprites[spriteId], i);
+ gSprites[spriteId].data[0] = i;
+ gSprites[spriteId].oam.paletteNum = sprite->oam.paletteNum;
+ }
+ }
+}
+
+void sub_80B9DB8(struct Sprite* sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ sprite->pos1.x -= 16;
+ sprite->pos1.y -= 12;
+ break;
+ case 1:
+ sprite->pos1.x += 16;
+ sprite->pos1.y -= 12;
+ break;
+ case 2:
+ sprite->pos1.x -= 16;
+ sprite->pos1.y += 12;
+ break;
+ case 3:
+ sprite->pos1.x += 16;
+ sprite->pos1.y += 12;
+ break;
+ }
+ if ((u16)(sprite->pos1.x + 4) > 0xF8 || sprite->pos1.y < -4 || sprite->pos1.y > 0xA4)
+ DestroySprite(sprite);
+}
+
+void sub_80B9EDC(u8 taskId);
+
+bool8 sub_80B9E28(struct Sprite* sprite)
+{
+ u8 mapObjectIdBuffer;
+ if (!TryGetFieldObjectIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2], &mapObjectIdBuffer))
+ {
+ struct MapObject *object;
+ int xPos, yPos;
+ u8 taskId;
+ object = &gMapObjects[mapObjectIdBuffer];
+ xPos = object->coords2.x - 7;
+ yPos = object->coords2.y - 7;
+ xPos = (gFieldEffectArguments[3] - xPos) * 16;
+ yPos = (gFieldEffectArguments[4] - yPos) * 16;
+ npc_coords_shift(object, gFieldEffectArguments[3] + 7, gFieldEffectArguments[4] + 7);
+ taskId = CreateTask(sub_80B9EDC, 0x50);
+ gTasks[taskId].data[1] = object->spriteId;
+ gTasks[taskId].data[2] = gSprites[object->spriteId].pos1.x + xPos;
+ gTasks[taskId].data[3] = gSprites[object->spriteId].pos1.y + yPos;
+ gTasks[taskId].data[8] = gFieldEffectArguments[5];
+ gTasks[taskId].data[9] = mapObjectIdBuffer;
+ }
+ return FALSE;
+}
+
+void sub_80B9EDC(u8 taskId)
+{
+ // BUG: Possible divide by zero
+ s16 *data = gTasks[taskId].data;
+ struct Sprite *sprite = &gSprites[data[1]];
+ switch (data[0])
+ {
+ case 0:
+ data[4] = sprite->pos1.x << 4;
+ data[5] = sprite->pos1.y << 4;
+ data[6] = (data[2] * 16 - data[4]) / data[8];
+ data[7] = (data[3] * 16 - data[5]) / data[8];
+ data[0]++;
+ case 1:
+ if (data[8] != 0)
+ {
+ data[8]--;
+ data[4] += data[6];
+ data[5] += data[7];
+ sprite->pos1.x = data[4] >> 4;
+ sprite->pos1.y = data[5] >> 4;
+ }
+ else
+ {
+ struct MapObject *object = &gMapObjects[data[9]];
+ sprite->pos1.x = data[2];
+ sprite->pos1.y = data[3];
+ npc_coords_shift_still(object);
+ object->mapobj_bit_3 = TRUE;
+ FieldEffectActiveListRemove(0x42);
+ DestroyTask(taskId);
+ }
+ break;
+ }
+}
diff --git a/src/field_map_obj.c b/src/field_map_obj.c
index 906eff4b7..af018eb16 100644
--- a/src/field_map_obj.c
+++ b/src/field_map_obj.c
@@ -198,7 +198,7 @@ static void npcs_clear_ids_and_state(void)
void sub_808D438(void)
{
- strange_npc_table_clear();
+ ZeroAllLinkPlayerMapObjects();
npcs_clear_ids_and_state();
ClearPlayerAvatarInfo();
sub_808D450();
@@ -353,7 +353,7 @@ static u8 InitFieldObjectStateFromTemplate(struct MapObjectTemplate *template, u
return slot;
}
#else
-static __attribute__((naked)) u8 InitFieldObjectStateFromTemplate(struct MapObjectTemplate *template, u8 mapId, u8 mapGroupId)
+static NAKED u8 InitFieldObjectStateFromTemplate(struct MapObjectTemplate *template, u8 mapId, u8 mapGroupId)
{
asm_unified("\tpush {r4-r7,lr}\n"
"\tmov r7, r9\n"
@@ -1146,7 +1146,7 @@ const struct MapObjectGraphicsInfo *GetFieldObjectGraphicsInfo(u8 graphicsId)
}
if (graphicsId == 0x45)
{
- bard = sub_81201C8();
+ bard = GetCurrentMauvilleOldMan();
return gMauvilleOldManGraphicsInfoPointers[bard];
}
if (graphicsId >= NUM_OBJECT_GRAPHICS_INFO)
@@ -1673,7 +1673,7 @@ struct MapObjectTemplate *GetFieldObjectTemplateByLocalIdAndMap(u8 localId, u8 m
}
else
{
- mapHeader = get_mapheader_by_bank_and_number(mapGroup, mapNum);
+ mapHeader = Overworld_GetMapHeaderByGroupAndId(mapGroup, mapNum);
templates = mapHeader->events->mapObjects;
count = mapHeader->events->mapObjectCount;
}
diff --git a/src/field_map_obj_helpers.c b/src/field_map_obj_helpers.c
index de26cb034..b8efcfe72 100755
--- a/src/field_map_obj_helpers.c
+++ b/src/field_map_obj_helpers.c
@@ -529,16 +529,17 @@ void DoRippleFieldEffect(struct MapObject *mapObject, struct Sprite *sprite)
FieldEffectStart(FLDEFF_RIPPLE);
}
-#ifdef NONMATCHING
bool32 sub_8097E50(struct MapObject *mapObject, struct Sprite *sprite)
{
+ u32 one;
bool32 ableToStore = FALSE;
if (gUnknown_020375B8 == NULL)
{
gUnknown_020375B8 = AllocZeroed(0x14);
gUnknown_020375B8[0] = mapObject->localId;
- gUnknown_020375B8[16] = 1;
- ableToStore = TRUE;
+ // needed to match
+ gUnknown_020375B8[16] = (one = 1);
+ ableToStore = one;
}
else
{
@@ -561,7 +562,7 @@ bool32 sub_8097E50(struct MapObject *mapObject, struct Sprite *sprite)
{
gUnknown_020375B8[firstFreeSlot] = mapObject->localId;
gUnknown_020375B8[16]++;
- ableToStore = TRUE; // the nonmatching problem is that ableToStore == TRUE isnt being merged with the above ableToStore = TRUE assignment.
+ ableToStore = TRUE;
}
}
@@ -574,174 +575,34 @@ bool32 sub_8097E50(struct MapObject *mapObject, struct Sprite *sprite)
sprite->data[2] = 1;
return TRUE;
}
-#else
-__attribute__((naked))
-bool32 sub_8097E50(struct MapObject *mapObject, struct Sprite *sprite)
-{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r8\n\
- push {r7}\n\
- adds r4, r0, 0\n\
- mov r8, r1\n\
- movs r0, 0\n\
- mov r12, r0\n\
- ldr r0, =gUnknown_020375B8\n\
- ldr r1, [r0]\n\
- adds r6, r0, 0\n\
- cmp r1, 0\n\
- bne _08097E80\n\
- movs r0, 0x14\n\
- bl AllocZeroed\n\
- str r0, [r6]\n\
- ldrb r1, [r4, 0x8]\n\
- strb r1, [r0]\n\
- ldr r1, [r6]\n\
- movs r0, 0x1\n\
- strb r0, [r1, 0x10]\n\
- b _08097ECC\n\
- .pool\n\
-_08097E80:\n\
- movs r2, 0x10\n\
- movs r5, 0\n\
- movs r1, 0\n\
- adds r3, r6, 0\n\
- b _08097E90\n\
-_08097E8A:\n\
- adds r0, r1, 0x1\n\
- lsls r0, 24\n\
- lsrs r1, r0, 24\n\
-_08097E90:\n\
- cmp r1, 0xF\n\
- bhi _08097EB2\n\
- cmp r2, 0x10\n\
- bne _08097EA4\n\
- ldr r0, [r3]\n\
- adds r0, r1\n\
- ldrb r0, [r0]\n\
- cmp r0, 0\n\
- bne _08097EA4\n\
- adds r2, r1, 0\n\
-_08097EA4:\n\
- ldr r0, [r3]\n\
- adds r0, r1\n\
- ldrb r0, [r0]\n\
- ldrb r7, [r4, 0x8]\n\
- cmp r0, r7\n\
- bne _08097E8A\n\
- movs r5, 0x1\n\
-_08097EB2:\n\
- cmp r5, 0\n\
- bne _08097ECE\n\
- cmp r2, 0x10\n\
- beq _08097ECE\n\
- ldr r0, [r6]\n\
- adds r0, r2\n\
- ldrb r1, [r4, 0x8]\n\
- strb r1, [r0]\n\
- ldr r1, [r6]\n\
- ldrb r0, [r1, 0x10]\n\
- adds r0, 0x1\n\
- strb r0, [r1, 0x10]\n\
- movs r0, 0x1\n\
-_08097ECC:\n\
- mov r12, r0\n\
-_08097ECE:\n\
- mov r1, r12\n\
- cmp r1, 0x1\n\
- bne _08097EE0\n\
- ldrb r0, [r4, 0x1]\n\
- movs r1, 0x10\n\
- orrs r0, r1\n\
- movs r1, 0x2\n\
- orrs r0, r1\n\
- strb r0, [r4, 0x1]\n\
-_08097EE0:\n\
- movs r0, 0x1\n\
- mov r7, r8\n\
- strh r0, [r7, 0x32]\n\
- pop {r3}\n\
- mov r8, r3\n\
- pop {r4-r7}\n\
- pop {r1}\n\
- bx r1\n\
- .syntax divided");
-}
-#endif
-
-// this function is very similar to the above one and I don't want to decompile this one until the above is matching.
-__attribute__((naked))
+
bool32 sub_8097EF0(struct MapObject *mapObject, struct Sprite *sprite)
{
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r8\n\
- push {r7}\n\
- adds r6, r0, 0\n\
- mov r8, r1\n\
- movs r0, 0x1\n\
- strh r0, [r1, 0x32]\n\
- ldr r5, =gUnknown_020375B8\n\
- ldr r0, [r5]\n\
- cmp r0, 0\n\
- beq _08097F68\n\
- movs r7, 0\n\
- adds r0, r6, 0\n\
- bl sub_8097F78\n\
- lsls r0, 24\n\
- lsrs r1, r0, 24\n\
- cmp r1, 0x10\n\
- beq _08097F28\n\
- ldr r0, [r5]\n\
- adds r0, r1\n\
- movs r1, 0\n\
- strb r1, [r0]\n\
- ldr r1, [r5]\n\
- ldrb r0, [r1, 0x10]\n\
- subs r0, 0x1\n\
- strb r0, [r1, 0x10]\n\
- movs r7, 0x1\n\
-_08097F28:\n\
- ldr r0, [r5]\n\
- ldrb r4, [r0, 0x10]\n\
- cmp r4, 0\n\
- bne _08097F36\n\
- bl Free\n\
- str r4, [r5]\n\
-_08097F36:\n\
- cmp r7, 0x1\n\
- bne _08097F68\n\
- ldrb r0, [r6, 0x5]\n\
- bl GetFieldObjectGraphicsInfo\n\
- ldrb r1, [r0, 0xC]\n\
- lsls r1, 25\n\
- lsrs r1, 31\n\
- lsls r1, 4\n\
- ldrb r2, [r6, 0x1]\n\
- movs r0, 0x11\n\
- negs r0, r0\n\
- ands r0, r2\n\
- orrs r0, r1\n\
- movs r1, 0x3\n\
- negs r1, r1\n\
- ands r0, r1\n\
- strb r0, [r6, 0x1]\n\
- mov r2, r8\n\
- adds r2, 0x2C\n\
- ldrb r1, [r2]\n\
- movs r0, 0x41\n\
- negs r0, r0\n\
- ands r0, r1\n\
- strb r0, [r2]\n\
-_08097F68:\n\
- movs r0, 0x1\n\
- pop {r3}\n\
- mov r8, r3\n\
- pop {r4-r7}\n\
- pop {r1}\n\
- bx r1\n\
- .pool\n\
- .syntax divided");
+ bool32 ableToStore;
+ u8 id;
+
+ sprite->data[2] = 1;
+ if (gUnknown_020375B8 != NULL)
+ {
+ ableToStore = FALSE;
+ id = sub_8097F78(mapObject);
+ if (id != 16)
+ {
+ gUnknown_020375B8[id] = 0;
+ gUnknown_020375B8[16]--;
+ ableToStore = TRUE;
+ }
+ if (gUnknown_020375B8[16] == 0)
+ FREE_AND_SET_NULL(gUnknown_020375B8);
+ if (ableToStore == TRUE)
+ {
+ mapObject->mapobj_bit_12 = GetFieldObjectGraphicsInfo(mapObject->graphicsId)->inanimate;
+ mapObject->mapobj_bit_9 = 0;
+ sprite->animPaused = 0;
+ }
+ }
+
+ return TRUE;
}
u8 sub_8097F78(struct MapObject *mapObject)
diff --git a/src/fieldmap.c b/src/fieldmap.c
new file mode 100644
index 000000000..245c88327
--- /dev/null
+++ b/src/fieldmap.c
@@ -0,0 +1,1034 @@
+#include "global.h"
+#include "overworld.h"
+#include "bg.h"
+#include "battle_frontier_2.h"
+#include "constants/rgb.h"
+#include "fieldmap.h"
+#include "fldeff_80F9BCC.h"
+#include "fldeff_cut.h"
+#include "fldeff_groundshake.h"
+#include "menu.h"
+#include "palette.h"
+#include "pokenav.h"
+#include "script.h"
+#include "secret_base.h"
+#include "tv.h"
+
+struct ConnectionFlags
+{
+ u8 south:1;
+ u8 north:1;
+ u8 west:1;
+ u8 east:1;
+};
+
+EWRAM_DATA static u16 gUnknown_02032318[0x2800] = {0};
+EWRAM_DATA struct MapHeader gMapHeader = {0};
+EWRAM_DATA struct Camera gCamera = {0};
+EWRAM_DATA static struct ConnectionFlags gUnknown_02037340 = {0};
+EWRAM_DATA static u32 sFiller_02037344 = 0; // without this, the next file won't align properly
+
+struct BackupMapData gUnknown_03005DC0;
+
+static const struct ConnectionFlags sDummyConnectionFlags = {0};
+
+struct MapHeader const *const mapconnection_get_mapheader(struct MapConnection *connection)
+{
+ return Overworld_GetMapHeaderByGroupAndId(connection->mapGroup, connection->mapNum);
+}
+
+void not_trainer_hill_battle_pyramid(void)
+{
+ mapheader_copy_mapdata_with_padding(&gMapHeader);
+ sub_80E8EE0(gMapHeader.events);
+ mapheader_run_script_with_tag_x1();
+}
+
+void sub_8087D74(void)
+{
+ mapheader_copy_mapdata_with_padding(&gMapHeader);
+ sub_80E9238(0);
+ sub_80E8EE0(gMapHeader.events);
+ mapdata_from_sav2();
+ mapheader_run_script_with_tag_x1();
+ UpdateTVScreensOnMap(gUnknown_03005DC0.width, gUnknown_03005DC0.height);
+}
+
+void battle_pyramid_map_load_related(u8 a0)
+{
+ CpuFastFill(0x03ff03ff, gUnknown_02032318, sizeof(gUnknown_02032318));
+ sub_81AA078(gUnknown_02032318, a0);
+}
+
+void trainer_hill_map_load_related(void)
+{
+ CpuFastFill(0x03ff03ff, gUnknown_02032318, sizeof(gUnknown_02032318));
+ sub_81D5FB4(gUnknown_02032318);
+}
+
+void mapheader_copy_mapdata_with_padding(struct MapHeader *mapHeader)
+{
+ struct MapData const *mapData;
+ int width;
+ int height;
+ mapData = mapHeader->mapData;
+ CpuFastFill16(0x03ff, gUnknown_02032318, sizeof(gUnknown_02032318));
+ gUnknown_03005DC0.map = gUnknown_02032318;
+ width = mapData->width + 15;
+ gUnknown_03005DC0.width = width;
+ height = mapData->height + 14;
+ gUnknown_03005DC0.height = height;
+ if (width * height <= 0x2800)
+ {
+ map_copy_with_padding(mapData->map, mapData->width, mapData->height);
+ mapheader_copy_mapdata_of_adjacent_maps(mapHeader);
+ }
+}
+
+void map_copy_with_padding(u16 *map, u16 width, u16 height)
+{
+ u16 *dest;
+ int y;
+ dest = gUnknown_03005DC0.map;
+ dest += gUnknown_03005DC0.width * 7 + 7;
+ for (y = 0; y < height; y++)
+ {
+ CpuCopy16(map, dest, width * 2);
+ dest += width + 0xf;
+ map += width;
+ }
+}
+
+void mapheader_copy_mapdata_of_adjacent_maps(struct MapHeader *mapHeader)
+{
+ int count;
+ struct MapConnection *connection;
+ int i;
+
+ if (mapHeader->connections)
+ {
+ count = mapHeader->connections->count;
+ connection = mapHeader->connections->connections;
+
+ gUnknown_02037340 = sDummyConnectionFlags;
+ for (i = 0; i < count; i++, connection++)
+ {
+ struct MapHeader const *cMap = mapconnection_get_mapheader(connection);
+ u32 offset = connection->offset;
+
+ switch (connection->direction)
+ {
+ case CONNECTION_SOUTH:
+ fillSouthConnection(mapHeader, cMap, offset);
+ gUnknown_02037340.south = 1;
+ break;
+ case CONNECTION_NORTH:
+ fillNorthConnection(mapHeader, cMap, offset);
+ gUnknown_02037340.north = 1;
+ break;
+ case CONNECTION_WEST:
+ fillWestConnection(mapHeader, cMap, offset);
+ gUnknown_02037340.west = 1;
+ break;
+ case CONNECTION_EAST:
+ fillEastConnection(mapHeader, cMap, offset);
+ gUnknown_02037340.east = 1;
+ break;
+ }
+ }
+ }
+}
+
+void sub_8087F54(int x, int y, struct MapHeader const *mapHeader, int x2, int y2, int width, int height)
+{
+ int i;
+ u16 *src;
+ u16 *dest;
+ int mapWidth;
+
+ mapWidth = mapHeader->mapData->width;
+ src = &mapHeader->mapData->map[mapWidth * y2 + x2];
+ dest = &gUnknown_03005DC0.map[gUnknown_03005DC0.width * y + x];
+
+ for (i = 0; i < height; i++)
+ {
+ CpuCopy16(src, dest, width * 2);
+ dest += gUnknown_03005DC0.width;
+ src += mapWidth;
+ }
+}
+
+void fillSouthConnection(struct MapHeader const *mapHeader, struct MapHeader const *connectedMapHeader, s32 offset)
+{
+ int x, y;
+ int x2;
+ int width;
+ int cWidth;
+
+ if (connectedMapHeader)
+ {
+ cWidth = connectedMapHeader->mapData->width;
+ x = offset + 7;
+ y = mapHeader->mapData->height + 7;
+ if (x < 0)
+ {
+ x2 = -x;
+ x += cWidth;
+ if (x < gUnknown_03005DC0.width)
+ {
+ width = x;
+ }
+ else
+ {
+ width = gUnknown_03005DC0.width;
+ }
+ x = 0;
+ }
+ else
+ {
+ x2 = 0;
+ if (x + cWidth < gUnknown_03005DC0.width)
+ {
+ width = cWidth;
+ }
+ else
+ {
+ width = gUnknown_03005DC0.width - x;
+ }
+ }
+
+ sub_8087F54(
+ x, y,
+ connectedMapHeader,
+ x2, /*y2*/ 0,
+ width, /*height*/ 7);
+ }
+}
+
+void fillNorthConnection(struct MapHeader const *mapHeader, struct MapHeader const *connectedMapHeader, s32 offset)
+{
+ int x;
+ int x2, y2;
+ int width;
+ int cWidth, cHeight;
+
+ if (connectedMapHeader)
+ {
+ cWidth = connectedMapHeader->mapData->width;
+ cHeight = connectedMapHeader->mapData->height;
+ x = offset + 7;
+ y2 = cHeight - 7;
+ if (x < 0)
+ {
+ x2 = -x;
+ x += cWidth;
+ if (x < gUnknown_03005DC0.width)
+ {
+ width = x;
+ }
+ else
+ {
+ width = gUnknown_03005DC0.width;
+ }
+ x = 0;
+ }
+ else
+ {
+ x2 = 0;
+ if (x + cWidth < gUnknown_03005DC0.width)
+ {
+ width = cWidth;
+ }
+ else
+ {
+ width = gUnknown_03005DC0.width - x;
+ }
+ }
+
+ sub_8087F54(
+ x, /*y*/ 0,
+ connectedMapHeader,
+ x2, y2,
+ width, /*height*/ 7);
+
+ }
+}
+
+void fillWestConnection(struct MapHeader const *mapHeader, struct MapHeader const *connectedMapHeader, s32 offset)
+{
+ int y;
+ int x2, y2;
+ int height;
+ int cWidth, cHeight;
+ if (connectedMapHeader)
+ {
+ cWidth = connectedMapHeader->mapData->width;
+ cHeight = connectedMapHeader->mapData->height;
+ y = offset + 7;
+ x2 = cWidth - 7;
+ if (y < 0)
+ {
+ y2 = -y;
+ if (y + cHeight < gUnknown_03005DC0.height)
+ {
+ height = y + cHeight;
+ }
+ else
+ {
+ height = gUnknown_03005DC0.height;
+ }
+ y = 0;
+ }
+ else
+ {
+ y2 = 0;
+ if (y + cHeight < gUnknown_03005DC0.height)
+ {
+ height = cHeight;
+ }
+ else
+ {
+ height = gUnknown_03005DC0.height - y;
+ }
+ }
+
+ sub_8087F54(
+ /*x*/ 0, y,
+ connectedMapHeader,
+ x2, y2,
+ /*width*/ 7, height);
+ }
+}
+
+void fillEastConnection(struct MapHeader const *mapHeader, struct MapHeader const *connectedMapHeader, s32 offset)
+{
+ int x, y;
+ int y2;
+ int height;
+ int cHeight;
+ if (connectedMapHeader)
+ {
+ cHeight = connectedMapHeader->mapData->height;
+ x = mapHeader->mapData->width + 7;
+ y = offset + 7;
+ if (y < 0)
+ {
+ y2 = -y;
+ if (y + cHeight < gUnknown_03005DC0.height)
+ {
+ height = y + cHeight;
+ }
+ else
+ {
+ height = gUnknown_03005DC0.height;
+ }
+ y = 0;
+ }
+ else
+ {
+ y2 = 0;
+ if (y + cHeight < gUnknown_03005DC0.height)
+ {
+ height = cHeight;
+ }
+ else
+ {
+ height = gUnknown_03005DC0.height - y;
+ }
+ }
+
+ sub_8087F54(
+ x, y,
+ connectedMapHeader,
+ /*x2*/ 0, y2,
+ /*width*/ 8, height);
+ }
+}
+
+union Block
+{
+ struct
+ {
+ u16 block:10;
+ u16 collision:2;
+ u16 elevation:4;
+ } block;
+ u16 value;
+};
+
+u8 MapGridGetZCoordAt(int x, int y)
+{
+ u16 block;
+ int i;
+ u16 *border;
+
+ if (x >= 0 && x < gUnknown_03005DC0.width
+ && y >= 0 && y < gUnknown_03005DC0.height)
+ {
+ block = gUnknown_03005DC0.map[x + gUnknown_03005DC0.width * y];
+ }
+ else
+ {
+ border = gMapHeader.mapData->border;
+ i = (x + 1) & 1;
+ i += ((y + 1) & 1) * 2;
+ block = gMapHeader.mapData->border[i];
+ block |= 0xc00;
+ }
+
+ if (block == 0x3ff)
+ {
+ return 0;
+ }
+
+ return block >> 12;
+}
+
+u8 MapGridIsImpassableAt(int x, int y)
+{
+ u16 block;
+ int i;
+ u16 *border;
+
+ if (x >= 0 && x < gUnknown_03005DC0.width
+ && y >= 0 && y < gUnknown_03005DC0.height)
+ {
+ block = gUnknown_03005DC0.map[x + gUnknown_03005DC0.width * y];
+ }
+ else
+ {
+ border = gMapHeader.mapData->border;
+ i = (x + 1) & 1;
+ i += ((y + 1) & 1) * 2;
+ block = gMapHeader.mapData->border[i];
+ block |= 0xc00;
+ }
+ if (block == 0x3ff)
+ {
+ return 1;
+ }
+ return (block & 0xc00) >> 10;
+}
+
+u32 MapGridGetMetatileIdAt(int x, int y)
+{
+ u16 block;
+ int i;
+ int j;
+ struct MapData const *mapData;
+ u16 *border;
+ u16 block2;
+
+ if (x >= 0 && x < gUnknown_03005DC0.width
+ && y >= 0 && y < gUnknown_03005DC0.height)
+ {
+ block = gUnknown_03005DC0.map[x + gUnknown_03005DC0.width * y];
+ }
+ else
+ {
+ mapData = gMapHeader.mapData;
+ i = (x + 1) & 1;
+ i += ((y + 1) & 1) * 2;
+ block = mapData->border[i] | 0xc00;
+ }
+ if (block == 0x3ff)
+ {
+ border = gMapHeader.mapData->border;
+ j = (x + 1) & 1;
+ j += ((y + 1) & 1) * 2;
+ block2 = gMapHeader.mapData->border[j];
+ block2 |= 0xc00;
+ return block2 & block;
+ }
+ return block & 0x3ff;
+}
+
+u32 MapGridGetMetatileBehaviorAt(int x, int y)
+{
+ u16 metatile;
+ metatile = MapGridGetMetatileIdAt(x, y);
+ return GetBehaviorByMetatileId(metatile) & 0xff;
+}
+
+u8 MapGridGetMetatileLayerTypeAt(int x, int y)
+{
+ u16 metatile;
+ metatile = MapGridGetMetatileIdAt(x, y);
+ return (GetBehaviorByMetatileId(metatile) & 0xf000) >> 12;
+}
+
+void MapGridSetMetatileIdAt(int x, int y, u16 metatile)
+{
+ int i;
+ if (x >= 0 && x < gUnknown_03005DC0.width
+ && y >= 0 && y < gUnknown_03005DC0.height)
+ {
+ i = x + y * gUnknown_03005DC0.width;
+ gUnknown_03005DC0.map[i] = (gUnknown_03005DC0.map[i] & 0xf000) | (metatile & 0xfff);
+ }
+}
+
+void MapGridSetMetatileEntryAt(int x, int y, u16 metatile)
+{
+ int i;
+ if (x >= 0 && x < gUnknown_03005DC0.width
+ && y >= 0 && y < gUnknown_03005DC0.height)
+ {
+ i = x + gUnknown_03005DC0.width * y;
+ gUnknown_03005DC0.map[i] = metatile;
+ }
+}
+
+u16 GetBehaviorByMetatileId(u16 metatile)
+{
+ u16 *attributes;
+ if (metatile <= 0x1ff)
+ {
+ attributes = gMapHeader.mapData->primaryTileset->metatileAttributes;
+ return attributes[metatile];
+ }
+ else if (metatile <= 0x3ff)
+ {
+ attributes = gMapHeader.mapData->secondaryTileset->metatileAttributes;
+ return attributes[metatile - 0x200];
+ }
+ else
+ {
+ return 0xff;
+ }
+}
+
+void save_serialize_map(void)
+{
+ int i, j;
+ int x, y;
+ u16 *mapView;
+ int width;
+ mapView = gSaveBlock1Ptr->mapView;
+ width = gUnknown_03005DC0.width;
+ x = gSaveBlock1Ptr->pos.x;
+ y = gSaveBlock1Ptr->pos.y;
+ for (i = y; i < y + 14; i++)
+ {
+ for (j = x; j < x + 15; j++)
+ {
+ *mapView++ = gUnknown_02032318[width * i + j];
+ }
+ }
+}
+
+int sub_8088438(void)
+{
+ u16 i;
+ u32 r2;
+ r2 = 0;
+ for (i = 0; i < 0x200; i++)
+ {
+ r2 |= gSaveBlock1Ptr->mapView[i];
+ }
+ if (r2 == 0)
+ {
+ return 1;
+ }
+ return 0;
+}
+
+void sav2_mapdata_clear(void)
+{
+ CpuFill16(0, gSaveBlock1Ptr->mapView, sizeof(gSaveBlock1Ptr->mapView));
+}
+
+void mapdata_from_sav2(void)
+{
+ u8 a0;
+ int i, j;
+ int x, y;
+ u16 *mapView;
+ int width;
+ mapView = gSaveBlock1Ptr->mapView;
+ if (!sub_8088438())
+ {
+ width = gUnknown_03005DC0.width;
+ x = gSaveBlock1Ptr->pos.x;
+ y = gSaveBlock1Ptr->pos.y;
+ for (i = y; i < y + 14; i++)
+ {
+ if (i == y && i != 0)
+ a0 = 0;
+ else if (i == y + 13 && i != gMapHeader.mapData->height - 1)
+ a0 = 1;
+ else
+ a0 = -1;
+
+ for (j = x; j < x + 15; j++)
+ {
+ if (!sub_8088BF0(&gUnknown_02032318[j + width * i], width, a0))
+ gUnknown_02032318[j + width * i] = *mapView;
+ mapView++;
+ }
+ }
+ for (j = x; j < x + 15; j++)
+ {
+ if (y != 0)
+ sub_80D423C(j, y - 1);
+ if (i < gMapHeader.mapData->height - 1)
+ sub_80D42B8(j, y + 13);
+ }
+ sav2_mapdata_clear();
+ }
+}
+
+void sub_80885C4(u8 a1)
+{
+ int width;
+ u16 *mapView;
+ int x0, y0;
+ int x2, y2;
+ u16 *src, *dest;
+ int srci, desti;
+ int r9, r8;
+ int x, y;
+ int i, j;
+ mapView = gSaveBlock1Ptr->mapView;
+ width = gUnknown_03005DC0.width;
+ r9 = 0;
+ r8 = 0;
+ x0 = gSaveBlock1Ptr->pos.x;
+ y0 = gSaveBlock1Ptr->pos.y;
+ x2 = 15;
+ y2 = 14;
+ switch (a1)
+ {
+ case CONNECTION_NORTH:
+ y0 += 1;
+ y2 = 13;
+ break;
+ case CONNECTION_SOUTH:
+ r8 = 1;
+ y2 = 13;
+ break;
+ case CONNECTION_WEST:
+ x0 += 1;
+ x2 = 14;
+ break;
+ case CONNECTION_EAST:
+ r9 = 1;
+ x2 = 14;
+ break;
+ }
+ for (y = 0; y < y2; y++)
+ {
+ i = 0;
+ j = 0;
+ for (x = 0; x < x2; x++)
+ {
+ desti = width * (y + y0);
+ srci = (y + r8) * 15 + r9;
+ src = &mapView[srci + i];
+ dest = &gUnknown_02032318[x0 + desti + j];
+ *dest = *src;
+ i++;
+ j++;
+ }
+ }
+ sav2_mapdata_clear();
+}
+
+int GetMapBorderIdAt(int x, int y)
+{
+ struct MapData const *mapData;
+ u16 block, block2;
+ int i, j;
+ if (x >= 0 && x < gUnknown_03005DC0.width
+ && y >= 0 && y < gUnknown_03005DC0.height)
+ {
+ i = gUnknown_03005DC0.width;
+ i *= y;
+ block = gUnknown_03005DC0.map[x + i];
+ if (block == 0x3ff)
+ {
+ goto fail;
+ }
+ }
+ else
+ {
+ mapData = gMapHeader.mapData;
+ j = (x + 1) & 1;
+ j += ((y + 1) & 1) * 2;
+ block2 = 0xc00 | mapData->border[j];
+ if (block2 == 0x3ff)
+ {
+ goto fail;
+ }
+ }
+ goto success;
+fail:
+ return -1;
+success:
+
+ if (x >= (gUnknown_03005DC0.width - 8))
+ {
+ if (!gUnknown_02037340.east)
+ {
+ return -1;
+ }
+ return CONNECTION_EAST;
+ }
+ else if (x < 7)
+ {
+ if (!gUnknown_02037340.west)
+ {
+ return -1;
+ }
+ return CONNECTION_WEST;
+ }
+ else if (y >= (gUnknown_03005DC0.height - 7))
+ {
+ if (!gUnknown_02037340.south)
+ {
+ return -1;
+ }
+ return CONNECTION_SOUTH;
+ }
+ else if (y < 7)
+ {
+ if (!gUnknown_02037340.north)
+ {
+ return -1;
+ }
+ return CONNECTION_NORTH;
+ }
+ else
+ {
+ return 0;
+ }
+}
+
+int GetPostCameraMoveMapBorderId(int x, int y)
+{
+ return GetMapBorderIdAt(gSaveBlock1Ptr->pos.x + 7 + x, gSaveBlock1Ptr->pos.y + 7 + y);
+}
+
+int CanCameraMoveInDirection(int direction)
+{
+ int x, y;
+ x = gSaveBlock1Ptr->pos.x + 7 + gUnknown_08339D64[direction].x;
+ y = gSaveBlock1Ptr->pos.y + 7 + gUnknown_08339D64[direction].y;
+ if (GetMapBorderIdAt(x, y) == -1)
+ {
+ return 0;
+ }
+ return 1;
+}
+
+void sub_80887F8(struct MapConnection *connection, int direction, int x, int y)
+{
+ struct MapHeader const *mapHeader;
+ mapHeader = mapconnection_get_mapheader(connection);
+ switch (direction)
+ {
+ case CONNECTION_EAST:
+ gSaveBlock1Ptr->pos.x = -x;
+ gSaveBlock1Ptr->pos.y -= connection->offset;
+ break;
+ case CONNECTION_WEST:
+ gSaveBlock1Ptr->pos.x = mapHeader->mapData->width;
+ gSaveBlock1Ptr->pos.y -= connection->offset;
+ break;
+ case CONNECTION_SOUTH:
+ gSaveBlock1Ptr->pos.x -= connection->offset;
+ gSaveBlock1Ptr->pos.y = -y;
+ break;
+ case CONNECTION_NORTH:
+ gSaveBlock1Ptr->pos.x -= connection->offset;
+ gSaveBlock1Ptr->pos.y = mapHeader->mapData->height;
+ break;
+ }
+}
+
+bool8 CameraMove(int x, int y)
+{
+ unsigned int direction;
+ struct MapConnection *connection;
+ int old_x, old_y;
+ gCamera.active = FALSE;
+ direction = GetPostCameraMoveMapBorderId(x, y);
+ if (direction + 1 <= 1)
+ {
+ gSaveBlock1Ptr->pos.x += x;
+ gSaveBlock1Ptr->pos.y += y;
+ }
+ else
+ {
+ save_serialize_map();
+ sub_81BE72C();
+ old_x = gSaveBlock1Ptr->pos.x;
+ old_y = gSaveBlock1Ptr->pos.y;
+ connection = sub_8088950(direction, gSaveBlock1Ptr->pos.x, gSaveBlock1Ptr->pos.y);
+ sub_80887F8(connection, direction, x, y);
+ mliX_load_map(connection->mapGroup, connection->mapNum);
+ gCamera.active = TRUE;
+ gCamera.x = old_x - gSaveBlock1Ptr->pos.x;
+ gCamera.y = old_y - gSaveBlock1Ptr->pos.y;
+ gSaveBlock1Ptr->pos.x += x;
+ gSaveBlock1Ptr->pos.y += y;
+ sub_80885C4(direction);
+ }
+ return gCamera.active;
+}
+
+struct MapConnection *sub_8088950(u8 direction, int x, int y)
+{
+ int count;
+ struct MapConnection *connection;
+ int i;
+ count = gMapHeader.connections->count;
+ connection = gMapHeader.connections->connections;
+ for (i = 0; i < count; i++, connection++)
+ {
+ if (connection->direction == direction && sub_80889A8(direction, x, y, connection) == TRUE)
+ return connection;
+ }
+ return NULL;
+}
+
+bool8 sub_80889A8(u8 direction, int x, int y, struct MapConnection *connection)
+{
+ struct MapHeader const *mapHeader;
+ mapHeader = mapconnection_get_mapheader(connection);
+ switch (direction)
+ {
+ case CONNECTION_SOUTH:
+ case CONNECTION_NORTH:
+ return sub_8088A0C(x, gMapHeader.mapData->width, mapHeader->mapData->width, connection->offset);
+ case CONNECTION_WEST:
+ case CONNECTION_EAST:
+ return sub_8088A0C(y, gMapHeader.mapData->height, mapHeader->mapData->height, connection->offset);
+ }
+ return FALSE;
+}
+
+bool8 sub_8088A0C(int x, int src_width, int dest_width, int offset)
+{
+ int offset2;
+ offset2 = offset;
+
+ if (offset2 < 0)
+ offset2 = 0;
+
+ if (dest_width + offset < src_width)
+ src_width = dest_width + offset;
+
+ if (offset2 <= x && x <= src_width)
+ return TRUE;
+
+ return FALSE;
+}
+
+int sub_8088A38(int x, int width)
+{
+ if (x >= 0 && x < width)
+ return TRUE;
+
+ return FALSE;
+}
+
+int sub_8088A4C(struct MapConnection *connection, int x, int y)
+{
+ struct MapHeader const *mapHeader;
+ mapHeader = mapconnection_get_mapheader(connection);
+ switch (connection->direction)
+ {
+ case CONNECTION_SOUTH:
+ case CONNECTION_NORTH:
+ return sub_8088A38(x - connection->offset, mapHeader->mapData->width);
+ case CONNECTION_WEST:
+ case CONNECTION_EAST:
+ return sub_8088A38(y - connection->offset, mapHeader->mapData->height);
+ }
+ return FALSE;
+}
+
+struct MapConnection *sub_8088A8C(s16 x, s16 y)
+{
+ int count;
+ struct MapConnection *connection;
+ int i;
+ u8 direction;
+ if (!gMapHeader.connections)
+ {
+ return NULL;
+ }
+ else
+ {
+ count = gMapHeader.connections->count;
+ connection = gMapHeader.connections->connections;
+ for (i = 0; i < count; i++, connection++)
+ {
+ direction = connection->direction;
+ if ((direction == CONNECTION_DIVE || direction == CONNECTION_EMERGE)
+ || (direction == CONNECTION_NORTH && y > 6)
+ || (direction == CONNECTION_SOUTH && y < gMapHeader.mapData->height + 7)
+ || (direction == CONNECTION_WEST && x > 6)
+ || (direction == CONNECTION_EAST && x < gMapHeader.mapData->width + 7))
+ {
+ continue;
+ }
+ if (sub_8088A4C(connection, x - 7, y - 7) == TRUE)
+ {
+ return connection;
+ }
+ }
+ }
+ return NULL;
+}
+
+void sub_8088B3C(u16 x, u16 y)
+{
+ gSaveBlock1Ptr->pos.x = x - 7;
+ gSaveBlock1Ptr->pos.y = y - 7;
+}
+
+void sav1_camera_get_focus_coords(u16 *x, u16 *y)
+{
+ *x = gSaveBlock1Ptr->pos.x + 7;
+ *y = gSaveBlock1Ptr->pos.y + 7;
+}
+
+void SetCameraCoords(u16 x, u16 y)
+{
+ gSaveBlock1Ptr->pos.x = x;
+ gSaveBlock1Ptr->pos.y = y;
+}
+
+void GetCameraCoords(u16 *x, u16 *y)
+{
+ *x = gSaveBlock1Ptr->pos.x;
+ *y = gSaveBlock1Ptr->pos.y;
+}
+
+void sub_8088B94(int x, int y, int a2)
+{
+ if (x >= 0 && x < gUnknown_03005DC0.width && y >= 0 && y < gUnknown_03005DC0.height)
+ {
+ if (a2 != 0)
+ gUnknown_03005DC0.map[x + gUnknown_03005DC0.width * y] |= 0xC00;
+ else
+ gUnknown_03005DC0.map[x + gUnknown_03005DC0.width * y] &= 0xF3FF;
+ }
+}
+
+bool8 sub_8088BF0(u16* a0, u16 a1, u8 a2)
+{
+ if (a2 == 0xFF)
+ return FALSE;
+
+ if (a2 == 0)
+ a0 -= a1;
+ else
+ a0 += a1;
+
+ if (sub_80FADE4(*a0 & 0x3FF, a2) == 1)
+ return TRUE;
+ return FALSE;
+}
+
+void copy_tileset_patterns_to_vram(struct Tileset const *tileset, u16 numTiles, u16 offset)
+{
+ if (tileset)
+ {
+ if (!tileset->isCompressed)
+ LoadBgTiles(2, tileset->tiles, numTiles * 32, offset);
+ else
+ decompress_and_copy_tile_data_to_vram(2, tileset->tiles, numTiles * 32, offset, 0);
+ }
+}
+
+void copy_tileset_patterns_to_vram2(struct Tileset const *tileset, u16 numTiles, u16 offset)
+{
+ if (tileset)
+ {
+ if (!tileset->isCompressed)
+ LoadBgTiles(2, tileset->tiles, numTiles * 32, offset);
+ else
+ copy_decompressed_tile_data_to_vram_autofree(2, tileset->tiles, numTiles * 32, offset, 0);
+ }
+}
+
+void nullsub_3(u16 a0, u16 a1)
+{
+
+}
+
+void nullsub_90(void)
+{
+
+}
+
+void apply_map_tileset_palette(struct Tileset const *tileset, u16 destOffset, u16 size)
+{
+ u16 black = RGB_BLACK;
+
+ if (tileset)
+ {
+ if (tileset->isSecondary == FALSE)
+ {
+ LoadPalette(&black, destOffset, 2);
+ LoadPalette(((u16*)tileset->palettes) + 1, destOffset + 1, size - 2);
+ nullsub_3(destOffset + 1, (size - 2) >> 1);
+ }
+ else if (tileset->isSecondary == TRUE)
+ {
+ LoadPalette(((u16*)tileset->palettes) + 0x60, destOffset, size);
+ nullsub_3(destOffset, size >> 1);
+ }
+ else
+ {
+ LoadCompressedPalette((u16*)tileset->palettes, destOffset, size);
+ nullsub_3(destOffset, size >> 1);
+ }
+ }
+}
+
+void copy_map_tileset1_to_vram(struct MapData const *mapData)
+{
+ copy_tileset_patterns_to_vram(mapData->primaryTileset, 0x200, 0);
+}
+
+void copy_map_tileset2_to_vram(struct MapData const *mapData)
+{
+ copy_tileset_patterns_to_vram(mapData->secondaryTileset, 0x200, 0x200);
+}
+
+void copy_map_tileset2_to_vram_2(struct MapData const *mapData)
+{
+ copy_tileset_patterns_to_vram2(mapData->secondaryTileset, 0x200, 0x200);
+}
+
+void apply_map_tileset1_palette(struct MapData const *mapData)
+{
+ apply_map_tileset_palette(mapData->primaryTileset, 0, 0xC0);
+}
+
+void apply_map_tileset2_palette(struct MapData const *mapData)
+{
+ apply_map_tileset_palette(mapData->secondaryTileset, 0x60, 0xE0);
+}
+
+void copy_map_tileset1_tileset2_to_vram(struct MapData const *mapData)
+{
+ if (mapData)
+ {
+ copy_tileset_patterns_to_vram2(mapData->primaryTileset, 0x200, 0);
+ copy_tileset_patterns_to_vram2(mapData->secondaryTileset, 0x200, 0x200);
+ }
+}
+
+void apply_map_tileset1_tileset2_palette(struct MapData const *mapData)
+{
+ if (mapData)
+ {
+ apply_map_tileset1_palette(mapData);
+ apply_map_tileset2_palette(mapData);
+ }
+}
diff --git a/src/fldeff_flash.c b/src/fldeff_flash.c
new file mode 100644
index 000000000..4f3a091ce
--- /dev/null
+++ b/src/fldeff_flash.c
@@ -0,0 +1,367 @@
+#include "global.h"
+#include "constants/songs.h"
+#include "braille_puzzles.h"
+#include "event_data.h"
+#include "event_scripts.h"
+#include "field_effect.h"
+#include "gpu_regs.h"
+#include "gba/io_reg.h"
+#include "main.h"
+#include "palette.h"
+#include "party_menu.h"
+#include "overworld.h"
+#include "rom6.h"
+#include "script.h"
+#include "sound.h"
+#include "sprite.h"
+#include "task.h"
+
+// structures
+struct FlashStruct
+{
+ u8 unk0;
+ u8 unk1;
+ bool8 unk2;
+ bool8 unk3;
+ void (*func)(void);
+};
+
+// static functions
+static void hm2_flash(void);
+static void sub_81371B4(void);
+static bool8 sub_8137304(void);
+static void sub_81373F0(void);
+static void sub_8137404(u8 taskId);
+static void sub_8137420(u8 taskId);
+static void sub_81374C4(u8 taskId);
+static void sub_813750C(u8 taskId);
+static void sub_8137574(u8 taskId);
+static void sub_81375A8(void);
+static void sub_81375BC(u8 taskId);
+static void sub_81375D8(u8 taskId);
+static void sub_8137678(u8 taskId);
+static void sub_81376DC(u8 taskId);
+
+// rodata
+static const struct FlashStruct gUnknown_085B27C8[] =
+{
+ {1, 4, 1, 0, sub_81375A8},
+ {2, 4, 1, 0, sub_81375A8},
+ {3, 4, 1, 0, sub_81375A8},
+ {5, 4, 1, 0, sub_81375A8},
+ {6, 4, 1, 0, sub_81375A8},
+ {7, 4, 1, 0, sub_81375A8},
+ {8, 4, 1, 0, sub_81375A8},
+ {9, 4, 1, 0, sub_81375A8},
+ {4, 1, 0, 1, sub_81373F0},
+ {4, 2, 0, 1, sub_81373F0},
+ {4, 3, 0, 1, sub_81373F0},
+ {4, 5, 0, 1, sub_81373F0},
+ {4, 6, 0, 1, sub_81373F0},
+ {4, 7, 0, 1, sub_81373F0},
+ {4, 8, 0, 1, sub_81373F0},
+ {4, 9, 0, 1, sub_81373F0},
+ {0, 0, 0, 0, NULL},
+};
+
+static const u16 gCaveTransitionPalette_White[] = INCBIN_U16("graphics/misc/cave_transition_white.gbapal");
+static const u16 gCaveTransitionPalette_Black[] = INCBIN_U16("graphics/misc/cave_transition_black.gbapal");
+
+static const u16 gUnknown_085B2890[] = INCBIN_U16("graphics/misc/85B2890.gbapal");
+static const u16 gUnknown_085B28A0[] = INCBIN_U16("graphics/misc/85B28A0.gbapal");
+static const u16 gCaveTransitionTilemap[] = INCBIN_U16("graphics/misc/cave_transition_map.bin.lz");
+static const u8 gCaveTransitionTiles[] = INCBIN_U8("graphics/misc/cave_transition.4bpp.lz");
+
+// text
+bool8 SetUpFieldMove_Flash(void)
+{
+ if (ShouldDoBrailleFlyEffect())
+ {
+ gSpecialVar_Result = GetCursorSelectionMonId();
+ gUnknown_03005DB0 = FieldCallback_Teleport;
+ gUnknown_0203CEEC = sub_8179918;
+ return TRUE;
+ }
+ else if (gMapHeader.cave == TRUE && !FlagGet(FLAG_SYS_USE_FLASH))
+ {
+ gUnknown_03005DB0 = FieldCallback_Teleport;
+ gUnknown_0203CEEC = hm2_flash;
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static void hm2_flash(void)
+{
+ u8 taskId = oei_task_add();
+ gFieldEffectArguments[0] = GetCursorSelectionMonId();
+ gTasks[taskId].data[8] = (uintptr_t)sub_81371B4 >> 16;
+ gTasks[taskId].data[9] = (uintptr_t)sub_81371B4;
+}
+
+static void sub_81371B4(void)
+{
+ PlaySE(SE_W115);
+ FlagSet(FLAG_SYS_USE_FLASH);
+ ScriptContext1_SetupScript(EventScript_2926F8);
+}
+
+static void sub_81371D4(void)
+{
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
+static void sub_81371EC(void)
+{
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+}
+
+void c2_change_map(void)
+{
+ u16 ime;
+
+ SetVBlankCallback(NULL);
+ SetGpuReg(REG_OFFSET_DISPCNT, 0);
+ SetGpuReg(REG_OFFSET_BG2CNT, 0);
+ SetGpuReg(REG_OFFSET_BG1CNT, 0);
+ SetGpuReg(REG_OFFSET_BG0CNT, 0);
+ SetGpuReg(REG_OFFSET_BG2HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG2VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG1HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG1VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG0HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG0VOFS, 0);
+ DmaFill16(3, 0, (void *)VRAM, VRAM_SIZE);
+ DmaFill32(3, 0, (void *)OAM, OAM_SIZE);
+ DmaFill16(3, 0, (void *)(PLTT + 2), PLTT_SIZE - 2);
+ ResetPaletteFade();
+ ResetTasks();
+ ResetSpriteData();
+ ime = REG_IME;
+ REG_IME = 0;
+ REG_IE |= INTR_FLAG_VBLANK;
+ REG_IME = ime;
+ SetVBlankCallback(sub_81371EC);
+ SetMainCallback2(sub_81371D4);
+ if (!sub_8137304())
+ SetMainCallback2(gMain.savedCallback);
+}
+
+static bool8 sub_8137304(void)
+{
+ u8 i;
+ u8 v0 = get_map_light_from_warp0();
+ u8 v1 = Overworld_GetMapTypeOfSaveblockLocation();
+
+ for (i = 0; gUnknown_085B27C8[i].unk0; i++)
+ {
+ if (gUnknown_085B27C8[i].unk0 == v0 && gUnknown_085B27C8[i].unk1 == v1)
+ {
+ gUnknown_085B27C8[i].func();
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+bool8 sub_8137360(u8 a1, u8 a2)
+{
+ u8 i;
+ u8 v0 = a1;
+ u8 v1 = a2;
+
+ for (i = 0; gUnknown_085B27C8[i].unk0; i++)
+ {
+ if (gUnknown_085B27C8[i].unk0 == v0 && gUnknown_085B27C8[i].unk1 == v1)
+ {
+ return gUnknown_085B27C8[i].unk2;
+ }
+ }
+
+ return FALSE;
+}
+
+bool8 fade_type_for_given_maplight_pair(u8 a1, u8 a2)
+{
+ u8 i;
+ u8 v0 = a1;
+ u8 v1 = a2;
+
+ for (i = 0; gUnknown_085B27C8[i].unk0; i++)
+ {
+ if (gUnknown_085B27C8[i].unk0 == v0 && gUnknown_085B27C8[i].unk1 == v1)
+ {
+ return gUnknown_085B27C8[i].unk3;
+ }
+ }
+
+ return FALSE;
+}
+
+static void sub_81373F0(void)
+{
+ CreateTask(sub_8137404, 0);
+}
+
+static void sub_8137404(u8 taskId)
+{
+ gTasks[taskId].func = sub_8137420;
+}
+
+static void sub_8137420(u8 taskId)
+{
+ SetGpuReg(REG_OFFSET_DISPCNT, 0);
+ LZ77UnCompVram(gCaveTransitionTiles, (void *)0x600C000);
+ LZ77UnCompVram(gCaveTransitionTilemap, (void *)0x600F800);
+ LoadPalette(gCaveTransitionPalette_White, 0xE0, 0x20);
+ LoadPalette(gUnknown_085B28A0, 0xE0, 0x10);
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG0
+ | BLDCNT_EFFECT_BLEND
+ | BLDCNT_TGT2_BG1
+ | BLDCNT_TGT2_BG2
+ | BLDCNT_TGT2_BG3
+ | BLDCNT_TGT2_OBJ
+ | BLDCNT_TGT2_BD);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ SetGpuReg(REG_OFFSET_BLDY, 0);
+ SetGpuReg(REG_OFFSET_BG0CNT, BGCNT_PRIORITY(0)
+ | BGCNT_CHARBASE(3)
+ | BGCNT_SCREENBASE(31)
+ | BGCNT_16COLOR
+ | BGCNT_TXT256x256);
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0
+ | DISPCNT_OBJ_1D_MAP
+ | DISPCNT_BG0_ON
+ | DISPCNT_OBJ_ON);
+ gTasks[taskId].func = sub_81374C4;
+ gTasks[taskId].data[0] = 16;
+ gTasks[taskId].data[1] = 0;
+}
+
+static void sub_81374C4(u8 taskId)
+{
+ u16 count = gTasks[taskId].data[1];
+ u16 blend = count + 0x1000;
+
+ SetGpuReg(REG_OFFSET_BLDALPHA, blend);
+ if (count <= 0x10)
+ {
+ gTasks[taskId].data[1]++;
+ }
+ else
+ {
+ gTasks[taskId].data[2] = 0;
+ gTasks[taskId].func = sub_813750C;
+ }
+}
+
+static void sub_813750C(u8 taskId)
+{
+ u16 count;
+
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 16));
+ count = gTasks[taskId].data[2];
+
+ if (count < 8)
+ {
+ gTasks[taskId].data[2]++;
+ LoadPalette(&gUnknown_085B28A0[count], 0xE0, 16 - 2 * count);
+ }
+ else
+ {
+ LoadPalette(gCaveTransitionPalette_White, 0, 0x20);
+ gTasks[taskId].func = sub_8137574;
+ gTasks[taskId].data[2] = 8;
+ }
+}
+
+static void sub_8137574(u8 taskId)
+{
+ if (gTasks[taskId].data[2])
+ gTasks[taskId].data[2]--;
+ else
+ SetMainCallback2(gMain.savedCallback);
+}
+
+static void sub_81375A8(void)
+{
+ CreateTask(sub_81375BC, 0);
+}
+
+static void sub_81375BC(u8 taskId)
+{
+ gTasks[taskId].func = sub_81375D8;
+}
+
+static void sub_81375D8(u8 taskId)
+{
+ SetGpuReg(REG_OFFSET_DISPCNT, 0);
+ LZ77UnCompVram(gCaveTransitionTiles, (void *)0x600C000);
+ LZ77UnCompVram(gCaveTransitionTilemap, (void *)0x600F800);
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ SetGpuReg(REG_OFFSET_BLDY, 0);
+ SetGpuReg(REG_OFFSET_BG0CNT, BGCNT_PRIORITY(0)
+ | BGCNT_CHARBASE(3)
+ | BGCNT_SCREENBASE(31)
+ | BGCNT_16COLOR
+ | BGCNT_TXT256x256);
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0
+ | DISPCNT_OBJ_1D_MAP
+ | DISPCNT_BG0_ON
+ | DISPCNT_OBJ_ON);
+ LoadPalette(gCaveTransitionPalette_White, 0xE0, 0x20);
+ LoadPalette(gCaveTransitionPalette_Black, 0, 0x20);
+ gTasks[taskId].func = sub_8137678;
+ gTasks[taskId].data[0] = 16;
+ gTasks[taskId].data[1] = 0;
+ gTasks[taskId].data[2] = 0;
+}
+
+static void sub_8137678(u8 taskId)
+{
+ u16 count = gTasks[taskId].data[2];
+
+ if (count < 16)
+ {
+ gTasks[taskId].data[2]++;
+ gTasks[taskId].data[2]++;
+ LoadPalette(&gUnknown_085B2890[15 - count], 0xE0, 2 * (count + 1));
+ }
+ else
+ {
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(16, 16));
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG0
+ | BLDCNT_EFFECT_BLEND
+ | BLDCNT_TGT2_BG1
+ | BLDCNT_TGT2_BG2
+ | BLDCNT_TGT2_BG3
+ | BLDCNT_TGT2_OBJ
+ | BLDCNT_TGT2_BD);
+ gTasks[taskId].func = sub_81376DC;
+ }
+}
+
+static void sub_81376DC(u8 taskId)
+{
+ u16 count = 16 - gTasks[taskId].data[1];
+ u16 blend = count + 0x1000;
+
+ SetGpuReg(REG_OFFSET_BLDALPHA, blend);
+ if (count)
+ {
+ gTasks[taskId].data[1]++;
+ }
+ else
+ {
+ LoadPalette(gCaveTransitionPalette_Black, 0, 0x20);
+ SetMainCallback2(gMain.savedCallback);
+ }
+}
diff --git a/src/fldeff_groundshake.c b/src/fldeff_groundshake.c
new file mode 100644
index 000000000..bee4d2c4b
--- /dev/null
+++ b/src/fldeff_groundshake.c
@@ -0,0 +1,299 @@
+#include "global.h"
+#include "global.fieldmap.h"
+#include "constants/flags.h"
+#include "constants/songs.h"
+#include "event_data.h"
+#include "field_camera.h"
+#include "field_map_obj.h"
+#include "malloc.h"
+#include "random.h"
+#include "roulette_util.h"
+#include "script.h"
+#include "sound.h"
+#include "sprite.h"
+#include "task.h"
+
+// structures
+struct Struct203CF18 {
+ u8 taskId;
+ struct InnerStruct203CF18 unk4;
+}; //size = 0xC8
+
+// extern data
+extern const struct SpriteSheet gUnknown_08617D94[];
+extern const s16 gUnknown_08617D64[][3];
+
+// static functions
+static void sub_81BE808(u8 taskId);
+static void sub_81BE900(u8 taskId);
+static void sub_81BE968(void);
+static void sub_81BE9C0(u8 taskId);
+static void sub_81BEA00(u8 taskId);
+static void sub_81BEA20(void);
+static void sub_81BEAD8(struct Sprite* sprite);
+
+// rodata
+static const u8 gUnknown_08617E18[] = {0x3b, 0x43, 0x61, 0x00, 0x0f, 0x05, 0xff, 0x9b};
+
+static const union AnimCmd gSpriteAnim_8617E20[] =
+{
+ ANIMCMD_FRAME(0, 12),
+ ANIMCMD_JUMP(0),
+};
+
+static const union AnimCmd *const gSpriteAnimTable_8617E28[] =
+{
+ gSpriteAnim_8617E20,
+};
+
+static const struct OamData gUnknown_08617E2C =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 0,
+ .tileNum = 0,
+ .priority = 0,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+static const struct SpriteTemplate gUnknown_08617E34 = {
+ 0x0FA0, 0xFFFF, &gUnknown_08617E2C, gSpriteAnimTable_8617E28, NULL, gDummySpriteAffineAnimTable, sub_81BEAD8
+};
+
+static const union AnimCmd gSpriteAnim_8617E4C[] =
+{
+ ANIMCMD_FRAME(0, 12),
+ ANIMCMD_JUMP(0),
+};
+
+static const union AnimCmd *const gSpriteAnim_8617E54[] =
+{
+ gSpriteAnim_8617E4C,
+};
+
+static const struct OamData gSpriteAnim_8617E58 =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 1,
+ .tileNum = 0,
+ .priority = 0,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+static const struct SpriteTemplate gUnknown_08617E60 = {
+ 0x0FA0, 0xFFFF, &gSpriteAnim_8617E58, gSpriteAnim_8617E54, NULL, gDummySpriteAffineAnimTable, sub_81BEAD8
+};
+
+// ewram
+EWRAM_DATA struct Struct203CF18 *gUnknown_0203CF18 = NULL;
+
+// text
+bool8 sub_81BE66C(void)
+{
+ if (!(gSaveBlock1Ptr->location.mapGroup == 0x0 && gSaveBlock1Ptr->location.mapNum == 0x1A))
+ return 0;
+ return FlagGet(FLAG_0x14E);
+}
+
+void sub_81BE698(u8 taskId)
+{
+ sub_8151E50(&(gUnknown_0203CF18->unk4));
+}
+
+void sub_81BE6AC(void)
+{
+ gUnknown_0203CF18 = NULL;
+}
+
+void sub_81BE6B8(void)
+{
+ if(gUnknown_0203CF18 != NULL)
+ {
+ gUnknown_0203CF18 = NULL;
+ return;
+ }
+ if(!(gSaveBlock1Ptr->location.mapGroup == 0x0 && gSaveBlock1Ptr->location.mapNum == 0x1A) || !FlagGet(FLAG_0x14E))
+ return;
+
+ gUnknown_0203CF18 = (struct Struct203CF18 *)AllocZeroed(sizeof(struct Struct203CF18));
+ sub_8151B3C(&(gUnknown_0203CF18->unk4));
+ sub_8151B68(&(gUnknown_0203CF18->unk4), gUnknown_08617E18);
+ sub_8151CA8(&(gUnknown_0203CF18->unk4), 1, 1);
+ gUnknown_0203CF18->taskId = CreateTask(sub_81BE698, 0xFF);
+}
+
+void sub_81BE72C(void)
+{
+ if(!(gSaveBlock1Ptr->location.mapGroup == 0x0 && gSaveBlock1Ptr->location.mapNum == 0x1A) || !FlagGet(FLAG_0x14E) || gUnknown_0203CF18 == NULL)
+ return;
+ if(FuncIsActiveTask(sub_81BE698))
+ DestroyTask(gUnknown_0203CF18->taskId);
+ sub_8151D28(&(gUnknown_0203CF18->unk4), 1, 1);
+ sub_8151C50(&(gUnknown_0203CF18->unk4), 1, 1);
+ Free(gUnknown_0203CF18);
+ gUnknown_0203CF18 = NULL;
+}
+
+void sub_81BE79C(void)
+{
+ u16 rand;
+ bool8 chance;
+
+ if(VarGet(VAR_0x40CB) != 0)
+ {
+ FlagClear(FLAG_0x14E);
+ return;
+ }
+ rand = Random();
+ chance = rand & 1;
+ if(FlagGet(FLAG_0x09D) == TRUE)
+ chance = TRUE;
+ if(chance)
+ {
+ FlagSet(FLAG_0x14E);
+ sub_81BE6B8();
+ return;
+ }
+ FlagClear(FLAG_0x14E);
+}
+
+void sub_81BE7F4(void)
+{
+ CreateTask(sub_81BE808, 0x8);
+}
+
+static void sub_81BE808(u8 taskId)
+{
+ u8 mapObjectIdBuffer;
+ struct MapObject *fieldMapObject;
+ struct MapObject *playerAvatarMapObject;
+
+ TryGetFieldObjectIdByLocalIdAndMap(0x2D, gSaveBlock1Ptr->location.mapNum, gSaveBlock1Ptr->location.mapGroup, &mapObjectIdBuffer);
+ fieldMapObject = &(gMapObjects[mapObjectIdBuffer]);
+ gSprites[fieldMapObject->spriteId].pos2.y += 4;
+ playerAvatarMapObject = &(gMapObjects[gPlayerAvatar.mapObjectId]);
+
+ if((gSprites[fieldMapObject->spriteId].pos1.y + gSprites[fieldMapObject->spriteId].pos2.y) >=
+ (gSprites[playerAvatarMapObject->spriteId].pos1.y + gSprites[playerAvatarMapObject->spriteId].pos2.y))
+ {
+ DestroyTask(taskId);
+ EnableBothScriptContexts();
+ }
+}
+
+static void sp136_strengh_sound(u8 a, u8 b, u8 c, u8 d)
+{
+ u8 taskId;
+
+ taskId = CreateTask(sub_81BE900, 0x9);
+ gTasks[taskId].data[0] = b;
+ gTasks[taskId].data[1] = 0;
+ gTasks[taskId].data[2] = c;
+ gTasks[taskId].data[3] = d;
+ gTasks[taskId].data[4] = a;
+ SetCameraPanningCallback(NULL);
+ PlaySE(SE_W070);
+}
+
+static void sub_81BE900(u8 taskId)
+{
+ s16 *data;
+
+ data = gTasks[taskId].data;
+ data[1]++;
+ if((data[1] % data[3]) == 0)
+ {
+ data[1] = 0;
+ data[2]--;
+ data[0] = -data[0];
+ data[4] = -data[4];
+ SetCameraPanning(data[0], data[4]);
+ if(!data[2])
+ {
+ sub_81BE968();
+ DestroyTask(taskId);
+ InstallCameraPanAheadCallback();
+ }
+ }
+}
+
+static void sub_81BE968(void)
+{
+ u8 taskId;
+
+ taskId = FindTaskIdByFunc(sub_81BE9C0);
+ if(taskId != 0xFF)
+ gTasks[taskId].data[0]++;
+}
+
+void sub_81BE994(void)
+{
+ LoadSpriteSheets(gUnknown_08617D94);
+ sub_81BEA20();
+ CreateTask(sub_81BE9C0, 0x8);
+ sp136_strengh_sound(2, 1, 16, 3);
+}
+
+static void sub_81BE9C0(u8 taskId)
+{
+ u16 *data;
+
+ data = gTasks[taskId].data;
+ data[1]++;
+ if(data[1] == 1000 || data[0] == 17)
+ gTasks[taskId].func = sub_81BEA00;
+}
+
+static void sub_81BEA00(u8 taskId)
+{
+ FreeSpriteTilesByTag(4000);
+ DestroyTask(taskId);
+ EnableBothScriptContexts();
+}
+
+static void sub_81BEA20(void)
+{
+ u8 i;
+ u8 spriteId;
+
+ for(i = 0; i < 8; i++)
+ {
+ spriteId = CreateSprite(&gUnknown_08617E60, gUnknown_08617D64[i][0] + 120, gUnknown_08617D64[i][1], 8);
+ gSprites[spriteId].oam.priority = 0;
+ gSprites[spriteId].oam.paletteNum = 0;
+ gSprites[spriteId].data[0] = i;
+ }
+ for(i = 0; i < 8; i++)
+ {
+ spriteId = CreateSprite(&gUnknown_08617E34, gUnknown_08617D64[i][0] + 115, gUnknown_08617D64[i][1] - 3, 8);
+ gSprites[spriteId].oam.priority = 0;
+ gSprites[spriteId].oam.paletteNum = 0;
+ gSprites[spriteId].data[0] = i;
+ }
+}
+
+static void sub_81BEAD8(struct Sprite* sprite)
+{
+ sprite->data[1] += 2;
+ sprite->pos2.y = (sprite->data[1] / 2);
+ if(((sprite->pos1.y) + (sprite->pos2.y)) > gUnknown_08617D64[sprite->data[0]][2])
+ {
+ DestroySprite(sprite);
+ sub_81BE968();
+ }
+}
diff --git a/src/fldeff_softboiled.c b/src/fldeff_softboiled.c
new file mode 100644
index 000000000..d0a40a9a9
--- /dev/null
+++ b/src/fldeff_softboiled.c
@@ -0,0 +1,109 @@
+#include "global.h"
+#include "menu.h"
+#include "party_menu.h"
+#include "pokemon.h"
+#include "constants/songs.h"
+#include "sound.h"
+#include "sprite.h"
+#include "string_util.h"
+#include "strings.h"
+#include "task.h"
+
+static void sub_816166C(u8 taskId);
+static void sub_81616C0(u8 taskId);
+static void sub_8161724(u8 taskId);
+static void sub_81617B8(u8 taskId);
+
+bool8 SetUpFieldMove_SoftBoiled(void)
+{
+ u16 maxHp;
+ u16 hp;
+ u16 minHp;
+
+ maxHp = GetMonData(&gPlayerParty[GetCursorSelectionMonId()], MON_DATA_MAX_HP);
+ hp = GetMonData(&gPlayerParty[GetCursorSelectionMonId()], MON_DATA_HP);
+
+ minHp = (maxHp / 5);
+ if (hp > minHp)
+ return TRUE;
+ return FALSE;
+}
+
+void sub_8161560(u8 taskId)
+{
+ gUnknown_0203CEC8.unkB = 0xA;
+ gUnknown_0203CEC8.unkA = gUnknown_0203CEC8.unk9;
+ sub_81B0FCC(GetCursorSelectionMonId(), 0x1);
+ display_pokemon_menu_message(0x5);
+ gTasks[taskId].func = sub_81B1370;
+}
+
+void sub_81615A8(u8 taskId)
+{
+ u16 hp;
+
+ u8 unk9 = gUnknown_0203CEC8.unk9;
+ u8 pokemonIndex = gUnknown_0203CEC8.unkA;
+ if(pokemonIndex > 6)
+ {
+ gUnknown_0203CEC8.unkB = 0;
+ display_pokemon_menu_message(0x0);
+ gTasks[taskId].func = sub_81B1370;
+ return;
+ }
+
+ hp = GetMonData(&gPlayerParty[pokemonIndex], MON_DATA_HP);
+ if(hp == 0 || unk9 == pokemonIndex || GetMonData(&gPlayerParty[pokemonIndex], MON_DATA_MAX_HP) == hp)
+ {
+ sub_81617B8(taskId);
+ return;
+ }
+
+ PlaySE(SE_KAIFUKU);
+ sub_81B1F18(taskId, unk9, -1, GetMonData(&gPlayerParty[unk9], MON_DATA_MAX_HP)/5, sub_816166C);
+}
+
+static void sub_816166C(u8 taskId)
+{
+ PlaySE(SE_KAIFUKU);
+ sub_81B1F18(taskId, gUnknown_0203CEC8.unkA, 1, GetMonData(&gPlayerParty[gUnknown_0203CEC8.unk9], MON_DATA_MAX_HP)/5, sub_81616C0);
+}
+
+static void sub_81616C0(u8 taskId)
+{
+ GetMonNickname(&gPlayerParty[gUnknown_0203CEC8.unkA], gStringVar1);
+ StringExpandPlaceholders(gStringVar4, gText_PkmnHPRestoredByVar2);
+ sub_81B1B5C(gStringVar4, 0);
+ schedule_bg_copy_tilemap_to_vram(2);
+ gTasks[taskId].func = sub_8161724;
+}
+
+static void sub_8161724(u8 taskId)
+{
+ if(sub_81B1BD4() == 1)
+ return;
+ gUnknown_0203CEC8.unkB = 0x0;
+ sub_81B0FCC(gUnknown_0203CEC8.unk9, 0);
+ gUnknown_0203CEC8.unk9 = gUnknown_0203CEC8.unkA;
+ sub_81B0FCC(gUnknown_0203CEC8.unkA, 1);
+ sub_8198070(0x6, FALSE);
+ ClearWindowTilemap(0x6);
+ display_pokemon_menu_message(0);
+ gTasks[taskId].func = sub_81B1370;
+}
+
+static void sub_8161784(u8 taskId)
+{
+ if(sub_81B1BD4() == 1)
+ return;
+ display_pokemon_menu_message(0x5);
+ gTasks[taskId].func = sub_81B1370;
+}
+
+static void sub_81617B8(u8 taskId)
+{
+ PlaySE(SE_SELECT);
+ sub_81B1B5C(&gText_CantBeUsedOnPkmn, 0);
+ schedule_bg_copy_tilemap_to_vram(2);
+ gTasks[taskId].func = sub_8161784;
+}
diff --git a/src/fldeff_strength.c b/src/fldeff_strength.c
new file mode 100644
index 000000000..162479c73
--- /dev/null
+++ b/src/fldeff_strength.c
@@ -0,0 +1,46 @@
+#include "global.h"
+#include "event_data.h"
+#include "event_scripts.h"
+#include "field_effect.h"
+#include "party_menu.h"
+#include "rom6.h"
+#include "script.h"
+#include "task.h"
+
+// static functions
+static void FldEff_UseStrength(void);
+static void sub_8145E74(void);
+
+// text
+bool8 SetUpFieldMove_Strength(void)
+{
+ if (npc_before_player_of_type(87) == TRUE)
+ {
+ gSpecialVar_Result = GetCursorSelectionMonId();
+ gUnknown_03005DB0 = FieldCallback_Teleport;
+ gUnknown_0203CEEC = FldEff_UseStrength;
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static void FldEff_UseStrength(void)
+{
+ gFieldEffectArguments[0] = GetCursorSelectionMonId();
+ ScriptContext1_SetupScript(FieryPath_EventScript_2908FD);
+}
+
+bool8 sub_8145E2C(void)
+{
+ u8 taskId = oei_task_add();
+ gTasks[taskId].data[8] = (u32)sub_8145E74 >> 16;
+ gTasks[taskId].data[9] = (u32)sub_8145E74;
+ GetMonNickname(&gPlayerParty[gFieldEffectArguments[0]], gStringVar1);
+ return FALSE;
+}
+
+static void sub_8145E74(void)
+{
+ FieldEffectActiveListRemove(FLDEFF_USE_STRENGTH);
+ EnableBothScriptContexts();
+}
diff --git a/src/fldeff_sweetscent.c b/src/fldeff_sweetscent.c
new file mode 100644
index 000000000..100e440a5
--- /dev/null
+++ b/src/fldeff_sweetscent.c
@@ -0,0 +1,98 @@
+#include "global.h"
+#include "constants/rgb.h"
+#include "constants/songs.h"
+#include "event_data.h"
+#include "event_scripts.h"
+#include "field_effect.h"
+#include "field_player_avatar.h"
+#include "field_screen.h"
+#include "palette.h"
+#include "party_menu.h"
+#include "rom6.h"
+#include "script.h"
+#include "sound.h"
+#include "sprite.h"
+#include "task.h"
+#include "wild_encounter.h"
+
+void hm2_sweet_scent(void);
+void sub_8159F5C(void);
+void sub_8159FEC(u8 taskId);
+void sub_815A090(u8 taskId);
+void sub_81BE6B8(void);
+void sub_81BE72C(void);
+
+bool8 SetUpFieldMove_SweetScent(void)
+{
+ gUnknown_03005DB0 = FieldCallback_Teleport;
+ gUnknown_0203CEEC = hm2_sweet_scent;
+ return TRUE;
+}
+
+void hm2_sweet_scent(void)
+{
+ FieldEffectStart(FLDEFF_SWEET_SCENT);
+ gFieldEffectArguments[0] = GetCursorSelectionMonId();
+}
+
+bool8 FldEff_SweetScent()
+{
+ u8 taskId;
+
+ sub_80AC3D0();
+ taskId = oei_task_add();
+ gTasks[taskId].data[8] = (u32)sub_8159F5C >> 16;
+ gTasks[taskId].data[9] = (u32)sub_8159F5C;
+ return FALSE;
+}
+
+void sub_8159F5C(void)
+{
+ u8 taskId;
+
+ PlaySE(SE_W230);
+ CpuFastSet(gPlttBufferUnfaded, gPaletteDecompressionBuffer, 0x100);
+ CpuFastSet(gPlttBufferFaded, gPlttBufferUnfaded, 0x100);
+ BeginNormalPaletteFade(~(1 << (gSprites[GetPlayerAvatarObjectId()].oam.paletteNum + 16)), 4, 0, 8, RGB_RED);
+ taskId = CreateTask(sub_8159FEC, 0);
+ gTasks[taskId].data[0] = 0;
+ FieldEffectActiveListRemove(FLDEFF_SWEET_SCENT);
+}
+
+void sub_8159FEC(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ sub_81BE72C();
+ BlendPalettes(0x00000040, 8, RGB_RED);
+ if (gTasks[taskId].data[0] == 64)
+ {
+ gTasks[taskId].data[0] = 0;
+ if (SweetScentWildEncounter() == TRUE)
+ {
+ DestroyTask(taskId);
+ }
+ else
+ {
+ gTasks[taskId].func = sub_815A090;
+ BeginNormalPaletteFade(~(1 << (gSprites[GetPlayerAvatarObjectId()].oam.paletteNum + 16)), 4, 8, 0, RGB_RED);
+ sub_81BE6B8();
+ }
+ }
+ else
+ {
+ gTasks[taskId].data[0]++;
+ }
+ }
+}
+
+void sub_815A090(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ CpuFastSet(gPaletteDecompressionBuffer, gPlttBufferUnfaded, 0x100);
+ sub_80AC3E4();
+ ScriptContext1_SetupScript(EventScript_290CAE);
+ DestroyTask(taskId);
+ }
+}
diff --git a/src/fldeff_teleport.c b/src/fldeff_teleport.c
index 5b3492db0..1b88b42d7 100644
--- a/src/fldeff_teleport.c
+++ b/src/fldeff_teleport.c
@@ -7,17 +7,14 @@
#include "rom6.h"
#include "task.h"
-extern bool8 (*gUnknown_03005DB0)(void);
-extern void (*gUnknown_0203CEEC)(void);
-
bool8 SetUpFieldMove_Teleport(void)
{
if (Overworld_MapTypeAllowsTeleportAndFly(gMapHeader.mapType) == TRUE)
{
gUnknown_03005DB0 = FieldCallback_Teleport;
- gUnknown_0203CEEC = hm_teleport_run_dp02scr;
+ gUnknown_0203CEEC = hm_teleport_run_dp02scr;
return TRUE;
- }
+ }
return FALSE;
}
@@ -40,7 +37,7 @@ bool8 FldEff_UseTeleport(void)
void sub_817C94C(void)
{
FieldEffectActiveListRemove(FLDEFF_USE_TELEPORT);
- sub_80B7FC8();
+ CreateTeleportFieldEffectTask();
}
diff --git a/src/fossil_specials.c b/src/fossil_specials.c
new file mode 100644
index 000000000..060915fa6
--- /dev/null
+++ b/src/fossil_specials.c
@@ -0,0 +1,770 @@
+#include "global.h"
+#include "constants/flags.h"
+#include "constants/songs.h"
+#include "bg.h"
+#include "event_data.h"
+#include "field_camera.h"
+#include "field_map_obj.h"
+#include "fieldmap.h"
+#include "global.fieldmap.h"
+#include "gpu_regs.h"
+#include "malloc.h"
+#include "menu.h"
+#include "random.h"
+#include "script.h"
+#include "sound.h"
+#include "sprite.h"
+#include "task.h"
+#include "window.h"
+
+#define MIRAGE_TOWER_GFX_LENGTH (sizeof(gUnknown_08617274) + sizeof(gMirageTower_Gfx))
+#define MIRAGE_TOWER_PALETTE_LENGTH 0x800
+#define ROOT_FOSSIL_GFX_LENGTH sizeof(gRootFossil_Gfx)
+#define ROOT_FOSSIL_GFX_RANDOMIZER_LENGTH 0x100
+
+//struct
+struct Struct8617DA4 {
+ u8 x;
+ u8 y;
+ u16 tileId;
+};
+
+struct Struct203CF10 {
+ u8 *buffer;
+ u8 curr_buffer_index;
+};
+
+struct DynamicSpriteFrameImage{
+ u8 *data;
+ u16 size;
+};
+
+struct Struct203CF0C {
+ u8 *frameImageTiles;
+ struct DynamicSpriteFrameImage *frameImage;
+ u8 spriteId;
+ u16 *unkC;
+ u16 unk10;
+};
+
+// static functions
+static void sub_81BED50(u8 taskId);
+static void sub_81BEBF4(u8 taskId);
+static void sub_81BF028(u8 taskId);
+static void sub_81BF248(struct Sprite *);
+/*static*/ void sub_81BF2B8(u8* a, u16 b, u8 c, u8 d, u8 e);
+
+// .rodata
+static const u8 gUnknown_08617274[] = {00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00};
+static const u8 gMirageTower_Gfx[] = INCBIN_U8("graphics/misc/mirage_tower.4bpp");
+static const u16 gUnknown_08617B94[] = INCBIN_U16("graphics/misc/mirage_tower.bin");
+static const u16 gRootFossil_Pal[] = INCBIN_U16("graphics/misc/fossil.gbapal");
+static const u8 gRootFossil_Gfx[] = INCBIN_U8("graphics/misc/fossil.4bpp");
+static const u8 gMirageTowerCrumbles_Gfx[] = INCBIN_U8("graphics/misc/mirage_tower_crumbles.4bpp");
+static const u16 gMirageTowerCrumbles_Palette[] = INCBIN_U16("graphics/misc/mirage_tower_crumbles.gbapal");
+
+const s16 gUnknown_08617D64[][3] =
+ {
+ { 0, 10, 65},
+ { 17, 3, 50},
+ {-12, 0, 75},
+ { 10, 15, 90},
+ { 7, 8, 65},
+ {-18, 5, 75},
+ { 22, -10, 55},
+ {-24, -4, 65},
+ };
+
+const struct SpriteSheet gUnknown_08617D94[] =
+{
+ {gMirageTowerCrumbles_Gfx, 0x0080, 0x0fa0},
+ {NULL}
+};
+
+static const struct Struct8617DA4 gUnknown_08617DA4[] =
+ {
+ {0x12, 0x35, 0x251},
+ {0x13, 0x35, 0x251},
+ {0x14, 0x35, 0x251},
+ {0x12, 0x36, 0x251},
+ {0x13, 0x36, 0x251},
+ {0x14, 0x36, 0x251},
+ {0x12, 0x37, 0x251},
+ {0x13, 0x37, 0x251},
+ {0x14, 0x37, 0x251},
+ {0x12, 0x38, 0x251},
+ {0x13, 0x38, 0x251},
+ {0x14, 0x38, 0x251},
+ {0x12, 0x39, 0x259},
+ {0x13, 0x39, 0x259},
+ {0x14, 0x39, 0x259},
+ {0x12, 0x3A, 0x121},
+ {0x13, 0x3A, 0x121},
+ {0x14, 0x3A, 0x121},
+ };
+
+static const union AnimCmd gSpriteAnim_8617DEC[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END,
+};
+
+static const struct OamData gOamData_8617DF4 =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 1,
+ .tileNum = 0,
+ .priority = 0,
+ .paletteNum = 3,
+ .affineParam = 0,
+};
+
+static const union AnimCmd *const gSpriteAnimTable_8617DFC[] =
+{
+ gSpriteAnim_8617DEC,
+};
+
+static const struct SpriteTemplate gUnknown_08617E00 = {
+ 0xFFFF, 0xFFFF, &gOamData_8617DF4, gSpriteAnimTable_8617DFC, NULL, gDummySpriteAffineAnimTable, SpriteCallbackDummy
+};
+
+// ewram
+EWRAM_DATA u8* gUnknown_0203CF04 = NULL;
+EWRAM_DATA u8* gUnknown_0203CF08 = NULL;
+EWRAM_DATA struct Struct203CF0C *gUnknown_0203CF0C = NULL;
+EWRAM_DATA struct Struct203CF10 *gUnknown_0203CF10 = NULL;
+EWRAM_DATA u16 *gUnknown_0203CF14 = NULL;
+
+// iwram
+IWRAM_DATA u16 gUnknown_030012A8[8] = {0, 0, 0, 0, 0, 0, 0, 0};
+
+// text
+void sub_81BEB24(void)
+{
+ u8 i;
+ for(i = 0; i < (sizeof(gUnknown_08617DA4)/sizeof(gUnknown_08617DA4[0])); i++)
+ MapGridSetMetatileIdAt(gUnknown_08617DA4[i].x + 7, gUnknown_08617DA4[i].y + 7, gUnknown_08617DA4[i].tileId);
+ DrawWholeMapView();
+}
+
+void sub_81BEB54(void)
+{
+ CreateTask(sub_81BED50, 0x9);
+}
+
+void sub_81BEB68(void)
+{
+ CreateTask(sub_81BEBF4, 0x9);
+}
+
+void sub_81BEB7C(void)
+{
+ CreateTask(sub_81BF028, 0x9);
+}
+
+void sub_81BEB90(void)
+{
+ SetGpuReg(REG_OFFSET_BG0HOFS, gUnknown_0203CF14[0]);
+ SetGpuReg(REG_OFFSET_BG0VOFS, gUnknown_0203CF14[1]);
+}
+
+void sub_81BEBB4(u8 taskId)
+{
+ if(!(gTasks[taskId].data[0]))
+ {
+ gUnknown_0203CF14[0] = -gUnknown_0203CF14[0];
+ gTasks[taskId].data[0] = 2;
+ sub_81BEB90();
+ }
+ else
+ gTasks[taskId].data[0]--;
+}
+
+static void sub_81BEBF4(u8 taskId)
+{
+ u8 zero;
+
+ switch(gTasks[taskId].data[0])
+ {
+ case 0:
+ FreeAllWindowBuffers();
+ SetBgAttribute(0, BG_CTRL_ATTR_MOSAIC, 2);
+ gTasks[taskId].data[0]++;
+ break;
+ case 1:
+ gUnknown_0203CF04 = (u8 *)AllocZeroed(MIRAGE_TOWER_GFX_LENGTH);
+ gUnknown_0203CF08 = (u8 *)AllocZeroed(MIRAGE_TOWER_PALETTE_LENGTH);
+ ChangeBgX(0, 0, 0);
+ ChangeBgY(0, 0, 0);
+ gTasks[taskId].data[0]++;
+ break;
+ case 2:
+ CpuSet(gUnknown_08617274, gUnknown_0203CF04, MIRAGE_TOWER_GFX_LENGTH / 2);
+ LoadBgTiles(0, gUnknown_0203CF04, MIRAGE_TOWER_GFX_LENGTH, 0);
+ gTasks[taskId].data[0]++;
+ break;
+ case 3:
+ SetBgTilemapBuffer(0, gUnknown_0203CF08);
+ CopyToBgTilemapBufferRect_ChangePalette(0, &gUnknown_08617B94, 12, 29, 6, 12, 17);
+ CopyBgTilemapBufferToVram(0);
+ gTasks[taskId].data[0]++;
+ break;
+ case 4:
+ ShowBg(0);
+ gTasks[taskId].data[0]++;
+ break;
+ case 5:
+ sub_81BEB24();
+ gTasks[taskId].data[0]++;
+ break;
+ case 6:
+ gUnknown_0203CF14 = (u16 *)Alloc(4);
+ zero = 0;
+ gUnknown_0203CF14[0] = 2;
+ gUnknown_0203CF14[1] = zero;
+ CreateTask(sub_81BEBB4, 0xA);
+ DestroyTask(taskId);
+ EnableBothScriptContexts();
+ break;
+ }
+}
+
+#ifdef NONMATCHING
+#define OUTER_BUFFER_LENGTH 0x60
+#define INNER_BUFFER_LENGTH 0x30
+static void sub_81BED50(u8 taskId)
+{
+ u8 anotherTaskId, j;
+
+
+ switch(gTasks[taskId].data[0])
+ {
+ case 1:
+ gUnknown_0203CF10 = (struct Struct203CF10 *)AllocZeroed(OUTER_BUFFER_LENGTH * sizeof(struct Struct203CF10));
+ break;
+ case 3:
+ {
+ u16 i;
+ u16 left;
+ u32 index, next;
+
+ index = (u16)gTasks[taskId].data[3];
+ if(gTasks[taskId].data[3] <= (OUTER_BUFFER_LENGTH - 1))
+ {
+ if(gTasks[taskId].data[1] > 1)
+ {
+ index = (u8)index;
+ gUnknown_0203CF10[index].buffer = (u8 *)Alloc(INNER_BUFFER_LENGTH);
+ for(i = 0; i <= (INNER_BUFFER_LENGTH - 1); i++)
+ gUnknown_0203CF10[index].buffer[i] = i;
+ for(i = 0; i <= (INNER_BUFFER_LENGTH - 1); i++)
+ {
+ u16 rand1, rand2, temp;
+
+ rand1 = Random() % 0x30;
+ rand2 = Random() % 0x30;
+ temp = gUnknown_0203CF10[index].buffer[rand2];
+ gUnknown_0203CF10[index].buffer[rand2] = gUnknown_0203CF10[index].buffer[rand1];
+ gUnknown_0203CF10[index].buffer[rand1] = temp;
+ }
+ if(gTasks[taskId].data[3] <= (OUTER_BUFFER_LENGTH - 1))
+ gTasks[taskId].data[3]++;
+ gTasks[taskId].data[1] = 0;
+ }
+ gTasks[taskId].data[1]++;
+ }
+ index = (u8)gTasks[taskId].data[3];
+ for(left = (u8)gTasks[taskId].data[2]; left < (u16)index; left = next)
+ {
+ j = 0;
+ next = left + 1;
+ while(!j)
+ {
+ sub_81BF2B8(gUnknown_0203CF04, ((((OUTER_BUFFER_LENGTH - 1) - left) * INNER_BUFFER_LENGTH) + gUnknown_0203CF10[left].buffer[(gUnknown_0203CF10[left].curr_buffer_index)++]), 0, INNER_BUFFER_LENGTH, 1);
+ j++;
+ }
+ if(gUnknown_0203CF10[left].curr_buffer_index > (INNER_BUFFER_LENGTH - 1))
+ {
+ FREE_AND_SET_NULL(gUnknown_0203CF10[left].buffer);
+ gTasks[taskId].data[2]++;
+ if((left % 2) == 1)
+ gUnknown_0203CF14[1]--;
+ }
+ }
+ LoadBgTiles(0, gUnknown_0203CF04, MIRAGE_TOWER_GFX_LENGTH, 0);
+ if(gUnknown_0203CF10[OUTER_BUFFER_LENGTH - 1].curr_buffer_index > (INNER_BUFFER_LENGTH - 1))
+ break;
+ return;
+ }
+ case 4:
+ UnsetBgTilemapBuffer(0);
+ anotherTaskId = FindTaskIdByFunc(sub_81BEBB4);
+ if(anotherTaskId != 0xFF)
+ DestroyTask(anotherTaskId);
+ gUnknown_0203CF14[1] = gUnknown_0203CF14[0] = 0;
+ sub_81BEB90();
+ break;
+ case 5:
+ FREE_AND_SET_NULL(gUnknown_0203CF14);
+ FREE_AND_SET_NULL(gUnknown_0203CF10);
+ FREE_AND_SET_NULL(gUnknown_0203CF04);
+ FREE_AND_SET_NULL(gUnknown_0203CF08);
+ break;
+ case 6:
+ SetGpuRegBits(REG_OFFSET_BG2CNT, 0x2);
+ SetGpuRegBits(REG_OFFSET_BG0CNT, 0x0);
+ SetBgAttribute(0, BG_CTRL_ATTR_MOSAIC, 0);
+ sub_81971D0();
+ break;
+ case 7:
+ ShowBg(0);
+ break;
+ case 8:
+ DestroyTask(taskId);
+ EnableBothScriptContexts();
+ break;
+ }
+ gTasks[taskId].data[0]++;
+}
+
+#else
+NAKED
+static void sub_81BED50(u8 taskId)
+{
+ asm("\n\
+ .syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, 0x10\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r10, r0\n\
+ ldr r1, =gTasks\n\
+ lsls r0, 2\n\
+ add r0, r10\n\
+ lsls r0, 3\n\
+ adds r0, r1\n\
+ ldrh r0, [r0, 0x8]\n\
+ subs r0, 0x1\n\
+ lsls r0, 16\n\
+ asrs r0, 16\n\
+ adds r6, r1, 0\n\
+ cmp r0, 0x7\n\
+ bls _081BED7C\n\
+ b _081BF002\n\
+ _081BED7C:\n\
+ lsls r0, 2\n\
+ ldr r1, =_081BED90\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ mov pc, r0\n\
+ .pool\n\
+ .align 2, 0\n\
+ _081BED90:\n\
+ .4byte _081BEDB0\n\
+ .4byte _081BF002\n\
+ .4byte _081BEDC4\n\
+ .4byte _081BEF64\n\
+ .4byte _081BEF94\n\
+ .4byte _081BEFD0\n\
+ .4byte _081BEFF0\n\
+ .4byte _081BEFF8\n\
+ _081BEDB0:\n\
+ ldr r4, =gUnknown_0203CF10\n\
+ movs r0, 0xC0\n\
+ lsls r0, 2\n\
+ bl AllocZeroed\n\
+ str r0, [r4]\n\
+ b _081BF002\n\
+ .pool\n\
+ _081BEDC4:\n\
+ mov r1, r10\n\
+ lsls r0, r1, 2\n\
+ adds r1, r0, r1\n\
+ lsls r1, 3\n\
+ adds r2, r1, r6\n\
+ ldrh r3, [r2, 0xE]\n\
+ movs r4, 0xE\n\
+ ldrsh r1, [r2, r4]\n\
+ str r0, [sp, 0x8]\n\
+ cmp r1, 0x5F\n\
+ bgt _081BEE8A\n\
+ movs r1, 0xA\n\
+ ldrsh r0, [r2, r1]\n\
+ cmp r0, 0x1\n\
+ ble _081BEE7C\n\
+ lsls r0, r3, 24\n\
+ lsrs r4, r0, 24\n\
+ movs r0, 0x30\n\
+ bl Alloc\n\
+ ldr r3, =gUnknown_0203CF10\n\
+ ldr r1, [r3]\n\
+ lsls r2, r4, 3\n\
+ adds r1, r2, r1\n\
+ str r0, [r1]\n\
+ movs r5, 0\n\
+ adds r4, r2, 0\n\
+ _081BEDFA:\n\
+ ldr r0, [r3]\n\
+ adds r0, r4, r0\n\
+ ldr r0, [r0]\n\
+ adds r0, r5\n\
+ strb r5, [r0]\n\
+ adds r0, r5, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r5, r0, 16\n\
+ cmp r5, 0x2F\n\
+ bls _081BEDFA\n\
+ movs r5, 0\n\
+ ldr r7, =gUnknown_0203CF10\n\
+ adds r6, r2, 0\n\
+ _081BEE14:\n\
+ bl Random\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ movs r1, 0x30\n\
+ bl __umodsi3\n\
+ adds r4, r0, 0\n\
+ lsls r4, 16\n\
+ lsrs r4, 16\n\
+ bl Random\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ movs r1, 0x30\n\
+ bl __umodsi3\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ ldr r1, [r7]\n\
+ adds r1, r6, r1\n\
+ ldr r1, [r1]\n\
+ adds r0, r1, r0\n\
+ ldrb r2, [r0]\n\
+ adds r1, r4 \n\
+ ldrb r1, [r1]\n\
+ strb r1, [r0]\n\
+ ldr r0, [r7]\n\
+ adds r0, r6, r0\n\
+ ldr r0, [r0]\n\
+ adds r0, r4\n\
+ strb r2, [r0]\n\
+ adds r0, r5, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r5, r0, 16\n\
+ cmp r5, 0x2F\n\
+ bls _081BEE14\n\
+ ldr r0, =gTasks\n\
+ ldr r1, [sp, 0x8]\n\
+ add r1, r10\n\
+ lsls r1, 3\n\
+ adds r2, r1, r0\n\
+ ldrh r3, [r2, 0xE]\n\
+ movs r4, 0xE\n\
+ ldrsh r1, [r2, r4]\n\
+ adds r6, r0, 0\n\
+ cmp r1, 0x5F\n\
+ bgt _081BEE78\n\
+ adds r0, r3, 0x1\n\
+ strh r0, [r2, 0xE]\n\
+ _081BEE78:\n\
+ movs r0, 0\n\
+ strh r0, [r2, 0xA]\n\
+ _081BEE7C:\n\
+ ldr r1, [sp, 0x8]\n\
+ add r1, r10\n\
+ lsls r1, 3\n\
+ adds r1, r6\n\
+ ldrh r0, [r1, 0xA]\n\
+ adds r0, 0x1\n\
+ strh r0, [r1, 0xA]\n\
+ _081BEE8A:\n\
+ ldr r0, [sp, 0x8]\n\
+ add r0, r10\n\
+ lsls r0, 3\n\
+ adds r0, r6\n\
+ ldrb r4, [r0, 0xE]\n\
+ ldrb r5, [r0, 0xC]\n\
+ lsls r0, r4, 16\n\
+ cmp r5, r4\n\
+ bcs _081BEF32\n\
+ str r0, [sp, 0xC]\n\
+ _081BEE9E:\n\
+ movs r6, 0\n\
+ adds r0, r5, 0x1\n\
+ str r0, [sp, 0x4]\n\
+ lsls r4, r5, 3\n\
+ movs r2, 0x5F\n\
+ subs r1, r2, r5\n\
+ lsls r0, r1, 1\n\
+ adds r0, r1\n\
+ lsls r0, 4\n\
+ mov r9, r0\n\
+ _081BEEB2:\n\
+ ldr r0, =gUnknown_0203CF04\n\
+ ldr r0, [r0]\n\
+ ldr r7, =gUnknown_0203CF10\n\
+ ldr r3, [r7]\n\
+ adds r3, r4, r3\n\
+ ldrb r2, [r3, 0x4]\n\
+ adds r1, r2, 0x1\n\
+ strb r1, [r3, 0x4]\n\
+ lsls r2, 24\n\
+ lsrs r2, 24\n\
+ ldr r1, [r3]\n\
+ adds r1, r2\n\
+ ldrb r1, [r1]\n\
+ add r1, r9\n\
+ lsls r1, 16\n\
+ lsrs r1, 16\n\
+ movs r2, 0x1\n\
+ mov r8, r2\n\
+ str r2, [sp]\n\
+ movs r2, 0\n\
+ movs r3, 0x30\n\
+ bl sub_81BF2B8\n\
+ adds r0, r6, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r6, r0, 24\n\
+ cmp r6, 0\n\
+ beq _081BEEB2\n\
+ ldr r0, [r7]\n\
+ adds r1, r4, r0\n\
+ ldrb r0, [r1, 0x4]\n\
+ cmp r0, 0x2F\n\
+ bls _081BEF24\n\
+ ldr r0, [r1]\n\
+ bl Free\n\
+ ldr r0, [r7]\n\
+ adds r0, r4, r0\n\
+ movs r1, 0\n\
+ str r1, [r0]\n\
+ ldr r1, [sp, 0x8]\n\
+ add r1, r10\n\
+ lsls r1, 3\n\
+ ldr r4, =gTasks\n\
+ adds r1, r4\n\
+ ldrh r0, [r1, 0xC]\n\
+ adds r0, 0x1\n\
+ strh r0, [r1, 0xC]\n\
+ mov r0, r8\n\
+ ands r5, r0\n\
+ cmp r5, 0x1\n\
+ bne _081BEF24\n\
+ ldr r0, =gUnknown_0203CF14\n\
+ ldr r1, [r0]\n\
+ ldrh r0, [r1, 0x2]\n\
+ subs r0, 0x1\n\
+ strh r0, [r1, 0x2]\n\
+ _081BEF24:\n\
+ ldr r1, [sp, 0x4]\n\
+ lsls r0, r1, 16\n\
+ lsrs r5, r0, 16\n\
+ ldr r2, [sp, 0xC]\n\
+ lsrs r0, r2, 16\n\
+ cmp r5, r0\n\
+ bcc _081BEE9E\n\
+ _081BEF32:\n\
+ ldr r0, =gUnknown_0203CF04\n\
+ ldr r1, [r0]\n\
+ movs r2, 0x92\n\
+ lsls r2, 4\n\
+ movs r0, 0\n\
+ movs r3, 0\n\
+ bl LoadBgTiles\n\
+ ldr r0, =gUnknown_0203CF10\n\
+ ldr r0, [r0]\n\
+ movs r4, 0xBE\n\
+ lsls r4, 2\n\
+ adds r0, r4\n\
+ ldrb r0, [r0, 0x4]\n\
+ cmp r0, 0x2F\n\
+ bhi _081BF002\n\
+ b _081BF014\n\
+ .pool\n\
+ _081BEF64:\n\
+ movs r0, 0\n\
+ bl UnsetBgTilemapBuffer\n\
+ ldr r0, =sub_81BEBB4\n\
+ bl FindTaskIdByFunc\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, 0xFF\n\
+ beq _081BEF7C\n\
+ bl DestroyTask\n\
+ _081BEF7C:\n\
+ ldr r0, =gUnknown_0203CF14\n\
+ ldr r1, [r0]\n\
+ movs r0, 0\n\
+ strh r0, [r1]\n\
+ strh r0, [r1, 0x2]\n\
+ bl sub_81BEB90\n\
+ b _081BF002\n\
+ .pool\n\
+ _081BEF94:\n\
+ ldr r4, =gUnknown_0203CF14\n\
+ ldr r0, [r4]\n\
+ bl Free\n\
+ movs r5, 0\n\
+ str r5, [r4]\n\
+ ldr r4, =gUnknown_0203CF10\n\
+ ldr r0, [r4]\n\
+ bl Free\n\
+ str r5, [r4]\n\
+ ldr r4, =gUnknown_0203CF04\n\
+ ldr r0, [r4]\n\
+ bl Free\n\
+ str r5, [r4]\n\
+ ldr r4, =gUnknown_0203CF08\n\
+ ldr r0, [r4]\n\
+ bl Free\n\
+ str r5, [r4]\n\
+ b _081BF002\n\
+ .pool\n\
+ _081BEFD0:\n\
+ movs r0, 0xC\n\
+ movs r1, 0x2\n\
+ bl SetGpuRegBits\n\
+ movs r0, 0x8\n\
+ movs r1, 0\n\
+ bl SetGpuRegBits\n\
+ movs r0, 0\n\
+ movs r1, 0x7\n\
+ movs r2, 0\n\
+ bl SetBgAttribute\n\
+ bl sub_81971D0\n\
+ b _081BF002\n\
+ _081BEFF0:\n\
+ movs r0, 0\n\
+ bl ShowBg\n\
+ b _081BF002\n\
+ _081BEFF8:\n\
+ mov r0, r10\n\
+ bl DestroyTask\n\
+ bl EnableBothScriptContexts\n\
+ _081BF002:\n\
+ ldr r0, =gTasks\n\
+ mov r2, r10\n\
+ lsls r1, r2, 2\n\
+ add r1, r10\n\
+ lsls r1, 3\n\
+ adds r1, r0\n\
+ ldrh r0, [r1, 0x8]\n\
+ adds r0, 0x1\n\
+ strh r0, [r1, 0x8]\n\
+ _081BF014:\n\
+ add sp, 0x10\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .pool\n\
+ .syntax divided");
+}
+#endif // NONMATCHING
+
+static void sub_81BF028(u8 taskId)
+{
+ u16 i;
+
+ switch(gTasks[taskId].data[0])
+ {
+ case 1:
+ gUnknown_0203CF0C = (struct Struct203CF0C *)AllocZeroed(sizeof(struct Struct203CF0C));
+ gUnknown_0203CF0C->frameImageTiles = (u8 *)AllocZeroed(ROOT_FOSSIL_GFX_LENGTH);
+ gUnknown_0203CF0C->frameImage = (struct DynamicSpriteFrameImage *) AllocZeroed(sizeof(struct DynamicSpriteFrameImage));
+ gUnknown_0203CF0C->unkC = (u16 *)AllocZeroed(ROOT_FOSSIL_GFX_RANDOMIZER_LENGTH * sizeof(u16));
+ gUnknown_0203CF0C->unk10 = 0;
+ break;
+ case 2:
+ {
+ u8 *buffer;
+ buffer = gUnknown_0203CF0C->frameImageTiles;
+ for(i = 0; i < ROOT_FOSSIL_GFX_LENGTH; i++, buffer++)
+ *buffer = gRootFossil_Gfx[i];
+ }
+ break;
+ case 3:
+ gUnknown_0203CF0C->frameImage->data = gUnknown_0203CF0C->frameImageTiles;
+ gUnknown_0203CF0C->frameImage->size = ROOT_FOSSIL_GFX_LENGTH;
+ break;
+ case 4:
+ {
+ u8 spriteId, zero;
+ struct SpriteTemplate fossilTemplate;
+
+ fossilTemplate = gUnknown_08617E00;
+ fossilTemplate.images = (struct SpriteFrameImage *)(gUnknown_0203CF0C->frameImage);
+ spriteId = CreateSprite(&fossilTemplate, 128, -16, 1);
+ gUnknown_0203CF0C->spriteId = spriteId;
+ zero = 0;
+ gSprites[gUnknown_0203CF0C->spriteId].centerToCornerVecX = zero;
+ gSprites[gUnknown_0203CF0C->spriteId].data[0] = gSprites[gUnknown_0203CF0C->spriteId].pos1.x;
+ gSprites[gUnknown_0203CF0C->spriteId].data[1] = 1;
+ }
+ case 5:
+ for(i = 0; i < ROOT_FOSSIL_GFX_RANDOMIZER_LENGTH; i++)
+ gUnknown_0203CF0C->unkC[i] = i;
+ break;
+ case 6:
+ {
+ u16 rand1, rand2, temp, j;
+ j = (ROOT_FOSSIL_GFX_RANDOMIZER_LENGTH * sizeof(u16)) - 1;
+ for(i = 0; i <= j; i++)
+ {
+ rand1 = Random() % 0x100;
+ rand2 = Random() % 0x100;
+ j = (ROOT_FOSSIL_GFX_RANDOMIZER_LENGTH * sizeof(u16)) - 1;
+ temp = gUnknown_0203CF0C->unkC[rand2];
+ gUnknown_0203CF0C->unkC[rand2] = gUnknown_0203CF0C->unkC[rand1];
+ gUnknown_0203CF0C->unkC[rand1] = temp;
+ }
+ gSprites[gUnknown_0203CF0C->spriteId].callback = sub_81BF248;
+ break;
+ }
+ case 7:
+ if(gSprites[gUnknown_0203CF0C->spriteId].callback != SpriteCallbackDummy)
+ return;
+ DestroySprite(&gSprites[gUnknown_0203CF0C->spriteId]);
+ FREE_AND_SET_NULL(gUnknown_0203CF0C->unkC);;
+ FREE_AND_SET_NULL(gUnknown_0203CF0C->frameImage);
+ FREE_AND_SET_NULL(gUnknown_0203CF0C->frameImageTiles);
+ FREE_AND_SET_NULL(gUnknown_0203CF0C);
+ break;
+ case 8:
+ EnableBothScriptContexts();
+ }
+ ++gTasks[taskId].data[0];
+}
+
+static void sub_81BF248(struct Sprite *sprite)
+{
+ if (gUnknown_0203CF0C->unk10 >= (ROOT_FOSSIL_GFX_RANDOMIZER_LENGTH))
+ {
+ sprite->callback = SpriteCallbackDummy;
+ }
+ else if (sprite->pos1.y >= 0x60)
+ {
+ u8 i;
+ for (i = 0; i < 2; i++)
+ {
+ sub_81BF2B8(gUnknown_0203CF0C->frameImageTiles, gUnknown_0203CF0C->unkC[gUnknown_0203CF0C->unk10++], 0, 16, 0);
+ }
+ StartSpriteAnim(sprite, 0);
+ }
+ else
+ {
+ sprite->pos1.y++;
+ }
+}
diff --git a/src/gym_leader_rematch.c b/src/gym_leader_rematch.c
new file mode 100644
index 000000000..355ae5534
--- /dev/null
+++ b/src/gym_leader_rematch.c
@@ -0,0 +1,106 @@
+#include "global.h"
+#include "constants/flags.h"
+#include "random.h"
+#include "event_data.h"
+#include "battle_setup.h"
+#include "gym_leader_rematch.h"
+
+static void UpdateGymLeaderRematchFromArray(const u16 *data, size_t size, u32 maxRematch);
+static s32 GetRematchIndex(u32 trainerIdx);
+
+static const u16 GymLeaderRematches_AfterNewMauville[] = {
+ REMATCH_ROXANNE,
+ REMATCH_BRAWLY,
+ REMATCH_WATTSON,
+ REMATCH_FLANNERY,
+ REMATCH_NORMAN,
+ REMATCH_WINONA,
+ REMATCH_TATE_AND_LIZA,
+ REMATCH_JUAN
+};
+
+static const u16 GymLeaderRematches_BeforeNewMauville[] = {
+ REMATCH_ROXANNE,
+ REMATCH_BRAWLY,
+ // Wattson isn't available at this time
+ REMATCH_FLANNERY,
+ REMATCH_NORMAN,
+ REMATCH_WINONA,
+ REMATCH_TATE_AND_LIZA,
+ REMATCH_JUAN
+};
+
+void UpdateGymLeaderRematch(void)
+{
+ if (FlagGet(FLAG_SYS_GAME_CLEAR) && (Random() % 100) <= 30)
+ {
+ if (FlagGet(FLAG_WATTSON_REMATCH_AVAILABLE))
+ UpdateGymLeaderRematchFromArray(GymLeaderRematches_AfterNewMauville, ARRAY_COUNT(GymLeaderRematches_AfterNewMauville), 5);
+ else
+ UpdateGymLeaderRematchFromArray(GymLeaderRematches_BeforeNewMauville, ARRAY_COUNT(GymLeaderRematches_BeforeNewMauville), 1);
+ }
+}
+
+static void UpdateGymLeaderRematchFromArray(const u16 *data, size_t size, u32 maxRematch)
+{
+ s32 whichLeader = 0;
+ s32 lowestRematchIndex = 5;
+ u32 i;
+ s32 rematchIndex;
+ for (i = 0; i < size; i++)
+ {
+ if (!gSaveBlock1Ptr->trainerRematches[data[i]])
+ {
+ rematchIndex = GetRematchIndex(data[i]);
+ if (lowestRematchIndex > rematchIndex)
+ lowestRematchIndex = rematchIndex;
+ whichLeader++;
+ }
+ }
+ if (whichLeader != 0 && lowestRematchIndex <= maxRematch)
+ {
+ whichLeader = 0;
+ for (i = 0; i < size; i++)
+ {
+ if (!gSaveBlock1Ptr->trainerRematches[data[i]])
+ {
+ rematchIndex = GetRematchIndex(data[i]);
+ if (rematchIndex == lowestRematchIndex)
+ whichLeader++;
+ }
+ }
+ if (whichLeader != 0)
+ {
+ whichLeader = Random() % whichLeader;
+ for (i = 0; i < size; i++)
+ {
+ if (!gSaveBlock1Ptr->trainerRematches[data[i]])
+ {
+ rematchIndex = GetRematchIndex(data[i]);
+ if (rematchIndex == lowestRematchIndex)
+ {
+ if (whichLeader == 0)
+ {
+ gSaveBlock1Ptr->trainerRematches[data[i]] = lowestRematchIndex;
+ break;
+ }
+ whichLeader--;
+ }
+ }
+ }
+ }
+ }
+}
+
+static s32 GetRematchIndex(u32 trainerIdx)
+{
+ s32 i;
+ for (i = 0; i < 5; i++)
+ {
+ if (!HasTrainerBeenFought(gRematchTable[trainerIdx].trainerIds[i]))
+ {
+ return i;
+ }
+ }
+ return 5;
+}
diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c
index 6dda6ad9c..83df30d05 100644
--- a/src/hall_of_fame.c
+++ b/src/hall_of_fame.c
@@ -369,7 +369,7 @@ static const struct HallofFameMon sDummyFameMon =
0x3EA03EA, 0, 0, 0, {0}
};
-static const u8 sUnused2[6] = {2, 1, 3, 6, 4, 5};
+static const u8 sUnused2[] = {2, 1, 3, 6, 4, 5, 0, 0};
// code
static void VBlankCB_HallOfFame(void)
@@ -516,7 +516,7 @@ static void Task_Hof_InitTeamSaveData(u8 taskId)
}
else
{
- if (sub_81534D0(3) != TRUE)
+ if (Save_LoadGameData(3) != TRUE)
memset(gDecompressionBuffer, 0, 0x2000);
}
@@ -885,7 +885,7 @@ void CB2_DoHallOfFamePC(void)
static void Task_HofPC_CopySaveData(u8 taskId)
{
sub_81980F0(0, 0x1E, 0, 0xC, 0x226);
- if (sub_81534D0(3) != 1)
+ if (Save_LoadGameData(3) != 1)
{
gTasks[taskId].func = Task_HofPC_PrintDataIsCorrupted;
}
diff --git a/src/hof_pc.c b/src/hof_pc.c
index e772f04e8..44b929337 100644
--- a/src/hof_pc.c
+++ b/src/hof_pc.c
@@ -7,7 +7,6 @@
#include "script_menu.h"
#include "task.h"
-extern void (*gFieldCallback)(void);
extern void (*gUnknown_0300485C)(void);
extern void Overworld_PlaySpecialMapMusic(void);
@@ -25,7 +24,7 @@ void AccessHallOfFamePC(void)
void ReturnFromHallOfFamePC(void)
{
- SetMainCallback2(c2_exit_to_overworld_2_switch);
+ SetMainCallback2(CB2_ReturnToField);
gFieldCallback = ReshowPCMenuAfterHallOfFamePC;
}
diff --git a/src/international_string_util.c b/src/international_string_util.c
index 89b4a7a69..9de338c59 100644
--- a/src/international_string_util.c
+++ b/src/international_string_util.c
@@ -42,7 +42,7 @@ s32 GetMaxWidthInMenuTable(const struct MenuAction *str, s32 arg1)
return convert_pixel_width_to_tile_width(var);
}
-s32 sub_81DB3D8(const struct MenuAction *str, u8* arg1, s32 arg2)
+s32 sub_81DB3D8(const struct MenuAction *str, const u8* arg1, s32 arg2)
{
s32 i, var;
diff --git a/src/intro.c b/src/intro.c
new file mode 100644
index 000000000..f21ad348d
--- /dev/null
+++ b/src/intro.c
@@ -0,0 +1,3020 @@
+#include "global.h"
+#include "main.h"
+#include "palette.h"
+#include "scanline_effect.h"
+#include "task.h"
+#include "title_screen.h"
+#include "libgcnmultiboot.h"
+#include "malloc.h"
+#include "gpu_regs.h"
+#include "link.h"
+#include "multiboot_pokemon_colosseum.h"
+#include "load_save.h"
+#include "save.h"
+#include "new_game.h"
+#include "m4a.h"
+#include "random.h"
+#include "decompress.h"
+#include "constants/songs.h"
+#include "intro_credits_graphics.h"
+#include "trig.h"
+#include "intro.h"
+#include "graphics.h"
+#include "sound.h"
+#include "constants/species.h"
+#include "blend_palette.h"
+#include "title_screen.h"
+#include "constants/rgb.h"
+
+extern const struct CompressedSpriteSheet gBattleAnimPicTable[];
+extern const struct CompressedSpritePalette gBattleAnimPaletteTable[];
+extern const struct SpriteTemplate gUnknown_08596C10[];
+
+//ewram
+EWRAM_DATA u16 gUnknown_0203BCC8 = 0;
+EWRAM_DATA u16 gUnknown_0203BCCA = 0;
+EWRAM_DATA u16 gUnknown_0203BCCC = 0;
+
+//iwram
+u32 gIntroFrameCounter;
+struct GcmbStruct gMultibootProgramStruct;
+
+//.rodata
+static const u16 gIntro1DropsPal[] = INCBIN_U16("graphics/intro/intro1_drops.gbapal");
+static const u16 gIntro1GFLogoPal[] = INCBIN_U16("graphics/intro/intro1_gflogo.gbapal");
+static const u8 gIntroTiles[] = INCBIN_U8("graphics/intro/intro.4bpp.lz");
+static const u16 gIntro1BGPals[16][16] = INCBIN_U16("graphics/intro/intro1_bgpal.gbapal");
+static const u8 gIntro1BG0_Tilemap[] = INCBIN_U8("graphics/intro/intro1_bg0_map.bin.lz");
+static const u8 gIntro1BG1_Tilemap[] = INCBIN_U8("graphics/intro/intro1_bg1_map.bin.lz");
+static const u8 gIntro1BG2_Tilemap[] = INCBIN_U8("graphics/intro/intro1_bg2_map.bin.lz");
+static const u8 gIntro1BG3_Tilemap[] = INCBIN_U8("graphics/intro/intro1_bg3_map.bin.lz");
+static const u8 gIntro1BGLeavesGfx[] = INCBIN_U8("graphics/intro/introgfx.4bpp.lz");
+static const u16 gIntro3PokeballPal[] = INCBIN_U16("graphics/intro/intro3_pokeball.gbapal");
+static const u8 gIntro3Pokeball_Tilemap[] = INCBIN_U8("graphics/intro/intro3_pokeball_map.bin.lz");
+static const u8 gIntro3Pokeball_Gfx[] = INCBIN_U8("graphics/intro/intro3_pokeball.8bpp.lz");
+static const u16 gIntro3Streaks_Pal_Unused[] = INCBIN_U16("graphics/intro/intro3_streaks.gbapal");
+static const u8 gIntro3Streaks_Gfx_Unused[] = INCBIN_U8("graphics/intro/intro3_streaks.4bpp.lz");
+static const u8 gIntro3Streaks_Tilemap_Unused[] = INCBIN_U8("graphics/intro/intro3_streaks_map.bin.lz");
+static const u16 gIntro3Misc1Palette[] = INCBIN_U16("graphics/intro/intro3_misc1.gbapal");
+static const u16 gIntro3Misc2Palette_Unused[] = INCBIN_U16("graphics/intro/intro3_misc2.gbapal");
+static const u8 gIntro3MiscTiles[] = INCBIN_U8("graphics/intro/intro3_misc.4bpp.lz");
+static const u16 gIntro1FlygonPalette[] = INCBIN_U16("graphics/intro/intro1_flygon.gbapal");
+static const u8 gIntro1EonTiles_Unused[] = INCBIN_U8("graphics/intro/intro1_eon.4bpp.lz");
+static const u8 sUnknownBytes[] = {
+ 0x02, 0x03, 0x04, 0x05, 0x01, 0x01, 0x01, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x02, 0x0D,
+ 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x02, 0x0D, 0x0E, 0x0F,
+ 0x10, 0x11, 0x12, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x02, 0x0D, 0x0E, 0x0F, 0x10,
+ 0x11, 0x12, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x00
+};
+static const struct CompressedSpriteSheet gUnknown_085E4A74[] =
+{
+ {gIntro1SparkleGfx, 0x400, 1505},
+ {NULL},
+};
+static const struct SpritePalette gUnknown_085E4A84[] =
+{
+ {gIntro3LightningPal, 1505},
+ {NULL},
+};
+static const struct OamData gUnknown_085E4A94 =
+{
+ .y = 160,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 1,
+ .tileNum = 0,
+ .priority = 1,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+static const union AnimCmd gUnknown_085E4A9C[] =
+{
+ ANIMCMD_FRAME(0, 2),
+ ANIMCMD_FRAME(4, 2),
+ ANIMCMD_FRAME(8, 2),
+ ANIMCMD_FRAME(12, 2),
+ ANIMCMD_FRAME(16, 2),
+ ANIMCMD_JUMP(0),
+};
+static const union AnimCmd *const gUnknown_085E4AB4[] =
+{
+ gUnknown_085E4A9C,
+};
+static void sub_816D338(struct Sprite *sprite);
+static const struct SpriteTemplate gUnknown_085E4AB8 =
+{
+ .tileTag = 1505,
+ .paletteTag = 1505,
+ .oam = &gUnknown_085E4A94,
+ .anims = gUnknown_085E4AB4,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_816D338,
+};
+static const u8 gUnknown_085E4AD0[][2] =
+{
+ {0x7C, 0x28},
+ {0x66, 0x1E},
+ {0x4D, 0x1E},
+ {0x36, 0x0F},
+ {0x94, 0x09},
+ {0x3F, 0x1C},
+ {0x5D, 0x28},
+ {0x94, 0x20},
+ {0xAD, 0x29},
+ {0x5E, 0x14},
+ {0xD0, 0x26},
+ {0x00, 0x00},
+};
+static const struct CompressedSpriteSheet gUnknown_085E4AE8[] =
+{
+ {gIntro2VolbeatGfx, 0x400, 1500},
+ {gIntro2TorchicGfx, 0xC00, 1501},
+ {gIntro2ManectricGfx, 0x2000, 1502},
+ {NULL},
+};
+static const struct SpritePalette gUnknown_085E4B08[] =
+{
+ {gIntro2VolbeatPal, 1500},
+ {gIntro2TorchicPal, 1501},
+ {gIntro2ManectricPal, 1502},
+ {NULL},
+};
+static const struct OamData gUnknown_085E4B28 =
+{
+ .y = 160,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 2,
+ .tileNum = 0,
+ .priority = 1,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+static const union AnimCmd gUnknown_085E4B30[] =
+{
+ ANIMCMD_FRAME(0, 2),
+ ANIMCMD_FRAME(16, 2),
+ ANIMCMD_JUMP(0),
+};
+static const union AnimCmd *const gUnknown_085E4B3C[] =
+{
+ gUnknown_085E4B30,
+};
+static void sub_816D81C(struct Sprite *sprite);
+static const struct SpriteTemplate gUnknown_085E4B40 =
+{
+ .tileTag = 1500,
+ .paletteTag = 1500,
+ .oam = &gUnknown_085E4B28,
+ .anims = gUnknown_085E4B3C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_816D81C,
+};
+static const struct OamData gUnknown_085E4B58 =
+{
+ .y = 160,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 2,
+ .tileNum = 0,
+ .priority = 1,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+static const union AnimCmd gUnknown_085E4B60[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_FRAME(16, 5),
+ ANIMCMD_FRAME(32, 5),
+ ANIMCMD_FRAME(16, 5),
+ ANIMCMD_JUMP(0),
+};
+static const union AnimCmd gUnknown_085E4B74[] =
+{
+ ANIMCMD_FRAME(0, 3),
+ ANIMCMD_FRAME(16, 3),
+ ANIMCMD_FRAME(32, 3),
+ ANIMCMD_FRAME(16, 3),
+ ANIMCMD_JUMP(0),
+};
+static const union AnimCmd gUnknown_085E4B88[] =
+{
+ ANIMCMD_FRAME(48, 4),
+ ANIMCMD_FRAME(64, 6),
+ ANIMCMD_FRAME(80, 0),
+ ANIMCMD_END,
+};
+static const union AnimCmd *const gUnknown_085E4B98[] =
+{
+ gUnknown_085E4B60,
+ gUnknown_085E4B74,
+ gUnknown_085E4B88,
+};
+static void sub_816D9C0(struct Sprite *sprite);
+static const struct SpriteTemplate gUnknown_085E4BA4 =
+{
+ .tileTag = 1501,
+ .paletteTag = 1501,
+ .oam = &gUnknown_085E4B58,
+ .anims = gUnknown_085E4B98,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_816D9C0,
+};
+static const struct OamData gUnknown_085E4BBC =
+{
+ .y = 160,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 3,
+ .tileNum = 0,
+ .priority = 1,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+static const union AnimCmd gUnknown_085E4BC4[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(64, 4),
+ ANIMCMD_FRAME(128, 4),
+ ANIMCMD_FRAME(192, 4),
+ ANIMCMD_JUMP(0),
+};
+static const union AnimCmd *const gUnknown_085E4BD8[] =
+{
+ gUnknown_085E4BC4,
+};
+static void sub_816DAE8(struct Sprite *sprite);
+static const struct SpriteTemplate gUnknown_085E4BDC =
+{
+ .tileTag = 1502,
+ .paletteTag = 1502,
+ .oam = &gUnknown_085E4BBC,
+ .anims = gUnknown_085E4BD8,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_816DAE8,
+};
+static const struct CompressedSpriteSheet gUnknown_085E4BF4[] =
+{
+ {gIntro3LightningGfx, 0xC00, 1503},
+ {NULL},
+};
+static const struct SpritePalette gUnknown_085E4C04[] =
+{
+ {gIntro3LightningPal, 1503},
+ {NULL},
+};
+static const struct OamData gUnknown_085E4C14 =
+{
+ .y = 160,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 2,
+ .tileNum = 0,
+ .priority = 0,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+static const union AnimCmd gUnknown_085E4C1C[] =
+{
+ ANIMCMD_FRAME(0, 2),
+ ANIMCMD_FRAME(48, 2),
+ ANIMCMD_END,
+};
+static const union AnimCmd gUnknown_085E4C28[] =
+{
+ ANIMCMD_FRAME(16, 2),
+ ANIMCMD_FRAME(64, 2),
+ ANIMCMD_END,
+};
+static const union AnimCmd gUnknown_085E4C34[] =
+{
+ ANIMCMD_FRAME(32, 2),
+ ANIMCMD_FRAME(80, 2),
+ ANIMCMD_END,
+};
+static const union AnimCmd *const gUnknown_085E4C40[] =
+{
+ gUnknown_085E4C1C,
+ gUnknown_085E4C28,
+ gUnknown_085E4C34,
+};
+static void sub_816EC6C(struct Sprite *sprite);
+static const struct SpriteTemplate gUnknown_085E4C4C =
+{
+ .tileTag = 1503,
+ .paletteTag = 1503,
+ .oam = &gUnknown_085E4C14,
+ .anims = gUnknown_085E4C40,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_816EC6C,
+};
+static const s16 gUnknown_085E4C64[][3] =
+{
+ {0x68, 0x00, 0x0C0},
+ {0x8E, 0x03, 0x280},
+ {0x53, 0x01, 0x180},
+ {0x9B, 0x00, 0x080},
+ {0x38, 0x02, 0x200},
+ {0xAE, 0x01, 0x100},
+};
+static const struct CompressedSpriteSheet gUnknown_085E4C88[] =
+{
+ {gIntro2BubblesGfx, 0x600, 1504},
+ {NULL},
+};
+static const struct SpritePalette gUnknown_085E4C98[] =
+{
+ {gIntro2BubblesPal, 1504},
+ {NULL},
+};
+static const s16 gUnknown_085E4CA8[][3] =
+{
+ {0x42, 0x40, 0x1},
+ {0x60, 0x60, 0x8},
+ {0x80, 0x40, 0x1},
+ {0x90, 0x30, 0x8},
+ {0xA0, 0x48, 0x1},
+ {0xB0, 0x60, 0x8},
+ {0x60, 0x60, 0x4},
+ {0x70, 0x68, 0x8},
+ {0x80, 0x60, 0x4},
+ {0x58, 0x20, 0x4},
+ {0x68, 0x18, 0x8},
+ {0x78, 0x20, 0x4},
+};
+static const struct OamData gUnknown_085E4CF0 =
+{
+ .y = 160,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 2,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 2,
+ .tileNum = 0,
+ .priority = 0,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+static const union AnimCmd gUnknown_085E4CF8[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(8, 4),
+ ANIMCMD_FRAME(16, 4),
+ ANIMCMD_FRAME(24, 4),
+ ANIMCMD_FRAME(32, 4),
+ ANIMCMD_END,
+};
+static const union AnimCmd *const gUnknown_085E4D10[] =
+{
+ gUnknown_085E4CF8,
+};
+static void sub_816E7B4(struct Sprite *sprite);
+static const struct SpriteTemplate gUnknown_085E4D14 =
+{
+ .tileTag = 1504,
+ .paletteTag = 1504,
+ .oam = &gUnknown_085E4CF0,
+ .anims = gUnknown_085E4D10,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_816E7B4,
+};
+static const struct OamData gUnknown_085E4D2C =
+{
+ .y = 160,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 2,
+ .tileNum = 0,
+ .priority = 0,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+static const union AnimCmd gUnknown_085E4D34[] =
+{
+ ANIMCMD_FRAME(16, 8),
+ ANIMCMD_END,
+};
+static const union AnimCmd gUnknown_085E4D3C[] =
+{
+ ANIMCMD_FRAME(24, 8),
+ ANIMCMD_END,
+};
+static const union AnimCmd gUnknown_085E4D44[] =
+{
+ ANIMCMD_FRAME(0, 8),
+ ANIMCMD_END,
+};
+static const union AnimCmd gUnknown_085E4D4C[] =
+{
+ ANIMCMD_FRAME(48, 8),
+ ANIMCMD_END,
+};
+static const union AnimCmd *const gUnknown_085E4D54[] =
+{
+ gUnknown_085E4D34,
+ gUnknown_085E4D3C,
+ gUnknown_085E4D44,
+ gUnknown_085E4D4C,
+};
+static void sub_816F454(struct Sprite *sprite);
+static const struct SpriteTemplate gUnknown_085E4D64 =
+{
+ .tileTag = 2000,
+ .paletteTag = 2000,
+ .oam = &gUnknown_085E4D2C,
+ .anims = gUnknown_085E4D54,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_816F454,
+};
+static const union AnimCmd gUnknown_085E4D7C[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_FRAME(64, 4),
+ ANIMCMD_FRAME(128, 4),
+ ANIMCMD_FRAME(192, 4),
+ ANIMCMD_JUMP(0),
+};
+static const union AnimCmd gUnknown_085E4D90[] =
+{
+ ANIMCMD_FRAME(0, 8),
+ ANIMCMD_FRAME(64, 8),
+ ANIMCMD_FRAME(128, 8),
+ ANIMCMD_FRAME(192, 8),
+ ANIMCMD_JUMP(0),
+};
+static const union AnimCmd gUnknown_085E4DA4[] =
+{
+ ANIMCMD_FRAME(256, 4),
+ ANIMCMD_FRAME(0x140, 4),
+ ANIMCMD_FRAME(0x180, 4),
+ ANIMCMD_END,
+};
+static const union AnimCmd gUnknown_085E4DB4[] =
+{
+ ANIMCMD_FRAME(0x180, 16),
+ ANIMCMD_FRAME(0x140, 16),
+ ANIMCMD_FRAME(256, 16),
+ ANIMCMD_END,
+};
+static const union AnimCmd *const gUnknown_085E4DC4[] =
+{
+ gUnknown_085E4D7C,
+ gUnknown_085E4D90,
+ gUnknown_085E4DA4,
+ gUnknown_085E4DB4,
+};
+static const struct OamData gUnknown_085E4DD4 =
+{
+ .y = 160,
+ .affineMode = 3,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 1,
+ .tileNum = 0,
+ .priority = 0,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+static const struct OamData gUnknown_085E4DDC =
+{
+ .y = 160,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 0,
+ .tileNum = 0,
+ .priority = 0,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+static const struct OamData gUnknown_085E4DE4 =
+{
+ .y = 160,
+ .affineMode = 3,
+ .objMode = 1,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 2,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 3,
+ .tileNum = 0,
+ .priority = 0,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+static const union AnimCmd gUnknown_085E4DEC[] =
+{
+ ANIMCMD_FRAME(80, 8),
+ ANIMCMD_END,
+};
+static const union AnimCmd gUnknown_085E4DF4[] =
+{
+ ANIMCMD_FRAME(84, 8),
+ ANIMCMD_END,
+};
+static const union AnimCmd gUnknown_085E4DFC[] =
+{
+ ANIMCMD_FRAME(88, 8),
+ ANIMCMD_END,
+};
+static const union AnimCmd gUnknown_085E4E04[] =
+{
+ ANIMCMD_FRAME(92, 8),
+ ANIMCMD_END,
+};
+static const union AnimCmd gUnknown_085E4E0C[] =
+{
+ ANIMCMD_FRAME(96, 8),
+ ANIMCMD_END,
+};
+static const union AnimCmd gUnknown_085E4E14[] =
+{
+ ANIMCMD_FRAME(100, 8),
+ ANIMCMD_END,
+};
+static const union AnimCmd gUnknown_085E4E1C[] =
+{
+ ANIMCMD_FRAME(104, 8),
+ ANIMCMD_END,
+};
+static const union AnimCmd gUnknown_085E4E24[] =
+{
+ ANIMCMD_FRAME(112, 8),
+ ANIMCMD_END,
+};
+static const union AnimCmd gUnknown_085E4E2C[] =
+{
+ ANIMCMD_FRAME(113, 8),
+ ANIMCMD_END,
+};
+static const union AnimCmd gUnknown_085E4E34[] =
+{
+ ANIMCMD_FRAME(114, 8),
+ ANIMCMD_END,
+};
+static const union AnimCmd gUnknown_085E4E3C[] =
+{
+ ANIMCMD_FRAME(115, 8),
+ ANIMCMD_END,
+};
+static const union AnimCmd gUnknown_085E4E44[] =
+{
+ ANIMCMD_FRAME(116, 8),
+ ANIMCMD_END,
+};
+static const union AnimCmd gUnknown_085E4E4C[] =
+{
+ ANIMCMD_FRAME(117, 8),
+ ANIMCMD_END,
+};
+static const union AnimCmd gUnknown_085E4E54[] =
+{
+ ANIMCMD_FRAME(128, 8),
+ ANIMCMD_END,
+};
+static const union AnimCmd *const gUnknown_085E4E5C[] =
+{
+ gUnknown_085E4DEC,
+ gUnknown_085E4DF4,
+ gUnknown_085E4DFC,
+ gUnknown_085E4E04,
+ gUnknown_085E4E0C,
+ gUnknown_085E4E14,
+ gUnknown_085E4E1C,
+};
+static const union AnimCmd *const gUnknown_085E4E78[] =
+{
+ gUnknown_085E4E24,
+ gUnknown_085E4E2C,
+ gUnknown_085E4E34,
+ gUnknown_085E4E3C,
+ gUnknown_085E4E44,
+ gUnknown_085E4E4C,
+};
+static const union AnimCmd *const gUnknown_085E4E90[] =
+{
+ gUnknown_085E4E54,
+};
+static const s16 gUnknown_085E4E94[][2] =
+{
+ {0, -72},
+ {1, -56},
+ {2, -40},
+ {3, -24},
+ {4, 8},
+ {5, 24},
+ {3, 40},
+ {1, 56},
+ {6, 72},
+ {0, -28},
+ {1, -20},
+ {2, -12},
+ {3, -4},
+ {2, 4},
+ {4, 12},
+ {5, 20},
+ {3, 28},
+};
+static const union AffineAnimCmd gUnknown_085E4ED8[] =
+{
+ AFFINEANIMCMD_FRAME(128, 128, 0, 0),
+ AFFINEANIMCMD_END,
+};
+static const union AffineAnimCmd gUnknown_085E4EE8[] =
+{
+ AFFINEANIMCMD_FRAME(128, 128, 0, 0),
+ AFFINEANIMCMD_FRAME(16, 16, 0, 16),
+ AFFINEANIMCMD_FRAME(-16, -16, 0, 8),
+ AFFINEANIMCMD_END,
+};
+static const union AffineAnimCmd gUnknown_085E4F08[] =
+{
+ AFFINEANIMCMD_FRAME(256, 256, 0, 0),
+ AFFINEANIMCMD_FRAME(8, 8, 0, 48),
+ AFFINEANIMCMD_END,
+};
+static const union AffineAnimCmd gUnknown_085E4F20[] =
+{
+ AFFINEANIMCMD_FRAME(256, 256, 0, 0),
+ AFFINEANIMCMD_FRAME(2, 2, 0, 48),
+ AFFINEANIMCMD_END,
+};
+static const union AffineAnimCmd *const gUnknown_085E4F38[] =
+{
+ gUnknown_085E4ED8,
+ gUnknown_085E4EE8,
+ gUnknown_085E4F08,
+ gUnknown_085E4F20,
+};
+static const u16 gUnknown_085E4F48[] =
+{
+ 0x100, 0xC0, 0x80, 0x40, 0x00, 0x40, 0x80, 0xC0, 0x100
+};
+static void sub_816FB38(struct Sprite *sprite);
+static const struct SpriteTemplate gUnknown_085E4F5C =
+{
+ .tileTag = 2000,
+ .paletteTag = 2001,
+ .oam = &gUnknown_085E4DD4,
+ .anims = gUnknown_085E4E5C,
+ .images = NULL,
+ .affineAnims = gUnknown_085E4F38,
+ .callback = sub_816FB38,
+};
+static const struct SpriteTemplate gUnknown_085E4F74 =
+{
+ .tileTag = 2000,
+ .paletteTag = 2001,
+ .oam = &gUnknown_085E4DDC,
+ .anims = gUnknown_085E4E78,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_816FB38,
+};
+static void sub_816FD44(struct Sprite *sprite);
+static const struct SpriteTemplate gUnknown_085E4F8C =
+{
+ .tileTag = 2000,
+ .paletteTag = 2001,
+ .oam = &gUnknown_085E4DE4,
+ .anims = gUnknown_085E4E90,
+ .images = NULL,
+ .affineAnims = gUnknown_085E4F38,
+ .callback = sub_816FD44,
+};
+static const u8 gUnknown_085E4FA4[] =
+{
+ 0x00, 0x17, 0x17, 0x31, 0x3E, 0x24, 0x24, 0x0A, 0x0A
+};
+static const struct OamData gUnknown_085E4FB0 =
+{
+ .y = 160,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 1,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 3,
+ .tileNum = 0,
+ .priority = 0,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+static const union AnimCmd gUnknown_085E4FB8[] =
+{
+ ANIMCMD_FRAME(0, 10),
+ ANIMCMD_JUMP(0),
+};
+static const union AnimCmd *const gUnknown_085E4FC0[] =
+{
+ gUnknown_085E4FB8,
+};
+static void sub_816FEDC(struct Sprite *sprite);
+static const struct SpriteTemplate gUnknown_085E4FC4 =
+{
+ .tileTag = 2002,
+ .paletteTag = 2002,
+ .oam = &gUnknown_085E4FB0,
+ .anims = gUnknown_085E4FC0,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_816FEDC,
+};
+static const struct CompressedSpriteSheet gUnknown_085E4FDC[] =
+{
+ {gIntroTiles, 0x1400, 2000},
+ {NULL},
+};
+static const struct CompressedSpriteSheet gUnknown_085E4FEC[] =
+{
+ {gIntro1FlygonGfx, 0x400, 2002},
+ {NULL},
+};
+static const struct SpritePalette gUnknown_085E4FFC[] =
+{
+ {gIntro1DropsPal, 2000},
+ {gIntro1GFLogoPal, 2001},
+ {gIntro1FlygonPalette, 2002},
+ {NULL},
+};
+static const struct OamData gUnknown_085E501C =
+{
+ .y = 160,
+ .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 union AnimCmd gUnknown_085E5024[] =
+{
+ ANIMCMD_FRAME(16, 8),
+ ANIMCMD_END,
+};
+static const union AnimCmd *const gUnknown_085E502C[] =
+{
+ gUnknown_085E5024,
+};
+static void sub_8170040(struct Sprite *sprite);
+static const struct SpriteTemplate gUnknown_085E5030 =
+{
+ .tileTag = 2003,
+ .paletteTag = 2003,
+ .oam = &gUnknown_085E501C,
+ .anims = gUnknown_085E502C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_8170040,
+};
+static const struct CompressedSpriteSheet gUnknown_085E5048[] =
+{
+ {gIntro3MiscTiles, 0xA00, 2003},
+ {NULL},
+};
+static const struct SpritePalette gUnknown_085E5058[] =
+{
+ {gIntro3Misc1Palette, 2003},
+ {NULL},
+};
+
+// this file's functions
+static void MainCB2_EndIntro(void);
+static void Task_IntroLoadPart1Graphics(u8);
+static u8 CreateWaterDrop(s16, s16, u16, u16, u16, u8);
+static void Task_IntroFadeIn(u8);
+static void intro_reset_and_hide_bgs(void);
+static void Task_IntroWaterDrops(u8);
+static void Task_IntroWaterDrops_1(u8);
+static void Task_IntroWaterDrops_2(u8);
+static void Task_IntroWaterDrops_3(u8);
+static void Task_IntroScrollDownAndShowFlygon(u8);
+static void Task_IntroWaitToSetupPart2(u8);
+static void Task_IntroLoadPart2Graphics(u8);
+static void Task_IntroStartBikeRide(u8);
+static void Task_IntroHandleBikeAndFlygonMovement(u8);
+static void Task_IntroWaitToSetupPart3(u8);
+static void Task_IntroLoadPart3Graphics(u8);
+static void Task_IntroSpinAndZoomPokeball(u8);
+static void Task_IntroWaitToSetupPart3LegendsFight(u8);
+static void Task_IntroLoadPart1Graphics3(u8);
+static void Task_IntroLoadPart1Graphics4(u8);
+static void Task_IntroLoadPart1Graphics5(u8);
+static void Task_IntroLoadPart1Graphics6(u8);
+static void Task_IntroLoadPart1Graphics7(u8);
+static void Task_IntroLoadPart1Graphics8(u8);
+static void Task_IntroLoadPart1Graphics9(u8);
+static void Task_IntroFadeIn0(u8);
+static void Task_IntroFadeIn1(u8);
+static void Task_IntroFadeIn2(u8);
+static void Task_IntroFadeIn3(u8);
+static void Task_IntroFadeIn4(u8);
+static void Task_IntroFadeIn5(u8);
+static void Task_IntroFadeIn6(u8);
+static void Task_IntroFadeIn7(u8);
+static void Task_IntroFadeIn8(u8);
+static void Task_IntroFadeIn9(u8);
+static void sub_816E190(u8);
+static void sub_816E1F8(struct Sprite *);
+static void sub_816E6D4(u8);
+static void sub_816E74C(void);
+static void sub_816EEA8(u8);
+static void sub_816F46C(struct Sprite *);
+static void sub_816F5B4(struct Sprite *);
+static void sub_816F660(struct Sprite *);
+static void SpriteCB_WaterDropFall(struct Sprite *);
+static void sub_816F318(struct Sprite *);
+static void sub_816F9D4(struct Sprite *);
+static void sub_816FAB0(struct Sprite *);
+static u8 sub_816FDB8(s16, s16, s16);
+
+static void VBlankCB_Intro(void)
+{
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+ ScanlineEffect_InitHBlankDmaTransfer();
+}
+
+static void MainCB2_Intro(void)
+{
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+ if (gMain.newKeys && !gPaletteFade.active)
+ SetMainCallback2(MainCB2_EndIntro);
+ else if (gIntroFrameCounter != -1)
+ gIntroFrameCounter++;
+}
+
+static void MainCB2_EndIntro(void)
+{
+ if (!UpdatePaletteFade())
+ SetMainCallback2(CB2_InitTitleScreen);
+}
+
+static void LoadCopyrightGraphics(u16 tilesetAddress, u16 tilemapAddress, u16 paletteAddress)
+{
+ LZ77UnCompVram(gIntroCopyright_Gfx, (void *)(VRAM + tilesetAddress));
+ LZ77UnCompVram(gIntroCopyright_Tilemap, (void *)(VRAM + tilemapAddress));
+ LoadPalette(gIntroCopyright_Pal, paletteAddress, 0x20);
+}
+
+static void SerialCB_CopyrightScreen(void)
+{
+ GameCubeMultiBoot_HandleSerialInterrupt(&gMultibootProgramStruct);
+}
+
+static u8 SetUpCopyrightScreen(void)
+{
+ u16 ime;
+
+ switch (gMain.state)
+ {
+ case 0:
+ SetVBlankCallback(NULL);
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ SetGpuReg(REG_OFFSET_BLDY, 0);
+ *(u16 *)PLTT = 0x7FFF;
+ SetGpuReg(REG_OFFSET_DISPCNT, 0);
+ SetGpuReg(REG_OFFSET_BG0HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG0VOFS, 0);
+ CpuFill32(0, (void *)VRAM, VRAM_SIZE);
+ CpuFill32(0, (void *)OAM, OAM_SIZE);
+ CpuFill16(0, (void *)(PLTT + 2), PLTT_SIZE - 2);
+ ResetPaletteFade();
+ LoadCopyrightGraphics(0, 0x3800, 0);
+ ScanlineEffect_Stop();
+ ResetTasks();
+ ResetSpriteData();
+ FreeAllSpritePalettes();
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_WHITEALPHA);
+ SetGpuReg(REG_OFFSET_BG0CNT, BGCNT_PRIORITY(0)
+ | BGCNT_CHARBASE(0)
+ | BGCNT_SCREENBASE(7)
+ | BGCNT_16COLOR
+ | BGCNT_TXT256x256);
+ EnableInterrupts(INTR_FLAG_VBLANK);
+ SetVBlankCallback(VBlankCB_Intro);
+ REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG0_ON;
+ SetSerialCallback(SerialCB_CopyrightScreen);
+ GameCubeMultiBoot_Init(&gMultibootProgramStruct);
+ default:
+ UpdatePaletteFade();
+ gMain.state++;
+ GameCubeMultiBoot_Main(&gMultibootProgramStruct);
+ break;
+ case 140:
+ GameCubeMultiBoot_Main(&gMultibootProgramStruct);
+ if (gMultibootProgramStruct.gcmb_field_2 != 1)
+ {
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_BLACK);
+ gMain.state++;
+ }
+ break;
+ case 141:
+ if (UpdatePaletteFade())
+ break;
+ CreateTask(Task_IntroLoadPart1Graphics, 0);
+ SetMainCallback2(MainCB2_Intro);
+ if (gMultibootProgramStruct.gcmb_field_2 != 0)
+ {
+ if (gMultibootProgramStruct.gcmb_field_2 == 2)
+ {
+ // check the multiboot ROM header game code to see if we already did this
+ if (*(u32 *)(EWRAM_START + 0xAC) == 0x65366347) // "Gc6e" in ASCII
+ {
+ CpuCopy16(&gMultiBootProgram_PokemonColosseum_Start, (void *)EWRAM_START, sizeof(gMultiBootProgram_PokemonColosseum_Start));
+ *(u32 *)(EWRAM_START + 0xAC) = 0x65366347;
+ }
+ GameCubeMultiBoot_ExecuteProgram(&gMultibootProgramStruct);
+ }
+ }
+ else
+ {
+ GameCubeMultiBoot_Quit();
+ SetSerialCallback(SerialCB);
+ }
+ return 0;
+ }
+
+ return 1;
+}
+
+void CB2_InitCopyrightScreenAfterBootup(void)
+{
+ if (!SetUpCopyrightScreen())
+ {
+ SetSaveBlocksPointers(sub_815355C());
+ sub_808447C();
+ Save_ResetSaveCounters();
+ Save_LoadGameData(SAVE_NORMAL);
+ if (gSaveFileStatus == 0 || gSaveFileStatus == 2)
+ Sav2_ClearSetDefault();
+ SetPokemonCryStereo(gSaveBlock2Ptr->optionsSound);
+ InitHeap(gHeap, HEAP_SIZE);
+ }
+}
+
+void CB2_InitCopyrightScreenAfterTitleScreen(void)
+{
+ SetUpCopyrightScreen();
+}
+
+static void Task_IntroLoadPart1Graphics(u8 taskId)
+{
+ SetVBlankCallback(NULL);
+ gUnknown_0203BCC8 = Random() & 1;
+ intro_reset_and_hide_bgs();
+ SetGpuReg(REG_OFFSET_BG3VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG2VOFS, 0x50);
+ SetGpuReg(REG_OFFSET_BG1VOFS, 0x18);
+ SetGpuReg(REG_OFFSET_BG0VOFS, 0x28);
+ LZ77UnCompVram(gIntro1BGLeavesGfx, (void *)VRAM);
+ LZ77UnCompVram(gIntro1BG0_Tilemap, (void *)(VRAM + 0x8000));
+ DmaClear16(3, VRAM + 0x8800, 0x800);
+ LZ77UnCompVram(gIntro1BG1_Tilemap, (void *)(VRAM + 0x9000));
+ DmaClear16(3, VRAM + 0x9800, 0x800);
+ LZ77UnCompVram(gIntro1BG2_Tilemap, (void *)(VRAM + 0xA000));
+ DmaClear16(3, VRAM + 0xA800, 0x800);
+ LZ77UnCompVram(gIntro1BG3_Tilemap, (void *)(VRAM + 0xB000));
+ DmaClear16(3, VRAM + 0xB800, 0x800);
+ LoadPalette(gIntro1BGPals, 0, sizeof(gIntro1BGPals));
+ SetGpuReg(REG_OFFSET_BG3CNT, BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(22) | BGCNT_16COLOR | BGCNT_TXT256x512);
+ SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(20) | BGCNT_16COLOR | BGCNT_TXT256x512);
+ SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(1) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(18) | BGCNT_16COLOR | BGCNT_TXT256x512);
+ SetGpuReg(REG_OFFSET_BG0CNT, BGCNT_PRIORITY(0) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(16) | BGCNT_16COLOR | BGCNT_TXT256x512);
+ LoadCompressedObjectPic(gUnknown_085E4FDC);
+ LoadCompressedObjectPic(gUnknown_085E4FEC);
+ LoadSpritePalettes(gUnknown_085E4FFC);
+ LoadCompressedObjectPic(gUnknown_085E4A74);
+ LoadSpritePalettes(gUnknown_085E4A84);
+ CpuCopy16(gPlttBufferUnfaded + 0x100, gPlttBufferUnfaded + 0x1F0, 0x20);
+ CpuCopy16(gPlttBufferUnfaded + 0x100, gPlttBufferUnfaded + 0x1E1, 0x1E);
+ CpuCopy16(gPlttBufferUnfaded + 0x100, gPlttBufferUnfaded + 0x1D2, 0x1C);
+ CpuCopy16(gPlttBufferUnfaded + 0x100, gPlttBufferUnfaded + 0x1C3, 0x1A);
+ CpuCopy16(gPlttBufferUnfaded + 0x100, gPlttBufferUnfaded + 0x1B4, 0x18);
+ CpuCopy16(gPlttBufferUnfaded + 0x100, gPlttBufferUnfaded + 0x1A5, 0x16);
+ CpuCopy16(gPlttBufferUnfaded + 0x100, gPlttBufferUnfaded + 0x196, 0x14);
+ sub_816FDB8(0x78, 0x50, 0);
+ gTasks[taskId].data[0] = CreateWaterDrop(236, -14, 0x200, 1, 0x78, FALSE);
+ gTasks[taskId].func = Task_IntroFadeIn;
+}
+
+static void Task_IntroFadeIn(u8 taskId)
+{
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_BLACK);
+ SetVBlankCallback(VBlankCB_Intro);
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_ON);
+ gTasks[taskId].func = Task_IntroWaterDrops;
+ gIntroFrameCounter = 0;
+ m4aSongNumStart(MUS_DEMO1);
+ ResetSerial();
+}
+
+static void Task_IntroWaterDrops(u8 taskId)
+{
+ //start moving rock
+ if (gIntroFrameCounter == 76)
+ gSprites[gTasks[taskId].data[0]].data[0] = 1;
+
+ if (gIntroFrameCounter == 128)
+ CreateTask(Task_IntroWaterDrops_1, 0);
+
+ //drop rock
+ if (gIntroFrameCounter == 251)
+ gSprites[gTasks[taskId].data[0]].data[0] = 2;
+
+ if (gIntroFrameCounter == 256)
+ CreateTask(Task_IntroWaterDrops_2, 0);
+
+ if (gIntroFrameCounter == 368)
+ CreateWaterDrop(48, 0, 0x400, 5, 0x70, TRUE);
+
+ if (gIntroFrameCounter == 384)
+ CreateWaterDrop(200, 60, 0x400, 9, 0x80, TRUE);
+
+ if (gIntroFrameCounter == 560)
+ CreateTask(Task_IntroWaterDrops_3, 0);
+
+ if (gIntroFrameCounter > 560)
+ {
+ gTasks[taskId].data[1] = 0x50;
+ gTasks[taskId].data[2] = 0;
+ gTasks[taskId].data[3] = 0x18;
+ gTasks[taskId].data[4] = 0;
+ gTasks[taskId].data[5] = 0x28;
+ gTasks[taskId].data[6] = 0;
+ gTasks[taskId].func = Task_IntroScrollDownAndShowFlygon;
+ }
+}
+
+static void Task_IntroWaterDrops_3(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+ if (++data[2] & 1)
+ data[3]++;
+
+ switch (data[0])
+ {
+ case 0:
+ CreateSprite(&gUnknown_085E4AB8, gUnknown_085E4AD0[data[4]][0], gUnknown_085E4AD0[data[4]][1] + data[3], 0);
+ data[0]++;
+ data[1] = 0xC;
+ data[4]++;
+ break;
+ case 1:
+ if (!--data[1])
+ data[0] = 0;
+ break;
+ }
+
+ if (data[3] > 0x3C)
+ DestroyTask(taskId);
+}
+
+static void sub_816D338(struct Sprite *sprite)
+{
+ if (++sprite->data[0] == 0xC)
+ DestroySprite(sprite);
+}
+
+static void Task_IntroScrollDownAndShowFlygon(u8 taskId)
+{
+ if (gIntroFrameCounter < 904)
+ {
+ s32 r2;
+
+ //slide backgrounds downward
+ r2 = (gTasks[taskId].data[1] << 16) + (u16)gTasks[taskId].data[2];
+ r2 -= 0x6000;
+ gTasks[taskId].data[1] = r2 >> 16;
+ gTasks[taskId].data[2] = r2;
+ SetGpuReg(REG_OFFSET_BG2VOFS, gTasks[taskId].data[1]);
+ r2 = (gTasks[taskId].data[3] << 16) + (u16)gTasks[taskId].data[4];
+ r2 -= 0x8000;
+ gTasks[taskId].data[3] = r2 >> 16;
+ gTasks[taskId].data[4] = r2;
+ SetGpuReg(REG_OFFSET_BG1VOFS, gTasks[taskId].data[3]);
+ r2 = (gTasks[taskId].data[5] << 16) + (u16)gTasks[taskId].data[6];
+ r2 -= 0xC000;
+ gTasks[taskId].data[5] = r2 >> 16;
+ gTasks[taskId].data[6] = r2;
+ SetGpuReg(REG_OFFSET_BG0VOFS, gTasks[taskId].data[5]);
+
+ //show Flygon sprite
+ if (gIntroFrameCounter == 832)
+ {
+ u8 spriteId = CreateSprite(&gUnknown_085E4FC4, 120, 160, 10);
+ gSprites[spriteId].invisible = TRUE;
+ }
+ }
+ else
+ {
+ //fade to white
+ if (gIntroFrameCounter > 1007)
+ {
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_WHITEALPHA);
+ gTasks[taskId].func = Task_IntroWaitToSetupPart2;
+ }
+ }
+}
+
+static void Task_IntroWaitToSetupPart2(u8 taskId)
+{
+ if (gIntroFrameCounter > 1026)
+ gTasks[taskId].func = Task_IntroLoadPart2Graphics;
+}
+
+static void Task_IntroLoadPart2Graphics(u8 taskId)
+{
+ intro_reset_and_hide_bgs();
+ SetVBlankCallback(NULL);
+ ResetSpriteData();
+ FreeAllSpritePalettes();
+ gUnknown_0203BD24 = 0;
+ gUnknown_0203BD26 = 0;
+ gUnknown_0203BCCC = 0;
+ load_intro_part2_graphics(1);
+ gTasks[taskId].func = Task_IntroStartBikeRide;
+}
+
+static void Task_IntroStartBikeRide(u8 taskId)
+{
+ u8 spriteId;
+
+ if (gUnknown_0203BCC8 == 0)
+ LoadCompressedObjectPic(gIntro2BrendanSpriteSheet);
+ else
+ LoadCompressedObjectPic(gIntro2MaySpriteSheet);
+
+ LoadCompressedObjectPic(gIntro2BicycleSpriteSheet);
+ LoadCompressedObjectPic(gIntro2FlygonSpriteSheet);
+
+ for (spriteId = 0; spriteId < 3; spriteId++)
+ {
+ LoadCompressedObjectPic(&gUnknown_085E4AE8[spriteId]);
+ }
+
+ LoadSpritePalettes(gUnknown_085F530C);
+ LoadSpritePalettes(gUnknown_085E4B08);
+ CreateSprite(&gUnknown_085E4BDC, 0x110, 0x80, 0);
+ CreateSprite(&gUnknown_085E4BA4, 0x120, 0x6E, 1);
+
+ if (gUnknown_0203BCC8 == 0)
+ spriteId = intro_create_brendan_sprite(0x110, 100);
+ else
+ spriteId = intro_create_may_sprite(0x110, 100);
+
+ gSprites[spriteId].callback = sub_816F9D4;
+ gSprites[spriteId].anims = gUnknown_085E4DC4;
+ gTasks[taskId].data[1] = spriteId;
+ CreateSprite(&gUnknown_085E4B40, 0x110, 0x50, 0x4);
+ spriteId = intro_create_flygon_sprite(-0x40, 0x3C);
+ gSprites[spriteId].callback = sub_816FAB0;
+ gTasks[taskId].data[2] = spriteId;
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 16, 0, RGB_WHITEALPHA);
+ SetVBlankCallback(VBlankCB_Intro);
+ gTasks[taskId].data[0] = sub_817B3DC(1, 0x4000, 0x400, 0x10);
+ sub_817B150(1);
+ gTasks[taskId].func = Task_IntroHandleBikeAndFlygonMovement;
+}
+
+static void Task_IntroHandleBikeAndFlygonMovement(u8 taskId)
+{
+ s16 a;
+ u16 sine;
+
+ if (gIntroFrameCounter == 1856)
+ {
+ gUnknown_0203BD28 = 2;
+ DestroyTask(gTasks[taskId].data[0]);
+ }
+ if (gIntroFrameCounter > 1946)
+ {
+ BeginNormalPaletteFade(0xFFFFFFFF, 8, 0, 16, RGB_WHITEALPHA);
+ gTasks[taskId].func = Task_IntroWaitToSetupPart3;
+ }
+ if (gIntroFrameCounter == 1109)
+ gSprites[gTasks[taskId].data[1]].data[0] = 1;
+ if (gIntroFrameCounter == 1214)
+ gSprites[gTasks[taskId].data[1]].data[0] = 0;
+ if (gIntroFrameCounter == 1394)
+ gSprites[gTasks[taskId].data[2]].data[0] = 1;
+ if (gIntroFrameCounter == 1398)
+ gSprites[gTasks[taskId].data[1]].data[0] = 2;
+ if (gIntroFrameCounter == 1576)
+ gSprites[gTasks[taskId].data[1]].data[0] = 3;
+ if (gIntroFrameCounter == 1727)
+ gSprites[gTasks[taskId].data[1]].data[0] = 4;
+
+ sine = Sin(gTasks[taskId].data[3] >> 2 & 0x7F, 48);
+ gUnknown_0203BCCC = sine;
+ if (gTasks[taskId].data[3] < 512)
+ gTasks[taskId].data[3]++;
+ sub_817B540(0);
+}
+
+static void Task_IntroWaitToSetupPart3(u8 taskId)
+{
+ if (gIntroFrameCounter > 2068)
+ gTasks[taskId].func = Task_IntroLoadPart3Graphics;
+}
+
+static void sub_816D81C(struct Sprite *sprite)
+{
+ sprite->data[3] += 4;
+ switch (sprite->data[0])
+ {
+ case 0:
+ if (++sprite->data[1] < 180)
+ break;
+ ++sprite->data[0];
+ case 1:
+ sprite->pos1.x -= 4;
+ if (sprite->pos1.x == 0x3C)
+ {
+ sprite->data[0] = 8;
+ sprite->data[1] = 20;
+ sprite->data[2] = 2;
+ }
+ break;
+ case 2:
+ sprite->pos1.x += 8;
+ sprite->pos1.y -= 2;
+ if (sprite->pos1.x == 0x7C)
+ {
+ sprite->data[0] = 8;
+ sprite->data[1] = 20;
+ sprite->data[2] = 3;
+ }
+ break;
+ case 3:
+ sprite->pos1.y += 4;
+ if (sprite->pos1.y == 0x50)
+ {
+ sprite->data[0] = 8;
+ sprite->data[1] = 10;
+ sprite->data[2] = 4;
+ }
+ break;
+ case 4:
+ sprite->pos1.x -= 8;
+ sprite->pos1.y -= 2;
+ if (sprite->pos1.x == 0x3C)
+ {
+ sprite->data[0] = 8;
+ sprite->data[1] = 10;
+ sprite->data[2] = 5;
+ }
+ break;
+ case 5:
+ sprite->pos1.x += 0x3C;
+ sprite->data[4] = 0xC0;
+ sprite->data[5] = 0x80;
+ sprite->data[6] = 0x3;
+ sprite->data[0]++;
+ case 6:
+ sprite->pos2.x = Sin((u8)sprite->data[4], 0x3C);
+ sprite->pos2.y = Sin((u8)sprite->data[5], 0x14);
+ sprite->data[4] += 2;
+ sprite->data[5] += 4;
+ if ((sprite->data[4] & 0xFF) == 0x40)
+ {
+ sprite->hFlip = FALSE;
+ if (!--sprite->data[6])
+ {
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos2.x = 0;
+ sprite->data[0]++;
+ }
+ }
+ break;
+ case 7:
+ sprite->pos1.x -= 2;
+ sprite->pos2.y = Sin((u8)sprite->data[5], 0x14);
+ sprite->data[5] += 4;
+ if (sprite->pos1.x < -16)
+ DestroySprite(sprite);
+ break;
+ case 8:
+ sprite->pos2.y = Cos((u8)sprite->data[3], 2);
+ if (!--sprite->data[1])
+ sprite->data[0] = sprite->data[2];
+ break;
+ }
+}
+
+static void sub_816D9C0(struct Sprite *sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ if (gIntroFrameCounter == 1224)
+ {
+ StartSpriteAnim(sprite, 1);
+ sprite->data[0]++;
+ }
+ break;
+ case 1:
+ if (gIntroFrameCounter == 1576)
+ {
+ StartSpriteAnim(sprite, 0);
+ sprite->data[0]++;
+ }
+ else
+ {
+ sprite->data[1] += 0x40;
+ if (sprite->data[1] & 0xFF00)
+ {
+ sprite->pos1.x--;
+ sprite->data[1] &= 0xFF;
+ }
+ }
+ break;
+ case 2:
+ if (gIntroFrameCounter != 1735)
+ {
+ sprite->data[1] += 0x20;
+ if (sprite->data[1] & 0xFF00)
+ {
+ sprite->pos1.x++;
+ sprite->data[1] &= 0xFF;
+ }
+ }
+ else
+ {
+ StartSpriteAnim(sprite, 1);
+ sprite->data[0]++;
+ sprite->data[2] = 0x50;
+ }
+ break;
+ case 3:
+ if (--sprite->data[2])
+ {
+ sprite->data[1] += 0x40;
+ if (sprite->data[1] & 0xFF00)
+ {
+ sprite->pos1.x--;
+ sprite->data[1] &= 0xFF;
+ }
+ }
+ else
+ {
+ StartSpriteAnim(sprite, 2);
+ sprite->data[0]++;
+ }
+ break;
+ case 4:
+ if (sprite->animEnded)
+ sprite->pos1.x += 4;
+
+ if (sprite->pos1.x > 336)
+ {
+ StartSpriteAnim(sprite, 1);
+ sprite->data[0]++;
+ }
+ break;
+ case 5:
+ if (gIntroFrameCounter > 1855)
+ sprite->pos1.x -= 2;
+ break;
+ }
+}
+
+static void sub_816DAE8(struct Sprite *sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ if (gIntroFrameCounter == 1088)
+ sprite->data[0]++;
+ break;
+ case 1:
+ sprite->pos1.x -= 2;
+ if (gIntroFrameCounter != 1168)
+ break;
+ sprite->pos1.y -= 12;
+ sprite->data[1] = 0x80;
+ sprite->data[2] = 0;
+ sprite->data[0]++;
+ case 2:
+ if (sprite->pos1.x + sprite->pos2.x <= -0x20)
+ {
+ DestroySprite(sprite);
+ }
+ else
+ {
+ if ((sprite->data[1] & 0xFF) < 0x40)
+ {
+ sprite->pos2.x = Sin((u8)sprite->data[1], 0x10);
+ }
+ else
+ {
+ if ((sprite->data[1] & 0xFF) == 0x40)
+ sprite->pos1.x -= 0x30;
+ sprite->pos2.x = Sin((u8)sprite->data[1], 0x40);
+ }
+ sprite->data[1]++;
+ sprite->pos2.y = Cos((u8)sprite->data[2], 0xC);
+ sprite->data[2]++;
+ }
+ break;
+ }
+}
+
+static void Task_IntroLoadPart3Graphics(u8 taskId)
+{
+ intro_reset_and_hide_bgs();
+ LZ77UnCompVram(gIntro3Pokeball_Gfx, (void *)VRAM);
+ LZ77UnCompVram(gIntro3Pokeball_Tilemap, (void *)(VRAM + 0x4000));
+ LoadPalette(gIntro3PokeballPal, 0, 0x200);
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].data[1] = 0;
+ gTasks[taskId].data[2] = 0;
+ gTasks[taskId].data[3] = 0;
+ sub_816F2A8(0x78, 0x50, 0, 0);
+ ResetSpriteData();
+ FreeAllSpritePalettes();
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_WHITEALPHA);
+ SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(8) | BGCNT_256COLOR | BGCNT_AFF256x256);
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1 | DISPCNT_OBJ_1D_MAP | DISPCNT_BG2_ON | DISPCNT_OBJ_ON);
+ gTasks[taskId].func = Task_IntroSpinAndZoomPokeball;
+ gIntroFrameCounter = 0;
+ m4aSongNumStart(MUS_T_BATTLE);
+}
+
+static void Task_IntroSpinAndZoomPokeball(u8 taskId)
+{
+ gTasks[taskId].data[0] += 0x400;
+
+ if (gTasks[taskId].data[1] <= 0x6BF)
+ {
+ gTasks[taskId].data[1] += gTasks[taskId].data[2];
+ gTasks[taskId].data[2] += 2;
+ }
+ else
+ {
+ gTasks[taskId].func = Task_IntroWaitToSetupPart3LegendsFight;
+ }
+
+ sub_816F2A8(0x78, 0x50, 0x10000 / gTasks[taskId].data[1], gTasks[taskId].data[0]);
+
+ if (gIntroFrameCounter == 28)
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 0x10, RGB_WHITEALPHA);
+}
+
+static void Task_IntroWaitToSetupPart3LegendsFight(u8 taskId)
+{
+ if (gIntroFrameCounter > 43)
+ gTasks[taskId].func = Task_IntroLoadPart1Graphics3;
+}
+
+static void Task_IntroLoadPart1Graphics3(u8 taskId)
+{
+ u16 i;
+
+ if (!gPaletteFade.active)
+ {
+ intro_reset_and_hide_bgs();
+ ResetSpriteData();
+ FreeAllSpritePalettes();
+ gReservedSpritePaletteCount = 8;
+ LZDecompressVram(gIntro3GroudonGfx, (void *)VRAM);
+ LZDecompressVram(gIntro3GroudonTilemap, (void *)(VRAM + 0xC000));
+ LZDecompressVram(gIntro3LegendBgGfx, (void *)(VRAM + 0x4000));
+ LZDecompressVram(gIntro3GroudonBgTilemap, (void *)(VRAM + 0xE000));
+ LoadCompressedObjectPicUsingHeap(&gBattleAnimPicTable[0x3A]);
+ LoadCompressedObjectPaletteUsingHeap(&gBattleAnimPaletteTable[0x3A]);
+ CpuCopy16(gIntro3BgPal, gPlttBufferUnfaded, sizeof(gIntro3BgPal));
+ gTasks[taskId].func = Task_IntroLoadPart1Graphics4;
+ }
+}
+
+static void Task_IntroLoadPart1Graphics4(u8 taskId)
+{
+ SetGpuReg(REG_OFFSET_WIN0H, 0xF0);
+ SetGpuReg(REG_OFFSET_WIN0V, 0xA0);
+ SetGpuReg(REG_OFFSET_WININ, 0x3F);
+ SetGpuReg(REG_OFFSET_WINOUT, 0);
+ SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(0)
+ | BGCNT_CHARBASE(0)
+ | BGCNT_SCREENBASE(24)
+ | BGCNT_256COLOR
+ | BGCNT_WRAP
+ | BGCNT_AFF512x512);
+ SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(1)
+ | BGCNT_CHARBASE(1)
+ | BGCNT_SCREENBASE(28)
+ | BGCNT_16COLOR
+ | BGCNT_TXT256x256);
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_1
+ | DISPCNT_OBJ_1D_MAP
+ | DISPCNT_BG1_ON
+ | DISPCNT_BG2_ON
+ | DISPCNT_OBJ_ON
+ | DISPCNT_WIN0_ON);
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, RGB_WHITEALPHA);
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].data[1] = 0xFFA0;
+ gTasks[taskId].data[2] = 0xFF51;
+ gTasks[taskId].data[3] = 0x100;
+ sub_816F2A8(0xFFA0, 0xFF51, 0x100, 0);
+ gTasks[taskId].func = Task_IntroLoadPart1Graphics5;
+}
+
+static void Task_IntroLoadPart1Graphics5(u8 taskId)
+{
+ u16 foo = gTasks[taskId].data[0];
+
+ if (gTasks[taskId].data[0] != 32)
+ {
+ gTasks[taskId].data[0] += 4;
+ SetGpuReg(REG_OFFSET_WIN0V, (gTasks[taskId].data[0] * 256) - (foo -= 0x9C));
+ }
+ else
+ {
+ SetGpuReg(REG_OFFSET_WIN0V, 0x2080);
+ gTasks[taskId].func = Task_IntroLoadPart1Graphics6;
+ }
+}
+
+static void Task_IntroLoadPart1Graphics6(u8 taskId)
+{
+ gTasks[taskId].func = Task_IntroLoadPart1Graphics7;
+}
+
+static void Task_IntroLoadPart1Graphics7(u8 taskId)
+{
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].func = Task_IntroLoadPart1Graphics8;
+ ScanlineEffect_InitWave(0, 0xA0, 0x4, 4, 1, 4, 0);
+}
+
+static void Task_IntroLoadPart1Graphics8(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ data[5]++;
+ if ((u16)(data[0] - 1) < 7 && data[5] % 2 == 0)
+ data[4] ^= 3;
+ sub_816F2A8(data[1], data[2] + data[4], data[3], 0);
+ switch (data[0])
+ {
+ case 0:
+ data[1] += 0x10;
+ if (data[1] == 0xA0)
+ {
+ data[0]++;
+ data[6] = 2;
+ data[7] = 0x1E2;
+ sub_816E190(taskId);
+ }
+ break;
+ case 1:
+ if (--data[6] == 0)
+ {
+ data[6] = 2;
+ CpuCopy16(&gIntro3BgPal[data[7]], &gPlttBufferFaded[31], sizeof(u16));
+ data[7] += 2;
+ if (data[7] == 0x1EC)
+ data[0]++;
+ }
+ break;
+ case 2:
+ if (--data[6] == 0)
+ {
+ data[6] = 2;
+ data[0]++;
+ }
+ break;
+ case 3:
+ if (--data[6] == 0)
+ {
+ data[6] = 2;
+ CpuCopy16(&gIntro3BgPal[data[7]], &gPlttBufferFaded[31], sizeof(u16));
+ data[7] -= 2;
+ if (data[7] == 0x1E0)
+ {
+ data[6] = 8;
+ data[0]++;
+ }
+ }
+ break;
+ case 4:
+ if (--data[6] == 0)
+ {
+ data[1] = -0x60;
+ data[2] = 0xA9;
+ data[6] = 3;
+ data[0]++;
+ }
+ break;
+ case 5:
+ if (--data[6] == 0)
+ {
+ data[1] = 0x50;
+ data[2] = 0x29;
+ data[6] = 0x10;
+ PlayCryInternal(SPECIES_GROUDON, 0, 100, 10, 0);
+ data[0]++;
+ }
+ break;
+ case 6:
+ if (--data[6] == 0)
+ {
+ data[1] = 0x50;
+ data[2] = 0x28;
+ data[0]++;
+ }
+ break;
+ case 7:
+ data[1] += 4;
+ data[2] += 4;
+ data[6] += 0x666;
+ data[3] = Sin((data[6] & 0xFF00) >> 8, 0x40) + 0x100;
+ if (data[1] == 0x78)
+ {
+ BeginNormalPaletteFade(0xFFFFFFFE, 3, 0, 16, RGB_WHITE);
+ data[3] = 0x100;
+ data[4] = 0;
+ data[0]++;
+ }
+ break;
+ case 8:
+ if (data[3])
+ data[3] -= 8;
+ else
+ data[0]++;
+ break;
+ case 9:
+ if (!gPaletteFade.active)
+ {
+ gTasks[taskId].func = Task_IntroLoadPart1Graphics9;
+ gScanlineEffect.state = 3;
+ }
+ break;
+ }
+}
+
+static void sub_816E190(u8 a0)
+{
+ int i;
+ u8 spriteId;
+
+ for (i = 0; i < 6; i++)
+ {
+ spriteId = CreateSprite(gUnknown_08596C10, gUnknown_085E4C64[i][0], 0xA0, i);
+ gSprites[spriteId].callback = sub_816E1F8;
+ gSprites[spriteId].oam.priority = 0;
+ gSprites[spriteId].data[1] = i;
+ gSprites[spriteId].data[4] = a0;
+ StartSpriteAnim(&gSprites[spriteId], gUnknown_085E4C64[i][1]);
+ }
+}
+
+static void sub_816E1F8(struct Sprite *sprite)
+{
+ sprite->data[3]++;
+ if (sprite->data[3] % 2 == 0)
+ sprite->pos2.y ^= 3;
+
+ switch(sprite->data[0])
+ {
+ case 0:
+ sprite->data[2] += gUnknown_085E4C64[sprite->data[1]][2];
+ sprite->pos1.y -= (sprite->data[2] & 0xFF00) >> 8;
+ sprite->data[2] &= 0xFF;
+ if (gTasks[sprite->data[4]].data[0] > 7)
+ sprite->data[0]++;
+ break;
+ case 1:
+ if (sprite->pos1.x < 0x78)
+ sprite->pos1.x -= 2;
+ else
+ sprite->pos1.x += 2;
+
+ if (sprite->pos1.y < 0x50)
+ sprite->pos1.y -= 2;
+ else
+ sprite->pos1.y += 2;
+ break;
+ }
+}
+
+static void Task_IntroLoadPart1Graphics9(u8 taskId)
+{
+ ResetSpriteData();
+ LZDecompressVram(gIntro3KyogreGfx, (void *)VRAM);
+ LZDecompressVram(gIntro3KyogreTilemap, (void *)(VRAM + 0xC000));
+ LZDecompressVram(gIntro3KyogreBgTilemap, (void *)(VRAM + 0xE000));
+ LoadCompressedObjectPic(gUnknown_085E4C88);
+ LoadSpritePalette(gUnknown_085E4C98);
+ BeginNormalPaletteFade(0xFFFFFFFE, 0, 0x10, 0, RGB_WHITEALPHA);
+ gTasks[taskId].func = Task_IntroFadeIn0;
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].data[1] = 0x150;
+ gTasks[taskId].data[2] = 0x50;
+ gTasks[taskId].data[6] = 0x10;
+ gTasks[taskId].data[3] = 0x100;
+ sub_816F2A8(0x150, 0x50, 0x100, 0);
+ ScanlineEffect_InitWave(0, 0xA0, 4, 4, 1, 6, 0);
+}
+
+static void Task_IntroFadeIn0(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ sub_816F2A8(data[1], data[2], data[3], 0);
+
+ switch (data[0])
+ {
+ case 0:
+ if (--data[6] != 0)
+ break;
+ data[0]++;
+ case 1:
+ data[6] += 4;
+ gTasks[taskId].data[1] = 0x158 - Sin(data[6], 0x100);
+ gTasks[taskId].data[2] = 0x54 - Cos(data[6], 0x40);
+ if (data[6] == 0x40)
+ {
+ data[6] = 0x19;
+ data[7] = 1;
+ data[0]++;
+ sub_816E6D4(0);
+ }
+ break;
+ case 2:
+ if (--data[6] == 0)
+ {
+ gTasks[taskId].data[1] += 0x100;
+ gTasks[taskId].data[2] -= 0x102;
+ data[6] = 8;
+ data[0]++;
+ sub_816E6D4(0);
+ sub_816E74C();
+ }
+ break;
+ case 3:
+ if (--data[6] == 0)
+ {
+ gTasks[taskId].data[1] -= 0x100;
+ gTasks[taskId].data[2] += 0x102;
+ data[6] = 8;
+ data[0]++;
+ }
+ break;
+ case 4:
+ if (--data[6] == 0)
+ {
+ gTasks[taskId].data[2] -= 0xFC;
+ data[6] = 8;
+ data[0]++;
+ }
+ break;
+ case 5:
+ if (--data[6] == 0)
+ {
+ gTasks[taskId].data[2] += 0xFC;
+ if (data[7] != 0)
+ {
+ data[6] = 12;
+ data[7]--;
+ data[0] = 2;
+ }
+ else
+ {
+ data[6] = 1;
+ data[0]++;
+ PlayCryInternal(SPECIES_KYOGRE, 0, 120, 10, 0);
+ }
+ }
+ break;
+ case 6:
+ if (--data[6] == 0)
+ {
+ data[6] = 4;
+ data[7] = 0x1EA;
+ data[0]++;
+ }
+ break;
+ case 7:
+ if (--data[6] == 0)
+ {
+ data[6] = 4;
+ CpuCopy16(&gIntro3BgPal[data[7]], &gPlttBufferFaded[47], sizeof(u16));
+ data[7] -= 2;
+ if (data[7] == 0x1E0)
+ data[0]++;
+ }
+ break;
+ case 8:
+ if (--data[6] == 0)
+ {
+ data[6] = 4;
+ data[7] = 0x1E2;
+ data[0]++;
+ }
+ break;
+ case 9:
+ if (--data[6] == 0)
+ {
+ data[6] = 4;
+ CpuCopy16(&gIntro3BgPal[data[7]], &gPlttBufferFaded[47], sizeof(u16));
+ data[7] += 2;
+ if (data[7] == 0x1EE)
+ {
+ data[6] = 0x10;
+ data[0]++;
+ }
+ }
+ break;
+ case 10:
+ if (--data[6] == 0)
+ {
+ data[6] = 0;
+ data[0]++;
+ sub_816E6D4(taskId);
+ }
+ break;
+ case 11:
+ data[6] += 4;
+ data[3] -= 8;
+ gTasks[taskId].data[1] = Sin(data[6], 0x3C) + 0x58;
+ if (data[6] == 0x40)
+ {
+ BeginNormalPaletteFade(0xFFFFFFFE, 3, 0, 16, RGB_WHITE);
+ data[0]++;
+ }
+ break;
+ case 12:
+ data[6] += 4;
+ data[3] -= 8;
+ gTasks[taskId].data[1] = Sin(data[6], 0x14) + 0x80;
+ if (data[6] == 0x80)
+ data[0]++;
+ break;
+ case 13:
+ if (!gPaletteFade.active)
+ {
+ gTasks[taskId].func = Task_IntroFadeIn1;
+ gScanlineEffect.state = 3;
+ }
+ break;
+ }
+}
+
+static void sub_816E6D4(u8 a0)
+{
+ int i;
+ u8 spriteId;
+
+ for (i = 0; i < 6; i++)
+ {
+ spriteId = CreateSprite(&gUnknown_085E4D14, gUnknown_085E4CA8[i][0], gUnknown_085E4CA8[i][1], i);
+ gSprites[spriteId].invisible = TRUE;
+ gSprites[spriteId].data[5] = a0;
+ gSprites[spriteId].data[6] = gUnknown_085E4CA8[i][2];
+ gSprites[spriteId].data[7] = 0x40;
+ }
+}
+
+static void sub_816E74C(void)
+{
+ int i;
+ u8 spriteId;
+
+ for (i = 0; i < 6; i++)
+ {
+ spriteId = CreateSprite(&gUnknown_085E4D14, gUnknown_085E4CA8[i + 6][0], gUnknown_085E4CA8[i + 6][1], i);
+ gSprites[spriteId].invisible = TRUE;
+ gSprites[spriteId].data[6] = gUnknown_085E4CA8[i][2];
+ gSprites[spriteId].data[7] = 0x40;
+ }
+}
+
+static void sub_816E7B4(struct Sprite *sprite)
+{
+ switch(sprite->data[0])
+ {
+ case 0:
+ if (sprite->data[6] == 0)
+ {
+ sprite->data[1] = (sprite->data[1] + 11) & 0xFF;
+ sprite->pos2.x = Sin(sprite->data[1], 4);
+ sprite->data[2] += 0x30;
+ sprite->pos2.y = -(sprite->data[2] >> 8);
+ if (sprite->animEnded)
+ DestroySprite(sprite);
+ }
+ else if (--sprite->data[6] == 0)
+ {
+ StartSpriteAnim(sprite, 0);
+ sprite->invisible = FALSE;
+ }
+ if (gTasks[sprite->data[5]].data[0] > 11)
+ sprite->data[0]++;
+ break;
+ case 1:
+ if (sprite->pos1.x < 120)
+ sprite->pos1.x -= 3;
+ else
+ sprite->pos1.x += 3;
+
+ if (sprite->pos1.y < 80)
+ sprite->pos1.y -= 3;
+ else
+ sprite->pos1.y += 3;
+ if ((u16)(sprite->pos1.y - 20) > 140)
+ DestroySprite(sprite);
+ break;
+ }
+}
+
+static void Task_IntroFadeIn1(u8 taskId)
+{
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_TGT1_BG0
+ | BLDCNT_TGT1_BG1
+ | BLDCNT_TGT1_BG2
+ | BLDCNT_EFFECT_LIGHTEN);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(31, 31));
+ SetGpuReg(REG_OFFSET_BLDY, 31);
+ SetGpuReg(REG_OFFSET_BG0CNT, BGCNT_PRIORITY(0)
+ | BGCNT_CHARBASE(0)
+ | BGCNT_SCREENBASE(24)
+ | BGCNT_16COLOR
+ | BGCNT_TXT512x256);
+ SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(0)
+ | BGCNT_CHARBASE(1)
+ | BGCNT_SCREENBASE(26)
+ | BGCNT_16COLOR
+ | BGCNT_TXT512x256);
+ SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2)
+ | BGCNT_CHARBASE(1)
+ | BGCNT_SCREENBASE(28)
+ | BGCNT_16COLOR
+ | BGCNT_TXT256x256);
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0
+ | DISPCNT_OBJ_1D_MAP
+ | DISPCNT_BG0_ON
+ | DISPCNT_BG1_ON
+ | DISPCNT_BG2_ON
+ | DISPCNT_OBJ_ON
+ | DISPCNT_WIN0_ON);
+ SetGpuReg(REG_OFFSET_BG0HOFS, 80);
+ SetGpuReg(REG_OFFSET_BG0VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG1HOFS, -80);
+ SetGpuReg(REG_OFFSET_BG1VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG2HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG2VOFS, 0);
+ LZDecompressVram(gIntro3CloudsGfx, (void *)VRAM);
+ LZDecompressVram(gIntro3CloudsGfx, (void *)(VRAM + 0x4000));
+ LZDecompressVram(gIntro3Clouds3Tilemap, (void *)(VRAM + 0xE000));
+ gTasks[taskId].func = Task_IntroFadeIn2;
+}
+
+static void Task_IntroFadeIn2(u8 taskId)
+{
+ LZDecompressVram(gIntro3Clouds1Tilemap, (void *)(VRAM + 0xC000));
+ LZDecompressVram(gIntro3Clouds2Tilemap, (void *)(VRAM + 0xD000));
+ gTasks[taskId].func = Task_IntroFadeIn3;
+}
+
+static void Task_IntroFadeIn3(u8 taskId)
+{
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ SetGpuReg(REG_OFFSET_BLDY, 0);
+ gTasks[taskId].func = Task_IntroFadeIn4;
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].data[6] = 16;
+}
+
+static void Task_IntroFadeIn4(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ SetGpuReg(REG_OFFSET_BG0HOFS, (data[6] >> 8));
+ SetGpuReg(REG_OFFSET_BG1HOFS, -(data[6] >> 8));
+
+ switch (data[0])
+ {
+ case 0:
+ if (--data[6] == 0)
+ {
+ BeginNormalPaletteFade(0xFFFFFFFE, 0, 16, 0, RGB_WHITEALPHA);
+ data[6] = 0x5000;
+ data[0]++;
+ }
+ break;
+ case 1:
+ if (data[6] == 0x2800)
+ BeginNormalPaletteFade(0x0000FFFE, 3, 0, 16, RGB(9, 10, 10));
+
+ if (data[6] != 0)
+ data[6] -= 0x80;
+ else if (!gPaletteFade.active)
+ gTasks[taskId].func = Task_IntroFadeIn5;
+ break;
+ }
+}
+
+static void Task_IntroFadeIn5(u8 taskId)
+{
+ LZDecompressVram(gIntro3RayquazaTilemap, (void *)(VRAM + 0xE000));
+ LZDecompressVram(gIntro3Clouds4Tilemap, (void *)(VRAM + 0xC000));
+ LZDecompressVram(gIntro3RayquazaGfx, (void *)(VRAM + 0x4000));
+ LZDecompressVram(gIntro3Clouds2Gfx, (void *)VRAM);
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0
+ | DISPCNT_OBJ_1D_MAP
+ | DISPCNT_BG0_ON
+ | DISPCNT_BG2_ON
+ | DISPCNT_OBJ_ON
+ | DISPCNT_WIN0_ON);
+ gTasks[taskId].func = Task_IntroFadeIn6;
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].data[6] = 1;
+ gTasks[taskId].data[7] = 0;
+ LoadCompressedObjectPicUsingHeap(gUnknown_085E4BF4);
+ LoadSpritePalettes(gUnknown_085E4C04);
+}
+
+static void Task_IntroFadeIn6(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+ u8 spriteId;
+
+ switch (data[0])
+ {
+ case 0:
+ if (--data[6] == 0)
+ {
+ CreateSprite(&gUnknown_085E4C4C, 200, 48, 0);
+ spriteId = CreateSprite(&gUnknown_085E4C4C, 200, 80, 1);
+ StartSpriteAnim(&gSprites[spriteId], 1);
+ spriteId = CreateSprite(&gUnknown_085E4C4C, 200, 112, 2);
+ StartSpriteAnim(&gSprites[spriteId], 2);
+ data[0]++;
+ data[6] = 72;
+ }
+ break;
+ case 1:
+ if (--data[6] == 0)
+ {
+ CreateSprite(&gUnknown_085E4C4C, 40, 48, 0);
+ spriteId = CreateSprite(&gUnknown_085E4C4C, 40, 80, 1);
+ StartSpriteAnim(&gSprites[spriteId], 1);
+ spriteId = CreateSprite(&gUnknown_085E4C4C, 40, 112, 2);
+ StartSpriteAnim(&gSprites[spriteId], 2);
+ data[0]++;
+ data[6] = 48;
+ }
+ break;
+ case 2:
+ if (--data[6] == 0)
+ gTasks[taskId].func = Task_IntroFadeIn7;
+ break;
+ }
+}
+
+static void sub_816EC6C(struct Sprite *sprite)
+{
+ if (sprite->animEnded)
+ sprite->invisible = TRUE;
+
+ switch(sprite->data[0])
+ {
+ case 0:
+ sprite->data[1] = 0x1C2;
+ sprite->data[0]++;
+ case 1:
+ CpuCopy16(&gIntro3BgPal[sprite->data[1]], &gPlttBufferFaded[93], 2);
+ sprite->data[1] += 2;
+ if (sprite->data[1] != 0x1CE)
+ break;
+ sprite->data[1] = 0x1CC;
+ sprite->data[2] = 4;
+ sprite->data[0]++;
+ case 2:
+ if (--sprite->data[2] == 0)
+ {
+ sprite->data[2] = 4;
+ CpuCopy16(&gIntro3BgPal[sprite->data[1]], &gPlttBufferFaded[93], 2);
+ sprite->data[1] -= 2;
+ if (sprite->data[1] == 0x1C0)
+ DestroySprite(sprite);
+ }
+ break;
+ }
+}
+
+static void Task_IntroFadeIn7(u8 taskId)
+{
+ u8 newTaskId;
+
+ LoadCompressedObjectPic(gUnknown_085E5048);
+ LoadSpritePalettes(gUnknown_085E5058);
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0
+ | DISPCNT_OBJ_1D_MAP
+ | DISPCNT_BG0_ON
+ | DISPCNT_BG2_ON
+ | DISPCNT_OBJ_ON
+ | DISPCNT_WIN0_ON);
+ gTasks[taskId].func = Task_IntroFadeIn8;
+ BeginNormalPaletteFade(0x0000FFDE, 0, 16, 0, RGB(9, 10, 10));
+ gTasks[taskId].data[0] = 0;
+ gTasks[taskId].data[1] = 0xA8;
+ gTasks[taskId].data[2] = -0x10;
+ gTasks[taskId].data[3] = -0x88;
+ gTasks[taskId].data[4] = -0x10;
+ newTaskId = CreateTask(sub_816EEA8, 0);
+ gTasks[newTaskId].data[4] = taskId;
+}
+
+static void Task_IntroFadeIn8(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ if (data[7] % 2 == 0)
+ data[6] ^= 2;
+
+ data[7]++;
+
+ switch(data[0])
+ {
+ case 0:
+ if ((data[7] & 1) != 0)
+ {
+ data[1] -= 2;
+ data[2]++;
+ data[3] += 2;
+ data[4]++;
+ }
+ if (data[1] == 0x68)
+ {
+ data[0]++;
+ data[5] = 1;
+ }
+ break;
+ case 1:
+ data[0]++;
+ data[5] = 4;
+ break;
+ case 2:
+ data[1] += 4;
+ data[2] -= 2;
+ data[3] -= 4;
+ data[4] -= 2;
+ if (!gPaletteFade.active)
+ {
+ data[5] = 0x8C;
+ data[0]++;
+ }
+ break;
+ case 3:
+ if (--data[5] == 0)
+ gTasks[taskId].func = Task_IntroFadeIn9;
+ break;
+ }
+}
+
+static void Task_IntroFadeIn9(u8 taskId)
+{
+ DestroyTask(taskId);
+ SetMainCallback2(MainCB2_EndIntro);
+}
+
+static void sub_816EEA8(u8 taskId)
+{
+ u8 spriteId;
+ s16 *data = gTasks[taskId].data;
+
+ data[2]++;
+
+ switch(data[0])
+ {
+ case 0:
+ if ((data[2] & 1) != 0)
+ {
+ CpuCopy16(&gIntro3BgPal[0x1A2 + data[1] * 2], &gPlttBufferFaded[94], 2);
+ data[1]++;
+ }
+ if (data[1] == 6)
+ {
+ data[0]++;
+ data[1] = 0;
+ data[3] = 10;
+ }
+ break;
+ case 1:
+ if (data[3] == 0)
+ {
+ if ((data[2] & 1) != 0)
+ {
+ CpuCopy16(&gIntro3BgPal[0x1A2 + data[1] * 2], &gPlttBufferFaded[88], 2);
+ data[1]++;
+ }
+ if (data[1] == 6)
+ {
+ data[0]++;
+ data[3] = 10;
+ }
+ }
+ else
+ {
+ data[3]--;
+ }
+ break;
+ case 2:
+ if (data[3] == 0)
+ {
+ if ((data[2] & 1) != 0)
+ {
+ CpuCopy16(&gIntro3BgPal[0x182 + data[1] * 2], &gPlttBufferFaded[92], 2);
+ data[1]++;
+ }
+ if (data[1] == 6)
+ {
+ spriteId = CreateSprite(&gUnknown_085E5030, 120, 88, 15);
+ PlaySE(SE_OP_BASYU);
+ gSprites[spriteId].invisible = TRUE;
+ gSprites[spriteId].data[3] = data[4];
+ data[0]++;
+ data[3] = 16;
+ }
+ }
+ else
+ {
+ data[3]--;
+ }
+ break;
+ case 3:
+ if ((data[2] & 1) != 0)
+ {
+ if (--data[3] != 0)
+ {
+ BlendPalette(0x50, 16, data[3], RGB(9, 10, 10));
+ CpuCopy16(&gIntro3BgPal[0x1AC], &gPlttBufferFaded[94], 2);
+ CpuCopy16(&gIntro3BgPal[0x1AC], &gPlttBufferFaded[88], 2);
+ CpuCopy16(&gIntro3BgPal[0x18C], &gPlttBufferFaded[92], 2);
+ }
+ else
+ {
+ data[0]++;
+ data[3] = 53;
+ }
+ }
+ break;
+ case 4:
+ if (--data[3] == 0)
+ {
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, RGB_WHITE);
+ data[0]++;
+ }
+ break;
+ case 5:
+ if (!gPaletteFade.active)
+ DestroyTask(taskId);
+ break;
+ }
+}
+
+static void intro_reset_and_hide_bgs(void)
+{
+ SetGpuReg(REG_OFFSET_DISPCNT, 0);
+ SetGpuReg(REG_OFFSET_BG3HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG3VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG2HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG2VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG1HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG1VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG0HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG0VOFS, 0);
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ SetGpuReg(REG_OFFSET_BLDY, 0);
+}
+
+static void Task_IntroWaterDrops_1(u8 taskId)
+{
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ default:
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_BLEND
+ | BLDCNT_TGT2_BG0
+ | BLDCNT_TGT2_BG1
+ | BLDCNT_TGT2_BG2
+ | BLDCNT_TGT2_BG3
+ | BLDCNT_TGT2_OBJ
+ | BLDCNT_TGT2_BD);
+ SetGpuReg(REG_OFFSET_BLDALPHA, gUnknown_0853FF70[31]);
+ SetGpuReg(REG_OFFSET_BLDY, 0);
+ gTasks[taskId].data[1] = 0x40;
+ gTasks[taskId].data[0]++;
+ break;
+ case 1:
+ if (gTasks[taskId].data[1] != 0)
+ {
+ u8 tmp;
+
+ gTasks[taskId].data[1]--;
+ tmp = gTasks[taskId].data[1] / 2;
+ SetGpuReg(REG_OFFSET_BLDALPHA, gUnknown_0853FF70[tmp]);
+ }
+ else
+ {
+ SetGpuReg(REG_OFFSET_BLDALPHA, gUnknown_0853FF70[0]);
+ gTasks[taskId].data[1] = 0x10;
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 2:
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ SetGpuReg(REG_OFFSET_BLDY, 0);
+ DestroyTask(taskId);
+ break;
+ }
+}
+
+static void Task_IntroWaterDrops_2(u8 taskId)
+{
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ default:
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_BLEND
+ | BLDCNT_TGT2_BG0
+ | BLDCNT_TGT2_BG1
+ | BLDCNT_TGT2_BG2
+ | BLDCNT_TGT2_BG3
+ | BLDCNT_TGT2_OBJ
+ | BLDCNT_TGT2_BD);
+ SetGpuReg(REG_OFFSET_BLDALPHA, gUnknown_0853FF70[0]);
+ SetGpuReg(REG_OFFSET_BLDY, 0);
+ gTasks[taskId].data[1] = 0;
+ gTasks[taskId].data[0]++;
+ break;
+ case 1:
+ if (gTasks[taskId].data[1] < 62)
+ {
+ u8 tmp;
+
+ gTasks[taskId].data[1]++;
+ tmp = gTasks[taskId].data[1] / 2;
+ SetGpuReg(REG_OFFSET_BLDALPHA, gUnknown_0853FF70[tmp]);
+ }
+ else
+ {
+ SetGpuReg(REG_OFFSET_BLDALPHA, gUnknown_0853FF70[31]);
+ gTasks[taskId].data[1] = 0x10;
+ gTasks[taskId].data[0]++;
+ }
+ break;
+ case 2:
+ if (gTasks[taskId].data[1] != 0)
+ {
+ gTasks[taskId].data[1]--;
+ }
+ else
+ {
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ SetGpuReg(REG_OFFSET_BLDY, 0);
+ DestroyTask(taskId);
+ }
+ break;
+ }
+}
+
+void sub_816F2A8(u16 scrX, u16 scrY, u16 zoom, u16 alpha)
+{
+ struct BgAffineSrcData src;
+ struct BgAffineDstData dest;
+
+ src.texX = 0x8000;
+ src.texY = 0x8000;
+ src.scrX = scrX;
+ src.scrY = scrY;
+ src.sx = zoom;
+ src.sy = zoom;
+ src.alpha = alpha;
+ BgAffineSet(&src, &dest, 1);
+ SetGpuReg(REG_OFFSET_BG2PA, dest.pa);
+ SetGpuReg(REG_OFFSET_BG2PB, dest.pb);
+ SetGpuReg(REG_OFFSET_BG2PC, dest.pc);
+ SetGpuReg(REG_OFFSET_BG2PD, dest.pd);
+ SetGpuReg(REG_OFFSET_BG2X_L, dest.dx);
+ SetGpuReg(REG_OFFSET_BG2X_H, dest.dx >> 16);
+ SetGpuReg(REG_OFFSET_BG2Y_L, dest.dy);
+ SetGpuReg(REG_OFFSET_BG2Y_H, dest.dy >> 16);
+}
+
+static void sub_816F318(struct Sprite *sprite)
+{
+ u8 r0;
+
+ if (sprite->data[2] >= 192)
+ {
+ if (sprite->data[3] != 0)
+ {
+ sprite->data[3]--;
+ }
+ else
+ {
+ sprite->invisible = FALSE;
+ SetOamMatrix(sprite->data[1], sprite->data[2], 0, 0, sprite->data[2]);
+ sprite->data[2] = (sprite->data[2] * 95) / 100;
+ r0 = (sprite->data[2] - 192) / 128 + 9;
+ if (r0 > 15)
+ r0 = 15;
+ sprite->oam.paletteNum = r0;
+ }
+ }
+ else
+ {
+ DestroySprite(sprite);
+ }
+}
+
+static void sub_816F3A4(struct Sprite *sprite)
+{
+ if (gSprites[sprite->data[7]].data[7] != 0)
+ {
+ sprite->invisible = TRUE;
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
+ StartSpriteAnim(sprite, 3);
+ sprite->data[2] = 1024;
+ sprite->data[3] = 8 * (sprite->data[1] & 3);
+ sprite->callback = sub_816F318;
+ sprite->oam.shape = 1;
+ sprite->oam.size = 3;
+ CalcCenterToCornerVec(sprite, 1, 3, 2);
+ }
+ else
+ {
+ sprite->pos2.x = gSprites[sprite->data[7]].pos2.x;
+ sprite->pos2.y = gSprites[sprite->data[7]].pos2.y;
+ sprite->pos1.x = gSprites[sprite->data[7]].pos1.x;
+ sprite->pos1.y = gSprites[sprite->data[7]].pos1.y;
+ }
+}
+
+static void sub_816F454(struct Sprite *sprite)
+{
+ if (sprite->data[0] != 0)
+ sprite->callback = sub_816F46C;
+}
+
+static void sub_816F46C(struct Sprite *sprite)
+{
+ if (sprite->pos1.x <= 116)
+ {
+ sprite->pos1.y += sprite->pos2.y;
+ sprite->pos2.y = 0;
+ sprite->pos1.x += 4;
+ sprite->pos2.x = -4;
+ sprite->data[4] = 128;
+ sprite->callback = sub_816F5B4;
+ }
+ else
+ {
+ u16 data2;
+ u16 data3;
+ u16 data4;
+ s16 sin1;
+ s16 sin2;
+ s16 sin3;
+ s16 sin4;
+ s16 var1;
+ s16 var2;
+ s16 var3;
+ s16 var4;
+ s16 temp;
+
+ data4 = sprite->data[4];
+ sin1 = gSineTable[(u8)data4];
+ sin2 = gSineTable[(u8)(data4 + 64)];
+ sprite->data[4] += 2;
+ sprite->pos2.y = sin1 / 32;
+ sprite->pos1.x--;
+ if (sprite->pos1.x & 1)
+ sprite->pos1.y++;
+ temp = -sin2 / 16;
+ data2 = sprite->data[2];
+ data3 = sprite->data[3];
+ sin3 = gSineTable[(u8)(temp - 16)];
+ sin4 = gSineTable[(u8)(temp + 48)];
+ var1 = sin4 * data2 / 256;
+ var2 = -sin3 * data3 / 256;
+ var3 = sin3 * data2 / 256;
+ var4 = sin4 * data3 / 256;
+ SetOamMatrix(sprite->data[1], data2, 0, 0, data3);
+ SetOamMatrix(sprite->data[1] + 1, var1, var3, var2, var4);
+ SetOamMatrix(sprite->data[1] + 2, var1, var3, var2 * 2, var4 * 2);
+ }
+}
+
+static void sub_816F5B4(struct Sprite *sprite)
+{
+ SetOamMatrix(sprite->data[1], sprite->data[6] + 64, 0, 0, sprite->data[6] + 64);
+ SetOamMatrix(sprite->data[1] + 1, sprite->data[6] + 64, 0, 0, sprite->data[6] + 64);
+ SetOamMatrix(sprite->data[1] + 2, sprite->data[6] + 64, 0, 0, sprite->data[6] + 64);
+ if (sprite->data[4] != 64)
+ {
+ u16 data4;
+
+ sprite->data[4] -= 8;
+ data4 = sprite->data[4];
+ sprite->pos2.x = gSineTable[(u8)(data4 + 64)] / 64;
+ sprite->pos2.y = gSineTable[(u8)data4] / 64;
+ }
+ else
+ {
+ sprite->data[4] = 0;
+ sprite->callback = sub_816F660;
+ }
+}
+
+static void sub_816F660(struct Sprite *sprite)
+{
+ if (sprite->data[0] != 2)
+ {
+ s16 r2;
+
+ sprite->data[4] += 8;
+ r2 = gSineTable[(u8)sprite->data[4]] / 16 + 64;
+ sprite->pos2.x = gSineTable[(u8)(r2 + 64)] / 64;
+ sprite->pos2.y = gSineTable[(u8)r2] / 64;
+ }
+ else
+ {
+ sprite->callback = SpriteCB_WaterDropFall;
+ }
+}
+
+static void SpriteCB_WaterDropFall(struct Sprite *sprite)
+{
+ if (sprite->pos1.y < sprite->data[5])
+ {
+ sprite->pos1.y += 4;
+ }
+ else
+ {
+ sprite->data[7] = 1;
+ sprite->invisible = TRUE;
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
+ StartSpriteAnim(sprite, 3);
+ sprite->data[2] = 1024;
+ sprite->data[3] = 8 * (sprite->data[1] & 3);
+ sprite->callback = sub_816F318;
+ sprite->oam.shape = 1;
+ sprite->oam.size = 3;
+ CalcCenterToCornerVec(sprite, 1, 3, 2);
+ }
+}
+
+//Duplicate function
+static void SpriteCB_WaterDropFall_2(struct Sprite *sprite)
+{
+ if (sprite->pos1.y < sprite->data[5])
+ {
+ sprite->pos1.y += 4;
+ }
+ else
+ {
+ sprite->data[7] = 1;
+ sprite->invisible = TRUE;
+ sprite->pos1.x += sprite->pos2.x;
+ sprite->pos1.y += sprite->pos2.y;
+ StartSpriteAnim(sprite, 3);
+ sprite->data[2] = 1024;
+ sprite->data[3] = 8 * (sprite->data[1] & 3);
+ sprite->callback = sub_816F318;
+ sprite->oam.shape = 1;
+ sprite->oam.size = 3;
+ CalcCenterToCornerVec(sprite, 1, 3, 2);
+ }
+}
+
+static u8 CreateWaterDrop(s16 x, s16 y, u16 c, u16 d, u16 e, u8 fallImmediately)
+{
+ u8 spriteId;
+ u8 oldSpriteId;
+
+ spriteId = CreateSprite(&gUnknown_085E4D64, x, y, 1);
+ gSprites[spriteId].data[0] = 0;
+ gSprites[spriteId].data[7] = 0;
+ gSprites[spriteId].data[1] = d;
+ gSprites[spriteId].data[2] = c;
+ gSprites[spriteId].data[3] = c;
+ gSprites[spriteId].data[5] = e;
+ gSprites[spriteId].data[6] = c;
+ gSprites[spriteId].oam.affineMode = 3;
+ gSprites[spriteId].oam.matrixNum = d;
+ CalcCenterToCornerVec(&gSprites[spriteId], 0, 2, 2);
+ StartSpriteAnim(&gSprites[spriteId], 2);
+ if (!fallImmediately)
+ gSprites[spriteId].callback = sub_816F454;
+ else
+ gSprites[spriteId].callback = SpriteCB_WaterDropFall_2;
+ oldSpriteId = spriteId;
+
+ spriteId = CreateSprite(&gUnknown_085E4D64, x, y, 1);
+ gSprites[spriteId].data[7] = oldSpriteId;
+ gSprites[spriteId].data[1] = d + 1;
+ gSprites[spriteId].oam.affineMode = 3;
+ gSprites[spriteId].oam.matrixNum = d + 1;
+ CalcCenterToCornerVec(&gSprites[spriteId], 0, 2, 2);
+ gSprites[spriteId].callback = sub_816F3A4;
+
+ spriteId = CreateSprite(&gUnknown_085E4D64, x, y, 1);
+ gSprites[spriteId].data[7] = oldSpriteId;
+ gSprites[spriteId].data[1] = d + 2;
+ StartSpriteAnim(&gSprites[spriteId], 1);
+ gSprites[spriteId].oam.affineMode = 3;
+ gSprites[spriteId].oam.matrixNum = d + 2;
+ CalcCenterToCornerVec(&gSprites[spriteId], 0, 2, 2);
+ gSprites[spriteId].callback = sub_816F3A4;
+
+ SetOamMatrix(d, c + 32, 0, 0, c + 32);
+ SetOamMatrix(d + 1, c + 32, 0, 0, c + 32);
+ SetOamMatrix(d + 2, c + 32, 0, 0, 2 * (c + 32));
+
+ return oldSpriteId;
+}
+
+static void sub_816F9D4(struct Sprite *sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ StartSpriteAnimIfDifferent(sprite, 0);
+ sprite->pos1.x--;
+ break;
+ case 1:
+ StartSpriteAnimIfDifferent(sprite, 0);
+ if (gIntroFrameCounter & 7)
+ return;
+ sprite->pos1.x++;
+ break;
+ case 2:
+ if (sprite->pos1.x <= 120 || gIntroFrameCounter & 7)
+ sprite->pos1.x++;
+ break;
+ case 3:
+ break;
+ case 4:
+ if (sprite->pos1.x > -32)
+ sprite->pos1.x -= 2;
+ break;
+ }
+ if (gIntroFrameCounter & 7)
+ return;
+ if (sprite->pos2.y != 0)
+ {
+ sprite->pos2.y = 0;
+ }
+ else
+ {
+ switch (Random() & 3)
+ {
+ case 0:
+ sprite->pos2.y = -1;
+ break;
+ case 1:
+ sprite->pos2.y = 1;
+ break;
+ case 2:
+ case 3:
+ sprite->pos2.y = 0;
+ break;
+ }
+ }
+}
+
+static void sub_816FAB0(struct Sprite *sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ break;
+ case 1:
+ if (sprite->pos2.x + sprite->pos1.x < 304)
+ sprite->pos2.x += 8;
+ else
+ sprite->data[0] = 2;
+ break;
+ case 2:
+ if (sprite->pos2.x + sprite->pos1.x > 120)
+ sprite->pos2.x -= 1;
+ else
+ sprite->data[0] = 3;
+ break;
+ case 3:
+ if (sprite->pos2.x > 0)
+ sprite->pos2.x -= 2;
+ break;
+ }
+ sprite->pos2.y = Sin((u8)sprite->data[1], 8) - gUnknown_0203BCCC;
+ sprite->data[1] += 4;
+}
+
+static void sub_816FB38(struct Sprite *sprite)
+{
+ switch (sprite->data[0])
+ {
+ case 0:
+ if (sprite->data[1] != 0)
+ {
+ sprite->data[1]--;
+ }
+ else
+ {
+ sprite->invisible = FALSE;
+ StartSpriteAffineAnim(sprite, 1);
+ sprite->data[0]++;
+ }
+ break;
+ case 1:
+ if (gIntroFrameCounter == 0x90)
+ {
+ sprite->data[0]++;
+ sprite->data[1] = 9;
+ sprite->data[3] = 2;
+ }
+ break;
+ case 2:
+ if (sprite->data[3] == 0)
+ {
+ sprite->data[3] = 2;
+ if (sprite->data[1] != 0)
+ {
+ CpuCopy16(&gIntro1GameFreakTextFadePal[sprite->data[1]], &gPlttBufferFaded[0x11F], 2);
+ CpuCopy16(&gIntro1GameFreakTextFadePal[sprite->data[1] + 0x10], &gPlttBufferFaded[0x114], 2);
+ CpuCopy16(&gIntro1GameFreakTextFadePal[sprite->data[1] + 0x20], &gPlttBufferFaded[0x11A], 2);
+ sprite->data[1]--;
+ }
+ else
+ {
+ CpuCopy16(&gIntro1GameFreakTextFadePal[sprite->data[1]], &gPlttBufferFaded[0x11F], 2);
+ CpuCopy16(&gIntro1GameFreakTextFadePal[sprite->data[1] + 0x10], &gPlttBufferFaded[0x114], 2);
+ CpuCopy16(&gIntro1GameFreakTextFadePal[sprite->data[1] + 0x20], &gPlttBufferFaded[0x11A], 2);
+ sprite->data[0]++;
+ }
+ }
+ else
+ {
+ sprite->data[3]--;
+ }
+ break;
+ case 3:
+ if (sprite->data[3] != 0)
+ {
+ sprite->data[3]--;
+ }
+ else
+ {
+ sprite->data[3] = 2;
+ if (sprite->data[1] < 10)
+ {
+ CpuCopy16(&gIntro1GameFreakTextFadePal[sprite->data[1]], &gPlttBufferFaded[0x11F], 2);
+ CpuCopy16(&gIntro1GameFreakTextFadePal[sprite->data[1] + 0x10], &gPlttBufferFaded[0x114], 2);
+ CpuCopy16(&gIntro1GameFreakTextFadePal[sprite->data[1] + 0x20], &gPlttBufferFaded[0x11A], 2);
+ sprite->data[1]++;
+ }
+ else
+ {
+ sprite->data[0]++;
+ }
+ }
+ break;
+ case 4:
+ if (gIntroFrameCounter == 0x110)
+ {
+ StartSpriteAffineAnim(sprite, 2);
+ sprite->oam.objMode = 1;
+ sprite->data[0]++;
+ }
+ break;
+ case 5:
+ sprite->data[3] += gUnknown_085E4F48[sprite->data[2]];
+ sprite->pos2.x = (sprite->data[3] & 0xFF00) >> 8;
+ if (sprite->data[2] < 4)
+ {
+ s16 temp = sprite->pos2.x;
+ sprite->pos2.x = -temp;
+ }
+ if (sprite->affineAnimEnded)
+ DestroySprite(sprite);
+ break;
+ }
+}
+
+static void sub_816FD44(struct Sprite *sprite)
+{
+ switch(sprite->data[0])
+ {
+ case 0:
+ if (gIntroFrameCounter == 0x80)
+ {
+ sprite->invisible = FALSE;
+ sprite->data[0]++;
+ }
+ break;
+ case 1:
+ if (gIntroFrameCounter == 0x110)
+ {
+ StartSpriteAffineAnim(sprite, 3);
+ sprite->data[0]++;
+ }
+ break;
+ case 2:
+ if (sprite->affineAnimEnded)
+ DestroySprite(sprite);
+ break;
+ }
+}
+
+static u8 sub_816FDB8(s16 a0, s16 a1, s16 a2)
+{
+ u16 i;
+ u8 spriteId;
+
+ for (i = 0; i < 9; i++)
+ {
+ spriteId = CreateSprite(&gUnknown_085E4F5C, gUnknown_085E4E94[i][1] + a0, a1 - 4, 0);
+ gSprites[spriteId].data[0] = 0;
+ gSprites[spriteId].data[1] = gUnknown_085E4FA4[i];
+ gSprites[spriteId].data[2] = i;
+ gSprites[spriteId].invisible = TRUE;
+ gSprites[spriteId].oam.matrixNum = i + 12;
+ StartSpriteAnim(&gSprites[spriteId], gUnknown_085E4E94[i][0]);
+ StartSpriteAffineAnim(&gSprites[spriteId], 0);
+ }
+ spriteId = CreateSprite(&gUnknown_085E4F8C, 120, a1 - 6, 0);
+ gSprites[spriteId].data[0] = 0;
+ gSprites[spriteId].invisible = TRUE;
+ gSprites[spriteId].oam.matrixNum = i + 12;
+ StartSpriteAffineAnim(&gSprites[spriteId], 1);
+ return spriteId;
+}
+
+static void sub_816FEDC(struct Sprite *sprite)
+{
+ sprite->data[7]++;
+
+ if (sprite->data[0] != 0)
+ {
+ s16 sin1;
+ s16 sin2;
+
+ s16 a, b, c, d;
+
+ sin1 = gSineTable[(u8)sprite->data[2]];
+ sin2 = gSineTable[(u8)(sprite->data[2] + 64)];
+
+ d = Q_8_8_TO_INT(sin2 * sprite->data[1]);
+ c = Q_8_8_TO_INT(-sin1 * sprite->data[1]);
+ b = Q_8_8_TO_INT(sin1 * sprite->data[1]);
+ a = Q_8_8_TO_INT(sin2 * sprite->data[1]);
+
+ SetOamMatrix(1, a, b, c, d);
+ }
+
+ switch (sprite->data[0])
+ {
+ case 0:
+ default:
+ sprite->oam.affineMode = 3;
+ sprite->oam.matrixNum = 1;
+ CalcCenterToCornerVec(sprite, 1, 3, 3);
+ sprite->invisible = FALSE;
+ sprite->data[0] = 1;
+ sprite->data[1] = 0x80;
+ sprite->data[2] = 0;
+ sprite->data[3] = 0;
+ break;
+ case 1:
+ sprite->pos2.x = -Sin((u8)sprite->data[3], 140);
+ sprite->pos2.y = -Sin((u8)sprite->data[3], 120);
+ sprite->data[1] += 7;
+ sprite->data[3] += 3;
+ if (sprite->pos1.x + sprite->pos2.x <= -16)
+ {
+ sprite->oam.priority = 3;
+ sprite->data[0]++;
+ sprite->pos1.x = 20;
+ sprite->pos1.y = 40;
+ sprite->data[1] = 0x200;
+ sprite->data[2] = 0;
+ sprite->data[3] = 0x10;
+ }
+ break;
+ case 2:
+ sprite->pos2.x = Sin((u8)sprite->data[3], 34);
+ sprite->pos2.y = -Cos((u8)sprite->data[3], 60);
+ sprite->data[1] += 2;
+ if (sprite->data[7] % 5 == 0)
+ sprite->data[3]++;
+ break;
+ }
+}
+
+static void sub_8170040(struct Sprite *sprite)
+{
+ u16 foo;
+
+ //I'm not sure why a switch statement was used here.
+ //if (sprite->data[0] != 1) would have been more appropriate.
+ switch (sprite->data[0])
+ {
+ case 0:
+ default:
+ sprite->invisible = FALSE;
+ sprite->oam.affineMode = 3;
+ sprite->oam.matrixNum = 18;
+ CalcCenterToCornerVec(sprite, 0, 3, 3);
+ sprite->data[1] = 0;
+ sprite->data[0] = 1;
+ //fall through
+ case 1:
+ sprite->data[7]++;
+ if (sprite->data[7] & 1)
+ {
+ sprite->invisible = TRUE;
+ }
+ else
+ {
+ sprite->invisible = FALSE;
+ if (sprite->data[1] < 64)
+ sprite->data[1]++;
+ }
+ foo = 256 - gSineTable[(u8)sprite->data[1]] / 2;
+ SetOamMatrix(18, foo, 0, 0, foo);
+ break;
+ }
+}
diff --git a/src/intro_credits_graphics.c b/src/intro_credits_graphics.c
new file mode 100644
index 000000000..d570b2992
--- /dev/null
+++ b/src/intro_credits_graphics.c
@@ -0,0 +1,740 @@
+#include "global.h"
+#include "intro_credits_graphics.h"
+#include "palette.h"
+#include "decompress.h"
+#include "gpu_regs.h"
+#include "task.h"
+#include "main.h"
+#include "graphics.h"
+
+struct IntroCreditsSpriteMetadata
+{
+ u8 animNum:4;
+ u8 shape:2;
+ u8 size:2;
+ u8 x;
+ u8 y;
+ u8 subpriority;
+ u16 xOff;
+};
+
+static const u16 gUnknown_085F06E0[] = INCBIN_U16("graphics/intro/intro2_grass.gbapal");
+static const u16 gUnknown_085F0700[] = INCBIN_U16("graphics/intro/intro2_grass_afternoon.gbapal");
+static const u16 gUnknown_085F0720[] = INCBIN_U16("graphics/intro/intro2_grass_night.gbapal");
+static const u8 gUnknown_085F0740[] = INCBIN_U8("graphics/intro/intro2_grass.4bpp.lz");
+static const u8 gUnknown_085F0BC0[] = INCBIN_U8("graphics/intro/intro2_grass_map.bin.lz");
+static const u16 gUnknown_085F0CFC[] = INCBIN_U16("graphics/intro/85F0CFC.gbapal");
+static const u16 gUnknown_085F0D5C[] = INCBIN_U16("graphics/intro/85F0D5C.gbapal");
+static const u8 gUnknown_085F0DBC[] = INCBIN_U8("graphics/intro/intro2_bgclouds.4bpp.lz");
+static const u8 gUnknown_085F1398[] = INCBIN_U8("graphics/intro/intro2_bgclouds_map.bin.lz");
+static const u16 gUnknown_085F1668[] = INCBIN_U16("graphics/intro/intro2_bgclouds.gbapal");
+static const u16 gUnknown_085F1688[] = INCBIN_U16("graphics/intro/intro2_bgclouds_afternoon.gbapal");
+static const u8 gUnknown_085F16A8[] = INCBIN_U8("graphics/intro/intro2_bgclouds2.4bpp.lz");
+static const u16 gUnknown_085F17E4[] = INCBIN_U16("graphics/intro/intro2_bgtrees2.gbapal");
+static const u16 gUnknown_085F1804[] = INCBIN_U16("graphics/intro/intro2_bgtrees2_afternoon.gbapal");
+static const u8 gUnknown_085F1824[] = INCBIN_U8("graphics/intro/intro2_bgtrees.4bpp.lz");
+static const u8 gUnknown_085F1EAC[] = INCBIN_U8("graphics/intro/intro2_bgtrees_map.bin.lz");
+static const u16 gUnknown_085F21B0[] = INCBIN_U16("graphics/intro/intro2_bgtrees.gbapal");
+static const u8 gIntro2TreeTiles[] = INCBIN_U8("graphics/intro/intro2_bgtreessmall.4bpp.lz");
+static const u16 gUnknown_085F231C[] = INCBIN_U16("graphics/intro/85F231C.gbapal");
+static const u8 gUnknown_085F235C[] = INCBIN_U8("graphics/intro/intro2_bgnight.4bpp.lz");
+static const u16 gUnknown_085F2548[] = INCBIN_U16("graphics/intro/intro2_bgnight.gbapal");
+static const u8 gUnknown_085F2568[] = INCBIN_U8("graphics/intro/intro2_bgnight_map.bin.lz");
+static const u8 gIntro2NightTiles[] = INCBIN_U8("graphics/intro/intro2_night.4bpp.lz");
+static const u16 gIntro2BrendanPalette[] = INCBIN_U16("graphics/intro/intro2_brendan.gbapal");
+static const u8 gIntro2BrendanTiles[] = INCBIN_U8("graphics/intro/intro2_brendan.4bpp.lz");
+static const u16 gIntro2MayPalette[] = INCBIN_U16("graphics/intro/intro2_may.gbapal");
+static const u16 gUnknown_085F3490[0xF0] = {0};
+static const u8 gIntro2MayTiles[] = INCBIN_U8("graphics/intro/intro2_may.4bpp.lz");
+static const u8 gIntro2BicycleTiles[] = INCBIN_U8("graphics/intro/intro2_bicycle.4bpp.lz");
+static const u16 gIntro2LatiosPalette[] = INCBIN_U16("graphics/intro/intro2_latios.gbapal");
+static const u8 gIntro2LatiosTiles[] = INCBIN_U8("graphics/intro/intro2_latios.4bpp.lz");
+static const u16 gIntro2LatiasPalette[] = INCBIN_U16("graphics/intro/intro2_latias.gbapal");
+static const u8 gIntro2LatiasTiles[] = INCBIN_U8("graphics/intro/intro2_latias.4bpp.lz");
+
+static void sub_817B62C(struct Sprite *sprite);
+static void nullsub_65(struct Sprite *sprite);
+static void sub_817B7C4(struct Sprite *sprite);
+static void nullsub_66(struct Sprite *sprite);
+
+static const struct SpriteTemplate gUnknown_085F504C = {
+ 2000, 0xFFFF, &gDummyOamData, gDummySpriteAnimTable, NULL, gDummySpriteAffineAnimTable, sub_817B62C
+};
+
+static const struct CompressedSpriteSheet gUnknown_085F5064[] = {
+ { gUnknown_085F16A8, 0x400, 2000 },
+ { NULL }
+};
+
+static const union AnimCmd gUnknown_085F5074[] = {
+ ANIMCMD_FRAME( 0, 30),
+ ANIMCMD_END
+};
+
+static const union AnimCmd gUnknown_085F507C[] = {
+ ANIMCMD_FRAME(16, 30),
+ ANIMCMD_END
+};
+
+static const union AnimCmd gUnknown_085F5084[] = {
+ ANIMCMD_FRAME(20, 30),
+ ANIMCMD_END
+};
+
+static const union AnimCmd gUnknown_085F508C[] = {
+ ANIMCMD_FRAME(22, 30),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const gUnknown_085F5094[] = {
+ gUnknown_085F5074,
+ gUnknown_085F507C,
+ gUnknown_085F5084,
+ gUnknown_085F508C
+};
+
+static const struct IntroCreditsSpriteMetadata gUnknown_085F50A4[] = {
+ { 0, ST_OAM_SQUARE, 2, 72, 32, 100, 0xc00 },
+ { 0, ST_OAM_SQUARE, 2, 158, 32, 100, 0xc00 },
+ { 1, ST_OAM_SQUARE, 1, 192, 40, 101, 0x800 },
+ { 1, ST_OAM_SQUARE, 1, 56, 40, 101, 0x800 },
+ { 2, ST_OAM_H_RECTANGLE, 0, 100, 44, 102, 0x400 },
+ { 2, ST_OAM_H_RECTANGLE, 0, 152, 44, 102, 0x400 },
+ { 3, ST_OAM_H_RECTANGLE, 0, 8, 46, 103, 0x100 },
+ { 3, ST_OAM_H_RECTANGLE, 0, 56, 46, 103, 0x100 },
+ { 3, ST_OAM_H_RECTANGLE, 0, 240, 46, 103, 0x100 },
+};
+
+static const struct CompressedSpriteSheet gUnknown_085F50EC[] = {
+ { gIntro2TreeTiles, 0x400, 2000 },
+ { NULL }
+};
+
+static const union AnimCmd gUnknown_085F50FC[] = {
+ ANIMCMD_FRAME( 0, 30),
+ ANIMCMD_END
+};
+
+static const union AnimCmd gUnknown_085F5104[] = {
+ ANIMCMD_FRAME(16, 30),
+ ANIMCMD_END
+};
+
+static const union AnimCmd gUnknown_085F510C[] = {
+ ANIMCMD_FRAME(24, 30),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const gUnknown_085F5114[] = {
+ gUnknown_085F50FC,
+ gUnknown_085F5104,
+ gUnknown_085F510C
+};
+
+static const struct IntroCreditsSpriteMetadata gUnknown_085F5120[] = {
+ { 0, ST_OAM_SQUARE, 2, 16, 88, 100, 0x2000 },
+ { 0, ST_OAM_SQUARE, 2, 80, 88, 100, 0x2000 },
+ { 0, ST_OAM_SQUARE, 2, 144, 88, 100, 0x2000 },
+ { 0, ST_OAM_SQUARE, 2, 208, 88, 100, 0x2000 },
+ { 1, ST_OAM_V_RECTANGLE, 2, 40, 88, 101, 0x1000 },
+ { 1, ST_OAM_V_RECTANGLE, 2, 104, 88, 101, 0x1000 },
+ { 1, ST_OAM_V_RECTANGLE, 2, 168, 88, 101, 0x1000 },
+ { 1, ST_OAM_V_RECTANGLE, 2, 232, 88, 101, 0x1000 },
+ { 2, ST_OAM_V_RECTANGLE, 2, 56, 88, 102, 0x800 },
+ { 2, ST_OAM_V_RECTANGLE, 2, 120, 88, 102, 0x800 },
+ { 2, ST_OAM_V_RECTANGLE, 2, 184, 88, 102, 0x800 },
+ { 2, ST_OAM_V_RECTANGLE, 2, 248, 88, 102, 0x800 },
+};
+
+static const struct CompressedSpriteSheet gUnknown_085F5180[] = {
+ { gIntro2NightTiles, 0x400, 2000 },
+ { NULL }
+};
+
+static const union AnimCmd gUnknown_085F5190[] = {
+ ANIMCMD_FRAME(0, 30),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const gUnknown_085F5198[] = {
+ gUnknown_085F5190
+};
+
+static const struct IntroCreditsSpriteMetadata gUnknown_085F519C[] = {
+ { 0, ST_OAM_SQUARE, 2, 24, 88, 100, 0x1000 },
+ { 0, ST_OAM_SQUARE, 2, 64, 88, 100, 0x1000 },
+ { 0, ST_OAM_SQUARE, 2, 104, 88, 100, 0x1000 },
+ { 0, ST_OAM_SQUARE, 2, 144, 88, 100, 0x1000 },
+ { 0, ST_OAM_SQUARE, 2, 184, 88, 100, 0x1000 },
+ { 0, ST_OAM_SQUARE, 2, 224, 88, 100, 0x1000 },
+};
+
+static const struct OamData gOamData_85F51CC = {
+ .y = 160, .shape = ST_OAM_SQUARE, .size = 3, .priority = 1
+};
+
+static const union AnimCmd gUnknown_085F51D4[] = {
+ ANIMCMD_FRAME( 0, 8),
+ ANIMCMD_FRAME( 64, 8),
+ ANIMCMD_FRAME(128, 8),
+ ANIMCMD_FRAME(192, 8),
+ ANIMCMD_JUMP(0)
+};
+
+static const union AnimCmd *const gUnknown_085F51E8[] = {
+ gUnknown_085F51D4
+};
+
+static const struct SpriteTemplate gUnknown_085F51EC = {
+ 1002, 1002, &gOamData_85F51CC, gUnknown_085F51E8, NULL, gDummySpriteAffineAnimTable, nullsub_65
+};
+
+static const struct SpriteTemplate gUnknown_085F5204 = {
+ 1003, 1003, &gOamData_85F51CC, gUnknown_085F51E8, NULL, gDummySpriteAffineAnimTable, nullsub_65
+};
+
+static const struct OamData gUnknown_085F521C = {
+ .y = 160, .shape = ST_OAM_H_RECTANGLE, .size = 3, .priority = 1
+};
+
+static const union AnimCmd gUnknown_085F5224[] = {
+ ANIMCMD_FRAME( 0, 8),
+ ANIMCMD_FRAME( 32, 8),
+ ANIMCMD_FRAME( 64, 8),
+ ANIMCMD_FRAME( 96, 8),
+ ANIMCMD_JUMP(0)
+};
+
+static const union AnimCmd *const gUnknown_085F5238[] = {
+ gUnknown_085F5224
+};
+
+static const struct SpriteTemplate gUnknown_085F523C = {
+ 1001, 1002, &gUnknown_085F521C, gUnknown_085F5238, NULL, gDummySpriteAffineAnimTable, sub_817B7C4
+};
+
+static const struct SpriteTemplate gUnknown_085F5254 = {
+ 1001, 1003, &gUnknown_085F521C, gUnknown_085F5238, NULL, gDummySpriteAffineAnimTable, sub_817B7C4
+};
+
+static const struct OamData gUnknown_085F526C = {
+ .y = 160, .shape = ST_OAM_SQUARE, .size = 3, .priority = 1
+};
+
+static const union AnimCmd gUnknown_085F5274[] = {
+ ANIMCMD_FRAME( 0, 16),
+ ANIMCMD_END
+};
+
+static const union AnimCmd gUnknown_085F527C[] = {
+ ANIMCMD_FRAME( 64, 16),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const gUnknown_085F5284[] = {
+ gUnknown_085F5274,
+ gUnknown_085F527C
+};
+
+static const struct SpriteTemplate gUnknown_085F528C = {
+ 1004, 1004, &gUnknown_085F526C, gUnknown_085F5284, NULL, gDummySpriteAffineAnimTable, nullsub_66
+};
+
+static const struct SpriteTemplate gUnknown_085F52A4 = {
+ 1005, 1005, &gUnknown_085F526C, gUnknown_085F5284, NULL, gDummySpriteAffineAnimTable, nullsub_66
+};
+
+const struct CompressedSpriteSheet gIntro2BrendanSpriteSheet[] = {
+ { gIntro2BrendanNoTurnGfx, 0x2000, 1002 },
+ { NULL }
+};
+
+const struct CompressedSpriteSheet gIntro2MaySpriteSheet[] = {
+ { gIntro2MayNoTurnGfx, 0x2000, 1003 },
+ { NULL }
+};
+
+const struct CompressedSpriteSheet gIntro2BicycleSpriteSheet[] = {
+ { gIntro2BicycleTiles, 0x1000, 1001 },
+ { NULL }
+};
+
+static const struct CompressedSpriteSheet gUnknown_085F52EC[] = {
+ { gIntro2FlygonGfx, 0x1000, 1004 },
+ { NULL }
+};
+
+const struct CompressedSpriteSheet gIntro2FlygonSpriteSheet[] = {
+ { gIntro2FlygonGfx, 0x1000, 1005 },
+ { NULL }
+};
+
+const struct SpritePalette gUnknown_085F530C[] = {
+ { gIntro2BrendanNoTurnPal, 1002 },
+ { gIntro2BrendanNoTurnPal, 1003 },
+ { gIntro2FlygonPal, 1004 },
+ { gIntro2FlygonPal, 1005 },
+ { NULL }
+};
+
+const struct CompressedSpriteSheet gUnknown_085F5334[] = {
+ { gIntro2BrendanTiles, 0x3800, 1002 },
+ { NULL }
+};
+
+const struct CompressedSpriteSheet gUnknown_085F5344[] = {
+ { gIntro2MayTiles, 0x3800, 1003 },
+ { NULL }
+};
+
+const struct CompressedSpriteSheet gUnknown_085F5354[] = {
+ { gIntro2BicycleTiles, 0x1000, 1001 },
+ { NULL }
+};
+
+static const struct CompressedSpriteSheet gUnknown_085F5364[] = {
+ { gIntro2LatiosTiles, 0x1000, 1004 },
+ { NULL }
+};
+
+static const struct CompressedSpriteSheet gUnknown_085F5374[] = {
+ { gIntro2LatiasTiles, 0x1000, 1005 },
+ { NULL }
+};
+
+const struct SpritePalette gUnknown_085F5384[] = {
+ { gIntro2BrendanPalette, 1002 },
+ { gIntro2MayPalette, 1003 },
+ { gIntro2LatiosPalette, 1004 },
+ { gIntro2LatiasPalette, 1005 },
+ { NULL }
+};
+
+const struct CompressedSpriteSheet gUnknown_085F53AC[] = {
+ { gIntro2BrendanTiles, 0x2000, 1002},
+ { NULL }
+};
+
+const struct CompressedSpriteSheet gUnknown_085F53BC[] = {
+ { gIntro2MayTiles, 0x2000, 1003},
+ { NULL }
+};
+
+EWRAM_DATA u16 gUnknown_0203BD24 = 0;
+EWRAM_DATA s16 gUnknown_0203BD26 = 0;
+EWRAM_DATA s16 gUnknown_0203BD28 = 0;
+
+static void sub_817B76C(void);
+static void sub_817B788(void);
+static void sub_817B7A4(void);
+static void sub_817B458(u8);
+
+void load_intro_part2_graphics(u8 a)
+{
+ LZ77UnCompVram(&gUnknown_085F0740, (void *)(VRAM + 0x4000));
+ LZ77UnCompVram(&gUnknown_085F0BC0, (void *)(VRAM + 0x7800));
+ LoadPalette(&gUnknown_085F06E0, 240, 32);
+ switch (a)
+ {
+ case 0:
+ default:
+ LZ77UnCompVram(&gUnknown_085F0DBC, (void *)(VRAM));
+ LZ77UnCompVram(&gUnknown_085F1398, (void *)(VRAM + 0x3000));
+ LoadPalette(&gUnknown_085F0CFC, 0, 96);
+ LoadCompressedObjectPic(gUnknown_085F5064);
+ LoadPalette(&gUnknown_085F1668, 256, 32);
+ sub_817B76C();
+ break;
+ case 1:
+ LZ77UnCompVram(&gUnknown_085F1824, (void *)(VRAM));
+ LZ77UnCompVram(&gUnknown_085F1EAC, (void *)(VRAM + 0x3000));
+ LoadPalette(&gUnknown_085F17E4, 0, 32);
+ LoadCompressedObjectPic(gUnknown_085F50EC);
+ LoadPalette(&gUnknown_085F21B0, 256, 32);
+ sub_817B788();
+ break;
+ }
+ gUnknown_0203BD28 = 0;
+ gReservedSpritePaletteCount = 8;
+}
+
+void sub_817B150(u8 a)
+{
+ switch (a)
+ {
+ default:
+ case 0:
+ SetGpuReg(REG_OFFSET_BG3CNT, BGCNT_PRIORITY(3)
+ | BGCNT_CHARBASE(0)
+ | BGCNT_16COLOR
+ | BGCNT_SCREENBASE(6)
+ | BGCNT_TXT256x256);
+ SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2)
+ | BGCNT_CHARBASE(0)
+ | BGCNT_16COLOR
+ | BGCNT_SCREENBASE(7)
+ | BGCNT_TXT256x256);
+ SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(1)
+ | BGCNT_CHARBASE(1)
+ | BGCNT_16COLOR
+ | BGCNT_SCREENBASE(15)
+ | BGCNT_TXT256x256);
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0
+ | DISPCNT_OBJ_1D_MAP
+ | DISPCNT_BG1_ON
+ | DISPCNT_BG2_ON
+ | DISPCNT_BG3_ON
+ | DISPCNT_OBJ_ON);
+ break;
+ case 1:
+ SetGpuReg(REG_OFFSET_BG3CNT, BGCNT_PRIORITY(3)
+ | BGCNT_CHARBASE(0)
+ | BGCNT_16COLOR
+ | BGCNT_SCREENBASE(6)
+ | BGCNT_TXT256x256);
+ SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2)
+ | BGCNT_CHARBASE(0)
+ | BGCNT_16COLOR
+ | BGCNT_SCREENBASE(7)
+ | BGCNT_TXT256x256);
+ SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(1)
+ | BGCNT_CHARBASE(1)
+ | BGCNT_16COLOR
+ | BGCNT_SCREENBASE(15)
+ | BGCNT_TXT256x256);
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0
+ | DISPCNT_OBJ_1D_MAP
+ | DISPCNT_BG1_ON
+ | DISPCNT_BG2_ON
+ | DISPCNT_BG3_ON
+ | DISPCNT_OBJ_ON);
+ break;
+ case 2:
+ SetGpuReg(REG_OFFSET_BG3CNT, BGCNT_PRIORITY(3)
+ | BGCNT_CHARBASE(0)
+ | BGCNT_16COLOR
+ | BGCNT_SCREENBASE(6)
+ | BGCNT_TXT256x256);
+ SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2)
+ | BGCNT_CHARBASE(0)
+ | BGCNT_16COLOR
+ | BGCNT_SCREENBASE(7)
+ | BGCNT_TXT256x256);
+ SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(1)
+ | BGCNT_CHARBASE(1)
+ | BGCNT_16COLOR
+ | BGCNT_SCREENBASE(15)
+ | BGCNT_TXT256x256);
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0
+ | DISPCNT_OBJ_1D_MAP
+ | DISPCNT_BG1_ON
+ | DISPCNT_BG2_ON
+ | DISPCNT_BG3_ON
+ | DISPCNT_OBJ_ON);
+ break;
+ }
+}
+
+void sub_817B1C8(u8 a)
+{
+ LZ77UnCompVram(&gUnknown_085F0740, (void *)(VRAM + 0x4000));
+ LZ77UnCompVram(&gUnknown_085F0BC0, (void *)(VRAM + 0x7800));
+ switch (a)
+ {
+ case 0:
+ default:
+ LoadPalette(&gUnknown_085F06E0, 240, 32);
+ LZ77UnCompVram(&gUnknown_085F0DBC, (void *)(VRAM));
+ LZ77UnCompVram(&gUnknown_085F1398, (void *)(VRAM + 0x3000));
+ LoadPalette(&gUnknown_085F0CFC, 0, 96);
+ LoadCompressedObjectPic(gUnknown_085F5064);
+ LZ77UnCompVram(&gUnknown_085F16A8, (void *)(VRAM + 0x10000));
+ LoadPalette(&gUnknown_085F1668, 256, 32);
+ sub_817B76C();
+ break;
+ case 1:
+ LoadPalette(&gUnknown_085F0700, 240, 32);
+ LZ77UnCompVram(&gUnknown_085F0DBC, (void *)(VRAM));
+ LZ77UnCompVram(&gUnknown_085F1398, (void *)(VRAM + 0x3000));
+ LoadPalette(&gUnknown_085F0D5C, 0, 96);
+ LoadCompressedObjectPic(gUnknown_085F5064);
+ LZ77UnCompVram(&gUnknown_085F16A8, (void *)(VRAM + 0x10000));
+ LoadPalette(&gUnknown_085F1688, 256, 32);
+ sub_817B76C();
+ break;
+ case 2:
+ case 3:
+ LoadPalette(&gUnknown_085F0700, 240, 32);
+ LZ77UnCompVram(&gUnknown_085F1824, (void *)(VRAM));
+ LZ77UnCompVram(&gUnknown_085F1EAC, (void *)(VRAM + 0x3000));
+ LoadPalette(&gUnknown_085F1804, 0, 32);
+ LoadCompressedObjectPic(gUnknown_085F50EC);
+ LoadPalette(&gUnknown_085F1804, 256, 32);
+ sub_817B788();
+ break;
+ case 4:
+ LoadPalette(&gUnknown_085F0720, 240, 32);
+ LZ77UnCompVram(&gUnknown_085F235C, (void *)(VRAM));
+ LZ77UnCompVram(&gUnknown_085F2568, (void *)(VRAM + 0x3000));
+ LoadPalette(&gUnknown_085F231C, 0, 64);
+ LoadCompressedObjectPic(gUnknown_085F5180);
+ LoadPalette(&gUnknown_085F2548, 256, 32);
+ sub_817B7A4();
+ break;
+ }
+ gReservedSpritePaletteCount = 8;
+ gUnknown_0203BD28 = 0;
+}
+
+void sub_817B3A8(u8 a)
+{
+ SetGpuReg(REG_OFFSET_BG3CNT, BGCNT_PRIORITY(3)
+ | BGCNT_CHARBASE(0)
+ | BGCNT_16COLOR
+ | BGCNT_SCREENBASE(6)
+ | BGCNT_TXT256x256);
+ SetGpuReg(REG_OFFSET_BG2CNT, BGCNT_PRIORITY(2)
+ | BGCNT_CHARBASE(0)
+ | BGCNT_16COLOR
+ | BGCNT_SCREENBASE(7)
+ | BGCNT_TXT256x256);
+ SetGpuReg(REG_OFFSET_BG1CNT, BGCNT_PRIORITY(1)
+ | BGCNT_CHARBASE(1)
+ | BGCNT_16COLOR
+ | BGCNT_SCREENBASE(15)
+ | BGCNT_TXT256x256);
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0
+ | DISPCNT_OBJ_1D_MAP
+ | DISPCNT_BG_ALL_ON
+ | DISPCNT_OBJ_ON);
+}
+
+u8 sub_817B3DC(u8 a, u16 b, u16 c, u16 d)
+{
+ u8 taskId = CreateTask(&sub_817B458, 0);
+
+ gTasks[taskId].data[0] = a;
+ gTasks[taskId].data[1] = b;
+ gTasks[taskId].data[2] = 0;
+ gTasks[taskId].data[3] = 0;
+ gTasks[taskId].data[4] = c;
+ gTasks[taskId].data[5] = 0;
+ gTasks[taskId].data[6] = 0;
+ gTasks[taskId].data[7] = d;
+ gTasks[taskId].data[8] = 8;
+ gTasks[taskId].data[9] = 0;
+ sub_817B458(taskId);
+ return taskId;
+}
+
+static void sub_817B458(u8 taskId)
+{
+ s16 data1;
+ s16 data4;
+ s16 data7;
+ s32 r2;
+
+ data1 = gTasks[taskId].data[1];
+ if (data1 != 0)
+ {
+ r2 = (gTasks[taskId].data[2] << 16) + (u16)gTasks[taskId].data[3];
+ r2 -= (u16)data1 << 4;
+ gTasks[taskId].data[2] = r2 >> 16;
+ gTasks[taskId].data[3] = r2;
+ SetGpuReg(REG_OFFSET_BG1HOFS, gTasks[taskId].data[2]);
+ SetGpuReg(REG_OFFSET_BG1VOFS, gUnknown_0203BD24 + gUnknown_0203BD26);
+ }
+
+ data4 = gTasks[taskId].data[4];
+ if (data4 != 0)
+ {
+ r2 = (gTasks[taskId].data[5] << 16) + (u16)gTasks[taskId].data[6];
+ r2 -= (u16)data4 << 4;
+ gTasks[taskId].data[5] = r2 >> 16;
+ gTasks[taskId].data[6] = r2;
+ SetGpuReg(REG_OFFSET_BG2HOFS, gTasks[taskId].data[5]);
+ if (gTasks[taskId].data[0] != 0)
+ SetGpuReg(REG_OFFSET_BG2VOFS, gUnknown_0203BD24 + gUnknown_0203BD26);
+ else
+ SetGpuReg(REG_OFFSET_BG2VOFS, gUnknown_0203BD24);
+ }
+
+ data7 = gTasks[taskId].data[7];
+ if (data7 != 0)
+ {
+ r2 = (gTasks[taskId].data[8] << 16) + (u16)gTasks[taskId].data[9];
+ r2 -= (u16)data7 << 4;
+ gTasks[taskId].data[8] = r2 >> 16;
+ gTasks[taskId].data[9] = r2;
+ SetGpuReg(REG_OFFSET_BG3HOFS, gTasks[taskId].data[8]);
+ SetGpuReg(REG_OFFSET_BG3VOFS, gUnknown_0203BD24);
+ }
+}
+
+void sub_817B540(u8 mode)
+{
+ u16 x;
+ u16 y;
+ switch (mode)
+ {
+ case 0:
+ default:
+ /* stuff */
+ if (gMain.vblankCounter1 & 3 || gPaletteFade.active)
+ break;
+ if (gMain.vblankCounter1 & 4)
+ {
+ x = gPlttBufferUnfaded[9];
+ y = gPlttBufferUnfaded[10];
+ }
+ else
+ {
+ x = gPlttBufferUnfaded[10];
+ y = gPlttBufferUnfaded[9];
+ }
+ LoadPalette(&x, 9, 2);
+ LoadPalette(&y, 10, 2);
+ break;
+ case 2:
+ if (gMain.vblankCounter1 & 3 || gPaletteFade.active)
+ break;
+ if (gMain.vblankCounter1 & 4)
+ {
+ x = 0x3D27;
+ y = 0x295;
+ }
+ else
+ {
+ x = 0x31C;
+ y = 0x3D27;
+ }
+ LoadPalette(&x, 12, 2);
+ LoadPalette(&y, 13, 2);
+ break;
+ case 1:
+ break;
+ }
+}
+
+static void sub_817B62C(struct Sprite *sprite)
+{
+ s32 var;
+ s16 var2 = gUnknown_0203BD28;
+
+ if (var2 != 2)
+ {
+ switch (var2)
+ {
+ default:
+ DestroySprite(sprite);
+ break;
+ case 0:
+ var = ((sprite->pos1.x << 16) | (u16)sprite->data[2]) + (u16)sprite->data[1];
+ sprite->pos1.x = var >> 16;
+ sprite->data[2] = var;
+ if (sprite->pos1.x > 0xFF)
+ sprite->pos1.x = -0x20;
+ if (sprite->data[0])
+ sprite->pos2.y = -(gUnknown_0203BD24 + gUnknown_0203BD26);
+ else
+ sprite->pos2.y = -gUnknown_0203BD24;
+ break;
+ }
+ }
+}
+
+static void sub_817B698(u8 a, const struct IntroCreditsSpriteMetadata *b, const union AnimCmd *const *c, u8 d)
+{
+ u8 i;
+
+ for(i = 0; i < d; i++)
+ {
+ u8 sprite = CreateSprite(&gUnknown_085F504C, b[i].x, b[i].y, b[i].subpriority);
+ CalcCenterToCornerVec(&gSprites[sprite], b[i].shape, b[i].size, 0);
+ gSprites[sprite].oam.priority = 3;
+ gSprites[sprite].oam.shape = b[i].shape;
+ gSprites[sprite].oam.size = b[i].size;
+ gSprites[sprite].oam.paletteNum = 0;
+ gSprites[sprite].anims = c;
+ StartSpriteAnim(&gSprites[sprite], b[i].animNum);
+ gSprites[sprite].data[0] = a;
+ gSprites[sprite].data[1] = b[i].xOff;
+ gSprites[sprite].data[2] = 0;
+ }
+}
+
+static void sub_817B76C(void)
+{
+ sub_817B698(0, gUnknown_085F50A4, gUnknown_085F5094, 9);
+}
+
+static void sub_817B788(void)
+{
+ sub_817B698(1, gUnknown_085F5120, gUnknown_085F5114, 12);
+}
+
+static void sub_817B7A4(void)
+{
+ sub_817B698(1, gUnknown_085F519C, gUnknown_085F5198, 6);
+}
+
+static void nullsub_65(struct Sprite *sprite)
+{
+}
+
+static void sub_817B7C4(struct Sprite* sprite)
+{
+ sprite->invisible = gSprites[sprite->data[0]].invisible;
+ sprite->pos1.x = gSprites[sprite->data[0]].pos1.x;
+ sprite->pos1.y = gSprites[sprite->data[0]].pos1.y + 8;
+ sprite->pos2.x = gSprites[sprite->data[0]].pos2.x;
+ sprite->pos2.y = gSprites[sprite->data[0]].pos2.y;
+}
+
+u8 intro_create_brendan_sprite(s16 a, s16 b)
+{
+ u8 sprite = CreateSprite(&gUnknown_085F51EC, a, b, 2);
+ u8 brendan = CreateSprite(&gUnknown_085F523C, a, b + 8, 3);
+ gSprites[brendan].data[0] = sprite;
+ return sprite;
+}
+
+u8 intro_create_may_sprite(s16 a, s16 b)
+{
+ u8 sprite = CreateSprite(&gUnknown_085F5204, a, b, 2);
+ u8 may = CreateSprite(&gUnknown_085F5254, a, b + 8, 3);
+ gSprites[may].data[0] = sprite;
+ return sprite;
+}
+
+static void nullsub_66(struct Sprite *sprite)
+{
+}
+
+static void sub_817B8E8(struct Sprite* sprite)
+{
+ sprite->invisible = gSprites[sprite->data[0]].invisible;
+ sprite->pos1.y = gSprites[sprite->data[0]].pos1.y;
+ sprite->pos2.x = gSprites[sprite->data[0]].pos2.x;
+ sprite->pos2.y = gSprites[sprite->data[0]].pos2.y;
+}
+
+static u8 sub_817B948(s16 a, s16 b)
+{
+ u8 sprite = CreateSprite(&gUnknown_085F528C, a - 32, b, 5);
+ u8 latios = CreateSprite(&gUnknown_085F528C, a + 32, b, 6);
+ gSprites[latios].data[0] = sprite;
+ StartSpriteAnim(&gSprites[latios], 1);
+ gSprites[latios].callback = &sub_817B8E8;
+ return sprite;
+}
+
+u8 intro_create_flygon_sprite(s16 a, s16 b)
+{
+ u8 sprite = CreateSprite(&gUnknown_085F52A4, a - 32, b, 5);
+ u8 flygon = CreateSprite(&gUnknown_085F52A4, a + 32, b, 6);
+ gSprites[flygon].data[0] = sprite;
+ StartSpriteAnim(&gSprites[flygon], 1);
+ gSprites[flygon].callback = &sub_817B8E8;
+ return sprite;
+}
diff --git a/src/item.c b/src/item.c
index ef815fb81..319d167fc 100644
--- a/src/item.c
+++ b/src/item.c
@@ -5,41 +5,48 @@
#include "string_util.h"
#include "text.h"
#include "event_data.h"
+#include "malloc.h"
+#include "secret_base.h"
+#include "item_menu.h"
+#include "strings.h"
+#include "load_save.h"
-extern void ApplyNewEncryptionKeyToHword(u16* hword, u32 newKey);
extern bool8 InBattlePyramid(void);
+extern u16 gUnknown_0203CF30[];
+extern const struct Item gItems[];
-extern const u8 gText_PokeBalls[];
-extern const u8 gText_Berries[];
-extern const u8 gText_Berry[];
+// this file's functions
+static bool8 CheckPyramidBagHasItem(u16 itemId, u16 count);
+static bool8 CheckPyramidBagHasSpace(u16 itemId, u16 count);
-bool8 CheckPyramidBagHasItem(u16 itemId, u16 count);
-bool8 CheckPyramidBagHasSpace(u16 itemId, u16 count);
+// EWRAM variables
+EWRAM_DATA struct BagPocket gBagPockets[POCKETS_COUNT] = {0};
-u16 GetBagItemQuantity(u16* quantity)
+// code
+static u16 GetBagItemQuantity(u16 *quantity)
{
return gSaveBlock2Ptr->encryptionKey ^ *quantity;
}
-void SetBagItemQuantity(u16* quantity, u16 newValue)
+static void SetBagItemQuantity(u16 *quantity, u16 newValue)
{
*quantity = newValue ^ gSaveBlock2Ptr->encryptionKey;
}
-u16 GetBagItemId(u16* slot)
+static u16 GetPCItemQuantity(u16 *quantity)
{
- return *slot;
+ return *quantity;
}
-void SetBagItemId(u16* slot, u16 newItemId)
+static void SetPCItemQuantity(u16 *quantity, u16 newValue)
{
- *slot = newItemId;
+ *quantity = newValue;
}
void ApplyNewEncryptionKeyToBagItems(u32 newKey)
{
u32 pocket, item;
- for (pocket = 0; pocket < 5; pocket++)
+ for (pocket = 0; pocket < POCKETS_COUNT; pocket++)
{
for (item = 0; item < gBagPockets[pocket].capacity; item++)
ApplyNewEncryptionKeyToHword(&(gBagPockets[pocket].itemSlots[item].quantity), newKey);
@@ -51,58 +58,57 @@ void ApplyNewEncryptionKeyToBagItems_(u32 newKey) // really GF?
ApplyNewEncryptionKeyToBagItems(newKey);
}
-// TODO: move those max values to defines
-
void SetBagItemsPointers(void)
{
- gBagPockets[BAG_ITEMS - 1].itemSlots = gSaveBlock1Ptr->bagPocket_Items;
- gBagPockets[BAG_ITEMS - 1].capacity = 30;
+ gBagPockets[ITEMS_POCKET].itemSlots = gSaveBlock1Ptr->bagPocket_Items;
+ gBagPockets[ITEMS_POCKET].capacity = BAG_ITEMS_COUNT;
- gBagPockets[BAG_KEYITEMS - 1].itemSlots = gSaveBlock1Ptr->bagPocket_KeyItems;
- gBagPockets[BAG_KEYITEMS - 1].capacity = 30;
+ gBagPockets[KEYITEMS_POCKET].itemSlots = gSaveBlock1Ptr->bagPocket_KeyItems;
+ gBagPockets[KEYITEMS_POCKET].capacity = BAG_KEYITEMS_COUNT;
- gBagPockets[BAG_POKEBALLS - 1].itemSlots = gSaveBlock1Ptr->bagPocket_PokeBalls;
- gBagPockets[BAG_POKEBALLS - 1].capacity = 16;
+ gBagPockets[BALLS_POCKET].itemSlots = gSaveBlock1Ptr->bagPocket_PokeBalls;
+ gBagPockets[BALLS_POCKET].capacity = BAG_POKEBALLS_COUNT;
- gBagPockets[BAG_TMsHMs - 1].itemSlots = gSaveBlock1Ptr->bagPocket_TMHM;
- gBagPockets[BAG_TMsHMs - 1].capacity = 64;
+ gBagPockets[TMHM_POCKET].itemSlots = gSaveBlock1Ptr->bagPocket_TMHM;
+ gBagPockets[TMHM_POCKET].capacity = BAG_TMHM_COUNT;
- gBagPockets[BAG_BERRIES - 1].itemSlots = gSaveBlock1Ptr->bagPocket_Berries;
- gBagPockets[BAG_BERRIES - 1].capacity = 46;
+ gBagPockets[BERRIES_POCKET].itemSlots = gSaveBlock1Ptr->bagPocket_Berries;
+ gBagPockets[BERRIES_POCKET].capacity = BAG_BERRIES_COUNT;
}
-void CopyItemName(u16 itemId, u8 *string)
+void CopyItemName(u16 itemId, u8 *dst)
{
- StringCopy(string, ItemId_GetItem(itemId)->name);
+ StringCopy(dst, ItemId_GetName(itemId));
}
-void CopyItemNameHandlePlural(u16 itemId, u8 *string, u32 quantity)
+void CopyItemNameHandlePlural(u16 itemId, u8 *dst, u32 quantity)
{
if (itemId == ITEM_POKE_BALL)
{
if (quantity < 2)
- StringCopy(string, ItemId_GetItem(ITEM_POKE_BALL)->name);
+ StringCopy(dst, ItemId_GetName(ITEM_POKE_BALL));
else
- StringCopy(string, gText_PokeBalls);
+ StringCopy(dst, gText_PokeBalls);
}
else
{
if (itemId >= ITEM_CHERI_BERRY && itemId <= ITEM_ENIGMA_BERRY)
- GetBerryCountString(string, gBerries[itemId - ITEM_CHERI_BERRY].name, quantity);
+ GetBerryCountString(dst, gBerries[itemId - ITEM_CHERI_BERRY].name, quantity);
else
- StringCopy(string, ItemId_GetItem(itemId)->name);
+ StringCopy(dst, ItemId_GetName(itemId));
}
}
-void GetBerryCountString(u8* dst, const u8* berryName, u32 quantity)
+void GetBerryCountString(u8 *dst, const u8 *berryName, u32 quantity)
{
- const u8* berryString;
- u8* txtPtr;
+ const u8 *berryString;
+ u8 *txtPtr;
if (quantity < 2)
berryString = gText_Berry;
else
berryString = gText_Berries;
+
txtPtr = StringCopy(dst, berryName);
*txtPtr = CHAR_SPACE;
StringCopy(txtPtr + 1, berryString);
@@ -127,21 +133,21 @@ bool8 CheckBagHasItem(u16 itemId, u16 count)
if (ItemId_GetPocket(itemId) == 0)
return FALSE;
- if (InBattlePyramid() || FlagGet(0x4004) == TRUE)
+ if (InBattlePyramid() || FlagGet(FLAG_SPECIAL_FLAG_0x4004) == TRUE)
return CheckPyramidBagHasItem(itemId, count);
pocket = ItemId_GetPocket(itemId) - 1;
- //Check for item slots that contain the item
+ // Check for item slots that contain the item
for (i = 0; i < gBagPockets[pocket].capacity; i++)
{
if (gBagPockets[pocket].itemSlots[i].itemId == itemId)
{
u16 quantity;
- //Does this item slot contain enough of the item?
+ // Does this item slot contain enough of the item?
quantity = GetBagItemQuantity(&gBagPockets[pocket].itemSlots[i].quantity);
if (quantity >= count)
return TRUE;
count -= quantity;
- //Does this item slot and all previous slots contain enough of the item?
+ // Does this item slot and all previous slots contain enough of the item?
if (count == 0)
return TRUE;
}
@@ -152,69 +158,945 @@ bool8 CheckBagHasItem(u16 itemId, u16 count)
bool8 HasAtLeastOneBerry(void)
{
u16 i;
- for (i = 0x85; i < 0xB3; i++)
+
+ for (i = FIRST_BERRY_INDEX; i < ITEM_BRIGHT_POWDER; i++)
{
if (CheckBagHasItem(i, 1) == TRUE)
{
- gSpecialVar_Result = 1;
+ gSpecialVar_Result = TRUE;
return TRUE;
}
}
- gSpecialVar_Result = 0;
+ gSpecialVar_Result = FALSE;
return FALSE;
}
-/* Refuses to match.
+#ifdef NONMATCHING
+// Refuses to match.
bool8 CheckBagHasSpace(u16 itemId, u16 count)
{
u8 i;
- u8 pocket;
- u16 slotCapacity;
- u16 quantity;
- if (ItemId_GetPocket(itemId) == 0)
+ if (ItemId_GetPocket(itemId) == POCKET_NONE)
return FALSE;
- if (InBattlePyramid() || FlagGet(0x4004) == TRUE)
+
+ if (InBattlePyramid() || FlagGet(FLAG_SPECIAL_FLAG_0x4004) == TRUE)
+ {
return CheckPyramidBagHasSpace(itemId, count);
- pocket = ItemId_GetPocket(itemId) - 1;
- if (pocket != BAG_BERRIES)
- slotCapacity = 99;
+ }
else
- slotCapacity = 999;
+ {
+ u8 pocket;
+ u16 slotCapacity;
+ u16 ownedCount;
- //Check space in any existing item slots that already contain this item
- for (i = 0; i < gBagPockets[pocket].capacity; i++)
+ pocket = ItemId_GetPocket(itemId) - 1;
+ if (pocket != BERRIES_POCKET)
+ slotCapacity = 99;
+ else
+ slotCapacity = 999;
+
+ // Check space in any existing item slots that already contain this item
+ for (i = 0; i < gBagPockets[pocket].capacity; i++)
+ {
+ if (gBagPockets[pocket].itemSlots[i].itemId == itemId)
+ {
+ ownedCount = GetBagItemQuantity(&gBagPockets[pocket].itemSlots[i].quantity);
+ if (ownedCount + count <= slotCapacity)
+ return TRUE;
+ if (pocket == TMHM_POCKET || pocket == BERRIES_POCKET)
+ return FALSE;
+ count -= slotCapacity - ownedCount;
+ if (count == 0)
+ return TRUE;
+ }
+ }
+
+ // Check space in empty item slots
+ if (count > 0)
+ {
+ for (i = 0; i < gBagPockets[pocket].capacity; i++)
+ {
+ if (gBagPockets[pocket].itemSlots[i].itemId == 0)
+ {
+ if (count <= slotCapacity)
+ return TRUE;
+ if (pocket == TMHM_POCKET || pocket == BERRIES_POCKET)
+ return FALSE;
+ count -= slotCapacity;
+ }
+ }
+ if (count > 0)
+ return FALSE; // No more item slots. The bag is full
+ }
+
+ return TRUE;
+ }
+}
+#else
+NAKED
+bool8 CheckBagHasSpace(u16 itemId, u16 count)
+{
+ asm_unified("push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, 0x4\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ mov r8, r0\n\
+ lsls r1, 16\n\
+ lsrs r5, r1, 16\n\
+ bl ItemId_GetPocket\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ beq _080D6906\n\
+ bl InBattlePyramid\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ bne _080D6838\n\
+ ldr r0, =0x00004004\n\
+ bl FlagGet\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, 0x1\n\
+ bne _080D684C\n\
+_080D6838:\n\
+ mov r0, r8\n\
+ adds r1, r5, 0\n\
+ bl CheckPyramidBagHasSpace\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ b _080D6916\n\
+ .pool\n\
+_080D684C:\n\
+ mov r0, r8\n\
+ bl ItemId_GetPocket\n\
+ subs r0, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r2, r0, 24\n\
+ ldr r7, =0x000003e7\n\
+ cmp r2, 0x3\n\
+ beq _080D6860\n\
+ movs r7, 0x63\n\
+_080D6860:\n\
+ movs r6, 0\n\
+ ldr r1, =gBagPockets\n\
+ lsls r4, r2, 3\n\
+ adds r0, r4, r1\n\
+ mov r9, r4\n\
+ ldrb r0, [r0, 0x4]\n\
+ cmp r6, r0\n\
+ bcs _080D68BC\n\
+ subs r0, r2, 0x2\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r10, r0\n\
+_080D6878:\n\
+ adds r0, r4, r1\n\
+ ldr r1, [r0]\n\
+ lsls r0, r6, 2\n\
+ adds r1, r0, r1\n\
+ ldrh r0, [r1]\n\
+ cmp r0, r8\n\
+ bne _080D68AC\n\
+ adds r0, r1, 0x2\n\
+ str r2, [sp]\n\
+ bl GetBagItemQuantity\n\
+ lsls r0, 16\n\
+ lsrs r1, r0, 16\n\
+ adds r0, r1, r5\n\
+ ldr r2, [sp]\n\
+ cmp r0, r7\n\
+ ble _080D6914\n\
+ mov r0, r10\n\
+ cmp r0, 0x1\n\
+ bls _080D6906\n\
+ subs r0, r7, r1\n\
+ subs r0, r5, r0\n\
+ lsls r0, 16\n\
+ lsrs r5, r0, 16\n\
+ cmp r5, 0\n\
+ beq _080D6914\n\
+_080D68AC:\n\
+ adds r0, r6, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r6, r0, 24\n\
+ ldr r1, =gBagPockets\n\
+ adds r0, r4, r1\n\
+ ldrb r0, [r0, 0x4]\n\
+ cmp r6, r0\n\
+ bcc _080D6878\n\
+_080D68BC:\n\
+ cmp r5, 0\n\
+ beq _080D6914\n\
+ movs r6, 0\n\
+ ldr r3, =gBagPockets\n\
+ mov r1, r9\n\
+ adds r0, r1, r3\n\
+ ldrb r0, [r0, 0x4]\n\
+ cmp r6, r0\n\
+ bcs _080D6902\n\
+ adds r4, r3, 0\n\
+ subs r0, r2, 0x2\n\
+ lsls r0, 24\n\
+ lsrs r2, r0, 24\n\
+_080D68D6:\n\
+ adds r0, r1, r4\n\
+ ldr r1, [r0]\n\
+ lsls r0, r6, 2\n\
+ adds r0, r1\n\
+ ldrh r0, [r0]\n\
+ cmp r0, 0\n\
+ bne _080D68F2\n\
+ cmp r5, r7\n\
+ bls _080D6914\n\
+ cmp r2, 0x1\n\
+ bls _080D6906\n\
+ subs r0, r5, r7\n\
+ lsls r0, 16\n\
+ lsrs r5, r0, 16\n\
+_080D68F2:\n\
+ adds r0, r6, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r6, r0, 24\n\
+ mov r1, r9\n\
+ adds r0, r1, r3\n\
+ ldrb r0, [r0, 0x4]\n\
+ cmp r6, r0\n\
+ bcc _080D68D6\n\
+_080D6902:\n\
+ cmp r5, 0\n\
+ beq _080D6914\n\
+_080D6906:\n\
+ movs r0, 0\n\
+ b _080D6916\n\
+ .pool\n\
+_080D6914:\n\
+ movs r0, 0x1\n\
+_080D6916:\n\
+ add sp, 0x4\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r1}\n\
+ bx r1");
+}
+#endif // NONMATCHING
+
+bool8 AddBagItem(u16 itemId, u16 count)
+{
+ u8 i;
+
+ if (ItemId_GetPocket(itemId) == POCKET_NONE)
+ return FALSE;
+
+ // check Battle Pyramid Bag
+ if (InBattlePyramid() || FlagGet(FLAG_SPECIAL_FLAG_0x4004) == TRUE)
{
- if (gBagPockets[pocket].itemSlots[i].itemId == itemId)
+ return AddPyramidBagItem(itemId, count);
+ }
+ else
+ {
+ struct BagPocket *itemPocket;
+ struct ItemSlot *newItems;
+ u16 slotCapacity;
+ u16 ownedCount;
+ u8 pocket = ItemId_GetPocket(itemId) - 1;
+
+ itemPocket = &gBagPockets[pocket];
+ newItems = AllocZeroed(itemPocket->capacity * sizeof(struct ItemSlot));
+ memcpy(newItems, itemPocket->itemSlots, itemPocket->capacity * sizeof(struct ItemSlot));
+
+ if (pocket != BERRIES_POCKET)
+ slotCapacity = 99;
+ else
+ slotCapacity = 999;
+
+ for (i = 0; i < itemPocket->capacity; i++)
{
- quantity = GetBagItemQuantity(&gBagPockets[pocket].itemSlots[i].quantity);
- if (quantity + count <= slotCapacity)
- return TRUE;
- if (pocket == BAG_TMsHMs || pocket == BAG_BERRIES)
+ if (newItems[i].itemId == itemId)
+ {
+ ownedCount = GetBagItemQuantity(&newItems[i].quantity);
+ // check if won't exceed max slot capacity
+ if (ownedCount + count <= slotCapacity)
+ {
+ // successfully added to already existing item's count
+ SetBagItemQuantity(&newItems[i].quantity, ownedCount + count);
+
+ // goto SUCCESS_ADD_ITEM;
+ // is equivalent but won't match
+
+ memcpy(itemPocket->itemSlots, newItems, itemPocket->capacity * sizeof(struct ItemSlot));
+ Free(newItems);
+ return TRUE;
+ }
+ else
+ {
+ // try creating another instance of the item if possible
+ if (pocket == TMHM_POCKET || pocket == BERRIES_POCKET)
+ {
+ Free(newItems);
+ return FALSE;
+ }
+ else
+ {
+ count -= slotCapacity - ownedCount;
+ SetBagItemQuantity(&newItems[i].quantity, slotCapacity);
+ // don't create another instance of the item if it's at max slot capacity and count is equal to 0
+ if (count == 0)
+ {
+ goto SUCCESS_ADD_ITEM;
+ }
+ }
+ }
+ }
+ }
+
+ // we're done if quantity is equal to 0
+ if (count > 0)
+ {
+ // either no existing item was found or we have to create another instance, because the capacity was exceeded
+ for (i = 0; i < itemPocket->capacity; i++)
+ {
+ if (newItems[i].itemId == ITEM_NONE)
+ {
+ newItems[i].itemId = itemId;
+ if (count > slotCapacity)
+ {
+ // try creating a new slot with max capacity if duplicates are possible
+ if (pocket == TMHM_POCKET || pocket == BERRIES_POCKET)
+ {
+ Free(newItems);
+ return FALSE;
+ }
+ count -= slotCapacity;
+ SetBagItemQuantity(&newItems[i].quantity, slotCapacity);
+ }
+ else
+ {
+ // created a new slot and added quantity
+ SetBagItemQuantity(&newItems[i].quantity, count);
+ goto SUCCESS_ADD_ITEM;
+ }
+ }
+ }
+
+ if (count > 0)
+ {
+ Free(newItems);
return FALSE;
- count -= slotCapacity - quantity;
+ }
+ }
+
+ SUCCESS_ADD_ITEM:
+ memcpy(itemPocket->itemSlots, newItems, itemPocket->capacity * sizeof(struct ItemSlot));
+ Free(newItems);
+ return TRUE;
+ }
+}
+
+bool8 RemoveBagItem(u16 itemId, u16 count)
+{
+ u8 i;
+ u16 totalQuantity = 0;
+
+ if (ItemId_GetPocket(itemId) == POCKET_NONE || itemId == ITEM_NONE)
+ return FALSE;
+
+ // check Battle Pyramid Bag
+ if (InBattlePyramid() || FlagGet(FLAG_SPECIAL_FLAG_0x4004) == TRUE)
+ {
+ return RemovePyramidBagItem(itemId, count);
+ }
+ else
+ {
+ u8 pocket;
+ u8 var;
+ u16 ownedCount;
+ struct BagPocket *itemPocket;
+
+ pocket = ItemId_GetPocket(itemId) - 1;
+ itemPocket = &gBagPockets[pocket];
+
+ for (i = 0; i < itemPocket->capacity; i++)
+ {
+ if (itemPocket->itemSlots[i].itemId == itemId)
+ totalQuantity += GetBagItemQuantity(&itemPocket->itemSlots[i].quantity);
+ }
+
+ if (totalQuantity < count)
+ return FALSE; // We don't have enough of the item
+
+ if (CurrentMapIsSecretBase() == TRUE)
+ {
+ VarSet(VAR_0x40EE, VarGet(VAR_0x40EE) | 0x200);
+ VarSet(VAR_0x40ED, itemId);
+ }
+
+ var = sub_81ABB2C(pocket);
+ if (itemPocket->capacity > var
+ && itemPocket->itemSlots[var].itemId == itemId)
+ {
+ ownedCount = GetBagItemQuantity(&itemPocket->itemSlots[var].quantity);
+ if (ownedCount >= count)
+ {
+ SetBagItemQuantity(&itemPocket->itemSlots[var].quantity, ownedCount - count);
+ count = 0;
+ }
+ else
+ {
+ count -= ownedCount;
+ SetBagItemQuantity(&itemPocket->itemSlots[var].quantity, 0);
+ }
+
+ if (GetBagItemQuantity(&itemPocket->itemSlots[var].quantity) == 0)
+ itemPocket->itemSlots[var].itemId = ITEM_NONE;
+
if (count == 0)
return TRUE;
}
+
+ for (i = 0; i < itemPocket->capacity; i++)
+ {
+ if (itemPocket->itemSlots[i].itemId == itemId)
+ {
+ ownedCount = GetBagItemQuantity(&itemPocket->itemSlots[i].quantity);
+ if (ownedCount >= count)
+ {
+ SetBagItemQuantity(&itemPocket->itemSlots[i].quantity, ownedCount - count);
+ count = 0;
+ }
+ else
+ {
+ count -= ownedCount;
+ SetBagItemQuantity(&itemPocket->itemSlots[i].quantity, 0);
+ }
+
+ if (GetBagItemQuantity(&itemPocket->itemSlots[i].quantity) == 0)
+ itemPocket->itemSlots[i].itemId = ITEM_NONE;
+
+ if (count == 0)
+ return TRUE;
+ }
+ }
+ return TRUE;
}
+}
- //Check space in empty item slots
- if (count > 0)
+u8 GetPocketByItemId(u16 itemId)
+{
+ return ItemId_GetPocket(itemId);
+}
+
+void ClearItemSlots(struct ItemSlot *itemSlots, u8 itemCount)
+{
+ u16 i;
+
+ for (i = 0; i < itemCount; i++)
{
- for (i = 0; i < gBagPockets[pocket].capacity; i++)
+ itemSlots[i].itemId = ITEM_NONE;
+ SetBagItemQuantity(&itemSlots[i].quantity, 0);
+ }
+}
+
+static s32 FindFreePCItemSlot(void)
+{
+ s8 i;
+
+ for (i = 0; i < PC_ITEMS_COUNT; i++)
+ {
+ if (gSaveBlock1Ptr->pcItems[i].itemId == ITEM_NONE)
+ return i;
+ }
+ return -1;
+}
+
+u8 CountUsedPCItemSlots(void)
+{
+ u8 usedSlots = 0;
+ u8 i;
+
+ for (i = 0; i < PC_ITEMS_COUNT; i++)
+ {
+ if (gSaveBlock1Ptr->pcItems[i].itemId != ITEM_NONE)
+ usedSlots++;
+ }
+ return usedSlots;
+}
+
+bool8 CheckPCHasItem(u16 itemId, u16 count)
+{
+ u8 i;
+
+ for (i = 0; i < PC_ITEMS_COUNT; i++)
+ {
+ if (gSaveBlock1Ptr->pcItems[i].itemId == itemId && GetPCItemQuantity(&gSaveBlock1Ptr->pcItems[i].quantity) >= count)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+bool8 AddPCItem(u16 itemId, u16 count)
+{
+ u8 i;
+ s8 freeSlot;
+ u16 ownedCount;
+ struct ItemSlot *newItems;
+
+ // Copy PC items
+ newItems = AllocZeroed(sizeof(gSaveBlock1Ptr->pcItems));
+ memcpy(newItems, gSaveBlock1Ptr->pcItems, sizeof(gSaveBlock1Ptr->pcItems));
+
+ // Use any item slots that already contain this item
+ for (i = 0; i < PC_ITEMS_COUNT; i++)
+ {
+ if (newItems[i].itemId == itemId)
{
- if (gBagPockets[pocket].itemSlots[i].itemId == 0)
+ ownedCount = GetPCItemQuantity(&newItems[i].quantity);
+ if (ownedCount + count <= 999)
{
- if (count <= slotCapacity)
- return TRUE;
- if (pocket == BAG_TMsHMs || pocket == BAG_BERRIES)
- return FALSE;
- count -= slotCapacity;
+ SetPCItemQuantity(&newItems[i].quantity, ownedCount + count);
+ memcpy(gSaveBlock1Ptr->pcItems, newItems, sizeof(gSaveBlock1Ptr->pcItems));
+ Free(newItems);
+ return TRUE;
+ }
+ count += ownedCount - 999;
+ SetPCItemQuantity(&newItems[i].quantity, 999);
+ if (count == 0)
+ {
+ memcpy(gSaveBlock1Ptr->pcItems, newItems, sizeof(gSaveBlock1Ptr->pcItems));
+ Free(newItems);
+ return TRUE;
}
}
- if (count > 0)
- return FALSE; //No more item slots. The bag is full
}
+ // Put any remaining items into a new item slot.
+ if (count > 0)
+ {
+ freeSlot = FindFreePCItemSlot();
+ if (freeSlot == -1)
+ {
+ Free(newItems);
+ return FALSE;
+ }
+ else
+ {
+ newItems[freeSlot].itemId = itemId;
+ SetPCItemQuantity(&newItems[freeSlot].quantity, count);
+ }
+ }
+
+ // Copy items back to the PC
+ memcpy(gSaveBlock1Ptr->pcItems, newItems, sizeof(gSaveBlock1Ptr->pcItems));
+ Free(newItems);
return TRUE;
-}*/
+}
+
+void RemovePCItem(u8 index, u16 count)
+{
+ // UB: should use GetPCItemQuantity and SetPCItemQuantity functions
+ gSaveBlock1Ptr->pcItems[index].quantity -= count;
+ if (gSaveBlock1Ptr->pcItems[index].quantity == 0)
+ {
+ gSaveBlock1Ptr->pcItems[index].itemId = ITEM_NONE;
+ CompactPCItems();
+ }
+}
+
+void CompactPCItems(void)
+{
+ u16 i;
+ u16 j;
+
+ for (i = 0; i < PC_ITEMS_COUNT - 1; i++)
+ {
+ for (j = i + 1; j < PC_ITEMS_COUNT; j++)
+ {
+ if (gSaveBlock1Ptr->pcItems[i].itemId == 0)
+ {
+ struct ItemSlot temp = gSaveBlock1Ptr->pcItems[i];
+ gSaveBlock1Ptr->pcItems[i] = gSaveBlock1Ptr->pcItems[j];
+ gSaveBlock1Ptr->pcItems[j] = temp;
+ }
+ }
+ }
+}
+
+void SwapRegisteredBike(void)
+{
+ switch (gSaveBlock1Ptr->registeredItem)
+ {
+ case ITEM_MACH_BIKE:
+ gSaveBlock1Ptr->registeredItem = ITEM_ACRO_BIKE;
+ break;
+ case ITEM_ACRO_BIKE:
+ gSaveBlock1Ptr->registeredItem = ITEM_MACH_BIKE;
+ break;
+ }
+}
+
+u16 BagGetItemIdByPocketPosition(u8 pocketId, u16 pocketPos)
+{
+ return gBagPockets[pocketId - 1].itemSlots[pocketPos].itemId;
+}
+
+u16 BagGetQuantityByPocketPosition(u8 pocketId, u16 pocketPos)
+{
+ return GetBagItemQuantity(&gBagPockets[pocketId - 1].itemSlots[pocketPos].quantity);
+}
+
+static void SwapItemSlots(struct ItemSlot *a, struct ItemSlot *b)
+{
+ struct ItemSlot temp = *a;
+ *a = *b;
+ *b = temp;
+}
+
+void CompactItemsInBagPocket(struct BagPocket *bagPocket)
+{
+ u16 i, j;
+
+ for (i = 0; i < bagPocket->capacity - 1; i++)
+ {
+ for (j = i + 1; j < bagPocket->capacity; j++)
+ {
+ if (GetBagItemQuantity(&bagPocket->itemSlots[i].quantity) == 0)
+ SwapItemSlots(&bagPocket->itemSlots[i], &bagPocket->itemSlots[j]);
+ }
+ }
+}
+
+void SortBerriesOrTMHMs(struct BagPocket *bagPocket)
+{
+ u16 i, j;
+
+ for (i = 0; i < bagPocket->capacity - 1; i++)
+ {
+ for (j = i + 1; j < bagPocket->capacity; j++)
+ {
+ if (GetBagItemQuantity(&bagPocket->itemSlots[i].quantity) != 0)
+ {
+ if (GetBagItemQuantity(&bagPocket->itemSlots[j].quantity) == 0)
+ continue;
+ if (bagPocket->itemSlots[i].itemId <= bagPocket->itemSlots[j].itemId)
+ continue;
+ }
+ SwapItemSlots(&bagPocket->itemSlots[i], &bagPocket->itemSlots[j]);
+ }
+ }
+}
+
+void MoveItemSlotInList(struct ItemSlot* itemSlots_, u32 from, u32 to_)
+{
+ // dumb assignments needed to match
+ struct ItemSlot *itemSlots = itemSlots_;
+ u32 to = to_;
+
+ if (from != to)
+ {
+ s16 i, count;
+ struct ItemSlot firstSlot = itemSlots[from];
+
+ if (to > from)
+ {
+ to--;
+ for (i = from, count = to; i < count; i++)
+ itemSlots[i] = itemSlots[i + 1];
+ }
+ else
+ {
+ for (i = from, count = to; i > count; i--)
+ itemSlots[i] = itemSlots[i - 1];
+ }
+ itemSlots[to] = firstSlot;
+ }
+}
+
+void ClearBag(void)
+{
+ u16 i;
+
+ for (i = 0; i < POCKETS_COUNT; i++)
+ {
+ ClearItemSlots(gBagPockets[i].itemSlots, gBagPockets[i].capacity);
+ }
+}
+
+u16 CountTotalItemQuantityInBag(u16 itemId)
+{
+ u16 i;
+ u16 ownedCount = 0;
+ struct BagPocket *bagPocket = &gBagPockets[ItemId_GetPocket(itemId) - 1];
+
+ for (i = 0; i < bagPocket->capacity; i++)
+ {
+ if (bagPocket->itemSlots[i].itemId == itemId)
+ ownedCount += GetBagItemQuantity(&bagPocket->itemSlots[i].quantity);
+ }
+
+ return ownedCount;
+}
+
+static bool8 CheckPyramidBagHasItem(u16 itemId, u16 count)
+{
+ u8 i;
+ u16 *items = gSaveBlock2Ptr->pyramidBag.itemId[gSaveBlock2Ptr->frontierChosenLvl];
+ u8 *quantities = gSaveBlock2Ptr->pyramidBag.quantity[gSaveBlock2Ptr->frontierChosenLvl];
+
+ for (i = 0; i < PYRAMID_BAG_ITEMS_COUNT; i++)
+ {
+ if (items[i] == itemId)
+ {
+ if (quantities[i] >= count)
+ return TRUE;
+
+ count -= quantities[i];
+ if (count == 0)
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+static bool8 CheckPyramidBagHasSpace(u16 itemId, u16 count)
+{
+ u8 i;
+ u16 *items = gSaveBlock2Ptr->pyramidBag.itemId[gSaveBlock2Ptr->frontierChosenLvl];
+ u8 *quantities = gSaveBlock2Ptr->pyramidBag.quantity[gSaveBlock2Ptr->frontierChosenLvl];
+
+ for (i = 0; i < PYRAMID_BAG_ITEMS_COUNT; i++)
+ {
+ if (items[i] == itemId || items[i] == ITEM_NONE)
+ {
+ if (quantities[i] + count <= 99)
+ return TRUE;
+
+ count = (quantities[i] + count) - 99;
+ if (count == 0)
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+bool8 AddPyramidBagItem(u16 itemId, u16 count)
+{
+ u16 i;
+
+ u16 *items = gSaveBlock2Ptr->pyramidBag.itemId[gSaveBlock2Ptr->frontierChosenLvl];
+ u8 *quantities = gSaveBlock2Ptr->pyramidBag.quantity[gSaveBlock2Ptr->frontierChosenLvl];
+
+ u16 *newItems = Alloc(PYRAMID_BAG_ITEMS_COUNT * sizeof(u16));
+ u8 *newQuantities = Alloc(PYRAMID_BAG_ITEMS_COUNT * sizeof(u8));
+
+ memcpy(newItems, items, PYRAMID_BAG_ITEMS_COUNT * sizeof(u16));
+ memcpy(newQuantities, quantities, PYRAMID_BAG_ITEMS_COUNT * sizeof(u8));
+
+ for (i = 0; i < PYRAMID_BAG_ITEMS_COUNT; i++)
+ {
+ if (newItems[i] == itemId && newQuantities[i] < 99)
+ {
+ newQuantities[i] += count;
+ if (newQuantities[i] > 99)
+ {
+ count = newQuantities[i] - 99;
+ newQuantities[i] = 99;
+ }
+ else
+ {
+ count = 0;
+ }
+
+ if (count == 0)
+ break;
+ }
+ }
+
+ if (count > 0)
+ {
+ for (i = 0; i < PYRAMID_BAG_ITEMS_COUNT; i++)
+ {
+ if (newItems[i] == ITEM_NONE)
+ {
+ newItems[i] = itemId;
+ newQuantities[i] = count;
+ if (newQuantities[i] > 99)
+ {
+ count = newQuantities[i] - 99;
+ newQuantities[i] = 99;
+ }
+ else
+ {
+ count = 0;
+ }
+
+ if (count == 0)
+ break;
+ }
+ }
+ }
+
+ if (count == 0)
+ {
+ memcpy(items, newItems, PYRAMID_BAG_ITEMS_COUNT * sizeof(u16));
+ memcpy(quantities, newQuantities, PYRAMID_BAG_ITEMS_COUNT * sizeof(u8));
+ Free(newItems);
+ Free(newQuantities);
+ return TRUE;
+ }
+ else
+ {
+ Free(newItems);
+ Free(newQuantities);
+ return FALSE;
+ }
+}
+
+bool8 RemovePyramidBagItem(u16 itemId, u16 count)
+{
+ u16 i;
+
+ u16 *items = gSaveBlock2Ptr->pyramidBag.itemId[gSaveBlock2Ptr->frontierChosenLvl];
+ u8 *quantities = gSaveBlock2Ptr->pyramidBag.quantity[gSaveBlock2Ptr->frontierChosenLvl];
+
+ i = gUnknown_0203CF30[3] + gUnknown_0203CF30[4];
+ if (items[i] == itemId && quantities[i] >= count)
+ {
+ quantities[i] -= count;
+ if (quantities[i] == 0)
+ items[i] = ITEM_NONE;
+ return TRUE;
+ }
+ else
+ {
+ u16 *newItems = Alloc(PYRAMID_BAG_ITEMS_COUNT * sizeof(u16));
+ u8 *newQuantities = Alloc(PYRAMID_BAG_ITEMS_COUNT * sizeof(u8));
+
+ memcpy(newItems, items, PYRAMID_BAG_ITEMS_COUNT * sizeof(u16));
+ memcpy(newQuantities, quantities, PYRAMID_BAG_ITEMS_COUNT * sizeof(u8));
+
+ for (i = 0; i < PYRAMID_BAG_ITEMS_COUNT; i++)
+ {
+ if (newItems[i] == itemId)
+ {
+ if (newQuantities[i] >= count)
+ {
+ newQuantities[i] -= count;
+ count = 0;
+ if (newQuantities[i] == 0)
+ newItems[i] = ITEM_NONE;
+ }
+ else
+ {
+ count -= newQuantities[i];
+ newQuantities[i] = 0;
+ newItems[i] = ITEM_NONE;
+ }
+
+ if (count == 0)
+ break;
+ }
+ }
+
+ if (count == 0)
+ {
+ memcpy(items, newItems, PYRAMID_BAG_ITEMS_COUNT * sizeof(u16));
+ memcpy(quantities, newQuantities, PYRAMID_BAG_ITEMS_COUNT * sizeof(u8));
+ Free(newItems);
+ Free(newQuantities);
+ return TRUE;
+ }
+ else
+ {
+ Free(newItems);
+ Free(newQuantities);
+ return FALSE;
+ }
+ }
+}
+
+static u16 SanitizeItemId(u16 itemId)
+{
+ if (itemId >= ITEM_LAST_ID + 1)
+ return ITEM_NONE;
+ else
+ return itemId;
+}
+
+const u8 *ItemId_GetName(u16 itemId)
+{
+ return gItems[SanitizeItemId(itemId)].name;
+}
+
+u16 ItemId_GetId(u16 itemId)
+{
+ return gItems[SanitizeItemId(itemId)].itemId;
+}
+
+u16 ItemId_GetPrice(u16 itemId)
+{
+ return gItems[SanitizeItemId(itemId)].price;
+}
+
+u8 ItemId_GetHoldEffect(u16 itemId)
+{
+ return gItems[SanitizeItemId(itemId)].holdEffect;
+}
+
+u8 ItemId_GetHoldEffectParam(u16 itemId)
+{
+ return gItems[SanitizeItemId(itemId)].holdEffectParam;
+}
+
+const u8 *ItemId_GetDescription(u16 itemId)
+{
+ return gItems[SanitizeItemId(itemId)].description;
+}
+
+u8 ItemId_GetImportance(u16 itemId)
+{
+ return gItems[SanitizeItemId(itemId)].importance;
+}
+
+// unused
+u8 ItemId_GetUnknownValue(u16 itemId)
+{
+ return gItems[SanitizeItemId(itemId)].unk19;
+}
+
+u8 ItemId_GetPocket(u16 itemId)
+{
+ return gItems[SanitizeItemId(itemId)].pocket;
+}
+
+u8 ItemId_GetType(u16 itemId)
+{
+ return gItems[SanitizeItemId(itemId)].type;
+}
+
+ItemUseFunc ItemId_GetFieldFunc(u16 itemId)
+{
+ return gItems[SanitizeItemId(itemId)].fieldUseFunc;
+}
+
+u8 ItemId_GetBattleUsage(u16 itemId)
+{
+ return gItems[SanitizeItemId(itemId)].battleUsage;
+}
+
+ItemUseFunc ItemId_GetBattleFunc(u16 itemId)
+{
+ return gItems[SanitizeItemId(itemId)].battleUseFunc;
+}
+
+u8 ItemId_GetSecondaryId(u16 itemId)
+{
+ return gItems[SanitizeItemId(itemId)].secondaryId;
+}
diff --git a/src/item_icon.c b/src/item_icon.c
index 4aaad9c31..d6fedf892 100644
--- a/src/item_icon.c
+++ b/src/item_icon.c
@@ -4,13 +4,13 @@
#include "sprite.h"
#include "decompress.h"
#include "constants/items.h"
+#include "data/item_icon_table.h"
// EWRAM vars
EWRAM_DATA void *gItemIconDecompressionBuffer = NULL;
EWRAM_DATA void *gItemIcon4x4Buffer = NULL;
// const rom data
-extern const void *const gItemIconTable[][2]; // todo: move to C file
static const struct OamData sOamData_ItemIcon =
{
diff --git a/src/item_menu.c b/src/item_menu.c
new file mode 100755
index 000000000..4742d07a1
--- /dev/null
+++ b/src/item_menu.c
@@ -0,0 +1,2245 @@
+#include "global.h"
+#include "item_menu.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 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);
+u16 BagGetItemIdByPocketPosition(u8, u16);
+void AddBagItemIconSprite(u16, u8);
+void bag_menu_print_description_box_text(int);
+void bag_menu_print_cursor(u8, u8);
+void bag_menu_print(u8, u8, const u8*, u8, u8, u8, u8, u8, u8);
+bool8 ItemId_GetImportance(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 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(s32 a, bool8 b, struct ListMenu*);
+void sub_81AB520(u8 rboxId, int item_index_in_pocket, u8 a);
+void ItemMenu_UseOutOfBattle(u8 taskId);
+void ItemMenu_Toss(u8 taskId);
+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 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;
+
+extern u8 *gPocketNamesStringsTable[];
+extern u8 gUnknown_08D9A88C[];
+extern struct ListMenuTemplate gUnknown_08613F9C;
+extern const u8 gMoveNames[][0xD];
+extern u8* gReturnToXStringsTable[];
+extern u32 gUnknown_0203CE5E[];
+extern const u8 EventScript_2736B3[];
+extern const u16 gUnknown_0860F074[];
+
+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, CB2_ReturnToFieldWithOpenMenu);
+}
+
+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, sizeof(gUnknown_0203CE54->unk804));
+ 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:
+ AddBagVisualSprite(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(s32 a, bool8 b, struct ListMenu *unused)
+{
+ if (b != 1)
+ {
+ PlaySE(SE_SELECT);
+ ShakeBagVisual();
+ }
+ if (gUnknown_0203CE54->unk81A == 0xFF)
+ {
+ RemoveBagItemIconSprite(1 ^ gUnknown_0203CE54->unk81B_1);
+ if (a != -2)
+ AddBagItemIconSprite(BagGetItemIdByPocketPosition(gUnknown_0203CE58.pocket + 1, a), gUnknown_0203CE54->unk81B_1);
+ else
+ AddBagItemIconSprite(-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_GetImportance(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)
+ {
+ DestroyListMenuTask(data[0], &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket], &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]);
+ if (gUnknown_0203CE54->unk0 != 0)
+ SetMainCallback2(gUnknown_0203CE54->unk0);
+ else
+ 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:
+ SortBerriesOrTMHMs(pocket);
+ break;
+ default:
+ CompactItemsInBagPocket(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 pocketId)
+{
+ return gUnknown_0203CE58.scrollPosition[pocketId] + gUnknown_0203CE58.cursorPosition[pocketId];
+}
+
+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);
+ DestroyListMenuTask(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)
+ {
+ ListMenuGetScrollAndRow(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]);
+ ListMenuGetScrollAndRow(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;
+}
+
+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);
+ DestroyListMenuTask(data[0], &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket], &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]);
+ schedule_bg_copy_tilemap_to_vram(0);
+ gSprites[gUnknown_0203CE54->unk804[2 + (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);
+ RemoveBagSprite(1);
+ AddSwitchPocketRotatingBallSprite(deltaBagPocketId);
+ SetTaskFuncWithFollowupFunc(taskId, sub_81AC10C, gTasks[taskId].func);
+}
+
+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);
+ ListMenuGetScrollAndRow(data[0], &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket], &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]);
+ sub_81AC498(taskId);
+ }
+ else
+ {
+ r7 = ListMenuHandleInputGetItemId(data[0]);
+ ListMenuGetScrollAndRow(data[0], &gUnknown_0203CE58.scrollPosition[gUnknown_0203CE58.pocket], &gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]);
+ sub_80D4FC8(0);
+ sub_80D4FEC(gUnknown_0203CE58.cursorPosition[gUnknown_0203CE58.pocket]);
+ switch (r7)
+ {
+ 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
+ {
+ MoveItemSlotInList(gBagPockets[gUnknown_0203CE58.pocket].itemSlots, data[1], realPos);
+ gUnknown_0203CE54->unk81A = -1;
+ DestroyListMenuTask(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;
+ DestroyListMenuTask(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_GetImportance(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_GetImportance(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_GetImportance(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]);
+ DestroyListMenuTask(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;
+ DestroyListMenuTask(data[0], scrollPos, cursorPos);
+ load_bag_item_list_buffers(gUnknown_0203CE58.pocket);
+ data[0] = ListMenuInit(&gMultiuseListMenuTemplate, *scrollPos, *cursorPos);
+ schedule_bg_copy_tilemap_to_vram(0);
+ 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_GetImportance(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_GetImportance(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_GetImportance(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_GetPrice(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_GetPrice(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_GetPrice(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_GetPrice(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_GetPrice(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_GetPrice(gSpecialVar_ItemId) / 2) * data[8]);
+ DestroyListMenuTask(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_GetImportance(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();
+ DestroyListMenuTask(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(CB2_ReturnToField);
+}
+
+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(CB2_ReturnToField);
+}
+
+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(CB2_ReturnToField);
+}
+
+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_menu_icons.c b/src/item_menu_icons.c
new file mode 100644
index 000000000..f12bb454e
--- /dev/null
+++ b/src/item_menu_icons.c
@@ -0,0 +1,684 @@
+#include "global.h"
+#include "sprite.h"
+#include "decompress.h"
+#include "item_menu.h"
+#include "item_icon.h"
+#include "item_menu_icons.h"
+#include "window.h"
+#include "menu_helpers.h"
+#include "berry.h"
+#include "graphics.h"
+#include "constants/items.h"
+#include "item.h"
+#include "item_use.h"
+#include "constants/hold_effects.h"
+
+struct CompressedTilesPal
+{
+ const u8 *tiles;
+ const u8 *pal;
+};
+
+extern void sub_80D5860(struct Sprite *sprite);
+extern void sub_80D58F8(struct Sprite *sprite);
+extern void sub_80D5968(struct Sprite *sprite);
+extern void sub_80D5A94(struct Sprite *sprite);
+extern void sub_80D5B48(struct Sprite *sprite);
+
+// this file's functions
+static void SpriteCB_BagVisualSwitchingPockets(struct Sprite *sprite);
+static void SpriteCB_ShakeBagVisual(struct Sprite *sprite);
+static void SpriteCB_SwitchPocketRotatingBallInit(struct Sprite *sprite);
+static void SpriteCB_SwitchPocketRotatingBallContinue(struct Sprite *sprite);
+
+// static const rom data
+static const u16 gUnknown_0857F564[] = INCBIN_U16("graphics/interface/bag_spinner.gbapal");
+static const u8 gUnknown_0857F584[] = INCBIN_U8("graphics/interface/bag_spinner.4bpp");
+static const u8 gUnknown_0857F604[] = INCBIN_U8("graphics/unused/cherry.4bpp");
+static const u16 gUnknown_0857FA84[] = INCBIN_U16("graphics/unused/cherry.gbapal");
+
+static const struct OamData sOamData_857FAA4 =
+{
+ .y = 0,
+ .affineMode = 1,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 3,
+ .tileNum = 0,
+ .priority = 1,
+ .paletteNum = 0,
+ .affineParam = 0
+};
+
+static const union AnimCmd sSpriteAnim_857FAAC[] =
+{
+ ANIMCMD_FRAME(0, 4),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_857FAB4[] =
+{
+ ANIMCMD_FRAME(64, 4),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_857FABC[] =
+{
+ ANIMCMD_FRAME(128, 4),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_857FAC4[] =
+{
+ ANIMCMD_FRAME(192, 4),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_857FACC[] =
+{
+ ANIMCMD_FRAME(256, 4),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_857FAD4[] =
+{
+ ANIMCMD_FRAME(320, 4),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const sSpriteAnimTable_857FADC[] =
+{
+ sSpriteAnim_857FAAC,
+ sSpriteAnim_857FAB4,
+ sSpriteAnim_857FAC4,
+ sSpriteAnim_857FACC,
+ sSpriteAnim_857FAD4,
+ sSpriteAnim_857FABC
+};
+
+static const union AffineAnimCmd sSpriteAffineAnim_857FAF4[] =
+{
+ AFFINEANIMCMD_FRAME(256, 256, 0, 0),
+ AFFINEANIMCMD_END
+};
+
+static const union AffineAnimCmd sSpriteAffineAnim_857FB04[] =
+{
+ AFFINEANIMCMD_FRAME(0, 0, 254, 2),
+ AFFINEANIMCMD_FRAME(0, 0, 2, 4),
+ AFFINEANIMCMD_FRAME(0, 0, 254, 4),
+ AFFINEANIMCMD_FRAME(0, 0, 2, 2),
+ AFFINEANIMCMD_END
+};
+
+static const union AffineAnimCmd *const sSpriteAffineAnimTable_857FB2C[] =
+{
+ sSpriteAffineAnim_857FAF4,
+ sSpriteAffineAnim_857FB04
+};
+
+const struct CompressedSpriteSheet gUnknown_0857FB34 =
+{
+ gBagMaleTiles, 0x3000, 100
+};
+
+const struct CompressedSpriteSheet gUnknown_0857FB3C =
+{
+ gBagFemaleTiles, 0x3000, 100
+};
+
+const struct CompressedSpritePalette gUnknown_0857FB44 =
+{
+ gBagPalette, 100
+};
+
+static const struct SpriteTemplate gUnknown_0857FB4C =
+{
+ .tileTag = 100,
+ .paletteTag = 100,
+ .oam = &sOamData_857FAA4,
+ .anims = sSpriteAnimTable_857FADC,
+ .images = NULL,
+ .affineAnims = sSpriteAffineAnimTable_857FB2C,
+ .callback = SpriteCallbackDummy,
+};
+
+static const struct OamData sOamData_857FB64 =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 4,
+ .size = 1,
+ .tileNum = 0,
+ .priority = 2,
+ .paletteNum = 0,
+ .affineParam = 0
+};
+
+static const union AnimCmd sSpriteAnim_857FB6C[] =
+{
+ ANIMCMD_FRAME(0, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const sSpriteAnimTable_857FB74[] =
+{
+ sSpriteAnim_857FB6C
+};
+
+static const union AffineAnimCmd sSpriteAffineAnim_857FB78[] =
+{
+ AFFINEANIMCMD_FRAME(0, 0, 8, 16),
+ AFFINEANIMCMD_END
+};
+
+static const union AffineAnimCmd sSpriteAffineAnim_857FB88[] =
+{
+ AFFINEANIMCMD_FRAME(0, 0, 248, 16),
+ AFFINEANIMCMD_END
+};
+
+static const union AffineAnimCmd *const sSpriteAffineAnimTable_857FB98[] =
+{
+ sSpriteAffineAnim_857FB78,
+};
+
+static const union AffineAnimCmd *const sSpriteAffineAnimTable_857FB9C[] =
+{
+ sSpriteAffineAnim_857FB88,
+};
+
+static const struct SpriteSheet gUnknown_0857FBA0 =
+{
+ gUnknown_0857F584, 0x80, 101
+};
+
+static const struct SpritePalette gUnknown_0857FBA8 =
+{
+ gUnknown_0857F564, 101
+};
+
+static const struct SpriteTemplate gUnknown_0857FBB0 =
+{
+ .tileTag = 101,
+ .paletteTag = 101,
+ .oam = &sOamData_857FB64,
+ .anims = sSpriteAnimTable_857FB74,
+ .images = NULL,
+ .affineAnims = sSpriteAffineAnimTable_857FB98,
+ .callback = SpriteCB_SwitchPocketRotatingBallInit,
+};
+
+static const struct OamData sOamData_857FBC8 =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 3,
+ .tileNum = 0,
+ .priority = 1,
+ .paletteNum = 7,
+ .affineParam = 0
+};
+
+static const struct OamData sOamData_857FBD0 =
+{
+ .y = 0,
+ .affineMode = 3,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 3,
+ .tileNum = 0,
+ .priority = 0,
+ .paletteNum = 7,
+ .affineParam = 0
+};
+
+static const union AnimCmd sSpriteAnim_857FBD8[] =
+{
+ ANIMCMD_FRAME(0, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const sSpriteAnimTable_857FBE0[] =
+{
+ sSpriteAnim_857FBD8
+};
+
+static const struct SpriteFrameImage sSpriteImageTable_857FBE4[] =
+{
+ {&gDecompressionBuffer[0], 0x800},
+};
+
+static const struct SpriteTemplate gUnknown_0857FBEC =
+{
+ .tileTag = 65535,
+ .paletteTag = 30020,
+ .oam = &sOamData_857FBC8,
+ .anims = sSpriteAnimTable_857FBE0,
+ .images = sSpriteImageTable_857FBE4,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+};
+
+static const union AffineAnimCmd sSpriteAffineAnim_857FC04[] =
+{
+ AFFINEANIMCMD_FRAME(-1, -1, 253, 96),
+ AFFINEANIMCMD_FRAME(0, 0, 0, 16),
+ AFFINEANIMCMD_FRAME(-2, -2, 255, 64),
+ AFFINEANIMCMD_FRAME(-8, 0, 0, 16),
+ AFFINEANIMCMD_FRAME(0, -8, 0, 16),
+ AFFINEANIMCMD_FRAME(256, 256, 0, 0),
+ AFFINEANIMCMD_JUMP(0)
+};
+
+static const union AffineAnimCmd sSpriteAffineAnim_857FC3C[] =
+{
+ AFFINEANIMCMD_FRAME(-1, -1, 3, 96),
+ AFFINEANIMCMD_FRAME(0, 0, 0, 16),
+ AFFINEANIMCMD_FRAME(-2, -2, 1, 64),
+ AFFINEANIMCMD_FRAME(-8, 0, 0, 16),
+ AFFINEANIMCMD_FRAME(0, -8, 0, 16),
+ AFFINEANIMCMD_FRAME(256, 256, 0, 0),
+ AFFINEANIMCMD_JUMP(0)
+};
+
+static const union AffineAnimCmd *const sSpriteAffineAnimTable_857FC74[] =
+{
+ sSpriteAffineAnim_857FC04,
+ sSpriteAffineAnim_857FC3C
+};
+
+static const struct SpriteTemplate gUnknown_0857FC7C =
+{
+ .tileTag = 0xFFFF,
+ .paletteTag = 0x7544,
+ .oam = &sOamData_857FBD0,
+ .anims = sSpriteAnimTable_857FBE0,
+ .images = sSpriteImageTable_857FBE4,
+ .affineAnims = sSpriteAffineAnimTable_857FC74,
+ .callback = SpriteCallbackDummy,
+};
+
+static const struct CompressedTilesPal gBerryPicTable[] =
+{
+ {gBerryPic_Cheri, gBerryPalette_Cheri},
+ {gBerryPic_Chesto, gBerryPalette_Chesto},
+ {gBerryPic_Pecha, gBerryPalette_Pecha},
+ {gBerryPic_Rawst, gBerryPalette_Rawst},
+ {gBerryPic_Aspear, gBerryPalette_Aspear},
+ {gBerryPic_Leppa, gBerryPalette_Leppa},
+ {gBerryPic_Oran, gBerryPalette_Oran},
+ {gBerryPic_Persim, gBerryPalette_Persim},
+ {gBerryPic_Lum, gBerryPalette_Lum},
+ {gBerryPic_Sitrus, gBerryPalette_Sitrus},
+ {gBerryPic_Figy, gBerryPalette_Figy},
+ {gBerryPic_Wiki, gBerryPalette_Wiki},
+ {gBerryPic_Mago, gBerryPalette_Mago},
+ {gBerryPic_Aguav, gBerryPalette_Aguav},
+ {gBerryPic_Iapapa, gBerryPalette_Iapapa},
+ {gBerryPic_Razz, gBerryPalette_Razz},
+ {gBerryPic_Bluk, gBerryPalette_Bluk},
+ {gBerryPic_Nanab, gBerryPalette_Nanab},
+ {gBerryPic_Wepear, gBerryPalette_Wepear},
+ {gBerryPic_Pinap, gBerryPalette_Pinap},
+ {gBerryPic_Pomeg, gBerryPalette_Pomeg},
+ {gBerryPic_Kelpsy, gBerryPalette_Kelpsy},
+ {gBerryPic_Qualot, gBerryPalette_Qualot},
+ {gBerryPic_Hondew, gBerryPalette_Hondew},
+ {gBerryPic_Grepa, gBerryPalette_Grepa},
+ {gBerryPic_Tamato, gBerryPalette_Tamato},
+ {gBerryPic_Cornn, gBerryPalette_Cornn},
+ {gBerryPic_Magost, gBerryPalette_Magost},
+ {gBerryPic_Rabuta, gBerryPalette_Rabuta},
+ {gBerryPic_Nomel, gBerryPalette_Nomel},
+ {gBerryPic_Spelon, gBerryPalette_Spelon},
+ {gBerryPic_Pamtre, gBerryPalette_Pamtre},
+ {gBerryPic_Watmel, gBerryPalette_Watmel},
+ {gBerryPic_Durin, gBerryPalette_Durin},
+ {gBerryPic_Belue, gBerryPalette_Belue},
+ {gBerryPic_Liechi, gBerryPalette_Liechi},
+ {gBerryPic_Ganlon, gBerryPalette_Ganlon},
+ {gBerryPic_Salac, gBerryPalette_Salac},
+ {gBerryPic_Petaya, gBerryPalette_Petaya},
+ {gBerryPic_Apicot, gBerryPalette_Apicot},
+ {gBerryPic_Lansat, gBerryPalette_Lansat},
+ {gBerryPic_Starf, gBerryPalette_Starf},
+ {gBerryPic_Enigma, gBerryPalette_Enigma},
+};
+
+const struct CompressedSpriteSheet gUnknown_0857FDEC =
+{
+ gBerryCheckCircle_Gfx, 0x800, 10000
+};
+
+const struct CompressedSpritePalette gUnknown_0857FDF4 =
+{
+ gUnknown_08D9BEF0, 10000
+};
+
+static const struct OamData sOamData_857FDFC =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 3,
+ .tileNum = 0,
+ .priority = 1,
+ .paletteNum = 0,
+ .affineParam = 0
+};
+
+static const union AnimCmd sSpriteAnim_857FE04[] =
+{
+ ANIMCMD_FRAME(0, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const sSpriteAnimTable_857FE0C[] =
+{
+ sSpriteAnim_857FE04
+};
+
+static const struct SpriteTemplate gUnknown_0857FE10 =
+{
+ .tileTag = 10000,
+ .paletteTag = 10000,
+ .oam = &sOamData_857FDFC,
+ .anims = sSpriteAnimTable_857FE0C,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+};
+
+const struct SpriteTemplate gUnknown_0857FE28 =
+{
+ .tileTag = 0,
+ .paletteTag = 0,
+ .oam = &gDummyOamData,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D5860,
+};
+
+const struct SpriteTemplate gUnknown_0857FE40 =
+{
+ .tileTag = 0,
+ .paletteTag = 0,
+ .oam = &gDummyOamData,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D58F8,
+};
+
+const struct SpriteTemplate gUnknown_0857FE58 =
+{
+ .tileTag = 0,
+ .paletteTag = 0,
+ .oam = &gDummyOamData,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D5968,
+};
+
+const struct SpriteTemplate gUnknown_0857FE70 =
+{
+ .tileTag = 0,
+ .paletteTag = 0,
+ .oam = &gDummyOamData,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D5A94,
+};
+
+const struct SpriteTemplate gUnknown_0857FE88 =
+{
+ .tileTag = 0,
+ .paletteTag = 0,
+ .oam = &gDummyOamData,
+ .anims = gDummySpriteAnimTable,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_80D5B48,
+};
+
+#include "data/text/item_descriptions.h"
+#include "data/items.h"
+
+// code
+void RemoveBagSprite(u8 id)
+{
+ u8 *spriteId = &gUnknown_0203CE54->unk804[id];
+ if (*spriteId != 0xFF)
+ {
+ FreeSpriteTilesByTag(id + 100);
+ FreeSpritePaletteByTag(id + 100);
+ FreeSpriteOamMatrix(&gSprites[*spriteId]);
+ DestroySprite(&gSprites[*spriteId]);
+ *spriteId = 0xFF;
+ }
+}
+
+void AddBagVisualSprite(u8 bagPocketId)
+{
+ u8 *spriteId = &gUnknown_0203CE54->unk804[0];
+ *spriteId = CreateSprite(&gUnknown_0857FB4C, 68, 66, 0);
+ SetBagVisualPocketId(bagPocketId, FALSE);
+}
+
+void SetBagVisualPocketId(u8 bagPocketId, bool8 isSwitchingPockets)
+{
+ struct Sprite *sprite = &gSprites[gUnknown_0203CE54->unk804[0]];
+ if (isSwitchingPockets)
+ {
+ sprite->pos2.y = -5;
+ sprite->callback = SpriteCB_BagVisualSwitchingPockets;
+ sprite->data[0] = bagPocketId + 1;
+ StartSpriteAnim(sprite, 0);
+ }
+ else
+ {
+ StartSpriteAnim(sprite, bagPocketId + 1);
+ }
+}
+
+static void SpriteCB_BagVisualSwitchingPockets(struct Sprite *sprite)
+{
+ if (sprite->pos2.y != 0)
+ {
+ sprite->pos2.y++;
+ }
+ else
+ {
+ StartSpriteAnim(sprite, sprite->data[0]);
+ sprite->callback = SpriteCallbackDummy;
+ }
+}
+
+void ShakeBagVisual(void)
+{
+ struct Sprite *sprite = &gSprites[gUnknown_0203CE54->unk804[0]];
+ if (sprite->affineAnimEnded)
+ {
+ StartSpriteAffineAnim(sprite, 1);
+ sprite->callback = SpriteCB_ShakeBagVisual;
+ }
+}
+
+static void SpriteCB_ShakeBagVisual(struct Sprite *sprite)
+{
+ if (sprite->affineAnimEnded)
+ {
+ StartSpriteAffineAnim(sprite, 0);
+ sprite->callback = SpriteCallbackDummy;
+ }
+}
+
+void AddSwitchPocketRotatingBallSprite(s16 rotationDirection)
+{
+ u8 *spriteId = &gUnknown_0203CE54->unk804[1];
+ LoadSpriteSheet(&gUnknown_0857FBA0);
+ LoadSpritePalette(&gUnknown_0857FBA8);
+ *spriteId = CreateSprite(&gUnknown_0857FBB0, 16, 16, 0);
+ gSprites[*spriteId].data[0] = rotationDirection;
+}
+
+static void update_switch_pocket_rotating_ball_coords(struct Sprite *sprite)
+{
+ sprite->centerToCornerVecX = sprite->data[1] - ((sprite->data[3] + 1) & 1);
+ sprite->centerToCornerVecY = sprite->data[1] - ((sprite->data[3] + 1) & 1);
+}
+
+static void SpriteCB_SwitchPocketRotatingBallInit(struct Sprite *sprite)
+{
+ sprite->oam.affineMode = 1;
+ if (sprite->data[0] == -1)
+ sprite->affineAnims = sSpriteAffineAnimTable_857FB98;
+ else
+ sprite->affineAnims = sSpriteAffineAnimTable_857FB9C;
+
+ InitSpriteAffineAnim(sprite);
+ sprite->data[1] = sprite->centerToCornerVecX;
+ sprite->data[1] = sprite->centerToCornerVecY;
+ update_switch_pocket_rotating_ball_coords(sprite);
+ sprite->callback = SpriteCB_SwitchPocketRotatingBallContinue;
+}
+
+static void SpriteCB_SwitchPocketRotatingBallContinue(struct Sprite *sprite)
+{
+ sprite->data[3]++;
+ update_switch_pocket_rotating_ball_coords(sprite);
+ if (sprite->data[3] == 16)
+ RemoveBagSprite(1);
+}
+
+void AddBagItemIconSprite(u16 itemId, u8 id)
+{
+ u8 *spriteId = &gUnknown_0203CE54->unk804[id + 2];
+ if (*spriteId == 0xFF)
+ {
+ u8 iconSpriteId;
+
+ FreeSpriteTilesByTag(id + 102);
+ FreeSpritePaletteByTag(id + 102);
+ iconSpriteId = AddItemIconSprite(id + 102, id + 102, itemId);
+ if (iconSpriteId != MAX_SPRITES)
+ {
+ *spriteId = iconSpriteId;
+ gSprites[iconSpriteId].pos2.x = 24;
+ gSprites[iconSpriteId].pos2.y = 88;
+ }
+ }
+}
+
+void RemoveBagItemIconSprite(u8 id)
+{
+ RemoveBagSprite(id + 2);
+}
+
+void sub_80D4FAC(void)
+{
+ sub_8122344(&gUnknown_0203CE54->unk804[4], 8);
+}
+
+void sub_80D4FC8(u8 arg0)
+{
+ sub_81223FC(&gUnknown_0203CE54->unk804[4], 8, arg0);
+}
+
+void sub_80D4FEC(u8 arg0)
+{
+ sub_8122448(&gUnknown_0203CE54->unk804[4], 136, 120, (arg0 + 1) * 16);
+}
+
+static void sub_80D5018(void *mem0, void *mem1)
+{
+ u8 i, j;
+
+ memset(mem1, 0, 0x800);
+ mem1 += 0x100;
+ for (i = 0; i < 6; i++)
+ {
+ mem1 += 0x20;
+ for (j = 0; j < 6; j++)
+ {
+ memcpy(mem1, mem0, 0x20);
+ mem1 += 0x20;
+ mem0 += 0x20;
+ }
+ if (i != 5)
+ mem1 += 0x20;
+ }
+}
+
+static void sub_80D5070(u8 berryId)
+{
+ struct CompressedSpritePalette pal;
+
+ if (berryId == ITEM_TO_BERRY(ITEM_ENIGMA_BERRY) - 1 && IsEnigmaBerryValid())
+ {
+ // unknown empty if statement
+ }
+
+ pal.data = gBerryPicTable[berryId].pal;
+ pal.tag = 0x7544;
+ LoadCompressedObjectPalette(&pal);
+ LZDecompressWram(gBerryPicTable[berryId].tiles, &gDecompressionBuffer[0x1000]);
+ sub_80D5018(&gDecompressionBuffer[0x1000], &gDecompressionBuffer[0]);
+}
+
+u8 CreateBerryTagSprite(u8 id, s16 x, s16 y)
+{
+ sub_80D5070(id);
+ return CreateSprite(&gUnknown_0857FBEC, x, y, 0);
+}
+
+void FreeBerryTagSpritePalette(void)
+{
+ FreeSpritePaletteByTag(0x7544);
+}
+
+u8 sub_80D511C(u8 berryId, u8 x, u8 y, bool8 startAffine)
+{
+ u8 spriteId;
+
+ FreeSpritePaletteByTag(0x7544);
+ sub_80D5070(berryId);
+ spriteId = CreateSprite(&gUnknown_0857FC7C, x, y, 0);
+ if (startAffine == TRUE)
+ StartSpriteAffineAnim(&gSprites[spriteId], 1);
+
+ return spriteId;
+}
+
+u8 CreateBerryFlavorCircleSprite(s16 x)
+{
+ return CreateSprite(&gUnknown_0857FE10, x, 116, 0);
+}
diff --git a/src/item_use.c b/src/item_use.c
index 1fdd925ac..d036da6d3 100755
--- a/src/item_use.c
+++ b/src/item_use.c
@@ -1,6 +1,7 @@
#include "global.h"
#include "item_use.h"
#include "battle.h"
+#include "main.h"
#include "berry.h"
#include "bike.h"
#include "coins.h"
@@ -45,7 +46,7 @@ extern void ItemUseOutOfBattle_EvolutionStone(u8 b);
extern void bag_menu_mail_related(void);
extern void OpenPokeblockCase(u8 a, void(*b)(void));
extern void overworld_free_bg_tilemaps(void);
-extern bool32 sav1_map_is_biking_allowed(void);
+extern bool32 Overworld_IsBikingAllowed(void);
extern bool8 IsPlayerFacingSurfableFishableWater(void);
extern bool8 sub_81221AC(void);
extern u8 gText_ItemFinderNothing[];
@@ -85,9 +86,8 @@ extern void sub_81C59BC(void);
extern void sub_81AB9A8(u8);
extern void sub_81ABA88(u8);
extern void sub_80B7CC8(void);
-extern void flagmods_08054D70(void);
+extern void Overworld_ResetStateAfterDigEscRope(void);
extern u8* sub_806CF78(u16);
-extern bool8 ExecuteTableBasedItemEffect_(struct Pokemon*, u16, u8, u8);
extern void sub_81B89F0(void);
extern u8 GetItemEffectType(u16);
extern struct MapConnection *sub_8088A8C(s16, s16);
@@ -114,13 +114,13 @@ 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);
void CleanUpAfterFailingToUseRegisteredKeyItemOnField(u8 taskId);
void StartFishing(u8 a);
-bool8 ItemfinderCheckForHiddenItems(struct MapEvents *, u8);
+bool8 ItemfinderCheckForHiddenItems(const struct MapEvents *, u8);
u8 sub_80FD9B0(s16 a, s16 b);
void sub_80FDA24(u8 a);
void sub_80FD8E0(u8 taskId, s16 x, s16 y);
@@ -166,7 +166,7 @@ void MapPostLoadHook_UseItem(void)
void Task_CallItemUseOnFieldCallback(u8 taskId)
{
- if (sub_80ABDFC() == 1)
+ if (IsWeatherNotFadingIn() == 1)
gUnknown_0203A0F4(taskId);
}
@@ -237,7 +237,7 @@ void ItemUseOutOfBattle_Bike(u8 taskId)
DisplayCannotDismountBikeMessage(taskId, data[3]);
else
{
- if (sav1_map_is_biking_allowed() == TRUE && IsBikingDisallowedByPlayer() == 0)
+ if (Overworld_IsBikingAllowed() == TRUE && IsBikingDisallowedByPlayer() == 0)
{
gUnknown_0203A0F4 = ItemUseOnFieldCB_Bike;
SetUpItemUseOnFieldCallback(taskId);
@@ -364,7 +364,7 @@ void sub_80FD5CC(u8 taskId)
DestroyTask(taskId);
}
-bool8 ItemfinderCheckForHiddenItems(struct MapEvents *events, u8 taskId)
+bool8 ItemfinderCheckForHiddenItems(const struct MapEvents *events, u8 taskId)
{
int distanceX, distanceY;
s16 x, y, i, newDistanceX, newDistanceY;
@@ -391,7 +391,7 @@ bool8 ItemfinderCheckForHiddenItems(struct MapEvents *events, u8 taskId)
return FALSE;
}
-bool8 sub_80FD6D4(struct MapEvents *events, s16 x, s16 y)
+bool8 sub_80FD6D4(const struct MapEvents *events, s16 x, s16 y)
{
u8 bgEventCount = events->bgEventCount;
struct BgEvent *bgEvent = events->bgEvents;
@@ -638,7 +638,7 @@ void sub_80FDC00(u8 taskId)
if (!gPaletteFade.active)
{
overworld_free_bg_tilemaps();
- OpenPokeblockCase(0, c2_exit_to_overworld_2_switch);
+ OpenPokeblockCase(0, CB2_ReturnToField);
DestroyTask(taskId);
}
}
@@ -679,7 +679,7 @@ void sub_80FDD10(u8 taskId)
{
gUnknown_0203A0F4 = sub_80FDD74;
gFieldCallback = MapPostLoadHook_UseItem;
- *gUnknown_0203CE54 = c2_exit_to_overworld_2_switch;
+ *gUnknown_0203CE54 = CB2_ReturnToField;
unknown_ItemMenu_Confirm(taskId);
}
else
@@ -905,13 +905,13 @@ void task08_080A1C44(u8 taskId)
void re_escape_rope(u8 taskId)
{
- flagmods_08054D70();
+ Overworld_ResetStateAfterDigEscRope();
sub_80FE058();
gTasks[taskId].data[0] = 0;
DisplayItemMessageOnField(taskId, gStringVar4, task08_080A1C44);
}
-bool8 sub_80FE314(void)
+bool8 CanUseEscapeRopeOnCurrMap(void)
{
if (gMapHeader.flags & 2)
return TRUE;
@@ -921,7 +921,7 @@ bool8 sub_80FE314(void)
void ItemUseOutOfBattle_EscapeRope(u8 taskId)
{
- if (sub_80FE314() == TRUE)
+ if (CanUseEscapeRopeOnCurrMap() == TRUE)
{
gUnknown_0203A0F4 = re_escape_rope;
SetUpItemUseOnFieldCallback(taskId);
@@ -984,7 +984,7 @@ void ItemUseInBattle_StatIncrease(u8 taskId)
{
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 cbfb8484c..6c798967a 100644
--- a/src/lilycove_lady.c
+++ b/src/lilycove_lady.c
@@ -392,7 +392,7 @@ bool8 sub_818DC60(void)
static void sub_818DCAC(u8 *dest, u16 itemId)
{
- StringCopy(dest, ItemId_GetItem(itemId)->name);
+ StringCopy(dest, ItemId_GetName(itemId));
}
void sub_818DCC8(void)
@@ -606,7 +606,6 @@ u8 sub_818E06C(void)
}
}
-#ifdef NONMATCHING
static u8 sub_818E13C(void)
{
u8 retval;
@@ -627,9 +626,11 @@ static u8 sub_818E13C(void)
len = sub_818E258(gUnknown_0203CD68->playerName);
if (len == sub_818E258(gSaveBlock2Ptr->playerName))
{
+ u8 *name = gUnknown_0203CD68->playerName;
for (i = 0; i < len; i ++)
{
- if (gUnknown_0203CD68->playerName[i] != gSaveBlock2Ptr->playerName[i])
+ name = gUnknown_0203CD68->playerName;
+ if (name[i] != gSaveBlock2Ptr->playerName[i])
{
retval = 2;
break;
@@ -640,85 +641,6 @@ static u8 sub_818E13C(void)
}
return retval;
}
-#else
-__attribute__((naked)) static u8 sub_818E13C(void)
-{
- asm_unified("\tpush {r4-r7,lr}\n"
- "\tmovs r7, 0x1\n"
- "\tldr r5, =gUnknown_0203CD68\n"
- "\tldr r0, =gSaveBlock1Ptr\n"
- "\tldr r1, [r0]\n"
- "\tldr r2, =0x00003b58\n"
- "\tadds r0, r1, r2\n"
- "\tstr r0, [r5]\n"
- "\tldrb r0, [r0, 0x18]\n"
- "\tcmp r0, 0xFF\n"
- "\tbne _0818E174\n"
- "\tldr r0, =gStringVar1\n"
- "\tldr r1, =gText_Lady2\n"
- "\tbl StringCopy7\n"
- "\tmovs r7, 0\n"
- "\tb _0818E1DC\n"
- "\t.pool\n"
- "_0818E174:\n"
- "\tldr r4, =gStringVar1\n"
- "\tldr r0, =0x00003b70\n"
- "\tadds r1, r0\n"
- "\tadds r0, r4, 0\n"
- "\tbl StringCopy7\n"
- "\tldr r0, [r5]\n"
- "\tadds r0, 0x2D\n"
- "\tldrb r1, [r0]\n"
- "\tadds r0, r4, 0\n"
- "\tbl ConvertInternationalString\n"
- "\tldr r0, [r5]\n"
- "\tadds r0, 0x18\n"
- "\tbl sub_818E258\n"
- "\tlsls r0, 24\n"
- "\tlsrs r4, r0, 24\n"
- "\tldr r6, =gSaveBlock2Ptr\n"
- "\tldr r0, [r6]\n"
- "\tbl sub_818E258\n"
- "\tlsls r0, 24\n"
- "\tlsrs r0, 24\n"
- "\tcmp r4, r0\n"
- "\tbne _0818E1DC\n"
- "\tldr r0, [r5]\n"
- "\tmovs r2, 0\n"
- "\tcmp r2, r4\n"
- "\tbcs _0818E1DC\n"
- "\tldr r1, [r6]\n"
- "\tldrb r0, [r0, 0x18]\n"
- "\tldrb r1, [r1]\n"
- "\tcmp r0, r1\n"
- "\tbne _0818E1DA\n"
- "_0818E1BA:\n"
- "\tadds r0, r2, 0x1\n"
- "\tlsls r0, 24\n"
- "\tlsrs r2, r0, 24\n"
- "\tcmp r2, r4\n"
- "\tbcs _0818E1DC\n"
- "\tldr r0, =gUnknown_0203CD68\n"
- "\tldr r1, [r0]\n"
- "\tadds r1, 0x18\n"
- "\tadds r1, r2\n"
- "\tldr r0, =gSaveBlock2Ptr\n"
- "\tldr r0, [r0]\n"
- "\tadds r0, r2\n"
- "\tldrb r1, [r1]\n"
- "\tldrb r0, [r0]\n"
- "\tcmp r1, r0\n"
- "\tbeq _0818E1BA\n"
- "_0818E1DA:\n"
- "\tmovs r7, 0x2\n"
- "_0818E1DC:\n"
- "\tadds r0, r7, 0\n"
- "\tpop {r4-r7}\n"
- "\tpop {r1}\n"
- "\tbx r1\n"
- "\t.pool");
-}
-#endif
static u8 sub_818E1F4(void)
{
@@ -749,7 +671,7 @@ static u8 sub_818E258(const u8 *str)
void sub_818E274(void)
{
- StringCopy(gStringVar1, ItemId_GetItem(gUnknown_0203CD68->itemId)->name);
+ StringCopy(gStringVar1, ItemId_GetName(gUnknown_0203CD68->itemId));
}
bool8 sub_818E298(void)
@@ -1079,7 +1001,7 @@ void sub_818E914(void)
void sub_818E92C(void)
{
- OpenPokeblockCase(3, c2_exit_to_overworld_2_switch);
+ OpenPokeblockCase(3, CB2_ReturnToField);
}
void sub_818E940(void)
diff --git a/src/link.c b/src/link.c
index ae2cd1992..acdb6cae0 100644
--- a/src/link.c
+++ b/src/link.c
@@ -1,6 +1,34 @@
// 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"
+
+extern u16 gUnknown_03005DA8;
// Static type declarations
@@ -8,7 +36,7 @@ struct BlockTransfer
{
u16 pos;
u16 size;
- void *src;
+ const u8 *src;
bool8 active;
u8 multiplayerId;
};
@@ -23,34 +51,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 Link_AnyPartnersPlayingRubyOrSapphire(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..37aa20950
--- /dev/null
+++ b/src/link_rfu.c
@@ -0,0 +1,4942 @@
+
+// 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"
+
+extern u16 gUnknown_03005DA8;
+
+// 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
+NAKED 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
+NAKED 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
+NAKED 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
+NAKED 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
+NAKED 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/list_menu.c b/src/list_menu.c
new file mode 100644
index 000000000..c78d32bb3
--- /dev/null
+++ b/src/list_menu.c
@@ -0,0 +1,633 @@
+#include "global.h"
+#include "menu.h"
+#include "list_menu.h"
+#include "window.h"
+#include "text_window.h"
+#include "main.h"
+#include "task.h"
+#include "menu_indicators.h"
+#include "strings.h"
+#include "sound.h"
+#include "constants/songs.h"
+
+struct UnknownMysteryGiftLinkMenuStruct
+{
+ s32 field_0;
+ u8 field_4;
+ u8 field_5;
+ u8 field_6;
+};
+
+struct UnknownListMenuPals
+{
+ u8 cursorPal:4;
+ u8 fillValue:4;
+ u8 cursorShadowPal:4;
+ u8 lettersSpacing:6;
+ u8 field_2_2:6; // unused
+ u8 fontId:7;
+ u8 field_3_7:1;
+};
+
+extern struct UnknownMysteryGiftLinkMenuStruct gUnknown_0203CE84;
+
+// this file's functions
+static u8 ListMenuInitInternal(struct ListMenuTemplate *listMenuTemplate, u16 scrollOffset, u16 selectedRow);
+static bool8 ListMenuChangeSelection(struct ListMenu *list, bool8 updateCursorAndCallCallback, u8 count, bool8 movingDown);
+static void ListMenuPrintEntries(struct ListMenu *list, u16 startIndex, u16 yOffset, u16 count);
+static void ListMenuDrawCursor(struct ListMenu *list);
+static void ListMenuCallSelectionChangedCallback(struct ListMenu *list, u8 a2);
+static u8 ListMenuAddCursorObject(struct ListMenu *list, u32 cursorKind);
+
+// IWRAM common
+struct UnknownListMenuPals gUnknown_03006300;
+struct ListMenuTemplate gMultiuseListMenuTemplate;
+
+// code
+static void ListMenuDummyTask(u8 taskId)
+{
+
+}
+
+s32 DoMysteryGiftListMenu(struct WindowTemplate *windowTemplate, struct ListMenuTemplate *listMenuTemplate, u8 arg2, u16 tileNum, u16 palNum)
+{
+ switch (gUnknown_0203CE84.field_4)
+ {
+ case 0:
+ default:
+ gUnknown_0203CE84.field_5 = AddWindow(windowTemplate);
+ switch (arg2)
+ {
+ case 2:
+ sub_809882C(gUnknown_0203CE84.field_5, tileNum, palNum);
+ case 1:
+ sub_8098858(gUnknown_0203CE84.field_5, tileNum, palNum / 16);
+ break;
+ }
+ gMultiuseListMenuTemplate = *listMenuTemplate;
+ gMultiuseListMenuTemplate.windowId = gUnknown_0203CE84.field_5;
+ gUnknown_0203CE84.field_6 = ListMenuInit(&gMultiuseListMenuTemplate, 0, 0);
+ CopyWindowToVram(gUnknown_0203CE84.field_5, 1);
+ gUnknown_0203CE84.field_4 = 1;
+ break;
+ case 1:
+ gUnknown_0203CE84.field_0 = ListMenuHandleInputGetItemId(gUnknown_0203CE84.field_6);
+ if (gMain.newKeys & A_BUTTON)
+ {
+ gUnknown_0203CE84.field_4 = 2;
+ }
+ if (gMain.newKeys & B_BUTTON)
+ {
+ gUnknown_0203CE84.field_0 = LIST_B_PRESSED;
+ gUnknown_0203CE84.field_4 = 2;
+ }
+ if (gUnknown_0203CE84.field_4 == 2)
+ {
+ if (arg2 == 0)
+ {
+ ClearWindowTilemap(gUnknown_0203CE84.field_5);
+ }
+ else
+ {
+ switch (arg2)
+ {
+ case 0: // can never be reached, because of the if statement above
+ sub_819746C(gUnknown_0203CE84.field_5, FALSE);
+ break;
+ case 2:
+ case 1:
+ sub_819746C(gUnknown_0203CE84.field_5, FALSE);
+ break;
+ }
+ }
+
+ CopyWindowToVram(gUnknown_0203CE84.field_5, 1);
+ }
+ break;
+ case 2:
+ DestroyListMenuTask(gUnknown_0203CE84.field_6, NULL, NULL);
+ RemoveWindow(gUnknown_0203CE84.field_5);
+ gUnknown_0203CE84.field_4 = 0;
+ return gUnknown_0203CE84.field_0;
+ }
+
+ return -1;
+}
+
+u8 ListMenuInit(struct ListMenuTemplate *listMenuTemplate, u16 scrollOffset, u16 selectedRow)
+{
+ u8 taskId = ListMenuInitInternal(listMenuTemplate, scrollOffset, selectedRow);
+ PutWindowTilemap(listMenuTemplate->windowId);
+ CopyWindowToVram(listMenuTemplate->windowId, 2);
+
+ return taskId;
+}
+
+// unused
+u8 ListMenuInitWithWindows(struct ListMenuTemplate *listMenuTemplate, struct UnknownListMenuWindowStruct *arg1, u16 scrollOffset, u16 selectedRow)
+{
+ s32 i;
+
+ u8 taskId = ListMenuInitInternal(listMenuTemplate, scrollOffset, selectedRow);
+ for (i = 0; arg1[i].palNum != 0xFF; i++)
+ {
+ PutWindowRectTilemapOverridePalette(listMenuTemplate->windowId,
+ arg1[i].x,
+ arg1[i].y,
+ arg1[i].width,
+ arg1[i].height,
+ arg1[i].palNum);
+ }
+ CopyWindowToVram(listMenuTemplate->windowId, 2);
+
+ return taskId;
+}
+
+s32 ListMenuHandleInputGetItemId(u8 listTaskId)
+{
+ struct ListMenu *list = (void*) gTasks[listTaskId].data;
+
+ if (gMain.newKeys & A_BUTTON)
+ {
+ return list->template.items[list->scrollOffset + list->selectedRow].id;
+ }
+ else if (gMain.newKeys & B_BUTTON)
+ {
+ return LIST_B_PRESSED;
+ }
+ else if (gMain.newAndRepeatedKeys & DPAD_UP)
+ {
+ ListMenuChangeSelection(list, TRUE, 1, FALSE);
+ return LIST_NOTHING_CHOSEN;
+ }
+ else if (gMain.newAndRepeatedKeys & DPAD_DOWN)
+ {
+ ListMenuChangeSelection(list, TRUE, 1, TRUE);
+ return LIST_NOTHING_CHOSEN;
+ }
+ else // try to move by one window scroll
+ {
+ bool16 rightButton, leftButton;
+ switch (list->template.scrollMultiple)
+ {
+ case LIST_NO_MULTIPLE_SCROLL:
+ default:
+ leftButton = FALSE;
+ rightButton = FALSE;
+ break;
+ case LIST_MULTIPLE_SCROLL_DPAD:
+ leftButton = gMain.newAndRepeatedKeys & DPAD_LEFT;
+ rightButton = gMain.newAndRepeatedKeys & DPAD_RIGHT;
+ break;
+ case LIST_MULTIPLE_SCROLL_L_R:
+ leftButton = gMain.newAndRepeatedKeys & L_BUTTON;
+ rightButton = gMain.newAndRepeatedKeys & R_BUTTON;
+ break;
+ }
+
+ if (leftButton)
+ {
+ ListMenuChangeSelection(list, TRUE, list->template.maxShowed, FALSE);
+ return LIST_NOTHING_CHOSEN;
+ }
+ else if (rightButton)
+ {
+ ListMenuChangeSelection(list, TRUE, list->template.maxShowed, TRUE);
+ return LIST_NOTHING_CHOSEN;
+ }
+ else
+ {
+ return LIST_NOTHING_CHOSEN;
+ }
+ }
+}
+
+void DestroyListMenuTask(u8 listTaskId, u16 *scrollOffset, u16 *selectedRow)
+{
+ struct ListMenu *list = (void*) gTasks[listTaskId].data;
+
+ if (scrollOffset != NULL)
+ *scrollOffset = list->scrollOffset;
+ if (selectedRow != NULL)
+ *selectedRow = list->selectedRow;
+
+ if (list->unk_1E != 0xFF)
+ ListMenuRemoveCursorObject(list->unk_1E, list->template.cursorKind - 2);
+
+ DestroyTask(listTaskId);
+}
+
+void sub_81AE70C(u8 listTaskId)
+{
+ struct ListMenu *list = (void*) gTasks[listTaskId].data;
+
+ FillWindowPixelBuffer(list->template.windowId, (list->template.fillValue << 4) | (list->template.fillValue));
+ ListMenuPrintEntries(list, list->scrollOffset, 0, list->template.maxShowed);
+ ListMenuDrawCursor(list);
+ CopyWindowToVram(list->template.windowId, 2);
+}
+
+// unused
+void ChangeListMenuPals(u8 listTaskId, u8 cursorPal, u8 fillValue, u8 cursorShadowPal)
+{
+ struct ListMenu *list = (void*) gTasks[listTaskId].data;
+
+ list->template.cursorPal = cursorPal;
+ list->template.fillValue = fillValue;
+ list->template.cursorShadowPal = cursorShadowPal;
+}
+
+// unused
+void ChangeListMenuCoords(u8 listTaskId, u8 x, u8 y)
+{
+ struct ListMenu *list = (void*) gTasks[listTaskId].data;
+
+ SetWindowAttribute(list->template.windowId, WINDOW_TILEMAP_LEFT, x);
+ SetWindowAttribute(list->template.windowId, WINDOW_TILEMAP_TOP, y);
+}
+
+// unused
+s32 ListMenuTestInput(struct ListMenuTemplate *template, u32 scrollOffset, u32 selectedRow, u16 keys, u16 *newScrollOffset, u16 *newSelectedRow)
+{
+ struct ListMenu list;
+
+ list.template = *template;
+ list.scrollOffset = scrollOffset;
+ list.selectedRow = selectedRow;
+ list.unk_1C = 0;
+ list.unk_1D = 0;
+
+ if (keys == DPAD_UP)
+ ListMenuChangeSelection(&list, FALSE, 1, FALSE);
+ if (keys == DPAD_DOWN)
+ ListMenuChangeSelection(&list, FALSE, 1, TRUE);
+
+ if (newScrollOffset != NULL)
+ *newScrollOffset = list.scrollOffset;
+ if (newSelectedRow != NULL)
+ *newSelectedRow = list.selectedRow;
+
+ return LIST_NOTHING_CHOSEN;
+}
+
+void ListMenuGetCurrentItemArrayId(u8 listTaskId, u16 *arrayId)
+{
+ struct ListMenu *list = (void*) gTasks[listTaskId].data;
+
+ if (arrayId != NULL)
+ *arrayId = list->scrollOffset + list->selectedRow;
+}
+
+void ListMenuGetScrollAndRow(u8 listTaskId, u16 *scrollOffset, u16 *selectedRow)
+{
+ struct ListMenu *list = (void*) gTasks[listTaskId].data;
+
+ if (scrollOffset != NULL)
+ *scrollOffset = list->scrollOffset;
+ if (selectedRow != NULL)
+ *selectedRow = list->selectedRow;
+}
+
+u16 ListMenuGetYCoordForPrintingArrowCursor(u8 listTaskId)
+{
+ struct ListMenu *list = (void*) gTasks[listTaskId].data;
+ u8 yMultiplier = GetFontAttribute(list->template.fontId, 1) + list->template.unk_16_3;
+
+ return list->selectedRow * yMultiplier + list->template.upText_Y;
+}
+
+static u8 ListMenuInitInternal(struct ListMenuTemplate *listMenuTemplate, u16 scrollOffset, u16 selectedRow)
+{
+ u8 listTaskId = CreateTask(ListMenuDummyTask, 0);
+ struct ListMenu *list = (void*) gTasks[listTaskId].data;
+
+ list->template = *listMenuTemplate;
+ list->scrollOffset = scrollOffset;
+ list->selectedRow = selectedRow;
+ list->unk_1C = 0;
+ list->unk_1D = 0;
+ list->unk_1E = 0xFF;
+ list->unk_1F = 0;
+
+ gUnknown_03006300.cursorPal = list->template.cursorPal;
+ gUnknown_03006300.fillValue = list->template.fillValue;
+ gUnknown_03006300.cursorShadowPal = list->template.cursorShadowPal;
+ gUnknown_03006300.lettersSpacing = list->template.lettersSpacing;
+ gUnknown_03006300.fontId = list->template.fontId;
+ gUnknown_03006300.field_3_7 = 0;
+
+ if (list->template.totalItems < list->template.maxShowed)
+ list->template.maxShowed = list->template.totalItems;
+
+ FillWindowPixelBuffer(list->template.windowId, (list->template.fillValue << 4) | (list->template.fillValue));
+ ListMenuPrintEntries(list, list->scrollOffset, 0, list->template.maxShowed);
+ ListMenuDrawCursor(list);
+ ListMenuCallSelectionChangedCallback(list, 1);
+
+ return listTaskId;
+}
+
+static void ListMenuPrint(struct ListMenu *list, const u8 *str, u8 x, u8 y)
+{
+ u8 colors[3];
+ if (gUnknown_03006300.field_3_7)
+ {
+ colors[0] = gUnknown_03006300.fillValue;
+ colors[1] = gUnknown_03006300.cursorPal;
+ colors[2] = gUnknown_03006300.cursorShadowPal;
+ AddTextPrinterParameterized2(list->template.windowId,
+ gUnknown_03006300.fontId,
+ x, y,
+ gUnknown_03006300.lettersSpacing,
+ 0, colors, TEXT_SPEED_FF, str);
+
+ gUnknown_03006300.field_3_7 = 0;
+ }
+ else
+ {
+ colors[0] = list->template.fillValue;
+ colors[1] = list->template.cursorPal;
+ colors[2] = list->template.cursorShadowPal;
+ AddTextPrinterParameterized2(list->template.windowId,
+ list->template.fontId,
+ x, y,
+ list->template.lettersSpacing,
+ 0, colors, TEXT_SPEED_FF, str);
+ }
+}
+
+static void ListMenuPrintEntries(struct ListMenu *list, u16 startIndex, u16 yOffset, u16 count)
+{
+ s32 i;
+ u8 x, y;
+ u8 yMultiplier = GetFontAttribute(list->template.fontId, 1) + list->template.unk_16_3;
+
+ for (i = 0; i < count; i++)
+ {
+ if (list->template.items[startIndex].id != -3)
+ x = list->template.unk_12;
+ else
+ x = list->template.unk_11;
+
+ y = (yOffset + i) * yMultiplier + list->template.upText_Y;
+ if (list->template.unk_08 != NULL)
+ list->template.unk_08(list->template.windowId, list->template.items[startIndex].id, y);
+
+ ListMenuPrint(list, list->template.items[startIndex].name, x, y);
+ startIndex++;
+ }
+}
+
+static void ListMenuDrawCursor(struct ListMenu *list)
+{
+ u8 yMultiplier = GetFontAttribute(list->template.fontId, 1) + list->template.unk_16_3;
+ u8 x = list->template.cursor_X;
+ u8 y = list->selectedRow * yMultiplier + list->template.upText_Y;
+ switch (list->template.cursorKind)
+ {
+ case 0:
+ ListMenuPrint(list, gText_SelectorArrow2, x, y);
+ break;
+ case 1:
+ break;
+ case 2:
+ if (list->unk_1E == 0xFF)
+ list->unk_1E = ListMenuAddCursorObject(list, 0);
+ ListMenuUpdateCursorObject(list->unk_1E,
+ GetWindowAttribute(list->template.windowId, WINDOW_TILEMAP_LEFT) * 8 - 1,
+ GetWindowAttribute(list->template.windowId, WINDOW_TILEMAP_TOP) * 8 + y - 1, 0);
+ break;
+ case 3:
+ if (list->unk_1E == 0xFF)
+ list->unk_1E = ListMenuAddCursorObject(list, 1);
+ ListMenuUpdateCursorObject(list->unk_1E,
+ GetWindowAttribute(list->template.windowId, WINDOW_TILEMAP_LEFT) * 8 + x,
+ GetWindowAttribute(list->template.windowId, WINDOW_TILEMAP_TOP) * 8 + y, 1);
+ break;
+ }
+}
+
+static u8 ListMenuAddCursorObject(struct ListMenu *list, u32 cursorKind)
+{
+ struct CursorStruct cursor;
+
+ cursor.unk0 = 0;
+ cursor.unk1 = 0xA0;
+ cursor.unk2 = GetWindowAttribute(list->template.windowId, WINDOW_WIDTH) * 8 + 2;
+ cursor.unk4 = GetFontAttribute(list->template.fontId, 1) + 2;
+ cursor.unk6 = 0x4000;
+ cursor.unk8 = 0xFFFF;
+ cursor.unkA = 0xF;
+
+ return ListMenuAddCursorObjectInternal(&cursor, cursorKind);
+}
+
+static void ListMenuErasePrintedCursor(struct ListMenu *list, u16 selectedRow)
+{
+ u8 cursorKind = list->template.cursorKind;
+ if (cursorKind == 0)
+ {
+ u8 yMultiplier = GetFontAttribute(list->template.fontId, 1) + list->template.unk_16_3;
+ u8 width = GetMenuCursorDimensionByFont(list->template.fontId, 0);
+ u8 height = GetMenuCursorDimensionByFont(list->template.fontId, 1);
+ FillWindowPixelRect(list->template.windowId,
+ (list->template.fillValue << 4) | (list->template.fillValue),
+ list->template.cursor_X,
+ selectedRow * yMultiplier + list->template.upText_Y,
+ width,
+ height);
+ }
+}
+
+static u8 ListMenuUpdateSelectedRowIndexAndScrollOffset(struct ListMenu *list, bool8 movingDown)
+{
+ u16 selectedRow = list->selectedRow;
+ u16 scrollOffset = list->scrollOffset;
+ u16 newRow;
+ u32 newScroll;
+
+ if (!movingDown)
+ {
+ if (list->template.maxShowed == 1)
+ newRow = 0;
+ else
+ newRow = list->template.maxShowed - ((list->template.maxShowed / 2) + (list->template.maxShowed % 2)) - 1;
+
+ if (scrollOffset == 0)
+ {
+ while (selectedRow != 0)
+ {
+ selectedRow--;
+ if (list->template.items[scrollOffset + selectedRow].id != -3)
+ {
+ list->selectedRow = selectedRow;
+ return 1;
+ }
+ }
+
+ return 0;
+ }
+ else
+ {
+ while (selectedRow > newRow)
+ {
+ selectedRow--;
+ if (list->template.items[scrollOffset + selectedRow].id != -3)
+ {
+ list->selectedRow = selectedRow;
+ return 1;
+ }
+ }
+
+ newScroll = scrollOffset - 1;
+ }
+ }
+ else
+ {
+ if (list->template.maxShowed == 1)
+ newRow = 0;
+ else
+ newRow = ((list->template.maxShowed / 2) + (list->template.maxShowed % 2));
+
+ if (scrollOffset == list->template.totalItems - list->template.maxShowed)
+ {
+ while (selectedRow < list->template.maxShowed - 1)
+ {
+ selectedRow++;
+ if (list->template.items[scrollOffset + selectedRow].id != -3)
+ {
+ list->selectedRow = selectedRow;
+ return 1;
+ }
+ }
+
+ return 0;
+ }
+ else
+ {
+ while (selectedRow < newRow)
+ {
+ selectedRow++;
+ if (list->template.items[scrollOffset + selectedRow].id != -3)
+ {
+ list->selectedRow = selectedRow;
+ return 1;
+ }
+ }
+
+ newScroll = scrollOffset + 1;
+ }
+ }
+
+ list->selectedRow = newRow;
+ list->scrollOffset = newScroll;
+ return 2;
+}
+
+static void ListMenuScroll(struct ListMenu *list, u8 count, bool8 movingDown)
+{
+ if (count >= list->template.maxShowed)
+ {
+ FillWindowPixelBuffer(list->template.windowId, (list->template.fillValue << 4) | (list->template.fillValue));
+ ListMenuPrintEntries(list, list->scrollOffset, 0, list->template.maxShowed);
+ }
+ else
+ {
+ u8 yMultiplier = GetFontAttribute(list->template.fontId, 1) + list->template.unk_16_3;
+
+ if (!movingDown)
+ {
+ u16 y, width, height;
+
+ ScrollWindow(list->template.windowId, 1, count * yMultiplier, (list->template.fillValue << 4) | (list->template.fillValue));
+ ListMenuPrintEntries(list, list->scrollOffset, 0, count);
+
+ y = (list->template.maxShowed * yMultiplier) + list->template.upText_Y;
+ width = GetWindowAttribute(list->template.windowId, WINDOW_WIDTH) * 8;
+ height = (GetWindowAttribute(list->template.windowId, WINDOW_HEIGHT) * 8) - y;
+ FillWindowPixelRect(list->template.windowId,
+ (list->template.fillValue << 4) | (list->template.fillValue),
+ 0, y, width, height);
+ }
+ else
+ {
+ u16 width;
+
+ ScrollWindow(list->template.windowId, 0, count * yMultiplier, (list->template.fillValue << 4) | (list->template.fillValue));
+ ListMenuPrintEntries(list, list->scrollOffset + (list->template.maxShowed - count), list->template.maxShowed - count, count);
+
+ width = GetWindowAttribute(list->template.windowId, WINDOW_WIDTH) * 8;
+ FillWindowPixelRect(list->template.windowId,
+ (list->template.fillValue << 4) | (list->template.fillValue),
+ 0, 0, width, list->template.upText_Y);
+ }
+ }
+}
+
+static bool8 ListMenuChangeSelection(struct ListMenu *list, bool8 updateCursorAndCallCallback, u8 count, bool8 movingDown)
+{
+ u16 oldSelectedRow;
+ u8 selectionChange, i, cursorCount;
+
+ oldSelectedRow = list->selectedRow;
+ cursorCount = 0;
+ selectionChange = 0;
+ for (i = 0; i < count; i++)
+ {
+ do
+ {
+ u8 ret = ListMenuUpdateSelectedRowIndexAndScrollOffset(list, movingDown);
+ selectionChange |= ret;
+ if (ret != 2)
+ break;
+ cursorCount++;
+ } while (list->template.items[list->scrollOffset + list->selectedRow].id == -3);
+ }
+
+ if (updateCursorAndCallCallback)
+ {
+ switch (selectionChange)
+ {
+ case 0:
+ default:
+ return TRUE;
+ case 1:
+ ListMenuErasePrintedCursor(list, oldSelectedRow);
+ ListMenuDrawCursor(list);
+ ListMenuCallSelectionChangedCallback(list, 0);
+ CopyWindowToVram(list->template.windowId, 2);
+ break;
+ case 2:
+ case 3:
+ ListMenuErasePrintedCursor(list, oldSelectedRow);
+ ListMenuScroll(list, cursorCount, movingDown);
+ ListMenuDrawCursor(list);
+ ListMenuCallSelectionChangedCallback(list, 0);
+ CopyWindowToVram(list->template.windowId, 2);
+ break;
+ }
+ }
+
+ return FALSE;
+}
+
+static void ListMenuCallSelectionChangedCallback(struct ListMenu *list, u8 a2)
+{
+ if (list->template.moveCursorFunc != NULL)
+ list->template.moveCursorFunc(list->template.items[list->scrollOffset + list->selectedRow].id, a2, list);
+}
+
+// unused
+void sub_81AF028(u8 cursorPal, u8 fillValue, u8 cursorShadowPal)
+{
+ gUnknown_03006300.cursorPal = cursorPal;
+ gUnknown_03006300.fillValue = fillValue;
+ gUnknown_03006300.cursorShadowPal = cursorShadowPal;
+ gUnknown_03006300.field_3_7 = 1;
+}
+
+void sub_81AF078(s32 arg0, u8 arg1, struct ListMenu *list)
+{
+ if (!arg1)
+ PlaySE(SE_SELECT);
+}
diff --git a/src/load_save.c b/src/load_save.c
index a516c08c2..917c1dfe1 100644
--- a/src/load_save.c
+++ b/src/load_save.c
@@ -4,33 +4,30 @@
#include "main.h"
#include "pokemon.h"
#include "random.h"
+#include "malloc.h"
+#include "item.h"
extern void* gUnknown_0203CF5C;
extern bool16 IdentifyFlash(void);
-extern void SetBagItemsPointers(void);
extern void SetDecorationInventoriesPointers(void);
extern void ApplyNewEncryptionKeyToGameStats(u32 key);
-extern void ApplyNewEncryptionKeyToBagItems(u32 newKey);
-extern void ApplyNewEncryptionKeyToBagItems_(u32 key);
extern void ApplyNewEncryptionKeyToBerryPowder(u32 key);
extern void sub_8084FAC(int unused);
-// this is probably wrong or misleading due to it being used in ResetHeap...
-extern void InitHeap(void *pointer, u32 size);
-
#define SAVEBLOCK_MOVE_RANGE 128
struct LoadedSaveData
{
- /*0x0000*/ struct ItemSlot items[30];
- /*0x0078*/ struct ItemSlot keyItems[30];
- /*0x00F0*/ struct ItemSlot pokeBalls[16];
- /*0x0130*/ struct ItemSlot TMsHMs[64];
- /*0x0230*/ struct ItemSlot berries[46];
+ /*0x0000*/ struct ItemSlot items[BAG_ITEMS_COUNT];
+ /*0x0078*/ struct ItemSlot keyItems[BAG_KEYITEMS_COUNT];
+ /*0x00F0*/ struct ItemSlot pokeBalls[BAG_POKEBALLS_COUNT];
+ /*0x0130*/ struct ItemSlot TMsHMs[BAG_TMHM_COUNT];
+ /*0x0230*/ struct ItemSlot berries[BAG_BERRIES_COUNT];
/*0x02E8*/ struct MailStruct mail[MAIL_COUNT];
};
+// EWRAM DATA
EWRAM_DATA struct SaveBlock2 gSaveblock2 = {0};
EWRAM_DATA u8 gSaveblock2_DMA[SAVEBLOCK_MOVE_RANGE] = {0};
@@ -43,8 +40,13 @@ EWRAM_DATA u8 gSaveblock3_DMA[SAVEBLOCK_MOVE_RANGE] = {0};
EWRAM_DATA struct LoadedSaveData gLoadedSaveData = {0};
EWRAM_DATA u32 gLastEncryptionKey = {0};
-void ApplyNewEncryptionKeyToAllEncryptedData(u32 encryptionKey);
+// IWRAM common
+IWRAM_DATA bool32 gFlashMemoryPresent;
+IWRAM_DATA struct SaveBlock1 *gSaveBlock1Ptr;
+IWRAM_DATA struct SaveBlock2 *gSaveBlock2Ptr;
+IWRAM_DATA struct PokemonStorage *gPokemonStoragePtr;
+// code
void CheckForFlashMemory(void)
{
if (!IdentifyFlash())
@@ -53,7 +55,9 @@ void CheckForFlashMemory(void)
InitFlashTimer();
}
else
+ {
gFlashMemoryPresent = FALSE;
+ }
}
void ClearSav2(void)
@@ -80,8 +84,6 @@ void SetSaveBlocksPointers(u16 offset)
SetDecorationInventoriesPointers();
}
-extern u8 gHeap[];
-
void MoveSaveBlocks_ResetHeap(void)
{
void *vblankCB, *hblankCB;
@@ -132,13 +134,12 @@ void MoveSaveBlocks_ResetHeap(void)
gSaveBlock2Ptr->encryptionKey = encryptionKey;
}
-
-u8 sav2_x1_query_bit1(void)
+u32 GetSecretBase2Field_9(void)
{
return gSaveBlock2Ptr->specialSaveWarp & 1;
}
-void sav2_x9_clear_bit1(void)
+void ClearSecretBase2Field_9(void)
{
gSaveBlock2Ptr->specialSaveWarp &= ~1;
}
@@ -159,112 +160,112 @@ void sav2_gender2_inplace_and_xFE(void)
gSaveBlock2Ptr->specialSaveWarp &= ~1;
}
-void copy_player_party_to_sav1(void) // SavePlayerParty
+void SavePlayerParty(void)
{
int i;
gSaveBlock1Ptr->playerPartyCount = gPlayerPartyCount;
- for (i = 0; i < 6; i++)
+ for (i = 0; i < PARTY_SIZE; i++)
gSaveBlock1Ptr->playerParty[i] = gPlayerParty[i];
}
-void copy_player_party_from_sav1(void) // LoadPlayerParty
+void LoadPlayerParty(void)
{
int i;
gPlayerPartyCount = gSaveBlock1Ptr->playerPartyCount;
- for (i = 0; i < 6; i++)
+ for (i = 0; i < PARTY_SIZE; i++)
gPlayerParty[i] = gSaveBlock1Ptr->playerParty[i];
}
-void save_serialize_npcs(void) // SaveMapObjects
+void SaveMapObjects(void)
{
int i;
- for (i = 0; i < 16; i++)
+ for (i = 0; i < MAP_OBJECTS_COUNT; i++)
gSaveBlock1Ptr->mapObjects[i] = gMapObjects[i];
}
-void save_deserialize_npcs(void) // LoadMapObjects
+void LoadMapObjects(void)
{
int i;
- for (i = 0; i < 16; i++)
+ for (i = 0; i < MAP_OBJECTS_COUNT; i++)
gMapObjects[i] = gSaveBlock1Ptr->mapObjects[i];
}
void SaveSerializedGame(void)
{
- copy_player_party_to_sav1();
- save_serialize_npcs();
+ SavePlayerParty();
+ SaveMapObjects();
}
void LoadSerializedGame(void)
{
- copy_player_party_from_sav1();
- save_deserialize_npcs();
+ LoadPlayerParty();
+ LoadMapObjects();
}
-void copy_bags_and_unk_data_from_save_blocks(void)
+void LoadPlayerBag(void)
{
int i;
// load player items.
- for (i = 0; i < 30; i++)
+ for (i = 0; i < BAG_ITEMS_COUNT; i++)
gLoadedSaveData.items[i] = gSaveBlock1Ptr->bagPocket_Items[i];
// load player key items.
- for (i = 0; i < 30; i++)
+ for (i = 0; i < BAG_KEYITEMS_COUNT; i++)
gLoadedSaveData.keyItems[i] = gSaveBlock1Ptr->bagPocket_KeyItems[i];
// load player pokeballs.
- for (i = 0; i < 16; i++)
+ for (i = 0; i < BAG_POKEBALLS_COUNT; i++)
gLoadedSaveData.pokeBalls[i] = gSaveBlock1Ptr->bagPocket_PokeBalls[i];
// load player TMs and HMs.
- for (i = 0; i < 64; i++)
+ for (i = 0; i < BAG_TMHM_COUNT; i++)
gLoadedSaveData.TMsHMs[i] = gSaveBlock1Ptr->bagPocket_TMHM[i];
// load player berries.
- for (i = 0; i < 46; i++)
+ for (i = 0; i < BAG_BERRIES_COUNT; i++)
gLoadedSaveData.berries[i] = gSaveBlock1Ptr->bagPocket_Berries[i];
// load mail.
- for (i = 0; i < 16; i++)
+ for (i = 0; i < MAIL_COUNT; i++)
gLoadedSaveData.mail[i] = gSaveBlock1Ptr->mail[i];
gLastEncryptionKey = gSaveBlock2Ptr->encryptionKey;
}
-void copy_bags_and_unk_data_to_save_blocks(void)
+void SavePlayerBag(void)
{
int i;
u32 encryptionKeyBackup;
// save player items.
- for (i = 0; i < 30; i++)
+ for (i = 0; i < BAG_ITEMS_COUNT; i++)
gSaveBlock1Ptr->bagPocket_Items[i] = gLoadedSaveData.items[i];
// save player key items.
- for (i = 0; i < 30; i++)
+ for (i = 0; i < BAG_KEYITEMS_COUNT; i++)
gSaveBlock1Ptr->bagPocket_KeyItems[i] = gLoadedSaveData.keyItems[i];
// save player pokeballs.
- for (i = 0; i < 16; i++)
+ for (i = 0; i < BAG_POKEBALLS_COUNT; i++)
gSaveBlock1Ptr->bagPocket_PokeBalls[i] = gLoadedSaveData.pokeBalls[i];
// save player TMs and HMs.
- for (i = 0; i < 64; i++)
+ for (i = 0; i < BAG_TMHM_COUNT; i++)
gSaveBlock1Ptr->bagPocket_TMHM[i] = gLoadedSaveData.TMsHMs[i];
// save player berries.
- for (i = 0; i < 46; i++)
+ for (i = 0; i < BAG_BERRIES_COUNT; i++)
gSaveBlock1Ptr->bagPocket_Berries[i] = gLoadedSaveData.berries[i];
// save mail.
- for (i = 0; i < 16; i++)
+ for (i = 0; i < MAIL_COUNT; i++)
gSaveBlock1Ptr->mail[i] = gLoadedSaveData.mail[i];
encryptionKeyBackup = gSaveBlock2Ptr->encryptionKey;
diff --git a/src/mail.c b/src/mail.c
index ac263ac67..8fddc7045 100644
--- a/src/mail.c
+++ b/src/mail.c
@@ -101,7 +101,7 @@ struct MailRead
/*0x021c*/ u8 monIconSprite;
/*0x021d*/ u8 language;
/*0x021e*/ bool8 playerIsSender;
- /*0x0220*/ void (*parserSingle)(u8 *dest, u16 word);
+ /*0x0220*/ u8 * (*parserSingle)(u8 *dest, u16 word);
/*0x0224*/ void (*parserMultiple)(u8 *dest, const u16 *src, u16 length1, u16 length2);
/*0x0228*/ const struct MailLayout *layout;
/*0x022c*/ u8 bg1TilemapBuffer[0x1000];
@@ -403,11 +403,11 @@ static bool8 MailReadBuildGraphics(void)
switch (sMailRead->animsActive)
{
case 1:
- sub_80D2F68(icon);
+ LoadMonIconPalette(icon);
sMailRead->monIconSprite = sub_80D2D78(icon, SpriteCallbackDummy, 0x60, 0x80, 0, 0);
break;
case 2:
- sub_80D2F68(icon);
+ LoadMonIconPalette(icon);
sMailRead->monIconSprite = sub_80D2D78(icon, SpriteCallbackDummy, 0x28, 0x80, 0, 0);
break;
}
@@ -540,7 +540,7 @@ static void CB2_ExitMailReadFreeVars(void)
{
case 1:
case 2:
- sub_80D2FF0(sub_80D2E84(sMailRead->mail->species));
+ FreeMonIconPalette(sub_80D2E84(sMailRead->mail->species));
sub_80D2EF8(&gSprites[sMailRead->monIconSprite]);
}
memset(sMailRead, 0, sizeof(*sMailRead));
diff --git a/src/main.c b/src/main.c
index d4601293b..f04f9b61b 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;
}
}
@@ -184,7 +166,7 @@ static void InitMainCallbacks(void)
gUnknown_0203CF5C = NULL;
gMain.vblankCounter2 = 0;
gMain.callback1 = NULL;
- SetMainCallback2(c2_copyright_1);
+ SetMainCallback2(CB2_InitCopyrightScreenAfterBootup);
gSaveBlock2Ptr = &gSaveblock2;
gPokemonStoragePtr = &gPokemonStorage;
}
@@ -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 8608159c2..3d6c1df76 100644
--- a/src/main_menu.c
+++ b/src/main_menu.c
@@ -1,15 +1,1977 @@
// Includes
#include "global.h"
+#include "battle_dome_cards.h"
+#include "bg.h"
+#include "constants/flags.h"
+#include "constants/rgb.h"
+#include "constants/songs.h"
+#include "constants/species.h"
+#include "decompress.h"
+#include "event_data.h"
+#include "field_effect.h"
+#include "gpu_regs.h"
+#include "graphics.h"
+#include "international_string_util.h"
+#include "link.h"
+#include "main.h"
+#include "menu.h"
+#include "menu_indicators.h"
+#include "mystery_event_menu.h"
+#include "naming_screen.h"
+#include "option_menu.h"
+#include "overworld.h"
+#include "palette.h"
+#include "pokeball.h"
+#include "pokedex.h"
+#include "pokemon_3.h"
+#include "random.h"
+#include "rtc.h"
+#include "save.h"
+#include "scanline_effect.h"
+#include "sound.h"
+#include "sprite.h"
+#include "string.h"
+#include "strings.h"
+#include "string_util.h"
+#include "task.h"
+#include "text.h"
+#include "text_window.h"
+#include "title_screen.h"
+#include "window.h"
// Static type declarations
// Static RAM declarations
+EWRAM_DATA u8 gUnknown_02022D04 = 0;
+EWRAM_DATA u16 gUnknown_02022D06 = 0;
+
IWRAM_DATA u8 gUnknown_03000DD0;
// Static ROM declarations
+u32 InitMainMenu(bool8);
+void Task_MainMenuCheckSaveFile(u8);
+void Task_MainMenuCheckBattery(u8);
+void Task_WaitForSaveFileErrorWindow(u8);
+void CreateMainMenuErrorWindow(const u8*);
+void sub_8032250(const struct WindowTemplate*);
+void Task_DisplayMainMenu(u8);
+void Task_WaitForBatteryDryErrorWindow(u8);
+void fmt_savegame(void);
+void HighlightSelectedMainMenuItem(u8, u8, s16);
+void Task_HandleMainMenuInput(u8);
+void Task_HandleMainMenuAPressed(u8);
+void Task_HandleMainMenuBPressed(u8);
+void task_new_game_prof_birch_speech_1(u8);
+void Task_DisplayMainMenuInvalidActionError(u8);
+void AddBirchSpeechObjects(u8);
+void task_new_game_prof_birch_speech_2(u8);
+void sub_8031BAC(u8, u8);
+void sub_8031D34(u8, u8);
+void task_new_game_prof_birch_speech_3(u8);
+void unknown_rbox_to_vram(u8, u8);
+void sub_8032318(u8);
+void task_new_game_prof_birch_speech_4(u8);
+void task_new_game_prof_birch_speech_5(u8);
+void sub_80323A0(struct TextSubPrinter *printer, u16 a);
+void task_new_game_prof_birch_speech_6(u8);
+void sub_8030B14(u8);
+void task_new_game_prof_birch_speech_7(u8);
+void sub_8031ACC(u8, u8);
+void sub_8031C88(u8, u8);
+void task_new_game_prof_birch_speech_8(u8);
+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(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);
+void sub_8031D74(void);
+s8 sub_8031DB4(void);
+void sub_80322E0(u8, u8);
+void task_new_game_prof_birch_speech_14(u8);
+void sub_8030ED4(u8);
+void sub_8030F7C(u8);
+void task_new_game_prof_birch_speech_15(u8);
+void task_new_game_prof_birch_speech_16(u8);
+void task_new_game_prof_birch_speech_17(u8);
+void new_game_prof_birch_speech_part2_start(void);
+void set_default_player_name(u8);
+void task_new_game_prof_birch_speech_part2_3(u8);
+void task_new_game_prof_birch_speech_part2_4(u8);
+void sub_80323CC(u8, u8, u16, u16, u8, u8);
+void task_new_game_prof_birch_speech_part2_5(u8);
+void task_new_game_prof_birch_speech_part2_6(u8);
+void task_new_game_prof_birch_speech_part2_7(u8);
+void task_new_game_prof_birch_speech_part2_8(u8);
+void task_new_game_prof_birch_speech_part2_9(u8);
+void sub_80318D8(struct Sprite*);
+void task_new_game_prof_birch_speech_part2_10(u8);
+void task_new_game_prof_birch_speech_part2_11(u8);
+void task_new_game_prof_birch_speech_part2_12(u8);
+void nullsub_11();
+void task_new_game_prof_birch_speech_part2_1(u8);
+void fmt_time(void);
+void fmt_pokedex(void);
+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[] = {
+ {
+ .bg = 0,
+ .charBaseIndex = 2,
+ .mapBaseIndex = 30,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 0,
+ .baseTile = 0
+ },
+ {
+ .bg = 1,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 7,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 3,
+ .baseTile = 0
+ }
+};
+
+const struct BgTemplate gUnknown_082FF0F0 = {
+ .bg = 0,
+ .charBaseIndex = 3,
+ .mapBaseIndex = 30,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 0,
+ .baseTile = 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,
+};
+
+#define MAIN_MENU_BORDER_TILE 0x1D5
+
+void CB2_MainMenu(void)
+{
+ RunTasks();
+ AnimateSprites();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+}
+
+void VBlankCB_MainMenu(void)
+{
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+}
+
+void CB2_InitMainMenu(void)
+{
+ InitMainMenu(FALSE);
+}
+
+void CB2_ReinitMainMenu(void)
+{
+ InitMainMenu(TRUE);
+}
+
+u32 InitMainMenu(bool8 returningFromOptionsMenu)
+{
+ SetVBlankCallback(NULL);
+
+ SetGpuReg(REG_OFFSET_DISPCNT, 0);
+ SetGpuReg(REG_OFFSET_BG2CNT, 0);
+ SetGpuReg(REG_OFFSET_BG1CNT, 0);
+ SetGpuReg(REG_OFFSET_BG0CNT, 0);
+ SetGpuReg(REG_OFFSET_BG2HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG2VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG1HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG1VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG0HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG0VOFS, 0);
+
+ DmaFill16(3, 0, (void *)VRAM, VRAM_SIZE);
+ DmaFill32(3, 0, (void *)OAM, OAM_SIZE);
+ DmaFill16(3, 0, (void *)(PLTT + 2), PLTT_SIZE - 2);
+
+ ResetPaletteFade();
+ LoadPalette(gMainMenuBgPal, 0, 32);
+ LoadPalette(gMainMenuTextPal, 0xF0, 32);
+ ScanlineEffect_Stop();
+ ResetTasks();
+ ResetSpriteData();
+ FreeAllSpritePalettes();
+ if (returningFromOptionsMenu)
+ BeginNormalPaletteFade(-1, 0, 0x10, 0, 0x0000); // fade to black
+ else
+ BeginNormalPaletteFade(-1, 0, 0x10, 0, 0xFFFF); // fade to white
+ ResetBgsAndClearDma3BusyFlags(0);
+ InitBgsFromTemplates(0, gUnknown_082FF0E8, 2);
+ ChangeBgX(0, 0, 0);
+ ChangeBgY(0, 0, 0);
+ ChangeBgX(1, 0, 0);
+ ChangeBgY(1, 0, 0);
+ InitWindows(gUnknown_082FF038);
+ DeactivateAllTextPrinters();
+ LoadMainMenuWindowFrameTiles(0, MAIN_MENU_BORDER_TILE);
+
+ SetGpuReg(REG_OFFSET_WIN0H, 0);
+ SetGpuReg(REG_OFFSET_WIN0V, 0);
+ SetGpuReg(REG_OFFSET_WININ, 0);
+ SetGpuReg(REG_OFFSET_WINOUT, 0);
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ SetGpuReg(REG_OFFSET_BLDY, 0);
+
+ EnableInterrupts(1);
+ SetVBlankCallback(VBlankCB_MainMenu);
+ SetMainCallback2(CB2_MainMenu);
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_WIN0_ON | DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP);
+ ShowBg(0);
+ HideBg(1);
+ CreateTask(Task_MainMenuCheckSaveFile, 0);
+
+ return 0;
+}
+
+void Task_MainMenuCheckSaveFile(u8 taskId)
+{
+ s16* data = gTasks[taskId].data;
+
+ if (!gPaletteFade.active)
+ {
+ SetGpuReg(REG_OFFSET_WIN0H, 0);
+ SetGpuReg(REG_OFFSET_WIN0V, 0);
+ SetGpuReg(REG_OFFSET_WININ, 17);
+ SetGpuReg(REG_OFFSET_WINOUT, 0x31);
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_DARKEN | BLDCNT_TGT1_BG0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ SetGpuReg(REG_OFFSET_BLDY, 7);
+
+ if (sub_80093CC())
+ data[15] = 1;
+ switch (gSaveFileStatus)
+ {
+ case 1:
+ data[0] = HAS_SAVED_GAME;
+ if (IsMysteryGiftEnabled())
+ data[0]++;
+ gTasks[taskId].func = Task_MainMenuCheckBattery;
+ break;
+ case 2:
+ CreateMainMenuErrorWindow(gText_SaveFileErased);
+ data[0] = 0;
+ gTasks[taskId].func = Task_WaitForSaveFileErrorWindow;
+ break;
+ case 0xFF:
+ CreateMainMenuErrorWindow(gText_SaveFileCorrupted);
+ gTasks[taskId].func = Task_WaitForSaveFileErrorWindow;
+ data[0] = HAS_SAVED_GAME;
+ if (IsMysteryGiftEnabled() == TRUE)
+ data[0]++;
+ break;
+ case 0:
+ default:
+ data[0] = HAS_NO_SAVED_GAME;
+ gTasks[taskId].func = Task_MainMenuCheckBattery;
+ break;
+ case 4:
+ CreateMainMenuErrorWindow(gJPText_No1MSubCircuit);
+ gTasks[taskId].data[0] = HAS_NO_SAVED_GAME;
+ gTasks[taskId].func = Task_WaitForSaveFileErrorWindow;
+ break;
+ }
+ if (gUnknown_02022D06 & 0x8000)
+ {
+ switch (data[0])
+ {
+ case HAS_NO_SAVED_GAME:
+ case HAS_SAVED_GAME:
+ gUnknown_02022D06 = data[0] + 1;
+ break;
+ case HAS_MYSTERY_GIFT:
+ gUnknown_02022D06 = 3;
+ break;
+ case 3:
+ gUnknown_02022D06 = 4;
+ break;
+ }
+ }
+ gUnknown_02022D06 &= 0x7FFF;
+ data[1] = gUnknown_02022D06;
+ data[12] = data[0] + 2;
+ }
+}
+
+void Task_WaitForSaveFileErrorWindow(u8 taskId)
+{
+ RunTextPrinters();
+ if (!IsTextPrinterActive(7) && (gMain.newKeys & A_BUTTON))
+ {
+ ClearWindowTilemap(7);
+ sub_8032250(gUnknown_082FF070);
+ gTasks[taskId].func = Task_MainMenuCheckBattery;
+ }
+}
+
+void Task_MainMenuCheckBattery(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ SetGpuReg(REG_OFFSET_WIN0H, 0);
+ SetGpuReg(REG_OFFSET_WIN0V, 0);
+ SetGpuReg(REG_OFFSET_WININ, 17);
+ SetGpuReg(REG_OFFSET_WINOUT, 0x31);
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_DARKEN | BLDCNT_TGT1_BG0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ SetGpuReg(REG_OFFSET_BLDY, 7);
+
+ if (!(RtcGetErrorStatus() & RTC_ERR_FLAG_MASK))
+ {
+ gTasks[taskId].func = Task_DisplayMainMenu;
+ }
+ else
+ {
+ CreateMainMenuErrorWindow(gText_BatteryRunDry);
+ gTasks[taskId].func = Task_WaitForBatteryDryErrorWindow;
+ }
+ }
+}
+
+void Task_WaitForBatteryDryErrorWindow(u8 taskId)
+{
+ RunTextPrinters();
+ if (!IsTextPrinterActive(7) && (gMain.newKeys & A_BUTTON))
+ {
+ ClearWindowTilemap(7);
+ sub_8032250(gUnknown_082FF070);
+ gTasks[taskId].func = Task_DisplayMainMenu;
+ }
+}
+
+void Task_DisplayMainMenu(u8 taskId)
+{
+ s16* data = gTasks[taskId].data;
+ u16 palette;
+
+ if (!gPaletteFade.active)
+ {
+ SetGpuReg(REG_OFFSET_WIN0H, 0);
+ SetGpuReg(REG_OFFSET_WIN0V, 0);
+ SetGpuReg(REG_OFFSET_WININ, 17);
+ SetGpuReg(REG_OFFSET_WINOUT, 0x31);
+ SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_DARKEN | BLDCNT_TGT1_BG0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ SetGpuReg(REG_OFFSET_BLDY, 7);
+
+ palette = RGB_BLACK;
+ LoadPalette(&palette, 254, 2);
+
+ palette = RGB_WHITE;
+ LoadPalette(&palette, 250, 2);
+
+ palette = RGB(12, 12, 12);
+ LoadPalette(&palette, 251, 2);
+
+ palette = RGB(26, 26, 25);
+ LoadPalette(&palette, 252, 2);
+
+ if (gSaveBlock2Ptr->playerGender == MALE)
+ {
+ palette = RGB(4, 16, 31);
+ LoadPalette(&palette, 241, 2);
+ }
+ else
+ {
+ palette = RGB(31, 3, 21);
+ LoadPalette(&palette, 241, 2);
+ }
+
+ switch (gTasks[taskId].data[0])
+ {
+ case HAS_NO_SAVED_GAME:
+ default:
+ FillWindowPixelBuffer(0, 0xAA);
+ FillWindowPixelBuffer(1, 0xAA);
+ box_print(0, 1, 0, 1, gUnknown_082FF0E0, -1, gText_MainMenuNewGame);
+ box_print(1, 1, 0, 1, gUnknown_082FF0E0, -1, gText_MainMenuOption);
+ PutWindowTilemap(0);
+ PutWindowTilemap(1);
+ CopyWindowToVram(0, 2);
+ CopyWindowToVram(1, 2);
+ DrawMainMenuWindowBorder(gUnknown_082FF038, MAIN_MENU_BORDER_TILE);
+ DrawMainMenuWindowBorder(&gUnknown_082FF038[1], MAIN_MENU_BORDER_TILE);
+ break;
+ case HAS_SAVED_GAME:
+ FillWindowPixelBuffer(2, 0xAA);
+ FillWindowPixelBuffer(3, 0xAA);
+ FillWindowPixelBuffer(4, 0xAA);
+ box_print(2, 1, 0, 1, gUnknown_082FF0E0, -1, gText_MainMenuContinue);
+ box_print(3, 1, 0, 1, gUnknown_082FF0E0, -1, gText_MainMenuNewGame);
+ box_print(4, 1, 0, 1, gUnknown_082FF0E0, -1, gText_MainMenuOption);
+ fmt_savegame();
+ PutWindowTilemap(2);
+ PutWindowTilemap(3);
+ PutWindowTilemap(4);
+ CopyWindowToVram(2, 2);
+ CopyWindowToVram(3, 2);
+ CopyWindowToVram(4, 2);
+ DrawMainMenuWindowBorder(gUnknown_082FF048, MAIN_MENU_BORDER_TILE);
+ DrawMainMenuWindowBorder(&gUnknown_082FF048[1], MAIN_MENU_BORDER_TILE);
+ DrawMainMenuWindowBorder(&gUnknown_082FF048[2], MAIN_MENU_BORDER_TILE);
+ break;
+ case HAS_MYSTERY_GIFT:
+ FillWindowPixelBuffer(2, 0xAA);
+ FillWindowPixelBuffer(3, 0xAA);
+ FillWindowPixelBuffer(4, 0xAA);
+ FillWindowPixelBuffer(5, 0xAA);
+ box_print(2, 1, 0, 1, gUnknown_082FF0E0, -1, gText_MainMenuContinue);
+ box_print(3, 1, 0, 1, gUnknown_082FF0E0, -1, gText_MainMenuNewGame);
+ box_print(4, 1, 0, 1, gUnknown_082FF0E0, -1, gText_MainMenuMysteryGift);
+ box_print(5, 1, 0, 1, gUnknown_082FF0E0, -1, gText_MainMenuOption);
+ fmt_savegame();
+ PutWindowTilemap(2);
+ PutWindowTilemap(3);
+ PutWindowTilemap(4);
+ PutWindowTilemap(5);
+ CopyWindowToVram(2, 2);
+ CopyWindowToVram(3, 2);
+ CopyWindowToVram(4, 2);
+ CopyWindowToVram(5, 2);
+ DrawMainMenuWindowBorder(gUnknown_082FF048, MAIN_MENU_BORDER_TILE);
+ DrawMainMenuWindowBorder(&gUnknown_082FF048[1], MAIN_MENU_BORDER_TILE);
+ DrawMainMenuWindowBorder(&gUnknown_082FF048[2], MAIN_MENU_BORDER_TILE);
+ DrawMainMenuWindowBorder(&gUnknown_082FF048[3], MAIN_MENU_BORDER_TILE);
+ break;
+ case HAS_MYSTERY_EVENTS:
+ FillWindowPixelBuffer(2, 0xAA);
+ FillWindowPixelBuffer(3, 0xAA);
+ FillWindowPixelBuffer(4, 0xAA);
+ FillWindowPixelBuffer(5, 0xAA);
+ FillWindowPixelBuffer(6, 0xAA);
+ box_print(2, 1, 0, 1, gUnknown_082FF0E0, -1, gText_MainMenuContinue);
+ box_print(3, 1, 0, 1, gUnknown_082FF0E0, -1, gText_MainMenuNewGame);
+ box_print(4, 1, 0, 1, gUnknown_082FF0E0, -1, gText_MainMenuMysteryGift2);
+ box_print(5, 1, 0, 1, gUnknown_082FF0E0, -1, gText_MainMenuMysteryEvents);
+ box_print(6, 1, 0, 1, gUnknown_082FF0E0, -1, gText_MainMenuOption);
+ fmt_savegame();
+ PutWindowTilemap(2);
+ PutWindowTilemap(3);
+ PutWindowTilemap(4);
+ PutWindowTilemap(5);
+ PutWindowTilemap(6);
+ CopyWindowToVram(2, 2);
+ CopyWindowToVram(3, 2);
+ CopyWindowToVram(4, 2);
+ CopyWindowToVram(5, 2);
+ CopyWindowToVram(6, 2);
+ DrawMainMenuWindowBorder(gUnknown_082FF048, MAIN_MENU_BORDER_TILE);
+ DrawMainMenuWindowBorder(&gUnknown_082FF048[1], MAIN_MENU_BORDER_TILE);
+ DrawMainMenuWindowBorder(&gUnknown_082FF048[2], MAIN_MENU_BORDER_TILE);
+ DrawMainMenuWindowBorder(&gUnknown_082FF048[3], MAIN_MENU_BORDER_TILE);
+ DrawMainMenuWindowBorder(&gUnknown_082FF048[4], MAIN_MENU_BORDER_TILE);
+ data[13] = AddScrollIndicatorArrowPair(&gUnknown_082FF0F4, &gUnknown_02022D06);
+ gTasks[data[13]].func = Task_ScrollIndicatorArrowPairOnMainMenu;
+ if (gUnknown_02022D06 == 4)
+ {
+ ChangeBgY(0, 0x2000, 1);
+ ChangeBgY(1, 0x2000, 1);
+ data[14] = 1;
+ gTasks[data[13]].data[15] = 1;
+ }
+ break;
+ }
+ gTasks[taskId].func = Task_HighlightSelectedMainMenuItem;
+ }
+}
+
+void Task_HighlightSelectedMainMenuItem(u8 taskId)
+{
+ HighlightSelectedMainMenuItem(gTasks[taskId].data[0], gTasks[taskId].data[1], gTasks[taskId].data[14]);
+ gTasks[taskId].func = Task_HandleMainMenuInput;
+}
+
+bool8 HandleMainMenuInput(u8 taskId)
+{
+ s16* data = gTasks[taskId].data;
+
+ if (gMain.newKeys & A_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ sub_80093CC();
+ BeginNormalPaletteFade(-1, 0, 0, 0x10, RGB_BLACK);
+ gTasks[taskId].func = Task_HandleMainMenuAPressed;
+ }
+ else if (gMain.newKeys & B_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ BeginNormalPaletteFade(-1, 0, 0, 0x10, RGB_WHITEALPHA);
+ SetGpuReg(REG_OFFSET_WIN0H, 0xF0);
+ SetGpuReg(REG_OFFSET_WIN0V, 0xA0);
+ gTasks[taskId].func = Task_HandleMainMenuBPressed;
+ }
+ else if ((gMain.newKeys & DPAD_UP) && data[1] > 0)
+ {
+ if (data[0] == 3 && data[14] == 1 && data[1] == 1)
+ {
+ ChangeBgY(0, 0x2000, 2);
+ ChangeBgY(1, 0x2000, 2);
+ gTasks[data[13]].data[15] = data[14] = 0;
+ }
+ data[1]--;
+ gUnknown_02022D06 = data[1];
+ return TRUE;
+ }
+ else if ((gMain.newKeys & DPAD_DOWN) && data[1] < data[12] - 1)
+ {
+ if (data[0] == 3 && data[1] == 3 && data[14] == 0)
+ {
+ ChangeBgY(0, 0x2000, 1);
+ ChangeBgY(1, 0x2000, 1);
+ gTasks[data[13]].data[15] = data[14] = 1;
+ }
+ data[1]++;
+ gUnknown_02022D06 = data[1];
+ return TRUE;
+ }
+ return FALSE;
+}
+
+void Task_HandleMainMenuInput(u8 taskId)
+{
+ if (HandleMainMenuInput(taskId))
+ gTasks[taskId].func = Task_HighlightSelectedMainMenuItem;
+}
+
+void Task_HandleMainMenuAPressed(u8 taskId)
+{
+ bool8 r2;
+ u8 action;
+
+ if (!gPaletteFade.active)
+ {
+ if (gTasks[taskId].data[0] == 3)
+ RemoveScrollIndicatorArrowPair(gTasks[taskId].data[13]);
+ sub_819746C(0, 1);
+ sub_819746C(1, 1);
+ sub_819746C(2, 1);
+ sub_819746C(3, 1);
+ sub_819746C(4, 1);
+ sub_819746C(5, 1);
+ sub_819746C(6, 1);
+ sub_819746C(7, 1);
+ r2 = sub_80093CC();
+ switch (gTasks[taskId].data[0])
+ {
+ case HAS_NO_SAVED_GAME:
+ default:
+ switch (gTasks[taskId].data[1])
+ {
+ case 0:
+ default:
+ action = 0;
+ break;
+ case 1:
+ action = 2;
+ break;
+ }
+ break;
+ case HAS_SAVED_GAME:
+ switch (gTasks[taskId].data[1])
+ {
+ case 0:
+ default:
+ action = 1;
+ break;
+ case 1:
+ action = 0;
+ break;
+ case 2:
+ action = 2;
+ break;
+ }
+ break;
+ case HAS_MYSTERY_GIFT:
+ switch (gTasks[taskId].data[1])
+ {
+ case 0:
+ default:
+ action = 1;
+ break;
+ case 1:
+ action = 0;
+ break;
+ case 2:
+ action = 3;
+ if (r2 == FALSE)
+ {
+ action = 6;
+ gTasks[taskId].data[0] = 0;
+ }
+ break;
+ case 3:
+ action = 2;
+ break;
+ }
+ break;
+ case HAS_MYSTERY_EVENTS:
+ switch (gTasks[taskId].data[1])
+ {
+ case 0:
+ default:
+ action = 1;
+ break;
+ case 1:
+ action = 0;
+ break;
+ case 2:
+ if (gTasks[taskId].data[15])
+ {
+ action = 3;
+ if (r2 == FALSE)
+ {
+ action = 6;
+ gTasks[taskId].data[0] = 0;
+ }
+ }
+ else if (r2)
+ {
+ action = 6;
+ gTasks[taskId].data[0] = 1;
+ }
+ else
+ {
+ action = 5;
+ }
+ break;
+ case 3:
+ if (r2)
+ {
+ action = 6;
+ gTasks[taskId].data[0] = 2;
+ }
+ else
+ {
+ action = 4;
+ }
+ break;
+ case 4:
+ action = 2;
+ break;
+ }
+ break;
+ }
+ ChangeBgY(0, 0, 0);
+ ChangeBgY(1, 0, 0);
+ switch (action)
+ {
+ case 0:
+ default:
+ gPlttBufferUnfaded[0] = RGB_BLACK;
+ gPlttBufferFaded[0] = RGB_BLACK;
+ gTasks[taskId].func = task_new_game_prof_birch_speech_1;
+ break;
+ case 1:
+ gPlttBufferUnfaded[0] = RGB_BLACK;
+ gPlttBufferFaded[0] = RGB_BLACK;
+ SetMainCallback2(CB2_ContinueSavedGame);
+ DestroyTask(taskId);
+ break;
+ case 2:
+ gMain.savedCallback = CB2_ReinitMainMenu;
+ SetMainCallback2(CB2_InitOptionMenu);
+ DestroyTask(taskId);
+ break;
+ case 3:
+ SetMainCallback2(c2_mystery_gift);
+ DestroyTask(taskId);
+ break;
+ case 4:
+ SetMainCallback2(CB2_InitMysteryEventMenu);
+ DestroyTask(taskId);
+ break;
+ case 5:
+ SetMainCallback2(sub_801867C);
+ DestroyTask(taskId);
+ break;
+ case 6:
+ gTasks[taskId].data[1] = 0;
+ gTasks[taskId].func = Task_DisplayMainMenuInvalidActionError;
+ gPlttBufferUnfaded[0xF1] = RGB_WHITE;
+ gPlttBufferFaded[0xF1] = RGB_WHITE;
+ SetGpuReg(REG_OFFSET_BG2HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG2VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG1HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG1VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG0HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG0VOFS, 0);
+ BeginNormalPaletteFade(-1, 0, 16, 0, 0);
+ return;
+ }
+ FreeAllWindowBuffers();
+ if (action != 2)
+ gUnknown_02022D06 = 0;
+ else
+ gUnknown_02022D06 |= 0x8000;
+ }
+}
+
+void Task_HandleMainMenuBPressed(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ if (gTasks[taskId].data[0] == 3)
+ RemoveScrollIndicatorArrowPair(gTasks[taskId].data[13]);
+ gUnknown_02022D06 = 0;
+ FreeAllWindowBuffers();
+ SetMainCallback2(CB2_InitTitleScreen);
+ DestroyTask(taskId);
+ }
+}
+
+void Task_DisplayMainMenuInvalidActionError(u8 taskId)
+{
+ switch (gTasks[taskId].data[1])
+ {
+ case 0:
+ FillBgTilemapBufferRect_Palette0(0, 0, 0, 0, 30, 20);
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ CreateMainMenuErrorWindow(gText_WirelessNotConnected);
+ break;
+ case 1:
+ CreateMainMenuErrorWindow(gText_MysteryGiftCantUse);
+ break;
+ case 2:
+ CreateMainMenuErrorWindow(gText_MysteryEventsCantUse);
+ break;
+ }
+ gTasks[taskId].data[1]++;
+ break;
+ case 1:
+ if (!gPaletteFade.active)
+ gTasks[taskId].data[1]++;
+ break;
+ case 2:
+ RunTextPrinters();
+ if (!IsTextPrinterActive(7))
+ gTasks[taskId].data[1]++;
+ break;
+ case 3:
+ if (gMain.newKeys & (A_BUTTON | B_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ BeginNormalPaletteFade(-1, 0, 0, 16, RGB_BLACK);
+ gTasks[taskId].func = Task_HandleMainMenuBPressed;
+ }
+ }
+}
+
+void HighlightSelectedMainMenuItem(u8 menuType, u8 selectedMenuItem, s16 a)
+{
+ SetGpuReg(REG_OFFSET_WIN0H, 0x9E7);
+
+ switch (menuType)
+ {
+ case HAS_NO_SAVED_GAME:
+ default:
+ switch (selectedMenuItem)
+ {
+ case 0:
+ default:
+ SetGpuReg(REG_OFFSET_WIN0V, 0x11F);
+ break;
+ case 1:
+ SetGpuReg(REG_OFFSET_WIN0V, 0x213F);
+ break;
+ }
+ break;
+ case HAS_SAVED_GAME:
+ switch (selectedMenuItem)
+ {
+ case 0:
+ default:
+ SetGpuReg(REG_OFFSET_WIN0V, 0x13F);
+ break;
+ case 1:
+ SetGpuReg(REG_OFFSET_WIN0V, 0x415F);
+ break;
+ case 2:
+ SetGpuReg(REG_OFFSET_WIN0V, 0x617F);
+ break;
+ }
+ break;
+ case HAS_MYSTERY_GIFT:
+ switch (selectedMenuItem)
+ {
+ case 0:
+ default:
+ SetGpuReg(REG_OFFSET_WIN0V, 0x13F);
+ break;
+ case 1:
+ SetGpuReg(REG_OFFSET_WIN0V, 0x415F);
+ break;
+ case 2:
+ SetGpuReg(REG_OFFSET_WIN0V, 0x617F);
+ break;
+ case 3:
+ SetGpuReg(REG_OFFSET_WIN0V, 0x819F);
+ break;
+ }
+ break;
+ case HAS_MYSTERY_EVENTS:
+ switch (selectedMenuItem)
+ {
+ case 0:
+ default:
+ SetGpuReg(REG_OFFSET_WIN0V, 0x13F);
+ break;
+ case 1:
+ if (a)
+ SetGpuReg(REG_OFFSET_WIN0V, 0x213F);
+ else
+ SetGpuReg(REG_OFFSET_WIN0V, 0x415F);
+ break;
+ case 2:
+ if (a)
+ SetGpuReg(REG_OFFSET_WIN0V, 0x415F);
+ else
+ SetGpuReg(REG_OFFSET_WIN0V, 0x617F);
+ break;
+ case 3:
+ if (a)
+ SetGpuReg(REG_OFFSET_WIN0V, 0x617F);
+ else
+ SetGpuReg(REG_OFFSET_WIN0V, 0x819F);
+ break;
+ case 4:
+ SetGpuReg(REG_OFFSET_WIN0V, 0x819F);
+ break;
+ }
+ break;
+ }
+}
+
+void task_new_game_prof_birch_speech_1(u8 taskId)
+{
+ SetGpuReg(REG_OFFSET_DISPCNT, 0);
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP);
+ InitBgFromTemplate(&gUnknown_082FF0F0);
+ SetGpuReg(REG_OFFSET_WIN0H, 0);
+ SetGpuReg(REG_OFFSET_WIN0V, 0);
+ SetGpuReg(REG_OFFSET_WININ, 0);
+ SetGpuReg(REG_OFFSET_WINOUT, 0);
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ SetGpuReg(REG_OFFSET_BLDY, 0);
+
+ LZ77UnCompVram(gBirchIntroShadowGfx, (void*)VRAM);
+ LZ77UnCompVram(gUnknown_082FEEF0, (void*)(VRAM + 0x3800));
+ LoadPalette(gUnknown_082FECFC, 0, 64);
+ LoadPalette(gUnknown_082FF028, 1, 16);
+ ScanlineEffect_Stop();
+ ResetSpriteData();
+ FreeAllSpritePalettes();
+ dp13_810BB8C();
+ AddBirchSpeechObjects(taskId);
+ BeginNormalPaletteFade(-1, 0, 16, 0, 0);
+ gTasks[taskId].data[4] = 0;
+ gTasks[taskId].func = task_new_game_prof_birch_speech_2;
+ gTasks[taskId].data[2] = 0xFF;
+ gTasks[taskId].data[3] = 0xFF;
+ gTasks[taskId].data[7] = 0xD8;
+ PlayBGM(MUS_DOORO_X4);
+ ShowBg(0);
+ ShowBg(1);
+}
+
+void task_new_game_prof_birch_speech_2(u8 taskId)
+{
+ u8 spriteId;
+
+ if (gTasks[taskId].data[7])
+ {
+ gTasks[taskId].data[7]--;
+ }
+ else
+ {
+ spriteId = gTasks[taskId].data[8];
+ gSprites[spriteId].pos1.x = 0x88;
+ gSprites[spriteId].pos1.y = 0x3C;
+ gSprites[spriteId].invisible = 0;
+ gSprites[spriteId].oam.objMode = 1;
+ sub_8031BAC(taskId, 10);
+ sub_8031D34(taskId, 20);
+ gTasks[taskId].data[7] = 0x50;
+ gTasks[taskId].func = task_new_game_prof_birch_speech_3;
+ }
+}
+
+void task_new_game_prof_birch_speech_3(u8 taskId)
+{
+ if (gTasks[taskId].data[5])
+ {
+ gSprites[gTasks[taskId].data[8]].oam.objMode = 0;
+ if (gTasks[taskId].data[7])
+ {
+ gTasks[taskId].data[7]--;
+ }
+ else
+ {
+ InitWindows(gUnknown_082FF080);
+ LoadMainMenuWindowFrameTiles(0, 0xF3);
+ copy_textbox_border_tile_patterns_to_vram(0, 0xFC, 0xF0);
+ unknown_rbox_to_vram(0, 1);
+ PutWindowTilemap(0);
+ CopyWindowToVram(0, 2);
+ sub_8032318(0);
+ StringExpandPlaceholders(gStringVar4, gText_Birch_Welcome);
+ AddTextPrinterForMessage(1);
+ gTasks[taskId].func = task_new_game_prof_birch_speech_4;
+ }
+ }
+}
+
+void task_new_game_prof_birch_speech_4(u8 taskId)
+{
+ if (!gPaletteFade.active && !sub_8197224())
+ {
+ gTasks[taskId].func = task_new_game_prof_birch_speech_5;
+ StringExpandPlaceholders(gStringVar4, gText_ThisIsAPokemon);
+ AddTextPrinterWithCallbackForMessage(1, sub_80323A0);
+ gUnknown_03000DD0 = taskId;
+ }
+}
+
+void task_new_game_prof_birch_speech_5(u8 taskId)
+{
+ if (!sub_8197224())
+ {
+ StringExpandPlaceholders(gStringVar4, gText_Birch_MainSpeech);
+ AddTextPrinterForMessage(1);
+ gTasks[taskId].func = task_new_game_prof_birch_speech_6;
+ }
+}
+
+void sub_8030A70(u8 taskId)
+{
+ u8 spriteId = gTasks[gUnknown_03000DD0].data[9];
+
+ gSprites[spriteId].pos1.x = 0x64;
+ gSprites[spriteId].pos1.y = 0x4B;
+ gSprites[spriteId].invisible = 0;
+ gSprites[spriteId].data[0] = 0;
+
+ CreatePokeballSpriteToReleaseMon(spriteId, gSprites[spriteId].oam.paletteNum, 0x70, 0x3A, 0, 0, 0x20, 0xFFFF, SPECIES_LOTAD);
+ gTasks[taskId].func = sub_8030B14;
+ gTasks[gUnknown_03000DD0].data[7] = 0;
+}
+
+void sub_8030B14(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+ struct Sprite *sprite = &gSprites[gTasks[gUnknown_03000DD0].data[9]];
+
+ switch (data[0])
+ {
+ case 0:
+ if (sprite->callback == SpriteCallbackDummy)
+ {
+ sprite->oam.affineMode = 0;
+ goto _08030B98_inc_data0;
+ }
+ break;
+ case 1:
+ if (gTasks[gUnknown_03000DD0].data[7] >= 0x60)
+ {
+ DestroyTask(taskId);
+ if (gTasks[gUnknown_03000DD0].data[7] < 0x4000)
+ gTasks[gUnknown_03000DD0].data[7]++;
+ }
+ break;
+ _08030B98_inc_data0:
+ default:
+ data[0]++;
+ if (gTasks[gUnknown_03000DD0].data[7] < 0x4000)
+ gTasks[gUnknown_03000DD0].data[7]++;
+ break;
+ }
+}
+
+void task_new_game_prof_birch_speech_6(u8 taskId)
+{
+ if (!sub_8197224())
+ {
+ gUnknown_02022D04 = 0;
+ StringExpandPlaceholders(gStringVar4, gText_Birch_AndYouAre);
+ AddTextPrinterForMessage(1);
+ gTasks[taskId].func = task_new_game_prof_birch_speech_7;
+ }
+}
+
+void task_new_game_prof_birch_speech_7(u8 taskId)
+{
+ if (!sub_8197224())
+ {
+ gSprites[gTasks[taskId].data[8]].oam.objMode = 1;
+ gSprites[gTasks[taskId].data[9]].oam.objMode = 1;
+ sub_8031ACC(taskId, 2);
+ sub_8031C88(taskId, 1);
+ gTasks[taskId].data[7] = 0x40;
+ gTasks[taskId].func = task_new_game_prof_birch_speech_8;
+ }
+}
+
+void task_new_game_prof_birch_speech_8(u8 taskId)
+{
+ if (gTasks[taskId].data[4] != -60)
+ {
+ gTasks[taskId].data[4] -= 2;
+ SetGpuReg(REG_OFFSET_BG1HOFS, gTasks[taskId].data[4]);
+ }
+ else
+ {
+ gTasks[taskId].data[4] = -60;
+ gTasks[taskId].func = task_new_game_prof_birch_speech_9;
+ }
+}
+
+void task_new_game_prof_birch_speech_9(u8 taskId)
+{
+ if (gTasks[taskId].data[5])
+ {
+ gSprites[gTasks[taskId].data[8]].invisible = 1;
+ gSprites[gTasks[taskId].data[9]].invisible = 1;
+ if (gTasks[taskId].data[7])
+ {
+ gTasks[taskId].data[7]--;
+ }
+ else
+ {
+ u8 spriteId = gTasks[taskId].data[10];
+
+ gSprites[spriteId].pos1.x = 0xB4;
+ gSprites[spriteId].pos1.y = 0x3C;
+ gSprites[spriteId].invisible = 0;
+ gSprites[spriteId].oam.objMode = 1;
+ gTasks[taskId].data[2] = spriteId;
+ gTasks[taskId].data[6] = 0;
+ sub_8031BAC(taskId, 2);
+ sub_8031D34(taskId, 1);
+ gTasks[taskId].func = task_new_game_prof_birch_speech_10;
+ }
+ }
+}
+
+void task_new_game_prof_birch_speech_10(u8 taskId)
+{
+ if (gTasks[taskId].data[5])
+ {
+ gSprites[gTasks[taskId].data[2]].oam.objMode = 0;
+ gTasks[taskId].func = task_new_game_prof_birch_speech_11;
+ }
+}
+
+void task_new_game_prof_birch_speech_11(u8 taskId)
+{
+ sub_8032318(0);
+ StringExpandPlaceholders(gStringVar4, gText_Birch_BoyOrGirl);
+ AddTextPrinterForMessage(1);
+ gTasks[taskId].func = task_new_game_prof_birch_speech_12;
+}
+
+void task_new_game_prof_birch_speech_12(u8 taskId)
+{
+ if (!sub_8197224())
+ {
+ sub_8031D74();
+ gTasks[taskId].func = task_new_game_prof_birch_speech_13;
+ }
+}
+
+void task_new_game_prof_birch_speech_13(u8 taskId)
+{
+ int gender = sub_8031DB4();
+ int r3;
+
+ switch (gender)
+ {
+ case MALE:
+ PlaySE(SE_SELECT);
+ gSaveBlock2Ptr->playerGender = gender;
+ sub_80322E0(1, 1);
+ gTasks[taskId].func = task_new_game_prof_birch_speech_14;
+ break;
+ case FEMALE:
+ PlaySE(SE_SELECT);
+ gSaveBlock2Ptr->playerGender = gender;
+ sub_80322E0(1, 1);
+ gTasks[taskId].func = task_new_game_prof_birch_speech_14;
+ break;
+ }
+ r3 = GetMenuCursorPos();
+ if (r3 != gTasks[taskId].data[6])
+ {
+ gTasks[taskId].data[6] = r3;
+ gSprites[gTasks[taskId].data[2]].oam.objMode = 1;
+ sub_8031ACC(taskId, 0);
+ gTasks[taskId].func = sub_8030ED4;
+ }
+}
+
+void sub_8030ED4(u8 taskId)
+{
+ u8 spriteId = gTasks[taskId].data[2];
+ if (gTasks[taskId].data[5] == 0)
+ {
+ gSprites[spriteId].pos1.x += 4;
+ }
+ else
+ {
+ gSprites[spriteId].invisible = 1;
+ if (gTasks[taskId].data[6])
+ spriteId = gTasks[taskId].data[11];
+ else
+ spriteId = gTasks[taskId].data[10];
+ gSprites[spriteId].pos1.x = 0xF0;
+ gSprites[spriteId].pos1.y = 0x3C;
+ gSprites[spriteId].invisible = 0;
+ gTasks[taskId].data[2] = spriteId;
+ gSprites[spriteId].oam.objMode = 1;
+ sub_8031BAC(taskId, 0);
+ gTasks[taskId].func = sub_8030F7C;
+ }
+}
+
+void sub_8030F7C(u8 taskId)
+{
+ u8 spriteId = gTasks[taskId].data[2];
+
+ if (gSprites[spriteId].pos1.x > 0xB4)
+ {
+ gSprites[spriteId].pos1.x -= 4;
+ }
+ else
+ {
+ gSprites[spriteId].pos1.x = 0xB4;
+ if (gTasks[taskId].data[5])
+ {
+ gSprites[spriteId].oam.objMode = 0;
+ gTasks[taskId].func = task_new_game_prof_birch_speech_13;
+ }
+ }
+}
+
+void task_new_game_prof_birch_speech_14(u8 taskId)
+{
+ sub_8032318(0);
+ StringExpandPlaceholders(gStringVar4, gText_Birch_WhatsYourName);
+ AddTextPrinterForMessage(1);
+ gTasks[taskId].func = task_new_game_prof_birch_speech_15;
+}
+
+void task_new_game_prof_birch_speech_15(u8 taskId)
+{
+ if (!sub_8197224())
+ gTasks[taskId].func = task_new_game_prof_birch_speech_16;
+}
+
+void task_new_game_prof_birch_speech_16(u8 taskId)
+{
+ if ((gMain.newKeys & A_BUTTON) || (gMain.newKeys & B_BUTTON))
+ {
+ BeginNormalPaletteFade(-1, 0, 0, 16, RGB_BLACK);
+ gTasks[taskId].func = task_new_game_prof_birch_speech_17;
+ }
+}
+
+void task_new_game_prof_birch_speech_17(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ FreeAllWindowBuffers();
+ sub_818D820(gTasks[taskId].data[9]);
+ set_default_player_name(Random() % 20);
+ DestroyTask(taskId);
+ DoNamingScreen(0, gSaveBlock2Ptr->playerName, gSaveBlock2Ptr->playerGender, 0, 0, new_game_prof_birch_speech_part2_start);
+ }
+}
+
+void task_new_game_prof_birch_speech_part2_2(u8 taskId)
+{
+ sub_8032318(0);
+ StringExpandPlaceholders(gStringVar4, gText_Birch_SoItsPlayer);
+ AddTextPrinterForMessage(1);
+ gTasks[taskId].func = task_new_game_prof_birch_speech_part2_3;
+}
+
+void task_new_game_prof_birch_speech_part2_3(u8 taskId)
+{
+ if (!sub_8197224())
+ {
+ sub_80323CC(2, 1, 0xF3, 0xDF, 2, 15);
+ gTasks[taskId].func = task_new_game_prof_birch_speech_part2_4;
+ }
+}
+
+void task_new_game_prof_birch_speech_part2_4(u8 taskId)
+{
+ switch (ProcessMenuInputNoWrap_())
+ {
+ case 0:
+ PlaySE(SE_SELECT);
+ gSprites[gTasks[taskId].data[2]].oam.objMode = 1;
+ sub_8031ACC(taskId, 2);
+ sub_8031C88(taskId, 1);
+ gTasks[taskId].func = task_new_game_prof_birch_speech_part2_5;
+ break;
+ case -1:
+ case 1:
+ PlaySE(SE_SELECT);
+ gTasks[taskId].func = task_new_game_prof_birch_speech_11;
+ }
+}
+
+void task_new_game_prof_birch_speech_part2_5(u8 taskId)
+{
+ if (gTasks[taskId].data[4])
+ {
+ gTasks[taskId].data[4] += 2;
+ SetGpuReg(REG_OFFSET_BG1HOFS, gTasks[taskId].data[4]);
+ }
+ else
+ {
+ gTasks[taskId].func = task_new_game_prof_birch_speech_part2_6;
+ }
+}
+
+void task_new_game_prof_birch_speech_part2_6(u8 taskId)
+{
+ u8 spriteId;
+
+ if (gTasks[taskId].data[5])
+ {
+ gSprites[gTasks[taskId].data[10]].invisible = TRUE;
+ gSprites[gTasks[taskId].data[11]].invisible = TRUE;
+ spriteId = gTasks[taskId].data[8];
+ gSprites[spriteId].pos1.x = 0x88;
+ gSprites[spriteId].pos1.y = 0x3C;
+ gSprites[spriteId].invisible = FALSE;
+ gSprites[spriteId].oam.objMode = 1;
+ spriteId = gTasks[taskId].data[9];
+ gSprites[spriteId].pos1.x = 0x64;
+ gSprites[spriteId].pos1.y = 0x4B;
+ gSprites[spriteId].invisible = FALSE;
+ gSprites[spriteId].oam.objMode = 1;
+ sub_8031BAC(taskId, 2);
+ sub_8031D34(taskId, 1);
+ sub_8032318(0);
+ StringExpandPlaceholders(gStringVar4, gText_Birch_YourePlayer);
+ AddTextPrinterForMessage(1);
+ gTasks[taskId].func = task_new_game_prof_birch_speech_part2_7;
+ }
+}
+
+void task_new_game_prof_birch_speech_part2_7(u8 taskId)
+{
+ if (gTasks[taskId].data[5])
+ {
+ gSprites[gTasks[taskId].data[8]].oam.objMode = 0;
+ gSprites[gTasks[taskId].data[9]].oam.objMode = 0;
+ if (!sub_8197224())
+ {
+ gSprites[gTasks[taskId].data[8]].oam.objMode = 1;
+ gSprites[gTasks[taskId].data[9]].oam.objMode = 1;
+ sub_8031ACC(taskId, 2);
+ sub_8031C88(taskId, 1);
+ gTasks[taskId].data[7] = 64;
+ gTasks[taskId].func = task_new_game_prof_birch_speech_part2_8;
+ }
+ }
+}
+
+void task_new_game_prof_birch_speech_part2_8(u8 taskId)
+{
+ u8 spriteId;
+
+ if (gTasks[taskId].data[5])
+ {
+ gSprites[gTasks[taskId].data[8]].invisible = 1;
+ gSprites[gTasks[taskId].data[9]].invisible = 1;
+ if (gTasks[taskId].data[7])
+ {
+ gTasks[taskId].data[7]--;
+ return;
+ }
+ if (gSaveBlock2Ptr->playerGender != MALE)
+ spriteId = gTasks[taskId].data[11];
+ else
+ spriteId = gTasks[taskId].data[10];
+ gSprites[spriteId].pos1.x = 0x78;
+ gSprites[spriteId].pos1.y = 0x3C;
+ gSprites[spriteId].invisible = 0;
+ gSprites[spriteId].oam.objMode = 1;
+ gTasks[taskId].data[2] = spriteId;
+ sub_8031BAC(taskId, 2);
+ sub_8031D34(taskId, 1);
+ StringExpandPlaceholders(gStringVar4, gText_Birch_AreYouReady);
+ AddTextPrinterForMessage(1);
+ gTasks[taskId].func = task_new_game_prof_birch_speech_part2_9;
+ }
+}
+
+void task_new_game_prof_birch_speech_part2_9(u8 taskId)
+{
+ u8 spriteId;
+
+ if (gTasks[taskId].data[5])
+ {
+ gSprites[gTasks[taskId].data[2]].oam.objMode = 0;
+ if (!sub_8197224())
+ {
+ spriteId = gTasks[taskId].data[2];
+ gSprites[spriteId].oam.affineMode = 1;
+ gSprites[spriteId].affineAnims = &gUnknown_082FF114;
+ InitSpriteAffineAnim(&gSprites[spriteId]);
+ StartSpriteAffineAnim(&gSprites[spriteId], 0);
+ gSprites[spriteId].callback = sub_80318D8;
+ BeginNormalPaletteFade(0x0000FFFF, 0, 0, 16, RGB_BLACK);
+ FadeOutBGM(4);
+ gTasks[taskId].func = task_new_game_prof_birch_speech_part2_10;
+ }
+ }
+}
+
+void task_new_game_prof_birch_speech_part2_10(u8 taskId)
+{
+ u8 spriteId = gTasks[taskId].data[2];
+
+ if (gSprites[spriteId].affineAnimEnded)
+ gTasks[taskId].func = task_new_game_prof_birch_speech_part2_11;
+}
+
+void task_new_game_prof_birch_speech_part2_11(u8 taskId)
+{
+ u8 spriteId;
+
+ if (!gPaletteFade.active)
+ {
+ spriteId = gTasks[taskId].data[2];
+ gSprites[spriteId].callback = nullsub_11;
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP);
+ BeginNormalPaletteFade(0xFFFF0000, 0, 0, 16, RGB_WHITEALPHA);
+ gTasks[taskId].func = task_new_game_prof_birch_speech_part2_12;
+ }
+}
+
+void task_new_game_prof_birch_speech_part2_12(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ FreeAllWindowBuffers();
+ sub_818D820(gTasks[taskId].data[9]);
+ dp13_810BB8C();
+ SetMainCallback2(CB2_NewGame);
+ DestroyTask(taskId);
+ }
+}
+
+void new_game_prof_birch_speech_part2_start(void)
+{
+ u8 taskId;
+ u8 spriteId;
+ u16 savedIme;
+
+ ResetBgsAndClearDma3BusyFlags(0);
+ SetGpuReg(REG_OFFSET_DISPCNT, 0);
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP);
+ InitBgsFromTemplates(0, gUnknown_082FF0E8, 2);
+ InitBgFromTemplate(&gUnknown_082FF0F0);
+ SetVBlankCallback(NULL);
+ SetGpuReg(REG_OFFSET_BG2CNT, 0);
+ SetGpuReg(REG_OFFSET_BG1CNT, 0);
+ SetGpuReg(REG_OFFSET_BG0CNT, 0);
+ SetGpuReg(REG_OFFSET_BG2HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG2VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG1HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG1VOFS, 0);
+ SetGpuReg(REG_OFFSET_BG0HOFS, 0);
+ SetGpuReg(REG_OFFSET_BG0VOFS, 0);
+ DmaFill16(3, 0, VRAM, VRAM_SIZE);
+ DmaFill32(3, 0, OAM, OAM_SIZE);
+ DmaFill16(3, 0, PLTT, PLTT_SIZE);
+ ResetPaletteFade();
+ LZ77UnCompVram(gBirchIntroShadowGfx, (u8*)VRAM);
+ LZ77UnCompVram(gUnknown_082FEEF0, (u8*)(VRAM + 0x3800));
+ LoadPalette(gUnknown_082FECFC, 0, 64);
+ LoadPalette(&gUnknown_082FF018[1], 1, 16);
+ ResetTasks();
+ taskId = CreateTask(task_new_game_prof_birch_speech_part2_1, 0);
+ gTasks[taskId].data[7] = 5;
+ gTasks[taskId].data[4] = -60;
+ ScanlineEffect_Stop();
+ ResetSpriteData();
+ FreeAllSpritePalettes();
+ dp13_810BB8C();
+ AddBirchSpeechObjects(taskId);
+ if (gSaveBlock2Ptr->playerGender != MALE)
+ {
+ gTasks[taskId].data[6] = FEMALE;
+ spriteId = gTasks[taskId].data[11];
+ }
+ else
+ {
+ gTasks[taskId].data[6] = MALE;
+ spriteId = gTasks[taskId].data[10];
+ }
+ gSprites[spriteId].pos1.x = 0xB4;
+ gSprites[spriteId].pos1.y = 0x3C;
+ gSprites[spriteId].invisible = 0;
+ gTasks[taskId].data[2] = spriteId;
+ SetGpuReg(REG_OFFSET_BG1HOFS, -60);
+ BeginNormalPaletteFade(-1, 0, 16, 0, 0);
+ SetGpuReg(REG_OFFSET_WIN0H, 0);
+ SetGpuReg(REG_OFFSET_WIN0V, 0);
+ SetGpuReg(REG_OFFSET_WININ, 0);
+ SetGpuReg(REG_OFFSET_WINOUT, 0);
+ SetGpuReg(REG_OFFSET_BLDCNT, 0);
+ SetGpuReg(REG_OFFSET_BLDALPHA, 0);
+ SetGpuReg(REG_OFFSET_BLDY, 0);
+ ShowBg(0);
+ ShowBg(1);
+ savedIme = REG_IME;
+ REG_IME = 0;
+ REG_IE |= 1;
+ REG_IME = savedIme;
+ SetVBlankCallback(VBlankCB_MainMenu);
+ SetMainCallback2(CB2_MainMenu);
+ InitWindows(gUnknown_082FF080);
+ LoadMainMenuWindowFrameTiles(0, 0xF3);
+ copy_textbox_border_tile_patterns_to_vram(0, 0xFC, 0xF0);
+ PutWindowTilemap(0);
+ CopyWindowToVram(0, 3);
+}
+
+void nullsub_11(struct Sprite *sprite)
+{
+}
+
+void sub_80318D8(struct Sprite *sprite)
+{
+ u32 y;
+
+ y = (sprite->pos1.y << 16) + sprite->data[0] + 0xC000;
+ sprite->pos1.y = y >> 16;
+ sprite->data[0] = y;
+}
+
+u8 sub_80318F4(u8 a, u8 b)
+{
+ return sub_818D3E4(SPECIES_LOTAD, 8, 0, 1, a, b, 14, -1);
+}
+
+void AddBirchSpeechObjects(u8 taskId)
+{
+ u8 spriteId = AddNewGameBirchObject(0x88, 0x3C, 1);
+ u8 spriteId2;
+ u8 spriteId3;
+ u8 spriteId4;
+
+ gSprites[spriteId].callback = nullsub_11;
+ gSprites[spriteId].oam.priority = 0;
+ gSprites[spriteId].invisible = TRUE;
+ gTasks[taskId].data[8] = spriteId;
+ spriteId2 = sub_80318F4(100, 0x4B);
+ gSprites[spriteId2].callback = nullsub_11;
+ gSprites[spriteId2].oam.priority = 0;
+ gSprites[spriteId2].invisible = TRUE;
+ gTasks[taskId].data[9] = spriteId2;
+ spriteId3 = CreateTrainerSprite(FacilityClassToPicIndex(0x3C), 0x78, 0x3C, 0, gDecompressionBuffer);
+ gSprites[spriteId3].callback = nullsub_11;
+ gSprites[spriteId3].invisible = TRUE;
+ gSprites[spriteId3].oam.priority = 0;
+ gTasks[taskId].data[10] = spriteId3;
+ spriteId4 = CreateTrainerSprite(FacilityClassToPicIndex(0x3F), 0x78, 0x3C, 0, &gDecompressionBuffer[0x800]);
+ gSprites[spriteId4].callback = nullsub_11;
+ gSprites[spriteId4].invisible = TRUE;
+ gSprites[spriteId4].oam.priority = 0;
+ gTasks[taskId].data[11] = spriteId4;
+}
+
+void sub_8031A5C(u8 taskId)
+{
+ int alpha;
+
+ if (gTasks[taskId].data[1] == 0)
+ {
+ gTasks[gTasks[taskId].data[0]].data[5] = 1;
+ DestroyTask(taskId);
+ }
+ else if (gTasks[taskId].data[4])
+ {
+ gTasks[taskId].data[4]--;
+ }
+ else
+ {
+ gTasks[taskId].data[4] = gTasks[taskId].data[3];
+ gTasks[taskId].data[1]--;
+ gTasks[taskId].data[2]++;
+ alpha = gTasks[taskId].data[2] << 8;
+ SetGpuReg(REG_OFFSET_BLDALPHA, gTasks[taskId].data[1] + alpha);
+ }
+}
+
+void sub_8031ACC(u8 taskId, u8 a)
+{
+ u8 taskId2;
+
+ 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);
+ gTasks[taskId2].data[0] = taskId;
+ gTasks[taskId2].data[1] = 16;
+ gTasks[taskId2].data[2] = 0;
+ gTasks[taskId2].data[3] = a;
+ gTasks[taskId2].data[4] = a;
+}
+
+void sub_8031B3C(u8 taskId)
+{
+ int alpha;
+
+ if (gTasks[taskId].data[1] == 16)
+ {
+ gTasks[gTasks[taskId].data[0]].data[5] = 1;
+ DestroyTask(taskId);
+ }
+ else if (gTasks[taskId].data[4])
+ {
+ gTasks[taskId].data[4]--;
+ }
+ else
+ {
+ gTasks[taskId].data[4] = gTasks[taskId].data[3];
+ gTasks[taskId].data[1]++;
+ gTasks[taskId].data[2]--;
+ alpha = gTasks[taskId].data[2] << 8;
+ SetGpuReg(REG_OFFSET_BLDALPHA, gTasks[taskId].data[1] + alpha);
+ }
+}
+
+void sub_8031BAC(u8 taskId, u8 a)
+{
+ u8 taskId2;
+
+ 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);
+ gTasks[taskId2].data[0] = taskId;
+ gTasks[taskId2].data[1] = 0;
+ gTasks[taskId2].data[2] = 16;
+ gTasks[taskId2].data[3] = a;
+ gTasks[taskId2].data[4] = a;
+}
+
+void sub_8031C1C(u8 taskId)
+{
+ if (gTasks[taskId].data[2])
+ {
+ gTasks[taskId].data[2]--;
+ }
+ else if (gTasks[taskId].data[1] == 8)
+ {
+ DestroyTask(taskId);
+ }
+ else if (gTasks[taskId].data[4])
+ {
+ gTasks[taskId].data[4]--;
+ }
+ else
+ {
+ gTasks[taskId].data[4] = gTasks[taskId].data[3];
+ gTasks[taskId].data[1]++;
+ LoadPalette(&gUnknown_082FF018[gTasks[taskId].data[1]], 1, 16);
+ }
+}
+
+void sub_8031C88(u8 taskId, u8 a)
+{
+ u8 taskId2;
+
+ taskId2 = CreateTask(sub_8031C1C, 0);
+ gTasks[taskId2].data[0] = taskId;
+ gTasks[taskId2].data[1] = 0;
+ gTasks[taskId2].data[2] = 8;
+ gTasks[taskId2].data[3] = a;
+ gTasks[taskId2].data[4] = a;
+}
+
+void sub_8031CC8(u8 taskId)
+{
+ if (gTasks[taskId].data[2])
+ {
+ gTasks[taskId].data[2]--;
+ }
+ else if (gTasks[taskId].data[1] == 0)
+ {
+ DestroyTask(taskId);
+ }
+ else if (gTasks[taskId].data[4])
+ {
+ gTasks[taskId].data[4]--;
+ }
+ else
+ {
+ gTasks[taskId].data[4] = gTasks[taskId].data[3];
+ gTasks[taskId].data[1]--;
+ LoadPalette(&gUnknown_082FF018[gTasks[taskId].data[1]], 1, 16);
+ }
+}
+
+void sub_8031D34(u8 taskId, u8 a)
+{
+ u8 taskId2;
+
+ taskId2 = CreateTask(sub_8031CC8, 0);
+ gTasks[taskId2].data[0] = taskId;
+ gTasks[taskId2].data[1] = 8;
+ gTasks[taskId2].data[2] = 8;
+ gTasks[taskId2].data[3] = a;
+ gTasks[taskId2].data[4] = a;
+}
+
+void sub_8031D74(void)
+{
+ DrawMainMenuWindowBorder(&gUnknown_082FF080[1], 0xF3);
+ FillWindowPixelBuffer(1, 17);
+ PrintMenuTable(1, 2, gUnknown_082FF118);
+ InitMenuInUpperLeftCornerPlaySoundWhenAPressed(1, 2, 0);
+ PutWindowTilemap(1);
+ CopyWindowToVram(1, 3);
+}
+
+s8 sub_8031DB4(void)
+{
+ return ProcessMenuInputNoWrapAround();
+}
+
+void set_default_player_name(u8 nameId)
+{
+ const u8* name;
+ u8 i;
+
+ if (gSaveBlock2Ptr->playerGender == MALE)
+ name = gMalePresetNames[nameId];
+ else
+ name = gFemalePresetNames[nameId];
+ for (i = 0; i < 7; i++)
+ gSaveBlock2Ptr->playerName[i] = name[i];
+ gSaveBlock2Ptr->playerName[7] = 0xFF;
+}
+
+void CreateMainMenuErrorWindow(const u8* str)
+{
+ FillWindowPixelBuffer(7, 17);
+ PrintTextOnWindow(7, 1, str, 0, 1, 2, 0);
+ PutWindowTilemap(7);
+ CopyWindowToVram(7, 2);
+ DrawMainMenuWindowBorder(gUnknown_082FF070, MAIN_MENU_BORDER_TILE);
+ SetGpuReg(REG_OFFSET_WIN0H, 0x9E7);
+ SetGpuReg(REG_OFFSET_WIN0V, 0x719F);
+}
+
+void fmt_savegame(void)
+{
+ fmt_time();
+ fmt_pokedex();
+ fmt_player();
+ fmt_badges();
+}
+
+void fmt_time(void)
+{
+ StringExpandPlaceholders(gStringVar4, gText_ContinueMenuPlayer);
+ box_print(2, 1, 0, 17, gUnknown_082FF0E3, -1, gStringVar4);
+ box_print(2, 1, GetStringRightAlignXOffset(1, gSaveBlock2Ptr->playerName, 100), 17, gUnknown_082FF0E3, -1, gSaveBlock2Ptr->playerName);
+}
+
+void fmt_player(void)
+{
+ u8 str[0x20];
+ u8* ptr;
+
+ StringExpandPlaceholders(gStringVar4, gText_ContinueMenuTime);
+ box_print(2, 1, 0x6C, 17, gUnknown_082FF0E3, -1, gStringVar4);
+ ptr = ConvertIntToDecimalStringN(str, gSaveBlock2Ptr->playTimeHours, 0, 3);
+ *ptr = 0xF0;
+ ConvertIntToDecimalStringN(ptr + 1, gSaveBlock2Ptr->playTimeMinutes, 2, 2);
+ box_print(2, 1, GetStringRightAlignXOffset(1, str, 0xD0), 17, gUnknown_082FF0E3, -1, str);
+}
+
+void fmt_pokedex(void)
+{
+ u8 str[0x20];
+ u16 dexCount;
+
+ if (FlagGet(FLAG_SYS_POKEDEX_GET) == TRUE)
+ {
+ if (IsNationalPokedexEnabled())
+ dexCount = GetNationalPokedexCount(1);
+ else
+ dexCount = GetHoennPokedexCount(1);
+ StringExpandPlaceholders(gStringVar4, gText_ContinueMenuPokedex);
+ box_print(2, 1, 0, 33, gUnknown_082FF0E3, -1, gStringVar4);
+ ConvertIntToDecimalStringN(str, dexCount, 0, 3);
+ box_print(2, 1, GetStringRightAlignXOffset(1, str, 100), 33, gUnknown_082FF0E3, -1, str);
+ }
+}
+
+void fmt_badges(void)
+{
+ u8 str[0x20];
+ u8 badgeCount = 0;
+ u32 i;
+
+ for (i = FLAG_BADGE01_GET; i <= FLAG_BADGE08_GET; i++)
+ {
+ if (FlagGet(i))
+ badgeCount++;
+ }
+ StringExpandPlaceholders(gStringVar4, gText_ContinueMenuBadges);
+ box_print(2, 1, 0x6C, 33, gUnknown_082FF0E3, -1, gStringVar4);
+ ConvertIntToDecimalStringN(str, badgeCount, 2, 1);
+ box_print(2, 1, GetStringRightAlignXOffset(1, str, 0xD0), 33, gUnknown_082FF0E3, -1, str);
+}
+
+void LoadMainMenuWindowFrameTiles(u8 bgId, u16 tileOffset)
+{
+ LoadBgTiles(bgId, GetWindowFrameTilesPal(gSaveBlock2Ptr->optionsWindowFrameType)->tiles, 0x120, tileOffset);
+ LoadPalette(GetWindowFrameTilesPal(gSaveBlock2Ptr->optionsWindowFrameType)->pal, 32, 32);
+}
+
+void DrawMainMenuWindowBorder(const struct WindowTemplate *template, u16 baseTileNum)
+{
+ u16 r9 = 1 + baseTileNum;
+ u16 r10 = 2 + baseTileNum;
+ u16 sp18 = 3 + baseTileNum;
+ u16 spC = 5 + baseTileNum;
+ u16 sp10 = 6 + baseTileNum;
+ u16 sp14 = 7 + baseTileNum;
+ u16 r6 = 8 + baseTileNum;
+
+ FillBgTilemapBufferRect(template->priority, baseTileNum, template->tilemapLeft - 1, template->tilemapTop - 1, 1, 1, 2);
+ FillBgTilemapBufferRect(template->priority, r9, template->tilemapLeft, template->tilemapTop - 1, template->width, 1, 2);
+ FillBgTilemapBufferRect(template->priority, r10, template->tilemapLeft + template->width, template->tilemapTop - 1, 1, 1, 2);
+ FillBgTilemapBufferRect(template->priority, sp18, template->tilemapLeft - 1, template->tilemapTop, 1, template->height, 2);
+ FillBgTilemapBufferRect(template->priority, spC, template->tilemapLeft + template->width, template->tilemapTop, 1, template->height, 2);
+ FillBgTilemapBufferRect(template->priority, sp10, template->tilemapLeft - 1, template->tilemapTop + template->height, 1, 1, 2);
+ FillBgTilemapBufferRect(template->priority, sp14, template->tilemapLeft, template->tilemapTop + template->height, template->width, 1, 2);
+ FillBgTilemapBufferRect(template->priority, r6, template->tilemapLeft + template->width, template->tilemapTop + template->height, 1, 1, 2);
+ CopyBgTilemapBufferToVram(template->priority);
+}
+
+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);
+}
+
+void sub_8032298(u8 a, u8 b, u8 c, u8 d, u8 e, u8 unused)
+{
+ FillBgTilemapBufferRect(a, 0, b + 0xFF, c + 0xFF, d + 2, e + 2, 2);
+}
+
+void sub_80322E0(u8 windowId, u8 a)
+{
+ CallWindowFunction(windowId, sub_8032298);
+ FillWindowPixelBuffer(windowId, 0x11);
+ ClearWindowTilemap(windowId);
+ if (a == 1)
+ CopyWindowToVram(windowId, 3);
+}
+
+void sub_8032318(u8 a)
+{
+ u8 fontAttribute = GetFontAttribute(1, 6);
+ u8 fontAttribute2 = GetFontAttribute(1, 0);
+ u8 fontAttribute3 = GetFontAttribute(1, 1);
+ u8 windowAttribute = GetWindowAttribute(a, 3);
+ u8 windowAttribute2 = GetWindowAttribute(a, 4);
+
+ FillWindowPixelRect(a, fontAttribute, 0, 0, fontAttribute2 * windowAttribute, fontAttribute3 * windowAttribute2);
+ CopyWindowToVram(a, 2);
+}
+
+void sub_80323A0(struct TextSubPrinter *printer, u16 a)
+{
+ if (*(printer->current_text_offset - 2) == 8 && gUnknown_02022D04 == 0)
+ {
+ gUnknown_02022D04 = 1;
+ CreateTask(sub_8030A70, 0);
+ }
+}
+
+void sub_80323CC(u8 a, u8 b, u16 c, u16 d, u8 e, u8 f)
+{
+ struct WindowTemplate sp;
+
+ sp = sub_8198A50(0, a + 1, b + 1, 5, 4, f, d);
+ CreateYesNoMenu(&sp, c, e, 0);
+}
+
+void unknown_rbox_to_vram(u8 windowId, u8 a)
+{
+ CallWindowFunction(windowId, sub_8032474);
+ FillWindowPixelBuffer(windowId, 17);
+ PutWindowTilemap(windowId);
+ if (a == 1)
+ CopyWindowToVram(windowId, 3);
+}
+
+void sub_8032474 (u8 a, u8 b, u8 c, u8 d, u8 e, u8 f)
+{
+ FillBgTilemapBufferRect(a, 0xFD, b-2, c-1, 1, 1, f);
+ FillBgTilemapBufferRect(a, 0xFF, b-1, c-1, 1, 1, f);
+ FillBgTilemapBufferRect(a, 0x100, b, c-1, d, 1, f);
+ FillBgTilemapBufferRect(a, 0x101, b+d-1, c-1, 1, 1, f);
+ FillBgTilemapBufferRect(a, 0x102, b+d, c-1, 1, 1, f);
+ FillBgTilemapBufferRect(a, 0x103, b-2, c, 1, 5, f);
+ FillBgTilemapBufferRect(a, 0x105, b-1, c, d+1, 5, f);
+ FillBgTilemapBufferRect(a, 0x106, b+d, c, 1, 5, f);
+ FillBgTilemapBufferRect(a, BG_TILE_V_FLIP(0xFD), b-2, c+e, 1, 1, f);
+ FillBgTilemapBufferRect(a, BG_TILE_V_FLIP(0xFF), b-1, c+e, 1, 1, f);
+ FillBgTilemapBufferRect(a, BG_TILE_V_FLIP(0x100), b, c+e, d-1, 1, f);
+ FillBgTilemapBufferRect(a, BG_TILE_V_FLIP(0x101), b+d-1, c+e, 1, 1, f);
+ FillBgTilemapBufferRect(a, BG_TILE_V_FLIP(0x102), b+d, c+e, 1, 1, f);
+}
+
+void task_new_game_prof_birch_speech_part2_1(u8 taskId)
+{
+ if (gTasks[taskId].data[7]-- <= 0)
+ {
+ unknown_rbox_to_vram(0, 1);
+ gTasks[taskId].func = task_new_game_prof_birch_speech_part2_2;
+ }
+}
diff --git a/src/map_name_popup.c b/src/map_name_popup.c
new file mode 100644
index 000000000..1782e9af8
--- /dev/null
+++ b/src/map_name_popup.c
@@ -0,0 +1,474 @@
+#include "global.h"
+#include "constants/region_map_sections.h"
+#include "constants/weather.h"
+#include "bg.h"
+#include "event_data.h"
+#include "gpu_regs.h"
+#include "international_string_util.h"
+#include "menu.h"
+#include "map_name_popup.h"
+#include "palette.h"
+#include "region_map.h"
+#include "rom_818CFC8.h"
+#include "start_menu.h"
+#include "string_util.h"
+#include "task.h"
+#include "text.h"
+
+
+// enums
+enum MapPopUp_Themes
+{
+ MAPPOPUP_THEME_WOOD,
+ MAPPOPUP_THEME_MARBLE,
+ MAPPOPUP_THEME_STONE,
+ MAPPOPUP_THEME_BRICK,
+ MAPPOPUP_THEME_UNDERWATER,
+ MAPPOPUP_THEME_STONE2,
+};
+
+// static functions
+static void Task_MapNamePopUpWindow(u8 taskId);
+static void ShowMapNamePopUpWindow(void);
+static void LoadMapNamePopUpWindowBg(void);
+
+// EWRAM
+static EWRAM_DATA u8 mapNamePopupTaskId = 0;
+
+// .rodata
+static const u8 gMapPopUp_Table[][960] =
+{
+ INCBIN_U8("graphics/interface/map_popup/wood.4bpp"),
+ INCBIN_U8("graphics/interface/map_popup/marble.4bpp"),
+ INCBIN_U8("graphics/interface/map_popup/stone.4bpp"),
+ INCBIN_U8("graphics/interface/map_popup/brick.4bpp"),
+ INCBIN_U8("graphics/interface/map_popup/underwater.4bpp"),
+ INCBIN_U8("graphics/interface/map_popup/stone2.4bpp"),
+};
+
+static const u8 gMapPopUp_Outline_Table[][960] =
+{
+ INCBIN_U8("graphics/interface/map_popup/wood_outline.4bpp"),
+ INCBIN_U8("graphics/interface/map_popup/marble_outline.4bpp"),
+ INCBIN_U8("graphics/interface/map_popup/stone_outline.4bpp"),
+ INCBIN_U8("graphics/interface/map_popup/brick_outline.4bpp"),
+ INCBIN_U8("graphics/interface/map_popup/underwater_outline.4bpp"),
+ INCBIN_U8("graphics/interface/map_popup/stone2_outline.4bpp"),
+};
+
+static const u16 gMapPopUp_Palette_Table[][16] =
+{
+ INCBIN_U16("graphics/interface/map_popup/wood.gbapal"),
+ INCBIN_U16("graphics/interface/map_popup/marble_outline.gbapal"),
+ INCBIN_U16("graphics/interface/map_popup/stone_outline.gbapal"),
+ INCBIN_U16("graphics/interface/map_popup/brick_outline.gbapal"),
+ INCBIN_U16("graphics/interface/map_popup/underwater_outline.gbapal"),
+ INCBIN_U16("graphics/interface/map_popup/stone2_outline.gbapal"),
+};
+
+static const u16 gUnknown_0857F444[16] = INCBIN_U16("graphics/interface/map_popup/857F444.gbapal");
+
+static const u8 gRegionMapSectionId_To_PopUpThemeIdMapping[] =
+{
+ MAPPOPUP_THEME_WOOD, MAPPOPUP_THEME_WOOD, MAPPOPUP_THEME_WOOD, MAPPOPUP_THEME_WOOD,
+ MAPPOPUP_THEME_WOOD, MAPPOPUP_THEME_WOOD, MAPPOPUP_THEME_WOOD, MAPPOPUP_THEME_BRICK,
+ MAPPOPUP_THEME_MARBLE, MAPPOPUP_THEME_MARBLE, MAPPOPUP_THEME_MARBLE, MAPPOPUP_THEME_BRICK,
+ MAPPOPUP_THEME_MARBLE, MAPPOPUP_THEME_BRICK, MAPPOPUP_THEME_MARBLE, MAPPOPUP_THEME_BRICK,
+ MAPPOPUP_THEME_WOOD, MAPPOPUP_THEME_WOOD, MAPPOPUP_THEME_WOOD, MAPPOPUP_THEME_WOOD,
+ MAPPOPUP_THEME_UNDERWATER, MAPPOPUP_THEME_UNDERWATER, MAPPOPUP_THEME_UNDERWATER, MAPPOPUP_THEME_UNDERWATER,
+ MAPPOPUP_THEME_UNDERWATER, MAPPOPUP_THEME_WOOD, MAPPOPUP_THEME_WOOD, MAPPOPUP_THEME_WOOD,
+ MAPPOPUP_THEME_WOOD, MAPPOPUP_THEME_WOOD, MAPPOPUP_THEME_WOOD, MAPPOPUP_THEME_WOOD,
+ MAPPOPUP_THEME_WOOD, MAPPOPUP_THEME_WOOD, MAPPOPUP_THEME_WOOD, MAPPOPUP_THEME_WOOD,
+ MAPPOPUP_THEME_WOOD, MAPPOPUP_THEME_UNDERWATER, MAPPOPUP_THEME_WOOD, MAPPOPUP_THEME_UNDERWATER,
+ MAPPOPUP_THEME_UNDERWATER, MAPPOPUP_THEME_UNDERWATER, MAPPOPUP_THEME_UNDERWATER, MAPPOPUP_THEME_UNDERWATER,
+ MAPPOPUP_THEME_UNDERWATER, MAPPOPUP_THEME_UNDERWATER, MAPPOPUP_THEME_UNDERWATER, MAPPOPUP_THEME_UNDERWATER,
+ MAPPOPUP_THEME_UNDERWATER, MAPPOPUP_THEME_UNDERWATER, MAPPOPUP_THEME_STONE2, MAPPOPUP_THEME_STONE2,
+ MAPPOPUP_THEME_STONE2, MAPPOPUP_THEME_STONE2, MAPPOPUP_THEME_STONE2, MAPPOPUP_THEME_STONE,
+ MAPPOPUP_THEME_STONE, MAPPOPUP_THEME_WOOD, MAPPOPUP_THEME_MARBLE, MAPPOPUP_THEME_WOOD,
+ MAPPOPUP_THEME_STONE, MAPPOPUP_THEME_WOOD, MAPPOPUP_THEME_MARBLE, MAPPOPUP_THEME_STONE,
+ MAPPOPUP_THEME_STONE, MAPPOPUP_THEME_STONE, MAPPOPUP_THEME_STONE, MAPPOPUP_THEME_STONE,
+ MAPPOPUP_THEME_STONE, MAPPOPUP_THEME_STONE2, MAPPOPUP_THEME_STONE, MAPPOPUP_THEME_WOOD,
+ MAPPOPUP_THEME_STONE, MAPPOPUP_THEME_WOOD, MAPPOPUP_THEME_STONE, MAPPOPUP_THEME_STONE,
+ MAPPOPUP_THEME_WOOD, MAPPOPUP_THEME_WOOD, MAPPOPUP_THEME_STONE, MAPPOPUP_THEME_STONE2,
+ MAPPOPUP_THEME_STONE, MAPPOPUP_THEME_STONE, MAPPOPUP_THEME_STONE, MAPPOPUP_THEME_STONE,
+ MAPPOPUP_THEME_WOOD, MAPPOPUP_THEME_STONE, MAPPOPUP_THEME_STONE, MAPPOPUP_THEME_MARBLE,
+ MAPPOPUP_THEME_STONE, MAPPOPUP_THEME_STONE, MAPPOPUP_THEME_STONE, MAPPOPUP_THEME_WOOD,
+ MAPPOPUP_THEME_WOOD, MAPPOPUP_THEME_STONE, MAPPOPUP_THEME_STONE, MAPPOPUP_THEME_STONE2,
+ MAPPOPUP_THEME_STONE, MAPPOPUP_THEME_STONE2, MAPPOPUP_THEME_STONE2, MAPPOPUP_THEME_STONE2,
+ MAPPOPUP_THEME_STONE, MAPPOPUP_THEME_STONE, MAPPOPUP_THEME_STONE, MAPPOPUP_THEME_MARBLE
+};
+
+static const u8 gText_PyramidFloor1[] = _("PYRAMID FLOOR 1");
+static const u8 gText_PyramidFloor2[] = _("PYRAMID FLOOR 2");
+static const u8 gText_PyramidFloor3[] = _("PYRAMID FLOOR 3");
+static const u8 gText_PyramidFloor4[] = _("PYRAMID FLOOR 4");
+static const u8 gText_PyramidFloor5[] = _("PYRAMID FLOOR 5");
+static const u8 gText_PyramidFloor6[] = _("PYRAMID FLOOR 6");
+static const u8 gText_PyramidFloor7[] = _("PYRAMID FLOOR 7");
+static const u8 gText_Pyramid[] = _("PYRAMID");
+
+static const u8 * const gBattlePyramid_MapHeaderStrings[] =
+{
+ gText_PyramidFloor1,
+ gText_PyramidFloor2,
+ gText_PyramidFloor3,
+ gText_PyramidFloor4,
+ gText_PyramidFloor5,
+ gText_PyramidFloor6,
+ gText_PyramidFloor7,
+ gText_Pyramid,
+};
+
+// text
+bool8 sub_80D47D4(void)
+{
+ HideStartMenu();
+ ShowMapNamePopup();
+ return 1;
+}
+
+void ShowMapNamePopup(void)
+{
+ if (FlagGet(FLAG_SPECIAL_FLAG_0x4000) != TRUE)
+ {
+ if (!FuncIsActiveTask(Task_MapNamePopUpWindow))
+ {
+ mapNamePopupTaskId = CreateTask(Task_MapNamePopUpWindow, 90);
+ SetGpuReg(REG_OFFSET_BG0VOFS, 40);
+ gTasks[mapNamePopupTaskId].data[0] = 6;
+ gTasks[mapNamePopupTaskId].data[2] = 40;
+ }
+ else
+ {
+ if (gTasks[mapNamePopupTaskId].data[0] != 2)
+ gTasks[mapNamePopupTaskId].data[0] = 2;
+ gTasks[mapNamePopupTaskId].data[3] = 1;
+ }
+ }
+}
+
+static void Task_MapNamePopUpWindow(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ switch (task->data[0])
+ {
+ case 6:
+ task->data[4]++;
+ if (task->data[4] > 30)
+ {
+ task->data[0] = 0;
+ task->data[4] = 0;
+ ShowMapNamePopUpWindow();
+ }
+ break;
+ case 0:
+ task->data[2] -= 2;
+ if (task->data[2] <= 0 )
+ {
+ task->data[2] = 0;
+ task->data[0] = 1;
+ gTasks[mapNamePopupTaskId].data[1] = 0;
+ }
+ break;
+ case 1:
+ task->data[1]++;
+ if (task->data[1] > 120 )
+ {
+ task->data[1] = 0;
+ task->data[0] = 2;
+ }
+ break;
+ case 2:
+ task->data[2] += 2;
+ if (task->data[2] > 39)
+ {
+ task->data[2] = 40;
+ if (task->data[3])
+ {
+ task->data[0] = 6;
+ task->data[4] = 0;
+ task->data[3] = 0;
+ }
+ else
+ {
+ task->data[0] = 4;
+ return;
+ }
+ }
+ break;
+ case 4:
+ sub_819746C(GetMapNamePopUpWindowId(), TRUE);
+ task->data[0] = 5;
+ break;
+ case 5:
+ HideMapNamePopUpWindow();
+ return;
+ }
+ SetGpuReg(REG_OFFSET_BG0VOFS, task->data[2]);
+}
+
+void HideMapNamePopUpWindow(void)
+{
+ if (FuncIsActiveTask(Task_MapNamePopUpWindow))
+ {
+ sub_819746C(GetMapNamePopUpWindowId(), TRUE);
+ RemoveMapNamePopUpWindow();
+ SetGpuReg_ForcedBlank(REG_OFFSET_BG0VOFS, 0);
+ DestroyTask(mapNamePopupTaskId);
+ }
+}
+
+static void ShowMapNamePopUpWindow(void)
+{
+ u8 mapDisplayHeader[24];
+ u8 *withoutPrefixPtr;
+ u8 x;
+ const u8* mapDisplayHeaderSource;
+
+ if(InBattlePyramid())
+ {
+ if(gMapHeader.mapDataId == 0x17A)
+ {
+ withoutPrefixPtr = &(mapDisplayHeader[3]);
+ mapDisplayHeaderSource = gBattlePyramid_MapHeaderStrings[7];
+ }
+ else
+ {
+ withoutPrefixPtr = &(mapDisplayHeader[3]);
+ mapDisplayHeaderSource = gBattlePyramid_MapHeaderStrings[gSaveBlock2Ptr->battlePyramidWildHeaderId];
+ }
+ StringCopy(withoutPrefixPtr, mapDisplayHeaderSource);
+ }
+ else
+ {
+ withoutPrefixPtr = &(mapDisplayHeader[3]);
+ GetMapName(withoutPrefixPtr, gMapHeader.regionMapSectionId, 0);
+ }
+ AddMapNamePopUpWindow();
+ LoadMapNamePopUpWindowBg();
+ x = GetStringCenterAlignXOffset(7, withoutPrefixPtr, 80);
+ mapDisplayHeader[0] = EXT_CTRL_CODE_BEGIN;
+ mapDisplayHeader[1] = EXT_CTRL_CODE_HIGHLIGHT;
+ mapDisplayHeader[2] = TEXT_COLOR_TRANSPARENT;
+ PrintTextOnWindow(GetMapNamePopUpWindowId(), 7, mapDisplayHeader, x, 3, 0xFF, NULL);
+ CopyWindowToVram(GetMapNamePopUpWindowId(), 3);
+}
+
+#ifdef NONMATCHING
+static void sub_80D4A78(u8 bg, u8 x, u8 y, u8 deltaX, u8 deltaY, u8 unused)
+{
+ s32 i;
+
+ for(i=0; i<=11; i++)
+ {
+ FillBgTilemapBufferRect(bg, 0x21D + i, x + i - 1, y - 1, 1, 1, 0xE);
+ }
+ FillBgTilemapBufferRect(bg, 0x229 + i, x - 1, y, 1, 1, 0xE);
+ FillBgTilemapBufferRect(bg, 0x22A + i, deltaX + x, y, 1, 1, 0xE);
+ FillBgTilemapBufferRect(bg, 0x22B + i, x - 1, y + 1 , 1, 1, 0xE);
+ FillBgTilemapBufferRect(bg, 0x22C + i, deltaX + x, y + 1, 1, 1, 0xE);
+ FillBgTilemapBufferRect(bg, 0x22D + i, x - 1, y + 2, 1, 1, 0xE);
+ FillBgTilemapBufferRect(bg, 0x22E + i, deltaX + x, y + 2, 1, 1, 0xE);
+ for(i=0; i<=11; i++)
+ {
+ FillBgTilemapBufferRect(bg, 0x22F + i, x + i - 1, y + deltaY, 1, 1, 0xE);
+ }
+}
+#else
+NAKED
+static void sub_80D4A78(u8 bg, u8 x, u8 y, u8 deltaX, u8 deltaY, u8 unused)
+{
+ asm("\n\
+ .syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, 0x1C\n\
+ ldr r4, [sp, 0x3C]\n\
+ lsls r0, 24\n\
+ lsrs r7, r0, 24\n\
+ lsls r1, 24\n\
+ lsrs r1, 24\n\
+ mov r10, r1\n\
+ lsls r2, 24\n\
+ lsls r3, 24\n\
+ lsrs r3, 24\n\
+ str r3, [sp, 0x10]\n\
+ lsls r4, 24\n\
+ lsrs r4, 24\n\
+ str r4, [sp, 0x14]\n\
+ movs r5, 0\n\
+ lsls r0, r1, 24\n\
+ asrs r1, r0, 24\n\
+ lsrs r3, r2, 24\n\
+ str r3, [sp, 0xC]\n\
+ movs r6, 0xFF\n\
+ lsls r6, 24\n\
+ adds r6, r2\n\
+ mov r8, r6\n\
+ str r0, [sp, 0x18]\n\
+ subs r4, r1, 0x1\n\
+ _080D4AB4:\n\
+ ldr r0, =0x0000021d\n\
+ adds r1, r5, r0\n\
+ lsls r1, 16\n\
+ lsrs r1, 16\n\
+ lsls r2, r4, 24\n\
+ lsrs r2, 24\n\
+ movs r3, 0x1\n\
+ str r3, [sp]\n\
+ str r3, [sp, 0x4]\n\
+ movs r6, 0xE\n\
+ mov r9, r6\n\
+ str r6, [sp, 0x8]\n\
+ adds r0, r7, 0\n\
+ mov r6, r8\n\
+ lsrs r3, r6, 24\n\
+ bl FillBgTilemapBufferRect\n\
+ adds r4, 0x1\n\
+ adds r5, 0x1\n\
+ cmp r5, 0xB\n\
+ ble _080D4AB4\n\
+ ldr r1, =0x00000229\n\
+ movs r0, 0x1\n\
+ negs r0, r0\n\
+ add r0, r10\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r8, r0\n\
+ movs r5, 0x1\n\
+ str r5, [sp]\n\
+ str r5, [sp, 0x4]\n\
+ mov r2, r9\n\
+ str r2, [sp, 0x8]\n\
+ adds r0, r7, 0\n\
+ mov r2, r8\n\
+ ldr r3, [sp, 0xC]\n\
+ bl FillBgTilemapBufferRect\n\
+ ldr r1, =0x0000022a\n\
+ ldr r6, [sp, 0x10]\n\
+ add r6, r10\n\
+ lsls r6, 24\n\
+ lsrs r6, 24\n\
+ str r5, [sp]\n\
+ str r5, [sp, 0x4]\n\
+ mov r3, r9\n\
+ str r3, [sp, 0x8]\n\
+ adds r0, r7, 0\n\
+ adds r2, r6, 0\n\
+ ldr r3, [sp, 0xC]\n\
+ bl FillBgTilemapBufferRect\n\
+ ldr r1, =0x0000022b\n\
+ ldr r4, [sp, 0xC]\n\
+ adds r4, 0x1\n\
+ lsls r4, 24\n\
+ lsrs r4, 24\n\
+ str r5, [sp]\n\
+ str r5, [sp, 0x4]\n\
+ mov r0, r9\n\
+ str r0, [sp, 0x8]\n\
+ adds r0, r7, 0\n\
+ mov r2, r8\n\
+ adds r3, r4, 0\n\
+ bl FillBgTilemapBufferRect\n\
+ movs r1, 0x8B\n\
+ lsls r1, 2\n\
+ str r5, [sp]\n\
+ str r5, [sp, 0x4]\n\
+ mov r2, r9\n\
+ str r2, [sp, 0x8]\n\
+ adds r0, r7, 0\n\
+ adds r2, r6, 0\n\
+ adds r3, r4, 0\n\
+ bl FillBgTilemapBufferRect\n\
+ ldr r1, =0x0000022d\n\
+ ldr r4, [sp, 0xC]\n\
+ adds r4, 0x2\n\
+ lsls r4, 24\n\
+ lsrs r4, 24\n\
+ str r5, [sp]\n\
+ str r5, [sp, 0x4]\n\
+ mov r3, r9\n\
+ str r3, [sp, 0x8]\n\
+ adds r0, r7, 0\n\
+ mov r2, r8\n\
+ adds r3, r4, 0\n\
+ bl FillBgTilemapBufferRect\n\
+ ldr r1, =0x0000022e\n\
+ str r5, [sp]\n\
+ str r5, [sp, 0x4]\n\
+ mov r0, r9\n\
+ str r0, [sp, 0x8]\n\
+ adds r0, r7, 0\n\
+ adds r2, r6, 0\n\
+ adds r3, r4, 0\n\
+ bl FillBgTilemapBufferRect\n\
+ movs r5, 0\n\
+ ldr r1, [sp, 0xC]\n\
+ ldr r2, [sp, 0x14]\n\
+ adds r0, r1, r2\n\
+ lsls r4, r0, 24\n\
+ movs r6, 0x1\n\
+ _080D4B8A:\n\
+ ldr r3, =0x0000022f\n\
+ adds r1, r5, r3\n\
+ lsls r1, 16\n\
+ lsrs r1, 16\n\
+ subs r0, r5, 0x1\n\
+ ldr r3, [sp, 0x18]\n\
+ asrs r2, r3, 24\n\
+ adds r2, r0\n\
+ lsls r2, 24\n\
+ lsrs r2, 24\n\
+ str r6, [sp]\n\
+ str r6, [sp, 0x4]\n\
+ movs r0, 0xE\n\
+ str r0, [sp, 0x8]\n\
+ adds r0, r7, 0\n\
+ lsrs r3, r4, 24\n\
+ bl FillBgTilemapBufferRect\n\
+ adds r5, 0x1\n\
+ cmp r5, 0xB\n\
+ ble _080D4B8A\n\
+ add sp, 0x1C\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .pool\n\
+ .syntax divided");
+}
+#endif // NONMATCHING
+
+static void LoadMapNamePopUpWindowBg(void)
+{
+ u8 popupWindowId;
+ u16 regionMapSectionId;
+ u8 popUpThemeId;
+
+ popupWindowId = GetMapNamePopUpWindowId();
+ regionMapSectionId = gMapHeader.regionMapSectionId;
+ if(regionMapSectionId > MAPSEC_DYNAMIC)
+ {
+ if(regionMapSectionId > MAPSEC_SPECIAL_AREA)
+ regionMapSectionId -= (MAPSEC_SPECIAL_AREA - MAPSEC_DYNAMIC);
+ else
+ regionMapSectionId = 0; //discard kanto region sections
+ }
+ popUpThemeId = gRegionMapSectionId_To_PopUpThemeIdMapping[regionMapSectionId];
+
+ LoadBgTiles(GetWindowAttribute(popupWindowId, 0), &(gMapPopUp_Outline_Table[popUpThemeId][0]), 0x400, 0x21D);
+ CallWindowFunction(popupWindowId, sub_80D4A78);
+ PutWindowTilemap(popupWindowId);
+ if(gMapHeader.weather == WEATHER_BUBBLES)
+ LoadPalette(&gUnknown_0857F444, 0xE0, 0x20);
+ else
+ LoadPalette(&(gMapPopUp_Palette_Table[popUpThemeId][0]), 0xE0, 0x20);
+ BlitBitmapToWindow(popupWindowId, &(gMapPopUp_Table[popUpThemeId][0]), 0, 0, 80, 24);
+}
diff --git a/src/map_obj_lock.c b/src/map_obj_lock.c
new file mode 100644
index 000000000..688d0594d
--- /dev/null
+++ b/src/map_obj_lock.c
@@ -0,0 +1,187 @@
+#include "global.h"
+#include "event_data.h"
+#include "field_map_obj.h"
+#include "field_map_obj_helpers.h"
+#include "field_player_avatar.h"
+#include "map_obj_lock.h"
+#include "script_movement.h"
+#include "task.h"
+#include "trainer_see.h"
+
+bool8 walkrun_is_standing_still(void)
+{
+ if (gPlayerAvatar.tileTransitionState == T_TILE_TRANSITION)
+ return FALSE;
+ else
+ return TRUE;
+}
+
+static void sub_80983A4(u8 taskId)
+{
+ if (walkrun_is_standing_still())
+ {
+ sub_808B864();
+ DestroyTask(taskId);
+ }
+}
+
+bool8 sub_80983C4(void)
+{
+ if (FuncIsActiveTask(sub_80983A4))
+ {
+ return FALSE;
+ }
+ else
+ {
+ sub_808BCF4();
+ return TRUE;
+ }
+}
+
+
+void ScriptFreezeMapObjects(void)
+{
+ FreezeMapObjects();
+ CreateTask(sub_80983A4, 80);
+}
+
+static void sub_8098400(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ if (!task->data[0] && walkrun_is_standing_still() == TRUE)
+ {
+ sub_808B864();
+ task->data[0] = 1;
+ }
+ if (!task->data[1] && !gMapObjects[gSelectedMapObject].mapobj_bit_1)
+ {
+ FreezeMapObject(&gMapObjects[gSelectedMapObject]);
+ task->data[1] = 1;
+ }
+ if (task->data[0] && task->data[1])
+ DestroyTask(taskId);
+}
+
+bool8 sub_809847C(void)
+{
+ if (FuncIsActiveTask(sub_8098400))
+ {
+ return FALSE;
+ }
+ else
+ {
+ sub_808BCF4();
+ return TRUE;
+ }
+}
+
+void LockSelectedMapObject(void)
+{
+ u8 taskId;
+ FreezeMapObjectsExceptOne(gSelectedMapObject);
+ taskId = CreateTask(sub_8098400, 80);
+ if (!gMapObjects[gSelectedMapObject].mapobj_bit_1)
+ {
+ FreezeMapObject(&gMapObjects[gSelectedMapObject]);
+ gTasks[taskId].data[1] = 1;
+ }
+}
+
+void sub_80984F4(void)
+{
+ u8 objectId = GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0);
+ FieldObjectClearAnimIfSpecialAnimFinished(&gMapObjects[objectId]);
+ sub_80D338C();
+ UnfreezeMapObjects();
+}
+
+void sub_8098524(void)
+{
+ u8 objectId;
+
+ if (gMapObjects[gSelectedMapObject].active)
+ FieldObjectClearAnimIfSpecialAnimFinished(&gMapObjects[gSelectedMapObject]);
+ objectId = GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0);
+ FieldObjectClearAnimIfSpecialAnimFinished(&gMapObjects[objectId]);
+ sub_80D338C();
+ UnfreezeMapObjects();
+}
+
+void sub_8098574(void)
+{
+ FieldObjectFaceOppositeDirection(&gMapObjects[gSelectedMapObject], gSpecialVar_Facing);
+}
+
+void sub_809859C(void)
+{
+ FieldObjectClearAnimIfSpecialAnimActive(&gMapObjects[gSelectedMapObject]);
+}
+
+static void sub_80985BC(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+ u8 mapObjectId = task->data[2];
+
+ if (!task->data[0] && walkrun_is_standing_still() == TRUE)
+ {
+ sub_808B864();
+ task->data[0] = 1;
+ }
+ if (!task->data[1] && !gMapObjects[mapObjectId].mapobj_bit_1)
+ {
+ FreezeMapObject(&gMapObjects[mapObjectId]);
+ task->data[1] = 1;
+ }
+ if (task->data[0] && task->data[1])
+ DestroyTask(taskId);
+}
+
+void sub_8098630(void)
+{
+ u8 trainerObjectId1, trainerObjectId2, taskId;
+ trainerObjectId1 = GetChosenApproachingTrainerMapObjectId(0);
+ if(gNoOfApproachingTrainers == 2)
+ {
+ trainerObjectId2 = GetChosenApproachingTrainerMapObjectId(1);
+ sub_8098074(trainerObjectId1, trainerObjectId2);
+ taskId = CreateTask(sub_80985BC, 80);
+ gTasks[taskId].data[2] = trainerObjectId1;
+ if(!gMapObjects[trainerObjectId1].mapobj_bit_1)
+ {
+ FreezeMapObject(&gMapObjects[trainerObjectId1]);
+ gTasks[taskId].data[1] = 1;
+ }
+ taskId = CreateTask(sub_80985BC, 81);
+ gTasks[taskId].data[2] = trainerObjectId2;
+ if(!gMapObjects[trainerObjectId2].mapobj_bit_1)
+ {
+ FreezeMapObject(&gMapObjects[trainerObjectId2]);
+ gTasks[taskId].data[1] = 1;
+ }
+ }
+ else
+ {
+ FreezeMapObjectsExceptOne(trainerObjectId1);
+ taskId = CreateTask(sub_80985BC, 80);
+ gTasks[taskId].data[2] = trainerObjectId1;
+ if(!gMapObjects[trainerObjectId1].mapobj_bit_1)
+ {
+ FreezeMapObject(&gMapObjects[trainerObjectId1]);
+ gTasks[taskId].data[1] = 1;
+ }
+ }
+}
+
+bool8 sub_8098734(void)
+{
+ if (FuncIsActiveTask(sub_80985BC))
+ {
+ return FALSE;
+ }
+ else
+ {
+ sub_808BCF4();
+ return TRUE;
+ }
+}
diff --git a/src/match_call.c b/src/match_call.c
new file mode 100644
index 000000000..aa6945161
--- /dev/null
+++ b/src/match_call.c
@@ -0,0 +1,1275 @@
+
+// Includes
+#include "global.h"
+#include "battle_setup.h"
+#include "event_data.h"
+#include "string_util.h"
+#include "battle.h"
+#include "battle_frontier_1.h"
+#include "gym_leader_rematch.h"
+
+extern const u8 gTrainerClassNames[][13];
+
+// Static type declarations
+
+typedef struct MatchCallTextDataStruct {
+ const u8 *text;
+ u16 flag;
+ u16 flag2;
+} match_call_text_data_t;
+
+struct MatchCallStructCommon {
+ u8 type;
+ u8 v1;
+ u16 flag;
+};
+
+struct MatchCallStruct0 {
+ u8 type;
+ u8 v1;
+ u16 flag;
+ const u8 *desc;
+ const u8 *name;
+ const match_call_text_data_t *textData;
+};
+
+struct MatchCallStruct1 {
+ u8 type;
+ u8 v1;
+ u16 flag;
+ u16 rematchTableIdx;
+ const u8 *desc;
+ const u8 *name;
+ const match_call_text_data_t *textData;
+};
+
+struct MatchCallSubstruct2 {
+ u16 flag;
+ u8 v2;
+};
+
+struct MatchCallStruct2 {
+ u8 type;
+ u8 v1;
+ u16 flag;
+ u16 rematchTableIdx;
+ const u8 *desc;
+ const match_call_text_data_t *textData;
+ const struct MatchCallSubstruct2 *v10;
+};
+
+struct MatchCallStruct3 {
+ u8 type;
+ u8 v1;
+ u16 flag;
+ const u8 *desc;
+ const u8 *name;
+};
+
+struct MatchCallStruct4 {
+ u8 type;
+ u8 gender;
+ u16 flag;
+ const u8 *desc;
+ const u8 *name;
+ const match_call_text_data_t *textData;
+};
+
+struct MatchCallStruct5 {
+ u8 type;
+ u8 v1;
+ u16 flag;
+ u16 v4;
+ const u8 *desc;
+ const u8 *name;
+ const match_call_text_data_t *textData;
+};
+
+#define MATCHCALLDEF(name, type_, ...) \
+static const struct MatchCallStruct##type_ name = { \
+ .type = type_, \
+ __VA_ARGS__ \
+};
+
+typedef union {
+ const struct MatchCallStructCommon *common;
+ const struct MatchCallStruct0 *type0;
+ const struct MatchCallStruct1 *type1;
+ const struct MatchCallStruct2 *type2;
+ const struct MatchCallStruct3 *type3;
+ const struct MatchCallStruct4 *type4;
+ const struct MatchCallStruct5 *type5;
+} match_call_t;
+
+struct UnkStruct_08625388 {
+ u16 idx;
+ u16 v2;
+ u16 v4;
+ const u8 *v8[4];
+};
+
+// Static RAM declarations
+
+// Static ROM declarations
+
+static bool32 MatchCallGetFlag_Type0(match_call_t);
+static bool32 MatchCallGetFlag_Type1(match_call_t);
+static bool32 MatchCallGetFlag_Type2(match_call_t);
+static bool32 MatchCallGetFlag_Type3(match_call_t);
+static bool32 MatchCallGetFlag_Type4(match_call_t);
+
+static u8 sub_81D1714(match_call_t);
+static u8 sub_81D1718(match_call_t);
+static u8 sub_81D171C(match_call_t);
+static u8 sub_81D1750(match_call_t);
+static u8 sub_81D1754(match_call_t);
+
+static bool32 MatchCall_IsRematchable_Type0(match_call_t);
+static bool32 MatchCall_IsRematchable_Type1(match_call_t);
+static bool32 MatchCall_IsRematchable_Type2(match_call_t);
+static bool32 MatchCall_IsRematchable_Type3(match_call_t);
+static bool32 MatchCall_IsRematchable_Type4(match_call_t);
+
+static bool32 sub_81D1840(match_call_t);
+static bool32 sub_81D1844(match_call_t);
+static bool32 sub_81D1848(match_call_t);
+static bool32 sub_81D184C(match_call_t);
+static bool32 sub_81D1850(match_call_t);
+
+static u32 MatchCall_GetRematchTableIdx_Type0(match_call_t);
+static u32 MatchCall_GetRematchTableIdx_Type1(match_call_t);
+static u32 MatchCall_GetRematchTableIdx_Type2(match_call_t);
+static u32 MatchCall_GetRematchTableIdx_Type3(match_call_t);
+static u32 MatchCall_GetRematchTableIdx_Type4(match_call_t);
+
+static void MatchCall_GetMessage_Type0(match_call_t, u8 *);
+static void MatchCall_GetMessage_Type1(match_call_t, u8 *);
+static void MatchCall_GetMessage_Type2(match_call_t, u8 *);
+static void MatchCall_GetMessage_Type3(match_call_t, u8 *);
+static void MatchCall_GetMessage_Type4(match_call_t, u8 *);
+
+static void MatchCall_GetNameAndDesc_Type0(match_call_t, const u8 **, const u8 **);
+static void MatchCall_GetNameAndDesc_Type1(match_call_t, const u8 **, const u8 **);
+static void MatchCall_GetNameAndDesc_Type2(match_call_t, const u8 **, const u8 **);
+static void MatchCall_GetNameAndDesc_Type3(match_call_t, const u8 **, const u8 **);
+static void MatchCall_GetNameAndDesc_Type4(match_call_t, const u8 **, const u8 **);
+
+static void sub_81D1920(const match_call_text_data_t *, u8 *);
+static void sub_81D199C(const match_call_text_data_t *, u16, u8 *);
+static void MatchCall_GetNameAndDescByRematchIdx(u32, const u8 **, const u8 **);
+
+extern const u8 gText_MrStone_Pokenav_2B60C0[];
+extern const u8 gText_MrStone_Pokenav_2B61E6[];
+extern const u8 gText_MrStone_Pokenav_2B6302[];
+extern const u8 gText_MrStone_Pokenav_2B63A0[];
+extern const u8 gText_MrStone_Pokenav_2B64A2[];
+extern const u8 gText_MrStone_Pokenav_2B6526[];
+extern const u8 gText_MrStone_Pokenav_2B65BB[];
+extern const u8 gText_MrStone_Pokenav_2B6664[];
+extern const u8 gText_MrStone_Pokenav_2B66B1[];
+extern const u8 gText_MrStone_Pokenav_2B6703[];
+extern const u8 gText_MrStone_Pokenav_2B67ED[];
+
+extern const u8 gMrStoneMatchCallDesc[];
+extern const u8 gMrStoneMatchCallName[];
+
+extern const u8 gText_Norman_Pokenav_2B5719[];
+extern const u8 gText_Norman_Pokenav_2B5795[];
+extern const u8 gText_Norman_Pokenav_2B584D[];
+extern const u8 gText_Norman_Pokenav_2B58E3[];
+extern const u8 gText_Norman_Pokenav_2B5979[];
+extern const u8 gText_Norman_Pokenav_2B5A07[];
+extern const u8 gText_Norman_Pokenav_2B5A69[];
+extern const u8 gText_Norman_Pokenav_2B5ACF[];
+extern const u8 gText_Norman_Pokenav_2B5B5E[];
+
+extern const u8 gNormanMatchCallDesc[];
+extern const u8 gNormanMatchCallName[];
+
+extern const u8 gProfBirchMatchCallDesc[];
+extern const u8 gProfBirchMatchCallName[];
+
+extern const u8 gText_Mom_Pokenav_2B227B[];
+extern const u8 gText_Mom_Pokenav_2B2310[];
+extern const u8 gText_Mom_Pokenav_2B23F3[];
+
+extern const u8 gMomMatchCallDesc[];
+extern const u8 gMomMatchCallName[];
+
+extern const u8 gText_Steven_Pokenav_2B5B95[];
+extern const u8 gText_Steven_Pokenav_2B5C53[];
+extern const u8 gText_Steven_Pokenav_2B5CC9[];
+extern const u8 gText_Steven_Pokenav_2B5DB4[];
+extern const u8 gText_Steven_Pokenav_2B5E26[];
+extern const u8 gText_Steven_Pokenav_2B5EA2[];
+extern const u8 gText_Steven_Pokenav_2B5ED9[];
+
+extern const u8 gStevenMatchCallDesc[];
+extern const u8 gStevenMatchCallName[];
+
+extern const u8 gText_May_Pokenav_2B3AB3[];
+extern const u8 gText_May_Pokenav_2B3B3F[];
+extern const u8 gText_May_Pokenav_2B3C13[];
+extern const u8 gText_May_Pokenav_2B3CF3[];
+extern const u8 gText_May_Pokenav_2B3D4B[];
+extern const u8 gText_May_Pokenav_2B3DD1[];
+extern const u8 gText_May_Pokenav_2B3E69[];
+extern const u8 gText_May_Pokenav_2B3ECD[];
+extern const u8 gText_May_Pokenav_2B3F2B[];
+extern const u8 gText_May_Pokenav_2B3FFB[];
+extern const u8 gText_May_Pokenav_2B402B[];
+extern const u8 gText_May_Pokenav_2B414B[];
+extern const u8 gText_May_Pokenav_2B4228[];
+extern const u8 gText_May_Pokenav_2B42E0[];
+extern const u8 gText_May_Pokenav_2B4350[];
+extern const u8 gMayBrendanMatchCallDesc[];
+extern const u8 gExpandedPlaceholder_May[];
+extern const u8 gText_Brendan_Pokenav_2B43EF[];
+extern const u8 gText_Brendan_Pokenav_2B4486[];
+extern const u8 gText_Brendan_Pokenav_2B4560[];
+extern const u8 gText_Brendan_Pokenav_2B463F[];
+extern const u8 gText_Brendan_Pokenav_2B46B7[];
+extern const u8 gText_Brendan_Pokenav_2B4761[];
+extern const u8 gText_Brendan_Pokenav_2B47F4[];
+extern const u8 gText_Brendan_Pokenav_2B4882[];
+extern const u8 gText_Brendan_Pokenav_2B4909[];
+extern const u8 gText_Brendan_Pokenav_2B49C4[];
+extern const u8 gText_Brendan_Pokenav_2B4A44[];
+extern const u8 gText_Brendan_Pokenav_2B4B28[];
+extern const u8 gText_Brendan_Pokenav_2B4C15[];
+extern const u8 gText_Brendan_Pokenav_2B4CD8[];
+extern const u8 gText_Brendan_Pokenav_2B4D46[];
+extern const u8 gExpandedPlaceholder_Brendan[];
+extern const u8 gText_Wally_Pokenav_2B4DE2[];
+extern const u8 gText_Wally_Pokenav_2B4E57[];
+extern const u8 gText_Wally_Pokenav_2B4EA5[];
+extern const u8 gText_Wally_Pokenav_2B4F41[];
+extern const u8 gText_Wally_Pokenav_2B4FF3[];
+extern const u8 gText_Wally_Pokenav_2B50B1[];
+extern const u8 gText_Wally_Pokenav_2B5100[];
+extern const u8 gWallyMatchCallDesc[];
+extern const u8 gText_Scott_Pokenav_2B5184[];
+extern const u8 gText_Scott_Pokenav_2B5275[];
+extern const u8 gText_Scott_Pokenav_2B5323[];
+extern const u8 gText_Scott_Pokenav_2B53DB[];
+extern const u8 gText_Scott_Pokenav_2B54A5[];
+extern const u8 gText_Scott_Pokenav_2B5541[];
+extern const u8 gText_Scott_Pokenav_2B56CA[];
+extern const u8 gScottMatchCallDesc[];
+extern const u8 gScottMatchCallName[];
+extern const u8 gText_Roxanne_Pokenav_2B2456[];
+extern const u8 gText_Roxanne_Pokenav_2B250E[];
+extern const u8 gText_Roxanne_Pokenav_2B25C1[];
+extern const u8 gText_Roxanne_Pokenav_2B2607[];
+extern const u8 gRoxanneMatchCallDesc[];
+extern const u8 gText_Brawly_Pokenav_2B2659[];
+extern const u8 gText_Brawly_Pokenav_2B275D[];
+extern const u8 gText_Brawly_Pokenav_2B286F[];
+extern const u8 gText_Brawly_Pokenav_2B28D1[];
+extern const u8 gBrawlyMatchCallDesc[];
+extern const u8 gText_Wattson_Pokenav_2B2912[];
+extern const u8 gText_Wattson_Pokenav_2B29CA[];
+extern const u8 gText_Wattson_Pokenav_2B2AB6[];
+extern const u8 gText_Wattson_Pokenav_2B2B01[];
+extern const u8 gWattsonMatchCallDesc[];
+extern const u8 gText_Flannery_Pokenav_2B2B4D[];
+extern const u8 gText_Flannery_Pokenav_2B2C0E[];
+extern const u8 gText_Flannery_Pokenav_2B2CF1[];
+extern const u8 gText_Flannery_Pokenav_2B2D54[];
+extern const u8 gFlanneryMatchCallDesc[];
+extern const u8 gText_Winona_Pokenav_2B2DA4[];
+extern const u8 gText_Winona_Pokenav_2B2E2B[];
+extern const u8 gText_Winona_Pokenav_2B2EC2[];
+extern const u8 gText_Winona_Pokenav_2B2F16[];
+extern const u8 gWinonaMatchCallDesc[];
+extern const u8 gText_TateLiza_Pokenav_2B2F97[];
+extern const u8 gText_TateLiza_Pokenav_2B306E[];
+extern const u8 gText_TateLiza_Pokenav_2B3158[];
+extern const u8 gText_TateLiza_Pokenav_2B31CD[];
+extern const u8 gTateLizaMatchCallDesc[];
+extern const u8 gText_Juan_Pokenav_2B3249[];
+extern const u8 gText_Juan_Pokenav_2B32EC[];
+extern const u8 gText_Juan_Pokenav_2B33AA[];
+extern const u8 gText_Juan_Pokenav_2B341E[];
+extern const u8 gJuanMatchCallDesc[];
+extern const u8 gText_Sidney_Pokenav_2B34CC[];
+extern const u8 gEliteFourMatchCallDesc[];
+extern const u8 gText_Phoebe_Pokenav_2B3561[];
+extern const u8 gText_Glacia_Pokenav_2B35E4[];
+extern const u8 gText_Drake_Pokenav_2B368B[];
+extern const u8 gText_Wallace_Pokenav_2B3790[];
+extern const u8 gChampionMatchCallDesc[];
+extern const u8 gMatchCallStevenStrategyText[];
+extern const u8 gMatchCall_StevenTrainersPokemonText[];
+extern const u8 gMatchCall_StevenSelfIntroductionText_Line1_BeforeMeteorFallsBattle[];
+extern const u8 gMatchCall_StevenSelfIntroductionText_Line2_BeforeMeteorFallsBattle[];
+extern const u8 gMatchCall_StevenSelfIntroductionText_Line1_AfterMeteorFallsBattle[];
+extern const u8 gMatchCall_StevenSelfIntroductionText_Line2_AfterMeteorFallsBattle[];
+extern const u8 gMatchCall_BrendanStrategyText[];
+extern const u8 gMatchCall_BrendanTrainersPokemonText[];
+extern const u8 gMatchCall_BrendanSelfIntroductionText_Line1[];
+extern const u8 gMatchCall_BrendanSelfIntroductionText_Line2[];
+extern const u8 gMatchCall_MayStrategyText[];
+extern const u8 gMatchCall_MayTrainersPokemonText[];
+extern const u8 gMatchCall_MaySelfIntroductionText_Line1[];
+extern const u8 gMatchCall_MaySelfIntroductionText_Line2[];
+// .rodata
+
+static const match_call_text_data_t sMrStoneTextScripts[] = {
+ { gText_MrStone_Pokenav_2B60C0, 0xFFFF, FLAG_0x158 },
+ { gText_MrStone_Pokenav_2B61E6, FLAG_0x158, 0xFFFF },
+ { gText_MrStone_Pokenav_2B6302, FLAG_0x0BD, 0xFFFF },
+ { gText_MrStone_Pokenav_2B63A0, FLAG_0x110, 0xFFFF },
+ { gText_MrStone_Pokenav_2B64A2, FLAG_0x06A, 0xFFFF },
+ { gText_MrStone_Pokenav_2B6526, FLAG_0x4F4, 0xFFFF },
+ { gText_MrStone_Pokenav_2B65BB, FLAG_0x097, 0xFFFF },
+ { gText_MrStone_Pokenav_2B6664, FLAG_0x06F, 0xFFFF },
+ { gText_MrStone_Pokenav_2B66B1, FLAG_0x070, 0xFFFF },
+ { gText_MrStone_Pokenav_2B6703, FLAG_0x4F7, 0xFFFF },
+ { gText_MrStone_Pokenav_2B67ED, FLAG_SYS_GAME_CLEAR, 0xFFFF },
+ { NULL, 0xFFFF, 0xFFFF }
+};
+
+MATCHCALLDEF(sMrStoneMatchCallHeader, 0, 10, 0xffff, gMrStoneMatchCallDesc, gMrStoneMatchCallName, sMrStoneTextScripts);
+
+static const match_call_text_data_t sNormanTextScripts[] = {
+ { gText_Norman_Pokenav_2B5719, FLAG_0x132, 0xFFFF },
+ { gText_Norman_Pokenav_2B5795, FLAG_0x4F1, 0xFFFF },
+ { gText_Norman_Pokenav_2B584D, FLAG_0x4F3, 0xFFFF },
+ { gText_Norman_Pokenav_2B58E3, FLAG_0x4F4, 0xFFFF },
+ { gText_Norman_Pokenav_2B5979, FLAG_0x0D4, 0xFFFF },
+ { gText_Norman_Pokenav_2B5A07, 0xFFFE, 0xFFFF },
+ { gText_Norman_Pokenav_2B5A69, FLAG_SYS_GAME_CLEAR, 0xFFFF },
+ { gText_Norman_Pokenav_2B5ACF, FLAG_SYS_GAME_CLEAR, 0xFFFF },
+ { gText_Norman_Pokenav_2B5B5E, FLAG_SYS_GAME_CLEAR, 0xFFFF },
+ { NULL, 0xFFFF, 0xFFFF }
+};
+
+MATCHCALLDEF(sNormanMatchCallHeader, 5, 7, FLAG_0x132, 0x45, gNormanMatchCallDesc, gNormanMatchCallName, sNormanTextScripts);
+
+MATCHCALLDEF(sProfBirchMatchCallHeader, 3, 0, FLAG_0x119, gProfBirchMatchCallDesc, gProfBirchMatchCallName)
+
+static const match_call_text_data_t sMomTextScripts[] = {
+ { gText_Mom_Pokenav_2B227B, 0xffff, 0xffff },
+ { gText_Mom_Pokenav_2B2310, FLAG_0x4F4, 0xffff },
+ { gText_Mom_Pokenav_2B23F3, FLAG_SYS_GAME_CLEAR, 0xffff },
+ { NULL, 0xffff, 0xffff }
+};
+
+MATCHCALLDEF(sMomMatchCallHeader, 0, 0, FLAG_0x0D8, gMomMatchCallDesc, gMomMatchCallName, sMomTextScripts);
+
+static const match_call_text_data_t sStevenTextScripts[] = {
+ { gText_Steven_Pokenav_2B5B95, 0xffff, 0xffff },
+ { gText_Steven_Pokenav_2B5C53, FLAG_0x0C7, 0xffff },
+ { gText_Steven_Pokenav_2B5CC9, FLAG_0x0D4, 0xffff },
+ { gText_Steven_Pokenav_2B5DB4, FLAG_0x070, 0xffff },
+ { gText_Steven_Pokenav_2B5E26, FLAG_0x4F6, 0xffff },
+ { gText_Steven_Pokenav_2B5EA2, FLAG_0x081, 0xffff },
+ { gText_Steven_Pokenav_2B5ED9, FLAG_SYS_GAME_CLEAR, 0xffff },
+ { NULL, 0xffff, 0xffff },
+};
+
+MATCHCALLDEF(sStevenMatchCallHeader, 0, 0xd5, FLAG_0x131, gStevenMatchCallDesc, gStevenMatchCallName, sStevenTextScripts);
+
+static const match_call_text_data_t sMayTextScripts[] = {
+ { gText_May_Pokenav_2B3AB3, 0xFFFF, 0xFFFF },
+ { gText_May_Pokenav_2B3B3F, FLAG_0x4F1, 0xFFFF },
+ { gText_May_Pokenav_2B3C13, FLAG_0x095, 0xFFFF },
+ { gText_May_Pokenav_2B3CF3, FLAG_0x324, 0xFFFF },
+ { gText_May_Pokenav_2B3D4B, FLAG_0x06A, 0xFFFF },
+ { gText_May_Pokenav_2B3DD1, FLAG_0x4F3, 0xFFFF },
+ { gText_May_Pokenav_2B3E69, FLAG_0x4F4, 0xFFFF },
+ { gText_May_Pokenav_2B3ECD, FLAG_0x097, 0xFFFF },
+ { gText_May_Pokenav_2B3F2B, FLAG_0x0D4, 0xFFFF },
+ { gText_May_Pokenav_2B3FFB, FLAG_0x06F, 0xFFFF },
+ { gText_May_Pokenav_2B402B, FLAG_0x061, 0xFFFF },
+ { gText_May_Pokenav_2B414B, FLAG_0x070, 0xFFFF },
+ { gText_May_Pokenav_2B4228, FLAG_0x081, 0xFFFF },
+ { gText_May_Pokenav_2B42E0, FLAG_0x4F7, 0xFFFF },
+ { gText_May_Pokenav_2B4350, FLAG_SYS_GAME_CLEAR, 0xFFFF },
+ { NULL, 0xFFFF, 0xFFFF }
+};
+
+MATCHCALLDEF(sMayMatchCallHeader, 4, MALE, FLAG_0x0FD, gMayBrendanMatchCallDesc, gExpandedPlaceholder_May, sMayTextScripts);
+
+static const match_call_text_data_t sBrendanTextScripts[] = {
+ { gText_Brendan_Pokenav_2B43EF, 0xFFFF, 0xFFFF },
+ { gText_Brendan_Pokenav_2B4486, FLAG_0x4F1, 0xFFFF },
+ { gText_Brendan_Pokenav_2B4560, FLAG_0x095, 0xFFFF },
+ { gText_Brendan_Pokenav_2B463F, FLAG_0x324, 0xFFFF },
+ { gText_Brendan_Pokenav_2B46B7, FLAG_0x06A, 0xFFFF },
+ { gText_Brendan_Pokenav_2B4761, FLAG_0x4F3, 0xFFFF },
+ { gText_Brendan_Pokenav_2B47F4, FLAG_0x4F4, 0xFFFF },
+ { gText_Brendan_Pokenav_2B4882, FLAG_0x097, 0xFFFF },
+ { gText_Brendan_Pokenav_2B4909, FLAG_0x0D4, 0xFFFF },
+ { gText_Brendan_Pokenav_2B49C4, FLAG_0x06F, 0xFFFF },
+ { gText_Brendan_Pokenav_2B4A44, FLAG_0x061, 0xFFFF },
+ { gText_Brendan_Pokenav_2B4B28, FLAG_0x070, 0xFFFF },
+ { gText_Brendan_Pokenav_2B4C15, FLAG_0x081, 0xFFFF },
+ { gText_Brendan_Pokenav_2B4CD8, FLAG_0x4F7, 0xFFFF },
+ { gText_Brendan_Pokenav_2B4D46, FLAG_SYS_GAME_CLEAR, 0xFFFF },
+ { NULL, 0xFFFF, 0xFFFF }
+};
+
+MATCHCALLDEF(sBrendanMatchCallHeader, 4, FEMALE, FLAG_0x0FD, gMayBrendanMatchCallDesc, gExpandedPlaceholder_Brendan, sBrendanTextScripts);
+
+static const match_call_text_data_t sWallyTextScripts[] = {
+ { gText_Wally_Pokenav_2B4DE2, 0xFFFF, 0xFFFF },
+ { gText_Wally_Pokenav_2B4E57, FLAG_0x0C7, 0xFFFF },
+ { gText_Wally_Pokenav_2B4EA5, FLAG_0x4F3, 0xFFFF },
+ { gText_Wally_Pokenav_2B4F41, FLAG_0x097, 0xFFFF },
+ { gText_Wally_Pokenav_2B4FF3, FLAG_0x06F, 0xFFFF },
+ { gText_Wally_Pokenav_2B50B1, FLAG_0x081, 0xFFFF },
+ { gText_Wally_Pokenav_2B5100, FLAG_0x07E, 0xFFFF },
+ { NULL, 0xFFFF, 0xFFFF }
+};
+
+const struct MatchCallSubstruct2 sWallyAdditionalData[] = {
+ { FLAG_0x324, 0x05 },
+ { FLAG_0x06F, 0xD5 },
+ { FLAG_0x35A, 0x46 },
+ { 0xFFFF, 0xD5 }
+};
+
+MATCHCALLDEF(sWallyMatchCallHeader, 2, 0, FLAG_0x0D6, REMATCH_WALLY_3, gWallyMatchCallDesc, sWallyTextScripts, sWallyAdditionalData);
+
+static const match_call_text_data_t sScottTextScripts[] = {
+ { gText_Scott_Pokenav_2B5184, 0xFFFF, 0xFFFF },
+ { gText_Scott_Pokenav_2B5275, FLAG_0x08B, 0xFFFF },
+ { gText_Scott_Pokenav_2B5323, FLAG_0x097, 0xFFFF },
+ { gText_Scott_Pokenav_2B53DB, FLAG_0x0D4, 0xFFFF },
+ { gText_Scott_Pokenav_2B54A5, FLAG_0x070, 0xFFFF },
+ { gText_Scott_Pokenav_2B5541, FLAG_0x4F7, 0xFFFF },
+ { gText_Scott_Pokenav_2B56CA, FLAG_SYS_GAME_CLEAR, 0xFFFF },
+ { NULL, 0xFFFF, 0xFFFF }
+};
+
+
+MATCHCALLDEF(sScottMatchCallHeader, 0, 0xD5, FLAG_0x0D7, gScottMatchCallDesc, gScottMatchCallName, sScottTextScripts);
+
+static const match_call_text_data_t sRoxanneTextScripts[] = {
+ { gText_Roxanne_Pokenav_2B2456, 0xFFFE, 0xFFFF },
+ { gText_Roxanne_Pokenav_2B250E, 0xFFFF, 0xFFFF },
+ { gText_Roxanne_Pokenav_2B25C1, 0xFFFF, 0xFFFF },
+ { gText_Roxanne_Pokenav_2B2607, FLAG_SYS_GAME_CLEAR, 0xFFFF },
+ { NULL, 0xFFFF, 0xFFFF }
+};
+
+MATCHCALLDEF(sRoxanneMatchCallHeader, 5, 10, FLAG_0x1D3, 0x41, gRoxanneMatchCallDesc, NULL, sRoxanneTextScripts);
+
+static const match_call_text_data_t sBrawlyTextScripts[] = {
+ { gText_Brawly_Pokenav_2B2659, 0xFFFE, 0xFFFF },
+ { gText_Brawly_Pokenav_2B275D, 0xFFFF, 0xFFFF },
+ { gText_Brawly_Pokenav_2B286F, 0xFFFF, 0xFFFF },
+ { gText_Brawly_Pokenav_2B28D1, FLAG_SYS_GAME_CLEAR, 0xFFFF },
+ { NULL, 0xFFFF, 0xFFFF }
+};
+
+MATCHCALLDEF(sBrawlyMatchCallHeader, 5, 2, FLAG_0x1D4, 0x42, gBrawlyMatchCallDesc, NULL, sBrawlyTextScripts);
+
+static const match_call_text_data_t sWattsonTextScripts[] = {
+ { gText_Wattson_Pokenav_2B2912, 0xFFFE, 0xFFFF },
+ { gText_Wattson_Pokenav_2B29CA, 0xFFFF, 0xFFFF },
+ { gText_Wattson_Pokenav_2B2AB6, 0xFFFF, 0xFFFF },
+ { gText_Wattson_Pokenav_2B2B01, FLAG_SYS_GAME_CLEAR, 0xFFFF },
+ { NULL, 0xFFFF, 0xFFFF }
+};
+
+MATCHCALLDEF(sWattsonMatchCallHeader, 5, 9, FLAG_0x1D5, 0x43, gWattsonMatchCallDesc, NULL, sWattsonTextScripts);
+
+static const match_call_text_data_t sFlanneryTextScripts[] = {
+ { gText_Flannery_Pokenav_2B2B4D, 0xFFFE, 0xFFFF },
+ { gText_Flannery_Pokenav_2B2C0E, 0xFFFF, 0xFFFF },
+ { gText_Flannery_Pokenav_2B2CF1, 0xFFFF, 0xFFFF },
+ { gText_Flannery_Pokenav_2B2D54, FLAG_SYS_GAME_CLEAR, 0xFFFF },
+ { NULL, 0xFFFF, 0xFFFF }
+};
+
+MATCHCALLDEF(sFlanneryMatchCallHeader, 5, 3, FLAG_0x1D6, 0x44, gFlanneryMatchCallDesc, NULL, sFlanneryTextScripts);
+
+static const match_call_text_data_t sWinonaTextScripts[] = {
+ { gText_Winona_Pokenav_2B2DA4, 0xFFFE, 0xFFFF },
+ { gText_Winona_Pokenav_2B2E2B, 0xFFFF, 0xFFFF },
+ { gText_Winona_Pokenav_2B2EC2, 0xFFFF, 0xFFFF },
+ { gText_Winona_Pokenav_2B2F16, FLAG_SYS_GAME_CLEAR, 0xFFFF },
+ { NULL, 0xFFFF, 0xFFFF }
+};
+
+MATCHCALLDEF(sWinonaMatchCallHeader, 5, 11, FLAG_0x1D7, 0x46, gWinonaMatchCallDesc, NULL, sWinonaTextScripts);
+
+static const match_call_text_data_t sTateLizaTextScripts[] = {
+ { gText_TateLiza_Pokenav_2B2F97, 0xFFFE, 0xFFFF },
+ { gText_TateLiza_Pokenav_2B306E, 0xFFFF, 0xFFFF },
+ { gText_TateLiza_Pokenav_2B3158, 0xFFFF, 0xFFFF },
+ { gText_TateLiza_Pokenav_2B31CD, FLAG_SYS_GAME_CLEAR, 0xFFFF },
+ { NULL, 0xFFFF, 0xFFFF }
+};
+
+MATCHCALLDEF(sTateLizaMatchCallHeader, 5, 13, FLAG_0x1D8, 0x47, gTateLizaMatchCallDesc, NULL, sTateLizaTextScripts);
+
+static const match_call_text_data_t sJuanTextScripts[] = {
+ { gText_Juan_Pokenav_2B3249, 0xFFFE, 0xFFFF },
+ { gText_Juan_Pokenav_2B32EC, 0xFFFF, 0xFFFF },
+ { gText_Juan_Pokenav_2B33AA, 0xFFFF, 0xFFFF },
+ { gText_Juan_Pokenav_2B341E, FLAG_SYS_GAME_CLEAR, 0xFFFF },
+ { NULL, 0xFFFF, 0xFFFF }
+};
+
+MATCHCALLDEF(sJuanMatchCallHeader, 5, 14, FLAG_0x1D9, 0x48, gJuanMatchCallDesc, NULL, sJuanTextScripts);
+
+static const match_call_text_data_t sSidneyTextScripts[] = {
+ { gText_Sidney_Pokenav_2B34CC, 0xFFFF, 0xFFFF },
+ { NULL, 0xFFFF, 0xFFFF }
+};
+
+MATCHCALLDEF(sSidneyMatchCallHeader, 5, 15, FLAG_0x1A5, 0x49, gEliteFourMatchCallDesc, NULL, sSidneyTextScripts);
+
+static const match_call_text_data_t sPhoebeTextScripts[] = {
+ { gText_Phoebe_Pokenav_2B3561, 0xFFFF, 0xFFFF },
+ { NULL, 0xFFFF, 0xFFFF }
+};
+
+MATCHCALLDEF(sPhoebeMatchCallHeader, 5, 15, FLAG_0x1A6, 0x4A, gEliteFourMatchCallDesc, NULL, sPhoebeTextScripts);
+
+static const match_call_text_data_t sGlaciaTextScripts[] = {
+ { gText_Glacia_Pokenav_2B35E4, 0xFFFF, 0xFFFF },
+ { NULL, 0xFFFF, 0xFFFF }
+};
+
+MATCHCALLDEF(sGlaciaMatchCallHeader, 5, 15, FLAG_0x1A7, 0x4B, gEliteFourMatchCallDesc, NULL, sGlaciaTextScripts);
+
+static const match_call_text_data_t sDrakeTextScripts[] = {
+ { gText_Drake_Pokenav_2B368B, 0xFFFF, 0xFFFF },
+ { NULL, 0xFFFF, 0xFFFF }
+};
+
+MATCHCALLDEF(sDrakeMatchCallHeader, 5, 15, FLAG_0x1A8, 0x4C, gEliteFourMatchCallDesc, NULL, sDrakeTextScripts);
+
+static const match_call_text_data_t sWallaceTextScripts[] = {
+ { gText_Wallace_Pokenav_2B3790, 0xFFFF, 0xFFFF },
+ { NULL, 0xFFFF, 0xFFFF }
+};
+
+MATCHCALLDEF(sWallaceMatchCallHeader, 5, 15, FLAG_0x1A9, 0x4D, gChampionMatchCallDesc, NULL, sWallaceTextScripts);
+
+static const match_call_t sMatchCallHeaders[] = {
+ {.type0 = &sMrStoneMatchCallHeader},
+ {.type3 = &sProfBirchMatchCallHeader},
+ {.type4 = &sBrendanMatchCallHeader},
+ {.type4 = &sMayMatchCallHeader},
+ {.type2 = &sWallyMatchCallHeader},
+ {.type5 = &sNormanMatchCallHeader},
+ {.type0 = &sMomMatchCallHeader},
+ {.type0 = &sStevenMatchCallHeader},
+ {.type0 = &sScottMatchCallHeader},
+ {.type5 = &sRoxanneMatchCallHeader},
+ {.type5 = &sBrawlyMatchCallHeader},
+ {.type5 = &sWattsonMatchCallHeader},
+ {.type5 = &sFlanneryMatchCallHeader},
+ {.type5 = &sWinonaMatchCallHeader},
+ {.type5 = &sTateLizaMatchCallHeader},
+ {.type5 = &sJuanMatchCallHeader},
+ {.type5 = &sSidneyMatchCallHeader},
+ {.type5 = &sPhoebeMatchCallHeader},
+ {.type5 = &sGlaciaMatchCallHeader},
+ {.type5 = &sDrakeMatchCallHeader},
+ {.type5 = &sWallaceMatchCallHeader}
+};
+
+static bool32 (*const sMatchCallGetFlagFuncs[])(match_call_t) = {
+ MatchCallGetFlag_Type0,
+ MatchCallGetFlag_Type1,
+ MatchCallGetFlag_Type2,
+ MatchCallGetFlag_Type3,
+ MatchCallGetFlag_Type4
+};
+
+static u8 (*const gUnknown_08625310[])(match_call_t) = {
+ sub_81D1714,
+ sub_81D1718,
+ sub_81D171C,
+ sub_81D1750,
+ sub_81D1754
+};
+
+static bool32 (*const sMatchCall_IsRematchableFunctions[])(match_call_t) = {
+ MatchCall_IsRematchable_Type0,
+ MatchCall_IsRematchable_Type1,
+ MatchCall_IsRematchable_Type2,
+ MatchCall_IsRematchable_Type3,
+ MatchCall_IsRematchable_Type4
+};
+
+static bool32 (*const gUnknown_08625338[])(match_call_t) = {
+ sub_81D1840,
+ sub_81D1844,
+ sub_81D1848,
+ sub_81D184C,
+ sub_81D1850
+};
+
+static u32 (*const sMatchCall_GetRematchTableIdxFunctions[])(match_call_t) = {
+ MatchCall_GetRematchTableIdx_Type0,
+ MatchCall_GetRematchTableIdx_Type1,
+ MatchCall_GetRematchTableIdx_Type2,
+ MatchCall_GetRematchTableIdx_Type3,
+ MatchCall_GetRematchTableIdx_Type4
+};
+
+static void (*const sMatchCall_GetMessageFunctions[])(match_call_t, u8 *) = {
+ MatchCall_GetMessage_Type0,
+ MatchCall_GetMessage_Type1,
+ MatchCall_GetMessage_Type2,
+ MatchCall_GetMessage_Type3,
+ MatchCall_GetMessage_Type4
+};
+
+static void (*const sMatchCall_GetNameAndDescFunctions[])(match_call_t, const u8 **, const u8 **) = {
+ MatchCall_GetNameAndDesc_Type0,
+ MatchCall_GetNameAndDesc_Type1,
+ MatchCall_GetNameAndDesc_Type2,
+ MatchCall_GetNameAndDesc_Type3,
+ MatchCall_GetNameAndDesc_Type4
+};
+
+static const struct UnkStruct_08625388 sMatchCallCheckPageOverrides[] = {
+ { 7, 0x4B, 0xffff, { gMatchCallStevenStrategyText, gMatchCall_StevenTrainersPokemonText, gMatchCall_StevenSelfIntroductionText_Line1_BeforeMeteorFallsBattle, gMatchCall_StevenSelfIntroductionText_Line2_BeforeMeteorFallsBattle } }, // STEVEN
+ { 7, 0x4B, FLAG_0x4F6, { gMatchCallStevenStrategyText, gMatchCall_StevenTrainersPokemonText, gMatchCall_StevenSelfIntroductionText_Line1_AfterMeteorFallsBattle, gMatchCall_StevenSelfIntroductionText_Line2_AfterMeteorFallsBattle } }, // STEVEN
+ { 2, 0x3c, 0xffff, { gMatchCall_BrendanStrategyText, gMatchCall_BrendanTrainersPokemonText, gMatchCall_BrendanSelfIntroductionText_Line1, gMatchCall_BrendanSelfIntroductionText_Line2 } }, // Brendan
+ { 3, 0x3f, 0xffff, { gMatchCall_MayStrategyText, gMatchCall_MayTrainersPokemonText, gMatchCall_MaySelfIntroductionText_Line1, gMatchCall_MaySelfIntroductionText_Line2 } } // May
+};
+
+// .text
+
+static u32 MatchCallGetFunctionIndex(match_call_t matchCall)
+{
+ switch (matchCall.common->type)
+ {
+ case 0:
+ default:
+ return 0;
+ case 1:
+ case 5:
+ return 1;
+ case 2:
+ return 2;
+ case 4:
+ return 3;
+ case 3:
+ return 4;
+ }
+}
+
+u32 GetTrainerIdxByRematchIdx(u32 rematchIdx)
+{
+ return gRematchTable[rematchIdx].trainerIds[0];
+}
+
+s32 GetRematchIdxByTrainerIdx(s32 trainerIdx)
+{
+ s32 rematchIdx;
+
+ for (rematchIdx = 0; rematchIdx < REMATCH_TABLE_ENTRIES; rematchIdx++)
+ {
+ if (gRematchTable[rematchIdx].trainerIds[0] == trainerIdx)
+ return rematchIdx;
+ }
+ return -1;
+}
+
+bool32 MatchCallFlagGetByIndex(u32 idx)
+{
+ match_call_t matchCall;
+ u32 i;
+
+ if (idx > 20)
+ return FALSE;
+ matchCall = sMatchCallHeaders[idx];
+ i = MatchCallGetFunctionIndex(matchCall);
+ return sMatchCallGetFlagFuncs[i](matchCall);
+}
+
+static bool32 MatchCallGetFlag_Type0(match_call_t matchCall)
+{
+ if (matchCall.type0->flag == 0xffff)
+ return TRUE;
+ return FlagGet(matchCall.type0->flag);
+}
+
+static bool32 MatchCallGetFlag_Type1(match_call_t matchCall)
+{
+ if (matchCall.type1->flag == 0xffff)
+ return TRUE;
+ return FlagGet(matchCall.type1->flag);
+}
+
+static bool32 MatchCallGetFlag_Type2(match_call_t matchCall)
+{
+ if (matchCall.type2->flag == 0xffff)
+ return TRUE;
+ return FlagGet(matchCall.type2->flag);
+}
+
+static bool32 MatchCallGetFlag_Type3(match_call_t matchCall)
+{
+ if (matchCall.type4->gender != gSaveBlock2Ptr->playerGender)
+ return FALSE;
+ if (matchCall.type4->flag == 0xffff)
+ return TRUE;
+ return FlagGet(matchCall.type4->flag);
+}
+
+static bool32 MatchCallGetFlag_Type4(match_call_t matchCall)
+{
+ return FlagGet(matchCall.type3->flag);
+}
+
+u8 sub_81D16DC(u32 idx)
+{
+ match_call_t matchCall;
+ u32 i;
+
+ if (idx > 20)
+ return 0;
+ matchCall = sMatchCallHeaders[idx];
+ i = MatchCallGetFunctionIndex(matchCall);
+ return gUnknown_08625310[i](matchCall);
+}
+
+static u8 sub_81D1714(match_call_t matchCall)
+{
+ return matchCall.type0->v1;
+}
+
+static u8 sub_81D1718(match_call_t matchCall)
+{
+ return matchCall.type1->v1;
+}
+
+static u8 sub_81D171C(match_call_t matchCall)
+{
+ s32 i;
+
+ for (i = 0; matchCall.type2->v10[i].flag != 0xffff; i++)
+ {
+ if (!FlagGet(matchCall.type2->v10[i].flag))
+ break;
+ }
+ return matchCall.type2->v10[i].v2;
+}
+
+static u8 sub_81D1750(match_call_t matchCall)
+{
+ return 0xd5;
+}
+
+static u8 sub_81D1754(match_call_t matchCall)
+{
+ return 0xd5;
+}
+
+bool32 MatchCall_IsRematchable(u32 idx)
+{
+ match_call_t matchCall;
+ u32 i;
+
+ if (idx > 20)
+ return 0;
+ matchCall = sMatchCallHeaders[idx];
+ i = MatchCallGetFunctionIndex(matchCall);
+ return sMatchCall_IsRematchableFunctions[i](matchCall);
+}
+
+static bool32 MatchCall_IsRematchable_Type0(match_call_t matchCall)
+{
+ return FALSE;
+}
+
+static bool32 MatchCall_IsRematchable_Type1(match_call_t matchCall)
+{
+ if (matchCall.type1->rematchTableIdx >= REMATCH_ELITE_FOUR_ENTRIES)
+ return FALSE;
+ return gSaveBlock1Ptr->trainerRematches[matchCall.type1->rematchTableIdx] ? TRUE : FALSE;
+}
+
+static bool32 MatchCall_IsRematchable_Type2(match_call_t matchCall)
+{
+ return gSaveBlock1Ptr->trainerRematches[matchCall.type2->rematchTableIdx] ? TRUE : FALSE;
+}
+
+static bool32 MatchCall_IsRematchable_Type3(match_call_t matchCall)
+{
+ return FALSE;
+}
+
+static bool32 MatchCall_IsRematchable_Type4(match_call_t matchCall)
+{
+ return FALSE;
+}
+
+bool32 sub_81D17E8(u32 idx)
+{
+ match_call_t matchCall;
+ u32 i;
+
+ if (idx > 20)
+ return FALSE;
+ matchCall = sMatchCallHeaders[idx];
+ i = MatchCallGetFunctionIndex(matchCall);
+ if (gUnknown_08625338[i](matchCall))
+ return TRUE;
+ for (i = 0; i < 4; i++)
+ {
+ if (sMatchCallCheckPageOverrides[i].idx == idx)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static bool32 sub_81D1840(match_call_t matchCall)
+{
+ return FALSE;
+}
+
+static bool32 sub_81D1844(match_call_t matchCall)
+{
+ return TRUE;
+}
+
+static bool32 sub_81D1848(match_call_t matchCall)
+{
+ return TRUE;
+}
+
+static bool32 sub_81D184C(match_call_t matchCall)
+{
+ return FALSE;
+}
+
+static bool32 sub_81D1850(match_call_t matchCall)
+{
+ return FALSE;
+}
+
+u32 MatchCall_GetRematchTableIdx(u32 idx)
+{
+ match_call_t matchCall;
+ u32 i;
+
+ if (idx > 20)
+ return REMATCH_TABLE_ENTRIES;
+ matchCall = sMatchCallHeaders[idx];
+ i = MatchCallGetFunctionIndex(matchCall);
+ return sMatchCall_GetRematchTableIdxFunctions[i](matchCall);
+}
+
+static u32 MatchCall_GetRematchTableIdx_Type0(match_call_t matchCall)
+{
+ return REMATCH_TABLE_ENTRIES;
+}
+
+static u32 MatchCall_GetRematchTableIdx_Type1(match_call_t matchCall)
+{
+ return matchCall.type1->rematchTableIdx;
+}
+
+static u32 MatchCall_GetRematchTableIdx_Type2(match_call_t matchCall)
+{
+ return matchCall.type2->rematchTableIdx;
+}
+
+static u32 MatchCall_GetRematchTableIdx_Type3(match_call_t matchCall)
+{
+ return REMATCH_TABLE_ENTRIES;
+}
+
+static u32 MatchCall_GetRematchTableIdx_Type4(match_call_t matchCall)
+{
+ return REMATCH_TABLE_ENTRIES;
+}
+
+void MatchCall_GetMessage(u32 idx, u8 *dest)
+{
+ match_call_t matchCall;
+ u32 i;
+
+ if (idx > 20)
+ return;
+ matchCall = sMatchCallHeaders[idx];
+ i = MatchCallGetFunctionIndex(matchCall);
+ sMatchCall_GetMessageFunctions[i](matchCall, dest);
+}
+
+static void MatchCall_GetMessage_Type0(match_call_t matchCall, u8 *dest)
+{
+ sub_81D1920(matchCall.type0->textData, dest);
+}
+
+static void MatchCall_GetMessage_Type1(match_call_t matchCall, u8 *dest)
+{
+ if (matchCall.common->type != 5)
+ sub_81D1920(matchCall.type5->textData, dest);
+ else
+ sub_81D199C(matchCall.type1->textData, matchCall.type1->rematchTableIdx, dest);
+}
+
+static void MatchCall_GetMessage_Type2(match_call_t matchCall, u8 *dest)
+{
+ sub_81D1920(matchCall.type2->textData, dest);
+}
+
+static void MatchCall_GetMessage_Type3(match_call_t matchCall, u8 *dest)
+{
+ sub_81D1920(matchCall.type4->textData, dest);
+}
+
+static void MatchCall_GetMessage_Type4(match_call_t matchCall, u8 *dest)
+{
+ sub_8197080(dest);
+}
+
+void sub_81D1920(const match_call_text_data_t *sub0, u8 *dest)
+{
+ u32 i;
+ for (i = 0; sub0[i].text != NULL; i++)
+ ;
+ if (i)
+ i--;
+ while (i)
+ {
+ if (sub0[i].flag != 0xffff && FlagGet(sub0[i].flag) == TRUE)
+ break;
+ i--;
+ }
+ if (sub0[i].flag2 != 0xffff)
+ FlagSet(sub0[i].flag2);
+ StringExpandPlaceholders(dest, sub0[i].text);
+}
+
+#ifdef NONMATCHING
+// There's some weird upmerge going on that I cannot replicate at this time.
+static void sub_81D199C(const match_call_text_data_t *sub0, u16 idx, u8 *dest)
+{
+ u32 i;
+ for (i = 0; sub0[i].text != NULL; i++)
+ {
+ if (sub0[i].flag == 0xfffe)
+ break;
+ if (sub0[i].flag == 0xffff && !FlagGet(sub0[i].flag))
+ break;
+ }
+ if (sub0[i].flag != 0xfffe)
+ {
+ if (i)
+ i--;
+ if (sub0[i].flag2 != 0xffff)
+ FlagSet(sub0[i].flag2);
+ StringExpandPlaceholders(dest, sub0[i].text);
+ }
+ else
+ {
+ if (!FlagGet(FLAG_SYS_GAME_CLEAR))
+ ;
+ else if (gSaveBlock1Ptr->trainerRematches[idx])
+ i += 2;
+ else if (CountBattledRematchTeams(idx) >= 2)
+ i += 3;
+ else
+ i++;
+ StringExpandPlaceholders(dest, sub0[i].text);
+ }
+}
+#else
+static NAKED void sub_81D199C(const match_call_text_data_t *sub0, u16 idx, u8 *dest)
+{
+ asm_unified("\tpush {r4-r7,lr}\n"
+ "\tmov r7, r10\n"
+ "\tmov r6, r9\n"
+ "\tmov r5, r8\n"
+ "\tpush {r5-r7}\n"
+ "\tadds r6, r0, 0\n"
+ "\tmov r10, r2\n"
+ "\tlsls r1, 16\n"
+ "\tlsrs r7, r1, 16\n"
+ "\tmovs r5, 0\n"
+ "\tldr r0, [r6]\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _081D19E6\n"
+ "\tldrh r0, [r6, 0x4]\n"
+ "\tldr r1, =0x0000fffe\n"
+ "\tcmp r0, r1\n"
+ "\tbeq _081D1A24\n"
+ "\tldr r0, =0x0000ffff\n"
+ "\tmov r9, r0\n"
+ "\tmov r8, r1\n"
+ "\tadds r4, r6, 0\n"
+ "_081D19C6:\n"
+ "\tldrh r0, [r4, 0x4]\n"
+ "\tcmp r0, r9\n"
+ "\tbeq _081D19D6\n"
+ "\tbl FlagGet\n"
+ "\tlsls r0, 24\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _081D19E6\n"
+ "_081D19D6:\n"
+ "\tadds r4, 0x8\n"
+ "\tadds r5, 0x1\n"
+ "\tldr r0, [r4]\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _081D19E6\n"
+ "\tldrh r0, [r4, 0x4]\n"
+ "\tcmp r0, r8\n"
+ "\tbne _081D19C6\n"
+ "_081D19E6:\n"
+ "\tlsls r0, r5, 3\n"
+ "\tadds r0, r6\n"
+ "\tldrh r1, [r0, 0x4]\n"
+ "\tldr r0, =0x0000fffe\n"
+ "\tcmp r1, r0\n"
+ "\tbeq _081D1A24\n"
+ "\tcmp r5, 0\n"
+ "\tbeq _081D19F8\n"
+ "\tsubs r5, 0x1\n"
+ "_081D19F8:\n"
+ "\tlsls r0, r5, 3\n"
+ "\tadds r4, r0, r6\n"
+ "\tldrh r1, [r4, 0x6]\n"
+ "\tldr r0, =0x0000ffff\n"
+ "\tcmp r1, r0\n"
+ "\tbeq _081D1A0A\n"
+ "\tadds r0, r1, 0\n"
+ "\tbl FlagSet\n"
+ "_081D1A0A:\n"
+ "\tldr r1, [r4]\n"
+ "\tmov r0, r10\n"
+ "\tbl StringExpandPlaceholders\n"
+ "\tb _081D1A5C\n"
+ "\t.pool\n"
+ "_081D1A1C:\n"
+ "\tadds r5, 0x2\n"
+ "\tb _081D1A50\n"
+ "_081D1A20:\n"
+ "\tadds r5, 0x3\n"
+ "\tb _081D1A50\n"
+ "_081D1A24:\n"
+ "\tldr r0, =0x00000864\n"
+ "\tbl FlagGet\n"
+ "\tlsls r0, 24\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _081D1A50\n"
+ "\tldr r0, =gSaveBlock1Ptr\n"
+ "\tldr r0, [r0]\n"
+ "\tldr r1, =0x000009ca\n"
+ "\tadds r0, r1\n"
+ "\tadds r0, r7\n"
+ "\tldrb r0, [r0]\n"
+ "\tcmp r0, 0\n"
+ "\tbne _081D1A1C\n"
+ "\tadds r0, r7, 0\n"
+ "\tbl CountBattledRematchTeams\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r0, 16\n"
+ "\tcmp r0, 0x1\n"
+ "\tbhi _081D1A20\n"
+ "\tadds r5, 0x1\n"
+ "_081D1A50:\n"
+ "\tlsls r0, r5, 3\n"
+ "\tadds r0, r6\n"
+ "\tldr r1, [r0]\n"
+ "\tmov r0, r10\n"
+ "\tbl StringExpandPlaceholders\n"
+ "_081D1A5C:\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_81D1A78(u32 idx, const u8 **desc, const u8 **name)
+{
+ match_call_t matchCall;
+ u32 i;
+
+ if (idx > 20)
+ return;
+ matchCall = sMatchCallHeaders[idx];
+ i = MatchCallGetFunctionIndex(matchCall);
+ sMatchCall_GetNameAndDescFunctions[i](matchCall, desc, name);
+}
+
+static void MatchCall_GetNameAndDesc_Type0(match_call_t matchCall, const u8 **desc, const u8 **name)
+{
+ *desc = matchCall.type0->desc;
+ *name = matchCall.type0->name;
+}
+
+static void MatchCall_GetNameAndDesc_Type1(match_call_t matchCall, const u8 **desc, const u8 **name)
+{
+ match_call_t _matchCall = matchCall;
+ if (_matchCall.type1->name == NULL)
+ MatchCall_GetNameAndDescByRematchIdx(_matchCall.type1->rematchTableIdx, desc, name);
+ else
+ *name = _matchCall.type1->name;
+ *desc = _matchCall.type1->desc;
+}
+
+static void MatchCall_GetNameAndDesc_Type2(match_call_t matchCall, const u8 **desc, const u8 **name)
+{
+ MatchCall_GetNameAndDescByRematchIdx(matchCall.type2->rematchTableIdx, desc, name);
+ *desc = matchCall.type2->desc;
+}
+
+static void MatchCall_GetNameAndDesc_Type3(match_call_t matchCall, const u8 **desc, const u8 **name)
+{
+ *desc = matchCall.type4->desc;
+ *name = matchCall.type4->name;
+}
+
+static void MatchCall_GetNameAndDesc_Type4(match_call_t matchCall, const u8 **desc, const u8 **name)
+{
+ *desc = matchCall.type3->desc;
+ *name = matchCall.type3->name;
+}
+
+static void MatchCall_GetNameAndDescByRematchIdx(u32 idx, const u8 **desc, const u8 **name)
+{
+ const struct Trainer *trainer = gTrainers + GetTrainerIdxByRematchIdx(idx);
+ *desc = gTrainerClassNames[trainer->trainerClass];
+ *name = trainer->trainerName;
+}
+
+#ifdef NONMATCHING
+const u8 *sub_81D1B40(u32 idx, u32 offset)
+{
+ u32 i;
+
+ for (i = 0; i < 4; i++)
+ {
+ if (sMatchCallCheckPageOverrides[i].idx == idx)
+ {
+ for (; i + 1 < 4 && sMatchCallCheckPageOverrides[i + 1].idx == idx; i++)
+ {
+ if (!FlagGet(sMatchCallCheckPageOverrides[i + 1].v4))
+ break;
+ }
+ return sMatchCallCheckPageOverrides[i].v8[offset];
+ }
+ }
+ return NULL;
+}
+#else
+NAKED const u8 *sub_81D1B40(u32 idx, u32 offset)
+{
+ asm_unified("\tpush {r4-r7,lr}\n"
+ "\tmov r7, r9\n"
+ "\tmov r6, r8\n"
+ "\tpush {r6,r7}\n"
+ "\tadds r6, r0, 0\n"
+ "\tmovs r5, 0\n"
+ "\tldr r2, =sMatchCallCheckPageOverrides\n"
+ "\tmovs r0, 0x8\n"
+ "\tadds r0, r2\n"
+ "\tmov r9, r0\n"
+ "_081D1B54:\n"
+ "\tlsls r0, r5, 1\n"
+ "\tadds r0, r5\n"
+ "\tlsls r0, 3\n"
+ "\tadds r0, r2\n"
+ "\tldrh r0, [r0]\n"
+ "\tcmp r0, r6\n"
+ "\tbne _081D1BBC\n"
+ "\tadds r4, r5, 0x1\n"
+ "\tlsls r1, 2\n"
+ "\tmov r8, r1\n"
+ "\tcmp r4, 0x3\n"
+ "\tbhi _081D1BA8\n"
+ "\tlsls r0, r4, 1\n"
+ "\tadds r0, r4\n"
+ "\tlsls r0, 3\n"
+ "\tadds r0, r2\n"
+ "\tldrh r0, [r0]\n"
+ "\tcmp r0, r6\n"
+ "\tbne _081D1BA8\n"
+ "\tldr r7, =sMatchCallCheckPageOverrides\n"
+ "_081D1B7C:\n"
+ "\tlsls r0, r4, 1\n"
+ "\tadds r0, r4\n"
+ "\tlsls r0, 3\n"
+ "\tadds r1, r7, 0x4\n"
+ "\tadds r0, r1\n"
+ "\tldrh r0, [r0]\n"
+ "\tbl FlagGet\n"
+ "\tlsls r0, 24\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _081D1BA8\n"
+ "\tadds r5, r4, 0\n"
+ "\tadds r4, r5, 0x1\n"
+ "\tcmp r4, 0x3\n"
+ "\tbhi _081D1BA8\n"
+ "\tlsls r0, r4, 1\n"
+ "\tadds r0, r4\n"
+ "\tlsls r0, 3\n"
+ "\tadds r0, r7\n"
+ "\tldrh r0, [r0]\n"
+ "\tcmp r0, r6\n"
+ "\tbeq _081D1B7C\n"
+ "_081D1BA8:\n"
+ "\tlsls r0, r5, 1\n"
+ "\tadds r0, r5\n"
+ "\tlsls r0, 3\n"
+ "\tadd r0, r8\n"
+ "\tadd r0, r9\n"
+ "\tldr r0, [r0]\n"
+ "\tb _081D1BC4\n"
+ "\t.pool\n"
+ "_081D1BBC:\n"
+ "\tadds r5, 0x1\n"
+ "\tcmp r5, 0x3\n"
+ "\tbls _081D1B54\n"
+ "\tmovs r0, 0\n"
+ "_081D1BC4:\n"
+ "\tpop {r3,r4}\n"
+ "\tmov r8, r3\n"
+ "\tmov r9, r4\n"
+ "\tpop {r4-r7}\n"
+ "\tpop {r1}\n"
+ "\tbx r1");
+}
+#endif
+
+s32 sub_81D1BD0(u32 idx)
+{
+ u32 i;
+
+ for (i = 0; i < 4; i++)
+ {
+ if (sMatchCallCheckPageOverrides[i].idx == idx)
+ return sMatchCallCheckPageOverrides[i].v2;
+ }
+ return -1;
+}
+
+bool32 sub_81D1BF8(u32 idx)
+{
+ s32 i;
+
+ for (i = 0; i < 21; i++)
+ {
+ u32 r0 = MatchCall_GetRematchTableIdx(i);
+ if (r0 != REMATCH_TABLE_ENTRIES && r0 == idx)
+ return TRUE;
+ }
+ return FALSE;
+}
+
+void SetMatchCallRegisteredFlag(void)
+{
+ s32 r0 = GetRematchIdxByTrainerIdx(gSpecialVar_0x8004);
+ if (r0 >= 0)
+ FlagSet(FLAG_MATCH_CALL_REGISTERED + r0);
+}
diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c
new file mode 100644
index 000000000..5c8be1581
--- /dev/null
+++ b/src/mauville_old_man.c
@@ -0,0 +1,1247 @@
+#include "global.h"
+#include "main.h"
+#include "constants/songs.h"
+#include "constants/easy_chat.h"
+#include "constants/map_objects.h"
+#include "constants/vars.h"
+#include "mauville_old_man.h"
+#include "event_data.h"
+#include "string_util.h"
+#include "text.h"
+#include "easy_chat.h"
+#include "script.h"
+#include "random.h"
+#include "event_scripts.h"
+#include "task.h"
+#include "menu.h"
+#include "m4a.h"
+#include "bard_music.h"
+#include "sound.h"
+#include "strings.h"
+#include "overworld.h"
+#include "field_message_box.h"
+#include "script_menu.h"
+#include "trader.h"
+
+#define CHAR_SONG_WORD_SEPARATOR 0x37
+
+extern struct MusicPlayerInfo gMPlayInfo_SE2;
+
+static void InitGiddyTaleList(void);
+static void StartBardSong(bool8 useTemporaryLyrics);
+static void Task_BardSong(u8 taskId);
+static void StorytellerSetup(void);
+static void Storyteller_ResetFlag(void);
+
+IWRAM_DATA u8 sSelectedStory;
+
+struct BardSong gBardSong;
+
+static EWRAM_DATA u16 sUnknownBardRelated = 0;
+static EWRAM_DATA struct MauvilleManStoryteller * sStorytellerPtr = NULL;
+static EWRAM_DATA u8 sStorytellerWindowId = 0;
+
+static const u16 sDefaultBardSongLyrics[6] = {
+ EC_WORD_SHAKE,
+ EC_WORD_IT,
+ EC_WORD_DO,
+ EC_WORD_THE,
+ EC_WORD_DIET,
+ EC_WORD_DANCE
+};
+
+static const u8 * const sGiddyAdjectives[] = {
+ gText_SoPretty,
+ gText_SoDarling,
+ gText_SoRelaxed,
+ gText_SoSunny,
+ gText_SoDesirable,
+ gText_SoExciting,
+ gText_SoAmusing,
+ gText_SoMagical
+};
+
+static const u8 * const sGiddyQuestions[] = {
+ gUnknown_08294313,
+ gUnknown_08294359,
+ gUnknown_08294398,
+ gUnknown_082943DA,
+ gUnknown_0829441C,
+ gUnknown_08294460,
+ gUnknown_082944A0,
+ gUnknown_082944D5
+};
+
+static void SetupBard(void)
+{
+ u16 i;
+ struct MauvilleManBard *bard = &gSaveBlock1Ptr->oldMan.bard;
+
+ bard->id = MAUVILLE_MAN_BARD;
+ bard->hasChangedSong = FALSE;
+ bard->language = gGameLanguage;
+ for (i = 0; i < 6; i++)
+ bard->songLyrics[i] = sDefaultBardSongLyrics[i];
+}
+
+static void SetupHipster(void)
+{
+ struct MauvilleManHipster *hipster = &gSaveBlock1Ptr->oldMan.hipster;
+
+ hipster->id = MAUVILLE_MAN_HIPSTER;
+ hipster->alreadySpoken = FALSE;
+ hipster->language = gGameLanguage;
+}
+
+static void SetupStoryteller(void)
+{
+ StorytellerSetup();
+}
+
+static void SetupGiddy(void)
+{
+ struct MauvilleManGiddy *giddy = &gSaveBlock1Ptr->oldMan.giddy;
+
+ giddy->id = MAUVILLE_MAN_GIDDY;
+ giddy->taleCounter = 0;
+ giddy->language = gGameLanguage;
+}
+
+static void SetupTrader(void)
+{
+ TraderSetup();
+}
+
+void SetMauvilleOldMan(void)
+{
+ u16 trainerId = (gSaveBlock2Ptr->playerTrainerId[1] << 8) | gSaveBlock2Ptr->playerTrainerId[0];
+
+
+ // Determine man based on the last digit of the player's trainer ID.
+ switch ((trainerId % 10) / 2)
+ {
+ case MAUVILLE_MAN_BARD:
+ SetupBard();
+ break;
+ case MAUVILLE_MAN_HIPSTER:
+ SetupHipster();
+ break;
+ case MAUVILLE_MAN_TRADER:
+ SetupTrader();
+ break;
+ case MAUVILLE_MAN_STORYTELLER:
+ SetupStoryteller();
+ break;
+ case MAUVILLE_MAN_GIDDY:
+ SetupGiddy();
+ break;
+ }
+ ScrSpecial_SetMauvilleOldManMapObjGfx();
+}
+
+u8 GetCurrentMauvilleOldMan(void)
+{
+ struct MauvilleManCommon *common = &gSaveBlock1Ptr->oldMan.common;
+
+ return common->id;
+}
+
+void ScrSpecial_GetCurrentMauvilleMan(void)
+{
+ gSpecialVar_Result = GetCurrentMauvilleOldMan();
+}
+
+void ScrSpecial_HasBardSongBeenChanged(void)
+{
+ u16 *scriptResult = &gSpecialVar_Result; // why??
+ struct MauvilleManBard *bard = &gSaveBlock1Ptr->oldMan.bard;
+
+ *scriptResult = bard->hasChangedSong;
+}
+
+void ScrSpecial_SaveBardSongLyrics(void)
+{
+ u16 i;
+ struct MauvilleManBard *bard = &gSaveBlock1Ptr->oldMan.bard;
+
+ StringCopy(bard->playerName, gSaveBlock2Ptr->playerName);
+
+ for (i = 0; i < 4; i++)
+ bard->playerTrainerId[i] = gSaveBlock2Ptr->playerTrainerId[i];
+
+ for (i = 0; i < 6; i++)
+ bard->songLyrics[i] = bard->temporaryLyrics[i];
+
+ bard->hasChangedSong = TRUE;
+}
+
+// Copies lyrics into gStringVar4
+static void PrepareSongText(void)
+{
+ struct MauvilleManBard *bard = &gSaveBlock1Ptr->oldMan.bard;
+ u16 * lyrics = gSpecialVar_0x8004 == 0 ? bard->songLyrics : bard->temporaryLyrics;
+ u8 * wordEnd = gStringVar4;
+ u8 * str = wordEnd;
+ u16 lineNum;
+
+ // Put three words on each line
+ for (lineNum = 0; lineNum < 2; lineNum++)
+ {
+ wordEnd = CopyEasyChatWord(wordEnd, *(lyrics++));
+ while (wordEnd != str)
+ {
+ if (*str == CHAR_SPACE)
+ *str = CHAR_SONG_WORD_SEPARATOR;
+ str++;
+ }
+
+ str++;
+ *(wordEnd++) = CHAR_SPACE;
+
+ wordEnd = CopyEasyChatWord(wordEnd, *(lyrics++));
+ while (wordEnd != str)
+ {
+ if (*str == CHAR_SPACE)
+ *str = CHAR_SONG_WORD_SEPARATOR;
+ str++;
+ }
+
+ str++;
+ *(wordEnd++) = CHAR_NEWLINE;
+
+ wordEnd = CopyEasyChatWord(wordEnd, *(lyrics++));
+ while (wordEnd != str)
+ {
+ if (*str == CHAR_SPACE)
+ *str = CHAR_SONG_WORD_SEPARATOR;
+ str++;
+ }
+
+ if (lineNum == 0)
+ {
+ *(wordEnd++) = EXT_CTRL_CODE_BEGIN;
+ *(wordEnd++) = 15;
+ }
+ }
+}
+
+void ScrSpecial_PlayBardSong(void)
+{
+ StartBardSong(gSpecialVar_0x8004);
+ ScriptContext1_Stop();
+}
+
+void ScrSpecial_GetHipsterSpokenFlag(void)
+{
+ u16 *scriptResult = &gSpecialVar_Result; // again??
+ struct MauvilleManHipster *hipster = &gSaveBlock1Ptr->oldMan.hipster;
+
+ *scriptResult = hipster->alreadySpoken;
+}
+
+void ScrSpecial_SetHipsterSpokenFlag(void)
+{
+ struct MauvilleManHipster *hipster = &gSaveBlock1Ptr->oldMan.hipster;
+
+ hipster->alreadySpoken = TRUE;
+}
+
+void ScrSpecial_HipsterTeachWord(void)
+{
+ u16 var = sub_811F01C();
+
+ if (var == 0xFFFF)
+ {
+ gSpecialVar_Result = FALSE;
+ }
+ else
+ {
+ CopyEasyChatWord(gStringVar1, var);
+ gSpecialVar_Result = TRUE;
+ }
+}
+
+void ScrSpecial_GiddyShouldTellAnotherTale(void)
+{
+ struct MauvilleManGiddy *giddy = &gSaveBlock1Ptr->oldMan.giddy;
+
+ if (giddy->taleCounter == 10)
+ {
+ gSpecialVar_Result = FALSE;
+ giddy->taleCounter = 0;
+ }
+ else
+ {
+ gSpecialVar_Result = TRUE;
+ }
+}
+
+void ScrSpecial_GenerateGiddyLine(void)
+{
+ struct MauvilleManGiddy *giddy = &gSaveBlock1Ptr->oldMan.giddy;
+
+ if (giddy->taleCounter == 0)
+ InitGiddyTaleList();
+
+ if (giddy->randomWords[giddy->taleCounter] != 0xFFFF) // is not the last element of the array?
+ {
+ u8 *stringPtr;
+ u32 adjective = Random();
+
+ adjective %= 8;
+ stringPtr = CopyEasyChatWord(gStringVar4, giddy->randomWords[giddy->taleCounter]);
+ stringPtr = StringCopy(stringPtr, gOtherText_Is);
+ stringPtr = StringCopy(stringPtr, sGiddyAdjectives[adjective]);
+ StringCopy(stringPtr, gOtherText_DontYouAgree);
+ }
+ else
+ {
+ StringCopy(gStringVar4, sGiddyQuestions[giddy->questionList[giddy->questionNum++]]);
+ }
+
+ if (!(Random() % 10))
+ giddy->taleCounter = 10;
+ else
+ giddy->taleCounter++;
+
+ gSpecialVar_Result = TRUE;
+}
+
+static void InitGiddyTaleList(void)
+{
+ struct MauvilleManGiddy *giddy = &gSaveBlock1Ptr->oldMan.giddy;
+ u16 arr[][2] = {
+ {EC_GROUP_POKEMON, 0},
+ {EC_GROUP_LIFESTYLE, 0},
+ {EC_GROUP_HOBBIES, 0},
+ {EC_GROUP_MOVE_1, 0},
+ {EC_GROUP_MOVE_2, 0},
+ {EC_GROUP_POKEMON_2, 0}
+ };
+ u16 i;
+ u16 r10;
+ u16 r7;
+ u16 r1;
+
+ for (i = 0; i < 8; i++)
+ giddy->questionList[i] = i;
+
+ for (i = 0; i < 8; i++)
+ {
+ r1 = Random() % (i + 1);
+ r7 = giddy->questionList[i];
+ giddy->questionList[i] = giddy->questionList[r1];
+ giddy->questionList[r1] = r7;
+ }
+
+ r10 = 0;
+ for (i = 0; i < 6; i++)
+ {
+ arr[i][1] = EasyChat_GetNumWordsInGroup(arr[i][0]);
+ r10 += arr[i][1];
+ }
+
+ giddy->questionNum = 0;
+ r7 = 0;
+ for (i = 0; i < 10; i++)
+ {
+ r1 = Random() % 10;
+ if (r1 < 3 && r7 < 8)
+ {
+ giddy->randomWords[i] = 0xFFFF;
+ r7++;
+ }
+ else
+ {
+ s16 r2 = Random() % r10;
+ for (r1 = 0; i < 6; r1++)
+ if ((r2 -= arr[r1][1]) <= 0)
+ break;
+ if (r1 == 6)
+ r1 = 0;
+ giddy->randomWords[i] = sub_811EE90(arr[r1][0]);
+ }
+ }
+}
+static void ResetBardFlag(void)
+{
+ struct MauvilleManBard *bard = &gSaveBlock1Ptr->oldMan.bard;
+
+ bard->hasChangedSong = FALSE;
+}
+
+static void ResetHipsterFlag(void)
+{
+ struct MauvilleManHipster *hipster = &gSaveBlock1Ptr->oldMan.hipster;
+
+ hipster->alreadySpoken = FALSE;
+}
+
+static void ResetTraderFlag(void)
+{
+ Trader_ResetFlag();
+}
+
+static void ResetStorytellerFlag(void)
+{
+ Storyteller_ResetFlag();
+}
+
+void ResetMauvilleOldManFlag(void)
+{
+ switch (GetCurrentMauvilleOldMan())
+ {
+ case MAUVILLE_MAN_BARD:
+ ResetBardFlag();
+ break;
+ case MAUVILLE_MAN_HIPSTER:
+ ResetHipsterFlag();
+ break;
+ case MAUVILLE_MAN_STORYTELLER:
+ ResetStorytellerFlag();
+ break;
+ case MAUVILLE_MAN_TRADER:
+ ResetTraderFlag();
+ break;
+ case MAUVILLE_MAN_GIDDY:
+ break;
+ }
+ ScrSpecial_SetMauvilleOldManMapObjGfx();
+}
+
+
+#define tState data[0]
+#define tCharIndex data[3]
+#define tCurrWord data[4]
+#define tUseTemporaryLyrics data[5]
+
+#define MACRO1(a) (((a) & 3) + (((a) / 8) & 1))
+#define MACRO2(a) (((a) % 4) + (((a) / 8) & 1))
+
+static void StartBardSong(bool8 useTemporaryLyrics)
+{
+ u8 taskId = CreateTask(Task_BardSong, 80);
+
+ gTasks[taskId].tUseTemporaryLyrics = useTemporaryLyrics;
+}
+
+static void sub_81206F0(void)
+{
+ gUnknown_03002F84 = FALSE;
+}
+
+static void BardSong_TextSubPrinter(struct TextSubPrinter * printer, u16 a1)
+{
+ gUnknown_03002F84 = TRUE;
+}
+
+static void sub_8120708(const u8 * src)
+{
+ NewMenuHelpers_DrawDialogueFrame(0, 0);
+ PrintTextOnWindow(0, 1, src, 0, 1, 1, BardSong_TextSubPrinter);
+ gUnknown_03002F84 = TRUE;
+ CopyWindowToVram(0, 3);
+}
+
+static void BardSing(struct Task *task, struct BardSong *song)
+{
+ switch (task->tState)
+ {
+ case 0: // Initialize song
+ {
+ struct MauvilleManBard *bard = &gSaveBlock1Ptr->oldMan.bard;
+ u16 *lyrics;
+ s32 i;
+
+ // Copy lyrics
+ if (gSpecialVar_0x8004 == 0)
+ lyrics = bard->songLyrics;
+ else
+ lyrics = bard->temporaryLyrics;
+ for (i = 0; i < 6; i++)
+ song->lyrics[i] = lyrics[i];
+ song->currWord = 0;
+ }
+ break;
+ case 1: // Wait for BGM to end
+ break;
+ case 2: // Initialize word
+ {
+ u16 word = song->lyrics[song->currWord];
+ song->sound = GetWordSounds(word);
+ GetWordPhonemes(song, MACRO1(word));
+ song->currWord++;
+ if (song->sound->var00 != 0xFF)
+ song->state = 0;
+ else
+ {
+ song->state = 3;
+ song->phonemeTimer = 2;
+ }
+ break;
+ }
+ case 3:
+ case 4:
+ {
+ const struct BardSound *sound = &song->sound[song->currPhoneme];
+
+ switch (song->state)
+ {
+ case 0:
+ song->phonemeTimer = song->phonemes[song->currPhoneme].length;
+ if (sound->var00 <= 50)
+ {
+ u8 num = sound->var00 / 3;
+ m4aSongNumStart(PH_TRAP_HELD + 3 * num);
+ }
+ song->state = 2;
+ song->phonemeTimer--;
+ break;
+ case 2:
+ song->state = 1;
+ if (sound->var00 <= 50)
+ {
+ song->volume = 0x100 + sound->volume * 16;
+ m4aMPlayVolumeControl(&gMPlayInfo_SE2, 0xFFFF, song->volume);
+ song->pitch = 0x200 + song->phonemes[song->currPhoneme].pitch;
+ m4aMPlayPitchControl(&gMPlayInfo_SE2, 0xFFFF, song->pitch);
+ }
+ break;
+ case 1:
+ if (song->voiceInflection > 10)
+ song->volume -= 2;
+ if (song->voiceInflection & 1)
+ song->pitch += 64;
+ else
+ song->pitch -= 64;
+ m4aMPlayVolumeControl(&gMPlayInfo_SE2, 0xFFFF, song->volume);
+ m4aMPlayPitchControl(&gMPlayInfo_SE2, 0xFFFF, song->pitch);
+ song->voiceInflection++;
+ song->phonemeTimer--;
+ if (song->phonemeTimer == 0)
+ {
+ song->currPhoneme++;
+ if (song->currPhoneme != 6 && song->sound[song->currPhoneme].var00 != 0xFF)
+ song->state = 0;
+ else
+ {
+ song->state = 3;
+ song->phonemeTimer = 2;
+ }
+ }
+ break;
+ case 3:
+ song->phonemeTimer--;
+ if (song->phonemeTimer == 0)
+ {
+ m4aMPlayStop(&gMPlayInfo_SE2);
+ song->state = 4;
+ }
+ break;
+ }
+ }
+ break;
+ case 5:
+ break;
+ }
+}
+
+static void Task_BardSong(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId]; // r5
+
+ BardSing(task, &gBardSong);
+ switch (task->tState)
+ {
+ case 0: // Initialize song
+ PrepareSongText();
+ sub_8120708(gStringVar4);
+ task->data[1] = 0;
+ task->data[2] = 0;
+ task->tCharIndex = 0;
+ task->tCurrWord = 0;
+ FadeOutBGMTemporarily(4);
+ task->tState = 1;
+ break;
+ case 1: // Wait for BGM to end
+ if (IsBGMPausedOrStopped())
+ task->tState = 2;
+ break;
+ case 2: // Initialize word
+ {
+ struct MauvilleManBard *bard = &gSaveBlock1Ptr->oldMan.bard;
+ u8 *str = gStringVar4 + task->tCharIndex;
+ u16 wordLen = 0;
+ // Can't get it to match without hacking
+ u32 temp;
+ register s16 zero asm("r1");
+
+ while (*str != CHAR_SPACE
+ && *str != CHAR_NEWLINE
+ && *str != EXT_CTRL_CODE_BEGIN
+ && *str != EOS)
+ {
+ str++;
+ wordLen++;
+ }
+ if (!task->tUseTemporaryLyrics)
+ sUnknownBardRelated = MACRO2(bard->songLyrics[task->tCurrWord]);
+ else
+ sUnknownBardRelated = MACRO2(bard->temporaryLyrics[task->tCurrWord]);
+ temp = gBardSong.length / wordLen;
+ zero = 0;
+ gBardSong.length = temp;
+ if (gBardSong.length <= 0)
+ gBardSong.length = 1;
+ task->tCurrWord++;
+ if (task->data[2] == 0)
+ task->tState = 3;
+ else
+ task->tState = 5;
+ task->data[1] = zero;
+ }
+ break;
+ case 5:
+ if (task->data[2] == 0)
+ task->tState = 3;
+ else
+ task->data[2]--;
+ break;
+ case 3:
+ if (gStringVar4[task->tCharIndex] == EOS)
+ {
+ FadeInBGM(6);
+ m4aMPlayFadeOutTemporarily(&gMPlayInfo_SE2, 2);
+ EnableBothScriptContexts();
+ DestroyTask(taskId);
+ }
+ else if (gStringVar4[task->tCharIndex] == CHAR_SPACE)
+ {
+
+ sub_81206F0();
+ task->tCharIndex++;
+ task->tState = 2;
+ task->data[2] = 0;
+ }
+ else if (gStringVar4[task->tCharIndex] == CHAR_NEWLINE)
+ {
+ task->tCharIndex++;
+ task->tState = 2;
+ task->data[2] = 0;
+ }
+ else if (gStringVar4[task->tCharIndex] == EXT_CTRL_CODE_BEGIN)
+ {
+ task->tCharIndex += 2; // skip over control codes
+ task->tState = 2;
+ task->data[2] = 8;
+ }
+ else if (gStringVar4[task->tCharIndex] == CHAR_SONG_WORD_SEPARATOR)
+ {
+ gStringVar4[task->tCharIndex] = CHAR_SPACE; // restore it back to a space
+ sub_81206F0();
+ task->tCharIndex++;
+ task->data[2] = 0;
+ }
+ else
+ {
+ switch (task->data[1])
+ {
+ case 0:
+ sub_81206F0();
+ task->data[1]++;
+ break;
+ case 1:
+ task->data[1]++;
+ break;
+ case 2:
+ task->tCharIndex++;
+ task->data[1] = 0;
+ task->data[2] = gBardSong.length;
+ task->tState = 4;
+ break;
+ }
+ }
+ break;
+ case 4:
+ task->data[2]--;
+ if (task->data[2] == 0)
+ task->tState = 3;
+ break;
+ }
+ sub_8197224();
+}
+
+void ScrSpecial_SetMauvilleOldManMapObjGfx(void)
+{
+ VarSet(VAR_0x4010, MAP_OBJ_GFX_BARD);
+}
+
+// Language fixers?
+
+void sub_8120B70(union OldMan * oldMan)
+{
+ s32 i;
+ u8 sp00[8];
+
+ switch (oldMan->common.id)
+ {
+ case MAUVILLE_MAN_TRADER:
+ {
+ struct MauvilleOldManTrader * trader = &oldMan->trader;
+ for (i = 0; i < 4; i++)
+ {
+ if (trader->language[i] == LANGUAGE_JAPANESE)
+ {
+ ConvertInternationalString(trader->playerNames[i], LANGUAGE_JAPANESE);
+ }
+ }
+ }
+ break;
+ case MAUVILLE_MAN_STORYTELLER:
+ {
+ struct MauvilleManStoryteller * storyteller = &oldMan->storyteller;
+ for (i = 0; i < 4; i++)
+ {
+ if (storyteller->gameStatIDs[i] != 0)
+ {
+ memcpy(sp00, storyteller->trainerNames[i], 7);
+ sp00[7] = EOS;
+ if (IsStringJapanese(sp00))
+ {
+ memset(sp00, CHAR_SPACE, 8);
+ StringCopy(sp00, gText_Friend);
+ memcpy(storyteller->trainerNames[i], sp00, 7);
+ storyteller->language[i] = GAME_LANGUAGE;
+ }
+ }
+ }
+ }
+ break;
+ }
+}
+
+void sub_8120C0C(union OldMan * oldMan, u32 r8, u32 r7, u32 r3)
+{
+ s32 i;
+
+ switch (oldMan->common.id)
+ {
+ case MAUVILLE_MAN_TRADER:
+ {
+ struct MauvilleOldManTrader * trader = &oldMan->trader;
+
+ for (i = 0; i < 4; i++)
+ {
+ if (IsStringJapanese(trader->playerNames[i]))
+ {
+ trader->language[i] = r8;
+ }
+ else
+ {
+ trader->language[i] = r7;
+ }
+ }
+ }
+ break;
+ case MAUVILLE_MAN_STORYTELLER:
+ {
+ struct MauvilleManStoryteller * storyteller = &oldMan->storyteller;
+
+ for (i = 0; i < 4; i++)
+ {
+ if (IsStringJapanese(storyteller->trainerNames[i]))
+ {
+ storyteller->language[i] = r8;
+ }
+ else
+ {
+ storyteller->language[i] = r7;
+ }
+ }
+ }
+ break;
+ case MAUVILLE_MAN_BARD:
+ {
+ struct MauvilleManBard * bard = &oldMan->bard;
+
+ if (r3 == LANGUAGE_JAPANESE)
+ bard->language = r8;
+ else
+ bard->language = r7;
+ }
+ break;
+ case MAUVILLE_MAN_HIPSTER:
+ {
+ struct MauvilleManHipster * hipster = &oldMan->hipster;
+
+ if (r3 == LANGUAGE_JAPANESE)
+ hipster->language = r8;
+ else
+ hipster->language = r7;
+ }
+ break;
+ case MAUVILLE_MAN_GIDDY:
+ {
+ struct MauvilleManGiddy * giddy = &oldMan->giddy;
+
+ if (r3 == LANGUAGE_JAPANESE)
+ giddy->language = r8;
+ else
+ giddy->language = r7;
+ }
+ break;
+ }
+}
+
+void sub_8120CD0(union OldMan * oldMan, u32 unused, u32 a2)
+{
+ u8 sp00[8];
+ s32 i;
+ if (oldMan->common.id == MAUVILLE_MAN_STORYTELLER && a2 == LANGUAGE_JAPANESE)
+ {
+ struct MauvilleManStoryteller * storyteller = &oldMan->storyteller;
+
+ for (i = 0; i < 4; i++)
+ {
+ if (storyteller->gameStatIDs[i] != 0)
+ {
+ memcpy(sp00, storyteller->trainerNames[i], 7);
+ sp00[7] = EOS;
+ if (IsStringJapanese(sp00))
+ storyteller->language[i] = LANGUAGE_JAPANESE;
+ else
+ storyteller->language[i] = GAME_LANGUAGE;
+ }
+ }
+ }
+}
+
+void sub_8120D34(union OldMan * oldMan, u32 r1, u32 r6)
+{
+ u32 r2 = (r1 == LANGUAGE_JAPANESE || r1 == LANGUAGE_ENGLISH) ? 1 : 0;
+ switch (oldMan->common.id)
+ {
+ case MAUVILLE_MAN_TRADER:
+ {
+ struct MauvilleOldManTrader * trader = &oldMan->trader;
+ s32 i;
+
+ if (r2)
+ {
+ for (i = 0; i < 4; i++)
+ {
+ u8 * str = trader->playerNames[i];
+ if (str[0] == EXT_CTRL_CODE_BEGIN && str[1] == EXT_CTRL_CODE_JPN)
+ {
+ StripExtCtrlCodes(str);
+ trader->language[i] = LANGUAGE_JAPANESE;
+ }
+ else
+ trader->language[i] = r6;
+ }
+ }
+ else
+ {
+ for (i = 0; i < 4; i++)
+ {
+ if (trader->language[i] == LANGUAGE_JAPANESE)
+ {
+ StripExtCtrlCodes(trader->playerNames[i]);
+ }
+ }
+ }
+ }
+ break;
+ case MAUVILLE_MAN_STORYTELLER:
+ {
+
+ struct MauvilleManStoryteller * storyteller = &oldMan->storyteller;
+ s32 i;
+
+ if (r2)
+ {
+ for (i = 0; i < 4; i++)
+ {
+ if (storyteller->gameStatIDs[i] != 0)
+ storyteller->language[i] = r6;
+ }
+ }
+ }
+ break;
+ case MAUVILLE_MAN_BARD:
+ {
+ struct MauvilleManBard * bard = &oldMan->bard;
+
+ if (r2)
+ {
+ bard->language = r6;
+ }
+ }
+ break;
+ case MAUVILLE_MAN_HIPSTER:
+ {
+ struct MauvilleManHipster * hipster = &oldMan->hipster;
+
+ if (r2)
+ {
+ hipster->language = r6;
+ }
+ }
+ break;
+ case MAUVILLE_MAN_GIDDY:
+ {
+ struct MauvilleManGiddy * giddy = &oldMan->giddy;
+
+ if (r2)
+ {
+ giddy->language = r6;
+ }
+ }
+ break;
+ }
+}
+
+struct Story
+{
+ u8 stat;
+ u8 minVal;
+ const u8 *title;
+ const u8 *action;
+ const u8 *fullText;
+};
+
+static const struct Story sStorytellerStories[] = {
+ {GAME_STAT_50, 1, MauvilleCity_PokemonCenter_1F_Text_28E930, MauvilleCity_PokemonCenter_1F_Text_28E947, MauvilleCity_PokemonCenter_1F_Text_28E956},
+ {GAME_STAT_STARTED_TRENDS, 1, MauvilleCity_PokemonCenter_1F_Text_28E9D7, MauvilleCity_PokemonCenter_1F_Text_28E9EF, MauvilleCity_PokemonCenter_1F_Text_28E9FE},
+ {GAME_STAT_PLANTED_BERRIES, 1, MauvilleCity_PokemonCenter_1F_Text_28EA7D, MauvilleCity_PokemonCenter_1F_Text_28EA98, MauvilleCity_PokemonCenter_1F_Text_28EAA8},
+ {GAME_STAT_TRADED_BIKES, 1, MauvilleCity_PokemonCenter_1F_Text_28EB19, MauvilleCity_PokemonCenter_1F_Text_28EB31, MauvilleCity_PokemonCenter_1F_Text_28EB3E},
+ {GAME_STAT_GOT_INTERVIEWED, 1, MauvilleCity_PokemonCenter_1F_Text_28EBB5, MauvilleCity_PokemonCenter_1F_Text_28EBCD, MauvilleCity_PokemonCenter_1F_Text_28EBDD},
+ {GAME_STAT_TRAINER_BATTLES, 1, MauvilleCity_PokemonCenter_1F_Text_28EC60, MauvilleCity_PokemonCenter_1F_Text_28EC79, MauvilleCity_PokemonCenter_1F_Text_28EC81},
+ {GAME_STAT_POKEMON_CAPTURES, 1, MauvilleCity_PokemonCenter_1F_Text_28ED04, MauvilleCity_PokemonCenter_1F_Text_28ED21, MauvilleCity_PokemonCenter_1F_Text_28ED30},
+ {GAME_STAT_FISHING_CAPTURES, 1, MauvilleCity_PokemonCenter_1F_Text_28EDA1, MauvilleCity_PokemonCenter_1F_Text_28EDB5, MauvilleCity_PokemonCenter_1F_Text_28EDCF},
+ {GAME_STAT_HATCHED_EGGS, 1, MauvilleCity_PokemonCenter_1F_Text_28EE45, MauvilleCity_PokemonCenter_1F_Text_28EE5D, MauvilleCity_PokemonCenter_1F_Text_28EE6A},
+ {GAME_STAT_EVOLVED_POKEMON, 1, MauvilleCity_PokemonCenter_1F_Text_28EEDD, MauvilleCity_PokemonCenter_1F_Text_28EEF1, MauvilleCity_PokemonCenter_1F_Text_28EF01},
+ {GAME_STAT_USED_POKECENTER, 1, MauvilleCity_PokemonCenter_1F_Text_28EF73, MauvilleCity_PokemonCenter_1F_Text_28EF95, MauvilleCity_PokemonCenter_1F_Text_28EFAA},
+ {GAME_STAT_RESTED_AT_HOME, 1, MauvilleCity_PokemonCenter_1F_Text_28F045, MauvilleCity_PokemonCenter_1F_Text_28F05A, MauvilleCity_PokemonCenter_1F_Text_28F071},
+ {GAME_STAT_ENTERED_SAFARI_ZONE, 1, MauvilleCity_PokemonCenter_1F_Text_28F0F3, MauvilleCity_PokemonCenter_1F_Text_28F10D, MauvilleCity_PokemonCenter_1F_Text_28F125},
+ {GAME_STAT_USED_CUT, 1, MauvilleCity_PokemonCenter_1F_Text_28F1BE, MauvilleCity_PokemonCenter_1F_Text_28F1D5, MauvilleCity_PokemonCenter_1F_Text_28F1DE},
+ {GAME_STAT_USED_ROCK_SMASH, 1, MauvilleCity_PokemonCenter_1F_Text_28F24F, MauvilleCity_PokemonCenter_1F_Text_28F269, MauvilleCity_PokemonCenter_1F_Text_28F277},
+ {GAME_STAT_MOVED_SECRET_BASE, 1, MauvilleCity_PokemonCenter_1F_Text_28F2FC, MauvilleCity_PokemonCenter_1F_Text_28F314, MauvilleCity_PokemonCenter_1F_Text_28F32A},
+ {GAME_STAT_USED_SPLASH, 1, MauvilleCity_PokemonCenter_1F_Text_28F3AD, MauvilleCity_PokemonCenter_1F_Text_28F3C6, MauvilleCity_PokemonCenter_1F_Text_28F3D2},
+ {GAME_STAT_USED_STRUGGLE, 1, MauvilleCity_PokemonCenter_1F_Text_28F44B, MauvilleCity_PokemonCenter_1F_Text_28F461, MauvilleCity_PokemonCenter_1F_Text_28F47C},
+ {GAME_STAT_SLOT_JACKPOTS, 1, MauvilleCity_PokemonCenter_1F_Text_28F50C, MauvilleCity_PokemonCenter_1F_Text_28F51B, MauvilleCity_PokemonCenter_1F_Text_28F538},
+ {GAME_STAT_CONSECUTIVE_ROULETTE_WINS, 2, MauvilleCity_PokemonCenter_1F_Text_28F5BE, MauvilleCity_PokemonCenter_1F_Text_28F5D1, MauvilleCity_PokemonCenter_1F_Text_28F5F2},
+ {GAME_STAT_ENTERED_BATTLE_TOWER, 1, MauvilleCity_PokemonCenter_1F_Text_28F678, MauvilleCity_PokemonCenter_1F_Text_28F694, MauvilleCity_PokemonCenter_1F_Text_28F6B4},
+ {GAME_STAT_POKEBLOCKS, 1, MauvilleCity_PokemonCenter_1F_Text_28F751, MauvilleCity_PokemonCenter_1F_Text_28F76A, MauvilleCity_PokemonCenter_1F_Text_28F776},
+ {GAME_STAT_ENTERED_CONTEST, 1, MauvilleCity_PokemonCenter_1F_Text_28F7F6, MauvilleCity_PokemonCenter_1F_Text_28F811, MauvilleCity_PokemonCenter_1F_Text_28F822},
+ {GAME_STAT_WON_CONTEST, 1, MauvilleCity_PokemonCenter_1F_Text_28F89C, MauvilleCity_PokemonCenter_1F_Text_28F8AF, MauvilleCity_PokemonCenter_1F_Text_28F8BC},
+ {GAME_STAT_SHOPPED, 1, MauvilleCity_PokemonCenter_1F_Text_28F92F, MauvilleCity_PokemonCenter_1F_Text_28F941, MauvilleCity_PokemonCenter_1F_Text_28F949},
+ {GAME_STAT_USED_ITEMFINDER, 1, MauvilleCity_PokemonCenter_1F_Text_28F9D1, MauvilleCity_PokemonCenter_1F_Text_28F9EA, MauvilleCity_PokemonCenter_1F_Text_28F9FD},
+ {GAME_STAT_GOT_RAINED_ON, 1, MauvilleCity_PokemonCenter_1F_Text_28FA81, MauvilleCity_PokemonCenter_1F_Text_28FA99, MauvilleCity_PokemonCenter_1F_Text_28FAA7},
+ {GAME_STAT_CHECKED_POKEDEX, 1, MauvilleCity_PokemonCenter_1F_Text_28FB1D, MauvilleCity_PokemonCenter_1F_Text_28FB35, MauvilleCity_PokemonCenter_1F_Text_28FB47},
+ {GAME_STAT_RECEIVED_RIBBONS, 1, MauvilleCity_PokemonCenter_1F_Text_28FBC4, MauvilleCity_PokemonCenter_1F_Text_28FBD9, MauvilleCity_PokemonCenter_1F_Text_28FBEA},
+ {GAME_STAT_JUMPED_DOWN_LEDGES, 1, MauvilleCity_PokemonCenter_1F_Text_28FC6B, MauvilleCity_PokemonCenter_1F_Text_28FC85, MauvilleCity_PokemonCenter_1F_Text_28FC98},
+ {GAME_STAT_WATCHED_TV, 1, MauvilleCity_PokemonCenter_1F_Text_28FD1D, MauvilleCity_PokemonCenter_1F_Text_28FD35, MauvilleCity_PokemonCenter_1F_Text_28FD40},
+ {GAME_STAT_CHECKED_CLOCK, 1, MauvilleCity_PokemonCenter_1F_Text_28FDA2, MauvilleCity_PokemonCenter_1F_Text_28FDBD, MauvilleCity_PokemonCenter_1F_Text_28FDCE},
+ {GAME_STAT_WON_POKEMON_LOTTERY, 1, MauvilleCity_PokemonCenter_1F_Text_28FE57, MauvilleCity_PokemonCenter_1F_Text_28FE72, MauvilleCity_PokemonCenter_1F_Text_28FE88},
+ {GAME_STAT_USED_DAYCARE, 1, MauvilleCity_PokemonCenter_1F_Text_28FF0C, MauvilleCity_PokemonCenter_1F_Text_28FF27, MauvilleCity_PokemonCenter_1F_Text_28FF44},
+ {GAME_STAT_RODE_CABLE_CAR, 1, MauvilleCity_PokemonCenter_1F_Text_28FFDD, MauvilleCity_PokemonCenter_1F_Text_28FFFA, MauvilleCity_PokemonCenter_1F_Text_29000D},
+ {GAME_STAT_ENTERED_HOT_SPRINGS, 1, MauvilleCity_PokemonCenter_1F_Text_290097, MauvilleCity_PokemonCenter_1F_Text_2900B5, MauvilleCity_PokemonCenter_1F_Text_2900CB}
+};
+
+static void StorytellerSetup(void)
+{
+ s32 i;
+ sStorytellerPtr = &gSaveBlock1Ptr->oldMan.storyteller;
+
+ sStorytellerPtr->id = MAUVILLE_MAN_STORYTELLER;
+ sStorytellerPtr->alreadyRecorded = FALSE;
+ for (i = 0; i < 4; i++)
+ {
+ sStorytellerPtr->gameStatIDs[i] = 0;
+ sStorytellerPtr->trainerNames[0][i] = EOS; // Maybe they meant storyteller->trainerNames[i][0] instead?
+ }
+}
+
+static void Storyteller_ResetFlag(void)
+{
+ sStorytellerPtr = &gSaveBlock1Ptr->oldMan.storyteller;
+
+ sStorytellerPtr->id = MAUVILLE_MAN_STORYTELLER;
+ sStorytellerPtr->alreadyRecorded = FALSE;
+}
+
+static u32 StorytellerGetGameStat(u8 stat)
+{
+ if (stat == 50)
+ stat = 0;
+ return GetGameStat(stat);
+}
+
+static const struct Story *GetStoryByStat(u32 stat)
+{
+ s32 i;
+
+ for (i = 0; i < 36; i++)
+ {
+ if (sStorytellerStories[i].stat == stat)
+ return &sStorytellerStories[i];
+ }
+ return &sStorytellerStories[35];
+}
+
+static const u8 *GetStoryTitleByStat(u32 stat)
+{
+ return GetStoryByStat(stat)->title;
+}
+
+static const u8 *GetStoryTextByStat(u32 stat)
+{
+ return GetStoryByStat(stat)->fullText;
+}
+
+static const u8 *GetStoryActionByStat(u32 stat)
+{
+ return GetStoryByStat(stat)->action;
+}
+
+static u8 GetFreeStorySlot(void)
+{
+ u8 i;
+
+ for (i = 0; i < 4; i++)
+ {
+ if (sStorytellerPtr->gameStatIDs[i] == 0)
+ break;
+ }
+ return i;
+}
+
+static u32 StorytellerGetRecordedTrainerStat(u32 trainer)
+{
+ u8 *ptr = sStorytellerPtr->statValues[trainer];
+
+ return ptr[0] | (ptr[1] << 8) | (ptr[2] << 16) | (ptr[3] << 24);
+}
+
+static void StorytellerSetRecordedTrainerStat(u32 trainer, u32 val)
+{
+ u8 *ptr = sStorytellerPtr->statValues[trainer];
+
+ ptr[0] = val;
+ ptr[1] = val >> 8;
+ ptr[2] = val >> 16;
+ ptr[3] = val >> 24;
+}
+
+static bool32 HasTrainerStatIncreased(u32 trainer)
+{
+ if (StorytellerGetGameStat(sStorytellerPtr->gameStatIDs[trainer]) > StorytellerGetRecordedTrainerStat(trainer))
+ return TRUE;
+ else
+ return FALSE;
+}
+
+static void GetStoryByStattellerPlayerName(u32 player, void *dst)
+{
+ u8 *name = sStorytellerPtr->trainerNames[player];
+
+ memset(dst, EOS, 8);
+ memcpy(dst, name, 7);
+}
+
+static void StorytellerSetPlayerName(u32 player, const u8 * src)
+{
+ u8 * name = sStorytellerPtr->trainerNames[player];
+ memset(name, EOS, 7);
+ memcpy(name, src, 7);
+}
+
+
+static void StorytellerRecordNewStat(u32 player, u32 stat)
+{
+ sStorytellerPtr->gameStatIDs[player] = stat;
+ StorytellerSetPlayerName(player, gSaveBlock2Ptr->playerName);
+ StorytellerSetRecordedTrainerStat(player, StorytellerGetGameStat(stat));
+ ConvertIntToDecimalStringN(gStringVar1, StorytellerGetGameStat(stat), STR_CONV_MODE_LEFT_ALIGN, 10);
+ StringCopy(gStringVar2, GetStoryActionByStat(stat));
+ sStorytellerPtr->language[player] = gGameLanguage;
+}
+
+static void ScrambleStatList(u8 * arr, s32 count)
+{
+ s32 i;
+
+ for (i = 0; i < count; i++)
+ arr[i] = i;
+ for (i = 0; i < count; i++)
+ {
+ u32 a = Random() % count;
+ u32 b = Random() % count;
+ u8 temp = arr[a];
+ arr[a] = arr[b];
+ arr[b] = temp;
+ }
+}
+
+struct UnknownStruct_0859F288
+{
+ s32 length;
+ u32 unused2;
+};
+
+static const struct UnknownStruct_0859F288 sStorytellerStuff = {
+ ARRAY_COUNT(sStorytellerStories),
+ sizeof(sStorytellerStuff)
+};
+
+static bool8 StorytellerInitializeRandomStat(void)
+{
+ u8 arr[sStorytellerStuff.length];
+ s32 i;
+ s32 j;
+
+ ScrambleStatList(arr, ARRAY_COUNT(sStorytellerStories));
+ for (i = 0; i < (s32)ARRAY_COUNT(sStorytellerStories); i++)
+ {
+ u8 stat = sStorytellerStories[arr[i]].stat;
+ u8 minVal = sStorytellerStories[arr[i]].minVal;
+
+ for (j = 0; j < 4; j++)
+ {
+ if (sStorytellerPtr->gameStatIDs[j] == stat)
+ break;
+ }
+ if (j == 4 && StorytellerGetGameStat(stat) >= minVal)
+ {
+ sStorytellerPtr->alreadyRecorded = TRUE;
+ if (GetFreeStorySlot() == 4)
+ StorytellerRecordNewStat(sSelectedStory, stat);
+ else
+ StorytellerRecordNewStat(GetFreeStorySlot(), stat);
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+static void StorytellerDisplayStory(u32 player)
+{
+ u8 stat = sStorytellerPtr->gameStatIDs[player];
+
+ ConvertIntToDecimalStringN(gStringVar1, StorytellerGetRecordedTrainerStat(player), 0, 10);
+ StringCopy(gStringVar2, GetStoryActionByStat(stat));
+ GetStoryByStattellerPlayerName(player, gStringVar3);
+ ConvertInternationalString(gStringVar3, sStorytellerPtr->language[player]);
+ ShowFieldMessage(GetStoryTextByStat(stat));
+}
+
+static void PrintStoryList(void)
+{
+ s32 i;
+ s32 width = GetStringWidth(1, gText_Exit, 0);
+ u8 tileWidth;
+ for (i = 0; i < 4; i++)
+ {
+ s32 curWidth;
+ u16 gameStatID = sStorytellerPtr->gameStatIDs[i];
+
+ if (gameStatID == 0)
+ break;
+ curWidth = GetStringWidth(1, GetStoryTitleByStat(gameStatID), 0);
+ if (curWidth > width)
+ width = curWidth;
+ }
+ sStorytellerWindowId = CreateWindowFromRect(0, 0, convert_pixel_width_to_tile_width(width), GetFreeStorySlot() * 2 + 2);
+ SetStandardWindowBorderStyle(sStorytellerWindowId, 0);
+ for (i = 0; i < 4; i++)
+ {
+ u16 gameStatID = sStorytellerPtr->gameStatIDs[i];
+ if (gameStatID == 0)
+ break;
+ PrintTextOnWindow(sStorytellerWindowId, 1, GetStoryTitleByStat(gameStatID), 8, 16 * i + 1, 0xFF, NULL);
+ }
+ PrintTextOnWindow(sStorytellerWindowId, 1, gText_Exit, 8, 16 * i + 1, 0xFF, NULL);
+ InitMenuInUpperLeftCornerPlaySoundWhenAPressed(sStorytellerWindowId, GetFreeStorySlot() + 1, 0);
+ CopyWindowToVram(sStorytellerWindowId, 3);
+}
+
+static void Task_StoryListMenu(u8 taskId) // Task_StoryListMenu
+{
+ struct Task *task = &gTasks[taskId];
+ s32 selection;
+
+ switch (task->data[0])
+ {
+ case 0:
+ PrintStoryList();
+ task->data[0]++;
+ break;
+ case 1:
+ selection = ProcessMenuInput();
+ if (selection == -2)
+ break;
+ if (selection == -1 || selection == GetFreeStorySlot())
+ {
+ gSpecialVar_Result = 0;
+ }
+ else
+ {
+ gSpecialVar_Result = 1;
+ sSelectedStory = selection;
+ }
+ sub_80E2A78(sStorytellerWindowId);
+ DestroyTask(taskId);
+ EnableBothScriptContexts();
+ break;
+ }
+}
+
+// Sets gSpecialVar_Result to TRUE if player selected a story
+void ScrSpecial_StorytellerStoryListMenu(void)
+{
+ CreateTask(Task_StoryListMenu, 80);
+}
+
+void ScrSpecial_StorytellerDisplayStory(void)
+{
+ StorytellerDisplayStory(sSelectedStory);
+}
+
+u8 ScrSpecial_StorytellerGetFreeStorySlot(void)
+{
+ sStorytellerPtr = &gSaveBlock1Ptr->oldMan.storyteller;
+ return GetFreeStorySlot();
+}
+
+// Returns TRUE if stat has increased
+bool8 ScrSpecial_StorytellerUpdateStat(void)
+{
+ u8 r4;
+ sStorytellerPtr = &gSaveBlock1Ptr->oldMan.storyteller;
+ r4 = sStorytellerPtr->gameStatIDs[sSelectedStory];
+
+ if (HasTrainerStatIncreased(sSelectedStory) == TRUE)
+ {
+ StorytellerRecordNewStat(sSelectedStory, r4);
+ return TRUE;
+ }
+ return FALSE;
+}
+
+bool8 ScrSpecial_HasStorytellerAlreadyRecorded(void)
+{
+ sStorytellerPtr = &gSaveBlock1Ptr->oldMan.storyteller;
+
+ if (sStorytellerPtr->alreadyRecorded == FALSE)
+ return FALSE;
+ else
+ return TRUE;
+}
+
+bool8 ScrSpecial_StorytellerInitializeRandomStat(void)
+{
+ sStorytellerPtr = &gSaveBlock1Ptr->oldMan.storyteller;
+ return StorytellerInitializeRandomStat();
+}
+
diff --git a/src/menu.c b/src/menu.c
index d06f950d3..dedfcc3be 100644
--- a/src/menu.c
+++ b/src/menu.c
@@ -25,11 +25,11 @@
#define STD_WINDOW_PALETTE_NUM 14
#define STD_WINDOW_BASE_TILE_NUM 0x214
-struct SomeUnkStruct_60F0D4
+struct MoveMenuInfoIcon
{
- u8 unk1;
- u8 unk2;
- u16 unk3;
+ u8 width;
+ u8 height;
+ u16 offset;
};
struct Menu
@@ -48,7 +48,7 @@ struct Menu
bool8 APressMuted;
};
-static EWRAM_DATA u8 gUnknown_0203CD8C = 0;
+static EWRAM_DATA u8 gStartMenuWindowId = 0;
static EWRAM_DATA u8 gUnknown_0203CD8D = 0;
static EWRAM_DATA struct Menu gUnknown_0203CD90 = {0};
static EWRAM_DATA u16 gUnknown_0203CD9C = 0;
@@ -63,7 +63,7 @@ static EWRAM_DATA void *gUnknown_0203CDAC[0x20] = {NULL};
const u16 gUnknown_0860F074[] = INCBIN_U16("graphics/interface/860F074.gbapal");
static const u8 gUnknown_0860F094[] = { 8, 4, 1 };
-static const struct WindowTemplate gUnknown_0860F098[] =
+static const struct WindowTemplate gUnknown_0860F098[] =
{
{ 0x00, 0x02, 0x0F, 0x1B, 0x04, 0x0F, 0x194 },
DUMMY_WIN_TEMPLATE
@@ -76,34 +76,36 @@ static const struct WindowTemplate gUnknown_0860F0A8 =
const u16 gUnknown_0860F0B0[] = INCBIN_U16("graphics/interface/860F0B0.gbapal");
const u8 gUnknown_0860F0D0[] = { 15, 1, 2 };
-const struct SomeUnkStruct_60F0D4 gUnknown_0860F0D4[] =
-{
- { 12, 12, 0x00 },
- { 32, 12, 0x20 },
- { 32, 12, 0x64 },
- { 32, 12, 0x60 },
- { 32, 12, 0x80 },
- { 32, 12, 0x48 },
- { 32, 12, 0x44 },
- { 32, 12, 0x6C },
- { 32, 12, 0x68 },
- { 32, 12, 0x88 },
- { 32, 12, 0xA4 },
- { 32, 12, 0x24 },
- { 32, 12, 0x28 },
- { 32, 12, 0x2C },
- { 32, 12, 0x40 },
- { 32, 12, 0x84 },
- { 32, 12, 0x4C },
- { 32, 12, 0xA0 },
- { 32, 12, 0x8C },
- { 42, 12, 0xA8 },
- { 42, 12, 0xC0 },
- { 42, 12, 0xC8 },
- { 42, 12, 0xE0 },
- { 42, 12, 0xE8 },
- { 8, 8, 0xAE },
- { 8, 8, 0xAF },
+
+// Table of move info icon offsets in graphics/interface_fr/menu.png
+const struct MoveMenuInfoIcon gMoveMenuInfoIcons[] =
+{ // { width, height, offset }
+ { 12, 12, 0x00 }, // Unused
+ { 32, 12, 0x20 }, // Normal icon
+ { 32, 12, 0x64 }, // Fight icon
+ { 32, 12, 0x60 }, // Flying icon
+ { 32, 12, 0x80 }, // Poison icon
+ { 32, 12, 0x48 }, // Ground icon
+ { 32, 12, 0x44 }, // Rock icon
+ { 32, 12, 0x6C }, // Bug icon
+ { 32, 12, 0x68 }, // Ghost icon
+ { 32, 12, 0x88 }, // Steel icon
+ { 32, 12, 0xA4 }, // ??? (Mystery) icon
+ { 32, 12, 0x24 }, // Fire icon
+ { 32, 12, 0x28 }, // Water icon
+ { 32, 12, 0x2C }, // Grass icon
+ { 32, 12, 0x40 }, // Electric icon
+ { 32, 12, 0x84 }, // Psychic icon
+ { 32, 12, 0x4C }, // Ice icon
+ { 32, 12, 0xA0 }, // Dragon icon
+ { 32, 12, 0x8C }, // Dark icon
+ { 42, 12, 0xA8 }, // -Type- icon
+ { 42, 12, 0xC0 }, // -Power- icon
+ { 42, 12, 0xC8 }, // -Accuracy- icon
+ { 42, 12, 0xE0 }, // -PP- icon
+ { 42, 12, 0xE8 }, // -Effect- icon
+ { 8, 8, 0xAE }, // Unused (Small white pokeball)
+ { 8, 8, 0xAF }, // Unused (Small dark pokeball)
};
// Forward declarations
@@ -125,7 +127,7 @@ extern void task_free_buf_after_copying_tile_data_to_vram(u8 taskId);
void sub_81971D0(void)
{
InitWindows(gUnknown_0860F098);
- gUnknown_0203CD8C = 0xFF;
+ gStartMenuWindowId = 0xFF;
gUnknown_0203CD8D = 0xFF;
}
@@ -151,7 +153,7 @@ u16 sub_8197224(void)
u16 AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 *str, u8 speed, void (*callback)(struct TextSubPrinter *, u16), u8 fgColor, u8 bgColor, u8 shadowColor)
{
struct TextSubPrinter printer;
-
+
printer.current_text_offset = str;
printer.windowId = windowId;
printer.fontId = fontId;
@@ -165,9 +167,9 @@ u16 AddTextPrinterParameterized(u8 windowId, u8 fontId, const u8 *str, u8 speed,
printer.fgColor = fgColor;
printer.bgColor = bgColor;
printer.shadowColor = shadowColor;
-
+
gTextFlags.flag_1 = 0;
- return AddTextPrinter(&printer, speed, callback);
+ return AddTextPrinter(&printer, speed, callback);
}
void AddTextPrinterForMessage(bool8 allowSkippingDelayWithButtonPress)
@@ -234,7 +236,7 @@ void sub_819746C(u8 windowId, bool8 copyToVram)
void DrawStandardFrame(u8 bg, u8 tilemapLeft, u8 tilemapTop, u8 width, u8 height, u8 paletteNum)
{
int i;
-
+
FillBgTilemapBufferRect(bg,
STD_WINDOW_BASE_TILE_NUM + 0,
tilemapLeft - 1,
@@ -256,7 +258,7 @@ void DrawStandardFrame(u8 bg, u8 tilemapLeft, u8 tilemapTop, u8 width, u8 height
1,
1,
STD_WINDOW_PALETTE_NUM);
-
+
for (i = tilemapTop; i < tilemapTop + height; i++)
{
FillBgTilemapBufferRect(bg,
@@ -274,7 +276,7 @@ void DrawStandardFrame(u8 bg, u8 tilemapLeft, u8 tilemapTop, u8 width, u8 height
1,
STD_WINDOW_PALETTE_NUM);
}
-
+
FillBgTilemapBufferRect(bg,
STD_WINDOW_BASE_TILE_NUM + 6,
tilemapLeft - 1,
@@ -471,22 +473,22 @@ u8 GetPlayerTextSpeed(void)
u8 sub_81979C4(u8 a1)
{
- if (gUnknown_0203CD8C == 0xFF)
- gUnknown_0203CD8C = sub_8198AA4(0, 0x16, 1, 7, (a1 * 2) + 2, 0xF, 0x139);
- return gUnknown_0203CD8C;
+ if (gStartMenuWindowId == 0xFF)
+ gStartMenuWindowId = sub_8198AA4(0, 0x16, 1, 7, (a1 * 2) + 2, 0xF, 0x139);
+ return gStartMenuWindowId;
}
u8 GetStartMenuWindowId(void)
{
- return gUnknown_0203CD8C;
+ return gStartMenuWindowId;
}
-void remove_start_menu_window_maybe(void)
+void RemoveStartMenuWindow(void)
{
- if (gUnknown_0203CD8C != 0xFF)
+ if (gStartMenuWindowId != 0xFF)
{
- RemoveWindow(gUnknown_0203CD8C);
- gUnknown_0203CD8C = 0xFF;
+ RemoveWindow(gStartMenuWindowId);
+ gStartMenuWindowId = 0xFF;
}
}
@@ -1941,7 +1943,7 @@ void box_print(u8 windowId, u8 fontId, u8 left, u8 top, const u8 *color, s8 spee
printer.fgColor = color[1];
printer.bgColor = color[0];
printer.shadowColor = color[2];
-
+
AddTextPrinter(&printer, speed, NULL);
}
@@ -1962,7 +1964,7 @@ void AddTextPrinterParameterized2(u8 windowId, u8 fontId, u8 left, u8 top, u8 le
printer.fgColor = color[1];
printer.bgColor = color[0];
printer.shadowColor = color[2];
-
+
AddTextPrinter(&printer, speed, NULL);
}
@@ -1988,7 +1990,7 @@ void sub_8199F74(u8 windowId, u8 fontId, const u8 *str, u8 left, u8 top, u8 spee
AddTextPrinter(&printer, speed, callback);
}
-void sub_819A024(u8 windowId, const u8 *src, u16 a2, u16 a3)
+void PrintPlayerNameOnWindow(u8 windowId, const u8 *src, u16 x, u16 y)
{
int count = 0;
while (gSaveBlock2Ptr->playerName[count] != EOS)
@@ -1996,7 +1998,7 @@ void sub_819A024(u8 windowId, const u8 *src, u16 a2, u16 a3)
StringExpandPlaceholders(gStringVar4, src);
- PrintTextOnWindow(windowId, 1, gStringVar4, a2, a3, 0xFF, 0);
+ PrintTextOnWindow(windowId, 1, gStringVar4, x, y, 0xFF, 0);
}
//Screw this function, it's long and unreferenced and ugh
@@ -2078,7 +2080,7 @@ void sub_819A080(struct UnkStruct_819A080 *a0, struct UnkStruct_819A080 *a1, u16
}
}
#else
-__attribute__((naked))
+NAKED
void sub_819A080(struct UnkStruct_819A080 *a0, struct UnkStruct_819A080 *a1, u16 a2, u16 a3, u16 a4, u16 a5, u16 a6, u16 a7)
{
asm("push {r4-r7,lr}\n\
@@ -2364,23 +2366,23 @@ void sub_819A2BC(u8 palOffset, u8 palId)
void blit_move_info_icon(u8 windowId, u8 iconId, u16 x, u16 y)
{
- BlitBitmapRectToWindow(windowId, gFireRedMenuElements_Gfx + gUnknown_0860F0D4[iconId].unk3 * 32, 0, 0, 128, 128, x, y, gUnknown_0860F0D4[iconId].unk1, gUnknown_0860F0D4[iconId].unk2);
+ BlitBitmapRectToWindow(windowId, gFireRedMenuElements_Gfx + gMoveMenuInfoIcons[iconId].offset * 32, 0, 0, 128, 128, x, y, gMoveMenuInfoIcons[iconId].width, gMoveMenuInfoIcons[iconId].height);
}
-void sub_819A344(u8 a0, u8 *a1, u8 a2)
+void sub_819A344(u8 a0, u8 *dest, u8 color)
{
s32 curFlag;
s32 flagCount;
u8 *endOfString;
- u8 *string = a1;
-
+ u8 *string = dest;
+
*(string++) = EXT_CTRL_CODE_BEGIN;
*(string++) = EXT_CTRL_CODE_COLOR;
- *(string++) = a2;
+ *(string++) = color;
*(string++) = EXT_CTRL_CODE_BEGIN;
*(string++) = EXT_CTRL_CODE_SHADOW;
- *(string++) = a2 + 1;
-
+ *(string++) = color + 1;
+
switch (a0)
{
case 0:
@@ -2388,9 +2390,9 @@ void sub_819A344(u8 a0, u8 *a1, u8 a2)
break;
case 1:
if (IsNationalPokedexEnabled())
- string = ConvertIntToDecimalStringN(string, pokedex_count(1), 0, 3);
+ string = ConvertIntToDecimalStringN(string, GetNationalPokedexCount(1), 0, 3);
else
- string = ConvertIntToDecimalStringN(string, sub_80C0844(1), 0, 3);
+ string = ConvertIntToDecimalStringN(string, GetHoennPokedexCount(1), 0, 3);
*string = EOS;
break;
case 2:
diff --git a/src/menu_helpers.c b/src/menu_helpers.c
new file mode 100644
index 000000000..178fbb5fa
--- /dev/null
+++ b/src/menu_helpers.c
@@ -0,0 +1,455 @@
+#include "global.h"
+#include "task.h"
+#include "window.h"
+#include "menu.h"
+#include "menu_helpers.h"
+#include "gpu_regs.h"
+#include "bg.h"
+#include "main.h"
+#include "text.h"
+#include "link.h"
+#include "string_util.h"
+#include "sound.h"
+#include "mail.h"
+#include "overworld.h"
+#include "decompress.h"
+#include "constants/songs.h"
+#include "constants/items.h"
+#include "constants/maps.h"
+
+extern bool32 sub_800B504(void);
+
+extern const u8 gBagSwapLineGfx[];
+extern const u8 gBagSwapLinePal[];
+
+// this file's functions
+static void Task_ContinueTaskAfterMessagePrints(u8 taskId);
+static void Task_CallYesOrNoCallback(u8 taskId);
+
+// EWRAM vars
+EWRAM_DATA static struct YesNoFuncTable gUnknown_0203A138 = {0};
+EWRAM_DATA static u8 gUnknown_0203A140 = 0;
+
+// IWRAM bss vars
+IWRAM_DATA static TaskFunc gUnknown_0300117C;
+
+// const rom data
+static const struct OamData sOamData_859F4E8 =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 1,
+ .tileNum = 0,
+ .priority = 0,
+ .paletteNum = 0,
+ .affineParam = 0
+};
+
+static const union AnimCmd sSpriteAnim_859F4F0[] =
+{
+ ANIMCMD_FRAME(0, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_859F4F8[] =
+{
+ ANIMCMD_FRAME(4, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd sSpriteAnim_859F500[] =
+{
+ ANIMCMD_FRAME(0, 0, 1, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const sSpriteAnimTable_859F508[] =
+{
+ sSpriteAnim_859F4F0,
+ sSpriteAnim_859F4F8,
+ sSpriteAnim_859F500
+};
+
+static const struct CompressedSpriteSheet gUnknown_0859F514 =
+{
+ gBagSwapLineGfx, 0x100, 109
+};
+
+static const struct CompressedSpritePalette gUnknown_0859F51C =
+{
+ gBagSwapLinePal, 109
+};
+
+static const struct SpriteTemplate gUnknown_0859F524 =
+{
+ .tileTag = 109,
+ .paletteTag = 109,
+ .oam = &sOamData_859F4E8,
+ .anims = sSpriteAnimTable_859F508,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = SpriteCallbackDummy,
+};
+
+// code
+void ResetVramOamAndBgCntRegs(void)
+{
+ SetGpuReg(REG_OFFSET_DISPCNT, 0);
+ SetGpuReg(REG_OFFSET_BG3CNT, 0);
+ SetGpuReg(REG_OFFSET_BG2CNT, 0);
+ SetGpuReg(REG_OFFSET_BG1CNT, 0);
+ SetGpuReg(REG_OFFSET_BG0CNT, 0);
+ CpuFill16(0, (void*) VRAM, VRAM_SIZE);
+ CpuFill32(0, (void*) OAM, OAM_SIZE);
+ CpuFill16(0, (void*) PLTT, PLTT_SIZE);
+}
+
+void ResetAllBgsCoordinates(void)
+{
+ ChangeBgX(0, 0, 0);
+ ChangeBgY(0, 0, 0);
+ ChangeBgX(1, 0, 0);
+ ChangeBgY(1, 0, 0);
+ ChangeBgX(2, 0, 0);
+ ChangeBgY(2, 0, 0);
+ ChangeBgX(3, 0, 0);
+ ChangeBgY(3, 0, 0);
+}
+
+void SetVBlankHBlankCallbacksToNull(void)
+{
+ SetVBlankCallback(NULL);
+ SetHBlankCallback(NULL);
+}
+
+void DisplayMessageAndContinueTask(u8 taskId, u8 windowId, u16 arg2, u8 arg3, u8 fontId, u8 textSpeed, const u8 *string, void *taskFunc)
+{
+ gUnknown_0203A140 = windowId;
+ sub_8197B1C(windowId, TRUE, arg2, arg3);
+
+ if (string != gStringVar4)
+ StringExpandPlaceholders(gStringVar4, string);
+
+ gTextFlags.flag_0 = 1;
+ AddTextPrinterParameterized(windowId, fontId, gStringVar4, textSpeed, NULL, 2, 1, 3);
+ gUnknown_0300117C = taskFunc;
+ gTasks[taskId].func = Task_ContinueTaskAfterMessagePrints;
+}
+
+bool16 RunTextPrintersRetIsActive(u8 textPrinterId)
+{
+ RunTextPrinters();
+ return IsTextPrinterActive(textPrinterId);
+}
+
+static void Task_ContinueTaskAfterMessagePrints(u8 taskId)
+{
+ if (!RunTextPrintersRetIsActive(gUnknown_0203A140))
+ gUnknown_0300117C(taskId);
+}
+
+void sub_8121F68(u8 taskId, const struct YesNoFuncTable *data)
+{
+ gUnknown_0203A138 = *data;
+ gTasks[taskId].func = Task_CallYesOrNoCallback;
+}
+
+void CreateYesNoMenuWithCallbacks(u8 taskId, const struct WindowTemplate *template, u8 arg2, u8 arg3, u8 arg4, u16 tileStart, u8 palette, const struct YesNoFuncTable *yesNo)
+{
+ CreateYesNoMenu(template, tileStart, palette, 0);
+ gUnknown_0203A138 = *yesNo;
+ gTasks[taskId].func = Task_CallYesOrNoCallback;
+}
+
+static void Task_CallYesOrNoCallback(u8 taskId)
+{
+ switch (ProcessMenuInputNoWrap_())
+ {
+ case 0:
+ PlaySE(SE_SELECT);
+ gUnknown_0203A138.yesFunc(taskId);
+ break;
+ case 1:
+ case MENU_B_PRESSED:
+ PlaySE(SE_SELECT);
+ gUnknown_0203A138.noFunc(taskId);
+ break;
+ }
+}
+
+bool8 AdjustQuantityAccordingToDPadInput(s16 *arg0, u16 arg1)
+{
+ s16 valBefore = (*arg0);
+
+ if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_UP)
+ {
+ (*arg0)++;
+ if ((*arg0) > arg1)
+ (*arg0) = 1;
+
+ if ((*arg0) == valBefore)
+ {
+ return FALSE;
+ }
+ else
+ {
+ PlaySE(SE_SELECT);
+ return TRUE;
+ }
+ }
+ else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_DOWN)
+ {
+ (*arg0)--;
+ if ((*arg0) <= 0)
+ (*arg0) = arg1;
+
+ if ((*arg0) == valBefore)
+ {
+ return FALSE;
+ }
+ else
+ {
+ PlaySE(SE_SELECT);
+ return TRUE;
+ }
+ }
+ else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_RIGHT)
+ {
+ (*arg0) += 10;
+ if ((*arg0) > arg1)
+ (*arg0) = arg1;
+
+ if ((*arg0) == valBefore)
+ {
+ return FALSE;
+ }
+ else
+ {
+ PlaySE(SE_SELECT);
+ return TRUE;
+ }
+ }
+ else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_LEFT)
+ {
+ (*arg0) -= 10;
+ if ((*arg0) <= 0)
+ (*arg0) = 1;
+
+ if ((*arg0) == valBefore)
+ {
+ return FALSE;
+ }
+ else
+ {
+ PlaySE(SE_SELECT);
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+u8 GetLRKeysState(void)
+{
+ if (gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)
+ {
+ if (gMain.newKeys & L_BUTTON)
+ return 1;
+ if (gMain.newKeys & R_BUTTON)
+ return 2;
+ }
+
+ return 0;
+}
+
+u8 sub_812210C(void)
+{
+ if (gSaveBlock2Ptr->optionsButtonMode == OPTIONS_BUTTON_MODE_LR)
+ {
+ if (gMain.newAndRepeatedKeys & L_BUTTON)
+ return 1;
+ if (gMain.newAndRepeatedKeys & R_BUTTON)
+ return 2;
+ }
+
+ return 0;
+}
+
+bool8 sub_8122148(u16 itemId)
+{
+ if (itemId != ITEM_ENIGMA_BERRY)
+ return TRUE;
+ else if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(TRADE_CENTER) && gSaveBlock1Ptr->location.mapNum == MAP_NUM(TRADE_CENTER))
+ return FALSE;
+ else if (InUnionRoom() != TRUE)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+bool8 itemid_80BF6D8_mail_related(u16 itemId)
+{
+ if (is_c1_link_related_active() != TRUE && InUnionRoom() != TRUE)
+ return TRUE;
+ else if (ItemIsMail(itemId) != TRUE)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+bool8 sub_81221AC(void)
+{
+ if (is_c1_link_related_active() == TRUE || gReceivedRemoteLinkPlayers == 1)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+static bool8 sub_81221D0(void)
+{
+ if (!sub_81221AC())
+ return FALSE;
+ else
+ return sub_8087598();
+}
+
+bool8 sub_81221EC(void)
+{
+ if (sub_81221D0() == TRUE)
+ return TRUE;
+ else if (sub_800B504() != TRUE)
+ return FALSE;
+ else
+ return TRUE;
+}
+
+void sub_812220C(struct ItemSlot *slots, u8 count, u8 *arg2, u8 *usedSlotsCount, u8 maxUsedSlotsCount)
+{
+ u16 i;
+ struct ItemSlot *slots_ = slots;
+
+ (*usedSlotsCount) = 0;
+ for (i = 0; i < count; i++)
+ {
+ if (slots_[i].itemId != ITEM_NONE)
+ (*usedSlotsCount)++;
+ }
+
+ (*usedSlotsCount)++;
+ if ((*usedSlotsCount) > maxUsedSlotsCount)
+ *arg2 = maxUsedSlotsCount;
+ else
+ *arg2 = (*usedSlotsCount);
+}
+
+void sub_812225C(u16 *arg0, u16 *arg1, u8 arg2, u8 arg3)
+{
+ if ((*arg0) != 0 && (*arg0) + arg2 > arg3)
+ (*arg0) = arg3 - arg2;
+
+ if ((*arg0) + (*arg1) >= arg3)
+ {
+ if (arg3 == 0)
+ (*arg1) = 0;
+ else
+ (*arg1) = arg3 - 1;
+ }
+}
+
+void sub_8122298(u16 *arg0, u16 *arg1, u8 arg2, u8 arg3, u8 arg4)
+{
+ u8 i;
+
+ if (arg4 % 2 != 0)
+ {
+ if ((*arg1) >= arg4 / 2)
+ {
+ for (i = 0; i < (*arg1) - (arg4 / 2); i++)
+ {
+ if ((*arg0) + arg2 == arg3)
+ break;
+ (*arg1)--;
+ (*arg0)++;
+ }
+ }
+ }
+ else
+ {
+ if ((*arg1) >= (arg4 / 2) + 1)
+ {
+ for (i = 0; i <= (*arg1) - (arg4 / 2); i++)
+ {
+ if ((*arg0) + arg2 == arg3)
+ break;
+ (*arg1)--;
+ (*arg0)++;
+ }
+ }
+ }
+}
+
+void LoadListMenuArrowsGfx(void)
+{
+ LoadCompressedObjectPic(&gUnknown_0859F514);
+ LoadCompressedObjectPalette(&gUnknown_0859F51C);
+}
+
+void sub_8122344(u8 *spriteIds, u8 count)
+{
+ u8 i;
+
+ for (i = 0; i < count; i++)
+ {
+ spriteIds[i] = CreateSprite(&gUnknown_0859F524, i * 16, 0, 0);
+ if (i != 0)
+ StartSpriteAnim(&gSprites[spriteIds[i]], 1);
+
+ gSprites[spriteIds[i]].invisible = 1;
+ }
+}
+
+void sub_81223B0(u8 *spriteIds, u8 count)
+{
+ u8 i;
+
+ for (i = 0; i < count; i++)
+ {
+ if (i == count - 1)
+ DestroySpriteAndFreeResources(&gSprites[spriteIds[i]]);
+ else
+ DestroySprite(&gSprites[spriteIds[i]]);
+ }
+}
+
+void sub_81223FC(u8 *spriteIds, u8 count, bool8 invisible)
+{
+ u8 i;
+
+ for (i = 0; i < count; i++)
+ {
+ gSprites[spriteIds[i]].invisible = invisible;
+ }
+}
+
+void sub_8122448(u8 *spriteIds, u8 count, s16 x, u16 y)
+{
+ u8 i;
+ bool8 unknownBit = count & 0x80;
+ count &= ~(0x80);
+
+ for (i = 0; i < count; i++)
+ {
+ if (i == count - 1 && unknownBit)
+ gSprites[spriteIds[i]].pos2.x = x - 8;
+ else
+ gSprites[spriteIds[i]].pos2.x = x;
+
+ gSprites[spriteIds[i]].pos1.y = 1 + y;
+ }
+}
diff --git a/src/mon_markings.c b/src/mon_markings.c
new file mode 100644
index 000000000..147872ab6
--- /dev/null
+++ b/src/mon_markings.c
@@ -0,0 +1,611 @@
+#include "global.h"
+#include "dma3.h"
+#include "graphics.h"
+#include "main.h"
+#include "menu_indicators.h"
+#include "mon_markings.h"
+#include "constants/songs.h"
+#include "sound.h"
+#include "sprite.h"
+#include "text_window.h"
+
+#define MENU_TEXT_SPRITE_X_OFFSET 32
+
+// static functions
+static void sub_811FC80(s16, s16, u16, u16);
+static void TaskDummy7(struct Sprite *);
+static void sub_811FF40(struct Sprite *);
+static void sub_811FF7C(struct Sprite *);
+static struct Sprite *sub_811FFD4(u16, u16, const u16 *, u16);
+
+// .rodata
+static const u16 gUnknown_0859E65C[] = INCBIN_U16("graphics/misc/mon_markings.gbapal");
+static const u8 gUnknown_0859E67C[] = INCBIN_U8("graphics/misc/mon_markings.4bpp");
+
+static const struct OamData gUnknown_0859EE7C =
+{
+ .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 OamData gUnknown_0859EE84 =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 0,
+ .tileNum = 0,
+ .priority = 0,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+static const union AnimCmd gUnknown_0859EE8C[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gUnknown_0859EE94[] =
+{
+ ANIMCMD_FRAME(1, 5),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gUnknown_0859EE9C[] =
+{
+ ANIMCMD_FRAME(2, 5),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gUnknown_0859EEA4[] =
+{
+ ANIMCMD_FRAME(3, 5),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gUnknown_0859EEAC[] =
+{
+ ANIMCMD_FRAME(4, 5),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gUnknown_0859EEB4[] =
+{
+ ANIMCMD_FRAME(5, 5),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gUnknown_0859EEBC[] =
+{
+ ANIMCMD_FRAME(6, 5),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gUnknown_0859EEC4[] =
+{
+ ANIMCMD_FRAME(7, 5),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gUnknown_0859EECC[] =
+{
+ ANIMCMD_FRAME(8, 5),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gUnknown_0859EED4[] =
+{
+ ANIMCMD_FRAME(9, 5),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd *const gUnknown_0859EEDC[] =
+{
+ gUnknown_0859EE8C,
+ gUnknown_0859EE94,
+ gUnknown_0859EE9C,
+ gUnknown_0859EEA4,
+ gUnknown_0859EEAC,
+ gUnknown_0859EEB4,
+ gUnknown_0859EEBC,
+ gUnknown_0859EEC4,
+ gUnknown_0859EECC,
+ gUnknown_0859EED4,
+};
+
+static const union AnimCmd gUnknown_0859EF04[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gUnknown_0859EF0C[] =
+{
+ ANIMCMD_FRAME(64, 5),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd *const gUnknown_0859EF14[] =
+{
+ gUnknown_0859EF04,
+ gUnknown_0859EF0C,
+};
+
+static const struct OamData gUnknown_0859EF1C =
+{
+ .y = 0,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 1,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 1,
+ .tileNum = 0,
+ .priority = 0,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+static const union AnimCmd gUnknown_0859EF24[] =
+{
+ ANIMCMD_FRAME(0, 5),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gUnknown_0859EF2C[] =
+{
+ ANIMCMD_FRAME(4, 5),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gUnknown_0859EF34[] =
+{
+ ANIMCMD_FRAME(8, 5),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gUnknown_0859EF3C[] =
+{
+ ANIMCMD_FRAME(12, 5),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gUnknown_0859EF44[] =
+{
+ ANIMCMD_FRAME(16, 5),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gUnknown_0859EF4C[] =
+{
+ ANIMCMD_FRAME(20, 5),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gUnknown_0859EF54[] =
+{
+ ANIMCMD_FRAME(24, 5),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gUnknown_0859EF5C[] =
+{
+ ANIMCMD_FRAME(28, 5),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gUnknown_0859EF64[] =
+{
+ ANIMCMD_FRAME(32, 5),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gUnknown_0859EF6C[] =
+{
+ ANIMCMD_FRAME(36, 5),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gUnknown_0859EF74[] =
+{
+ ANIMCMD_FRAME(40, 5),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gUnknown_0859EF7C[] =
+{
+ ANIMCMD_FRAME(44, 5),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gUnknown_0859EF84[] =
+{
+ ANIMCMD_FRAME(48, 5),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gUnknown_0859EF8C[] =
+{
+ ANIMCMD_FRAME(52, 5),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gUnknown_0859EF94[] =
+{
+ ANIMCMD_FRAME(56, 5),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd gUnknown_0859EF9C[] =
+{
+ ANIMCMD_FRAME(60, 5),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd *const gUnknown_0859EFA4[] =
+{
+ gUnknown_0859EF24,
+ gUnknown_0859EF2C,
+ gUnknown_0859EF34,
+ gUnknown_0859EF3C,
+ gUnknown_0859EF44,
+ gUnknown_0859EF4C,
+ gUnknown_0859EF54,
+ gUnknown_0859EF5C,
+ gUnknown_0859EF64,
+ gUnknown_0859EF6C,
+ gUnknown_0859EF74,
+ gUnknown_0859EF7C,
+ gUnknown_0859EF84,
+ gUnknown_0859EF8C,
+ gUnknown_0859EF94,
+ gUnknown_0859EF9C,
+};
+
+static EWRAM_DATA struct PokemonMarkMenu *sMenu = NULL;
+
+void sub_811F90C(struct PokemonMarkMenu *ptr)
+{
+ sMenu = ptr;
+}
+
+void sub_811F918(void)
+{
+ const struct TilesPal *frame = GetWindowFrameTilesPal(gSaveBlock2Ptr->optionsWindowFrameType);
+ sMenu->frameTiles = frame->tiles;
+ sMenu->framePalette = frame->pal;
+ sMenu->tileLoadState = 0;
+ CpuFill16(0, sMenu->menuWindowSpriteTiles, sizeof(sMenu->menuWindowSpriteTiles));
+}
+
+bool8 sub_811F960(void)
+{
+ u16 i;
+ u8 *dest = sMenu->menuWindowSpriteTiles + sMenu->tileLoadState * 0x100;
+
+ switch (sMenu->tileLoadState)
+ {
+ case 0:
+ CpuFastCopy(sMenu->frameTiles, dest, TILE_SIZE_4BPP);
+ for (i = 0; i < 6; i++)
+ {
+ CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP, dest + TILE_SIZE_4BPP * (i + 1), TILE_SIZE_4BPP);
+ }
+ CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP * 2, dest + TILE_SIZE_4BPP * 7, TILE_SIZE_4BPP);
+ sMenu->tileLoadState++;
+ break;
+ default:
+ CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP * 3, dest, TILE_SIZE_4BPP);
+ for (i = 0; i < 6; i++)
+ {
+ CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP * 4, dest + TILE_SIZE_4BPP * (i + 1), TILE_SIZE_4BPP);
+ }
+ CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP * 5, dest + TILE_SIZE_4BPP * 7, TILE_SIZE_4BPP);
+ sMenu->tileLoadState++;
+ break;
+ case 13:
+ CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP * 6, dest, TILE_SIZE_4BPP);
+ for (i = 0; i < 6; i++)
+ {
+ CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP * 7, dest + TILE_SIZE_4BPP * (i + 1), TILE_SIZE_4BPP);
+ }
+ CpuFastCopy(sMenu->frameTiles + TILE_SIZE_4BPP * 8, dest + TILE_SIZE_4BPP * 7, TILE_SIZE_4BPP);
+ sMenu->tileLoadState++;
+ return FALSE;
+ case 14:
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+void sub_811FA90(void)
+{
+ sub_811F918();
+ while (sub_811F960());
+}
+
+void sub_811FAA4(u8 markings, s16 x, s16 y)
+{
+ u16 i;
+ sMenu->cursorPos = 0;
+ sMenu->markings = markings;
+ for (i = 0; i < 4; i++)
+ sMenu->markingsArray[i] = (sMenu->markings >> i) & 1;
+ sub_811FC80(x, y, sMenu->baseTileTag, sMenu->basePaletteTag);
+}
+
+void sub_811FAF8(void)
+{
+ u16 i;
+
+ for (i = 0; i < 2; i++)
+ {
+ FreeSpriteTilesByTag(sMenu->baseTileTag + i);
+ FreeSpritePaletteByTag(sMenu->basePaletteTag + i);
+ }
+ for (i = 0; i < 2; i++)
+ {
+ if (!sMenu->menuWindowSprites[i])
+ return;
+ DestroySprite(sMenu->menuWindowSprites[i]);
+ sMenu->menuWindowSprites[i] = NULL;
+ }
+ for (i = 0; i < 4; i++)
+ {
+ if (!sMenu->menuMarkingSprites[i])
+ return;
+ DestroySprite(sMenu->menuMarkingSprites[i]);
+ sMenu->menuMarkingSprites[i] = NULL;
+ }
+ if (sMenu->unkSprite)
+ {
+ DestroySprite(sMenu->unkSprite);
+ sMenu->unkSprite = NULL;
+ }
+ if (sMenu->menuTextSprite)
+ {
+ DestroySprite(sMenu->menuTextSprite);
+ sMenu->menuTextSprite = NULL;
+ }
+}
+
+
+bool8 sub_811FBA4(void)
+{
+ u16 i;
+
+ if (gMain.newKeys & DPAD_UP)
+ {
+ s8 pos;
+ PlaySE(SE_SELECT);
+ pos = --sMenu->cursorPos;
+ if (pos < 0)
+ sMenu->cursorPos = 5;
+ return TRUE;
+ }
+
+ if (gMain.newKeys & DPAD_DOWN)
+ {
+ s8 pos;
+ PlaySE(SE_SELECT);
+ pos = ++sMenu->cursorPos;
+ if (pos > 5)
+ sMenu->cursorPos = 0;
+ return TRUE;
+ }
+
+ if (gMain.newKeys & A_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+
+ switch (sMenu->cursorPos)
+ {
+ case 4:
+ sMenu->markings = 0;
+ for (i = 0; i < 4; i++)
+ sMenu->markings |= sMenu->markingsArray[i] << i;
+ return FALSE;
+ case 5:
+ return FALSE;
+ }
+
+ sMenu->markingsArray[sMenu->cursorPos] = !sMenu->markingsArray[sMenu->cursorPos];
+ return TRUE;
+ }
+
+ if (gMain.newKeys & B_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static void sub_811FC80(s16 x, s16 y, u16 baseTileTag, u16 basePaletteTag)
+{
+ u16 i;
+ u8 spriteId;
+
+ struct SpriteSheet sheets[] =
+ {
+ { sMenu->menuWindowSpriteTiles, 0x1000, baseTileTag },
+ { gPokenavConditionMarker_Gfx, 0x320, baseTileTag + 1 },
+ { NULL, 0 }
+ };
+
+ struct SpritePalette palettes[] =
+ {
+ { sMenu->framePalette, basePaletteTag },
+ { gPokenavConditionMarker_Pal, basePaletteTag + 1},
+ { NULL, 0 }
+ };
+
+ struct SpriteTemplate sprTemplate =
+ {
+ baseTileTag,
+ basePaletteTag,
+ &gUnknown_0859EE7C,
+ gUnknown_0859EF14,
+ NULL,
+ gDummySpriteAffineAnimTable,
+ TaskDummy7,
+ };
+
+ LoadSpriteSheets(sheets);
+ LoadSpritePalettes(palettes);
+
+ for (i = 0; i < 2; i++)
+ {
+ spriteId = CreateSprite(&sprTemplate, x + 32, y + 32, 1);
+ if (spriteId != 64)
+ {
+ sMenu->menuWindowSprites[i] = &gSprites[spriteId];
+ StartSpriteAnim(&gSprites[spriteId], i);
+ }
+ else
+ {
+ sMenu->menuWindowSprites[i] = NULL;
+ return;
+ }
+ }
+
+ sMenu->menuWindowSprites[1]->pos1.y = y + 96;
+
+ sprTemplate.tileTag++;
+ sprTemplate.paletteTag++;
+ sprTemplate.anims = gUnknown_0859EEDC;
+ sprTemplate.callback = sub_811FF40;
+ sprTemplate.oam = &gUnknown_0859EE84;
+
+ for (i = 0; i < 4; i++)
+ {
+ spriteId = CreateSprite(&sprTemplate, x + 32, y + 16 + 16 * i, 0);
+ if (spriteId != 64)
+ {
+ sMenu->menuMarkingSprites[i] = &gSprites[spriteId];
+ gSprites[spriteId].data[0] = i;
+ }
+ else
+ {
+ sMenu->menuMarkingSprites[i] = NULL;
+ return;
+ }
+ }
+
+ sprTemplate.callback = SpriteCallbackDummy;
+
+ spriteId = CreateSprite(&sprTemplate, 0, 0, 0);
+
+ if (spriteId != 64)
+ {
+ sMenu->menuTextSprite = &gSprites[spriteId];
+ sMenu->menuTextSprite->oam.shape = ST_OAM_SQUARE;
+ sMenu->menuTextSprite->oam.size = 2;
+ StartSpriteAnim(sMenu->menuTextSprite, 9);
+ sMenu->menuTextSprite->pos1.x = x + MENU_TEXT_SPRITE_X_OFFSET;
+ sMenu->menuTextSprite->pos1.y = y + 80;
+ CalcCenterToCornerVec(sMenu->menuTextSprite, 1, 2, 0);
+ }
+ else
+ {
+ sMenu->menuTextSprite = NULL;
+ }
+
+ sprTemplate.callback = sub_811FF7C;
+ spriteId = CreateSprite(&sprTemplate, x + 12, 0, 0);
+ if(spriteId != 64)
+ {
+ sMenu->unkSprite = &gSprites[spriteId];
+ sMenu->unkSprite->data[0] = y + 16;
+ StartSpriteAnim(sMenu->unkSprite, 8);
+ }
+ else
+ {
+ sMenu->unkSprite = NULL;
+ }
+
+}
+
+static void TaskDummy7(struct Sprite *sprite)
+{
+}
+
+static void sub_811FF40(struct Sprite *sprite)
+{
+ if (sMenu->markingsArray[sprite->data[0]])
+ StartSpriteAnim(sprite, 2 * sprite->data[0] + 1);
+ else
+ StartSpriteAnim(sprite, 2 * sprite->data[0]);
+}
+
+static void sub_811FF7C(struct Sprite *sprite)
+{
+ sprite->pos1.y = (16 * sMenu->cursorPos) + sprite->data[0];
+}
+
+struct Sprite *sub_811FF94(u16 tileTag, u16 paletteTag, const u16 *palette)
+{
+ if (!palette)
+ palette = gUnknown_0859E65C;
+ return sub_811FFD4(tileTag, paletteTag, palette, 16);
+}
+
+struct Sprite *sub_811FFB4(u16 tileTag, u16 paletteTag, const u16 *palette)
+{
+ if (!palette)
+ palette = gUnknown_0859E65C;
+ return sub_811FFD4(tileTag, paletteTag, palette, 1);
+}
+
+static struct Sprite *sub_811FFD4(u16 tileTag, u16 paletteTag, const u16 *palette, u16 size)
+{
+ u8 spriteId;
+ struct SpriteTemplate sprTemplate;
+ struct SpriteSheet sheet = { gUnknown_0859E67C, 0x80, tileTag };
+ struct SpritePalette sprPalette = { palette, paletteTag };
+
+ sprTemplate.tileTag = tileTag;
+ sprTemplate.paletteTag = paletteTag;
+ sprTemplate.oam = &gUnknown_0859EF1C;
+ sprTemplate.anims = gUnknown_0859EFA4;
+ sprTemplate.images = NULL;
+ sprTemplate.affineAnims = gDummySpriteAffineAnimTable;
+ sprTemplate.callback = TaskDummy7;
+
+ sheet.size = size * 0x80;
+
+ LoadSpriteSheet(&sheet);
+ LoadSpritePalette(&sprPalette);
+
+ spriteId = CreateSprite(&sprTemplate, 0, 0, 0);
+ if (spriteId != 64)
+ return &gSprites[spriteId];
+ else
+ return NULL;
+}
+
+void sub_8120084(u8 markings, void *dest)
+{
+ RequestDma3Copy(gUnknown_0859E67C + markings * 0x80, dest, 0x80, 0x10);
+}
diff --git a/src/mystery_event_menu.c b/src/mystery_event_menu.c
index 31b366ae9..8a7671c5b 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);
@@ -241,7 +241,7 @@ static void CB2_MysteryEventMenu(void)
u16 unkVal = RunMysteryEventScript(gDecompressionBuffer);
CpuFill32(0, gDecompressionBuffer, 0x7D4);
if (!GetEventLoadMessage(gStringVar4, unkVal))
- TrySavingData(NORMAL_SAVE);
+ TrySavingData(SAVE_NORMAL);
gMain.state++;
}
break;
diff --git a/src/naming_screen.c b/src/naming_screen.c
index 47d8b8ad1..0e350aa35 100644
--- a/src/naming_screen.c
+++ b/src/naming_screen.c
@@ -75,7 +75,7 @@ static const u8 gSpriteImage_858BCB8[] = INCBIN_U8("graphics/naming_screen/pc_ic
static const u16 gUnknown_0858BD78[] = INCBIN_U16("graphics/naming_screen/0.gbapal");
static const u16 gUnknown_0858BD98[] = INCBIN_U16("graphics/naming_screen/1.gbapal");
-static const u8 *const gUnknown_0858BDB8[] =
+static const u8 *const gUnknown_0858BDB8[] =
{
gText_PkmnTransferredSomeonesPC,
gText_PkmnTransferredLanettesPC,
@@ -85,7 +85,7 @@ static const u8 *const gUnknown_0858BDB8[] =
static const u8 gUnknown_0858BDC8[] = _("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!");
-static const struct BgTemplate gUnknown_0858BE00[] =
+static const struct BgTemplate gUnknown_0858BE00[] =
{
{
.bg = 0,
@@ -226,10 +226,10 @@ void DoNamingScreen(u8 templateNum, u8 *destBuffer, u16 monSpecies, u16 monGende
gNamingScreenData->monPersonality = monPersonality;
gNamingScreenData->destBuffer = destBuffer;
gNamingScreenData->returnCallback = returnCallback;
-
+
if (templateNum == 0)
StartTimer1();
-
+
SetMainCallback2(C2_NamingScreen);
}
}
@@ -316,15 +316,15 @@ static void sub_80E2FA4(void)
static void NamingScreen_InitBGs(void)
{
u8 i;
-
+
DmaClearLarge16(3, (void *)VRAM, VRAM_SIZE, 0x1000);
DmaClear32(3, (void *)OAM, OAM_SIZE);
DmaClear16(3, (void *)PLTT, PLTT_SIZE);
-
+
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0);
ResetBgsAndClearDma3BusyFlags(0);
InitBgsFromTemplates(0, gUnknown_0858BE00, 4);
-
+
ChangeBgX(0, 0, 0);
ChangeBgY(0, 0, 0);
ChangeBgX(1, 0, 0);
@@ -333,21 +333,21 @@ static void NamingScreen_InitBGs(void)
ChangeBgY(2, 0, 0);
ChangeBgX(3, 0, 0);
ChangeBgY(3, 0, 0);
-
+
sub_81971D0();
sub_8197200();
-
+
for (i = 0; i < 5; i++)
gNamingScreenData->windows[i] = AddWindow(&gUnknown_0858BE10[i]);
-
+
SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON);
SetGpuReg(REG_OFFSET_BLDCNT, BLDCNT_EFFECT_BLEND | BLDCNT_TGT2_BG1 | BLDCNT_TGT2_BG2);
SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(0xC, 0x8));
-
+
SetBgTilemapBuffer(1, gNamingScreenData->tilemapBuffer1);
SetBgTilemapBuffer(2, gNamingScreenData->tilemapBuffer2);
SetBgTilemapBuffer(3, gNamingScreenData->tilemapBuffer3);
-
+
FillBgTilemapBufferRect_Palette0(1, 0, 0, 0, 0x20, 0x20);
FillBgTilemapBufferRect_Palette0(2, 0, 0, 0, 0x20, 0x20);
FillBgTilemapBufferRect_Palette0(3, 0, 0, 0, 0x20, 0x20);
@@ -511,7 +511,7 @@ static bool8 MainState_WaitFadeOutAndExit(void)
static void DisplaySentToPCMessage(void)
{
u8 stringToDisplay = 0;
-
+
if (!sub_813B260())
{
StringCopy(gStringVar1, GetBoxNamePtr(VarGet(VAR_STORAGE_UNKNOWN)));
@@ -524,10 +524,10 @@ static void DisplaySentToPCMessage(void)
StringCopy(gStringVar3, GetBoxNamePtr(get_unknown_box_id()));
stringToDisplay = 2;
}
-
+
if (FlagGet(FLAG_SYS_PC_LANETTE))
stringToDisplay++;
-
+
StringExpandPlaceholders(gStringVar4, gUnknown_0858BDB8[stringToDisplay]);
NewMenuHelpers_DrawDialogueFrame(0, 0);
gTextFlags.flag_0 = TRUE;
@@ -538,10 +538,10 @@ static void DisplaySentToPCMessage(void)
static bool8 sub_80E3604(void)
{
RunTextPrinters();
-
+
if (!IsTextPrinterActive(0) && (gMain.newKeys & A_BUTTON))
gNamingScreenData->state = MAIN_STATE_BEGIN_FADE_OUT;
-
+
return FALSE;
}
@@ -562,17 +562,17 @@ static bool8 MainState_WaitPageSwap(void)
s16 cursorX;
s16 cursorY;
bool32 var3;
-
+
if (IsPageSwapAnimNotInProgress())
{
-
+
GetCursorPos(&cursorX, &cursorY);
var3 = (cursorX == GetCurrentPageColumnCount());
-
+
gNamingScreenData->state = MAIN_STATE_HANDLE_INPUT;
gNamingScreenData->currentPage++;
gNamingScreenData->currentPage %= 3;
-
+
if (var3)
{
cursorX = GetCurrentPageColumnCount();
@@ -582,7 +582,7 @@ static bool8 MainState_WaitPageSwap(void)
if (cursorX >= GetCurrentPageColumnCount())
cursorX = GetCurrentPageColumnCount() - 1;
}
-
+
SetCursorPos(cursorX, cursorY);
sub_80E4E5C();
SetInputState(INPUT_STATE_ENABLED);
@@ -603,7 +603,7 @@ static bool8 PageSwapAnimState_1(struct Task *);
static bool8 PageSwapAnimState_2(struct Task *);
static bool8 PageSwapAnimState_Done(struct Task *);
-static bool8 (*const sPageSwapAnimStateFuncs[])(struct Task *) =
+static bool8 (*const sPageSwapAnimStateFuncs[])(struct Task *) =
{
PageSwapAnimState_Init,
PageSwapAnimState_1,
@@ -754,7 +754,7 @@ static void Task_80E39BC(u8 taskId)
task->data[3] += task->data[4];
task->data[6] += task->data[4];
}
-
+
if (task->data[3] == 16 && task->data[6] == 22)
{
task->data[4] = -4;
@@ -893,7 +893,7 @@ static void CursorInit(void)
static void SetCursorPos(s16 x, s16 y)
{
struct Sprite *cursorSprite = &gSprites[gNamingScreenData->cursorSpriteId];
-
+
if (x < gUnknown_0858BEA0[sub_80E3274()])
cursorSprite->pos1.x = gUnknown_0858BEA3[x + sub_80E3274() * 8] + 38;
else
@@ -909,7 +909,7 @@ static void SetCursorPos(s16 x, s16 y)
static void GetCursorPos(s16 *x, s16 *y)
{
struct Sprite *cursorSprite = &gSprites[gNamingScreenData->cursorSpriteId];
-
+
*x = cursorSprite->data[0];
*y = cursorSprite->data[1];
}
@@ -1133,7 +1133,7 @@ static void CreateInputTargetIcon(void)
static void TaskDummy2(void)
{
-
+
}
static void NamingScreen_CreatePlayerIcon(void)
@@ -1160,7 +1160,7 @@ static void NamingScreen_CreateMonIcon(void)
{
u8 spriteId;
- sub_80D2F04();
+ LoadMonIconPalettes();
spriteId = CreateMonIcon(gNamingScreenData->monSpecies, SpriteCallbackDummy, 0x38, 0x28, 0, gNamingScreenData->monPersonality, 1);
gSprites[spriteId].oam.priority = 3;
}
@@ -1331,7 +1331,7 @@ static void InputState_Disabled(struct Task *task)
static void InputState_Enabled(struct Task *task)
{
task->tKeyboardEvent = 0;
-
+
if (gMain.newKeys & A_BUTTON)
task->tKeyboardEvent = KBEVENT_PRESSED_A;
else if (gMain.newKeys & B_BUTTON)
@@ -1454,7 +1454,7 @@ static void sub_80E4894(void)
static void sub_80E48E8(void)
{
u8 buffer[0x20];
-
+
StringCopy(buffer, gSpeciesNames[gNamingScreenData->monSpecies]);
StringAppendN(buffer, gNamingScreenData->template->title, 15);
FillWindowPixelBuffer(gNamingScreenData->windows[3], 0x11);
@@ -1492,10 +1492,10 @@ static void sub_80E498C(void)
static void TaskDummy3(void)
{
-
+
}
-static const u8 sGenderColors[2][3] =
+static const u8 sGenderColors[2][3] =
{
{0, 9, 8},
{0, 5, 4}
@@ -1505,7 +1505,7 @@ static void sub_80E49BC(void)
{
u8 genderSymbol[2];
bool8 isFemale = FALSE;
-
+
StringCopy(genderSymbol, gText_MaleSymbol);
if (gNamingScreenData->monGender != MON_GENDERLESS)
@@ -1575,7 +1575,7 @@ static bool8 sub_80E4B54(void)
sub_80E4D10();
CopyBgTilemapBufferToVram(3);
PlaySE(SE_SELECT);
-
+
if (GetPreviousTextCaretPosition() != gNamingScreenData->template->maxChars - 1)
return FALSE;
else
@@ -1633,7 +1633,7 @@ static void sub_80E4CF8(u8 bg, const void *src)
static void nullsub_10(u8 a1, u8 a2)
{
-
+
}
static void sub_80E4D10(void)
@@ -1643,18 +1643,18 @@ static void sub_80E4D10(void)
u16 unk2;
u8 maxChars = gNamingScreenData->template->maxChars;
u16 unk = gNamingScreenData->inputCharBaseXPos - 0x40;
-
+
FillWindowPixelBuffer(gNamingScreenData->windows[2], 0x11);
-
+
for (i = 0; i < maxChars; i++)
{
temp[0] = gNamingScreenData->textBuffer[i];
temp[1] = gExpandedPlaceholder_Empty[0];
unk2 = (sub_80E503C(temp[0]) == 1) ? 2 : 0;
-
+
PrintTextOnWindow(gNamingScreenData->windows[2], 1, temp, i * 8 + unk + unk2, 1, 0xFF, NULL);
}
-
+
sub_80E498C();
CopyWindowToVram(gNamingScreenData->windows[2], 2);
PutWindowTilemap(gNamingScreenData->windows[2]);
@@ -1674,12 +1674,12 @@ static const struct TextColorThing sUnkColorStruct =
}
};
-static const u8 sFillValues[3] =
+static const u8 sFillValues[3] =
{
0xEE, 0xDD, 0xFF
};
-static const u8 *const sUnkColors[3] =
+static const u8 *const sUnkColors[3] =
{
sUnkColorStruct.colors[1],
sUnkColorStruct.colors[0],
@@ -1689,18 +1689,18 @@ static const u8 *const sUnkColors[3] =
static void sub_80E4DE4(u8 window, u8 a1)
{
u8 i;
-
+
FillWindowPixelBuffer(window, sFillValues[a1]);
-
+
for (i = 0; i < 4; i++)
{
box_print(window, 1, 0, i * 16 + 1, sUnkColors[a1], 0, gUnknown_0858C198[a1][i]);
}
-
+
PutWindowTilemap(window);
}
-static const u8 *const gUnknown_0858BF98[] =
+static const u8 *const gUnknown_0858BF98[] =
{
gUnknown_08DD4620,
gUnknown_08DD46E0,
@@ -1714,7 +1714,7 @@ static void sub_80E4E5C(void)
u8 unk3;
u8 bg1Priority = GetGpuReg(REG_OFFSET_BG1CNT) & 3;
u8 bg2Priority = GetGpuReg(REG_OFFSET_BG2CNT) & 3;
-
+
if (bg1Priority > bg2Priority)
{
unk1 = 1;
@@ -1727,7 +1727,7 @@ static void sub_80E4E5C(void)
unk2 = 2;
unk3 = gNamingScreenData->windows[1];
}
-
+
sub_80E4CF8(unk1, gUnknown_0858BF98[gNamingScreenData->currentPage]);
sub_80E4DE4(unk3, sub_80E3254());
nullsub_10(unk1, sub_80E3254());
@@ -1737,7 +1737,7 @@ static void sub_80E4E5C(void)
static void sub_80E4EF0(void)
{
const u8 color[3] = { 15, 1, 2 };
-
+
FillWindowPixelBuffer(gNamingScreenData->windows[4], 0xFF);
box_print(gNamingScreenData->windows[4], 0, 2, 1, color, 0, gText_MoveOkBack);
PutWindowTilemap(gNamingScreenData->windows[4]);
@@ -1787,7 +1787,7 @@ static void sub_80E501C(void)
static bool8 sub_80E503C(u8 character)
{
u8 i;
-
+
for (i = 0; gUnknown_0858BDC8[i] != EOS; i++)
{
if (character == gUnknown_0858BDC8[i])
@@ -1798,22 +1798,22 @@ static bool8 sub_80E503C(u8 character)
static void sub_80E5074(void)
{
- DoNamingScreen(0, gSaveBlock2Ptr->playerName, gSaveBlock2Ptr->playerGender, 0, 0, sub_8086194);
+ DoNamingScreen(0, gSaveBlock2Ptr->playerName, gSaveBlock2Ptr->playerGender, 0, 0, CB2_ReturnToFieldWithOpenMenu);
}
static void sub_80E509C(void)
{
- DoNamingScreen(1, gSaveBlock2Ptr->playerName, gSaveBlock2Ptr->playerGender, 0, 0, sub_8086194);
+ DoNamingScreen(1, gSaveBlock2Ptr->playerName, gSaveBlock2Ptr->playerGender, 0, 0, CB2_ReturnToFieldWithOpenMenu);
}
static void sub_80E50C4(void)
{
- DoNamingScreen(2, gSaveBlock2Ptr->playerName, gSaveBlock2Ptr->playerGender, 0, 0, sub_8086194);
+ DoNamingScreen(2, gSaveBlock2Ptr->playerName, gSaveBlock2Ptr->playerGender, 0, 0, CB2_ReturnToFieldWithOpenMenu);
}
static void sub_80E50EC(void)
{
- DoNamingScreen(3, gSaveBlock2Ptr->playerName, gSaveBlock2Ptr->playerGender, 0, 0, sub_8086194);
+ DoNamingScreen(3, gSaveBlock2Ptr->playerName, gSaveBlock2Ptr->playerGender, 0, 0, CB2_ReturnToFieldWithOpenMenu);
}
//--------------------------------------------------
@@ -1987,20 +1987,20 @@ static const struct SpriteFrameImage gUnknown_0858C080[] =
{gSpriteImage_858BCB8, sizeof(gSpriteImage_858BCB8)},
};
-static const union AnimCmd gSpriteAnim_858C090[] =
+static const union AnimCmd gSpriteAnim_858C090[] =
{
ANIMCMD_FRAME(0, 1),
ANIMCMD_JUMP(0)
};
-static const union AnimCmd gSpriteAnim_858C098[] =
+static const union AnimCmd gSpriteAnim_858C098[] =
{
ANIMCMD_FRAME(4, 8),
ANIMCMD_FRAME(8, 8),
ANIMCMD_END
};
-static const union AnimCmd gSpriteAnim_858C0A4[] =
+static const union AnimCmd gSpriteAnim_858C0A4[] =
{
ANIMCMD_FRAME(0, 2),
ANIMCMD_FRAME(1, 2),
@@ -2023,7 +2023,7 @@ static const union AnimCmd *const gSpriteAnimTable_858C0BC[] =
gSpriteAnim_858C0A4
};
-static const struct SpriteTemplate gUnknown_0858C0C0 =
+static const struct SpriteTemplate gUnknown_0858C0C0 =
{
.tileTag = 0x0002,
.paletteTag = 0x0004,
@@ -2034,7 +2034,7 @@ static const struct SpriteTemplate gUnknown_0858C0C0 =
.callback = sub_80E4084
};
-static const struct SpriteTemplate gUnknown_0858C0D8 =
+static const struct SpriteTemplate gUnknown_0858C0D8 =
{
.tileTag = 0x0003,
.paletteTag = 0x0001,
@@ -2045,7 +2045,7 @@ static const struct SpriteTemplate gUnknown_0858C0D8 =
.callback = SpriteCallbackDummy
};
-static const struct SpriteTemplate gUnknown_0858C0F0 =
+static const struct SpriteTemplate gUnknown_0858C0F0 =
{
.tileTag = 0x0004,
.paletteTag = 0x0004,
@@ -2056,7 +2056,7 @@ static const struct SpriteTemplate gUnknown_0858C0F0 =
.callback = SpriteCallbackDummy
};
-static const struct SpriteTemplate gUnknown_0858C108 =
+static const struct SpriteTemplate gUnknown_0858C108 =
{
.tileTag = 0x0000,
.paletteTag = 0x0006,
@@ -2067,7 +2067,7 @@ static const struct SpriteTemplate gUnknown_0858C108 =
.callback = SpriteCallbackDummy
};
-static const struct SpriteTemplate gUnknown_0858C120 =
+static const struct SpriteTemplate gUnknown_0858C120 =
{
.tileTag = 0x0001,
.paletteTag = 0x0007,
@@ -2078,7 +2078,7 @@ static const struct SpriteTemplate gUnknown_0858C120 =
.callback = SpriteCallbackDummy
};
-static const struct SpriteTemplate gUnknown_0858C138 =
+static const struct SpriteTemplate gUnknown_0858C138 =
{
.tileTag = 0x0007,
.paletteTag = 0x0005,
@@ -2089,7 +2089,7 @@ static const struct SpriteTemplate gUnknown_0858C138 =
.callback = sub_80E3B30
};
-static const struct SpriteTemplate sSpriteTemplate_InputArrow =
+static const struct SpriteTemplate sSpriteTemplate_InputArrow =
{
.tileTag = 0x000A,
.paletteTag = 0x0003,
@@ -2100,7 +2100,7 @@ static const struct SpriteTemplate sSpriteTemplate_InputArrow =
.callback = sub_80E3C20
};
-static const struct SpriteTemplate sSpriteTemplate_Underscore =
+static const struct SpriteTemplate sSpriteTemplate_Underscore =
{
.tileTag = 0x000B,
.paletteTag = 0x0003,
@@ -2111,7 +2111,7 @@ static const struct SpriteTemplate sSpriteTemplate_Underscore =
.callback = sub_80E3C6C
};
-static const struct SpriteTemplate gUnknown_0858C180 =
+static const struct SpriteTemplate gUnknown_0858C180 =
{
.tileTag = 0xFFFF,
.paletteTag = 0x0000,
@@ -2122,7 +2122,7 @@ static const struct SpriteTemplate gUnknown_0858C180 =
.callback = SpriteCallbackDummy
};
-static const u8* const gUnknown_0858C198[][4] =
+static const u8* const gUnknown_0858C198[][4] =
{
{
gUnknown_0862B88D,
diff --git a/src/new_game.c b/src/new_game.c
index 89771e92b..37336016e 100644
--- a/src/new_game.c
+++ b/src/new_game.c
@@ -20,8 +20,10 @@
#include "tv.h"
#include "coins.h"
#include "text.h"
+#include "overworld.h"
+#include "mail.h"
+#include "battle_records.h"
-extern u8 gPlayerPartyCount;
extern u8 gDifferentSaveFile;
extern u16 gSaveFileStatus;
extern u8 gUnknown_030060B0;
@@ -29,19 +31,15 @@ extern u8 gUnknown_030060B0;
// TODO: replace those declarations with file headers
extern u16 GetGeneratedTrainerIdLower(void);
extern void ClearContestWinnerPicsInContestHall(void);
-extern void Overworld_SetWarpDestination(s8 mapBank, s8 mapNo, s8 warpNo, s8 xPos, s8 yPos);
extern void warp_in(void);
extern void sub_80BB358(void);
extern void ResetBagScrollPositions(void);
extern void ResetPokedex(void);
extern void sub_8084400(void);
-extern void ClearMailData(void);
extern void ResetGabbyAndTy(void);
extern void ResetSecretBases(void);
extern void ResetLinkContestBoolean(void);
-extern void ResetGameStats(void);
extern void sub_8052DA8(void);
-extern void InitLinkBattleRecords(void);
extern void ResetPokemonStorageSystem(void);
extern void ClearBag(void);
extern void NewGameInitPCItems(void);
@@ -58,7 +56,7 @@ extern void ResetContestLinkResults(void);
extern void ResetPokeJumpResults(void);
extern void SetBerryPowder(u32* powder, u32 newValue);
-extern u8 EventScript_2715DE[];
+extern const u8 EventScript_2715DE[];
void WriteUnalignedWord(u32 var, u8 *dataPtr)
{
@@ -178,7 +176,7 @@ void NewGameInitData(void)
ResetLinkContestBoolean();
ResetGameStats();
ClearAllContestWinnerPics();
- InitLinkBattleRecords();
+ ClearPlayerLinkBattleRecords();
InitSeedotSizeRecord();
InitLotadSizeRecord();
gPlayerPartyCount = 0;
diff --git a/src/option_menu.c b/src/option_menu.c
index cbbe14b77..de9a216a6 100644
--- a/src/option_menu.c
+++ b/src/option_menu.c
@@ -146,23 +146,7 @@ void CB2_InitOptionMenu(void)
gMain.state++;
break;
case 1:
- {
- u8 *addr;
- u32 size;
-
- addr = (u8 *)VRAM;
- size = 0x18000;
- while (1)
- {
- DmaFill16(3, 0, addr, 0x1000);
- addr += 0x1000;
- size -= 0x1000;
- if (size <= 0x1000)
- {
- DmaFill16(3, 0, addr, size);
- break;
- }
- }
+ DmaClearLarge16(3, (void*)(VRAM), VRAM_SIZE, 0x1000);
DmaClear32(3, OAM, OAM_SIZE);
DmaClear16(3, PLTT, PLTT_SIZE);
SetGpuReg(REG_OFFSET_DISPCNT, 0);
@@ -189,7 +173,6 @@ void CB2_InitOptionMenu(void)
ShowBg(0);
ShowBg(1);
gMain.state++;
- }
break;
case 2:
ResetPaletteFade();
diff --git a/src/overworld.c b/src/overworld.c
index c538595f2..3d9a1bdc2 100644
--- a/src/overworld.c
+++ b/src/overworld.c
@@ -1,19 +1,3181 @@
-
-// Includes
#include "global.h"
+#include "overworld.h"
+#include "main.h"
+#include "battle_setup.h"
+#include "berry.h"
+// #include "cable_club.h"
+#include "clock.h"
+#include "event_data.h"
+#include "field_camera.h"
+#include "field_control_avatar.h"
+#include "field_effect.h"
+#include "field_fadetransition.h"
+#include "field_ground_effect.h"
+#include "field_map_obj.h"
+#include "field_map_obj_helpers.h"
+#include "field_message_box.h"
+#include "field_player_avatar.h"
+#include "field_screen_effect.h"
+// #include "field_special_scene.h"
+#include "field_specials.h"
+#include "field_tasks.h"
+#include "field_weather.h"
+#include "fieldmap.h"
+// #include "fldeff_flash.h"
+#include "heal_location.h"
+#include "link.h"
+#include "load_save.h"
+#include "main.h"
+#include "m4a.h"
+#include "constants/maps.h"
+#include "map_name_popup.h"
+#include "menu.h"
+#include "metatile_behavior.h"
+#include "new_game.h"
+#include "palette.h"
+#include "play_time.h"
+#include "random.h"
+#include "roamer.h"
+// #include "rotating_gate.h"
+#include "safari_zone.h"
+#include "save.h"
+#include "script.h"
+// #include "script_pokemon_80C4.h"
+#include "secret_base.h"
+#include "constants/songs.h"
+#include "sound.h"
+#include "constants/species.h"
+#include "start_menu.h"
+#include "task.h"
+// #include "tileset_anim.h"
+#include "time_events.h"
+#include "tv.h"
+#include "scanline_effect.h"
+#include "wild_encounter.h"
+#include "bg.h"
+#include "money.h"
+#include "save_location.h"
+#include "constants/abilities.h"
+#include "malloc.h"
+#include "gpu_regs.h"
+#include "link_rfu.h"
+
+// event scripts
+extern const u8 EventScript_WhiteOut[];
+extern const u8 EventScript_271862[];
+extern const u8 EventScript_277513[];
+extern const u8 EventScript_TradeRoom_TooBusyToNotice[];
+extern const u8 EventScript_TradeRoom_ReadTrainerCard1[];
+extern const u8 EventScript_TradeRoom_ReadTrainerCard2[];
+extern const u8 gUnknown_08277388[];
+extern const u8 gUnknown_082773A3[];
+extern const u8 gUnknown_082773BE[];
+extern const u8 gUnknown_082773D9[];
+extern const u8 gUnknown_0827741D[];
+extern const u8 gUnknown_08277432[];
+extern const u8 gUnknown_08277447[];
+extern const u8 gUnknown_0827745C[];
+extern const u8 gUnknown_08277374[];
+extern const u8 gUnknown_0827737E[];
+extern const u8 gUnknown_082773FF[];
+extern const u8 gUnknown_082773F5[];
+extern const u8 gUnknown_082774EF[];
+extern const u8 gUnknown_08277509[];
+
+// vars
+extern const struct MapData *const gMapAttributes[];
+extern const struct MapHeader *const *const gMapGroups[];
+extern const s32 gMaxFlashLevel;
+extern const u16 gUnknown_82EC7C4[];
+
+u16 gUnknown_03005DA8;
+MainCallback gFieldCallback;
+bool8 (*gUnknown_03005DB0)(void);
+u8 gUnknown_03005DB4;
+u8 gFieldLinkPlayerCount;
+
+// functions
+extern void HealPlayerParty(void);
+extern void move_tilemap_camera_to_upper_left_corner(void);
+extern void cur_mapheader_run_tileset_funcs_after_some_cpuset(void);
+extern void DrawWholeMapView(void);
+extern void copy_map_tileset1_tileset2_to_vram(const struct MapData *);
+extern void apply_map_tileset1_tileset2_palette(const struct MapData *);
+extern void ResetCyclingRoadChallengeData(void);
+extern void ApplyNewEncryptionKeyToWord(u32 *word, u32 newKey);
+extern void mapheader_run_script_with_tag_x5(void);
+extern void ResetFieldTasksArgs(void);
+extern void sub_80A0A2C(void);
+extern void not_trainer_hill_battle_pyramid(void);
+extern void apply_map_tileset2_palette(const struct MapData *);
+extern void copy_map_tileset2_to_vram_2(const struct MapData *);
+extern void prev_quest_postbuffer_cursor_backup_reset(void);
+extern void ShowMapNamePopup(void);
+extern bool32 InTrainerHill(void);
+extern bool32 sub_808651C(void);
+extern bool8 sub_80AF6A4(void);
+extern bool8 sub_81A9E6C(void);
+extern bool8 sub_80E909C(void);
+extern void sub_81AA1D8(void);
+extern void c2_change_map(void);
+extern void sub_81D5DF8(void);
+extern void sub_80EB218(void);
+extern void sub_81BE72C(void);
+extern void sub_80AF3C8(void);
+extern void sub_81971F4(void);
+extern void sub_808B578(void);
+extern void sub_80AF314(void);
+extern void sub_80AF214(void);
+extern void sub_80AF188(void);
+extern void door_upload_tiles(void);
+extern void RotatingGate_InitPuzzleAndGraphics(void);
+extern void sub_80AF168(void);
+extern void sub_80AF3C8(void);
+extern void ExecuteTruckSequence(void);
+extern void sub_80A0A38(void);
+extern void trainer_hill_map_load_related(void);
+extern void sub_8087D74(void);
+extern void battle_pyramid_map_load_related(u8);
+extern void sub_80B00E8(u8);
+extern void sub_80E9238(u8);
+extern void sub_81A3908(void);
+extern void sub_81AA2F8(void);
+extern void sub_8195E10(void);
+extern void sub_80EDB44(void);
+extern void sub_81D64C0(void);
+extern void sub_81BE6AC(void);
+extern void sub_8098128(void);
+extern void copy_map_tileset1_to_vram(const struct MapData *);
+extern void copy_map_tileset2_to_vram(const struct MapData *);
+extern void FieldUpdateBgTilemapScroll(void);
+extern void TransferTilesetAnimsBuffer(void);
+extern bool32 sub_81D5F48(void);
+extern u8 GetCurrentTrainerHillMapId(void);
+extern bool8 warp0_in_pokecenter(void);
+extern void dp13_810BB8C(void);
+extern void FieldEffectActiveListClear(void);
+extern void SetUpFieldTasks(void);
+extern void sub_81BE6B8(void);
+extern void sub_80AAFA4(void);
+extern void ShowStartMenu(void);
+extern void sub_80AEE84(void);
+extern void mapldr_default(void);
+extern void npc_paltag_set_load(u8);
+extern void sub_8088B3C(u16, u16);
+extern bool32 sub_800F0B8(void);
+extern bool32 sub_8009F3C(void);
+extern void sub_8010198(void);
+extern u32 sub_800B4DC(void);
+extern bool32 sub_80B39D4(u8);
+extern const u8* sub_809C2C8(struct MapPosition *a1, u8, u8);
+extern u8 *sub_809D0F4(void*);
+extern u8 sub_808BD6C(u8);
+extern u8 sub_808BD7C(u8);
+extern void sub_80979D4(struct Sprite*, u8);
+
+// this file's functions
+static void Overworld_ResetStateAfterWhiteOut(void);
+static void c2_80567AC(void);
+static void CB2_LoadMap2(void);
+static void VBlankCB_Field(void);
+static void SpriteCB_LinkPlayer(struct Sprite *sprite);
+static void ChooseAmbientCrySpecies(void);
+static void do_load_map_stuff_loop(u8 *state);
+static bool32 map_loading_iteration_3(u8 *state);
+static bool32 sub_8086638(u8 *state);
+static bool32 load_map_stuff(u8 *state, u32);
+static bool32 map_loading_iteration_2_link(u8 *state);
+static void mli4_mapscripts_and_other(void);
+static void map_loading_lcd_reset(void);
+static u8 sub_8087858(u8);
+static u16 sub_80871C0(u32 a1);
+static void sub_80867C8(void);
+static void sub_80867D8(void);
+static void sub_8086AE4(void);
+static void sub_80869DC(void);
+static void sub_8086B14(void);
+static void sub_8086AAC(void);
+static void sub_8086988(bool32 arg0);
+static void sub_8086A80(void);
+static void sub_8086A68(void);
+static void sub_8086860(void);
+static void sub_8086AC8(void);
+static void sub_8086B9C(void);
+static void sub_8086C40(void);
+static void sub_8086C90(void);
+static void sub_8086FA0(u16);
+static void sub_8086F38(u16*, s32);
+static u8 npc_something3(u8 a1, u8 a2);
+static u8 LinkPlayerDetectCollision(u8 selfMapObjId, u8 a2, s16 x, s16 y);
+static void CreateLinkPlayerSprite(u8 linkPlayerId, u8 gameVersion);
+static void sub_8087878(u8 linkPlayerId, u16 *x, u16 *y);
+static u8 sub_80878A0(u8 linkPlayerId);
+static u8 sub_80878C0(u8 linkPlayerId);
+static s32 sub_80878E4(u8 linkPlayerId);
+static u8 GetLinkPlayerIdAt(s16 x, s16 y);
+static void sub_808796C(u8 linkPlayerId, u8 a2);
+static void ZeroMapObject(struct MapObject *mapObj);
+static void SpawnLinkPlayerMapObject(u8 linkPlayerId, s16 x, s16 y, u8 a4);
+static void InitLinkPlayerMapObjectPos(struct MapObject *mapObj, s16 x, s16 y);
+static void sub_80877DC(u8 linkPlayerId, u8 a2);
+static void sub_808780C(u8 linkPlayerId);
+static u8 sub_8087858(u8 linkPlayerId);
+static void sub_8087584(void);
+static u32 sub_8087690(void);
+static void ZeroLinkPlayerMapObject(struct LinkPlayerMapObject *linkPlayerMapObj);
+static const u8 *sub_80873B4(struct UnkStruct_8054FF8 *a1);
+static u16 sub_8087480(const u8 *script);
+static void sub_8087510(void);
+static void sub_808751C(void);
+static void sub_8087530(const u8 *script);
+static void sub_808754C(void);
+static void sub_8087568(const u8 *script);
+static void sub_80872D8(s32 linkPlayerId, s32 a2, struct UnkStruct_8054FF8 *a3);
+static bool32 sub_8087340(struct UnkStruct_8054FF8 *a1);
+static bool32 sub_8087358(struct UnkStruct_8054FF8 *a1);
+static u8 *sub_8087370(struct UnkStruct_8054FF8 *a1);
+static bool32 sub_8087388(struct UnkStruct_8054FF8 *a1);
+static const u8 *sub_80873B4(struct UnkStruct_8054FF8 *a1);
+static u16 sub_808711C(u32);
+static u16 sub_8087140(u32);
+static void sub_808709C(u16 *a1);
+static u16 sub_80870B0(u32 a1);
+static u16 sub_80870F8(u32 a1);
+static u16 sub_8087068(u16 a1);
+static void c1_link_related(void);
+static void c1_link_related_func_set(u16 (*func)(u32));
+static void SetFieldVBlankCallback(void);
+static void FieldClearVBlankHBlankCallbacks(void);
+static void sub_8085810(void);
+static u8 sub_808532C(struct UnkPlayerStruct *playerStruct, u16 a2, u8 a3);
+static u8 sub_808538C(struct UnkPlayerStruct *playerStruct, u8 a2, u16 a3, u8 a4);
+static u16 cur_mapdata_block_role_at_screen_center_acc_to_sav1(void);
+
+// IWRAM bss vars
+IWRAM_DATA static void *sUnknown_03000E0C;
+IWRAM_DATA static u8 sUnknown_03000E10[4];
+IWRAM_DATA static u16 (*sUnknown_03000E14)(u32);
+IWRAM_DATA static u8 sUnknown_03000E18;
+IWRAM_DATA static u8 sUnknown_03000E19;
+IWRAM_DATA static u32 sUnusedVar;
+
+// EWRAM vars
+EWRAM_DATA static u8 sUnknown_020322D8 = 0;
+EWRAM_DATA struct WarpData gUnknown_020322DC = {0};
+EWRAM_DATA static struct WarpData sWarpDestination = {0}; // new warp position
+EWRAM_DATA static struct WarpData sUnknown_020322EC = {0};
+EWRAM_DATA static struct WarpData sUnknown_020322F4 = {0};
+EWRAM_DATA static u16 sLastMapSectionId = 0;
+EWRAM_DATA static struct UnkPlayerStruct sUnknown_02032300 = {0};
+EWRAM_DATA static u16 sAmbientCrySpecies = 0;
+EWRAM_DATA static bool8 sIsAmbientCryWaterMon = FALSE;
+EWRAM_DATA struct LinkPlayerMapObject gLinkPlayerMapObjects[4] = {0};
+
+// const rom data
+static const struct WarpData sDummyWarpData =
+{
+ .mapGroup = -1,
+ .mapNum = -1,
+ .warpId = -1,
+ .x = -1,
+ .y = -1,
+};
+
+static const u8 sUnusedData[] =
+{
+ 0xB0, 0x04, 0x00, 0x00,
+ 0x10, 0x0E, 0x00, 0x00,
+ 0xB0, 0x04, 0x00, 0x00,
+ 0x60, 0x09, 0x00, 0x00,
+ 0x32, 0x00, 0x00, 0x00,
+ 0x50, 0x00, 0x00, 0x00,
+ 0xD4, 0xFF, 0xFF, 0xFF,
+ 0x2C, 0x00, 0x00, 0x00,
+};
+
+const struct UCoords32 gUnknown_08339D64[] =
+{
+ { 0, 0},
+ { 0, 1},
+ { 0, -1},
+ {-1, 0},
+ { 1, 0},
+ {-1, 1},
+ { 1, 1},
+ {-1, -1},
+ { 1, -1},
+};
+
+static const struct BgTemplate gUnknown_08339DAC[] =
+{
+ {
+ .bg = 0,
+ .charBaseIndex = 2,
+ .mapBaseIndex = 31,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 0,
+ .baseTile = 0
+ },
+ {
+ .bg = 1,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 29,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 1,
+ .baseTile = 0
+ },
+ {
+ .bg = 2,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 28,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 2,
+ .baseTile = 0
+ },
+ {
+ .bg = 3,
+ .charBaseIndex = 0,
+ .mapBaseIndex = 30,
+ .screenSize = 0,
+ .paletteMode = 0,
+ .priority = 3,
+ .baseTile = 0
+ }
+};
+
+static const struct ScanlineEffectParams gUnknown_08339DBC =
+{
+ (void *)REG_ADDR_WIN0H,
+ ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_DEST_RELOAD) << 16) | 1,
+ 1,
+ 0,
+};
+
+static u8 sub_80879D8(struct LinkPlayerMapObject *, struct MapObject *, u8);
+static u8 sub_80879F8(struct LinkPlayerMapObject *, struct MapObject *, u8);
+static u8 sub_80879FC(struct LinkPlayerMapObject *, struct MapObject *, u8);
+
+static u8 (*const gUnknown_08339DC8[])(struct LinkPlayerMapObject *, struct MapObject *, u8) =
+{
+ sub_80879D8,
+ sub_80879F8,
+ sub_80879FC,
+};
+
+static u8 sub_8087A1C(struct LinkPlayerMapObject *, struct MapObject *, u8);
+static u8 sub_8087A20(struct LinkPlayerMapObject *, struct MapObject *, u8);
+static u8 sub_8087A88(struct LinkPlayerMapObject *, struct MapObject *, u8);
+
+static u8 (*const gUnknown_08339DD4[])(struct LinkPlayerMapObject *, struct MapObject *, u8) =
+{
+ sub_8087A1C,
+ sub_8087A20,
+ sub_8087A20,
+ sub_8087A20,
+ sub_8087A20,
+ sub_8087A1C,
+ sub_8087A1C,
+ sub_8087A88,
+ sub_8087A88,
+ sub_8087A88,
+ sub_8087A88,
+};
+
+static void sub_8087AA0(struct LinkPlayerMapObject *, struct MapObject *);
+static void sub_8087AA8(struct LinkPlayerMapObject *, struct MapObject *);
+
+static void (*const gUnknown_08339E00[])(struct LinkPlayerMapObject *, struct MapObject *) =
+{
+ sub_8087AA0,
+ sub_8087AA8,
+};
+
+// code
+void DoWhiteOut(void)
+{
+ ScriptContext2_RunNewScript(EventScript_WhiteOut);
+ SetMoney(&gSaveBlock1Ptr->money, GetMoney(&gSaveBlock1Ptr->money) / 2);
+ HealPlayerParty();
+ Overworld_ResetStateAfterWhiteOut();
+ Overworld_SetWarpDestToLastHealLoc();
+ warp_in();
+}
+
+void Overworld_ResetStateAfterFly(void)
+{
+ player_avatar_init_params_reset();
+ FlagClear(FLAG_SYS_CYCLING_ROAD);
+ FlagClear(FLAG_SYS_CRUISE_MODE);
+ FlagClear(FLAG_SYS_SAFARI_MODE);
+ FlagClear(FLAG_SYS_USE_STRENGTH);
+ FlagClear(FLAG_SYS_USE_FLASH);
+}
+
+void Overworld_ResetStateAfterTeleport(void)
+{
+ player_avatar_init_params_reset();
+ FlagClear(FLAG_SYS_CYCLING_ROAD);
+ FlagClear(FLAG_SYS_CRUISE_MODE);
+ FlagClear(FLAG_SYS_SAFARI_MODE);
+ FlagClear(FLAG_SYS_USE_STRENGTH);
+ FlagClear(FLAG_SYS_USE_FLASH);
+ ScriptContext2_RunNewScript(EventScript_271862);
+}
+
+void Overworld_ResetStateAfterDigEscRope(void)
+{
+ player_avatar_init_params_reset();
+ FlagClear(FLAG_SYS_CYCLING_ROAD);
+ FlagClear(FLAG_SYS_CRUISE_MODE);
+ FlagClear(FLAG_SYS_SAFARI_MODE);
+ FlagClear(FLAG_SYS_USE_STRENGTH);
+ FlagClear(FLAG_SYS_USE_FLASH);
+}
+
+static void Overworld_ResetStateAfterWhiteOut(void)
+{
+ player_avatar_init_params_reset();
+ FlagClear(FLAG_SYS_CYCLING_ROAD);
+ FlagClear(FLAG_SYS_CRUISE_MODE);
+ FlagClear(FLAG_SYS_SAFARI_MODE);
+ FlagClear(FLAG_SYS_USE_STRENGTH);
+ FlagClear(FLAG_SYS_USE_FLASH);
+ if (VarGet(VAR_0x4039) == 1)
+ {
+ VarSet(VAR_0x4039, 0);
+ VarSet(VAR_0x4037, 0);
+ }
+}
+
+static void sub_8084788(void)
+{
+ FlagClear(FLAG_SYS_SAFARI_MODE);
+ ChooseAmbientCrySpecies();
+ ResetCyclingRoadChallengeData();
+ UpdateLocationHistoryForRoamer();
+ RoamerMoveToOtherLocationSet();
+}
+
+void ResetGameStats(void)
+{
+ s32 i;
+
+ for (i = 0; i < NUM_GAME_STATS; i++)
+ SetGameStat(i, 0);
+}
+
+void IncrementGameStat(u8 index)
+{
+ if (index < NUM_USED_GAME_STATS)
+ {
+ u32 statVal = GetGameStat(index);
+ if (statVal < 0xFFFFFF)
+ statVal++;
+ else
+ statVal = 0xFFFFFF;
+
+ SetGameStat(index, statVal);
+ }
+}
+
+u32 GetGameStat(u8 index)
+{
+ if (index >= NUM_USED_GAME_STATS)
+ return 0;
+
+ return gSaveBlock1Ptr->gameStats[index] ^ gSaveBlock2Ptr->encryptionKey;
+}
+
+void SetGameStat(u8 index, u32 value)
+{
+ if (index < NUM_USED_GAME_STATS)
+ gSaveBlock1Ptr->gameStats[index] = value ^ gSaveBlock2Ptr->encryptionKey;
+}
+
+void ApplyNewEncryptionKeyToGameStats(u32 newKey)
+{
+ u8 i;
+
+ for (i = 0; i < NUM_GAME_STATS; i++)
+ ApplyNewEncryptionKeyToWord(&gSaveBlock1Ptr->gameStats[i], newKey);
+}
+
+void LoadMapObjTemplatesFromHeader(void)
+{
+ // Clear map object templates
+ CpuFill32(0, gSaveBlock1Ptr->mapObjectTemplates, sizeof(gSaveBlock1Ptr->mapObjectTemplates));
+
+ // Copy map header events to save block
+ CpuCopy32(gMapHeader.events->mapObjects,
+ gSaveBlock1Ptr->mapObjectTemplates,
+ gMapHeader.events->mapObjectCount * sizeof(struct MapObjectTemplate));
+}
+
+void LoadSaveblockMapObjScripts(void)
+{
+ struct MapObjectTemplate *mapHeaderObjTemplates = gMapHeader.events->mapObjects;
+ struct MapObjectTemplate *savObjTemplates = gSaveBlock1Ptr->mapObjectTemplates;
+ s32 i;
+
+ for (i = 0; i < 64; i++)
+ savObjTemplates[i].script = mapHeaderObjTemplates[i].script;
+}
+
+void Overworld_SetMapObjTemplateCoords(u8 localId, s16 x, s16 y)
+{
+ s32 i;
+ struct MapObjectTemplate *savObjTemplates = gSaveBlock1Ptr->mapObjectTemplates;
+
+ for (i = 0; i < 64; i++)
+ {
+ struct MapObjectTemplate *mapObjectTemplate = &savObjTemplates[i];
+ if (mapObjectTemplate->localId == localId)
+ {
+ mapObjectTemplate->x = x;
+ mapObjectTemplate->y = y;
+ return;
+ }
+ }
+}
+
+void Overworld_SetMapObjTemplateMovementType(u8 localId, u8 movementType)
+{
+ s32 i;
+
+ struct MapObjectTemplate *savObjTemplates = gSaveBlock1Ptr->mapObjectTemplates;
+ for (i = 0; i < 64; i++)
+ {
+ struct MapObjectTemplate *mapObjectTemplate = &savObjTemplates[i];
+ if (mapObjectTemplate->localId == localId)
+ {
+ mapObjectTemplate->movementType = movementType;
+ return;
+ }
+ }
+}
+
+static void mapdata_load_assets_to_gpu_and_full_redraw(void)
+{
+ move_tilemap_camera_to_upper_left_corner();
+ copy_map_tileset1_tileset2_to_vram(gMapHeader.mapData);
+ apply_map_tileset1_tileset2_palette(gMapHeader.mapData);
+ DrawWholeMapView();
+ cur_mapheader_run_tileset_funcs_after_some_cpuset();
+}
+
+const struct MapData *get_mapdata_header(void)
+{
+ u16 mapDataId = gSaveBlock1Ptr->mapDataId;
+ if (mapDataId)
+ return gMapAttributes[mapDataId - 1];
+ return NULL;
+}
+
+void ApplyCurrentWarp(void)
+{
+ gUnknown_020322DC = gSaveBlock1Ptr->location;
+ gSaveBlock1Ptr->location = sWarpDestination;
+ sUnknown_020322EC = sDummyWarpData;
+ sUnknown_020322F4 = sDummyWarpData;
+}
+
+void set_warp2_warp3_to_neg_1(void)
+{
+ sUnknown_020322EC = sDummyWarpData;
+ sUnknown_020322F4 = sDummyWarpData;
+}
+
+void SetWarpData(struct WarpData *warp, s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
+{
+ warp->mapGroup = mapGroup;
+ warp->mapNum = mapNum;
+ warp->warpId = warpId;
+ warp->x = x;
+ warp->y = y;
+}
+
+bool32 warp_data_is_not_neg_1(struct WarpData *warp)
+{
+ if (warp->mapGroup != -1)
+ return FALSE;
+ else if (warp->mapNum != -1)
+ return FALSE;
+ else if (warp->warpId != -1)
+ return FALSE;
+ else if (warp->x != -1)
+ return FALSE;
+ else if (warp->y != -1)
+ return FALSE;
+ else
+ return TRUE;
+}
+
+struct MapHeader const *const Overworld_GetMapHeaderByGroupAndId(u16 mapGroup, u16 mapNum)
+{
+ return gMapGroups[mapGroup][mapNum];
+}
+
+struct MapHeader const *const warp1_get_mapheader(void)
+{
+ return Overworld_GetMapHeaderByGroupAndId(sWarpDestination.mapGroup, sWarpDestination.mapNum);
+}
+
+void set_current_map_header_from_sav1_save_old_name(void)
+{
+ sLastMapSectionId = gMapHeader.regionMapSectionId;
+ gMapHeader = *Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum);
+ gSaveBlock1Ptr->mapDataId = gMapHeader.mapDataId;
+ gMapHeader.mapData = get_mapdata_header();
+}
+
+void LoadSaveblockMapHeader(void)
+{
+ gMapHeader = *Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum);
+ gMapHeader.mapData = get_mapdata_header();
+}
+
+void update_camera_pos_from_warpid(void)
+{
+ if (gSaveBlock1Ptr->location.warpId >= 0 && gSaveBlock1Ptr->location.warpId < gMapHeader.events->warpCount)
+ {
+ gSaveBlock1Ptr->pos.x = gMapHeader.events->warps[gSaveBlock1Ptr->location.warpId].x;
+ gSaveBlock1Ptr->pos.y = gMapHeader.events->warps[gSaveBlock1Ptr->location.warpId].y;
+ }
+ else if (gSaveBlock1Ptr->location.x >= 0 && gSaveBlock1Ptr->location.y >= 0)
+ {
+ gSaveBlock1Ptr->pos.x = gSaveBlock1Ptr->location.x;
+ gSaveBlock1Ptr->pos.y = gSaveBlock1Ptr->location.y;
+ }
+ else
+ {
+ gSaveBlock1Ptr->pos.x = gMapHeader.mapData->width / 2;
+ gSaveBlock1Ptr->pos.y = gMapHeader.mapData->height / 2;
+ }
+}
+
+void warp_in(void)
+{
+ ApplyCurrentWarp();
+ set_current_map_header_from_sav1_save_old_name();
+ update_camera_pos_from_warpid();
+}
+
+void Overworld_SetWarpDestination(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
+{
+ SetWarpData(&sWarpDestination, mapGroup, mapNum, warpId, x, y);
+}
+
+void warp1_set_2(s8 mapGroup, s8 mapNum, s8 warpId)
+{
+ Overworld_SetWarpDestination(mapGroup, mapNum, warpId, -1, -1);
+}
+
+void saved_warp2_set(s32 unused, s8 mapGroup, s8 mapNum, s8 warpId)
+{
+ SetWarpData(&gSaveBlock1Ptr->warp2, mapGroup, mapNum, warpId, gSaveBlock1Ptr->pos.x, gSaveBlock1Ptr->pos.y);
+}
+
+void saved_warp2_set_2(s32 unused, s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
+{
+ SetWarpData(&gSaveBlock1Ptr->warp2, mapGroup, mapNum, warpId, x, y);
+}
+
+void copy_saved_warp2_bank_and_enter_x_to_warp1(u8 unused)
+{
+ sWarpDestination = gSaveBlock1Ptr->warp2;
+}
+
+void sub_8084CCC(u8 a1)
+{
+ const struct HealLocation *warp = GetHealLocationPointer(a1);
+
+ if (warp)
+ Overworld_SetWarpDestination(warp->group, warp->map, -1, warp->x, warp->y);
+}
+
+void Overworld_SetWarpDestToLastHealLoc(void)
+{
+ sWarpDestination = gSaveBlock1Ptr->lastHealLocation;
+}
+
+void Overworld_SetHealLocationWarp(u8 healLocationId)
+{
+ const struct HealLocation *healLocation = GetHealLocationPointer(healLocationId);
+
+ if (healLocation != NULL)
+ SetWarpData(&gSaveBlock1Ptr->lastHealLocation, healLocation->group, healLocation->map, -1, healLocation->x, healLocation->y);
+}
+
+void sub_8084D5C(s16 a1, s16 a2)
+{
+ u8 currMapType = Overworld_GetMapTypeOfSaveblockLocation();
+ u8 destMapType = GetMapTypeByGroupAndId(sWarpDestination.mapGroup, sWarpDestination.mapNum);
+ if (is_map_type_1_2_3_5_or_6(currMapType) && is_map_type_1_2_3_5_or_6(destMapType) != TRUE)
+ sub_8084DD4(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1, a1 - 7, a2 - 6);
+}
+
+void sub_8084DD4(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
+{
+ SetWarpData(&gSaveBlock1Ptr->warp4, mapGroup, mapNum, warpId, x, y);
+}
+
+void sub_8084E14(void)
+{
+ sWarpDestination = gSaveBlock1Ptr->warp4;
+}
+
+void sub_8084E2C(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
+{
+ SetWarpData(&sUnknown_020322EC, mapGroup, mapNum, warpId, x, y);
+}
+
+void warp1_set_to_warp2(void)
+{
+ sWarpDestination = sUnknown_020322EC;
+}
+
+void sub_8084E80(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
+{
+ SetWarpData(&sUnknown_020322F4, mapGroup, mapNum, warpId, x, y);
+}
+
+void sub_8084EBC(s16 x, s16 y)
+{
+ if (warp_data_is_not_neg_1(&sUnknown_020322F4) == TRUE)
+ sWarpDestination = gUnknown_020322DC;
+ else
+ Overworld_SetWarpDestination(sUnknown_020322F4.mapGroup, sUnknown_020322F4.mapNum, -1, x, y);
+}
+
+void warp1_set_to_sav1w(void)
+{
+ sWarpDestination = gSaveBlock1Ptr->warp1;
+}
+
+void sub_8084F2C(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
+{
+ SetWarpData(&gSaveBlock1Ptr->warp1, mapGroup, mapNum, warpId, x, y);
+}
+
+void sub_8084F6C(u8 a1)
+{
+ const struct HealLocation *warp = GetHealLocationPointer(a1);
+ if (warp)
+ SetWarpData(&gSaveBlock1Ptr->warp1, warp->group, warp->map, -1, warp->x, warp->y);
+}
+
+void sub_8084FAC(void)
+{
+ gSaveBlock1Ptr->warp1 = gSaveBlock1Ptr->warp2;
+}
+
+const struct MapConnection *GetMapConnection(u8 dir)
+{
+ s32 i;
+ s32 count = gMapHeader.connections->count;
+ const struct MapConnection *connection = gMapHeader.connections->connections;
+
+ if (connection == NULL)
+ return NULL;
+
+ for(i = 0; i < count; i++, connection++)
+ if (connection->direction == dir)
+ return connection;
+
+ return NULL;
+}
+
+bool8 sub_8084FF8(u8 dir, u16 x, u16 y)
+{
+ const struct MapConnection *connection = GetMapConnection(dir);
+
+ if (connection != NULL)
+ {
+ Overworld_SetWarpDestination(connection->mapGroup, connection->mapNum, -1, x, y);
+ }
+ else
+ {
+ mapheader_run_script_with_tag_x6();
+ if (warp_data_is_not_neg_1(&sUnknown_020322EC))
+ return FALSE;
+ warp1_set_to_warp2();
+ }
+ return TRUE;
+}
+
+bool8 sub_8085058(u16 x, u16 y)
+{
+ return sub_8084FF8(CONNECTION_EMERGE, x, y);
+}
+
+bool8 sub_8085078(u16 x, u16 y)
+{
+ return sub_8084FF8(CONNECTION_DIVE, x, y);
+}
+
+void mliX_load_map(u8 mapGroup, u8 mapNum)
+{
+ s32 paletteIndex;
+
+ Overworld_SetWarpDestination(mapGroup, mapNum, -1, -1, -1);
+ if (gMapHeader.regionMapSectionId != 0x3A)
+ sub_8085810();
+
+ ApplyCurrentWarp();
+ set_current_map_header_from_sav1_save_old_name();
+ LoadMapObjTemplatesFromHeader();
+ TrySetMapSaveWarpStatus();
+ ClearTempFieldEventData();
+ ResetCyclingRoadChallengeData();
+ prev_quest_postbuffer_cursor_backup_reset();
+ TryUpdateRandomTrainerRematches(mapGroup, mapNum);
+ DoTimeBasedEvents();
+ SetSav1WeatherFromCurrMapHeader();
+ ChooseAmbientCrySpecies();
+ SetDefaultFlashLevel();
+ Overworld_ClearSavedMusic();
+ mapheader_run_script_with_tag_x3();
+ not_trainer_hill_battle_pyramid();
+ copy_map_tileset2_to_vram_2(gMapHeader.mapData);
+ apply_map_tileset2_palette(gMapHeader.mapData);
+
+ for (paletteIndex = 6; paletteIndex < 13; paletteIndex++)
+ ApplyWeatherGammaShiftToPal(paletteIndex);
+
+ sub_80A0A2C();
+ UpdateLocationHistoryForRoamer();
+ RoamerMove();
+ DoCurrentWeather();
+ ResetFieldTasksArgs();
+ mapheader_run_script_with_tag_x5();
+
+ if (gMapHeader.regionMapSectionId != 0x3A || gMapHeader.regionMapSectionId != sLastMapSectionId)
+ ShowMapNamePopup();
+}
+
+static void mli0_load_map(u32 a1)
+{
+ bool8 v2;
+ bool8 indoors;
+
+ set_current_map_header_from_sav1_save_old_name();
+ if (!(sUnknown_020322D8 & 1))
+ {
+ if (gMapHeader.mapDataId == 0x169)
+ sub_81AA1D8();
+ else if (InTrainerHill())
+ sub_81D5DF8();
+ else
+ LoadMapObjTemplatesFromHeader();
+ }
+
+ v2 = is_map_type_1_2_3_5_or_6(gMapHeader.mapType);
+ indoors = Overworld_MapTypeIsIndoors(gMapHeader.mapType);
+
+ sub_80EB218();
+ TrySetMapSaveWarpStatus();
+ ClearTempFieldEventData();
+ ResetCyclingRoadChallengeData();
+ prev_quest_postbuffer_cursor_backup_reset();
+ TryUpdateRandomTrainerRematches(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum);
+ if (a1 != 1)
+ DoTimeBasedEvents();
+ SetSav1WeatherFromCurrMapHeader();
+ ChooseAmbientCrySpecies();
+ if (v2)
+ FlagClear(FLAG_SYS_USE_FLASH);
+ SetDefaultFlashLevel();
+ Overworld_ClearSavedMusic();
+ mapheader_run_script_with_tag_x3();
+ UpdateLocationHistoryForRoamer();
+ RoamerMoveToOtherLocationSet();
+ if (gMapHeader.mapDataId == 0x169)
+ battle_pyramid_map_load_related(0);
+ else if (InTrainerHill())
+ trainer_hill_map_load_related();
+ else
+ not_trainer_hill_battle_pyramid();
+
+ if (a1 != 1 && indoors)
+ {
+ UpdateTVScreensOnMap(gUnknown_03005DC0.width, gUnknown_03005DC0.height);
+ sub_80E9238(1);
+ }
+}
+
+void player_avatar_init_params_reset(void)
+{
+ sUnknown_02032300.player_field_1 = 1;
+ sUnknown_02032300.player_field_0 = 1;
+}
+
+void walkrun_find_lowest_active_bit_in_bitfield(void)
+{
+ sUnknown_02032300.player_field_1 = player_get_direction_lower_nybble();
+
+ if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_MACH_BIKE))
+ sUnknown_02032300.player_field_0 = 2;
+ else if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_ACRO_BIKE))
+ sUnknown_02032300.player_field_0 = 4;
+ else if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING))
+ sUnknown_02032300.player_field_0 = 8;
+ else if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_4))
+ sUnknown_02032300.player_field_0 = 16;
+ else
+ sUnknown_02032300.player_field_0 = 1;
+}
+
+static struct UnkPlayerStruct *sub_80852D4(void)
+{
+ struct UnkPlayerStruct playerStruct;
+ u8 mapType = Overworld_GetMapTypeOfSaveblockLocation();
+ u16 v2 = cur_mapdata_block_role_at_screen_center_acc_to_sav1();
+ u8 v4 = sub_808532C(&sUnknown_02032300, v2, mapType);
+ playerStruct.player_field_0 = v4;
+ playerStruct.player_field_1 = sub_808538C(&sUnknown_02032300, v4, v2, mapType);
+ sUnknown_02032300 = playerStruct;
+ return &sUnknown_02032300;
+}
+
+static u8 sub_808532C(struct UnkPlayerStruct *playerStruct, u16 a2, u8 a3)
+{
+ if (a3 != 8 && FlagGet(FLAG_SYS_CRUISE_MODE))
+ return 1;
+ else if (a3 == 5)
+ return 16;
+ else if (MetatileBehavior_IsSurfableWaterOrUnderwater(a2) == 1)
+ return 8;
+ else if (Overworld_IsBikingAllowed() != TRUE)
+ return 1;
+ else if (playerStruct->player_field_0 == 2)
+ return 2;
+ else if (playerStruct->player_field_0 != 4)
+ return 1;
+ else
+ return 4;
+}
+
+static u8 sub_808538C(struct UnkPlayerStruct *playerStruct, u8 a2, u16 a3, u8 a4)
+{
+ if (FlagGet(FLAG_SYS_CRUISE_MODE) && a4 == 6)
+ return 4;
+ else if (MetatileBehavior_IsDeepSouthWarp(a3) == TRUE)
+ return 2;
+ else if (MetatileBehavior_IsNonAnimDoor(a3) == TRUE || MetatileBehavior_IsDoor(a3) == TRUE)
+ return 1;
+ else if (MetatileBehavior_IsSouthArrowWarp(a3) == TRUE)
+ return 2;
+ else if (MetatileBehavior_IsNorthArrowWarp(a3) == TRUE)
+ return 1;
+ else if (MetatileBehavior_IsWestArrowWarp(a3) == TRUE)
+ return 4;
+ else if (MetatileBehavior_IsEastArrowWarp(a3) == TRUE)
+ return 3;
+ else if ((playerStruct->player_field_0 == 16 && a2 == 8)
+ || (playerStruct->player_field_0 == 8 && a2 == 16))
+ return playerStruct->player_field_1;
+ else if (MetatileBehavior_IsLadder(a3) == TRUE)
+ return playerStruct->player_field_1;
+ else
+ return 1;
+}
+
+static u16 cur_mapdata_block_role_at_screen_center_acc_to_sav1(void)
+{
+ return MapGridGetMetatileBehaviorAt(gSaveBlock1Ptr->pos.x + 7, gSaveBlock1Ptr->pos.y + 7);
+}
+
+bool32 Overworld_IsBikingAllowed(void)
+{
+ if (!(gMapHeader.flags & 1))
+ return FALSE;
+ else
+ return TRUE;
+}
+
+void SetDefaultFlashLevel(void)
+{
+ if (!gMapHeader.cave)
+ gSaveBlock1Ptr->flashLevel = 0;
+ else if (FlagGet(FLAG_SYS_USE_FLASH))
+ gSaveBlock1Ptr->flashLevel = 1;
+ else
+ gSaveBlock1Ptr->flashLevel = gMaxFlashLevel - 1;
+}
+
+void Overworld_SetFlashLevel(s32 flashLevel)
+{
+ if (flashLevel < 0 || flashLevel > gMaxFlashLevel)
+ flashLevel = 0;
+ gSaveBlock1Ptr->flashLevel = flashLevel;
+}
+
+u8 Overworld_GetFlashLevel(void)
+{
+ return gSaveBlock1Ptr->flashLevel;
+}
+
+void sub_8085524(u16 mapDataId)
+{
+ gSaveBlock1Ptr->mapDataId = mapDataId;
+ gMapHeader.mapData = get_mapdata_header();
+}
+
+void sub_8085540(u8 var)
+{
+ sUnknown_020322D8 = var;
+}
+
+u8 sub_808554C(void)
+{
+ return sUnknown_020322D8;
+}
+
+static bool16 ShouldLegendaryMusicPlayAtLocation(struct WarpData *warp)
+{
+ if (!FlagGet(FLAG_SYS_WEATHER_CTRL))
+ return FALSE;
+ if (warp->mapGroup == 0)
+ {
+ switch (warp->mapNum)
+ {
+ case MAP_NUM(LILYCOVE_CITY):
+ case MAP_NUM(MOSSDEEP_CITY):
+ case MAP_NUM(SOOTOPOLIS_CITY):
+ case MAP_NUM(EVER_GRANDE_CITY):
+ case MAP_NUM(ROUTE124):
+ case MAP_NUM(ROUTE125):
+ case MAP_NUM(ROUTE126):
+ case MAP_NUM(ROUTE127):
+ case MAP_NUM(ROUTE128):
+ return TRUE;
+ default:
+ if (VarGet(VAR_0x405E) < 4)
+ return FALSE;
+ switch (warp->mapNum)
+ {
+ case MAP_NUM(ROUTE129):
+ case MAP_NUM(ROUTE130):
+ case MAP_NUM(ROUTE131):
+ return TRUE;
+ }
+ }
+ }
+ return FALSE;
+}
+
+static bool16 NoMusicInSotopolisWithLegendaries(struct WarpData *warp)
+{
+ if (VarGet(VAR_0x40CA) != 1)
+ return FALSE;
+ else if (warp->mapGroup != MAP_GROUP(SOOTOPOLIS_CITY))
+ return FALSE;
+ else if (warp->mapNum == MAP_NUM(SOOTOPOLIS_CITY))
+ return TRUE;
+ else
+ return FALSE;
+}
+
+static bool16 IsInfiltratedWeatherInstitute(struct WarpData *warp)
+{
+ if (VarGet(VAR_WEATHER_INSTITUTE_STATE))
+ return FALSE;
+ else if (warp->mapGroup != MAP_GROUP(ROUTE119_WEATHER_INSTITUTE_1F))
+ return FALSE;
+ else if (warp->mapNum == MAP_NUM(ROUTE119_WEATHER_INSTITUTE_1F)
+ || warp->mapNum == MAP_NUM(ROUTE119_WEATHER_INSTITUTE_2F))
+ return TRUE;
+ else
+ return FALSE;
+}
+
+static bool16 IsInflitratedSpaceCenter(struct WarpData *warp)
+{
+ if (VarGet(VAR_0x405D) == 0)
+ return FALSE;
+ else if (VarGet(VAR_0x405D) > 2)
+ return FALSE;
+ else if (warp->mapGroup != MAP_GROUP(MOSSDEEP_CITY_SPACE_CENTER_1F))
+ return FALSE;
+ else if (warp->mapNum == MAP_NUM(MOSSDEEP_CITY_SPACE_CENTER_1F)
+ || warp->mapNum == MAP_NUM(MOSSDEEP_CITY_SPACE_CENTER_2F))
+ return TRUE;
+ return FALSE;
+}
+
+u16 GetLocationMusic(struct WarpData *warp)
+{
+ if (NoMusicInSotopolisWithLegendaries(warp) == TRUE)
+ return 0xFFFF;
+ else if (ShouldLegendaryMusicPlayAtLocation(warp) == TRUE)
+ return MUS_OOAME;
+ else if (IsInflitratedSpaceCenter(warp) == TRUE)
+ return MUS_MGM0;
+ else if (IsInfiltratedWeatherInstitute(warp) == TRUE)
+ return MUS_TOZAN;
+ else
+ return Overworld_GetMapHeaderByGroupAndId(warp->mapGroup, warp->mapNum)->music;
+}
+
+u16 GetCurrLocationDefaultMusic(void)
+{
+ u16 music;
+
+ // Play the desert music only when the sandstorm is active on Route 111.
+ if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(ROUTE111)
+ && gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE111)
+ && GetSav1Weather() == 8)
+ return MUS_ASHROAD;
+
+ music = GetLocationMusic(&gSaveBlock1Ptr->location);
+ if (music != 0x7FFF)
+ {
+ return music;
+ }
+ else
+ {
+ if (gSaveBlock1Ptr->pos.x < 24)
+ return MUS_DOORO_X1;
+ else
+ return MUS_GRANROAD;
+ }
+}
+
+u16 GetWarpDestinationMusic(void)
+{
+ u16 music = GetLocationMusic(&sWarpDestination);
+ if (music != 0x7FFF)
+ {
+ return music;
+ }
+ else
+ {
+ if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(MAUVILLE_CITY)
+ && gSaveBlock1Ptr->location.mapNum == MAP_NUM(MAUVILLE_CITY))
+ return MUS_DOORO_X1;
+ else
+ return MUS_GRANROAD;
+ }
+}
+
+void Overworld_ResetMapMusic(void)
+{
+ ResetMapMusic();
+}
+
+void Overworld_PlaySpecialMapMusic(void)
+{
+ u16 music = GetCurrLocationDefaultMusic();
+
+ if (music != MUS_OOAME && music != 0xFFFF)
+ {
+ if (gSaveBlock1Ptr->savedMusic)
+ music = gSaveBlock1Ptr->savedMusic;
+ else if (Overworld_GetMapTypeOfSaveblockLocation() == MAP_TYPE_UNDERWATER)
+ music = MUS_DEEPDEEP;
+ else if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING))
+ music = MUS_NAMINORI;
+ }
+
+ if (music != GetCurrentMapMusic())
+ PlayNewMapMusic(music);
+}
+
+void Overworld_SetSavedMusic(u16 songNum)
+{
+ gSaveBlock1Ptr->savedMusic = songNum;
+}
+
+void Overworld_ClearSavedMusic(void)
+{
+ gSaveBlock1Ptr->savedMusic = 0;
+}
+
+static void sub_8085810(void)
+{
+ if (FlagGet(FLAG_SPECIAL_FLAG_0x4001) != TRUE)
+ {
+ u16 newMusic = GetWarpDestinationMusic();
+ u16 currentMusic = GetCurrentMapMusic();
+ if (newMusic != MUS_OOAME && newMusic != 0xFFFF)
+ {
+ if (currentMusic == MUS_DEEPDEEP || currentMusic == MUS_NAMINORI)
+ return;
+ if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING))
+ newMusic = MUS_NAMINORI;
+ }
+ if (newMusic != currentMusic)
+ {
+ if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_MACH_BIKE | PLAYER_AVATAR_FLAG_ACRO_BIKE))
+ FadeOutAndFadeInNewMapMusic(newMusic, 4, 4);
+ else
+ FadeOutAndPlayNewMapMusic(newMusic, 8);
+ }
+ }
+}
+
+void Overworld_ChangeMusicToDefault(void)
+{
+ u16 currentMusic = GetCurrentMapMusic();
+ if (currentMusic != GetCurrLocationDefaultMusic())
+ FadeOutAndPlayNewMapMusic(GetCurrLocationDefaultMusic(), 8);
+}
+
+void Overworld_ChangeMusicTo(u16 newMusic)
+{
+ u16 currentMusic = GetCurrentMapMusic();
+ if (currentMusic != newMusic && currentMusic != MUS_OOAME)
+ FadeOutAndPlayNewMapMusic(newMusic, 8);
+}
+
+u8 GetMapMusicFadeoutSpeed(void)
+{
+ const struct MapHeader *mapHeader = warp1_get_mapheader();
+ if (Overworld_MapTypeIsIndoors(mapHeader->mapType) == TRUE)
+ return 2;
+ else
+ return 4;
+}
+
+void music_something(void)
+{
+ u16 currentMusic = GetCurrentMapMusic();
+ u16 warpMusic = GetWarpDestinationMusic();
+ if (FlagGet(FLAG_SPECIAL_FLAG_0x4001) != TRUE && warpMusic != GetCurrentMapMusic())
+ {
+ if (currentMusic == MUS_NAMINORI
+ && VarGet(VAR_0x40CA) == 2
+ && gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(SOOTOPOLIS_CITY)
+ && gSaveBlock1Ptr->location.mapNum == MAP_NUM(SOOTOPOLIS_CITY)
+ && sWarpDestination.mapGroup == MAP_GROUP(SOOTOPOLIS_CITY)
+ && sWarpDestination.mapNum == MAP_NUM(SOOTOPOLIS_CITY)
+ && sWarpDestination.x == 0x1D
+ && sWarpDestination.y == 0x35)
+ return;
+ FadeOutMapMusic(GetMapMusicFadeoutSpeed());
+ }
+}
+
+bool8 sub_80859A0(void)
+{
+ return IsNotWaitingForBGMStop();
+}
+
+void Overworld_FadeOutMapMusic(void)
+{
+ FadeOutMapMusic(4);
+}
+
+static void PlayAmbientCry(void)
+{
+ s16 x, y;
+ s8 pan;
+ s8 volume;
+
+ PlayerGetDestCoords(&x, &y);
+ if (sIsAmbientCryWaterMon == TRUE
+ && !MetatileBehavior_IsSurfableWaterOrUnderwater(MapGridGetMetatileBehaviorAt(x, y)))
+ return;
+ pan = (Random() % 88) + 212;
+ volume = (Random() % 30) + 50;
+ PlayCry2(sAmbientCrySpecies, pan, volume, 1);
+}
+
+void UpdateAmbientCry(s16 *state, u16 *delayCounter)
+{
+ u8 i, monsCount, divBy;
+
+ switch (*state)
+ {
+ case 0:
+ if (sAmbientCrySpecies == SPECIES_NONE)
+ *state = 4;
+ else
+ *state = 1;
+ break;
+ case 1:
+ *delayCounter = (Random() % 2400) + 1200;
+ *state = 3;
+ break;
+ case 2:
+ divBy = 1;
+ monsCount = CalculatePlayerPartyCount();
+ for (i = 0; i < monsCount; i++)
+ {
+ if (!GetMonData(&gPlayerParty[i], MON_DATA_SANITY_BIT3)
+ && GetMonAbility(&gPlayerParty[0]) == ABILITY_SWARM)
+ {
+ divBy = 2;
+ break;
+ }
+ }
+ *delayCounter = ((Random() % 1200) + 1200) / divBy;
+ *state = 3;
+ break;
+ case 3:
+ (*delayCounter)--;
+ if (*delayCounter == 0)
+ {
+ PlayAmbientCry();
+ *state = 2;
+ }
+ break;
+ case 4:
+ break;
+ }
+}
+
+static void ChooseAmbientCrySpecies(void)
+{
+ if ((gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(ROUTE130)
+ && gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE130))
+ && !IsMirageIslandPresent())
+ {
+ // Only play water pokemon cries on this route
+ // when Mirage Island is not present
+ sIsAmbientCryWaterMon = TRUE;
+ sAmbientCrySpecies = GetLocalWaterMon();
+ }
+ else
+ {
+ sAmbientCrySpecies = GetLocalWildMon(&sIsAmbientCryWaterMon);
+ }
+}
+
+u8 GetMapTypeByGroupAndId(s8 mapGroup, s8 mapNum)
+{
+ return Overworld_GetMapHeaderByGroupAndId(mapGroup, mapNum)->mapType;
+}
+
+u8 GetMapTypeByWarpData(struct WarpData *warp)
+{
+ return GetMapTypeByGroupAndId(warp->mapGroup, warp->mapNum);
+}
+
+u8 Overworld_GetMapTypeOfSaveblockLocation(void)
+{
+ return GetMapTypeByWarpData(&gSaveBlock1Ptr->location);
+}
+
+u8 get_map_light_from_warp0(void)
+{
+ return GetMapTypeByWarpData(&gUnknown_020322DC);
+}
+
+bool8 is_map_type_1_2_3_5_or_6(u8 mapType)
+{
+ if (mapType == MAP_TYPE_ROUTE
+ || mapType == MAP_TYPE_TOWN
+ || mapType == MAP_TYPE_UNDERWATER
+ || mapType == MAP_TYPE_CITY
+ || mapType == MAP_TYPE_6)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+bool8 Overworld_MapTypeAllowsTeleportAndFly(u8 mapType)
+{
+ if (mapType == MAP_TYPE_ROUTE
+ || mapType == MAP_TYPE_TOWN
+ || mapType == MAP_TYPE_6
+ || mapType == MAP_TYPE_CITY)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+bool8 Overworld_MapTypeIsIndoors(u8 mapType)
+{
+ if (mapType == MAP_TYPE_INDOOR
+ || mapType == MAP_TYPE_SECRET_BASE)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+u8 sav1_saved_warp2_map_get_name(void)
+{
+ return Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->warp2.mapGroup, gSaveBlock1Ptr->warp2.mapNum)->regionMapSectionId;
+}
+
+u8 sav1_map_get_name(void)
+{
+ return Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum)->regionMapSectionId;
+}
+
+u8 GetCurrentMapBattleScene(void)
+{
+ return Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum)->battleType;
+}
+
+static void overworld_bg_setup(void)
+{
+ InitBgsFromTemplates(0, gUnknown_08339DAC, ARRAY_COUNT(gUnknown_08339DAC));
+ SetBgAttribute(1, BG_CTRL_ATTR_PALETTEMODE, 1);
+ SetBgAttribute(2, BG_CTRL_ATTR_PALETTEMODE, 1);
+ SetBgAttribute(3, BG_CTRL_ATTR_PALETTEMODE, 1);
+ gBGTilemapBuffers2 = AllocZeroed(0x800);
+ gBGTilemapBuffers1 = AllocZeroed(0x800);
+ gBGTilemapBuffers3 = AllocZeroed(0x800);
+ SetBgTilemapBuffer(1, gBGTilemapBuffers2);
+ SetBgTilemapBuffer(2, gBGTilemapBuffers1);
+ SetBgTilemapBuffer(3, gBGTilemapBuffers3);
+ sub_81971D0();
+}
+
+void overworld_free_bg_tilemaps(void)
+{
+ sub_81BE72C();
+ sub_81971F4();
+ if (gBGTilemapBuffers3 != NULL)
+ FREE_AND_SET_NULL(gBGTilemapBuffers3);
+ if (gBGTilemapBuffers1 != NULL)
+ FREE_AND_SET_NULL(gBGTilemapBuffers1);
+ if (gBGTilemapBuffers2 != NULL)
+ FREE_AND_SET_NULL(gBGTilemapBuffers2);
+}
+
+static void ResetSafariZoneFlag_(void)
+{
+ ResetSafariZoneFlag();
+}
+
+bool32 is_c1_link_related_active(void)
+{
+ if (gMain.callback1 == c1_link_related)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+static void DoCB1_Overworld(u16 newKeys, u16 heldKeys)
+{
+ struct FieldInput inputStruct;
+
+ sub_808B578();
+ FieldClearPlayerInput(&inputStruct);
+ FieldGetPlayerInput(&inputStruct, newKeys, heldKeys);
+ if (!ScriptContext2_IsEnabled())
+ {
+ if (sub_809C014(&inputStruct) == 1)
+ {
+ ScriptContext2_Enable();
+ HideMapNamePopUpWindow();
+ }
+ else
+ {
+ player_step(inputStruct.dpadDirection, newKeys, heldKeys);
+ }
+ }
+}
+
+void CB1_Overworld(void)
+{
+ if (gMain.callback2 == CB2_Overworld)
+ DoCB1_Overworld(gMain.newKeys, gMain.heldKeys);
+}
+
+static void OverworldBasic(void)
+{
+ ScriptContext2_RunScript();
+ RunTasks();
+ AnimateSprites();
+ CameraUpdate();
+ UpdateCameraPanning();
+ BuildOamBuffer();
+ UpdatePaletteFade();
+ sub_80A0A38();
+ do_scheduled_bg_tilemap_copies_to_vram();
+}
+
+// This CB2 is used when starting
+void CB2_OverworldBasic(void)
+{
+ OverworldBasic();
+}
+
+void CB2_Overworld(void)
+{
+ bool32 fading = (gPaletteFade.active != 0);
+ if (fading)
+ SetVBlankCallback(NULL);
+ OverworldBasic();
+ if (fading)
+ SetFieldVBlankCallback();
+}
+
+void SetMainCallback1(MainCallback cb)
+{
+ gMain.callback1 = cb;
+}
+
+void sub_8085E94(void *a0)
+{
+ sUnknown_03000E0C = a0;
+}
+
+static bool8 map_post_load_hook_exec(void)
+{
+ if (gUnknown_03005DB0 != NULL)
+ {
+ if (!gUnknown_03005DB0())
+ {
+ return FALSE;
+ }
+ else
+ {
+ gUnknown_03005DB0 = NULL;
+ gFieldCallback = NULL;
+ }
+ }
+ else
+ {
+ if (gFieldCallback != NULL)
+ gFieldCallback();
+ else
+ mapldr_default();
+
+ gFieldCallback = NULL;
+ }
+
+ return TRUE;
+}
+
+void CB2_NewGame(void)
+{
+ FieldClearVBlankHBlankCallbacks();
+ StopMapMusic();
+ ResetSafariZoneFlag_();
+ NewGameInitData();
+ player_avatar_init_params_reset();
+ PlayTimeCounter_Start();
+ ScriptContext1_Init();
+ ScriptContext2_Disable();
+ gFieldCallback = ExecuteTruckSequence;
+ gUnknown_03005DB0 = NULL;
+ do_load_map_stuff_loop(&gMain.state);
+ SetFieldVBlankCallback();
+ SetMainCallback1(CB1_Overworld);
+ SetMainCallback2(CB2_Overworld);
+}
+
+void CB2_WhiteOut(void)
+{
+ u8 val;
+
+ if (++gMain.state >= 120)
+ {
+ FieldClearVBlankHBlankCallbacks();
+ StopMapMusic();
+ ResetSafariZoneFlag_();
+ DoWhiteOut();
+ player_avatar_init_params_reset();
+ ScriptContext1_Init();
+ ScriptContext2_Disable();
+ gFieldCallback = sub_80AF3C8;
+ val = 0;
+ do_load_map_stuff_loop(&val);
+ SetFieldVBlankCallback();
+ SetMainCallback1(CB1_Overworld);
+ SetMainCallback2(CB2_Overworld);
+ }
+}
+
+void CB2_LoadMap(void)
+{
+ FieldClearVBlankHBlankCallbacks();
+ ScriptContext1_Init();
+ ScriptContext2_Disable();
+ SetMainCallback1(NULL);
+ SetMainCallback2(c2_change_map);
+ gMain.savedCallback = CB2_LoadMap2;
+}
+
+static void CB2_LoadMap2(void)
+{
+ do_load_map_stuff_loop(&gMain.state);
+ SetFieldVBlankCallback();
+ SetMainCallback1(CB1_Overworld);
+ SetMainCallback2(CB2_Overworld);
+}
+
+void sub_8086024(void)
+{
+ if (!gMain.state)
+ {
+ FieldClearVBlankHBlankCallbacks();
+ ScriptContext1_Init();
+ ScriptContext2_Disable();
+ SetMainCallback1(NULL);
+ }
+ if (load_map_stuff(&gMain.state, 1))
+ {
+ SetFieldVBlankCallback();
+ SetMainCallback1(CB1_Overworld);
+ SetMainCallback2(CB2_Overworld);
+ }
+}
+
+void sub_8086074(void)
+{
+ FieldClearVBlankHBlankCallbacks();
+ gFieldCallback = sub_80AF314;
+ SetMainCallback2(c2_80567AC);
+}
+
+static void c2_80567AC(void)
+{
+ if (map_loading_iteration_3(&gMain.state))
+ {
+ SetFieldVBlankCallback();
+ SetMainCallback1(c1_link_related);
+ sub_8086C2C();
+ SetMainCallback2(CB2_Overworld);
+ }
+}
+
+void CB2_ReturnToField(void)
+{
+ if (is_c1_link_related_active() == TRUE)
+ {
+ SetMainCallback2(CB2_ReturnToFieldLink);
+ }
+ else
+ {
+ FieldClearVBlankHBlankCallbacks();
+ SetMainCallback2(CB2_ReturnToFieldLocal);
+ }
+}
+
+void CB2_ReturnToFieldLocal(void)
+{
+ if (sub_8086638(&gMain.state))
+ {
+ SetFieldVBlankCallback();
+ SetMainCallback2(CB2_Overworld);
+ }
+}
+
+void CB2_ReturnToFieldLink(void)
+{
+ if (!sub_8087598() && map_loading_iteration_2_link(&gMain.state))
+ SetMainCallback2(CB2_Overworld);
+}
+
+void c2_8056854(void)
+{
+ FieldClearVBlankHBlankCallbacks();
+ StopMapMusic();
+ SetMainCallback1(c1_link_related);
+ sub_8086C2C();
+
+ if (gWirelessCommType != 0)
+ gFieldCallback = sub_80AF314;
+ else
+ gFieldCallback = sub_80AF214;
+
+ ScriptContext1_Init();
+ ScriptContext2_Disable();
+ CB2_ReturnToField();
+}
+
+void CB2_ReturnToFieldWithOpenMenu(void)
+{
+ FieldClearVBlankHBlankCallbacks();
+ gUnknown_03005DB0 = sub_80AF6A4;
+ CB2_ReturnToField();
+}
+
+void sub_80861B0(void)
+{
+ FieldClearVBlankHBlankCallbacks();
+ gFieldCallback = sub_80AF188;
+ CB2_ReturnToField();
+}
+
+void CB2_ReturnToFieldContinueScript(void)
+{
+ FieldClearVBlankHBlankCallbacks();
+ gFieldCallback = sub_80AF168;
+ CB2_ReturnToField();
+}
+
+void sub_80861E8(void)
+{
+ FieldClearVBlankHBlankCallbacks();
+ gFieldCallback = sub_80AF3C8;
+ CB2_ReturnToField();
+}
+
+static void sub_8086204(void)
+{
+ if ((gMapHeader.flags & 0xF8) == 8 && sub_80E909C() == TRUE)
+ ShowMapNamePopup();
+ sub_80AF3C8();
+}
+
+void CB2_ContinueSavedGame(void)
+{
+ u8 trainerHillMapId;
+
+ FieldClearVBlankHBlankCallbacks();
+ StopMapMusic();
+ ResetSafariZoneFlag_();
+ if (gSaveFileStatus == 0xFF)
+ sub_81A3908();
+
+ LoadSaveblockMapHeader();
+ set_warp2_warp3_to_neg_1();
+ trainerHillMapId = GetCurrentTrainerHillMapId();
+ if (gMapHeader.mapDataId == 0x169)
+ sub_81AA2F8();
+ else if (trainerHillMapId != 0 && trainerHillMapId != 6)
+ sub_81D5F48();
+ else
+ LoadSaveblockMapObjScripts();
+
+ UnfreezeMapObjects();
+ DoTimeBasedEvents();
+ sub_8084788();
+ if (gMapHeader.mapDataId == 0x169)
+ battle_pyramid_map_load_related(1);
+ else if (trainerHillMapId != 0)
+ trainer_hill_map_load_related();
+ else
+ sub_8087D74();
+
+ PlayTimeCounter_Start();
+ ScriptContext1_Init();
+ ScriptContext2_Disable();
+ sub_8195E10();
+ if (GetSecretBase2Field_9() == 1)
+ {
+ ClearSecretBase2Field_9();
+ warp1_set_to_sav1w();
+ warp_in();
+ sub_80EDB44();
+ SetMainCallback2(CB2_LoadMap);
+ }
+ else
+ {
+ sub_80EDB44();
+ gFieldCallback = sub_8086204;
+ SetMainCallback1(CB1_Overworld);
+ CB2_ReturnToField();
+ }
+}
+
+static void FieldClearVBlankHBlankCallbacks(void)
+{
+ if (warp0_in_pokecenter() == TRUE)
+ CloseLink();
+
+ if (gWirelessCommType != 0)
+ {
+ EnableInterrupts(INTR_FLAG_VBLANK | INTR_FLAG_VCOUNT | INTR_FLAG_TIMER3 | INTR_FLAG_SERIAL);
+ DisableInterrupts(INTR_FLAG_HBLANK);
+ }
+ else
+ {
+ u16 savedIme = REG_IME;
+ REG_IME = 0;
+ REG_IE &= ~INTR_FLAG_HBLANK;
+ REG_IE |= INTR_FLAG_VBLANK;
+ REG_IME = savedIme;
+ }
+
+ SetVBlankCallback(NULL);
+ SetHBlankCallback(NULL);
+}
+
+static void SetFieldVBlankCallback(void)
+{
+ SetVBlankCallback(VBlankCB_Field);
+}
+
+static void VBlankCB_Field(void)
+{
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ ScanlineEffect_InitHBlankDmaTransfer();
+ FieldUpdateBgTilemapScroll();
+ TransferPlttBuffer();
+ TransferTilesetAnimsBuffer();
+}
+
+static void sub_80863B0(void)
+{
+ u8 val;
+
+ if (sub_81A9E6C())
+ {
+ door_upload_tiles();
+ ScanlineEffect_SetParams(gUnknown_08339DBC);
+ }
+ else if ((val = Overworld_GetFlashLevel()))
+ {
+ sub_80B00E8(val);
+ ScanlineEffect_SetParams(gUnknown_08339DBC);
+ }
+}
+
+static bool32 map_loading_iteration_3(u8 *state)
+{
+ switch (*state)
+ {
+ case 0:
+ overworld_bg_setup();
+ ScriptContext1_Init();
+ ScriptContext2_Disable();
+ sub_80867C8();
+ sub_80867D8();
+ (*state)++;
+ break;
+ case 1:
+ mli0_load_map(1);
+ (*state)++;
+ break;
+ case 2:
+ sub_8086988(TRUE);
+ (*state)++;
+ break;
+ case 3:
+ sub_8086AE4();
+ sub_80869DC();
+ sub_8086B14();
+ sub_8086AAC();
+ (*state)++;
+ break;
+ case 4:
+ sub_80863B0();
+ map_loading_lcd_reset();
+ sub_8197200();
+ (*state)++;
+ break;
+ case 5:
+ move_tilemap_camera_to_upper_left_corner();
+ (*state)++;
+ break;
+ case 6:
+ copy_map_tileset1_to_vram(gMapHeader.mapData);
+ (*state)++;
+ break;
+ case 7:
+ copy_map_tileset2_to_vram(gMapHeader.mapData);
+ (*state)++;
+ break;
+ case 8:
+ if (free_temp_tile_data_buffers_if_possible() != TRUE)
+ {
+ apply_map_tileset1_tileset2_palette(gMapHeader.mapData);
+ (*state)++;
+ }
+ break;
+ case 9:
+ DrawWholeMapView();
+ (*state)++;
+ break;
+ case 10:
+ cur_mapheader_run_tileset_funcs_after_some_cpuset();
+ (*state)++;
+ break;
+ case 11:
+ if (gWirelessCommType != 0)
+ {
+ sub_800E0E8();
+ CreateWirelessStatusIndicatorSprite(0, 0);
+ }
+ (*state)++;
+ break;
+ case 12:
+ if (map_post_load_hook_exec())
+ (*state)++;
+ break;
+ case 13:
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static bool32 load_map_stuff(u8 *state, u32 a2)
+{
+ switch (*state)
+ {
+ case 0:
+ FieldClearVBlankHBlankCallbacks();
+ mli0_load_map(a2);
+ (*state)++;
+ break;
+ case 1:
+ sub_80867C8();
+ sub_80867D8();
+ (*state)++;
+ break;
+ case 2:
+ sub_8086988(a2);
+ (*state)++;
+ break;
+ case 3:
+ mli4_mapscripts_and_other();
+ sub_8086A80();
+ (*state)++;
+ break;
+ case 4:
+ sub_80863B0();
+ map_loading_lcd_reset();
+ sub_8197200();
+ (*state)++;
+ break;
+ case 5:
+ move_tilemap_camera_to_upper_left_corner();
+ (*state)++;
+ break;
+ case 6:
+ copy_map_tileset1_to_vram(gMapHeader.mapData);
+ (*state)++;
+ break;
+ case 7:
+ copy_map_tileset2_to_vram(gMapHeader.mapData);
+ (*state)++;
+ break;
+ case 8:
+ if (free_temp_tile_data_buffers_if_possible() != TRUE)
+ {
+ apply_map_tileset1_tileset2_palette(gMapHeader.mapData);
+ (*state)++;
+ }
+ break;
+ case 9:
+ DrawWholeMapView();
+ (*state)++;
+ break;
+ case 10:
+ cur_mapheader_run_tileset_funcs_after_some_cpuset();
+ (*state)++;
+ break;
+ case 11:
+ if ((gMapHeader.flags & 0xF8) == 8 && sub_80E909C() == 1)
+ ShowMapNamePopup();
+ (*state)++;
+ break;
+ case 12:
+ if (map_post_load_hook_exec())
+ (*state)++;
+ break;
+ case 13:
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static bool32 sub_8086638(u8 *state)
+{
+ switch (*state)
+ {
+ case 0:
+ sub_80867C8();
+ sub_80867D8();
+ sub_8086988(0);
+ sub_8086A68();
+ sub_8086A80();
+ (*state)++;
+ break;
+ case 1:
+ sub_8086860();
+ sub_81D64C0();
+ (*state)++;
+ break;
+ case 2:
+ if (map_post_load_hook_exec())
+ (*state)++;
+ break;
+ case 3:
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static bool32 map_loading_iteration_2_link(u8 *state)
+{
+ switch (*state)
+ {
+ case 0:
+ FieldClearVBlankHBlankCallbacks();
+ sub_80867C8();
+ sub_80867D8();
+ (*state)++;
+ break;
+ case 1:
+ sub_8086988(1);
+ (*state)++;
+ break;
+ case 2:
+ sub_8086B9C();
+ sub_8086A68();
+ sub_8086AC8();
+ (*state)++;
+ break;
+ case 3:
+ sub_80863B0();
+ map_loading_lcd_reset();
+ sub_8197200();
+ (*state)++;
+ break;
+ case 4:
+ move_tilemap_camera_to_upper_left_corner();
+ (*state)++;
+ break;
+ case 5:
+ copy_map_tileset1_to_vram(gMapHeader.mapData);
+ (*state)++;
+ break;
+ case 6:
+ copy_map_tileset2_to_vram(gMapHeader.mapData);
+ (*state)++;
+ break;
+ case 7:
+ if (free_temp_tile_data_buffers_if_possible() != TRUE)
+ {
+ apply_map_tileset1_tileset2_palette(gMapHeader.mapData);
+ (*state)++;
+ }
+ break;
+ case 8:
+ DrawWholeMapView();
+ (*state)++;
+ break;
+ case 9:
+ cur_mapheader_run_tileset_funcs_after_some_cpuset();
+ (*state)++;
+ break;
+ case 11:
+ if (gWirelessCommType != 0)
+ {
+ sub_800E0E8();
+ CreateWirelessStatusIndicatorSprite(0, 0);
+ }
+ (*state)++;
+ break;
+ case 12:
+ if (map_post_load_hook_exec())
+ (*state)++;
+ break;
+ case 10:
+ (*state)++;
+ break;
+ case 13:
+ SetFieldVBlankCallback();
+ (*state)++;
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static void do_load_map_stuff_loop(u8 *state)
+{
+ while (!load_map_stuff(state, 0));
+}
+
+static void sub_80867C8(void)
+{
+ sub_81BE6AC();
+ MoveSaveBlocks_ResetHeap();
+}
+
+static void sub_80867D8(void)
+{
+ SetGpuReg(REG_OFFSET_DISPCNT, 0);
+ ScanlineEffect_Stop();
+
+ DmaClear16(3, PLTT + 2, PLTT_SIZE - 2);
+ DmaFillLarge16(3, 0, (void *)(VRAM + 0x0), 0x18000, 0x1000);
+ ResetOamRange(0, 128);
+ LoadOam();
+}
+
+static void sub_8086860(void)
+{
+ sub_80863B0();
+ map_loading_lcd_reset();
+ sub_8197200();
+ mapdata_load_assets_to_gpu_and_full_redraw();
+}
+
+static void map_loading_lcd_reset(void)
+{
+ clear_scheduled_bg_copies_to_vram();
+ reset_temp_tile_data_buffers();
+ SetGpuReg(REG_OFFSET_MOSAIC, 0);
+ SetGpuReg(REG_OFFSET_WININ, 0x1F1F);
+ SetGpuReg(REG_OFFSET_WINOUT, 0x101);
+ SetGpuReg(REG_OFFSET_WIN0H, 0xFF);
+ SetGpuReg(REG_OFFSET_WIN0V, 0xFF);
+ SetGpuReg(REG_OFFSET_WIN1H, 0xFFFF);
+ SetGpuReg(REG_OFFSET_WIN1V, 0xFFFF);
+ SetGpuReg(REG_OFFSET_BLDCNT, gUnknown_82EC7C4[1] | gUnknown_82EC7C4[2] | gUnknown_82EC7C4[3]
+ | BLDCNT_TGT2_OBJ | BLDCNT_EFFECT_BLEND);
+ SetGpuReg(REG_OFFSET_BLDALPHA, BLDALPHA_BLEND(13, 7));
+ overworld_bg_setup();
+ schedule_bg_copy_tilemap_to_vram(1);
+ schedule_bg_copy_tilemap_to_vram(2);
+ schedule_bg_copy_tilemap_to_vram(3);
+ ChangeBgX(0, 0, 0);
+ ChangeBgY(0, 0, 0);
+ ChangeBgX(1, 0, 0);
+ ChangeBgY(1, 0, 0);
+ ChangeBgX(2, 0, 0);
+ ChangeBgY(2, 0, 0);
+ ChangeBgX(3, 0, 0);
+ ChangeBgY(3, 0, 0);
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_OBJ_ON | DISPCNT_WIN0_ON | DISPCNT_WIN1_ON
+ | DISPCNT_OBJ_1D_MAP | DISPCNT_HBLANK_INTERVAL);
+ ShowBg(0);
+ ShowBg(1);
+ ShowBg(2);
+ ShowBg(3);
+ sub_8098128();
+}
+
+static void sub_8086988(u32 a1)
+{
+ ResetTasks();
+ ResetSpriteData();
+ ResetPaletteFade();
+ ScanlineEffect_Clear();
+ dp13_810BB8C();
+ ResetCameraUpdateInfo();
+ InstallCameraPanAheadCallback();
+ if (!a1)
+ npc_paltag_set_load(0);
+ else
+ npc_paltag_set_load(1);
+
+ FieldEffectActiveListClear();
+ sub_80AAFA4();
+ sub_80AEE84();
+ if (!a1)
+ SetUpFieldTasks();
+ mapheader_run_script_with_tag_x5();
+ sub_81BE6B8();
+}
+
+static void sub_80869DC(void)
+{
+ gUnknown_03005DEC = 0;
+ gUnknown_03005DE8 = 0;
+ sub_808D438();
+ SpawnFieldObjectsInView(0, 0);
+ mapheader_run_first_tag4_script_list_match();
+}
+
+static void mli4_mapscripts_and_other(void)
+{
+ s16 x, y;
+ struct UnkPlayerStruct *player;
+
+ gUnknown_03005DEC = 0;
+ gUnknown_03005DE8 = 0;
+ sub_808D438();
+ sav1_camera_get_focus_coords(&x, &y);
+ player = sub_80852D4();
+ InitPlayerAvatar(x, y, player->player_field_1, gSaveBlock2Ptr->playerGender);
+ SetPlayerAvatarTransitionFlags(player->player_field_0);
+ player_avatar_init_params_reset();
+ SpawnFieldObjectsInView(0, 0);
+ mapheader_run_first_tag4_script_list_match();
+}
+
+static void sub_8086A68(void)
+{
+ sub_808E16C(0, 0);
+ RotatingGate_InitPuzzleAndGraphics();
+ mapheader_run_script_with_tag_x7();
+}
+
+static void sub_8086A80(void)
+{
+ gMapObjects[gPlayerAvatar.mapObjectId].mapobj_bit_15 = 1;
+ InitCameraUpdateCallback(gPlayerAvatar.spriteId);
+}
+
+static void sub_8086AAC(void)
+{
+ InitCameraUpdateCallback(sub_8087858(gUnknown_03005DB4));
+}
+
+static void sub_8086AC8(void)
+{
+ InitCameraUpdateCallback(sub_8087858(gUnknown_03005DB4));
+}
+
+static void sub_8086AE4(void)
+{
+ u16 x, y;
+ sav1_camera_get_focus_coords(&x, &y);
+ sub_8088B3C(x + gUnknown_03005DB4, y);
+}
+
+static void sub_8086B14(void)
+{
+ u16 i;
+ u16 x, y;
+
+ sav1_camera_get_focus_coords(&x, &y);
+ x -= gUnknown_03005DB4;
+
+ for (i = 0; i < gFieldLinkPlayerCount; i++)
+ {
+ SpawnLinkPlayerMapObject(i, i + x, y, gLinkPlayers[i].gender);
+ CreateLinkPlayerSprite(i, gLinkPlayers[i].version);
+ }
+
+ sub_8086C40();
+}
+
+static void sub_8086B9C(void)
+{
+ u16 i;
+ for (i = 0; i < gFieldLinkPlayerCount; i++)
+ CreateLinkPlayerSprite(i, gLinkPlayers[i].version);
+}
+
+static void c1_link_related(void)
+{
+ if (gWirelessCommType == 0 || !sub_800F0B8() || !sub_8009F3C())
+ {
+ u8 var = gUnknown_03005DB4;
+ sub_8086F38(gLinkPartnersHeldKeys, var);
+ sub_8086FA0(sUnknown_03000E14(var));
+ sub_8086C40();
+ }
+}
+
+void sub_8086C2C(void)
+{
+ sub_8086C90();
+ c1_link_related_func_set(sub_80870B0);
+}
+
+static void sub_8086C40(void)
+{
+ sub_808709C(gLinkPartnersHeldKeys);
+}
+
+static void c1_link_related_func_set(u16 (*func)(u32))
+{
+ sUnknown_03000E19 = 0;
+ sUnknown_03000E14 = func;
+}
+
+static void sub_8086C64(void)
+{
+ if (gWirelessCommType != 0 && ++sUnknown_03000E19 > 60)
+ sub_8010198();
+}
+
+static void sub_8086C90(void)
+{
+ s32 i;
+ for (i = 0; i < 4; i++)
+ sUnknown_03000E10[i] = 0x80;
+}
+
+static bool32 sub_8086CA8(u16 a1)
+{
+ s32 i;
+ s32 count = gFieldLinkPlayerCount;
+
+ for (i = 0; i < count; i++)
+ if (sUnknown_03000E10[i] != a1)
+ return FALSE;
+ return TRUE;
+}
+
+static bool32 sub_8086CE0(u16 a1)
+{
+ s32 i;
+ s32 count = gFieldLinkPlayerCount;
+
+ for (i = 0; i < count; i++)
+ if (sUnknown_03000E10[i] == a1)
+ return TRUE;
+ return FALSE;
+}
+
+static void sub_8086D18(u32 a1, u16 a2, struct UnkStruct_8054FF8 *a3, u16 *a4)
+{
+ const u8 *script;
+
+ if (sUnknown_03000E10[a1] == 0x80)
+ {
+ script = sub_8087370(a3);
+ if (script)
+ {
+ *a4 = sub_8087480(script);
+ sUnknown_03000E10[a1] = 0x81;
+ if (a3->b)
+ {
+ c1_link_related_func_set(sub_80870F8);
+ sub_8087530(script);
+ }
+ return;
+ }
+ if (sub_8086CE0(0x83) == 1)
+ {
+ sUnknown_03000E10[a1] = 0x81;
+ if (a3->b)
+ {
+ c1_link_related_func_set(sub_80870F8);
+ sub_8087584();
+ }
+ return;
+ }
+ switch (a2)
+ {
+ case 24:
+ if (sub_8087358(a3))
+ {
+ sUnknown_03000E10[a1] = 0x81;
+ if (a3->b)
+ {
+ c1_link_related_func_set(sub_80870F8);
+ sub_808751C();
+ }
+ }
+ break;
+ case 18:
+ if (sub_8087388(a3) == TRUE)
+ {
+ sUnknown_03000E10[a1] = 0x81;
+ if (a3->b)
+ {
+ c1_link_related_func_set(sub_80870F8);
+ sub_808754C();
+ }
+ }
+ break;
+ case 25:
+ script = sub_80873B4(a3);
+ if (script)
+ {
+ sUnknown_03000E10[a1] = 0x81;
+ if (a3->b)
+ {
+ c1_link_related_func_set(sub_80870F8);
+ sub_8087568(script);
+ }
+ }
+ break;
+ case 27:
+ if (sub_8087340(a3))
+ {
+ sUnknown_03000E10[a1] = 0x81;
+ if (a3->b)
+ {
+ c1_link_related_func_set(sub_808711C);
+ sub_8087510();
+ }
+ }
+ break;
+ case 28:
+ if (sub_8087340(a3))
+ {
+ sUnknown_03000E10[a1] = 0x81;
+ if (a3->b)
+ {
+ c1_link_related_func_set(sub_8087140);
+ sub_8087510();
+ }
+ }
+ break;
+ }
+ }
+
+ switch (a2)
+ {
+ case 23:
+ sUnknown_03000E10[a1] = 0x83;
+ break;
+ case 22:
+ sUnknown_03000E10[a1] = 0x82;
+ break;
+ case 26:
+ sUnknown_03000E10[a1] = 0x80;
+ if (a3->b)
+ c1_link_related_func_set(sub_80870B0);
+ break;
+ case 29:
+ if (sUnknown_03000E10[a1] == 0x82)
+ sUnknown_03000E10[a1] = 0x81;
+ break;
+ }
+}
+
+static void sub_8086F38(u16 *a1, s32 a2)
+{
+ struct UnkStruct_8054FF8 st;
+ s32 i;
+
+ for (i = 0; i < 4; i++)
+ {
+ u8 v5 = a1[i];
+ u16 v8 = 0;
+ sub_80872D8(i, a2, &st);
+ sub_8086D18(i, v5, &st, &v8);
+ if (sUnknown_03000E10[i] == 0x80)
+ v8 = sub_8087068(v5);
+ sub_808796C(i, v8);
+ }
+}
+
+static void sub_8086FA0(u16 a1)
+{
+ if (a1 >= 17 && a1 < 30)
+ gUnknown_03005DA8 = a1;
+ else
+ gUnknown_03005DA8 = 17;
+
+ if (gWirelessCommType != 0
+ && sub_8087690() > 1
+ && is_c1_link_related_active() == TRUE
+ && sub_8009F3C() == TRUE)
+ {
+ switch (a1)
+ {
+ case 17:
+ case 18:
+ case 19:
+ case 20:
+ case 21:
+ case 24:
+ case 25:
+ gUnknown_03005DA8 = 0;
+ break;
+ }
+ }
+}
+
+static u16 sub_808700C(u32 a1)
+{
+ if (gMain.heldKeys & DPAD_UP)
+ return 19;
+ else if (gMain.heldKeys & DPAD_DOWN)
+ return 18;
+ else if (gMain.heldKeys & DPAD_LEFT)
+ return 20;
+ else if (gMain.heldKeys & DPAD_RIGHT)
+ return 21;
+ else if (gMain.newKeys & START_BUTTON)
+ return 24;
+ else if (gMain.newKeys & A_BUTTON)
+ return 25;
+ else
+ return 17;
+}
+
+static u16 sub_8087068(u16 a1)
+{
+ switch (a1)
+ {
+ case 21:
+ return 4;
+ case 20:
+ return 3;
+ case 19:
+ return 1;
+ case 18:
+ return 2;
+ default:
+ return 0;
+ }
+}
+
+static void sub_808709C(u16 *a1)
+{
+ s32 i;
+ for (i = 0; i < 4; i++)
+ a1[i] = 17;
+}
+
+static u16 sub_80870B0(u32 a1)
+{
+ if (ScriptContext2_IsEnabled() == 1)
+ return 17;
+ if (sub_800B4DC() > 4)
+ return 27;
+ if (sub_8087690() <= 4)
+ return sub_808700C(a1);
+ return 28;
+}
+
+static u16 sub_80870EC(u32 a1)
+{
+ sub_8086C64();
+ return 17;
+}
+
+static u16 sub_80870F8(u32 a1)
+{
+ u16 retVal;
+ if (ScriptContext2_IsEnabled() == TRUE)
+ {
+ retVal = 17;
+ }
+ else
+ {
+ retVal = 26;
+ c1_link_related_func_set(sub_80870EC);
+ }
+ return retVal;
+}
+
+static u16 sub_808711C(u32 a1)
+{
+ u16 retVal;
+ if (sub_800B4DC() > 2)
+ {
+ retVal = 17;
+ }
+ else
+ {
+ retVal = 26;
+ ScriptContext2_Disable();
+ c1_link_related_func_set(sub_80870EC);
+ }
+ return retVal;
+}
+
+static u16 sub_8087140(u32 a1)
+{
+ u16 retVal;
+ if (sub_8087690() > 2)
+ {
+ retVal = 17;
+ }
+ else
+ {
+ retVal = 26;
+ ScriptContext2_Disable();
+ c1_link_related_func_set(sub_80870EC);
+ }
+ return retVal;
+}
+
+static u16 sub_8087164(u32 a1)
+{
+ sub_8086C64();
+ return 17;
+}
+
+static u16 sub_8087170(u32 linkPlayerId)
+{
+ if (sUnknown_03000E10[linkPlayerId] == 0x82)
+ {
+ if (gMain.newKeys & B_BUTTON)
+ {
+ c1_link_related_func_set(sub_8087164);
+ return 29;
+ }
+ else
+ {
+ return 17;
+ }
+ }
+ else
+ {
+ sub_8086C64();
+ return 17;
+ }
+}
+
+static u16 sub_80871AC(u32 a1)
+{
+ c1_link_related_func_set(sub_8087170);
+ return 22;
+}
+
+static u16 sub_80871C0(u32 a1)
+{
+ return 17;
+}
+
+static u16 sub_80871C4(u32 a1)
+{
+ if (sUnknown_03000E10[a1] != 0x83)
+ sub_8086C64();
+ if (sub_8086CA8(0x83) == TRUE)
+ {
+ ScriptContext1_SetupScript(EventScript_277513);
+ c1_link_related_func_set(sub_80871C0);
+ }
+ return 17;
+}
+
+static u16 sub_80871FC(u32 a1)
+{
+ c1_link_related_func_set(sub_80871C4);
+ return 23;
+}
+
+static u16 sub_8087210(u32 a1)
+{
+ return 17;
+}
+
+u32 sub_8087214(void)
+{
+ if (sub_8086CE0(0x83) == TRUE)
+ return 2;
+ if (sUnknown_03000E14 == sub_8087170 && sUnknown_03000E10[gUnknown_03005DB4] != 0x82)
+ return 0;
+ if (sUnknown_03000E14 == sub_8087164 && sUnknown_03000E10[gUnknown_03005DB4] == 0x81)
+ return 2;
+ if (sub_8086CA8(0x82) != 0)
+ return 1;
+ return 0;
+}
+
+bool32 sub_808727C(void)
+{
+ return sub_8086CE0(0x83);
+}
+
+u16 sub_8087288(void)
+{
+ c1_link_related_func_set(sub_80871AC);
+ return 0;
+}
+
+u16 sub_808729C(void)
+{
+ c1_link_related_func_set(sub_80870F8);
+ return 0;
+}
+
+u16 sub_80872B0(void)
+{
+ c1_link_related_func_set(sub_80871FC);
+ return 0;
+}
+
+u16 sub_80872C4(void)
+{
+ c1_link_related_func_set(sub_8087210);
+ return 0;
+}
+
+static void sub_80872D8(s32 linkPlayerId, s32 a2, struct UnkStruct_8054FF8 *a3)
+{
+ s16 x, y;
+
+ a3->a = linkPlayerId;
+ a3->b = (linkPlayerId == a2) ? 1 : 0;
+ a3->c = gLinkPlayerMapObjects[linkPlayerId].mode;
+ a3->d = sub_80878A0(linkPlayerId);
+ sub_8087878(linkPlayerId, &x, &y);
+ a3->sub.x = x;
+ a3->sub.y = y;
+ a3->sub.height = sub_80878C0(linkPlayerId);
+ a3->field_C = MapGridGetMetatileBehaviorAt(x, y);
+}
+
+static bool32 sub_8087340(struct UnkStruct_8054FF8 *a1)
+{
+ u8 v1 = a1->c;
+ if (v1 == 2 || v1 == 0)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+static bool32 sub_8087358(struct UnkStruct_8054FF8 *a1)
+{
+ u8 v1 = a1->c;
+ if (v1 == 2 || v1 == 0)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+static u8 *sub_8087370(struct UnkStruct_8054FF8 *a1)
+{
+ if (a1->c != 2)
+ return 0;
+ return sub_809D0F4(&a1->sub);
+}
+
+static bool32 sub_8087388(struct UnkStruct_8054FF8 *a1)
+{
+ if (a1->c != 2 && a1->c != 0)
+ return FALSE;
+ else if (!MetatileBehavior_IsSouthArrowWarp(a1->field_C))
+ return FALSE;
+ else if (a1->d != 1)
+ return FALSE;
+ else
+ return TRUE;
+}
+
+static const u8 *sub_80873B4(struct UnkStruct_8054FF8 *a1)
+{
+ struct MapPosition unkStruct;
+ u8 linkPlayerId;
+
+ if (a1->c && a1->c != 2)
+ return 0;
+
+ unkStruct = a1->sub;
+ unkStruct.x += gUnknown_08339D64[a1->d].x;
+ unkStruct.y += gUnknown_08339D64[a1->d].y;
+ unkStruct.height = 0;
+ linkPlayerId = GetLinkPlayerIdAt(unkStruct.x, unkStruct.y);
+
+ if (linkPlayerId != 4)
+ {
+ if (!a1->b)
+ return EventScript_TradeRoom_TooBusyToNotice;
+ else if (sUnknown_03000E10[linkPlayerId] != 0x80)
+ return EventScript_TradeRoom_TooBusyToNotice;
+ else if (!sub_80B39D4(linkPlayerId))
+ return EventScript_TradeRoom_ReadTrainerCard1;
+ else
+ return EventScript_TradeRoom_ReadTrainerCard2;
+ }
+
+ return sub_809C2C8(&unkStruct, a1->field_C, a1->d);
+}
+
+static u16 sub_8087480(const u8 *script)
+{
+ if (script == gUnknown_08277388)
+ return 10;
+ else if (script == gUnknown_082773A3)
+ return 9;
+ else if (script == gUnknown_082773BE)
+ return 10;
+ else if (script == gUnknown_082773D9)
+ return 9;
+ else if (script == gUnknown_0827741D)
+ return 10;
+ else if (script == gUnknown_08277432)
+ return 9;
+ else if (script == gUnknown_08277447)
+ return 10;
+ else if (script == gUnknown_0827745C)
+ return 9;
+ else if (script == gUnknown_08277374)
+ return 10;
+ else if (script == gUnknown_0827737E)
+ return 9;
+ else if (script == gUnknown_082773F5)
+ return 10;
+ else if (script == gUnknown_082773FF)
+ return 9;
+ else
+ return 0;
+}
+
+static void sub_8087510(void)
+{
+ ScriptContext2_Enable();
+}
+
+static void sub_808751C(void)
+{
+ PlaySE(SE_WIN_OPEN);
+ ShowStartMenu();
+ ScriptContext2_Enable();
+}
+
+static void sub_8087530(const u8 *script)
+{
+ PlaySE(SE_SELECT);
+ ScriptContext1_SetupScript(script);
+ ScriptContext2_Enable();
+}
+
+static void sub_808754C(void)
+{
+ PlaySE(SE_WIN_OPEN);
+ ScriptContext1_SetupScript(gUnknown_082774EF);
+ ScriptContext2_Enable();
+}
+
+static void sub_8087568(const u8 *script)
+{
+ PlaySE(SE_SELECT);
+ ScriptContext1_SetupScript(script);
+ ScriptContext2_Enable();
+}
+
+static void sub_8087584(void)
+{
+ ScriptContext1_SetupScript(gUnknown_08277509);
+ ScriptContext2_Enable();
+}
+
+bool32 sub_8087598(void)
+{
+ if (!is_c1_link_related_active())
+ return 0;
+ if (sub_800B4DC() >= 3)
+ sUnknown_03000E18 = 1;
+ else
+ sUnknown_03000E18 = 0;
+ return sUnknown_03000E18;
+}
+
+bool32 sub_80875C8(void)
+{
+ u8 temp;
+
+ if (sub_800B4DC() < 2)
+ return FALSE;
+ else if (is_c1_link_related_active() != TRUE)
+ return FALSE;
+ else if (sub_8009F3C() != TRUE)
+ return FALSE;
+ else if (sUnknown_03000E14 == sub_808711C)
+ return TRUE;
+ else if (sUnknown_03000E14 != sub_80870F8)
+ return FALSE;
+
+ temp = sUnknown_03000E18;
+ sUnknown_03000E18 = 0;
+
+ if (temp == TRUE)
+ return TRUE;
+ else if (gPaletteFade.active && gPaletteFade.softwareFadeFinishing)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+bool32 sub_8087634(void)
+{
+ if (sub_8087690() < 2)
+ return FALSE;
+ else if (is_c1_link_related_active() != TRUE)
+ return FALSE;
+ else if (sub_8009F3C() != TRUE)
+ return FALSE;
+ else if (sUnknown_03000E14 == sub_8087140)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+bool32 sub_808766C(void)
+{
+ if (gWirelessCommType != 0)
+ return FALSE;
+ else if (!sub_8009F3C())
+ return FALSE;
+ else
+ return TRUE;
+}
+
+static u32 sub_8087690(void)
+{
+ if (gWirelessCommType != 0)
+ return gUnknown_03005000.unk_9e8.unk_232;
+ else
+ return gLink.sendQueue.count;
+}
+
+static void ZeroLinkPlayerMapObject(struct LinkPlayerMapObject *linkPlayerMapObj)
+{
+ memset(linkPlayerMapObj, 0, sizeof(struct LinkPlayerMapObject));
+}
+
+void ZeroAllLinkPlayerMapObjects(void)
+{
+ memset(gLinkPlayerMapObjects, 0, sizeof(gLinkPlayerMapObjects));
+}
+
+static void ZeroMapObject(struct MapObject *mapObj)
+{
+ memset(mapObj, 0, sizeof(struct MapObject));
+}
+
+static void SpawnLinkPlayerMapObject(u8 linkPlayerId, s16 x, s16 y, u8 a4)
+{
+ u8 mapObjId = sub_808D4F4();
+ struct LinkPlayerMapObject *linkPlayerMapObj = &gLinkPlayerMapObjects[linkPlayerId];
+ struct MapObject *mapObj = &gMapObjects[mapObjId];
+
+ ZeroLinkPlayerMapObject(linkPlayerMapObj);
+ ZeroMapObject(mapObj);
+
+ linkPlayerMapObj->active = 1;
+ linkPlayerMapObj->linkPlayerId = linkPlayerId;
+ linkPlayerMapObj->mapObjId = mapObjId;
+ linkPlayerMapObj->mode = 0;
+
+ mapObj->active = 1;
+ mapObj->mapobj_bit_1 = a4;
+ mapObj->range.as_byte = 2;
+ mapObj->spriteId = 64;
+
+ InitLinkPlayerMapObjectPos(mapObj, x, y);
+}
+
+static void InitLinkPlayerMapObjectPos(struct MapObject *mapObj, s16 x, s16 y)
+{
+ mapObj->coords2.x = x;
+ mapObj->coords2.y = y;
+ mapObj->coords3.x = x;
+ mapObj->coords3.y = y;
+ sub_8093038(x, y, &mapObj->coords1.x, &mapObj->coords1.y);
+ mapObj->coords1.x += 8;
+ FieldObjectUpdateZCoord(mapObj);
+}
+
+static void sub_80877DC(u8 linkPlayerId, u8 a2)
+{
+ if (gLinkPlayerMapObjects[linkPlayerId].active)
+ {
+ u8 mapObjId = gLinkPlayerMapObjects[linkPlayerId].mapObjId;
+ struct MapObject *mapObj = &gMapObjects[mapObjId];
+ mapObj->range.as_byte = a2;
+ }
+}
+
+static void sub_808780C(u8 linkPlayerId)
+{
+ struct LinkPlayerMapObject *linkPlayerMapObj = &gLinkPlayerMapObjects[linkPlayerId];
+ u8 mapObjId = linkPlayerMapObj->mapObjId;
+ struct MapObject *mapObj = &gMapObjects[mapObjId];
+ if (mapObj->spriteId != 64 )
+ DestroySprite(&gSprites[mapObj->spriteId]);
+ linkPlayerMapObj->active = 0;
+ mapObj->active = 0;
+}
+
+static u8 sub_8087858(u8 linkPlayerId)
+{
+ u8 mapObjId = gLinkPlayerMapObjects[linkPlayerId].mapObjId;
+ struct MapObject *mapObj = &gMapObjects[mapObjId];
+ return mapObj->spriteId;
+}
+
+static void sub_8087878(u8 linkPlayerId, u16 *x, u16 *y)
+{
+ u8 mapObjId = gLinkPlayerMapObjects[linkPlayerId].mapObjId;
+ struct MapObject *mapObj = &gMapObjects[mapObjId];
+ *x = mapObj->coords2.x;
+ *y = mapObj->coords2.y;
+}
+
+static u8 sub_80878A0(u8 linkPlayerId)
+{
+ u8 mapObjId = gLinkPlayerMapObjects[linkPlayerId].mapObjId;
+ struct MapObject *mapObj = &gMapObjects[mapObjId];
+ return mapObj->range.as_byte;
+}
+
+static u8 sub_80878C0(u8 linkPlayerId)
+{
+ u8 mapObjId = gLinkPlayerMapObjects[linkPlayerId].mapObjId;
+ struct MapObject *mapObj = &gMapObjects[mapObjId];
+ return mapObj->mapobj_unk_0B_0;
+}
+
+static s32 sub_80878E4(u8 linkPlayerId)
+{
+ u8 mapObjId = gLinkPlayerMapObjects[linkPlayerId].mapObjId;
+ struct MapObject *mapObj = &gMapObjects[mapObjId];
+ return 16 - (s8)mapObj->mapobj_unk_21;
+}
+
+static u8 GetLinkPlayerIdAt(s16 x, s16 y)
+{
+ u8 i;
+ for (i = 0; i < 4; i++)
+ {
+ if (gLinkPlayerMapObjects[i].active
+ && (gLinkPlayerMapObjects[i].mode == 0 || gLinkPlayerMapObjects[i].mode == 2))
+ {
+ struct MapObject *mapObj = &gMapObjects[gLinkPlayerMapObjects[i].mapObjId];
+ if (mapObj->coords2.x == x && mapObj->coords2.y == y)
+ return i;
+ }
+ }
+ return 4;
+}
+
+static void sub_808796C(u8 linkPlayerId, u8 a2)
+{
+ struct LinkPlayerMapObject *linkPlayerMapObj = &gLinkPlayerMapObjects[linkPlayerId];
+ u8 mapObjId = linkPlayerMapObj->mapObjId;
+ struct MapObject *mapObj = &gMapObjects[mapObjId];
+
+ if (linkPlayerMapObj->active)
+ {
+ if (a2 > 10)
+ mapObj->mapobj_bit_2 = 1;
+ else
+ gUnknown_08339E00[gUnknown_08339DC8[linkPlayerMapObj->mode](linkPlayerMapObj, mapObj, a2)](linkPlayerMapObj, mapObj);
+ }
+}
+
+static u8 sub_80879D8(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3)
+{
+ return gUnknown_08339DD4[a3](linkPlayerMapObj, mapObj, a3);
+}
+
+static u8 sub_80879F8(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3)
+{
+ return 1;
+}
+
+static u8 sub_80879FC(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3)
+{
+ return gUnknown_08339DD4[a3](linkPlayerMapObj, mapObj, a3);
+}
+
+static u8 sub_8087A1C(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3)
+{
+ return 0;
+}
+
+static u8 sub_8087A20(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3)
+{
+ s16 x, y;
+
+ mapObj->range.as_byte = npc_something3(a3, mapObj->range.as_byte);
+ FieldObjectMoveDestCoords(mapObj, mapObj->range.as_byte, &x, &y);
+
+ if (LinkPlayerDetectCollision(linkPlayerMapObj->mapObjId, mapObj->range.as_byte, x, y))
+ {
+ return 0;
+ }
+ else
+ {
+ mapObj->mapobj_unk_21 = 16;
+ npc_coords_shift(mapObj, x, y);
+ FieldObjectUpdateZCoord(mapObj);
+ return 1;
+ }
+}
+
+static u8 sub_8087A88(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3)
+{
+ mapObj->range.as_byte = npc_something3(a3, mapObj->range.as_byte);
+ return 0;
+}
+
+static void sub_8087AA0(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj)
+{
+ linkPlayerMapObj->mode = 0;
+}
+
+static void sub_8087AA8(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj)
+{
+ mapObj->mapobj_unk_21--;
+ linkPlayerMapObj->mode = 1;
+ MoveCoords(mapObj->range.as_byte, &mapObj->coords1.x, &mapObj->coords1.y);
+ if (!mapObj->mapobj_unk_21)
+ {
+ npc_coords_shift_still(mapObj);
+ linkPlayerMapObj->mode = 2;
+ }
+}
+
+static u8 npc_something3(u8 a1, u8 a2)
+{
+ switch (a1 - 1)
+ {
+ case 0:
+ case 6:
+ return 2;
+ case 1:
+ case 7:
+ return 1;
+ case 2:
+ case 8:
+ return 3;
+ case 3:
+ case 9:
+ return 4;
+ }
+ return a2;
+}
+
+static u8 LinkPlayerDetectCollision(u8 selfMapObjId, u8 a2, s16 x, s16 y)
+{
+ u8 i;
+ for (i = 0; i < 16; i++)
+ {
+ if (i != selfMapObjId)
+ {
+ if ((gMapObjects[i].coords2.x == x && gMapObjects[i].coords2.y == y)
+ || (gMapObjects[i].coords3.x == x && gMapObjects[i].coords3.y == y))
+ {
+ return 1;
+ }
+ }
+ }
+ return MapGridIsImpassableAt(x, y);
+}
+
+static void CreateLinkPlayerSprite(u8 linkPlayerId, u8 gameVersion)
+{
+ struct LinkPlayerMapObject *linkPlayerMapObj = &gLinkPlayerMapObjects[linkPlayerId];
+ u8 mapObjId = linkPlayerMapObj->mapObjId;
+ struct MapObject *mapObj = &gMapObjects[mapObjId];
+ struct Sprite *sprite;
-// Static type declarations
+ if (linkPlayerMapObj->active)
+ {
+ switch (gameVersion)
+ {
+ case VERSION_FIRE_RED:
+ case VERSION_LEAF_GREEN:
+ mapObj->spriteId = AddPseudoFieldObject(sub_808BD6C(mapObj->mapobj_bit_1), SpriteCB_LinkPlayer, 0, 0, 0);
+ break;
+ case VERSION_RUBY:
+ case VERSION_SAPPHIRE:
+ mapObj->spriteId = AddPseudoFieldObject(sub_808BD7C(mapObj->mapobj_bit_1), SpriteCB_LinkPlayer, 0, 0, 0);
+ break;
+ case VERSION_EMERALD:
+ mapObj->spriteId = AddPseudoFieldObject(GetRivalAvatarGraphicsIdByStateIdAndGender(0, mapObj->mapobj_bit_1), SpriteCB_LinkPlayer, 0, 0, 0);
+ break;
+ }
-// Static RAM declarations
-IWRAM_DATA void *gUnknown_03000E0C;
-IWRAM_DATA u8 gUnknown_03000E10[4];
-IWRAM_DATA u8 (*gUnknown_03000E14)(u32);
-IWRAM_DATA u8 gUnknown_03000E18;
-IWRAM_DATA u8 gUnknown_03000E19;
-IWRAM_DATA void *rom4_c_unused_03000e1c;
+ sprite = &gSprites[mapObj->spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->data[0] = linkPlayerId;
+ mapObj->mapobj_bit_2 = 0;
+ }
+}
-// Static ROM declarations
+static void SpriteCB_LinkPlayer(struct Sprite *sprite)
+{
+ struct LinkPlayerMapObject *linkPlayerMapObj = &gLinkPlayerMapObjects[sprite->data[0]];
+ struct MapObject *mapObj = &gMapObjects[linkPlayerMapObj->mapObjId];
+ sprite->pos1.x = mapObj->coords1.x;
+ sprite->pos1.y = mapObj->coords1.y;
+ SetObjectSubpriorityByZCoord(mapObj->elevation, sprite, 1);
+ sprite->oam.priority = ZCoordToPriority(mapObj->elevation);
-// .rodata
+ if (!linkPlayerMapObj->mode)
+ StartSpriteAnim(sprite, FieldObjectDirectionToImageAnimId(mapObj->range.as_byte));
+ else
+ StartSpriteAnimIfDifferent(sprite, get_go_image_anim_num(mapObj->range.as_byte));
-// .text
+ sub_80979D4(sprite, 0);
+ if (mapObj->mapobj_bit_2)
+ {
+ sprite->invisible = ((sprite->data[7] & 4) >> 2);
+ sprite->data[7]++;
+ }
+}
diff --git a/src/player_pc.c b/src/player_pc.c
new file mode 100644
index 000000000..2bdf527e7
--- /dev/null
+++ b/src/player_pc.c
@@ -0,0 +1,1364 @@
+#include "global.h"
+#include "constants/songs.h"
+#include "bg.h"
+#include "decoration.h"
+#include "event_scripts.h"
+#include "field_fadetransition.h"
+#include "field_map_obj.h"
+#include "field_screen.h"
+#include "field_weather.h"
+#include "international_string_util.h"
+#include "item.h"
+#include "item_icon.h"
+#include "item_menu.h"
+#include "constants/items.h"
+#include "list_menu.h"
+#include "mail.h"
+#include "main.h"
+#include "malloc.h"
+#include "menu.h"
+#include "menu_helpers.h"
+#include "menu_indicators.h"
+#include "overworld.h"
+#include "palette.h"
+#include "party_menu.h"
+#include "pokenav.h"
+#include "player_pc.h"
+#include "script.h"
+#include "sound.h"
+#include "sprite.h"
+#include "string_util.h"
+#include "strings.h"
+#include "task.h"
+#include "window.h"
+
+// structures
+struct Struct203BCC4
+{
+ struct ListMenuItem unk0[51];
+ u8 unk198[51][0x18];
+ u8 windowIds[6];
+ u8 unk666;
+ u8 spriteId;
+ u8 spriteIds[7];
+};
+
+// extern offset
+void (*gFieldCallback)(void);
+
+// static functions
+static void InitPlayerPCMenu(u8 taskId);
+static void PlayerPCProcessMenuInput(u8 taskId);
+static void InitItemStorageMenu(u8 taskId, u8 var);
+
+static u8 GetMailboxMailCount(void);
+static void Mailbox_UpdateMailList(void);
+static void Mailbox_DrawMailboxMenu(u8 taskId);
+static void Mailbox_ProcessInput(u8 taskId);
+static void Mailbox_PrintWhatToDoWithPlayerMailText(u8 taskId);
+static void Mailbox_ReturnToPlayerPC(u8);
+static void Mailbox_PrintMailOptions(u8 taskId);
+static void Mailbox_MailOptionsProcessInput(u8 taskId);
+
+static void PlayerPC_ItemStorage(u8 taskId);
+static void PlayerPC_Mailbox(u8 taskId);
+static void PlayerPC_Decoration(u8 var);
+static void PlayerPC_TurnOff(u8 taskId);
+
+static void Mailbox_DoMailMoveToBag(u8 taskId);
+static void Mailbox_DoMailRead(u8 taskId);
+static void Mailbox_MoveToBag(u8 taskId);
+static void Mailbox_Give(u8 taskId);
+static void Mailbox_Cancel(u8 taskId);
+
+static void Mailbox_CancelMoveToBag(u8 taskId);
+static void Mailbox_MoveToBagYesNoPrompt(u8 taskId);
+static void Mailbox_DrawYesNoBeforeMove(u8 taskId);
+static void Mailbox_DoGiveMailPokeMenu(u8 taskId);
+static void Mailbox_NoPokemonForMail(u8 taskId);
+
+static void Mailbox_FadeAndReadMail(u8 taskId);
+static void Mailbox_ReturnToFieldFromReadMail(void);
+static void Mailbox_DoRedrawMailboxMenuAfterReturn(void);
+static void pal_fill_for_maplights_or_black(void);
+static void Mailbox_HandleReturnToProcessInput(u8 taskId);
+static void Mailbox_UpdateMailListAfterDeposit(void);
+
+static void ItemStorage_Withdraw(u8 taskId);
+static void ItemStorage_Deposit(u8 taskId);
+static void ItemStorage_Toss(u8 taskId);
+static void ItemStorage_Exit(u8 taskId);
+static void ItemStorage_ResumeInputFromYesToss(u8 taskId);
+static void ItemStorage_ResumeInputFromNoToss(u8 taskId);
+
+static void ItemStorageMenuPrint(const u8 *);
+static void ItemStorageMenuProcessInput(u8 taskId);
+static void ItemStorage_ProcessWithdrawTossInput(u8 taskId);
+static void ItemStorage_SetItemAndMailCount(u8);
+static void ItemStorage_HandleReturnToProcessInput(u8 taskId);
+
+static void ItemStorage_WithdrawToss_Helper(u8 taskId, bool8 toss);
+static void Task_ItemStorage_Deposit(u8 taskId);
+static void ItemStorage_DoItemWithdraw(u8 taskId);
+static void ItemStorage_DoItemToss(u8 taskid);
+static void ItemStorage_HandleQuantityRolling(u8 taskid);
+static void ItemStorage_GoBackToPlayerPCMenu(u8 taskId);
+static void ItemStorage_ItemSwapChoosePrompt(u8 taskId);
+static void ItemStorage_DoItemAction(u8 taskId);
+static void ItemStorage_ProcessInput(u8 taskId);
+static void ItemStorage_DoItemSwap(u8 taskId, bool8 a);
+static void ItemStorage_HandleRemoveItem(u8 taskId);
+static void ItemStorage_WaitPressHandleResumeProcessInput(u8 taskId);
+static void ItemStorage_StartScrollIndicatorAndProcessInput(u8 taskId);
+
+static const u8* ItemStorage_GetItemPcResponse(u16);
+static void CopyItemName_PlayerPC(u8 *string, u16 itemId);
+
+static void sub_816BC14(void);
+static void sub_816BFE0(u8 y, u8, u8 speed);
+static void sub_816BCC4(u8);
+static void sub_816C690(u8);
+static void sub_816C4FC(u8 taskId);
+static void sub_816C0C8(void);
+static void sub_816C060(u16 itemId);
+static void sub_816BEF0(s32 id);
+static void sub_816B4DC(u8 taskId);
+static void ItemStorage_MoveCursor(s32 id, bool8 b, struct ListMenu * thisMenu);
+static void fish4_goto_x5_or_x6(u8 windowId, s32 id, u8 yOffset);
+
+// EWRAM
+static EWRAM_DATA const u8 *gPcItemMenuOptionOrder = NULL;
+static EWRAM_DATA u8 gPcItemMenuOptionsNum = 0;
+EWRAM_DATA struct PlayerPCItemPageStruct playerPCItemPageInfo = {0, 0, 0, 0, {0, 0, 0}, 0};
+static EWRAM_DATA struct Struct203BCC4 *gUnknown_0203BCC4 = NULL;
+
+// .rodata
+static const u8 *const gPCText_OptionDescList[] =
+{
+ gText_TakeOutItemsFromPC,
+ gText_StoreItemsInPC,
+ gText_ThrowAwayItemsInPC,
+ gText_GoBackPrevMenu,
+};
+
+static const struct MenuAction sPlayerPCMenuActions[] =
+{
+ { gText_ItemStorage, PlayerPC_ItemStorage },
+ { gText_Mailbox, PlayerPC_Mailbox },
+ { gText_Decoration, PlayerPC_Decoration },
+ { gText_TurnOff, PlayerPC_TurnOff }
+};
+
+static const u8 gBedroomPC_OptionOrder[] =
+{
+ PLAYERPC_MENU_ITEMSTORAGE,
+ PLAYERPC_MENU_MAILBOX,
+ PLAYERPC_MENU_DECORATION,
+ PLAYERPC_MENU_TURNOFF
+};
+
+static const u8 gPlayerPC_OptionOrder[] =
+{
+ PLAYERPC_MENU_ITEMSTORAGE,
+ PLAYERPC_MENU_MAILBOX,
+ PLAYERPC_MENU_TURNOFF
+};
+
+static const struct MenuAction gPCText_ItemPCOptionsText[] =
+{
+ { gText_WithdrawItem, ItemStorage_Withdraw },
+ { gText_DepositItem, ItemStorage_Deposit },
+ { gText_TossItem, ItemStorage_Toss },
+ { gText_Cancel, ItemStorage_Exit }
+};
+
+static const struct ItemSlot gNewGamePCItems[] =
+{
+ { ITEM_POTION, 1 },
+ { ITEM_NONE, 0 }
+};
+
+const struct MenuAction gMailboxMailOptions[] =
+{
+ { gText_Read, Mailbox_DoMailRead },
+ { gText_MoveToBag, Mailbox_MoveToBag },
+ { gText_Give2, Mailbox_Give },
+ { gText_Cancel2, Mailbox_Cancel }
+};
+
+static const struct WindowTemplate gUnknown_085DFF24[3] =
+{
+ {0x00, 0x01, 0x01, 0x09, 0x06, 0x0F, 0x0001},
+ {0x00, 0x01, 0x01, 0x09, 0x08, 0x0F, 0x0001},
+ {0x00, 0x01, 0x01, 0x0A, 0x08, 0x0F, 0x0001}
+};
+
+static const struct YesNoFuncTable ResumeFromWithdrawYesNoFuncList = // ResumeFromWithdrawYesNoFuncList
+{
+ ItemStorage_ResumeInputFromYesToss,
+ ItemStorage_ResumeInputFromNoToss
+};
+
+static const struct ListMenuTemplate gUnknown_085DFF44 = {
+ NULL,
+ ItemStorage_MoveCursor,
+ fish4_goto_x5_or_x6,
+ 0, 0,
+ 0, 0, 8, 0,
+ 9, 2, 1, 3, FALSE, 0, FALSE, 7
+};
+
+static const struct WindowTemplate gUnknown_085DFF5C[5] =
+{
+ {0x00, 0x10, 0x01, 0x0D, 0x12, 0x0F, 0x0001},
+ {0x00, 0x01, 0x0D, 0x0D, 0x06, 0x0F, 0x00EB},
+ {0x00, 0x01, 0x08, 0x03, 0x03, 0x0F, 0x0153},
+ {0x00, 0x01, 0x01, 0x0D, 0x02, 0x0F, 0x0139},
+ {0x00, 0x08, 0x09, 0x06, 0x02, 0x0F, 0x015C}
+};
+
+static const struct WindowTemplate gUnknown_085DFF84 =
+{
+ 0x00, 0x09, 0x07, 0x05, 0x04, 0x0F, 0x0168
+};
+
+static const u8 gUnknown_085DFF8C[] = {0x01, 0x03, 0x02, 0x00};
+
+// text
+void NewGameInitPCItems(void)
+{
+ u8 i;
+
+ // because Game Freak don't know how to use a struct or a 2d array
+ for(i = 0, ClearItemSlots(gSaveBlock1Ptr->pcItems, ARRAY_COUNT(gSaveBlock1Ptr->pcItems)); NEW_GAME_PC_ITEMS(i, PC_ITEM_ID) && NEW_GAME_PC_ITEMS(i, PC_QUANTITY) &&
+ AddPCItem(NEW_GAME_PC_ITEMS(i, PC_ITEM_ID), NEW_GAME_PC_ITEMS(i, PC_QUANTITY)) == TRUE; i++);
+}
+
+void BedroomPC(void)
+{
+ gPcItemMenuOptionOrder = gBedroomPC_OptionOrder;
+ gPcItemMenuOptionsNum = 4;
+ DisplayItemMessageOnField(CreateTask(TaskDummy, 0), gText_WhatWouldYouLike, InitPlayerPCMenu);
+}
+
+void PlayerPC(void)
+{
+ gPcItemMenuOptionOrder = gPlayerPC_OptionOrder;
+ gPcItemMenuOptionsNum = 3;
+ DisplayItemMessageOnField(CreateTask(TaskDummy, 0), gText_WhatWouldYouLike, InitPlayerPCMenu);
+}
+
+static void InitPlayerPCMenu(u8 taskId)
+{
+ u16 *data;
+ struct WindowTemplate windowTemplate;
+
+ data = gTasks[taskId].data;
+ if(gPcItemMenuOptionsNum == 3)
+ windowTemplate = gUnknown_085DFF24[0];
+ else
+ windowTemplate = gUnknown_085DFF24[1];
+ windowTemplate.width = sub_81DB3D8(sPlayerPCMenuActions, gPcItemMenuOptionOrder, gPcItemMenuOptionsNum);
+ data[4] = AddWindow(&windowTemplate);
+ SetStandardWindowBorderStyle(data[4], 0);
+ sub_81995E4(data[4], gPcItemMenuOptionsNum, sPlayerPCMenuActions, gPcItemMenuOptionOrder);
+ InitMenuInUpperLeftCornerPlaySoundWhenAPressed(data[4], gPcItemMenuOptionsNum, 0);
+ schedule_bg_copy_tilemap_to_vram(0);
+ gTasks[taskId].func = PlayerPCProcessMenuInput;
+}
+
+static void PlayerPCProcessMenuInput(u8 taskId)
+{
+ u16 *data;
+ s8 inputOptionId;
+
+ data = gTasks[taskId].data;
+ if(gPcItemMenuOptionsNum > 3)
+ inputOptionId = ProcessMenuInput();
+ else
+ inputOptionId = ProcessMenuInputNoWrapAround();
+
+ switch(inputOptionId)
+ {
+ case -2:
+ break;
+ case -1:
+ PlaySE(SE_SELECT);
+ sub_8198070(data[4], FALSE);
+ ClearWindowTilemap(data[4]);
+ RemoveWindow(data[4]);
+ schedule_bg_copy_tilemap_to_vram(0);
+ gTasks[taskId].func = PlayerPC_TurnOff;
+ break;
+ default:
+ sub_8198070(data[4], FALSE);
+ ClearWindowTilemap(data[4]);
+ RemoveWindow(data[4]);
+ schedule_bg_copy_tilemap_to_vram(0);
+ gTasks[taskId].func = sPlayerPCMenuActions[gPcItemMenuOptionOrder[inputOptionId]].func.void_u8;
+ break;
+ }
+}
+
+void ReshowPlayerPC(u8 var)
+{
+ DisplayItemMessageOnField(var, gText_WhatWouldYouLike, InitPlayerPCMenu);
+}
+
+static void PlayerPC_ItemStorage(u8 taskId)
+{
+ InitItemStorageMenu(taskId, ITEMPC_MENU_WITHDRAW);
+ gTasks[taskId].func = ItemStorageMenuProcessInput;
+}
+
+static void PlayerPC_Mailbox(u8 taskId)
+{
+ playerPCItemPageInfo.count = GetMailboxMailCount();
+
+ if (playerPCItemPageInfo.count == 0)
+ DisplayItemMessageOnField(taskId, gText_NoMailHere, ReshowPlayerPC);
+ else
+ {
+ playerPCItemPageInfo.cursorPos = 0;
+ playerPCItemPageInfo.itemsAbove = 0;
+ playerPCItemPageInfo.scrollIndicatorId = 0xFF;
+ Mailbox_UpdateMailList();
+ ItemStorage_SetItemAndMailCount(taskId);
+ if(sub_81D1C44(playerPCItemPageInfo.count) == TRUE)
+ {
+ sub_8197434(0, 0);
+ Mailbox_DrawMailboxMenu(taskId);
+ gTasks[taskId].func = Mailbox_ProcessInput;
+ }
+ else
+ DisplayItemMessageOnField(taskId, gText_NoMailHere, ReshowPlayerPC);
+ }
+}
+
+static void PlayerPC_Decoration(u8 var)
+{
+ sub_8126B2C(var); //DoPlayerPCDecoration(var);
+}
+
+static void PlayerPC_TurnOff(u8 taskId)
+{
+ if (gPcItemMenuOptionsNum == 4) // if the option count is 4, we are at the bedroom PC and not player PC, so do gender specific handling.
+ {
+ if (gSaveBlock2Ptr->playerGender == MALE)
+ ScriptContext1_SetupScript(LittlerootTown_BrendansHouse_2F_EventScript_1F863F);
+ else
+ ScriptContext1_SetupScript(LittlerootTown_MaysHouse_2F_EventScript_1F958F);
+ }
+ else
+ {
+ EnableBothScriptContexts();
+ }
+ DestroyTask(taskId);
+}
+
+static void InitItemStorageMenu(u8 taskId, u8 var)
+{
+ u16 *data;
+ struct WindowTemplate windowTemplate;
+
+ data = gTasks[taskId].data;
+ windowTemplate = gUnknown_085DFF24[2];
+ windowTemplate.width = GetMaxWidthInMenuTable(gPCText_ItemPCOptionsText, 4);
+ data[4] = AddWindow(&windowTemplate);
+ SetStandardWindowBorderStyle(data[4], 0);
+ PrintMenuTable(data[4], 4, gPCText_ItemPCOptionsText);
+ InitMenuInUpperLeftCornerPlaySoundWhenAPressed(data[4], 4, var);
+ schedule_bg_copy_tilemap_to_vram(0);
+ ItemStorageMenuPrint(gPCText_OptionDescList[var]);
+}
+
+static void ItemStorageMenuPrint(const u8 *textPtr)
+{
+ NewMenuHelpers_DrawDialogueFrame(0, 0);
+ PrintTextOnWindow(0, 1, textPtr, 0, 1, 0, 0);
+}
+
+static void ItemStorageMenuProcessInput(u8 taskId)
+{
+ s8 r5;
+ s8 r2;
+ s8 inputOptionId;
+
+ r5 = GetMenuCursorPos();
+ inputOptionId = ProcessMenuInput();
+ r2 = GetMenuCursorPos();
+ switch(inputOptionId)
+ {
+ case -2:
+ if (r5 != r2)
+ ItemStorageMenuPrint(gPCText_OptionDescList[r2]);
+ break;
+ case -1:
+ PlaySE(SE_SELECT);
+ ItemStorage_Exit(taskId);
+ break;
+ default:
+ PlaySE(SE_SELECT);
+ gPCText_ItemPCOptionsText[inputOptionId].func.void_u8(taskId);
+ break;
+ }
+}
+
+static void ItemStorage_Deposit(u8 taskId)
+{
+ gTasks[taskId].func = Task_ItemStorage_Deposit;
+ FadeScreen(1, 0);
+}
+
+static void Task_ItemStorage_Deposit(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ overworld_free_bg_tilemaps();
+ sub_81AAC14();
+ DestroyTask(taskId);
+ }
+}
+
+void sub_816B31C(void)
+{
+ gFieldCallback = Mailbox_DoRedrawMailboxMenuAfterReturn;
+ SetMainCallback2(CB2_ReturnToField);
+}
+
+void Mailbox_DoRedrawMailboxMenuAfterReturn(void)
+{
+ sub_81973A4();
+ NewMenuHelpers_DrawDialogueFrame(0, 1);
+ InitItemStorageMenu(CreateTask(ItemStorage_HandleReturnToProcessInput, 0), 1);
+ pal_fill_black();
+}
+
+static void ItemStorage_HandleReturnToProcessInput(u8 taskId)
+{
+ if (IsWeatherNotFadingIn() == TRUE)
+ gTasks[taskId].func = ItemStorageMenuProcessInput;
+}
+
+static void ItemStorage_Withdraw(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ NUM_ITEMS = CountUsedPCItemSlots();
+ if (NUM_ITEMS != 0)
+ ItemStorage_WithdrawToss_Helper(taskId, FALSE);
+ else
+ {
+ sub_816B4DC(taskId);
+ DisplayItemMessageOnField(taskId, gText_NoItems, PlayerPC_ItemStorage);
+ }
+
+}
+
+static void ItemStorage_Toss(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ NUM_ITEMS = CountUsedPCItemSlots();
+ if (NUM_ITEMS != 0)
+ ItemStorage_WithdrawToss_Helper(taskId, TRUE);
+ else
+ {
+ sub_816B4DC(taskId);
+ DisplayItemMessageOnField(taskId, gText_NoItems, PlayerPC_ItemStorage);
+ }
+}
+
+static void ItemStorage_WithdrawToss_Helper(u8 taskId, bool8 toss)
+{
+ u16 *data = gTasks[taskId].data;
+
+ data[3] = toss;
+ sub_816B4DC(taskId);
+ playerPCItemPageInfo.cursorPos = 0;
+ playerPCItemPageInfo.itemsAbove = 0;
+ playerPCItemPageInfo.scrollIndicatorId = 0xFF;
+ ItemStorage_SetItemAndMailCount(taskId);
+ sub_816BC14();
+ gpu_pal_allocator_reset__manage_upper_four();
+ LoadListMenuArrowsGfx();
+ sub_8122344(gUnknown_0203BCC4->spriteIds, 7);
+ sub_8197434(0,0);
+ gTasks[taskId].func = ItemStorage_ProcessWithdrawTossInput;
+}
+
+static void ItemStorage_Exit(u8 taskId)
+{
+ sub_816B4DC(taskId);
+ ReshowPlayerPC(taskId);
+}
+
+
+static void ItemStorage_SetItemAndMailCount(u8 taskId)
+{
+ if (playerPCItemPageInfo.count > 7)
+ playerPCItemPageInfo.pageItems = 8;
+ else
+ playerPCItemPageInfo.pageItems = playerPCItemPageInfo.count + 1;
+}
+
+static void sub_816B4DC(u8 taskId)
+{
+ u16 *data = gTasks[taskId].data;
+
+ sub_8198070(data[4], FALSE);
+ ClearWindowTilemap(data[4]);
+ RemoveWindow(data[4]);
+ schedule_bg_copy_tilemap_to_vram(0);
+}
+
+static u8 GetMailboxMailCount(void)
+{
+ u8 i, j;
+
+ for(i = 0, j = 6; j < 16; j++)
+ if(gSaveBlock1Ptr->mail[j].itemId != 0)
+ i++;
+
+ return i;
+}
+
+static void Mailbox_UpdateMailList(void)
+{
+ struct MailStruct mailBuffer;
+ u8 i, j;
+
+ for (i=6; i<15; i++)
+ {
+ for (j=i+1; j<16; j++)
+ {
+ if (gSaveBlock1Ptr->mail[i].itemId == 0)
+ {
+ mailBuffer = gSaveBlock1Ptr->mail[i];
+ gSaveBlock1Ptr->mail[i] = gSaveBlock1Ptr->mail[j];
+ gSaveBlock1Ptr->mail[j] = mailBuffer;
+ }
+ }
+ }
+}
+
+static void Mailbox_DrawMailboxMenu(u8 taskId)
+{
+ u8 windowId;
+
+ windowId = sub_81D1C84(0);
+ sub_81D1C84(1);
+ PrintTextOnWindow(windowId, 1, gText_Mailbox, GetStringCenterAlignXOffset(1, gText_Mailbox, 0x40), 1, 0, NULL);
+ schedule_bg_copy_tilemap_to_vram(0);
+ gTasks[taskId].data[5] = sub_81D1DC0(&playerPCItemPageInfo);
+ sub_81D1E90(&playerPCItemPageInfo);
+}
+
+static void Mailbox_ProcessInput(u8 taskId)
+{
+ u16 *data = gTasks[taskId].data;
+ s32 inputOptionId;
+
+ if(!gPaletteFade.active)
+ {
+ inputOptionId = ListMenuHandleInputGetItemId(data[5]);
+ ListMenuGetScrollAndRow(data[5], &(playerPCItemPageInfo.itemsAbove), &(playerPCItemPageInfo.cursorPos));
+
+ switch(inputOptionId)
+ {
+ case -1:
+ break;
+ case -2:
+ PlaySE(SE_SELECT);
+ RemoveScrollIndicatorArrowPair(playerPCItemPageInfo.scrollIndicatorId);
+ Mailbox_ReturnToPlayerPC(taskId);
+ break;
+ default:
+ PlaySE(SE_SELECT);
+ sub_81D1D04(0);
+ sub_81D1D04(1);
+ DestroyListMenuTask(data[5], &(playerPCItemPageInfo.itemsAbove), &(playerPCItemPageInfo.cursorPos));
+ schedule_bg_copy_tilemap_to_vram(0);
+ RemoveScrollIndicatorArrowPair(playerPCItemPageInfo.scrollIndicatorId);
+ gTasks[taskId].func = Mailbox_PrintWhatToDoWithPlayerMailText;
+ break;
+ }
+ }
+}
+
+static void Mailbox_PrintWhatToDoWithPlayerMailText(u8 taskId)
+{
+ StringCopy(gStringVar1, gSaveBlock1Ptr->mail[playerPCItemPageInfo.itemsAbove + 6 + playerPCItemPageInfo.cursorPos].playerName);
+ sub_81DB554(gStringVar1, 0);
+ StringExpandPlaceholders(gStringVar4, gText_WhatToDoWithVar1sMail);
+ DisplayItemMessageOnField(taskId, gStringVar4, Mailbox_PrintMailOptions);
+}
+
+static void Mailbox_ReturnToPlayerPC(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ sub_81D1D04(0);
+ sub_81D1D04(1);
+ DestroyListMenuTask(data[5], NULL, NULL);
+ schedule_bg_copy_tilemap_to_vram(0);
+ sub_81D1EC0();
+ ReshowPlayerPC(taskId);
+}
+
+static void Mailbox_PrintMailOptions(u8 taskId)
+{
+ u8 r4 = sub_81D1C84(2);
+ PrintMenuTable(r4, 4, gMailboxMailOptions);
+ InitMenuInUpperLeftCornerPlaySoundWhenAPressed(r4, 4, 0);
+ schedule_bg_copy_tilemap_to_vram(0);
+ gTasks[taskId].func = Mailbox_MailOptionsProcessInput;
+}
+
+static void Mailbox_MailOptionsProcessInput(u8 taskId)
+{
+ s8 inputOptionId = ProcessMenuInput_other();
+
+ switch(inputOptionId)
+ {
+ case -2:
+ break;
+ case -1:
+ PlaySE(SE_SELECT);
+ Mailbox_Cancel(taskId);
+ break;
+
+ default:
+ PlaySE(SE_SELECT);
+ gMailboxMailOptions[inputOptionId].func.void_u8(taskId);
+ break;
+ }
+}
+
+static void Mailbox_DoMailRead(u8 taskId)
+{
+ FadeScreen(1, 0);
+ gTasks[taskId].func = Mailbox_FadeAndReadMail;
+}
+
+static void Mailbox_FadeAndReadMail(u8 taskId)
+{
+ if(!gPaletteFade.active)
+ {
+ sub_81D1EC0();
+ overworld_free_bg_tilemaps();
+ ReadMail(&(gSaveBlock1Ptr->mail[playerPCItemPageInfo.itemsAbove + 6 + playerPCItemPageInfo.cursorPos]), Mailbox_ReturnToFieldFromReadMail, TRUE);
+ DestroyTask(taskId);
+ }
+}
+
+static void Mailbox_ReturnToFieldFromReadMail(void)
+{
+ gFieldCallback = pal_fill_for_maplights_or_black;
+ SetMainCallback2(CB2_ReturnToField);
+}
+
+static void pal_fill_for_maplights_or_black(void)
+{
+ u8 taskId;
+
+ sub_81973A4();
+ taskId = CreateTask(Mailbox_HandleReturnToProcessInput, 0);
+ if(sub_81D1C44(playerPCItemPageInfo.count) == TRUE)
+ Mailbox_DrawMailboxMenu(taskId);
+ else
+ DestroyTask(taskId);
+ pal_fill_black();
+}
+
+static void Mailbox_HandleReturnToProcessInput(u8 taskId)
+{
+ if(IsWeatherNotFadingIn() == TRUE)
+ gTasks[taskId].func = Mailbox_ProcessInput;
+}
+
+static void Mailbox_MoveToBag(u8 taskId)
+{
+ DisplayItemMessageOnField(taskId, gText_MessageWillBeLost, Mailbox_DrawYesNoBeforeMove);
+}
+
+static void Mailbox_DrawYesNoBeforeMove(u8 taskId)
+{
+ sub_8197930();
+ gTasks[taskId].func = Mailbox_MoveToBagYesNoPrompt;
+}
+
+static void Mailbox_MoveToBagYesNoPrompt(u8 taskId)
+{
+ switch(ProcessMenuInputNoWrap_())
+ {
+ case 0:
+ Mailbox_DoMailMoveToBag(taskId);
+ break;
+ case -1:
+ PlaySE(SE_SELECT);
+ case 1:
+ Mailbox_CancelMoveToBag(taskId);
+ break;
+ case -2:
+ default:
+ break;
+ }
+}
+
+static void Mailbox_DoMailMoveToBag(u8 taskId)
+{
+ struct MailStruct *mailStruct = &(gSaveBlock1Ptr->mail[playerPCItemPageInfo.itemsAbove + 6 + playerPCItemPageInfo.cursorPos]);
+ if(!AddBagItem(mailStruct->itemId, 1))
+ {
+ DisplayItemMessageOnField(taskId, gText_BagIsFull, Mailbox_Cancel);
+ }
+ else
+ {
+ DisplayItemMessageOnField(taskId, gText_MailToBagMessageErased, Mailbox_Cancel);
+ ClearMailStruct(mailStruct);
+ Mailbox_UpdateMailList();
+ playerPCItemPageInfo.count--;
+ if(playerPCItemPageInfo.count < (playerPCItemPageInfo.pageItems + playerPCItemPageInfo.itemsAbove) && playerPCItemPageInfo.itemsAbove != 0)
+ playerPCItemPageInfo.itemsAbove--;
+ ItemStorage_SetItemAndMailCount(taskId);
+ }
+}
+
+static void Mailbox_CancelMoveToBag(u8 taskId)
+{
+ Mailbox_Cancel(taskId);
+}
+
+static void Mailbox_Give(u8 taskId)
+{
+ if(CalculatePlayerPartyCount() == 0)
+ Mailbox_NoPokemonForMail(taskId);
+ else
+ {
+ FadeScreen(1, 0);
+ gTasks[taskId].func = Mailbox_DoGiveMailPokeMenu;
+ }
+}
+
+static void Mailbox_DoGiveMailPokeMenu(u8 taskId)
+{
+ if(!gPaletteFade.active)
+ {
+ sub_81D1EC0();
+ overworld_free_bg_tilemaps();
+ sub_81B8448();
+ DestroyTask(taskId);
+ }
+}
+
+void Mailbox_ReturnToMailListAfterDeposit(void)
+{
+ gFieldCallback = Mailbox_UpdateMailListAfterDeposit;
+ SetMainCallback2(CB2_ReturnToField);
+}
+
+static void Mailbox_UpdateMailListAfterDeposit(void)
+{
+ u8 taskId;
+ u8 prevCount;
+ taskId = CreateTask(Mailbox_HandleReturnToProcessInput, 0);
+ prevCount = playerPCItemPageInfo.count;
+ playerPCItemPageInfo.count = GetMailboxMailCount();
+ Mailbox_UpdateMailList();
+ if(prevCount != playerPCItemPageInfo.count && (playerPCItemPageInfo.count < (playerPCItemPageInfo.pageItems + playerPCItemPageInfo.itemsAbove))
+ && playerPCItemPageInfo.itemsAbove != 0)
+ playerPCItemPageInfo.itemsAbove--;
+ ItemStorage_SetItemAndMailCount(taskId);
+ sub_81973A4();
+ if(sub_81D1C44(playerPCItemPageInfo.count) == TRUE)
+ Mailbox_DrawMailboxMenu(taskId);
+ else
+ DestroyTask(taskId);
+ pal_fill_black();
+}
+
+static void Mailbox_NoPokemonForMail(u8 taskId)
+{
+ DisplayItemMessageOnField(taskId, gText_NoPokemon, Mailbox_Cancel);
+}
+
+static void Mailbox_Cancel(u8 taskId)
+{
+ sub_81D1D04(2);
+ sub_8197434(0, 0);
+ Mailbox_DrawMailboxMenu(taskId);
+ schedule_bg_copy_tilemap_to_vram(0);
+ gTasks[taskId].func = Mailbox_ProcessInput;
+}
+
+static void sub_816BC14(void)
+{
+ gUnknown_0203BCC4 = AllocZeroed(sizeof(struct Struct203BCC4));
+ memset(gUnknown_0203BCC4->windowIds, 0xFF, 0x6);
+ gUnknown_0203BCC4->unk666 = 0xFF;
+ gUnknown_0203BCC4->spriteId = 0xFF;
+}
+
+static void sub_816BC58(void)
+{
+ u32 i;
+
+ for(i = 0; i < 6; i++)
+ sub_816BCC4(i);
+ Free(gUnknown_0203BCC4);
+}
+
+static u8 sub_816BC7C(u8 a)
+{
+ u8 *windowIdLoc = &(gUnknown_0203BCC4->windowIds[a]);
+ if(*windowIdLoc == 0xFF)
+ {
+ *windowIdLoc = AddWindow(&gUnknown_085DFF5C[a]);
+ SetWindowBorderStyle(*windowIdLoc, FALSE, 0x214, 0xE);
+ schedule_bg_copy_tilemap_to_vram(0);
+ }
+ return *windowIdLoc;
+}
+
+static void sub_816BCC4(u8 a)
+{
+ u8 *windowIdLoc = &(gUnknown_0203BCC4->windowIds[a]);
+ if(*windowIdLoc != 0xFF)
+ {
+ sub_8198070(*windowIdLoc, FALSE);
+ ClearWindowTilemap(*windowIdLoc);
+ schedule_bg_copy_tilemap_to_vram(0);
+ RemoveWindow(*windowIdLoc);
+ *windowIdLoc = 0xFF;
+ }
+}
+
+void ItemStorage_RefreshListMenu(void)
+{
+ u16 i;
+
+ for(i = 0; i < playerPCItemPageInfo.count - 1; i++)
+ {
+ CopyItemName_PlayerPC(&(gUnknown_0203BCC4->unk198[i][0]), gSaveBlock1Ptr->pcItems[i].itemId);
+ gUnknown_0203BCC4->unk0[i].name = &(gUnknown_0203BCC4->unk198[i][0]);
+ gUnknown_0203BCC4->unk0[i].id = i;
+ }
+ StringCopy(&(gUnknown_0203BCC4->unk198[i][0]) ,gText_Cancel2);
+ gUnknown_0203BCC4->unk0[i].name = &(gUnknown_0203BCC4->unk198[i][0]);
+ gUnknown_0203BCC4->unk0[i].id = -2;
+ gMultiuseListMenuTemplate = gUnknown_085DFF44;
+ gMultiuseListMenuTemplate.windowId = sub_816BC7C(0);
+ gMultiuseListMenuTemplate.totalItems = playerPCItemPageInfo.count;
+ gMultiuseListMenuTemplate.items = gUnknown_0203BCC4->unk0;
+ gMultiuseListMenuTemplate.maxShowed = playerPCItemPageInfo.pageItems;
+}
+
+void CopyItemName_PlayerPC(u8 *string, u16 itemId)
+{
+ CopyItemName(itemId, string);
+}
+
+static void ItemStorage_MoveCursor(s32 id, bool8 b, struct ListMenu *thisMenu)
+{
+ if(b != TRUE)
+ PlaySE(SE_SELECT);
+ if(gUnknown_0203BCC4->unk666 == 0xFF)
+ {
+ sub_816C0C8();
+ if(id != -2)
+ sub_816C060(gSaveBlock1Ptr->pcItems[id].itemId);
+ else
+ sub_816C060(ITEMPC_GO_BACK_TO_PREV);
+ sub_816BEF0(id);
+ }
+}
+
+static void fish4_goto_x5_or_x6(u8 windowId, s32 id, u8 yOffset)
+{
+ if(id != -2)
+ {
+ if(gUnknown_0203BCC4->unk666 != 0xFF)
+ {
+ if(gUnknown_0203BCC4->unk666 == (u8)id)
+ sub_816BFE0(yOffset, 0, 0xFF);
+ else
+ sub_816BFE0(yOffset, 0xFF, 0xFF);
+ }
+ ConvertIntToDecimalStringN(gStringVar1, gSaveBlock1Ptr->pcItems[id].quantity, STR_CONV_MODE_RIGHT_ALIGN, 3);
+ StringExpandPlaceholders(gStringVar4, gText_xVar1);
+ PrintTextOnWindow(windowId, 7, gStringVar4, GetStringRightAlignXOffset(7, gStringVar4, 104), yOffset, 0xFF, NULL);
+ }
+}
+
+static void sub_816BEF0(s32 id)
+{
+ const u8* description;
+ u8 windowId = gUnknown_0203BCC4->windowIds[1];
+
+ if(id != -2)
+ description = (u8 *)ItemId_GetDescription(gSaveBlock1Ptr->pcItems[id].itemId);
+ else
+ description = ItemStorage_GetItemPcResponse(ITEMPC_GO_BACK_TO_PREV);
+ FillWindowPixelBuffer(windowId, 17);
+ PrintTextOnWindow(windowId, 1, description, 0, 1, 0, NULL);
+}
+
+static void ItemStorage_StartScrollIndicator(void)
+{
+ if(playerPCItemPageInfo.scrollIndicatorId == 0xFF)
+ playerPCItemPageInfo.scrollIndicatorId = AddScrollIndicatorArrowPairParametrized(0x2, 0xB0, 0xC, 0x94, playerPCItemPageInfo.count - playerPCItemPageInfo.pageItems, 0x13F8, 0x13F8, &(playerPCItemPageInfo.itemsAbove));
+}
+
+static void ItemStorage_RemoveScrollIndicator(void)
+{
+ if(playerPCItemPageInfo.scrollIndicatorId != 0xFF)
+ {
+ RemoveScrollIndicatorArrowPair(playerPCItemPageInfo.scrollIndicatorId);
+ playerPCItemPageInfo.scrollIndicatorId = 0xFF;
+ }
+}
+
+static void sub_816BFB8(u8 a, u8 b, u8 speed)
+{
+ sub_816BFE0(ListMenuGetYCoordForPrintingArrowCursor(a), b, speed);
+}
+
+static void sub_816BFE0(u8 y, u8 b, u8 speed)
+{
+ u8 windowId = gUnknown_0203BCC4->windowIds[0];
+ if(b == 0xFF)
+ FillWindowPixelRect(windowId, 17, 0, y, GetMenuCursorDimensionByFont(1, 0), GetMenuCursorDimensionByFont(1, 1));
+ else
+ AddTextPrinterParameterized2(windowId, 1, 0, y, 0, 0, gUnknown_085DFF8C, speed, gText_SelectorArrow2);
+}
+
+static void sub_816C060(u16 itemId)
+{
+ u8 spriteId;
+ u8* spriteIdLoc = &(gUnknown_0203BCC4->spriteId);
+
+ if(*spriteIdLoc == 0xFF)
+ {
+ FreeSpriteTilesByTag(0x13F6);
+ FreeSpritePaletteByTag(0x13F6);
+ spriteId = AddItemIconSprite(0x13F6, 0x13F6, itemId);
+ if(spriteId != 64)
+ {
+ *spriteIdLoc = spriteId;
+ gSprites[spriteId].oam.priority = 0;
+ gSprites[spriteId].pos2.x = 24;
+ gSprites[spriteId].pos2.y = 80;
+ }
+ }
+}
+
+static void sub_816C0C8(void)
+{
+ u8* spriteIdLoc = &(gUnknown_0203BCC4->spriteId);
+ if(*spriteIdLoc != 0xFF)
+ {
+ FreeSpriteTilesByTag(0x13F6);
+ FreeSpritePaletteByTag(0x13F6);
+ DestroySprite(&(gSprites[*spriteIdLoc]));
+ *spriteIdLoc = 0xFF;
+ }
+}
+
+static void sub_816C110(void)
+{
+ CompactPCItems();
+ sub_812220C(gSaveBlock1Ptr->pcItems, 50, &(playerPCItemPageInfo.pageItems), &(playerPCItemPageInfo.count), 0x8);
+}
+
+static void sub_816C140(void)
+{
+ sub_812225C(&(playerPCItemPageInfo.itemsAbove), &(playerPCItemPageInfo.cursorPos), playerPCItemPageInfo.pageItems, playerPCItemPageInfo.count);
+}
+
+static void ItemStorage_ProcessWithdrawTossInput(u8 taskId)
+{
+ s16 *data;
+ bool32 toss;
+ u32 i, x;
+ u8 windowId;
+ const u8* text;
+
+ data = gTasks[taskId].data;
+ for(i = 0; i <=3; i++)
+ sub_816BC7C(i);
+ toss = data[3];
+ text = gText_TossItem;
+ if(!toss)
+ text = gText_WithdrawItem;
+ x = GetStringCenterAlignXOffset(1, text, 104);
+ PrintTextOnWindow(gUnknown_0203BCC4->windowIds[3], 1, text, x, 1, 0, NULL);
+ CopyWindowToVram(gUnknown_0203BCC4->windowIds[2], 2);
+ sub_816C110();
+ sub_816C140();
+ ItemStorage_RefreshListMenu();
+ data[5] = ListMenuInit(&gMultiuseListMenuTemplate, playerPCItemPageInfo.itemsAbove, playerPCItemPageInfo.cursorPos);
+ ItemStorage_StartScrollIndicator();
+ schedule_bg_copy_tilemap_to_vram(0);
+ gTasks[taskId].func = ItemStorage_ProcessInput;
+}
+
+static const u8* ItemStorage_GetItemPcResponse(u16 itemId)
+{
+ const u8 *string;
+
+ switch(itemId)
+ {
+ case ITEMPC_GO_BACK_TO_PREV:
+ string = gText_GoBackPrevMenu;
+ break;
+ case ITEMPC_HOW_MANY_TO_WITHDRAW:
+ string = gText_WithdrawHowManyItems;
+ break;
+ case ITEMPC_WITHDREW_THING:
+ string = gText_WithdrawXItems;
+ break;
+ case ITEMPC_HOW_MANY_TO_TOSS:
+ string = gText_TossHowManyVar1s;
+ break;
+ case ITEMPC_THREW_AWAY_ITEM:
+ string = gText_ThrewAwayVar2Var1s;
+ break;
+ case ITEMPC_NO_MORE_ROOM:
+ string = gText_NoRoomInBag;
+ break;
+ case ITEMPC_TOO_IMPORTANT:
+ string = gText_TooImportantToToss;
+ break;
+ case ITEMPC_OKAY_TO_THROW_AWAY:
+ string = gText_ConfirmTossItems;
+ break;
+ case ITEMPC_SWITCH_WHICH_ITEM:
+ string = gText_MoveVar1Where;
+ break;
+ default:
+ string = ItemId_GetDescription(itemId);
+ break;
+ }
+ return string;
+}
+
+static void ItemStorage_PrintItemPcResponse(const u8 *string)
+{
+ u8 windowId = gUnknown_0203BCC4->windowIds[1];
+ FillWindowPixelBuffer(windowId, 0x11);
+ StringExpandPlaceholders(gStringVar4, string);
+ PrintTextOnWindow(windowId, 1, gStringVar4, 0, 1, 0, NULL);
+}
+
+static void ItemStorage_ProcessInput(u8 taskId)
+{
+ s16 *data;
+ s32 id;
+
+ data = gTasks[taskId].data;
+ if(gMain.newKeys & SELECT_BUTTON)
+ {
+ ListMenuGetScrollAndRow(data[5], &(playerPCItemPageInfo.itemsAbove), &(playerPCItemPageInfo.cursorPos));
+ if((playerPCItemPageInfo.itemsAbove + playerPCItemPageInfo.cursorPos) != (playerPCItemPageInfo.count - 1))
+ {
+ PlaySE(SE_SELECT);
+ ItemStorage_ItemSwapChoosePrompt(taskId);
+ }
+ }
+ else
+ {
+ id = ListMenuHandleInputGetItemId(data[5]);
+ ListMenuGetScrollAndRow(data[5], &(playerPCItemPageInfo.itemsAbove), &(playerPCItemPageInfo.cursorPos));
+ switch(id)
+ {
+ case -1:
+ break;
+ case -2:
+ PlaySE(SE_SELECT);
+ ItemStorage_GoBackToPlayerPCMenu(taskId);
+ break;
+ default:
+ PlaySE(SE_SELECT);
+ ItemStorage_DoItemAction(taskId);
+ break;
+ }
+ }
+}
+
+static void ItemStorage_GoBackToPlayerPCMenu_InitStorage(u8 taskId)
+{
+ s16 *data;
+
+ data = gTasks[taskId].data;
+ if(!IsDma3ManagerBusyWithBgCopy())
+ {
+ NewMenuHelpers_DrawDialogueFrame(0, 0);
+ if(!data[3])
+ InitItemStorageMenu(taskId, ITEMPC_MENU_WITHDRAW);
+ else
+ InitItemStorageMenu(taskId, ITEMPC_MENU_TOSS);
+ gTasks[taskId].func = ItemStorageMenuProcessInput;
+ }
+}
+
+static void ItemStorage_GoBackToPlayerPCMenu(u8 taskId)
+{
+ s16 *data;
+
+ data = gTasks[taskId].data;
+ sub_816C0C8();
+ ItemStorage_RemoveScrollIndicator();
+ DestroyListMenuTask(data[5], NULL, NULL);
+ sub_81223B0(gUnknown_0203BCC4->spriteIds, 7);
+ sub_816BC58();
+ gTasks[taskId].func = ItemStorage_GoBackToPlayerPCMenu_InitStorage;
+}
+
+static void ItemStorage_ItemSwapChoosePrompt(u8 taskId)
+{
+ s16 *data;
+
+ data = gTasks[taskId].data;
+ sub_81AF15C(data[5], 16, 1);
+ gUnknown_0203BCC4->unk666 = (playerPCItemPageInfo.itemsAbove + playerPCItemPageInfo.cursorPos);
+ sub_816BFB8(data[5], 0, 0);
+ sub_816C690(gUnknown_0203BCC4->unk666);
+ CopyItemName(gSaveBlock1Ptr->pcItems[gUnknown_0203BCC4->unk666].itemId, gStringVar1);
+ ItemStorage_PrintItemPcResponse(ItemStorage_GetItemPcResponse(ITEMPC_SWITCH_WHICH_ITEM));
+ gTasks[taskId].func = sub_816C4FC;
+}
+
+static void sub_816C4FC(u8 taskId)
+{
+ s16 *data;
+ s32 id;
+
+ data = gTasks[taskId].data;
+ if(gMain.newKeys & SELECT_BUTTON)
+ {
+ ListMenuGetScrollAndRow(data[5], &(playerPCItemPageInfo.itemsAbove), &(playerPCItemPageInfo.cursorPos));
+ ItemStorage_DoItemSwap(taskId, FALSE);
+ return;
+ }
+ id = ListMenuHandleInputGetItemId(data[5]);
+ ListMenuGetScrollAndRow(data[5], &(playerPCItemPageInfo.itemsAbove), &(playerPCItemPageInfo.cursorPos));
+ sub_81223FC(gUnknown_0203BCC4->spriteIds, 7, 0);
+ sub_816C690(playerPCItemPageInfo.cursorPos);
+ switch(id)
+ {
+ case -1:
+ break;
+ case -2:
+ if(gMain.newKeys & A_BUTTON)
+ {
+ ItemStorage_DoItemSwap(taskId, FALSE);
+ }
+ else
+ ItemStorage_DoItemSwap(taskId, TRUE);
+ break;
+ default:
+ ItemStorage_DoItemSwap(taskId, FALSE);
+ break;
+ }
+}
+
+static void ItemStorage_DoItemSwap(u8 taskId, bool8 a)
+{
+ s16 *data;
+ u16 b;
+ u8 c;
+
+ data = gTasks[taskId].data;
+ b = (playerPCItemPageInfo.itemsAbove + playerPCItemPageInfo.cursorPos);
+ PlaySE(SE_SELECT);
+ DestroyListMenuTask(data[5], &(playerPCItemPageInfo.itemsAbove), &(playerPCItemPageInfo.cursorPos));
+ if(!a)
+ {
+ c = gUnknown_0203BCC4->unk666;
+ if(c != b)
+ {
+ if(c != b - 1)
+ {
+ MoveItemSlotInList(gSaveBlock1Ptr->pcItems, c, b);
+ ItemStorage_RefreshListMenu();
+ }
+ }
+ else
+ goto LABEL_SKIP_CURSOR_DECREMENT;
+ }
+ if (gUnknown_0203BCC4->unk666 < b)
+ playerPCItemPageInfo.cursorPos--;
+ LABEL_SKIP_CURSOR_DECREMENT:
+ sub_81223FC(gUnknown_0203BCC4->spriteIds, 7, 1);
+ gUnknown_0203BCC4->unk666 = 0xFF;
+ data[5] = ListMenuInit(&gMultiuseListMenuTemplate, playerPCItemPageInfo.itemsAbove, playerPCItemPageInfo.cursorPos);
+ schedule_bg_copy_tilemap_to_vram(0);
+ gTasks[taskId].func = ItemStorage_ProcessInput;
+}
+
+static void sub_816C690(u8 a)
+{
+ sub_8122448(gUnknown_0203BCC4->spriteIds, 7, 128, ((a+1) * 16));
+}
+
+static void sub_816C6BC(u8 windowId, u16 value, u32 mode, u8 x, u8 y, u8 n)
+{
+ ConvertIntToDecimalStringN(gStringVar1, value, mode, n);
+ StringExpandPlaceholders(gStringVar4, gText_xVar1);
+ PrintTextOnWindow(windowId, 1, gStringVar4, GetStringCenterAlignXOffset(1, gStringVar4, 48), y, 0, NULL);
+}
+
+static void ItemStorage_DoItemAction(u8 taskId)
+{
+ s16 *data;
+ u16 b;
+
+ data = gTasks[taskId].data;
+ b = (playerPCItemPageInfo.cursorPos + playerPCItemPageInfo.itemsAbove);
+ ItemStorage_RemoveScrollIndicator();
+ data[2] = 1;
+ if(!data[3])
+ {
+ if(gSaveBlock1Ptr->pcItems[b].quantity == 1)
+ {
+ ItemStorage_DoItemWithdraw(taskId);
+ return;
+ }
+ CopyItemName(gSaveBlock1Ptr->pcItems[b].itemId, gStringVar1);
+ ItemStorage_PrintItemPcResponse(ItemStorage_GetItemPcResponse(ITEMPC_HOW_MANY_TO_WITHDRAW));
+ }
+ else
+ {
+ if(gSaveBlock1Ptr->pcItems[b].quantity == 1)
+ {
+ ItemStorage_DoItemToss(taskId);
+ return;
+ }
+ CopyItemName(gSaveBlock1Ptr->pcItems[b].itemId, gStringVar1);
+ ItemStorage_PrintItemPcResponse(ItemStorage_GetItemPcResponse(ITEMPC_HOW_MANY_TO_TOSS));
+ }
+ sub_816C6BC(sub_816BC7C(4), data[2], STR_CONV_MODE_LEADING_ZEROS, 8, 1, 3);
+ gTasks[taskId].func = ItemStorage_HandleQuantityRolling;
+}
+
+static void ItemStorage_HandleQuantityRolling(u8 taskId)
+{
+ s16 *data;
+ u16 b;
+
+ data = gTasks[taskId].data;
+ b = (playerPCItemPageInfo.cursorPos + playerPCItemPageInfo.itemsAbove);
+ if(AdjustQuantityAccordingToDPadInput(&(data[2]), gSaveBlock1Ptr->pcItems[b].quantity) == TRUE)
+ sub_816C6BC(sub_816BC7C(4), data[2], STR_CONV_MODE_LEADING_ZEROS, 8, 1, 3);
+ else
+ {
+ if(gMain.newKeys & A_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ sub_816BCC4(4);
+ if(!data[3])
+ ItemStorage_DoItemWithdraw(taskId);
+ else
+ ItemStorage_DoItemToss(taskId);
+ }
+ else if(gMain.newKeys & B_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ sub_816BCC4(4);
+ ItemStorage_PrintItemPcResponse(ItemStorage_GetItemPcResponse(gSaveBlock1Ptr->pcItems[b].itemId));
+ ItemStorage_StartScrollIndicatorAndProcessInput(taskId);
+ }
+ }
+}
+
+static void ItemStorage_DoItemWithdraw(u8 taskId)
+{
+ s16 *data;
+ u16 b;
+
+ data = gTasks[taskId].data;
+ b = (playerPCItemPageInfo.cursorPos + playerPCItemPageInfo.itemsAbove);
+ if(AddBagItem(gSaveBlock1Ptr->pcItems[b].itemId, data[2]) == TRUE)
+ {
+ CopyItemName(gSaveBlock1Ptr->pcItems[b].itemId, gStringVar1);
+ ConvertIntToDecimalStringN(gStringVar2, data[2], STR_CONV_MODE_LEFT_ALIGN, 3);
+ ItemStorage_PrintItemPcResponse(ItemStorage_GetItemPcResponse(ITEMPC_WITHDREW_THING));
+ gTasks[taskId].func = ItemStorage_HandleRemoveItem;
+ }
+ else
+ {
+ data[2] = 0;
+ ItemStorage_PrintItemPcResponse(ItemStorage_GetItemPcResponse(ITEMPC_NO_MORE_ROOM));
+ gTasks[taskId].func = ItemStorage_WaitPressHandleResumeProcessInput;
+ }
+}
+
+static void ItemStorage_DoItemToss(u8 taskId)
+{
+ s16 *data;
+ u16 b;
+
+ data = gTasks[taskId].data;
+ b = (playerPCItemPageInfo.cursorPos + playerPCItemPageInfo.itemsAbove);
+ if(!ItemId_GetImportance(gSaveBlock1Ptr->pcItems[b].itemId))
+ {
+ CopyItemName(gSaveBlock1Ptr->pcItems[b].itemId, gStringVar1);
+ ConvertIntToDecimalStringN(gStringVar2, data[2], STR_CONV_MODE_LEFT_ALIGN, 3);
+ ItemStorage_PrintItemPcResponse(ItemStorage_GetItemPcResponse(ITEMPC_OKAY_TO_THROW_AWAY));
+ CreateYesNoMenuWithCallbacks(taskId, &gUnknown_085DFF84, 1, 0, 1, 0x214, 0xE, &ResumeFromWithdrawYesNoFuncList);
+ }
+ else
+ {
+ data[2] = 0;
+ ItemStorage_PrintItemPcResponse(ItemStorage_GetItemPcResponse(ITEMPC_TOO_IMPORTANT));
+ gTasks[taskId].func = ItemStorage_WaitPressHandleResumeProcessInput;
+ }
+}
+
+static void ItemStorage_ResumeInputFromYesToss(u8 taskId)
+{
+ ItemStorage_PrintItemPcResponse(ItemStorage_GetItemPcResponse(ITEMPC_THREW_AWAY_ITEM));
+ gTasks[taskId].func = ItemStorage_HandleRemoveItem;
+}
+
+static void ItemStorage_ResumeInputFromNoToss(u8 taskId)
+{
+ ItemStorage_PrintItemPcResponse(ItemStorage_GetItemPcResponse(gSaveBlock1Ptr->pcItems[(playerPCItemPageInfo.itemsAbove + playerPCItemPageInfo.cursorPos)].itemId));
+ ItemStorage_StartScrollIndicatorAndProcessInput(taskId);
+}
+
+static void ItemStorage_HandleRemoveItem(u8 taskId)
+{
+ s16 *data;
+
+ data = gTasks[taskId].data;
+ if(gMain.newKeys & (A_BUTTON | B_BUTTON))
+ {
+ RemovePCItem((playerPCItemPageInfo.cursorPos + playerPCItemPageInfo.itemsAbove), data[2]);
+ DestroyListMenuTask(data[5], &(playerPCItemPageInfo.itemsAbove), &(playerPCItemPageInfo.cursorPos));
+ sub_816C110();
+ sub_816C140();
+ ItemStorage_RefreshListMenu();
+ data[5] = ListMenuInit(&gMultiuseListMenuTemplate, playerPCItemPageInfo.itemsAbove, playerPCItemPageInfo.cursorPos);
+ ItemStorage_StartScrollIndicatorAndProcessInput(taskId);
+ }
+}
+
+static void ItemStorage_WaitPressHandleResumeProcessInput(u8 taskId)
+{
+ s16 *data;
+
+ data = gTasks[taskId].data;
+ if(gMain.newKeys & (A_BUTTON | B_BUTTON))
+ {
+ ItemStorage_PrintItemPcResponse(ItemStorage_GetItemPcResponse(gSaveBlock1Ptr->pcItems[(playerPCItemPageInfo.itemsAbove + playerPCItemPageInfo.cursorPos)].itemId));
+ ItemStorage_StartScrollIndicatorAndProcessInput(taskId);
+ }
+}
+
+static void ItemStorage_StartScrollIndicatorAndProcessInput(u8 taskId)
+{
+ ItemStorage_StartScrollIndicator();
+ gTasks[taskId].func = ItemStorage_ProcessInput;
+}
diff --git a/src/pokeball.c b/src/pokeball.c
index 795a33827..8173c4a90 100644
--- a/src/pokeball.c
+++ b/src/pokeball.c
@@ -43,7 +43,7 @@ static void sub_80768F0(struct Sprite *sprite);
static void sub_80769A8(struct Sprite *sprite);
static void sub_80769CC(struct Sprite *sprite);
static void SpriteCB_HitAnimHealthoxEffect(struct Sprite *sprite);
-static u16 GetBankPokeballItemId(u8 bank);
+static u16 GetBattlerPokeballItemId(u8 battlerId);
// rom const data
@@ -317,11 +317,11 @@ const struct SpriteTemplate gBallSpriteTemplates[POKEBALL_COUNT] =
},
};
-#define tFrames data[0]
-#define tPan data[1]
-#define tThrowId data[2]
-#define tBank data[3]
-#define tOpponentBank data[4]
+#define tFrames data[0]
+#define tPan data[1]
+#define tThrowId data[2]
+#define tBattler data[3]
+#define tOpponentBattler data[4]
u8 DoPokeballSendOutAnimation(s16 pan, u8 kindOfThrow)
{
@@ -333,17 +333,17 @@ u8 DoPokeballSendOutAnimation(s16 pan, u8 kindOfThrow)
taskId = CreateTask(Task_DoPokeballSendOutAnim, 5);
gTasks[taskId].tPan = pan;
gTasks[taskId].tThrowId = kindOfThrow;
- gTasks[taskId].tBank = gActiveBattler;
+ gTasks[taskId].tBattler = gActiveBattler;
return 0;
}
-#define sBank data[6]
+#define sBattler data[6]
static void Task_DoPokeballSendOutAnim(u8 taskId)
{
u16 throwCaseId;
- u8 bank;
+ u8 battlerId;
u16 itemId, ballId;
u8 ballSpriteId;
bool8 notSendOut = FALSE;
@@ -355,12 +355,12 @@ static void Task_DoPokeballSendOutAnim(u8 taskId)
}
throwCaseId = gTasks[taskId].tThrowId;
- bank = gTasks[taskId].tBank;
+ battlerId = gTasks[taskId].tBattler;
- if (GetBattlerSide(bank) != B_SIDE_PLAYER)
- itemId = GetMonData(&gEnemyParty[gBattlerPartyIndexes[bank]], MON_DATA_POKEBALL);
+ if (GetBattlerSide(battlerId) != B_SIDE_PLAYER)
+ itemId = GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_POKEBALL);
else
- itemId = GetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_POKEBALL);
+ itemId = GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_POKEBALL);
ballId = ItemIdToBallId(itemId);
LoadBallGfx(ballId);
@@ -372,15 +372,15 @@ static void Task_DoPokeballSendOutAnim(u8 taskId)
switch (throwCaseId)
{
case POKEBALL_PLAYER_SENDOUT:
- gBattlerTarget = bank;
+ gBattlerTarget = battlerId;
gSprites[ballSpriteId].pos1.x = 24;
gSprites[ballSpriteId].pos1.y = 68;
gSprites[ballSpriteId].callback = SpriteCB_PlayerMonSendOut_1;
break;
case POKEBALL_OPPONENT_SENDOUT:
- gSprites[ballSpriteId].pos1.x = GetBattlerSpriteCoord(bank, BANK_X_POS);
- gSprites[ballSpriteId].pos1.y = GetBattlerSpriteCoord(bank, BANK_Y_POS) + 24;
- gBattlerTarget = bank;
+ gSprites[ballSpriteId].pos1.x = GetBattlerSpriteCoord(battlerId, BANK_X_POS);
+ gSprites[ballSpriteId].pos1.y = GetBattlerSpriteCoord(battlerId, BANK_Y_POS) + 24;
+ gBattlerTarget = battlerId;
gSprites[ballSpriteId].data[0] = 0;
gSprites[ballSpriteId].callback = SpriteCB_OpponentMonSendOut;
break;
@@ -390,7 +390,7 @@ static void Task_DoPokeballSendOutAnim(u8 taskId)
break;
}
- gSprites[ballSpriteId].sBank = gBattlerTarget;
+ gSprites[ballSpriteId].sBattler = gBattlerTarget;
if (!notSendOut)
{
DestroyTask(taskId);
@@ -404,7 +404,7 @@ static void Task_DoPokeballSendOutAnim(u8 taskId)
gSprites[ballSpriteId].data[5] = -40;
sub_80A68D4(&gSprites[ballSpriteId]);
gSprites[ballSpriteId].oam.affineParam = taskId;
- gTasks[taskId].tOpponentBank = gBattlerTarget;
+ gTasks[taskId].tOpponentBattler = gBattlerTarget;
gTasks[taskId].func = TaskDummy;
PlaySE(SE_NAGERU);
}
@@ -415,7 +415,7 @@ static void SpriteCB_TestBallThrow(struct Sprite *sprite)
{
u16 ballId;
u8 taskId = sprite->oam.affineParam;
- u8 opponentBank = gTasks[taskId].tOpponentBank;
+ u8 opponentBattler = gTasks[taskId].tOpponentBattler;
u8 noOfShakes = gTasks[taskId].tThrowId;
StartSpriteAnim(sprite, 1);
@@ -425,10 +425,10 @@ static void SpriteCB_TestBallThrow(struct Sprite *sprite)
sprite->pos2.x = 0;
sprite->pos2.y = 0;
sprite->data[5] = 0;
- ballId = ItemIdToBallId(GetBankPokeballItemId(opponentBank));
+ ballId = ItemIdToBallId(GetBattlerPokeballItemId(opponentBattler));
LaunchBallStarsTask(sprite->pos1.x, sprite->pos1.y - 5, 1, 0x1C, ballId);
- sprite->data[0] = LaunchBallFadeMonTask(FALSE, opponentBank, 14, ballId);
- sprite->sBank = opponentBank;
+ sprite->data[0] = LaunchBallFadeMonTask(FALSE, opponentBattler, 14, ballId);
+ sprite->sBattler = opponentBattler;
sprite->data[7] = noOfShakes;
DestroyTask(taskId);
sprite->callback = sub_80756D4;
@@ -438,8 +438,8 @@ static void SpriteCB_TestBallThrow(struct Sprite *sprite)
#undef tFrames
#undef tPan
#undef tThrowId
-#undef tBank
-#undef tOpponentBank
+#undef tBattler
+#undef tOpponentBattler
static void sub_80756D4(struct Sprite *sprite)
{
@@ -452,9 +452,9 @@ static void sub_80756E0(struct Sprite *sprite)
{
sprite->data[5] = 0;
sprite->callback = sub_807574C;
- StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[sprite->sBank]], 2);
- AnimateSprite(&gSprites[gBattlerSpriteIds[sprite->sBank]]);
- gSprites[gBattlerSpriteIds[sprite->sBank]].data[1] = 0;
+ StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[sprite->sBattler]], 2);
+ AnimateSprite(&gSprites[gBattlerSpriteIds[sprite->sBattler]]);
+ gSprites[gBattlerSpriteIds[sprite->sBattler]].data[1] = 0;
}
}
@@ -463,17 +463,17 @@ static void sub_807574C(struct Sprite *sprite)
sprite->data[5]++;
if (sprite->data[5] == 11)
PlaySE(SE_SUIKOMU);
- if (gSprites[gBattlerSpriteIds[sprite->sBank]].affineAnimEnded)
+ if (gSprites[gBattlerSpriteIds[sprite->sBattler]].affineAnimEnded)
{
StartSpriteAnim(sprite, 2);
- gSprites[gBattlerSpriteIds[sprite->sBank]].invisible = TRUE;
+ gSprites[gBattlerSpriteIds[sprite->sBattler]].invisible = TRUE;
sprite->data[5] = 0;
sprite->callback = sub_80757E4;
}
else
{
- gSprites[gBattlerSpriteIds[sprite->sBank]].data[1] += 0x60;
- gSprites[gBattlerSpriteIds[sprite->sBank]].pos2.y = -gSprites[gBattlerSpriteIds[sprite->sBank]].data[1] >> 8;
+ gSprites[gBattlerSpriteIds[sprite->sBattler]].data[1] += 0x60;
+ gSprites[gBattlerSpriteIds[sprite->sBattler]].pos2.y = -gSprites[gBattlerSpriteIds[sprite->sBattler]].data[1] >> 8;
}
}
@@ -641,7 +641,7 @@ static void sub_8075970(struct Sprite *sprite)
#define tCryTaskSpecies data[0]
#define tCryTaskPan data[1]
#define tCryTaskWantedCry data[2]
-#define tCryTaskBank data[3]
+#define tCryTaskBattler data[3]
#define tCryTaskMonSpriteId data[4]
#define tCryTaskMonPtr1 data[5]
#define tCryTaskMonPtr2 data[6]
@@ -653,7 +653,7 @@ static void Task_PlayCryWhenReleasedFromBall(u8 taskId)
u8 wantedCry = gTasks[taskId].tCryTaskWantedCry;
s8 pan = gTasks[taskId].tCryTaskPan;
u16 species = gTasks[taskId].tCryTaskSpecies;
- u8 bank = gTasks[taskId].tCryTaskBank;
+ u8 battlerId = gTasks[taskId].tCryTaskBattler;
u8 monSpriteId = gTasks[taskId].tCryTaskMonSpriteId;
struct Pokemon *mon = (void*)(u32)((gTasks[taskId].tCryTaskMonPtr1 << 0x10) | (u16)(gTasks[taskId].tCryTaskMonPtr2));
@@ -669,7 +669,7 @@ static void Task_PlayCryWhenReleasedFromBall(u8 taskId)
PlayCry3(species, pan, 0);
else
PlayCry3(species, pan, 11);
- gBattleSpritesDataPtr->healthBoxesData[bank].field_1_x40 = 0;
+ gBattleSpritesDataPtr->healthBoxesData[battlerId].field_1_x40 = 0;
DestroyTask(taskId);
break;
case 2:
@@ -685,7 +685,7 @@ static void Task_PlayCryWhenReleasedFromBall(u8 taskId)
else
PlayCry4(species, pan, 12);
- gBattleSpritesDataPtr->healthBoxesData[bank].field_1_x40 = 0;
+ gBattleSpritesDataPtr->healthBoxesData[battlerId].field_1_x40 = 0;
DestroyTask(taskId);
}
else
@@ -724,7 +724,7 @@ static void Task_PlayCryWhenReleasedFromBall(u8 taskId)
else
PlayCry4(species, pan, 11);
- gBattleSpritesDataPtr->healthBoxesData[bank].field_1_x40 = 0;
+ gBattleSpritesDataPtr->healthBoxesData[battlerId].field_1_x40 = 0;
DestroyTask(taskId);
break;
}
@@ -732,13 +732,13 @@ static void Task_PlayCryWhenReleasedFromBall(u8 taskId)
static void SpriteCB_ReleaseMonFromBall(struct Sprite *sprite)
{
- u8 bank = sprite->sBank;
+ u8 battlerId = sprite->sBattler;
u32 ballId;
StartSpriteAnim(sprite, 1);
- ballId = ItemIdToBallId(GetBankPokeballItemId(bank));
+ ballId = ItemIdToBallId(GetBattlerPokeballItemId(battlerId));
LaunchBallStarsTask(sprite->pos1.x, sprite->pos1.y - 5, 1, 0x1C, ballId);
- sprite->data[0] = LaunchBallFadeMonTask(1, sprite->sBank, 14, ballId);
+ sprite->data[0] = LaunchBallFadeMonTask(1, sprite->sBattler, 14, ballId);
sprite->callback = HandleBallAnimEnd;
if (gMain.inBattle)
@@ -749,19 +749,19 @@ static void SpriteCB_ReleaseMonFromBall(struct Sprite *sprite)
u16 wantedCryCase;
u8 taskId;
- if (GetBattlerSide(bank) != B_SIDE_PLAYER)
+ if (GetBattlerSide(battlerId) != B_SIDE_PLAYER)
{
- mon = &gEnemyParty[gBattlerPartyIndexes[bank]];
+ mon = &gEnemyParty[gBattlerPartyIndexes[battlerId]];
pan = 25;
}
else
{
- mon = &gPlayerParty[gBattlerPartyIndexes[bank]];
+ mon = &gPlayerParty[gBattlerPartyIndexes[battlerId]];
pan = -25;
}
species = GetMonData(mon, MON_DATA_SPECIES);
- if ((bank == GetBattlerAtPosition(B_POSITION_PLAYER_LEFT) || bank == GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT))
+ if ((battlerId == GetBattlerAtPosition(B_POSITION_PLAYER_LEFT) || battlerId == GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT))
&& IsDoubleBattle() && gBattleSpritesDataPtr->animationData->field_9_x1)
{
if (gBattleTypeFlags & BATTLE_TYPE_MULTI && gBattleTypeFlags & BATTLE_TYPE_LINK)
@@ -777,39 +777,39 @@ static void SpriteCB_ReleaseMonFromBall(struct Sprite *sprite)
if (!IsDoubleBattle() || !gBattleSpritesDataPtr->animationData->field_9_x1)
wantedCryCase = 0;
- else if (bank == GetBattlerAtPosition(B_POSITION_PLAYER_LEFT) || bank == GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT))
+ else if (battlerId == GetBattlerAtPosition(B_POSITION_PLAYER_LEFT) || battlerId == GetBattlerAtPosition(B_POSITION_OPPONENT_LEFT))
wantedCryCase = 1;
else
wantedCryCase = 2;
- gBattleSpritesDataPtr->healthBoxesData[bank].field_1_x40 = 1;
+ gBattleSpritesDataPtr->healthBoxesData[battlerId].field_1_x40 = 1;
taskId = CreateTask(Task_PlayCryWhenReleasedFromBall, 3);
gTasks[taskId].tCryTaskSpecies = species;
gTasks[taskId].tCryTaskPan = pan;
gTasks[taskId].tCryTaskWantedCry = wantedCryCase;
- gTasks[taskId].tCryTaskBank = bank;
- gTasks[taskId].tCryTaskMonSpriteId = gBattlerSpriteIds[sprite->sBank];
+ gTasks[taskId].tCryTaskBattler = battlerId;
+ gTasks[taskId].tCryTaskMonSpriteId = gBattlerSpriteIds[sprite->sBattler];
gTasks[taskId].tCryTaskMonPtr1 = (u32)(mon) >> 0x10;
gTasks[taskId].tCryTaskMonPtr2 = (u32)(mon);
gTasks[taskId].tCryTaskState = 0;
}
- StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[sprite->sBank]], 1);
+ StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[sprite->sBattler]], 1);
- if (GetBattlerSide(sprite->sBank) == B_SIDE_OPPONENT)
- gSprites[gBattlerSpriteIds[sprite->sBank]].callback = sub_8039B58;
+ if (GetBattlerSide(sprite->sBattler) == B_SIDE_OPPONENT)
+ gSprites[gBattlerSpriteIds[sprite->sBattler]].callback = sub_8039B58;
else
- gSprites[gBattlerSpriteIds[sprite->sBank]].callback = sub_8039E44;
+ gSprites[gBattlerSpriteIds[sprite->sBattler]].callback = sub_8039E44;
- AnimateSprite(&gSprites[gBattlerSpriteIds[sprite->sBank]]);
- gSprites[gBattlerSpriteIds[sprite->sBank]].data[1] = 0x1000;
+ AnimateSprite(&gSprites[gBattlerSpriteIds[sprite->sBattler]]);
+ gSprites[gBattlerSpriteIds[sprite->sBattler]].data[1] = 0x1000;
}
#undef tCryTaskSpecies
#undef tCryTaskPan
#undef tCryTaskWantedCry
-#undef tCryTaskBank
+#undef tCryTaskBattler
#undef tCryTaskMonSpriteId
#undef tCryTaskMonPtr1
#undef tCryTaskMonPtr2
@@ -828,37 +828,37 @@ static void sub_8075FB4(struct Sprite *sprite)
static void HandleBallAnimEnd(struct Sprite *sprite)
{
bool8 affineAnimEnded = FALSE;
- u8 bank = sprite->sBank;
+ u8 battlerId = sprite->sBattler;
- gSprites[gBattlerSpriteIds[bank]].invisible = FALSE;
+ gSprites[gBattlerSpriteIds[battlerId]].invisible = FALSE;
if (sprite->animEnded)
sprite->invisible = TRUE;
- if (gSprites[gBattlerSpriteIds[bank]].affineAnimEnded)
+ if (gSprites[gBattlerSpriteIds[battlerId]].affineAnimEnded)
{
- StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[bank]], 0);
+ StartSpriteAffineAnim(&gSprites[gBattlerSpriteIds[battlerId]], 0);
affineAnimEnded = TRUE;
}
else
{
- gSprites[gBattlerSpriteIds[bank]].data[1] -= 288;
- gSprites[gBattlerSpriteIds[bank]].pos2.y = gSprites[gBattlerSpriteIds[bank]].data[1] >> 8;
+ gSprites[gBattlerSpriteIds[battlerId]].data[1] -= 288;
+ gSprites[gBattlerSpriteIds[battlerId]].pos2.y = gSprites[gBattlerSpriteIds[battlerId]].data[1] >> 8;
}
if (sprite->animEnded && affineAnimEnded)
{
- s32 i, doneBanks;
+ s32 i, doneBattlers;
- gSprites[gBattlerSpriteIds[bank]].pos2.y = 0;
+ gSprites[gBattlerSpriteIds[battlerId]].pos2.y = 0;
gDoingBattleAnim = FALSE;
- gBattleSpritesDataPtr->healthBoxesData[bank].ballAnimActive = 0;
+ gBattleSpritesDataPtr->healthBoxesData[battlerId].ballAnimActive = 0;
FreeSpriteOamMatrix(sprite);
DestroySprite(sprite);
- for (doneBanks = 0, i = 0; i < MAX_BATTLERS_COUNT; i++)
+ for (doneBattlers = 0, i = 0; i < MAX_BATTLERS_COUNT; i++)
{
if (gBattleSpritesDataPtr->healthBoxesData[i].ballAnimActive == 0)
- doneBanks++;
+ doneBattlers++;
}
- if (doneBanks == MAX_BATTLERS_COUNT)
+ if (doneBattlers == MAX_BATTLERS_COUNT)
{
for (i = 0; i < POKEBALL_COUNT; i++)
FreeBallGfx(i);
@@ -868,7 +868,7 @@ static void HandleBallAnimEnd(struct Sprite *sprite)
static void sub_80760F8(struct Sprite *sprite)
{
- u8 bank = sprite->sBank;
+ u8 battlerId = sprite->sBattler;
sprite->data[4]++;
if (sprite->data[4] == 40)
@@ -883,21 +883,21 @@ static void sub_80760F8(struct Sprite *sprite)
}
else if (sprite->data[4] == 315)
{
- FreeOamMatrix(gSprites[gBattlerSpriteIds[sprite->sBank]].oam.matrixNum);
- DestroySprite(&gSprites[gBattlerSpriteIds[sprite->sBank]]);
+ FreeOamMatrix(gSprites[gBattlerSpriteIds[sprite->sBattler]].oam.matrixNum);
+ DestroySprite(&gSprites[gBattlerSpriteIds[sprite->sBattler]]);
DestroySpriteAndFreeResources(sprite);
if (gMain.inBattle)
- gBattleSpritesDataPtr->healthBoxesData[bank].ballAnimActive = 0;
+ gBattleSpritesDataPtr->healthBoxesData[battlerId].ballAnimActive = 0;
}
}
static void SpriteCB_PlayerMonSendOut_1(struct Sprite *sprite)
{
sprite->data[0] = 25;
- sprite->data[2] = GetBattlerSpriteCoord(sprite->sBank, 2);
- sprite->data[4] = GetBattlerSpriteCoord(sprite->sBank, 3) + 24;
+ sprite->data[2] = GetBattlerSpriteCoord(sprite->sBattler, 2);
+ sprite->data[4] = GetBattlerSpriteCoord(sprite->sBattler, 3) + 24;
sprite->data[5] = -30;
- sprite->oam.affineParam = sprite->sBank;
+ sprite->oam.affineParam = sprite->sBattler;
sub_80A68D4(sprite);
sprite->callback = SpriteCB_PlayerMonSendOut_2;
}
@@ -923,7 +923,7 @@ static void SpriteCB_PlayerMonSendOut_2(struct Sprite *sprite)
}
r4 = sprite->data[0];
sub_80A6F3C(sprite);
- sprite->data[7] += sprite->sBank / 3;
+ sprite->data[7] += sprite->sBattler / 3;
sprite->pos2.y += Sin(HIBYTE(sprite->data[7]), sprite->data[5]);
sprite->oam.affineParam += 0x100;
if ((sprite->oam.affineParam >> 8) % 3 != 0)
@@ -946,11 +946,11 @@ static void SpriteCB_PlayerMonSendOut_2(struct Sprite *sprite)
sprite->pos1.y += sprite->pos2.y;
sprite->pos2.y = 0;
sprite->pos2.x = 0;
- sprite->sBank = sprite->oam.affineParam & 0xFF;
+ sprite->sBattler = sprite->oam.affineParam & 0xFF;
sprite->data[0] = 0;
if (IsDoubleBattle() && gBattleSpritesDataPtr->animationData->field_9_x1
- && sprite->sBank == GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT))
+ && sprite->sBattler == GetBattlerAtPosition(B_POSITION_PLAYER_RIGHT))
sprite->callback = SpriteCB_ReleaseMon2FromBall;
else
sprite->callback = SpriteCB_ReleaseMonFromBall;
@@ -976,26 +976,26 @@ static void SpriteCB_OpponentMonSendOut(struct Sprite *sprite)
{
sprite->data[0] = 0;
if (IsDoubleBattle() && gBattleSpritesDataPtr->animationData->field_9_x1
- && sprite->sBank == GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT))
+ && sprite->sBattler == GetBattlerAtPosition(B_POSITION_OPPONENT_RIGHT))
sprite->callback = SpriteCB_ReleaseMon2FromBall;
else
sprite->callback = SpriteCB_ReleaseMonFromBall;
}
}
-#undef sBank
+#undef sBattler
static u8 LaunchBallStarsTaskForPokeball(u8 x, u8 y, u8 kindOfStars, u8 d)
{
return LaunchBallStarsTask(x, y, kindOfStars, d, BALL_POKE);
}
-static u8 LaunchBallFadeMonTaskForPokeball(bool8 unFadeLater, u8 bank, u32 arg2)
+static u8 LaunchBallFadeMonTaskForPokeball(bool8 unFadeLater, u8 battlerId, u32 arg2)
{
- return LaunchBallFadeMonTask(unFadeLater, bank, arg2, BALL_POKE);
+ return LaunchBallFadeMonTask(unFadeLater, battlerId, arg2, BALL_POKE);
}
-void CreatePokeballSpriteToReleaseMon(u8 monSpriteId, u8 bank, u8 x, u8 y, u8 oamPriority, u8 subpriortiy, u8 g, u32 h, u16 species)
+void CreatePokeballSpriteToReleaseMon(u8 monSpriteId, u8 battlerId, u8 x, u8 y, u8 oamPriority, u8 subpriortiy, u8 g, u32 h, u16 species)
{
u8 spriteId;
@@ -1012,7 +1012,7 @@ void CreatePokeballSpriteToReleaseMon(u8 monSpriteId, u8 bank, u8 x, u8 y, u8 oa
gSprites[monSpriteId].data[7] = species;
gSprites[spriteId].data[1] = g;
- gSprites[spriteId].data[2] = bank;
+ gSprites[spriteId].data[2] = battlerId;
gSprites[spriteId].data[3] = h;
gSprites[spriteId].data[4] = h >> 0x10;
gSprites[spriteId].oam.priority = oamPriority;
@@ -1027,7 +1027,7 @@ static void sub_8076524(struct Sprite *sprite)
{
u8 r5;
u8 r7 = sprite->data[0];
- u8 bank = sprite->data[2];
+ u8 battlerId = sprite->data[2];
u32 r4 = (u16)sprite->data[3] | ((u16)sprite->data[4] << 16);
if (sprite->subpriority != 0)
@@ -1037,7 +1037,7 @@ static void sub_8076524(struct Sprite *sprite)
StartSpriteAnim(sprite, 1);
LaunchBallStarsTaskForPokeball(sprite->pos1.x, sprite->pos1.y - 5, sprite->oam.priority, r5);
- sprite->data[1] = LaunchBallFadeMonTaskForPokeball(1, bank, r4);
+ sprite->data[1] = LaunchBallFadeMonTaskForPokeball(1, battlerId, r4);
sprite->callback = sub_80765E0;
gSprites[r7].invisible = FALSE;
StartSpriteAffineAnim(&gSprites[r7], 1);
@@ -1175,16 +1175,16 @@ static void DestroySpriteAndFreeResources_(struct Sprite *sprite)
DestroySpriteAndFreeResources(sprite);
}
-void sub_8076918(u8 bank)
+void sub_8076918(u8 battlerId)
{
- struct Sprite *healthboxSprite = &gSprites[gHealthboxSpriteIds[bank]];
+ struct Sprite *healthboxSprite = &gSprites[gHealthboxSpriteIds[battlerId]];
healthboxSprite->data[0] = 5;
healthboxSprite->data[1] = 0;
healthboxSprite->pos2.x = 0x73;
healthboxSprite->pos2.y = 0;
healthboxSprite->callback = sub_80769CC;
- if (GetBattlerSide(bank) != B_SIDE_PLAYER)
+ if (GetBattlerSide(battlerId) != B_SIDE_PLAYER)
{
healthboxSprite->data[0] = -healthboxSprite->data[0];
healthboxSprite->data[1] = -healthboxSprite->data[1];
@@ -1192,7 +1192,7 @@ void sub_8076918(u8 bank)
healthboxSprite->pos2.y = -healthboxSprite->pos2.y;
}
gSprites[healthboxSprite->data[5]].callback(&gSprites[healthboxSprite->data[5]]);
- if (GetBattlerPosition(bank) == B_POSITION_PLAYER_RIGHT)
+ if (GetBattlerPosition(battlerId) == B_POSITION_PLAYER_RIGHT)
healthboxSprite->callback = sub_80769A8;
}
@@ -1214,13 +1214,13 @@ static void sub_80769CC(struct Sprite *sprite)
sprite->callback = SpriteCallbackDummy;
}
-void DoHitAnimHealthboxEffect(u8 bank)
+void DoHitAnimHealthboxEffect(u8 battlerId)
{
u8 spriteId;
spriteId = CreateInvisibleSpriteWithCallback(SpriteCB_HitAnimHealthoxEffect);
gSprites[spriteId].data[0] = 1;
- gSprites[spriteId].data[1] = gHealthboxSpriteIds[bank];
+ gSprites[spriteId].data[1] = gHealthboxSpriteIds[battlerId];
gSprites[spriteId].callback = SpriteCB_HitAnimHealthoxEffect;
}
@@ -1267,10 +1267,10 @@ void FreeBallGfx(u8 ballId)
FreeSpritePaletteByTag(gBallSpritePalettes[ballId].tag);
}
-static u16 GetBankPokeballItemId(u8 bank)
+static u16 GetBattlerPokeballItemId(u8 battlerId)
{
- if (GetBattlerSide(bank) == B_SIDE_PLAYER)
- return GetMonData(&gPlayerParty[gBattlerPartyIndexes[bank]], MON_DATA_POKEBALL);
+ if (GetBattlerSide(battlerId) == B_SIDE_PLAYER)
+ return GetMonData(&gPlayerParty[gBattlerPartyIndexes[battlerId]], MON_DATA_POKEBALL);
else
- return GetMonData(&gEnemyParty[gBattlerPartyIndexes[bank]], MON_DATA_POKEBALL);
+ return GetMonData(&gEnemyParty[gBattlerPartyIndexes[battlerId]], MON_DATA_POKEBALL);
}
diff --git a/src/pokeblock.c b/src/pokeblock.c
index b9d1d94c6..f57b2f0c2 100644
--- a/src/pokeblock.c
+++ b/src/pokeblock.c
@@ -29,6 +29,7 @@
#include "battle_message.h"
#include "safari_zone.h"
#include "lilycove_lady.h"
+#include "overworld.h"
#define POKEBLOCK_MAX_FEEL 99
#define FIELD_E75_COUNT 7
@@ -70,11 +71,10 @@ enum
};
extern u16 gSpecialVar_ItemId;
-extern void (*gFieldCallback)(void);
extern const u16 gUnknown_0860F074[];
-extern void c2_exit_to_overworld_2_switch(void);
+extern void CB2_ReturnToField(void);
extern bool8 sub_81221EC(void);
extern void sub_809882C(u8, u16, u8);
extern void copy_textbox_border_tile_patterns_to_vram(u8, u16, u8);
@@ -91,7 +91,7 @@ static void sub_81362E0(void);
static void sub_8136344(void);
static void HandlePokeblockListMenuItems(void);
static void sub_81363BC(void);
-static void MovePokeblockMenuCursor(u32 pkblId, bool8 arg1, struct ListMenu *arg2);
+static void MovePokeblockMenuCursor(s32 pkblId, bool8 arg1, struct ListMenu *arg2);
static void PutPokeblockInfoText(void);
static void HandlePokeblockMenuCursor(u16 cursorPos, u16 arg1);
static void PutPokeblockListMenuString(u8 *dst, u16 pkblId);
@@ -319,18 +319,18 @@ static const struct ListMenuTemplate sPokeblockListMenuTemplate =
.unk_08 = NULL,
.totalItems = 0,
.maxShowed = 0,
- .unk_10 = 1,
+ .windowId = 1,
.unk_11 = 0,
.unk_12 = 1,
- .cursor_Y = 0,
+ .cursor_X = 0,
.upText_Y = 1,
- .cursorColor = 2,
- .fillColor = 0,
- .cursorShadowColor = 3,
- .unk_16_0 = FALSE,
- .spaceBetweenItems = 32,
- .unk_16_7 = FALSE,
- .unk_17_0 = 1,
+ .cursorPal = 2,
+ .fillValue = 0,
+ .cursorShadowPal = 3,
+ .lettersSpacing = 0,
+ .unk_16_3 = 0,
+ .scrollMultiple = LIST_MULTIPLE_SCROLL_DPAD,
+ .fontId = 1,
.cursorKind = 1
};
@@ -374,7 +374,7 @@ void OpenPokeblockCaseInBattle(void)
void OpenPokeblockCaseOnFeeder(void)
{
- OpenPokeblockCase(PBLOCK_CASE_FEEDER, c2_exit_to_overworld_2_switch);
+ OpenPokeblockCase(PBLOCK_CASE_FEEDER, CB2_ReturnToField);
}
static void CB2_PokeblockMenu(void)
@@ -460,7 +460,7 @@ static bool8 InitPokeblockMenu(void)
gMain.state++;
break;
case 10:
- sub_8122344(&sPokeblockMenu->field_E75, FIELD_E75_COUNT);
+ sub_8122344(sPokeblockMenu->field_E75, FIELD_E75_COUNT);
gMain.state++;
break;
case 11:
@@ -589,7 +589,7 @@ static void PutPokeblockInfoText(void)
{
u8 i;
- const u8 *itemName = ItemId_GetItem(ITEM_POKEBLOCK_CASE)->name;
+ const u8 *itemName = ItemId_GetName(ITEM_POKEBLOCK_CASE);
PrintOnPokeblockWindow(0, itemName, GetStringCenterAlignXOffset(1, itemName, 0x48));
PrintOnPokeblockWindow(2, gText_Spicy, 0);
@@ -620,7 +620,7 @@ static void HandlePokeblockListMenuItems(void)
sPokeblockMenu->items[i].id = LIST_B_PRESSED;
gMultiuseListMenuTemplate = sPokeblockListMenuTemplate;
- gMultiuseListMenuTemplate.unk_17_0 = 7;
+ gMultiuseListMenuTemplate.fontId = 7;
gMultiuseListMenuTemplate.totalItems = sPokeblockMenu->itemsNo;
gMultiuseListMenuTemplate.items = sPokeblockMenu->items;
gMultiuseListMenuTemplate.maxShowed = sPokeblockMenu->maxShowed;
@@ -639,7 +639,7 @@ static void PutPokeblockListMenuString(u8 *dst, u16 pkblId)
StringExpandPlaceholders(txtPtr, gText_LvVar1);
}
-static void MovePokeblockMenuCursor(u32 pkblId, bool8 arg1, struct ListMenu *arg2)
+static void MovePokeblockMenuCursor(s32 pkblId, bool8 arg1, struct ListMenu *arg2)
{
if (arg1 != TRUE)
{
@@ -869,7 +869,7 @@ static void Task_FreeDataAndExitPokeblockCase(u8 taskId)
if (sPokeblockMenu->caseId == PBLOCK_CASE_FEEDER || sPokeblockMenu->caseId == PBLOCK_CASE_GIVE)
gFieldCallback = sub_80AF168;
- sub_81AE6C8(data[0], &sSavedPokeblockData.lastItemPage, &sSavedPokeblockData.lastItemPos);
+ DestroyListMenuTask(data[0], &sSavedPokeblockData.lastItemPage, &sSavedPokeblockData.lastItemPos);
sub_8136418();
ResetSpriteData();
FreeAllSpritePalettes();
@@ -893,7 +893,7 @@ static void Task_HandlePokeblockMenuInput(u8 taskId)
{
if (gMain.newKeys & SELECT_BUTTON)
{
- sub_81AE860(data[0], &sSavedPokeblockData.lastItemPage, &sSavedPokeblockData.lastItemPos);
+ ListMenuGetScrollAndRow(data[0], &sSavedPokeblockData.lastItemPage, &sSavedPokeblockData.lastItemPos);
if (sSavedPokeblockData.lastItemPage + sSavedPokeblockData.lastItemPos != sPokeblockMenu->itemsNo - 1)
{
PlaySE(SE_SELECT);
@@ -908,7 +908,7 @@ static void Task_HandlePokeblockMenuInput(u8 taskId)
u16 oldPosition = sSavedPokeblockData.lastItemPos;
s32 itemId = ListMenuHandleInputGetItemId(data[0]);
- sub_81AE860(data[0], &sSavedPokeblockData.lastItemPage, &sSavedPokeblockData.lastItemPos);
+ ListMenuGetScrollAndRow(data[0], &sSavedPokeblockData.lastItemPage, &sSavedPokeblockData.lastItemPos);
if (oldPosition != sSavedPokeblockData.lastItemPos)
{
HandlePokeblockMenuCursor(oldPosition, 5);
@@ -945,7 +945,7 @@ static void Task_HandlePokeblocksSwapInput(u8 taskId)
if (gMain.newKeys & SELECT_BUTTON)
{
PlaySE(SE_SELECT);
- sub_81AE860(data[0], &sSavedPokeblockData.lastItemPage, &sSavedPokeblockData.lastItemPos);
+ ListMenuGetScrollAndRow(data[0], &sSavedPokeblockData.lastItemPage, &sSavedPokeblockData.lastItemPos);
HandlePokeblocksSwap(taskId, FALSE);
}
else
@@ -954,7 +954,7 @@ static void Task_HandlePokeblocksSwapInput(u8 taskId)
u16 var = sSavedPokeblockData.lastItemPos;
s32 itemId = ListMenuHandleInputGetItemId(data[0]);
- sub_81AE860(data[0], &sSavedPokeblockData.lastItemPage, &sSavedPokeblockData.lastItemPos);
+ ListMenuGetScrollAndRow(data[0], &sSavedPokeblockData.lastItemPage, &sSavedPokeblockData.lastItemPos);
if (i != sSavedPokeblockData.lastItemPage || var != sSavedPokeblockData.lastItemPos)
{
for (i = 0; i < 9; i++)
@@ -996,7 +996,7 @@ static void HandlePokeblocksSwap(u8 taskId, bool8 noSwap)
u16 swappedFromId = sSavedPokeblockData.lastItemPage + sSavedPokeblockData.lastItemPos;
sPokeblockMenu->isSwapping = FALSE;
- sub_81AE6C8(data[0], &sSavedPokeblockData.lastItemPage, &sSavedPokeblockData.lastItemPos);
+ DestroyListMenuTask(data[0], &sSavedPokeblockData.lastItemPage, &sSavedPokeblockData.lastItemPos);
if (!noSwap && data[2] != swappedFromId && data[2] != swappedFromId - 1)
{
@@ -1112,7 +1112,7 @@ static void HandleErasePokeblock(u8 taskId)
lastPos = &sSavedPokeblockData.lastItemPos;
data = gTasks[taskId].data;
- sub_81AE6C8(data[0], lastPage, lastPos);
+ DestroyListMenuTask(data[0], lastPage, lastPos);
HandlePokeblockMenuCursor(*lastPos, 5);
SetMenuItemsCountAndMaxShowed();
sub_81362E0();
diff --git a/src/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..800b7c0cd
--- /dev/null
+++ b/src/pokemon.c
@@ -0,0 +1,6096 @@
+#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 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
+#include "data/battle_moves.h"
+static const u8 sUnreferencedData[] = {0x34, 0x00, 0x10, 0x00, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00};
+
+const u16 gSpeciesToHoennPokedexNum[] = {203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 156, 157, 112, 113, 227, 228, 229, 230, 231, 232, 233, 234, 153, 154, 138, 139, 63, 64, 88, 89, 90, 235, 236, 237, 238, 239, 240, 241, 242, 158, 159, 243, 244, 245, 246, 247, 248, 249, 39, 40, 41, 73, 74, 75, 250, 251, 252, 66, 67, 57, 58, 59, 253, 254, 255, 256, 82, 83, 257, 92, 93, 258, 259, 106, 107, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 84, 85, 270, 271, 272, 273, 274, 275, 276, 108, 109, 169, 170, 277, 278, 279, 184, 185, 50, 51, 143, 144, 280, 281, 282, 283, 284, 167, 285, 52, 53, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 65, 181, 182, 155, 324, 137, 325, 326, 162, 163, 327, 328, 329, 91, 55, 56, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 161, 164, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 168, 357, 358, 359, 103, 104, 360, 361, 180, 362, 363, 364, 365, 115, 366, 367, 186, 165, 166, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 42, 43, 44, 25, 26, 34, 35, 114, 27, 28, 32, 33, 99, 100, 61, 62, 145, 131, 132, 60, 105, 68, 127, 128, 183, 129, 130, 140, 141, 97, 98, 116, 117, 118, 48, 49, 78, 79, 101, 102, 173, 174, 175, 119, 120, 171, 172, 125, 126, 54, 110, 111, 80, 81, 69, 76, 77, 121, 122, 160, 148, 149, 94, 36, 37, 38, 95, 96, 150, 45, 46, 47, 176, 177, 178, 152, 146, 147, 124, 123, 179, 70, 71, 72, 142, 86, 87, 133, 134, 135, 136, 29, 30, 31, 187, 188, 189, 190, 191, 192, 193, 194, 195, 198, 199, 200, 196, 197, 201, 202, 151};
+const u16 gSpeciesToNationalPokedexNum[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 290, 291, 292, 276, 277, 285, 286, 327, 278, 279, 283, 284, 320, 321, 300, 301, 352, 343, 344, 299, 324, 302, 339, 340, 370, 341, 342, 349, 350, 318, 319, 328, 329, 330, 296, 297, 309, 310, 322, 323, 363, 364, 365, 331, 332, 361, 362, 337, 338, 298, 325, 326, 311, 312, 303, 307, 308, 333, 334, 360, 355, 356, 315, 287, 288, 289, 316, 317, 357, 293, 294, 295, 366, 367, 368, 359, 353, 354, 336, 335, 369, 304, 305, 306, 351, 313, 314, 345, 346, 347, 348, 280, 281, 282, 371, 372, 373, 374, 375, 376, 377, 378, 379, 382, 383, 384, 380, 381, 385, 386, 358};
+const u16 gHoennToNationalOrder[] = {252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 63, 64, 65, 290, 291, 292, 293, 294, 295, 296, 297, 118, 119, 129, 130, 298, 183, 184, 74, 75, 76, 299, 300, 301, 41, 42, 169, 72, 73, 302, 303, 304, 305, 306, 66, 67, 68, 307, 308, 309, 310, 311, 312, 81, 82, 100, 101, 313, 314, 43, 44, 45, 182, 84, 85, 315, 316, 317, 318, 319, 320, 321, 322, 323, 218, 219, 324, 88, 89, 109, 110, 325, 326, 27, 28, 327, 227, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 174, 39, 40, 349, 350, 351, 120, 121, 352, 353, 354, 355, 356, 357, 358, 359, 37, 38, 172, 25, 26, 54, 55, 360, 202, 177, 178, 203, 231, 232, 127, 214, 111, 112, 361, 362, 363, 364, 365, 366, 367, 368, 369, 222, 170, 171, 370, 116, 117, 230, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 29, 30, 31, 32, 33, 34, 35, 36, 46, 47, 48, 49, 50, 51, 52, 53, 56, 57, 58, 59, 60, 61, 62, 69, 70, 71, 77, 78, 79, 80, 83, 86, 87, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 102, 103, 104, 105, 106, 107, 108, 113, 114, 115, 122, 123, 124, 125, 126, 128, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 173, 175, 176, 179, 180, 181, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 215, 216, 217, 220, 221, 223, 224, 225, 226, 228, 229, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411};
+
+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 battlerIdAtk, u8 battlerIdDef)
+{
+ 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[battlerIdAtk].holdEffect;
+ attackerHoldEffectParam = gEnigmaBerries[battlerIdAtk].holdEffectParam;
+ }
+ else
+ {
+ attackerHoldEffect = ItemId_GetHoldEffect(attacker->item);
+ attackerHoldEffectParam = ItemId_GetHoldEffectParam(attacker->item);
+ }
+
+ if (defender->item == ITEM_ENIGMA_BERRY)
+ {
+ defenderHoldEffect = gEnigmaBerries[battlerIdDef].holdEffect;
+ defenderHoldEffectParam = gEnigmaBerries[battlerIdDef].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, battlerIdAtk))
+ attack = (110 * attack) / 100;
+ if (ShouldGetStatBadgeBoost(FLAG_BADGE05_GET, battlerIdDef))
+ defense = (110 * defense) / 100;
+ if (ShouldGetStatBadgeBoost(FLAG_BADGE07_GET, battlerIdAtk))
+ spAttack = (110 * spAttack) / 100;
+ if (ShouldGetStatBadgeBoost(FLAG_BADGE07_GET, battlerIdDef))
+ 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[battlerIdAtk] & 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 3f37381c3..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_SPEED);
- 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 0dd1131de..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 gBattlerInMenuId;
-extern u8 gBattlerTarget;
-extern u8 gBattlerAttacker;
-extern u8 gPotentialItemEffectBattler;
-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 = gBattlerInMenuId;
- 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[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 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, gBattlerInMenuId, pokemon_order_func(gBattlerPartyIndexes[gBattlerInMenuId]))
-
- 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_animation.c b/src/pokemon_animation.c
index 02755fe40..c50aa4a75 100644
--- a/src/pokemon_animation.c
+++ b/src/pokemon_animation.c
@@ -1184,7 +1184,7 @@ static void sub_817F9F4(struct Sprite *sprite)
}
#else
-__attribute__((naked))
+NAKED
static void sub_817F9F4(struct Sprite *sprite)
{
asm(".syntax unified\n\
diff --git a/src/pokemon_icon.c b/src/pokemon_icon.c
index 4d1cc51c5..253ab2cb4 100644
--- a/src/pokemon_icon.c
+++ b/src/pokemon_icon.c
@@ -1,9 +1,28 @@
#include "global.h"
#include "sprite.h"
+#include "mail.h"
#include "graphics.h"
+#include "constants/species.h"
+#include "palette.h"
+#include "pokemon_icon.h"
#define POKE_ICON_BASE_PAL_TAG 56000
+struct MonIconSpriteTemplate
+{
+ const struct OamData *oam;
+ const u8 *image;
+ const union AnimCmd *const *anims;
+ const union AffineAnimCmd *const *affineAnims;
+ void (*callback)(struct Sprite *);
+ u16 paletteTag;
+};
+
+// static functions
+static u8 CreateMonIconSprite(struct MonIconSpriteTemplate *, s16, s16, u8);
+
+// .rodata
+
const u8 * const gMonIconTable[] =
{
gMonIcon_Bulbasaur,
@@ -1012,3 +1031,288 @@ const u16 sSpriteImageSizes[3][4] =
0x400, // 4×8
},
};
+
+u8 CreateMonIcon(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority, u32 personality, bool32 extra)
+{
+ u8 spriteId;
+ struct MonIconSpriteTemplate iconTemplate =
+ {
+ .oam = &sMonIconOamData,
+ .image = GetMonIconPtr(species, personality, extra),
+ .anims = sMonIconAnims,
+ .affineAnims = sMonIconAffineAnims,
+ .callback = callback,
+ .paletteTag = POKE_ICON_BASE_PAL_TAG + gMonIconPaletteIndices[species],
+ };
+
+ if (species > SPECIES_EGG)
+ iconTemplate.paletteTag = POKE_ICON_BASE_PAL_TAG;
+
+ spriteId = CreateMonIconSprite(&iconTemplate, x, y, subpriority);
+
+ UpdateMonIconFrame(&gSprites[spriteId]);
+
+ return spriteId;
+}
+
+u8 sub_80D2D78(u16 species, void (*callback)(struct Sprite *), s16 x, s16 y, u8 subpriority, bool32 extra)
+{
+ u8 spriteId;
+ struct MonIconSpriteTemplate iconTemplate =
+ {
+ .oam = &sMonIconOamData,
+ .image = NULL,
+ .anims = sMonIconAnims,
+ .affineAnims = sMonIconAffineAnims,
+ .callback = callback,
+ .paletteTag = POKE_ICON_BASE_PAL_TAG + gMonIconPaletteIndices[species],
+ };
+
+ iconTemplate.image = GetMonIconTiles(species, extra);
+ spriteId = CreateMonIconSprite(&iconTemplate, x, y, subpriority);
+
+ UpdateMonIconFrame(&gSprites[spriteId]);
+
+ return spriteId;
+}
+
+u16 mon_icon_convert_unown_species_id(u16 species, u32 personality)
+{
+ u16 result;
+
+ if (species == SPECIES_UNOWN)
+ {
+ u16 letter = GetUnownLetterByPersonality(personality);
+ if (letter == 0)
+ letter = SPECIES_UNOWN;
+ else
+ letter += (SPECIES_UNOWN_B - 1);
+ result = letter;
+ }
+ else
+ {
+ if (species > SPECIES_EGG)
+ result = 260;
+ else
+ result = species;
+ }
+
+ return result;
+}
+
+u16 GetUnownLetterByPersonality(u32 personality)
+{
+ if (!personality)
+ return 0;
+ return (((personality & 0x3000000) >> 18) | ((personality & 0x30000) >> 12) | ((personality & 0x300) >> 6) | (personality & 0x3)) % 0x1C;
+}
+
+u16 sub_80D2E84(u16 species)
+{
+ u16 value;
+
+ if (MailSpeciesToSpecies(species, &value) == SPECIES_UNOWN)
+ {
+ if (value == 0)
+ value += SPECIES_UNOWN;
+ else
+ value += (SPECIES_UNOWN_B - 1);
+ return value;
+ }
+ else
+ {
+ if(species > (SPECIES_UNOWN_B - 1))
+ species = 260;
+ return mon_icon_convert_unown_species_id(species, 0);
+ }
+}
+
+const u8 *GetMonIconPtr(u16 species, u32 personality, bool32 extra)
+{
+ return GetMonIconTiles(mon_icon_convert_unown_species_id(species, personality), extra);
+}
+
+
+
+void sub_80D2EF8(struct Sprite *sprite)
+{
+ sub_80D328C(sprite);
+}
+
+void LoadMonIconPalettes(void)
+{
+ u8 i;
+ for (i = 0; i < 6; i++)
+ LoadSpritePalette(&gMonIconPaletteTable[i]);
+}
+
+// unused
+void SafeLoadMonIconPalette(u16 species)
+{
+ u8 palIndex;
+ if (species > SPECIES_EGG)
+ species = 260;
+ palIndex = gMonIconPaletteIndices[species];
+ if (IndexOfSpritePaletteTag(gMonIconPaletteTable[palIndex].tag) == 0xFF)
+ LoadSpritePalette(&gMonIconPaletteTable[palIndex]);
+}
+
+void LoadMonIconPalette(u16 species)
+{
+ u8 palIndex = gMonIconPaletteIndices[species];
+ if (IndexOfSpritePaletteTag(gMonIconPaletteTable[palIndex].tag) == 0xFF)
+ LoadSpritePalette(&gMonIconPaletteTable[palIndex]);
+}
+
+void FreeMonIconPalettes(void)
+{
+ u8 i;
+ for (i = 0; i < 6; i++)
+ FreeSpritePaletteByTag(gMonIconPaletteTable[i].tag);
+}
+
+// unused
+void SafeFreeMonIconPalette(u16 species)
+{
+ u8 palIndex;
+ if (species > SPECIES_EGG)
+ species = 260;
+ palIndex = gMonIconPaletteIndices[species];
+ FreeSpritePaletteByTag(gMonIconPaletteTable[palIndex].tag);
+}
+
+void FreeMonIconPalette(u16 species)
+{
+ u8 palIndex;
+ palIndex = gMonIconPaletteIndices[species];
+ FreeSpritePaletteByTag(gMonIconPaletteTable[palIndex].tag);
+}
+
+void sub_80D3014(struct Sprite *sprite)
+{
+ UpdateMonIconFrame(sprite);
+}
+
+const u8* GetMonIconTiles(u16 species, bool32 extra)
+{
+ const u8* iconSprite = gMonIconTable[species];
+ if(species == SPECIES_DEOXYS && extra == TRUE)
+ {
+ iconSprite = (const u8*)(0x400 + (u32)iconSprite); //WTF?
+ }
+ return iconSprite;
+}
+
+void sub_80D304C(u16 offset)
+{
+ s32 i;
+ const struct SpritePalette* monIconPalettePtr;
+
+ if(offset <= 0xA0)
+ {
+ monIconPalettePtr = gMonIconPaletteTable;
+ for(i = 5; i >= 0 ; i--)
+ {
+ LoadPalette(monIconPalettePtr->data, offset, 0x20);
+ offset += 0x10;
+ monIconPalettePtr++;
+ }
+ }
+}
+
+u8 sub_80D3080(u16 species)
+{
+ if (species > SPECIES_EGG)
+ species = 260;
+ return gMonIconPaletteIndices[species];
+}
+
+u8 sub_80D30A0(u16 species)
+{
+ return gMonIconPaletteIndices[species];
+}
+
+const u16* GetValidMonIconPalettePtr(u16 species)
+{
+ if (species > SPECIES_EGG)
+ species = 260;
+ return gMonIconPaletteTable[gMonIconPaletteIndices[species]].data;
+}
+
+// TODO: try to find a way to avoid using asm statement
+u8 UpdateMonIconFrame(struct Sprite *sprite)
+{
+ u8 result = 0;
+
+ if (sprite->animDelayCounter == 0)
+ {
+ s16 frame = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.imageValue;
+
+ switch (frame)
+ {
+ case -1:
+ break;
+ case -2:
+ sprite->animCmdIndex = 0;
+ break;
+ default:
+ RequestSpriteCopy(
+ // pointer arithmetic is needed to get the correct pointer to perform the sprite copy on.
+ // because sprite->images is a struct def, it has to be casted to (u8 *) before any
+ // arithmetic can be performed.
+ (u8 *)sprite->images + (sSpriteImageSizes[sprite->oam.shape][sprite->oam.size] * frame),
+ (u8 *)(OBJ_VRAM0 + sprite->oam.tileNum * TILE_SIZE_4BPP),
+ sSpriteImageSizes[sprite->oam.shape][sprite->oam.size]);
+ {
+ register u8 duration asm("r0") = sprite->anims[sprite->animNum][sprite->animCmdIndex].frame.duration;
+ sprite->animDelayCounter = duration;
+ }
+ sprite->animCmdIndex++;
+ result = sprite->animCmdIndex;
+ break;
+ }
+ }
+ else
+ {
+ sprite->animDelayCounter--;
+ }
+ return result;
+}
+
+static u8 CreateMonIconSprite(struct MonIconSpriteTemplate *iconTemplate, s16 x, s16 y, u8 subpriority)
+{
+ u8 spriteId;
+
+ struct SpriteFrameImage image = { NULL, sSpriteImageSizes[iconTemplate->oam->shape][iconTemplate->oam->size] };
+
+ struct SpriteTemplate spriteTemplate =
+ {
+ .tileTag = 0xFFFF,
+ .paletteTag = iconTemplate->paletteTag,
+ .oam = iconTemplate->oam,
+ .anims = iconTemplate->anims,
+ .images = &image,
+ .affineAnims = iconTemplate->affineAnims,
+ .callback = iconTemplate->callback,
+ };
+
+ spriteId = CreateSprite(&spriteTemplate, x, y, subpriority);
+ gSprites[spriteId].animPaused = TRUE;
+ gSprites[spriteId].animBeginning = FALSE;
+ gSprites[spriteId].images = (const struct SpriteFrameImage *)iconTemplate->image;
+ return spriteId;
+}
+
+void sub_80D328C(struct Sprite *sprite)
+{
+ struct SpriteFrameImage image = { NULL, sSpriteImageSizes[sprite->oam.shape][sprite->oam.size] };
+ sprite->images = &image;
+ DestroySprite(sprite);
+}
+
+void sub_80D32C8(struct Sprite *sprite, u8 animNum)
+{
+ sprite->animNum = animNum;
+ sprite->animDelayCounter = 0;
+ sprite->animCmdIndex = 0;
+}
diff --git a/src/pokemon_summary_screen.c b/src/pokemon_summary_screen.c
index 8c9e7a8a0..74dc11973 100644
--- a/src/pokemon_summary_screen.c
+++ b/src/pokemon_summary_screen.c
@@ -21,6 +21,12 @@
#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"
+#include "daycare.h"
struct ContestMove
{
@@ -42,7 +48,6 @@ 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 struct UnkStruct_61CC04 gUnknown_0861CC04;
extern struct UnkStruct_61CC04 gUnknown_0861CC10;
@@ -65,20 +70,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;
@@ -93,9 +87,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);
@@ -125,8 +116,6 @@ extern u8 gText_Appeal[];
extern u8 gText_Jam[];
extern u8 gText_OTSlash[];
extern u8 gText_UnkCtrlF907F908[];
-extern u8 gAbilityNames[][13];
-extern u8 *gAbilityDescriptionPointers[];
extern u8 gText_XNature[];
extern u8 gText_XNatureHatchedAtYZ[];
extern u8 gText_XNatureHatchedSomewhereAt[];
@@ -156,13 +145,8 @@ extern u8 gText_OneDash[];
extern u8 gText_TwoDashes[];
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();
@@ -1433,7 +1417,7 @@ void sub_81C14BC(struct Pokemon *mon, u8 swappingFromId, u8 swappingToId)
*ppBonusesPtr = localPpBonuses;
}
#else
-__attribute__((naked))
+NAKED
void sub_81C14BC(struct Pokemon *mon, u8 swappingFromId, u8 swappingToId)
{
asm(".syntax unified\n\
@@ -1644,7 +1628,7 @@ void sub_81C15EC(struct BoxPokemon *mon, u8 swappingFromId, u8 swappingToId)
*ppBonusesPtr = localPpBonuses;
}
#else
-__attribute__((naked))
+NAKED
void sub_81C15EC(struct BoxPokemon *mon, u8 swappingFromId, u8 swappingToId)
{
asm(".syntax unified\n\
@@ -1841,7 +1825,7 @@ void sub_81C174C(u8 taskId)
}
else
{
- PlaySE(0x20);
+ PlaySE(SE_HAZURE);
sub_81C18F4(taskId);
}
}
@@ -2055,7 +2039,7 @@ void sub_81C1CB0(struct UnkStruct_61CC04 *a, u16 *b, u8 c, u8 d)
Free(alloced);
}
#else
-__attribute__((naked))
+NAKED
void sub_81C1CB0(struct UnkStruct_61CC04 *a, u16 *b, u8 c, u8 d)
{
asm(".syntax unified\n\
@@ -2357,7 +2341,7 @@ void sub_81C2194(u16 *a, u16 b, u8 c)
}
}
#else
-__attribute__((naked))
+NAKED
void sub_81C2194(u16 *a, u16 b, u8 c)
{
asm(".syntax unified\n\
@@ -2553,7 +2537,7 @@ void sub_81C2554()
gUnknown_0203CF1C->unk40CB[i] |= 0xFF;
}
-void sub_81C25A4(u8 a, u8 *b, u8 c, u8 d, u8 e, u8 f)
+void sub_81C25A4(u8 a, const u8 *b, u8 c, u8 d, u8 e, u8 f)
{
AddTextPrinterParameterized2(a, 1, c, d, 0, e, gUnknown_0861CD2C[f], 0, b);
}
@@ -2792,93 +2776,27 @@ void sub_81C2C38(u8 a)
schedule_bg_copy_tilemap_to_vram(0);
}
-
-
-#ifdef NONMATCHING
u8 sub_81C2D2C(struct WindowTemplate *template, u8 a)
{
- u8 *r4 = gUnknown_0203CF1C->unk40CB;
- if (r4[a] == 0xFF)
+ u8 *windowIdPtr = &(gUnknown_0203CF1C->unk40CB[a]);
+ if (*windowIdPtr == 0xFF)
{
- r4[a] = AddWindow(&template[a]);
- FillWindowPixelBuffer(r4[a], 0);
+ *windowIdPtr = AddWindow(&template[a]);
+ FillWindowPixelBuffer(*windowIdPtr, 0);
}
- return r4[a];
+ return *windowIdPtr;
}
-#else
-__attribute__((naked))
-u8 sub_81C2D2C(struct WindowTemplate *template, u8 a)
-{
- asm(".syntax unified\n\
- push {r4,lr}\n\
- adds r3, r0, 0\n\
- lsls r1, 24\n\
- lsrs r2, r1, 24\n\
- ldr r0, =gUnknown_0203CF1C\n\
- ldr r4, =0x000040cb\n\
- adds r1, r2, r4\n\
- ldr r0, [r0]\n\
- adds r4, r0, r1\n\
- ldrb r0, [r4]\n\
- cmp r0, 0xFF\n\
- bne _081C2D56\n\
- lsls r0, r2, 3\n\
- adds r0, r3, r0\n\
- bl AddWindow\n\
- strb r0, [r4]\n\
- ldrb r0, [r4]\n\
- movs r1, 0\n\
- bl FillWindowPixelBuffer\n\
-_081C2D56:\n\
- ldrb r0, [r4]\n\
- pop {r4}\n\
- pop {r1}\n\
- bx r1\n\
- .pool\n\
- .syntax divided\n");
-}
-#endif
-#ifdef NONMATCHING
void sub_81C2D68(u8 a)
{
- u8 *r4 = gUnknown_0203CF1C->unk40CB;
- if (r4[a] != 0xFF)
+ u8 *windowIdPtr = &(gUnknown_0203CF1C->unk40CB[a]);
+ if (*windowIdPtr != 0xFF)
{
- ClearWindowTilemap(r4[a]);
- RemoveWindow(r4[a]);
- r4[a] = 0xFF;
+ ClearWindowTilemap(*windowIdPtr);
+ RemoveWindow(*windowIdPtr);
+ *windowIdPtr = 0xFF;
}
}
-#else
-__attribute__((naked))
-void sub_81C2D68(u8 a)
-{
- asm(".syntax unified\n\
- push {r4,lr}\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- ldr r1, =gUnknown_0203CF1C\n\
- ldr r2, =0x000040cb\n\
- adds r0, r2\n\
- ldr r1, [r1]\n\
- adds r4, r1, r0\n\
- ldrb r0, [r4]\n\
- cmp r0, 0xFF\n\
- beq _081C2D8C\n\
- bl ClearWindowTilemap\n\
- ldrb r0, [r4]\n\
- bl RemoveWindow\n\
- movs r0, 0xFF\n\
- strb r0, [r4]\n\
-_081C2D8C:\n\
- pop {r4}\n\
- pop {r0}\n\
- bx r0\n\
- .pool\n\
- .syntax divided\n");
-}
-#endif
void sub_81C2D9C(u8 a)
{
@@ -3041,7 +2959,7 @@ void sub_81C31F0(u8 *a)
{
u8 level = gUnknown_0203CF1C->summary.metLevel;
if (level == 0)
- level = 5;
+ level = EGG_HATCH_LEVEL;
ConvertIntToDecimalStringN(a, level, 0, 3);
UnkTextUtil_SetPtrI(3, a);
}
@@ -3108,7 +3026,7 @@ void sub_81C335C()
sub_81C25A4(r4, gText_FiveMarks, r5, 1, 0, 1);
}
#else
-__attribute__((naked))
+NAKED
void sub_81C335C()
{
asm(".syntax unified\n\
@@ -3255,11 +3173,11 @@ void sub_81C3554(u8 taskId)
void sub_81C35E4()
{
- u8 *text;
+ const u8 *text;
int offset;
if (gUnknown_0203CF1C->summary.item == ITEM_ENIGMA_BERRY && sub_81B1250() == 1 && (gUnknown_0203CF1C->unk40BE == 1 || gUnknown_0203CF1C->unk40BE == 4 || gUnknown_0203CF1C->unk40BE == 5))
{
- text = (u8*)ItemId_GetItem(ITEM_ENIGMA_BERRY);
+ text = ItemId_GetName(ITEM_ENIGMA_BERRY);
}
else if (gUnknown_0203CF1C->summary.item == ITEM_NONE)
text = gText_None;
@@ -3451,7 +3369,7 @@ void sub_81C3B08(u8 a)
sub_81C25A4(sp, text, offset, (a<<4), 0, r5);
}
#else
-__attribute__((naked))
+NAKED
void sub_81C3B08(u8 a)
{
asm(".syntax unified\n\
diff --git a/src/random.c b/src/random.c
index f2f0ede58..f0b2d9e5f 100644
--- a/src/random.c
+++ b/src/random.c
@@ -7,6 +7,10 @@
EWRAM_DATA static u8 sUnknown = 0;
EWRAM_DATA static u32 sRandCount = 0;
+// IWRAM common
+IWRAM_DATA u32 gRngValue;
+IWRAM_DATA u32 gRng2Value;
+
u16 Random(void)
{
gRngValue = 1103515245 * gRngValue + 24691;
diff --git a/src/record_mixing.c b/src/record_mixing.c
index 79db07bf0..1a39dfde9 100644
--- a/src/record_mixing.c
+++ b/src/record_mixing.c
@@ -106,8 +106,6 @@ void sub_80E89F8(void *dest);
void sub_80E8A54(void *src);
void sub_80E8AC0(union BattleTowerRecord *);
void sub_80EAF80(struct SecretBaseRecord *, size_t, u8);
-void sub_80F01E8(void *, size_t, u8);
-void sub_80F0C7C(PokeNews *, size_t, u8);
void sub_812287C(struct EasyChatPair *, size_t, u8);
void TaskDummy4(union BattleTowerRecord *src);
@@ -299,7 +297,7 @@ static void sub_80E715C(u8 taskId)
if (!gTasks[data[10]].isActive)
{
data[0] = 4;
- if (!gLinkVSyncDisabled)
+ if (gWirelessCommType == 0)
{
data[10] = sub_80B3050();
}
@@ -319,7 +317,7 @@ static void sub_80E715C(u8 taskId)
free(gUnknown_0203A014);
free(gUnknown_0203A018);
sub_808729C();
- if (gLinkVSyncDisabled)
+ if (gWirelessCommType != 0)
{
CreateTask(sub_80AF2B4, 10);
}
@@ -344,7 +342,7 @@ static void sub_80E7324(u8 taskId)
sub_80E70F4(gText_MixingRecords);
task->data[8] = 0x708;
task->data[0] = 400;
- sub_8009FAC();
+ ClearLinkCallback_2();
break;
case 100:
if (++ task->data[12] > 20)
@@ -546,7 +544,6 @@ static void sub_80E77D4(u8 taskId)
gUnknown_03001130 = TRUE;
}
-
static void *sub_80E77FC(const u16 *asShort)
{
return (void *)(asShort[0] | (asShort[1] << 16));
@@ -618,7 +615,7 @@ static void sub_80E78C4(OldMan *oldMan, size_t recordSize, u8 which)
sub_8120CD0(dest, version, language);
}
memcpy(gUnknown_03001140, (void *)oldMan + recordSize * mixIndices[which], sizeof(OldMan));
- sub_8120670();
+ ResetMauvilleOldManFlag();
}
static void sub_80E7948(union BattleTowerRecord *battleTowerRecord, size_t recordSize, u8 which)
@@ -1427,7 +1424,7 @@ __attribute__((naked)) static void sub_80E7B60(struct UnkStruct_80E7B60 *src, si
static void sub_80E7F68(u16 *item, u8 which)
{
- if (which != 0 && *item != ITEM_NONE && GetPocketByItemId(*item) == BAG_KEYITEMS)
+ if (which != 0 && *item != ITEM_NONE && GetPocketByItemId(*item) == POCKET_KEY_ITEMS)
{
if (!CheckBagHasItem(*item, 1) && !CheckPCHasItem(*item, 1) && AddBagItem(*item, 1))
{
@@ -1501,7 +1498,7 @@ static void sub_80E7FF8(u8 taskId)
case 7:
if (!FuncIsActiveTask(sub_8153688))
{
- if (gLinkVSyncDisabled)
+ if (gWirelessCommType)
{
sub_801048C(1);
task->data[0] = 8;
diff --git a/src/recorded_battle.c b/src/recorded_battle.c
index e60457257..eb48ab15a 100644
--- a/src/recorded_battle.c
+++ b/src/recorded_battle.c
@@ -100,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);
@@ -476,7 +475,7 @@ u32 MoveRecordedBattleToSaveData(void)
}
#else
-__attribute__((naked))
+NAKED
u32 MoveRecordedBattleToSaveData(void)
{
asm(".syntax unified\n\
diff --git a/src/region_map.c b/src/region_map.c
index 086c0ba68..f16787fc9 100644
--- a/src/region_map.c
+++ b/src/region_map.c
@@ -881,7 +881,7 @@ static void RegionMap_InitializeStateBasedOnPlayerLocation(void)
return;
}
- switch (get_map_light_level_by_bank_and_number(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum))
+ switch (GetMapTypeByGroupAndId(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum))
{
default:
case 1:
@@ -904,7 +904,7 @@ static void RegionMap_InitializeStateBasedOnPlayerLocation(void)
case 7:
if (gMapHeader.flags & 0x02)
{
- mapHeader = get_mapheader_by_bank_and_number(gSaveBlock1Ptr->warp4.mapGroup, gSaveBlock1Ptr->warp4.mapNum);
+ mapHeader = Overworld_GetMapHeaderByGroupAndId(gSaveBlock1Ptr->warp4.mapGroup, gSaveBlock1Ptr->warp4.mapNum);
gRegionMap->mapSecId = mapHeader->regionMapSectionId;
gRegionMap->playerIsInCave = TRUE;
mapWidth = mapHeader->mapData->width;
@@ -923,7 +923,7 @@ static void RegionMap_InitializeStateBasedOnPlayerLocation(void)
}
break;
case 9:
- mapHeader = get_mapheader_by_bank_and_number((u16)gSaveBlock1Ptr->warp2.mapGroup, (u16)gSaveBlock1Ptr->warp2.mapNum);
+ mapHeader = Overworld_GetMapHeaderByGroupAndId((u16)gSaveBlock1Ptr->warp2.mapGroup, (u16)gSaveBlock1Ptr->warp2.mapNum);
gRegionMap->mapSecId = mapHeader->regionMapSectionId;
gRegionMap->playerIsInCave = TRUE;
mapWidth = mapHeader->mapData->width;
@@ -937,12 +937,12 @@ static void RegionMap_InitializeStateBasedOnPlayerLocation(void)
if (gRegionMap->mapSecId != MAPSEC_DYNAMIC)
{
storedWarp = &gSaveBlock1Ptr->warp4;
- mapHeader = get_mapheader_by_bank_and_number(storedWarp->mapGroup, storedWarp->mapNum);
+ mapHeader = Overworld_GetMapHeaderByGroupAndId(storedWarp->mapGroup, storedWarp->mapNum);
}
else
{
storedWarp = &gSaveBlock1Ptr->warp2;
- mapHeader = get_mapheader_by_bank_and_number(storedWarp->mapGroup, storedWarp->mapNum);
+ mapHeader = Overworld_GetMapHeaderByGroupAndId(storedWarp->mapGroup, storedWarp->mapNum);
gRegionMap->mapSecId = mapHeader->regionMapSectionId;
}
if (RegionMap_IsPlayerInCave(gRegionMap->mapSecId))
@@ -1065,7 +1065,7 @@ static void RegionMap_InitializeStateBasedOnSSTidalLocation(void)
break;
default:
case 0:
- mapHeader = get_mapheader_by_bank_and_number(mapGroup, mapNum);
+ mapHeader = Overworld_GetMapHeaderByGroupAndId(mapGroup, mapNum);
gRegionMap->mapSecId = mapHeader->regionMapSectionId;
dimensionScale = mapHeader->mapData->width / gRegionMapEntries[gRegionMap->mapSecId].width;
@@ -1581,7 +1581,7 @@ void MCB2_FlyMap(void)
gUnknown_0203A148 = malloc(sizeof(*gUnknown_0203A148));
if (gUnknown_0203A148 == NULL)
{
- SetMainCallback2(sub_8086194);
+ SetMainCallback2(CB2_ReturnToFieldWithOpenMenu);
}
else
{
diff --git a/src/reset_save_heap.c b/src/reset_save_heap.c
index 9950f6691..1d90448b2 100644
--- a/src/reset_save_heap.c
+++ b/src/reset_save_heap.c
@@ -20,11 +20,11 @@ void sub_81700F8(void)
gMain.inBattle = FALSE;
SetSaveBlocksPointers(sub_815355C());
sub_808447C();
- ResetSaveCounters();
- sub_81534D0(0);
+ Save_ResetSaveCounters();
+ Save_LoadGameData(0);
if (gSaveFileStatus == 0 || gSaveFileStatus == 2)
Sav2_ClearSetDefault();
SetPokemonCryStereo(gSaveBlock2Ptr->optionsSound);
InitHeap(gHeap, HEAP_SIZE);
- SetMainCallback2(sub_8086230);
+ SetMainCallback2(CB2_ContinueSavedGame);
}
diff --git a/src/reshow_battle_screen.c b/src/reshow_battle_screen.c
index b12917c61..45f0f5a9e 100644
--- a/src/reshow_battle_screen.c
+++ b/src/reshow_battle_screen.c
@@ -13,6 +13,7 @@
#include "constants/species.h"
#include "battle_interface.h"
#include "battle_anim.h"
+#include "data2.h"
extern u16 gBattle_BG0_X;
extern u16 gBattle_BG0_Y;
@@ -22,18 +23,17 @@ extern u16 gBattle_BG2_X;
extern u16 gBattle_BG2_Y;
extern u16 gBattle_BG3_X;
extern u16 gBattle_BG3_Y;
-extern struct SpriteTemplate gUnknown_0202499C;
extern const union AnimCmd * const * const gMonAnimationsSpriteAnimsPtrTable[];
-extern void sub_806A068(u16 species, u8 bankIdentity);
-extern void sub_806A12C(u16 backPicId, u8 bankIdentity);
+extern void sub_806A068(u16 species, u8 battlerPosition);
+extern void sub_806A12C(u16 backPicId, u8 battlerPosition);
// this file's functions
static void CB2_ReshowBattleScreenAfterMenu(void);
-static bool8 LoadBattlerSpriteGfx(u8 bank);
-static void CreateBattlerSprite(u8 bank);
-static void CreateHealthboxSprite(u8 bank);
+static bool8 LoadBattlerSpriteGfx(u8 battlerId);
+static void CreateBattlerSprite(u8 battlerId);
+static void CreateHealthboxSprite(u8 battlerId);
static void sub_80A95F4(void);
void nullsub_35(void)
@@ -162,10 +162,10 @@ static void CB2_ReshowBattleScreenAfterMenu(void)
ActionSelectionCreateCursorAt(gActionSelectionCursor[gBattlerInMenuId], 0);
- if (gLinkVSyncDisabled != 0 && gReceivedRemoteLinkPlayers != 0)
+ if (gWirelessCommType != 0 && gReceivedRemoteLinkPlayers != 0)
{
sub_800E0E8();
- sub_800DFB4(0, 0);
+ CreateWirelessStatusIndicatorSprite(0, 0);
}
}
break;
@@ -218,16 +218,6 @@ static bool8 LoadBattlerSpriteGfx(u8 battler)
return TRUE;
}
-// todo: get rid of it once the struct is declared in a header
-struct MonCoords
-{
- // This would use a bitfield, but sub_8079F44
- // uses it as a u8 and casting won't match.
- u8 coords; // u8 x:4, y:4;
- u8 y_offset;
-};
-extern const struct MonCoords gTrainerBackPicCoords[];
-
static void CreateBattlerSprite(u8 battler)
{
if (battler < gBattlersCount)
diff --git a/src/rom6.c b/src/rom6.c
new file mode 100644
index 000000000..4a5c506b6
--- /dev/null
+++ b/src/rom6.c
@@ -0,0 +1,209 @@
+#include "global.h"
+#include "constants/map_objects.h"
+#include "constants/songs.h"
+#include "rom6.h"
+#include "braille_puzzles.h"
+#include "event_data.h"
+#include "event_scripts.h"
+#include "field_effect.h"
+#include "field_map_obj.h"
+#include "field_player_avatar.h"
+#include "item_use.h"
+#include "party_menu.h"
+#include "overworld.h"
+#include "script.h"
+#include "sound.h"
+#include "sprite.h"
+#include "task.h"
+
+// static functions
+static void task08_080C9820(u8 taskId);
+static void sub_8135578(u8 taskId);
+static void sub_813552C(u8 taskId);
+static void sub_813561C(u8 taskId);
+static void sub_81356C4(void);
+static void sub_8135714(void);
+static void hm2_dig(void);
+static void sub_8135780(void);
+
+// extern RAM loc
+extern struct MapPosition gUnknown_0203AB40;
+
+// text
+bool8 npc_before_player_of_type(u8 a)
+{
+ u8 mapObjId;
+
+ GetXYCoordsOneStepInFrontOfPlayer(&gUnknown_0203AB40.x, &gUnknown_0203AB40.y);
+ gUnknown_0203AB40.height = PlayerGetZCoord();
+ mapObjId = GetFieldObjectIdByXYZ(gUnknown_0203AB40.x, gUnknown_0203AB40.y, gUnknown_0203AB40.height);
+ if (gMapObjects[mapObjId].graphicsId != a)
+ {
+ return FALSE;
+ }
+ else
+ {
+ gSpecialVar_LastTalked = gMapObjects[mapObjId].localId;
+ return TRUE;
+ }
+}
+
+u8 oei_task_add(void)
+{
+ GetXYCoordsOneStepInFrontOfPlayer(&gUnknown_0203AB40.x, &gUnknown_0203AB40.y);
+ return CreateTask(task08_080C9820, 8);
+}
+
+static void task08_080C9820(u8 taskId)
+{
+ u8 mapObjId;
+
+ ScriptContext2_Enable();
+ gPlayerAvatar.preventStep = TRUE;
+ mapObjId = gPlayerAvatar.mapObjectId;
+ if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(&gMapObjects[mapObjId])
+ || FieldObjectClearAnimIfSpecialAnimFinished(&gMapObjects[mapObjId]))
+ {
+ if (gMapHeader.mapType == MAP_TYPE_UNDERWATER)
+ {
+ FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT);
+ gTasks[taskId].func = sub_8135578;
+ }
+ else
+ {
+ sub_808C114();
+ FieldObjectSetSpecialAnim(&gMapObjects[mapObjId], 0x39);
+ gTasks[taskId].func = sub_813552C;
+ }
+ }
+}
+
+static void sub_813552C(u8 taskId)
+{
+ if (FieldObjectCheckIfSpecialAnimFinishedOrInactive(&gMapObjects[gPlayerAvatar.mapObjectId]) == TRUE)
+ {
+ FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT);
+ gTasks[taskId].func = sub_8135578;
+ }
+}
+
+static void sub_8135578(u8 taskId)
+{
+ if (!FieldEffectActiveListContains(6))
+ {
+ gFieldEffectArguments[1] = player_get_direction_lower_nybble();
+ if (gFieldEffectArguments[1] == 1)
+ gFieldEffectArguments[2] = 0;
+ if (gFieldEffectArguments[1] == 2)
+ gFieldEffectArguments[2] = 1;
+ if (gFieldEffectArguments[1] == 3)
+ gFieldEffectArguments[2] = 2;
+ if (gFieldEffectArguments[1] == 4)
+ gFieldEffectArguments[2] = 3;
+ FieldObjectSetGraphicsId(&gMapObjects[gPlayerAvatar.mapObjectId], GetPlayerAvatarGraphicsIdByCurrentState());
+ StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], gFieldEffectArguments[2]);
+ FieldEffectActiveListRemove(6);
+ gTasks[taskId].func = sub_813561C;
+ }
+}
+
+static void sub_813561C(u8 taskId)
+{
+ void (*func)(void) = (void (*)(void))(((u16)gTasks[taskId].data[8] << 16) | (u16)gTasks[taskId].data[9]);
+
+ func();
+ gPlayerAvatar.preventStep = FALSE;
+ DestroyTask(taskId);
+}
+
+bool8 SetUpFieldMove_RockSmash(void)
+{
+ if(ShouldDoBrailleStrengthEffect())
+ {
+ gSpecialVar_Result = GetCursorSelectionMonId();
+ gUnknown_03005DB0 = FieldCallback_Teleport;
+ gUnknown_0203CEEC = sub_8179834;
+ return TRUE;
+ }
+ else if (npc_before_player_of_type(0x56) == TRUE)
+ {
+ gUnknown_03005DB0 = FieldCallback_Teleport;
+ gUnknown_0203CEEC = sub_81356C4;
+ return TRUE;
+ }
+ else
+ {
+ return FALSE;
+ }
+}
+
+static void sub_81356C4(void)
+{
+ gFieldEffectArguments[0] = GetCursorSelectionMonId();
+ ScriptContext1_SetupScript(Route111_EventScript_2907F0);
+}
+
+bool8 FldEff_UseRockSmash(void)
+{
+ u8 taskId = oei_task_add();
+
+ gTasks[taskId].data[8] = (u32)sub_8135714 >> 16;
+ gTasks[taskId].data[9] = (u32)sub_8135714;
+ IncrementGameStat(GAME_STAT_USED_ROCK_SMASH);
+ return FALSE;
+}
+
+static void sub_8135714(void)
+{
+ PlaySE(SE_W088);
+ FieldEffectActiveListRemove(FLDEFF_USE_ROCK_SMASH);
+ EnableBothScriptContexts();
+}
+
+bool8 SetUpFieldMove_Dig(void)
+{
+ if (CanUseEscapeRopeOnCurrMap() == TRUE)
+ {
+ gUnknown_03005DB0 = FieldCallback_Teleport;
+ gUnknown_0203CEEC = hm2_dig;
+ return TRUE;
+ }
+ else
+ {
+ return FALSE;
+ }
+}
+
+static void hm2_dig(void)
+{
+ Overworld_ResetStateAfterDigEscRope();
+ FieldEffectStart(FLDEFF_USE_DIG);
+ gFieldEffectArguments[0] = GetCursorSelectionMonId();
+}
+
+bool8 FldEff_UseDig(void)
+{
+ u8 taskId = oei_task_add();
+
+ gTasks[taskId].data[8] = (u32)sub_8135780 >> 16;
+ gTasks[taskId].data[9] = (u32)sub_8135780;
+ if (!ShouldDoBrailleDigEffect())
+ SetPlayerAvatarTransitionFlags(1);
+ return FALSE;
+}
+
+static void sub_8135780(void)
+{
+ u8 taskId;
+
+ FieldEffectActiveListRemove(FLDEFF_USE_DIG);
+ if (ShouldDoBrailleDigEffect())
+ {
+ DoBrailleDigEffect();
+ }
+ else
+ {
+ taskId = CreateTask(task08_080A1C44, 8);
+ gTasks[taskId].data[0] = 0;
+ }
+}
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/rotating_gate.c b/src/rotating_gate.c
new file mode 100644
index 000000000..a16401fa2
--- /dev/null
+++ b/src/rotating_gate.c
@@ -0,0 +1,1188 @@
+#include "global.h"
+#include "bike.h"
+#include "event_data.h"
+#include "field_map_obj.h"
+#include "constants/maps.h"
+#include "constants/songs.h"
+#include "sound.h"
+#include "sprite.h"
+
+#define ROTATING_GATE_TILE_TAG 0x1300
+#define ROTATING_GATE_PUZZLE_MAX 12
+#define GATE_ARM_MAX_LENGTH 2
+
+#define GATE_ROT(rotationDirection, arm, longArm) \
+ ((rotationDirection & 15) << 4) | ((arm & 7) << 1) | (longArm & 1)
+#define GATE_ROT_CW(arm, longArm) GATE_ROT(ROTATE_CLOCKWISE, arm, longArm)
+#define GATE_ROT_ACW(arm, longArm) GATE_ROT(ROTATE_ANTICLOCKWISE, arm, longArm)
+#define GATE_ROT_NONE 255
+
+// static functions
+static void SpriteCallback_RotatingGate(struct Sprite *sprite);
+static u8 RotatingGate_CreateGate(u8 gateId, s16 deltaX, s16 deltaY);
+static void RotatingGate_HideGatesOutsideViewport(struct Sprite *sprite);
+
+// enums
+enum
+{
+ /*
+ * |
+ * +--
+ */
+ GATE_SHAPE_L1,
+
+ /*
+ * |
+ * |
+ * +--
+ */
+ GATE_SHAPE_L2,
+
+ /*
+ * |
+ * +----
+ */
+ GATE_SHAPE_L3,
+
+ /*
+ * |
+ * |
+ * +----
+ */
+ GATE_SHAPE_L4,
+
+ /*
+ * |
+ * +--
+ * |
+ */
+ GATE_SHAPE_T1,
+
+ /*
+ * |
+ * |
+ * +--
+ * |
+ */
+ GATE_SHAPE_T2,
+
+ /*
+ * |
+ * +----
+ * |
+ */
+ GATE_SHAPE_T3,
+
+ /*
+ * An unused T-shape gate
+ * |
+ * +--
+ * |
+ * |
+ */
+ GATE_SHAPE_T4,
+
+ /*
+ * An unused T-shape gate
+ * |
+ * |
+ * +----
+ * |
+ */
+ GATE_SHAPE_UNUSED_T1,
+
+ /*
+ * An unused T-shape gate
+ * |
+ * |
+ * +--
+ * |
+ * |
+ */
+ GATE_SHAPE_UNUSED_T2,
+
+ /*
+ * An unused T-shape gate
+ * |
+ * +----
+ * |
+ * |
+ */
+ GATE_SHAPE_UNUSED_T3,
+
+ /*
+ * An unused T-shape gate
+ * |
+ * |
+ * +----
+ * |
+ * |
+ */
+ GATE_SHAPE_UNUSED_T4,
+};
+
+enum
+{
+ /*
+ * 0 degrees (clockwise)
+ * |
+ * +--
+ * |
+ */
+ GATE_ORIENTATION_0,
+
+ /*
+ * 90 degress (clockwise)
+ * --+--
+ * |
+ */
+ GATE_ORIENTATION_90,
+
+ /*
+ * 180 degrees (clockwise)
+ * |
+ * --+
+ * |
+ */
+ GATE_ORIENTATION_180,
+
+ /*
+ * 270 degrees (clockwise)
+ * |
+ * --+--
+ */
+ GATE_ORIENTATION_270,
+
+ GATE_ORIENTATION_MAX,
+};
+
+// Describes the location of the gates "arms" when the gate has not
+// been rotated (i.e. rotated 0 degrees)
+enum
+{
+ GATE_ARM_NORTH,
+ GATE_ARM_EAST,
+ GATE_ARM_SOUTH,
+ GATE_ARM_WEST,
+};
+
+enum
+{
+ ROTATE_NONE,
+ ROTATE_ANTICLOCKWISE,
+ ROTATE_CLOCKWISE,
+};
+
+enum
+{
+ PUZZLE_NONE,
+ PUZZLE_FORTREE_CITY_GYM,
+ PUZZLE_ROUTE110_TRICK_HOUSE_PUZZLE6,
+};
+
+// structure
+struct RotatingGatePuzzle
+{
+ s16 x;
+ s16 y;
+ u8 shape;
+ u8 orientation;
+};
+
+struct Coords8
+{
+ s8 deltaX;
+ s8 deltaY;
+};
+
+// .rodata
+// Fortree
+static const struct RotatingGatePuzzle sRotatingGate_FortreePuzzleConfig[] =
+{
+ { 6, 7, GATE_SHAPE_T2, GATE_ORIENTATION_90},
+ { 9, 15, GATE_SHAPE_T2, GATE_ORIENTATION_180},
+ { 3, 19, GATE_SHAPE_T2, GATE_ORIENTATION_90},
+ { 2, 6, GATE_SHAPE_T1, GATE_ORIENTATION_90},
+ { 9, 12, GATE_SHAPE_T1, GATE_ORIENTATION_0},
+ { 6, 23, GATE_SHAPE_T1, GATE_ORIENTATION_0},
+ {12, 22, GATE_SHAPE_T1, GATE_ORIENTATION_0},
+ { 6, 3, GATE_SHAPE_L4, GATE_ORIENTATION_180},
+};
+
+// Trickhouse
+static const struct RotatingGatePuzzle sRotatingGate_TrickHousePuzzleConfig[] =
+{
+ {14, 5, GATE_SHAPE_T1, GATE_ORIENTATION_90},
+ {10, 6, GATE_SHAPE_L2, GATE_ORIENTATION_180},
+ { 6, 6, GATE_SHAPE_L4, GATE_ORIENTATION_90},
+ {14, 8, GATE_SHAPE_T1, GATE_ORIENTATION_90},
+ { 3, 10, GATE_SHAPE_L3, GATE_ORIENTATION_270},
+ { 9, 14, GATE_SHAPE_L1, GATE_ORIENTATION_90},
+ { 3, 15, GATE_SHAPE_T3, GATE_ORIENTATION_0},
+ { 2, 17, GATE_SHAPE_L2, GATE_ORIENTATION_180},
+ {12, 18, GATE_SHAPE_T3, GATE_ORIENTATION_270},
+ { 5, 18, GATE_SHAPE_L4, GATE_ORIENTATION_90},
+ {10, 19, GATE_SHAPE_L3, GATE_ORIENTATION_180},
+};
+
+static const u8 sRotatingGateTiles_1[] = INCBIN_U8("graphics/misc/rotating_gate_1.4bpp");
+static const u8 sRotatingGateTiles_2[] = INCBIN_U8("graphics/misc/rotating_gate_2.4bpp");
+static const u8 sRotatingGateTiles_3[] = INCBIN_U8("graphics/misc/rotating_gate_3.4bpp");
+static const u8 sRotatingGateTiles_4[] = INCBIN_U8("graphics/misc/rotating_gate_4.4bpp");
+static const u8 sRotatingGateTiles_5[] = INCBIN_U8("graphics/misc/rotating_gate_5.4bpp");
+static const u8 sRotatingGateTiles_6[] = INCBIN_U8("graphics/misc/rotating_gate_6.4bpp");
+static const u8 sRotatingGateTiles_7[] = INCBIN_U8("graphics/misc/rotating_gate_7.4bpp");
+static const u8 sRotatingGateTiles_8[] = INCBIN_U8("graphics/misc/rotating_gate_8.4bpp");
+
+static const struct OamData sOamData_RotatingGateLarge =
+{
+ .y = 0,
+ .affineMode = ST_OAM_AFFINE_NORMAL,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = ST_OAM_4BPP,
+ .shape = ST_OAM_SQUARE,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 3,
+ .tileNum = 0,
+ .priority = 2,
+ .paletteNum = 2,
+ .affineParam = 0,
+};
+
+static const struct OamData sOamData_RotatingGateRegular =
+{
+ .y = 0,
+ .affineMode = ST_OAM_AFFINE_NORMAL,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = ST_OAM_4BPP,
+ .shape = ST_OAM_SQUARE,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 2,
+ .tileNum = 0,
+ .priority = 2,
+ .paletteNum = 2,
+ .affineParam = 0,
+};
+
+static const struct SpriteSheet sRotatingGatesGraphicsTable[] =
+{
+ {sRotatingGateTiles_1, 0x200, ROTATING_GATE_TILE_TAG + GATE_SHAPE_L1},
+ {sRotatingGateTiles_2, 0x800, ROTATING_GATE_TILE_TAG + GATE_SHAPE_L2},
+ {sRotatingGateTiles_3, 0x800, ROTATING_GATE_TILE_TAG + GATE_SHAPE_L3},
+ {sRotatingGateTiles_4, 0x800, ROTATING_GATE_TILE_TAG + GATE_SHAPE_L4},
+ {sRotatingGateTiles_5, 0x200, ROTATING_GATE_TILE_TAG + GATE_SHAPE_T1},
+ {sRotatingGateTiles_6, 0x800, ROTATING_GATE_TILE_TAG + GATE_SHAPE_T2},
+ {sRotatingGateTiles_7, 0x800, ROTATING_GATE_TILE_TAG + GATE_SHAPE_T3},
+ {sRotatingGateTiles_8, 0x800, ROTATING_GATE_TILE_TAG + GATE_SHAPE_T4},
+ {NULL},
+};
+
+static const union AnimCmd sSpriteAnim_RotatingGateLarge[] =
+{
+ ANIMCMD_FRAME(0, 0),
+ ANIMCMD_END,
+};
+
+static const union AnimCmd sSpriteAnim_RotatingGateRegular[] =
+{
+ ANIMCMD_FRAME(0, 0), ANIMCMD_END,
+};
+
+static const union AnimCmd *const sSpriteAnimTable_RotatingGateLarge[] =
+{
+ sSpriteAnim_RotatingGateLarge,
+};
+
+static const union AnimCmd *const sSpriteAnimTable_RotatingGateRegular[] =
+{
+ sSpriteAnim_RotatingGateRegular,
+};
+
+static const union AffineAnimCmd sSpriteAffineAnim_Rotated0[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+static const union AffineAnimCmd sSpriteAffineAnim_Rotated90[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, -64, 0),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+static const union AffineAnimCmd sSpriteAffineAnim_Rotated180[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, -128, 0),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+static const union AffineAnimCmd sSpriteAffineAnim_Rotated270[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 64, 0),
+ AFFINEANIMCMD_JUMP(0),
+};
+
+static const union AffineAnimCmd sSpriteAffineAnim_RotatingClockwise0to90[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -4, 16),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd sSpriteAffineAnim_RotatingClockwise90to180[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, -64, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -4, 16),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd sSpriteAffineAnim_RotatingClockwise180to270[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, -128, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -4, 16),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd sSpriteAffineAnim_RotatingClockwise270to360[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 64, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -4, 16),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd sSpriteAffineAnim_RotatingAnticlockwise360to270[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 4, 16),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd sSpriteAffineAnim_RotatingAnticlockwise270to180[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 64, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 4, 16),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd sSpriteAffineAnim_RotatingAnticlockwise180to90[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, -128, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 4, 16),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd sSpriteAffineAnim_RotatingAnticlockwise90to0[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, -64, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 4, 16),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd sSpriteAffineAnim_RotatingClockwise0to90Faster[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 8),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd sSpriteAffineAnim_RotatingClockwise90to180Faster[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, -64, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 8),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd sSpriteAffineAnim_RotatingClockwise180to270Faster[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, -128, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 8),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd sSpriteAffineAnim_RotatingClockwise270to360Faster[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 64, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 8),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd sSpriteAffineAnim_RotatingAnticlockwise360to270Faster[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 8),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd sSpriteAffineAnim_RotatingAnticlockwise270to180Faster[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 64, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 8),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd sSpriteAffineAnim_RotatingAnticlockwise180to90Faster[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, -128, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 8),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd sSpriteAffineAnim_RotatingAnticlockwise90to0Faster[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, -64, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 8),
+ AFFINEANIMCMD_END,
+};
+
+static const union AffineAnimCmd *const sSpriteAffineAnimTable_RotatingGate[] =
+{
+ sSpriteAffineAnim_Rotated0,
+ sSpriteAffineAnim_Rotated90,
+ sSpriteAffineAnim_Rotated180,
+ sSpriteAffineAnim_Rotated270,
+ sSpriteAffineAnim_RotatingAnticlockwise360to270,
+ sSpriteAffineAnim_RotatingAnticlockwise90to0,
+ sSpriteAffineAnim_RotatingAnticlockwise180to90,
+ sSpriteAffineAnim_RotatingAnticlockwise270to180,
+ sSpriteAffineAnim_RotatingClockwise0to90,
+ sSpriteAffineAnim_RotatingClockwise90to180,
+ sSpriteAffineAnim_RotatingClockwise180to270,
+ sSpriteAffineAnim_RotatingClockwise270to360,
+ sSpriteAffineAnim_RotatingAnticlockwise360to270Faster,
+ sSpriteAffineAnim_RotatingAnticlockwise90to0Faster,
+ sSpriteAffineAnim_RotatingAnticlockwise180to90Faster,
+ sSpriteAffineAnim_RotatingAnticlockwise270to180Faster,
+ sSpriteAffineAnim_RotatingClockwise0to90Faster,
+ sSpriteAffineAnim_RotatingClockwise90to180Faster,
+ sSpriteAffineAnim_RotatingClockwise180to270Faster,
+ sSpriteAffineAnim_RotatingClockwise270to360Faster,
+};
+
+
+static const struct SpriteTemplate sSpriteTemplate_RotatingGateLarge =
+{
+ .tileTag = ROTATING_GATE_TILE_TAG,
+ .paletteTag = 0xFFFF,
+ .oam = &sOamData_RotatingGateLarge,
+ .anims = sSpriteAnimTable_RotatingGateLarge,
+ .images = NULL,
+ .affineAnims = sSpriteAffineAnimTable_RotatingGate,
+ .callback = SpriteCallback_RotatingGate,
+};
+
+static const struct SpriteTemplate sSpriteTemplate_RotatingGateRegular =
+{
+ .tileTag = ROTATING_GATE_TILE_TAG,
+ .paletteTag = 0xFFFF,
+ .oam = &sOamData_RotatingGateRegular,
+ .anims = sSpriteAnimTable_RotatingGateRegular,
+ .images = NULL,
+ .affineAnims = sSpriteAffineAnimTable_RotatingGate,
+ .callback = SpriteCallback_RotatingGate,
+};
+
+// These structures describe what happens to the gate if you hit it at
+// a given coordinate in a 4x4 grid when walking in the specified
+// direction. Either the gate does not rotate, or it rotates in the
+// given direction. This information is compared against the gate
+// "arm" layout to see if there is an arm at the position in order to
+// produce the final rotation.
+static const u8 sRotatingGate_RotationInfoNorth[4 * 4] =
+{
+ GATE_ROT_NONE, GATE_ROT_NONE, GATE_ROT_NONE, GATE_ROT_NONE,
+ GATE_ROT_CW(GATE_ARM_WEST, 1), GATE_ROT_CW(GATE_ARM_WEST, 0), GATE_ROT_ACW(GATE_ARM_EAST, 0), GATE_ROT_ACW(GATE_ARM_EAST, 1),
+ GATE_ROT_NONE, GATE_ROT_NONE, GATE_ROT_NONE, GATE_ROT_NONE,
+ GATE_ROT_NONE, GATE_ROT_NONE, GATE_ROT_NONE, GATE_ROT_NONE,
+};
+
+static const u8 sRotatingGate_RotationInfoSouth[4 * 4] =
+{
+ GATE_ROT_NONE, GATE_ROT_NONE, GATE_ROT_NONE, GATE_ROT_NONE,
+ GATE_ROT_NONE, GATE_ROT_NONE, GATE_ROT_NONE, GATE_ROT_NONE,
+ GATE_ROT_ACW(GATE_ARM_WEST, 1), GATE_ROT_ACW(GATE_ARM_WEST, 0), GATE_ROT_CW(GATE_ARM_EAST, 0), GATE_ROT_CW(GATE_ARM_EAST, 1),
+ GATE_ROT_NONE, GATE_ROT_NONE, GATE_ROT_NONE, GATE_ROT_NONE,
+};
+
+static const u8 sRotatingGate_RotationInfoWest[4 * 4] =
+{
+ GATE_ROT_NONE, GATE_ROT_ACW(GATE_ARM_NORTH, 1), GATE_ROT_NONE, GATE_ROT_NONE,
+ GATE_ROT_NONE, GATE_ROT_ACW(GATE_ARM_NORTH, 0), GATE_ROT_NONE, GATE_ROT_NONE,
+ GATE_ROT_NONE, GATE_ROT_CW(GATE_ARM_SOUTH, 0), GATE_ROT_NONE, GATE_ROT_NONE,
+ GATE_ROT_NONE, GATE_ROT_CW(GATE_ARM_SOUTH, 1), GATE_ROT_NONE, GATE_ROT_NONE,
+};
+
+static const u8 sRotatingGate_RotationInfoEast[4 * 4] =
+{
+ GATE_ROT_NONE, GATE_ROT_NONE, GATE_ROT_CW(GATE_ARM_NORTH, 1), GATE_ROT_NONE,
+ GATE_ROT_NONE, GATE_ROT_NONE, GATE_ROT_CW(GATE_ARM_NORTH, 0), GATE_ROT_NONE,
+ GATE_ROT_NONE, GATE_ROT_NONE, GATE_ROT_ACW(GATE_ARM_SOUTH, 0), GATE_ROT_NONE,
+ GATE_ROT_NONE, GATE_ROT_NONE, GATE_ROT_ACW(GATE_ARM_SOUTH, 1), GATE_ROT_NONE,
+};
+
+// These tables describe the relative coordinate positions the arms
+// must move through in order to be rotated.
+static const struct Coords8 sRotatingGate_ArmPositionsClockwiseRotation[] = {
+ { 0, -1 }, { 1, -2 }, { 0, 0 }, { 1, 0 }, { -1, 0 }, { -1, 1 }, { -1, -1 }, { -2, -1 },
+};
+
+static const struct Coords8 sRotatingGate_ArmPositionsAntiClockwiseRotation[] = {
+ { -1, -1 }, { -1, -2 }, { 0, -1 }, { 1, -1 }, { 0, 0 }, { 0, 1 }, { -1, 0 }, { -2, 0 },
+};
+
+// Describes where the gates "arms" are in the order north, east, south, west.
+// These are adjusted using the current orientation to perform collision checking
+static const u8 sRotatingGate_ArmLayout[][4 * 2] =
+{
+ // L-shape gates
+ {
+ 1, 0,
+ 1, 0,
+ 0, 0,
+ 0, 0,
+ },
+ {
+ 1, 1,
+ 1, 0,
+ 0, 0,
+ 0, 0,
+ },
+ {
+ 1, 0,
+ 1, 1,
+ 0, 0,
+ 0, 0,
+ },
+ {
+ 1, 1,
+ 1, 1,
+ 0, 0,
+ 0, 0,
+ },
+
+ // T-shape gates
+ {
+ 1, 0,
+ 1, 0,
+ 1, 0,
+ 0, 0,
+ },
+ {
+ 1, 1,
+ 1, 0,
+ 1, 0,
+ 0, 0,
+ },
+ {
+ 1, 0,
+ 1, 1,
+ 1, 0,
+ 0, 0,
+ },
+ {
+ 1, 0,
+ 1, 0,
+ 1, 1,
+ 0, 0,
+ },
+
+ // Unused T-shape gates
+ // These have 2-3 long arms and cannot actually be used anywhere
+ // since configuration for them is missing from the other tables.
+ {
+ 1, 1,
+ 1, 1,
+ 1, 0,
+ 0, 0,
+ },
+ {
+ 1, 1,
+ 1, 0,
+ 1, 1,
+ 0, 0,
+ },
+ {
+ 1, 0,
+ 1, 1,
+ 1, 1,
+ 0, 0,
+ },
+ {
+ 1, 1,
+ 1, 1,
+ 1, 1,
+ 0, 0,
+ },
+};
+
+// ewram
+static EWRAM_DATA u8 gRotatingGate_GateSpriteIds[ROTATING_GATE_PUZZLE_MAX] = {0};
+static EWRAM_DATA const struct RotatingGatePuzzle *gRotatingGate_PuzzleConfig = NULL;
+static EWRAM_DATA u8 gRotatingGate_PuzzleCount = 0;
+
+// text
+static s32 GetCurrentMapRotatingGatePuzzleType(void)
+{
+ if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(FORTREE_CITY_GYM) &&
+ gSaveBlock1Ptr->location.mapNum == MAP_NUM(FORTREE_CITY_GYM))
+ {
+ return PUZZLE_FORTREE_CITY_GYM;
+ }
+
+ if (gSaveBlock1Ptr->location.mapGroup == MAP_GROUP(ROUTE110_TRICK_HOUSE_PUZZLE6) &&
+ gSaveBlock1Ptr->location.mapNum == MAP_NUM(ROUTE110_TRICK_HOUSE_PUZZLE6))
+ {
+ return PUZZLE_ROUTE110_TRICK_HOUSE_PUZZLE6;
+ }
+
+ return PUZZLE_NONE;
+}
+
+static void RotatingGate_ResetAllGateOrientations(void)
+{
+ s32 i;
+ u8 *ptr;
+
+ ptr = (u8 *)GetVarPointer(VAR_0x4000);
+
+ for (i = 0; i < gRotatingGate_PuzzleCount; i++)
+ {
+ ptr[i] = gRotatingGate_PuzzleConfig[i].orientation;
+ }
+}
+
+static s32 RotatingGate_GetGateOrientation(u8 gateId)
+{
+ return ((u8 *)GetVarPointer(VAR_0x4000))[gateId];
+}
+
+static void RotatingGate_SetGateOrientation(u8 gateId, u8 orientation)
+{
+ ((u8 *)GetVarPointer(VAR_0x4000))[gateId] = orientation;
+}
+
+static void RotatingGate_RotateInDirection(u8 gateId, u32 rotationDirection)
+{
+ u8 orientation = RotatingGate_GetGateOrientation(gateId);
+
+ if (rotationDirection == ROTATE_ANTICLOCKWISE)
+ {
+ if (orientation)
+ orientation--;
+ else
+ orientation = GATE_ORIENTATION_270;
+ }
+ else
+ {
+ orientation = ++orientation % GATE_ORIENTATION_MAX;
+ }
+ RotatingGate_SetGateOrientation(gateId, orientation);
+}
+
+static void RotatingGate_LoadPuzzleConfig(void)
+{
+ s32 puzzleType = GetCurrentMapRotatingGatePuzzleType();
+ u32 i;
+
+ switch (puzzleType)
+ {
+ case PUZZLE_FORTREE_CITY_GYM:
+ gRotatingGate_PuzzleConfig = sRotatingGate_FortreePuzzleConfig;
+ gRotatingGate_PuzzleCount =
+ sizeof(sRotatingGate_FortreePuzzleConfig) / sizeof(struct RotatingGatePuzzle);
+ break;
+ case PUZZLE_ROUTE110_TRICK_HOUSE_PUZZLE6:
+ gRotatingGate_PuzzleConfig = sRotatingGate_TrickHousePuzzleConfig;
+ gRotatingGate_PuzzleCount =
+ sizeof(sRotatingGate_TrickHousePuzzleConfig) / sizeof(struct RotatingGatePuzzle);
+ break;
+ case PUZZLE_NONE:
+ default:
+ return;
+ }
+
+ for (i = 0; i < ROTATING_GATE_PUZZLE_MAX - 1; i++)
+ {
+ gRotatingGate_GateSpriteIds[i] = MAX_SPRITES;
+ }
+}
+
+static void RotatingGate_CreateGatesWithinViewport(s16 deltaX, s16 deltaY)
+{
+ u8 i;
+
+ // Calculate the bounding box of the camera
+ // Same as RotatingGate_DestroyGatesOutsideViewport
+ s16 x = gSaveBlock1Ptr->pos.x - 2;
+ s16 x2 = gSaveBlock1Ptr->pos.x + 0x11;
+ s16 y = gSaveBlock1Ptr->pos.y - 2;
+ s16 y2 = gSaveBlock1Ptr->pos.y + 0xe;
+
+ s16 x3, y3;
+
+ for (i = 0; i < gRotatingGate_PuzzleCount; i++)
+ {
+ x3 = gRotatingGate_PuzzleConfig[i].x + 7;
+ y3 = gRotatingGate_PuzzleConfig[i].y + 7;
+
+ if (y <= y3 && y2 >= y3 && x <= x3 && x2 >= x3 &&
+ gRotatingGate_GateSpriteIds[i] == MAX_SPRITES)
+ {
+ gRotatingGate_GateSpriteIds[i] = RotatingGate_CreateGate(i, deltaX, deltaY);
+ }
+ }
+}
+
+static u8 RotatingGate_CreateGate(u8 gateId, s16 deltaX, s16 deltaY)
+{
+ struct Sprite *sprite;
+ struct SpriteTemplate template;
+ const struct RotatingGatePuzzle *gate;
+ u8 spriteId;
+ s16 x, y;
+
+ gate = &gRotatingGate_PuzzleConfig[gateId];
+
+ if (gate->shape == GATE_SHAPE_L1 || gate->shape == GATE_SHAPE_T1)
+ template = sSpriteTemplate_RotatingGateRegular;
+ else
+ template = sSpriteTemplate_RotatingGateLarge;
+
+ template.tileTag = gate->shape + ROTATING_GATE_TILE_TAG;
+
+ spriteId = CreateSprite(&template, 0, 0, 0x94);
+ if (spriteId == MAX_SPRITES)
+ return MAX_SPRITES;
+
+ x = gate->x + 7;
+ y = gate->y + 7;
+
+ sprite = &gSprites[spriteId];
+ sprite->data[0] = gateId;
+ sprite->coordOffsetEnabled = 1;
+
+ sub_8092FF0(x + deltaX, y + deltaY, &sprite->pos1.x, &sprite->pos1.y);
+ RotatingGate_HideGatesOutsideViewport(sprite);
+ StartSpriteAffineAnim(sprite, RotatingGate_GetGateOrientation(gateId));
+
+ return spriteId;
+}
+
+static void SpriteCallback_RotatingGate(struct Sprite *sprite)
+{
+ u8 rotationDirection;
+ u8 orientation;
+ u8 affineAnimation;
+
+ rotationDirection = sprite->data[1];
+ orientation = sprite->data[2];
+
+ RotatingGate_HideGatesOutsideViewport(sprite);
+
+ if (rotationDirection == ROTATE_ANTICLOCKWISE)
+ {
+ affineAnimation = orientation + 4;
+
+ if (GetPlayerSpeed() != 1)
+ affineAnimation += 8;
+
+ PlaySE(SE_HI_TURUN);
+ StartSpriteAffineAnim(sprite, affineAnimation);
+ }
+ else if (rotationDirection == ROTATE_CLOCKWISE)
+ {
+ affineAnimation = orientation + 8;
+
+ if (GetPlayerSpeed() != 1)
+ affineAnimation += 8;
+
+ PlaySE(SE_HI_TURUN);
+ StartSpriteAffineAnim(sprite, affineAnimation);
+ }
+
+ sprite->data[1] = ROTATE_NONE;
+}
+
+static void RotatingGate_HideGatesOutsideViewport(struct Sprite *sprite)
+{
+ u16 x;
+ s16 x2;
+ u16 y;
+ s16 y2;
+
+ sprite->invisible = FALSE;
+ x = sprite->pos1.x + sprite->pos2.x + sprite->centerToCornerVecX + gSpriteCoordOffsetX;
+ y = sprite->pos1.y + sprite->pos2.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY;
+
+ x2 = x + 0x40; // Dimensions of the rotating gate
+ y2 = y + 0x40;
+
+ if ((s16)x > DISPLAY_WIDTH + 0x10 - 1 || x2 < -0x10)
+ {
+ sprite->invisible = TRUE;
+ }
+
+ if ((s16)y > DISPLAY_HEIGHT + 0x10 - 1 || y2 < -0x10)
+ {
+ sprite->invisible = TRUE;
+ }
+}
+
+static void LoadRotatingGatePics(void)
+{
+ LoadSpriteSheets(sRotatingGatesGraphicsTable);
+}
+
+/*
+static*/ void RotatingGate_DestroyGatesOutsideViewport(void)
+{
+ s16 x;
+ s16 x2;
+ s16 y;
+ s16 y2;
+ s16 xGate;
+ s16 yGate;
+ s32 i;
+ struct Sprite *sprite;
+
+ // Same as RotatingGate_CreateGatesWithinViewport
+ x = gSaveBlock1Ptr->pos.x - 2;
+ x2 = gSaveBlock1Ptr->pos.x + 0x11;
+ y = gSaveBlock1Ptr->pos.y - 2;
+ y2 = gSaveBlock1Ptr->pos.y + 0xe;
+
+ for (i = 0; i < gRotatingGate_PuzzleCount; i++)
+ {
+ xGate = gRotatingGate_PuzzleConfig[i].x + 7;
+ yGate = gRotatingGate_PuzzleConfig[i].y + 7;
+
+ if (gRotatingGate_GateSpriteIds[i] == MAX_SPRITES)
+ continue;
+
+ if (xGate < x || xGate > x2 || yGate < y || yGate > y2)
+ {
+ sprite = &gSprites[gRotatingGate_GateSpriteIds[i]];
+ FreeSpriteOamMatrix(sprite);
+ DestroySprite(sprite);
+ gRotatingGate_GateSpriteIds[i] = MAX_SPRITES;
+ }
+ }
+}
+
+
+#ifdef NONMATCHING
+bool8 MapGridIsImpassableAt(s32, s32); //fool the compiler
+
+static s32 RotatingGate_CanRotate(u8 gateId, s16 rotationDirection)
+{
+ const struct Coords8 *armPos;
+ u8 orientation;
+ s16 x;
+ s16 y;
+ u8 shape;
+ u32 shape8;
+ s32 i;
+ s32 j;
+ s32 armOrientation;
+ const u8 *gateArmCollisionData;
+ u8 armIndex;
+
+ if (rotationDirection == ROTATE_ANTICLOCKWISE)
+ armPos = sRotatingGate_ArmPositionsAntiClockwiseRotation;
+ else if (rotationDirection == ROTATE_CLOCKWISE)
+ armPos = sRotatingGate_ArmPositionsClockwiseRotation;
+ else
+ return FALSE;
+
+ orientation = RotatingGate_GetGateOrientation(gateId);
+
+ shape = gRotatingGate_PuzzleConfig[gateId].shape;
+ x = gRotatingGate_PuzzleConfig[gateId].x + 7;
+ y = gRotatingGate_PuzzleConfig[gateId].y + 7;
+
+
+ // Loop through the gate's "arms" clockwise (north, south, east, west)
+ for (i = GATE_ARM_NORTH, shape8 = shape* 4*2 ; i <= GATE_ARM_WEST; i++)
+ {
+ // Ensure that no part of the arm collides with the map
+ for (j = 0, armOrientation = orientation + i, gateArmCollisionData = (u8 *)((u32)sRotatingGate_ArmLayout + shape8 + 2*i); j < GATE_ARM_MAX_LENGTH; j++)
+ {
+ armIndex = 2 * (armOrientation % 4) + j;
+
+ if (*gateArmCollisionData)
+ {
+ if (MapGridIsImpassableAt(x + armPos[armIndex].deltaX, y + armPos[armIndex].deltaY) == TRUE)
+ return FALSE;
+ }
+ gateArmCollisionData++;
+ }
+ }
+
+ return TRUE;
+}
+
+#else
+NAKED
+static s32 RotatingGate_CanRotate(u8 a, s16 rotationDirection)
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, 0xC\n\
+ lsls r0, 24\n\
+ lsrs r4, r0, 24\n\
+ cmp r1, 0x1\n\
+ bne _080FBCFC\n\
+ ldr r0, =sRotatingGate_ArmPositionsAntiClockwiseRotation\n\
+ mov r10, r0\n\
+ b _080FBD08\n\
+ .pool\n\
+_080FBCFC:\n\
+ cmp r1, 0x2\n\
+ beq _080FBD04\n\
+_080FBD00:\n\
+ movs r0, 0\n\
+ b _080FBD98\n\
+_080FBD04:\n\
+ ldr r1, =sRotatingGate_ArmPositionsClockwiseRotation\n\
+ mov r10, r1\n\
+_080FBD08:\n\
+ adds r0, r4, 0\n\
+ bl RotatingGate_GetGateOrientation\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ str r0, [sp]\n\
+ ldr r0, =gRotatingGate_PuzzleConfig\n\
+ ldr r1, [r0]\n\
+ lsls r0, r4, 3\n\
+ adds r0, r1\n\
+ ldrb r2, [r0, 0x4]\n\
+ ldrh r1, [r0]\n\
+ adds r1, 0x7\n\
+ ldrh r0, [r0, 0x2]\n\
+ adds r0, 0x7\n\
+ movs r3, 0\n\
+ lsls r2, 3\n\
+ str r2, [sp, 0x4]\n\
+ lsls r1, 16\n\
+ asrs r1, 16\n\
+ mov r9, r1\n\
+ lsls r0, 16\n\
+ asrs r0, 16\n\
+ mov r8, r0\n\
+_080FBD38:\n\
+ movs r6, 0\n\
+ ldr r2, [sp]\n\
+ adds r7, r2, r3\n\
+ lsls r0, r3, 1\n\
+ adds r5, r7, 0\n\
+ ldr r1, [sp, 0x4]\n\
+ adds r0, r1\n\
+ ldr r2, =sRotatingGate_ArmLayout\n\
+ adds r4, r0, r2\n\
+_080FBD4A:\n\
+ adds r0, r5, 0\n\
+ cmp r5, 0\n\
+ bge _080FBD52\n\
+ adds r0, r7, 0x3\n\
+_080FBD52:\n\
+ asrs r0, 2\n\
+ lsls r0, 2\n\
+ subs r0, r5, r0\n\
+ lsls r0, 1\n\
+ adds r0, r6\n\
+ lsls r0, 24\n\
+ lsrs r1, r0, 24\n\
+ ldrb r0, [r4]\n\
+ cmp r0, 0\n\
+ beq _080FBD88\n\
+ lsls r1, 2\n\
+ add r1, r10\n\
+ movs r0, 0\n\
+ ldrsb r0, [r1, r0]\n\
+ add r0, r9\n\
+ ldrb r1, [r1, 0x1]\n\
+ lsls r1, 24\n\
+ asrs r1, 24\n\
+ add r1, r8\n\
+ str r3, [sp, 0x8]\n\
+ bl MapGridIsImpassableAt\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ ldr r3, [sp, 0x8]\n\
+ cmp r0, 0x1\n\
+ beq _080FBD00\n\
+_080FBD88:\n\
+ adds r4, 0x1\n\
+ adds r6, 0x1\n\
+ cmp r6, 0x1\n\
+ ble _080FBD4A\n\
+ adds r3, 0x1\n\
+ cmp r3, 0x3\n\
+ ble _080FBD38\n\
+ movs r0, 0x1\n\
+_080FBD98:\n\
+ add sp, 0xC\n\
+ pop {r3-r5}\n\
+ mov r8, r3\n\
+ mov r9, r4\n\
+ mov r10, r5\n\
+ pop {r4-r7}\n\
+ pop {r1}\n\
+ bx r1\n\
+ .pool\n\
+.syntax divided\n");
+}
+#endif
+
+static s32 RotatingGate_HasArm(u8 gateId, u8 armInfo)
+{
+ s32 isLongArm;
+ s8 armOrientation;
+ s32 arm;
+ s32 shape;
+
+ arm = armInfo >> 1;
+ isLongArm = armInfo & 1;
+
+ armOrientation = (arm - RotatingGate_GetGateOrientation(gateId) + 4) % 4;
+ shape = gRotatingGate_PuzzleConfig[gateId].shape;
+ return sRotatingGate_ArmLayout[shape][armOrientation * 2 + isLongArm];
+}
+
+static void RotatingGate_TriggerRotationAnimation(u8 gateId, s32 rotationDirection)
+{
+ struct Sprite *sprite;
+
+ if (gRotatingGate_GateSpriteIds[gateId] != MAX_SPRITES)
+ {
+ sprite = &gSprites[gRotatingGate_GateSpriteIds[gateId]];
+ sprite->data[1] = rotationDirection;
+ sprite->data[2] = RotatingGate_GetGateOrientation(gateId);
+ }
+}
+
+static u8 RotatingGate_GetRotationInfo(u8 direction, s16 x, s16 y)
+{
+ register const u8 *ptr;
+
+ if (direction == DIR_NORTH)
+ ptr = sRotatingGate_RotationInfoNorth;
+ else if (direction == DIR_SOUTH)
+ ptr = sRotatingGate_RotationInfoSouth;
+ else if (direction == DIR_WEST)
+ ptr = sRotatingGate_RotationInfoWest;
+ else if (direction == DIR_EAST)
+ ptr = sRotatingGate_RotationInfoEast;
+ else
+ return GATE_ROT_NONE;
+
+ return ptr[y * 4 + x];
+}
+
+void RotatingGate_InitPuzzle(void)
+{
+ if (GetCurrentMapRotatingGatePuzzleType())
+ {
+ RotatingGate_LoadPuzzleConfig();
+ RotatingGate_ResetAllGateOrientations();
+ }
+}
+
+void RotatingGatePuzzleCameraUpdate(u16 deltaX, u16 deltaY)
+{
+ if (GetCurrentMapRotatingGatePuzzleType())
+ {
+ RotatingGate_CreateGatesWithinViewport(deltaX, deltaY);
+ RotatingGate_DestroyGatesOutsideViewport();
+ }
+}
+
+void RotatingGate_InitPuzzleAndGraphics(void)
+{
+ if (GetCurrentMapRotatingGatePuzzleType())
+ {
+ LoadRotatingGatePics();
+ RotatingGate_LoadPuzzleConfig();
+ RotatingGate_CreateGatesWithinViewport(0, 0);
+ }
+}
+
+bool8 CheckForRotatingGatePuzzleCollision(u8 direction, s16 x, s16 y)
+{
+ s32 i;
+
+ if (!GetCurrentMapRotatingGatePuzzleType())
+ return FALSE;
+ for (i = 0; i < gRotatingGate_PuzzleCount; i++)
+ {
+ s16 gateX = gRotatingGate_PuzzleConfig[i].x + 7;
+ s16 gateY = gRotatingGate_PuzzleConfig[i].y + 7;
+
+ if (gateX - 2 <= x && x <= gateX + 1 && gateY - 2 <= y && y <= gateY + 1)
+ {
+ s16 centerX = x - gateX + 2;
+ s16 centerY = y - gateY + 2;
+ u8 rotationInfo = RotatingGate_GetRotationInfo(direction, centerX, centerY);
+
+ if (rotationInfo != GATE_ROT_NONE)
+ {
+ u8 rotationDirection = ((rotationInfo & 0xF0) >> 4);
+ u8 armInfo = rotationInfo & 0xF;
+
+ if (RotatingGate_HasArm(i, armInfo))
+ {
+ if (RotatingGate_CanRotate(i, rotationDirection))
+ {
+ RotatingGate_TriggerRotationAnimation(i, rotationDirection);
+ RotatingGate_RotateInDirection(i, rotationDirection);
+ return FALSE;
+ }
+ return TRUE;
+ }
+ }
+ }
+ }
+ return FALSE;
+}
+
+bool8 CheckForRotatingGatePuzzleCollisionWithoutAnimation(u8 direction, s16 x, s16 y)
+{
+ s32 i;
+
+ if (!GetCurrentMapRotatingGatePuzzleType())
+ return FALSE;
+ for (i = 0; i < gRotatingGate_PuzzleCount; i++)
+ {
+ s16 gateX = gRotatingGate_PuzzleConfig[i].x + 7;
+ s16 gateY = gRotatingGate_PuzzleConfig[i].y + 7;
+
+ if (gateX - 2 <= x && x <= gateX + 1 && gateY - 2 <= y && y <= gateY + 1)
+ {
+ s16 centerX = x - gateX + 2;
+ s16 centerY = y - gateY + 2;
+ u8 rotationInfo = RotatingGate_GetRotationInfo(direction, centerX, centerY);
+
+ if (rotationInfo != GATE_ROT_NONE)
+ {
+ u8 rotationDirection = ((rotationInfo & 0xF0) >> 4);
+ u8 armInfo = rotationInfo & 0xF;
+
+ if (RotatingGate_HasArm(i, armInfo))
+ {
+ if (!RotatingGate_CanRotate(i, rotationDirection))
+ {
+ return TRUE;
+ }
+ }
+ }
+ }
+ }
+ return FALSE;
+}
diff --git a/src/safari_zone.c b/src/safari_zone.c
index dd3cf3733..ab5c38f3a 100644
--- a/src/safari_zone.c
+++ b/src/safari_zone.c
@@ -30,9 +30,9 @@ extern void sub_80EE44C(u8, u8);
extern void IncrementGameStat(u8 index);
extern void ScriptContext1_SetupScript(u8*);
extern void ScriptContext2_RunNewScript(u8*);
-extern void c2_exit_to_overworld_2_switch(void);
-extern void c2_exit_to_overworld_1_continue_scripts_restart_music(void);
-extern void c2_load_new_map(void);
+extern void CB2_ReturnToField(void);
+extern void CB2_ReturnToFieldContinueScript(void);
+extern void CB2_LoadMap(void);
extern void sub_80AF6F0(void);
extern void ScriptContext1_Stop(void);
extern void warp_in(void);
@@ -112,20 +112,20 @@ void CB2_EndSafariBattle(void)
sSafariZoneCaughtMons++;
if (gNumSafariBalls != 0)
{
- SetMainCallback2(c2_exit_to_overworld_2_switch);
+ SetMainCallback2(CB2_ReturnToField);
}
else if (gBattleOutcome == B_OUTCOME_NO_SAFARI_BALLS)
{
ScriptContext2_RunNewScript(EventScript_2A4B4C);
warp_in();
gFieldCallback = sub_80AF6F0;
- SetMainCallback2(c2_load_new_map);
+ SetMainCallback2(CB2_LoadMap);
}
else if (gBattleOutcome == B_OUTCOME_CAUGHT)
{
ScriptContext1_SetupScript(EventScript_2A4B9B);
ScriptContext1_Stop();
- SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music);
+ SetMainCallback2(CB2_ReturnToFieldContinueScript);
}
}
diff --git a/src/save.c b/src/save.c
index 8d77e801a..81731692e 100644
--- a/src/save.c
+++ b/src/save.c
@@ -3,17 +3,16 @@
#include "save.h"
#include "constants/game_stat.h"
#include "task.h"
+#include "decompress.h"
+#include "load_save.h"
+#include "overworld.h"
// for the chunk declarations
-extern struct SaveBlock2 gSaveblock2;
-extern struct SaveBlock1 gSaveblock1;
-extern struct PokemonStorage gPokemonStorage;
extern struct SaveSectionLocation gRamSaveSectionLocations[0xE];
-extern u8 gDecompressionBuffer[];
-extern u32 gFlashMemoryPresent;
extern u16 gUnknown_03006294;
extern bool8 gSoftResetDisabled;
+extern u32 gUnknown_0203CF5C;
// Divide save blocks into individual chunks to be written to flash sectors
@@ -23,13 +22,13 @@ extern bool8 gSoftResetDisabled;
/*
* Sector Layout:
- *
+ *
* Sectors 0 - 13: Save Slot 1
* Sectors 14 - 27: Save Slot 2
* Sectors 28 - 29: Hall of Fame
* Sector 30: e-Reader/Mystery Gift Stuff (note: e-Reader is deprecated in Emerald US)
* Sector 31: Recorded Battle
- *
+ *
* There are two save slots for saving the player's game data. We alternate between
* them each time the game is saved, so that if the current save slot is corrupt,
* we can load the previous one. We also rotate the sectors in each save slot
@@ -40,7 +39,7 @@ extern bool8 gSoftResetDisabled;
// (u8 *)structure was removed from the first statement of the macro in Emerald.
// This is because malloc is used to allocate addresses so storing the raw
-// addresses should not be done in the offsets information.
+// addresses should not be done in the offsets information.
#define SAVEBLOCK_CHUNK(structure, chunkNum) \
{ \
chunkNum * SECTOR_DATA_SIZE, \
@@ -68,8 +67,10 @@ const struct SaveSectionOffsets gSaveSectionOffsets[] =
};
extern void DoSaveFailedScreen(u8); // save_failed_screen
-extern void LoadSerializedGame(void); // load_save
extern bool32 ProgramFlashSectorAndVerify(u8 sector, u8 *data);
+extern void save_serialize_map(void);
+extern void sub_800ADF8(void);
+extern bool8 sub_800A520(void);
// iwram common
u16 gLastWrittenSector;
@@ -96,7 +97,7 @@ void ClearSaveData(void)
}
}
-void ResetSaveCounters(void)
+void Save_ResetSaveCounters(void)
{
gSaveCounter = 0;
gLastWrittenSector = 0;
@@ -655,11 +656,6 @@ void UpdateSaveAddresses(void)
}
}
-extern u32 GetGameStat(u8 index); // rom4
-extern void IncrementGameStat(u8 index); // rom4
-extern void SaveSerializedGame(void); // load_save
-extern u32 gUnknown_0203CF5C;
-
u8 HandleSavingData(u8 saveType)
{
u8 i;
@@ -670,25 +666,25 @@ u8 HandleSavingData(u8 saveType)
UpdateSaveAddresses();
switch (saveType)
{
- case HOF_DELETE_SAVE: // deletes HOF before overwriting HOF completely. unused
+ case SAVE_HALL_OF_FAME_ERASE_BEFORE: // deletes HOF before overwriting HOF completely. unused
for (i = 0xE * 2 + 0; i < 32; i++)
EraseFlashSector(i);
- case HOF_SAVE: // hall of fame.
+ case SAVE_HALL_OF_FAME: // hall of fame.
if (GetGameStat(GAME_STAT_ENTERED_HOF) < 999)
IncrementGameStat(GAME_STAT_ENTERED_HOF);
SaveSerializedGame();
save_write_to_flash(0xFFFF, gRamSaveSectionLocations);
- tempAddr = (u8 *)0x201C000; // FIXME: make this a label.
+ tempAddr = gDecompressionBuffer;
HandleWriteSectorNBytes(0x1C, tempAddr, 0xF80);
HandleWriteSectorNBytes(0x1D, tempAddr + 0xF80, 0xF80);
break;
- case NORMAL_SAVE: // normal save. also called by overwriting your own save.
+ case SAVE_NORMAL: // normal save. also called by overwriting your own save.
default:
SaveSerializedGame();
save_write_to_flash(0xFFFF, gRamSaveSectionLocations);
break;
- case LINK_SAVE: // _081532C4
- case LINK2_SAVE:
+ case SAVE_LINK: // _081532C4
+ case SAVE_LINK2:
SaveSerializedGame();
for(i = 0; i < 5; i++)
ClearSaveData_2(i, gRamSaveSectionLocations);
@@ -702,7 +698,7 @@ u8 HandleSavingData(u8 saveType)
save_write_to_flash(0, gRamSaveSectionLocations);
break;
*/
- case DIFFERENT_FILE_SAVE:
+ case SAVE_OVERWRITE_DIFFERENT_FILE:
for (i = (0xE * 2 + 0); i < 32; i++)
EraseFlashSector(i); // erase HOF.
SaveSerializedGame();
@@ -799,7 +795,7 @@ bool8 sub_8153474(void)
return retVal;
}
-u8 sub_81534D0(u8 a1)
+u8 Save_LoadGameData(u8 a1)
{
u8 result;
@@ -835,7 +831,7 @@ u16 sub_815355C(void)
struct SaveSection* savSection;
savSection = gFastSaveSection = &gSaveDataBuffer;
- if (gFlashMemoryPresent != 1)
+ if (gFlashMemoryPresent != TRUE)
return 0;
UpdateSaveAddresses();
GetSaveValidStatus(gRamSaveSectionLocations);
@@ -896,12 +892,6 @@ u32 sub_8153634(u8 sector, u8* src)
return 1;
}
-extern void save_serialize_map(void);
-extern void sub_8076D5C(void);
-extern void sav2_gender2_inplace_and_xFE(void);
-extern void sub_800ADF8(void);
-extern bool8 sub_800A520(void);
-
void sub_8153688(u8 taskId)
{
s16* taskData = gTasks[taskId].data;
diff --git a/src/scrcmd.c b/src/scrcmd.c
index d2e9c13c9..a29e64979 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"
@@ -1477,20 +1476,14 @@ bool8 ScrCmd_showcontestwinner(struct ScriptContext *ctx)
return TRUE;
}
-// Lots of math, can't figure it out.
-/*
bool8 ScrCmd_braillemessage(struct ScriptContext *ctx)
{
u8 *ptr = (u8 *)ScriptReadWord(ctx);
- struct WindowTemplate template1;
- struct WindowTemplate template2;
- int i;
- u8 width;
- u8 height;
- int temp1;
- int temp2;
- u8 x;
- u8 y;
+ struct WindowTemplate winTemplate;
+ s32 i;
+ u8 width, height;
+ u8 xWindow, yWindow, xText, yText;
+ u8 temp;
StringExpandPlaceholders(gStringVar4, ptr + 6);
@@ -1508,168 +1501,30 @@ bool8 ScrCmd_braillemessage(struct ScriptContext *ctx)
if (height > 0x12)
height = 0x12;
- x = width + 2;
- temp1 = (0x1E - x) / 2;
- x = temp1 + 1;
- temp1 = ((x - temp1 - 1) * 8 + 3);
+ temp = width + 2;
+ xWindow = (0x1E - temp) / 2;
- y = height + 2;
- temp2 = (0x14 - y) / 2;
- y = temp2 + 2;
- temp2 = ((y - temp2 - 1) * 8);
+ temp = height + 2;
+ yText = (0x14 - temp) / 2;
- sub_8198A50(&template1, 0, x, y, width, height, 0xF, 0x1);
- template2 = template1;
- gUnknown_03000F30 = AddWindow(&template2);
+ xText = xWindow;
+ xWindow += 1;
+
+ yWindow = yText;
+ yText += 2;
+
+ xText = (xWindow - xText - 1) * 8 + 3;
+ yText = (yText - yWindow - 1) * 8;
+
+ winTemplate = sub_8198A50(0, xWindow, yWindow + 1, width, height, 0xF, 0x1);
+ gUnknown_03000F30 = AddWindow(&winTemplate);
sub_809882C(gUnknown_03000F30, 0x214, 0xE0);
NewMenuHelpers_DrawStdWindowFrame(gUnknown_03000F30, 0);
PutWindowTilemap(gUnknown_03000F30);
FillWindowPixelBuffer(gUnknown_03000F30, 0x11);
- PrintTextOnWindow(gUnknown_03000F30, 6, gStringVar4, temp1, temp2, 0xFF, 0x0);
+ PrintTextOnWindow(gUnknown_03000F30, 6, gStringVar4, xText, yText, 0xFF, 0x0);
CopyWindowToVram(gUnknown_03000F30, 3);
return FALSE;
-}*/
-__attribute__((naked))
-bool8 ScrCmd_braillemessage(struct ScriptContext *ctx)
-{
- asm("push {r4-r7,lr}\n\
- mov r7, r8\n\
- push {r7}\n\
- sub sp, #0x20\n\
- bl ScriptReadWord\n\
- add r1, r0, #0\n\
- ldr r4, =gStringVar4\n\
- add r1, #0x6\n\
- add r0, r4, #0\n\
- bl StringExpandPlaceholders\n\
- mov r2, #0x1\n\
- neg r2, r2\n\
- mov r0, #0x6\n\
- add r1, r4, #0\n\
- bl GetStringWidth\n\
- lsr r0, #3\n\
- lsl r0, #24\n\
- lsr r7, r0, #24\n\
- cmp r7, #0x1C\n\
- bls _0809AE9C\n\
- mov r7, #0x1C\n\
-_0809AE9C:\n\
- mov r5, #0x4\n\
- ldrb r0, [r4]\n\
- add r2, r7, #0x2\n\
- add r1, sp, #0x18\n\
- mov r8, r1\n\
- cmp r0, #0xFF\n\
- beq _0809AEC0\n\
- add r1, r4, #0\n\
-_0809AEAC:\n\
- ldrb r0, [r1]\n\
- add r1, #0x1\n\
- cmp r0, #0xFE\n\
- bne _0809AEBA\n\
- add r0, r5, #0x3\n\
- lsl r0, #24\n\
- lsr r5, r0, #24\n\
-_0809AEBA:\n\
- ldrb r0, [r1]\n\
- cmp r0, #0xFF\n\
- bne _0809AEAC\n\
-_0809AEC0:\n\
- cmp r5, #0x12\n\
- bls _0809AEC6\n\
- mov r5, #0x12\n\
-_0809AEC6:\n\
- lsl r0, r2, #24\n\
- lsr r0, #24\n\
- mov r2, #0x1E\n\
- sub r2, r0\n\
- lsr r0, r2, #31\n\
- add r2, r0\n\
- asr r2, #1\n\
- lsl r2, #24\n\
- add r0, r5, #0x2\n\
- lsl r0, #24\n\
- lsr r0, #24\n\
- mov r4, #0x14\n\
- sub r4, r0\n\
- lsr r0, r4, #31\n\
- add r4, r0\n\
- asr r4, #1\n\
- lsl r4, #24\n\
- lsr r6, r2, #24\n\
- mov r0, #0x80\n\
- lsl r0, #17\n\
- add r2, r0\n\
- lsr r2, #24\n\
- lsr r3, r4, #24\n\
- mov r1, #0x80\n\
- lsl r1, #18\n\
- add r4, r1\n\
- lsr r4, #24\n\
- sub r6, r2, r6\n\
- sub r6, #0x1\n\
- lsl r6, #3\n\
- add r6, #0x3\n\
- lsl r6, #24\n\
- lsr r6, #24\n\
- sub r4, r3\n\
- sub r4, #0x1\n\
- lsl r4, #27\n\
- lsr r4, #24\n\
- add r3, #0x1\n\
- lsl r3, #24\n\
- lsr r3, #24\n\
- str r7, [sp]\n\
- str r5, [sp, #0x4]\n\
- mov r0, #0xF\n\
- str r0, [sp, #0x8]\n\
- mov r0, #0x1\n\
- str r0, [sp, #0xC]\n\
- add r0, sp, #0x10\n\
- mov r1, #0\n\
- bl sub_8198A50\n\
- ldr r0, [sp, #0x10]\n\
- ldr r1, [sp, #0x14]\n\
- str r0, [sp, #0x18]\n\
- str r1, [sp, #0x1C]\n\
- ldr r5, =gUnknown_03000F30\n\
- mov r0, r8\n\
- bl AddWindow\n\
- strb r0, [r5]\n\
- ldrb r0, [r5]\n\
- mov r1, #0x85\n\
- lsl r1, #2\n\
- mov r2, #0xE0\n\
- bl sub_809882C\n\
- ldrb r0, [r5]\n\
- mov r1, #0\n\
- bl NewMenuHelpers_DrawStdWindowFrame\n\
- ldrb r0, [r5]\n\
- bl PutWindowTilemap\n\
- ldrb r0, [r5]\n\
- mov r1, #0x11\n\
- bl FillWindowPixelBuffer\n\
- ldrb r0, [r5]\n\
- ldr r2, =gStringVar4\n\
- str r4, [sp]\n\
- mov r1, #0xFF\n\
- str r1, [sp, #0x4]\n\
- mov r1, #0\n\
- str r1, [sp, #0x8]\n\
- mov r1, #0x6\n\
- add r3, r6, #0\n\
- bl PrintTextOnWindow\n\
- ldrb r0, [r5]\n\
- mov r1, #0x3\n\
- bl CopyWindowToVram\n\
- mov r0, #0\n\
- add sp, #0x20\n\
- pop {r3}\n\
- mov r8, r3\n\
- pop {r4-r7}\n\
- pop {r1}\n\
- bx r1\n\
- .pool");
}
bool8 ScrCmd_cmdDA(struct ScriptContext *ctx)
@@ -1757,7 +1612,7 @@ bool8 ScrCmd_buffernumberstring(struct ScriptContext *ctx)
{
u8 stringVarIndex = ScriptReadByte(ctx);
u16 v1 = VarGet(ScriptReadHalfword(ctx));
- u8 v2 = sub_80EF370(v1);
+ u8 v2 = CountDigits(v1);
ConvertIntToDecimalStringN(sScriptStringVars[stringVarIndex], v1, 0, v2);
return FALSE;
@@ -2055,7 +1910,7 @@ bool8 ScrCmd_playslotmachine(struct ScriptContext *ctx)
{
u8 slotMachineIndex = VarGet(ScriptReadHalfword(ctx));
- PlaySlotMachine(slotMachineIndex, c2_exit_to_overworld_1_continue_scripts_restart_music);
+ PlaySlotMachine(slotMachineIndex, CB2_ReturnToFieldContinueScript);
ScriptContext1_Stop();
return TRUE;
}
diff --git a/src/script.c b/src/script.c
index 5a1c5daa9..8c868128b 100644
--- a/src/script.c
+++ b/src/script.c
@@ -243,7 +243,7 @@ void ScriptContext2_RunNewScript(const u8 *ptr)
u8 *mapheader_get_tagged_pointer(u8 tag)
{
- u8 *mapScripts = gMapHeader.mapScripts;
+ const u8 *mapScripts = gMapHeader.mapScripts;
if (!mapScripts)
return NULL;
diff --git a/src/script_movement.c b/src/script_movement.c
new file mode 100644
index 000000000..bbeb0eedc
--- /dev/null
+++ b/src/script_movement.c
@@ -0,0 +1,233 @@
+#include "global.h"
+#include "script_movement.h"
+#include "field_map_obj.h"
+#include "field_map_obj_helpers.h"
+#include "task.h"
+#include "util.h"
+
+// static functions
+static void sub_80D33AC(u8);
+static u8 sub_80D33F4(void);
+static bool8 sub_80D3408(u8, u8, const u8 *);
+static u8 sub_80D3474(u8, u8);
+static bool8 sub_80D3584(u8, u8);
+static void sub_80D35DC(u8, u8, u8, const u8 *);
+static void UnfreezeObjects(u8);
+static void sub_80D3660(u8);
+static void sub_80A2490(u8, u8, u8, const u8 *);
+
+// EWRAM_DATA
+static EWRAM_DATA const u8 *gUnknown_02039D90[16] = {0};
+
+// text
+bool8 ScriptMovement_StartObjectMovementScript(u8 localId, u8 mapNum, u8 mapGroup, const u8 *movementScript)
+{
+ u8 mapObjId;
+
+ if (TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjId))
+ return TRUE;
+ if (!FuncIsActiveTask(sub_80D3660))
+ sub_80D33AC(50);
+ return sub_80D3408(sub_80D33F4(), mapObjId, movementScript);
+}
+
+bool8 ScriptMovement_IsObjectMovementFinished(u8 localId, u8 mapNum, u8 mapBank)
+{
+ u8 mapObjId;
+ u8 r4;
+ u8 r1;
+
+ if (TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapBank, &mapObjId))
+ return TRUE;
+ r4 = sub_80D33F4();
+ r1 = sub_80D3474(r4, mapObjId);
+ if (r1 == 16)
+ return TRUE;
+ return sub_80D3584(r4, r1);
+}
+
+void sub_80D338C(void)
+{
+ u8 taskId;
+
+ taskId = sub_80D33F4();
+ if (taskId != 0xFF)
+ {
+ UnfreezeObjects(taskId);
+ DestroyTask(taskId);
+ }
+}
+
+
+static void sub_80D33AC(u8 priority)
+{
+ u8 taskId;
+ u8 i;
+
+ taskId = CreateTask(sub_80D3660, priority);
+ for (i = 1; i < 16; i++)
+ gTasks[taskId].data[i] = 0xFFFF;
+}
+
+static u8 sub_80D33F4(void)
+{
+ return FindTaskIdByFunc(sub_80D3660);
+}
+
+static bool8 sub_80D3408(u8 taskId, u8 mapObjId, const u8 *movementScript)
+{
+ u8 r4;
+
+ r4 = sub_80D3474(taskId, mapObjId);
+ if (r4 != 16)
+ {
+ if (sub_80D3584(taskId, r4) == 0)
+ {
+ return TRUE;
+ }
+ else
+ {
+ sub_80D35DC(taskId, r4, mapObjId, movementScript);
+ return FALSE;
+ }
+ }
+ r4 = sub_80D3474(taskId, 0xFF);
+ if (r4 == 16)
+ {
+ return TRUE;
+ }
+ else
+ {
+ sub_80D35DC(taskId, r4, mapObjId, movementScript);
+ return FALSE;
+ }
+}
+
+static u8 sub_80D3474(u8 taskId, u8 b)
+{
+ u8 *ptr;
+ u8 i;
+
+ ptr = (u8 *)&gTasks[taskId].data[1];
+ for (i = 0; i < 16; i++, ptr++)
+ {
+ if (*ptr == b)
+ return i;
+ }
+ return 16;
+}
+
+static void sub_80D34B0(u8 taskId, u8 b, u8 **c)
+{
+ u8 i;
+
+ *c = (u8 *)&gTasks[taskId].data[1];
+ for (i = 0; i < b; i++, (*c)++)
+ ;
+}
+
+static void sub_80D34E4(u8 taskId, u8 b, u8 c)
+{
+ u8 *ptr;
+
+ sub_80D34B0(taskId, b, &ptr);
+ *ptr = c; //what is this supposed to do?
+}
+
+static void sub_80D3508(u8 taskId, u8 b, u8 *c)
+{
+ u8 *ptr;
+
+ sub_80D34B0(taskId, b, &ptr);
+ *c = *ptr;
+}
+
+static void sub_80D352C(u8 a, u8 b)
+{
+ u16 var = ~gBitTable[b];
+
+ gTasks[a].data[0] &= var;
+}
+
+static void sub_80D355C(u8 taskId, u8 b)
+{
+ gTasks[taskId].data[0] |= gBitTable[b];
+}
+
+static bool8 sub_80D3584(u8 taskId, u8 b)
+{
+ u16 var = (u16)gTasks[taskId].data[0] & gBitTable[b];
+
+ if (var != 0)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+static void npc_obj_offscreen_culling_and_flag_update(u8 a, const u8 *movementScript)
+{
+ gUnknown_02039D90[a] = movementScript;
+}
+
+static const u8 *sub_80D35CC(u8 a)
+{
+ return gUnknown_02039D90[a];
+}
+
+static void sub_80D35DC(u8 taskId, u8 b, u8 mapObjId, const u8 *movementScript)
+{
+ sub_80D352C(taskId, b);
+ npc_obj_offscreen_culling_and_flag_update(b, movementScript);
+ sub_80D34E4(taskId, b, mapObjId);
+}
+
+static void UnfreezeObjects(u8 taskId)
+{
+ u8 *pMapObjId;
+ u8 i;
+
+ pMapObjId = (u8 *)&gTasks[taskId].data[1];
+ for (i = 0; i < 16; i++, pMapObjId++)
+ {
+ if (*pMapObjId != 0xFF)
+ npc_sync_anim_pause_bits(&gMapObjects[*pMapObjId]);
+ }
+}
+
+static void sub_80D3660(u8 taskId)
+{
+ u8 i;
+ u8 var;
+
+ for (i = 0; i < 16; i++)
+ {
+ sub_80D3508(taskId, i, &var);
+ if (var != 0xFF)
+ sub_80A2490(taskId, i, var, sub_80D35CC(i));
+ }
+}
+
+static void sub_80A2490(u8 taskId, u8 b, u8 mapObjId, const u8 *d)
+{
+ u8 var;
+
+ if (FieldObjectIsSpecialAnimActive(&gMapObjects[mapObjId])
+ && !FieldObjectClearAnimIfSpecialAnimFinished(&gMapObjects[mapObjId]))
+ return;
+
+ var = *d;
+ if (var == 0xFE)
+ {
+ sub_80D355C(taskId, b);
+ FreezeMapObject(&gMapObjects[mapObjId]);
+ }
+ else
+ {
+ if (!FieldObjectSetSpecialAnim(&gMapObjects[mapObjId], var))
+ {
+ d++;
+ npc_obj_offscreen_culling_and_flag_update(b, d);
+ }
+ }
+}
+
diff --git a/src/secret_base.c b/src/secret_base.c
index e3c06a75d..e2b7e20f1 100644
--- a/src/secret_base.c
+++ b/src/secret_base.c
@@ -3,10 +3,11 @@
#include "global.h"
#include "constants/decorations.h"
#include "malloc.h"
+#include "main.h"
#include "task.h"
#include "palette.h"
-#include "list_menu.h"
#include "window.h"
+#include "list_menu.h"
#include "menu.h"
#include "menu_helpers.h"
#include "menu_indicators.h"
@@ -39,6 +40,8 @@
#include "tv.h"
#include "secret_base.h"
+extern void mapldr_default(void);
+
// Static type declarations
struct SecretBaseListMenuBuffer {
@@ -61,7 +64,7 @@ EWRAM_DATA struct SecretBaseListMenuBuffer *gUnknown_0203A020 = NULL;
void sub_80E9C9C(u8 taskId);
void game_continue(u8 taskId);
-void sub_80E9DEC(u32 a0, bool8 flag, struct ListMenu *menu);
+void sub_80E9DEC(s32 a0, bool8 flag, struct ListMenu *menu);
void sub_80E9E00(u8 taskId);
void sub_80E9E44(u8 taskId);
void sub_80E9E90(u8 taskId);
@@ -244,7 +247,7 @@ void sub_80E8C98(void)
void sub_80E8CB0(s16 *xPtr, s16 *yPtr, u16 tile)
{
- struct MapData *mapData;
+ const struct MapData *mapData;
s16 x;
s16 y;
@@ -322,7 +325,7 @@ void sub_80E8E18(void)
VarSet(VAR_SECRET_BASE_MAP, gMapHeader.regionMapSectionId);
}
-void sub_80E8EE0(struct MapEvents *events)
+void sub_80E8EE0(struct MapEvents const *events)
{
u16 bgEventIndex;
u16 i;
@@ -386,7 +389,7 @@ void sub_80E8FD0(u8 taskId)
sub_80E8F9C();
warp_in();
gFieldCallback = sub_80AF168;
- SetMainCallback2(c2_load_new_map);
+ SetMainCallback2(CB2_LoadMap);
DestroyTask(taskId);
break;
}
@@ -411,7 +414,7 @@ bool8 sub_80E909C(void)
void sub_80E90C8(u8 taskId)
{
FieldObjectTurn(&gMapObjects[gPlayerAvatar.mapObjectId], DIR_NORTH);
- if (sub_80ABDFC() == TRUE)
+ if (IsWeatherNotFadingIn() == TRUE)
{
EnableBothScriptContexts();
DestroyTask(taskId);
@@ -444,7 +447,7 @@ void sub_80E916C(u8 taskId)
Overworld_SetWarpDestination(gSaveBlock1Ptr->location.mapGroup, gSaveBlock1Ptr->location.mapNum, -1, gUnknown_0858CFE8[idx + 2], gUnknown_0858CFE8[idx + 3]);
warp_in();
gFieldCallback = sub_80E9108;
- SetMainCallback2(c2_load_new_map);
+ SetMainCallback2(CB2_LoadMap);
DestroyTask(taskId);
}
}
@@ -642,7 +645,7 @@ void sub_80E96A4(u8 taskId)
copy_saved_warp2_bank_and_enter_x_to_warp1(0x7e);
warp_in();
gFieldCallback = mapldr_default;
- SetMainCallback2(c2_load_new_map);
+ SetMainCallback2(CB2_LoadMap);
ScriptContext2_Disable();
DestroyTask(taskId);
break;
@@ -773,7 +776,7 @@ void sub_80E9AD0(void)
u16 i;
u16 j;
s16 tile;
- struct MapEvents *events;
+ const struct MapEvents *events;
events = gMapHeader.events;
for (i = 0; i < events->bgEventCount; i ++)
@@ -908,13 +911,13 @@ void game_continue(u8 taskId)
data[3] = 8;
}
gMultiuseListMenuTemplate = gUnknown_0858D07C;
- gMultiuseListMenuTemplate.unk_10 = data[6];
+ gMultiuseListMenuTemplate.windowId = data[6];
gMultiuseListMenuTemplate.totalItems = data[0];
gMultiuseListMenuTemplate.items = gUnknown_0203A020->items;
gMultiuseListMenuTemplate.maxShowed = data[3];
}
-void sub_80E9DEC(u32 a0, bool8 flag, struct ListMenu *menu)
+void sub_80E9DEC(s32 a0, bool8 flag, struct ListMenu *menu)
{
if (flag != TRUE)
{
@@ -948,14 +951,14 @@ void sub_80E9E90(u8 taskId)
data = gTasks[taskId].data;
input = ListMenuHandleInputGetItemId(data[5]);
- sub_81AE860(data[5], &data[2], &data[1]);
+ ListMenuGetScrollAndRow(data[5], &data[2], &data[1]);
switch (input)
{
case -1:
break;
case -2:
PlaySE(SE_SELECT);
- sub_81AE6C8(data[5], NULL, NULL);
+ DestroyListMenuTask(data[5], NULL, NULL);
RemoveScrollIndicatorArrowPair(data[8]);
sub_819746C(data[6], 0);
ClearWindowTilemap(data[6]);
@@ -1037,7 +1040,7 @@ void sub_80EA08C(u8 taskId)
data = gTasks[taskId].data;
sub_8197434(0, 0);
- sub_81AE6C8(data[5], &data[2], &data[1]);
+ DestroyListMenuTask(data[5], &data[2], &data[1]);
gSaveBlock1Ptr->secretBases[data[4]].sbr_field_1_6 = 0;
game_continue(taskId);
sub_812225C(&data[2], &data[1], data[3], data[0]);
@@ -1056,7 +1059,7 @@ void sub_80EA13C(u8 taskId)
data = gTasks[taskId].data;
sub_8197434(0, 0);
- sub_81AE6C8(data[5], &data[2], &data[1]);
+ DestroyListMenuTask(data[5], &data[2], &data[1]);
sub_80E9E00(taskId);
gTasks[taskId].func = sub_80E9E90;
}
diff --git a/src/smokescreen.c b/src/smokescreen.c
new file mode 100644
index 000000000..9b37cd234
--- /dev/null
+++ b/src/smokescreen.c
@@ -0,0 +1,71 @@
+#include "global.h"
+#include "data2.h"
+#include "decompress.h"
+#include "sprite.h"
+#include "util.h"
+
+static void sub_8075370(struct Sprite *);
+
+u8 sub_807521C(s16 x, s16 y, u8 a3)
+{
+ u8 mainSpriteId;
+ u8 spriteId1, spriteId2, spriteId3, spriteId4;
+ struct Sprite *mainSprite;
+
+ if (GetSpriteTileStartByTag(gUnknown_0831C620.tag) == 0xFFFF)
+ {
+ LoadCompressedObjectPicUsingHeap(&gUnknown_0831C620);
+ LoadCompressedObjectPaletteUsingHeap(&gUnknown_0831C628);
+ }
+
+ mainSpriteId = CreateInvisibleSpriteWithCallback(sub_8075370);
+ mainSprite = &gSprites[mainSpriteId];
+ mainSprite->data[1] = a3;
+
+ spriteId1 = CreateSprite(&gUnknown_0831C688, x - 16, y - 16, 2);
+ gSprites[spriteId1].data[0] = mainSpriteId;
+ mainSprite->data[0]++;
+ AnimateSprite(&gSprites[spriteId1]);
+
+ spriteId2 = CreateSprite(&gUnknown_0831C688, x, y - 16, 2);
+ gSprites[spriteId2].data[0] = mainSpriteId;
+ mainSprite->data[0]++;
+ StartSpriteAnim(&gSprites[spriteId2], 1);
+ AnimateSprite(&gSprites[spriteId2]);
+
+ spriteId3 = CreateSprite(&gUnknown_0831C688, x - 16, y, 2);
+ gSprites[spriteId3].data[0] = mainSpriteId;
+ mainSprite->data[0]++;
+ StartSpriteAnim(&gSprites[spriteId3], 2);
+ AnimateSprite(&gSprites[spriteId3]);
+
+ spriteId4 = CreateSprite(&gUnknown_0831C688, x, y, 2);
+ gSprites[spriteId4].data[0] = mainSpriteId;
+ mainSprite->data[0]++;
+ StartSpriteAnim(&gSprites[spriteId4], 3);
+ AnimateSprite(&gSprites[spriteId4]);
+
+ return mainSpriteId;
+}
+
+static void sub_8075370(struct Sprite *sprite)
+{
+ if (!sprite->data[0])
+ {
+ FreeSpriteTilesByTag(gUnknown_0831C620.tag);
+ FreeSpritePaletteByTag(gUnknown_0831C628.tag);
+ if (!sprite->data[1])
+ DestroySprite(sprite);
+ else
+ sprite->callback = SpriteCallbackDummy;
+ }
+}
+
+void sub_80753B4(struct Sprite *sprite)
+{
+ if (sprite->animEnded)
+ {
+ gSprites[sprite->data[0]].data[0]--;
+ DestroySprite(sprite);
+ }
+}
diff --git a/src/start_menu.c b/src/start_menu.c
index d076d307d..c248ca86b 100644
--- a/src/start_menu.c
+++ b/src/start_menu.c
@@ -8,6 +8,31 @@
#include "text.h"
#include "strings.h"
#include "bg.h"
+#include "field_effect.h"
+#include "task.h"
+#include "overworld.h"
+#include "link.h"
+#include "battle_frontier_2.h"
+#include "rom_818CFC8.h"
+#include "field_specials.h"
+#include "field_map_obj_helpers.h"
+#include "script.h"
+#include "main.h"
+#include "sound.h"
+#include "pokedex.h"
+#include "field_weather.h"
+#include "palette.h"
+#include "item_menu.h"
+#include "option_menu.h"
+#include "event_scripts.h"
+#include "save.h"
+#include "gpu_regs.h"
+#include "scanline_effect.h"
+#include "text_window.h"
+#include "load_save.h"
+#include "international_string_util.h"
+#include "constants/songs.h"
+#include "field_player_avatar.h"
// Menu actions
enum
@@ -27,49 +52,99 @@ enum
MENU_ACTION_PYRAMID_BAG
};
-extern bool32 is_c1_link_related_active(void);
-extern bool32 InUnionRoom(void);
-extern bool8 InBattlePike(void);
-extern bool8 InBattlePyramid(void);
-extern bool8 InMultiBattleRoom(void);
-extern void NewMenuHelpers_DrawStdWindowFrame(u8 windowId, u8 a1);
-extern void sub_8198070(u8 windowId, u8 a1);
-
-// this file's functions
-static void BuildStartMenuActions_LinkMode(void);
-static void BuildStartMenuActions_UnionRoom(void);
-static void BuildStartMenuActions_SafariZone(void);
-static void BuildStartMenuActions_BattlePike(void);
-static void BuildStartMenuActions_BattlePyramid(void);
-static void BuildStartMenuActions_MultiBattleRoom(void);
-static void BuildStartMenuActions_Normal(void);
-bool8 StartMenu_Pokedex(void);
-bool8 StartMenu_Pokemon(void);
-bool8 StartMenu_Bag(void);
-bool8 StartMenu_PokeNav(void);
-bool8 StartMenu_PlayerName(void);
-bool8 StartMenu_Save(void);
-bool8 StartMenu_Option(void);
-bool8 StartMenu_Exit(void);
-bool8 StartMenu_SafariZoneRetire(void);
-bool8 StartMenu_LinkModePlayerName(void);
-bool8 StartMenu_BattlePyramidRetire(void);
-bool8 StartMenu_BattlePyramidBag(void);
-
-// EWRAM vars
-EWRAM_DATA u8 sSafariBallsWindowId = 0;
-EWRAM_DATA u8 sBattlePyramidFloorWindowId = 0;
-EWRAM_DATA u8 sStartMenuCursorPos = 0;
-EWRAM_DATA u8 sNumStartMenuActions = 0;
-EWRAM_DATA u8 sCurrentStartMenuActions[9] = {0};
-EWRAM_DATA u8 gUnknown_02037619[2] = {0};
-EWRAM_DATA bool8 (*gUnknown_0203761C)(void) = NULL;
-EWRAM_DATA u8 gUnknown_02037620 = 0;
-EWRAM_DATA u8 gUnknown_02037621 = 0;
-EWRAM_DATA u8 gUnknown_02037622 = 0;
-
-// const rom data
-static const struct WindowTemplate gSafariBallsWindowTemplate = {0, 1, 1, 9, 4, 0xF, 8};
+// Save status
+enum
+{
+ SAVE_IN_PROGRESS,
+ SAVE_SUCCESS,
+ SAVE_CANCELED,
+ SAVE_ERROR
+};
+
+EWRAM_DATA static u8 sSafariBallsWindowId = 0;
+EWRAM_DATA static u8 sBattlePyramidFloorWindowId = 0;
+EWRAM_DATA static u8 sStartMenuCursorPos = 0;
+EWRAM_DATA static u8 sNumStartMenuActions = 0;
+EWRAM_DATA static u8 sCurrentStartMenuActions[9] = {0};
+EWRAM_DATA static u8 sUnknown_02037619[2] = {0};
+
+EWRAM_DATA static u8 (*sSaveDialogCallback)(void) = NULL;
+EWRAM_DATA static u8 sSaveDialogTimer = 0;
+EWRAM_DATA static bool8 sSavingComplete = FALSE;
+EWRAM_DATA static u8 sSaveInfoWindowId = 0;
+
+// Extern variables
+extern u8 gDifferentSaveFile;
+extern u16 gSaveFileStatus;
+extern u8 gUnknown_03005DB4;
+
+// Extern functions in uncompiled files
+extern void sub_80AF688(void);
+extern void var_800D_set_xB(void);
+extern void sub_808B864(void);
+extern void sub_80BB534(void);
+extern void play_some_sound(void);
+extern void CB2_PartyMenuFromStartMenu(void);
+extern void CB2_PokeNav(void);
+extern void sub_80C4DDC(void (*)(void));
+extern void sub_80C51C4(void (*)(void));
+extern void sub_80C4E74(u8, void (*)(void));
+extern void sub_81C4EFC(void);
+extern void sub_80984F4(void);
+extern void sub_81A9EC8(void);
+extern void save_serialize_map(void);
+extern void sub_81A9E90(void);
+
+// Menu action callbacks
+static bool8 StartMenuPokedexCallback(void);
+static bool8 StartMenuPokemonCallback(void);
+static bool8 StartMenuBagCallback(void);
+static bool8 StartMenuPokeNavCallback(void);
+static bool8 StartMenuPlayerNameCallback(void);
+static bool8 StartMenuSaveCallback(void);
+static bool8 StartMenuOptionCallback(void);
+static bool8 StartMenuExitCallback(void);
+static bool8 StartMenuSafariZoneRetireCallback(void);
+static bool8 StartMenuLinkModePlayerNameCallback(void);
+static bool8 StartMenuBattlePyramidRetireCallback(void);
+static bool8 StartMenuBattlePyramidBagCallback(void);
+
+// Menu callbacks
+static bool8 SaveStartCallback(void);
+static bool8 SaveCallback(void);
+static bool8 BattlePyramidRetireStartCallback(void);
+static bool8 BattlePyramidRetireReturnCallback(void);
+static bool8 BattlePyramidRetireCallback(void);
+static bool8 HandleStartMenuInput(void);
+
+// Save dialog callbacks
+static u8 SaveConfirmSaveCallback(void);
+static u8 SaveYesNoCallback(void);
+static u8 SaveConfirmInputCallback(void);
+static u8 SaveFileExistsCallback(void);
+static u8 SaveConfirmOverwriteNoCallback(void);
+static u8 SaveConfirmOverwriteCallback(void);
+static u8 SaveOverwriteInputCallback(void);
+static u8 SaveSavingMessageCallback(void);
+static u8 SaveDoSaveCallback(void);
+static u8 SaveSuccessCallback(void);
+static u8 SaveReturnSuccessCallback(void);
+static u8 SaveErrorCallback(void);
+static u8 SaveReturnErrorCallback(void);
+static u8 BattlePyramidConfirmRetireCallback(void);
+static u8 BattlePyramidRetireYesNoCallback(void);
+static u8 BattlePyramidRetireInputCallback(void);
+
+// Task callbacks
+static void StartMenuTask(u8 taskId);
+static void SaveGameTask(u8 taskId);
+static void sub_80A0550(u8 taskId);
+static void sub_80A08A4(u8 taskId);
+
+// Some other callback
+static bool8 sub_809FA00(void);
+
+static const struct WindowTemplate sSafariBallsWindowTemplate = {0, 1, 1, 9, 4, 0xF, 8};
static const u8* const sPyramindFloorNames[] =
{
@@ -83,27 +158,27 @@ static const u8* const sPyramindFloorNames[] =
gText_Peak
};
-static const struct WindowTemplate gPyramidFloorWindowTemplate_2 = {0, 1, 1, 0xA, 4, 0xF, 8};
-static const struct WindowTemplate gPyramidFloorWindowTemplate_1 = {0, 1, 1, 0xC, 4, 0xF, 8};
-
-const struct MenuAction sStartMenuItems[] =
-{
- {gText_MenuPokedex, {.u8_void = StartMenu_Pokedex}},
- {gText_MenuPokemon, {.u8_void = StartMenu_Pokemon}},
- {gText_MenuBag, {.u8_void = StartMenu_Bag}},
- {gText_MenuPokenav, {.u8_void = StartMenu_PokeNav}},
- {gText_MenuPlayer, {.u8_void = StartMenu_PlayerName}},
- {gText_MenuSave, {.u8_void = StartMenu_Save}},
- {gText_MenuOption, {.u8_void = StartMenu_Option}},
- {gText_MenuExit, {.u8_void = StartMenu_Exit}},
- {gText_MenuRetire, {.u8_void = StartMenu_SafariZoneRetire}},
- {gText_MenuPlayer, {.u8_void = StartMenu_LinkModePlayerName}},
- {gText_MenuRest, {.u8_void = StartMenu_Save}},
- {gText_MenuRetire, {.u8_void = StartMenu_BattlePyramidRetire}},
- {gText_MenuBag, {.u8_void = StartMenu_BattlePyramidBag}}
+static const struct WindowTemplate sPyramidFloorWindowTemplate_2 = {0, 1, 1, 0xA, 4, 0xF, 8};
+static const struct WindowTemplate sPyramidFloorWindowTemplate_1 = {0, 1, 1, 0xC, 4, 0xF, 8};
+
+static const struct MenuAction sStartMenuItems[] =
+{
+ {gText_MenuPokedex, {.u8_void = StartMenuPokedexCallback}},
+ {gText_MenuPokemon, {.u8_void = StartMenuPokemonCallback}},
+ {gText_MenuBag, {.u8_void = StartMenuBagCallback}},
+ {gText_MenuPokenav, {.u8_void = StartMenuPokeNavCallback}},
+ {gText_MenuPlayer, {.u8_void = StartMenuPlayerNameCallback}},
+ {gText_MenuSave, {.u8_void = StartMenuSaveCallback}},
+ {gText_MenuOption, {.u8_void = StartMenuOptionCallback}},
+ {gText_MenuExit, {.u8_void = StartMenuExitCallback}},
+ {gText_MenuRetire, {.u8_void = StartMenuSafariZoneRetireCallback}},
+ {gText_MenuPlayer, {.u8_void = StartMenuLinkModePlayerNameCallback}},
+ {gText_MenuRest, {.u8_void = StartMenuSaveCallback}},
+ {gText_MenuRetire, {.u8_void = StartMenuBattlePyramidRetireCallback}},
+ {gText_MenuBag, {.u8_void = StartMenuBattlePyramidBagCallback}}
};
-const struct BgTemplate gUnknown_085105A8[] =
+static const struct BgTemplate sUnknown_085105A8[] =
{
{
.bg = 0,
@@ -116,15 +191,47 @@ const struct BgTemplate gUnknown_085105A8[] =
}
};
-const struct WindowTemplate gUnknown_085105AC[] =
+static const struct WindowTemplate sUnknown_085105AC[] =
{
{0, 2, 0xF, 0x1A, 4, 0xF, 0x194},
DUMMY_WIN_TEMPLATE
};
-const struct WindowTemplate gUnknown_085105BC = {0, 1, 1, 0xE, 0xA, 0xF, 8};
+static const struct WindowTemplate sSaveInfoWindowTemplate = {0, 1, 1, 0xE, 0xA, 0xF, 8};
+
+// Local functions
+static void BuildStartMenuActions(void);
+static void AddStartMenuAction(u8 action);
+static void BuildNormalStartMenu(void);
+static void BuildSafariZoneStartMenu(void);
+static void BuildLinkModeStartMenu(void);
+static void BuildUnionRoomStartMenu(void);
+static void BuildBattlePikeStartMenu(void);
+static void BuildBattlePyramidStartMenu(void);
+static void BuildMultiBattleRoomStartMenu(void);
+static void ShowSafariBallsWindow(void);
+static void ShowPyramidFloorWindow(void);
+static void RemoveExtraStartMenuWindows(void);
+static bool32 PrintStartMenuActions(s8 *pIndex, u32 count);
+static bool32 InitStartMenuStep(void);
+static void InitStartMenu(void);
+static void CreateStartMenuTask(TaskFunc followupFunc);
+static void InitSave(void);
+static u8 RunSaveCallback(void);
+static void ShowSaveMessage(const u8 *message, u8 (*saveCallback)(void));
+static void sub_80A0014(void);
+static void HideSaveInfoWindow(void);
+static void SaveStartTimer(void);
+static bool8 SaveSuccesTimer(void);
+static bool8 SaveErrorTimer(void);
+static void InitBattlePyramidRetire(void);
+static void sub_80A03D8(void);
+static bool32 sub_80A03E4(u8 *par1);
+static void sub_80A0540(void);
+static void ShowSaveInfoWindow(void);
+static void RemoveSaveInfoWindow(void);
+static void HideStartMenuWindow(void);
-// code
void SetDexPokemonPokenavFlags(void) // unused
{
FlagSet(FLAG_SYS_POKEDEX_GET);
@@ -132,46 +239,70 @@ void SetDexPokemonPokenavFlags(void) // unused
FlagSet(FLAG_SYS_POKENAV_GET);
}
-void BuildStartMenuActions(void)
+static void BuildStartMenuActions(void)
{
sNumStartMenuActions = 0;
+
if (is_c1_link_related_active() == TRUE)
- BuildStartMenuActions_LinkMode();
+ {
+ BuildLinkModeStartMenu();
+ }
else if (InUnionRoom() == TRUE)
- BuildStartMenuActions_UnionRoom();
+ {
+ BuildUnionRoomStartMenu();
+ }
else if (GetSafariZoneFlag() == TRUE)
- BuildStartMenuActions_SafariZone();
+ {
+ BuildSafariZoneStartMenu();
+ }
else if (InBattlePike())
- BuildStartMenuActions_BattlePike();
+ {
+ BuildBattlePikeStartMenu();
+ }
else if (InBattlePyramid())
- BuildStartMenuActions_BattlePyramid();
+ {
+ BuildBattlePyramidStartMenu();
+ }
else if (InMultiBattleRoom())
- BuildStartMenuActions_MultiBattleRoom();
+ {
+ BuildMultiBattleRoomStartMenu();
+ }
else
- BuildStartMenuActions_Normal();
+ {
+ BuildNormalStartMenu();
+ }
}
-void AddStartMenuAction(u8 action)
+static void AddStartMenuAction(u8 action)
{
AppendToList(sCurrentStartMenuActions, &sNumStartMenuActions, action);
}
-static void BuildStartMenuActions_Normal(void)
+static void BuildNormalStartMenu(void)
{
if (FlagGet(FLAG_SYS_POKEDEX_GET) == TRUE)
+ {
AddStartMenuAction(MENU_ACTION_POKEDEX);
+ }
if (FlagGet(FLAG_SYS_POKEMON_GET) == TRUE)
+ {
AddStartMenuAction(MENU_ACTION_POKEMON);
+ }
+
AddStartMenuAction(MENU_ACTION_BAG);
+
if (FlagGet(FLAG_SYS_POKENAV_GET) == TRUE)
+ {
AddStartMenuAction(MENU_ACTION_POKENAV);
+ }
+
AddStartMenuAction(MENU_ACTION_PLAYER);
AddStartMenuAction(MENU_ACTION_SAVE);
AddStartMenuAction(MENU_ACTION_OPTION);
AddStartMenuAction(MENU_ACTION_EXIT);
}
-static void BuildStartMenuActions_SafariZone(void)
+static void BuildSafariZoneStartMenu(void)
{
AddStartMenuAction(MENU_ACTION_RETIRE_SAFARI);
AddStartMenuAction(MENU_ACTION_POKEDEX);
@@ -182,29 +313,37 @@ static void BuildStartMenuActions_SafariZone(void)
AddStartMenuAction(MENU_ACTION_EXIT);
}
-static void BuildStartMenuActions_LinkMode(void)
+static void BuildLinkModeStartMenu(void)
{
AddStartMenuAction(MENU_ACTION_POKEMON);
AddStartMenuAction(MENU_ACTION_BAG);
+
if (FlagGet(FLAG_SYS_POKENAV_GET) == TRUE)
+ {
AddStartMenuAction(MENU_ACTION_POKENAV);
+ }
+
AddStartMenuAction(MENU_ACTION_PLAYER_LINK);
AddStartMenuAction(MENU_ACTION_OPTION);
AddStartMenuAction(MENU_ACTION_EXIT);
}
-static void BuildStartMenuActions_UnionRoom(void)
+static void BuildUnionRoomStartMenu(void)
{
AddStartMenuAction(MENU_ACTION_POKEMON);
AddStartMenuAction(MENU_ACTION_BAG);
+
if (FlagGet(FLAG_SYS_POKENAV_GET) == TRUE)
+ {
AddStartMenuAction(MENU_ACTION_POKENAV);
+ }
+
AddStartMenuAction(MENU_ACTION_PLAYER);
AddStartMenuAction(MENU_ACTION_OPTION);
AddStartMenuAction(MENU_ACTION_EXIT);
}
-static void BuildStartMenuActions_BattlePike(void)
+static void BuildBattlePikeStartMenu(void)
{
AddStartMenuAction(MENU_ACTION_POKEDEX);
AddStartMenuAction(MENU_ACTION_POKEMON);
@@ -213,7 +352,7 @@ static void BuildStartMenuActions_BattlePike(void)
AddStartMenuAction(MENU_ACTION_EXIT);
}
-static void BuildStartMenuActions_BattlePyramid(void)
+static void BuildBattlePyramidStartMenu(void)
{
AddStartMenuAction(MENU_ACTION_POKEMON);
AddStartMenuAction(MENU_ACTION_PYRAMID_BAG);
@@ -224,7 +363,7 @@ static void BuildStartMenuActions_BattlePyramid(void)
AddStartMenuAction(MENU_ACTION_EXIT);
}
-static void BuildStartMenuActions_MultiBattleRoom(void)
+static void BuildMultiBattleRoomStartMenu(void)
{
AddStartMenuAction(MENU_ACTION_POKEMON);
AddStartMenuAction(MENU_ACTION_PLAYER);
@@ -232,74 +371,1056 @@ static void BuildStartMenuActions_MultiBattleRoom(void)
AddStartMenuAction(MENU_ACTION_EXIT);
}
-void DisplaySafariBallsWindow(void)
+static void ShowSafariBallsWindow(void)
{
- sSafariBallsWindowId = AddWindow(&gSafariBallsWindowTemplate);
+ sSafariBallsWindowId = AddWindow(&sSafariBallsWindowTemplate);
PutWindowTilemap(sSafariBallsWindowId);
- NewMenuHelpers_DrawStdWindowFrame(sSafariBallsWindowId, 0);
+ NewMenuHelpers_DrawStdWindowFrame(sSafariBallsWindowId, FALSE);
ConvertIntToDecimalStringN(gStringVar1, gNumSafariBalls, STR_CONV_MODE_RIGHT_ALIGN, 2);
StringExpandPlaceholders(gStringVar4, gText_SafariBallStock);
PrintTextOnWindow(sSafariBallsWindowId, 1, gStringVar4, 0, 1, 0xFF, NULL);
CopyWindowToVram(sSafariBallsWindowId, 2);
}
-void DisplayPyramidFloorWindow(void)
+static void ShowPyramidFloorWindow(void)
{
- // TODO: fix location
- if (gSaveBlock2Ptr->field_CAA[4] == 7)
- sBattlePyramidFloorWindowId = AddWindow(&gPyramidFloorWindowTemplate_1);
+ if (gSaveBlock2Ptr->field_CAA[4] == 7) // TODO: fix location
+ {
+ sBattlePyramidFloorWindowId = AddWindow(&sPyramidFloorWindowTemplate_1);
+ }
else
- sBattlePyramidFloorWindowId = AddWindow(&gPyramidFloorWindowTemplate_2);
+ {
+ sBattlePyramidFloorWindowId = AddWindow(&sPyramidFloorWindowTemplate_2);
+ }
+
PutWindowTilemap(sBattlePyramidFloorWindowId);
- NewMenuHelpers_DrawStdWindowFrame(sBattlePyramidFloorWindowId, 0);
+ NewMenuHelpers_DrawStdWindowFrame(sBattlePyramidFloorWindowId, FALSE);
StringCopy(gStringVar1, sPyramindFloorNames[gSaveBlock2Ptr->field_CAA[4]]);
StringExpandPlaceholders(gStringVar4, gText_BattlePyramidFloor);
PrintTextOnWindow(sBattlePyramidFloorWindowId, 1, gStringVar4, 0, 1, 0xFF, NULL);
CopyWindowToVram(sBattlePyramidFloorWindowId, 2);
}
-void RemoveExtraStartMenuWindows(void)
+static void RemoveExtraStartMenuWindows(void)
{
if (GetSafariZoneFlag())
{
- sub_8198070(sSafariBallsWindowId, 0);
+ sub_8198070(sSafariBallsWindowId, FALSE);
CopyWindowToVram(sSafariBallsWindowId, 2);
RemoveWindow(sSafariBallsWindowId);
}
if (InBattlePyramid())
{
- sub_8198070(sBattlePyramidFloorWindowId, 0);
+ sub_8198070(sBattlePyramidFloorWindowId, FALSE);
RemoveWindow(sBattlePyramidFloorWindowId);
}
}
-/*
-// Prints n menu items starting at *index
-static bool32 PrintStartMenuItemsMultistep(s16 *index, u32 n)
+static bool32 PrintStartMenuActions(s8 *pIndex, u32 count)
{
- s8 _index = *index;
-
+ s8 index = *pIndex;
+
do
{
- if (sStartMenuItems[sCurrentStartMenuActions[_index]].func.u8_void == StartMenu_PlayerName)
+ if (sStartMenuItems[sCurrentStartMenuActions[index]].func.u8_void == StartMenuPlayerNameCallback) {
+ PrintPlayerNameOnWindow(GetStartMenuWindowId(), sStartMenuItems[sCurrentStartMenuActions[index]].text, 8, (index << 4) + 9);
+ }
+ else {
+ StringExpandPlaceholders(gStringVar4, sStartMenuItems[sCurrentStartMenuActions[index]].text);
+ PrintTextOnWindow(GetStartMenuWindowId(), 1, gStringVar4, 8, (index << 4) + 9, 0xFF, NULL);
+ }
+
+ index++;
+ if (index >= sNumStartMenuActions) {
+ *pIndex = index;
+ return TRUE;
+ }
+
+ count--;
+ }
+ while (count != 0);
+
+ *pIndex = index;
+ return FALSE;
+}
+
+static bool32 InitStartMenuStep(void)
+{
+ s8 value = sUnknown_02037619[0];
+
+ switch (value)
+ {
+ case 0:
+ sUnknown_02037619[0]++;
+ break;
+ case 1:
+ BuildStartMenuActions();
+ sUnknown_02037619[0]++;
+ break;
+ case 2:
+ sub_81973A4();
+ NewMenuHelpers_DrawStdWindowFrame(sub_81979C4(sNumStartMenuActions), FALSE);
+ sUnknown_02037619[1] = 0;
+ sUnknown_02037619[0]++;
+ break;
+ case 3:
+ if (GetSafariZoneFlag() != FALSE)
+ {
+ ShowSafariBallsWindow();
+ }
+ if (InBattlePyramid() != FALSE)
+ {
+ ShowPyramidFloorWindow();
+ }
+ sUnknown_02037619[0]++;
+ break;
+ case 4:
+ if (PrintStartMenuActions(&sUnknown_02037619[1], 2) == FALSE)
{
+ break;
+ }
+ sUnknown_02037619[0]++;
+ break;
+ case 5:
+ sStartMenuCursorPos = sub_81983AC(GetStartMenuWindowId(), 1, 0, 9, 16, sNumStartMenuActions, sStartMenuCursorPos);
+ CopyWindowToVram(GetStartMenuWindowId(), TRUE);
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static void InitStartMenu(void)
+{
+ sUnknown_02037619[0] = 0;
+ sUnknown_02037619[1] = 0;
+ while (!InitStartMenuStep());
+}
+
+static void StartMenuTask(u8 taskId)
+{
+ if (InitStartMenuStep() == TRUE)
+ {
+ SwitchTaskToFollowupFunc(taskId);
+ }
+}
+
+static void CreateStartMenuTask(TaskFunc followupFunc)
+{
+ u8 taskId;
+
+ sUnknown_02037619[0] = 0;
+ sUnknown_02037619[1] = 0;
+ taskId = CreateTask(StartMenuTask, 0x50);
+ SetTaskFuncWithFollowupFunc(taskId, StartMenuTask, followupFunc);
+}
+
+static bool8 sub_809FA00(void)
+{
+ if (InitStartMenuStep() == FALSE)
+ {
+ return FALSE;
+ }
+
+ sub_80AF688();
+ return TRUE;
+}
+
+void sub_809FA18(void) // Called from field_screen.s
+{
+ sUnknown_02037619[0] = 0;
+ sUnknown_02037619[1] = 0;
+ gUnknown_03005DB0 = sub_809FA00;
+}
+
+void sub_809FA34(u8 taskId) // Referenced in field_screen.s and rom_8011DC0.s
+{
+ struct Task* task = &gTasks[taskId];
+ switch(task->data[0])
+ {
+ case 0:
+ if (InUnionRoom() == TRUE)
+ {
+ var_800D_set_xB();
}
- else
+
+ gMenuCallback = HandleStartMenuInput;
+ task->data[0]++;
+ break;
+ case 1:
+ if (gMenuCallback() == TRUE)
{
+ DestroyTask(taskId);
+ }
+ break;
+ }
+}
+
+void ShowStartMenu(void) // Called from overworld.c and field_control_avatar.s
+{
+ if (!is_c1_link_related_active())
+ {
+ FreezeMapObjects();
+ sub_808B864();
+ sub_808BCF4();
+ }
+ CreateStartMenuTask(sub_809FA34);
+ ScriptContext2_Enable();
+}
+static bool8 HandleStartMenuInput(void)
+{
+ if (gMain.newKeys & DPAD_UP)
+ {
+ PlaySE(SE_SELECT);
+ sStartMenuCursorPos = MoveMenuCursor(-1);
+ }
+
+ if (gMain.newKeys & DPAD_DOWN)
+ {
+ PlaySE(SE_SELECT);
+ sStartMenuCursorPos = MoveMenuCursor(1);
+ }
+
+ if (gMain.newKeys & A_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ if (sStartMenuItems[sCurrentStartMenuActions[sStartMenuCursorPos]].func.u8_void == StartMenuPokedexCallback)
+ {
+ if (GetNationalPokedexCount(0) == 0) {
+ return FALSE;
+ }
+ }
+
+ gMenuCallback = sStartMenuItems[sCurrentStartMenuActions[sStartMenuCursorPos]].func.u8_void;
+
+ if (gMenuCallback != StartMenuSaveCallback
+ && gMenuCallback != StartMenuExitCallback
+ && gMenuCallback != StartMenuSafariZoneRetireCallback
+ && gMenuCallback != StartMenuBattlePyramidRetireCallback)
+ {
+ FadeScreen(1, 0);
+ }
+
+ return FALSE;
+ }
+
+ if (gMain.newKeys & (START_BUTTON | B_BUTTON))
+ {
+ RemoveExtraStartMenuWindows();
+ HideStartMenu();
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static bool8 StartMenuPokedexCallback(void)
+{
+ if (!gPaletteFade.active)
+ {
+ IncrementGameStat(GAME_STAT_CHECKED_POKEDEX);
+ play_some_sound();
+ RemoveExtraStartMenuWindows();
+ overworld_free_bg_tilemaps();
+ SetMainCallback2(sub_80BB534); // Display pokedex
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static bool8 StartMenuPokemonCallback(void)
+{
+ if (!gPaletteFade.active)
+ {
+ play_some_sound();
+ RemoveExtraStartMenuWindows();
+ overworld_free_bg_tilemaps();
+ SetMainCallback2(CB2_PartyMenuFromStartMenu); // Display party menu
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static bool8 StartMenuBagCallback(void)
+{
+ if (!gPaletteFade.active)
+ {
+ play_some_sound();
+ RemoveExtraStartMenuWindows();
+ overworld_free_bg_tilemaps();
+ SetMainCallback2(CB2_BagMenuFromStartMenu); // Display bag menu
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static bool8 StartMenuPokeNavCallback(void)
+{
+ if (!gPaletteFade.active)
+ {
+ play_some_sound();
+ RemoveExtraStartMenuWindows();
+ overworld_free_bg_tilemaps();
+ SetMainCallback2(CB2_PokeNav); // Display PokeNav
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static bool8 StartMenuPlayerNameCallback(void)
+{
+ if (!gPaletteFade.active)
+ {
+ play_some_sound();
+ RemoveExtraStartMenuWindows();
+ overworld_free_bg_tilemaps();
+
+ if (is_c1_link_related_active() || InUnionRoom())
+ {
+ sub_80C4DDC(CB2_ReturnToFieldWithOpenMenu); // Display trainer card
+ }
+ else if (FlagGet(FLAG_SYS_FRONTIER_PASS))
+ {
+ sub_80C51C4(CB2_ReturnToFieldWithOpenMenu); // Display frontier pass
+ }
+ else
+ {
+ sub_80C4DDC(CB2_ReturnToFieldWithOpenMenu); // Display trainer card
}
- } while (++_index > sNumStartMenuActions);
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static bool8 StartMenuSaveCallback(void)
+{
+ if (InBattlePyramid())
+ {
+ RemoveExtraStartMenuWindows();
+ }
+
+ gMenuCallback = SaveStartCallback; // Display save menu
+
+ return FALSE;
+}
+
+static bool8 StartMenuOptionCallback(void)
+{
+ if (!gPaletteFade.active)
+ {
+ play_some_sound();
+ RemoveExtraStartMenuWindows();
+ overworld_free_bg_tilemaps();
+ SetMainCallback2(CB2_InitOptionMenu); // Display option menu
+ gMain.savedCallback = CB2_ReturnToFieldWithOpenMenu;
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static bool8 StartMenuExitCallback(void)
+{
+ RemoveExtraStartMenuWindows();
+ HideStartMenu(); // Hide start menu
+
+ return TRUE;
+}
+
+static bool8 StartMenuSafariZoneRetireCallback(void)
+{
+ RemoveExtraStartMenuWindows();
+ HideStartMenu();
+ SafariZoneRetirePrompt();
+
+ return TRUE;
+}
+
+static bool8 StartMenuLinkModePlayerNameCallback(void)
+{
+ if (!gPaletteFade.active)
+ {
+ play_some_sound();
+ overworld_free_bg_tilemaps();
+ sub_80C4E74(gUnknown_03005DB4, CB2_ReturnToFieldWithOpenMenu);
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static bool8 StartMenuBattlePyramidRetireCallback(void)
+{
+ gMenuCallback = BattlePyramidRetireStartCallback; // Confirm retire
+
+ return FALSE;
+}
+
+void sub_809FDD4(void) // Called from battle_frontier_2.s
+{
+ sub_8197DF8(0, FALSE);
+ sub_80984F4();
+ CreateStartMenuTask(sub_809FA34);
+ ScriptContext2_Enable();
+}
+
+static bool8 StartMenuBattlePyramidBagCallback(void)
+{
+ if (!gPaletteFade.active)
+ {
+ play_some_sound();
+ RemoveExtraStartMenuWindows();
+ overworld_free_bg_tilemaps();
+ SetMainCallback2(sub_81C4EFC); // Display battle pyramid bag
+
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static bool8 SaveStartCallback(void)
+{
+ InitSave();
+ gMenuCallback = SaveCallback;
- if (--n == 0)
+ return FALSE;
+}
+
+static bool8 SaveCallback(void)
+{
+ switch (RunSaveCallback())
{
- *index = _index;
+ case SAVE_IN_PROGRESS:
+ return FALSE;
+ case SAVE_CANCELED: // Back to start menu
+ sub_8197DF8(0, FALSE);
+ InitStartMenu();
+ gMenuCallback = HandleStartMenuInput;
return FALSE;
+ case SAVE_SUCCESS:
+ case SAVE_ERROR: // Close start menu
+ sub_8197DF8(0, TRUE);
+ sub_80984F4();
+ ScriptContext2_Disable();
+ sub_81A9EC8();
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static bool8 BattlePyramidRetireStartCallback(void)
+{
+ InitBattlePyramidRetire();
+ gMenuCallback = BattlePyramidRetireCallback;
+
+ return FALSE;
+}
+
+static bool8 BattlePyramidRetireReturnCallback(void)
+{
+ InitStartMenu();
+ gMenuCallback = HandleStartMenuInput;
+
+ return FALSE;
+}
+
+static bool8 BattlePyramidRetireCallback(void)
+{
+ switch (RunSaveCallback())
+ {
+ case SAVE_SUCCESS: // No (Stay in battle pyramid)
+ RemoveExtraStartMenuWindows();
+ gMenuCallback = BattlePyramidRetireReturnCallback;
+ return FALSE;
+ case SAVE_IN_PROGRESS:
+ return FALSE;
+ case SAVE_CANCELED: // Yes (Retire from battle pyramid)
+ sub_8197DF8(0, TRUE);
+ sub_80984F4();
+ ScriptContext2_Disable();
+ ScriptContext1_SetupScript(BattleFrontier_BattlePyramidEmptySquare_EventScript_252C88);
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static void InitSave(void)
+{
+ save_serialize_map();
+ sSaveDialogCallback = SaveConfirmSaveCallback;
+ sSavingComplete = FALSE;
+}
+
+static u8 RunSaveCallback(void)
+{
+ // True if text is still printing
+ if (sub_8197224() == TRUE)
+ {
+ return SAVE_IN_PROGRESS;
+ }
+
+ sSavingComplete = FALSE;
+ return sSaveDialogCallback();
+}
+
+void SaveGame(void) // Called from cable_club.s
+{
+ InitSave();
+ CreateTask(SaveGameTask, 0x50);
+}
+
+static void ShowSaveMessage(const u8 *message, u8 (*saveCallback)(void))
+{
+ StringExpandPlaceholders(gStringVar4, message);
+ sub_819786C(0, TRUE);
+ AddTextPrinterForMessage_2(TRUE);
+ sSavingComplete = TRUE;
+ sSaveDialogCallback = saveCallback;
+}
+
+static void SaveGameTask(u8 taskId)
+{
+ u8 status = RunSaveCallback();
+
+ switch (status)
+ {
+ case SAVE_CANCELED:
+ case SAVE_ERROR:
+ gSpecialVar_Result = 0;
+ break;
+ case SAVE_SUCCESS:
+ gSpecialVar_Result = status;
+ break;
+ case SAVE_IN_PROGRESS:
+ return;
+ }
+
+ DestroyTask(taskId);
+ EnableBothScriptContexts();
+}
+
+static void sub_80A0014(void)
+{
+ sub_8197434(0, TRUE);
+}
+
+static void HideSaveInfoWindow(void)
+{
+ RemoveSaveInfoWindow();
+}
+
+static void SaveStartTimer(void)
+{
+ sSaveDialogTimer = 60;
+}
+
+static bool8 SaveSuccesTimer(void)
+{
+ sSaveDialogTimer--;
+
+ if (gMain.heldKeys & A_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ return TRUE;
+ }
+ else if (sSaveDialogTimer == 0)
+ {
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static bool8 SaveErrorTimer(void)
+{
+ if (sSaveDialogTimer != 0)
+ {
+ sSaveDialogTimer--;
+ }
+ else if (gMain.heldKeys & A_BUTTON)
+ {
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static u8 SaveConfirmSaveCallback(void)
+{
+ sub_819746C(GetStartMenuWindowId(), FALSE);
+ RemoveStartMenuWindow();
+ ShowSaveInfoWindow();
+
+ if (InBattlePyramid())
+ {
+ ShowSaveMessage(gText_BattlePyramidConfirmRest, SaveYesNoCallback);
+ }
+ else
+ {
+ ShowSaveMessage(gText_ConfirmSave, SaveYesNoCallback);
+ }
+
+ return SAVE_IN_PROGRESS;
+}
+
+static u8 SaveYesNoCallback(void)
+{
+ sub_8197930(); // Show Yes/No menu
+ sSaveDialogCallback = SaveConfirmInputCallback;
+ return SAVE_IN_PROGRESS;
+}
+
+static u8 SaveConfirmInputCallback(void)
+{
+ switch (ProcessMenuInputNoWrap_())
+ {
+ case 0: // Yes
+ switch (gSaveFileStatus)
+ {
+ case 0:
+ case 2:
+ if (gDifferentSaveFile == FALSE)
+ {
+ sSaveDialogCallback = SaveFileExistsCallback;
+ return SAVE_IN_PROGRESS;
+ }
+
+ sSaveDialogCallback = SaveSavingMessageCallback;
+ return SAVE_IN_PROGRESS;
+ default:
+ sSaveDialogCallback = SaveFileExistsCallback;
+ return SAVE_IN_PROGRESS;
+ }
+ case -1: // B Button
+ case 1: // No
+ HideSaveInfoWindow();
+ sub_80A0014();
+ return SAVE_CANCELED;
+ }
+
+ return SAVE_IN_PROGRESS;
+}
+
+// A different save file exists
+static u8 SaveFileExistsCallback(void)
+{
+ if (gDifferentSaveFile == TRUE)
+ {
+ ShowSaveMessage(gText_DifferentSaveFile, SaveConfirmOverwriteNoCallback);
+ }
+ else
+ {
+ ShowSaveMessage(gText_AlreadySavedFile, SaveConfirmOverwriteCallback);
+ }
+
+ return SAVE_IN_PROGRESS;
+}
+
+static u8 SaveConfirmOverwriteNoCallback(void)
+{
+ sub_8197948(1); // Show Yes/No menu (No selected as default)
+ sSaveDialogCallback = SaveOverwriteInputCallback;
+ return SAVE_IN_PROGRESS;
+}
+
+static u8 SaveConfirmOverwriteCallback(void)
+{
+ sub_8197930(); // Show Yes/No menu
+ sSaveDialogCallback = SaveOverwriteInputCallback;
+ return SAVE_IN_PROGRESS;
+}
+
+static u8 SaveOverwriteInputCallback(void)
+{
+ switch (ProcessMenuInputNoWrap_())
+ {
+ case 0: // Yes
+ sSaveDialogCallback = SaveSavingMessageCallback;
+ return SAVE_IN_PROGRESS;
+ case -1: // B Button
+ case 1: // No
+ HideSaveInfoWindow();
+ sub_80A0014();
+ return SAVE_CANCELED;
+ }
+
+ return SAVE_IN_PROGRESS;
+}
+
+static u8 SaveSavingMessageCallback(void)
+{
+ ShowSaveMessage(gText_SavingDontTurnOff, SaveDoSaveCallback);
+ return SAVE_IN_PROGRESS;
+}
+
+static u8 SaveDoSaveCallback(void)
+{
+ u8 saveStatus;
+
+ IncrementGameStat(GAME_STAT_SAVED_GAME);
+ sub_81A9E90();
+
+ if (gDifferentSaveFile == TRUE)
+ {
+ saveStatus = TrySavingData(SAVE_OVERWRITE_DIFFERENT_FILE);
+ gDifferentSaveFile = FALSE;
+ }
+ else
+ {
+ saveStatus = TrySavingData(SAVE_NORMAL);
+ }
+
+ if (saveStatus == 1) // Save succeded
+ {
+ ShowSaveMessage(gText_PlayerSavedGame, SaveSuccessCallback);
+ }
+ else // Save error
+ {
+ ShowSaveMessage(gText_SaveError, SaveErrorCallback);
+ }
+
+ SaveStartTimer();
+ return SAVE_IN_PROGRESS;
+}
+
+static u8 SaveSuccessCallback(void)
+{
+ if (!IsTextPrinterActive(0))
+ {
+ PlaySE(SE_SAVE);
+ sSaveDialogCallback = SaveReturnSuccessCallback;
+ }
+
+ return SAVE_IN_PROGRESS;
+}
+
+static u8 SaveReturnSuccessCallback(void)
+{
+ if (!IsSEPlaying() && SaveSuccesTimer())
+ {
+ HideSaveInfoWindow();
+ return SAVE_SUCCESS;
+ }
+ else
+ {
+ return SAVE_IN_PROGRESS;
+ }
+}
+
+static u8 SaveErrorCallback(void)
+{
+ if (!IsTextPrinterActive(0))
+ {
+ PlaySE(SE_BOO);
+ sSaveDialogCallback = SaveReturnErrorCallback;
+ }
+
+ return SAVE_IN_PROGRESS;
+}
+
+static u8 SaveReturnErrorCallback(void)
+{
+ if (!SaveErrorTimer())
+ {
+ return SAVE_IN_PROGRESS;
}
else
{
- *index = _index;
+ HideSaveInfoWindow();
+ return SAVE_ERROR;
+ }
+}
+
+static void InitBattlePyramidRetire(void)
+{
+ sSaveDialogCallback = BattlePyramidConfirmRetireCallback;
+ sSavingComplete = FALSE;
+}
+
+static u8 BattlePyramidConfirmRetireCallback(void)
+{
+ sub_819746C(GetStartMenuWindowId(), FALSE);
+ RemoveStartMenuWindow();
+ ShowSaveMessage(gText_BattlePyramidConfirmRetire, BattlePyramidRetireYesNoCallback);
+
+ return SAVE_IN_PROGRESS;
+}
+
+static u8 BattlePyramidRetireYesNoCallback(void)
+{
+ sub_8197948(1); // Show Yes/No menu (No selected as default)
+ sSaveDialogCallback = BattlePyramidRetireInputCallback;
+
+ return SAVE_IN_PROGRESS;
+}
+
+static u8 BattlePyramidRetireInputCallback(void)
+{
+ switch (ProcessMenuInputNoWrap_())
+ {
+ case 0: // Yes
+ return SAVE_CANCELED;
+ case -1: // B Button
+ case 1: // No
+ sub_80A0014();
+ return SAVE_SUCCESS;
+ }
+
+ return SAVE_IN_PROGRESS;
+}
+
+static void sub_80A03D8(void)
+{
+ TransferPlttBuffer();
+}
+
+static bool32 sub_80A03E4(u8 *par1)
+{
+ switch (*par1)
+ {
+ case 0:
+ SetGpuReg(REG_OFFSET_DISPCNT, DISPCNT_MODE_0);
+ SetVBlankCallback(NULL);
+ ScanlineEffect_Stop();
+ DmaClear16(3, PLTT, PLTT_SIZE);
+ DmaFillLarge16(3, 0, (void *)(VRAM + 0x0), 0x18000, 0x1000);
+ break;
+ case 1:
+ ResetSpriteData();
+ ResetTasks();
+ ResetPaletteFade();
+ ScanlineEffect_Clear();
+ break;
+ case 2:
+ ResetBgsAndClearDma3BusyFlags(0);
+ InitBgsFromTemplates(0, sUnknown_085105A8, ARRAY_COUNT(sUnknown_085105A8));
+ InitWindows(sUnknown_085105AC);
+ box_border_load_tiles_and_pal(0, 8, 224);
+ sub_81978B0(240);
+ break;
+ case 3:
+ ShowBg(0);
+ BlendPalettes(-1, 16, 0);
+ SetVBlankCallback(sub_80A03D8);
+ EnableInterrupts(1);
+ break;
+ case 4:
return TRUE;
}
-}*/
+
+ (*par1)++;
+ return FALSE;
+}
+
+void sub_80A0514(void) // Called from cable_club.s
+{
+ if (sub_80A03E4(&gMain.state))
+ {
+ CreateTask(sub_80A0550, 0x50);
+ SetMainCallback2(sub_80A0540);
+ }
+}
+
+static void sub_80A0540(void)
+{
+ RunTasks();
+ UpdatePaletteFade();
+}
+
+static void sub_80A0550(u8 taskId)
+{
+ s16 *step = gTasks[taskId].data;
+
+ if (!gPaletteFade.active)
+ {
+ switch (*step)
+ {
+ case 0:
+ FillWindowPixelBuffer(0, 17);
+ AddTextPrinterParameterized(0,
+ 1,
+ gText_SavingDontTurnOffPower,
+ 255,
+ NULL,
+ 2,
+ 1,
+ 3);
+ sub_8098858(0, 8, 14);
+ PutWindowTilemap(0);
+ CopyWindowToVram(0, 3);
+ BeginNormalPaletteFade(-1, 0, 16, 0, 0);
+
+ if (gWirelessCommType != 0 && InUnionRoom())
+ {
+ if (sub_800A07C())
+ {
+ *step = 1;
+ }
+ else
+ {
+ *step = 5;
+ }
+ }
+ else
+ {
+ gSoftResetDisabled = 1;
+ *step = 1;
+ }
+ break;
+ case 1:
+ sub_8076D5C();
+ sub_8153430();
+ *step = 2;
+ break;
+ case 2:
+ if (sub_8153474())
+ {
+ sav2_gender2_inplace_and_xFE();
+ *step = 3;
+ gSoftResetDisabled = 0;
+ }
+ break;
+ case 3:
+ BeginNormalPaletteFade(-1, 0, 0, 16, 0);
+ *step = 4;
+ break;
+ case 4:
+ FreeAllWindowBuffers();
+ SetMainCallback2(gMain.savedCallback);
+ DestroyTask(taskId);
+ break;
+ case 5:
+ CreateTask(sub_8153688, 0x5);
+ *step = 6;
+ break;
+ case 6:
+ if (!FuncIsActiveTask(sub_8153688))
+ {
+ *step = 3;
+ }
+ break;
+ }
+ }
+}
+
+static void ShowSaveInfoWindow(void)
+{
+ struct WindowTemplate saveInfoWindow = sSaveInfoWindowTemplate;
+ u8 gender;
+ u8 color;
+ u32 xOffset;
+ u32 yOffset;
+
+ if (!FlagGet(FLAG_SYS_POKEDEX_GET))
+ {
+ saveInfoWindow.height -= 2;
+ }
+
+ sSaveInfoWindowId = AddWindow(&saveInfoWindow);
+ NewMenuHelpers_DrawStdWindowFrame(sSaveInfoWindowId, FALSE);
+
+ gender = gSaveBlock2Ptr->playerGender;
+ color = TEXT_COLOR_RED; // Red when female, blue when male.
+
+ if (gender == MALE)
+ {
+ color = TEXT_COLOR_BLUE;
+ }
+
+ // Print region name
+ yOffset = 1;
+ sub_819A344(3, gStringVar4, TEXT_COLOR_GREEN);
+ PrintTextOnWindow(sSaveInfoWindowId, 1, gStringVar4, 0, yOffset, 0xFF, NULL);
+
+ // Print player name
+ yOffset = 0x11;
+ PrintTextOnWindow(sSaveInfoWindowId, 1, gText_SavingPlayer, 0, yOffset, 0xFF, NULL);
+ sub_819A344(0, gStringVar4, color);
+ xOffset = GetStringRightAlignXOffset(1, gStringVar4, 0x70);
+ PrintPlayerNameOnWindow(sSaveInfoWindowId, gStringVar4, xOffset, yOffset);
+
+ // Print badge count
+ yOffset = 0x21;
+ PrintTextOnWindow(sSaveInfoWindowId, 1, gText_SavingBadges, 0, yOffset, 0xFF, NULL);
+ sub_819A344(4, gStringVar4, color);
+ xOffset = GetStringRightAlignXOffset(1, gStringVar4, 0x70);
+ PrintTextOnWindow(sSaveInfoWindowId, 1, gStringVar4, xOffset, yOffset, 0xFF, NULL);
+
+ if (FlagGet(FLAG_SYS_POKEDEX_GET) == TRUE)
+ {
+ // Print pokedex count
+ yOffset = 0x31;
+ PrintTextOnWindow(sSaveInfoWindowId, 1, gText_SavingPokedex, 0, yOffset, 0xFF, NULL);
+ sub_819A344(1, gStringVar4, color);
+ xOffset = GetStringRightAlignXOffset(1, gStringVar4, 0x70);
+ PrintTextOnWindow(sSaveInfoWindowId, 1, gStringVar4, xOffset, yOffset, 0xFF, NULL);
+ }
+
+ // Print play time
+ yOffset += 0x10;
+ PrintTextOnWindow(sSaveInfoWindowId, 1, gText_SavingTime, 0, yOffset, 0xFF, NULL);
+ sub_819A344(2, gStringVar4, color);
+ xOffset = GetStringRightAlignXOffset(1, gStringVar4, 0x70);
+ PrintTextOnWindow(sSaveInfoWindowId, 1, gStringVar4, xOffset, yOffset, 0xFF, NULL);
+
+ CopyWindowToVram(sSaveInfoWindowId, 2);
+}
+
+static void RemoveSaveInfoWindow(void)
+{
+ sub_819746C(sSaveInfoWindowId, FALSE);
+ RemoveWindow(sSaveInfoWindowId);
+}
+
+static void sub_80A08A4(u8 taskId)
+{
+ if (!FuncIsActiveTask(sub_8153688))
+ {
+ DestroyTask(taskId);
+ EnableBothScriptContexts();
+ }
+}
+
+void sub_80A08CC(void) // Referenced in data/specials.inc and data/scripts/maps/BattleFrontier_BattleTowerLobby.inc
+{
+ u8 taskId = CreateTask(sub_8153688, 0x5);
+ gTasks[taskId].data[2] = 1;
+ gTasks[CreateTask(sub_80A08A4, 0x6)].data[1] = taskId;
+}
+
+static void HideStartMenuWindow(void)
+{
+ sub_819746C(GetStartMenuWindowId(), TRUE);
+ RemoveStartMenuWindow();
+ sub_80984F4();
+ ScriptContext2_Disable();
+}
+
+void HideStartMenu(void) // Called from map_name_popup.s
+{
+ PlaySE(SE_SELECT);
+ HideStartMenuWindow();
+}
+
+void AppendToList(u8 *list, u8 *pos, u8 newEntry)
+{
+ list[*pos] = newEntry;
+ (*pos)++;
+} \ No newline at end of file
diff --git a/src/starter_choose.c b/src/starter_choose.c
index 83a7b8112..480edbcb7 100644
--- a/src/starter_choose.c
+++ b/src/starter_choose.c
@@ -25,12 +25,6 @@
#define STARTER_PKMN_POS_X 120
#define STARTER_PKMN_POS_Y 64
-// graphics
-extern const u32 gBirchHelpGfx[];
-extern const u32 gBirchBagTilemap[];
-extern const u32 gBirchGrassTilemap[];
-extern const u16 gBirchBagGrassPal[];
-
// text
extern const u8 gText_BirchInTrouble[];
extern const u8 gText_ConfirmStarterChoice[];
diff --git a/src/text.c b/src/text.c
index 6a83d5d15..f7c68f549 100644
--- a/src/text.c
+++ b/src/text.c
@@ -4,18 +4,15 @@
#include "m4a.h"
#include "palette.h"
#include "sound.h"
+#include "constants/songs.h"
#include "string_util.h"
#include "window.h"
#include "text.h"
+#include "blit.h"
-extern void FillBitmapRect4Bit(struct Bitmap *surface, u16 x, u16 y, u16 width, u16 height, u8 fillValue);
-extern void FillWindowPixelRect(u8 windowId, u8 fillValue, u16 x, u16 y, u16 width, u16 height);
-extern void BlitBitmapRectToWindow(u8 windowId, const u8 *pixels, u16 srcX, u16 srcY, u16 srcWidth, int srcHeight, u16 destX, u16 destY, u16 rectWidth, u16 rectHeight);
extern u8 GetKeypadIconWidth(u8 keypadIconId);
-extern void CopyWindowToVram(u8 windowId, u8 mode);
extern u16 Font6Func(struct TextPrinter *textPrinter);
extern u32 GetGlyphWidthFont6(u16 glyphId, bool32 isJapanese);
-extern void PlaySE(u16 songNum);
extern u8* UnkTextUtil_GetPtrI(u8 a1);
extern int sub_8197964();
@@ -27,7 +24,6 @@ static u16 gLastTextBgColor;
static u16 gLastTextFgColor;
static u16 gLastTextShadowColor;
-extern struct Main gMain;
extern struct MusicPlayerInfo gMPlayInfo_BGM;
const struct FontInfo *gFonts;
@@ -379,7 +375,7 @@ void GenerateFontHalfRowLookupTable(u8 fgColor, u8 bgColor, u8 shadowColor)
*(current++) = (shadowColor << 12) | (shadowColor << 8) | (shadowColor << 4) | shadowColor;
}
#else
-__attribute__((naked))
+NAKED
void GenerateFontHalfRowLookupTable(u8 fgColor, u8 bgColor, u8 shadowColor)
{
asm("push {r4-r7,lr}\n\
@@ -875,7 +871,7 @@ void DecompressGlyphTile(const u16 *src, u16 *dest)
*(dest) = (gFontHalfRowLookupTable[gFontHalfRowOffsets[src[1] & 0xFF]] << 16) | gFontHalfRowLookupTable[gFontHalfRowOffsets[src[1] >> 8]];
}
#else
-__attribute__((naked))
+NAKED
void DecompressGlyphTile(const u16 *src, u16 *dest)
{
asm("push {r4-r7,lr}\n\
@@ -1056,7 +1052,7 @@ u8 GetLastTextColor(u8 colorType)
}
}
-__attribute__((naked))
+NAKED
void CopyGlyphToWindow(struct TextPrinter *x)
{
asm("push {r4-r7,lr}\n\
@@ -1986,7 +1982,7 @@ bool16 TextPrinterWaitWithDownArrow(struct TextPrinter *textPrinter)
if (gMain.newKeys & (A_BUTTON | B_BUTTON))
{
result = TRUE;
- PlaySE(5);
+ PlaySE(SE_SELECT);
}
}
return result;
@@ -2004,7 +2000,7 @@ bool16 TextPrinterWait(struct TextPrinter *textPrinter)
if (gMain.newKeys & (A_BUTTON | B_BUTTON))
{
result = TRUE;
- PlaySE(5);
+ PlaySE(SE_SELECT);
}
}
return result;
@@ -2285,7 +2281,6 @@ u16 RenderText(struct TextPrinter *textPrinter)
else
textPrinter->subPrinter.currentX += gUnknown_03002F90[0x80];
}
-
return 0;
case 1: // _08005C78
if (TextPrinterWait(textPrinter))
@@ -2346,7 +2341,7 @@ u16 RenderText(struct TextPrinter *textPrinter)
return 1;
}
#else
-__attribute__((naked))
+NAKED
u16 RenderText(struct TextPrinter *textPrinter)
{
asm("push {r4-r6,lr}\n\
diff --git a/src/text_window.c b/src/text_window.c
index 33cd7cffe..c3b9f7197 100644
--- a/src/text_window.c
+++ b/src/text_window.c
@@ -7,26 +7,26 @@
#include "graphics.h"
// const rom data
-const u32 gTextWindowFrame1_Gfx[] = INCBIN_U32("graphics/text_window/1.4bpp");
-static const u32 sTextWindowFrame2_Gfx[] = INCBIN_U32("graphics/text_window/2.4bpp");
-static const u32 sTextWindowFrame3_Gfx[] = INCBIN_U32("graphics/text_window/3.4bpp");
-static const u32 sTextWindowFrame4_Gfx[] = INCBIN_U32("graphics/text_window/4.4bpp");
-static const u32 sTextWindowFrame5_Gfx[] = INCBIN_U32("graphics/text_window/5.4bpp");
-static const u32 sTextWindowFrame6_Gfx[] = INCBIN_U32("graphics/text_window/6.4bpp");
-static const u32 sTextWindowFrame7_Gfx[] = INCBIN_U32("graphics/text_window/7.4bpp");
-static const u32 sTextWindowFrame8_Gfx[] = INCBIN_U32("graphics/text_window/8.4bpp");
-static const u32 sTextWindowFrame9_Gfx[] = INCBIN_U32("graphics/text_window/9.4bpp");
-static const u32 sTextWindowFrame10_Gfx[] = INCBIN_U32("graphics/text_window/10.4bpp");
-static const u32 sTextWindowFrame11_Gfx[] = INCBIN_U32("graphics/text_window/11.4bpp");
-static const u32 sTextWindowFrame12_Gfx[] = INCBIN_U32("graphics/text_window/12.4bpp");
-static const u32 sTextWindowFrame13_Gfx[] = INCBIN_U32("graphics/text_window/13.4bpp");
-static const u32 sTextWindowFrame14_Gfx[] = INCBIN_U32("graphics/text_window/14.4bpp");
-static const u32 sTextWindowFrame15_Gfx[] = INCBIN_U32("graphics/text_window/15.4bpp");
-static const u32 sTextWindowFrame16_Gfx[] = INCBIN_U32("graphics/text_window/16.4bpp");
-static const u32 sTextWindowFrame17_Gfx[] = INCBIN_U32("graphics/text_window/17.4bpp");
-static const u32 sTextWindowFrame18_Gfx[] = INCBIN_U32("graphics/text_window/18.4bpp");
-static const u32 sTextWindowFrame19_Gfx[] = INCBIN_U32("graphics/text_window/19.4bpp");
-static const u32 sTextWindowFrame20_Gfx[] = INCBIN_U32("graphics/text_window/20.4bpp");
+const u8 gTextWindowFrame1_Gfx[] = INCBIN_U8("graphics/text_window/1.4bpp");
+static const u8 sTextWindowFrame2_Gfx[] = INCBIN_U8("graphics/text_window/2.4bpp");
+static const u8 sTextWindowFrame3_Gfx[] = INCBIN_U8("graphics/text_window/3.4bpp");
+static const u8 sTextWindowFrame4_Gfx[] = INCBIN_U8("graphics/text_window/4.4bpp");
+static const u8 sTextWindowFrame5_Gfx[] = INCBIN_U8("graphics/text_window/5.4bpp");
+static const u8 sTextWindowFrame6_Gfx[] = INCBIN_U8("graphics/text_window/6.4bpp");
+static const u8 sTextWindowFrame7_Gfx[] = INCBIN_U8("graphics/text_window/7.4bpp");
+static const u8 sTextWindowFrame8_Gfx[] = INCBIN_U8("graphics/text_window/8.4bpp");
+static const u8 sTextWindowFrame9_Gfx[] = INCBIN_U8("graphics/text_window/9.4bpp");
+static const u8 sTextWindowFrame10_Gfx[] = INCBIN_U8("graphics/text_window/10.4bpp");
+static const u8 sTextWindowFrame11_Gfx[] = INCBIN_U8("graphics/text_window/11.4bpp");
+static const u8 sTextWindowFrame12_Gfx[] = INCBIN_U8("graphics/text_window/12.4bpp");
+static const u8 sTextWindowFrame13_Gfx[] = INCBIN_U8("graphics/text_window/13.4bpp");
+static const u8 sTextWindowFrame14_Gfx[] = INCBIN_U8("graphics/text_window/14.4bpp");
+static const u8 sTextWindowFrame15_Gfx[] = INCBIN_U8("graphics/text_window/15.4bpp");
+static const u8 sTextWindowFrame16_Gfx[] = INCBIN_U8("graphics/text_window/16.4bpp");
+static const u8 sTextWindowFrame17_Gfx[] = INCBIN_U8("graphics/text_window/17.4bpp");
+static const u8 sTextWindowFrame18_Gfx[] = INCBIN_U8("graphics/text_window/18.4bpp");
+static const u8 sTextWindowFrame19_Gfx[] = INCBIN_U8("graphics/text_window/19.4bpp");
+static const u8 sTextWindowFrame20_Gfx[] = INCBIN_U8("graphics/text_window/20.4bpp");
const u16 gTextWindowFrame1_Pal[] = INCBIN_U16("graphics/text_window/1.gbapal");
static const u16 sTextWindowFrame2_Pal[] = INCBIN_U16("graphics/text_window/2.gbapal");
diff --git a/src/time_events.c b/src/time_events.c
index 1f169a5c6..1f46e7705 100644
--- a/src/time_events.c
+++ b/src/time_events.c
@@ -81,7 +81,7 @@ void UpdateShoalTideFlag(void)
1, // 23
};
- if (is_light_level_1_2_3_5_or_6(get_map_light_from_warp0()))
+ if (is_map_type_1_2_3_5_or_6(get_map_light_from_warp0()))
{
RtcCalcLocalTime();
if (tide[gLocalTime.hours])
diff --git a/src/title_screen.c b/src/title_screen.c
index 4e25c8152..15a0482dc 100644
--- a/src/title_screen.c
+++ b/src/title_screen.c
@@ -19,6 +19,7 @@
#include "gpu_regs.h"
#include "trig.h"
#include "constants/rgb.h"
+#include "constants/songs.h"
#define VERSION_BANNER_SHAPE 1
#define VERSION_BANNER_RIGHT_TILEOFFSET 64
@@ -574,7 +575,7 @@ void CB2_InitTitleScreen(void)
| DISPCNT_OBJ_ON
| DISPCNT_WIN0_ON
| DISPCNT_OBJWIN_ON);
- m4aSongNumStart(0x19D);
+ m4aSongNumStart(MUS_TITLE3);
gMain.state = 5;
break;
case 5:
diff --git a/src/trader.c b/src/trader.c
new file mode 100644
index 000000000..c4d70ac9a
--- /dev/null
+++ b/src/trader.c
@@ -0,0 +1,209 @@
+#include "global.h"
+#include "constants/decorations.h"
+#include "constants/mauville_man.h"
+#include "decoration.h"
+#include "decoration_inventory.h"
+#include "event_data.h"
+#include "main.h"
+#include "menu.h"
+#include "menu_helpers.h"
+#include "script.h"
+#include "constants/songs.h"
+#include "sound.h"
+#include "string_util.h"
+#include "strings.h"
+#include "task.h"
+#include "script_menu.h"
+
+static const u8 * const sDefaultTraderNames[] =
+{
+ gText_Tristan,
+ gText_Philip,
+ gText_Dennis,
+ gText_Roberto,
+};
+
+static const u8 sDefaultTraderDecorations[] =
+{
+ DECOR_DUSKULL_DOLL,
+ DECOR_BALL_CUSHION,
+ DECOR_TIRE,
+ DECOR_PRETTY_FLOWERS,
+};
+
+void TraderSetup(void)
+{
+ u8 i;
+ struct MauvilleOldManTrader *trader = &gSaveBlock1Ptr->oldMan.trader;
+
+ trader->id = MAUVILLE_MAN_TRADER;
+ trader->alreadyTraded = FALSE;
+
+ for (i = 0; i < 4; i++)
+ {
+ StringCopy(trader->playerNames[i], sDefaultTraderNames[i]);
+ trader->decorIds[i] = sDefaultTraderDecorations[i];
+ trader->language[i] = GAME_LANGUAGE;
+ }
+}
+
+void Trader_ResetFlag(void)
+{
+ struct MauvilleOldManTrader *trader = &gSaveBlock1Ptr->oldMan.trader;
+ trader->alreadyTraded = FALSE;
+}
+
+void CreateAvailableDecorationsMenu(u8 taskId)
+{
+ u8 i;
+ s16 * data = gTasks[taskId].data;
+ struct MauvilleOldManTrader *trader = &gSaveBlock1Ptr->oldMan.trader;
+ struct WindowTemplate windowTemplate = {0, 1, 1, 10, 10, 15, 1};
+ s32 windowWidth = GetStringWidth(1, gText_Exit, 0);
+ s32 fiveMarksWidth = GetStringWidth(1, gText_FiveMarks, 0);
+ for (i = 0; i < 4; i++)
+ {
+ s32 curWidth;
+ if (trader->decorIds[i] > NUM_DECORATIONS)
+ curWidth = fiveMarksWidth;
+ else
+ curWidth = GetStringWidth(1, gDecorations[trader->decorIds[i]].name, 0);
+ if (curWidth > windowWidth)
+ windowWidth = curWidth;
+ }
+ windowTemplate.width = convert_pixel_width_to_tile_width(windowWidth);
+ data[3] = AddWindow(&windowTemplate);
+ SetWindowBorderStyle(data[3], FALSE, 0x214, 14);
+ for (i = 0; i < 4; i++)
+ {
+ if (trader->decorIds[i] > NUM_DECORATIONS)
+ PrintTextOnWindow(data[3], 1, gText_FiveMarks, 8, 16 * i + 1, 255, NULL);
+ else
+ PrintTextOnWindow(data[3], 1, gDecorations[trader->decorIds[i]].name, 8, 16 * i + 1, 255, NULL);
+ }
+ PrintTextOnWindow(data[3], 1, gText_Exit, 8, 16 * i + 1, 255, NULL);
+ InitMenuInUpperLeftCornerPlaySoundWhenAPressed(data[3], 5, 0);
+ schedule_bg_copy_tilemap_to_vram(0);
+}
+
+void sub_8133BE4(u8 taskId, u8 decorationId)
+{
+ s16 * data = gTasks[taskId].data;
+ if (decorationId > NUM_DECORATIONS)
+ {
+ gSpecialVar_0x8004 = 0xFFFF;
+ }
+ else
+ {
+ gSpecialVar_0x8004 = decorationId;
+ }
+
+ sub_8198070(data[3], FALSE);
+ ClearWindowTilemap(data[3]);
+ RemoveWindow(data[3]);
+ schedule_bg_copy_tilemap_to_vram(0);
+ DestroyTask(taskId);
+ EnableBothScriptContexts();
+}
+
+void Task_HandleGetDecorationMenuInput(u8 taskId)
+{
+ struct MauvilleOldManTrader *trader = &gSaveBlock1Ptr->oldMan.trader;
+ s8 input = ProcessMenuInput();
+
+ switch (input)
+ {
+ case -2:
+ break;
+ case -1:
+ case 4:
+ PlaySE(SE_SELECT);
+ sub_8133BE4(taskId, 0);
+ break;
+ default:
+ PlaySE(SE_SELECT);
+ gSpecialVar_0x8005 = input;
+ StringCopy(gStringVar1, trader->playerNames[input]);
+ ConvertInternationalString(gStringVar1, trader->language[input]);
+ sub_8133BE4(taskId, trader->decorIds[input]);
+ break;
+ }
+}
+
+void ScrSpecial_GetTraderTradedFlag(void)
+{
+ struct MauvilleOldManTrader *trader = &gSaveBlock1Ptr->oldMan.trader;
+ gSpecialVar_Result = trader->alreadyTraded;
+}
+
+void ScrSpecial_DoesPlayerHaveNoDecorations(void)
+{
+ u8 i;
+
+ for (i = 0; i < 8; i++)
+ {
+ if (CountDecorationCategoryN(i))
+ {
+ gSpecialVar_Result = FALSE;
+ return;
+ }
+ }
+ gSpecialVar_Result = TRUE;
+}
+
+void ScrSpecial_IsDecorationFull(void)
+{
+ gSpecialVar_Result = FALSE;
+ if (gDecorations[gSpecialVar_0x8004].category != gDecorations[gSpecialVar_0x8006].category
+ && GetFirstEmptyDecorSlot(gDecorations[gSpecialVar_0x8004].category) == -1)
+ {
+ sub_8127250(gStringVar2, gDecorations[gSpecialVar_0x8004].category);
+ gSpecialVar_Result = TRUE;
+ }
+}
+
+void ScrSpecial_TraderMenuGiveDecoration(void)
+{
+ CreateTask(sub_8127208, 0);
+}
+
+void sub_8133DA0(u8 taskId)
+{
+ if (IsSelectedDecorInThePC() == TRUE)
+ {
+ gSpecialVar_0x8006 = gCurDecorInventoryItems[gCurDecorationIndex];
+ StringCopy(gStringVar3, gDecorations[gSpecialVar_0x8004].name);
+ StringCopy(gStringVar2, gDecorations[gSpecialVar_0x8006].name);
+ }
+ else
+ {
+ gSpecialVar_0x8006 = 0xFFFF;
+ }
+ DestroyTask(taskId);
+ EnableBothScriptContexts();
+}
+
+void sub_8133E1C(u8 taskId)
+{
+ gSpecialVar_0x8006 = 0;
+ DestroyTask(taskId);
+ EnableBothScriptContexts();
+}
+
+void ScrSpecial_TraderDoDecorationTrade(void)
+{
+ struct MauvilleOldManTrader *trader = &gSaveBlock1Ptr->oldMan.trader;
+
+ DecorationRemove(gSpecialVar_0x8006);
+ DecorationAdd(gSpecialVar_0x8004);
+ StringCopy(trader->playerNames[gSpecialVar_0x8005], gSaveBlock2Ptr->playerName);
+ trader->decorIds[gSpecialVar_0x8005] = gSpecialVar_0x8006;
+ trader->language[gSpecialVar_0x8005] = GAME_LANGUAGE;
+ trader->alreadyTraded = TRUE;
+}
+
+void ScrSpecial_TraderMenuGetDecoration(void)
+{
+ u8 taskId = CreateTask(Task_HandleGetDecorationMenuInput, 0);
+ CreateAvailableDecorationsMenu(taskId);
+}
diff --git a/src/tv.c b/src/tv.c
index ddcff9f1d..a48a2d638 100644
--- a/src/tv.c
+++ b/src/tv.c
@@ -36,9 +36,7 @@
#include "decoration.h"
#include "secret_base.h"
#include "tv.h"
-
-extern const u8 gSpeciesNames[][11];
-extern const u8 gMoveNames[][13];
+#include "data2.h"
// Static type declarations
@@ -87,101 +85,100 @@ void tv_store_id_3x(TVShow *show);
void DeleteTVShowInArrayByIdx(TVShow *shows, u8 idx);
s8 FindEmptyTVSlotWithinFirstFiveShowsOfArray(TVShow *shows);
void FindActiveBroadcastByShowType_SetScriptResult(u8 kind);
-void InterviewBefore_BravoTrainerPkmnProfile(void);
-void InterviewBefore_NameRater(void);
+static void InterviewBefore_BravoTrainerPkmnProfile(void);
+static void InterviewBefore_NameRater(void);
u16 TV_GetSomeOtherSpeciesAlreadySeenByPlayer(u16 passedSpecies);
-void sub_80EFA88(void);
-void sub_80EF93C(TVShow *shows);
+static void sub_80EFA88(void);
+static void sub_80EF93C(TVShow *shows);
s8 sub_80EEE30(PokeNews *pokeNews);
bool8 sub_80EF0E4(u8 newsKind);
void ClearPokemonNewsI(u8 i);
-void sub_80F1254(TVShow *shows);
-void sub_80F12A4(TVShow *shows);
-void sub_80F0358(TVShow *player1, TVShow *player2, TVShow *player3, TVShow *player4);
-void sub_80F0C04(void);
-void sub_80F0708(void);
-void sub_80F0B64(void);
-s8 sub_80F06D0(TVShow *tvShows);
-bool8 sub_80F049C(TVShow *dest[], TVShow *src[], u8 idx);
-bool8 sub_80F0580(TVShow *tv1, TVShow *tv2, u8 idx);
-bool8 sub_80F05E8(TVShow *tv1, TVShow *tv2, u8 idx);
-bool8 sub_80F0668(TVShow *tv1, TVShow *tv2, u8 idx);
-void sub_80F0B00(u8 showIdx);
-void sub_80F0B24(u16 species, u8 showIdx);
-void sub_80F0D60(PokeNews *player1, PokeNews *player2, PokeNews *player3, PokeNews *player4);
-void sub_80F0EEC(void);
-void sub_80F0F24(void);
-s8 sub_80F0ECC(PokeNews *pokeNews, u8 idx);
-void sub_80F0E58(PokeNews *dest[], PokeNews *src[]);
-bool8 sub_80F0E84(PokeNews *dest, PokeNews *src, s8 slot);
+static void sub_80F1254(TVShow *shows);
+static void sub_80F12A4(TVShow *shows);
+static void sub_80F0358(TVShow *player1, TVShow *player2, TVShow *player3, TVShow *player4);
+static void sub_80F0C04(void);
+static void sub_80F0708(void);
+static void sub_80F0B64(void);
+static s8 sub_80F06D0(TVShow *tvShows);
+static bool8 sub_80F049C(TVShow *dest[], TVShow *src[], u8 idx);
+static bool8 sub_80F0580(TVShow *tv1, TVShow *tv2, u8 idx);
+static bool8 sub_80F05E8(TVShow *tv1, TVShow *tv2, u8 idx);
+static bool8 sub_80F0668(TVShow *tv1, TVShow *tv2, u8 idx);
+void SetTvShowInactive(u8 showIdx);
+static void sub_80F0B24(u16 species, u8 showIdx);
+static void sub_80F0D60(PokeNews *player1, PokeNews *player2, PokeNews *player3, PokeNews *player4);
+static void sub_80F0EEC(void);
+static void sub_80F0F24(void);
+static s8 sub_80F0ECC(PokeNews *pokeNews, u8 idx);
+static void sub_80F0E58(PokeNews *dest[], PokeNews *src[]);
+static bool8 sub_80F0E84(PokeNews *dest, PokeNews *src, s8 slot);
void TVShowDone(void);
-void InterviewAfter_FanClubLetter(void);
-void InterviewAfter_RecentHappenings(void);
-void InterviewAfter_PkmnFanClubOpinions(void);
-void InterviewAfter_DummyShow4(void);
-void InterviewAfter_BravoTrainerPokemonProfile(void);
-void InterviewAfter_BravoTrainerBattleTowerProfile(void);
-void InterviewAfter_ContestLiveUpdates(void);
+static void InterviewAfter_FanClubLetter(void);
+static void InterviewAfter_RecentHappenings(void);
+static void InterviewAfter_PkmnFanClubOpinions(void);
+static void InterviewAfter_DummyShow4(void);
+static void InterviewAfter_BravoTrainerPokemonProfile(void);
+static void InterviewAfter_BravoTrainerBattleTowerProfile(void);
+static void InterviewAfter_ContestLiveUpdates(void);
void UpdateWorldOfMastersAndPutItOnTheAir(void);
void PutPokemonTodayFailedOnTheAir(void);
-void sub_80ED718(void);
-void sub_80EED88(void);
+static void sub_80ED718(void);
+static void sub_80EED88(void);
void TV_SortPurchasesByQuantity(void);
-void sub_80ED8B4(u16 days);
+static void sub_80ED8B4(u16 days);
void UpdateMassOutbreakTimeLeft(u16 days);
-void sub_80EF120(u16 days);
-void sub_80EDA48(u16 days);
-void sub_80EEB98(u16 days);
+static void sub_80EF120(u16 days);
+static void sub_80EDA48(u16 days);
+static void sub_80EEB98(u16 days);
void PutFishingAdviceShowOnTheAir(void);
-void sub_80EDA80(void);
u8 TV_MonDataIdxToRibbon(u8 monDataIdx);
-void sub_80EEBF4(u8 actionIdx);
+static void sub_80EEBF4(u8 actionIdx);
bool8 IsPriceDiscounted(u8 newsKind);
-void InterviewBefore_FanClubLetter(void);
-void InterviewBefore_RecentHappenings(void);
-void InterviewBefore_PkmnFanClubOpinions(void);
-void InterviewBefore_Dummy(void);
-void InterviewBefore_BravoTrainerBTProfile(void);
-void InterviewBefore_ContestLiveUpdates(void);
-void InterviewBefore_3CheersForPokeblocks(void);
-void InterviewBefore_FanClubSpecial(void);
+static void InterviewBefore_FanClubLetter(void);
+static void InterviewBefore_RecentHappenings(void);
+static void InterviewBefore_PkmnFanClubOpinions(void);
+static void InterviewBefore_Dummy(void);
+static void InterviewBefore_BravoTrainerBTProfile(void);
+static void InterviewBefore_ContestLiveUpdates(void);
+static void InterviewBefore_3CheersForPokeblocks(void);
+static void InterviewBefore_FanClubSpecial(void);
void ChangeBoxPokemonNickname_CB(void);
-void DoTVShowPokemonFanClubLetter(void);
-void DoTVShowRecentHappenings(void);
-void DoTVShowPokemonFanClubOpinions(void);
-void DoTVShowDummiedOut(void);
-void DoTVShowPokemonNewsMassOutbreak(void);
-void DoTVShowBravoTrainerPokemonProfile(void);
-void DoTVShowBravoTrainerBattleTower(void);
-void DoTVShowPokemonTodaySuccessfulCapture(void);
-void DoTVShowTodaysSmartShopper(void);
-void DoTVShowTheNameRaterShow(void);
-void DoTVShowPokemonContestLiveUpdates(void);
-void DoTVShowPokemonBattleUpdate(void);
-void DoTVShow3CheersForPokeblocks(void);
-void DoTVShowPokemonTodayFailedCapture(void);
-void DoTVShowPokemonAngler(void);
-void DoTVShowTheWorldOfMasters(void);
-void DoTVShowTodaysRivalTrainer(void);
-void DoTVShowDewfordTrendWatcherNetwork(void);
-void DoTVShowHoennTreasureInvestigators(void);
-void DoTVShowFindThatGamer(void);
-void DoTVShowBreakingNewsTV(void);
-void DoTVShowSecretBaseVisit(void);
-void DoTVShowPokemonLotteryWinnerFlashReport(void);
-void DoTVShowThePokemonBattleSeminar(void);
-void DoTVShowTrainerFanClubSpecial(void);
-void DoTVShowTrainerFanClub(void);
-void DoTVShowSpotTheCuties(void);
-void DoTVShowPokemonNewsBattleFrontier(void);
-void DoTVShowWhatsNo1InHoennToday(void);
-void DoTVShowSecretBaseSecrets(void);
-void DoTVShowSafariFanClub(void);
-void DoTVShowPokemonContestLiveUpdates2(void);
+static void DoTVShowPokemonFanClubLetter(void);
+static void DoTVShowRecentHappenings(void);
+static void DoTVShowPokemonFanClubOpinions(void);
+static void DoTVShowDummiedOut(void);
+static void DoTVShowPokemonNewsMassOutbreak(void);
+static void DoTVShowBravoTrainerPokemonProfile(void);
+static void DoTVShowBravoTrainerBattleTower(void);
+static void DoTVShowPokemonTodaySuccessfulCapture(void);
+static void DoTVShowTodaysSmartShopper(void);
+static void DoTVShowTheNameRaterShow(void);
+static void DoTVShowPokemonContestLiveUpdates(void);
+static void DoTVShowPokemonBattleUpdate(void);
+static void DoTVShow3CheersForPokeblocks(void);
+static void DoTVShowPokemonTodayFailedCapture(void);
+static void DoTVShowPokemonAngler(void);
+static void DoTVShowTheWorldOfMasters(void);
+static void DoTVShowTodaysRivalTrainer(void);
+static void DoTVShowDewfordTrendWatcherNetwork(void);
+static void DoTVShowHoennTreasureInvestigators(void);
+static void DoTVShowFindThatGamer(void);
+static void DoTVShowBreakingNewsTV(void);
+static void DoTVShowSecretBaseVisit(void);
+static void DoTVShowPokemonLotteryWinnerFlashReport(void);
+static void DoTVShowThePokemonBattleSeminar(void);
+static void DoTVShowTrainerFanClubSpecial(void);
+static void DoTVShowTrainerFanClub(void);
+static void DoTVShowSpotTheCuties(void);
+static void DoTVShowPokemonNewsBattleFrontier(void);
+static void DoTVShowWhatsNo1InHoennToday(void);
+static void DoTVShowSecretBaseSecrets(void);
+static void DoTVShowSafariFanClub(void);
+static void DoTVShowPokemonContestLiveUpdates2(void);
// .rodata
-const struct {
+static const struct {
u16 species;
u16 moves[4];
u8 level;
@@ -214,8 +211,7 @@ const struct {
}
};
-// TODO: Figure out what these are, and define constants in include/flags.h
-const u16 sGoldSymbolFlags[] = {
+static const u16 sGoldSymbolFlags[] = {
FLAG_SYS_TOWER_GOLD,
FLAG_SYS_DOME_GOLD,
FLAG_SYS_PALACE_GOLD,
@@ -225,7 +221,7 @@ const u16 sGoldSymbolFlags[] = {
FLAG_SYS_PYRAMID_GOLD
};
-const u16 sSilverSymbolFlags[] = {
+static const u16 sSilverSymbolFlags[] = {
FLAG_SYS_TOWER_SILVER,
FLAG_SYS_DOME_SILVER,
FLAG_SYS_PALACE_SILVER,
@@ -235,8 +231,7 @@ const u16 sSilverSymbolFlags[] = {
FLAG_SYS_PYRAMID_SILVER
};
-// TODO: Figure out what these are, and define constants in include/vars.h
-const u16 sNumberOneVarsAndThresholds[][2] = {
+static const u16 sNumberOneVarsAndThresholds[][2] = {
{VAR_DAILY_SLOTS, 100},
{VAR_DAILY_ROULETTE, 50},
{VAR_DAILY_WILDS, 100},
@@ -246,7 +241,7 @@ const u16 sNumberOneVarsAndThresholds[][2] = {
{VAR_DAILY_BP, 30}
};
-const u8 *const sPokeNewsTextGroup_Upcoming[] = {
+static const u8 *const sPokeNewsTextGroup_Upcoming[] = {
NULL,
gPokeNewsTextSlateport_Upcoming,
gPokeNewsTextGameCorner_Upcoming,
@@ -254,7 +249,7 @@ const u8 *const sPokeNewsTextGroup_Upcoming[] = {
gPokeNewsTextBlendMaster_Upcoming
};
-const u8 *const sPokeNewsTextGroup_Ongoing[] = {
+static const u8 *const sPokeNewsTextGroup_Ongoing[] = {
NULL,
gPokeNewsTextSlateport_Ongoing,
gPokeNewsTextGameCorner_Ongoing,
@@ -262,7 +257,7 @@ const u8 *const sPokeNewsTextGroup_Ongoing[] = {
gPokeNewsTextBlendMaster_Ongoing
};
-const u8 *const sPokeNewsTextGroup_Ending[] = {
+static const u8 *const sPokeNewsTextGroup_Ending[] = {
NULL,
gPokeNewsTextSlateport_Ending,
gPokeNewsTextGameCorner_Ending,
@@ -276,7 +271,7 @@ u8 *const gTVStringVarPtrs[] = {
gStringVar3
};
-const u8 *const sTVFanClubTextGroup[] = {
+static const u8 *const sTVFanClubTextGroup[] = {
gTVFanClubText00,
gTVFanClubText01,
gTVFanClubText02,
@@ -287,7 +282,7 @@ const u8 *const sTVFanClubTextGroup[] = {
gTVFanClubText07
};
-const u8 *const sTVRecentHappeninssTextGroup[] = {
+static const u8 *const sTVRecentHappeninssTextGroup[] = {
gTVRecentHappeningsText00,
gTVRecentHappeningsText01,
gTVRecentHappeningsText02,
@@ -296,7 +291,7 @@ const u8 *const sTVRecentHappeninssTextGroup[] = {
gTVRecentHappeningsText05
};
-const u8 *const sTVFanClubOpinionsTextGroup[] = {
+static const u8 *const sTVFanClubOpinionsTextGroup[] = {
gTVFanClubOpinionsText00,
gTVFanClubOpinionsText01,
gTVFanClubOpinionsText02,
@@ -304,11 +299,11 @@ const u8 *const sTVFanClubOpinionsTextGroup[] = {
gTVFanClubOpinionsText04
};
-const u8 *const sTVMassOutbreakTextGroup[] = {
+static const u8 *const sTVMassOutbreakTextGroup[] = {
gTVMassOutbreakText00
};
-const u8 *const sTVPokemonTodaySuccessfulTextGroup[] = {
+static const u8 *const sTVPokemonTodaySuccessfulTextGroup[] = {
gTVPokemonTodaySuccessfulText00,
gTVPokemonTodaySuccessfulText01,
gTVPokemonTodaySuccessfulText02,
@@ -323,7 +318,7 @@ const u8 *const sTVPokemonTodaySuccessfulTextGroup[] = {
gTVPokemonTodaySuccessfulText11
};
-const u8 *const sTVTodaysSmartShopperTextGroup[] = {
+static const u8 *const sTVTodaysSmartShopperTextGroup[] = {
gTVTodaysSmartShopperText00,
gTVTodaysSmartShopperText01,
gTVTodaysSmartShopperText02,
@@ -339,7 +334,7 @@ const u8 *const sTVTodaysSmartShopperTextGroup[] = {
gTVTodaysSmartShopperText12
};
-const u8 *const sTVBravoTrainerTextGroup[] = {
+static const u8 *const sTVBravoTrainerTextGroup[] = {
gTVBravoTrainerText00,
gTVBravoTrainerText01,
gTVBravoTrainerText02,
@@ -351,7 +346,7 @@ const u8 *const sTVBravoTrainerTextGroup[] = {
gTVBravoTrainerText08
};
-const u8 *const sTV3CheersForPokeblocksTextGroup[] = {
+static const u8 *const sTV3CheersForPokeblocksTextGroup[] = {
gTV3CheersForPokeblocksText00,
gTV3CheersForPokeblocksText01,
gTV3CheersForPokeblocksText02,
@@ -360,7 +355,7 @@ const u8 *const sTV3CheersForPokeblocksTextGroup[] = {
gTV3CheersForPokeblocksText05
};
-const u8 *const sTVBravoTrainerBattleTowerTextGroup[] = {
+static const u8 *const sTVBravoTrainerBattleTowerTextGroup[] = {
gTVBravoTrainerBattleTowerText00,
gTVBravoTrainerBattleTowerText01,
gTVBravoTrainerBattleTowerText02,
@@ -378,7 +373,7 @@ const u8 *const sTVBravoTrainerBattleTowerTextGroup[] = {
gTVBravoTrainerBattleTowerText14
};
-const u8 *const sTVContestLiveUpdatesTextGroup[] = {
+static const u8 *const sTVContestLiveUpdatesTextGroup[] = {
gTVContestLiveUpdatesText00,
gTVContestLiveUpdatesText01,
gTVContestLiveUpdatesText02,
@@ -414,7 +409,7 @@ const u8 *const sTVContestLiveUpdatesTextGroup[] = {
gTVContestLiveUpdatesText32
};
-const u8 *const sTVPokemonBattleUpdateTextGroup[] = {
+static const u8 *const sTVPokemonBattleUpdateTextGroup[] = {
gTVPokemonBattleUpdateText00,
gTVPokemonBattleUpdateText01,
gTVPokemonBattleUpdateText02,
@@ -425,7 +420,7 @@ const u8 *const sTVPokemonBattleUpdateTextGroup[] = {
gTVPokemonBattleUpdateText07
};
-const u8 *const sTVTrainerFanClubSpecialTextGroup[] = {
+static const u8 *const sTVTrainerFanClubSpecialTextGroup[] = {
gTVTrainerFanClubSpecialText00,
gTVTrainerFanClubSpecialText01,
gTVTrainerFanClubSpecialText02,
@@ -434,7 +429,7 @@ const u8 *const sTVTrainerFanClubSpecialTextGroup[] = {
gTVTrainerFanClubSpecialText05
};
-const u8 *const sTVNameRaterTextGroup[] = {
+static const u8 *const sTVNameRaterTextGroup[] = {
gTVNameRaterText00,
gTVNameRaterText01,
gTVNameRaterText02,
@@ -456,14 +451,14 @@ const u8 *const sTVNameRaterTextGroup[] = {
gTVNameRaterText18
};
-const u8 *const sTVPokemonContestLiveUpdates2TextGroup[] = {
+static const u8 *const sTVPokemonContestLiveUpdates2TextGroup[] = {
gTVPokemonContestLiveUpdates2Text00,
gTVPokemonContestLiveUpdates2Text01,
gTVPokemonContestLiveUpdates2Text02,
gTVPokemonContestLiveUpdates2Text03
};
-const u8 *const sTVPokemonTodayFailedTextGroup[] = {
+static const u8 *const sTVPokemonTodayFailedTextGroup[] = {
gTVPokemonTodayFailedText00,
gTVPokemonTodayFailedText01,
gTVPokemonTodayFailedText02,
@@ -473,18 +468,18 @@ const u8 *const sTVPokemonTodayFailedTextGroup[] = {
gTVPokemonTodayFailedText06
};
-const u8 *const sTVPokemonAnslerTextGroup[] = {
+static const u8 *const sTVPokemonAnslerTextGroup[] = {
gTVPokemonAnglerText00,
gTVPokemonAnglerText01
};
-const u8 *const sTVWorldOfMastersTextGroup[] = {
+static const u8 *const sTVWorldOfMastersTextGroup[] = {
gTVWorldOfMastersText00,
gTVWorldOfMastersText01,
gTVWorldOfMastersText02
};
-const u8 *const sTVTodaysRivalTrainerTextGroup[] = {
+static const u8 *const sTVTodaysRivalTrainerTextGroup[] = {
gTVTodaysRivalTrainerText00,
gTVTodaysRivalTrainerText01,
gTVTodaysRivalTrainerText02,
@@ -498,7 +493,7 @@ const u8 *const sTVTodaysRivalTrainerTextGroup[] = {
gTVTodaysRivalTrainerText10
};
-const u8 *const sTVDewfordTrendWatcherNetworkTextGroup[] = {
+static const u8 *const sTVDewfordTrendWatcherNetworkTextGroup[] = {
gTVDewfordTrendWatcherNetworkText00,
gTVDewfordTrendWatcherNetworkText01,
gTVDewfordTrendWatcherNetworkText02,
@@ -508,20 +503,20 @@ const u8 *const sTVDewfordTrendWatcherNetworkTextGroup[] = {
gTVDewfordTrendWatcherNetworkText06
};
-const u8 *const sTVHoennTreasureInvestisatorsTextGroup[] = {
+static const u8 *const sTVHoennTreasureInvestisatorsTextGroup[] = {
gTVHoennTreasureInvestigatorsText00,
gTVHoennTreasureInvestigatorsText01,
gTVHoennTreasureInvestigatorsText02
};
-const u8 *const sTVFindThatGamerTextGroup[] = {
+static const u8 *const sTVFindThatGamerTextGroup[] = {
gTVFindThatGamerText00,
gTVFindThatGamerText01,
gTVFindThatGamerText02,
gTVFindThatGamerText03
};
-const u8 *const sTVBreakinsNewsTextGroup[] = {
+static const u8 *const sTVBreakinsNewsTextGroup[] = {
gTVBreakingNewsText00,
gTVBreakingNewsText01,
gTVBreakingNewsText02,
@@ -537,7 +532,7 @@ const u8 *const sTVBreakinsNewsTextGroup[] = {
gTVBreakingNewsText12
};
-const u8 *const sTVSecretBaseVisitTextGroup[] = {
+static const u8 *const sTVSecretBaseVisitTextGroup[] = {
gTVSecretBaseVisitText00,
gTVSecretBaseVisitText01,
gTVSecretBaseVisitText02,
@@ -554,11 +549,11 @@ const u8 *const sTVSecretBaseVisitTextGroup[] = {
gTVSecretBaseVisitText13
};
-const u8 *const sTVPokemonLotteryWinnerFlashReportTextGroup[] = {
+static const u8 *const sTVPokemonLotteryWinnerFlashReportTextGroup[] = {
gTVPokemonLotteryWinnerFlashReportText00
};
-const u8 *const sTVThePokemonBattleSeminarTextGroup[] = {
+static const u8 *const sTVThePokemonBattleSeminarTextGroup[] = {
gTVThePokemonBattleSeminarText00,
gTVThePokemonBattleSeminarText01,
gTVThePokemonBattleSeminarText02,
@@ -568,7 +563,7 @@ const u8 *const sTVThePokemonBattleSeminarTextGroup[] = {
gTVThePokemonBattleSeminarText06
};
-const u8 *const sTVTrainerFanClubTextGroup[] = {
+static const u8 *const sTVTrainerFanClubTextGroup[] = {
gTVTrainerFanClubText00,
gTVTrainerFanClubText01,
gTVTrainerFanClubText02,
@@ -583,7 +578,7 @@ const u8 *const sTVTrainerFanClubTextGroup[] = {
gTVTrainerFanClubText11
};
-const u8 *const sTVCutiesTextGroup[] = {
+static const u8 *const sTVCutiesTextGroup[] = {
gTVCutiesText00,
gTVCutiesText01,
gTVCutiesText02,
@@ -602,7 +597,7 @@ const u8 *const sTVCutiesTextGroup[] = {
gTVCutiesText15
};
-const u8 *const sTVPokemonNewsBattleFrontierTextGroup[] = {
+static const u8 *const sTVPokemonNewsBattleFrontierTextGroup[] = {
gTVPokemonNewsBattleFrontierText00,
gTVPokemonNewsBattleFrontierText01,
gTVPokemonNewsBattleFrontierText02,
@@ -624,7 +619,7 @@ const u8 *const sTVPokemonNewsBattleFrontierTextGroup[] = {
gTVPokemonNewsBattleFrontierText18
};
-const u8 *const sTVWhatsNo1InHoennTodayTextGroup[] = {
+static const u8 *const sTVWhatsNo1InHoennTodayTextGroup[] = {
gTVWhatsNo1InHoennTodayText00,
gTVWhatsNo1InHoennTodayText01,
gTVWhatsNo1InHoennTodayText02,
@@ -636,7 +631,7 @@ const u8 *const sTVWhatsNo1InHoennTodayTextGroup[] = {
gTVWhatsNo1InHoennTodayText08
};
-const u8 *const sTVSecretBaseSecretsTextGroup[] = {
+static const u8 *const sTVSecretBaseSecretsTextGroup[] = {
gTVSecretBaseSecretsText00,
gTVSecretBaseSecretsText01,
gTVSecretBaseSecretsText02,
@@ -682,7 +677,7 @@ const u8 *const sTVSecretBaseSecretsTextGroup[] = {
gTVSecretBaseSecretsText42
};
-const u8 *const sTVSafariFanClubTextGroup[] = {
+static const u8 *const sTVSafariFanClubTextGroup[] = {
gTVSafariFanClubText00,
gTVSafariFanClubText01,
gTVSafariFanClubText02,
@@ -696,7 +691,7 @@ const u8 *const sTVSafariFanClubTextGroup[] = {
gTVSafariFanClubText10
};
-const u8 *const sTVInSearchOfTrainersTextGroup[] = {
+static const u8 *const sTVInSearchOfTrainersTextGroup[] = {
gTVInSearchOfTrainersText00,
gTVInSearchOfTrainersText01,
gTVInSearchOfTrainersText02,
@@ -1253,7 +1248,7 @@ void tv_store_id_2x(TVShow *show)
show->common.trainerIdHi = id >> 8;
}
-void InterviewAfter_ContestLiveUpdates(void)
+static void InterviewAfter_ContestLiveUpdates(void)
{
TVShow *show;
TVShow *show2;
@@ -1281,7 +1276,7 @@ void InterviewAfter_ContestLiveUpdates(void)
}
}
-void PutBattleUpdateOnTheAir(u8 a0, u16 a1, u16 a2, u16 a3)
+void PutBattleUpdateOnTheAir(u8 opponentLinkPlayerId, u16 move, u16 speciesPlayer, u16 speciesOpponent)
{
TVShow *show;
u8 name[32];
@@ -1308,21 +1303,21 @@ void PutBattleUpdateOnTheAir(u8 a0, u16 a1, u16 a2, u16 a3)
{
show->battleUpdate.battleType = 0;
}
- show->battleUpdate.move = a1;
- show->battleUpdate.species2 = a2;
- show->battleUpdate.species = a3;
- StringCopy(name, gLinkPlayers[a0].name);
+ show->battleUpdate.move = move;
+ show->battleUpdate.speciesPlayer = speciesPlayer;
+ show->battleUpdate.speciesOpponent = speciesOpponent;
+ StringCopy(name, gLinkPlayers[opponentLinkPlayerId].name);
StripExtCtrlCodes(name);
StringCopy(show->battleUpdate.linkOpponentName, name);
tv_store_id_2x(show);
show->battleUpdate.language = gGameLanguage;
- if (show->battleUpdate.language == LANGUAGE_JAPANESE || gLinkPlayers[a0].language == LANGUAGE_JAPANESE)
+ if (show->battleUpdate.language == LANGUAGE_JAPANESE || gLinkPlayers[opponentLinkPlayerId].language == LANGUAGE_JAPANESE)
{
show->battleUpdate.linkOpponentLanguage = LANGUAGE_JAPANESE;
}
else
{
- show->battleUpdate.linkOpponentLanguage = gLinkPlayers[a0].language;
+ show->battleUpdate.linkOpponentLanguage = gLinkPlayers[opponentLinkPlayerId].language;
}
}
}
@@ -1385,13 +1380,13 @@ void PutFanClubSpecialOnTheAir(void)
StringCopy(show->fanClubSpecial.idolName, name);
tv_store_id_2x(show);
show->fanClubSpecial.language = gGameLanguage;
- if (show->fanClubSpecial.language == LANGUAGE_JAPANESE || gSaveBlock1Ptr->unk_31A0 == LANGUAGE_JAPANESE)
+ if (show->fanClubSpecial.language == LANGUAGE_JAPANESE || gSaveBlock1Ptr->linkBattleRecords.languages[0] == LANGUAGE_JAPANESE)
{
show->fanClubSpecial.idolNameLanguage = LANGUAGE_JAPANESE;
}
else
{
- show->fanClubSpecial.idolNameLanguage = gSaveBlock1Ptr->unk_31A0;
+ show->fanClubSpecial.idolNameLanguage = gSaveBlock1Ptr->linkBattleRecords.languages[0];
}
}
@@ -1472,7 +1467,7 @@ void ContestLiveUpdates_BeforeInterview_5(u8 a0, u8 a1)
}
}
-void InterviewAfter_BravoTrainerPokemonProfile(void)
+static void InterviewAfter_BravoTrainerPokemonProfile(void)
{
TVShow *show;
TVShow *show2;
@@ -1538,7 +1533,7 @@ void BravoTrainerPokemonProfile_BeforeInterview2(u8 a0)
}
}
-void InterviewAfter_BravoTrainerBattleTowerProfile(void)
+static void InterviewAfter_BravoTrainerBattleTowerProfile(void)
{
TVShow *show;
@@ -1671,7 +1666,7 @@ void PutLilycoveContestLadyShowOnTheAir(void)
}
}
-void InterviewAfter_FanClubLetter(void)
+static void InterviewAfter_FanClubLetter(void)
{
TVShow *show;
@@ -1684,7 +1679,7 @@ void InterviewAfter_FanClubLetter(void)
show->fanclubLetter.language = gGameLanguage;
}
-void InterviewAfter_RecentHappenings(void)
+static void InterviewAfter_RecentHappenings(void)
{
TVShow *show;
@@ -1697,7 +1692,7 @@ void InterviewAfter_RecentHappenings(void)
show->recentHappenings.language = gGameLanguage;
}
-void InterviewAfter_PkmnFanClubOpinions(void)
+static void InterviewAfter_PkmnFanClubOpinions(void)
{
TVShow *show;
@@ -1722,14 +1717,14 @@ void InterviewAfter_PkmnFanClubOpinions(void)
}
}
-void InterviewAfter_DummyShow4()
+static void InterviewAfter_DummyShow4(void)
{
TVShow *show;
show = &gSaveBlock1Ptr->tvShows[sCurTVShowSlot];
}
-void sub_80ED718(void)
+static void sub_80ED718(void)
{
u8 i;
u16 outbreakIdx;
@@ -1794,7 +1789,6 @@ void EndMassOutbreak(void)
void UpdateTVShowsPerDay(u16 days)
{
-
sub_80ED8B4(days);
UpdateMassOutbreakTimeLeft(days);
sub_80EF120(days);
@@ -1802,7 +1796,7 @@ void UpdateTVShowsPerDay(u16 days)
sub_80EEB98(days);
}
-void sub_80ED8B4(u16 days)
+static void sub_80ED8B4(u16 days)
{
u8 i;
TVShow *show;
@@ -1872,7 +1866,7 @@ void PutFishingAdviceShowOnTheAir(void)
{
TVShow *show;
- sCurTVShowSlot = FindEmptyTVSlotBeyondFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
+ sCurTVShowSlot = FindEmptyTVSlotBeyondFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
if (sCurTVShowSlot != -1 && HasMixableShowAlreadyBeenSpawnedWithPlayerID(TVSHOW_FISHING_ADVICE, FALSE) != TRUE)
{
show = &gSaveBlock1Ptr->tvShows[sCurTVShowSlot];
@@ -1892,7 +1886,7 @@ void SetPokemonAnglerSpecies(u16 species)
sPokemonAnglerSpecies = species;
}
-void sub_80EDA48(u16 days)
+static void sub_80EDA48(u16 days)
{
TVShow *show;
@@ -1957,11 +1951,11 @@ void sub_80EDB44(void)
show->rivalTrainer.badgeCount = nBadges;
if (IsNationalPokedexEnabled())
{
- show->rivalTrainer.dexCount = pokedex_count(0x01);
+ show->rivalTrainer.dexCount = GetNationalPokedexCount(0x01);
}
else
{
- show->rivalTrainer.dexCount = sub_80C0844(0x01);
+ show->rivalTrainer.dexCount = GetHoennPokedexCount(0x01);
}
show->rivalTrainer.location = gMapHeader.regionMapSectionId;
show->rivalTrainer.mapDataId = gMapHeader.mapDataId;
@@ -2088,8 +2082,7 @@ void sub_80EDE84(u16 nCoinsSpent)
sFindThatGamerCoinsSpent = nCoinsSpent;
}
-#ifdef NONMATCHING // FIXME: Register allocation shenanigans
-void sub_80EDE98(TVShow *show)
+static void sub_80EDE98(TVShow *show)
{
u8 i;
u8 j;
@@ -2140,11 +2133,11 @@ void sub_80EDE98(TVShow *show)
default:
for (k = 0; k < n * n; k ++)
{
- i = Random() % n;
+ deco = Random() % n;
j = Random() % n;
- x = sTV_DecorationsBuffer[i];
- sTV_DecorationsBuffer[i] = sTV_DecorationsBuffer[j];
- sTV_DecorationsBuffer[j] = x;
+ i = sTV_DecorationsBuffer[deco];
+ sTV_DecorationsBuffer[deco] = sTV_DecorationsBuffer[j];
+ sTV_DecorationsBuffer[j] = i;
}
for (i = 0; i < show->secretBaseVisit.nDecorations; i ++)
{
@@ -2153,157 +2146,8 @@ void sub_80EDE98(TVShow *show)
break;
}
}
-#else
-__attribute__((naked))
-void sub_80EDE98(TVShow *show)
-{
- asm_unified("\tpush {r4-r7,lr}\n"
- "\tmov r7, r9\n"
- "\tmov r6, r8\n"
- "\tpush {r6,r7}\n"
- "\tmov r8, r0\n"
- "\tmovs r3, 0\n"
- "\tldr r6, =sTV_DecorationsBuffer\n"
- "\tldr r7, =gSaveBlock1Ptr\n"
- "\tadds r2, r6, 0\n"
- "\tmovs r1, 0\n"
- "_080EDEAC:\n"
- "\tadds r0, r3, r2\n"
- "\tstrb r1, [r0]\n"
- "\tadds r0, r3, 0x1\n"
- "\tlsls r0, 24\n"
- "\tlsrs r3, r0, 24\n"
- "\tcmp r3, 0xF\n"
- "\tbls _080EDEAC\n"
- "\tmovs r3, 0\n"
- "\tmovs r5, 0\n"
- "_080EDEBE:\n"
- "\tldr r0, [r7]\n"
- "\tldr r1, =0x00001aae\n"
- "\tadds r0, r1\n"
- "\tadds r0, r3\n"
- "\tldrb r4, [r0]\n"
- "\tadds r3, 0x1\n"
- "\tcmp r4, 0\n"
- "\tbeq _080EDF0A\n"
- "\tmovs r1, 0\n"
- "\tldrb r0, [r6]\n"
- "\tcmp r0, 0\n"
- "\tbne _080EDEE8\n"
- "\tstrb r4, [r6]\n"
- "\tb _080EDF04\n"
- "\t.pool\n"
- "_080EDEE8:\n"
- "\tadds r0, r1, r6\n"
- "\tldrb r0, [r0]\n"
- "\tcmp r0, r4\n"
- "\tbeq _080EDF0A\n"
- "\tadds r0, r1, 0x1\n"
- "\tlsls r0, 24\n"
- "\tlsrs r1, r0, 24\n"
- "\tcmp r1, 0xF\n"
- "\tbhi _080EDF0A\n"
- "\tadds r2, r1, r6\n"
- "\tldrb r0, [r2]\n"
- "\tcmp r0, 0\n"
- "\tbne _080EDEE8\n"
- "\tstrb r4, [r2]\n"
- "_080EDF04:\n"
- "\tadds r0, r5, 0x1\n"
- "\tlsls r0, 24\n"
- "\tlsrs r5, r0, 24\n"
- "_080EDF0A:\n"
- "\tlsls r0, r3, 24\n"
- "\tlsrs r3, r0, 24\n"
- "\tcmp r3, 0xF\n"
- "\tbls _080EDEBE\n"
- "\tcmp r5, 0x4\n"
- "\tbls _080EDF1E\n"
- "\tmovs r0, 0x4\n"
- "\tmov r1, r8\n"
- "\tstrb r0, [r1, 0x3]\n"
- "\tb _080EDF22\n"
- "_080EDF1E:\n"
- "\tmov r0, r8\n"
- "\tstrb r5, [r0, 0x3]\n"
- "_080EDF22:\n"
- "\tmov r1, r8\n"
- "\tldrb r0, [r1, 0x3]\n"
- "\tcmp r0, 0\n"
- "\tbeq _080EDFA4\n"
- "\tcmp r0, 0x1\n"
- "\tbne _080EDF34\n"
- "\tldrb r0, [r6]\n"
- "\tstrb r0, [r1, 0x4]\n"
- "\tb _080EDFA4\n"
- "_080EDF34:\n"
- "\tmovs r6, 0\n"
- "\tadds r7, r5, 0\n"
- "\tmuls r7, r5\n"
- "\tcmp r6, r7\n"
- "\tbge _080EDF7E\n"
- "\tldr r0, =sTV_DecorationsBuffer\n"
- "\tmov r9, r0\n"
- "_080EDF42:\n"
- "\tbl Random\n"
- "\tlsls r0, 16\n"
- "\tlsrs r0, 16\n"
- "\tadds r1, r5, 0\n"
- "\tbl __modsi3\n"
- "\tlsls r0, 24\n"
- "\tlsrs r4, r0, 24\n"
- "\tbl Random\n"
- "\tlsls r0, 16\n"
- "\tlsrs r0, 16\n"
- "\tadds r1, r5, 0\n"
- "\tbl __modsi3\n"
- "\tlsls r0, 24\n"
- "\tlsrs r1, r0, 24\n"
- "\tmov r0, r9\n"
- "\tadds r2, r4, r0\n"
- "\tldrb r3, [r2]\n"
- "\tadd r1, r9\n"
- "\tldrb r0, [r1]\n"
- "\tstrb r0, [r2]\n"
- "\tstrb r3, [r1]\n"
- "\tadds r0, r6, 0x1\n"
- "\tlsls r0, 16\n"
- "\tlsrs r6, r0, 16\n"
- "\tcmp r6, r7\n"
- "\tblt _080EDF42\n"
- "_080EDF7E:\n"
- "\tmovs r3, 0\n"
- "\tmov r1, r8\n"
- "\tldrb r1, [r1, 0x3]\n"
- "\tcmp r3, r1\n"
- "\tbcs _080EDFA4\n"
- "\tmov r2, r8\n"
- "\tadds r2, 0x4\n"
- "\tldr r4, =sTV_DecorationsBuffer\n"
- "_080EDF8E:\n"
- "\tadds r1, r2, r3\n"
- "\tadds r0, r3, r4\n"
- "\tldrb r0, [r0]\n"
- "\tstrb r0, [r1]\n"
- "\tadds r0, r3, 0x1\n"
- "\tlsls r0, 24\n"
- "\tlsrs r3, r0, 24\n"
- "\tmov r0, r8\n"
- "\tldrb r0, [r0, 0x3]\n"
- "\tcmp r3, r0\n"
- "\tbcc _080EDF8E\n"
- "_080EDFA4:\n"
- "\tpop {r3,r4}\n"
- "\tmov r8, r3\n"
- "\tmov r9, r4\n"
- "\tpop {r4-r7}\n"
- "\tpop {r0}\n"
- "\tbx r0\n"
- "\t.pool");
-}
-#endif
-void sub_80EDFB4(TVShow *show)
+static void sub_80EDFB4(TVShow *show)
{
u8 i;
u16 move;
@@ -2621,7 +2465,7 @@ bool8 sub_80EE7C0(void)
{
return TRUE;
}
- if (gSaveBlock1Ptr->linkBattleRecords[0].name[0] == EOS)
+ if (gSaveBlock1Ptr->linkBattleRecords.entries[0].name[0] == EOS)
{
return TRUE;
}
@@ -2740,7 +2584,7 @@ void sub_80EEA70(void)
}
}
-void sub_80EEB98(u16 days)
+static void sub_80EEB98(u16 days)
{
u8 i;
@@ -2758,7 +2602,7 @@ void sub_80EEB98(u16 days)
}
}
-void sub_80EEBF4(u8 actionIdx)
+static void sub_80EEBF4(u8 actionIdx)
{
TVShow *show;
@@ -2814,7 +2658,7 @@ void sub_80EED60(u16 delta)
// PokeNews
-void sub_80EED88(void)
+static void sub_80EED88(void)
{
u8 newsKind;
@@ -2865,7 +2709,7 @@ void ClearPokemonNewsI(u8 i)
gSaveBlock1Ptr->pokeNews[i].days = 0;
}
-void sub_80EEEB8(void)
+static void sub_80EEEB8(void)
{
u8 i;
u8 j;
@@ -2995,7 +2839,7 @@ bool8 sub_80EF0E4(u8 newsKind)
return FALSE;
}
-void sub_80EF120(u16 days)
+static void sub_80EF120(u16 days)
{
u8 i;
@@ -3073,48 +2917,25 @@ void TV_PrintIntToStringVar(u8 varIdx, int value)
{
int nDigits;
- nDigits = sub_80EF370(value);
+ nDigits = CountDigits(value);
ConvertIntToDecimalStringN(gTVStringVarPtrs[varIdx], value, STR_CONV_MODE_LEFT_ALIGN, nDigits);
}
-size_t sub_80EF370(int value)
+size_t CountDigits(int value)
{
- if (value / 10 == 0)
- {
- return 1;
- }
- if (value / 100 == 0)
- {
- return 2;
- }
- if (value / 1000 == 0)
- {
- return 3;
- }
- if (value / 10000 == 0)
- {
- return 4;
- }
- if (value / 100000 == 0)
- {
- return 5;
- }
- if (value / 1000000 == 0)
- {
- return 6;
- }
- if (value / 10000000 == 0)
- {
- return 7;
- }
- if (value / 100000000 == 0)
- {
- return 8;
- }
+ if (value / 10 == 0) return 1;
+ if (value / 100 == 0) return 2;
+ if (value / 1000 == 0) return 3;
+ if (value / 10000 == 0) return 4;
+ if (value / 100000 == 0) return 5;
+ if (value / 1000000 == 0) return 6;
+ if (value / 10000000 == 0) return 7;
+ if (value / 100000000 == 0) return 8;
+
return 1;
}
-void sub_80EF40C(u8 varIdx, TVShow *show)
+static void sub_80EF40C(u8 varIdx, TVShow *show)
{
u8 i;
int price;
@@ -3124,7 +2945,7 @@ void sub_80EF40C(u8 varIdx, TVShow *show)
{
if (show->smartshopperShow.itemIds[i] != ITEM_NONE)
{
- price += itemid_get_market_price(show->smartshopperShow.itemIds[i]) * show->smartshopperShow.itemAmounts[i];
+ price += ItemId_GetPrice(show->smartshopperShow.itemIds[i]) * show->smartshopperShow.itemAmounts[i];
}
}
if (show->smartshopperShow.priceReduced == TRUE)
@@ -3245,7 +3066,7 @@ void InterviewBefore(void)
}
}
-void InterviewBefore_FanClubLetter(void)
+static void InterviewBefore_FanClubLetter(void)
{
FindActiveBroadcastByShowType_SetScriptResult(TVSHOW_FAN_CLUB_LETTER);
if (!gSpecialVar_Result)
@@ -3255,7 +3076,7 @@ void InterviewBefore_FanClubLetter(void)
}
}
-void InterviewBefore_RecentHappenings(void)
+static void InterviewBefore_RecentHappenings(void)
{
FindActiveBroadcastByShowType_SetScriptResult(TVSHOW_RECENT_HAPPENINGS);
if (!gSpecialVar_Result)
@@ -3264,7 +3085,7 @@ void InterviewBefore_RecentHappenings(void)
}
}
-void InterviewBefore_PkmnFanClubOpinions(void)
+static void InterviewBefore_PkmnFanClubOpinions(void)
{
FindActiveBroadcastByShowType_SetScriptResult(TVSHOW_PKMN_FAN_CLUB_OPINIONS);
if (!gSpecialVar_Result)
@@ -3276,17 +3097,17 @@ void InterviewBefore_PkmnFanClubOpinions(void)
}
}
-void InterviewBefore_Dummy(void)
+static void InterviewBefore_Dummy(void)
{
gSpecialVar_Result = TRUE;
}
-void InterviewBefore_NameRater(void)
+static void InterviewBefore_NameRater(void)
{
FindActiveBroadcastByShowType_SetScriptResult(TVSHOW_NAME_RATER_SHOW);
}
-void InterviewBefore_BravoTrainerPkmnProfile(void)
+static void InterviewBefore_BravoTrainerPkmnProfile(void)
{
FindActiveBroadcastByShowType_SetScriptResult(TVSHOW_BRAVO_TRAINER_POKEMON_PROFILE);
if (!gSpecialVar_Result)
@@ -3295,17 +3116,17 @@ void InterviewBefore_BravoTrainerPkmnProfile(void)
}
}
-void InterviewBefore_ContestLiveUpdates(void)
+static void InterviewBefore_ContestLiveUpdates(void)
{
FindActiveBroadcastByShowType_SetScriptResult(TVSHOW_CONTEST_LIVE_UPDATES);
}
-void InterviewBefore_3CheersForPokeblocks(void)
+static void InterviewBefore_3CheersForPokeblocks(void)
{
FindActiveBroadcastByShowType_SetScriptResult(TVSHOW_3_CHEERS_FOR_POKEBLOCKS);
}
-void InterviewBefore_BravoTrainerBTProfile(void)
+static void InterviewBefore_BravoTrainerBTProfile(void)
{
FindActiveBroadcastByShowType_SetScriptResult(TVSHOW_BRAVO_TRAINER_BATTLE_TOWER_PROFILE);
if (!gSpecialVar_Result)
@@ -3314,7 +3135,7 @@ void InterviewBefore_BravoTrainerBTProfile(void)
}
}
-void InterviewBefore_FanClubSpecial(void)
+static void InterviewBefore_FanClubSpecial(void)
{
FindActiveBroadcastByShowType_SetScriptResult(TVSHOW_FAN_CLUB_SPECIAL);
if (!gSpecialVar_Result)
@@ -3355,7 +3176,7 @@ void DeleteTVShowInArrayByIdx(TVShow *shows, u8 idx)
}
}
-void sub_80EF93C(TVShow *shows)
+static void sub_80EF93C(TVShow *shows)
{
u8 i;
u8 j;
@@ -3427,7 +3248,7 @@ u16 TV_GetSomeOtherSpeciesAlreadySeenByPlayer(u16 passedSpecies)
return species;
}
-void sub_80EFA88(void)
+static void sub_80EFA88(void)
{
sCurTVShowSlot = FindEmptyTVSlotWithinFirstFiveShowsOfArray(gSaveBlock1Ptr->tvShows);
gSpecialVar_0x8006 = sCurTVShowSlot;
@@ -3633,7 +3454,7 @@ void ChangePokemonNickname(void)
void ChangePokemonNickname_CB(void)
{
SetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_NICKNAME, gStringVar2);
- c2_exit_to_overworld_1_continue_scripts_restart_music();
+ CB2_ReturnToFieldContinueScript();
}
void ChangeBoxPokemonNickname(void)
@@ -3649,7 +3470,7 @@ void ChangeBoxPokemonNickname(void)
void ChangeBoxPokemonNickname_CB(void)
{
SetBoxMonNickFromAnyBox(gSpecialVar_MonBoxId, gSpecialVar_MonBoxPos, gStringVar2);
- c2_exit_to_overworld_1_continue_scripts_restart_music();
+ CB2_ReturnToFieldContinueScript();
}
void TV_CopyNicknameToStringVar1AndEnsureTerminated(void)
@@ -3836,7 +3657,7 @@ void sub_80F01E8(void *src, u32 size, u8 masterIdx)
}
}
-void sub_80F0358(TVShow player1[25], TVShow player2[25], TVShow player3[25], TVShow player4[25])
+static void sub_80F0358(TVShow player1[25], TVShow player2[25], TVShow player3[25], TVShow player4[25])
{
u8 i;
u8 j;
@@ -3884,7 +3705,7 @@ void sub_80F0358(TVShow player1[25], TVShow player2[25], TVShow player3[25], TVS
}
}
-bool8 sub_80F049C(TVShow *dest[25], TVShow *src[25], u8 idx)
+static bool8 sub_80F049C(TVShow *dest[25], TVShow *src[25], u8 idx)
{
u8 value;
u8 switchval;
@@ -3915,7 +3736,7 @@ bool8 sub_80F049C(TVShow *dest[25], TVShow *src[25], u8 idx)
return FALSE;
}
-u8 sub_80F0580(TVShow *tv1, TVShow *tv2, u8 idx)
+static bool8 sub_80F0580(TVShow *tv1, TVShow *tv2, u8 idx)
{
u32 linkTrainerId = GetLinkPlayerTrainerId(idx);
@@ -3932,7 +3753,7 @@ u8 sub_80F0580(TVShow *tv1, TVShow *tv2, u8 idx)
return TRUE;
}
-u8 sub_80F05E8(TVShow *tv1, TVShow *tv2, u8 idx)
+static bool8 sub_80F05E8(TVShow *tv1, TVShow *tv2, u8 idx)
{
u32 linkTrainerId = GetLinkPlayerTrainerId(idx);
if ((linkTrainerId & 0xFF) == tv2->common.srcTrainerIdLo && ((linkTrainerId >> 8) & 0xFF) == tv2->common.srcTrainerIdHi)
@@ -3952,7 +3773,7 @@ u8 sub_80F05E8(TVShow *tv1, TVShow *tv2, u8 idx)
return TRUE;
}
-u8 sub_80F0668(TVShow *tv1, TVShow *tv2, u8 idx)
+static bool8 sub_80F0668(TVShow *tv1, TVShow *tv2, u8 idx)
{
u32 linkTrainerId = GetLinkPlayerTrainerId(idx);
if ((linkTrainerId & 0xFF) == tv2->common.trainerIdLo && ((linkTrainerId >> 8) & 0xFF) == tv2->common.trainerIdHi)
@@ -3969,7 +3790,7 @@ u8 sub_80F0668(TVShow *tv1, TVShow *tv2, u8 idx)
return TRUE;
}
-s8 sub_80F06D0(TVShow *tvShows)
+static s8 sub_80F06D0(TVShow *tvShows)
{
u8 i;
@@ -3984,7 +3805,7 @@ s8 sub_80F06D0(TVShow *tvShows)
}
#ifdef NONMATCHING
-void sub_80F0708(void) // FIXME: register allocation shenanigans
+static void sub_80F0708(void) // FIXME: register allocation shenanigans
{
u16 i;
TVShow *show;
@@ -4000,8 +3821,8 @@ void sub_80F0708(void) // FIXME: register allocation shenanigans
case TVSHOW_3_CHEERS_FOR_POKEBLOCKS:
break;
case TVSHOW_BATTLE_UPDATE:
- sub_80F0B24((&gSaveBlock1Ptr->tvShows[i])->battleUpdate.species2, i);
- sub_80F0B24((&gSaveBlock1Ptr->tvShows[i])->battleUpdate.species, i);
+ sub_80F0B24((&gSaveBlock1Ptr->tvShows[i])->battleUpdate.speciesPlayer, i);
+ sub_80F0B24((&gSaveBlock1Ptr->tvShows[i])->battleUpdate.speciesOpponent, i);
break;
case TVSHOW_FAN_CLUB_SPECIAL:
break;
@@ -4104,13 +3925,13 @@ void sub_80F0708(void) // FIXME: register allocation shenanigans
break;
default:
- sub_80F0B00(i);
+ SetTvShowInactive(i);
break;
}
}
}
#else
-__attribute__((naked)) void sub_80F0708(void)
+NAKED static void sub_80F0708(void)
{
asm_unified("\tpush {r4-r7,lr}\n"
"\tmov r7, r9\n"
@@ -4527,7 +4348,7 @@ __attribute__((naked)) void sub_80F0708(void)
"\tmov r2, r9\n"
"\tlsls r0, r2, 24\n"
"\tlsrs r0, 24\n"
- "\tbl sub_80F0B00\n"
+ "\tbl SetTvShowInactive\n"
"_080F0AE2_break:\n"
"\tmov r0, r9\n"
"\tadds r0, 0x1\n"
@@ -4548,12 +4369,12 @@ __attribute__((naked)) void sub_80F0708(void)
}
#endif
-void sub_80F0B00(u8 showIdx)
+void SetTvShowInactive(u8 showIdx)
{
gSaveBlock1Ptr->tvShows[showIdx].common.active = FALSE;
}
-void sub_80F0B24(u16 species, u8 showIdx)
+static void sub_80F0B24(u16 species, u8 showIdx)
{
if (GetSetPokedexFlag(SpeciesToNationalPokedexNum(species), 0) == 0)
{
@@ -4561,7 +4382,7 @@ void sub_80F0B24(u16 species, u8 showIdx)
}
}
-void sub_80F0B64(void)
+static void sub_80F0B64(void)
{
u16 i;
@@ -4594,7 +4415,7 @@ void sub_80F0BB8(void)
}
}
-void sub_80F0C04(void)
+static void sub_80F0C04(void)
{
s8 i;
s8 ct;
@@ -4648,7 +4469,7 @@ void sub_80F0C7C(void *src, u32 size, u8 masterIdx)
}
}
-void sub_80F0D60(PokeNews player1[16], PokeNews player2[16], PokeNews player3[16], PokeNews player4[16])
+static void sub_80F0D60(PokeNews player1[16], PokeNews player2[16], PokeNews player3[16], PokeNews player4[16])
{
u8 i;
u8 j;
@@ -4680,7 +4501,7 @@ void sub_80F0D60(PokeNews player1[16], PokeNews player2[16], PokeNews player3[16
}
}
-void sub_80F0E58(PokeNews *dest[16], PokeNews *src[16])
+static void sub_80F0E58(PokeNews *dest[16], PokeNews *src[16])
{
PokeNews *ptr1;
PokeNews *ptr2;
@@ -4691,7 +4512,7 @@ void sub_80F0E58(PokeNews *dest[16], PokeNews *src[16])
sub_80F0E84(ptr1, ptr2, sCurTVShowSlot);
}
-bool8 sub_80F0E84(PokeNews *dest, PokeNews *src, s8 slot)
+static bool8 sub_80F0E84(PokeNews *dest, PokeNews *src, s8 slot)
{
u8 i;
u8 kind;
@@ -4713,7 +4534,7 @@ bool8 sub_80F0E84(PokeNews *dest, PokeNews *src, s8 slot)
return TRUE;
}
-s8 sub_80F0ECC(PokeNews *pokeNews, u8 idx)
+static s8 sub_80F0ECC(PokeNews *pokeNews, u8 idx)
{
if (pokeNews[idx].kind == POKENEWS_NONE)
{
@@ -4722,7 +4543,7 @@ s8 sub_80F0ECC(PokeNews *pokeNews, u8 idx)
return idx;
}
-void sub_80F0EEC(void)
+static void sub_80F0EEC(void)
{
u8 i;
@@ -4736,7 +4557,7 @@ void sub_80F0EEC(void)
sub_80EEEB8();
}
-void sub_80F0F24(void)
+static void sub_80F0F24(void)
{
u8 i;
@@ -4759,7 +4580,7 @@ else \
(langptr) = langfix; \
}
-void sub_80F0F64(TVShow *show, u32 language)
+static void sub_80F0F64(TVShow *show, u32 language)
{
int i;
TVShow **r4;
@@ -4841,7 +4662,7 @@ void sub_80F1208(TVShow *shows)
}
}
-void sub_80F1254(TVShow *shows)
+static void sub_80F1254(TVShow *shows)
{
TVShow *curShow;
@@ -4866,7 +4687,7 @@ u8 TV_GetStringLanguage(u8 *str)
return IsStringJapanese(str) ? LANGUAGE_JAPANESE : LANGUAGE_ENGLISH;
}
-void sub_80F12A4(TVShow *shows)
+static void sub_80F12A4(TVShow *shows)
{
TVShow *curShow;
@@ -5106,7 +4927,7 @@ void DoTVShow(void)
}
}
-void DoTVShowBravoTrainerPokemonProfile(void)
+static void DoTVShowBravoTrainerPokemonProfile(void)
{
TVShow *show;
u8 state;
@@ -5178,7 +4999,7 @@ void DoTVShowBravoTrainerPokemonProfile(void)
ShowFieldMessage(sTVBravoTrainerTextGroup[state]);
}
-void DoTVShowBravoTrainerBattleTower(void)
+static void DoTVShowBravoTrainerBattleTower(void)
{
TVShow *show;
u8 state;
@@ -5275,7 +5096,7 @@ void DoTVShowBravoTrainerBattleTower(void)
ShowFieldMessage(sTVBravoTrainerBattleTowerTextGroup[state]);
}
-void DoTVShowTodaysSmartShopper(void)
+static void DoTVShowTodaysSmartShopper(void)
{
TVShow *show;
u8 state;
@@ -5299,7 +5120,7 @@ void DoTVShowTodaysSmartShopper(void)
break;
case 1:
TVShowConvertInternationalString(gStringVar1, show->smartshopperShow.playerName, show->smartshopperShow.language);
- StringCopy(gStringVar2, ItemId_GetItem(show->smartshopperShow.itemIds[0])->name);
+ StringCopy(gStringVar2, ItemId_GetName(show->smartshopperShow.itemIds[0]));
TV_PrintIntToStringVar(2, show->smartshopperShow.itemAmounts[0]);
sTVShowState += 1 + (Random() % 4);
break;
@@ -5327,7 +5148,7 @@ void DoTVShowTodaysSmartShopper(void)
}
break;
case 6:
- StringCopy(gStringVar2, ItemId_GetItem(show->smartshopperShow.itemIds[1])->name);
+ StringCopy(gStringVar2, ItemId_GetName(show->smartshopperShow.itemIds[1]));
TV_PrintIntToStringVar(2, show->smartshopperShow.itemAmounts[1]);
if (show->smartshopperShow.itemIds[2] != ITEM_NONE)
{
@@ -5343,7 +5164,7 @@ void DoTVShowTodaysSmartShopper(void)
}
break;
case 7:
- StringCopy(gStringVar2, ItemId_GetItem(show->smartshopperShow.itemIds[2])->name);
+ StringCopy(gStringVar2, ItemId_GetName(show->smartshopperShow.itemIds[2]));
TV_PrintIntToStringVar(2, show->smartshopperShow.itemAmounts[2]);
if (show->smartshopperShow.priceReduced == TRUE)
{
@@ -5380,7 +5201,7 @@ void DoTVShowTodaysSmartShopper(void)
break;
case 11:
TVShowConvertInternationalString(gStringVar1, show->smartshopperShow.playerName, show->smartshopperShow.language);
- StringCopy(gStringVar2, ItemId_GetItem(show->smartshopperShow.itemIds[0])->name);
+ StringCopy(gStringVar2, ItemId_GetName(show->smartshopperShow.itemIds[0]));
if (show->smartshopperShow.priceReduced == TRUE)
{
sTVShowState = 8;
@@ -5398,7 +5219,7 @@ void DoTVShowTodaysSmartShopper(void)
ShowFieldMessage(sTVTodaysSmartShopperTextGroup[state]);
}
-void DoTVShowTheNameRaterShow(void)
+static void DoTVShowTheNameRaterShow(void)
{
TVShow *show;
u8 state;
@@ -5496,7 +5317,7 @@ void DoTVShowTheNameRaterShow(void)
ShowFieldMessage(sTVNameRaterTextGroup[state]);
}
-void DoTVShowPokemonTodaySuccessfulCapture(void)
+static void DoTVShowPokemonTodaySuccessfulCapture(void)
{
TVShow *show;
u8 state;
@@ -5523,7 +5344,7 @@ void DoTVShowPokemonTodaySuccessfulCapture(void)
sTVShowState = 2;
break;
case 2:
- StringCopy(gStringVar2, ItemId_GetItem(show->pokemonToday.ball)->name);
+ StringCopy(gStringVar2, ItemId_GetName(show->pokemonToday.ball));
TV_PrintIntToStringVar(2, show->pokemonToday.nBallsUsed);
if (show->pokemonToday.nBallsUsed < 4)
{
@@ -5574,7 +5395,7 @@ void DoTVShowPokemonTodaySuccessfulCapture(void)
ShowFieldMessage(sTVPokemonTodaySuccessfulTextGroup[state]);
}
-void DoTVShowPokemonTodayFailedCapture(void)
+static void DoTVShowPokemonTodayFailedCapture(void)
{
TVShow *show;
u8 state;
@@ -5627,7 +5448,7 @@ void DoTVShowPokemonTodayFailedCapture(void)
ShowFieldMessage(sTVPokemonTodayFailedTextGroup[state]);
}
-void DoTVShowPokemonFanClubLetter(void)
+static void DoTVShowPokemonFanClubLetter(void)
{
TVShow *show;
u8 state;
@@ -5681,7 +5502,7 @@ void DoTVShowPokemonFanClubLetter(void)
ShowFieldMessage(sTVFanClubTextGroup[state]);
}
-void DoTVShowRecentHappenings(void)
+static void DoTVShowRecentHappenings(void)
{
TVShow *show;
u8 state;
@@ -5716,7 +5537,7 @@ void DoTVShowRecentHappenings(void)
ShowFieldMessage(sTVRecentHappeninssTextGroup[state]);
}
-void DoTVShowPokemonFanClubOpinions(void)
+static void DoTVShowPokemonFanClubOpinions(void)
{
TVShow *show;
u8 state;
@@ -5749,12 +5570,12 @@ void DoTVShowPokemonFanClubOpinions(void)
ShowFieldMessage(sTVFanClubOpinionsTextGroup[state]);
}
-void DoTVShowDummiedOut(void)
+static void DoTVShowDummiedOut(void)
{
}
-void DoTVShowPokemonNewsMassOutbreak(void)
+static void DoTVShowPokemonNewsMassOutbreak(void)
{
TVShow *show;
@@ -5766,7 +5587,7 @@ void DoTVShowPokemonNewsMassOutbreak(void)
ShowFieldMessage(sTVMassOutbreakTextGroup[sTVShowState]);
}
-void DoTVShowPokemonContestLiveUpdates(void)
+static void DoTVShowPokemonContestLiveUpdates(void)
{
TVShow *show;
u8 state;
@@ -6113,7 +5934,7 @@ void DoTVShowPokemonContestLiveUpdates(void)
ShowFieldMessage(sTVContestLiveUpdatesTextGroup[state]);
}
-void DoTVShowPokemonBattleUpdate(void)
+static void DoTVShowPokemonBattleUpdate(void)
{
TVShow *show;
u8 state;
@@ -6150,13 +5971,13 @@ void DoTVShowPokemonBattleUpdate(void)
break;
case 2:
TVShowConvertInternationalString(gStringVar1, show->battleUpdate.playerName, show->battleUpdate.language);
- StringCopy(gStringVar2, gSpeciesNames[show->battleUpdate.species2]);
+ StringCopy(gStringVar2, gSpeciesNames[show->battleUpdate.speciesPlayer]);
StringCopy(gStringVar3, gMoveNames[show->battleUpdate.move]);
sTVShowState = 3;
break;
case 3:
TVShowConvertInternationalString(gStringVar1, show->battleUpdate.linkOpponentName, show->battleUpdate.linkOpponentLanguage);
- StringCopy(gStringVar2, gSpeciesNames[show->battleUpdate.species]);
+ StringCopy(gStringVar2, gSpeciesNames[show->battleUpdate.speciesOpponent]);
sTVShowState = 4;
break;
case 4:
@@ -6171,21 +5992,21 @@ void DoTVShowPokemonBattleUpdate(void)
break;
case 6:
TVShowConvertInternationalString(gStringVar1, show->battleUpdate.playerName, show->battleUpdate.language);
- StringCopy(gStringVar2, gSpeciesNames[show->battleUpdate.species2]);
+ StringCopy(gStringVar2, gSpeciesNames[show->battleUpdate.speciesPlayer]);
StringCopy(gStringVar3, gMoveNames[show->battleUpdate.move]);
sTVShowState = 7;
break;
case 7:
TVShowConvertInternationalString(gStringVar1, show->battleUpdate.playerName, show->battleUpdate.language);
TVShowConvertInternationalString(gStringVar2, show->battleUpdate.linkOpponentName, show->battleUpdate.linkOpponentLanguage);
- StringCopy(gStringVar3, gSpeciesNames[show->battleUpdate.species]);
+ StringCopy(gStringVar3, gSpeciesNames[show->battleUpdate.speciesOpponent]);
TVShowDone();
break;
}
ShowFieldMessage(sTVPokemonBattleUpdateTextGroup[state]);
}
-void DoTVShow3CheersForPokeblocks(void)
+static void DoTVShow3CheersForPokeblocks(void)
{
TVShow *show;
u8 state;
@@ -6356,7 +6177,7 @@ void DoTVShowInSearchOfTrainers(void)
ShowFieldMessage(sTVInSearchOfTrainersTextGroup[state]);
}
-void DoTVShowPokemonAngler(void)
+static void DoTVShowPokemonAngler(void)
{
TVShow *show;
u8 state;
@@ -6390,7 +6211,7 @@ void DoTVShowPokemonAngler(void)
ShowFieldMessage(sTVPokemonAnslerTextGroup[state]);
}
-void DoTVShowTheWorldOfMasters(void)
+static void DoTVShowTheWorldOfMasters(void)
{
TVShow *show;
u8 state;
@@ -6420,7 +6241,7 @@ void DoTVShowTheWorldOfMasters(void)
ShowFieldMessage(sTVWorldOfMastersTextGroup[state]);
}
-void DoTVShowTodaysRivalTrainer(void)
+static void DoTVShowTodaysRivalTrainer(void)
{
TVShow *show;
u8 state;
@@ -6569,7 +6390,7 @@ void DoTVShowTodaysRivalTrainer(void)
ShowFieldMessage(sTVTodaysRivalTrainerTextGroup[state]);
}
-void DoTVShowDewfordTrendWatcherNetwork(void)
+static void DoTVShowDewfordTrendWatcherNetwork(void)
{
TVShow *show;
u8 state;
@@ -6625,7 +6446,7 @@ void DoTVShowDewfordTrendWatcherNetwork(void)
ShowFieldMessage(sTVDewfordTrendWatcherNetworkTextGroup[state]);
}
-void DoTVShowHoennTreasureInvestigators(void)
+static void DoTVShowHoennTreasureInvestigators(void)
{
TVShow *show;
u8 state;
@@ -6636,7 +6457,7 @@ void DoTVShowHoennTreasureInvestigators(void)
switch (state)
{
case 0:
- StringCopy(gStringVar1, ItemId_GetItem(show->treasureInvestigators.item)->name);
+ StringCopy(gStringVar1, ItemId_GetName(show->treasureInvestigators.item));
if (show->treasureInvestigators.location == MAPSEC_DYNAMIC)
{
switch (show->treasureInvestigators.mapDataId)
@@ -6655,13 +6476,13 @@ void DoTVShowHoennTreasureInvestigators(void)
}
break;
case 1:
- StringCopy(gStringVar1, ItemId_GetItem(show->treasureInvestigators.item)->name);
+ StringCopy(gStringVar1, ItemId_GetName(show->treasureInvestigators.item));
TVShowConvertInternationalString(gStringVar2, show->treasureInvestigators.playerName, show->treasureInvestigators.language);
GetMapName(gStringVar3, show->treasureInvestigators.location, 0);
TVShowDone();
break;
case 2:
- StringCopy(gStringVar1, ItemId_GetItem(show->treasureInvestigators.item)->name);
+ StringCopy(gStringVar1, ItemId_GetName(show->treasureInvestigators.item));
TVShowConvertInternationalString(gStringVar2, show->treasureInvestigators.playerName, show->treasureInvestigators.language);
TVShowDone();
break;
@@ -6669,7 +6490,7 @@ void DoTVShowHoennTreasureInvestigators(void)
ShowFieldMessage(sTVHoennTreasureInvestisatorsTextGroup[state]);
}
-void DoTVShowFindThatGamer(void)
+static void DoTVShowFindThatGamer(void)
{
TVShow *show;
u8 state;
@@ -6743,7 +6564,7 @@ void DoTVShowFindThatGamer(void)
ShowFieldMessage(sTVFindThatGamerTextGroup[state]);
}
-void DoTVShowBreakingNewsTV(void)
+static void DoTVShowBreakingNewsTV(void)
{
TVShow *show;
u8 state;
@@ -6777,7 +6598,7 @@ void DoTVShowBreakingNewsTV(void)
break;
case 3:
TV_PrintIntToStringVar(0, show->breakingNews.balls);
- StringCopy(gStringVar2, ItemId_GetItem(show->breakingNews.caughtMonBall)->name);
+ StringCopy(gStringVar2, ItemId_GetName(show->breakingNews.caughtMonBall));
sTVShowState = 4;
break;
case 4:
@@ -6846,7 +6667,7 @@ void DoTVShowBreakingNewsTV(void)
ShowFieldMessage(sTVBreakinsNewsTextGroup[state]);
}
-void DoTVShowSecretBaseVisit(void)
+static void DoTVShowSecretBaseVisit(void)
{
TVShow *show;
u8 state;
@@ -6942,7 +6763,7 @@ void DoTVShowSecretBaseVisit(void)
ShowFieldMessage(sTVSecretBaseVisitTextGroup[state]);
}
-void DoTVShowPokemonLotteryWinnerFlashReport(void)
+static void DoTVShowPokemonLotteryWinnerFlashReport(void)
{
TVShow *show;
u8 state;
@@ -6967,12 +6788,12 @@ void DoTVShowPokemonLotteryWinnerFlashReport(void)
{
StringCopy(gStringVar2, gText_Third);
}
- StringCopy(gStringVar3, ItemId_GetItem(show->lottoWinner.item)->name);
+ StringCopy(gStringVar3, ItemId_GetName(show->lottoWinner.item));
TVShowDone();
ShowFieldMessage(sTVPokemonLotteryWinnerFlashReportTextGroup[state]);
}
-void DoTVShowThePokemonBattleSeminar(void)
+static void DoTVShowThePokemonBattleSeminar(void)
{
TVShow *show;
u8 state;
@@ -7036,7 +6857,7 @@ void DoTVShowThePokemonBattleSeminar(void)
ShowFieldMessage(sTVThePokemonBattleSeminarTextGroup[state]);
}
-void DoTVShowTrainerFanClubSpecial(void)
+static void DoTVShowTrainerFanClubSpecial(void)
{
TVShow *show;
u8 state;
@@ -7101,7 +6922,7 @@ void DoTVShowTrainerFanClubSpecial(void)
ShowFieldMessage(sTVTrainerFanClubSpecialTextGroup[state]);
}
-void DoTVShowTrainerFanClub(void)
+static void DoTVShowTrainerFanClub(void)
{
TVShow *show;
u8 state;
@@ -7188,7 +7009,7 @@ void DoTVShowTrainerFanClub(void)
ShowFieldMessage(sTVTrainerFanClubTextGroup[state]);
}
-void DoTVShowSpotTheCuties(void)
+static void DoTVShowSpotTheCuties(void)
{
TVShow *show;
u8 state;
@@ -7293,7 +7114,7 @@ void DoTVShowSpotTheCuties(void)
ShowFieldMessage(sTVCutiesTextGroup[state]);
}
-void DoTVShowPokemonNewsBattleFrontier(void)
+static void DoTVShowPokemonNewsBattleFrontier(void)
{
TVShow *show;
u8 state;
@@ -7442,7 +7263,7 @@ void DoTVShowPokemonNewsBattleFrontier(void)
ShowFieldMessage(sTVPokemonNewsBattleFrontierTextGroup[state]);
}
-void DoTVShowWhatsNo1InHoennToday(void)
+static void DoTVShowWhatsNo1InHoennToday(void)
{
TVShow *show;
u8 state;
@@ -7557,7 +7378,7 @@ u8 sub_80F51AC(TVShow *show, u8 a1)
return 0;
}
-void DoTVShowSecretBaseSecrets(void)
+static void DoTVShowSecretBaseSecrets(void)
{
TVShow *show;
u8 state;
@@ -7709,7 +7530,7 @@ void DoTVShowSecretBaseSecrets(void)
sTVShowState = show->secretBaseSecrets.savedState;
break;
case 19:
- StringCopy(gStringVar2, ItemId_GetItem(show->secretBaseSecrets.item)->name);
+ StringCopy(gStringVar2, ItemId_GetName(show->secretBaseSecrets.item));
sTVShowState = show->secretBaseSecrets.savedState;
break;
case 20:
@@ -7795,7 +7616,7 @@ void DoTVShowSecretBaseSecrets(void)
ShowFieldMessage(sTVSecretBaseSecretsTextGroup[state]);
}
-void DoTVShowSafariFanClub(void)
+static void DoTVShowSafariFanClub(void)
{
TVShow *show;
u8 state;
@@ -7882,7 +7703,7 @@ void DoTVShowSafariFanClub(void)
ShowFieldMessage(sTVSafariFanClubTextGroup[state]);
}
-void DoTVShowPokemonContestLiveUpdates2(void)
+static void DoTVShowPokemonContestLiveUpdates2(void)
{
TVShow *show;
u8 state;
diff --git a/src/util.c b/src/util.c
index 58088c3ee..88be4e4a1 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)
+NAKED void CopySpriteTiles(u8 shape, u8 size, u8 *tiles, u16 *tilemap, u8 *output)
{
asm("\n\
.syntax unified\n\
diff --git a/src/walda_phrase.c b/src/walda_phrase.c
index 59fd3fedb..0aa6f5aca 100644
--- a/src/walda_phrase.c
+++ b/src/walda_phrase.c
@@ -6,15 +6,14 @@
#include "main.h"
#include "text.h"
#include "new_game.h"
-
-extern void (*gFieldCallback)(void);
+#include "overworld.h"
extern const u8 gText_Peekaboo[];
extern u8 *GetWaldaPhrasePtr(void);
extern bool32 IsWaldaPhraseEmpty(void);
extern void sub_80AF168(void);
-extern void c2_exit_to_overworld_2_switch(void);
+extern void CB2_ReturnToField(void);
extern void SetWaldaPhrase(const u8 *src);
extern void SetWaldaWallpaperPatternId(u8 patternId);
extern void SetWaldaWallpaperIconId(u8 iconId);
@@ -80,7 +79,7 @@ static void CB2_HandleGivenWaldaPhrase(void)
StringCopy(gStringVar1, GetWaldaPhrasePtr());
gFieldCallback = sub_80AF168;
- SetMainCallback2(c2_exit_to_overworld_2_switch);
+ SetMainCallback2(CB2_ReturnToField);
}
static u32 GetWaldaPhraseInputCase(u8 *inputPtr)
diff --git a/src/window.c b/src/window.c
index 9a892d079..9a52a5a20 100644
--- a/src/window.c
+++ b/src/window.c
@@ -1,9 +1,14 @@
#include "global.h"
#include "window.h"
#include "malloc.h"
-
-extern u8 gUnknown_03002F60;
-extern void* gUnknown_03002F70[];
+#include "bg.h"
+#include "blit.h"
+
+u32 filler_03002F58;
+u32 filler_03002F5C;
+u8 gUnknown_03002F60;
+u32 filler_03002F64;
+void *gUnknown_03002F70[4];
extern u32 gUnneededFireRedVariable;
#define WINDOWS_MAX 32
@@ -12,19 +17,6 @@ EWRAM_DATA struct Window gWindows[WINDOWS_MAX] = {0};
EWRAM_DATA static struct Window* sWindowPtr = NULL;
EWRAM_DATA static u16 sWindowSize = 0;
-extern void* GetBgTilemapBuffer(u8 bg);
-extern int DummiedOutFireRedLeafGreenTileAllocFunc(int, int, int, int);
-extern u16 GetBgAttribute(u8 bg, u8 attributeId);
-extern void SetBgTilemapBuffer(u8 bg, void *tilemap);
-extern void CopyBgTilemapBufferToVram(u8 bg);
-extern u8 LoadBgTiles(u8 bg, void *src, u16 size, u16 destOffset);
-extern void WriteSequenceToBgTilemapBuffer(u8 bg, u16 firstTileNum, u8 x, u8 y, u8 width, u8 height, u8 paletteSlot, u16 tileNumDelta);
-extern void FillBgTilemapBufferRect(u8 bg, u16 tileNum, u8 x, u8 y, u8 width, u8 height, u8 palette);
-extern void BlitBitmapRect4Bit(struct Bitmap *src, struct Bitmap *dest, u16 srcX, u16 srcY, u16 destX, u16 destY, u16 width, u16 height, u8 colorKey);
-extern void BlitBitmapRect4BitTo8Bit(struct Bitmap *src, struct Bitmap *dest, u16 srcX, u16 srcY, u16 destX, u16 destY, u16 width, u16 height, u8 colorKey, u8 paletteNum);
-extern void FillBitmapRect4Bit(struct Bitmap *surface, u16 x, u16 y, u16 width, u16 height, u8 fillValue);
-extern void FillBitmapRect8Bit(struct Bitmap *surface, u16 x, u16 y, u16 width, u16 height, u8 fillValue);
-
static u8 GetNumActiveWindowsOnBg(u8 bgId);
static u8 GetNumActiveWindowsOnBg8Bit(u8 bgId);
@@ -127,13 +119,13 @@ u16 AddWindow(const struct WindowTemplate *template)
u8 *allocatedTilemapBuffer;
int i;
- for (win = 0; win < 0x20; ++win)
+ for (win = 0; win < WINDOWS_MAX; ++win)
{
if ((bgLayer = gWindows[win].window.priority) == 0xFF)
break;
}
- if (win == 0x20)
+ if (win == WINDOWS_MAX)
return 0xFF;
bgLayer = template->priority;
@@ -196,13 +188,13 @@ int AddWindowWithoutTileMap(const struct WindowTemplate *template)
u8 bgLayer;
int allocatedBaseBlock;
- for (win = 0; win < 0x20; ++win)
+ for (win = 0; win < WINDOWS_MAX; ++win)
{
if (gWindows[win].window.priority == 0xFF)
break;
}
- if (win == 0x20)
+ if (win == WINDOWS_MAX)
return 0xFF;
bgLayer = template->priority;
diff --git a/sym_bss.txt b/sym_bss.txt
index f930a5b98..089f25761 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"
@@ -26,14 +28,8 @@
.include "src/script_menu.o"
.include "src/record_mixing.o"
.include "src/tv.o"
-
- .space 1 @ TODO: define this u32 in mauville_old_man
-gUnknown_03001178: @ 3001178
- .space 0x4
-
-gUnknown_0300117C: @ 300117C
- .space 0x4
-
+ .include "src/mauville_old_man.o"
+ .include "src/menu_helpers.o"
.include "src/region_map.o"
gUnknown_03001188: @ 3001188
@@ -55,7 +51,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 3d3edcd55..64bfa88ec 100644
--- a/sym_common.txt
+++ b/sym_common.txt
@@ -1,270 +1,36 @@
.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"
.include "battle_main.o"
-
-gRngValue: @ 3005D80
- .space 0x4
-
-gRng2Value: @ 3005D84
- .space 0x4
-
-gFlashMemoryPresent: @ 3005D88
- .space 0x4
-
-gSaveBlock1Ptr: @ 3005D8C
- .space 0x4
-
-gSaveBlock2Ptr: @ 3005D90
- .space 0x4
-
-gPokemonStoragePtr: @ 3005D94
- .space 0x4
+ .include "random.o"
+ .include "load_save.o"
gInGameOpponentsNo: @ 3005D98
.space 0x4
-gUnknown_03005D9C: @ 3005D9C
- .space 0x4
-
-gUnknown_03005DA0: @ 3005DA0
- .space 0x4
-
-gUnknown_03005DA4: @ 3005DA4
- .space 0x4
-
-gUnknown_03005DA8: @ 3005DA8
+gBGTilemapBuffers1: @ 3005D9C
.space 0x4
-gFieldCallback: @ 3005DAC
+gBGTilemapBuffers2: @ 3005DA0
.space 0x4
-gUnknown_03005DB0: @ 3005DB0
+gBGTilemapBuffers3: @ 3005DA4
.space 0x4
-gUnknown_03005DB4: @ 3005DB4
- .space 0x4
-
-gUnknown_03005DB8: @ 3005DB8
- .space 0x8
-
-gUnknown_03005DC0: @ 3005DC0
- .space 0x10
-
-gUnknown_03005DD0: @ 3005DD0
- .space 0x18
-
-gUnknown_03005DE8: @ 3005DE8
- .space 0x4
-
-gUnknown_03005DEC: @ 3005DEC
- .space 0x4
+ .include "overworld.o"
+ .include "fieldmap.o"
+ .include "field_camera.o"
gSelectedMapObject: @ 3005DF0
.space 0x4
-gUnknown_03005DF4: @ 3005DF4
+gMenuCallback: @ 3005DF4
.space 0x4
.include "sound.o"
@@ -281,9 +47,7 @@ gUnknown_030060B8: @ 30060B8
.space 0x4
.include "tv.o"
-
-gUnknown_03006130: @ 3006130
- .space 0x34
+ .include "mauville_old_man.o"
gUnknown_03006164: @ 3006164
.space 0x4
@@ -336,7 +100,7 @@ gCB2_AfterEvolution: @ 30061E8
gUnknown_030061EC: @ 30061EC
.space 0x4
- .include"save.o"
+ .include "save.o"
.space 0x8
@@ -349,11 +113,7 @@ gUnknown_03006294: @ 3006294
gUnknown_03006298: @ 3006298
.space 0x8
-gUnknown_030062A0: @ 30062A0
- .space 0x10
-
-gUnknown_030062B0: @ 30062B0
- .space 0x2C
+ .include "intro.o"
gUnknown_030062DC: @ 30062DC
.space 0x4
@@ -376,11 +136,7 @@ gUnknown_030062F0: @ 30062F0
gUnknown_030062F4: @ 30062F4
.space 0xC
-gUnknown_03006300: @ 3006300
- .space 0x10
-
-gMultiuseListMenuTemplate: @ 3006310
- .space 0x18
+ .include "list_menu.o"
gUnknown_03006328: @ 3006328
.space 0x48
@@ -411,4 +167,4 @@ gUnknown_03007898: @ 3007898
.space 0x8
gUnknown_030078A0: @ 30078A0
- .space 0x660
+ .space 0xC
diff --git a/sym_ewram.txt b/sym_ewram.txt
index eb013f4ba..12336a788 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,11 +117,9 @@ gUnknown_02022CFC: @ 2022CFC
gUnknown_02022D00: @ 2022D00
.space 0x4
+@ src/main_menu.c
gUnknown_02022D04: @ 2022D04
- .space 0x2
-
-gUnknown_02022D06: @ 2022D06
- .space 0x2
+ .include "src/main_menu.o"
gUnknown_02022D08: @ 2022D08
.space 0x1
@@ -196,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
@@ -241,14 +177,7 @@ gBattle_WIN1V: @ 2022E2A
.include "src/battle_message.o"
.include "src/battle_main.o"
- .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"
@@ -279,51 +208,11 @@ gDifferentSaveFile: @ 20322D4
gUnknown_020322D5: @ 20322D5
.space 0x3
-gUnknown_020322D8: @ 20322D8
- .space 0x4
-
-gUnknown_020322DC: @ 20322DC
- .space 0x8
-
-gUnknown_020322E4: @ 20322E4
- .space 0x8
-
-gUnknown_020322EC: @ 20322EC
- .space 0x8
-
-gUnknown_020322F4: @ 20322F4
- .space 0x8
-
-gUnknown_020322FC: @ 20322FC
- .space 0x4
-
-gUnknown_02032300: @ 2032300
- .space 0x4
-
-gUnknown_02032304: @ 2032304
- .space 0x2
-
-gUnknown_02032306: @ 2032306
- .space 0x2
-
-gLinkPlayerMapObjects: @ 2032308
- .space 0x10
-
-gUnknown_02032318: @ 2032318
- .space 0x5000
-
-gMapHeader: @ 2037318
- .space 0x1C
-
-gCamera: @ 2037334
- .space 0xC
-
-gUnknown_02037340: @ 2037340
- .space 0x8
-
-gUnknown_02037348: @ 2037348
- .space 0x4
+ .include "src/overworld.o"
+ .include "src/fieldmap.o"
+ .include "src/field_camera.o"
+ .align 2
gUnknown_0203734C: @ 203734C
.space 0x4
@@ -396,10 +285,7 @@ gUnknown_02038BC6: @ 2038BC6
.include "src/battle_setup.o"
.include "src/trainer_see.o"
.include "src/wild_encounter.o"
-
-gFieldEffectArguments: @ 2038C08
- .space 0x20
-
+ .include "src/field_effect.o"
.include "src/scanline_effect.o"
.include "src/option_menu.o"
@@ -417,7 +303,7 @@ gUnknown_02039B52: @ 2039B52
gUnknown_02039B54: @ 2039B54
.space 0x4
-gUnknown_02039B58: @ 2039B58
+gTrainerCards: @ 2039B58
.space 0x14
gUnknown_02039B6C: @ 2039B6C
@@ -507,17 +393,13 @@ gUnknown_02039D88: @ 2039D88
gUnknown_02039D8C: @ 2039D8C
.space 0x4
-gUnknown_02039D90: @ 2039D90
- .space 0x40
+ .include "src/script_movement.o"
gUnknown_02039DD0: @ 2039DD0
.space 0x4
-gUnknown_02039DD4: @ 2039DD4
- .space 0x4
-
-gBagPockets: @ 2039DD8
- .space 0x28
+ .include "src/map_name_popup.o"
+ .include "src/item.o"
gUnknown_02039E00: @ 2039E00
.space 0x100
@@ -612,15 +494,7 @@ gUnknown_02039F90: @ 2039F90
gUnknown_0203A034: @ 203A034
.space 0x4
-gUnknown_0203A038: @ 203A038
- .space 0xC
-
-gUnknown_0203A044: @ 203A044
- .space 0x4
-
-gUnknown_0203A048: @ 203A048
- .space 0x4
-
+ .include "src/rotating_gate.o"
.include "src/safari_zone.o"
gUnknown_0203A0F4: @ 203A0F4
@@ -646,27 +520,10 @@ gUnknown_0203A11C: @ 203A11C
gUnknown_0203A120: @ 203A120
.space 0x4
-
-gUnknown_0203A124: @ 203A124
- .space 0x4
-
-gUnknown_0203A128: @ 203A128
- .space 0x4
-
-gUnknown_0203A12C: @ 203A12C
- .space 0x4
-
-gUnknown_0203A130: @ 203A130
- .space 0x4
-
+ .include "src/mon_markings.o"
+ .include "src/mauville_old_man.o"
.include "src/mail.o"
-
-gUnknown_0203A138: @ 203A138
- .space 0x8
-
-gUnknown_0203A140: @ 203A140
- .space 0x4
-
+ .include "src/menu_helpers.o"
.include "src/region_map.o"
.include "src/decoration.o"
.align 2
@@ -813,11 +670,7 @@ gUnknown_0203AB6F: @ 203AB6F
gUnknown_0203AB70: @ 203AB70
.space 0x4
-gResultsWindowId: @ 203AB74
- .space 0x4
-
-gUnknown_0203AB78: @ 203AB78
- .space 0x4
+ .include "src/battle_records.o"
gUnknown_0203AB7C: @ 203AB7C
.space 0x4
@@ -894,53 +747,15 @@ gUnknown_0203BC8C: @ 203BC8C
.space 0x4
.include "src/use_pokeblock.o"
-
-gUnknown_0203BCB0: @ 203BCB0
- .space 0x4
-
-gUnknown_0203BCB4: @ 203BCB4
- .space 0x4
-
-gUnknown_0203BCB8: @ 203BCB8
- .space 0x2
-
-gUnknown_0203BCBA: @ 203BCBA
- .space 0x2
-
-gUnknown_0203BCBC: @ 203BCBC
- .space 0x8
-
-gUnknown_0203BCC4: @ 203BCC4
- .space 0x4
-
-gUnknown_0203BCC8: @ 203BCC8
- .space 0x4
-
-gUnknown_0203BCCC: @ 203BCCC
- .space 0x4
-
+ .include "src/player_pc.o"
+ .include "src/intro.o"
.include "src/field_region_map.o"
gUnknown_0203BCD4: @ 203BCD4
.space 0x4
.include "src/hall_of_fame.o"
-
-gUnknown_0203BCE0: @ 203BCE0
- .space 0x2
-
-gUnknown_0203BCE2: @ 203BCE2
- .space 0x2
-
-gHasHallOfFameRecords: @ 203BCE4
- .space 0x1
-
-gUnknown_0203BCE5: @ 203BCE5
- .space 0x3
-
-gUnknown_0203BCE8: @ 203BCE8
- .space 0x4
-
+ .include "src/credits.o"
.include "src/lottery_corner.o"
.include "src/diploma.o"
.include "src/berry_tag_screen.o"
@@ -951,16 +766,7 @@ gBraillePuzzleCallbackFlag: @ 203BD14
.space 0x4
.include "src/pokeblock_feed.o"
-
-gUnknown_0203BD24: @ 203BD24
- .space 0x2
-
-gUnknown_0203BD26: @ 203BD26
- .space 0x2
-
-gUnknown_0203BD28: @ 203BD28
- .space 0x4
-
+ .include "src/intro_credits_graphics.o"
.include "src/recorded_battle.o"
.include "src/battle_dome_cards.o"
.include "src/lilycove_lady.o"
@@ -1017,37 +823,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
@@ -1100,23 +878,8 @@ gUnknown_0203CEFC: @ 203CEFC
gUnknown_0203CF00: @ 203CF00
.space 0x4
-gUnknown_0203CF04: @ 203CF04
- .space 0x4
-
-gUnknown_0203CF08: @ 203CF08
- .space 0x4
-
-gUnknown_0203CF0C: @ 203CF0C
- .space 0x4
-
-gUnknown_0203CF10: @ 203CF10
- .space 0x4
-
-gUnknown_0203CF14: @ 203CF14
- .space 0x4
-
-gUnknown_0203CF18: @ 203CF18
- .space 0x4
+ .include "src/fossil_specials.o"
+ .include "src/fldeff_groundshake.o"
gUnknown_0203CF1C: @ 203CF1C
.space 0x4