summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcus Huderle <huderlem@gmail.com>2017-09-30 16:41:16 -0700
committerMarcus Huderle <huderlem@gmail.com>2017-09-30 16:41:16 -0700
commit4c5bfdc153a8484c00aae30ed22badf006d7f8d9 (patch)
tree47bfb4286c03f021d48ffadde5da675a9f903f61
parentaaa09d735451cced915bc6bacfce45ced8e33fa1 (diff)
parentf74d4742f597a423b7a8685d72c06597c8c78db7 (diff)
Merge remote-tracking branch 'upstream/master' into name_labels
-rw-r--r--README.md18
-rw-r--r--asm/battle_2.s12
-rw-r--r--asm/battle_5.s4591
-rw-r--r--asm/battle_9.s1424
-rw-r--r--asm/battle_anim_81258BC.s1396
-rw-r--r--asm/battle_tower.s10
-rw-r--r--asm/battle_transition.s6254
-rw-r--r--asm/cable_club.s1671
-rw-r--r--asm/cute_sketch.s439
-rw-r--r--asm/daycare.s2399
-rw-r--r--asm/evolution_graphics.s1829
-rw-r--r--asm/evolution_scene.s6717
-rw-r--r--asm/field_effect_helpers.s4349
-rw-r--r--asm/field_ground_effect.s1302
-rw-r--r--asm/field_map_obj.s628
-rw-r--r--asm/fldeff_80C5CD4.s68
-rw-r--r--asm/macros/event.inc6
-rw-r--r--asm/mauville_old_man.s1522
-rw-r--r--asm/party_menu.s24
-rw-r--r--asm/pokeblock_feed.s1836
-rw-r--r--asm/pokedex_area_screen.s6
-rw-r--r--asm/pokemon_menu.s3438
-rw-r--r--asm/pokenav.s6
-rw-r--r--asm/reshow_battle_screen.s1097
-rw-r--r--asm/shop.s2613
-rw-r--r--asm/trade.s8
-rw-r--r--common_syms/berry_blender.txt2
-rw-r--r--common_syms/cute_sketch.txt0
-rw-r--r--common_syms/egg_hatch.txt2
-rw-r--r--common_syms/evolution_scene.txt1
-rw-r--r--common_syms/overworld.txt (renamed from common_syms/rom4.txt)0
-rw-r--r--common_syms/pokeblock_feed.txt12
-rw-r--r--common_syms/pokemon_menu.txt2
-rw-r--r--data-de/event_scripts.s111
-rw-r--r--data-de/field_move_scripts.inc20
-rw-r--r--data-de/text/bard.inc18
-rw-r--r--data-de/text/giddy.inc8
-rw-r--r--data-de/text/hipster.inc8
-rw-r--r--data-de/text/storyteller.inc236
-rw-r--r--data-de/text/trader.inc28
-rw-r--r--data/battle_811DA74.s64
-rw-r--r--data/battle_anim_81258BC.s64
-rw-r--r--data/battle_anim_8137220.s64
-rw-r--r--data/battle_moves.s (renamed from data/battle_moves.inc)5
-rw-r--r--data/battle_scripts_1.s6
-rw-r--r--data/battle_transition.s399
-rw-r--r--data/data2b.s210
-rw-r--r--data/daycare.s17
-rw-r--r--data/egg_moves.inc1306
-rw-r--r--data/event_scripts.s114
-rw-r--r--data/evolution_graphics.s70
-rw-r--r--data/evolution_scene.s14
-rw-r--r--data/field_effect_helpers.s37
-rw-r--r--data/field_ground_effect.s72
-rw-r--r--data/field_move_scripts.inc20
-rw-r--r--data/maps/events/FieryPath.inc12
-rw-r--r--data/maps/events/GraniteCave_B2F.inc14
-rw-r--r--data/maps/events/PetalburgWoods.inc4
-rw-r--r--data/maps/events/Route102.inc4
-rw-r--r--data/maps/events/Route103.inc10
-rw-r--r--data/maps/events/Route104.inc22
-rw-r--r--data/maps/events/Route110.inc6
-rw-r--r--data/maps/events/Route110_TrickHousePuzzle1.inc30
-rw-r--r--data/maps/events/Route110_TrickHousePuzzle3.inc12
-rw-r--r--data/maps/events/Route110_TrickHousePuzzle4.inc22
-rw-r--r--data/maps/events/Route111.inc14
-rw-r--r--data/maps/events/Route112.inc8
-rw-r--r--data/maps/events/Route114.inc16
-rw-r--r--data/maps/events/Route115.inc12
-rw-r--r--data/maps/events/Route116.inc16
-rw-r--r--data/maps/events/Route117.inc8
-rw-r--r--data/maps/events/Route118.inc8
-rw-r--r--data/maps/events/Route119.inc14
-rw-r--r--data/maps/events/Route120.inc26
-rw-r--r--data/maps/events/Route121.inc22
-rw-r--r--data/maps/events/Route123.inc42
-rw-r--r--data/maps/events/Route130.inc2
-rw-r--r--data/maps/events/RusturfTunnel.inc4
-rw-r--r--data/maps/events/SafariZone_Northeast.inc12
-rw-r--r--data/maps/events/SeafloorCavern_Room1.inc6
-rw-r--r--data/maps/events/SeafloorCavern_Room2.inc18
-rw-r--r--data/maps/events/SeafloorCavern_Room3.inc18
-rw-r--r--data/maps/events/SeafloorCavern_Room5.inc12
-rw-r--r--data/maps/events/SeafloorCavern_Room8.inc24
-rw-r--r--data/maps/events/ShoalCave_LowTideLowerRoom.inc2
-rw-r--r--data/maps/events/VictoryRoad_B1F.inc28
-rw-r--r--data/mauville_old_man.s101
-rw-r--r--data/mon_pokeblock_anims.inc133
-rw-r--r--data/pokeblock_feed.s225
-rw-r--r--data/pokemon_menu.s82
-rw-r--r--data/rom4.s66
-rw-r--r--data/scripts/bard.inc67
-rw-r--r--data/scripts/berry_tree.inc2
-rw-r--r--data/scripts/cable_club.inc8
-rw-r--r--data/scripts/day_care.inc2
-rw-r--r--data/scripts/giddy.inc51
-rw-r--r--data/scripts/hipster.inc25
-rw-r--r--data/scripts/maps/AncientTomb.inc2
-rw-r--r--data/scripts/maps/BattleTower_BattleRoom.inc4
-rw-r--r--data/scripts/maps/BattleTower_Lobby.inc2
-rw-r--r--data/scripts/maps/CaveOfOrigin_B4F.inc2
-rw-r--r--data/scripts/maps/DesertRuins.inc2
-rw-r--r--data/scripts/maps/IslandCave.inc4
-rw-r--r--data/scripts/maps/LilycoveCity_ContestLobby.inc2
-rw-r--r--data/scripts/maps/LilycoveCity_CoveLilyMotel_2F.inc2
-rw-r--r--data/scripts/maps/LilycoveCity_Harbor.inc2
-rw-r--r--data/scripts/maps/LilycoveCity_MoveDeletersHouse.inc6
-rw-r--r--data/scripts/maps/MossdeepCity_GameCorner_1F.inc2
-rw-r--r--data/scripts/maps/MossdeepCity_GameCorner_B1F.inc2
-rw-r--r--data/scripts/maps/PetalburgCity.inc2
-rw-r--r--data/scripts/maps/Route101.inc4
-rw-r--r--data/scripts/maps/Route110.inc2
-rw-r--r--data/scripts/maps/SkyPillar_Top.inc2
-rw-r--r--data/scripts/maps/SlateportCity.inc2
-rw-r--r--data/scripts/maps/SouthernIsland_Interior.inc2
-rw-r--r--data/scripts/mauville_man.inc357
-rw-r--r--data/scripts/players_house.inc2
-rw-r--r--data/scripts/pokeblocks.inc2
-rw-r--r--data/scripts/storyteller.inc82
-rw-r--r--data/scripts/trader.inc88
-rw-r--r--data/shop.s69
-rw-r--r--data/specials.inc88
-rw-r--r--data/text/bard.inc18
-rw-r--r--data/text/giddy.inc8
-rw-r--r--data/text/hipster.inc8
-rw-r--r--data/text/storyteller.inc236
-rw-r--r--data/text/trader.inc28
-rw-r--r--data/trainer_see.s41
-rw-r--r--include/bard_music.h31
-rw-r--r--include/battle.h43
-rw-r--r--include/battle_message.h15
-rw-r--r--include/battle_setup.h72
-rw-r--r--include/battle_transition.h40
-rw-r--r--include/braille_puzzles.h2
-rw-r--r--include/cable_club.h30
-rw-r--r--include/data/field_map_obj/anim_func_ptrs.h2
-rw-r--r--include/data/field_map_obj/base_oam.h2
-rw-r--r--include/data/field_map_obj/berry_tree_graphics_tables.h2
-rw-r--r--include/data/field_map_obj/callback_subroutine_pointers.h4
-rw-r--r--include/data/field_map_obj/field_effect_object_template_pointers.h2
-rw-r--r--include/data/field_map_obj/field_effect_objects.h2
-rw-r--r--include/data/field_map_obj/map_object_anims.h2
-rw-r--r--include/data/field_map_obj/map_object_graphics_info.h2
-rw-r--r--include/data/field_map_obj/map_object_graphics_info_pointers.h2
-rw-r--r--include/data/field_map_obj/map_object_pic_tables.h2
-rw-r--r--include/data/field_map_obj/map_object_subsprites.h2
-rw-r--r--include/data/pokemon/base_stats.h2
-rw-r--r--include/data/pokemon/cry_ids.h2
-rw-r--r--include/data/pokemon/dex_order.h2
-rw-r--r--include/data/pokemon/egg_moves.h1318
-rw-r--r--include/data/pokemon/evolution.h2
-rw-r--r--include/data/pokemon/experience_tables.h2
-rw-r--r--include/data/pokemon/item_effects.h2
-rw-r--r--include/data/pokemon/level_up_learnset_pointers.h2
-rw-r--r--include/data/pokemon/level_up_learnsets.h2
-rw-r--r--include/data/pokemon/nature_stats.h2
-rw-r--r--include/data/pokemon/spinda_spots.h2
-rw-r--r--include/data/pokemon/tmhm_learnsets.h2
-rw-r--r--include/data/pokemon/trainer_class_lookups.h2
-rw-r--r--include/data2.h11
-rw-r--r--include/daycare.h6
-rw-r--r--include/diploma.h2
-rw-r--r--include/easy_chat.h1036
-rw-r--r--include/event_data.h2
-rw-r--r--include/evolution_graphics.h15
-rw-r--r--include/evolution_scene.h10
-rw-r--r--include/field_camera.h2
-rw-r--r--include/field_door.h2
-rw-r--r--include/field_effect.h4
-rw-r--r--include/field_effect_helpers.h7
-rw-r--r--include/field_map_obj.h64
-rw-r--r--include/field_map_obj_helpers.h2
-rw-r--r--include/field_poison.h2
-rw-r--r--include/gba/m4a_internal.h4
-rw-r--r--include/gba/types.h10
-rw-r--r--include/global.fieldmap.h20
-rw-r--r--include/global.h120
-rw-r--r--include/item_use.h3
-rw-r--r--include/m4a.h5
-rw-r--r--include/mail_data.h2
-rw-r--r--include/map_obj_lock.h2
-rw-r--r--include/mauville_man.h18
-rw-r--r--include/mauville_old_man.h11
-rw-r--r--include/menu.h4
-rw-r--r--include/money.h16
-rw-r--r--include/overworld.h (renamed from include/rom4.h)52
-rw-r--r--include/party_menu.h45
-rw-r--r--include/pokeblock.h26
-rw-r--r--include/pokeblock_feed.h10
-rw-r--r--include/pokemon.h9
-rw-r--r--include/pokemon_menu.h44
-rw-r--r--include/pokemon_storage_system.h2
-rw-r--r--include/rom3.h62
-rw-r--r--include/script.h8
-rw-r--r--include/script_menu.h34
-rw-r--r--include/script_movement.h4
-rw-r--r--include/script_pokemon_80C4.h4
-rw-r--r--include/shop.h36
-rw-r--r--include/songs.h80
-rw-r--r--include/species.h3
-rw-r--r--include/sprite.h2
-rw-r--r--include/start_menu.h2
-rw-r--r--include/text.h59
-rw-r--r--include/trade.h23
-rw-r--r--include/trader.h3
-rw-r--r--include/trainer_see.h20
-rw-r--r--include/unknown_task.h16
-rw-r--r--include/use_pokeblock.h10
-rw-r--r--include/vars.h1
-rw-r--r--include/wild_encounter.h6
-rw-r--r--ld_script.txt73
-rw-r--r--shared_syms.txt2
-rw-r--r--src/bard_music.c76
-rw-r--r--src/battle_2.c37
-rw-r--r--src/battle_3.c5566
-rw-r--r--src/battle_4.c1322
-rw-r--r--src/battle_6.c1507
-rw-r--r--src/battle_7.c336
-rw-r--r--src/battle_anim_80CA710.c18
-rw-r--r--src/battle_anim_81258BC.c50
-rw-r--r--src/battle_controller_linkopponent.c (renamed from src/battle_10.c)685
-rw-r--r--src/battle_controller_linkpartner.c (renamed from src/battle_811DA74.c)246
-rw-r--r--src/battle_controller_opponent.c (renamed from src/battle_8.c)533
-rw-r--r--src/battle_controller_player.c3066
-rw-r--r--src/battle_controller_safari.c709
-rw-r--r--src/battle_controller_wally.c (renamed from src/battle_anim_8137220.c)279
-rw-r--r--src/battle_message.c19
-rw-r--r--src/battle_party_menu.c9
-rw-r--r--src/battle_records.c2
-rw-r--r--src/battle_setup.c641
-rw-r--r--src/battle_transition.c2513
-rw-r--r--src/berry.c6
-rw-r--r--src/berry_blender.c504
-rw-r--r--src/berry_tag_screen.c110
-rw-r--r--src/bike.c6
-rw-r--r--src/braille_puzzles.c36
-rw-r--r--src/cable_club.c922
-rw-r--r--src/calculate_base_damage.c1363
-rw-r--r--src/choose_party.c7
-rw-r--r--src/clock.c2
-rw-r--r--src/cute_sketch.c164
-rw-r--r--src/daycare.c1838
-rw-r--r--src/de_rom_8040FE0.c202
-rw-r--r--src/decoration.c4
-rw-r--r--src/decoration_inventory.c2
-rw-r--r--src/diploma.c4
-rw-r--r--src/easy_chat.c28
-rw-r--r--src/egg_hatch.c114
-rw-r--r--src/event_data.c16
-rw-r--r--src/evolution_graphics.c614
-rw-r--r--src/evolution_scene.c3966
-rw-r--r--src/field_control_avatar.c48
-rw-r--r--src/field_door.c7
-rw-r--r--src/field_effect.c101
-rw-r--r--src/field_effect_helpers.c1632
-rw-r--r--src/field_fadetransition.c10
-rw-r--r--src/field_ground_effect.c598
-rw-r--r--src/field_map_obj.c564
-rw-r--r--src/field_map_obj_helpers.c14
-rw-r--r--src/field_player_avatar.c229
-rw-r--r--src/field_poison.c2
-rw-r--r--src/field_screen_effect.c15
-rw-r--r--src/field_special_scene.c12
-rw-r--r--src/field_specials.c48
-rw-r--r--src/field_tasks.c33
-rw-r--r--src/field_weather.c2
-rw-r--r--src/fieldmap.c16
-rw-r--r--src/fldeff_cut.c31
-rw-r--r--src/fldeff_flash.c10
-rw-r--r--src/fldeff_strength.c16
-rw-r--r--src/fldeff_sweetscent.c8
-rw-r--r--src/fldeff_teleport.c14
-rw-r--r--src/hall_of_fame.c46
-rw-r--r--src/hof_pc.c6
-rw-r--r--src/item_menu.c358
-rw-r--r--src/item_use.c120
-rw-r--r--src/learn_move.c2
-rw-r--r--src/load_save.c2
-rw-r--r--src/m4a_4.c2
-rw-r--r--src/mail.c4
-rw-r--r--src/main.c2
-rw-r--r--src/main_menu.c412
-rw-r--r--src/map_obj_lock.c2
-rw-r--r--src/matsuda_debug_menu.c2
-rw-r--r--src/mauville_man.c1311
-rw-r--r--src/mauville_old_man.c247
-rw-r--r--src/menu.c148
-rw-r--r--src/menu_cursor.c103
-rw-r--r--src/menu_helpers.c4
-rw-r--r--src/money.c54
-rw-r--r--src/mori_debug_menu.c10
-rw-r--r--src/mystery_event_menu.c22
-rw-r--r--src/naming_screen.c2
-rw-r--r--src/new_game.c6
-rw-r--r--src/option_menu.c102
-rw-r--r--src/overworld.c (renamed from src/rom4.c)505
-rw-r--r--src/party_menu.c11
-rw-r--r--src/player_pc.c10
-rw-r--r--src/pokeblock.c51
-rw-r--r--src/pokeblock_feed.c1015
-rw-r--r--src/pokedex.c2
-rw-r--r--src/pokemon_1.c35
-rw-r--r--src/pokemon_2.c116
-rw-r--r--src/pokemon_3.c6
-rw-r--r--src/pokemon_menu.c1200
-rw-r--r--src/pokenav.c2
-rw-r--r--src/post_battle_event_funcs.c4
-rw-r--r--src/record_mixing.c38
-rw-r--r--src/region_map.c14
-rw-r--r--src/reshow_battle_screen.c332
-rw-r--r--src/rom3.c533
-rw-r--r--src/rom6.c48
-rw-r--r--src/rotating_gate.c711
-rw-r--r--src/safari_zone.c4
-rw-r--r--src/save.c2
-rw-r--r--src/scrcmd.c319
-rw-r--r--src/script.c16
-rw-r--r--src/script_menu.c1092
-rw-r--r--src/script_movement.c62
-rw-r--r--src/script_pokemon_util_80C4BF0.c54
-rw-r--r--src/script_pokemon_util_80F99CC.c65
-rw-r--r--src/secret_base.c8
-rw-r--r--src/shop.c1135
-rw-r--r--src/sound.c59
-rw-r--r--src/start_menu.c6
-rw-r--r--src/strings.c4
-rw-r--r--src/time_events.c6
-rw-r--r--src/title_screen.c184
-rw-r--r--src/trade.c1
-rw-r--r--src/trader.c47
-rw-r--r--src/trainer_card.c4
-rw-r--r--src/trainer_see.c344
-rw-r--r--src/tv.c29
-rw-r--r--src/unknown_task.c15
-rw-r--r--src/use_pokeblock.c270
-rw-r--r--src/wild_encounter.c59
-rw-r--r--sym_bss.txt84
-rw-r--r--sym_common.txt53
-rw-r--r--sym_ewram.txt54
339 files changed, 33996 insertions, 60983 deletions
diff --git a/README.md b/README.md
index 0782f7a12..a840a9a78 100644
--- a/README.md
+++ b/README.md
@@ -9,8 +9,24 @@ It builds the following roms:
To set up the repository, see [INSTALL.md](INSTALL.md).
-### irc: [freenode#pret][irc]
+## See also
+* Disassembly of [**Pokémon Red/Blue**][pokered]
+* Disassembly of [**Pokémon Yellow**][pokeyellow]
+* Disassembly of [**Pokémon Crystal**][pokecrystal]
+* Disassembly of [**Pokémon Pinball**][pokepinball]
+* Disassembly of [**Pokémon TCG**][poketcg]
+* Disassembly of [**Pokémon Emerald**][pokeemerald]
+* Discord: [**pret**][Discord]
+* irc: **irc.freenode.net** [**#pret**][irc]
+
+[pokered]: https://github.com/pret/pokered
+[pokeyellow]: https://github.com/pret/pokeyellow
+[pokecrystal]: https://github.com/pret/pokecrystal
+[pokepinball]: https://github.com/pret/pokepinball
+[poketcg]: https://github.com/pret/poketcg
+[pokeemerald]: https://github.com/pret/pokeemerald
+[Discord]: https://discord.gg/cJxDDVP
[irc]: https://kiwiirc.com/client/irc.freenode.net/?#pret
[travis]: https://travis-ci.org/pret/pokeruby
[travis-badge]: https://travis-ci.org/pret/pokeruby.svg?branch=master
diff --git a/asm/battle_2.s b/asm/battle_2.s
index d94dd5b8d..f252e5716 100644
--- a/asm/battle_2.s
+++ b/asm/battle_2.s
@@ -189,7 +189,7 @@ _080124A8:
lsls r0, 8
orrs r2, r0
movs r0, 0
- bl dp01_build_cmdbuf_x12_a_bb
+ bl Emitcmd18
bl _08012E32
.align 2, 0
_080124C0: .4byte gActionForBanks
@@ -408,7 +408,7 @@ _0801264E:
movs r0, 0
movs r2, 0
add r3, sp, 0x4
- bl sub_800CBA4
+ bl Emitcmd20
b _0801289E
.align 2, 0
_080126AC: .4byte gBattleMons
@@ -698,7 +698,7 @@ _08012908:
ldr r0, _08012928 @ =0x0201606c
adds r1, r0
movs r0, 0
- bl sub_800CBE0
+ bl EmitOpenBag
ldrb r0, [r4]
bl MarkBufferBankForExecution
b _08012968
@@ -725,7 +725,7 @@ _0801292C:
adds r0, r4
strb r5, [r0]
movs r0, 0
- bl dp01_build_cmdbuf_x32_32_32_32
+ bl Emitcmd50
mov r4, r8
ldrb r0, [r4]
bl MarkBufferBankForExecution
@@ -3144,7 +3144,7 @@ _08013D4C:
ldr r1, _08013D6C @ =gBattleMainFunc
ldr r0, _08013D70 @ =sub_8013DA8
str r0, [r1]
- ldr r1, _08013D74 @ =gUnknown_03005E94
+ ldr r1, _08013D74 @ =gCB2_AfterEvolution
ldr r0, _08013D78 @ =sub_800F808
str r0, [r1]
b _08013D96
@@ -3152,7 +3152,7 @@ _08013D4C:
_08013D68: .4byte gNoOfAllBanks
_08013D6C: .4byte gBattleMainFunc
_08013D70: .4byte sub_8013DA8
-_08013D74: .4byte gUnknown_03005E94
+_08013D74: .4byte gCB2_AfterEvolution
_08013D78: .4byte sub_800F808
_08013D7C:
ldr r0, _08013D9C @ =gBattleExecBuffer
diff --git a/asm/battle_5.s b/asm/battle_5.s
deleted file mode 100644
index b72266193..000000000
--- a/asm/battle_5.s
+++ /dev/null
@@ -1,4591 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "constants/species_constants.inc"
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start nullsub_91
-nullsub_91: @ 802BF70
- bx lr
- thumb_func_end nullsub_91
-
- thumb_func_start SetBankFuncToPlayerBufferRunCommand
-SetBankFuncToPlayerBufferRunCommand: @ 802BF74
- ldr r1, _0802BF8C @ =gBattleBankFunc
- ldr r0, _0802BF90 @ =gActiveBank
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0802BF94 @ =PlayerBufferRunCommand
- str r1, [r0]
- ldr r1, _0802BF98 @ =gDoingBattleAnim
- movs r0, 0
- strb r0, [r1]
- bx lr
- .align 2, 0
-_0802BF8C: .4byte gBattleBankFunc
-_0802BF90: .4byte gActiveBank
-_0802BF94: .4byte PlayerBufferRunCommand
-_0802BF98: .4byte gDoingBattleAnim
- thumb_func_end SetBankFuncToPlayerBufferRunCommand
-
- thumb_func_start PlayerBufferExecCompleted
-PlayerBufferExecCompleted: @ 802BF9C
- push {r4,lr}
- sub sp, 0x4
- ldr r1, _0802BFDC @ =gBattleBankFunc
- ldr r4, _0802BFE0 @ =gActiveBank
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0802BFE4 @ =PlayerBufferRunCommand
- str r1, [r0]
- ldr r0, _0802BFE8 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0802BFF0
- bl GetMultiplayerId
- mov r1, sp
- strb r0, [r1]
- movs r0, 0x2
- movs r1, 0x4
- mov r2, sp
- bl dp01_prepare_buffer_wireless_probably
- ldr r1, _0802BFEC @ =gBattleBufferA
- ldrb r0, [r4]
- lsls r0, 9
- adds r0, r1
- movs r1, 0x38
- strb r1, [r0]
- b _0802C002
- .align 2, 0
-_0802BFDC: .4byte gBattleBankFunc
-_0802BFE0: .4byte gActiveBank
-_0802BFE4: .4byte PlayerBufferRunCommand
-_0802BFE8: .4byte gBattleTypeFlags
-_0802BFEC: .4byte gBattleBufferA
-_0802BFF0:
- ldr r2, _0802C00C @ =gBattleExecBuffer
- ldr r1, _0802C010 @ =gBitTable
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- ldr r0, [r2]
- bics r0, r1
- str r0, [r2]
-_0802C002:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0802C00C: .4byte gBattleExecBuffer
-_0802C010: .4byte gBitTable
- thumb_func_end PlayerBufferExecCompleted
-
- thumb_func_start PlayerBufferRunCommand
-PlayerBufferRunCommand: @ 802C014
- push {lr}
- ldr r2, _0802C048 @ =gBattleExecBuffer
- ldr r1, _0802C04C @ =gBitTable
- ldr r0, _0802C050 @ =gActiveBank
- ldrb r3, [r0]
- lsls r0, r3, 2
- adds r0, r1
- ldr r1, [r2]
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- beq _0802C060
- ldr r0, _0802C054 @ =gBattleBufferA
- lsls r1, r3, 9
- adds r1, r0
- ldrb r0, [r1]
- cmp r0, 0x38
- bhi _0802C05C
- ldr r0, _0802C058 @ =gPlayerBufferCommands
- ldrb r1, [r1]
- lsls r1, 2
- adds r1, r0
- ldr r0, [r1]
- bl _call_via_r0
- b _0802C060
- .align 2, 0
-_0802C048: .4byte gBattleExecBuffer
-_0802C04C: .4byte gBitTable
-_0802C050: .4byte gActiveBank
-_0802C054: .4byte gBattleBufferA
-_0802C058: .4byte gPlayerBufferCommands
-_0802C05C:
- bl PlayerBufferExecCompleted
-_0802C060:
- pop {r0}
- bx r0
- thumb_func_end PlayerBufferRunCommand
-
- thumb_func_start bx_0802E404
-bx_0802E404: @ 802C064
- push {lr}
- ldr r2, _0802C08C @ =gSprites
- ldr r1, _0802C090 @ =gObjectBankIDs
- ldr r0, _0802C094 @ =gActiveBank
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- movs r1, 0x24
- ldrsh r0, [r0, r1]
- cmp r0, 0
- bne _0802C086
- bl PlayerBufferExecCompleted
-_0802C086:
- pop {r0}
- bx r0
- .align 2, 0
-_0802C08C: .4byte gSprites
-_0802C090: .4byte gObjectBankIDs
-_0802C094: .4byte gActiveBank
- thumb_func_end bx_0802E404
-
- thumb_func_start sub_802C098
-sub_802C098: @ 802C098
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r7, _0802C0FC @ =gBattleBufferA
- ldr r4, _0802C100 @ =gActiveBank
- ldrb r0, [r4]
- lsls r2, r0, 9
- adds r1, r7, 0x2
- adds r1, r2, r1
- ldrb r5, [r1]
- adds r1, r7, 0x3
- adds r2, r1
- ldrb r1, [r2]
- lsls r1, 8
- orrs r5, r1
- movs r1, 0x1
- movs r2, 0x7
- movs r3, 0x1
- bl dp11b_obj_instanciate
- ldrb r0, [r4]
- movs r1, 0
- movs r2, 0x7
- movs r3, 0x1
- bl dp11b_obj_instanciate
- ldr r0, _0802C104 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r2, 0x1
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- beq _0802C13E
- movs r0, 0x5
- bl PlaySE
- bl DestroyMenuCursor
- ldr r1, _0802C108 @ =gActionSelectionCursor
- ldrb r0, [r4]
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _0802C11C
- cmp r0, 0x1
- bgt _0802C10C
- cmp r0, 0
- beq _0802C116
- b _0802C138
- .align 2, 0
-_0802C0FC: .4byte gBattleBufferA
-_0802C100: .4byte gActiveBank
-_0802C104: .4byte gMain
-_0802C108: .4byte gActionSelectionCursor
-_0802C10C:
- cmp r0, 0x2
- beq _0802C122
- cmp r0, 0x3
- beq _0802C12E
- b _0802C138
-_0802C116:
- movs r0, 0x1
- movs r1, 0
- b _0802C126
-_0802C11C:
- movs r0, 0x1
- movs r1, 0x1
- b _0802C126
-_0802C122:
- movs r0, 0x1
- movs r1, 0x2
-_0802C126:
- movs r2, 0
- bl dp01_build_cmdbuf_x21_a_bb
- b _0802C138
-_0802C12E:
- movs r0, 0x1
- movs r1, 0x3
- movs r2, 0
- bl dp01_build_cmdbuf_x21_a_bb
-_0802C138:
- bl PlayerBufferExecCompleted
- b _0802C2AC
-_0802C13E:
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _0802C178
- ldr r5, _0802C174 @ =gActionSelectionCursor
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- bne _0802C158
- b _0802C2AC
-_0802C158:
- movs r0, 0x5
- bl PlaySE
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- bl nullsub_8
- ldrb r1, [r4]
- adds r1, r5
- ldrb r0, [r1]
- movs r2, 0x1
- b _0802C200
- .align 2, 0
-_0802C174: .4byte gActionSelectionCursor
-_0802C178:
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _0802C1B0
- ldr r5, _0802C1AC @ =gActionSelectionCursor
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- beq _0802C192
- b _0802C2AC
-_0802C192:
- movs r0, 0x5
- bl PlaySE
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- bl nullsub_8
- ldrb r1, [r4]
- adds r1, r5
- ldrb r0, [r1]
- movs r2, 0x1
- b _0802C200
- .align 2, 0
-_0802C1AC: .4byte gActionSelectionCursor
-_0802C1B0:
- movs r0, 0x40
- mov r8, r0
- ands r0, r1
- cmp r0, 0
- beq _0802C1D0
- ldr r5, _0802C1CC @ =gActionSelectionCursor
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0802C2AC
- b _0802C1E8
- .align 2, 0
-_0802C1CC: .4byte gActionSelectionCursor
-_0802C1D0:
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0802C218
- ldr r5, _0802C214 @ =gActionSelectionCursor
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- bne _0802C2AC
-_0802C1E8:
- movs r0, 0x5
- bl PlaySE
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- bl nullsub_8
- ldrb r1, [r4]
- adds r1, r5
- ldrb r0, [r1]
- movs r2, 0x2
-_0802C200:
- eors r0, r2
- strb r0, [r1]
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- movs r1, 0
- bl sub_802E3E4
- b _0802C2AC
- .align 2, 0
-_0802C214: .4byte gActionSelectionCursor
-_0802C218:
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0802C2A0
- ldr r6, _0802C294 @ =gBattleTypeFlags
- ldrh r1, [r6]
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- beq _0802C2AC
- ldrb r0, [r4]
- bl GetBankIdentity
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- bne _0802C2AC
- movs r0, 0
- bl GetBankByPlayerAI
- ldr r1, _0802C298 @ =gAbsentBankFlags
- ldrb r1, [r1]
- ldr r2, _0802C29C @ =gBitTable
- lsls r0, 24
- lsrs r0, 22
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- bne _0802C2AC
- ldrh r1, [r6]
- mov r0, r8
- ands r0, r1
- cmp r0, 0
- bne _0802C2AC
- ldrb r0, [r4]
- lsls r0, 9
- adds r1, r7, 0x1
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _0802C278
- cmp r5, 0xC
- bhi _0802C2AC
- adds r0, r5, 0
- movs r1, 0x1
- bl AddBagItem
-_0802C278:
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x1
- movs r1, 0xC
- movs r2, 0
- bl dp01_build_cmdbuf_x21_a_bb
- bl PlayerBufferExecCompleted
- bl DestroyMenuCursor
- b _0802C2AC
- .align 2, 0
-_0802C294: .4byte gBattleTypeFlags
-_0802C298: .4byte gAbsentBankFlags
-_0802C29C: .4byte gBitTable
-_0802C2A0:
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- beq _0802C2AC
- bl sub_804454C
-_0802C2AC:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_802C098
-
- thumb_func_start unref_sub_802C2B8
-unref_sub_802C2B8: @ 802C2B8
- push {r4,lr}
- ldr r4, _0802C2E0 @ =gActiveBank
- ldrb r0, [r4]
- movs r1, 0x1
- bl dp11b_obj_free
- ldrb r0, [r4]
- movs r1, 0
- bl dp11b_obj_free
- ldr r1, _0802C2E4 @ =gBattleBankFunc
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0802C2E8 @ =sub_802C2EC
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0802C2E0: .4byte gActiveBank
-_0802C2E4: .4byte gBattleBankFunc
-_0802C2E8: .4byte sub_802C2EC
- thumb_func_end unref_sub_802C2B8
-
- thumb_func_start sub_802C2EC
-sub_802C2EC: @ 802C2EC
- push {r4,r5,lr}
- sub sp, 0x4
- ldr r1, _0802C384 @ =gUnknown_081FAE7C
- mov r0, sp
- movs r2, 0x4
- bl memcpy
- ldr r0, _0802C388 @ =gUnknown_03004344
- ldrb r0, [r0]
- movs r1, 0x1
- movs r2, 0xF
- movs r3, 0x1
- bl dp11b_obj_instanciate
- movs r4, 0
- ldr r0, _0802C38C @ =gNoOfAllBanks
- ldrb r0, [r0]
- cmp r0, 0
- beq _0802C32E
-_0802C312:
- ldr r0, _0802C388 @ =gUnknown_03004344
- ldrb r0, [r0]
- cmp r4, r0
- beq _0802C324
- lsls r0, r4, 24
- lsrs r0, 24
- movs r1, 0x1
- bl dp11b_obj_free
-_0802C324:
- adds r4, 0x1
- ldr r0, _0802C38C @ =gNoOfAllBanks
- ldrb r0, [r0]
- cmp r4, r0
- blt _0802C312
-_0802C32E:
- ldr r0, _0802C390 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0802C3A8
- bl DestroyMenuCursor
- movs r0, 0x5
- bl PlaySE
- ldr r2, _0802C394 @ =gSprites
- ldr r1, _0802C398 @ =gObjectBankIDs
- ldr r4, _0802C388 @ =gUnknown_03004344
- ldrb r0, [r4]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, _0802C39C @ =sub_8010574
- str r1, [r0]
- ldr r1, _0802C3A0 @ =gMoveSelectionCursor
- ldr r0, _0802C3A4 @ =gActiveBank
- ldrb r0, [r0]
- adds r0, r1
- ldrb r2, [r0]
- ldrb r0, [r4]
- lsls r0, 8
- orrs r2, r0
- movs r0, 0x1
- movs r1, 0xA
- bl dp01_build_cmdbuf_x21_a_bb
- ldrb r0, [r4]
- movs r1, 0x1
- bl dp11b_obj_free
- bl PlayerBufferExecCompleted
- b _0802C658
- .align 2, 0
-_0802C384: .4byte gUnknown_081FAE7C
-_0802C388: .4byte gUnknown_03004344
-_0802C38C: .4byte gNoOfAllBanks
-_0802C390: .4byte gMain
-_0802C394: .4byte gSprites
-_0802C398: .4byte gObjectBankIDs
-_0802C39C: .4byte sub_8010574
-_0802C3A0: .4byte gMoveSelectionCursor
-_0802C3A4: .4byte gActiveBank
-_0802C3A8:
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0802C41C
- movs r0, 0x5
- bl PlaySE
- ldr r2, _0802C400 @ =gSprites
- ldr r1, _0802C404 @ =gObjectBankIDs
- ldr r5, _0802C408 @ =gUnknown_03004344
- ldrb r0, [r5]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, _0802C40C @ =sub_8010574
- str r1, [r0]
- ldr r1, _0802C410 @ =gBattleBankFunc
- ldr r4, _0802C414 @ =gActiveBank
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0802C418 @ =sub_802C68C
- str r1, [r0]
- ldrb r0, [r4]
- movs r1, 0x1
- movs r2, 0x7
- movs r3, 0x1
- bl dp11b_obj_instanciate
- ldrb r0, [r4]
- movs r1, 0
- movs r2, 0x7
- movs r3, 0x1
- bl dp11b_obj_instanciate
- ldrb r0, [r5]
- movs r1, 0x1
- bl dp11b_obj_free
- b _0802C658
- .align 2, 0
-_0802C400: .4byte gSprites
-_0802C404: .4byte gObjectBankIDs
-_0802C408: .4byte gUnknown_03004344
-_0802C40C: .4byte sub_8010574
-_0802C410: .4byte gBattleBankFunc
-_0802C414: .4byte gActiveBank
-_0802C418: .4byte sub_802C68C
-_0802C41C:
- movs r0, 0x60
- ands r0, r1
- cmp r0, 0
- bne _0802C426
- b _0802C540
-_0802C426:
- movs r0, 0x5
- bl PlaySE
- ldr r2, _0802C458 @ =gSprites
- ldr r1, _0802C45C @ =gObjectBankIDs
- ldr r3, _0802C460 @ =gUnknown_03004344
- ldrb r0, [r3]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, _0802C464 @ =sub_8010574
- str r1, [r0]
- adds r5, r3, 0
-_0802C448:
- ldrb r0, [r5]
- bl GetBankIdentity
- lsls r0, 24
- lsrs r1, r0, 24
- movs r4, 0
- mov r0, sp
- b _0802C472
- .align 2, 0
-_0802C458: .4byte gSprites
-_0802C45C: .4byte gObjectBankIDs
-_0802C460: .4byte gUnknown_03004344
-_0802C464: .4byte sub_8010574
-_0802C468:
- adds r4, 0x1
- cmp r4, 0x3
- bgt _0802C478
- mov r2, sp
- adds r0, r2, r4
-_0802C472:
- ldrb r0, [r0]
- cmp r1, r0
- bne _0802C468
-_0802C478:
- subs r4, 0x1
- cmp r4, 0
- bge _0802C480
- movs r4, 0x3
-_0802C480:
- mov r1, sp
- adds r0, r1, r4
- ldrb r0, [r0]
- bl GetBankByPlayerAI
- strb r0, [r5]
- ldr r1, _0802C4B4 @ =gNoOfAllBanks
- lsls r0, 24
- lsrs r0, 24
- ldrb r1, [r1]
- cmp r0, r1
- beq _0802C478
- movs r4, 0
- ldrb r0, [r5]
- bl GetBankIdentity
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0802C4FE
- cmp r0, 0x1
- bgt _0802C4B8
- cmp r0, 0
- beq _0802C4C2
- b _0802C500
- .align 2, 0
-_0802C4B4: .4byte gNoOfAllBanks
-_0802C4B8:
- cmp r0, 0x2
- beq _0802C4C2
- cmp r0, 0x3
- beq _0802C4FE
- b _0802C500
-_0802C4C2:
- ldr r2, _0802C520 @ =gActiveBank
- ldrb r0, [r2]
- ldrb r1, [r5]
- cmp r0, r1
- bne _0802C4FE
- ldr r1, _0802C524 @ =gBattlePartyID
- ldrb r2, [r2]
- lsls r0, r2, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _0802C528 @ =gPlayerParty
- adds r0, r1
- ldr r1, _0802C52C @ =gMoveSelectionCursor
- adds r2, r1
- ldrb r1, [r2]
- adds r1, 0xD
- bl GetMonData
- ldr r2, _0802C530 @ =gBattleMoves
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r1, [r1, 0x6]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0802C500
-_0802C4FE:
- adds r4, 0x1
-_0802C500:
- ldr r0, _0802C534 @ =gAbsentBankFlags
- ldrb r1, [r0]
- ldr r2, _0802C538 @ =gBitTable
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- ldr r0, _0802C53C @ =gUnknown_03004344
- cmp r1, 0
- beq _0802C518
- movs r4, 0
-_0802C518:
- cmp r4, 0
- beq _0802C448
- b _0802C640
- .align 2, 0
-_0802C520: .4byte gActiveBank
-_0802C524: .4byte gBattlePartyID
-_0802C528: .4byte gPlayerParty
-_0802C52C: .4byte gMoveSelectionCursor
-_0802C530: .4byte gBattleMoves
-_0802C534: .4byte gAbsentBankFlags
-_0802C538: .4byte gBitTable
-_0802C53C: .4byte gUnknown_03004344
-_0802C540:
- movs r0, 0x90
- ands r0, r1
- cmp r0, 0
- bne _0802C54A
- b _0802C658
-_0802C54A:
- movs r0, 0x5
- bl PlaySE
- ldr r2, _0802C57C @ =gSprites
- ldr r1, _0802C580 @ =gObjectBankIDs
- ldr r3, _0802C584 @ =gUnknown_03004344
- ldrb r0, [r3]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, _0802C588 @ =sub_8010574
- str r1, [r0]
- adds r5, r3, 0
-_0802C56C:
- ldrb r0, [r5]
- bl GetBankIdentity
- lsls r0, 24
- lsrs r1, r0, 24
- movs r4, 0
- mov r0, sp
- b _0802C596
- .align 2, 0
-_0802C57C: .4byte gSprites
-_0802C580: .4byte gObjectBankIDs
-_0802C584: .4byte gUnknown_03004344
-_0802C588: .4byte sub_8010574
-_0802C58C:
- adds r4, 0x1
- cmp r4, 0x3
- bgt _0802C59C
- mov r2, sp
- adds r0, r2, r4
-_0802C596:
- ldrb r0, [r0]
- cmp r1, r0
- bne _0802C58C
-_0802C59C:
- adds r4, 0x1
- cmp r4, 0x3
- ble _0802C5A4
- movs r4, 0
-_0802C5A4:
- mov r1, sp
- adds r0, r1, r4
- ldrb r0, [r0]
- bl GetBankByPlayerAI
- strb r0, [r5]
- ldr r1, _0802C5D8 @ =gNoOfAllBanks
- lsls r0, 24
- lsrs r0, 24
- ldrb r1, [r1]
- cmp r0, r1
- beq _0802C59C
- movs r4, 0
- ldrb r0, [r5]
- bl GetBankIdentity
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0802C622
- cmp r0, 0x1
- bgt _0802C5DC
- cmp r0, 0
- beq _0802C5E6
- b _0802C624
- .align 2, 0
-_0802C5D8: .4byte gNoOfAllBanks
-_0802C5DC:
- cmp r0, 0x2
- beq _0802C5E6
- cmp r0, 0x3
- beq _0802C622
- b _0802C624
-_0802C5E6:
- ldr r2, _0802C660 @ =gActiveBank
- ldrb r0, [r2]
- ldrb r1, [r5]
- cmp r0, r1
- bne _0802C622
- ldr r1, _0802C664 @ =gBattlePartyID
- ldrb r2, [r2]
- lsls r0, r2, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _0802C668 @ =gPlayerParty
- adds r0, r1
- ldr r1, _0802C66C @ =gMoveSelectionCursor
- adds r2, r1
- ldrb r1, [r2]
- adds r1, 0xD
- bl GetMonData
- ldr r2, _0802C670 @ =gBattleMoves
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r1, [r1, 0x6]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0802C624
-_0802C622:
- adds r4, 0x1
-_0802C624:
- ldr r0, _0802C674 @ =gAbsentBankFlags
- ldrb r1, [r0]
- ldr r2, _0802C678 @ =gBitTable
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- ldr r0, _0802C67C @ =gUnknown_03004344
- cmp r1, 0
- beq _0802C63C
- movs r4, 0
-_0802C63C:
- cmp r4, 0
- beq _0802C56C
-_0802C640:
- ldr r2, _0802C680 @ =gSprites
- ldr r1, _0802C684 @ =gObjectBankIDs
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, _0802C688 @ =sub_8010520
- str r1, [r0]
-_0802C658:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0802C660: .4byte gActiveBank
-_0802C664: .4byte gBattlePartyID
-_0802C668: .4byte gPlayerParty
-_0802C66C: .4byte gMoveSelectionCursor
-_0802C670: .4byte gBattleMoves
-_0802C674: .4byte gAbsentBankFlags
-_0802C678: .4byte gBitTable
-_0802C67C: .4byte gUnknown_03004344
-_0802C680: .4byte gSprites
-_0802C684: .4byte gObjectBankIDs
-_0802C688: .4byte sub_8010520
- thumb_func_end sub_802C2EC
-
- thumb_func_start sub_802C68C
-sub_802C68C: @ 802C68C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x8
- movs r0, 0
- mov r8, r0
- ldr r7, _0802C6E4 @ =gActiveBank
- ldrb r2, [r7]
- lsls r0, r2, 9
- ldr r1, _0802C6E8 @ =gUnknown_02023A64
- adds r6, r0, r1
- ldr r0, _0802C6EC @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r5, 0x1
- adds r4, r5, 0
- ands r4, r1
- cmp r4, 0
- bne _0802C6B2
- b _0802C864
-_0802C6B2:
- movs r0, 0x5
- bl PlaySE
- ldr r1, _0802C6F0 @ =gMoveSelectionCursor
- ldrb r0, [r7]
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 1
- adds r1, r6, r0
- ldrh r0, [r1]
- cmp r0, 0xAE
- bne _0802C6F4
- ldrb r0, [r6, 0x12]
- movs r4, 0
- cmp r0, 0x7
- beq _0802C702
- ldrb r1, [r6, 0x13]
- movs r0, 0x7
- eors r1, r0
- negs r0, r1
- orrs r0, r1
- asrs r4, r0, 31
- movs r0, 0x10
- ands r4, r0
- b _0802C702
- .align 2, 0
-_0802C6E4: .4byte gActiveBank
-_0802C6E8: .4byte gUnknown_02023A64
-_0802C6EC: .4byte gMain
-_0802C6F0: .4byte gMoveSelectionCursor
-_0802C6F4:
- ldr r2, _0802C714 @ =gBattleMoves
- ldrh r1, [r1]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r4, [r0, 0x6]
-_0802C702:
- movs r0, 0x10
- ands r0, r4
- cmp r0, 0
- beq _0802C720
- ldr r0, _0802C718 @ =gUnknown_03004344
- ldr r1, _0802C71C @ =gActiveBank
- ldrb r1, [r1]
- strb r1, [r0]
- b _0802C73A
- .align 2, 0
-_0802C714: .4byte gBattleMoves
-_0802C718: .4byte gUnknown_03004344
-_0802C71C: .4byte gActiveBank
-_0802C720:
- ldr r0, _0802C764 @ =gActiveBank
- ldrb r0, [r0]
- bl GetBankIdentity
- adds r1, r0, 0
- movs r2, 0x1
- movs r0, 0x1
- ands r0, r1
- eors r0, r2
- bl GetBankByPlayerAI
- ldr r1, _0802C768 @ =gUnknown_03004344
- strb r0, [r1]
-_0802C73A:
- ldr r3, _0802C76C @ =gBattleBufferA
- ldr r5, _0802C764 @ =gActiveBank
- ldrb r2, [r5]
- lsls r1, r2, 9
- adds r0, r3, 0x1
- adds r0, r1, r0
- ldrb r0, [r0]
- cmp r0, 0
- bne _0802C770
- movs r0, 0x2
- ands r0, r4
- cmp r0, 0
- beq _0802C7B2
- adds r0, r3, 0x2
- adds r0, r1, r0
- ldrb r0, [r0]
- cmp r0, 0
- bne _0802C7B2
- movs r2, 0x1
- add r8, r2
- b _0802C7B2
- .align 2, 0
-_0802C764: .4byte gActiveBank
-_0802C768: .4byte gUnknown_03004344
-_0802C76C: .4byte gBattleBufferA
-_0802C770:
- movs r0, 0x7D
- ands r0, r4
- cmp r0, 0
- bne _0802C77C
- movs r0, 0x1
- add r8, r0
-_0802C77C:
- ldr r0, _0802C7D0 @ =gMoveSelectionCursor
- adds r0, r2, r0
- adds r1, r6, 0
- adds r1, 0x8
- ldrb r0, [r0]
- adds r1, r0
- ldrb r0, [r1]
- cmp r0, 0
- beq _0802C7B8
- movs r0, 0x12
- ands r0, r4
- cmp r0, 0
- bne _0802C7B2
- movs r0, 0
- bl CountAliveMons
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bhi _0802C7B2
- ldrb r0, [r5]
- bl sub_803C434
- ldr r1, _0802C7D4 @ =gUnknown_03004344
- strb r0, [r1]
- movs r2, 0
- mov r8, r2
-_0802C7B2:
- mov r0, r8
- cmp r0, 0
- bne _0802C7DC
-_0802C7B8:
- bl DestroyMenuCursor
- ldr r1, _0802C7D0 @ =gMoveSelectionCursor
- ldr r0, _0802C7D8 @ =gActiveBank
- ldrb r0, [r0]
- adds r0, r1
- ldrb r2, [r0]
- ldr r0, _0802C7D4 @ =gUnknown_03004344
- ldrb r0, [r0]
- lsls r0, 8
- orrs r2, r0
- b _0802C888
- .align 2, 0
-_0802C7D0: .4byte gMoveSelectionCursor
-_0802C7D4: .4byte gUnknown_03004344
-_0802C7D8: .4byte gActiveBank
-_0802C7DC:
- ldr r1, _0802C7F8 @ =gBattleBankFunc
- ldr r2, _0802C7FC @ =gActiveBank
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0802C800 @ =sub_802C2EC
- str r1, [r0]
- movs r0, 0x12
- ands r4, r0
- cmp r4, 0
- beq _0802C808
- ldr r1, _0802C804 @ =gUnknown_03004344
- ldrb r0, [r2]
- b _0802C838
- .align 2, 0
-_0802C7F8: .4byte gBattleBankFunc
-_0802C7FC: .4byte gActiveBank
-_0802C800: .4byte sub_802C2EC
-_0802C804: .4byte gUnknown_03004344
-_0802C808:
- movs r0, 0x1
- bl GetBankByPlayerAI
- ldr r1, _0802C828 @ =gAbsentBankFlags
- ldrb r1, [r1]
- ldr r2, _0802C82C @ =gBitTable
- lsls r0, 24
- lsrs r0, 22
- adds r0, r2
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- beq _0802C830
- movs r0, 0x3
- b _0802C832
- .align 2, 0
-_0802C828: .4byte gAbsentBankFlags
-_0802C82C: .4byte gBitTable
-_0802C830:
- movs r0, 0x1
-_0802C832:
- bl GetBankByPlayerAI
- ldr r1, _0802C854 @ =gUnknown_03004344
-_0802C838:
- strb r0, [r1]
- ldr r2, _0802C858 @ =gSprites
- ldr r1, _0802C85C @ =gObjectBankIDs
- ldr r0, _0802C854 @ =gUnknown_03004344
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, _0802C860 @ =sub_8010520
- b _0802CA36
- .align 2, 0
-_0802C854: .4byte gUnknown_03004344
-_0802C858: .4byte gSprites
-_0802C85C: .4byte gObjectBankIDs
-_0802C860: .4byte sub_8010520
-_0802C864:
- movs r6, 0x2
- adds r0, r6, 0
- ands r0, r1
- cmp r0, 0
- beq _0802C8A4
- bl DestroyMenuCursor
- movs r0, 0x5
- bl PlaySE
- ldr r0, _0802C898 @ =gUnknown_030042A4
- strh r4, [r0]
- ldr r1, _0802C89C @ =gUnknown_030042A0
- movs r2, 0xA0
- lsls r2, 1
- adds r0, r2, 0
- strh r0, [r1]
- ldr r2, _0802C8A0 @ =0x0000ffff
-_0802C888:
- movs r0, 0x1
- movs r1, 0xA
- bl dp01_build_cmdbuf_x21_a_bb
- bl PlayerBufferExecCompleted
- b _0802CA38
- .align 2, 0
-_0802C898: .4byte gUnknown_030042A4
-_0802C89C: .4byte gUnknown_030042A0
-_0802C8A0: .4byte 0x0000ffff
-_0802C8A4:
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _0802C8D4
- ldr r4, _0802C8D0 @ =gMoveSelectionCursor
- adds r2, r4
- ldrb r1, [r2]
- adds r0, r5, 0
- ands r0, r1
- cmp r0, 0
- bne _0802C8BC
- b _0802CA38
-_0802C8BC:
- ldrb r0, [r2]
- bl nullsub_7
- ldrb r1, [r7]
- adds r1, r4
- ldrb r0, [r1]
- movs r2, 0x1
- eors r0, r2
- b _0802C976
- .align 2, 0
-_0802C8D0: .4byte gMoveSelectionCursor
-_0802C8D4:
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _0802C914
- ldr r4, _0802C90C @ =gMoveSelectionCursor
- adds r3, r2, r4
- ldrb r2, [r3]
- movs r6, 0x1
- adds r0, r5, 0
- ands r0, r2
- cmp r0, 0
- beq _0802C8EE
- b _0802CA38
-_0802C8EE:
- ldr r1, _0802C910 @ =gUnknown_03004348
- adds r0, r6, 0
- eors r0, r2
- ldrb r1, [r1]
- cmp r0, r1
- bcc _0802C8FC
- b _0802CA38
-_0802C8FC:
- ldrb r0, [r3]
- bl nullsub_7
- ldrb r1, [r7]
- adds r1, r4
- ldrb r0, [r1]
- eors r0, r6
- b _0802C976
- .align 2, 0
-_0802C90C: .4byte gMoveSelectionCursor
-_0802C910: .4byte gUnknown_03004348
-_0802C914:
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0802C944
- ldr r4, _0802C940 @ =gMoveSelectionCursor
- adds r2, r4
- ldrb r1, [r2]
- adds r0, r6, 0
- ands r0, r1
- cmp r0, 0
- bne _0802C92C
- b _0802CA38
-_0802C92C:
- ldrb r0, [r2]
- bl nullsub_7
- ldrb r1, [r7]
- adds r1, r4
- ldrb r0, [r1]
- movs r2, 0x2
- eors r0, r2
- b _0802C976
- .align 2, 0
-_0802C940: .4byte gMoveSelectionCursor
-_0802C944:
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0802C99C
- ldr r4, _0802C994 @ =gMoveSelectionCursor
- adds r3, r2, r4
- ldrb r2, [r3]
- movs r5, 0x2
- adds r0, r6, 0
- ands r0, r2
- cmp r0, 0
- bne _0802CA38
- ldr r1, _0802C998 @ =gUnknown_03004348
- adds r0, r5, 0
- eors r0, r2
- ldrb r1, [r1]
- cmp r0, r1
- bcs _0802CA38
- ldrb r0, [r3]
- bl nullsub_7
- ldrb r1, [r7]
- adds r1, r4
- ldrb r0, [r1]
- eors r0, r5
-_0802C976:
- strb r0, [r1]
- movs r0, 0x5
- bl PlaySE
- ldrb r0, [r7]
- adds r0, r4
- ldrb r0, [r0]
- movs r1, 0
- bl sub_802E3B4
- bl sub_802E220
- bl sub_802E2D4
- b _0802CA38
- .align 2, 0
-_0802C994: .4byte gMoveSelectionCursor
-_0802C998: .4byte gUnknown_03004348
-_0802C99C:
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _0802CA38
- ldr r0, _0802C9D8 @ =gUnknown_03004348
- ldrb r0, [r0]
- cmp r0, 0x1
- bls _0802CA38
- ldr r0, _0802C9DC @ =gBattleTypeFlags
- ldrh r1, [r0]
- adds r0, r6, 0
- ands r0, r1
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, 0
- bne _0802CA38
- ldr r4, _0802C9E0 @ =gMoveSelectionCursor
- adds r0, r2, r4
- ldrb r0, [r0]
- ldr r1, _0802C9E4 @ =gUnknown_081FAE80
- bl sub_802E12C
- ldrb r0, [r7]
- adds r0, r4
- ldrb r0, [r0]
- cmp r0, 0
- beq _0802C9EC
- ldr r0, _0802C9E8 @ =gUnknown_03004344
- strb r5, [r0]
- b _0802C9F4
- .align 2, 0
-_0802C9D8: .4byte gUnknown_03004348
-_0802C9DC: .4byte gBattleTypeFlags
-_0802C9E0: .4byte gMoveSelectionCursor
-_0802C9E4: .4byte gUnknown_081FAE80
-_0802C9E8: .4byte gUnknown_03004344
-_0802C9EC:
- ldr r1, _0802CA44 @ =gUnknown_03004344
- adds r0, 0x1
- strb r0, [r1]
- adds r0, r1, 0
-_0802C9F4:
- ldrb r0, [r0]
- movs r1, 0x1B
- bl sub_802E3B4
- ldr r4, _0802CA48 @ =gUnknown_03004210
- ldr r1, _0802CA4C @ =0x00001016
- movs r0, 0x1C
- str r0, [sp]
- movs r0, 0x3A
- str r0, [sp, 0x4]
- adds r0, r4, 0
- movs r2, 0x17
- movs r3, 0x37
- bl FillWindowRect
- ldr r1, _0802CA50 @ =gUnknown_08400D89
- movs r2, 0xA4
- lsls r2, 2
- movs r0, 0x37
- str r0, [sp]
- adds r0, r4, 0
- movs r3, 0x17
- bl InitWindow
- adds r0, r4, 0
- bl sub_8002F44
- ldr r1, _0802CA54 @ =gBattleBankFunc
- ldr r0, _0802CA58 @ =gActiveBank
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0802CA5C @ =sub_802CA60
-_0802CA36:
- str r1, [r0]
-_0802CA38:
- add sp, 0x8
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802CA44: .4byte gUnknown_03004344
-_0802CA48: .4byte gUnknown_03004210
-_0802CA4C: .4byte 0x00001016
-_0802CA50: .4byte gUnknown_08400D89
-_0802CA54: .4byte gBattleBankFunc
-_0802CA58: .4byte gActiveBank
-_0802CA5C: .4byte sub_802CA60
- thumb_func_end sub_802C68C
-
- thumb_func_start sub_802CA60
-sub_802CA60: @ 802CA60
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x2C
- ldr r0, _0802CDEC @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x5
- ands r0, r1
- cmp r0, 0
- bne _0802CA7A
- b _0802CE78
-_0802CA7A:
- movs r0, 0x5
- bl PlaySE
- ldr r0, _0802CDF0 @ =gMoveSelectionCursor
- mov r10, r0
- ldr r1, _0802CDF4 @ =gActiveBank
- mov r8, r1
- ldrb r1, [r1]
- adds r2, r1, r0
- ldr r5, _0802CDF8 @ =gUnknown_03004344
- ldrb r0, [r2]
- ldrb r3, [r5]
- cmp r0, r3
- bne _0802CA98
- b _0802CE14
-_0802CA98:
- lsls r1, 9
- ldr r0, _0802CDFC @ =gUnknown_02023A64
- adds r1, r0
- mov r9, r1
- ldrb r1, [r2]
- lsls r1, 1
- add r1, r9
- ldrh r6, [r1]
- ldrb r0, [r5]
- lsls r0, 1
- add r0, r9
- ldrh r0, [r0]
- strh r0, [r1]
- ldrb r0, [r5]
- lsls r0, 1
- add r0, r9
- strh r6, [r0]
- mov r1, r8
- ldrb r0, [r1]
- add r0, r10
- ldrb r1, [r0]
- mov r7, r9
- adds r7, 0x8
- adds r1, r7, r1
- ldrb r6, [r1]
- ldrb r0, [r5]
- adds r0, r7, r0
- ldrb r0, [r0]
- strb r0, [r1]
- ldrb r0, [r5]
- adds r0, r7, r0
- strb r6, [r0]
- mov r2, r8
- ldrb r0, [r2]
- add r0, r10
- ldrb r1, [r0]
- mov r2, r9
- adds r2, 0xC
- adds r1, r2, r1
- ldrb r6, [r1]
- ldrb r0, [r5]
- adds r0, r2, r0
- ldrb r0, [r0]
- strb r0, [r1]
- ldrb r0, [r5]
- adds r2, r0
- strb r6, [r2]
- mov r3, r8
- ldrb r1, [r3]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- ldr r2, _0802CE00 @ =gDisableStructs
- adds r6, r0, r2
- ldrb r4, [r6, 0x18]
- lsls r3, r4, 24
- lsrs r2, r3, 28
- ldr r0, _0802CE04 @ =gBitTable
- mov r12, r0
- add r1, r10
- ldrb r0, [r1]
- lsls r0, 2
- add r0, r12
- ldr r0, [r0]
- ands r2, r0
- cmp r2, 0
- beq _0802CB52
- lsrs r1, r3, 28
- bics r1, r0
- lsls r1, 4
- movs r2, 0xF
- adds r0, r2, 0
- ands r0, r4
- orrs r0, r1
- strb r0, [r6, 0x18]
- mov r1, r8
- ldrb r0, [r1]
- lsls r1, r0, 3
- subs r1, r0
- lsls r1, 2
- ldr r3, _0802CE00 @ =gDisableStructs
- adds r1, r3
- ldrb r4, [r1, 0x18]
- lsrs r3, r4, 4
- ldrb r0, [r5]
- lsls r0, 2
- add r0, r12
- ldr r0, [r0]
- orrs r0, r3
- lsls r0, 4
- ands r2, r4
- orrs r2, r0
- strb r2, [r1, 0x18]
-_0802CB52:
- bl sub_802E1B0
- movs r6, 0
- mov r12, r7
- mov r5, sp
- adds r5, 0x20
- str r5, [sp, 0x28]
- ldr r2, _0802CE08 @ =gBattleMons
- mov r0, r8
- ldrb r1, [r0]
- movs r0, 0x58
- muls r0, r1
- adds r0, r2
- adds r4, r0, 0
- adds r4, 0x3B
- mov r7, r8
- mov r10, r2
- movs r5, 0x3
-_0802CB76:
- mov r3, sp
- adds r3, r6
- adds r3, 0x8
- ldrb r1, [r4]
- lsls r2, r6, 1
- adds r0, r5, 0
- lsls r0, r2
- ands r1, r0
- asrs r1, r2
- strb r1, [r3]
- adds r6, 0x1
- cmp r6, 0x3
- ble _0802CB76
- ldr r1, _0802CDF0 @ =gMoveSelectionCursor
- ldrb r0, [r7]
- adds r0, r1
- ldrb r0, [r0]
- add r0, sp
- adds r0, 0x8
- ldrb r0, [r0]
- ldr r2, [sp, 0x28]
- strb r0, [r2]
- ldrb r0, [r7]
- adds r0, r1
- ldrb r0, [r0]
- mov r2, sp
- adds r2, r0
- adds r2, 0x8
- ldr r1, _0802CDF8 @ =gUnknown_03004344
- ldrb r0, [r1]
- add r0, sp
- adds r0, 0x8
- ldrb r0, [r0]
- movs r3, 0
- strb r0, [r2]
- ldrb r0, [r1]
- mov r1, sp
- adds r1, r0
- adds r1, 0x8
- ldr r5, [sp, 0x28]
- ldrb r0, [r5]
- strb r0, [r1]
- strb r3, [r5]
- movs r6, 0
- ldr r2, [sp, 0x28]
-_0802CBD0:
- mov r0, sp
- adds r0, r6
- adds r0, 0x8
- ldrb r1, [r0]
- lsls r0, r6, 1
- lsls r1, r0
- ldrb r0, [r2]
- orrs r0, r1
- strb r0, [r2]
- adds r6, 0x1
- cmp r6, 0x3
- ble _0802CBD0
- ldrb r1, [r7]
- movs r0, 0x58
- muls r0, r1
- add r0, r10
- adds r0, 0x3B
- ldr r2, [sp, 0x28]
- ldrb r1, [r2]
- strb r1, [r0]
- movs r6, 0
- adds r4, r7, 0
- movs r3, 0x58
- movs r5, 0x24
- add r5, r10
- mov r8, r5
- mov r2, r9
- mov r7, r10
- adds r7, 0xC
- mov r5, r12
-_0802CC0C:
- lsls r1, r6, 1
- ldrb r0, [r4]
- muls r0, r3
- adds r1, r0
- adds r1, r7
- ldrh r0, [r2]
- strh r0, [r1]
- ldrb r0, [r4]
- adds r1, r0, 0
- muls r1, r3
- adds r1, r6, r1
- add r1, r8
- adds r0, r5, r6
- ldrb r0, [r0]
- strb r0, [r1]
- adds r2, 0x2
- adds r6, 0x1
- cmp r6, 0x3
- ble _0802CC0C
- ldr r2, _0802CDF4 @ =gActiveBank
- ldrb r1, [r2]
- movs r0, 0x58
- muls r0, r1
- mov r1, r10
- adds r1, 0x50
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x80
- lsls r1, 14
- ands r0, r1
- cmp r0, 0
- beq _0802CC4E
- b _0802CE1C
-_0802CC4E:
- movs r6, 0
- mov r0, sp
- adds r0, 0xC
- str r0, [sp, 0x24]
- add r1, sp, 0x14
- mov r10, r1
- ldr r3, _0802CE0C @ =gBattlePartyID
- mov r9, r3
- mov r8, r2
- movs r7, 0x64
- ldr r5, _0802CE10 @ =gPlayerParty
- adds r4, r0, 0
-_0802CC66:
- mov r1, r8
- ldrb r0, [r1]
- lsls r0, 1
- add r0, r9
- ldrh r0, [r0]
- muls r0, r7
- adds r0, r5
- adds r1, r6, 0
- adds r1, 0xD
- bl GetMonData
- strh r0, [r4]
- mov r2, r8
- ldrb r0, [r2]
- lsls r0, 1
- add r0, r9
- ldrh r0, [r0]
- muls r0, r7
- adds r0, r5
- adds r1, r6, 0
- adds r1, 0x11
- bl GetMonData
- mov r3, r10
- adds r1, r3, r6
- strb r0, [r1]
- adds r4, 0x2
- adds r6, 0x1
- cmp r6, 0x3
- ble _0802CC66
- ldr r1, _0802CE0C @ =gBattlePartyID
- ldr r0, _0802CDF4 @ =gActiveBank
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _0802CE10 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x15
- bl GetMonData
- ldr r5, [sp, 0x28]
- strb r0, [r5]
- movs r6, 0
- movs r5, 0x3
- ldr r4, [sp, 0x28]
-_0802CCC6:
- mov r3, sp
- adds r3, r6
- adds r3, 0x8
- lsls r2, r6, 1
- adds r1, r5, 0
- lsls r1, r2
- ldrb r0, [r4]
- ands r0, r1
- asrs r0, r2
- strb r0, [r3]
- adds r6, 0x1
- cmp r6, 0x3
- ble _0802CCC6
- ldr r4, _0802CDF0 @ =gMoveSelectionCursor
- ldr r3, _0802CDF4 @ =gActiveBank
- ldrb r0, [r3]
- adds r0, r4
- ldrb r1, [r0]
- lsls r1, 1
- ldr r0, [sp, 0x24]
- adds r1, r0, r1
- ldrh r6, [r1]
- ldr r2, _0802CDF8 @ =gUnknown_03004344
- ldrb r0, [r2]
- lsls r0, 1
- ldr r5, [sp, 0x24]
- adds r0, r5, r0
- ldrh r0, [r0]
- movs r5, 0
- strh r0, [r1]
- ldrb r0, [r2]
- lsls r0, 1
- ldr r1, [sp, 0x24]
- adds r0, r1, r0
- strh r6, [r0]
- ldrb r0, [r3]
- adds r0, r4
- ldrb r1, [r0]
- add r1, r10
- ldrb r6, [r1]
- ldrb r0, [r2]
- add r0, r10
- ldrb r0, [r0]
- strb r0, [r1]
- ldrb r0, [r2]
- add r0, r10
- strb r6, [r0]
- ldrb r0, [r3]
- adds r0, r4
- ldrb r0, [r0]
- add r0, sp
- adds r0, 0x8
- ldrb r0, [r0]
- ldr r1, [sp, 0x28]
- strb r0, [r1]
- ldrb r0, [r3]
- adds r0, r4
- ldrb r0, [r0]
- mov r1, sp
- adds r1, r0
- adds r1, 0x8
- ldrb r0, [r2]
- add r0, sp
- adds r0, 0x8
- ldrb r0, [r0]
- strb r0, [r1]
- ldrb r0, [r2]
- mov r1, sp
- adds r1, r0
- adds r1, 0x8
- ldr r2, [sp, 0x28]
- ldrb r0, [r2]
- strb r0, [r1]
- strb r5, [r2]
- movs r6, 0
- ldr r2, [sp, 0x28]
-_0802CD5E:
- mov r0, sp
- adds r0, r6
- adds r0, 0x8
- ldrb r1, [r0]
- lsls r0, r6, 1
- lsls r1, r0
- ldrb r0, [r2]
- orrs r0, r1
- strb r0, [r2]
- adds r6, 0x1
- cmp r6, 0x3
- ble _0802CD5E
- movs r6, 0
- ldr r3, _0802CE0C @ =gBattlePartyID
- mov r10, r3
- ldr r5, _0802CDF4 @ =gActiveBank
- mov r9, r5
- movs r0, 0x64
- mov r8, r0
- ldr r7, _0802CE10 @ =gPlayerParty
- ldr r5, [sp, 0x24]
- adds r5, 0x8
- ldr r4, [sp, 0x24]
-_0802CD8C:
- mov r1, r9
- ldrb r0, [r1]
- lsls r0, 1
- add r0, r10
- ldrh r0, [r0]
- mov r2, r8
- muls r2, r0
- adds r0, r2, 0
- adds r0, r7
- adds r1, r6, 0
- adds r1, 0xD
- adds r2, r4, 0
- bl SetMonData
- mov r3, r9
- ldrb r0, [r3]
- lsls r0, 1
- add r0, r10
- ldrh r0, [r0]
- mov r1, r8
- muls r1, r0
- adds r0, r1, 0
- adds r0, r7
- adds r1, r6, 0
- adds r1, 0x11
- adds r2, r5, 0
- bl SetMonData
- adds r5, 0x1
- adds r4, 0x2
- adds r6, 0x1
- cmp r6, 0x3
- ble _0802CD8C
- ldr r1, _0802CE0C @ =gBattlePartyID
- ldr r0, _0802CDF4 @ =gActiveBank
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _0802CE10 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x15
- ldr r2, [sp, 0x28]
- bl SetMonData
- b _0802CE1C
- .align 2, 0
-_0802CDEC: .4byte gMain
-_0802CDF0: .4byte gMoveSelectionCursor
-_0802CDF4: .4byte gActiveBank
-_0802CDF8: .4byte gUnknown_03004344
-_0802CDFC: .4byte gUnknown_02023A64
-_0802CE00: .4byte gDisableStructs
-_0802CE04: .4byte gBitTable
-_0802CE08: .4byte gBattleMons
-_0802CE0C: .4byte gBattlePartyID
-_0802CE10: .4byte gPlayerParty
-_0802CE14:
- ldrb r0, [r5]
- ldr r1, _0802CF20 @ =gUnknown_08400D49
- bl sub_802E12C
-_0802CE1C:
- ldr r1, _0802CF24 @ =gBattleBankFunc
- ldr r2, _0802CF28 @ =gActiveBank
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0802CF2C @ =sub_802C68C
- str r1, [r0]
- ldr r3, _0802CF30 @ =gMoveSelectionCursor
- ldrb r0, [r2]
- adds r0, r3
- ldr r1, _0802CF34 @ =gUnknown_03004344
- ldrb r1, [r1]
- strb r1, [r0]
- ldrb r0, [r2]
- adds r0, r3
- ldrb r0, [r0]
- movs r1, 0
- bl sub_802E3B4
- ldr r4, _0802CF38 @ =gUnknown_03004210
- ldr r1, _0802CF3C @ =0x00001016
- movs r0, 0x1C
- str r0, [sp]
- movs r0, 0x3A
- str r0, [sp, 0x4]
- adds r0, r4, 0
- movs r2, 0x17
- movs r3, 0x37
- bl FillWindowRect
- ldr r1, _0802CF40 @ =gUnknown_08400D38
- movs r2, 0xA4
- lsls r2, 2
- movs r0, 0x37
- str r0, [sp]
- adds r0, r4, 0
- movs r3, 0x17
- bl InitWindow
- adds r0, r4, 0
- bl sub_8002F44
- bl sub_802E220
- bl sub_802E2D4
-_0802CE78:
- ldr r6, _0802CF44 @ =gMain
- ldrh r1, [r6, 0x2E]
- movs r0, 0x6
- ands r0, r1
- cmp r0, 0
- beq _0802CEF0
- movs r0, 0x5
- bl PlaySE
- ldr r0, _0802CF34 @ =gUnknown_03004344
- ldrb r0, [r0]
- bl nullsub_7
- ldr r5, _0802CF30 @ =gMoveSelectionCursor
- ldr r4, _0802CF28 @ =gActiveBank
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- movs r1, 0
- bl sub_802E3B4
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- ldr r1, _0802CF20 @ =gUnknown_08400D49
- bl sub_802E12C
- ldr r1, _0802CF24 @ =gBattleBankFunc
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0802CF2C @ =sub_802C68C
- str r1, [r0]
- ldr r4, _0802CF38 @ =gUnknown_03004210
- ldr r1, _0802CF3C @ =0x00001016
- movs r0, 0x1C
- str r0, [sp]
- movs r0, 0x3A
- str r0, [sp, 0x4]
- adds r0, r4, 0
- movs r2, 0x17
- movs r3, 0x37
- bl FillWindowRect
- ldr r1, _0802CF40 @ =gUnknown_08400D38
- movs r2, 0xA4
- lsls r2, 2
- movs r0, 0x37
- str r0, [sp]
- adds r0, r4, 0
- movs r3, 0x17
- bl InitWindow
- adds r0, r4, 0
- bl sub_8002F44
- bl sub_802E220
- bl sub_802E2D4
-_0802CEF0:
- ldrh r1, [r6, 0x2E]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _0802CF8C
- ldr r3, _0802CF34 @ =gUnknown_03004344
- ldrb r2, [r3]
- movs r0, 0x1
- ands r0, r2
- cmp r0, 0
- beq _0802CF8C
- ldr r0, _0802CF30 @ =gMoveSelectionCursor
- ldr r1, _0802CF28 @ =gActiveBank
- ldrb r1, [r1]
- adds r1, r0
- ldrb r5, [r1]
- cmp r2, r5
- bne _0802CF48
- ldrb r0, [r1]
- movs r1, 0x1D
- bl sub_802E3B4
- b _0802CF4E
- .align 2, 0
-_0802CF20: .4byte gUnknown_08400D49
-_0802CF24: .4byte gBattleBankFunc
-_0802CF28: .4byte gActiveBank
-_0802CF2C: .4byte sub_802C68C
-_0802CF30: .4byte gMoveSelectionCursor
-_0802CF34: .4byte gUnknown_03004344
-_0802CF38: .4byte gUnknown_03004210
-_0802CF3C: .4byte 0x00001016
-_0802CF40: .4byte gUnknown_08400D38
-_0802CF44: .4byte gMain
-_0802CF48:
- ldrb r0, [r3]
- bl nullsub_7
-_0802CF4E:
- ldr r4, _0802CF78 @ =gUnknown_03004344
- ldrb r0, [r4]
- movs r1, 0x1
- eors r0, r1
- strb r0, [r4]
- movs r0, 0x5
- bl PlaySE
- ldr r1, _0802CF7C @ =gMoveSelectionCursor
- ldr r0, _0802CF80 @ =gActiveBank
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r4]
- ldrb r0, [r0]
- cmp r1, r0
- bne _0802CF84
- adds r0, r1, 0
- movs r1, 0
- bl sub_802E3B4
- b _0802CF8C
- .align 2, 0
-_0802CF78: .4byte gUnknown_03004344
-_0802CF7C: .4byte gMoveSelectionCursor
-_0802CF80: .4byte gActiveBank
-_0802CF84:
- ldrb r0, [r4]
- movs r1, 0x1B
- bl sub_802E3B4
-_0802CF8C:
- ldr r0, _0802CFC8 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _0802D020
- ldr r3, _0802CFCC @ =gUnknown_03004344
- ldrb r2, [r3]
- movs r0, 0x1
- ands r0, r2
- cmp r0, 0
- bne _0802D020
- ldr r1, _0802CFD0 @ =gUnknown_03004348
- movs r0, 0x1
- eors r0, r2
- ldrb r1, [r1]
- cmp r0, r1
- bcs _0802D020
- ldr r0, _0802CFD4 @ =gMoveSelectionCursor
- ldr r1, _0802CFD8 @ =gActiveBank
- ldrb r1, [r1]
- adds r1, r0
- ldrb r0, [r1]
- cmp r2, r0
- bne _0802CFDC
- ldrb r0, [r1]
- movs r1, 0x1D
- bl sub_802E3B4
- b _0802CFE2
- .align 2, 0
-_0802CFC8: .4byte gMain
-_0802CFCC: .4byte gUnknown_03004344
-_0802CFD0: .4byte gUnknown_03004348
-_0802CFD4: .4byte gMoveSelectionCursor
-_0802CFD8: .4byte gActiveBank
-_0802CFDC:
- ldrb r0, [r3]
- bl nullsub_7
-_0802CFE2:
- ldr r4, _0802D00C @ =gUnknown_03004344
- ldrb r0, [r4]
- movs r1, 0x1
- eors r0, r1
- strb r0, [r4]
- movs r0, 0x5
- bl PlaySE
- ldr r1, _0802D010 @ =gMoveSelectionCursor
- ldr r0, _0802D014 @ =gActiveBank
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r4]
- ldrb r0, [r0]
- cmp r1, r0
- bne _0802D018
- adds r0, r1, 0
- movs r1, 0
- bl sub_802E3B4
- b _0802D020
- .align 2, 0
-_0802D00C: .4byte gUnknown_03004344
-_0802D010: .4byte gMoveSelectionCursor
-_0802D014: .4byte gActiveBank
-_0802D018:
- ldrb r0, [r4]
- movs r1, 0x1B
- bl sub_802E3B4
-_0802D020:
- ldr r0, _0802D050 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0802D0A4
- ldr r3, _0802D054 @ =gUnknown_03004344
- ldrb r2, [r3]
- movs r0, 0x2
- ands r0, r2
- cmp r0, 0
- beq _0802D0A4
- ldr r0, _0802D058 @ =gMoveSelectionCursor
- ldr r1, _0802D05C @ =gActiveBank
- ldrb r1, [r1]
- adds r1, r0
- ldrb r5, [r1]
- cmp r2, r5
- bne _0802D060
- ldrb r0, [r1]
- movs r1, 0x1D
- bl sub_802E3B4
- b _0802D066
- .align 2, 0
-_0802D050: .4byte gMain
-_0802D054: .4byte gUnknown_03004344
-_0802D058: .4byte gMoveSelectionCursor
-_0802D05C: .4byte gActiveBank
-_0802D060:
- ldrb r0, [r3]
- bl nullsub_7
-_0802D066:
- ldr r4, _0802D090 @ =gUnknown_03004344
- ldrb r0, [r4]
- movs r1, 0x2
- eors r0, r1
- strb r0, [r4]
- movs r0, 0x5
- bl PlaySE
- ldr r1, _0802D094 @ =gMoveSelectionCursor
- ldr r0, _0802D098 @ =gActiveBank
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r4]
- ldrb r0, [r0]
- cmp r1, r0
- bne _0802D09C
- adds r0, r1, 0
- movs r1, 0
- bl sub_802E3B4
- b _0802D0A4
- .align 2, 0
-_0802D090: .4byte gUnknown_03004344
-_0802D094: .4byte gMoveSelectionCursor
-_0802D098: .4byte gActiveBank
-_0802D09C:
- ldrb r0, [r4]
- movs r1, 0x1B
- bl sub_802E3B4
-_0802D0A4:
- ldr r0, _0802D0E0 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0802D138
- ldr r3, _0802D0E4 @ =gUnknown_03004344
- ldrb r2, [r3]
- movs r0, 0x2
- ands r0, r2
- cmp r0, 0
- bne _0802D138
- ldr r1, _0802D0E8 @ =gUnknown_03004348
- movs r0, 0x2
- eors r0, r2
- ldrb r1, [r1]
- cmp r0, r1
- bcs _0802D138
- ldr r0, _0802D0EC @ =gMoveSelectionCursor
- ldr r1, _0802D0F0 @ =gActiveBank
- ldrb r1, [r1]
- adds r1, r0
- ldrb r0, [r1]
- cmp r2, r0
- bne _0802D0F4
- ldrb r0, [r1]
- movs r1, 0x1D
- bl sub_802E3B4
- b _0802D0FA
- .align 2, 0
-_0802D0E0: .4byte gMain
-_0802D0E4: .4byte gUnknown_03004344
-_0802D0E8: .4byte gUnknown_03004348
-_0802D0EC: .4byte gMoveSelectionCursor
-_0802D0F0: .4byte gActiveBank
-_0802D0F4:
- ldrb r0, [r3]
- bl nullsub_7
-_0802D0FA:
- ldr r4, _0802D124 @ =gUnknown_03004344
- ldrb r0, [r4]
- movs r1, 0x2
- eors r0, r1
- strb r0, [r4]
- movs r0, 0x5
- bl PlaySE
- ldr r1, _0802D128 @ =gMoveSelectionCursor
- ldr r0, _0802D12C @ =gActiveBank
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r4]
- ldrb r0, [r0]
- cmp r1, r0
- bne _0802D130
- adds r0, r1, 0
- movs r1, 0
- bl sub_802E3B4
- b _0802D138
- .align 2, 0
-_0802D124: .4byte gUnknown_03004344
-_0802D128: .4byte gMoveSelectionCursor
-_0802D12C: .4byte gActiveBank
-_0802D130:
- ldrb r0, [r4]
- movs r1, 0x1B
- bl sub_802E3B4
-_0802D138:
- 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 sub_802CA60
-
- thumb_func_start sub_802D148
-sub_802D148: @ 802D148
- push {lr}
- ldr r0, _0802D178 @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- bne _0802D174
- movs r0, 0x5A
- bl m4aSongNumStop
- ldr r3, _0802D17C @ =gMain
- ldr r0, _0802D180 @ =0x0000043d
- adds r2, r3, r0
- ldrb r1, [r2]
- movs r0, 0x3
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
- ldr r0, _0802D184 @ =gPreBattleCallback1
- ldr r0, [r0]
- str r0, [r3]
- ldr r0, _0802D188 @ =c2_8011A1C
- bl SetMainCallback2
-_0802D174:
- pop {r0}
- bx r0
- .align 2, 0
-_0802D178: .4byte gReceivedRemoteLinkPlayers
-_0802D17C: .4byte gMain
-_0802D180: .4byte 0x0000043d
-_0802D184: .4byte gPreBattleCallback1
-_0802D188: .4byte c2_8011A1C
- thumb_func_end sub_802D148
-
- thumb_func_start sub_802D18C
-sub_802D18C: @ 802D18C
- push {lr}
- ldr r0, _0802D1BC @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0802D1F2
- ldr r0, _0802D1C0 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0802D1D0
- bl sub_800832C
- ldr r1, _0802D1C4 @ =gBattleBankFunc
- ldr r0, _0802D1C8 @ =gActiveBank
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0802D1CC @ =sub_802D148
- str r1, [r0]
- b _0802D1F2
- .align 2, 0
-_0802D1BC: .4byte gPaletteFade
-_0802D1C0: .4byte gBattleTypeFlags
-_0802D1C4: .4byte gBattleBankFunc
-_0802D1C8: .4byte gActiveBank
-_0802D1CC: .4byte sub_802D148
-_0802D1D0:
- movs r0, 0x5A
- bl m4aSongNumStop
- ldr r2, _0802D1F8 @ =gMain
- ldr r0, _0802D1FC @ =0x0000043d
- adds r3, r2, r0
- ldrb r1, [r3]
- movs r0, 0x3
- negs r0, r0
- ands r0, r1
- strb r0, [r3]
- ldr r0, _0802D200 @ =gPreBattleCallback1
- ldr r0, [r0]
- str r0, [r2]
- ldr r0, [r2, 0x8]
- bl SetMainCallback2
-_0802D1F2:
- pop {r0}
- bx r0
- .align 2, 0
-_0802D1F8: .4byte gMain
-_0802D1FC: .4byte 0x0000043d
-_0802D200: .4byte gPreBattleCallback1
- thumb_func_end sub_802D18C
-
- thumb_func_start sub_802D204
-sub_802D204: @ 802D204
- push {lr}
- ldr r2, _0802D22C @ =gSprites
- ldr r1, _0802D230 @ =gObjectBankIDs
- ldr r0, _0802D234 @ =gActiveBank
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, [r0]
- ldr r0, _0802D238 @ =SpriteCallbackDummy
- cmp r1, r0
- bne _0802D228
- bl PlayerBufferExecCompleted
-_0802D228:
- pop {r0}
- bx r0
- .align 2, 0
-_0802D22C: .4byte gSprites
-_0802D230: .4byte gObjectBankIDs
-_0802D234: .4byte gActiveBank
-_0802D238: .4byte SpriteCallbackDummy
- thumb_func_end sub_802D204
-
- thumb_func_start sub_802D23C
-sub_802D23C: @ 802D23C
- push {lr}
- ldr r2, _0802D264 @ =gSprites
- ldr r1, _0802D268 @ =gObjectBankIDs
- ldr r0, _0802D26C @ =gActiveBank
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, [r0]
- ldr r0, _0802D270 @ =SpriteCallbackDummy
- cmp r1, r0
- bne _0802D260
- bl PlayerBufferExecCompleted
-_0802D260:
- pop {r0}
- bx r0
- .align 2, 0
-_0802D264: .4byte gSprites
-_0802D268: .4byte gObjectBankIDs
-_0802D26C: .4byte gActiveBank
-_0802D270: .4byte SpriteCallbackDummy
- thumb_func_end sub_802D23C
-
- thumb_func_start sub_802D274
-sub_802D274: @ 802D274
- push {r4-r6,lr}
- ldr r6, _0802D2CC @ =gSprites
- ldr r5, _0802D2D0 @ =gObjectBankIDs
- ldr r4, _0802D2D4 @ =gActiveBank
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r1, r6, 0
- adds r1, 0x1C
- adds r0, r1
- ldr r1, [r0]
- ldr r0, _0802D2D8 @ =SpriteCallbackDummy
- cmp r1, r0
- bne _0802D2C6
- ldr r0, _0802D2DC @ =gSaveBlock2
- ldrb r0, [r0, 0x8]
- bl nullsub_10
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- bl FreeSpriteOamMatrix
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- bl DestroySprite
- bl PlayerBufferExecCompleted
-_0802D2C6:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0802D2CC: .4byte gSprites
-_0802D2D0: .4byte gObjectBankIDs
-_0802D2D4: .4byte gActiveBank
-_0802D2D8: .4byte SpriteCallbackDummy
-_0802D2DC: .4byte gSaveBlock2
- thumb_func_end sub_802D274
-
- thumb_func_start sub_802D2E0
-sub_802D2E0: @ 802D2E0
- push {lr}
- ldr r3, _0802D314 @ =gActiveBank
- ldrb r0, [r3]
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- ldr r2, _0802D318 @ =0x02017810
- adds r1, r2
- ldrb r0, [r1, 0x9]
- subs r0, 0x1
- strb r0, [r1, 0x9]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFF
- bne _0802D310
- ldrb r0, [r3]
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- movs r0, 0
- strb r0, [r1, 0x9]
- bl PlayerBufferExecCompleted
-_0802D310:
- pop {r0}
- bx r0
- .align 2, 0
-_0802D314: .4byte gActiveBank
-_0802D318: .4byte 0x02017810
- thumb_func_end sub_802D2E0
-
- thumb_func_start sub_802D31C
-sub_802D31C: @ 802D31C
- push {r4-r7,lr}
- movs r6, 0
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- beq _0802D340
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- beq _0802D374
- ldr r0, _0802D360 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0802D374
-_0802D340:
- ldr r2, _0802D364 @ =gSprites
- ldr r1, _0802D368 @ =gHealthboxIDs
- ldr r0, _0802D36C @ =gActiveBank
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, [r0]
- ldr r0, _0802D370 @ =SpriteCallbackDummy
- cmp r1, r0
- bne _0802D3AA
- b _0802D3A8
- .align 2, 0
-_0802D360: .4byte gBattleTypeFlags
-_0802D364: .4byte gSprites
-_0802D368: .4byte gHealthboxIDs
-_0802D36C: .4byte gActiveBank
-_0802D370: .4byte SpriteCallbackDummy
-_0802D374:
- ldr r2, _0802D45C @ =gSprites
- ldr r5, _0802D460 @ =gHealthboxIDs
- ldr r0, _0802D464 @ =gActiveBank
- ldrb r3, [r0]
- adds r0, r3, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r4, [r0]
- ldr r0, _0802D468 @ =SpriteCallbackDummy
- cmp r4, r0
- bne _0802D3AA
- movs r0, 0x2
- eors r3, r0
- adds r0, r3, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldr r0, [r0]
- cmp r0, r4
- bne _0802D3AA
-_0802D3A8:
- movs r6, 0x1
-_0802D3AA:
- bl IsCryPlayingOrClearCrySongs
- lsls r0, 24
- cmp r0, 0
- beq _0802D3B6
- movs r6, 0
-_0802D3B6:
- cmp r6, 0
- bne _0802D3BC
- b _0802D4DA
-_0802D3BC:
- ldr r7, _0802D464 @ =gActiveBank
- ldrb r2, [r7]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- ldr r5, _0802D46C @ =0x02017810
- adds r4, r0, r5
- ldrb r1, [r4, 0x1]
- movs r3, 0x1
- adds r0, r3, 0
- ands r0, r1
- cmp r0, 0
- bne _0802D3D8
- b _0802D4DA
-_0802D3D8:
- movs r6, 0x2
- adds r1, r6, 0
- eors r1, r2
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldrb r1, [r0, 0x1]
- adds r0, r3, 0
- ands r0, r1
- cmp r0, 0
- beq _0802D4DA
- ldrb r1, [r4]
- movs r3, 0x7F
- adds r0, r3, 0
- ands r0, r1
- strb r0, [r4]
- ldrb r0, [r7]
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r1, r5
- ldrb r2, [r1, 0x1]
- movs r4, 0x2
- negs r4, r4
- adds r0, r4, 0
- ands r0, r2
- strb r0, [r1, 0x1]
- ldrb r0, [r7]
- adds r1, r6, 0
- eors r1, r0
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldrb r1, [r0]
- ands r3, r1
- strb r3, [r0]
- ldrb r0, [r7]
- adds r1, r6, 0
- eors r1, r0
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldrb r1, [r0, 0x1]
- ands r4, r1
- strb r4, [r0, 0x1]
- ldr r4, _0802D470 @ =0x000027f9
- adds r0, r4, 0
- bl FreeSpriteTilesByTag
- adds r0, r4, 0
- bl FreeSpritePaletteByTag
- ldr r0, _0802D474 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0802D47C
- ldr r0, _0802D478 @ =gMPlay_BGM
- bl m4aMPlayContinue
- b _0802D488
- .align 2, 0
-_0802D45C: .4byte gSprites
-_0802D460: .4byte gHealthboxIDs
-_0802D464: .4byte gActiveBank
-_0802D468: .4byte SpriteCallbackDummy
-_0802D46C: .4byte 0x02017810
-_0802D470: .4byte 0x000027f9
-_0802D474: .4byte gBattleTypeFlags
-_0802D478: .4byte gMPlay_BGM
-_0802D47C:
- ldr r0, _0802D4E0 @ =gMPlay_BGM
- ldr r1, _0802D4E4 @ =0x0000ffff
- movs r2, 0x80
- lsls r2, 1
- bl m4aMPlayVolumeControl
-_0802D488:
- ldr r7, _0802D4E8 @ =gBattlePartyID
- ldr r4, _0802D4EC @ =gActiveBank
- ldrb r1, [r4]
- lsls r0, r1, 1
- adds r0, r7
- ldrh r0, [r0]
- movs r6, 0x64
- muls r0, r6
- ldr r5, _0802D4F0 @ =gPlayerParty
- adds r0, r5
- bl sub_80324F8
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- beq _0802D4BE
- ldrb r0, [r4]
- movs r1, 0x2
- eors r1, r0
- lsls r0, r1, 1
- adds r0, r7
- ldrh r0, [r0]
- muls r0, r6
- adds r0, r5
- bl sub_80324F8
-_0802D4BE:
- ldrb r1, [r4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- ldr r1, _0802D4F4 @ =0x02017810
- adds r0, r1
- movs r1, 0x3
- strb r1, [r0, 0x9]
- ldr r1, _0802D4F8 @ =gBattleBankFunc
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0802D4FC @ =sub_802D2E0
- str r1, [r0]
-_0802D4DA:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802D4E0: .4byte gMPlay_BGM
-_0802D4E4: .4byte 0x0000ffff
-_0802D4E8: .4byte gBattlePartyID
-_0802D4EC: .4byte gActiveBank
-_0802D4F0: .4byte gPlayerParty
-_0802D4F4: .4byte 0x02017810
-_0802D4F8: .4byte gBattleBankFunc
-_0802D4FC: .4byte sub_802D2E0
- thumb_func_end sub_802D31C
-
- thumb_func_start sub_802D500
-sub_802D500: @ 802D500
- push {r4-r7,lr}
- ldr r5, _0802D654 @ =gActiveBank
- ldrb r2, [r5]
- lsls r3, r2, 1
- adds r0, r3, r2
- lsls r0, 2
- ldr r4, _0802D658 @ =0x02017810
- adds r0, r4
- ldrb r1, [r0]
- movs r7, 0x88
- adds r0, r7, 0
- ands r0, r1
- cmp r0, 0
- bne _0802D530
- ldr r0, _0802D65C @ =gBattlePartyID
- adds r0, r3, r0
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _0802D660 @ =gPlayerParty
- adds r1, r0
- adds r0, r2, 0
- bl sub_8141828
-_0802D530:
- ldrb r0, [r5]
- movs r6, 0x2
- adds r2, r6, 0
- eors r2, r0
- lsls r3, r2, 1
- adds r0, r3, r2
- lsls r0, 2
- adds r0, r4
- ldrb r1, [r0]
- adds r0, r7, 0
- ands r0, r1
- cmp r0, 0
- bne _0802D55E
- ldr r0, _0802D65C @ =gBattlePartyID
- adds r0, r3, r0
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _0802D660 @ =gPlayerParty
- adds r1, r0
- adds r0, r2, 0
- bl sub_8141828
-_0802D55E:
- ldrb r2, [r5]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r0, r4
- ldrb r1, [r0]
- movs r3, 0x8
- adds r0, r3, 0
- ands r0, r1
- cmp r0, 0
- bne _0802D64C
- adds r1, r6, 0
- eors r1, r2
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrb r1, [r0]
- adds r0, r3, 0
- ands r0, r1
- cmp r0, 0
- bne _0802D64C
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- beq _0802D5EE
- ldr r0, _0802D664 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- bne _0802D5EE
- ldr r1, _0802D668 @ =gUnknown_0300434C
- ldrb r0, [r5]
- eors r0, r6
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _0802D66C @ =gSprites
- adds r0, r1
- bl DestroySprite
- ldr r4, _0802D670 @ =gHealthboxIDs
- ldrb r0, [r5]
- adds r1, r6, 0
- eors r1, r0
- adds r0, r1, r4
- ldrb r0, [r0]
- ldr r2, _0802D65C @ =gBattlePartyID
- lsls r1, 1
- adds r1, r2
- ldrh r2, [r1]
- movs r1, 0x64
- muls r1, r2
- ldr r2, _0802D660 @ =gPlayerParty
- adds r1, r2
- movs r2, 0
- bl sub_8045A5C
- ldrb r0, [r5]
- eors r0, r6
- bl sub_804777C
- ldrb r0, [r5]
- eors r0, r6
- adds r0, r4
- ldrb r0, [r0]
- bl sub_8043DFC
-_0802D5EE:
- ldr r1, _0802D668 @ =gUnknown_0300434C
- ldr r4, _0802D654 @ =gActiveBank
- ldrb r0, [r4]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _0802D66C @ =gSprites
- adds r0, r1
- bl DestroySprite
- ldr r5, _0802D670 @ =gHealthboxIDs
- ldrb r1, [r4]
- adds r0, r1, r5
- ldrb r0, [r0]
- ldr r2, _0802D65C @ =gBattlePartyID
- lsls r1, 1
- adds r1, r2
- ldrh r2, [r1]
- movs r1, 0x64
- muls r1, r2
- ldr r2, _0802D660 @ =gPlayerParty
- adds r1, r2
- movs r2, 0
- bl sub_8045A5C
- ldrb r0, [r4]
- bl sub_804777C
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- bl sub_8043DFC
- ldr r2, _0802D674 @ =0x02017840
- ldrb r1, [r2, 0x9]
- movs r0, 0x2
- negs r0, r0
- ands r0, r1
- strb r0, [r2, 0x9]
- ldr r1, _0802D678 @ =gBattleBankFunc
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0802D67C @ =sub_802D31C
- str r1, [r0]
-_0802D64C:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802D654: .4byte gActiveBank
-_0802D658: .4byte 0x02017810
-_0802D65C: .4byte gBattlePartyID
-_0802D660: .4byte gPlayerParty
-_0802D664: .4byte gBattleTypeFlags
-_0802D668: .4byte gUnknown_0300434C
-_0802D66C: .4byte gSprites
-_0802D670: .4byte gHealthboxIDs
-_0802D674: .4byte 0x02017840
-_0802D678: .4byte gBattleBankFunc
-_0802D67C: .4byte sub_802D31C
- thumb_func_end sub_802D500
-
- thumb_func_start sub_802D680
-sub_802D680: @ 802D680
- push {r4-r6,lr}
- ldr r2, _0802D710 @ =gSprites
- ldr r0, _0802D714 @ =gHealthboxIDs
- ldr r6, _0802D718 @ =gActiveBank
- ldrb r3, [r6]
- adds r0, r3, r0
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, [r0]
- ldr r0, _0802D71C @ =SpriteCallbackDummy
- cmp r1, r0
- bne _0802D708
- lsls r0, r3, 1
- adds r0, r3
- lsls r0, 2
- ldr r5, _0802D720 @ =0x02017810
- adds r2, r0, r5
- ldrb r1, [r2, 0x1]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0802D708
- ldrb r1, [r2]
- movs r0, 0x7F
- ands r0, r1
- strb r0, [r2]
- ldrb r0, [r6]
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r1, r5
- ldrb r2, [r1, 0x1]
- movs r0, 0x2
- negs r0, r0
- ands r0, r2
- strb r0, [r1, 0x1]
- ldr r4, _0802D724 @ =0x000027f9
- adds r0, r4, 0
- bl FreeSpriteTilesByTag
- adds r0, r4, 0
- bl FreeSpritePaletteByTag
- ldrb r2, [r6]
- lsls r0, r2, 2
- adds r1, r5, 0
- subs r1, 0x10
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _0802D6FC
- adds r0, r2, 0
- adds r1, r2, 0
- movs r3, 0x6
- bl move_anim_start_t4
-_0802D6FC:
- ldr r0, _0802D728 @ =gBattleBankFunc
- ldrb r1, [r6]
- lsls r1, 2
- adds r1, r0
- ldr r0, _0802D72C @ =sub_802D730
- str r0, [r1]
-_0802D708:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0802D710: .4byte gSprites
-_0802D714: .4byte gHealthboxIDs
-_0802D718: .4byte gActiveBank
-_0802D71C: .4byte SpriteCallbackDummy
-_0802D720: .4byte 0x02017810
-_0802D724: .4byte 0x000027f9
-_0802D728: .4byte gBattleBankFunc
-_0802D72C: .4byte sub_802D730
- thumb_func_end sub_802D680
-
- thumb_func_start sub_802D730
-sub_802D730: @ 802D730
- push {r4,lr}
- ldr r4, _0802D780 @ =gActiveBank
- ldrb r1, [r4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- ldr r1, _0802D784 @ =0x02017810
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- bne _0802D77A
- bl IsCryPlayingOrClearCrySongs
- lsls r0, 24
- cmp r0, 0
- bne _0802D77A
- ldr r0, _0802D788 @ =gMPlay_BGM
- ldr r1, _0802D78C @ =0x0000ffff
- movs r2, 0x80
- lsls r2, 1
- bl m4aMPlayVolumeControl
- ldr r2, _0802D790 @ =gBattlePartyID
- ldrb r1, [r4]
- lsls r0, r1, 1
- adds r0, r2
- ldrh r2, [r0]
- movs r0, 0x64
- muls r0, r2
- ldr r2, _0802D794 @ =gPlayerParty
- adds r0, r2
- bl sub_80324F8
- bl PlayerBufferExecCompleted
-_0802D77A:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0802D780: .4byte gActiveBank
-_0802D784: .4byte 0x02017810
-_0802D788: .4byte gMPlay_BGM
-_0802D78C: .4byte 0x0000ffff
-_0802D790: .4byte gBattlePartyID
-_0802D794: .4byte gPlayerParty
- thumb_func_end sub_802D730
-
- thumb_func_start sub_802D798
-sub_802D798: @ 802D798
- push {r4-r6,lr}
- ldr r5, _0802D844 @ =gActiveBank
- ldrb r2, [r5]
- lsls r3, r2, 1
- adds r0, r3, r2
- lsls r0, 2
- ldr r6, _0802D848 @ =0x02017810
- adds r0, r6
- ldrb r1, [r0]
- movs r0, 0x88
- ands r0, r1
- cmp r0, 0
- bne _0802D7C6
- ldr r0, _0802D84C @ =gBattlePartyID
- adds r0, r3, r0
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _0802D850 @ =gPlayerParty
- adds r1, r0
- adds r0, r2, 0
- bl sub_8141828
-_0802D7C6:
- ldr r4, _0802D854 @ =gSprites
- ldr r0, _0802D858 @ =gUnknown_0300434C
- ldrb r2, [r5]
- adds r0, r2, r0
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r3, r0, 2
- adds r0, r4, 0
- adds r0, 0x1C
- adds r0, r3, r0
- ldr r1, [r0]
- ldr r0, _0802D85C @ =SpriteCallbackDummy
- cmp r1, r0
- bne _0802D83C
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r0, r6
- ldrb r1, [r0]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- bne _0802D83C
- adds r0, r3, r4
- bl DestroySprite
- ldr r4, _0802D860 @ =gHealthboxIDs
- ldrb r1, [r5]
- adds r0, r1, r4
- ldrb r0, [r0]
- ldr r2, _0802D84C @ =gBattlePartyID
- lsls r1, 1
- adds r1, r2
- ldrh r2, [r1]
- movs r1, 0x64
- muls r1, r2
- ldr r2, _0802D850 @ =gPlayerParty
- adds r1, r2
- movs r2, 0
- bl sub_8045A5C
- ldrb r0, [r5]
- bl sub_804777C
- ldrb r0, [r5]
- adds r0, r4
- ldrb r0, [r0]
- bl sub_8043DFC
- ldrb r0, [r5]
- bl sub_8031F88
- ldr r1, _0802D864 @ =gBattleBankFunc
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0802D868 @ =sub_802D680
- str r1, [r0]
-_0802D83C:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0802D844: .4byte gActiveBank
-_0802D848: .4byte 0x02017810
-_0802D84C: .4byte gBattlePartyID
-_0802D850: .4byte gPlayerParty
-_0802D854: .4byte gSprites
-_0802D858: .4byte gUnknown_0300434C
-_0802D85C: .4byte SpriteCallbackDummy
-_0802D860: .4byte gHealthboxIDs
-_0802D864: .4byte gBattleBankFunc
-_0802D868: .4byte sub_802D680
- thumb_func_end sub_802D798
-
- thumb_func_start c3_0802FDF4
-c3_0802FDF4: @ 802D86C
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl IsCryPlayingOrClearCrySongs
- lsls r0, 24
- cmp r0, 0
- bne _0802D88E
- ldr r0, _0802D894 @ =gMPlay_BGM
- ldr r1, _0802D898 @ =0x0000ffff
- movs r2, 0x80
- lsls r2, 1
- bl m4aMPlayVolumeControl
- adds r0, r4, 0
- bl DestroyTask
-_0802D88E:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0802D894: .4byte gMPlay_BGM
-_0802D898: .4byte 0x0000ffff
- thumb_func_end c3_0802FDF4
-
- thumb_func_start bx_t1_healthbar_update
-bx_t1_healthbar_update: @ 802D89C
- push {r4-r6,lr}
- ldr r5, _0802D8DC @ =gActiveBank
- ldrb r0, [r5]
- ldr r6, _0802D8E0 @ =gHealthboxIDs
- adds r1, r0, r6
- ldrb r1, [r1]
- movs r2, 0
- movs r3, 0
- bl sub_8045C78
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- ldrb r0, [r5]
- adds r0, r6
- ldrb r0, [r0]
- bl sub_8043DFC
- lsls r4, 16
- asrs r1, r4, 16
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _0802D8E4
- ldrb r0, [r5]
- adds r0, r6
- ldrb r0, [r0]
- movs r2, 0
- bl sub_80440EC
- b _0802D8FE
- .align 2, 0
-_0802D8DC: .4byte gActiveBank
-_0802D8E0: .4byte gHealthboxIDs
-_0802D8E4:
- ldr r2, _0802D904 @ =gBattlePartyID
- ldrb r1, [r5]
- lsls r0, r1, 1
- adds r0, r2
- ldrh r2, [r0]
- movs r0, 0x64
- muls r0, r2
- ldr r2, _0802D908 @ =gPlayerParty
- adds r0, r2
- bl sub_80324F8
- bl PlayerBufferExecCompleted
-_0802D8FE:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0802D904: .4byte gBattlePartyID
-_0802D908: .4byte gPlayerParty
- thumb_func_end bx_t1_healthbar_update
-
- thumb_func_start sub_802D90C
-sub_802D90C: @ 802D90C
- push {lr}
- ldr r0, _0802D920 @ =gUnknown_03004210
- ldrh r0, [r0, 0x16]
- cmp r0, 0
- bne _0802D91A
- bl PlayerBufferExecCompleted
-_0802D91A:
- pop {r0}
- bx r0
- .align 2, 0
-_0802D920: .4byte gUnknown_03004210
- thumb_func_end sub_802D90C
-
- thumb_func_start sub_802D924
-sub_802D924: @ 802D924
- 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 r9, r0
- ldr r1, _0802DA24 @ =gTasks
- lsls r0, 2
- add r0, r9
- lsls r0, 3
- adds r0, r1
- mov r8, r0
- ldrb r0, [r0, 0x8]
- mov r10, r0
- mov r1, r8
- ldrb r7, [r1, 0xC]
- str r7, [sp, 0x8]
- ldrh r2, [r1, 0xA]
- str r2, [sp, 0xC]
- bl IsDoubleBattle
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0802D96A
- ldr r1, _0802DA28 @ =gBattlePartyID
- lsls r0, r7, 1
- adds r0, r1
- ldrh r0, [r0]
- cmp r10, r0
- bne _0802D96A
- b _0802DA80
-_0802D96A:
- movs r0, 0x64
- mov r1, r10
- muls r1, r0
- ldr r0, _0802DA2C @ =gPlayerParty
- adds r6, r1, r0
- adds r0, r6, 0
- movs r1, 0xB
- bl GetMonData
- adds r5, r0, 0
- lsls r5, 16
- lsrs r5, 16
- adds r0, r6, 0
- movs r1, 0x38
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r6, 0
- movs r1, 0x19
- bl GetMonData
- str r0, [sp, 0x4]
- ldr r3, _0802DA30 @ =gExperienceTables
- adds r4, 0x1
- lsls r4, 2
- ldr r2, _0802DA34 @ =gBaseStats
- lsls r1, r5, 3
- subs r1, r5
- lsls r1, 2
- adds r1, r2
- ldrb r2, [r1, 0x13]
- movs r1, 0xCA
- lsls r1, 1
- muls r1, r2
- adds r4, r1
- adds r4, r3
- ldr r2, [r4]
- str r2, [sp]
- ldr r3, [sp, 0xC]
- lsls r1, r3, 16
- asrs r1, 16
- adds r0, r1
- cmp r0, r2
- bcc _0802DA58
- adds r0, r6, 0
- movs r1, 0x19
- mov r2, sp
- bl SetMonData
- adds r0, r6, 0
- bl CalculateMonStats
- ldr r2, [sp]
- add r0, sp, 0x4
- ldrh r0, [r0]
- subs r2, r0
- ldr r0, [sp, 0xC]
- subs r2, r0, r2
- ldr r4, _0802DA38 @ =gActiveBank
- ldrb r5, [r4]
- strb r7, [r4]
- lsls r2, 16
- lsrs r2, 16
- movs r0, 0x1
- movs r1, 0xB
- bl dp01_build_cmdbuf_x21_a_bb
- strb r5, [r4]
- bl IsDoubleBattle
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0802DA40
- ldr r2, _0802DA28 @ =gBattlePartyID
- lsls r0, r7, 1
- adds r0, r2
- mov r1, r10
- ldrh r0, [r0]
- cmp r1, r0
- beq _0802DA1E
- movs r0, 0x2
- eors r7, r0
- lsls r0, r7, 1
- adds r0, r2
- ldrh r0, [r0]
- cmp r1, r0
- bne _0802DA40
-_0802DA1E:
- ldr r0, _0802DA3C @ =sub_802DCB0
- b _0802DA82
- .align 2, 0
-_0802DA24: .4byte gTasks
-_0802DA28: .4byte gBattlePartyID
-_0802DA2C: .4byte gPlayerParty
-_0802DA30: .4byte gExperienceTables
-_0802DA34: .4byte gBaseStats
-_0802DA38: .4byte gActiveBank
-_0802DA3C: .4byte sub_802DCB0
-_0802DA40:
- ldr r0, _0802DA50 @ =gTasks
- mov r2, r9
- lsls r1, r2, 2
- add r1, r9
- lsls r1, 3
- adds r1, r0
- ldr r0, _0802DA54 @ =sub_802DDC4
- b _0802DA84
- .align 2, 0
-_0802DA50: .4byte gTasks
-_0802DA54: .4byte sub_802DDC4
-_0802DA58:
- str r0, [sp, 0x4]
- add r2, sp, 0x4
- adds r0, r6, 0
- movs r1, 0x19
- bl SetMonData
- ldr r1, _0802DA78 @ =gBattleBankFunc
- ldr r3, [sp, 0x8]
- lsls r0, r3, 2
- adds r0, r1
- ldr r1, _0802DA7C @ =sub_802D90C
- str r1, [r0]
- mov r0, r9
- bl DestroyTask
- b _0802DA86
- .align 2, 0
-_0802DA78: .4byte gBattleBankFunc
-_0802DA7C: .4byte sub_802D90C
-_0802DA80:
- ldr r0, _0802DA98 @ =sub_802DA9C
-_0802DA82:
- mov r1, r8
-_0802DA84:
- str r0, [r1]
-_0802DA86:
- add sp, 0x10
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802DA98: .4byte sub_802DA9C
- thumb_func_end sub_802D924
-
- thumb_func_start sub_802DA9C
-sub_802DA9C: @ 802DA9C
- push {r4-r6,lr}
- mov r6, r10
- mov r5, r9
- mov r4, r8
- push {r4-r6}
- sub sp, 0x4
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0802DB54 @ =gTasks
- lsls r2, r0, 2
- mov r8, r2
- add r8, r0
- mov r0, r8
- lsls r0, 3
- mov r8, r0
- add r8, r1
- mov r2, r8
- ldrb r1, [r2, 0x8]
- movs r0, 0xA
- ldrsh r2, [r2, r0]
- mov r9, r2
- mov r2, r8
- ldrb r2, [r2, 0xC]
- mov r10, r2
- movs r0, 0x64
- adds r6, r1, 0
- muls r6, r0
- ldr r0, _0802DB58 @ =gPlayerParty
- adds r6, r0
- adds r0, r6, 0
- movs r1, 0x38
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r6, 0
- movs r1, 0xB
- bl GetMonData
- adds r5, r0, 0
- lsls r5, 16
- lsrs r5, 16
- adds r0, r6, 0
- movs r1, 0x19
- bl GetMonData
- adds r3, r0, 0
- ldr r6, _0802DB5C @ =gExperienceTables
- lsls r1, r4, 2
- ldr r2, _0802DB60 @ =gBaseStats
- lsls r0, r5, 3
- subs r0, r5
- lsls r0, 2
- adds r0, r2
- ldrb r2, [r0, 0x13]
- movs r0, 0xCA
- lsls r0, 1
- muls r0, r2
- adds r1, r0
- adds r1, r6
- ldr r1, [r1]
- subs r3, r1
- adds r4, 0x1
- lsls r4, 2
- adds r4, r0
- adds r4, r6
- ldr r2, [r4]
- subs r2, r1
- ldr r0, _0802DB64 @ =gHealthboxIDs
- add r0, r10
- ldrb r1, [r0]
- mov r0, r9
- negs r0, r0
- str r0, [sp]
- mov r0, r10
- bl sub_8043D84
- movs r0, 0x21
- bl PlaySE
- ldr r0, _0802DB68 @ =sub_802DB6C
- mov r1, r8
- str r0, [r1]
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0802DB54: .4byte gTasks
-_0802DB58: .4byte gPlayerParty
-_0802DB5C: .4byte gExperienceTables
-_0802DB60: .4byte gBaseStats
-_0802DB64: .4byte gHealthboxIDs
-_0802DB68: .4byte sub_802DB6C
- thumb_func_end sub_802DA9C
-
- thumb_func_start sub_802DB6C
-sub_802DB6C: @ 802DB6C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldr r1, _0802DB98 @ =gTasks
- lsls r0, 2
- add r0, r8
- lsls r0, 3
- adds r6, r0, r1
- ldrh r1, [r6, 0x1C]
- movs r2, 0x1C
- ldrsh r0, [r6, r2]
- cmp r0, 0xC
- bgt _0802DB9C
- adds r0, r1, 0x1
- strh r0, [r6, 0x1C]
- b _0802DC98
- .align 2, 0
-_0802DB98: .4byte gTasks
-_0802DB9C:
- ldrb r0, [r6, 0x8]
- mov r9, r0
- ldrh r2, [r6, 0xA]
- mov r10, r2
- ldrb r7, [r6, 0xC]
- ldr r5, _0802DC64 @ =gHealthboxIDs
- adds r5, r7, r5
- ldrb r1, [r5]
- adds r0, r7, 0
- movs r2, 0x1
- movs r3, 0
- bl sub_8045C78
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- ldrb r0, [r5]
- bl sub_8043DFC
- lsls r4, 16
- asrs r4, 16
- movs r0, 0x1
- negs r0, r0
- cmp r4, r0
- bne _0802DC98
- movs r0, 0x21
- bl m4aSongNumStop
- movs r0, 0x64
- mov r1, r9
- muls r1, r0
- ldr r0, _0802DC68 @ =gPlayerParty
- adds r5, r1, r0
- adds r0, r5, 0
- movs r1, 0x38
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r5, 0
- movs r1, 0x19
- bl GetMonData
- str r0, [sp, 0x4]
- adds r0, r5, 0
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- ldr r3, _0802DC6C @ =gExperienceTables
- adds r4, 0x1
- lsls r4, 2
- ldr r2, _0802DC70 @ =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, r3
- ldr r1, [r4]
- str r1, [sp]
- mov r2, r10
- lsls r0, r2, 16
- asrs r4, r0, 16
- ldr r0, [sp, 0x4]
- adds r0, r4
- cmp r0, r1
- blt _0802DC7C
- adds r0, r5, 0
- movs r1, 0x19
- mov r2, sp
- bl SetMonData
- adds r0, r5, 0
- bl CalculateMonStats
- ldr r2, [sp]
- add r0, sp, 0x4
- ldrh r0, [r0]
- subs r2, r0
- subs r2, r4, r2
- ldr r4, _0802DC74 @ =gActiveBank
- ldrb r5, [r4]
- strb r7, [r4]
- lsls r2, 16
- lsrs r2, 16
- movs r0, 0x1
- movs r1, 0xB
- bl dp01_build_cmdbuf_x21_a_bb
- strb r5, [r4]
- ldr r0, _0802DC78 @ =sub_802DCB0
- str r0, [r6]
- b _0802DC98
- .align 2, 0
-_0802DC64: .4byte gHealthboxIDs
-_0802DC68: .4byte gPlayerParty
-_0802DC6C: .4byte gExperienceTables
-_0802DC70: .4byte gBaseStats
-_0802DC74: .4byte gActiveBank
-_0802DC78: .4byte sub_802DCB0
-_0802DC7C:
- str r0, [sp, 0x4]
- add r2, sp, 0x4
- adds r0, r5, 0
- movs r1, 0x19
- bl SetMonData
- ldr r1, _0802DCA8 @ =gBattleBankFunc
- lsls r0, r7, 2
- adds r0, r1
- ldr r1, _0802DCAC @ =sub_802D90C
- str r1, [r0]
- mov r0, r8
- bl DestroyTask
-_0802DC98:
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802DCA8: .4byte gBattleBankFunc
-_0802DCAC: .4byte sub_802D90C
- thumb_func_end sub_802DB6C
-
- thumb_func_start sub_802DCB0
-sub_802DCB0: @ 802DCB0
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r1, _0802DD04 @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- ldrb r4, [r0, 0xC]
- ldrb r6, [r0, 0x8]
- bl IsDoubleBattle
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0802DCE4
- ldr r1, _0802DD08 @ =gBattlePartyID
- movs r0, 0x2
- adds r2, r4, 0
- eors r2, r0
- lsls r0, r2, 1
- adds r0, r1
- ldrh r0, [r0]
- cmp r6, r0
- bne _0802DCE4
- adds r4, r2, 0
-_0802DCE4:
- adds r0, r4, 0
- adds r1, r4, 0
- adds r2, r4, 0
- movs r3, 0
- bl move_anim_start_t4
- ldr r0, _0802DD04 @ =gTasks
- lsls r1, r5, 2
- adds r1, r5
- lsls r1, 3
- adds r1, r0
- ldr r0, _0802DD0C @ =sub_802DD10
- str r0, [r1]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0802DD04: .4byte gTasks
-_0802DD08: .4byte gBattlePartyID
-_0802DD0C: .4byte sub_802DD10
- thumb_func_end sub_802DCB0
-
- thumb_func_start sub_802DD10
-sub_802DD10: @ 802DD10
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r1, _0802DD78 @ =gTasks
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- adds r2, r0, r1
- ldrb r5, [r2, 0xC]
- lsls r0, r5, 1
- adds r0, r5
- lsls r0, 2
- ldr r1, _0802DD7C @ =0x02017810
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- bne _0802DDAE
- ldrb r4, [r2, 0x8]
- movs r0, 0x64
- adds r1, r4, 0
- muls r1, r0
- ldr r0, _0802DD80 @ =gPlayerParty
- adds r7, r1, r0
- adds r0, r7, 0
- movs r1, 0x38
- bl GetMonData
- bl IsDoubleBattle
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0802DD8C
- ldr r1, _0802DD84 @ =gBattlePartyID
- movs r0, 0x2
- adds r2, r5, 0
- eors r2, r0
- lsls r0, r2, 1
- adds r0, r1
- ldrh r0, [r0]
- cmp r4, r0
- bne _0802DD8C
- ldr r0, _0802DD88 @ =gHealthboxIDs
- adds r0, r2, r0
- ldrb r0, [r0]
- adds r1, r7, 0
- movs r2, 0
- bl sub_8045A5C
- b _0802DDA0
- .align 2, 0
-_0802DD78: .4byte gTasks
-_0802DD7C: .4byte 0x02017810
-_0802DD80: .4byte gPlayerParty
-_0802DD84: .4byte gBattlePartyID
-_0802DD88: .4byte gHealthboxIDs
-_0802DD8C:
- ldr r0, _0802DDB4 @ =gHealthboxIDs
- adds r0, r5, r0
- ldrb r0, [r0]
- movs r1, 0x64
- muls r1, r4
- ldr r2, _0802DDB8 @ =gPlayerParty
- adds r1, r2
- movs r2, 0
- bl sub_8045A5C
-_0802DDA0:
- ldr r0, _0802DDBC @ =gTasks
- lsls r1, r6, 2
- adds r1, r6
- lsls r1, 3
- adds r1, r0
- ldr r0, _0802DDC0 @ =sub_802DDC4
- str r0, [r1]
-_0802DDAE:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0802DDB4: .4byte gHealthboxIDs
-_0802DDB8: .4byte gPlayerParty
-_0802DDBC: .4byte gTasks
-_0802DDC0: .4byte sub_802DDC4
- thumb_func_end sub_802DD10
-
- thumb_func_start sub_802DDC4
-sub_802DDC4: @ 802DDC4
- push {r4,r5,lr}
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- ldr r0, _0802DE00 @ =gTasks
- lsls r4, r5, 2
- adds r4, r5
- lsls r4, 3
- adds r4, r0
- ldrb r1, [r4, 0x8]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _0802DE04 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x38
- bl GetMonData
- ldrb r0, [r4, 0xC]
- ldr r1, _0802DE08 @ =gBattleBankFunc
- lsls r0, 2
- adds r0, r1
- ldr r1, _0802DE0C @ =sub_802D90C
- str r1, [r0]
- adds r0, r5, 0
- bl DestroyTask
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0802DE00: .4byte gTasks
-_0802DE04: .4byte gPlayerParty
-_0802DE08: .4byte gBattleBankFunc
-_0802DE0C: .4byte sub_802D90C
- thumb_func_end sub_802DDC4
-
- thumb_func_start sub_802DE10
-sub_802DE10: @ 802DE10
- push {r4-r6,lr}
- ldr r6, _0802DE94 @ =gSprites
- ldr r5, _0802DE98 @ =gObjectBankIDs
- ldr r4, _0802DE9C @ =gActiveBank
- ldrb r2, [r4]
- adds r0, r2, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- movs r3, 0x22
- ldrsh r1, [r0, r3]
- movs r3, 0x26
- ldrsh r0, [r0, r3]
- adds r1, r0
- cmp r1, 0xA0
- ble _0802DE8C
- ldr r1, _0802DEA0 @ =gBattlePartyID
- lsls r0, r2, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _0802DEA4 @ =gPlayerParty
- adds r0, r1
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- bl nullsub_9
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- ldrb r0, [r0, 0x3]
- lsls r0, 26
- lsrs r0, 27
- bl FreeOamMatrix
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r6
- bl DestroySprite
- ldr r1, _0802DEA8 @ =gHealthboxIDs
- ldrb r0, [r4]
- adds r0, r1
- ldrb r0, [r0]
- bl sub_8043DB0
- bl PlayerBufferExecCompleted
-_0802DE8C:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0802DE94: .4byte gSprites
-_0802DE98: .4byte gObjectBankIDs
-_0802DE9C: .4byte gActiveBank
-_0802DEA0: .4byte gBattlePartyID
-_0802DEA4: .4byte gPlayerParty
-_0802DEA8: .4byte gHealthboxIDs
- thumb_func_end sub_802DE10
-
- thumb_func_start sub_802DEAC
-sub_802DEAC: @ 802DEAC
- push {r4-r6,lr}
- ldr r6, _0802DF04 @ =gActiveBank
- ldrb r2, [r6]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- ldr r1, _0802DF08 @ =0x02017810
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- bne _0802DEFC
- ldr r5, _0802DF0C @ =gObjectBankIDs
- adds r0, r2, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r4, _0802DF10 @ =gSprites
- adds r0, r4
- bl FreeSpriteOamMatrix
- ldrb r0, [r6]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- bl DestroySprite
- ldr r1, _0802DF14 @ =gHealthboxIDs
- ldrb r0, [r6]
- adds r0, r1
- ldrb r0, [r0]
- bl sub_8043DB0
- bl PlayerBufferExecCompleted
-_0802DEFC:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0802DF04: .4byte gActiveBank
-_0802DF08: .4byte 0x02017810
-_0802DF0C: .4byte gObjectBankIDs
-_0802DF10: .4byte gSprites
-_0802DF14: .4byte gHealthboxIDs
- thumb_func_end sub_802DEAC
-
- thumb_func_start sub_802DF18
-sub_802DF18: @ 802DF18
- push {lr}
- ldr r0, _0802DF2C @ =gUnknown_03004210
- ldrh r0, [r0, 0x16]
- cmp r0, 0
- bne _0802DF26
- bl PlayerBufferExecCompleted
-_0802DF26:
- pop {r0}
- bx r0
- .align 2, 0
-_0802DF2C: .4byte gUnknown_03004210
- thumb_func_end sub_802DF18
-
- thumb_func_start sub_802DF30
-sub_802DF30: @ 802DF30
- push {r4,lr}
- ldr r0, _0802DF70 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0802DF6A
- ldr r1, _0802DF74 @ =gBattleBankFunc
- ldr r2, _0802DF78 @ =gActiveBank
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0802DF7C @ =sub_802DF88
- str r1, [r0]
- ldr r3, _0802DF80 @ =gTasks
- ldr r1, _0802DF84 @ =gUnknown_0300434C
- ldrb r0, [r2]
- adds r0, r1
- ldrb r0, [r0]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r3
- ldrb r4, [r1, 0x8]
- bl DestroyTask
- adds r0, r4, 0
- bl sub_8094E20
-_0802DF6A:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0802DF70: .4byte gPaletteFade
-_0802DF74: .4byte gBattleBankFunc
-_0802DF78: .4byte gActiveBank
-_0802DF7C: .4byte sub_802DF88
-_0802DF80: .4byte gTasks
-_0802DF84: .4byte gUnknown_0300434C
- thumb_func_end sub_802DF30
-
- thumb_func_start sub_802DF88
-sub_802DF88: @ 802DF88
- push {lr}
- ldr r0, _0802DFB8 @ =gMain
- ldr r1, [r0, 0x4]
- ldr r0, _0802DFBC @ =sub_800F808
- cmp r1, r0
- bne _0802DFF8
- ldr r0, _0802DFC0 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0802DFF8
- ldr r0, _0802DFC4 @ =gUnknown_0202E8F4
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _0802DFD0
- ldr r0, _0802DFC8 @ =gUnknown_0202E8F5
- ldrb r1, [r0]
- ldr r2, _0802DFCC @ =gUnknown_02038470
- movs r0, 0x1
- bl dp01_build_cmdbuf_x22_a_three_bytes
- b _0802DFDA
- .align 2, 0
-_0802DFB8: .4byte gMain
-_0802DFBC: .4byte sub_800F808
-_0802DFC0: .4byte gPaletteFade
-_0802DFC4: .4byte gUnknown_0202E8F4
-_0802DFC8: .4byte gUnknown_0202E8F5
-_0802DFCC: .4byte gUnknown_02038470
-_0802DFD0:
- movs r0, 0x1
- movs r1, 0x6
- movs r2, 0
- bl dp01_build_cmdbuf_x22_a_three_bytes
-_0802DFDA:
- ldr r1, _0802DFFC @ =gBattleBufferA
- ldr r0, _0802E000 @ =gActiveBank
- ldrb r0, [r0]
- lsls r0, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0xF
- ands r0, r1
- cmp r0, 0x1
- bne _0802DFF4
- bl b_link_standby_message
-_0802DFF4:
- bl PlayerBufferExecCompleted
-_0802DFF8:
- pop {r0}
- bx r0
- .align 2, 0
-_0802DFFC: .4byte gBattleBufferA
-_0802E000: .4byte gActiveBank
- thumb_func_end sub_802DF88
-
- thumb_func_start sub_802E004
-sub_802E004: @ 802E004
- push {lr}
- ldr r0, _0802E02C @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0802E028
- ldr r1, _0802E030 @ =gBattleBankFunc
- ldr r0, _0802E034 @ =gActiveBank
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0802E038 @ =sub_802E03C
- str r1, [r0]
- bl nullsub_14
- bl sub_80A6DCC
-_0802E028:
- pop {r0}
- bx r0
- .align 2, 0
-_0802E02C: .4byte gPaletteFade
-_0802E030: .4byte gBattleBankFunc
-_0802E034: .4byte gActiveBank
-_0802E038: .4byte sub_802E03C
- thumb_func_end sub_802E004
-
- thumb_func_start sub_802E03C
-sub_802E03C: @ 802E03C
- push {lr}
- ldr r0, _0802E068 @ =gMain
- ldr r1, [r0, 0x4]
- ldr r0, _0802E06C @ =sub_800F808
- cmp r1, r0
- bne _0802E062
- ldr r0, _0802E070 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0802E062
- ldr r0, _0802E074 @ =gScriptItemId
- ldrh r1, [r0]
- movs r0, 0x1
- bl dp01_build_cmdbuf_x23_aa_0
- bl PlayerBufferExecCompleted
-_0802E062:
- pop {r0}
- bx r0
- .align 2, 0
-_0802E068: .4byte gMain
-_0802E06C: .4byte sub_800F808
-_0802E070: .4byte gPaletteFade
-_0802E074: .4byte gScriptItemId
- thumb_func_end sub_802E03C
-
- thumb_func_start bx_wait_t1
-bx_wait_t1: @ 802E078
- push {lr}
- ldr r0, _0802E0A4 @ =gDoingBattleAnim
- ldrb r0, [r0]
- cmp r0, 0
- beq _0802E09A
- ldr r0, _0802E0A8 @ =gActiveBank
- ldrb r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- ldr r1, _0802E0AC @ =0x02017810
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- bne _0802E09E
-_0802E09A:
- bl PlayerBufferExecCompleted
-_0802E09E:
- pop {r0}
- bx r0
- .align 2, 0
-_0802E0A4: .4byte gDoingBattleAnim
-_0802E0A8: .4byte gActiveBank
-_0802E0AC: .4byte 0x02017810
- thumb_func_end bx_wait_t1
-
- thumb_func_start bx_blink_t1
-bx_blink_t1: @ 802E0B0
- push {r4,lr}
- ldr r1, _0802E0EC @ =gObjectBankIDs
- ldr r0, _0802E0F0 @ =gActiveBank
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r0]
- ldr r2, _0802E0F4 @ =gSprites
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r4, r0, r2
- movs r1, 0x30
- ldrsh r0, [r4, r1]
- cmp r0, 0x20
- bne _0802E0FC
- movs r3, 0
- movs r0, 0
- strh r0, [r4, 0x30]
- adds r2, r4, 0
- adds r2, 0x3E
- ldrb r1, [r2]
- subs r0, 0x5
- ands r0, r1
- strb r0, [r2]
- ldr r0, _0802E0F8 @ =gDoingBattleAnim
- strb r3, [r0]
- bl PlayerBufferExecCompleted
- b _0802E126
- .align 2, 0
-_0802E0EC: .4byte gObjectBankIDs
-_0802E0F0: .4byte gActiveBank
-_0802E0F4: .4byte gSprites
-_0802E0F8: .4byte gDoingBattleAnim
-_0802E0FC:
- ldrh r0, [r4, 0x30]
- movs r1, 0x3
- ands r0, r1
- cmp r0, 0
- bne _0802E120
- adds r3, r4, 0
- adds r3, 0x3E
- ldrb r2, [r3]
- 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
- strb r0, [r3]
-_0802E120:
- ldrh r0, [r4, 0x30]
- adds r0, 0x1
- strh r0, [r4, 0x30]
-_0802E126:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end bx_blink_t1
-
- thumb_func_start sub_802E12C
-sub_802E12C: @ 802E12C
- push {r4-r6,lr}
- sub sp, 0x4
- adds r6, r0, 0
- ldr r0, _0802E180 @ =gActiveBank
- ldrb r4, [r0]
- lsls r4, 9
- ldr r0, _0802E184 @ =gUnknown_02023A64
- adds r4, r0
- ldr r5, _0802E188 @ =gDisplayedStringBattle
- adds r0, r5, 0
- bl StringCopy
- lsls r0, r6, 1
- adds r4, r0
- ldrh r1, [r4]
- movs r0, 0xD
- muls r1, r0
- ldr r0, _0802E18C @ =gMoveNames
- adds r1, r0
- adds r0, r5, 0
- bl StringAppend
- ldr r4, _0802E190 @ =gUnknown_03004210
- adds r1, r5, 0
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 18
- movs r2, 0xC0
- lsls r2, 18
- adds r0, r2
- lsrs r2, r0, 16
- movs r0, 0x1
- ands r0, r6
- movs r3, 0x1
- cmp r0, 0
- beq _0802E176
- movs r3, 0xB
-_0802E176:
- cmp r6, 0x1
- bgt _0802E194
- movs r0, 0x37
- b _0802E196
- .align 2, 0
-_0802E180: .4byte gActiveBank
-_0802E184: .4byte gUnknown_02023A64
-_0802E188: .4byte gDisplayedStringBattle
-_0802E18C: .4byte gMoveNames
-_0802E190: .4byte gUnknown_03004210
-_0802E194:
- movs r0, 0x39
-_0802E196:
- str r0, [sp]
- adds r0, r4, 0
- bl InitWindow
- ldr r0, _0802E1AC @ =gUnknown_03004210
- bl sub_8002F44
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0802E1AC: .4byte gUnknown_03004210
- thumb_func_end sub_802E12C
-
- thumb_func_start sub_802E1B0
-sub_802E1B0: @ 802E1B0
- push {r4-r6,lr}
- sub sp, 0x8
- ldr r0, _0802E208 @ =gActiveBank
- ldrb r4, [r0]
- lsls r4, 9
- ldr r0, _0802E20C @ =gUnknown_02023A64
- adds r4, r0
- ldr r5, _0802E210 @ =gUnknown_03004348
- movs r0, 0
- strb r0, [r5]
- ldr r0, _0802E214 @ =gUnknown_03004210
- ldr r1, _0802E218 @ =0x00001016
- movs r2, 0x14
- str r2, [sp]
- movs r2, 0x3A
- str r2, [sp, 0x4]
- movs r2, 0x1
- movs r3, 0x37
- bl FillWindowRect
- movs r6, 0
-_0802E1DA:
- lsls r0, r6, 24
- lsrs r0, 24
- bl nullsub_7
- adds r0, r6, 0
- ldr r1, _0802E21C @ =gUnknown_08400D49
- bl sub_802E12C
- ldrh r0, [r4]
- cmp r0, 0
- beq _0802E1F6
- ldrb r0, [r5]
- adds r0, 0x1
- strb r0, [r5]
-_0802E1F6:
- adds r4, 0x2
- adds r6, 0x1
- cmp r6, 0x3
- ble _0802E1DA
- add sp, 0x8
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0802E208: .4byte gActiveBank
-_0802E20C: .4byte gUnknown_02023A64
-_0802E210: .4byte gUnknown_03004348
-_0802E214: .4byte gUnknown_03004210
-_0802E218: .4byte 0x00001016
-_0802E21C: .4byte gUnknown_08400D49
- thumb_func_end sub_802E1B0
-
- thumb_func_start sub_802E220
-sub_802E220: @ 802E220
- push {r4-r6,lr}
- sub sp, 0x4
- ldr r4, _0802E2B8 @ =gBattleBufferA
- ldr r6, _0802E2BC @ =gActiveBank
- ldrb r0, [r6]
- lsls r1, r0, 9
- adds r0, r4, 0x2
- adds r0, r1, r0
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _0802E2B0
- adds r4, 0x4
- adds r4, r1, r4
- ldr r2, _0802E2C0 @ =gDisplayedStringBattle
- ldr r1, _0802E2C4 @ =gUnknown_08400D49
- adds r0, r2, 0
- bl StringCopy
- adds r2, r0, 0
- movs r1, 0xFC
- strb r1, [r2]
- movs r0, 0x11
- strb r0, [r2, 0x1]
- movs r0, 0x2
- strb r0, [r2, 0x2]
- adds r2, 0x3
- strb r1, [r2]
- movs r0, 0x14
- strb r0, [r2, 0x1]
- movs r0, 0x6
- strb r0, [r2, 0x2]
- adds r2, 0x3
- ldr r5, _0802E2C8 @ =gMoveSelectionCursor
- ldrb r1, [r6]
- adds r1, r5
- adds r0, r4, 0
- adds r0, 0x8
- ldrb r1, [r1]
- adds r0, r1
- ldrb r1, [r0]
- adds r0, r2, 0
- movs r2, 0x1
- movs r3, 0x2
- bl ConvertIntToDecimalStringN
- adds r2, r0, 0
- movs r0, 0xBA
- strb r0, [r2]
- adds r2, 0x1
- ldrb r0, [r6]
- adds r0, r5
- adds r4, 0xC
- ldrb r0, [r0]
- adds r4, r0
- ldrb r1, [r4]
- adds r0, r2, 0
- movs r2, 0x1
- movs r3, 0x2
- bl ConvertIntToDecimalStringN
- ldr r4, _0802E2CC @ =gUnknown_03004210
- ldr r1, _0802E2C0 @ =gDisplayedStringBattle
- ldr r2, _0802E2D0 @ =0x000002a2
- movs r0, 0x37
- str r0, [sp]
- adds r0, r4, 0
- movs r3, 0x19
- bl InitWindow
- adds r0, r4, 0
- bl sub_8002F44
-_0802E2B0:
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0802E2B8: .4byte gBattleBufferA
-_0802E2BC: .4byte gActiveBank
-_0802E2C0: .4byte gDisplayedStringBattle
-_0802E2C4: .4byte gUnknown_08400D49
-_0802E2C8: .4byte gMoveSelectionCursor
-_0802E2CC: .4byte gUnknown_03004210
-_0802E2D0: .4byte 0x000002a2
- thumb_func_end sub_802E220
-
- thumb_func_start sub_802E2D4
-sub_802E2D4: @ 802E2D4
- push {r4,r5,lr}
- sub sp, 0x8
- ldr r4, _0802E314 @ =gBattleBufferA
- ldr r5, _0802E318 @ =gActiveBank
- ldrb r0, [r5]
- lsls r1, r0, 9
- adds r0, r4, 0x2
- adds r0, r1, r0
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _0802E328
- ldr r4, _0802E31C @ =gUnknown_03004210
- ldr r1, _0802E320 @ =0x00001016
- movs r0, 0x1C
- str r0, [sp]
- movs r0, 0x3A
- str r0, [sp, 0x4]
- adds r0, r4, 0
- movs r2, 0x17
- movs r3, 0x37
- bl FillWindowRect
- ldr r1, _0802E324 @ =gUnknown_08400D52
- movs r2, 0xA4
- lsls r2, 2
- movs r0, 0x37
- str r0, [sp]
- adds r0, r4, 0
- movs r3, 0x13
- bl InitWindow
- b _0802E388
- .align 2, 0
-_0802E314: .4byte gBattleBufferA
-_0802E318: .4byte gActiveBank
-_0802E31C: .4byte gUnknown_03004210
-_0802E320: .4byte 0x00001016
-_0802E324: .4byte gUnknown_08400D52
-_0802E328:
- adds r4, 0x4
- adds r4, r1, r4
- ldr r3, _0802E398 @ =gDisplayedStringBattle
- ldr r1, _0802E39C @ =gUnknown_08400D49
- adds r0, r3, 0
- bl StringCopy
- adds r3, r0, 0
- ldr r2, _0802E3A0 @ =gBattleMoves
- ldr r1, _0802E3A4 @ =gMoveSelectionCursor
- ldrb r0, [r5]
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 1
- adds r4, r0
- ldrh r1, [r4]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r0, [r0, 0x2]
- lsls r1, r0, 3
- subs r1, r0
- ldr r0, _0802E3A8 @ =gTypeNames
- adds r1, r0
- adds r0, r3, 0
- bl StringCopy
- ldr r4, _0802E3AC @ =gUnknown_03004210
- ldr r1, _0802E3B0 @ =0x00001016
- movs r0, 0x1C
- str r0, [sp]
- movs r0, 0x3A
- str r0, [sp, 0x4]
- adds r0, r4, 0
- movs r2, 0x17
- movs r3, 0x39
- bl FillWindowRect
- ldr r1, _0802E398 @ =gDisplayedStringBattle
- movs r2, 0xB0
- lsls r2, 2
- movs r0, 0x39
- str r0, [sp]
- adds r0, r4, 0
- movs r3, 0x17
- bl InitWindow
-_0802E388:
- ldr r0, _0802E3AC @ =gUnknown_03004210
- bl sub_8002F44
- add sp, 0x8
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0802E398: .4byte gDisplayedStringBattle
-_0802E39C: .4byte gUnknown_08400D49
-_0802E3A0: .4byte gBattleMoves
-_0802E3A4: .4byte gMoveSelectionCursor
-_0802E3A8: .4byte gTypeNames
-_0802E3AC: .4byte gUnknown_03004210
-_0802E3B0: .4byte 0x00001016
- thumb_func_end sub_802E2D4
-
- thumb_func_start sub_802E3B4
-sub_802E3B4: @ 802E3B4
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x48
- bl sub_814A958
- ldr r1, _0802E3DC @ =gUnknown_081FAE89
- lsls r4, 1
- adds r0, r4, r1
- ldrb r0, [r0]
- adds r1, 0x1
- adds r4, r1
- ldrb r1, [r4]
- bl sub_814A880
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0802E3DC: .4byte gUnknown_081FAE89
- thumb_func_end sub_802E3B4
-
- thumb_func_start nullsub_7
-nullsub_7: @ 802E3E0
- bx lr
- thumb_func_end nullsub_7
-
- thumb_func_start sub_802E3E4
-sub_802E3E4: @ 802E3E4
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x2A
- bl sub_814A958
- ldr r1, _0802E40C @ =gUnknown_081FAE91
- lsls r4, 1
- adds r0, r4, r1
- ldrb r0, [r0]
- adds r1, 0x1
- adds r4, r1
- ldrb r1, [r4]
- bl sub_814A880
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0802E40C: .4byte gUnknown_081FAE91
- thumb_func_end sub_802E3E4
-
- thumb_func_start nullsub_8
-nullsub_8: @ 802E410
- bx lr
- thumb_func_end nullsub_8
-
- thumb_func_start sub_802E414
-sub_802E414: @ 802E414
- push {lr}
- ldr r0, _0802E420 @ =ReshowBattleScreenAfterMenu
- bl SetMainCallback2
- pop {r0}
- bx r0
- .align 2, 0
-_0802E420: .4byte ReshowBattleScreenAfterMenu
- thumb_func_end sub_802E414
-
- thumb_func_start sub_802E424
-sub_802E424: @ 802E424
- push {lr}
- ldr r0, _0802E430 @ =ReshowBattleScreenAfterMenu
- bl SetMainCallback2
- pop {r0}
- bx r0
- .align 2, 0
-_0802E430: .4byte ReshowBattleScreenAfterMenu
- thumb_func_end sub_802E424
-
- thumb_func_start sub_802E434
-sub_802E434: @ 802E434
- push {lr}
- ldr r0, _0802E458 @ =gActiveBank
- ldrb r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- ldr r1, _0802E45C @ =0x02017810
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- bne _0802E452
- bl PlayerBufferExecCompleted
-_0802E452:
- pop {r0}
- bx r0
- .align 2, 0
-_0802E458: .4byte gActiveBank
-_0802E45C: .4byte 0x02017810
- thumb_func_end sub_802E434
-
- thumb_func_start sub_802E460
-sub_802E460: @ 802E460
- push {lr}
- ldr r0, _0802E484 @ =gActiveBank
- ldrb r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- ldr r1, _0802E488 @ =0x02017810
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- bne _0802E47E
- bl PlayerBufferExecCompleted
-_0802E47E:
- pop {r0}
- bx r0
- .align 2, 0
-_0802E484: .4byte gActiveBank
-_0802E488: .4byte 0x02017810
- thumb_func_end sub_802E460
-
- thumb_func_start b_link_standby_message
-b_link_standby_message: @ 802E48C
- push {lr}
- sub sp, 0x4
- ldr r0, _0802E4BC @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0802E4B6
- ldr r0, _0802E4C0 @ =gUnknown_030042A4
- movs r1, 0
- strh r1, [r0]
- ldr r0, _0802E4C4 @ =gUnknown_030042A0
- strh r1, [r0]
- ldr r0, _0802E4C8 @ =gUnknown_03004210
- ldr r1, _0802E4CC @ =gUnknown_08400CE0
- movs r2, 0xF
- str r2, [sp]
- movs r2, 0x90
- movs r3, 0x2
- bl sub_8002EB0
-_0802E4B6:
- add sp, 0x4
- pop {r0}
- bx r0
- .align 2, 0
-_0802E4BC: .4byte gBattleTypeFlags
-_0802E4C0: .4byte gUnknown_030042A4
-_0802E4C4: .4byte gUnknown_030042A0
-_0802E4C8: .4byte gUnknown_03004210
-_0802E4CC: .4byte gUnknown_08400CE0
- thumb_func_end b_link_standby_message
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/battle_9.s b/asm/battle_9.s
index 15d34e5b2..e92c2db33 100644
--- a/asm/battle_9.s
+++ b/asm/battle_9.s
@@ -41,7 +41,7 @@ AI_SwitchIfPerishSong: @ 8035FEC
movs r0, 0x1
movs r1, 0x2
movs r2, 0
- bl dp01_build_cmdbuf_x21_a_bb
+ bl Emitcmd33
movs r0, 0x1
b _0803604E
.align 2, 0
@@ -86,7 +86,7 @@ _08036070:
movs r0, 0x1
movs r1, 0x2
movs r2, 0
- bl dp01_build_cmdbuf_x21_a_bb
+ bl Emitcmd33
movs r0, 0x1
b _080361CA
.align 2, 0
@@ -410,7 +410,7 @@ _0803630C:
movs r0, 0x1
movs r1, 0x2
movs r2, 0
- bl dp01_build_cmdbuf_x21_a_bb
+ bl Emitcmd33
movs r0, 0x1
b _08036402
.align 2, 0
@@ -634,7 +634,7 @@ _080364E0:
movs r0, 0x1
movs r1, 0x2
movs r2, 0
- bl dp01_build_cmdbuf_x21_a_bb
+ bl Emitcmd33
_080364FE:
movs r0, 0x1
_08036500:
@@ -958,7 +958,7 @@ _08036768:
movs r0, 0x1
movs r1, 0x2
movs r2, 0
- bl dp01_build_cmdbuf_x21_a_bb
+ bl Emitcmd33
movs r0, 0x1
b _080368DA
.align 2, 0
@@ -1533,7 +1533,7 @@ _08036C2E:
lsls r2, 8
movs r0, 0x1
movs r1, 0
- bl dp01_build_cmdbuf_x21_a_bb
+ bl Emitcmd33
_08036C40:
pop {r4-r6}
pop {r0}
@@ -2623,7 +2623,7 @@ _080374AE:
movs r0, 0x1
movs r1, 0x1
movs r2, 0
- bl dp01_build_cmdbuf_x21_a_bb
+ bl Emitcmd33
ldr r1, _080374DC @ =0x02000000
ldr r0, _080374E0 @ =gActiveBank
ldrb r0, [r0]
@@ -2667,1414 +2667,4 @@ _080374FA:
bx r1
thumb_func_end AI_ShouldUseItem
- thumb_func_start nullsub_47
-nullsub_47: @ 803750C
- bx lr
- thumb_func_end nullsub_47
-
- thumb_func_start SetBankFuncToLinkOpponentBufferRunCommand
-SetBankFuncToLinkOpponentBufferRunCommand: @ 8037510
- ldr r1, _08037520 @ =gBattleBankFunc
- ldr r0, _08037524 @ =gActiveBank
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08037528 @ =sub_803752C
- str r1, [r0]
- bx lr
- .align 2, 0
-_08037520: .4byte gBattleBankFunc
-_08037524: .4byte gActiveBank
-_08037528: .4byte sub_803752C
- thumb_func_end SetBankFuncToLinkOpponentBufferRunCommand
-
- thumb_func_start sub_803752C
-sub_803752C: @ 803752C
- push {lr}
- ldr r2, _08037560 @ =gBattleExecBuffer
- ldr r1, _08037564 @ =gBitTable
- ldr r0, _08037568 @ =gActiveBank
- ldrb r3, [r0]
- lsls r0, r3, 2
- adds r0, r1
- ldr r1, [r2]
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- beq _08037578
- ldr r0, _0803756C @ =gBattleBufferA
- lsls r1, r3, 9
- adds r1, r0
- ldrb r0, [r1]
- cmp r0, 0x38
- bhi _08037574
- ldr r0, _08037570 @ =gLinkOpponentBufferCommands
- ldrb r1, [r1]
- lsls r1, 2
- adds r1, r0
- ldr r0, [r1]
- bl _call_via_r0
- b _08037578
- .align 2, 0
-_08037560: .4byte gBattleExecBuffer
-_08037564: .4byte gBitTable
-_08037568: .4byte gActiveBank
-_0803756C: .4byte gBattleBufferA
-_08037570: .4byte gLinkOpponentBufferCommands
-_08037574:
- bl dp01_tbl4_exec_completed
-_08037578:
- pop {r0}
- bx r0
- thumb_func_end sub_803752C
-
- thumb_func_start sub_803757C
-sub_803757C: @ 803757C
- push {lr}
- ldr r2, _080375A4 @ =gSprites
- ldr r1, _080375A8 @ =gObjectBankIDs
- ldr r0, _080375AC @ =gActiveBank
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, [r0]
- ldr r0, _080375B0 @ =SpriteCallbackDummy
- cmp r1, r0
- bne _080375A0
- bl dp01_tbl4_exec_completed
-_080375A0:
- pop {r0}
- bx r0
- .align 2, 0
-_080375A4: .4byte gSprites
-_080375A8: .4byte gObjectBankIDs
-_080375AC: .4byte gActiveBank
-_080375B0: .4byte SpriteCallbackDummy
- thumb_func_end sub_803757C
-
- thumb_func_start sub_80375B4
-sub_80375B4: @ 80375B4
- push {r4-r6,lr}
- ldr r4, _0803762C @ =gSprites
- ldr r6, _08037630 @ =gObjectBankIDs
- ldr r5, _08037634 @ =gActiveBank
- ldrb r0, [r5]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r2, r0, 2
- adds r0, r4, 0
- adds r0, 0x1C
- adds r0, r2, r0
- ldr r1, [r0]
- ldr r0, _08037638 @ =SpriteCallbackDummy
- cmp r1, r0
- bne _08037624
- adds r0, r2, r4
- ldrh r0, [r0, 0x6]
- bl sub_8031B74
- ldrb r0, [r5]
- adds r0, r6
- ldrb r0, [r0]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r4
- ldrh r0, [r1, 0x38]
- ldr r2, _0803763C @ =0x000003ff
- ands r2, r0
- ldrh r3, [r1, 0x4]
- ldr r0, _08037640 @ =0xfffffc00
- ands r0, r3
- orrs r0, r2
- strh r0, [r1, 0x4]
- ldrb r0, [r5]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- bl FreeSpriteOamMatrix
- ldrb r0, [r5]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- bl DestroySprite
- bl dp01_tbl4_exec_completed
-_08037624:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0803762C: .4byte gSprites
-_08037630: .4byte gObjectBankIDs
-_08037634: .4byte gActiveBank
-_08037638: .4byte SpriteCallbackDummy
-_0803763C: .4byte 0x000003ff
-_08037640: .4byte 0xfffffc00
- thumb_func_end sub_80375B4
-
- thumb_func_start sub_8037644
-sub_8037644: @ 8037644
- push {lr}
- ldr r3, _08037678 @ =gActiveBank
- ldrb r0, [r3]
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- ldr r2, _0803767C @ =0x02017810
- adds r1, r2
- ldrb r0, [r1, 0x9]
- subs r0, 0x1
- strb r0, [r1, 0x9]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFF
- bne _08037674
- ldrb r0, [r3]
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- movs r0, 0
- strb r0, [r1, 0x9]
- bl dp01_tbl4_exec_completed
-_08037674:
- pop {r0}
- bx r0
- .align 2, 0
-_08037678: .4byte gActiveBank
-_0803767C: .4byte 0x02017810
- thumb_func_end sub_8037644
-
- thumb_func_start sub_8037680
-sub_8037680: @ 8037680
- push {r4-r7,lr}
- movs r6, 0
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- beq _080376A4
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- beq _080376D8
- ldr r0, _080376C4 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _080376D8
-_080376A4:
- ldr r2, _080376C8 @ =gSprites
- ldr r1, _080376CC @ =gHealthboxIDs
- ldr r0, _080376D0 @ =gActiveBank
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, [r0]
- ldr r0, _080376D4 @ =SpriteCallbackDummy
- cmp r1, r0
- bne _0803770E
- b _0803770C
- .align 2, 0
-_080376C4: .4byte gBattleTypeFlags
-_080376C8: .4byte gSprites
-_080376CC: .4byte gHealthboxIDs
-_080376D0: .4byte gActiveBank
-_080376D4: .4byte SpriteCallbackDummy
-_080376D8:
- ldr r2, _080377D8 @ =gSprites
- ldr r5, _080377DC @ =gHealthboxIDs
- ldr r0, _080377E0 @ =gActiveBank
- ldrb r3, [r0]
- adds r0, r3, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r4, [r0]
- ldr r0, _080377E4 @ =SpriteCallbackDummy
- cmp r4, r0
- bne _0803770E
- movs r0, 0x2
- eors r3, r0
- adds r0, r3, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldr r0, [r0]
- cmp r0, r4
- bne _0803770E
-_0803770C:
- movs r6, 0x1
-_0803770E:
- bl IsCryPlayingOrClearCrySongs
- lsls r0, 24
- cmp r0, 0
- beq _0803771A
- movs r6, 0
-_0803771A:
- cmp r6, 0
- bne _08037720
- b _08037822
-_08037720:
- ldr r7, _080377E0 @ =gActiveBank
- ldrb r0, [r7]
- bl GetBankIdentity
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r3, 0x1
- bne _080377B4
- ldrb r2, [r7]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- ldr r5, _080377E8 @ =0x02017810
- adds r4, r0, r5
- ldrb r1, [r4, 0x1]
- adds r0, r3, 0
- ands r0, r1
- cmp r0, 0
- beq _08037822
- movs r6, 0x2
- adds r1, r6, 0
- eors r1, r2
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldrb r1, [r0, 0x1]
- adds r0, r3, 0
- ands r0, r1
- cmp r0, 0
- beq _08037822
- ldrb r1, [r4]
- movs r3, 0x7F
- adds r0, r3, 0
- ands r0, r1
- strb r0, [r4]
- ldrb r0, [r7]
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r1, r5
- ldrb r2, [r1, 0x1]
- movs r4, 0x2
- negs r4, r4
- adds r0, r4, 0
- ands r0, r2
- strb r0, [r1, 0x1]
- ldrb r0, [r7]
- adds r1, r6, 0
- eors r1, r0
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldrb r1, [r0]
- ands r3, r1
- strb r3, [r0]
- ldrb r0, [r7]
- adds r1, r6, 0
- eors r1, r0
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldrb r1, [r0, 0x1]
- ands r4, r1
- strb r4, [r0, 0x1]
- ldr r4, _080377EC @ =0x000027f9
- adds r0, r4, 0
- bl FreeSpriteTilesByTag
- adds r0, r4, 0
- bl FreeSpritePaletteByTag
-_080377B4:
- ldr r0, _080377F0 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _080377F8
- ldrb r0, [r7]
- bl GetBankIdentity
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08037804
- ldr r0, _080377F4 @ =gMPlay_BGM
- bl m4aMPlayContinue
- b _08037804
- .align 2, 0
-_080377D8: .4byte gSprites
-_080377DC: .4byte gHealthboxIDs
-_080377E0: .4byte gActiveBank
-_080377E4: .4byte SpriteCallbackDummy
-_080377E8: .4byte 0x02017810
-_080377EC: .4byte 0x000027f9
-_080377F0: .4byte gBattleTypeFlags
-_080377F4: .4byte gMPlay_BGM
-_080377F8:
- ldr r0, _08037828 @ =gMPlay_BGM
- ldr r1, _0803782C @ =0x0000ffff
- movs r2, 0x80
- lsls r2, 1
- bl m4aMPlayVolumeControl
-_08037804:
- ldr r2, _08037830 @ =gActiveBank
- ldrb r1, [r2]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- ldr r1, _08037834 @ =0x02017810
- adds r0, r1
- movs r1, 0x3
- strb r1, [r0, 0x9]
- ldr r1, _08037838 @ =gBattleBankFunc
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0803783C @ =sub_8037644
- str r1, [r0]
-_08037822:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08037828: .4byte gMPlay_BGM
-_0803782C: .4byte 0x0000ffff
-_08037830: .4byte gActiveBank
-_08037834: .4byte 0x02017810
-_08037838: .4byte gBattleBankFunc
-_0803783C: .4byte sub_8037644
- thumb_func_end sub_8037680
-
- thumb_func_start sub_8037840
-sub_8037840: @ 8037840
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r6, _08037A48 @ =gActiveBank
- ldrb r2, [r6]
- lsls r3, r2, 1
- adds r0, r3, r2
- lsls r0, 2
- ldr r5, _08037A4C @ =0x02017810
- adds r0, r5
- ldrb r1, [r0]
- movs r4, 0x88
- adds r0, r4, 0
- ands r0, r1
- cmp r0, 0
- bne _08037878
- ldr r0, _08037A50 @ =gBattlePartyID
- adds r0, r3, r0
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _08037A54 @ =gEnemyParty
- adds r1, r0
- adds r0, r2, 0
- bl sub_8141828
-_08037878:
- ldrb r0, [r6]
- movs r7, 0x2
- adds r2, r7, 0
- eors r2, r0
- lsls r3, r2, 1
- adds r0, r3, r2
- lsls r0, 2
- adds r0, r5
- ldrb r1, [r0]
- adds r0, r4, 0
- ands r0, r1
- cmp r0, 0
- bne _080378A6
- ldr r0, _08037A50 @ =gBattlePartyID
- adds r0, r3, r0
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _08037A54 @ =gEnemyParty
- adds r1, r0
- adds r0, r2, 0
- bl sub_8141828
-_080378A6:
- ldrb r2, [r6]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r0, r5
- ldrb r1, [r0]
- movs r3, 0x8
- adds r0, r3, 0
- ands r0, r1
- cmp r0, 0
- beq _080378BE
- b _08037A3A
-_080378BE:
- adds r1, r2, 0
- eors r1, r7
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldrb r1, [r0]
- adds r0, r3, 0
- ands r0, r1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- beq _080378DA
- b _08037A3A
-_080378DA:
- ldr r0, _08037A58 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0803791A
- adds r0, r2, 0
- bl GetBankIdentity
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x3
- bne _0803791A
- ldrb r0, [r6]
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r1, r5
- ldrb r0, [r1, 0x9]
- adds r0, 0x1
- strb r0, [r1, 0x9]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0803790E
- b _08037A3A
-_0803790E:
- ldrb r1, [r6]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- strb r4, [r0, 0x9]
-_0803791A:
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- beq _080379B2
- ldr r0, _08037A58 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- bne _080379B2
- ldr r1, _08037A5C @ =gUnknown_0300434C
- ldr r5, _08037A48 @ =gActiveBank
- ldrb r0, [r5]
- movs r4, 0x2
- eors r0, r4
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _08037A60 @ =gSprites
- adds r0, r1
- bl DestroySprite
- ldr r0, _08037A64 @ =gHealthboxIDs
- mov r8, r0
- ldrb r0, [r5]
- adds r1, r4, 0
- eors r1, r0
- mov r2, r8
- adds r0, r1, r2
- ldrb r0, [r0]
- ldr r2, _08037A50 @ =gBattlePartyID
- mov r10, r2
- lsls r1, 1
- add r1, r10
- ldrh r1, [r1]
- movs r2, 0x64
- mov r9, r2
- mov r2, r9
- muls r2, r1
- adds r1, r2, 0
- ldr r6, _08037A54 @ =gEnemyParty
- adds r1, r6
- movs r2, 0
- bl sub_8045A5C
- ldrb r0, [r5]
- eors r0, r4
- bl sub_804777C
- ldrb r0, [r5]
- eors r0, r4
- add r0, r8
- ldrb r0, [r0]
- bl sub_8043DFC
- ldrb r0, [r5]
- eors r4, r0
- lsls r0, r4, 1
- add r0, r10
- ldrh r0, [r0]
- mov r1, r9
- muls r1, r0
- adds r0, r1, 0
- adds r0, r6
- movs r1, 0xB
- bl GetMonData
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- adds r0, r4, 0
- bl sub_8032984
-_080379B2:
- ldr r1, _08037A5C @ =gUnknown_0300434C
- ldr r4, _08037A48 @ =gActiveBank
- ldrb r0, [r4]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _08037A60 @ =gSprites
- adds r0, r1
- bl DestroySprite
- ldr r5, _08037A64 @ =gHealthboxIDs
- ldrb r1, [r4]
- adds r0, r1, r5
- ldrb r0, [r0]
- ldr r2, _08037A50 @ =gBattlePartyID
- mov r9, r2
- lsls r1, 1
- add r1, r9
- ldrh r1, [r1]
- movs r2, 0x64
- mov r8, r2
- mov r2, r8
- muls r2, r1
- adds r1, r2, 0
- ldr r6, _08037A54 @ =gEnemyParty
- adds r1, r6
- movs r2, 0
- bl sub_8045A5C
- ldrb r0, [r4]
- bl sub_804777C
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- bl sub_8043DFC
- ldrb r5, [r4]
- lsls r0, r5, 1
- add r0, r9
- ldrh r0, [r0]
- mov r1, r8
- muls r1, r0
- adds r0, r1, 0
- adds r0, r6
- movs r1, 0xB
- bl GetMonData
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- adds r0, r5, 0
- bl sub_8032984
- ldr r2, _08037A68 @ =0x02017840
- ldrb r1, [r2, 0x9]
- movs r0, 0x2
- negs r0, r0
- ands r0, r1
- strb r0, [r2, 0x9]
- ldr r1, _08037A6C @ =gBattleBankFunc
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08037A70 @ =sub_8037680
- str r1, [r0]
-_08037A3A:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08037A48: .4byte gActiveBank
-_08037A4C: .4byte 0x02017810
-_08037A50: .4byte gBattlePartyID
-_08037A54: .4byte gEnemyParty
-_08037A58: .4byte gBattleTypeFlags
-_08037A5C: .4byte gUnknown_0300434C
-_08037A60: .4byte gSprites
-_08037A64: .4byte gHealthboxIDs
-_08037A68: .4byte 0x02017840
-_08037A6C: .4byte gBattleBankFunc
-_08037A70: .4byte sub_8037680
- thumb_func_end sub_8037840
-
- thumb_func_start sub_8037A74
-sub_8037A74: @ 8037A74
- push {r4-r7,lr}
- ldr r2, _08037ACC @ =gSprites
- ldr r0, _08037AD0 @ =gObjectBankIDs
- ldr r7, _08037AD4 @ =gActiveBank
- ldrb r3, [r7]
- adds r0, r3, r0
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r1, r0, r2
- adds r0, r1, 0
- adds r0, 0x3F
- ldrb r0, [r0]
- lsls r0, 27
- lsrs r2, r0, 31
- cmp r2, 0x1
- bne _08037B18
- movs r4, 0x24
- ldrsh r0, [r1, r4]
- cmp r0, 0
- bne _08037B18
- lsls r4, r3, 1
- adds r0, r4, r3
- lsls r0, 2
- ldr r6, _08037AD8 @ =0x02017810
- adds r1, r0, r6
- ldrb r5, [r1]
- movs r0, 0x80
- ands r0, r5
- cmp r0, 0
- bne _08037AE4
- ldr r0, _08037ADC @ =gBattlePartyID
- adds r0, r4, r0
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _08037AE0 @ =gEnemyParty
- adds r1, r0
- adds r0, r3, 0
- bl sub_8141828
- b _08037B18
- .align 2, 0
-_08037ACC: .4byte gSprites
-_08037AD0: .4byte gObjectBankIDs
-_08037AD4: .4byte gActiveBank
-_08037AD8: .4byte 0x02017810
-_08037ADC: .4byte gBattlePartyID
-_08037AE0: .4byte gEnemyParty
-_08037AE4:
- ldrb r0, [r1, 0x1]
- ands r2, r0
- cmp r2, 0
- beq _08037B18
- movs r0, 0x7F
- ands r0, r5
- strb r0, [r1]
- ldrb r0, [r7]
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r1, r6
- ldrb r2, [r1, 0x1]
- movs r0, 0x2
- negs r0, r0
- ands r0, r2
- strb r0, [r1, 0x1]
- ldr r4, _08037B20 @ =0x000027f9
- adds r0, r4, 0
- bl FreeSpriteTilesByTag
- adds r0, r4, 0
- bl FreeSpritePaletteByTag
- bl dp01_tbl4_exec_completed
-_08037B18:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08037B20: .4byte 0x000027f9
- thumb_func_end sub_8037A74
-
- thumb_func_start sub_8037B24
-sub_8037B24: @ 8037B24
- push {r4-r6,lr}
- ldr r6, _08037B64 @ =gActiveBank
- ldrb r0, [r6]
- ldr r5, _08037B68 @ =gHealthboxIDs
- adds r1, r0, r5
- ldrb r1, [r1]
- movs r2, 0
- movs r3, 0
- bl sub_8045C78
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- ldrb r0, [r6]
- adds r0, r5
- ldrb r0, [r0]
- bl sub_8043DFC
- lsls r4, 16
- asrs r1, r4, 16
- movs r0, 0x1
- negs r0, r0
- cmp r1, r0
- beq _08037B6C
- ldrb r0, [r6]
- adds r0, r5
- ldrb r0, [r0]
- movs r2, 0
- bl sub_80440EC
- b _08037B70
- .align 2, 0
-_08037B64: .4byte gActiveBank
-_08037B68: .4byte gHealthboxIDs
-_08037B6C:
- bl dp01_tbl4_exec_completed
-_08037B70:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_8037B24
-
- thumb_func_start sub_8037B78
-sub_8037B78: @ 8037B78
- push {lr}
- ldr r2, _08037BAC @ =gSprites
- ldr r0, _08037BB0 @ =gObjectBankIDs
- ldr r1, _08037BB4 @ =gActiveBank
- ldrb r3, [r1]
- adds r0, r3, r0
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- adds r0, 0x3E
- ldrb r0, [r0]
- lsls r0, 31
- cmp r0, 0
- bne _08037BA6
- ldr r0, _08037BB8 @ =gHealthboxIDs
- adds r0, r3, r0
- ldrb r0, [r0]
- bl sub_8043DB0
- bl dp01_tbl4_exec_completed
-_08037BA6:
- pop {r0}
- bx r0
- .align 2, 0
-_08037BAC: .4byte gSprites
-_08037BB0: .4byte gObjectBankIDs
-_08037BB4: .4byte gActiveBank
-_08037BB8: .4byte gHealthboxIDs
- thumb_func_end sub_8037B78
-
- thumb_func_start sub_8037BBC
-sub_8037BBC: @ 8037BBC
- push {r4-r6,lr}
- ldr r6, _08037C18 @ =gActiveBank
- ldrb r2, [r6]
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- ldr r1, _08037C1C @ =0x02017810
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- bne _08037C12
- ldr r5, _08037C20 @ =gObjectBankIDs
- adds r0, r2, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r4, _08037C24 @ =gSprites
- adds r0, r4
- bl FreeSpriteOamMatrix
- ldrb r0, [r6]
- adds r0, r5
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- bl DestroySprite
- ldrb r0, [r6]
- bl sub_8032A08
- ldr r1, _08037C28 @ =gHealthboxIDs
- ldrb r0, [r6]
- adds r0, r1
- ldrb r0, [r0]
- bl sub_8043DB0
- bl dp01_tbl4_exec_completed
-_08037C12:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08037C18: .4byte gActiveBank
-_08037C1C: .4byte 0x02017810
-_08037C20: .4byte gObjectBankIDs
-_08037C24: .4byte gSprites
-_08037C28: .4byte gHealthboxIDs
- thumb_func_end sub_8037BBC
-
- thumb_func_start sub_8037C2C
-sub_8037C2C: @ 8037C2C
- push {lr}
- ldr r0, _08037C40 @ =gUnknown_03004210
- ldrh r0, [r0, 0x16]
- cmp r0, 0
- bne _08037C3A
- bl dp01_tbl4_exec_completed
-_08037C3A:
- pop {r0}
- bx r0
- .align 2, 0
-_08037C40: .4byte gUnknown_03004210
- thumb_func_end sub_8037C2C
-
- thumb_func_start dp01t_0F_4_move_anim
-dp01t_0F_4_move_anim: @ 8037C44
- push {r4,lr}
- ldr r1, _08037C80 @ =gObjectBankIDs
- ldr r0, _08037C84 @ =gActiveBank
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r0]
- ldr r2, _08037C88 @ =gSprites
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r4, r0, r2
- movs r1, 0x30
- ldrsh r0, [r4, r1]
- cmp r0, 0x20
- bne _08037C90
- movs r3, 0
- movs r0, 0
- strh r0, [r4, 0x30]
- adds r2, r4, 0
- adds r2, 0x3E
- ldrb r1, [r2]
- subs r0, 0x5
- ands r0, r1
- strb r0, [r2]
- ldr r0, _08037C8C @ =gDoingBattleAnim
- strb r3, [r0]
- bl dp01_tbl4_exec_completed
- b _08037CBA
- .align 2, 0
-_08037C80: .4byte gObjectBankIDs
-_08037C84: .4byte gActiveBank
-_08037C88: .4byte gSprites
-_08037C8C: .4byte gDoingBattleAnim
-_08037C90:
- ldrh r0, [r4, 0x30]
- movs r1, 0x3
- ands r0, r1
- cmp r0, 0
- bne _08037CB4
- adds r3, r4, 0
- adds r3, 0x3E
- ldrb r2, [r3]
- 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
- strb r0, [r3]
-_08037CB4:
- ldrh r0, [r4, 0x30]
- adds r0, 0x1
- strh r0, [r4, 0x30]
-_08037CBA:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end dp01t_0F_4_move_anim
-
- thumb_func_start sub_8037CC0
-sub_8037CC0: @ 8037CC0
- push {r4,lr}
- ldr r2, _08037D10 @ =gSprites
- ldr r0, _08037D14 @ =gHealthboxIDs
- ldr r4, _08037D18 @ =gActiveBank
- ldrb r3, [r4]
- adds r0, r3, r0
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, [r0]
- ldr r0, _08037D1C @ =SpriteCallbackDummy
- cmp r1, r0
- bne _08037D08
- lsls r0, r3, 2
- ldr r1, _08037D20 @ =0x02017800
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- beq _08037CFC
- adds r0, r3, 0
- adds r1, r3, 0
- adds r2, r3, 0
- movs r3, 0x6
- bl move_anim_start_t4
-_08037CFC:
- ldr r0, _08037D24 @ =gBattleBankFunc
- ldrb r1, [r4]
- lsls r1, 2
- adds r1, r0
- ldr r0, _08037D28 @ =sub_8037D2C
- str r0, [r1]
-_08037D08:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08037D10: .4byte gSprites
-_08037D14: .4byte gHealthboxIDs
-_08037D18: .4byte gActiveBank
-_08037D1C: .4byte SpriteCallbackDummy
-_08037D20: .4byte 0x02017800
-_08037D24: .4byte gBattleBankFunc
-_08037D28: .4byte sub_8037D2C
- thumb_func_end sub_8037CC0
-
- thumb_func_start sub_8037D2C
-sub_8037D2C: @ 8037D2C
- push {lr}
- ldr r0, _08037D58 @ =gActiveBank
- ldrb r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- ldr r1, _08037D5C @ =0x02017810
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- bne _08037D52
- ldr r0, _08037D60 @ =c3_0802FDF4
- movs r1, 0xA
- bl CreateTask
- bl dp01_tbl4_exec_completed
-_08037D52:
- pop {r0}
- bx r0
- .align 2, 0
-_08037D58: .4byte gActiveBank
-_08037D5C: .4byte 0x02017810
-_08037D60: .4byte c3_0802FDF4
- thumb_func_end sub_8037D2C
-
- thumb_func_start sub_8037D64
-sub_8037D64: @ 8037D64
- push {r4,r5,lr}
- ldr r5, _08037E08 @ =gActiveBank
- ldrb r1, [r5]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- ldr r3, _08037E0C @ =0x02017810
- adds r2, r0, r3
- ldrb r1, [r2, 0x1]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08037E00
- ldrb r1, [r2]
- movs r0, 0x7F
- ands r0, r1
- strb r0, [r2]
- ldrb r0, [r5]
- lsls r1, r0, 1
- adds r1, r0
- lsls r1, 2
- adds r1, r3
- ldrb r2, [r1, 0x1]
- movs r0, 0x2
- negs r0, r0
- ands r0, r2
- strb r0, [r1, 0x1]
- ldr r4, _08037E10 @ =0x000027f9
- adds r0, r4, 0
- bl FreeSpriteTilesByTag
- adds r0, r4, 0
- bl FreeSpritePaletteByTag
- ldr r1, _08037E14 @ =gObjectBankIDs
- ldrb r0, [r5]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _08037E18 @ =gSprites
- adds r0, r1
- movs r1, 0
- bl StartSpriteAnim
- ldr r4, _08037E1C @ =gHealthboxIDs
- ldrb r1, [r5]
- adds r0, r1, r4
- ldrb r0, [r0]
- ldr r2, _08037E20 @ =gBattlePartyID
- lsls r1, 1
- adds r1, r2
- ldrh r2, [r1]
- movs r1, 0x64
- muls r1, r2
- ldr r2, _08037E24 @ =gEnemyParty
- adds r1, r2
- movs r2, 0
- bl sub_8045A5C
- ldrb r0, [r5]
- bl sub_804777C
- ldrb r0, [r5]
- adds r0, r4
- ldrb r0, [r0]
- bl sub_8043DFC
- ldrb r0, [r5]
- bl sub_8031F88
- ldr r1, _08037E28 @ =gBattleBankFunc
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08037E2C @ =sub_8037CC0
- str r1, [r0]
-_08037E00:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08037E08: .4byte gActiveBank
-_08037E0C: .4byte 0x02017810
-_08037E10: .4byte 0x000027f9
-_08037E14: .4byte gObjectBankIDs
-_08037E18: .4byte gSprites
-_08037E1C: .4byte gHealthboxIDs
-_08037E20: .4byte gBattlePartyID
-_08037E24: .4byte gEnemyParty
-_08037E28: .4byte gBattleBankFunc
-_08037E2C: .4byte sub_8037CC0
- thumb_func_end sub_8037D64
-
- thumb_func_start sub_8037E30
-sub_8037E30: @ 8037E30
- push {r4-r6,lr}
- ldr r5, _08037ECC @ =gActiveBank
- ldrb r2, [r5]
- lsls r3, r2, 1
- adds r0, r3, r2
- lsls r0, 2
- ldr r6, _08037ED0 @ =0x02017810
- adds r0, r6
- ldrb r1, [r0]
- movs r0, 0x88
- ands r0, r1
- cmp r0, 0
- bne _08037E5E
- ldr r0, _08037ED4 @ =gBattlePartyID
- adds r0, r3, r0
- ldrh r1, [r0]
- movs r0, 0x64
- muls r1, r0
- ldr r0, _08037ED8 @ =gEnemyParty
- adds r1, r0
- adds r0, r2, 0
- bl sub_8141828
-_08037E5E:
- ldr r4, _08037EDC @ =gSprites
- ldr r0, _08037EE0 @ =gUnknown_0300434C
- ldrb r2, [r5]
- adds r0, r2, r0
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r3, r0, 2
- adds r0, r4, 0
- adds r0, 0x1C
- adds r0, r3, r0
- ldr r1, [r0]
- ldr r0, _08037EE4 @ =SpriteCallbackDummy
- cmp r1, r0
- bne _08037EC4
- lsls r0, r2, 1
- adds r0, r2
- lsls r0, 2
- adds r0, r6
- ldrb r1, [r0]
- movs r0, 0x8
- ands r0, r1
- cmp r0, 0
- bne _08037EC4
- adds r0, r3, r4
- bl DestroySprite
- ldrb r4, [r5]
- ldr r1, _08037ED4 @ =gBattlePartyID
- lsls r0, r4, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08037ED8 @ =gEnemyParty
- adds r0, r1
- movs r1, 0xB
- bl GetMonData
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- adds r0, r4, 0
- bl sub_8032984
- ldr r1, _08037EE8 @ =gBattleBankFunc
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08037EEC @ =sub_8037D64
- str r1, [r0]
-_08037EC4:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08037ECC: .4byte gActiveBank
-_08037ED0: .4byte 0x02017810
-_08037ED4: .4byte gBattlePartyID
-_08037ED8: .4byte gEnemyParty
-_08037EDC: .4byte gSprites
-_08037EE0: .4byte gUnknown_0300434C
-_08037EE4: .4byte SpriteCallbackDummy
-_08037EE8: .4byte gBattleBankFunc
-_08037EEC: .4byte sub_8037D64
- thumb_func_end sub_8037E30
-
- thumb_func_start sub_8037EF0
-sub_8037EF0: @ 8037EF0
- push {lr}
- ldr r0, _08037F20 @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- bne _08037F1C
- movs r0, 0x5A
- bl m4aSongNumStop
- ldr r3, _08037F24 @ =gMain
- ldr r0, _08037F28 @ =0x0000043d
- adds r2, r3, r0
- ldrb r1, [r2]
- movs r0, 0x3
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
- ldr r0, _08037F2C @ =gPreBattleCallback1
- ldr r0, [r0]
- str r0, [r3]
- ldr r0, _08037F30 @ =c2_8011A1C
- bl SetMainCallback2
-_08037F1C:
- pop {r0}
- bx r0
- .align 2, 0
-_08037F20: .4byte gReceivedRemoteLinkPlayers
-_08037F24: .4byte gMain
-_08037F28: .4byte 0x0000043d
-_08037F2C: .4byte gPreBattleCallback1
-_08037F30: .4byte c2_8011A1C
- thumb_func_end sub_8037EF0
-
- thumb_func_start sub_8037F34
-sub_8037F34: @ 8037F34
- push {lr}
- ldr r0, _08037F64 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08037F9A
- ldr r0, _08037F68 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _08037F78
- bl sub_800832C
- ldr r1, _08037F6C @ =gBattleBankFunc
- ldr r0, _08037F70 @ =gActiveBank
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, _08037F74 @ =sub_8037EF0
- str r1, [r0]
- b _08037F9A
- .align 2, 0
-_08037F64: .4byte gPaletteFade
-_08037F68: .4byte gBattleTypeFlags
-_08037F6C: .4byte gBattleBankFunc
-_08037F70: .4byte gActiveBank
-_08037F74: .4byte sub_8037EF0
-_08037F78:
- movs r0, 0x5A
- bl m4aSongNumStop
- ldr r2, _08037FA0 @ =gMain
- ldr r0, _08037FA4 @ =0x0000043d
- adds r3, r2, r0
- ldrb r1, [r3]
- movs r0, 0x3
- negs r0, r0
- ands r0, r1
- strb r0, [r3]
- ldr r0, _08037FA8 @ =gPreBattleCallback1
- ldr r0, [r0]
- str r0, [r2]
- ldr r0, [r2, 0x8]
- bl SetMainCallback2
-_08037F9A:
- pop {r0}
- bx r0
- .align 2, 0
-_08037FA0: .4byte gMain
-_08037FA4: .4byte 0x0000043d
-_08037FA8: .4byte gPreBattleCallback1
- thumb_func_end sub_8037F34
-
- thumb_func_start sub_8037FAC
-sub_8037FAC: @ 8037FAC
- push {lr}
- ldr r0, _08037FD0 @ =gActiveBank
- ldrb r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- ldr r1, _08037FD4 @ =0x02017810
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- bne _08037FCA
- bl dp01_tbl4_exec_completed
-_08037FCA:
- pop {r0}
- bx r0
- .align 2, 0
-_08037FD0: .4byte gActiveBank
-_08037FD4: .4byte 0x02017810
- thumb_func_end sub_8037FAC
-
- thumb_func_start sub_8037FD8
-sub_8037FD8: @ 8037FD8
- push {lr}
- ldr r0, _08037FFC @ =gActiveBank
- ldrb r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- ldr r1, _08038000 @ =0x02017810
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- bne _08037FF6
- bl dp01_tbl4_exec_completed
-_08037FF6:
- pop {r0}
- bx r0
- .align 2, 0
-_08037FFC: .4byte gActiveBank
-_08038000: .4byte 0x02017810
- thumb_func_end sub_8037FD8
-
- thumb_func_start dp01_tbl4_exec_completed
-dp01_tbl4_exec_completed: @ 8038004
- push {r4,lr}
- sub sp, 0x4
- ldr r1, _08038044 @ =gBattleBankFunc
- ldr r4, _08038048 @ =gActiveBank
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0803804C @ =sub_803752C
- str r1, [r0]
- ldr r0, _08038050 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _08038058
- bl GetMultiplayerId
- mov r1, sp
- strb r0, [r1]
- movs r0, 0x2
- movs r1, 0x4
- mov r2, sp
- bl dp01_prepare_buffer_wireless_probably
- ldr r1, _08038054 @ =gBattleBufferA
- ldrb r0, [r4]
- lsls r0, 9
- adds r0, r1
- movs r1, 0x38
- strb r1, [r0]
- b _0803806A
- .align 2, 0
-_08038044: .4byte gBattleBankFunc
-_08038048: .4byte gActiveBank
-_0803804C: .4byte sub_803752C
-_08038050: .4byte gBattleTypeFlags
-_08038054: .4byte gBattleBufferA
-_08038058:
- ldr r2, _08038074 @ =gBattleExecBuffer
- ldr r1, _08038078 @ =gBitTable
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- ldr r0, [r2]
- bics r0, r1
- str r0, [r2]
-_0803806A:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08038074: .4byte gBattleExecBuffer
-_08038078: .4byte gBitTable
- thumb_func_end dp01_tbl4_exec_completed
-
.align 2, 0 @ Don't pad with nop.
diff --git a/asm/battle_anim_81258BC.s b/asm/battle_anim_81258BC.s
index 3c6193b3b..69b95b703 100644
--- a/asm/battle_anim_81258BC.s
+++ b/asm/battle_anim_81258BC.s
@@ -729,1397 +729,5 @@ _0812B45C: .4byte gTasks
_0812B460: .4byte gUnknown_0202F7D2
thumb_func_end sub_812B404
- thumb_func_start unref_sub_812B464
-unref_sub_812B464: @ 812B464
- bx lr
- thumb_func_end unref_sub_812B464
-
- thumb_func_start SetBankFuncToSafariBufferRunCommand
-SetBankFuncToSafariBufferRunCommand: @ 812B468
- ldr r1, _0812B478 @ =gBattleBankFunc
- ldr r0, _0812B47C @ =gActiveBank
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0812B480 @ =SafariBufferRunCommand
- str r1, [r0]
- bx lr
- .align 2, 0
-_0812B478: .4byte gBattleBankFunc
-_0812B47C: .4byte gActiveBank
-_0812B480: .4byte SafariBufferRunCommand
- thumb_func_end SetBankFuncToSafariBufferRunCommand
-
- thumb_func_start SafariBufferRunCommand
-SafariBufferRunCommand: @ 812B484
- push {lr}
- ldr r2, _0812B4B8 @ =gBattleExecBuffer
- ldr r1, _0812B4BC @ =gBitTable
- ldr r0, _0812B4C0 @ =gActiveBank
- ldrb r3, [r0]
- lsls r0, r3, 2
- adds r0, r1
- ldr r1, [r2]
- ldr r0, [r0]
- ands r1, r0
- cmp r1, 0
- beq _0812B4D0
- ldr r0, _0812B4C4 @ =gBattleBufferA
- lsls r1, r3, 9
- adds r1, r0
- ldrb r0, [r1]
- cmp r0, 0x38
- bhi _0812B4CC
- ldr r0, _0812B4C8 @ =gSafariBufferCommands
- ldrb r1, [r1]
- lsls r1, 2
- adds r1, r0
- ldr r0, [r1]
- bl _call_via_r0
- b _0812B4D0
- .align 2, 0
-_0812B4B8: .4byte gBattleExecBuffer
-_0812B4BC: .4byte gBitTable
-_0812B4C0: .4byte gActiveBank
-_0812B4C4: .4byte gBattleBufferA
-_0812B4C8: .4byte gSafariBufferCommands
-_0812B4CC:
- bl SafariBufferExecCompleted
-_0812B4D0:
- pop {r0}
- bx r0
- thumb_func_end SafariBufferRunCommand
-
- thumb_func_start bx_battle_menu_t6_2
-bx_battle_menu_t6_2: @ 812B4D4
- push {r4,r5,lr}
- ldr r0, _0812B508 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r2, 0x1
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- beq _0812B546
- movs r0, 0x5
- bl PlaySE
- bl DestroyMenuCursor
- ldr r1, _0812B50C @ =gActionSelectionCursor
- ldr r0, _0812B510 @ =gActiveBank
- ldrb r0, [r0]
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _0812B524
- cmp r0, 0x1
- bgt _0812B514
- cmp r0, 0
- beq _0812B51E
- b _0812B540
- .align 2, 0
-_0812B508: .4byte gMain
-_0812B50C: .4byte gActionSelectionCursor
-_0812B510: .4byte gActiveBank
-_0812B514:
- cmp r0, 0x2
- beq _0812B52A
- cmp r0, 0x3
- beq _0812B536
- b _0812B540
-_0812B51E:
- movs r0, 0x1
- movs r1, 0x5
- b _0812B52E
-_0812B524:
- movs r0, 0x1
- movs r1, 0x6
- b _0812B52E
-_0812B52A:
- movs r0, 0x1
- movs r1, 0x7
-_0812B52E:
- movs r2, 0
- bl dp01_build_cmdbuf_x21_a_bb
- b _0812B540
-_0812B536:
- movs r0, 0x1
- movs r1, 0x8
- movs r2, 0
- bl dp01_build_cmdbuf_x21_a_bb
-_0812B540:
- bl SafariBufferExecCompleted
- b _0812B64E
-_0812B546:
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- beq _0812B584
- ldr r5, _0812B57C @ =gActionSelectionCursor
- ldr r4, _0812B580 @ =gActiveBank
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- beq _0812B64E
- movs r0, 0x5
- bl PlaySE
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- bl nullsub_8
- ldrb r1, [r4]
- adds r1, r5
- ldrb r0, [r1]
- movs r2, 0x1
- b _0812B5F2
- .align 2, 0
-_0812B57C: .4byte gActionSelectionCursor
-_0812B580: .4byte gActiveBank
-_0812B584:
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _0812B5C0
- ldr r5, _0812B5B8 @ =gActionSelectionCursor
- ldr r4, _0812B5BC @ =gActiveBank
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- bne _0812B64E
- movs r0, 0x5
- bl PlaySE
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- bl nullsub_8
- ldrb r1, [r4]
- adds r1, r5
- ldrb r0, [r1]
- movs r2, 0x1
- b _0812B5F2
- .align 2, 0
-_0812B5B8: .4byte gActionSelectionCursor
-_0812B5BC: .4byte gActiveBank
-_0812B5C0:
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _0812B60C
- ldr r5, _0812B604 @ =gActionSelectionCursor
- ldr r4, _0812B608 @ =gActiveBank
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0812B64E
- movs r0, 0x5
- bl PlaySE
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- bl nullsub_8
- ldrb r1, [r4]
- adds r1, r5
- ldrb r0, [r1]
- movs r2, 0x2
-_0812B5F2:
- eors r0, r2
- strb r0, [r1]
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- movs r1, 0
- bl sub_802E3E4
- b _0812B64E
- .align 2, 0
-_0812B604: .4byte gActionSelectionCursor
-_0812B608: .4byte gActiveBank
-_0812B60C:
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0812B64E
- ldr r5, _0812B654 @ =gActionSelectionCursor
- ldr r4, _0812B658 @ =gActiveBank
- ldrb r0, [r4]
- adds r0, r5
- ldrb r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- bne _0812B64E
- movs r0, 0x5
- bl PlaySE
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- bl nullsub_8
- ldrb r1, [r4]
- adds r1, r5
- ldrb r0, [r1]
- movs r2, 0x2
- eors r0, r2
- strb r0, [r1]
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- movs r1, 0
- bl sub_802E3E4
-_0812B64E:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0812B654: .4byte gActionSelectionCursor
-_0812B658: .4byte gActiveBank
- thumb_func_end bx_battle_menu_t6_2
-
- thumb_func_start sub_812B65C
-sub_812B65C: @ 812B65C
- push {lr}
- ldr r2, _0812B684 @ =gSprites
- ldr r1, _0812B688 @ =gObjectBankIDs
- ldr r0, _0812B68C @ =gActiveBank
- ldrb r0, [r0]
- adds r0, r1
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r2, 0x1C
- adds r0, r2
- ldr r1, [r0]
- ldr r0, _0812B690 @ =SpriteCallbackDummy
- cmp r1, r0
- bne _0812B680
- bl SafariBufferExecCompleted
-_0812B680:
- pop {r0}
- bx r0
- .align 2, 0
-_0812B684: .4byte gSprites
-_0812B688: .4byte gObjectBankIDs
-_0812B68C: .4byte gActiveBank
-_0812B690: .4byte SpriteCallbackDummy
- thumb_func_end sub_812B65C
-
- thumb_func_start sub_812B694
-sub_812B694: @ 812B694
- push {lr}
- ldr r0, _0812B6A8 @ =gUnknown_03004210
- ldrh r0, [r0, 0x16]
- cmp r0, 0
- bne _0812B6A2
- bl SafariBufferExecCompleted
-_0812B6A2:
- pop {r0}
- bx r0
- .align 2, 0
-_0812B6A8: .4byte gUnknown_03004210
- thumb_func_end sub_812B694
-
- thumb_func_start sub_812B6AC
-sub_812B6AC: @ 812B6AC
- push {lr}
- ldr r0, _0812B6DC @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0812B6D6
- ldr r2, _0812B6E0 @ =gMain
- ldr r0, _0812B6E4 @ =0x0000043d
- adds r3, r2, r0
- ldrb r1, [r3]
- movs r0, 0x3
- negs r0, r0
- ands r0, r1
- strb r0, [r3]
- ldr r0, _0812B6E8 @ =gPreBattleCallback1
- ldr r0, [r0]
- str r0, [r2]
- ldr r0, [r2, 0x8]
- bl SetMainCallback2
-_0812B6D6:
- pop {r0}
- bx r0
- .align 2, 0
-_0812B6DC: .4byte gPaletteFade
-_0812B6E0: .4byte gMain
-_0812B6E4: .4byte 0x0000043d
-_0812B6E8: .4byte gPreBattleCallback1
- thumb_func_end sub_812B6AC
-
- thumb_func_start bx_wait_t6
-bx_wait_t6: @ 812B6EC
- push {lr}
- ldr r0, _0812B718 @ =gDoingBattleAnim
- ldrb r0, [r0]
- cmp r0, 0
- beq _0812B70E
- ldr r0, _0812B71C @ =gActiveBank
- ldrb r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- ldr r1, _0812B720 @ =0x02017810
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- bne _0812B712
-_0812B70E:
- bl SafariBufferExecCompleted
-_0812B712:
- pop {r0}
- bx r0
- .align 2, 0
-_0812B718: .4byte gDoingBattleAnim
-_0812B71C: .4byte gActiveBank
-_0812B720: .4byte 0x02017810
- thumb_func_end bx_wait_t6
-
- thumb_func_start sub_812B724
-sub_812B724: @ 812B724
- push {lr}
- ldr r0, _0812B748 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0812B744
- ldr r1, _0812B74C @ =gBattleBankFunc
- ldr r0, _0812B750 @ =gActiveBank
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0812B754 @ =sub_812B758
- str r1, [r0]
- bl sub_810BADC
-_0812B744:
- pop {r0}
- bx r0
- .align 2, 0
-_0812B748: .4byte gPaletteFade
-_0812B74C: .4byte gBattleBankFunc
-_0812B750: .4byte gActiveBank
-_0812B754: .4byte sub_812B758
- thumb_func_end sub_812B724
-
- thumb_func_start sub_812B758
-sub_812B758: @ 812B758
- push {lr}
- ldr r0, _0812B784 @ =gMain
- ldr r1, [r0, 0x4]
- ldr r0, _0812B788 @ =sub_800F808
- cmp r1, r0
- bne _0812B77E
- ldr r0, _0812B78C @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0812B77E
- ldr r0, _0812B790 @ =gScriptItemId
- ldrh r1, [r0]
- movs r0, 0x1
- bl dp01_build_cmdbuf_x23_aa_0
- bl SafariBufferExecCompleted
-_0812B77E:
- pop {r0}
- bx r0
- .align 2, 0
-_0812B784: .4byte gMain
-_0812B788: .4byte sub_800F808
-_0812B78C: .4byte gPaletteFade
-_0812B790: .4byte gScriptItemId
- thumb_func_end sub_812B758
-
- thumb_func_start sub_812B794
-sub_812B794: @ 812B794
- push {lr}
- ldr r0, _0812B7B8 @ =gActiveBank
- ldrb r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- ldr r1, _0812B7BC @ =0x02017810
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x20
- ands r0, r1
- cmp r0, 0
- bne _0812B7B2
- bl SafariBufferExecCompleted
-_0812B7B2:
- pop {r0}
- bx r0
- .align 2, 0
-_0812B7B8: .4byte gActiveBank
-_0812B7BC: .4byte 0x02017810
- thumb_func_end sub_812B794
-
- thumb_func_start SafariBufferExecCompleted
-SafariBufferExecCompleted: @ 812B7C0
- push {r4,lr}
- sub sp, 0x4
- ldr r1, _0812B800 @ =gBattleBankFunc
- ldr r4, _0812B804 @ =gActiveBank
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0812B808 @ =SafariBufferRunCommand
- str r1, [r0]
- ldr r0, _0812B80C @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0812B814
- bl GetMultiplayerId
- mov r1, sp
- strb r0, [r1]
- movs r0, 0x2
- movs r1, 0x4
- mov r2, sp
- bl dp01_prepare_buffer_wireless_probably
- ldr r1, _0812B810 @ =gBattleBufferA
- ldrb r0, [r4]
- lsls r0, 9
- adds r0, r1
- movs r1, 0x38
- strb r1, [r0]
- b _0812B826
- .align 2, 0
-_0812B800: .4byte gBattleBankFunc
-_0812B804: .4byte gActiveBank
-_0812B808: .4byte SafariBufferRunCommand
-_0812B80C: .4byte gBattleTypeFlags
-_0812B810: .4byte gBattleBufferA
-_0812B814:
- ldr r2, _0812B830 @ =gBattleExecBuffer
- ldr r1, _0812B834 @ =gBitTable
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, [r0]
- ldr r0, [r2]
- bics r0, r1
- str r0, [r2]
-_0812B826:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0812B830: .4byte gBattleExecBuffer
-_0812B834: .4byte gBitTable
- thumb_func_end SafariBufferExecCompleted
-
- thumb_func_start unref_sub_812B838
-unref_sub_812B838: @ 812B838
- push {lr}
- ldr r0, _0812B85C @ =gActiveBank
- ldrb r1, [r0]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- ldr r1, _0812B860 @ =0x02017810
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- bne _0812B856
- bl SafariBufferExecCompleted
-_0812B856:
- pop {r0}
- bx r0
- .align 2, 0
-_0812B85C: .4byte gActiveBank
-_0812B860: .4byte 0x02017810
- thumb_func_end unref_sub_812B838
-
- thumb_func_start SafariHandleGetAttributes
-SafariHandleGetAttributes: @ 812B864
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end SafariHandleGetAttributes
-
- thumb_func_start sub_812B870
-sub_812B870: @ 812B870
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812B870
-
- thumb_func_start sub_812B87C
-sub_812B87C: @ 812B87C
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812B87C
-
- thumb_func_start sub_812B888
-sub_812B888: @ 812B888
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812B888
-
- thumb_func_start sub_812B894
-sub_812B894: @ 812B894
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812B894
-
- thumb_func_start sub_812B8A0
-sub_812B8A0: @ 812B8A0
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812B8A0
-
- thumb_func_start sub_812B8AC
-sub_812B8AC: @ 812B8AC
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812B8AC
-
- thumb_func_start sub_812B8B8
-sub_812B8B8: @ 812B8B8
- push {r4-r6,lr}
- ldr r4, _0812B96C @ =gSaveBlock2
- ldrb r0, [r4, 0x8]
- ldr r5, _0812B970 @ =gActiveBank
- ldrb r1, [r5]
- bl sub_8031AF4
- ldrb r6, [r4, 0x8]
- ldrb r0, [r5]
- bl GetBankIdentity
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r6, 0
- bl GetMonSpriteTemplate_803C5A0
- ldr r0, _0812B974 @ =gUnknown_02024E8C
- ldr r2, _0812B978 @ =gTrainerBackPicCoords
- ldrb r1, [r4, 0x8]
- lsls r1, 2
- adds r1, r2
- ldrb r1, [r1]
- movs r2, 0x8
- subs r2, r1
- lsls r2, 18
- movs r1, 0xA0
- lsls r1, 15
- adds r2, r1
- asrs r2, 16
- movs r1, 0x50
- movs r3, 0x1E
- bl CreateSprite
- ldr r6, _0812B97C @ =gObjectBankIDs
- ldrb r1, [r5]
- adds r1, r6
- strb r0, [r1]
- ldr r4, _0812B980 @ =gSprites
- ldrb r3, [r5]
- adds r0, r3, r6
- ldrb r0, [r0]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r4
- lsls r3, 4
- ldrb r2, [r1, 0x5]
- movs r0, 0xF
- ands r0, r2
- orrs r0, r3
- strb r0, [r1, 0x5]
- ldrb r0, [r5]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- movs r1, 0xF0
- strh r1, [r0, 0x24]
- ldrb r0, [r5]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldr r1, _0812B984 @ =0x0000fffe
- strh r1, [r0, 0x2E]
- ldrb r0, [r5]
- adds r0, r6
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r4, 0x1C
- adds r0, r4
- ldr r1, _0812B988 @ =sub_80313A0
- str r1, [r0]
- ldr r1, _0812B98C @ =gBattleBankFunc
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0812B990 @ =sub_812B65C
- str r1, [r0]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0812B96C: .4byte gSaveBlock2
-_0812B970: .4byte gActiveBank
-_0812B974: .4byte gUnknown_02024E8C
-_0812B978: .4byte gTrainerBackPicCoords
-_0812B97C: .4byte gObjectBankIDs
-_0812B980: .4byte gSprites
-_0812B984: .4byte 0x0000fffe
-_0812B988: .4byte sub_80313A0
-_0812B98C: .4byte gBattleBankFunc
-_0812B990: .4byte sub_812B65C
- thumb_func_end sub_812B8B8
-
- thumb_func_start sub_812B994
-sub_812B994: @ 812B994
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812B994
-
- thumb_func_start sub_812B9A0
-sub_812B9A0: @ 812B9A0
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812B9A0
-
- thumb_func_start sub_812B9AC
-sub_812B9AC: @ 812B9AC
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812B9AC
-
- thumb_func_start sub_812B9B8
-sub_812B9B8: @ 812B9B8
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812B9B8
-
- thumb_func_start sub_812B9C4
-sub_812B9C4: @ 812B9C4
- push {r4,r5,lr}
- ldr r1, _0812BA00 @ =0x02017840
- movs r0, 0x4
- strb r0, [r1, 0x8]
- ldr r1, _0812BA04 @ =gDoingBattleAnim
- movs r0, 0x1
- strb r0, [r1]
- ldr r5, _0812BA08 @ =gActiveBank
- ldrb r4, [r5]
- movs r0, 0x1
- bl GetBankByPlayerAI
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- adds r0, r4, 0
- adds r1, r4, 0
- movs r3, 0x4
- bl move_anim_start_t4
- ldr r1, _0812BA0C @ =gBattleBankFunc
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0812BA10 @ =bx_wait_t6
- str r1, [r0]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0812BA00: .4byte 0x02017840
-_0812BA04: .4byte gDoingBattleAnim
-_0812BA08: .4byte gActiveBank
-_0812BA0C: .4byte gBattleBankFunc
-_0812BA10: .4byte bx_wait_t6
- thumb_func_end sub_812B9C4
-
- thumb_func_start sub_812BA14
-sub_812BA14: @ 812BA14
- push {r4,r5,lr}
- ldr r1, _0812BA58 @ =gBattleBufferA
- ldr r5, _0812BA5C @ =gActiveBank
- ldrb r0, [r5]
- lsls r0, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r1, [r0]
- ldr r0, _0812BA60 @ =0x02017840
- strb r1, [r0, 0x8]
- ldr r1, _0812BA64 @ =gDoingBattleAnim
- movs r0, 0x1
- strb r0, [r1]
- ldrb r4, [r5]
- movs r0, 0x1
- bl GetBankByPlayerAI
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- adds r0, r4, 0
- adds r1, r4, 0
- movs r3, 0x4
- bl move_anim_start_t4
- ldr r1, _0812BA68 @ =gBattleBankFunc
- ldrb r0, [r5]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0812BA6C @ =bx_wait_t6
- str r1, [r0]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0812BA58: .4byte gBattleBufferA
-_0812BA5C: .4byte gActiveBank
-_0812BA60: .4byte 0x02017840
-_0812BA64: .4byte gDoingBattleAnim
-_0812BA68: .4byte gBattleBankFunc
-_0812BA6C: .4byte bx_wait_t6
- thumb_func_end sub_812BA14
-
- thumb_func_start sub_812BA70
-sub_812BA70: @ 812BA70
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812BA70
-
- thumb_func_start sub_812BA7C
-sub_812BA7C: @ 812BA7C
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812BA7C
-
- thumb_func_start SafariHandlePrintString
-SafariHandlePrintString: @ 812BA88
- push {r4,lr}
- sub sp, 0x4
- ldr r0, _0812BACC @ =gUnknown_030042A4
- movs r1, 0
- strh r1, [r0]
- ldr r0, _0812BAD0 @ =gUnknown_030042A0
- strh r1, [r0]
- ldr r4, _0812BAD4 @ =gActiveBank
- ldrb r0, [r4]
- lsls r0, 9
- ldr r1, _0812BAD8 @ =gUnknown_02023A62
- adds r0, r1
- ldrh r0, [r0]
- bl BufferStringBattle
- ldr r0, _0812BADC @ =gUnknown_03004210
- ldr r1, _0812BAE0 @ =gDisplayedStringBattle
- movs r2, 0xF
- str r2, [sp]
- movs r2, 0x90
- movs r3, 0x2
- bl sub_8002EB0
- ldr r1, _0812BAE4 @ =gBattleBankFunc
- ldrb r0, [r4]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0812BAE8 @ =sub_812B694
- str r1, [r0]
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0812BACC: .4byte gUnknown_030042A4
-_0812BAD0: .4byte gUnknown_030042A0
-_0812BAD4: .4byte gActiveBank
-_0812BAD8: .4byte gUnknown_02023A62
-_0812BADC: .4byte gUnknown_03004210
-_0812BAE0: .4byte gDisplayedStringBattle
-_0812BAE4: .4byte gBattleBankFunc
-_0812BAE8: .4byte sub_812B694
- thumb_func_end SafariHandlePrintString
-
- thumb_func_start SafariHandlePrintStringPlayerOnly
-SafariHandlePrintStringPlayerOnly: @ 812BAEC
- push {lr}
- ldr r0, _0812BB04 @ =gActiveBank
- ldrb r0, [r0]
- bl GetBankSide
- lsls r0, 24
- cmp r0, 0
- bne _0812BB08
- bl SafariHandlePrintString
- b _0812BB0C
- .align 2, 0
-_0812BB04: .4byte gActiveBank
-_0812BB08:
- bl SafariBufferExecCompleted
-_0812BB0C:
- pop {r0}
- bx r0
- thumb_func_end SafariHandlePrintStringPlayerOnly
-
-.section .text_812BBFC
-
- thumb_func_start sub_812BBFC
-sub_812BBFC: @ 812BBFC
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812BBFC
-
- thumb_func_start sub_812BC08
-sub_812BC08: @ 812BC08
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812BC08
-
- thumb_func_start sub_812BC14
-sub_812BC14: @ 812BC14
- push {lr}
- sub sp, 0x4
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r1, _0812BC44 @ =gBattleBankFunc
- ldr r2, _0812BC48 @ =gActiveBank
- ldrb r0, [r2]
- lsls r0, 2
- adds r0, r1
- ldr r1, _0812BC4C @ =sub_812B724
- str r1, [r0]
- ldr r1, _0812BC50 @ =gBankInMenu
- ldrb r0, [r2]
- strb r0, [r1]
- add sp, 0x4
- pop {r0}
- bx r0
- .align 2, 0
-_0812BC44: .4byte gBattleBankFunc
-_0812BC48: .4byte gActiveBank
-_0812BC4C: .4byte sub_812B724
-_0812BC50: .4byte gBankInMenu
- thumb_func_end sub_812BC14
-
- thumb_func_start sub_812BC54
-sub_812BC54: @ 812BC54
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812BC54
-
- thumb_func_start sub_812BC60
-sub_812BC60: @ 812BC60
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812BC60
-
- thumb_func_start sub_812BC6C
-sub_812BC6C: @ 812BC6C
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812BC6C
-
- thumb_func_start sub_812BC78
-sub_812BC78: @ 812BC78
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812BC78
-
- thumb_func_start sub_812BC84
-sub_812BC84: @ 812BC84
- push {lr}
- ldr r0, _0812BCB0 @ =gHealthboxIDs
- ldr r1, _0812BCB4 @ =gActiveBank
- ldrb r1, [r1]
- adds r0, r1, r0
- ldrb r0, [r0]
- ldr r2, _0812BCB8 @ =gBattlePartyID
- lsls r1, 1
- adds r1, r2
- ldrh r2, [r1]
- movs r1, 0x64
- muls r1, r2
- ldr r2, _0812BCBC @ =gPlayerParty
- adds r1, r2
- movs r2, 0xB
- bl sub_8045A5C
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- .align 2, 0
-_0812BCB0: .4byte gHealthboxIDs
-_0812BCB4: .4byte gActiveBank
-_0812BCB8: .4byte gBattlePartyID
-_0812BCBC: .4byte gPlayerParty
- thumb_func_end sub_812BC84
-
- thumb_func_start sub_812BCC0
-sub_812BCC0: @ 812BCC0
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812BCC0
-
- thumb_func_start sub_812BCCC
-sub_812BCCC: @ 812BCCC
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812BCCC
-
- thumb_func_start sub_812BCD8
-sub_812BCD8: @ 812BCD8
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812BCD8
-
- thumb_func_start sub_812BCE4
-sub_812BCE4: @ 812BCE4
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812BCE4
-
- thumb_func_start sub_812BCF0
-sub_812BCF0: @ 812BCF0
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812BCF0
-
- thumb_func_start sub_812BCFC
-sub_812BCFC: @ 812BCFC
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812BCFC
-
- thumb_func_start sub_812BD08
-sub_812BD08: @ 812BD08
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812BD08
-
- thumb_func_start sub_812BD14
-sub_812BD14: @ 812BD14
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812BD14
-
- thumb_func_start sub_812BD20
-sub_812BD20: @ 812BD20
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812BD20
-
- thumb_func_start sub_812BD2C
-sub_812BD2C: @ 812BD2C
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812BD2C
-
- thumb_func_start sub_812BD38
-sub_812BD38: @ 812BD38
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812BD38
-
- thumb_func_start sub_812BD44
-sub_812BD44: @ 812BD44
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812BD44
-
- thumb_func_start sub_812BD50
-sub_812BD50: @ 812BD50
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812BD50
-
- thumb_func_start sub_812BD5C
-sub_812BD5C: @ 812BD5C
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812BD5C
-
- thumb_func_start sub_812BD68
-sub_812BD68: @ 812BD68
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812BD68
-
- thumb_func_start sub_812BD74
-sub_812BD74: @ 812BD74
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812BD74
-
- thumb_func_start sub_812BD80
-sub_812BD80: @ 812BD80
- push {r4,lr}
- ldr r4, _0812BDBC @ =gActiveBank
- ldrb r0, [r4]
- bl GetBankSide
- lsls r0, 24
- movs r3, 0x3F
- cmp r0, 0
- bne _0812BD94
- movs r3, 0xC0
-_0812BD94:
- ldr r2, _0812BDC0 @ =gBattleBufferA
- ldrb r1, [r4]
- lsls r1, 9
- adds r0, r2, 0x1
- adds r0, r1, r0
- ldrb r0, [r0]
- adds r2, 0x2
- adds r1, r2
- ldrb r1, [r1]
- lsls r1, 8
- orrs r0, r1
- lsls r1, r3, 24
- asrs r1, 24
- bl PlaySE12WithPanning
- bl SafariBufferExecCompleted
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0812BDBC: .4byte gActiveBank
-_0812BDC0: .4byte gBattleBufferA
- thumb_func_end sub_812BD80
-
- thumb_func_start sub_812BDC4
-sub_812BDC4: @ 812BDC4
- push {lr}
- ldr r2, _0812BDEC @ =gBattleBufferA
- ldr r0, _0812BDF0 @ =gActiveBank
- ldrb r1, [r0]
- lsls r1, 9
- adds r0, r2, 0x1
- adds r0, r1, r0
- ldrb r0, [r0]
- adds r2, 0x2
- adds r1, r2
- ldrb r1, [r1]
- lsls r1, 8
- orrs r0, r1
- bl PlayFanfare
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- .align 2, 0
-_0812BDEC: .4byte gBattleBufferA
-_0812BDF0: .4byte gActiveBank
- thumb_func_end sub_812BDC4
-
- thumb_func_start sub_812BDF4
-sub_812BDF4: @ 812BDF4
- push {lr}
- ldr r1, _0812BE24 @ =gBattlePartyID
- ldr r0, _0812BE28 @ =gActiveBank
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _0812BE2C @ =gPlayerParty
- adds r0, r1
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x19
- bl PlayCry1
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- .align 2, 0
-_0812BE24: .4byte gBattlePartyID
-_0812BE28: .4byte gActiveBank
-_0812BE2C: .4byte gPlayerParty
- thumb_func_end sub_812BDF4
-
- thumb_func_start dp01t_2E_6_battle_intro
-dp01t_2E_6_battle_intro: @ 812BE30
- push {lr}
- ldr r1, _0812BE58 @ =gBattleBufferA
- ldr r0, _0812BE5C @ =gActiveBank
- ldrb r0, [r0]
- lsls r0, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r0, [r0]
- bl sub_80E43C0
- ldr r2, _0812BE60 @ =gUnknown_02024DE8
- ldrh r0, [r2]
- movs r1, 0x1
- orrs r0, r1
- strh r0, [r2]
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- .align 2, 0
-_0812BE58: .4byte gBattleBufferA
-_0812BE5C: .4byte gActiveBank
-_0812BE60: .4byte gUnknown_02024DE8
- thumb_func_end dp01t_2E_6_battle_intro
-
- thumb_func_start sub_812BE64
-sub_812BE64: @ 812BE64
- push {r4,r5,lr}
- ldr r5, _0812BEA0 @ =gHealthboxIDs
- ldr r4, _0812BEA4 @ =gActiveBank
- ldrb r1, [r4]
- adds r0, r1, r5
- ldrb r0, [r0]
- ldr r2, _0812BEA8 @ =gBattlePartyID
- lsls r1, 1
- adds r1, r2
- ldrh r2, [r1]
- movs r1, 0x64
- muls r1, r2
- ldr r2, _0812BEAC @ =gPlayerParty
- adds r1, r2
- movs r2, 0xA
- bl sub_8045A5C
- ldrb r0, [r4]
- bl sub_804777C
- ldrb r0, [r4]
- adds r0, r5
- ldrb r0, [r0]
- bl sub_8043DFC
- bl SafariBufferExecCompleted
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0812BEA0: .4byte gHealthboxIDs
-_0812BEA4: .4byte gActiveBank
-_0812BEA8: .4byte gBattlePartyID
-_0812BEAC: .4byte gPlayerParty
- thumb_func_end sub_812BE64
-
- thumb_func_start sub_812BEB0
-sub_812BEB0: @ 812BEB0
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812BEB0
-
- thumb_func_start sub_812BEBC
-sub_812BEBC: @ 812BEBC
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812BEBC
-
- thumb_func_start sub_812BEC8
-sub_812BEC8: @ 812BEC8
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812BEC8
-
- thumb_func_start sub_812BED4
-sub_812BED4: @ 812BED4
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812BED4
-
- thumb_func_start sub_812BEE0
-sub_812BEE0: @ 812BEE0
- push {r4-r6,lr}
- sub sp, 0x4
- ldr r5, _0812BF18 @ =gBattleBufferA
- ldr r6, _0812BF1C @ =gActiveBank
- ldrb r2, [r6]
- lsls r1, r2, 9
- adds r0, r5, 0x1
- adds r0, r1, r0
- ldrb r3, [r0]
- adds r0, r5, 0x2
- adds r0, r1, r0
- ldrb r4, [r0]
- adds r5, 0x3
- adds r1, r5
- ldrb r0, [r1]
- lsls r0, 8
- orrs r4, r0
- str r4, [sp]
- adds r0, r2, 0
- adds r1, r2, 0
- bl move_anim_start_t3
- lsls r0, 24
- cmp r0, 0
- beq _0812BF20
- bl SafariBufferExecCompleted
- b _0812BF2C
- .align 2, 0
-_0812BF18: .4byte gBattleBufferA
-_0812BF1C: .4byte gActiveBank
-_0812BF20:
- ldr r0, _0812BF34 @ =gBattleBankFunc
- ldrb r1, [r6]
- lsls r1, 2
- adds r1, r0
- ldr r0, _0812BF38 @ =sub_812B794
- str r0, [r1]
-_0812BF2C:
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0812BF34: .4byte gBattleBankFunc
-_0812BF38: .4byte sub_812B794
- thumb_func_end sub_812BEE0
-
- thumb_func_start sub_812BF3C
-sub_812BF3C: @ 812BF3C
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812BF3C
-
- thumb_func_start sub_812BF48
-sub_812BF48: @ 812BF48
- push {lr}
- bl SafariBufferExecCompleted
- pop {r0}
- bx r0
- thumb_func_end sub_812BF48
-
- thumb_func_start sub_812BF54
-sub_812BF54: @ 812BF54
- push {r4,lr}
- ldr r2, _0812BF98 @ =gBattleOutcome
- ldr r1, _0812BF9C @ =gBattleBufferA
- ldr r4, _0812BFA0 @ =gActiveBank
- ldrb r0, [r4]
- lsls r0, 9
- adds r1, 0x1
- adds r0, r1
- ldrb r0, [r0]
- strb r0, [r2]
- movs r0, 0x5
- bl FadeOutMapMusic
- movs r0, 0x3
- bl BeginFastPaletteFade
- bl SafariBufferExecCompleted
- ldr r0, _0812BFA4 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x6
- ands r0, r1
- cmp r0, 0x2
- bne _0812BF90
- ldr r0, _0812BFA8 @ =gBattleBankFunc
- ldrb r1, [r4]
- lsls r1, 2
- adds r1, r0
- ldr r0, _0812BFAC @ =sub_812B6AC
- str r0, [r1]
-_0812BF90:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0812BF98: .4byte gBattleOutcome
-_0812BF9C: .4byte gBattleBufferA
-_0812BFA0: .4byte gActiveBank
-_0812BFA4: .4byte gBattleTypeFlags
-_0812BFA8: .4byte gBattleBankFunc
-_0812BFAC: .4byte sub_812B6AC
- thumb_func_end sub_812BF54
-
- thumb_func_start nullsub_78
-nullsub_78: @ 812BFB0
- bx lr
- thumb_func_end nullsub_78
-
- .align 2, 0 @ Don't pad with nop.
+ .align 2, 0 @ Don't pad with nop.
+ \ No newline at end of file
diff --git a/asm/battle_tower.s b/asm/battle_tower.s
index 1c1eb51a4..cd8eede60 100644
--- a/asm/battle_tower.s
+++ b/asm/battle_tower.s
@@ -2082,7 +2082,7 @@ sub_8135534: @ 8135534
push {r4,lr}
lsls r0, 24
lsrs r4, r0, 24
- bl sub_811AAE8
+ bl IsBattleTransitionDone
lsls r0, 24
lsrs r0, 24
cmp r0, 0x1
@@ -2163,10 +2163,10 @@ _081355D6:
bl CreateTask
movs r0, 0
bl current_map_music_set__default_for_battle
- bl GetBattleTowerBattleTransition
+ bl BattleSetup_GetBattleTowerBattleTransition
lsls r0, 24
lsrs r0, 24
- bl sub_811AABC
+ bl BattleTransition_StartOnField
b _08135648
.align 2, 0
_081355F4: .4byte gPlayerParty
@@ -2200,10 +2200,10 @@ _08135606:
bl CreateTask
movs r0, 0
bl current_map_music_set__default_for_battle
- bl GetBattleTowerBattleTransition
+ bl BattleSetup_GetBattleTowerBattleTransition
lsls r0, 24
lsrs r0, 24
- bl sub_811AABC
+ bl BattleTransition_StartOnField
_08135648:
add sp, 0x4
pop {r4,r5}
diff --git a/asm/battle_transition.s b/asm/battle_transition.s
deleted file mode 100644
index a4b4d1666..000000000
--- a/asm/battle_transition.s
+++ /dev/null
@@ -1,6254 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "constants/species_constants.inc"
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_811AABC
-sub_811AABC: @ 811AABC
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _0811AAD0 @ =gMain
- ldr r1, _0811AAD4 @ =sub_8054398
- str r1, [r2, 0x4]
- bl sub_811AB20
- pop {r0}
- bx r0
- .align 2, 0
-_0811AAD0: .4byte gMain
-_0811AAD4: .4byte sub_8054398
- thumb_func_end sub_811AABC
-
- thumb_func_start sub_811AAD8
-sub_811AAD8: @ 811AAD8
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- bl sub_811AB20
- pop {r0}
- bx r0
- thumb_func_end sub_811AAD8
-
- thumb_func_start sub_811AAE8
-sub_811AAE8: @ 811AAE8
- push {lr}
- ldr r0, _0811AB0C @ =sub_811AB50
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r1, _0811AB10 @ =gTasks
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- adds r0, r1
- movs r1, 0x26
- ldrsh r0, [r0, r1]
- cmp r0, 0
- bne _0811AB14
- movs r0, 0
- b _0811AB1C
- .align 2, 0
-_0811AB0C: .4byte sub_811AB50
-_0811AB10: .4byte gTasks
-_0811AB14:
- adds r0, r2, 0
- bl DestroyTask
- movs r0, 0x1
-_0811AB1C:
- pop {r1}
- bx r1
- thumb_func_end sub_811AAE8
-
- thumb_func_start sub_811AB20
-sub_811AB20: @ 811AB20
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, _0811AB48 @ =sub_811AB50
- movs r1, 0x2
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _0811AB4C @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- strh r4, [r1, 0xA]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0811AB48: .4byte sub_811AB50
-_0811AB4C: .4byte gTasks
- thumb_func_end sub_811AB20
-
- thumb_func_start sub_811AB50
-sub_811AB50: @ 811AB50
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r5, _0811AB80 @ =gUnknown_083FD794
- ldr r2, _0811AB84 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
-_0811AB62:
- 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 _0811AB62
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0811AB80: .4byte gUnknown_083FD794
-_0811AB84: .4byte gTasks
- thumb_func_end sub_811AB50
-
- thumb_func_start sub_811AB88
-sub_811AB88: @ 811AB88
- push {r4,lr}
- adds r4, r0, 0
- bl sub_807DE10
- ldr r0, _0811ABB4 @ =gPlttBufferFaded
- ldr r1, _0811ABB8 @ =gPlttBufferUnfaded
- ldr r2, _0811ABBC @ =0x04000100
- bl CpuSet
- ldr r1, _0811ABC0 @ =gUnknown_083FD70C
- movs r2, 0xA
- ldrsh r0, [r4, r2]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- cmp r0, 0
- bne _0811ABC4
- movs r0, 0x2
- strh r0, [r4, 0x8]
- movs r0, 0x1
- b _0811ABD2
- .align 2, 0
-_0811ABB4: .4byte gPlttBufferFaded
-_0811ABB8: .4byte gPlttBufferUnfaded
-_0811ABBC: .4byte 0x04000100
-_0811ABC0: .4byte gUnknown_083FD70C
-_0811ABC4:
- movs r1, 0x4
- bl CreateTask
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r0, 0
-_0811ABD2:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_811AB88
-
- thumb_func_start sub_811ABD8
-sub_811ABD8: @ 811ABD8
- push {r4,lr}
- adds r4, r0, 0
- ldr r1, _0811ABF8 @ =gUnknown_083FD70C
- movs r2, 0xA
- ldrsh r0, [r4, r2]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFF
- beq _0811ABFC
- movs r0, 0
- b _0811AC04
- .align 2, 0
-_0811ABF8: .4byte gUnknown_083FD70C
-_0811ABFC:
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r0, 0x1
-_0811AC04:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_811ABD8
-
- thumb_func_start sub_811AC0C
-sub_811AC0C: @ 811AC0C
- push {r4,lr}
- adds r4, r0, 0
- ldr r1, _0811AC30 @ =gBattleTransitionFuncs
- movs r2, 0xA
- ldrsh r0, [r4, r2]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0
- bl CreateTask
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0811AC30: .4byte gBattleTransitionFuncs
- thumb_func_end sub_811AC0C
-
- thumb_func_start sub_811AC34
-sub_811AC34: @ 811AC34
- push {r4,lr}
- adds r4, r0, 0
- movs r0, 0
- strh r0, [r4, 0x26]
- ldr r1, _0811AC60 @ =gBattleTransitionFuncs
- movs r2, 0xA
- ldrsh r0, [r4, r2]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFF
- bne _0811AC58
- movs r0, 0x1
- strh r0, [r4, 0x26]
-_0811AC58:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0811AC60: .4byte gBattleTransitionFuncs
- thumb_func_end sub_811AC34
-
- thumb_func_start sub_811AC64
-sub_811AC64: @ 811AC64
- push {r4,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r0, 24
- adds r4, r0, 0
- ldr r1, _0811AC98 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r1, r0, r1
- ldrh r2, [r1, 0x8]
- movs r3, 0x8
- ldrsh r0, [r1, r3]
- cmp r0, 0
- bne _0811AC9C
- adds r0, r2, 0x1
- strh r0, [r1, 0x8]
- movs r0, 0x2
- str r0, [sp]
- movs r0, 0
- movs r1, 0
- movs r2, 0x3
- movs r3, 0x2
- bl sub_811D4C8
- b _0811ACAC
- .align 2, 0
-_0811AC98: .4byte gTasks
-_0811AC9C:
- bl sub_811D52C
- lsls r0, 24
- cmp r0, 0
- beq _0811ACAC
- adds r0, r4, 0
- bl DestroyTask
-_0811ACAC:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_811AC64
-
- thumb_func_start sub_811ACB4
-sub_811ACB4: @ 811ACB4
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r5, _0811ACE4 @ =gUnknown_083FD7A4
- ldr r2, _0811ACE8 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
-_0811ACC6:
- 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 _0811ACC6
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0811ACE4: .4byte gUnknown_083FD7A4
-_0811ACE8: .4byte gTasks
- thumb_func_end sub_811ACB4
-
- thumb_func_start sub_811ACEC
-sub_811ACEC: @ 811ACEC
- ldr r2, _0811AD18 @ =REG_MOSAIC
- movs r1, 0
- strh r1, [r2]
- subs r2, 0x42
- ldrh r1, [r2]
- movs r3, 0x40
- orrs r1, r3
- strh r1, [r2]
- adds r2, 0x2
- ldrh r1, [r2]
- orrs r1, r3
- strh r1, [r2]
- adds r2, 0x2
- ldrh r1, [r2]
- orrs r1, r3
- strh r1, [r2]
- ldrh r1, [r0, 0x8]
- adds r1, 0x1
- strh r1, [r0, 0x8]
- movs r0, 0x1
- bx lr
- .align 2, 0
-_0811AD18: .4byte REG_MOSAIC
- thumb_func_end sub_811ACEC
-
- thumb_func_start sub_811AD1C
-sub_811AD1C: @ 811AD1C
- push {r4,lr}
- sub sp, 0x4
- adds r4, r0, 0
- ldrh r0, [r4, 0xA]
- movs r1, 0xA
- ldrsh r2, [r4, r1]
- cmp r2, 0
- beq _0811AD32
- subs r0, 0x1
- strh r0, [r4, 0xA]
- b _0811AD70
-_0811AD32:
- movs r0, 0x4
- strh r0, [r4, 0xA]
- ldrh r0, [r4, 0xC]
- adds r0, 0x1
- strh r0, [r4, 0xC]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0xA
- bne _0811AD54
- movs r1, 0x1
- negs r1, r1
- str r2, [sp]
- adds r0, r1, 0
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
-_0811AD54:
- ldr r2, _0811AD7C @ =REG_MOSAIC
- ldrh r0, [r4, 0xC]
- movs r1, 0xF
- ands r1, r0
- lsls r0, r1, 4
- adds r0, r1
- strh r0, [r2]
- movs r1, 0xC
- ldrsh r0, [r4, r1]
- cmp r0, 0xE
- ble _0811AD70
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_0811AD70:
- movs r0, 0
- add sp, 0x4
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0811AD7C: .4byte REG_MOSAIC
- thumb_func_end sub_811AD1C
-
- thumb_func_start sub_811AD80
-sub_811AD80: @ 811AD80
- push {lr}
- ldr r0, _0811ADA4 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0811AD9C
- ldr r0, _0811ADA8 @ =sub_811ACB4
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_0811AD9C:
- movs r0, 0
- pop {r1}
- bx r1
- .align 2, 0
-_0811ADA4: .4byte gPaletteFade
-_0811ADA8: .4byte sub_811ACB4
- thumb_func_end sub_811AD80
-
- thumb_func_start sub_811ADAC
-sub_811ADAC: @ 811ADAC
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r5, _0811ADDC @ =gUnknown_083FD7B0
- ldr r2, _0811ADE0 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
-_0811ADBE:
- 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 _0811ADBE
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0811ADDC: .4byte gUnknown_083FD7B0
-_0811ADE0: .4byte gTasks
- thumb_func_end sub_811ADAC
-
- thumb_func_start sub_811ADE4
-sub_811ADE4: @ 811ADE4
- push {r4,r5,lr}
- sub sp, 0x8
- adds r5, r0, 0
- bl sub_811D658
- bl dp12_8087EA4
- movs r0, 0x1
- negs r0, r0
- movs r4, 0
- str r4, [sp]
- movs r1, 0x4
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r0, _0811AE54 @ =gUnknown_03005560
- ldr r1, _0811AE58 @ =0x0200c000
- movs r2, 0x14
- ldrsh r1, [r1, r2]
- str r4, [sp]
- movs r2, 0xA0
- str r2, [sp, 0x4]
- movs r2, 0
- movs r3, 0x2
- bl sub_811D6E8
- ldr r0, _0811AE5C @ =sub_811AEE0
- bl SetVBlankCallback
- ldr r0, _0811AE60 @ =sub_811AF18
- bl SetHBlankCallback
- ldr r3, _0811AE64 @ =0x04000208
- ldrh r2, [r3]
- strh r4, [r3]
- ldr r4, _0811AE68 @ =0x04000200
- ldrh r0, [r4]
- movs r1, 0x3
- orrs r0, r1
- strh r0, [r4]
- strh r2, [r3]
- ldr r2, _0811AE6C @ =REG_DISPSTAT
- ldrh r0, [r2]
- movs r1, 0x18
- orrs r0, r1
- strh r0, [r2]
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- strh r0, [r5, 0x8]
- movs r0, 0
- add sp, 0x8
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_0811AE54: .4byte gUnknown_03005560
-_0811AE58: .4byte 0x0200c000
-_0811AE5C: .4byte sub_811AEE0
-_0811AE60: .4byte sub_811AF18
-_0811AE64: .4byte 0x04000208
-_0811AE68: .4byte 0x04000200
-_0811AE6C: .4byte REG_DISPSTAT
- thumb_func_end sub_811ADE4
-
- thumb_func_start sub_811AE70
-sub_811AE70: @ 811AE70
- push {r4,r5,lr}
- sub sp, 0x8
- ldr r4, _0811AED0 @ =0x0200c000
- ldrb r1, [r4]
- movs r1, 0
- strb r1, [r4]
- ldrh r1, [r0, 0xA]
- adds r1, 0x4
- strh r1, [r0, 0xA]
- ldrh r1, [r0, 0xC]
- adds r1, 0x8
- strh r1, [r0, 0xC]
- ldr r3, _0811AED4 @ =gUnknown_03004DE0
- movs r2, 0x14
- ldrsh r1, [r4, r2]
- movs r5, 0xA
- ldrsh r2, [r0, r5]
- movs r5, 0xC
- ldrsh r0, [r0, r5]
- str r0, [sp]
- movs r0, 0xA0
- str r0, [sp, 0x4]
- adds r0, r3, 0
- movs r3, 0x2
- bl sub_811D6E8
- ldr r0, _0811AED8 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0811AEBE
- ldr r0, _0811AEDC @ =sub_811ADAC
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_0811AEBE:
- ldrb r0, [r4]
- adds r0, 0x1
- ldrb r1, [r4]
- strb r0, [r4]
- movs r0, 0
- add sp, 0x8
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_0811AED0: .4byte 0x0200c000
-_0811AED4: .4byte gUnknown_03004DE0
-_0811AED8: .4byte gPaletteFade
-_0811AEDC: .4byte sub_811ADAC
- thumb_func_end sub_811AE70
-
- thumb_func_start sub_811AEE0
-sub_811AEE0: @ 811AEE0
- push {lr}
- bl sub_811D67C
- ldr r0, _0811AF08 @ =0x0200c000
- ldrb r0, [r0]
- cmp r0, 0
- beq _0811AF02
- ldr r1, _0811AF0C @ =0x040000d4
- ldr r0, _0811AF10 @ =gUnknown_03004DE0
- str r0, [r1]
- movs r2, 0xF0
- lsls r2, 3
- adds r0, r2
- str r0, [r1, 0x4]
- ldr r0, _0811AF14 @ =0x800000a0
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
-_0811AF02:
- pop {r0}
- bx r0
- .align 2, 0
-_0811AF08: .4byte 0x0200c000
-_0811AF0C: .4byte 0x040000d4
-_0811AF10: .4byte gUnknown_03004DE0
-_0811AF14: .4byte 0x800000a0
- thumb_func_end sub_811AEE0
-
- thumb_func_start sub_811AF18
-sub_811AF18: @ 811AF18
- ldr r1, _0811AF38 @ =gUnknown_03004DE0
- ldr r0, _0811AF3C @ =REG_VCOUNT
- ldrh r0, [r0]
- lsls r0, 1
- movs r2, 0xF0
- lsls r2, 3
- adds r1, r2
- adds r0, r1
- ldrh r1, [r0]
- ldr r0, _0811AF40 @ =REG_BG1HOFS
- strh r1, [r0]
- adds r0, 0x4
- strh r1, [r0]
- adds r0, 0x4
- strh r1, [r0]
- bx lr
- .align 2, 0
-_0811AF38: .4byte gUnknown_03004DE0
-_0811AF3C: .4byte REG_VCOUNT
-_0811AF40: .4byte REG_BG1HOFS
- thumb_func_end sub_811AF18
-
- thumb_func_start sub_811AF44
-sub_811AF44: @ 811AF44
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r5, _0811AF74 @ =gUnknown_083FD7B8
- ldr r2, _0811AF78 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
-_0811AF56:
- 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 _0811AF56
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0811AF74: .4byte gUnknown_083FD7B8
-_0811AF78: .4byte gTasks
- thumb_func_end sub_811AF44
-
- thumb_func_start sub_811AF7C
-sub_811AF7C: @ 811AF7C
- push {r4,r5,lr}
- sub sp, 0x4
- adds r5, r0, 0
- bl sub_811D658
- bl dp12_8087EA4
- movs r0, 0x1
- negs r0, r0
- movs r4, 0
- str r4, [sp]
- movs r1, 0x4
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r1, _0811AFE4 @ =0x0200c000
- ldr r0, _0811AFE8 @ =gUnknown_03005560
- movs r2, 0x16
- ldrsh r1, [r1, r2]
- movs r2, 0xA0
- lsls r2, 1
- bl memset
- ldr r0, _0811AFEC @ =sub_811B08C
- bl SetVBlankCallback
- ldr r0, _0811AFF0 @ =sub_811B0C4
- bl SetHBlankCallback
- ldr r3, _0811AFF4 @ =0x04000208
- ldrh r2, [r3]
- strh r4, [r3]
- ldr r4, _0811AFF8 @ =0x04000200
- ldrh r0, [r4]
- movs r1, 0x3
- orrs r0, r1
- strh r0, [r4]
- strh r2, [r3]
- ldr r2, _0811AFFC @ =REG_DISPSTAT
- ldrh r0, [r2]
- movs r1, 0x18
- orrs r0, r1
- strh r0, [r2]
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- strh r0, [r5, 0x8]
- movs r0, 0
- add sp, 0x4
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_0811AFE4: .4byte 0x0200c000
-_0811AFE8: .4byte gUnknown_03005560
-_0811AFEC: .4byte sub_811B08C
-_0811AFF0: .4byte sub_811B0C4
-_0811AFF4: .4byte 0x04000208
-_0811AFF8: .4byte 0x04000200
-_0811AFFC: .4byte REG_DISPSTAT
- thumb_func_end sub_811AF7C
-
- thumb_func_start sub_811B000
-sub_811B000: @ 811B000
- push {r4-r7,lr}
- ldr r2, _0811B07C @ =0x0200c000
- ldrb r1, [r2]
- movs r1, 0
- strb r1, [r2]
- ldrh r4, [r0, 0xA]
- ldrh r2, [r0, 0xC]
- lsls r3, r2, 16
- asrs r3, 24
- movs r5, 0x84
- lsls r5, 5
- adds r1, r4, r5
- strh r1, [r0, 0xA]
- movs r1, 0xC0
- lsls r1, 1
- adds r2, r1
- strh r2, [r0, 0xC]
- movs r5, 0
- lsls r7, r3, 16
-_0811B026:
- lsrs r0, r4, 8
- asrs r1, r7, 16
- bl Sin
- ldr r2, _0811B080 @ =gUnknown_03004DE0
- lsls r1, r5, 1
- adds r1, r2
- ldr r6, _0811B07C @ =0x0200c000
- ldrh r2, [r6, 0x16]
- adds r0, r2
- strh r0, [r1]
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- movs r1, 0x84
- lsls r1, 5
- adds r0, r4, r1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r5, 0x9F
- bls _0811B026
- ldr r0, _0811B084 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0811B06A
- ldr r0, _0811B088 @ =sub_811AF44
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_0811B06A:
- ldrb r0, [r6]
- adds r0, 0x1
- ldrb r1, [r6]
- strb r0, [r6]
- movs r0, 0
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0811B07C: .4byte 0x0200c000
-_0811B080: .4byte gUnknown_03004DE0
-_0811B084: .4byte gPaletteFade
-_0811B088: .4byte sub_811AF44
- thumb_func_end sub_811B000
-
- thumb_func_start sub_811B08C
-sub_811B08C: @ 811B08C
- push {lr}
- bl sub_811D67C
- ldr r0, _0811B0B4 @ =0x0200c000
- ldrb r0, [r0]
- cmp r0, 0
- beq _0811B0AE
- ldr r1, _0811B0B8 @ =0x040000d4
- ldr r0, _0811B0BC @ =gUnknown_03004DE0
- str r0, [r1]
- movs r2, 0xF0
- lsls r2, 3
- adds r0, r2
- str r0, [r1, 0x4]
- ldr r0, _0811B0C0 @ =0x800000a0
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
-_0811B0AE:
- pop {r0}
- bx r0
- .align 2, 0
-_0811B0B4: .4byte 0x0200c000
-_0811B0B8: .4byte 0x040000d4
-_0811B0BC: .4byte gUnknown_03004DE0
-_0811B0C0: .4byte 0x800000a0
- thumb_func_end sub_811B08C
-
- thumb_func_start sub_811B0C4
-sub_811B0C4: @ 811B0C4
- ldr r1, _0811B0E4 @ =gUnknown_03004DE0
- ldr r0, _0811B0E8 @ =REG_VCOUNT
- ldrh r0, [r0]
- lsls r0, 1
- movs r2, 0xF0
- lsls r2, 3
- adds r1, r2
- adds r0, r1
- ldrh r1, [r0]
- ldr r0, _0811B0EC @ =REG_BG1VOFS
- strh r1, [r0]
- adds r0, 0x4
- strh r1, [r0]
- adds r0, 0x4
- strh r1, [r0]
- bx lr
- .align 2, 0
-_0811B0E4: .4byte gUnknown_03004DE0
-_0811B0E8: .4byte REG_VCOUNT
-_0811B0EC: .4byte REG_BG1VOFS
- thumb_func_end sub_811B0C4
-
- thumb_func_start sub_811B0F0
-sub_811B0F0: @ 811B0F0
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r5, _0811B120 @ =gUnknown_083FD7C0
- ldr r2, _0811B124 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
-_0811B102:
- 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 _0811B102
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0811B120: .4byte gUnknown_083FD7C0
-_0811B124: .4byte gTasks
- thumb_func_end sub_811B0F0
-
- thumb_func_start sub_811B128
-sub_811B128: @ 811B128
- push {r4-r6,lr}
- sub sp, 0xC
- adds r4, r0, 0
- bl sub_811D658
- bl dp12_8087EA4
- movs r2, 0
- movs r3, 0x10
- strh r3, [r4, 0xA]
- strh r2, [r4, 0xC]
- strh r2, [r4, 0x10]
- movs r0, 0x80
- lsls r0, 7
- strh r0, [r4, 0x12]
- ldr r1, _0811B1BC @ =0x0200c000
- movs r0, 0x3F
- strh r0, [r1, 0x2]
- strh r2, [r1, 0x4]
- movs r0, 0xF0
- strh r0, [r1, 0x6]
- movs r0, 0xA0
- strh r0, [r1, 0x8]
- ldr r0, _0811B1C0 @ =0x00003f41
- strh r0, [r1, 0xE]
- lsls r3, 8
- strh r3, [r1, 0x10]
- movs r1, 0
- add r5, sp, 0x4
- add r6, sp, 0x8
- ldr r3, _0811B1C4 @ =gUnknown_03005560
- movs r2, 0xF0
-_0811B168:
- lsls r0, r1, 1
- adds r0, r3
- strh r2, [r0]
- adds r0, r1, 0x1
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, 0x9F
- bls _0811B168
- ldr r0, _0811B1C8 @ =sub_811B520
- bl SetVBlankCallback
- adds r0, r5, 0
- adds r1, r6, 0
- bl sub_811D6A8
- mov r1, sp
- movs r0, 0
- strh r0, [r1]
- ldr r1, [sp, 0x4]
- ldr r2, _0811B1CC @ =0x01000400
- mov r0, sp
- bl CpuSet
- ldr r0, _0811B1D0 @ =gUnknown_083FBB88
- ldr r1, [sp, 0x8]
- movs r2, 0xB0
- lsls r2, 2
- bl CpuSet
- ldr r0, _0811B1D4 @ =gFieldEffectObjectPalette10
- movs r1, 0xF0
- movs r2, 0x20
- bl LoadPalette
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r0, 0
- add sp, 0xC
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_0811B1BC: .4byte 0x0200c000
-_0811B1C0: .4byte 0x00003f41
-_0811B1C4: .4byte gUnknown_03005560
-_0811B1C8: .4byte sub_811B520
-_0811B1CC: .4byte 0x01000400
-_0811B1D0: .4byte gUnknown_083FBB88
-_0811B1D4: .4byte gFieldEffectObjectPalette10
- thumb_func_end sub_811B128
-
- thumb_func_start sub_811B1D8
-sub_811B1D8: @ 811B1D8
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x10
- adds r7, r0, 0
- ldr r5, _0811B260 @ =gUnknown_083FDB44
- add r1, sp, 0xC
- add r0, sp, 0x8
- bl sub_811D6A8
- movs r1, 0
- ldr r0, [sp, 0x8]
- mov r9, r0
- ldr r6, _0811B264 @ =gUnknown_03004DE0
- mov r8, r6
- movs r0, 0xF0
- lsls r0, 8
- mov r12, r0
-_0811B1FE:
- movs r0, 0
- lsls r3, r1, 16
- asrs r4, r3, 11
-_0811B204:
- lsls r2, r0, 16
- asrs r2, 16
- adds r1, r4, r2
- lsls r1, 1
- add r1, r9
- ldrh r0, [r5]
- mov r6, r12
- orrs r0, r6
- strh r0, [r1]
- adds r2, 0x1
- lsls r2, 16
- adds r5, 0x2
- lsrs r0, r2, 16
- asrs r2, 16
- cmp r2, 0x1D
- ble _0811B204
- movs r1, 0x80
- lsls r1, 9
- adds r0, r3, r1
- lsrs r1, r0, 16
- asrs r0, 16
- cmp r0, 0x13
- ble _0811B1FE
- movs r6, 0x10
- ldrsh r2, [r7, r6]
- movs r1, 0x12
- ldrsh r0, [r7, r1]
- str r0, [sp]
- movs r0, 0xA0
- str r0, [sp, 0x4]
- mov r0, r8
- movs r1, 0
- movs r3, 0x84
- bl sub_811D6E8
- ldrh r0, [r7, 0x8]
- adds r0, 0x1
- strh r0, [r7, 0x8]
- movs r0, 0x1
- add sp, 0x10
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0811B260: .4byte gUnknown_083FDB44
-_0811B264: .4byte gUnknown_03004DE0
- thumb_func_end sub_811B1D8
-
- thumb_func_start sub_811B268
-sub_811B268: @ 811B268
- push {r4,lr}
- sub sp, 0x8
- adds r2, r0, 0
- ldr r1, _0811B2E8 @ =0x0200c000
- ldrb r0, [r1]
- movs r0, 0
- strb r0, [r1]
- ldrh r3, [r2, 0xE]
- movs r4, 0xE
- ldrsh r0, [r2, r4]
- adds r4, r1, 0
- cmp r0, 0
- beq _0811B28C
- subs r0, r3, 0x1
- strh r0, [r2, 0xE]
- lsls r0, 16
- cmp r0, 0
- bne _0811B296
-_0811B28C:
- ldrh r0, [r2, 0xC]
- adds r0, 0x1
- strh r0, [r2, 0xC]
- movs r0, 0x2
- strh r0, [r2, 0xE]
-_0811B296:
- ldrh r0, [r2, 0xA]
- lsls r0, 8
- ldrh r1, [r2, 0xC]
- orrs r0, r1
- strh r0, [r4, 0x10]
- lsls r1, 16
- asrs r1, 16
- cmp r1, 0xF
- ble _0811B2AE
- ldrh r0, [r2, 0x8]
- adds r0, 0x1
- strh r0, [r2, 0x8]
-_0811B2AE:
- ldrh r0, [r2, 0x10]
- adds r0, 0x8
- strh r0, [r2, 0x10]
- ldr r0, _0811B2EC @ =0xffffff00
- adds r1, r0, 0
- ldrh r3, [r2, 0x12]
- adds r1, r3
- strh r1, [r2, 0x12]
- ldr r0, _0811B2F0 @ =gUnknown_03004DE0
- movs r3, 0x10
- ldrsh r2, [r2, r3]
- lsls r1, 16
- asrs r1, 24
- str r1, [sp]
- movs r1, 0xA0
- str r1, [sp, 0x4]
- movs r1, 0
- movs r3, 0x84
- bl sub_811D6E8
- ldrb r0, [r4]
- adds r0, 0x1
- ldrb r1, [r4]
- strb r0, [r4]
- movs r0, 0
- add sp, 0x8
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0811B2E8: .4byte 0x0200c000
-_0811B2EC: .4byte 0xffffff00
-_0811B2F0: .4byte gUnknown_03004DE0
- thumb_func_end sub_811B268
-
- thumb_func_start sub_811B2F4
-sub_811B2F4: @ 811B2F4
- push {r4,r5,lr}
- sub sp, 0x8
- adds r3, r0, 0
- ldr r1, _0811B374 @ =0x0200c000
- ldrb r0, [r1]
- movs r0, 0
- strb r0, [r1]
- ldrh r2, [r3, 0xE]
- movs r4, 0xE
- ldrsh r0, [r3, r4]
- adds r4, r1, 0
- cmp r0, 0
- beq _0811B318
- subs r0, r2, 0x1
- strh r0, [r3, 0xE]
- lsls r0, 16
- cmp r0, 0
- bne _0811B322
-_0811B318:
- ldrh r0, [r3, 0xA]
- subs r0, 0x1
- strh r0, [r3, 0xA]
- movs r0, 0x2
- strh r0, [r3, 0xE]
-_0811B322:
- ldrh r0, [r3, 0xA]
- lsls r1, r0, 8
- ldrh r2, [r3, 0xC]
- orrs r1, r2
- strh r1, [r4, 0x10]
- lsls r0, 16
- cmp r0, 0
- bne _0811B338
- ldrh r0, [r3, 0x8]
- adds r0, 0x1
- strh r0, [r3, 0x8]
-_0811B338:
- ldrh r0, [r3, 0x10]
- adds r0, 0x8
- strh r0, [r3, 0x10]
- ldr r5, _0811B378 @ =0xffffff00
- adds r1, r5, 0
- ldrh r0, [r3, 0x12]
- adds r1, r0
- strh r1, [r3, 0x12]
- ldr r0, _0811B37C @ =gUnknown_03004DE0
- movs r5, 0x10
- ldrsh r2, [r3, r5]
- lsls r1, 16
- asrs r1, 24
- str r1, [sp]
- movs r1, 0xA0
- str r1, [sp, 0x4]
- movs r1, 0
- movs r3, 0x84
- bl sub_811D6E8
- ldrb r0, [r4]
- adds r0, 0x1
- ldrb r1, [r4]
- strb r0, [r4]
- movs r0, 0
- add sp, 0x8
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_0811B374: .4byte 0x0200c000
-_0811B378: .4byte 0xffffff00
-_0811B37C: .4byte gUnknown_03004DE0
- thumb_func_end sub_811B2F4
-
- thumb_func_start sub_811B380
-sub_811B380: @ 811B380
- push {r4-r7,lr}
- sub sp, 0x8
- adds r4, r0, 0
- ldr r5, _0811B3E0 @ =0x0200c000
- ldrb r0, [r5]
- movs r7, 0
- strb r7, [r5]
- ldrh r0, [r4, 0x10]
- adds r0, 0x8
- strh r0, [r4, 0x10]
- ldr r0, _0811B3E4 @ =0xffffff00
- adds r1, r0, 0
- ldrh r3, [r4, 0x12]
- adds r1, r3
- strh r1, [r4, 0x12]
- ldr r0, _0811B3E8 @ =gUnknown_03004DE0
- movs r3, 0x10
- ldrsh r2, [r4, r3]
- lsls r1, 16
- asrs r1, 24
- str r1, [sp]
- movs r6, 0xA0
- str r6, [sp, 0x4]
- movs r1, 0
- movs r3, 0x84
- bl sub_811D6E8
- movs r1, 0x12
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bgt _0811B3CE
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- strh r6, [r4, 0xA]
- movs r0, 0x80
- lsls r0, 1
- strh r0, [r4, 0xC]
- strh r7, [r4, 0xE]
-_0811B3CE:
- ldrb r0, [r5]
- adds r0, 0x1
- ldrb r1, [r5]
- strb r0, [r5]
- movs r0, 0
- add sp, 0x8
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0811B3E0: .4byte 0x0200c000
-_0811B3E4: .4byte 0xffffff00
-_0811B3E8: .4byte gUnknown_03004DE0
- thumb_func_end sub_811B380
-
- thumb_func_start sub_811B3EC
-sub_811B3EC: @ 811B3EC
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, _0811B488 @ =0x0200c000
- ldrb r1, [r0]
- movs r3, 0
- strb r3, [r0]
- ldrh r2, [r4, 0xC]
- movs r0, 0xC
- ldrsh r1, [r4, r0]
- ldr r0, _0811B48C @ =0x000003ff
- cmp r1, r0
- bgt _0811B40A
- adds r0, r2, 0
- adds r0, 0x80
- strh r0, [r4, 0xC]
-_0811B40A:
- ldrh r1, [r4, 0xA]
- movs r2, 0xA
- ldrsh r0, [r4, r2]
- cmp r0, 0
- beq _0811B426
- ldrh r0, [r4, 0xC]
- lsls r0, 16
- asrs r0, 24
- subs r0, r1, r0
- strh r0, [r4, 0xA]
- lsls r0, 16
- cmp r0, 0
- bge _0811B426
- strh r3, [r4, 0xA]
-_0811B426:
- ldr r0, _0811B490 @ =gUnknown_03004DE0
- movs r1, 0xA
- ldrsh r3, [r4, r1]
- movs r1, 0x78
- movs r2, 0x50
- bl sub_811D764
- movs r2, 0xA
- ldrsh r0, [r4, r2]
- cmp r0, 0
- bne _0811B462
- ldr r1, _0811B494 @ =0x040000b0
- ldrh r2, [r1, 0xA]
- ldr r0, _0811B498 @ =0x0000c5ff
- ands r0, r2
- strh r0, [r1, 0xA]
- ldrh r2, [r1, 0xA]
- ldr r0, _0811B49C @ =0x00007fff
- ands r0, r2
- strh r0, [r1, 0xA]
- ldrh r0, [r1, 0xA]
- bl sub_811D6D4
- ldr r0, _0811B4A0 @ =sub_811B0F0
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_0811B462:
- ldrh r1, [r4, 0xE]
- movs r2, 0xE
- ldrsh r0, [r4, r2]
- cmp r0, 0
- bne _0811B476
- adds r0, r1, 0x1
- strh r0, [r4, 0xE]
- ldr r0, _0811B4A4 @ =sub_811B54C
- bl SetVBlankCallback
-_0811B476:
- ldr r0, _0811B488 @ =0x0200c000
- ldrb r1, [r0]
- adds r1, 0x1
- ldrb r2, [r0]
- strb r1, [r0]
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0811B488: .4byte 0x0200c000
-_0811B48C: .4byte 0x000003ff
-_0811B490: .4byte gUnknown_03004DE0
-_0811B494: .4byte 0x040000b0
-_0811B498: .4byte 0x0000c5ff
-_0811B49C: .4byte 0x00007fff
-_0811B4A0: .4byte sub_811B0F0
-_0811B4A4: .4byte sub_811B54C
- thumb_func_end sub_811B3EC
-
- thumb_func_start sub_811B4A8
-sub_811B4A8: @ 811B4A8
- push {lr}
- ldr r1, _0811B500 @ =0x040000b0
- ldrh r2, [r1, 0xA]
- ldr r0, _0811B504 @ =0x0000c5ff
- ands r0, r2
- strh r0, [r1, 0xA]
- ldrh r2, [r1, 0xA]
- ldr r0, _0811B508 @ =0x00007fff
- ands r0, r2
- strh r0, [r1, 0xA]
- ldrh r0, [r1, 0xA]
- bl sub_811D67C
- ldr r2, _0811B50C @ =0x0200c000
- ldrb r0, [r2]
- cmp r0, 0
- beq _0811B4DE
- ldr r1, _0811B510 @ =0x040000d4
- ldr r0, _0811B514 @ =gUnknown_03004DE0
- str r0, [r1]
- movs r3, 0xF0
- lsls r3, 3
- adds r0, r3
- str r0, [r1, 0x4]
- ldr r0, _0811B518 @ =0x800000a0
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
-_0811B4DE:
- ldr r1, _0811B51C @ =REG_WININ
- ldrh r0, [r2, 0x2]
- strh r0, [r1]
- adds r1, 0x2
- ldrh r0, [r2, 0x4]
- strh r0, [r1]
- subs r1, 0x6
- ldrh r0, [r2, 0x8]
- strh r0, [r1]
- adds r1, 0xC
- ldrh r0, [r2, 0xE]
- strh r0, [r1]
- adds r1, 0x2
- ldrh r0, [r2, 0x10]
- strh r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_0811B500: .4byte 0x040000b0
-_0811B504: .4byte 0x0000c5ff
-_0811B508: .4byte 0x00007fff
-_0811B50C: .4byte 0x0200c000
-_0811B510: .4byte 0x040000d4
-_0811B514: .4byte gUnknown_03004DE0
-_0811B518: .4byte 0x800000a0
-_0811B51C: .4byte REG_WININ
- thumb_func_end sub_811B4A8
-
- thumb_func_start sub_811B520
-sub_811B520: @ 811B520
- push {lr}
- bl sub_811B4A8
- ldr r1, _0811B53C @ =0x040000b0
- ldr r0, _0811B540 @ =gUnknown_03005560
- str r0, [r1]
- ldr r0, _0811B544 @ =REG_BG0HOFS
- str r0, [r1, 0x4]
- ldr r0, _0811B548 @ =0xa2400001
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- pop {r0}
- bx r0
- .align 2, 0
-_0811B53C: .4byte 0x040000b0
-_0811B540: .4byte gUnknown_03005560
-_0811B544: .4byte REG_BG0HOFS
-_0811B548: .4byte 0xa2400001
- thumb_func_end sub_811B520
-
- thumb_func_start sub_811B54C
-sub_811B54C: @ 811B54C
- push {lr}
- bl sub_811B4A8
- ldr r1, _0811B568 @ =0x040000b0
- ldr r0, _0811B56C @ =gUnknown_03005560
- str r0, [r1]
- ldr r0, _0811B570 @ =REG_WIN0H
- str r0, [r1, 0x4]
- ldr r0, _0811B574 @ =0xa2400001
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
- pop {r0}
- bx r0
- .align 2, 0
-_0811B568: .4byte 0x040000b0
-_0811B56C: .4byte gUnknown_03005560
-_0811B570: .4byte REG_WIN0H
-_0811B574: .4byte 0xa2400001
- thumb_func_end sub_811B54C
-
- thumb_func_start sub_811B578
-sub_811B578: @ 811B578
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r5, _0811B5A8 @ =gUnknown_083FD7D8
- ldr r2, _0811B5AC @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
-_0811B58A:
- 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 _0811B58A
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0811B5A8: .4byte gUnknown_083FD7D8
-_0811B5AC: .4byte gTasks
- thumb_func_end sub_811B578
-
- thumb_func_start sub_811B5B0
-sub_811B5B0: @ 811B5B0
- push {r4,lr}
- sub sp, 0xC
- adds r4, r0, 0
- add r0, sp, 0x4
- add r1, sp, 0x8
- bl sub_811D6A8
- ldr r0, _0811B5F0 @ =gUnknown_083FC108
- ldr r1, [sp, 0x8]
- movs r2, 0x20
- bl CpuSet
- movs r0, 0
- str r0, [sp]
- ldr r1, [sp, 0x4]
- ldr r2, _0811B5F4 @ =0x05000200
- mov r0, sp
- bl CpuSet
- ldr r0, _0811B5F8 @ =gFieldEffectObjectPalette10
- movs r1, 0xF0
- movs r2, 0x20
- bl LoadPalette
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r0, 0
- add sp, 0xC
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0811B5F0: .4byte gUnknown_083FC108
-_0811B5F4: .4byte 0x05000200
-_0811B5F8: .4byte gFieldEffectObjectPalette10
- thumb_func_end sub_811B5B0
-
- thumb_func_start sub_811B5FC
-sub_811B5FC: @ 811B5FC
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x10
- adds r7, r0, 0
- ldr r1, _0811B67C @ =gUnknown_083FD7E4
- mov r0, sp
- movs r2, 0x4
- bl memcpy
- add r4, sp, 0x4
- ldr r1, _0811B680 @ =gUnknown_083FD7E8
- adds r0, r4, 0
- movs r2, 0xA
- bl memcpy
- bl Random
- movs r5, 0x1
- ands r5, r0
- movs r1, 0
- mov r8, r4
- ldr r6, _0811B684 @ =gUnknown_0202FF84
-_0811B62A:
- lsls r5, 16
- asrs r5, 16
- lsls r0, r5, 1
- add r0, sp
- movs r2, 0
- ldrsh r0, [r0, r2]
- str r0, [r6]
- lsls r4, r1, 16
- asrs r4, 16
- lsls r0, r4, 5
- adds r0, 0x10
- str r0, [r6, 0x4]
- str r5, [r6, 0x8]
- lsls r0, r4, 1
- add r0, r8
- movs r1, 0
- ldrsh r0, [r0, r1]
- str r0, [r6, 0xC]
- movs r0, 0x2D
- bl FieldEffectStart
- adds r4, 0x1
- lsls r4, 16
- movs r0, 0x1
- eors r5, r0
- lsls r5, 16
- lsrs r5, 16
- lsrs r1, r4, 16
- asrs r4, 16
- cmp r4, 0x4
- ble _0811B62A
- ldrh r0, [r7, 0x8]
- adds r0, 0x1
- strh r0, [r7, 0x8]
- movs r0, 0
- add sp, 0x10
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0811B67C: .4byte gUnknown_083FD7E4
-_0811B680: .4byte gUnknown_083FD7E8
-_0811B684: .4byte gUnknown_0202FF84
- thumb_func_end sub_811B5FC
-
- thumb_func_start sub_811B688
-sub_811B688: @ 811B688
- push {lr}
- movs r0, 0x2D
- bl FieldEffectActiveListContains
- lsls r0, 24
- cmp r0, 0
- bne _0811B6A8
- bl sub_811D6D4
- ldr r0, _0811B6B0 @ =sub_811B578
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_0811B6A8:
- movs r0, 0
- pop {r1}
- bx r1
- .align 2, 0
-_0811B6B0: .4byte sub_811B578
- thumb_func_end sub_811B688
-
- thumb_func_start FldEff_Pokeball
-FldEff_Pokeball: @ 811B6B4
- push {r4,r5,lr}
- ldr r0, _0811B710 @ =gSpriteTemplate_83FD98C
- ldr r5, _0811B714 @ =gUnknown_0202FF84
- movs r2, 0
- ldrsh r1, [r5, r2]
- movs r3, 0x4
- ldrsh r2, [r5, r3]
- movs r3, 0
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0811B718 @ =gSprites
- lsls r4, r0, 4
- adds r4, r0
- lsls r4, 2
- adds r4, r1
- ldrb r1, [r4, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r1
- strb r0, [r4, 0x5]
- ldrb r1, [r4, 0x1]
- movs r0, 0x4
- negs r0, r0
- ands r0, r1
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r4, 0x1]
- ldr r0, [r5, 0x8]
- strh r0, [r4, 0x2E]
- ldr r0, [r5, 0xC]
- strh r0, [r4, 0x30]
- ldr r0, _0811B71C @ =0x0000ffff
- strh r0, [r4, 0x32]
- adds r0, r4, 0
- bl InitSpriteAffineAnim
- ldrb r1, [r5, 0x8]
- adds r0, r4, 0
- bl StartSpriteAffineAnim
- movs r0, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_0811B710: .4byte gSpriteTemplate_83FD98C
-_0811B714: .4byte gUnknown_0202FF84
-_0811B718: .4byte gSprites
-_0811B71C: .4byte 0x0000ffff
- thumb_func_end FldEff_Pokeball
-
- thumb_func_start sub_811B720
-sub_811B720: @ 811B720
- push {r4-r6,lr}
- sub sp, 0x4
- adds r4, r0, 0
- ldr r1, _0811B740 @ =gUnknown_083FD7F2
- mov r0, sp
- movs r2, 0x4
- bl memcpy
- ldrh r1, [r4, 0x30]
- movs r2, 0x30
- ldrsh r0, [r4, r2]
- cmp r0, 0
- beq _0811B744
- subs r0, r1, 0x1
- strh r0, [r4, 0x30]
- b _0811B7D6
- .align 2, 0
-_0811B740: .4byte gUnknown_083FD7F2
-_0811B744:
- ldrh r0, [r4, 0x20]
- lsls r1, r0, 16
- lsrs r0, r1, 16
- cmp r0, 0xF0
- bhi _0811B7B2
- asrs r0, r1, 19
- lsls r0, 16
- ldrh r1, [r4, 0x22]
- lsls r1, 16
- asrs r1, 19
- lsls r1, 16
- lsrs r1, 16
- lsrs r2, r0, 16
- asrs r5, r0, 16
- movs r3, 0x32
- ldrsh r0, [r4, r3]
- cmp r5, r0
- beq _0811B7B2
- strh r2, [r4, 0x32]
- ldr r0, _0811B7E0 @ =REG_BG0CNT
- ldrh r2, [r0]
- lsrs r2, 8
- movs r0, 0x1F
- ands r2, r0
- lsls r2, 11
- movs r0, 0xC0
- lsls r0, 19
- adds r2, r0
- lsls r1, 16
- asrs r1, 16
- subs r0, r1, 0x2
- lsls r0, 5
- adds r0, r5
- lsls r0, 1
- adds r0, r2
- ldr r6, _0811B7E4 @ =0x0000f001
- adds r3, r6, 0
- strh r3, [r0]
- subs r0, r1, 0x1
- lsls r0, 5
- adds r0, r5
- lsls r0, 1
- adds r0, r2
- strh r3, [r0]
- lsls r0, r1, 5
- adds r0, r5
- lsls r0, 1
- adds r0, r2
- strh r3, [r0]
- adds r1, 0x1
- lsls r1, 5
- adds r1, r5
- lsls r1, 1
- adds r1, r2
- strh r3, [r1]
-_0811B7B2:
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- lsls r0, 1
- add r0, sp
- ldrh r0, [r0]
- ldrh r2, [r4, 0x20]
- adds r0, r2
- strh r0, [r4, 0x20]
- adds r0, 0xF
- lsls r0, 16
- movs r1, 0x87
- lsls r1, 17
- cmp r0, r1
- bls _0811B7D6
- adds r0, r4, 0
- movs r1, 0x2D
- bl FieldEffectStop
-_0811B7D6:
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0811B7E0: .4byte REG_BG0CNT
-_0811B7E4: .4byte 0x0000f001
- thumb_func_end sub_811B720
-
- thumb_func_start sub_811B7E8
-sub_811B7E8: @ 811B7E8
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r5, _0811B818 @ =gUnknown_083FD7F8
- ldr r2, _0811B81C @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
-_0811B7FA:
- 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 _0811B7FA
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0811B818: .4byte gUnknown_083FD7F8
-_0811B81C: .4byte gTasks
- thumb_func_end sub_811B7E8
-
- thumb_func_start sub_811B820
-sub_811B820: @ 811B820
- push {r4,lr}
- adds r4, r0, 0
- bl sub_811D658
- bl dp12_8087EA4
- ldr r1, _0811B870 @ =0x0200c000
- movs r0, 0
- strh r0, [r1, 0x2]
- movs r0, 0x3F
- strh r0, [r1, 0x4]
- ldr r0, _0811B874 @ =0x0000f0f1
- strh r0, [r1, 0x6]
- movs r0, 0xA0
- strh r0, [r1, 0x8]
- movs r1, 0
- ldr r3, _0811B878 @ =gUnknown_03005560
- ldr r2, _0811B87C @ =0x0000f3f4
-_0811B844:
- lsls r0, r1, 1
- adds r0, r3
- strh r2, [r0]
- adds r0, r1, 0x1
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, 0x9F
- bls _0811B844
- ldr r0, _0811B880 @ =sub_811BC2C
- bl SetVBlankCallback
- ldr r1, _0811B870 @ =0x0200c000
- movs r0, 0x78
- strh r0, [r1, 0x2C]
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r0, 0x1
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0811B870: .4byte 0x0200c000
-_0811B874: .4byte 0x0000f0f1
-_0811B878: .4byte gUnknown_03005560
-_0811B87C: .4byte 0x0000f3f4
-_0811B880: .4byte sub_811BC2C
- thumb_func_end sub_811B820
-
- thumb_func_start sub_811B884
-sub_811B884: @ 811B884
- push {r4-r6,lr}
- sub sp, 0xC
- adds r6, r0, 0
- ldr r4, _0811B904 @ =0x0200c000
- ldrb r0, [r4]
- movs r0, 0
- strb r0, [r4]
- adds r0, r4, 0
- adds r0, 0x24
- movs r1, 0x2C
- ldrsh r3, [r4, r1]
- movs r1, 0x1
- negs r1, r1
- str r1, [sp]
- movs r1, 0x1
- str r1, [sp, 0x4]
- str r1, [sp, 0x8]
- movs r1, 0x78
- movs r2, 0x50
- bl sub_811D8FC
- ldr r5, _0811B908 @ =gUnknown_03004DE0
-_0811B8B0:
- movs r3, 0x2A
- ldrsh r2, [r4, r3]
- lsls r2, 1
- adds r2, r5
- ldrh r0, [r4, 0x28]
- adds r0, 0x1
- movs r3, 0xF0
- lsls r3, 7
- adds r1, r3, 0
- orrs r0, r1
- strh r0, [r2]
- adds r0, r4, 0
- adds r0, 0x24
- movs r1, 0x1
- movs r2, 0x1
- bl sub_811D978
- lsls r0, 24
- cmp r0, 0
- beq _0811B8B0
- ldr r2, _0811B904 @ =0x0200c000
- ldrh r0, [r2, 0x2C]
- adds r0, 0x10
- strh r0, [r2, 0x2C]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0xEF
- ble _0811B8F2
- movs r0, 0
- strh r0, [r2, 0x2E]
- ldrh r0, [r6, 0x8]
- adds r0, 0x1
- strh r0, [r6, 0x8]
-_0811B8F2:
- ldrb r0, [r2]
- adds r0, 0x1
- ldrb r1, [r2]
- strb r0, [r2]
- movs r0, 0
- add sp, 0xC
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_0811B904: .4byte 0x0200c000
-_0811B908: .4byte gUnknown_03004DE0
- thumb_func_end sub_811B884
-
- thumb_func_start sub_811B90C
-sub_811B90C: @ 811B90C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x10
- adds r7, r0, 0
- add r1, sp, 0xC
- movs r0, 0
- strb r0, [r1]
- ldr r4, _0811B988 @ =0x0200c000
- ldrb r0, [r4]
- movs r0, 0
- strb r0, [r4]
- adds r0, r4, 0
- adds r0, 0x24
- movs r2, 0x2E
- ldrsh r1, [r4, r2]
- str r1, [sp]
- movs r1, 0x1
- str r1, [sp, 0x4]
- str r1, [sp, 0x8]
- movs r1, 0x78
- movs r2, 0x50
- movs r3, 0xF0
- bl sub_811D8FC
- adds r6, r4, 0
- ldr r5, _0811B98C @ =gUnknown_03004DE0
- mov r8, r5
- add r5, sp, 0xC
-_0811B946:
- movs r1, 0x78
- ldrh r0, [r4, 0x28]
- adds r0, 0x1
- lsls r0, 16
- lsrs r3, r0, 16
- movs r2, 0x2E
- ldrsh r0, [r4, r2]
- cmp r0, 0x4F
- ble _0811B95C
- ldrh r1, [r4, 0x28]
- movs r3, 0xF0
-_0811B95C:
- movs r0, 0x2A
- ldrsh r2, [r4, r0]
- lsls r2, 1
- add r2, r8
- lsls r1, 16
- asrs r1, 8
- lsls r0, r3, 16
- asrs r3, r0, 16
- orrs r3, r1
- strh r3, [r2]
- ldrb r0, [r5]
- cmp r0, 0
- bne _0811B990
- adds r0, r4, 0
- adds r0, 0x24
- movs r1, 0x1
- movs r2, 0x1
- bl sub_811D978
- strb r0, [r5]
- b _0811B946
- .align 2, 0
-_0811B988: .4byte 0x0200c000
-_0811B98C: .4byte gUnknown_03004DE0
-_0811B990:
- ldrh r0, [r4, 0x2E]
- adds r0, 0x8
- strh r0, [r4, 0x2E]
- lsls r0, 16
- asrs r1, r0, 16
- cmp r1, 0x9F
- ble _0811B9AA
- movs r0, 0xF0
- strh r0, [r4, 0x2C]
- ldrh r0, [r7, 0x8]
- adds r0, 0x1
- strh r0, [r7, 0x8]
- b _0811B9D0
-_0811B9AA:
- movs r2, 0x2A
- ldrsh r0, [r4, r2]
- cmp r0, r1
- bge _0811B9D0
- ldr r4, _0811B9E8 @ =gUnknown_03004DE0
- ldr r2, _0811B9EC @ =0x0200c000
-_0811B9B6:
- ldrh r0, [r2, 0x2A]
- adds r0, 0x1
- strh r0, [r2, 0x2A]
- lsls r0, 16
- asrs r0, 15
- adds r0, r4
- strh r3, [r0]
- movs r5, 0x2A
- ldrsh r1, [r2, r5]
- movs r5, 0x2E
- ldrsh r0, [r2, r5]
- cmp r1, r0
- blt _0811B9B6
-_0811B9D0:
- ldrb r0, [r6]
- adds r0, 0x1
- ldrb r1, [r6]
- strb r0, [r6]
- movs r0, 0
- add sp, 0x10
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0811B9E8: .4byte gUnknown_03004DE0
-_0811B9EC: .4byte 0x0200c000
- thumb_func_end sub_811B90C
-
- thumb_func_start sub_811B9F0
-sub_811B9F0: @ 811B9F0
- push {r4-r6,lr}
- sub sp, 0xC
- adds r6, r0, 0
- ldr r4, _0811BA68 @ =0x0200c000
- ldrb r0, [r4]
- movs r0, 0
- strb r0, [r4]
- adds r0, r4, 0
- adds r0, 0x24
- movs r1, 0x2C
- ldrsh r3, [r4, r1]
- movs r1, 0xA0
- str r1, [sp]
- movs r1, 0x1
- str r1, [sp, 0x4]
- str r1, [sp, 0x8]
- movs r1, 0x78
- movs r2, 0x50
- bl sub_811D8FC
- ldr r5, _0811BA6C @ =gUnknown_03004DE0
-_0811BA1A:
- movs r0, 0x2A
- ldrsh r2, [r4, r0]
- lsls r2, 1
- adds r2, r5
- ldrh r0, [r4, 0x28]
- lsls r0, 8
- movs r1, 0xF0
- orrs r0, r1
- strh r0, [r2]
- adds r0, r4, 0
- adds r0, 0x24
- movs r1, 0x1
- movs r2, 0x1
- bl sub_811D978
- lsls r0, 24
- cmp r0, 0
- beq _0811BA1A
- ldr r2, _0811BA68 @ =0x0200c000
- ldrh r0, [r2, 0x2C]
- subs r0, 0x10
- strh r0, [r2, 0x2C]
- lsls r0, 16
- cmp r0, 0
- bgt _0811BA56
- movs r0, 0xA0
- strh r0, [r2, 0x2E]
- ldrh r0, [r6, 0x8]
- adds r0, 0x1
- strh r0, [r6, 0x8]
-_0811BA56:
- ldrb r0, [r2]
- adds r0, 0x1
- ldrb r1, [r2]
- strb r0, [r2]
- movs r0, 0
- add sp, 0xC
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_0811BA68: .4byte 0x0200c000
-_0811BA6C: .4byte gUnknown_03004DE0
- thumb_func_end sub_811B9F0
-
- thumb_func_start sub_811BA70
-sub_811BA70: @ 811BA70
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x10
- mov r8, r0
- add r1, sp, 0xC
- movs r0, 0
- strb r0, [r1]
- ldr r4, _0811BAF0 @ =0x0200c000
- ldrb r0, [r4]
- movs r0, 0
- strb r0, [r4]
- adds r0, r4, 0
- adds r0, 0x24
- movs r2, 0x2E
- ldrsh r1, [r4, r2]
- str r1, [sp]
- movs r1, 0x1
- str r1, [sp, 0x4]
- str r1, [sp, 0x8]
- movs r1, 0x78
- movs r2, 0x50
- movs r3, 0
- bl sub_811D8FC
- ldr r3, _0811BAF4 @ =gUnknown_03004DE0
- mov r9, r3
- mov r10, r4
- add r6, sp, 0xC
-_0811BAAE:
- movs r5, 0x2A
- ldrsh r0, [r4, r5]
- lsls r0, 1
- mov r7, r9
- adds r5, r0, r7
- ldrb r1, [r5]
- ldrh r2, [r4, 0x28]
- adds r3, r2, 0
- movs r7, 0x2E
- ldrsh r0, [r4, r7]
- cmp r0, 0x50
- bgt _0811BACA
- movs r2, 0x78
- adds r1, r3, 0
-_0811BACA:
- lsls r0, r2, 16
- asrs r0, 8
- lsls r1, 16
- asrs r1, 16
- orrs r1, r0
- movs r3, 0
- strh r1, [r5]
- ldrb r0, [r6]
- cmp r0, 0
- bne _0811BAF8
- adds r0, r4, 0
- adds r0, 0x24
- movs r1, 0x1
- movs r2, 0x1
- bl sub_811D978
- strb r0, [r6]
- b _0811BAAE
- .align 2, 0
-_0811BAF0: .4byte 0x0200c000
-_0811BAF4: .4byte gUnknown_03004DE0
-_0811BAF8:
- ldrh r0, [r4, 0x2E]
- subs r0, 0x8
- strh r0, [r4, 0x2E]
- lsls r0, 16
- asrs r2, r0, 16
- cmp r2, 0
- bgt _0811BB12
- strh r3, [r4, 0x2C]
- mov r1, r8
- ldrh r0, [r1, 0x8]
- adds r0, 0x1
- strh r0, [r1, 0x8]
- b _0811BB3A
-_0811BB12:
- movs r3, 0x2A
- ldrsh r0, [r4, r3]
- cmp r0, r2
- ble _0811BB3A
- ldr r4, _0811BB58 @ =gUnknown_03004DE0
- ldr r2, _0811BB5C @ =0x0200c000
- adds r3, r1, 0
-_0811BB20:
- ldrh r0, [r2, 0x2A]
- subs r0, 0x1
- strh r0, [r2, 0x2A]
- lsls r0, 16
- asrs r0, 15
- adds r0, r4
- strh r3, [r0]
- movs r5, 0x2A
- ldrsh r1, [r2, r5]
- movs r7, 0x2E
- ldrsh r0, [r2, r7]
- cmp r1, r0
- bgt _0811BB20
-_0811BB3A:
- mov r1, r10
- ldrb r0, [r1]
- adds r0, 0x1
- ldrb r1, [r1]
- mov r2, r10
- strb r0, [r2]
- movs r0, 0
- add sp, 0x10
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0811BB58: .4byte gUnknown_03004DE0
-_0811BB5C: .4byte 0x0200c000
- thumb_func_end sub_811BA70
-
- thumb_func_start sub_811BB60
-sub_811BB60: @ 811BB60
- push {r4-r6,lr}
- sub sp, 0xC
- adds r6, r0, 0
- ldr r4, _0811BBE4 @ =0x0200c000
- ldrb r0, [r4]
- movs r1, 0
- strb r1, [r4]
- adds r0, r4, 0
- adds r0, 0x24
- movs r2, 0x2C
- ldrsh r3, [r4, r2]
- str r1, [sp]
- movs r1, 0x1
- str r1, [sp, 0x4]
- str r1, [sp, 0x8]
- movs r1, 0x78
- movs r2, 0x50
- bl sub_811D8FC
- ldr r5, _0811BBE8 @ =gUnknown_03004DE0
-_0811BB88:
- movs r2, 0x78
- ldrh r3, [r4, 0x28]
- movs r1, 0x28
- ldrsh r0, [r4, r1]
- cmp r0, 0x77
- ble _0811BB98
- movs r2, 0
- movs r3, 0xF0
-_0811BB98:
- movs r0, 0x2A
- ldrsh r1, [r4, r0]
- lsls r1, 1
- adds r1, r5
- lsls r2, 8
- lsls r0, r3, 16
- asrs r0, 16
- orrs r0, r2
- strh r0, [r1]
- adds r0, r4, 0
- adds r0, 0x24
- movs r1, 0x1
- movs r2, 0x1
- bl sub_811D978
- lsls r0, 24
- cmp r0, 0
- beq _0811BB88
- ldr r2, _0811BBE4 @ =0x0200c000
- ldrh r0, [r2, 0x2C]
- adds r0, 0x10
- strh r0, [r2, 0x2C]
- movs r1, 0x28
- ldrsh r0, [r2, r1]
- cmp r0, 0x78
- ble _0811BBD2
- ldrh r0, [r6, 0x8]
- adds r0, 0x1
- strh r0, [r6, 0x8]
-_0811BBD2:
- ldrb r0, [r2]
- adds r0, 0x1
- ldrb r1, [r2]
- strb r0, [r2]
- movs r0, 0
- add sp, 0xC
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_0811BBE4: .4byte 0x0200c000
-_0811BBE8: .4byte gUnknown_03004DE0
- thumb_func_end sub_811BB60
-
- thumb_func_start sub_811BBEC
-sub_811BBEC: @ 811BBEC
- push {lr}
- ldr r1, _0811BC1C @ =0x040000b0
- ldrh r2, [r1, 0xA]
- ldr r0, _0811BC20 @ =0x0000c5ff
- ands r0, r2
- strh r0, [r1, 0xA]
- ldrh r2, [r1, 0xA]
- ldr r0, _0811BC24 @ =0x00007fff
- ands r0, r2
- strh r0, [r1, 0xA]
- ldrh r0, [r1, 0xA]
- bl sub_811D6D4
- ldr r0, _0811BC28 @ =sub_811B7E8
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
- movs r0, 0
- pop {r1}
- bx r1
- .align 2, 0
-_0811BC1C: .4byte 0x040000b0
-_0811BC20: .4byte 0x0000c5ff
-_0811BC24: .4byte 0x00007fff
-_0811BC28: .4byte sub_811B7E8
- thumb_func_end sub_811BBEC
-
- thumb_func_start sub_811BC2C
-sub_811BC2C: @ 811BC2C
- push {r4,lr}
- ldr r4, _0811BC94 @ =0x040000b0
- ldrh r1, [r4, 0xA]
- ldr r0, _0811BC98 @ =0x0000c5ff
- ands r0, r1
- strh r0, [r4, 0xA]
- ldrh r1, [r4, 0xA]
- ldr r0, _0811BC9C @ =0x00007fff
- ands r0, r1
- strh r0, [r4, 0xA]
- ldrh r0, [r4, 0xA]
- bl sub_811D67C
- ldr r2, _0811BCA0 @ =0x0200c000
- ldrb r0, [r2]
- cmp r0, 0
- beq _0811BC62
- ldr r1, _0811BCA4 @ =0x040000d4
- ldr r0, _0811BCA8 @ =gUnknown_03004DE0
- str r0, [r1]
- movs r3, 0xF0
- lsls r3, 3
- adds r0, r3
- str r0, [r1, 0x4]
- ldr r0, _0811BCAC @ =0x800000a0
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
-_0811BC62:
- ldr r1, _0811BCB0 @ =REG_WININ
- ldrh r0, [r2, 0x2]
- strh r0, [r1]
- adds r1, 0x2
- ldrh r0, [r2, 0x4]
- strh r0, [r1]
- subs r1, 0x6
- ldrh r0, [r2, 0x8]
- strh r0, [r1]
- ldr r2, _0811BCB4 @ =REG_WIN0H
- ldr r0, _0811BCA8 @ =gUnknown_03004DE0
- movs r1, 0xF0
- lsls r1, 3
- adds r0, r1
- ldrh r1, [r0]
- strh r1, [r2]
- str r0, [r4]
- str r2, [r4, 0x4]
- ldr r0, _0811BCB8 @ =0xa2400001
- str r0, [r4, 0x8]
- ldr r0, [r4, 0x8]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0811BC94: .4byte 0x040000b0
-_0811BC98: .4byte 0x0000c5ff
-_0811BC9C: .4byte 0x00007fff
-_0811BCA0: .4byte 0x0200c000
-_0811BCA4: .4byte 0x040000d4
-_0811BCA8: .4byte gUnknown_03004DE0
-_0811BCAC: .4byte 0x800000a0
-_0811BCB0: .4byte REG_WININ
-_0811BCB4: .4byte REG_WIN0H
-_0811BCB8: .4byte 0xa2400001
- thumb_func_end sub_811BC2C
-
- thumb_func_start sub_811BCBC
-sub_811BCBC: @ 811BCBC
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r5, _0811BCEC @ =gUnknown_083FD814
- ldr r2, _0811BCF0 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
-_0811BCCE:
- 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 _0811BCCE
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0811BCEC: .4byte gUnknown_083FD814
-_0811BCF0: .4byte gTasks
- thumb_func_end sub_811BCBC
-
- thumb_func_start sub_811BCF4
-sub_811BCF4: @ 811BCF4
- push {r4,r5,lr}
- adds r5, r0, 0
- bl sub_811D658
- bl dp12_8087EA4
- movs r2, 0
- ldr r4, _0811BD48 @ =gUnknown_03005560
- ldr r3, _0811BD4C @ =0x0200c000
-_0811BD06:
- lsls r0, r2, 1
- adds r0, r4
- ldrh r1, [r3, 0x16]
- strh r1, [r0]
- adds r0, r2, 0x1
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x9F
- bls _0811BD06
- ldr r0, _0811BD50 @ =sub_811BE3C
- bl SetVBlankCallback
- ldr r0, _0811BD54 @ =sub_811BE74
- bl SetHBlankCallback
- ldr r2, _0811BD58 @ =0x04000200
- ldrh r0, [r2]
- movs r1, 0x2
- orrs r0, r1
- strh r0, [r2]
- ldr r2, _0811BD5C @ =REG_DISPSTAT
- ldrh r0, [r2]
- movs r1, 0x10
- orrs r0, r1
- strh r0, [r2]
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- strh r0, [r5, 0x8]
- movs r0, 0x1
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_0811BD48: .4byte gUnknown_03005560
-_0811BD4C: .4byte 0x0200c000
-_0811BD50: .4byte sub_811BE3C
-_0811BD54: .4byte sub_811BE74
-_0811BD58: .4byte 0x04000200
-_0811BD5C: .4byte REG_DISPSTAT
- thumb_func_end sub_811BCF4
-
- thumb_func_start sub_811BD60
-sub_811BD60: @ 811BD60
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- adds r6, r0, 0
- ldr r1, _0811BE28 @ =0x0200c000
- ldrb r0, [r1]
- movs r0, 0
- strb r0, [r1]
- ldrh r2, [r6, 0xC]
- lsls r1, r2, 16
- asrs r0, r1, 24
- lsls r0, 16
- lsrs r3, r0, 16
- ldrh r4, [r6, 0xA]
- movs r0, 0xC0
- lsls r0, 1
- mov r8, r0
- movs r5, 0x80
- lsls r5, 3
- adds r0, r4, r5
- strh r0, [r6, 0xA]
- ldr r0, _0811BE2C @ =0x1fff0000
- cmp r1, r0
- bgt _0811BD9A
- movs r1, 0xC0
- lsls r1, 1
- adds r0, r2, r1
- strh r0, [r6, 0xC]
-_0811BD9A:
- movs r5, 0
- lsls r7, r3, 16
-_0811BD9E:
- lsrs r0, r4, 8
- asrs r1, r7, 16
- bl Sin
- ldr r1, _0811BE30 @ =gUnknown_03004DE0
- lsls r2, r5, 1
- adds r2, r1
- ldr r1, _0811BE28 @ =0x0200c000
- ldrh r1, [r1, 0x16]
- adds r0, r1
- strh r0, [r2]
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- mov r1, r8
- adds r0, r4, r1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r5, 0x9F
- bls _0811BD9E
- ldrh r0, [r6, 0xE]
- adds r0, 0x1
- strh r0, [r6, 0xE]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x51
- bne _0811BDEC
- ldrh r0, [r6, 0x10]
- adds r0, 0x1
- strh r0, [r6, 0x10]
- movs r0, 0x1
- negs r0, r0
- movs r1, 0x2
- negs r1, r1
- movs r2, 0
- str r2, [sp]
- movs r3, 0x10
- bl BeginNormalPaletteFade
-_0811BDEC:
- movs r5, 0x10
- ldrsh r0, [r6, r5]
- cmp r0, 0
- beq _0811BE0E
- ldr r0, _0811BE34 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0811BE0E
- ldr r0, _0811BE38 @ =sub_811BCBC
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_0811BE0E:
- ldr r0, _0811BE28 @ =0x0200c000
- ldrb r1, [r0]
- adds r1, 0x1
- ldrb r2, [r0]
- strb r1, [r0]
- movs r0, 0
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0811BE28: .4byte 0x0200c000
-_0811BE2C: .4byte 0x1fff0000
-_0811BE30: .4byte gUnknown_03004DE0
-_0811BE34: .4byte gPaletteFade
-_0811BE38: .4byte sub_811BCBC
- thumb_func_end sub_811BD60
-
- thumb_func_start sub_811BE3C
-sub_811BE3C: @ 811BE3C
- push {lr}
- bl sub_811D67C
- ldr r0, _0811BE64 @ =0x0200c000
- ldrb r0, [r0]
- cmp r0, 0
- beq _0811BE5E
- ldr r1, _0811BE68 @ =0x040000d4
- ldr r0, _0811BE6C @ =gUnknown_03004DE0
- str r0, [r1]
- movs r2, 0xF0
- lsls r2, 3
- adds r0, r2
- str r0, [r1, 0x4]
- ldr r0, _0811BE70 @ =0x800000a0
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
-_0811BE5E:
- pop {r0}
- bx r0
- .align 2, 0
-_0811BE64: .4byte 0x0200c000
-_0811BE68: .4byte 0x040000d4
-_0811BE6C: .4byte gUnknown_03004DE0
-_0811BE70: .4byte 0x800000a0
- thumb_func_end sub_811BE3C
-
- thumb_func_start sub_811BE74
-sub_811BE74: @ 811BE74
- ldr r1, _0811BE94 @ =gUnknown_03004DE0
- ldr r0, _0811BE98 @ =REG_VCOUNT
- ldrh r0, [r0]
- lsls r0, 1
- movs r2, 0xF0
- lsls r2, 3
- adds r1, r2
- adds r0, r1
- ldrh r1, [r0]
- ldr r0, _0811BE9C @ =REG_BG1VOFS
- strh r1, [r0]
- adds r0, 0x4
- strh r1, [r0]
- adds r0, 0x4
- strh r1, [r0]
- bx lr
- .align 2, 0
-_0811BE94: .4byte gUnknown_03004DE0
-_0811BE98: .4byte REG_VCOUNT
-_0811BE9C: .4byte REG_BG1VOFS
- thumb_func_end sub_811BE74
-
- thumb_func_start sub_811BEA0
-sub_811BEA0: @ 811BEA0
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r5, _0811BED0 @ =gUnknown_083FD81C
- ldr r2, _0811BED4 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
-_0811BEB2:
- 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 _0811BEB2
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0811BED0: .4byte gUnknown_083FD81C
-_0811BED4: .4byte gTasks
- thumb_func_end sub_811BEA0
-
- thumb_func_start sub_811BED8
-sub_811BED8: @ 811BED8
- push {r4,lr}
- adds r4, r0, 0
- bl sub_811D658
- bl dp12_8087EA4
- ldr r1, _0811BF20 @ =0x0200c000
- movs r2, 0
- movs r0, 0x3F
- strh r0, [r1, 0x2]
- strh r2, [r1, 0x4]
- movs r0, 0xF0
- strh r0, [r1, 0x6]
- movs r0, 0xA0
- strh r0, [r1, 0x8]
- movs r1, 0
- ldr r3, _0811BF24 @ =gUnknown_03005560
- movs r2, 0xF2
-_0811BEFC:
- lsls r0, r1, 1
- adds r0, r3
- strh r2, [r0]
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x9F
- bls _0811BEFC
- ldr r0, _0811BF28 @ =sub_811C004
- bl SetVBlankCallback
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r0, 0x1
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0811BF20: .4byte 0x0200c000
-_0811BF24: .4byte gUnknown_03005560
-_0811BF28: .4byte sub_811C004
- thumb_func_end sub_811BED8
-
- thumb_func_start sub_811BF2C
-sub_811BF2C: @ 811BF2C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r4, r0, 0
- ldr r1, _0811BFBC @ =0x0200c000
- ldrb r0, [r1]
- movs r0, 0
- strb r0, [r1]
- ldr r7, _0811BFC0 @ =gUnknown_03004DE0
- ldrh r0, [r4, 0xC]
- ldrb r5, [r4, 0xC]
- adds r0, 0x10
- strh r0, [r4, 0xC]
- ldrh r0, [r4, 0xA]
- adds r0, 0x8
- strh r0, [r4, 0xA]
- movs r6, 0
- movs r0, 0x1
- mov r8, r0
-_0811BF52:
- adds r0, r5, 0
- movs r1, 0x28
- bl Sin
- ldrh r1, [r4, 0xA]
- adds r0, r1
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r0, 0
- bge _0811BF68
- movs r1, 0
-_0811BF68:
- lsls r0, r1, 16
- asrs r0, 16
- cmp r0, 0xF0
- ble _0811BF72
- movs r1, 0xF0
-_0811BF72:
- lsls r0, r1, 16
- asrs r0, 16
- lsls r1, r0, 8
- movs r2, 0xF1
- orrs r1, r2
- strh r1, [r7]
- cmp r0, 0xEF
- bgt _0811BF86
- movs r0, 0
- mov r8, r0
-_0811BF86:
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- adds r0, r5, 0x4
- lsls r0, 24
- lsrs r5, r0, 24
- adds r7, 0x2
- cmp r6, 0x9F
- bls _0811BF52
- mov r1, r8
- cmp r1, 0
- beq _0811BFA4
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_0811BFA4:
- ldr r0, _0811BFBC @ =0x0200c000
- ldrb r1, [r0]
- adds r1, 0x1
- ldrb r2, [r0]
- strb r1, [r0]
- movs r0, 0
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0811BFBC: .4byte 0x0200c000
-_0811BFC0: .4byte gUnknown_03004DE0
- thumb_func_end sub_811BF2C
-
- thumb_func_start sub_811BFC4
-sub_811BFC4: @ 811BFC4
- push {lr}
- ldr r1, _0811BFF4 @ =0x040000b0
- ldrh r2, [r1, 0xA]
- ldr r0, _0811BFF8 @ =0x0000c5ff
- ands r0, r2
- strh r0, [r1, 0xA]
- ldrh r2, [r1, 0xA]
- ldr r0, _0811BFFC @ =0x00007fff
- ands r0, r2
- strh r0, [r1, 0xA]
- ldrh r0, [r1, 0xA]
- bl sub_811D6D4
- ldr r0, _0811C000 @ =sub_811BEA0
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
- movs r0, 0
- pop {r1}
- bx r1
- .align 2, 0
-_0811BFF4: .4byte 0x040000b0
-_0811BFF8: .4byte 0x0000c5ff
-_0811BFFC: .4byte 0x00007fff
-_0811C000: .4byte sub_811BEA0
- thumb_func_end sub_811BFC4
-
- thumb_func_start sub_811C004
-sub_811C004: @ 811C004
- push {r4,lr}
- ldr r4, _0811C060 @ =0x040000b0
- ldrh r1, [r4, 0xA]
- ldr r0, _0811C064 @ =0x0000c5ff
- ands r0, r1
- strh r0, [r4, 0xA]
- ldrh r1, [r4, 0xA]
- ldr r0, _0811C068 @ =0x00007fff
- ands r0, r1
- strh r0, [r4, 0xA]
- ldrh r0, [r4, 0xA]
- bl sub_811D67C
- ldr r2, _0811C06C @ =0x0200c000
- ldrb r0, [r2]
- cmp r0, 0
- beq _0811C03A
- ldr r1, _0811C070 @ =0x040000d4
- ldr r0, _0811C074 @ =gUnknown_03004DE0
- str r0, [r1]
- movs r3, 0xF0
- lsls r3, 3
- adds r0, r3
- str r0, [r1, 0x4]
- ldr r0, _0811C078 @ =0x800000a0
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
-_0811C03A:
- ldr r1, _0811C07C @ =REG_WININ
- ldrh r0, [r2, 0x2]
- strh r0, [r1]
- adds r1, 0x2
- ldrh r0, [r2, 0x4]
- strh r0, [r1]
- subs r1, 0x6
- ldrh r0, [r2, 0x8]
- strh r0, [r1]
- ldr r0, _0811C080 @ =gUnknown_03005560
- str r0, [r4]
- ldr r0, _0811C084 @ =REG_WIN0H
- str r0, [r4, 0x4]
- ldr r0, _0811C088 @ =0xa2400001
- str r0, [r4, 0x8]
- ldr r0, [r4, 0x8]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0811C060: .4byte 0x040000b0
-_0811C064: .4byte 0x0000c5ff
-_0811C068: .4byte 0x00007fff
-_0811C06C: .4byte 0x0200c000
-_0811C070: .4byte 0x040000d4
-_0811C074: .4byte gUnknown_03004DE0
-_0811C078: .4byte 0x800000a0
-_0811C07C: .4byte REG_WININ
-_0811C080: .4byte gUnknown_03005560
-_0811C084: .4byte REG_WIN0H
-_0811C088: .4byte 0xa2400001
- thumb_func_end sub_811C004
-
- thumb_func_start sub_811C08C
-sub_811C08C: @ 811C08C
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _0811C0A8 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- movs r2, 0
- strh r2, [r1, 0x26]
- bl sub_811C12C
- pop {r0}
- bx r0
- .align 2, 0
-_0811C0A8: .4byte gTasks
- thumb_func_end sub_811C08C
-
- thumb_func_start sub_811C0AC
-sub_811C0AC: @ 811C0AC
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _0811C0C8 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- movs r2, 0x1
- strh r2, [r1, 0x26]
- bl sub_811C12C
- pop {r0}
- bx r0
- .align 2, 0
-_0811C0C8: .4byte gTasks
- thumb_func_end sub_811C0AC
-
- thumb_func_start sub_811C0CC
-sub_811C0CC: @ 811C0CC
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _0811C0E8 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- movs r2, 0x2
- strh r2, [r1, 0x26]
- bl sub_811C12C
- pop {r0}
- bx r0
- .align 2, 0
-_0811C0E8: .4byte gTasks
- thumb_func_end sub_811C0CC
-
- thumb_func_start sub_811C0EC
-sub_811C0EC: @ 811C0EC
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _0811C108 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- movs r2, 0x3
- strh r2, [r1, 0x26]
- bl sub_811C12C
- pop {r0}
- bx r0
- .align 2, 0
-_0811C108: .4byte gTasks
- thumb_func_end sub_811C0EC
-
- thumb_func_start sub_811C10C
-sub_811C10C: @ 811C10C
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _0811C128 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- movs r2, 0x4
- strh r2, [r1, 0x26]
- bl sub_811C12C
- pop {r0}
- bx r0
- .align 2, 0
-_0811C128: .4byte gTasks
- thumb_func_end sub_811C10C
-
- thumb_func_start sub_811C12C
-sub_811C12C: @ 811C12C
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r5, _0811C15C @ =gUnknown_083FD828
- ldr r2, _0811C160 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
-_0811C13E:
- 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 _0811C13E
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0811C15C: .4byte gUnknown_083FD828
-_0811C160: .4byte gTasks
- thumb_func_end sub_811C12C
-
- thumb_func_start sub_811C164
-sub_811C164: @ 811C164
- push {r4,lr}
- adds r4, r0, 0
- bl sub_811D658
- bl dp12_8087EA4
- adds r0, r4, 0
- bl sub_811C7B0
- movs r0, 0
- strh r0, [r4, 0xA]
- movs r0, 0x1
- strh r0, [r4, 0xC]
- movs r0, 0xEF
- strh r0, [r4, 0xE]
- ldr r1, _0811C1BC @ =0x0200c000
- movs r0, 0x3F
- strh r0, [r1, 0x2]
- movs r0, 0x3E
- strh r0, [r1, 0x4]
- movs r0, 0xA0
- strh r0, [r1, 0x8]
- movs r1, 0
- ldr r3, _0811C1C0 @ =gUnknown_03005560
- ldr r2, _0811C1C4 @ =0x0000f0f1
-_0811C196:
- lsls r0, r1, 1
- adds r0, r3
- strh r2, [r0]
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x9F
- bls _0811C196
- ldr r0, _0811C1C8 @ =sub_811C670
- bl SetVBlankCallback
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0811C1BC: .4byte 0x0200c000
-_0811C1C0: .4byte gUnknown_03005560
-_0811C1C4: .4byte 0x0000f0f1
-_0811C1C8: .4byte sub_811C670
- thumb_func_end sub_811C164
-
- thumb_func_start sub_811C1CC
-sub_811C1CC: @ 811C1CC
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x8
- mov r8, r0
- ldr r6, _0811C284 @ =gUnknown_083FDFF4
- add r1, sp, 0x4
- mov r0, sp
- bl sub_811D6A8
- ldr r0, _0811C288 @ =gUnknown_083FC348
- ldr r1, [sp, 0x4]
- movs r2, 0xF0
- bl CpuSet
- ldr r1, _0811C28C @ =gUnknown_083FDB00
- mov r2, r8
- movs r3, 0x26
- ldrsh r0, [r2, r3]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0xF0
- movs r2, 0x20
- bl LoadPalette
- ldr r1, _0811C290 @ =gUnknown_083FDB14
- ldr r0, _0811C294 @ =gSaveBlock2
- ldrb r0, [r0, 0x8]
- lsls r0, 2
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0xFA
- movs r2, 0xC
- bl LoadPalette
- movs r1, 0
- ldr r5, [sp]
- ldr r0, _0811C298 @ =sub_811C77C
- mov r12, r0
- movs r2, 0xF0
- lsls r2, 8
- adds r7, r2, 0
-_0811C222:
- movs r0, 0
- lsls r3, r1, 16
- asrs r4, r3, 11
-_0811C228:
- lsls r2, r0, 16
- asrs r2, 16
- adds r1, r4, r2
- lsls r1, 1
- adds r1, r5
- ldrh r0, [r6]
- orrs r0, r7
- strh r0, [r1]
- adds r2, 0x1
- lsls r2, 16
- adds r6, 0x2
- lsrs r0, r2, 16
- asrs r2, 16
- cmp r2, 0x1F
- ble _0811C228
- movs r1, 0x80
- lsls r1, 9
- adds r0, r3, r1
- lsrs r1, r0, 16
- asrs r0, 16
- cmp r0, 0x13
- ble _0811C222
- ldr r2, _0811C29C @ =0x04000200
- ldrh r0, [r2]
- movs r1, 0x2
- orrs r0, r1
- strh r0, [r2]
- ldr r2, _0811C2A0 @ =REG_DISPSTAT
- ldrh r0, [r2]
- movs r1, 0x10
- orrs r0, r1
- strh r0, [r2]
- mov r0, r12
- bl SetHBlankCallback
- mov r2, r8
- ldrh r0, [r2, 0x8]
- adds r0, 0x1
- strh r0, [r2, 0x8]
- movs r0, 0
- add sp, 0x8
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0811C284: .4byte gUnknown_083FDFF4
-_0811C288: .4byte gUnknown_083FC348
-_0811C28C: .4byte gUnknown_083FDB00
-_0811C290: .4byte gUnknown_083FDB14
-_0811C294: .4byte gSaveBlock2
-_0811C298: .4byte sub_811C77C
-_0811C29C: .4byte 0x04000200
-_0811C2A0: .4byte REG_DISPSTAT
- thumb_func_end sub_811C1CC
-
- thumb_func_start sub_811C2A4
-sub_811C2A4: @ 811C2A4
- push {r4-r7,lr}
- adds r4, r0, 0
- ldr r1, _0811C384 @ =0x0200c000
- ldrb r0, [r1]
- movs r0, 0
- strb r0, [r1]
- ldr r7, _0811C388 @ =gUnknown_03004DE0
- ldrh r0, [r4, 0xA]
- ldrb r5, [r4, 0xA]
- adds r0, 0x10
- strh r0, [r4, 0xA]
- movs r6, 0
-_0811C2BC:
- adds r0, r5, 0
- movs r1, 0x10
- bl Sin
- ldrh r1, [r4, 0xC]
- adds r0, r1
- lsls r0, 16
- lsrs r2, r0, 16
- cmp r0, 0
- bge _0811C2D2
- movs r2, 0x1
-_0811C2D2:
- lsls r0, r2, 16
- asrs r0, 16
- cmp r0, 0xF0
- ble _0811C2DC
- movs r2, 0xF0
-_0811C2DC:
- strh r2, [r7]
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- adds r7, 0x2
- adds r0, r5, 0
- adds r0, 0x10
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r6, 0x4F
- bls _0811C2BC
- cmp r6, 0x9F
- bhi _0811C334
-_0811C2F6:
- adds r0, r5, 0
- movs r1, 0x10
- bl Sin
- ldrh r1, [r4, 0xE]
- subs r1, r0
- lsls r1, 16
- lsrs r2, r1, 16
- cmp r1, 0
- bge _0811C30C
- movs r2, 0
-_0811C30C:
- lsls r0, r2, 16
- asrs r0, 16
- cmp r0, 0xEF
- ble _0811C316
- movs r2, 0xEF
-_0811C316:
- lsls r0, r2, 16
- asrs r0, 8
- movs r1, 0xF0
- orrs r0, r1
- strh r0, [r7]
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- adds r7, 0x2
- adds r0, r5, 0
- adds r0, 0x10
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r6, 0x9F
- bls _0811C2F6
-_0811C334:
- ldrh r1, [r4, 0xC]
- adds r1, 0x8
- strh r1, [r4, 0xC]
- ldrh r0, [r4, 0xE]
- subs r0, 0x8
- strh r0, [r4, 0xE]
- lsls r1, 16
- asrs r1, 16
- cmp r1, 0xF0
- ble _0811C34C
- movs r0, 0xF0
- strh r0, [r4, 0xC]
-_0811C34C:
- movs r1, 0xE
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bge _0811C358
- movs r0, 0
- strh r0, [r4, 0xE]
-_0811C358:
- ldr r0, [r4, 0xC]
- cmp r0, 0xF0
- bne _0811C364
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_0811C364:
- ldr r1, _0811C384 @ =0x0200c000
- ldrh r0, [r1, 0x18]
- subs r0, 0x8
- strh r0, [r1, 0x18]
- ldrh r0, [r1, 0x1A]
- adds r0, 0x8
- strh r0, [r1, 0x1A]
- ldrb r0, [r1]
- adds r0, 0x1
- ldrb r2, [r1]
- strb r0, [r1]
- movs r0, 0
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0811C384: .4byte 0x0200c000
-_0811C388: .4byte gUnknown_03004DE0
- thumb_func_end sub_811C2A4
-
- thumb_func_start sub_811C38C
-sub_811C38C: @ 811C38C
- push {r4,r5,lr}
- adds r4, r0, 0
- ldr r0, _0811C3F8 @ =0x0200c000
- ldrb r1, [r0]
- movs r1, 0
- strb r1, [r0]
- ldr r2, _0811C3FC @ =gUnknown_03004DE0
- adds r5, r0, 0
- movs r3, 0xF0
-_0811C39E:
- strh r3, [r2]
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r1, r0, 24
- adds r2, 0x2
- cmp r1, 0x9F
- bls _0811C39E
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- movs r1, 0
- strh r0, [r4, 0x8]
- strh r1, [r4, 0xA]
- strh r1, [r4, 0xC]
- strh r1, [r4, 0xE]
- ldrh r0, [r5, 0x18]
- subs r0, 0x8
- strh r0, [r5, 0x18]
- ldrh r0, [r5, 0x1A]
- adds r0, 0x8
- strh r0, [r5, 0x1A]
- movs r1, 0x22
- ldrsh r0, [r4, r1]
- movs r1, 0
- bl sub_811CA10
- movs r1, 0x24
- ldrsh r0, [r4, r1]
- movs r1, 0x1
- bl sub_811CA10
- movs r1, 0x22
- ldrsh r0, [r4, r1]
- bl sub_811CA28
- movs r0, 0x68
- bl PlaySE
- ldrb r0, [r5]
- adds r0, 0x1
- ldrb r1, [r5]
- strb r0, [r5]
- movs r0, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_0811C3F8: .4byte 0x0200c000
-_0811C3FC: .4byte gUnknown_03004DE0
- thumb_func_end sub_811C38C
-
- thumb_func_start sub_811C400
-sub_811C400: @ 811C400
- push {r4,lr}
- adds r4, r0, 0
- ldr r1, _0811C438 @ =0x0200c000
- ldrh r0, [r1, 0x18]
- subs r0, 0x8
- strh r0, [r1, 0x18]
- ldrh r0, [r1, 0x1A]
- adds r0, 0x8
- strh r0, [r1, 0x1A]
- movs r1, 0x22
- ldrsh r0, [r4, r1]
- bl sub_811CA44
- lsls r0, 16
- cmp r0, 0
- beq _0811C42E
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r1, 0x24
- ldrsh r0, [r4, r1]
- bl sub_811CA28
-_0811C42E:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0811C438: .4byte 0x0200c000
- thumb_func_end sub_811C400
-
- thumb_func_start sub_811C43C
-sub_811C43C: @ 811C43C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r6, r0, 0
- ldr r7, _0811C4D0 @ =0x0200c000
- ldrh r0, [r7, 0x18]
- subs r0, 0x8
- movs r1, 0
- mov r8, r1
- strh r0, [r7, 0x18]
- ldrh r0, [r7, 0x1A]
- adds r0, 0x8
- strh r0, [r7, 0x1A]
- movs r1, 0x24
- ldrsh r0, [r6, r1]
- bl sub_811CA44
- lsls r0, 16
- cmp r0, 0
- beq _0811C4C4
- ldrb r0, [r7]
- movs r0, 0
- strb r0, [r7]
- movs r0, 0
- bl SetVBlankCallback
- ldr r1, _0811C4D4 @ =0x040000b0
- ldrh r2, [r1, 0xA]
- ldr r0, _0811C4D8 @ =0x0000c5ff
- ands r0, r2
- strh r0, [r1, 0xA]
- ldrh r2, [r1, 0xA]
- ldr r0, _0811C4DC @ =0x00007fff
- ands r0, r2
- strh r0, [r1, 0xA]
- ldrh r0, [r1, 0xA]
- ldr r4, _0811C4E0 @ =gUnknown_03004DE0
- movs r5, 0xA0
- lsls r5, 1
- adds r0, r4, 0
- movs r1, 0
- adds r2, r5, 0
- bl memset
- movs r0, 0xF0
- lsls r0, 3
- adds r4, r0
- adds r0, r4, 0
- movs r1, 0
- adds r2, r5, 0
- bl memset
- ldr r1, _0811C4E4 @ =REG_WIN0H
- movs r0, 0xF0
- strh r0, [r1]
- ldr r0, _0811C4E8 @ =REG_BLDY
- mov r1, r8
- strh r1, [r0]
- ldrh r0, [r6, 0x8]
- adds r0, 0x1
- strh r0, [r6, 0x8]
- strh r1, [r6, 0xE]
- strh r1, [r6, 0x10]
- movs r0, 0xBF
- strh r0, [r7, 0xE]
- ldr r0, _0811C4EC @ =sub_811C700
- bl SetVBlankCallback
-_0811C4C4:
- movs r0, 0
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0811C4D0: .4byte 0x0200c000
-_0811C4D4: .4byte 0x040000b0
-_0811C4D8: .4byte 0x0000c5ff
-_0811C4DC: .4byte 0x00007fff
-_0811C4E0: .4byte gUnknown_03004DE0
-_0811C4E4: .4byte REG_WIN0H
-_0811C4E8: .4byte REG_BLDY
-_0811C4EC: .4byte sub_811C700
- thumb_func_end sub_811C43C
-
- thumb_func_start sub_811C4F0
-sub_811C4F0: @ 811C4F0
- push {r4-r7,lr}
- adds r4, r0, 0
- ldr r1, _0811C5AC @ =0x0200c000
- ldrb r0, [r1]
- movs r0, 0
- strb r0, [r1]
- movs r6, 0x1
- ldrh r0, [r1, 0x18]
- subs r0, 0x8
- strh r0, [r1, 0x18]
- ldrh r0, [r1, 0x1A]
- adds r0, 0x8
- strh r0, [r1, 0x1A]
- ldrh r2, [r4, 0x10]
- movs r3, 0x10
- ldrsh r0, [r4, r3]
- adds r7, r1, 0
- cmp r0, 0x4F
- bgt _0811C51A
- adds r0, r2, 0x2
- strh r0, [r4, 0x10]
-_0811C51A:
- movs r1, 0x10
- ldrsh r0, [r4, r1]
- cmp r0, 0x50
- ble _0811C526
- movs r0, 0x50
- strh r0, [r4, 0x10]
-_0811C526:
- ldrh r0, [r4, 0xE]
- adds r0, 0x1
- strh r0, [r4, 0xE]
- movs r1, 0x1
- ands r0, r1
- ldrh r2, [r4, 0x10]
- cmp r0, 0
- beq _0811C58C
- movs r3, 0
- lsls r0, r2, 16
- movs r6, 0
- cmp r0, 0
- blt _0811C58C
- movs r2, 0x50
- mov r12, r2
- ldr r5, _0811C5B0 @ =gUnknown_03004DE0
-_0811C546:
- lsls r0, r3, 16
- asrs r2, r0, 16
- mov r3, r12
- subs r1, r3, r2
- adds r0, r2, 0
- adds r0, 0x50
- lsls r0, 16
- lsrs r3, r0, 16
- lsls r1, 16
- asrs r1, 15
- adds r1, r5
- ldrh r0, [r1]
- cmp r0, 0xF
- bhi _0811C568
- movs r6, 0x1
- adds r0, 0x1
- strh r0, [r1]
-_0811C568:
- lsls r0, r3, 16
- asrs r0, 15
- adds r1, r0, r5
- ldrh r0, [r1]
- cmp r0, 0xF
- bhi _0811C57A
- movs r6, 0x1
- adds r0, 0x1
- strh r0, [r1]
-_0811C57A:
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r3, r0, 16
- asrs r0, 16
- movs r2, 0x10
- ldrsh r1, [r4, r2]
- ldrh r2, [r4, 0x10]
- cmp r0, r1
- ble _0811C546
-_0811C58C:
- cmp r2, 0x50
- bne _0811C59A
- cmp r6, 0
- bne _0811C59A
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_0811C59A:
- ldrb r0, [r7]
- adds r0, 0x1
- ldrb r1, [r7]
- strb r0, [r7]
- movs r0, 0
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0811C5AC: .4byte 0x0200c000
-_0811C5B0: .4byte gUnknown_03004DE0
- thumb_func_end sub_811C4F0
-
- thumb_func_start sub_811C5B4
-sub_811C5B4: @ 811C5B4
- push {r4-r6,lr}
- adds r5, r0, 0
- ldr r4, _0811C5E0 @ =0x0200c000
- ldrb r0, [r4]
- movs r6, 0
- strb r6, [r4]
- movs r0, 0x1
- negs r0, r0
- ldr r2, _0811C5E4 @ =0x00007fff
- movs r1, 0x10
- bl BlendPalettes
- movs r0, 0xFF
- strh r0, [r4, 0xE]
- strh r6, [r5, 0xE]
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- strh r0, [r5, 0x8]
- movs r0, 0x1
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_0811C5E0: .4byte 0x0200c000
-_0811C5E4: .4byte 0x00007fff
- thumb_func_end sub_811C5B4
-
- thumb_func_start sub_811C5E8
-sub_811C5E8: @ 811C5E8
- push {r4,r5,lr}
- adds r4, r0, 0
- ldr r5, _0811C628 @ =0x0200c000
- ldrb r0, [r5]
- movs r0, 0
- strb r0, [r5]
- ldrh r0, [r4, 0xE]
- adds r0, 0x1
- strh r0, [r4, 0xE]
- ldr r0, _0811C62C @ =gUnknown_03004DE0
- movs r2, 0xE
- ldrsh r1, [r4, r2]
- movs r2, 0xA0
- lsls r2, 1
- bl memset
- movs r1, 0xE
- ldrsh r0, [r4, r1]
- cmp r0, 0xF
- ble _0811C616
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_0811C616:
- ldrb r0, [r5]
- adds r0, 0x1
- ldrb r1, [r5]
- strb r0, [r5]
- movs r0, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_0811C628: .4byte 0x0200c000
-_0811C62C: .4byte gUnknown_03004DE0
- thumb_func_end sub_811C5E8
-
- thumb_func_start sub_811C630
-sub_811C630: @ 811C630
- push {r4,lr}
- adds r4, r0, 0
- ldr r1, _0811C664 @ =0x040000b0
- ldrh r2, [r1, 0xA]
- ldr r0, _0811C668 @ =0x0000c5ff
- ands r0, r2
- strh r0, [r1, 0xA]
- ldrh r2, [r1, 0xA]
- ldr r0, _0811C66C @ =0x00007fff
- ands r0, r2
- strh r0, [r1, 0xA]
- ldrh r0, [r1, 0xA]
- bl sub_811D6D4
- ldr r0, [r4]
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0811C664: .4byte 0x040000b0
-_0811C668: .4byte 0x0000c5ff
-_0811C66C: .4byte 0x00007fff
- thumb_func_end sub_811C630
-
- thumb_func_start sub_811C670
-sub_811C670: @ 811C670
- push {r4,lr}
- ldr r4, _0811C6D4 @ =0x040000b0
- ldrh r1, [r4, 0xA]
- ldr r0, _0811C6D8 @ =0x0000c5ff
- ands r0, r1
- strh r0, [r4, 0xA]
- ldrh r1, [r4, 0xA]
- ldr r0, _0811C6DC @ =0x00007fff
- ands r0, r1
- strh r0, [r4, 0xA]
- ldrh r0, [r4, 0xA]
- bl sub_811D67C
- ldr r2, _0811C6E0 @ =0x0200c000
- ldrb r0, [r2]
- cmp r0, 0
- beq _0811C6A6
- ldr r1, _0811C6E4 @ =0x040000d4
- ldr r0, _0811C6E8 @ =gUnknown_03004DE0
- str r0, [r1]
- movs r3, 0xF0
- lsls r3, 3
- adds r0, r3
- str r0, [r1, 0x4]
- ldr r0, _0811C6EC @ =0x800000a0
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
-_0811C6A6:
- ldr r1, _0811C6F0 @ =REG_BG0VOFS
- ldrh r0, [r2, 0x1C]
- strh r0, [r1]
- adds r1, 0x36
- ldrh r0, [r2, 0x2]
- strh r0, [r1]
- adds r1, 0x2
- ldrh r0, [r2, 0x4]
- strh r0, [r1]
- subs r1, 0x6
- ldrh r0, [r2, 0x8]
- strh r0, [r1]
- ldr r0, _0811C6F4 @ =gUnknown_03005560
- str r0, [r4]
- ldr r0, _0811C6F8 @ =REG_WIN0H
- str r0, [r4, 0x4]
- ldr r0, _0811C6FC @ =0xa2400001
- str r0, [r4, 0x8]
- ldr r0, [r4, 0x8]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0811C6D4: .4byte 0x040000b0
-_0811C6D8: .4byte 0x0000c5ff
-_0811C6DC: .4byte 0x00007fff
-_0811C6E0: .4byte 0x0200c000
-_0811C6E4: .4byte 0x040000d4
-_0811C6E8: .4byte gUnknown_03004DE0
-_0811C6EC: .4byte 0x800000a0
-_0811C6F0: .4byte REG_BG0VOFS
-_0811C6F4: .4byte gUnknown_03005560
-_0811C6F8: .4byte REG_WIN0H
-_0811C6FC: .4byte 0xa2400001
- thumb_func_end sub_811C670
-
- thumb_func_start sub_811C700
-sub_811C700: @ 811C700
- push {r4,lr}
- ldr r4, _0811C750 @ =0x040000b0
- ldrh r1, [r4, 0xA]
- ldr r0, _0811C754 @ =0x0000c5ff
- ands r0, r1
- strh r0, [r4, 0xA]
- ldrh r1, [r4, 0xA]
- ldr r0, _0811C758 @ =0x00007fff
- ands r0, r1
- strh r0, [r4, 0xA]
- ldrh r0, [r4, 0xA]
- bl sub_811D67C
- ldr r2, _0811C75C @ =0x0200c000
- ldrb r0, [r2]
- cmp r0, 0
- beq _0811C736
- ldr r1, _0811C760 @ =0x040000d4
- ldr r0, _0811C764 @ =gUnknown_03004DE0
- str r0, [r1]
- movs r3, 0xF0
- lsls r3, 3
- adds r0, r3
- str r0, [r1, 0x4]
- ldr r0, _0811C768 @ =0x800000a0
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
-_0811C736:
- ldr r1, _0811C76C @ =REG_BLDCNT
- ldrh r0, [r2, 0xE]
- strh r0, [r1]
- ldr r0, _0811C770 @ =gUnknown_03005560
- str r0, [r4]
- ldr r0, _0811C774 @ =REG_BLDY
- str r0, [r4, 0x4]
- ldr r0, _0811C778 @ =0xa2400001
- str r0, [r4, 0x8]
- ldr r0, [r4, 0x8]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0811C750: .4byte 0x040000b0
-_0811C754: .4byte 0x0000c5ff
-_0811C758: .4byte 0x00007fff
-_0811C75C: .4byte 0x0200c000
-_0811C760: .4byte 0x040000d4
-_0811C764: .4byte gUnknown_03004DE0
-_0811C768: .4byte 0x800000a0
-_0811C76C: .4byte REG_BLDCNT
-_0811C770: .4byte gUnknown_03005560
-_0811C774: .4byte REG_BLDY
-_0811C778: .4byte 0xa2400001
- thumb_func_end sub_811C700
-
- thumb_func_start sub_811C77C
-sub_811C77C: @ 811C77C
- push {lr}
- ldr r0, _0811C790 @ =REG_VCOUNT
- ldrh r0, [r0]
- cmp r0, 0x4F
- bhi _0811C79C
- ldr r0, _0811C794 @ =REG_BG0HOFS
- ldr r1, _0811C798 @ =0x0200c000
- ldrh r1, [r1, 0x18]
- b _0811C7A2
- .align 2, 0
-_0811C790: .4byte REG_VCOUNT
-_0811C794: .4byte REG_BG0HOFS
-_0811C798: .4byte 0x0200c000
-_0811C79C:
- ldr r0, _0811C7A8 @ =REG_BG0HOFS
- ldr r1, _0811C7AC @ =0x0200c000
- ldrh r1, [r1, 0x1A]
-_0811C7A2:
- strh r1, [r0]
- pop {r0}
- bx r0
- .align 2, 0
-_0811C7A8: .4byte REG_BG0HOFS
-_0811C7AC: .4byte 0x0200c000
- thumb_func_end sub_811C77C
-
- thumb_func_start sub_811C7B0
-sub_811C7B0: @ 811C7B0
- push {r4-r6,lr}
- mov r6, r9
- mov r5, r8
- push {r5,r6}
- sub sp, 0x4
- adds r4, r0, 0
- ldr r0, _0811C8EC @ =gUnknown_083FD850
- movs r2, 0x26
- ldrsh r1, [r4, r2]
- mov r8, r1
- add r0, r8
- ldrb r0, [r0]
- ldr r2, _0811C8F0 @ =gUnknown_083FD86A
- lsls r1, 2
- mov r8, r1
- adds r1, r2
- ldrh r1, [r1]
- subs r1, 0x20
- lsls r1, 16
- asrs r1, 16
- adds r2, 0x2
- add r2, r8
- ldrh r2, [r2]
- adds r2, 0x2A
- lsls r2, 16
- asrs r2, 16
- ldr r5, _0811C8F4 @ =0x0200c03c
- str r5, [sp]
- movs r3, 0
- bl CreateTrainerSprite_BirchSpeech
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x22]
- ldr r0, _0811C8F8 @ =gSaveBlock2
- ldrb r0, [r0, 0x8]
- movs r1, 0x88
- lsls r1, 1
- str r5, [sp]
- movs r2, 0x6A
- movs r3, 0
- bl CreateTrainerSprite_BirchSpeech
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r4, 0x24]
- movs r3, 0x22
- ldrsh r0, [r4, r3]
- lsls r5, r0, 4
- adds r5, r0
- lsls r5, 2
- ldr r1, _0811C8FC @ =gSprites
- adds r5, r1
- movs r2, 0x24
- ldrsh r0, [r4, r2]
- lsls r6, r0, 4
- adds r6, r0
- lsls r6, 2
- adds r6, r1
- ldr r0, _0811C900 @ =sub_811C90C
- str r0, [r5, 0x1C]
- str r0, [r6, 0x1C]
- ldrb r0, [r5, 0x1]
- movs r1, 0x3
- orrs r0, r1
- strb r0, [r5, 0x1]
- ldrb r0, [r6, 0x1]
- orrs r0, r1
- strb r0, [r6, 0x1]
- bl AllocOamMatrix
- lsls r0, 24
- lsrs r0, 24
- movs r3, 0x1F
- mov r9, r3
- mov r4, r9
- ands r0, r4
- lsls r0, 1
- ldrb r2, [r5, 0x3]
- movs r4, 0x3F
- negs r4, r4
- adds r1, r4, 0
- ands r1, r2
- orrs r1, r0
- strb r1, [r5, 0x3]
- bl AllocOamMatrix
- lsls r0, 24
- lsrs r0, 24
- mov r1, r9
- ands r0, r1
- lsls r0, 1
- ldrb r1, [r6, 0x3]
- ands r4, r1
- orrs r4, r0
- strb r4, [r6, 0x3]
- ldrb r2, [r5, 0x1]
- movs r1, 0x3F
- adds r0, r1, 0
- ands r0, r2
- movs r2, 0x40
- orrs r0, r2
- strb r0, [r5, 0x1]
- ldrb r0, [r6, 0x1]
- ands r1, r0
- orrs r1, r2
- strb r1, [r6, 0x1]
- ldrb r0, [r5, 0x3]
- movs r1, 0xC0
- orrs r0, r1
- strb r0, [r5, 0x3]
- ldrb r0, [r6, 0x3]
- orrs r0, r1
- strb r0, [r6, 0x3]
- adds r0, r5, 0
- movs r1, 0x1
- movs r2, 0x3
- movs r3, 0x3
- bl CalcCenterToCornerVec
- adds r0, r6, 0
- movs r1, 0x1
- movs r2, 0x3
- movs r3, 0x3
- bl CalcCenterToCornerVec
- ldrb r0, [r5, 0x3]
- lsls r0, 26
- lsrs r0, 27
- ldr r2, _0811C904 @ =gUnknown_083FD856
- mov r3, r8
- adds r1, r3, r2
- movs r4, 0
- ldrsh r1, [r1, r4]
- adds r2, 0x2
- add r8, r2
- mov r3, r8
- movs r4, 0
- ldrsh r2, [r3, r4]
- movs r3, 0
- bl SetOamMatrixRotationScaling
- ldrb r0, [r6, 0x3]
- lsls r0, 26
- lsrs r0, 27
- ldr r1, _0811C908 @ =0xfffffe00
- movs r2, 0x80
- lsls r2, 2
- movs r3, 0
- bl SetOamMatrixRotationScaling
- add sp, 0x4
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0811C8EC: .4byte gUnknown_083FD850
-_0811C8F0: .4byte gUnknown_083FD86A
-_0811C8F4: .4byte 0x0200c03c
-_0811C8F8: .4byte gSaveBlock2
-_0811C8FC: .4byte gSprites
-_0811C900: .4byte sub_811C90C
-_0811C904: .4byte gUnknown_083FD856
-_0811C908: .4byte 0xfffffe00
- thumb_func_end sub_811C7B0
-
- thumb_func_start sub_811C90C
-sub_811C90C: @ 811C90C
- push {r4,r5,lr}
- adds r4, r0, 0
- ldr r5, _0811C930 @ =gUnknown_083FD880
-_0811C912:
- movs r1, 0x2E
- 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 _0811C912
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0811C930: .4byte gUnknown_083FD880
- thumb_func_end sub_811C90C
-
- thumb_func_start sub_811C934
-sub_811C934: @ 811C934
- movs r0, 0
- bx lr
- thumb_func_end sub_811C934
-
- thumb_func_start sub_811C938
-sub_811C938: @ 811C938
- push {r4,r5,lr}
- sub sp, 0x8
- adds r5, r0, 0
- ldr r1, _0811C97C @ =gUnknown_083FD89C
- mov r0, sp
- movs r2, 0x4
- bl memcpy
- add r4, sp, 0x4
- ldr r1, _0811C980 @ =gUnknown_083FD8A0
- adds r0, r4, 0
- movs r2, 0x4
- bl memcpy
- ldrh r0, [r5, 0x2E]
- adds r0, 0x1
- strh r0, [r5, 0x2E]
- movs r1, 0x3C
- ldrsh r0, [r5, r1]
- lsls r0, 1
- add r0, sp
- ldrh r0, [r0]
- strh r0, [r5, 0x30]
- movs r1, 0x3C
- ldrsh r0, [r5, r1]
- lsls r0, 1
- adds r4, r0
- ldrh r0, [r4]
- strh r0, [r5, 0x32]
- movs r0, 0x1
- add sp, 0x8
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_0811C97C: .4byte gUnknown_083FD89C
-_0811C980: .4byte gUnknown_083FD8A0
- thumb_func_end sub_811C938
-
- thumb_func_start sub_811C984
-sub_811C984: @ 811C984
- push {lr}
- adds r1, r0, 0
- ldrh r0, [r1, 0x30]
- ldrh r3, [r1, 0x20]
- adds r2, r0, r3
- strh r2, [r1, 0x20]
- movs r3, 0x3C
- ldrsh r0, [r1, r3]
- cmp r0, 0
- beq _0811C9A2
- lsls r0, r2, 16
- asrs r0, 16
- cmp r0, 0x84
- bgt _0811C9B0
- b _0811C9AA
-_0811C9A2:
- lsls r0, r2, 16
- asrs r0, 16
- cmp r0, 0x67
- ble _0811C9B0
-_0811C9AA:
- ldrh r0, [r1, 0x2E]
- adds r0, 0x1
- strh r0, [r1, 0x2E]
-_0811C9B0:
- movs r0, 0
- pop {r1}
- bx r1
- thumb_func_end sub_811C984
-
- thumb_func_start sub_811C9B8
-sub_811C9B8: @ 811C9B8
- push {lr}
- adds r2, r0, 0
- ldrh r3, [r2, 0x32]
- ldrh r0, [r2, 0x30]
- adds r1, r3, r0
- strh r1, [r2, 0x30]
- ldrh r0, [r2, 0x20]
- adds r0, r1
- strh r0, [r2, 0x20]
- lsls r1, 16
- cmp r1, 0
- bne _0811C9DE
- ldrh r0, [r2, 0x2E]
- adds r0, 0x1
- strh r0, [r2, 0x2E]
- negs r0, r3
- strh r0, [r2, 0x32]
- movs r0, 0x1
- strh r0, [r2, 0x3A]
-_0811C9DE:
- movs r0, 0
- pop {r1}
- bx r1
- thumb_func_end sub_811C9B8
-
- thumb_func_start sub_811C9E4
-sub_811C9E4: @ 811C9E4
- push {lr}
- adds r2, r0, 0
- ldrh r0, [r2, 0x32]
- ldrh r1, [r2, 0x30]
- adds r0, r1
- strh r0, [r2, 0x30]
- ldrh r1, [r2, 0x20]
- adds r1, r0
- strh r1, [r2, 0x20]
- adds r1, 0x1F
- lsls r1, 16
- movs r0, 0x97
- lsls r0, 17
- cmp r1, r0
- bls _0811CA08
- ldrh r0, [r2, 0x2E]
- adds r0, 0x1
- strh r0, [r2, 0x2E]
-_0811CA08:
- movs r0, 0
- pop {r1}
- bx r1
- thumb_func_end sub_811C9E4
-
- thumb_func_start sub_811CA10
-sub_811CA10: @ 811CA10
- ldr r3, _0811CA24 @ =gSprites
- lsls r0, 16
- asrs r0, 16
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r3
- strh r1, [r2, 0x3C]
- bx lr
- .align 2, 0
-_0811CA24: .4byte gSprites
- thumb_func_end sub_811CA10
-
- thumb_func_start sub_811CA28
-sub_811CA28: @ 811CA28
- ldr r2, _0811CA40 @ =gSprites
- lsls r0, 16
- asrs r0, 16
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrh r0, [r1, 0x2E]
- adds r0, 0x1
- strh r0, [r1, 0x2E]
- bx lr
- .align 2, 0
-_0811CA40: .4byte gSprites
- thumb_func_end sub_811CA28
-
- thumb_func_start sub_811CA44
-sub_811CA44: @ 811CA44
- ldr r2, _0811CA58 @ =gSprites
- lsls r0, 16
- asrs r0, 16
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- movs r2, 0x3A
- ldrsh r0, [r1, r2]
- bx lr
- .align 2, 0
-_0811CA58: .4byte gSprites
- thumb_func_end sub_811CA44
-
- thumb_func_start sub_811CA5C
-sub_811CA5C: @ 811CA5C
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r5, _0811CA8C @ =gUnknown_083FD8A4
- ldr r2, _0811CA90 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
-_0811CA6E:
- 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 _0811CA6E
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0811CA8C: .4byte gUnknown_083FD8A4
-_0811CA90: .4byte gTasks
- thumb_func_end sub_811CA5C
-
- thumb_func_start sub_811CA94
-sub_811CA94: @ 811CA94
- push {r4-r6,lr}
- adds r4, r0, 0
- bl sub_811D658
- bl dp12_8087EA4
- movs r2, 0
- movs r0, 0x80
- lsls r0, 1
- strh r0, [r4, 0xC]
- movs r0, 0x1
- strh r0, [r4, 0xE]
- ldr r1, _0811CB08 @ =0x0200c000
- movs r0, 0x3F
- strh r0, [r1, 0x2]
- strh r2, [r1, 0x4]
- movs r0, 0xA0
- strh r0, [r1, 0x8]
- ldr r3, _0811CB0C @ =gUnknown_03005560
- adds r6, r1, 0
- movs r5, 0xF0
-_0811CABE:
- lsls r0, r2, 1
- adds r0, r3
- ldrh r1, [r6, 0x14]
- strh r1, [r0]
- adds r0, r2, 0
- adds r0, 0xA0
- lsls r0, 1
- adds r0, r3
- strh r5, [r0]
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- cmp r2, 0x9F
- bls _0811CABE
- ldr r2, _0811CB10 @ =0x04000200
- ldrh r0, [r2]
- movs r1, 0x2
- orrs r0, r1
- strh r0, [r2]
- ldr r2, _0811CB14 @ =REG_DISPSTAT
- ldrh r0, [r2]
- movs r1, 0x10
- orrs r0, r1
- strh r0, [r2]
- ldr r0, _0811CB18 @ =sub_811CC28
- bl SetVBlankCallback
- ldr r0, _0811CB1C @ =sub_811CCB0
- bl SetHBlankCallback
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r0, 0x1
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_0811CB08: .4byte 0x0200c000
-_0811CB0C: .4byte gUnknown_03005560
-_0811CB10: .4byte 0x04000200
-_0811CB14: .4byte REG_DISPSTAT
-_0811CB18: .4byte sub_811CC28
-_0811CB1C: .4byte sub_811CCB0
- thumb_func_end sub_811CA94
-
- thumb_func_start sub_811CB20
-sub_811CB20: @ 811CB20
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r2, r0, 0
- ldr r1, _0811CB98 @ =0x0200c000
- ldrb r0, [r1]
- movs r0, 0
- strb r0, [r1]
- ldrh r0, [r2, 0xC]
- lsls r0, 16
- asrs r0, 24
- ldrh r3, [r2, 0xA]
- adds r0, r3
- strh r0, [r2, 0xA]
- lsls r0, 16
- asrs r0, 16
- mov r12, r1
- cmp r0, 0xF0
- ble _0811CB4A
- movs r0, 0xF0
- strh r0, [r2, 0xA]
-_0811CB4A:
- ldrh r4, [r2, 0xC]
- movs r0, 0xC
- ldrsh r1, [r2, r0]
- ldr r0, _0811CB9C @ =0x00000fff
- ldrh r3, [r2, 0xE]
- cmp r1, r0
- bgt _0811CB5C
- adds r0, r4, r3
- strh r0, [r2, 0xC]
-_0811CB5C:
- lsls r0, r3, 16
- asrs r0, 16
- cmp r0, 0x7F
- bgt _0811CB68
- lsls r0, r3, 1
- strh r0, [r2, 0xE]
-_0811CB68:
- movs r5, 0
- ldr r7, _0811CBA0 @ =gUnknown_03004DE0
- movs r1, 0xA0
- lsls r1, 1
- adds r1, r7
- mov r8, r1
- mov r6, r12
-_0811CB76:
- lsls r0, r5, 1
- adds r3, r0, r7
- mov r1, r8
- adds r4, r0, r1
- movs r0, 0x1
- ands r0, r5
- cmp r0, 0
- beq _0811CBA4
- ldrh r0, [r2, 0xA]
- ldrh r1, [r6, 0x14]
- adds r0, r1
- strh r0, [r3]
- ldrh r1, [r2, 0xA]
- movs r0, 0xF0
- subs r0, r1
- b _0811CBB4
- .align 2, 0
-_0811CB98: .4byte 0x0200c000
-_0811CB9C: .4byte 0x00000fff
-_0811CBA0: .4byte gUnknown_03004DE0
-_0811CBA4:
- ldrh r0, [r6, 0x14]
- ldrh r1, [r2, 0xA]
- subs r0, r1
- strh r0, [r3]
- ldrh r0, [r2, 0xA]
- lsls r0, 8
- movs r1, 0xF1
- orrs r0, r1
-_0811CBB4:
- strh r0, [r4]
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, 0x9F
- bls _0811CB76
- movs r3, 0xA
- ldrsh r0, [r2, r3]
- cmp r0, 0xEF
- ble _0811CBCE
- ldrh r0, [r2, 0x8]
- adds r0, 0x1
- strh r0, [r2, 0x8]
-_0811CBCE:
- mov r1, r12
- ldrb r0, [r1]
- adds r0, 0x1
- ldrb r1, [r1]
- mov r2, r12
- strb r0, [r2]
- movs r0, 0
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_811CB20
-
- thumb_func_start sub_811CBE8
-sub_811CBE8: @ 811CBE8
- push {lr}
- ldr r1, _0811CC18 @ =0x040000b0
- ldrh r2, [r1, 0xA]
- ldr r0, _0811CC1C @ =0x0000c5ff
- ands r0, r2
- strh r0, [r1, 0xA]
- ldrh r2, [r1, 0xA]
- ldr r0, _0811CC20 @ =0x00007fff
- ands r0, r2
- strh r0, [r1, 0xA]
- ldrh r0, [r1, 0xA]
- bl sub_811D6D4
- ldr r0, _0811CC24 @ =sub_811CA5C
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
- movs r0, 0
- pop {r1}
- bx r1
- .align 2, 0
-_0811CC18: .4byte 0x040000b0
-_0811CC1C: .4byte 0x0000c5ff
-_0811CC20: .4byte 0x00007fff
-_0811CC24: .4byte sub_811CA5C
- thumb_func_end sub_811CBE8
-
- thumb_func_start sub_811CC28
-sub_811CC28: @ 811CC28
- push {r4,lr}
- ldr r4, _0811CC84 @ =0x040000b0
- ldrh r1, [r4, 0xA]
- ldr r0, _0811CC88 @ =0x0000c5ff
- ands r0, r1
- strh r0, [r4, 0xA]
- ldrh r1, [r4, 0xA]
- ldr r0, _0811CC8C @ =0x00007fff
- ands r0, r1
- strh r0, [r4, 0xA]
- ldrh r0, [r4, 0xA]
- bl sub_811D67C
- ldr r2, _0811CC90 @ =REG_WININ
- ldr r1, _0811CC94 @ =0x0200c000
- ldrh r0, [r1, 0x2]
- strh r0, [r2]
- adds r2, 0x2
- ldrh r0, [r1, 0x4]
- strh r0, [r2]
- subs r2, 0x6
- ldrh r0, [r1, 0x8]
- strh r0, [r2]
- ldrb r0, [r1]
- cmp r0, 0
- beq _0811CC70
- ldr r1, _0811CC98 @ =0x040000d4
- ldr r0, _0811CC9C @ =gUnknown_03004DE0
- str r0, [r1]
- movs r2, 0xF0
- lsls r2, 3
- adds r0, r2
- str r0, [r1, 0x4]
- ldr r0, _0811CCA0 @ =0x80000140
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
-_0811CC70:
- ldr r0, _0811CCA4 @ =gUnknown_030056A0
- str r0, [r4]
- ldr r0, _0811CCA8 @ =REG_WIN0H
- str r0, [r4, 0x4]
- ldr r0, _0811CCAC @ =0xa2400001
- str r0, [r4, 0x8]
- ldr r0, [r4, 0x8]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0811CC84: .4byte 0x040000b0
-_0811CC88: .4byte 0x0000c5ff
-_0811CC8C: .4byte 0x00007fff
-_0811CC90: .4byte REG_WININ
-_0811CC94: .4byte 0x0200c000
-_0811CC98: .4byte 0x040000d4
-_0811CC9C: .4byte gUnknown_03004DE0
-_0811CCA0: .4byte 0x80000140
-_0811CCA4: .4byte gUnknown_030056A0
-_0811CCA8: .4byte REG_WIN0H
-_0811CCAC: .4byte 0xa2400001
- thumb_func_end sub_811CC28
-
- thumb_func_start sub_811CCB0
-sub_811CCB0: @ 811CCB0
- ldr r1, _0811CCD0 @ =gUnknown_03004DE0
- ldr r0, _0811CCD4 @ =REG_VCOUNT
- ldrh r0, [r0]
- lsls r0, 1
- movs r2, 0xF0
- lsls r2, 3
- adds r1, r2
- adds r0, r1
- ldrh r1, [r0]
- ldr r0, _0811CCD8 @ =REG_BG1HOFS
- strh r1, [r0]
- adds r0, 0x4
- strh r1, [r0]
- adds r0, 0x4
- strh r1, [r0]
- bx lr
- .align 2, 0
-_0811CCD0: .4byte gUnknown_03004DE0
-_0811CCD4: .4byte REG_VCOUNT
-_0811CCD8: .4byte REG_BG1HOFS
- thumb_func_end sub_811CCB0
-
- thumb_func_start sub_811CCDC
-sub_811CCDC: @ 811CCDC
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r5, _0811CD0C @ =gUnknown_083FD8B0
- ldr r2, _0811CD10 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
-_0811CCEE:
- 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 _0811CCEE
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0811CD0C: .4byte gUnknown_083FD8B0
-_0811CD10: .4byte gTasks
- thumb_func_end sub_811CCDC
-
- thumb_func_start sub_811CD14
-sub_811CD14: @ 811CD14
- push {r4,r5,lr}
- adds r5, r0, 0
- bl sub_811D658
- bl dp12_8087EA4
- ldr r1, _0811CD88 @ =0x0200c000
- movs r2, 0
- movs r0, 0xBF
- strh r0, [r1, 0xE]
- strh r2, [r1, 0x12]
- movs r0, 0x1E
- strh r0, [r1, 0x2]
- movs r0, 0x3F
- strh r0, [r1, 0x4]
- movs r0, 0xA0
- strh r0, [r1, 0x8]
- movs r1, 0
- ldr r2, _0811CD8C @ =gUnknown_03005560
- movs r4, 0
- movs r3, 0xF0
-_0811CD3E:
- lsls r0, r1, 1
- adds r0, r2
- strh r4, [r0]
- adds r0, r1, 0
- adds r0, 0xA0
- lsls r0, 1
- adds r0, r2
- strh r3, [r0]
- adds r0, r1, 0x1
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, 0x9F
- bls _0811CD3E
- ldr r2, _0811CD90 @ =0x04000200
- ldrh r0, [r2]
- movs r1, 0x2
- orrs r0, r1
- strh r0, [r2]
- ldr r2, _0811CD94 @ =REG_DISPSTAT
- ldrh r0, [r2]
- movs r1, 0x10
- orrs r0, r1
- strh r0, [r2]
- ldr r0, _0811CD98 @ =sub_811CFAC
- bl SetHBlankCallback
- ldr r0, _0811CD9C @ =sub_811CEE4
- bl SetVBlankCallback
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- strh r0, [r5, 0x8]
- movs r0, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_0811CD88: .4byte 0x0200c000
-_0811CD8C: .4byte gUnknown_03005560
-_0811CD90: .4byte 0x04000200
-_0811CD94: .4byte REG_DISPSTAT
-_0811CD98: .4byte sub_811CFAC
-_0811CD9C: .4byte sub_811CEE4
- thumb_func_end sub_811CD14
-
- thumb_func_start sub_811CDA0
-sub_811CDA0: @ 811CDA0
- push {r4-r6,lr}
- sub sp, 0x10
- adds r6, r0, 0
- ldr r1, _0811CE08 @ =gUnknown_083FD8C4
- mov r0, sp
- movs r2, 0x10
- bl memcpy
- movs r5, 0
- movs r4, 0
-_0811CDB4:
- ldr r0, _0811CE0C @ =sub_811CFD0
- bl CreateInvisibleSprite
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- ldr r0, _0811CE10 @ =gSprites
- adds r2, r1, r0
- movs r0, 0xF0
- strh r0, [r2, 0x20]
- strh r4, [r2, 0x22]
- lsls r1, r5, 16
- asrs r1, 16
- lsls r0, r1, 1
- add r0, sp
- ldrh r0, [r0]
- strh r0, [r2, 0x38]
- adds r1, 0x1
- lsls r1, 16
- lsls r0, r4, 16
- movs r3, 0xA0
- lsls r3, 13
- adds r0, r3
- lsrs r4, r0, 16
- lsrs r5, r1, 16
- asrs r1, 16
- cmp r1, 0x7
- ble _0811CDB4
- ldrh r0, [r2, 0x3A]
- adds r0, 0x1
- strh r0, [r2, 0x3A]
- ldrh r0, [r6, 0x8]
- adds r0, 0x1
- strh r0, [r6, 0x8]
- movs r0, 0
- add sp, 0x10
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_0811CE08: .4byte gUnknown_083FD8C4
-_0811CE0C: .4byte sub_811CFD0
-_0811CE10: .4byte gSprites
- thumb_func_end sub_811CDA0
-
- thumb_func_start sub_811CE14
-sub_811CE14: @ 811CE14
- push {r4,lr}
- adds r4, r0, 0
- ldr r0, _0811CE44 @ =0x0200c000
- ldrb r1, [r0]
- movs r1, 0
- strb r1, [r0]
- movs r1, 0x20
- ldrsh r0, [r0, r1]
- cmp r0, 0x7
- ble _0811CE3A
- movs r0, 0x1
- negs r0, r0
- ldr r2, _0811CE48 @ =0x00007fff
- movs r1, 0x10
- bl BlendPalettes
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
-_0811CE3A:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0811CE44: .4byte 0x0200c000
-_0811CE48: .4byte 0x00007fff
- thumb_func_end sub_811CE14
-
- thumb_func_start sub_811CE4C
-sub_811CE4C: @ 811CE4C
- push {r4-r6,lr}
- adds r6, r0, 0
- ldr r4, _0811CE9C @ =0x0200c000
- ldrb r0, [r4]
- movs r5, 0
- strb r5, [r4]
- ldr r1, _0811CEA0 @ =0x040000b0
- ldrh r2, [r1, 0xA]
- ldr r0, _0811CEA4 @ =0x0000c5ff
- ands r0, r2
- strh r0, [r1, 0xA]
- ldrh r2, [r1, 0xA]
- ldr r0, _0811CEA8 @ =0x00007fff
- ands r0, r2
- strh r0, [r1, 0xA]
- ldrh r0, [r1, 0xA]
- movs r0, 0
- bl SetVBlankCallback
- movs r0, 0
- bl SetHBlankCallback
- movs r0, 0xF0
- strh r0, [r4, 0x6]
- strh r5, [r4, 0x12]
- movs r0, 0xFF
- strh r0, [r4, 0xE]
- movs r0, 0x3F
- strh r0, [r4, 0x2]
- ldr r0, _0811CEAC @ =sub_811CF74
- bl SetVBlankCallback
- ldrh r0, [r6, 0x8]
- adds r0, 0x1
- strh r0, [r6, 0x8]
- movs r0, 0
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_0811CE9C: .4byte 0x0200c000
-_0811CEA0: .4byte 0x040000b0
-_0811CEA4: .4byte 0x0000c5ff
-_0811CEA8: .4byte 0x00007fff
-_0811CEAC: .4byte sub_811CF74
- thumb_func_end sub_811CE4C
-
- thumb_func_start sub_811CEB0
-sub_811CEB0: @ 811CEB0
- push {lr}
- ldr r1, _0811CEDC @ =0x0200c000
- ldrh r0, [r1, 0x12]
- adds r0, 0x1
- strh r0, [r1, 0x12]
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x10
- bls _0811CED4
- bl sub_811D6D4
- ldr r0, _0811CEE0 @ =sub_811CCDC
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_0811CED4:
- movs r0, 0
- pop {r1}
- bx r1
- .align 2, 0
-_0811CEDC: .4byte 0x0200c000
-_0811CEE0: .4byte sub_811CCDC
- thumb_func_end sub_811CEB0
-
- thumb_func_start sub_811CEE4
-sub_811CEE4: @ 811CEE4
- push {r4,lr}
- ldr r4, _0811CF48 @ =0x040000b0
- ldrh r1, [r4, 0xA]
- ldr r0, _0811CF4C @ =0x0000c5ff
- ands r0, r1
- strh r0, [r4, 0xA]
- ldrh r1, [r4, 0xA]
- ldr r0, _0811CF50 @ =0x00007fff
- ands r0, r1
- strh r0, [r4, 0xA]
- ldrh r0, [r4, 0xA]
- bl sub_811D67C
- ldr r2, _0811CF54 @ =REG_BLDCNT
- ldr r1, _0811CF58 @ =0x0200c000
- ldrh r0, [r1, 0xE]
- strh r0, [r2]
- subs r2, 0x8
- ldrh r0, [r1, 0x2]
- strh r0, [r2]
- adds r2, 0x2
- ldrh r0, [r1, 0x4]
- strh r0, [r2]
- subs r2, 0x6
- ldrh r0, [r1, 0x6]
- strh r0, [r2]
- ldrb r0, [r1]
- cmp r0, 0
- beq _0811CF32
- ldr r1, _0811CF5C @ =0x040000d4
- ldr r0, _0811CF60 @ =gUnknown_03004DE0
- str r0, [r1]
- movs r2, 0xF0
- lsls r2, 3
- adds r0, r2
- str r0, [r1, 0x4]
- ldr r0, _0811CF64 @ =0x80000140
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
-_0811CF32:
- ldr r0, _0811CF68 @ =gUnknown_030056A0
- str r0, [r4]
- ldr r0, _0811CF6C @ =REG_WIN0H
- str r0, [r4, 0x4]
- ldr r0, _0811CF70 @ =0xa2400001
- str r0, [r4, 0x8]
- ldr r0, [r4, 0x8]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0811CF48: .4byte 0x040000b0
-_0811CF4C: .4byte 0x0000c5ff
-_0811CF50: .4byte 0x00007fff
-_0811CF54: .4byte REG_BLDCNT
-_0811CF58: .4byte 0x0200c000
-_0811CF5C: .4byte 0x040000d4
-_0811CF60: .4byte gUnknown_03004DE0
-_0811CF64: .4byte 0x80000140
-_0811CF68: .4byte gUnknown_030056A0
-_0811CF6C: .4byte REG_WIN0H
-_0811CF70: .4byte 0xa2400001
- thumb_func_end sub_811CEE4
-
- thumb_func_start sub_811CF74
-sub_811CF74: @ 811CF74
- push {lr}
- bl sub_811D67C
- ldr r1, _0811CFA4 @ =REG_BLDY
- ldr r2, _0811CFA8 @ =0x0200c000
- ldrh r0, [r2, 0x12]
- strh r0, [r1]
- subs r1, 0x4
- ldrh r0, [r2, 0xE]
- strh r0, [r1]
- subs r1, 0x8
- ldrh r0, [r2, 0x2]
- strh r0, [r1]
- adds r1, 0x2
- ldrh r0, [r2, 0x4]
- strh r0, [r1]
- subs r1, 0xA
- ldrh r0, [r2, 0x6]
- strh r0, [r1]
- adds r1, 0x4
- ldrh r0, [r2, 0x8]
- strh r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_0811CFA4: .4byte REG_BLDY
-_0811CFA8: .4byte 0x0200c000
- thumb_func_end sub_811CF74
-
- thumb_func_start sub_811CFAC
-sub_811CFAC: @ 811CFAC
- ldr r2, _0811CFC4 @ =REG_BLDY
- ldr r1, _0811CFC8 @ =gUnknown_03004DE0
- ldr r0, _0811CFCC @ =REG_VCOUNT
- ldrh r0, [r0]
- lsls r0, 1
- movs r3, 0xF0
- lsls r3, 3
- adds r1, r3
- adds r0, r1
- ldrh r0, [r0]
- strh r0, [r2]
- bx lr
- .align 2, 0
-_0811CFC4: .4byte REG_BLDY
-_0811CFC8: .4byte gUnknown_03004DE0
-_0811CFCC: .4byte REG_VCOUNT
- thumb_func_end sub_811CFAC
-
- thumb_func_start sub_811CFD0
-sub_811CFD0: @ 811CFD0
- push {r4-r6,lr}
- adds r3, r0, 0
- ldrh r1, [r3, 0x38]
- movs r2, 0x38
- ldrsh r0, [r3, r2]
- cmp r0, 0
- beq _0811CFF8
- subs r0, r1, 0x1
- strh r0, [r3, 0x38]
- movs r1, 0x3A
- ldrsh r0, [r3, r1]
- cmp r0, 0
- beq _0811D0AA
- ldr r0, _0811CFF4 @ =0x0200c000
- ldrb r1, [r0]
- movs r1, 0x1
- strb r1, [r0]
- b _0811D0AA
- .align 2, 0
-_0811CFF4: .4byte 0x0200c000
-_0811CFF8:
- movs r2, 0x22
- ldrsh r1, [r3, r2]
- lsls r1, 1
- ldr r0, _0811D0B0 @ =gUnknown_03004DE0
- adds r6, r1, r0
- movs r2, 0xA0
- lsls r2, 1
- adds r0, r2
- adds r5, r1, r0
- movs r4, 0
-_0811D00C:
- lsls r1, r4, 1
- adds r2, r1, r6
- ldrh r0, [r3, 0x2E]
- lsls r0, 16
- asrs r0, 24
- strh r0, [r2]
- adds r1, r5
- ldrh r0, [r3, 0x20]
- lsls r0, 24
- lsrs r0, 24
- strh r0, [r1]
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x13
- bls _0811D00C
- movs r1, 0x20
- ldrsh r0, [r3, r1]
- ldrh r2, [r3, 0x20]
- cmp r0, 0
- bne _0811D046
- movs r0, 0x2E
- ldrsh r1, [r3, r0]
- movs r0, 0x80
- lsls r0, 5
- cmp r1, r0
- bne _0811D046
- movs r0, 0x1
- strh r0, [r3, 0x30]
-_0811D046:
- adds r1, r2, 0
- subs r1, 0x10
- strh r1, [r3, 0x20]
- ldrh r0, [r3, 0x2E]
- adds r0, 0x80
- strh r0, [r3, 0x2E]
- lsls r1, 16
- cmp r1, 0
- bge _0811D05C
- movs r0, 0
- strh r0, [r3, 0x20]
-_0811D05C:
- movs r1, 0x2E
- ldrsh r0, [r3, r1]
- movs r1, 0x80
- lsls r1, 5
- cmp r0, r1
- ble _0811D06A
- strh r1, [r3, 0x2E]
-_0811D06A:
- movs r0, 0x3A
- ldrsh r2, [r3, r0]
- cmp r2, 0
- beq _0811D07A
- ldr r0, _0811D0B4 @ =0x0200c000
- ldrb r1, [r0]
- movs r1, 0x1
- strb r1, [r0]
-_0811D07A:
- movs r1, 0x30
- ldrsh r0, [r3, r1]
- cmp r0, 0
- beq _0811D0AA
- ldr r4, _0811D0B4 @ =0x0200c000
- cmp r2, 0
- beq _0811D09E
- movs r2, 0x20
- ldrsh r0, [r4, r2]
- cmp r0, 0x6
- ble _0811D0AA
- ldrh r0, [r3, 0x32]
- adds r1, r0, 0x1
- strh r1, [r3, 0x32]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x7
- ble _0811D0AA
-_0811D09E:
- ldrh r0, [r4, 0x20]
- adds r0, 0x1
- strh r0, [r4, 0x20]
- adds r0, r3, 0
- bl DestroySprite
-_0811D0AA:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0811D0B0: .4byte gUnknown_03004DE0
-_0811D0B4: .4byte 0x0200c000
- thumb_func_end sub_811CFD0
-
- thumb_func_start sub_811D0B8
-sub_811D0B8: @ 811D0B8
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r5, _0811D0E8 @ =gUnknown_083FD8D4
- ldr r2, _0811D0EC @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
-_0811D0CA:
- 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 _0811D0CA
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0811D0E8: .4byte gUnknown_083FD8D4
-_0811D0EC: .4byte gTasks
- thumb_func_end sub_811D0B8
-
- thumb_func_start sub_811D0F0
-sub_811D0F0: @ 811D0F0
- push {r4,lr}
- sub sp, 0xC
- adds r4, r0, 0
- add r0, sp, 0x4
- add r1, sp, 0x8
- bl sub_811D6A8
- ldr r0, _0811D138 @ =gUnknown_083FD528
- ldr r1, [sp, 0x8]
- movs r2, 0x10
- bl CpuSet
- mov r1, sp
- movs r2, 0xF0
- lsls r2, 8
- adds r0, r2, 0
- strh r0, [r1]
- ldr r1, [sp, 0x4]
- ldr r2, _0811D13C @ =0x01000400
- mov r0, sp
- bl CpuSet
- ldr r0, _0811D140 @ =gFieldEffectObjectPalette10
- movs r1, 0xF0
- movs r2, 0x20
- bl LoadPalette
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r0, 0
- add sp, 0xC
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0811D138: .4byte gUnknown_083FD528
-_0811D13C: .4byte 0x01000400
-_0811D140: .4byte gFieldEffectObjectPalette10
- thumb_func_end sub_811D0F0
-
- thumb_func_start sub_811D144
-sub_811D144: @ 811D144
- push {r4,lr}
- sub sp, 0x4
- adds r4, r0, 0
- movs r1, 0xA
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _0811D186
- mov r0, sp
- bl sub_811D690
- movs r0, 0x3
- strh r0, [r4, 0xA]
- ldrh r0, [r4, 0xC]
- adds r0, 0x1
- strh r0, [r4, 0xC]
- movs r1, 0xC
- ldrsh r0, [r4, r1]
- lsls r0, 5
- ldr r1, _0811D198 @ =gUnknown_083FD528
- adds r0, r1
- ldr r1, [sp]
- movs r2, 0x10
- bl CpuSet
- movs r1, 0xC
- ldrsh r0, [r4, r1]
- cmp r0, 0xD
- ble _0811D186
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- movs r0, 0x10
- strh r0, [r4, 0xA]
-_0811D186:
- ldrh r0, [r4, 0xA]
- subs r0, 0x1
- strh r0, [r4, 0xA]
- movs r0, 0
- add sp, 0x4
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0811D198: .4byte gUnknown_083FD528
- thumb_func_end sub_811D144
-
- thumb_func_start sub_811D19C
-sub_811D19C: @ 811D19C
- push {lr}
- ldrh r1, [r0, 0xA]
- subs r1, 0x1
- strh r1, [r0, 0xA]
- lsls r1, 16
- cmp r1, 0
- bne _0811D1BC
- bl sub_811D6D4
- ldr r0, _0811D1C4 @ =sub_811D0B8
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
-_0811D1BC:
- movs r0, 0
- pop {r1}
- bx r1
- .align 2, 0
-_0811D1C4: .4byte sub_811D0B8
- thumb_func_end sub_811D19C
-
- thumb_func_start sub_811D1C8
-sub_811D1C8: @ 811D1C8
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r5, _0811D1F8 @ =gUnknown_083FD8E0
- ldr r2, _0811D1FC @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
-_0811D1DA:
- 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 _0811D1DA
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0811D1F8: .4byte gUnknown_083FD8E0
-_0811D1FC: .4byte gTasks
- thumb_func_end sub_811D1C8
-
- thumb_func_start sub_811D200
-sub_811D200: @ 811D200
- push {r4,r5,lr}
- adds r5, r0, 0
- bl sub_811D658
- bl dp12_8087EA4
- ldr r1, _0811D254 @ =0x0200c000
- movs r2, 0
- movs r0, 0x3F
- strh r0, [r1, 0x2]
- strh r2, [r1, 0x4]
- movs r0, 0xA0
- strh r0, [r1, 0x8]
- movs r1, 0
- ldr r2, _0811D258 @ =gUnknown_03004DE0
- movs r3, 0xF0
- adds r4, r2, 0
-_0811D222:
- lsls r0, r1, 1
- adds r0, r2
- strh r3, [r0]
- adds r0, r1, 0x1
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, 0x9F
- bls _0811D222
- movs r0, 0xF0
- lsls r0, 3
- adds r1, r4, r0
- adds r0, r4, 0
- movs r2, 0xA0
- bl CpuSet
- ldr r0, _0811D25C @ =sub_811D438
- bl SetVBlankCallback
- ldrh r0, [r5, 0x8]
- adds r0, 0x1
- strh r0, [r5, 0x8]
- movs r0, 0x1
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_0811D254: .4byte 0x0200c000
-_0811D258: .4byte gUnknown_03004DE0
-_0811D25C: .4byte sub_811D438
- thumb_func_end sub_811D200
-
- thumb_func_start sub_811D260
-sub_811D260: @ 811D260
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- sub sp, 0xC
- mov r8, r0
- ldr r0, _0811D2D0 @ =0x0200c024
- ldr r6, _0811D2D4 @ =gUnknown_083FD8F4
- mov r2, r8
- movs r3, 0xA
- ldrsh r1, [r2, r3]
- lsls r4, r1, 2
- adds r4, r1
- lsls r4, 1
- adds r1, r4, r6
- movs r5, 0
- ldrsh r1, [r1, r5]
- adds r2, r6, 0x2
- adds r2, r4, r2
- movs r3, 0
- ldrsh r2, [r2, r3]
- adds r3, r6, 0x4
- adds r3, r4, r3
- movs r5, 0
- ldrsh r3, [r3, r5]
- adds r5, r6, 0x6
- adds r4, r5
- movs r5, 0
- ldrsh r4, [r4, r5]
- str r4, [sp]
- movs r4, 0x1
- str r4, [sp, 0x4]
- str r4, [sp, 0x8]
- bl sub_811D8FC
- mov r0, r8
- movs r2, 0xA
- ldrsh r1, [r0, r2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 1
- adds r6, 0x8
- adds r0, r6
- ldrh r0, [r0]
- mov r3, r8
- strh r0, [r3, 0xC]
- ldrh r0, [r3, 0x8]
- adds r0, 0x1
- strh r0, [r3, 0x8]
- movs r0, 0x1
- add sp, 0xC
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_0811D2D0: .4byte 0x0200c024
-_0811D2D4: .4byte gUnknown_083FD8F4
- thumb_func_end sub_811D260
-
- thumb_func_start sub_811D2D8
-sub_811D2D8: @ 811D2D8
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- adds r7, r0, 0
- ldr r0, _0811D324 @ =0x0200c000
- ldrb r1, [r0]
- movs r1, 0
- strb r1, [r0]
- mov r8, r1
- mov r12, r1
- adds r6, r0, 0
- ldr r0, _0811D328 @ =gUnknown_03004DE0
- mov r9, r0
-_0811D2F4:
- ldr r1, _0811D328 @ =gUnknown_03004DE0
- movs r2, 0x2A
- ldrsh r0, [r6, r2]
- lsls r0, 1
- adds r0, r1
- ldrh r0, [r0]
- lsrs r3, r0, 8
- movs r4, 0xFF
- ands r4, r0
- movs r1, 0xC
- ldrsh r0, [r7, r1]
- cmp r0, 0
- bne _0811D32C
- movs r2, 0x28
- ldrsh r0, [r6, r2]
- cmp r3, r0
- bge _0811D318
- ldrh r3, [r6, 0x28]
-_0811D318:
- lsls r0, r3, 16
- lsls r1, r4, 16
- cmp r0, r1
- ble _0811D344
- lsrs r3, r1, 16
- b _0811D344
- .align 2, 0
-_0811D324: .4byte 0x0200c000
-_0811D328: .4byte gUnknown_03004DE0
-_0811D32C:
- lsls r0, r4, 16
- asrs r0, 16
- movs r2, 0x28
- ldrsh r1, [r6, r2]
- cmp r0, r1
- ble _0811D33A
- ldrh r4, [r6, 0x28]
-_0811D33A:
- lsls r0, r4, 16
- lsls r1, r3, 16
- cmp r0, r1
- bgt _0811D344
- lsrs r4, r1, 16
-_0811D344:
- ldr r5, _0811D368 @ =0x0200c000
- movs r0, 0x2A
- ldrsh r2, [r5, r0]
- lsls r2, 1
- add r2, r9
- lsls r1, r3, 16
- asrs r1, 8
- lsls r0, r4, 16
- asrs r0, 16
- orrs r0, r1
- strh r0, [r2]
- mov r1, r12
- cmp r1, 0
- beq _0811D36C
- ldrh r0, [r7, 0x8]
- adds r0, 0x1
- strh r0, [r7, 0x8]
- b _0811D392
- .align 2, 0
-_0811D368: .4byte 0x0200c000
-_0811D36C:
- adds r0, r5, 0
- adds r0, 0x24
- movs r1, 0x1
- movs r2, 0x1
- bl sub_811D978
- lsls r0, 24
- lsrs r0, 24
- mov r12, r0
- mov r2, r8
- lsls r0, r2, 16
- movs r1, 0x80
- lsls r1, 9
- adds r0, r1
- lsrs r2, r0, 16
- mov r8, r2
- asrs r0, 16
- cmp r0, 0xF
- ble _0811D2F4
-_0811D392:
- ldr r0, _0811D3AC @ =0x0200c000
- ldrb r1, [r0]
- adds r1, 0x1
- ldrb r2, [r0]
- strb r1, [r0]
- movs r0, 0
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0811D3AC: .4byte 0x0200c000
- thumb_func_end sub_811D2D8
-
- thumb_func_start sub_811D3B0
-sub_811D3B0: @ 811D3B0
- push {lr}
- adds r2, r0, 0
- ldrh r0, [r2, 0xA]
- adds r0, 0x1
- strh r0, [r2, 0xA]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x6
- ble _0811D3FC
- ldr r1, _0811D3EC @ =0x040000b0
- ldrh r2, [r1, 0xA]
- ldr r0, _0811D3F0 @ =0x0000c5ff
- ands r0, r2
- strh r0, [r1, 0xA]
- ldrh r2, [r1, 0xA]
- ldr r0, _0811D3F4 @ =0x00007fff
- ands r0, r2
- strh r0, [r1, 0xA]
- ldrh r0, [r1, 0xA]
- bl sub_811D6D4
- ldr r0, _0811D3F8 @ =sub_811D1C8
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
- movs r0, 0
- b _0811D414
- .align 2, 0
-_0811D3EC: .4byte 0x040000b0
-_0811D3F0: .4byte 0x0000c5ff
-_0811D3F4: .4byte 0x00007fff
-_0811D3F8: .4byte sub_811D1C8
-_0811D3FC:
- ldrh r0, [r2, 0x8]
- adds r0, 0x1
- strh r0, [r2, 0x8]
- ldr r1, _0811D418 @ =gUnknown_083FD93A
- movs r3, 0xA
- ldrsh r0, [r2, r3]
- subs r0, 0x1
- lsls r0, 1
- adds r0, r1
- ldrh r0, [r0]
- strh r0, [r2, 0xE]
- movs r0, 0x1
-_0811D414:
- pop {r1}
- bx r1
- .align 2, 0
-_0811D418: .4byte gUnknown_083FD93A
- thumb_func_end sub_811D3B0
-
- thumb_func_start sub_811D41C
-sub_811D41C: @ 811D41C
- push {lr}
- adds r1, r0, 0
- ldrh r0, [r1, 0xE]
- subs r0, 0x1
- strh r0, [r1, 0xE]
- lsls r0, 16
- cmp r0, 0
- beq _0811D430
- movs r0, 0
- b _0811D434
-_0811D430:
- movs r0, 0x1
- strh r0, [r1, 0x8]
-_0811D434:
- pop {r1}
- bx r1
- thumb_func_end sub_811D41C
-
- thumb_func_start sub_811D438
-sub_811D438: @ 811D438
- push {r4,lr}
- ldr r4, _0811D4A0 @ =0x040000b0
- ldrh r1, [r4, 0xA]
- ldr r0, _0811D4A4 @ =0x0000c5ff
- ands r0, r1
- strh r0, [r4, 0xA]
- ldrh r1, [r4, 0xA]
- ldr r0, _0811D4A8 @ =0x00007fff
- ands r0, r1
- strh r0, [r4, 0xA]
- ldrh r0, [r4, 0xA]
- bl sub_811D67C
- ldr r2, _0811D4AC @ =0x0200c000
- ldrb r0, [r2]
- cmp r0, 0
- beq _0811D46E
- ldr r1, _0811D4B0 @ =0x040000d4
- ldr r0, _0811D4B4 @ =gUnknown_03004DE0
- str r0, [r1]
- movs r3, 0xF0
- lsls r3, 3
- adds r0, r3
- str r0, [r1, 0x4]
- ldr r0, _0811D4B8 @ =0x800000a0
- str r0, [r1, 0x8]
- ldr r0, [r1, 0x8]
-_0811D46E:
- ldr r1, _0811D4BC @ =REG_WININ
- ldrh r0, [r2, 0x2]
- strh r0, [r1]
- adds r1, 0x2
- ldrh r0, [r2, 0x4]
- strh r0, [r1]
- subs r1, 0x6
- ldrh r0, [r2, 0x8]
- strh r0, [r1]
- ldr r2, _0811D4C0 @ =REG_WIN0H
- ldr r0, _0811D4B4 @ =gUnknown_03004DE0
- movs r1, 0xF0
- lsls r1, 3
- adds r0, r1
- ldrh r1, [r0]
- strh r1, [r2]
- str r0, [r4]
- str r2, [r4, 0x4]
- ldr r0, _0811D4C4 @ =0xa2400001
- str r0, [r4, 0x8]
- ldr r0, [r4, 0x8]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0811D4A0: .4byte 0x040000b0
-_0811D4A4: .4byte 0x0000c5ff
-_0811D4A8: .4byte 0x00007fff
-_0811D4AC: .4byte 0x0200c000
-_0811D4B0: .4byte 0x040000d4
-_0811D4B4: .4byte gUnknown_03004DE0
-_0811D4B8: .4byte 0x800000a0
-_0811D4BC: .4byte REG_WININ
-_0811D4C0: .4byte REG_WIN0H
-_0811D4C4: .4byte 0xa2400001
- thumb_func_end sub_811D438
-
- thumb_func_start sub_811D4C8
-sub_811D4C8: @ 811D4C8
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- sub sp, 0x4
- mov r8, r0
- adds r4, r1, 0
- adds r5, r2, 0
- adds r6, r3, 0
- ldr r3, [sp, 0x18]
- 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
- lsls r3, 16
- lsrs r3, 16
- ldr r0, _0811D524 @ =sub_811D54C
- movs r1, 0x3
- str r3, [sp]
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _0811D528 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- mov r0, r8
- strh r0, [r1, 0xA]
- strh r4, [r1, 0xC]
- strh r5, [r1, 0xE]
- strh r6, [r1, 0x10]
- ldr r3, [sp]
- strh r3, [r1, 0x12]
- strh r0, [r1, 0x14]
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0811D524: .4byte sub_811D54C
-_0811D528: .4byte gTasks
- thumb_func_end sub_811D4C8
-
- thumb_func_start sub_811D52C
-sub_811D52C: @ 811D52C
- push {lr}
- ldr r0, _0811D540 @ =sub_811D54C
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFF
- beq _0811D544
- movs r0, 0
- b _0811D546
- .align 2, 0
-_0811D540: .4byte sub_811D54C
-_0811D544:
- movs r0, 0x1
-_0811D546:
- pop {r1}
- bx r1
- thumb_func_end sub_811D52C
-
- thumb_func_start sub_811D54C
-sub_811D54C: @ 811D54C
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r5, _0811D57C @ =gUnknown_083FD948
- ldr r2, _0811D580 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r4, r1, r2
-_0811D55E:
- 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 _0811D55E
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0811D57C: .4byte gUnknown_083FD948
-_0811D580: .4byte gTasks
- thumb_func_end sub_811D54C
-
- thumb_func_start sub_811D584
-sub_811D584: @ 811D584
- push {r4,lr}
- adds r4, r0, 0
- ldrh r1, [r4, 0x14]
- movs r2, 0x14
- ldrsh r0, [r4, r2]
- cmp r0, 0
- beq _0811D59C
- subs r0, r1, 0x1
- strh r0, [r4, 0x14]
- lsls r0, 16
- cmp r0, 0
- bne _0811D5C0
-_0811D59C:
- ldrh r0, [r4, 0xA]
- strh r0, [r4, 0x14]
- ldrh r0, [r4, 0x10]
- ldrh r1, [r4, 0x16]
- adds r0, r1
- strh r0, [r4, 0x16]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x10
- ble _0811D5B4
- movs r0, 0x10
- strh r0, [r4, 0x16]
-_0811D5B4:
- movs r0, 0x1
- negs r0, r0
- ldrb r1, [r4, 0x16]
- ldr r2, _0811D5DC @ =0x00002d6b
- bl BlendPalettes
-_0811D5C0:
- movs r2, 0x16
- ldrsh r0, [r4, r2]
- cmp r0, 0xF
- ble _0811D5D2
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- ldrh r0, [r4, 0xC]
- strh r0, [r4, 0x14]
-_0811D5D2:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0811D5DC: .4byte 0x00002d6b
- thumb_func_end sub_811D584
-
- thumb_func_start sub_811D5E0
-sub_811D5E0: @ 811D5E0
- push {r4,lr}
- adds r4, r0, 0
- ldrh r1, [r4, 0x14]
- movs r2, 0x14
- ldrsh r0, [r4, r2]
- cmp r0, 0
- beq _0811D5F8
- subs r0, r1, 0x1
- strh r0, [r4, 0x14]
- lsls r0, 16
- cmp r0, 0
- bne _0811D61A
-_0811D5F8:
- ldrh r0, [r4, 0xC]
- strh r0, [r4, 0x14]
- ldrh r0, [r4, 0x16]
- ldrh r1, [r4, 0x12]
- subs r0, r1
- strh r0, [r4, 0x16]
- lsls r0, 16
- cmp r0, 0
- bge _0811D60E
- movs r0, 0
- strh r0, [r4, 0x16]
-_0811D60E:
- movs r0, 0x1
- negs r0, r0
- ldrb r1, [r4, 0x16]
- ldr r2, _0811D640 @ =0x00002d6b
- bl BlendPalettes
-_0811D61A:
- movs r0, 0x16
- ldrsh r1, [r4, r0]
- cmp r1, 0
- bne _0811D64E
- ldrh r0, [r4, 0xE]
- subs r0, 0x1
- strh r0, [r4, 0xE]
- lsls r0, 16
- cmp r0, 0
- bne _0811D648
- ldr r0, _0811D644 @ =sub_811D54C
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
- b _0811D64E
- .align 2, 0
-_0811D640: .4byte 0x00002d6b
-_0811D644: .4byte sub_811D54C
-_0811D648:
- ldrh r0, [r4, 0xA]
- strh r0, [r4, 0x14]
- strh r1, [r4, 0x8]
-_0811D64E:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_811D5E0
-
- thumb_func_start sub_811D658
-sub_811D658: @ 811D658
- push {lr}
- ldr r0, _0811D674 @ =gUnknown_083FD708
- ldr r0, [r0]
- movs r1, 0
- movs r2, 0x3C
- bl memset
- ldr r0, _0811D678 @ =0x0200c014
- adds r1, r0, 0x2
- bl sub_8057B14
- pop {r0}
- bx r0
- .align 2, 0
-_0811D674: .4byte gUnknown_083FD708
-_0811D678: .4byte 0x0200c014
- thumb_func_end sub_811D658
-
- thumb_func_start sub_811D67C
-sub_811D67C: @ 811D67C
- push {lr}
- bl LoadOam
- bl ProcessSpriteCopyRequests
- bl TransferPlttBuffer
- pop {r0}
- bx r0
- thumb_func_end sub_811D67C
-
- thumb_func_start sub_811D690
-sub_811D690: @ 811D690
- ldr r1, _0811D6A4 @ =REG_BG0CNT
- ldrh r1, [r1]
- lsrs r1, 2
- lsls r1, 30
- lsrs r1, 16
- movs r2, 0xC0
- lsls r2, 19
- adds r1, r2
- str r1, [r0]
- bx lr
- .align 2, 0
-_0811D6A4: .4byte REG_BG0CNT
- thumb_func_end sub_811D690
-
- thumb_func_start sub_811D6A8
-sub_811D6A8: @ 811D6A8
- push {r4,lr}
- ldr r3, _0811D6D0 @ =REG_BG0CNT
- ldrh r2, [r3]
- lsrs r2, 8
- ldrh r3, [r3]
- lsrs r3, 2
- lsls r2, 27
- lsrs r2, 16
- lsls r3, 30
- lsrs r3, 16
- movs r4, 0xC0
- lsls r4, 19
- adds r2, r4
- str r2, [r0]
- adds r3, r4
- str r3, [r1]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0811D6D0: .4byte REG_BG0CNT
- thumb_func_end sub_811D6A8
-
- thumb_func_start sub_811D6D4
-sub_811D6D4: @ 811D6D4
- push {lr}
- movs r0, 0x1
- negs r0, r0
- movs r1, 0x10
- movs r2, 0
- bl BlendPalettes
- pop {r0}
- bx r0
- thumb_func_end sub_811D6D4
-
- thumb_func_start sub_811D6E8
-sub_811D6E8: @ 811D6E8
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- mov r10, r0
- ldr r0, [sp, 0x20]
- ldr r4, [sp, 0x24]
- lsls r1, 16
- lsrs r7, r1, 16
- lsls r2, 16
- lsrs r2, 16
- lsls r3, 16
- lsrs r3, 16
- lsls r0, 16
- lsrs r1, r0, 16
- lsls r4, 16
- movs r6, 0
- lsrs r5, r4, 16
- cmp r4, 0
- ble _0811D750
- lsls r0, r7, 16
- asrs r0, 16
- mov r9, r0
- lsls r1, 16
- mov r8, r1
- lsls r0, r3, 16
- asrs r7, r0, 16
-_0811D720:
- lsls r4, r2, 16
- asrs r4, 16
- movs r0, 0xFF
- ands r0, r4
- mov r2, r8
- asrs r1, r2, 16
- bl Sin
- lsls r1, r6, 1
- add r1, r10
- add r0, r9
- strh r0, [r1]
- lsls r1, r5, 16
- ldr r0, _0811D760 @ =0xffff0000
- adds r1, r0
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- adds r4, r7
- lsls r4, 16
- lsrs r2, r4, 16
- lsrs r5, r1, 16
- cmp r1, 0
- bgt _0811D720
-_0811D750:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0811D760: .4byte 0xffff0000
- thumb_func_end sub_811D6E8
-
- thumb_func_start sub_811D764
-sub_811D764: @ 811D764
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x14
- mov r9, r0
- adds r5, r2, 0
- adds r4, r3, 0
- lsls r1, 16
- lsrs r1, 16
- str r1, [sp]
- lsls r5, 16
- lsrs r5, 16
- lsls r4, 16
- lsrs r4, 16
- movs r2, 0xA0
- lsls r2, 1
- movs r1, 0xA
- bl memset
- movs r1, 0
- lsls r4, 16
- asrs r4, 16
- str r4, [sp, 0x4]
- lsls r5, 16
- asrs r5, 16
- str r5, [sp, 0x8]
-_0811D79C:
- lsls r5, r1, 16
- asrs r0, r5, 16
- mov r10, r0
- ldr r1, [sp, 0x4]
- bl Sin
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- mov r0, r10
- ldr r1, [sp, 0x4]
- bl Cos
- ldr r2, [sp]
- lsls r1, r2, 16
- asrs r1, 16
- lsls r4, 16
- asrs r4, 16
- subs r2, r1, r4
- lsls r2, 16
- adds r1, r4
- lsls r1, 16
- lsrs r6, r1, 16
- lsls r0, 16
- asrs r0, 16
- ldr r3, [sp, 0x8]
- subs r1, r3, r0
- lsls r1, 16
- lsrs r7, r1, 16
- adds r0, r3, r0
- lsls r0, 16
- lsrs r0, 16
- mov r8, r0
- lsrs r1, r2, 16
- str r5, [sp, 0x10]
- cmp r2, 0
- bge _0811D7E8
- movs r1, 0
-_0811D7E8:
- lsls r0, r6, 16
- asrs r0, 16
- cmp r0, 0xF0
- ble _0811D7F2
- movs r6, 0xF0
-_0811D7F2:
- lsls r0, r7, 16
- cmp r0, 0
- bge _0811D7FA
- movs r7, 0
-_0811D7FA:
- mov r2, r8
- lsls r0, r2, 16
- asrs r0, 16
- cmp r0, 0x9F
- ble _0811D808
- movs r3, 0x9F
- mov r8, r3
-_0811D808:
- lsls r0, r1, 24
- lsrs r0, 16
- orrs r6, r0
- lsls r0, r7, 16
- asrs r0, 16
- str r0, [sp, 0xC]
- lsls r0, 1
- add r0, r9
- strh r6, [r0]
- mov r0, r8
- lsls r4, r0, 16
- asrs r0, r4, 15
- add r0, r9
- strh r6, [r0]
- mov r0, r10
- adds r0, 0x1
- lsls r0, 16
- asrs r0, 16
- ldr r1, [sp, 0x4]
- bl Cos
- lsls r0, 16
- asrs r0, 16
- ldr r2, [sp, 0x8]
- subs r1, r2, r0
- lsls r1, 16
- adds r0, r2, r0
- lsls r0, 16
- lsrs r2, r0, 16
- lsrs r3, r1, 16
- cmp r1, 0
- bge _0811D84A
- movs r3, 0
-_0811D84A:
- lsls r0, r2, 16
- asrs r0, 16
- cmp r0, 0x9F
- ble _0811D854
- movs r2, 0x9F
-_0811D854:
- lsls r0, r3, 16
- asrs r1, r0, 16
- adds r3, r0, 0
- lsls r5, r2, 16
- ldr r0, [sp, 0xC]
- cmp r0, r1
- ble _0811D878
- adds r2, r1, 0
-_0811D864:
- lsls r1, r7, 16
- ldr r0, _0811D8F8 @ =0xffff0000
- adds r1, r0
- asrs r0, r1, 15
- add r0, r9
- strh r6, [r0]
- lsrs r7, r1, 16
- asrs r1, 16
- cmp r1, r2
- bgt _0811D864
-_0811D878:
- lsls r1, r7, 16
- asrs r0, r3, 16
- cmp r1, r3
- bge _0811D896
- adds r2, r0, 0
-_0811D882:
- movs r3, 0x80
- lsls r3, 9
- adds r0, r1, r3
- asrs r1, r0, 15
- add r1, r9
- strh r6, [r1]
- adds r1, r0, 0
- asrs r0, r1, 16
- cmp r0, r2
- blt _0811D882
-_0811D896:
- asrs r0, r5, 16
- cmp r4, r5
- ble _0811D8B4
- adds r1, r0, 0
-_0811D89E:
- ldr r2, _0811D8F8 @ =0xffff0000
- adds r0, r4, r2
- lsrs r3, r0, 16
- mov r8, r3
- asrs r0, 15
- add r0, r9
- strh r6, [r0]
- lsls r4, r3, 16
- asrs r0, r4, 16
- cmp r0, r1
- bgt _0811D89E
-_0811D8B4:
- mov r0, r8
- lsls r4, r0, 16
- asrs r0, r5, 16
- cmp r4, r5
- bge _0811D8D4
- adds r2, r0, 0
-_0811D8C0:
- movs r1, 0x80
- lsls r1, 9
- adds r0, r4, r1
- asrs r1, r0, 15
- add r1, r9
- strh r6, [r1]
- adds r4, r0, 0
- asrs r0, r4, 16
- cmp r0, r2
- blt _0811D8C0
-_0811D8D4:
- ldr r2, [sp, 0x10]
- movs r3, 0x80
- lsls r3, 9
- adds r0, r2, r3
- lsrs r1, r0, 16
- asrs r0, 16
- cmp r0, 0x3F
- bgt _0811D8E6
- b _0811D79C
-_0811D8E6:
- add sp, 0x14
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0811D8F8: .4byte 0xffff0000
- thumb_func_end sub_811D764
-
- thumb_func_start sub_811D8FC
-sub_811D8FC: @ 811D8FC
- push {r4-r7,lr}
- adds r6, r0, 0
- ldr r0, [sp, 0x14]
- ldr r5, [sp, 0x18]
- ldr r4, [sp, 0x1C]
- lsls r1, 16
- lsrs r1, 16
- lsls r2, 16
- lsrs r2, 16
- lsls r3, 16
- lsrs r3, 16
- lsls r0, 16
- lsrs r0, 16
- adds r7, r0, 0
- lsls r5, 16
- lsrs r5, 16
- lsls r4, 16
- lsrs r4, 16
- strh r1, [r6]
- strh r2, [r6, 0x2]
- strh r1, [r6, 0x4]
- strh r2, [r6, 0x6]
- strh r3, [r6, 0x8]
- strh r7, [r6, 0xA]
- strh r5, [r6, 0xC]
- strh r4, [r6, 0xE]
- lsls r3, 16
- asrs r3, 16
- lsls r1, 16
- asrs r1, 16
- subs r3, r1
- strh r3, [r6, 0x10]
- lsls r0, r3, 16
- cmp r0, 0
- bge _0811D94E
- negs r0, r3
- strh r0, [r6, 0x10]
- lsls r0, r5, 16
- asrs r0, 16
- negs r0, r0
- strh r0, [r6, 0xC]
-_0811D94E:
- lsls r0, r7, 16
- asrs r0, 16
- lsls r1, r2, 16
- asrs r1, 16
- subs r1, r0, r1
- strh r1, [r6, 0x12]
- lsls r0, r1, 16
- cmp r0, 0
- bge _0811D96C
- negs r0, r1
- strh r0, [r6, 0x12]
- lsls r0, r4, 16
- asrs r0, 16
- negs r0, r0
- strh r0, [r6, 0xE]
-_0811D96C:
- movs r0, 0
- strh r0, [r6, 0x14]
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_811D8FC
-
- thumb_func_start sub_811D978
-sub_811D978: @ 811D978
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- adds r3, r0, 0
- lsls r1, 24
- lsrs r1, 24
- mov r9, r1
- lsls r2, 24
- lsrs r2, 24
- mov r10, r2
- ldrh r0, [r3, 0x10]
- mov r8, r0
- movs r1, 0x10
- ldrsh r6, [r3, r1]
- ldrh r2, [r3, 0x12]
- mov r12, r2
- movs r4, 0x12
- ldrsh r5, [r3, r4]
- cmp r6, r5
- ble _0811D9C8
- ldrh r0, [r3, 0xC]
- ldrh r2, [r3, 0x4]
- adds r1, r0, r2
- strh r1, [r3, 0x4]
- ldrh r2, [r3, 0x14]
- add r2, r12
- strh r2, [r3, 0x14]
- lsls r1, r2, 16
- asrs r1, 16
- adds r4, r0, 0
- ldrh r7, [r3, 0xE]
- cmp r1, r6
- ble _0811D9EE
- ldrh r1, [r3, 0x6]
- adds r0, r7, r1
- strh r0, [r3, 0x6]
- mov r1, r8
- b _0811D9EA
-_0811D9C8:
- ldrh r0, [r3, 0xE]
- ldrh r2, [r3, 0x6]
- adds r1, r0, r2
- strh r1, [r3, 0x6]
- ldrh r2, [r3, 0x14]
- add r2, r8
- strh r2, [r3, 0x14]
- lsls r1, r2, 16
- asrs r1, 16
- ldrh r4, [r3, 0xC]
- adds r7, r0, 0
- cmp r1, r5
- ble _0811D9EE
- ldrh r1, [r3, 0x4]
- adds r0, r4, r1
- strh r0, [r3, 0x4]
- mov r1, r12
-_0811D9EA:
- subs r0, r2, r1
- strh r0, [r3, 0x14]
-_0811D9EE:
- movs r5, 0
- lsls r0, r4, 16
- asrs r2, r0, 16
- cmp r2, 0
- ble _0811DA06
- movs r4, 0x4
- ldrsh r1, [r3, r4]
- movs r4, 0x8
- ldrsh r0, [r3, r4]
- ldrh r4, [r3, 0x8]
- cmp r1, r0
- bge _0811DA18
-_0811DA06:
- cmp r2, 0
- bge _0811DA26
- movs r0, 0x4
- ldrsh r1, [r3, r0]
- movs r2, 0x8
- ldrsh r0, [r3, r2]
- ldrh r4, [r3, 0x8]
- cmp r1, r0
- bgt _0811DA26
-_0811DA18:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- mov r0, r9
- cmp r0, 0
- beq _0811DA26
- strh r4, [r3, 0x4]
-_0811DA26:
- lsls r0, r7, 16
- asrs r2, r0, 16
- cmp r2, 0
- ble _0811DA3C
- movs r4, 0x6
- ldrsh r1, [r3, r4]
- movs r4, 0xA
- ldrsh r0, [r3, r4]
- ldrh r4, [r3, 0xA]
- cmp r1, r0
- bge _0811DA4E
-_0811DA3C:
- cmp r2, 0
- bge _0811DA5C
- movs r0, 0x6
- ldrsh r1, [r3, r0]
- movs r2, 0xA
- ldrsh r0, [r3, r2]
- ldrh r4, [r3, 0xA]
- cmp r1, r0
- bgt _0811DA5C
-_0811DA4E:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- mov r0, r10
- cmp r0, 0
- beq _0811DA5C
- strh r4, [r3, 0x6]
-_0811DA5C:
- cmp r5, 0x2
- beq _0811DA64
- movs r0, 0
- b _0811DA66
-_0811DA64:
- movs r0, 0x1
-_0811DA66:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_811D978
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/cable_club.s b/asm/cable_club.s
deleted file mode 100644
index 68804ca21..000000000
--- a/asm/cable_club.s
+++ /dev/null
@@ -1,1671 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "constants/species_constants.inc"
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_8082CD4
-sub_8082CD4: @ 8082CD4
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r1, 24
- lsrs r5, r1, 24
- ldr r4, _08082D10 @ =sub_8082F20
- adds r0, r4, 0
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFF
- bne _08082D08
- adds r0, r4, 0
- movs r1, 0x50
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _08082D14 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- strh r6, [r1, 0xA]
- strh r5, [r1, 0xC]
-_08082D08:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08082D10: .4byte sub_8082F20
-_08082D14: .4byte gTasks
- thumb_func_end sub_8082CD4
-
- thumb_func_start sub_8082D18
-sub_8082D18: @ 8082D18
- push {lr}
- adds r1, r0, 0
- ldr r0, _08082D44 @ =gStringVar1
- movs r2, 0
- movs r3, 0x1
- bl ConvertIntToDecimalStringN
- movs r0, 0x12
- movs r1, 0xA
- movs r2, 0x1C
- movs r3, 0xD
- bl MenuDrawTextWindow
- ldr r0, _08082D48 @ =gOtherText_PLink
- movs r1, 0x13
- movs r2, 0xB
- movs r3, 0x48
- bl sub_8072BD8
- pop {r0}
- bx r0
- .align 2, 0
-_08082D44: .4byte gStringVar1
-_08082D48: .4byte gOtherText_PLink
- thumb_func_end sub_8082D18
-
- thumb_func_start sub_8082D4C
-sub_8082D4C: @ 8082D4C
- push {lr}
- movs r0, 0x12
- movs r1, 0xA
- movs r2, 0x1C
- movs r3, 0xD
- bl MenuZeroFillWindowRect
- pop {r0}
- bx r0
- thumb_func_end sub_8082D4C
-
- thumb_func_start sub_8082D60
-sub_8082D60: @ 8082D60
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r4, r1, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, _08082D88 @ =gTasks + 0x8
- adds r1, r0
- adds r5, r1, 0x6
- movs r2, 0x6
- ldrsh r0, [r1, r2]
- cmp r4, r0
- beq _08082D94
- cmp r4, 0x1
- bhi _08082D8C
- bl sub_8082D4C
- b _08082D92
- .align 2, 0
-_08082D88: .4byte gTasks + 0x8
-_08082D8C:
- adds r0, r4, 0
- bl sub_8082D18
-_08082D92:
- strh r4, [r5]
-_08082D94:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_8082D60
-
- thumb_func_start sub_8082D9C
-sub_8082D9C: @ 8082D9C
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r1, 24
- lsrs r5, r1, 24
- bl GetLinkPlayerDataExchangeStatusTimed
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- beq _08082DEC
- cmp r0, 0x2
- bgt _08082DBC
- cmp r0, 0x1
- beq _08082DC2
- b _08082DEC
-_08082DBC:
- cmp r0, 0x3
- beq _08082DE8
- b _08082DEC
-_08082DC2:
- bl GetLinkPlayerCount_2
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r4, r1
- bgt _08082DD6
- cmp r1, r5
- bgt _08082DD6
- movs r0, 0x1
- b _08082DEE
-_08082DD6:
- ldr r0, _08082DE4 @ =gStringVar1
- movs r2, 0
- movs r3, 0x1
- bl ConvertIntToDecimalStringN
- movs r0, 0x4
- b _08082DEE
- .align 2, 0
-_08082DE4: .4byte gStringVar1
-_08082DE8:
- movs r0, 0x3
- b _08082DEE
-_08082DEC:
- movs r0, 0
-_08082DEE:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_8082D9C
-
- thumb_func_start sub_8082DF4
-sub_8082DF4: @ 8082DF4
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl HasLinkErrorOccurred
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08082E0A
- movs r0, 0
- b _08082E1A
-_08082E0A:
- ldr r0, _08082E20 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _08082E24 @ =sub_8083418
- str r0, [r1]
- movs r0, 0x1
-_08082E1A:
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08082E20: .4byte gTasks
-_08082E24: .4byte sub_8083418
- thumb_func_end sub_8082DF4
-
- thumb_func_start sub_8082E28
-sub_8082E28: @ 8082E28
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _08082E58 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _08082E64
- bl IsLinkConnectionEstablished
- lsls r0, 24
- cmp r0, 0
- bne _08082E64
- ldr r0, _08082E5C @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _08082E60 @ =sub_80833EC
- str r0, [r1]
- movs r0, 0x1
- b _08082E66
- .align 2, 0
-_08082E58: .4byte gMain
-_08082E5C: .4byte gTasks
-_08082E60: .4byte sub_80833EC
-_08082E64:
- movs r0, 0
-_08082E66:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8082E28
-
- thumb_func_start sub_8082E6C
-sub_8082E6C: @ 8082E6C
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl IsLinkConnectionEstablished
- lsls r0, 24
- cmp r0, 0
- beq _08082E82
- movs r0, 0x1
- bl SetSuppressLinkErrorMessage
-_08082E82:
- ldr r0, _08082E94 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- bne _08082E98
- movs r0, 0
- b _08082EA8
- .align 2, 0
-_08082E94: .4byte gMain
-_08082E98:
- ldr r0, _08082EB0 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _08082EB4 @ =sub_80833EC
- str r0, [r1]
- movs r0, 0x1
-_08082EA8:
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08082EB0: .4byte gTasks
-_08082EB4: .4byte sub_80833EC
- thumb_func_end sub_8082E6C
-
- thumb_func_start sub_8082EB8
-sub_8082EB8: @ 8082EB8
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl GetSioMultiSI
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08082ECE
- movs r0, 0
- b _08082EDE
-_08082ECE:
- ldr r0, _08082EE4 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _08082EE8 @ =sub_8083418
- str r0, [r1]
- movs r0, 0x1
-_08082EDE:
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08082EE4: .4byte gTasks
-_08082EE8: .4byte sub_8083418
- thumb_func_end sub_8082EB8
-
- thumb_func_start unref_sub_8082EEC
-unref_sub_8082EEC: @ 8082EEC
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _08082F1C @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- 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, 0xA
- bne _08082F16
- movs r0, 0x2
- bl sub_8007E9C
- adds r0, r4, 0
- bl DestroyTask
-_08082F16:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08082F1C: .4byte gTasks
- thumb_func_end unref_sub_8082EEC
-
- thumb_func_start sub_8082F20
-sub_8082F20: @ 8082F20
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, _08082F48 @ =gTasks + 0x8
- adds r4, r1, r0
- movs r3, 0
- ldrsh r2, [r4, r3]
- cmp r2, 0
- bne _08082F4C
- bl OpenLinkTimed
- bl sub_80082EC
- bl ResetLinkPlayers
- b _08082F58
- .align 2, 0
-_08082F48: .4byte gTasks + 0x8
-_08082F4C:
- cmp r2, 0x9
- ble _08082F58
- subs r0, 0x8
- adds r0, r1, r0
- ldr r1, _08082F64 @ =sub_8082F68
- str r1, [r0]
-_08082F58:
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08082F64: .4byte sub_8082F68
- thumb_func_end sub_8082F20
-
- thumb_func_start sub_8082F68
-sub_8082F68: @ 8082F68
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl GetLinkPlayerCount_2
- lsls r0, 24
- lsrs r5, r0, 24
- adds r0, r4, 0
- bl sub_8082E28
- cmp r0, 0x1
- beq _08082FDC
- adds r0, r4, 0
- bl sub_8082E6C
- cmp r0, 0x1
- beq _08082FDC
- cmp r5, 0x1
- bls _08082FDC
- movs r0, 0x1
- bl SetSuppressLinkErrorMessage
- ldr r1, _08082FC0 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r4, r0, r1
- movs r0, 0
- strh r0, [r4, 0xE]
- bl IsLinkMaster
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08082FCC
- movs r0, 0x15
- bl PlaySE
- ldr r0, _08082FC4 @ =gUnknown_081A4932
- bl ShowFieldAutoScrollMessage
- ldr r0, _08082FC8 @ =sub_8082FEC
- b _08082FDA
- .align 2, 0
-_08082FC0: .4byte gTasks
-_08082FC4: .4byte gUnknown_081A4932
-_08082FC8: .4byte sub_8082FEC
-_08082FCC:
- movs r0, 0x16
- bl PlaySE
- ldr r0, _08082FE4 @ =gUnknown_081A49B6
- bl ShowFieldAutoScrollMessage
- ldr r0, _08082FE8 @ =sub_80831F8
-_08082FDA:
- str r0, [r4]
-_08082FDC:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08082FE4: .4byte gUnknown_081A49B6
-_08082FE8: .4byte sub_80831F8
- thumb_func_end sub_8082F68
-
- thumb_func_start sub_8082FEC
-sub_8082FEC: @ 8082FEC
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- adds r0, r4, 0
- bl sub_8082E28
- cmp r0, 0x1
- beq _0808302C
- adds r0, r4, 0
- bl sub_8082EB8
- cmp r0, 0x1
- beq _0808302C
- adds r0, r4, 0
- bl sub_8082DF4
- cmp r0, 0x1
- beq _0808302C
- bl GetFieldMessageBoxMode
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0
- bne _0808302C
- ldr r0, _08083034 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- strh r2, [r1, 0xE]
- ldr r0, _08083038 @ =sub_808303C
- str r0, [r1]
-_0808302C:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08083034: .4byte gTasks
-_08083038: .4byte sub_808303C
- thumb_func_end sub_8082FEC
-
-.section .text_80830E4
-
-
-
-
-
-
-
-
-
- thumb_func_start sub_80833C4
-sub_80833C4: @ 80833C4
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _080833E8 @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- bne _080833E0
- bl sub_8082D4C
- bl EnableBothScriptContexts
- adds r0, r4, 0
- bl DestroyTask
-_080833E0:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080833E8: .4byte gReceivedRemoteLinkPlayers
- thumb_func_end sub_80833C4
-
- thumb_func_start sub_80833EC
-sub_80833EC: @ 80833EC
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r1, _08083414 @ =gScriptResult
- movs r0, 0x5
- strh r0, [r1]
- bl sub_8082D4C
- bl HideFieldMessageBox
- bl EnableBothScriptContexts
- adds r0, r4, 0
- bl DestroyTask
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08083414: .4byte gScriptResult
- thumb_func_end sub_80833EC
-
- thumb_func_start sub_8083418
-sub_8083418: @ 8083418
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r1, _08083440 @ =gScriptResult
- movs r0, 0x6
- strh r0, [r1]
- bl sub_8082D4C
- bl HideFieldMessageBox
- bl EnableBothScriptContexts
- adds r0, r4, 0
- bl DestroyTask
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08083440: .4byte gScriptResult
- thumb_func_end sub_8083418
-
- thumb_func_start sub_8083444
-sub_8083444: @ 8083444
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _08083468 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r2, r1, r2
- ldrh r0, [r2, 0x10]
- adds r0, 0x1
- strh r0, [r2, 0x10]
- lsls r0, 16
- movs r1, 0x96
- lsls r1, 18
- cmp r0, r1
- bgt _0808346C
- movs r0, 0
- b _08083472
- .align 2, 0
-_08083468: .4byte gTasks
-_0808346C:
- ldr r0, _08083478 @ =sub_8083418
- str r0, [r2]
- movs r0, 0x1
-_08083472:
- pop {r1}
- bx r1
- .align 2, 0
-_08083478: .4byte sub_8083418
- thumb_func_end sub_8083444
-
- thumb_func_start sub_808347C
-sub_808347C: @ 808347C
- push {r4,lr}
- movs r3, 0x2
- movs r2, 0x2
- ldr r0, _08083494 @ =gSpecialVar_0x8004
- ldrh r0, [r0]
- cmp r0, 0x2
- beq _080834B0
- cmp r0, 0x2
- bgt _08083498
- cmp r0, 0x1
- beq _0808349E
- b _080834CC
- .align 2, 0
-_08083494: .4byte gSpecialVar_0x8004
-_08083498:
- cmp r0, 0x5
- beq _080834C0
- b _080834CC
-_0808349E:
- movs r3, 0x2
- ldr r1, _080834A8 @ =gLinkType
- ldr r4, _080834AC @ =0x00002233
- b _080834C8
- .align 2, 0
-_080834A8: .4byte gLinkType
-_080834AC: .4byte 0x00002233
-_080834B0:
- movs r3, 0x2
- ldr r1, _080834B8 @ =gLinkType
- ldr r4, _080834BC @ =0x00002244
- b _080834C8
- .align 2, 0
-_080834B8: .4byte gLinkType
-_080834BC: .4byte 0x00002244
-_080834C0:
- movs r3, 0x4
- movs r2, 0x4
- ldr r1, _080834DC @ =gLinkType
- ldr r4, _080834E0 @ =0x00002255
-_080834C8:
- adds r0, r4, 0
- strh r0, [r1]
-_080834CC:
- adds r0, r3, 0
- adds r1, r2, 0
- bl sub_8082CD4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080834DC: .4byte gLinkType
-_080834E0: .4byte 0x00002255
- thumb_func_end sub_808347C
-
- thumb_func_start sub_80834E4
-sub_80834E4: @ 80834E4
- push {lr}
- ldr r1, _08083500 @ =gLinkType
- ldr r2, _08083504 @ =0x00001133
- adds r0, r2, 0
- strh r0, [r1]
- ldr r1, _08083508 @ =gBattleTypeFlags
- movs r0, 0
- strh r0, [r1]
- movs r0, 0x2
- movs r1, 0x2
- bl sub_8082CD4
- pop {r0}
- bx r0
- .align 2, 0
-_08083500: .4byte gLinkType
-_08083504: .4byte 0x00001133
-_08083508: .4byte gBattleTypeFlags
- thumb_func_end sub_80834E4
-
- thumb_func_start sub_808350C
-sub_808350C: @ 808350C
- push {lr}
- ldr r0, _0808352C @ =gScriptResult
- movs r2, 0
- strh r2, [r0]
- ldr r1, _08083530 @ =gLinkType
- ldr r3, _08083534 @ =0x00003311
- adds r0, r3, 0
- strh r0, [r1]
- ldr r0, _08083538 @ =gBattleTypeFlags
- strh r2, [r0]
- movs r0, 0x2
- movs r1, 0x4
- bl sub_8082CD4
- pop {r0}
- bx r0
- .align 2, 0
-_0808352C: .4byte gScriptResult
-_08083530: .4byte gLinkType
-_08083534: .4byte 0x00003311
-_08083538: .4byte gBattleTypeFlags
- thumb_func_end sub_808350C
-
- thumb_func_start sub_808353C
-sub_808353C: @ 808353C
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r1, _0808355C @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- movs r1, 0x8
- ldrsh r0, [r0, r1]
- cmp r0, 0
- beq _08083560
- cmp r0, 0x1
- beq _080835BC
- b _080835CE
- .align 2, 0
-_0808355C: .4byte gTasks
-_08083560:
- ldr r0, _08083594 @ =gScriptResult
- ldrh r0, [r0]
- cmp r0, 0x1
- bne _08083586
- bl GetLinkPlayerCount
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0
- cmp r1, r0
- bge _08083586
- ldr r2, _08083598 @ =gLinkPlayers
-_08083578:
- ldrh r4, [r2, 0x1A]
- cmp r4, 0x1
- beq _0808359C
- adds r2, 0x1C
- adds r1, 0x1
- cmp r1, r0
- blt _08083578
-_08083586:
- bl EnableBothScriptContexts
- adds r0, r5, 0
- bl DestroyTask
- b _080835CE
- .align 2, 0
-_08083594: .4byte gScriptResult
-_08083598: .4byte gLinkPlayers
-_0808359C:
- ldr r1, _080835B4 @ =gScriptResult
- movs r0, 0x7
- strh r0, [r1]
- bl sub_8008480
- ldr r1, _080835B8 @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- strh r4, [r0, 0x8]
- b _080835CE
- .align 2, 0
-_080835B4: .4byte gScriptResult
-_080835B8: .4byte gTasks
-_080835BC:
- ldr r0, _080835D4 @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- bne _080835CE
- bl EnableBothScriptContexts
- adds r0, r5, 0
- bl DestroyTask
-_080835CE:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080835D4: .4byte gReceivedRemoteLinkPlayers
- thumb_func_end sub_808353C
-
- thumb_func_start sub_80835D8
-sub_80835D8: @ 80835D8
- push {r4,lr}
- ldr r4, _0808360C @ =sub_808353C
- adds r0, r4, 0
- bl FindTaskIdByFunc
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0xFF
- bne _08083604
- adds r0, r4, 0
- movs r1, 0x50
- bl CreateTask
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r1, _08083610 @ =gTasks
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- adds r0, r1
- movs r1, 0
- strh r1, [r0, 0x8]
-_08083604:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808360C: .4byte sub_808353C
-_08083610: .4byte gTasks
- thumb_func_end sub_80835D8
-
- thumb_func_start sub_8083614
-sub_8083614: @ 8083614
- push {lr}
- ldr r1, _08083630 @ =gLinkType
- ldr r2, _08083634 @ =0x00004411
- adds r0, r2, 0
- strh r0, [r1]
- ldr r1, _08083638 @ =gBattleTypeFlags
- movs r0, 0
- strh r0, [r1]
- movs r0, 0x2
- movs r1, 0x4
- bl sub_8082CD4
- pop {r0}
- bx r0
- .align 2, 0
-_08083630: .4byte gLinkType
-_08083634: .4byte 0x00004411
-_08083638: .4byte gBattleTypeFlags
- thumb_func_end sub_8083614
-
- thumb_func_start sub_808363C
-sub_808363C: @ 808363C
- push {lr}
- ldr r1, _08083658 @ =gLinkType
- ldr r2, _0808365C @ =0x00006601
- adds r0, r2, 0
- strh r0, [r1]
- ldr r1, _08083660 @ =gBattleTypeFlags
- movs r0, 0
- strh r0, [r1]
- movs r0, 0x4
- movs r1, 0x4
- bl sub_8082CD4
- pop {r0}
- bx r0
- .align 2, 0
-_08083658: .4byte gLinkType
-_0808365C: .4byte 0x00006601
-_08083660: .4byte gBattleTypeFlags
- thumb_func_end sub_808363C
-
- thumb_func_start sub_8083664
-sub_8083664: @ 8083664
- push {lr}
- ldr r0, _08083678 @ =sub_8083710
- bl FuncIsActiveTask
- lsls r0, 24
- cmp r0, 0
- beq _0808367C
- movs r0, 0xFF
- b _08083700
- .align 2, 0
-_08083678: .4byte sub_8083710
-_0808367C:
- ldr r0, _08083690 @ =gSpecialVar_0x8004
- ldrh r0, [r0]
- subs r0, 0x1
- cmp r0, 0x4
- bhi _080836F4
- lsls r0, 2
- ldr r1, _08083694 @ =_08083698
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08083690: .4byte gSpecialVar_0x8004
-_08083694: .4byte _08083698
- .align 2, 0
-_08083698:
- .4byte _080836AC
- .4byte _080836BC
- .4byte _080836DC
- .4byte _080836EC
- .4byte _080836CC
-_080836AC:
- ldr r1, _080836B4 @ =gLinkType
- ldr r2, _080836B8 @ =0x00002233
- b _080836F0
- .align 2, 0
-_080836B4: .4byte gLinkType
-_080836B8: .4byte 0x00002233
-_080836BC:
- ldr r1, _080836C4 @ =gLinkType
- ldr r2, _080836C8 @ =0x00002244
- b _080836F0
- .align 2, 0
-_080836C4: .4byte gLinkType
-_080836C8: .4byte 0x00002244
-_080836CC:
- ldr r1, _080836D4 @ =gLinkType
- ldr r2, _080836D8 @ =0x00002255
- b _080836F0
- .align 2, 0
-_080836D4: .4byte gLinkType
-_080836D8: .4byte 0x00002255
-_080836DC:
- ldr r1, _080836E4 @ =gLinkType
- ldr r2, _080836E8 @ =0x00001111
- b _080836F0
- .align 2, 0
-_080836E4: .4byte gLinkType
-_080836E8: .4byte 0x00001111
-_080836EC:
- ldr r1, _08083704 @ =gLinkType
- ldr r2, _08083708 @ =0x00003322
-_080836F0:
- adds r0, r2, 0
- strh r0, [r1]
-_080836F4:
- ldr r0, _0808370C @ =sub_8083710
- movs r1, 0x50
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
-_08083700:
- pop {r1}
- bx r1
- .align 2, 0
-_08083704: .4byte gLinkType
-_08083708: .4byte 0x00003322
-_0808370C: .4byte sub_8083710
- thumb_func_end sub_8083664
-
- thumb_func_start sub_8083710
-sub_8083710: @ 8083710
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- ldr r0, _0808373C @ =gTasks + 0x8
- adds r4, r1, r0
- movs r3, 0
- ldrsh r2, [r4, r3]
- cmp r2, 0
- bne _08083744
- bl OpenLink
- bl ResetLinkPlayers
- ldr r0, _08083740 @ =sub_8083C50
- movs r1, 0x50
- bl CreateTask
- b _08083750
- .align 2, 0
-_0808373C: .4byte gTasks + 0x8
-_08083740: .4byte sub_8083C50
-_08083744:
- cmp r2, 0x9
- ble _08083750
- subs r0, 0x8
- adds r0, r1, r0
- ldr r1, _0808375C @ =sub_8083760
- str r1, [r0]
-_08083750:
- ldrh r0, [r4]
- adds r0, 0x1
- strh r0, [r4]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808375C: .4byte sub_8083760
- thumb_func_end sub_8083710
-
- thumb_func_start sub_8083760
-sub_8083760: @ 8083760
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- adds r5, r4, 0
- bl GetLinkPlayerCount_2
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bls _080837A6
- bl IsLinkMaster
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08083798
- ldr r0, _08083790 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _08083794 @ =sub_80837B4
- b _080837A4
- .align 2, 0
-_08083790: .4byte gTasks
-_08083794: .4byte sub_80837B4
-_08083798:
- ldr r0, _080837AC @ =gTasks
- lsls r1, r5, 2
- adds r1, r5
- lsls r1, 3
- adds r1, r0
- ldr r0, _080837B0 @ =sub_80837EC
-_080837A4:
- str r0, [r1]
-_080837A6:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080837AC: .4byte gTasks
-_080837B0: .4byte sub_80837EC
- thumb_func_end sub_8083760
-
- thumb_func_start sub_80837B4
-sub_80837B4: @ 80837B4
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- bl sub_800820C
- adds r4, r0, 0
- bl GetLinkPlayerCount_2
- lsls r4, 24
- lsls r0, 24
- cmp r4, r0
- bne _080837DE
- bl sub_8007F4C
- ldr r0, _080837E4 @ =gTasks
- lsls r1, r5, 2
- adds r1, r5
- lsls r1, 3
- adds r1, r0
- ldr r0, _080837E8 @ =sub_80837EC
- str r0, [r1]
-_080837DE:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080837E4: .4byte gTasks
-_080837E8: .4byte sub_80837EC
- thumb_func_end sub_80837B4
-
- thumb_func_start sub_80837EC
-sub_80837EC: @ 80837EC
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _0808381C @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _08083814
- bl IsLinkPlayerDataExchangeComplete
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08083814
- bl sub_800826C
- bl sub_8007B14
- adds r0, r4, 0
- bl DestroyTask
-_08083814:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808381C: .4byte gReceivedRemoteLinkPlayers
- thumb_func_end sub_80837EC
-
- thumb_func_start sub_8083820
-sub_8083820: @ 8083820
- push {lr}
- bl InitSaveDialog
- pop {r0}
- bx r0
- thumb_func_end sub_8083820
-
- thumb_func_start sub_808382C
-sub_808382C: @ 808382C
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- ldr r1, _08083850 @ =gTasks
- adds r4, r0, r1
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- cmp r0, 0x5
- bls _08083846
- b _08083940
-_08083846:
- lsls r0, 2
- ldr r1, _08083854 @ =_08083858
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08083850: .4byte gTasks
-_08083854: .4byte _08083858
- .align 2, 0
-_08083858:
- .4byte _08083870
- .4byte _08083890
- .4byte _080838A0
- .4byte _080838B0
- .4byte _080838B6
- .4byte _080838CC
-_08083870:
- movs r0, 0x1
- movs r1, 0
- bl fade_screen
- ldr r1, _08083888 @ =gLinkType
- ldr r2, _0808388C @ =0x00002211
- adds r0, r2, 0
- strh r0, [r1]
- bl ClearLinkCallback_2
- b _080838BE
- .align 2, 0
-_08083888: .4byte gLinkType
-_0808388C: .4byte 0x00002211
-_08083890:
- ldr r0, _0808389C @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- b _080838BA
- .align 2, 0
-_0808389C: .4byte gPaletteFade
-_080838A0:
- ldrh r0, [r4, 0xA]
- adds r0, 0x1
- strh r0, [r4, 0xA]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x14
- ble _08083940
- b _080838BE
-_080838B0:
- bl sub_800832C
- b _080838BE
-_080838B6:
- ldr r0, _080838C8 @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
-_080838BA:
- cmp r0, 0
- bne _08083940
-_080838BE:
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- b _08083940
- .align 2, 0
-_080838C8: .4byte gReceivedRemoteLinkPlayers
-_080838CC:
- ldr r0, _080838E4 @ =gLinkPlayers
- ldr r0, [r0, 0x4]
- movs r1, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080838E8
- movs r0, 0xE6
- lsls r0, 1
- bl current_map_music_set__default_for_battle
- b _080838EE
- .align 2, 0
-_080838E4: .4byte gLinkPlayers
-_080838E8:
- ldr r0, _08083900 @ =0x000001cb
- bl current_map_music_set__default_for_battle
-_080838EE:
- ldr r0, _08083904 @ =gSpecialVar_0x8004
- ldrh r0, [r0]
- cmp r0, 0x2
- beq _08083918
- cmp r0, 0x2
- bgt _08083908
- cmp r0, 0x1
- beq _0808390E
- b _0808392E
- .align 2, 0
-_08083900: .4byte 0x000001cb
-_08083904: .4byte gSpecialVar_0x8004
-_08083908:
- cmp r0, 0x5
- beq _08083924
- b _0808392E
-_0808390E:
- ldr r1, _08083914 @ =gBattleTypeFlags
- movs r0, 0xA
- b _0808392C
- .align 2, 0
-_08083914: .4byte gBattleTypeFlags
-_08083918:
- ldr r1, _08083920 @ =gBattleTypeFlags
- movs r0, 0xB
- b _0808392C
- .align 2, 0
-_08083920: .4byte gBattleTypeFlags
-_08083924:
- bl ReducePlayerPartyToThree
- ldr r1, _08083948 @ =gBattleTypeFlags
- movs r0, 0x4B
-_0808392C:
- strh r0, [r1]
-_0808392E:
- ldr r0, _0808394C @ =sub_800E7C4
- bl SetMainCallback2
- ldr r1, _08083950 @ =gMain
- ldr r0, _08083954 @ =sub_8083958
- str r0, [r1, 0x8]
- adds r0, r5, 0
- bl DestroyTask
-_08083940:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08083948: .4byte gBattleTypeFlags
-_0808394C: .4byte sub_800E7C4
-_08083950: .4byte gMain
-_08083954: .4byte sub_8083958
- thumb_func_end sub_808382C
-
- thumb_func_start sub_8083958
-sub_8083958: @ 8083958
- push {lr}
- bl call_map_music_set_to_zero
- bl LoadPlayerParty
- bl SavePlayerBag
- bl sub_810FEFC
- ldr r0, _08083990 @ =gSpecialVar_0x8004
- ldrh r0, [r0]
- cmp r0, 0x5
- beq _0808397E
- ldr r0, _08083994 @ =gUnknown_03004860
- ldrb r1, [r0]
- movs r0, 0x1
- eors r0, r1
- bl UpdateLinkBattleRecords
-_0808397E:
- ldr r0, _08083998 @ =gMain
- ldr r1, _0808399C @ =sub_805465C
- str r1, [r0, 0x8]
- ldr r0, _080839A0 @ =sub_8071B28
- bl SetMainCallback2
- pop {r0}
- bx r0
- .align 2, 0
-_08083990: .4byte gSpecialVar_0x8004
-_08083994: .4byte gUnknown_03004860
-_08083998: .4byte gMain
-_0808399C: .4byte sub_805465C
-_080839A0: .4byte sub_8071B28
- thumb_func_end sub_8083958
-
- thumb_func_start sub_80839A4
-sub_80839A4: @ 80839A4
- push {lr}
- ldr r0, _080839CC @ =gSpecialVar_0x8004
- ldrh r1, [r0]
- subs r0, r1, 0x1
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x1
- bls _080839B8
- cmp r1, 0x5
- bne _080839C0
-_080839B8:
- bl LoadPlayerParty
- bl SavePlayerBag
-_080839C0:
- movs r0, 0x7F
- bl copy_saved_warp2_bank_and_enter_x_to_warp1
- pop {r0}
- bx r0
- .align 2, 0
-_080839CC: .4byte gSpecialVar_0x8004
- thumb_func_end sub_80839A4
-
- thumb_func_start sub_80839D0
-sub_80839D0: @ 80839D0
- push {lr}
- bl sub_805559C
- pop {r0}
- bx r0
- thumb_func_end sub_80839D0
-
- thumb_func_start sub_80839DC
-sub_80839DC: @ 80839DC
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- ldr r1, _08083A00 @ =gTasks
- adds r5, r0, r1
- movs r1, 0x8
- ldrsh r0, [r5, r1]
- cmp r0, 0x1
- beq _08083A20
- cmp r0, 0x1
- bgt _08083A04
- cmp r0, 0
- beq _08083A0E
- b _08083A7E
- .align 2, 0
-_08083A00: .4byte gTasks
-_08083A04:
- cmp r0, 0x2
- beq _08083A40
- cmp r0, 0x3
- beq _08083A68
- b _08083A7E
-_08083A0E:
- ldr r0, _08083A1C @ =gUnknown_081A490C
- bl ShowFieldMessage
- movs r0, 0x1
- strh r0, [r5, 0x8]
- b _08083A7E
- .align 2, 0
-_08083A1C: .4byte gUnknown_081A490C
-_08083A20:
- bl IsFieldMessageBoxHidden
- lsls r0, 24
- cmp r0, 0
- beq _08083A7E
- bl sub_8055574
- ldr r0, _08083A3C @ =gSpecialVar_0x8005
- ldrb r0, [r0]
- bl sub_8007270
- movs r0, 0x2
- strh r0, [r5, 0x8]
- b _08083A7E
- .align 2, 0
-_08083A3C: .4byte gSpecialVar_0x8005
-_08083A40:
- bl sub_80554F8
- cmp r0, 0x1
- beq _08083A52
- cmp r0, 0x1
- ble _08083A7E
- cmp r0, 0x2
- beq _08083A62
- b _08083A7E
-_08083A52:
- bl HideFieldMessageBox
- movs r0, 0
- strh r0, [r5, 0x8]
- adds r0, r4, 0
- bl SwitchTaskToFollowupFunc
- b _08083A7E
-_08083A62:
- movs r0, 0x3
- strh r0, [r5, 0x8]
- b _08083A7E
-_08083A68:
- bl sub_8055588
- bl HideFieldMessageBox
- bl MenuZeroFillScreen
- adds r0, r4, 0
- bl DestroyTask
- bl EnableBothScriptContexts
-_08083A7E:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_80839DC
-
- thumb_func_start sub_8083A84
-sub_8083A84: @ 8083A84
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r4, _08083AA8 @ =sub_80839DC
- 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
- bl ScriptContext1_Stop
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08083AA8: .4byte sub_80839DC
- thumb_func_end sub_8083A84
-
- thumb_func_start sub_8083AAC
-sub_8083AAC: @ 8083AAC
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- ldr r1, _08083AD0 @ =gTasks
- adds r4, r0, r1
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- cmp r0, 0x1
- beq _08083AF0
- cmp r0, 0x1
- bgt _08083AD4
- cmp r0, 0
- beq _08083ADE
- b _08083B34
- .align 2, 0
-_08083AD0: .4byte gTasks
-_08083AD4:
- cmp r0, 0x2
- beq _08083B04
- cmp r0, 0x3
- beq _08083B20
- b _08083B34
-_08083ADE:
- bl ScriptContext2_Enable
- movs r0, 0x1
- movs r1, 0
- bl fade_screen
- bl ClearLinkCallback_2
- b _08083B14
-_08083AF0:
- ldr r0, _08083B00 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08083B34
- b _08083B14
- .align 2, 0
-_08083B00: .4byte gPaletteFade
-_08083B04:
- ldr r1, _08083B1C @ =gUnknown_020297D8
- movs r0, 0
- strb r0, [r1]
- strb r0, [r1, 0x1]
- bl m4aMPlayAllStop
- bl sub_800832C
-_08083B14:
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- b _08083B34
- .align 2, 0
-_08083B1C: .4byte gUnknown_020297D8
-_08083B20:
- ldr r0, _08083B3C @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- bne _08083B34
- ldr r0, _08083B40 @ =sub_8047CD8
- bl SetMainCallback2
- adds r0, r5, 0
- bl DestroyTask
-_08083B34:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08083B3C: .4byte gReceivedRemoteLinkPlayers
-_08083B40: .4byte sub_8047CD8
- thumb_func_end sub_8083AAC
-
- thumb_func_start sub_8083B44
-sub_8083B44: @ 8083B44
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl sub_8083B6C
- adds r0, r4, 0
- bl DestroyTask
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8083B44
-
- thumb_func_start sub_8083B5C
-sub_8083B5C: @ 8083B5C
- push {lr}
- ldr r0, _08083B68 @ =sub_8083B44
- bl sub_8083A84
- pop {r0}
- bx r0
- .align 2, 0
-_08083B68: .4byte sub_8083B44
- thumb_func_end sub_8083B5C
-
- thumb_func_start sub_8083B6C
-sub_8083B6C: @ 8083B6C
- push {lr}
- ldr r0, _08083B7C @ =sub_8083AAC
- movs r1, 0x50
- bl CreateTask
- pop {r0}
- bx r0
- .align 2, 0
-_08083B7C: .4byte sub_8083AAC
- thumb_func_end sub_8083B6C
-
- thumb_func_start sub_8083B80
-sub_8083B80: @ 8083B80
- push {lr}
- bl sub_8083B6C
- bl ScriptContext1_Stop
- pop {r0}
- bx r0
- thumb_func_end sub_8083B80
-
- thumb_func_start sub_8083B90
-sub_8083B90: @ 8083B90
- push {lr}
- ldr r0, _08083BA4 @ =gLinkType
- ldr r2, _08083BA8 @ =0x00002211
- adds r1, r2, 0
- strh r1, [r0]
- ldr r0, _08083BAC @ =sub_808382C
- bl sub_8083A84
- pop {r0}
- bx r0
- .align 2, 0
-_08083BA4: .4byte gLinkType
-_08083BA8: .4byte 0x00002211
-_08083BAC: .4byte sub_808382C
- thumb_func_end sub_8083B90
-
- thumb_func_start unref_sub_8083BB0
-unref_sub_8083BB0: @ 8083BB0
- push {r4,lr}
- ldr r4, _08083BD4 @ =sub_80839DC
- adds r0, r4, 0
- movs r1, 0x50
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _08083BD8 @ =Task_RecordMixing_Main
- adds r1, r4, 0
- bl SetTaskFuncWithFollowupFunc
- bl ScriptContext1_Stop
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08083BD4: .4byte sub_80839DC
-_08083BD8: .4byte Task_RecordMixing_Main
- thumb_func_end unref_sub_8083BB0
-
- thumb_func_start sub_8083BDC
-sub_8083BDC: @ 8083BDC
- push {lr}
- ldr r0, _08083BEC @ =gSpecialVar_0x8006
- ldrb r0, [r0]
- ldr r1, _08083BF0 @ =c2_exit_to_overworld_1_continue_scripts_restart_music
- bl sub_8093130
- pop {r0}
- bx r0
- .align 2, 0
-_08083BEC: .4byte gSpecialVar_0x8006
-_08083BF0: .4byte c2_exit_to_overworld_1_continue_scripts_restart_music
- thumb_func_end sub_8083BDC
-
- thumb_func_start sub_8083BF4
-sub_8083BF4: @ 8083BF4
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, _08083C34 @ =gSpecialVar_0x8006
- strh r4, [r0]
- ldr r0, _08083C38 @ =gStringVar1
- lsls r1, r4, 3
- subs r1, r4
- lsls r1, 2
- ldr r2, _08083C3C @ =gLinkPlayers + 0x8
- adds r1, r2
- bl StringCopy
- adds r0, r4, 0
- bl sub_80934C4
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0
- beq _08083C48
- ldr r0, _08083C40 @ =gStringVar2
- ldr r2, _08083C44 @ =gTrainerCardColorNames
- subs r1, 0x1
- lsls r1, 2
- adds r1, r2
- ldr r1, [r1]
- bl StringCopy
- movs r0, 0x1
- b _08083C4A
- .align 2, 0
-_08083C34: .4byte gSpecialVar_0x8006
-_08083C38: .4byte gStringVar1
-_08083C3C: .4byte gLinkPlayers + 0x8
-_08083C40: .4byte gStringVar2
-_08083C44: .4byte gTrainerCardColorNames
-_08083C48:
- movs r0, 0
-_08083C4A:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_8083BF4
-
- thumb_func_start sub_8083C50
-sub_8083C50: @ 8083C50
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- adds r5, r4, 0
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- ldr r1, _08083C98 @ =gTasks
- adds r0, r1
- ldrh r1, [r0, 0x8]
- adds r1, 0x1
- strh r1, [r0, 0x8]
- lsls r1, 16
- movs r0, 0x96
- lsls r0, 17
- cmp r1, r0
- ble _08083C82
- bl CloseLink
- ldr r0, _08083C9C @ =CB2_LinkError
- bl SetMainCallback2
- adds r0, r4, 0
- bl DestroyTask
-_08083C82:
- ldr r0, _08083CA0 @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- beq _08083C90
- adds r0, r5, 0
- bl DestroyTask
-_08083C90:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08083C98: .4byte gTasks
-_08083C9C: .4byte CB2_LinkError
-_08083CA0: .4byte gReceivedRemoteLinkPlayers
- thumb_func_end sub_8083C50
-
- thumb_func_start sub_8083CA4
-sub_8083CA4: @ 8083CA4
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _08083CC4 @ =gReceivedRemoteLinkPlayers
- ldrb r0, [r0]
- cmp r0, 0
- bne _08083CBC
- bl EnableBothScriptContexts
- adds r0, r4, 0
- bl DestroyTask
-_08083CBC:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08083CC4: .4byte gReceivedRemoteLinkPlayers
- thumb_func_end sub_8083CA4
-
- thumb_func_start unref_sub_8083CC8
-unref_sub_8083CC8: @ 8083CC8
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl sub_800832C
- ldr r1, _08083CE8 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _08083CEC @ =sub_8083CA4
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08083CE8: .4byte gTasks
-_08083CEC: .4byte sub_8083CA4
- thumb_func_end unref_sub_8083CC8
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/cute_sketch.s b/asm/cute_sketch.s
index afacc19f6..14c28327d 100644
--- a/asm/cute_sketch.s
+++ b/asm/cute_sketch.s
@@ -6,445 +6,6 @@
.text
- thumb_func_start sub_80FC7A0
-sub_80FC7A0: @ 80FC7A0
- push {lr}
- ldr r2, _080FC7E8 @ =gUnknown_03005DEC
- ldr r1, [r0, 0x4]
- str r1, [r2]
- ldr r2, _080FC7EC @ =gUnknown_03005E00
- ldrb r1, [r0, 0x1F]
- strb r1, [r2]
- ldr r2, _080FC7F0 @ =gUnknown_03005DE8
- ldrb r1, [r0, 0x19]
- strb r1, [r2]
- ldr r2, _080FC7F4 @ =gUnknown_03005DFC
- ldrb r1, [r0, 0x1A]
- strb r1, [r2]
- ldr r2, _080FC7F8 @ =gUnknown_03005DF8
- ldrb r1, [r0, 0x1B]
- strb r1, [r2]
- ldr r2, _080FC7FC @ =gUnknown_03005DF0
- ldrb r1, [r0, 0x1C]
- strb r1, [r2]
- ldr r2, _080FC800 @ =gUnknown_03005E04
- ldrb r1, [r0, 0x1D]
- strb r1, [r2]
- ldr r2, _080FC804 @ =gUnknown_03005DF4
- ldrb r1, [r0, 0x1E]
- strb r1, [r2]
- ldrb r0, [r0]
- subs r0, 0x2
- cmp r0, 0x22
- bls _080FC7DC
- b _080FC928
-_080FC7DC:
- lsls r0, 2
- ldr r1, _080FC808 @ =_080FC80C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080FC7E8: .4byte gUnknown_03005DEC
-_080FC7EC: .4byte gUnknown_03005E00
-_080FC7F0: .4byte gUnknown_03005DE8
-_080FC7F4: .4byte gUnknown_03005DFC
-_080FC7F8: .4byte gUnknown_03005DF8
-_080FC7FC: .4byte gUnknown_03005DF0
-_080FC800: .4byte gUnknown_03005E04
-_080FC804: .4byte gUnknown_03005DF4
-_080FC808: .4byte _080FC80C
- .align 2, 0
-_080FC80C:
- .4byte _080FC898
- .4byte _080FC928
- .4byte _080FC928
- .4byte _080FC928
- .4byte _080FC8F8
- .4byte _080FC928
- .4byte _080FC89E
- .4byte _080FC8A4
- .4byte _080FC8B8
- .4byte _080FC8CA
- .4byte _080FC928
- .4byte _080FC8E0
- .4byte _080FC928
- .4byte _080FC928
- .4byte _080FC928
- .4byte _080FC928
- .4byte _080FC928
- .4byte _080FC928
- .4byte _080FC928
- .4byte _080FC928
- .4byte _080FC928
- .4byte _080FC928
- .4byte _080FC928
- .4byte _080FC928
- .4byte _080FC928
- .4byte _080FC928
- .4byte _080FC928
- .4byte _080FC928
- .4byte _080FC8E6
- .4byte _080FC8C4
- .4byte _080FC8EC
- .4byte _080FC8F2
- .4byte _080FC928
- .4byte _080FC928
- .4byte _080FC904
-_080FC898:
- bl sub_80FCAA4
- b _080FC928
-_080FC89E:
- bl sub_80FCB5C
- b _080FC928
-_080FC8A4:
- bl sub_80FCD54
- ldr r0, _080FC8B4 @ =gUnknown_03005E00
- ldrb r0, [r0]
- bl sub_80FCC18
- b _080FC928
- .align 2, 0
-_080FC8B4: .4byte gUnknown_03005E00
-_080FC8B8:
- bl sub_80FCD54
- bl sub_80FCEA4
- bl sub_80FCCBC
-_080FC8C4:
- bl sub_80FCEA4
- b _080FC928
-_080FC8CA:
- bl sub_80FCD54
- bl sub_80FD06C
- bl sub_80FD06C
- bl sub_80FD114
- bl sub_80FCCBC
- b _080FC928
-_080FC8E0:
- bl sub_80FCF3C
- b _080FC928
-_080FC8E6:
- bl sub_80FCD54
- b _080FC928
-_080FC8EC:
- bl sub_80FD06C
- b _080FC928
-_080FC8F2:
- bl sub_80FD114
- b _080FC928
-_080FC8F8:
- bl sub_80FCAC4
- movs r0, 0x3
- bl sub_80FC92C
- b _080FC928
-_080FC904:
- bl sub_80FCD54
- bl sub_80FD06C
- bl sub_80FD114
- bl sub_80FCCBC
- bl sub_80FCB5C
- bl sub_80FCB5C
- movs r0, 0x2
- bl sub_80FC92C
- movs r0, 0x4
- bl sub_80FC9E4
-_080FC928:
- pop {r0}
- bx r0
- thumb_func_end sub_80FC7A0
-
- thumb_func_start sub_80FC92C
-sub_80FC92C: @ 80FC92C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- lsls r0, 24
- lsrs r7, r0, 24
- movs r2, 0
- ldr r0, _080FC9CC @ =gUnknown_03005DF0
- mov r8, r0
- ldrb r0, [r0]
- cmp r2, r0
- bcs _080FC9BE
- ldr r1, _080FC9D0 @ =gUnknown_03005DF8
- mov r12, r1
- ldr r3, _080FC9D4 @ =gUnknown_03005E04
- mov r10, r3
- ldr r0, _080FC9D8 @ =gUnknown_03005DE8
- mov r9, r0
-_080FC952:
- ldr r1, _080FC9DC @ =gUnknown_03005DFC
- ldrb r0, [r1]
- adds r0, r2
- mov r3, r10
- ldrb r1, [r3]
- muls r0, r1
- lsls r0, 1
- ldr r3, _080FC9E0 @ =gUnknown_03005DEC
- ldr r1, [r3]
- adds r1, r0
- mov r3, r9
- ldrb r0, [r3]
- lsls r0, 1
- adds r3, r1, r0
- movs r4, 0
- adds r5, r2, 0x1
- mov r0, r12
- ldrb r0, [r0]
- cmp r4, r0
- bcs _080FC9B2
- movs r6, 0x80
- lsls r6, 8
-_080FC97E:
- ldrh r1, [r3]
- adds r0, r6, 0
- ands r0, r1
- cmp r0, 0
- bne _080FC9A2
- movs r0, 0x1F
- ands r0, r1
- adds r0, r7
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x1F
- bls _080FC998
- movs r2, 0x1F
-_080FC998:
- lsls r0, r2, 10
- lsls r1, r2, 5
- orrs r0, r1
- orrs r0, r2
- strh r0, [r3]
-_080FC9A2:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- adds r3, 0x2
- mov r1, r12
- ldrb r1, [r1]
- cmp r4, r1
- bcc _080FC97E
-_080FC9B2:
- lsls r0, r5, 24
- lsrs r2, r0, 24
- mov r3, r8
- ldrb r3, [r3]
- cmp r2, r3
- bcc _080FC952
-_080FC9BE:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080FC9CC: .4byte gUnknown_03005DF0
-_080FC9D0: .4byte gUnknown_03005DF8
-_080FC9D4: .4byte gUnknown_03005E04
-_080FC9D8: .4byte gUnknown_03005DE8
-_080FC9DC: .4byte gUnknown_03005DFC
-_080FC9E0: .4byte gUnknown_03005DEC
- thumb_func_end sub_80FC92C
-
- thumb_func_start sub_80FC9E4
-sub_80FC9E4: @ 80FC9E4
- 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
- movs r2, 0
- ldr r0, _080FCA8C @ =gUnknown_03005DF0
- ldrb r0, [r0]
- cmp r2, r0
- bcs _080FCA7C
- ldr r1, _080FCA90 @ =gUnknown_03005DF8
- mov r10, r1
-_080FCA02:
- ldr r3, _080FCA94 @ =gUnknown_03005DFC
- ldrb r0, [r3]
- adds r0, r2
- ldr r3, _080FCA98 @ =gUnknown_03005E04
- ldrb r1, [r3]
- muls r0, r1
- lsls r0, 1
- ldr r3, _080FCA9C @ =gUnknown_03005DEC
- ldr r1, [r3]
- adds r1, r0
- ldr r3, _080FCAA0 @ =gUnknown_03005DE8
- ldrb r0, [r3]
- lsls r0, 1
- adds r3, r1, r0
- movs r5, 0
- adds r7, r2, 0x1
- mov r0, r10
- ldrb r0, [r0]
- cmp r5, r0
- bcs _080FCA70
- movs r1, 0x80
- lsls r1, 8
- mov r9, r1
- movs r0, 0x1F
- mov r12, r0
- mov r1, r8
- subs r6, r0, r1
-_080FCA38:
- ldrh r1, [r3]
- mov r0, r9
- ands r0, r1
- cmp r0, 0
- bne _080FCA60
- movs r4, 0x1F
- mov r2, r12
- ands r2, r1
- cmp r2, r6
- ble _080FCA56
- mov r1, r8
- lsrs r0, r1, 1
- subs r0, r4, r0
- lsls r0, 24
- lsrs r2, r0, 24
-_080FCA56:
- lsls r0, r2, 10
- lsls r1, r2, 5
- orrs r0, r1
- orrs r0, r2
- strh r0, [r3]
-_080FCA60:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- adds r3, 0x2
- mov r0, r10
- ldrb r0, [r0]
- cmp r5, r0
- bcc _080FCA38
-_080FCA70:
- lsls r0, r7, 24
- lsrs r2, r0, 24
- ldr r1, _080FCA8C @ =gUnknown_03005DF0
- ldrb r1, [r1]
- cmp r2, r1
- bcc _080FCA02
-_080FCA7C:
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080FCA8C: .4byte gUnknown_03005DF0
-_080FCA90: .4byte gUnknown_03005DF8
-_080FCA94: .4byte gUnknown_03005DFC
-_080FCA98: .4byte gUnknown_03005E04
-_080FCA9C: .4byte gUnknown_03005DEC
-_080FCAA0: .4byte gUnknown_03005DE8
- thumb_func_end sub_80FC9E4
-
- thumb_func_start sub_80FCAA4
-sub_80FCAA4: @ 80FCAA4
- push {r4,r5,lr}
- movs r4, 0
- ldr r5, _080FCAC0 @ =0x00000c7f
-_080FCAAA:
- lsls r0, r4, 16
- lsrs r0, 16
- bl sub_80FD1C8
- adds r4, 0x1
- cmp r4, r5
- bls _080FCAAA
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080FCAC0: .4byte 0x00000c7f
- thumb_func_end sub_80FCAA4
-
- thumb_func_start sub_80FCAC4
-sub_80FCAC4: @ 80FCAC4
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- movs r2, 0
- ldr r0, _080FCB44 @ =gUnknown_03005DF0
- ldrb r0, [r0]
- cmp r2, r0
- bcs _080FCB36
- ldr r0, _080FCB48 @ =gUnknown_03005DEC
- mov r8, r0
- ldr r3, _080FCB4C @ =gUnknown_03005DF8
-_080FCADC:
- ldr r0, _080FCB50 @ =gUnknown_03005DFC
- ldrb r1, [r0]
- adds r1, r2
- ldr r0, _080FCB54 @ =gUnknown_03005E04
- ldrb r0, [r0]
- muls r0, r1
- lsls r0, 1
- mov r4, r8
- ldr r1, [r4]
- adds r1, r0
- ldr r0, _080FCB58 @ =gUnknown_03005DE8
- ldrb r0, [r0]
- lsls r0, 1
- adds r4, r1, r0
- movs r5, 0
- adds r6, r2, 0x1
- ldrb r0, [r3]
- cmp r5, r0
- bcs _080FCB2A
- movs r0, 0x80
- lsls r0, 8
- adds r7, r0, 0
-_080FCB08:
- ldrh r0, [r4]
- ands r0, r7
- cmp r0, 0
- bne _080FCB1C
- adds r0, r4, 0
- str r3, [sp]
- bl sub_80FD39C
- strh r0, [r4]
- ldr r3, [sp]
-_080FCB1C:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- adds r4, 0x2
- ldrb r0, [r3]
- cmp r5, r0
- bcc _080FCB08
-_080FCB2A:
- lsls r0, r6, 24
- lsrs r2, r0, 24
- ldr r0, _080FCB44 @ =gUnknown_03005DF0
- ldrb r0, [r0]
- cmp r2, r0
- bcc _080FCADC
-_080FCB36:
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080FCB44: .4byte gUnknown_03005DF0
-_080FCB48: .4byte gUnknown_03005DEC
-_080FCB4C: .4byte gUnknown_03005DF8
-_080FCB50: .4byte gUnknown_03005DFC
-_080FCB54: .4byte gUnknown_03005E04
-_080FCB58: .4byte gUnknown_03005DE8
- thumb_func_end sub_80FCAC4
thumb_func_start sub_80FCB5C
sub_80FCB5C: @ 80FCB5C
diff --git a/asm/daycare.s b/asm/daycare.s
deleted file mode 100644
index a0ea9124a..000000000
--- a/asm/daycare.s
+++ /dev/null
@@ -1,2399 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "constants/species_constants.inc"
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_80416A0
-sub_80416A0: @ 80416A0
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- adds r5, r0, 0
- lsls r4, r1, 24
- lsrs r4, 24
- lsls r0, r4, 2
- mov r8, r0
- add r4, r8
- lsls r4, 4
- adds r4, r5, r4
- adds r0, r4, 0
- bl GetLevelFromBoxMonExp
- adds r6, r0, 0
- lsls r6, 24
- lsrs r6, 24
- movs r0, 0x88
- lsls r0, 1
- adds r5, r0
- add r5, r8
- ldr r1, [r5]
- adds r0, r4, 0
- bl Daycare_GetLevelAfterSteps
- lsls r0, 24
- lsrs r0, 24
- subs r0, r6
- lsls r0, 24
- lsrs r0, 24
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_80416A0
-
- thumb_func_start sub_80416E8
-sub_80416E8: @ 80416E8
- push {r4-r6,lr}
- adds r6, r0, 0
- lsls r4, r1, 24
- lsrs r4, 24
- adds r1, r4, 0
- bl sub_80416A0
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 4
- adds r6, r0
- ldr r1, _08041720 @ =gStringVar1
- adds r0, r6, 0
- bl GetBoxMonNick
- ldr r0, _08041724 @ =gStringVar2
- adds r1, r5, 0
- movs r2, 0
- movs r3, 0x2
- bl ConvertIntToDecimalStringN
- adds r0, r5, 0
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_08041720: .4byte gStringVar1
-_08041724: .4byte gStringVar2
- thumb_func_end sub_80416E8
-
- thumb_func_start sub_8041728
-sub_8041728: @ 8041728
- push {r4-r6,lr}
- adds r6, r0, 0
- lsls r4, r1, 24
- lsrs r4, 24
- adds r1, r4, 0
- bl sub_80416A0
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 4
- adds r6, r0
- ldr r1, _08041768 @ =gStringVar1
- adds r0, r6, 0
- bl GetBoxMonNick
- movs r0, 0x64
- adds r4, r5, 0
- muls r4, r0
- adds r4, 0x64
- ldr r0, _0804176C @ =gStringVar2
- adds r1, r4, 0
- movs r2, 0
- movs r3, 0x5
- bl ConvertIntToDecimalStringN
- adds r0, r4, 0
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_08041768: .4byte gStringVar1
-_0804176C: .4byte gStringVar2
- thumb_func_end sub_8041728
-
- thumb_func_start sub_8041770
-sub_8041770: @ 8041770
- push {lr}
- ldr r0, _08041784 @ =gSaveBlock1 + 0x2F9C
- ldr r1, _08041788 @ =gSpecialVar_0x8004
- ldrb r1, [r1]
- bl sub_8041728
- ldr r1, _0804178C @ =gSpecialVar_0x8005
- strh r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_08041784: .4byte gSaveBlock1 + 0x2F9C
-_08041788: .4byte gSpecialVar_0x8004
-_0804178C: .4byte gSpecialVar_0x8005
- thumb_func_end sub_8041770
-
- thumb_func_start sub_8041790
-sub_8041790: @ 8041790
- lsls r0, 16
- lsrs r0, 16
- ldr r2, _080417AC @ =gSaveBlock1
- ldr r1, _080417B0 @ =0x000030ac
- adds r3, r2, r1
- ldr r1, [r3]
- adds r1, r0
- str r1, [r3]
- ldr r1, _080417B4 @ =0x000030b0
- adds r2, r1
- ldr r1, [r2]
- adds r1, r0
- str r1, [r2]
- bx lr
- .align 2, 0
-_080417AC: .4byte gSaveBlock1
-_080417B0: .4byte 0x000030ac
-_080417B4: .4byte 0x000030b0
- thumb_func_end sub_8041790
-
- thumb_func_start sub_80417B8
-sub_80417B8: @ 80417B8
- push {r4,r5,lr}
- ldr r5, _080417D8 @ =gSpecialVar_0x8004
- ldrh r1, [r5]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 4
- ldr r4, _080417DC @ =gSaveBlock1 + 0x2F9C
- adds r0, r4
- movs r1, 0xB
- bl GetBoxMonData
- cmp r0, 0
- bne _080417E0
- movs r0, 0
- b _080417EC
- .align 2, 0
-_080417D8: .4byte gSpecialVar_0x8004
-_080417DC: .4byte gSaveBlock1 + 0x2F9C
-_080417E0:
- ldrb r1, [r5]
- adds r0, r4, 0
- bl sub_80416E8
- lsls r0, 24
- lsrs r0, 24
-_080417EC:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_80417B8
-
- thumb_func_start sub_80417F4
-sub_80417F4: @ 80417F4
- push {lr}
- movs r3, 0
- movs r2, 0x7
- adds r1, r0, 0
- adds r1, 0x2B
-_080417FE:
- strb r3, [r1]
- subs r1, 0x1
- subs r2, 0x1
- cmp r2, 0
- bge _080417FE
- adds r2, r0, 0
- adds r2, 0x2C
- movs r3, 0
- adds r1, r0, 0
- adds r1, 0x36
-_08041812:
- strb r3, [r1]
- subs r1, 0x1
- cmp r1, r2
- bge _08041812
- bl ClearMailStruct
- pop {r0}
- bx r0
- thumb_func_end sub_80417F4
-
- thumb_func_start unref_sub_8041824
-unref_sub_8041824: @ 8041824
- push {r4-r6,lr}
- adds r6, r0, 0
- movs r5, 0
-_0804182A:
- lsls r4, r5, 2
- adds r0, r4, r5
- lsls r0, 4
- adds r0, r6, r0
- bl ZeroBoxMonData
- movs r1, 0x88
- lsls r1, 1
- adds r0, r6, r1
- adds r0, r4
- movs r4, 0
- str r4, [r0]
- lsls r0, r5, 3
- subs r0, r5
- lsls r0, 3
- adds r0, 0xA0
- adds r0, r6, r0
- bl sub_80417F4
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x1
- bls _0804182A
- movs r2, 0x8C
- lsls r2, 1
- adds r0, r6, r2
- movs r1, 0
- strh r4, [r0]
- adds r2, 0x2
- adds r0, r6, r2
- strb r1, [r0]
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end unref_sub_8041824
-
- thumb_func_start sub_8041870
-sub_8041870: @ 8041870
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r0, 16
- lsrs r2, r0, 16
- movs r0, 0
- mov r8, r0
- ldr r0, _0804189C @ =gEvolutionTable
- mov r12, r0
-_08041882:
- movs r7, 0
- movs r6, 0x1
- movs r4, 0x80
- lsls r4, 9
- movs r5, 0x28
- mov r3, r12
- adds r3, 0x28
-_08041890:
- movs r1, 0
- ldrh r0, [r3, 0x4]
- cmp r0, r2
- bne _080418A0
- lsrs r2, r4, 16
- b _080418CC
- .align 2, 0
-_0804189C: .4byte gEvolutionTable
-_080418A0:
- adds r1, 0x1
- cmp r1, 0x4
- bgt _080418B6
- lsls r0, r1, 3
- adds r0, r5
- add r0, r12
- ldrh r0, [r0, 0x4]
- cmp r0, r2
- bne _080418A0
- lsrs r2, r4, 16
- movs r7, 0x1
-_080418B6:
- cmp r7, 0
- bne _080418CC
- movs r0, 0x80
- lsls r0, 9
- adds r4, r0
- adds r5, 0x28
- adds r3, 0x28
- adds r6, 0x1
- ldr r0, _080418EC @ =0x0000019b
- cmp r6, r0
- ble _08041890
-_080418CC:
- movs r0, 0xCE
- lsls r0, 1
- cmp r6, r0
- beq _080418DE
- movs r0, 0x1
- add r8, r0
- mov r0, r8
- cmp r0, 0x4
- ble _08041882
-_080418DE:
- adds r0, r2, 0
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_080418EC: .4byte 0x0000019b
- thumb_func_end sub_8041870
-
- thumb_func_start sub_80418F0
-sub_80418F0: @ 80418F0
- push {r4,lr}
- adds r4, r0, 0
- bl Random
- lsls r0, 16
- lsrs r0, 16
- ldr r1, _08041918 @ =0x0000fffe
- bl __umodsi3
- adds r0, 0x1
- movs r1, 0x8C
- lsls r1, 1
- adds r4, r1
- strh r0, [r4]
- movs r0, 0x86
- bl FlagSet
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08041918: .4byte 0x0000fffe
- thumb_func_end sub_80418F0
-
- thumb_func_start sub_804191C
-sub_804191C: @ 804191C
- push {r4,lr}
- adds r4, r0, 0
- bl Random
- movs r2, 0x80
- lsls r2, 8
- adds r1, r2, 0
- movs r2, 0x8C
- lsls r2, 1
- adds r4, r2
- orrs r1, r0
- strh r1, [r4]
- movs r0, 0x86
- bl FlagSet
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_804191C
-
- thumb_func_start sub_8041940
-sub_8041940: @ 8041940
- push {lr}
- ldr r0, _0804194C @ =gSaveBlock1 + 0x2F9C
- bl sub_80418F0
- pop {r0}
- bx r0
- .align 2, 0
-_0804194C: .4byte gSaveBlock1 + 0x2F9C
- thumb_func_end sub_8041940
-
- thumb_func_start sub_8041950
-sub_8041950: @ 8041950
- push {lr}
- ldr r0, _0804195C @ =gSaveBlock1 + 0x2F9C
- bl sub_804191C
- pop {r0}
- bx r0
- .align 2, 0
-_0804195C: .4byte gSaveBlock1 + 0x2F9C
- thumb_func_end sub_8041950
-
- thumb_func_start sub_8041960
-sub_8041960: @ 8041960
- push {r4,lr}
- sub sp, 0x8
- adds r4, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r1, r4, r1
- movs r0, 0xFF
- strb r0, [r1]
- movs r2, 0
-_08041972:
- mov r1, sp
- adds r0, r1, r2
- adds r1, r4, r2
- ldrb r1, [r1]
- strb r1, [r0]
- adds r2, 0x1
- cmp r2, 0x5
- ble _08041972
- movs r3, 0
- movs r2, 0
-_08041986:
- mov r1, sp
- adds r0, r1, r2
- ldrb r1, [r0]
- adds r0, r1, 0
- cmp r0, 0xFF
- beq _08041998
- adds r0, r4, r3
- strb r1, [r0]
- adds r3, 0x1
-_08041998:
- adds r2, 0x1
- cmp r2, 0x5
- ble _08041986
- add sp, 0x8
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8041960
-
- thumb_func_start sub_80419A8
-sub_80419A8: @ 80419A8
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x14
- mov r9, r0
- mov r8, r1
- movs r5, 0
- add r1, sp, 0x4
- add r7, sp, 0xC
- adds r2, r1, 0
-_080419BE:
- adds r0, r2, r5
- strb r5, [r0]
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x5
- bls _080419BE
- movs r5, 0
- adds r6, r1, 0
-_080419D0:
- bl Random
- mov r1, sp
- adds r4, r1, r5
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x6
- subs r1, r5
- bl __modsi3
- adds r0, r6, r0
- ldrb r0, [r0]
- strb r0, [r4]
- ldrb r1, [r4]
- adds r0, r6, 0
- bl sub_8041960
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x2
- bls _080419D0
- movs r5, 0
- movs r4, 0x1
-_08041A00:
- bl Random
- adds r1, r7, r5
- lsls r0, 16
- lsrs r0, 16
- ands r0, r4
- strb r0, [r1]
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x2
- bls _08041A00
- movs r5, 0
-_08041A1A:
- mov r1, sp
- adds r0, r1, r5
- ldrb r0, [r0]
- cmp r0, 0x5
- bhi _08041B02
- lsls r0, 2
- ldr r1, _08041A30 @ =_08041A34
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08041A30: .4byte _08041A34
- .align 2, 0
-_08041A34:
- .4byte _08041A4C
- .4byte _08041A6C
- .4byte _08041A88
- .4byte _08041AA4
- .4byte _08041AC0
- .4byte _08041AE2
-_08041A4C:
- adds r0, r7, r5
- ldrb r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 4
- add r0, r8
- movs r1, 0x27
- bl GetBoxMonData
- add r2, sp, 0x10
- strb r0, [r2]
- mov r0, r9
- movs r1, 0x27
- bl SetMonData
- b _08041B02
-_08041A6C:
- add r4, sp, 0x10
- adds r0, r7, r5
- ldrb r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 4
- add r0, r8
- movs r1, 0x28
- bl GetBoxMonData
- strb r0, [r4]
- mov r0, r9
- movs r1, 0x28
- b _08041ADA
-_08041A88:
- add r4, sp, 0x10
- adds r0, r7, r5
- ldrb r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 4
- add r0, r8
- movs r1, 0x29
- bl GetBoxMonData
- strb r0, [r4]
- mov r0, r9
- movs r1, 0x29
- b _08041ADA
-_08041AA4:
- add r4, sp, 0x10
- adds r0, r7, r5
- ldrb r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 4
- add r0, r8
- movs r1, 0x2A
- bl GetBoxMonData
- strb r0, [r4]
- mov r0, r9
- movs r1, 0x2A
- b _08041ADA
-_08041AC0:
- add r4, sp, 0x10
- adds r0, r7, r5
- ldrb r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 4
- add r0, r8
- movs r1, 0x2B
- bl GetBoxMonData
- strb r0, [r4]
- mov r0, r9
- movs r1, 0x2B
-_08041ADA:
- adds r2, r4, 0
- bl SetMonData
- b _08041B02
-_08041AE2:
- add r4, sp, 0x10
- adds r0, r7, r5
- ldrb r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 4
- add r0, r8
- movs r1, 0x2C
- bl GetBoxMonData
- strb r0, [r4]
- mov r0, r9
- movs r1, 0x2C
- adds r2, r4, 0
- bl SetMonData
-_08041B02:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x2
- bls _08041A1A
- add sp, 0x14
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_80419A8
-
- thumb_func_start pokemon_get_eggmoves
-pokemon_get_eggmoves: @ 8041B1C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- mov r8, r1
- movs r6, 0
- movs r4, 0
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r3, r0, 16
- movs r2, 0
- ldr r5, _08041B44 @ =gEggMoves
- ldrh r1, [r5]
- ldr r7, _08041B48 @ =0x00004e20
- adds r0, r3, r7
- cmp r1, r0
- bne _08041B4C
- movs r4, 0x1
- b _08041B6E
- .align 2, 0
-_08041B44: .4byte gEggMoves
-_08041B48: .4byte 0x00004e20
-_08041B4C:
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- ldr r0, _08041BB8 @ =0x00000471
- ldr r5, _08041BBC @ =gEggMoves
- cmp r2, r0
- bhi _08041B6E
- lsls r0, r2, 1
- adds r0, r5
- ldrh r1, [r0]
- ldr r7, _08041BC0 @ =0x00004e20
- adds r0, r3, r7
- cmp r1, r0
- bne _08041B4C
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
-_08041B6E:
- movs r2, 0
- lsls r0, r4, 1
- adds r0, r5
- ldrh r0, [r0]
- ldr r1, _08041BC0 @ =0x00004e20
- cmp r0, r1
- bhi _08041BAA
- adds r7, r5, 0
- adds r3, r1, 0
-_08041B80:
- lsls r1, r2, 1
- add r1, r8
- adds r0, r4, r2
- lsls r0, 1
- adds r0, r7
- ldrh r0, [r0]
- strh r0, [r1]
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- cmp r2, 0x9
- bhi _08041BAA
- adds r0, r4, r2
- lsls r0, 1
- adds r0, r5
- ldrh r0, [r0]
- cmp r0, r3
- bls _08041B80
-_08041BAA:
- lsls r0, r6, 24
- lsrs r0, 24
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08041BB8: .4byte 0x00000471
-_08041BBC: .4byte gEggMoves
-_08041BC0: .4byte 0x00004e20
- thumb_func_end pokemon_get_eggmoves
-
- thumb_func_start daycare_build_child_moveset
-daycare_build_child_moveset: @ 8041BC4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0xC
- adds r7, r0, 0
- mov r10, r1
- mov r9, r2
- movs r0, 0
- str r0, [sp]
- movs r6, 0
- ldr r5, _08041CC8 @ =gUnknown_03000500
- movs r2, 0
- ldr r4, _08041CCC @ =gUnknown_030004D8
- ldr r3, _08041CD0 @ =gUnknown_030004E0
-_08041BE4:
- lsls r1, r6, 1
- adds r0, r1, r5
- strh r2, [r0]
- adds r0, r1, r4
- strh r2, [r0]
- adds r1, r3
- strh r2, [r1]
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- cmp r6, 0x3
- bls _08041BE4
- movs r6, 0
- ldr r2, _08041CD4 @ =gUnknown_030004E8
- movs r1, 0
-_08041C02:
- lsls r0, r6, 1
- adds r0, r2
- strh r1, [r0]
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- cmp r6, 0x9
- bls _08041C02
- movs r6, 0
- ldr r2, _08041CD8 @ =gUnknown_03000470
- movs r1, 0
-_08041C18:
- lsls r0, r6, 1
- adds r0, r2
- strh r1, [r0]
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- cmp r6, 0x31
- bls _08041C18
- adds r0, r7, 0
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- ldr r1, _08041CD8 @ =gUnknown_03000470
- bl GetLevelUpMovesBySpecies
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0x4]
- movs r6, 0
- ldr r1, _08041CCC @ =gUnknown_030004D8
- mov r8, r1
-_08041C46:
- adds r5, r6, 0
- adds r5, 0xD
- mov r0, r10
- adds r1, r5, 0
- bl GetBoxMonData
- lsls r4, r6, 1
- mov r2, r8
- adds r1, r4, r2
- strh r0, [r1]
- mov r0, r9
- adds r1, r5, 0
- bl GetBoxMonData
- ldr r1, _08041CC8 @ =gUnknown_03000500
- adds r4, r1
- strh r0, [r4]
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- cmp r6, 0x3
- bls _08041C46
- ldr r1, _08041CD4 @ =gUnknown_030004E8
- adds r0, r7, 0
- bl pokemon_get_eggmoves
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- movs r6, 0
-_08041C82:
- ldr r0, _08041CCC @ =gUnknown_030004D8
- lsls r1, r6, 1
- adds r2, r1, r0
- ldrh r1, [r2]
- mov r9, r0
- cmp r1, 0
- beq _08041CF8
- movs r5, 0
- cmp r5, r8
- bcs _08041CEA
- adds r4, r2, 0
- ldr r2, _08041CDC @ =0x0000ffff
-_08041C9A:
- ldr r0, _08041CD4 @ =gUnknown_030004E8
- lsls r1, r5, 1
- adds r1, r0
- ldrh r0, [r4]
- ldrh r1, [r1]
- cmp r0, r1
- bne _08041CE0
- adds r1, r0, 0
- adds r0, r7, 0
- str r2, [sp, 0x8]
- bl GiveMoveToMon
- lsls r0, 16
- lsrs r0, 16
- ldr r2, [sp, 0x8]
- cmp r0, r2
- bne _08041CEA
- ldrh r1, [r4]
- adds r0, r7, 0
- bl DeleteFirstMoveAndGiveMoveToMon
- b _08041CEA
- .align 2, 0
-_08041CC8: .4byte gUnknown_03000500
-_08041CCC: .4byte gUnknown_030004D8
-_08041CD0: .4byte gUnknown_030004E0
-_08041CD4: .4byte gUnknown_030004E8
-_08041CD8: .4byte gUnknown_03000470
-_08041CDC: .4byte 0x0000ffff
-_08041CE0:
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, r8
- bcc _08041C9A
-_08041CEA:
- adds r0, r6, 0x1
- lsls r0, 16
- lsrs r6, r0, 16
- ldr r3, _08041E14 @ =gUnknown_030004D8
- mov r9, r3
- cmp r6, 0x3
- bls _08041C82
-_08041CF8:
- movs r6, 0
-_08041CFA:
- lsls r0, r6, 1
- mov r2, r9
- adds r1, r0, r2
- ldrh r1, [r1]
- adds r2, r0, 0
- adds r6, 0x1
- mov r8, r6
- cmp r1, 0
- beq _08041D5C
- movs r5, 0
- ldr r0, _08041E14 @ =gUnknown_030004D8
- adds r4, r2, r0
- ldr r6, _08041E18 @ =0x0000ffff
- mov r9, r0
-_08041D16:
- ldr r3, _08041E1C @ =0x00000121
- adds r0, r5, r3
- lsls r0, 16
- lsrs r0, 16
- bl ItemIdToBattleMoveId
- ldrh r1, [r4]
- lsls r0, 16
- lsrs r0, 16
- cmp r1, r0
- bne _08041D52
- lsls r1, r5, 24
- lsrs r1, 24
- adds r0, r7, 0
- bl CanMonLearnTMHM
- cmp r0, 0
- beq _08041D52
- ldrh r1, [r4]
- adds r0, r7, 0
- bl GiveMoveToMon
- lsls r0, 16
- lsrs r0, 16
- cmp r0, r6
- bne _08041D52
- ldrh r1, [r4]
- adds r0, r7, 0
- bl DeleteFirstMoveAndGiveMoveToMon
-_08041D52:
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, 0x39
- bls _08041D16
-_08041D5C:
- mov r1, r8
- lsls r0, r1, 16
- lsrs r6, r0, 16
- cmp r6, 0x3
- bls _08041CFA
- movs r6, 0
- mov r2, r9
- ldrh r0, [r2]
- ldr r3, _08041E20 @ =gUnknown_030004E0
- mov r10, r3
- cmp r0, 0
- beq _08041DC6
- mov r4, r9
- ldr r0, _08041E24 @ =gUnknown_03000500
- mov r9, r0
- mov r12, r10
-_08041D7C:
- movs r5, 0
- lsls r2, r6, 1
- adds r6, 0x1
- mov r8, r6
- adds r3, r2, r4
-_08041D86:
- lsls r0, r5, 1
- add r0, r9
- ldrh r2, [r3]
- adds r1, r2, 0
- ldrh r0, [r0]
- cmp r1, r0
- bne _08041DA8
- cmp r1, 0
- beq _08041DA8
- ldr r1, [sp]
- adds r0, r1, 0x1
- lsls r0, 16
- lsrs r0, 16
- str r0, [sp]
- lsls r1, 1
- add r1, r12
- strh r2, [r1]
-_08041DA8:
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, 0x3
- bls _08041D86
- mov r1, r8
- lsls r0, r1, 16
- lsrs r6, r0, 16
- cmp r6, 0x3
- bhi _08041DC6
- lsls r0, r6, 1
- adds r0, r4
- ldrh r0, [r0]
- cmp r0, 0
- bne _08041D7C
-_08041DC6:
- movs r6, 0
- mov r2, r10
- ldrh r0, [r2]
- cmp r0, 0
- beq _08041E50
-_08041DD0:
- movs r5, 0
- adds r3, r6, 0x1
- mov r8, r3
- ldr r0, [sp, 0x4]
- cmp r5, r0
- bcs _08041E38
- ldr r2, _08041E18 @ =0x0000ffff
-_08041DDE:
- ldr r1, _08041E28 @ =gUnknown_03000470
- lsls r0, r5, 1
- adds r0, r1
- ldrh r1, [r0]
- cmp r1, 0
- beq _08041E2C
- lsls r0, r6, 1
- mov r3, r10
- adds r4, r0, r3
- ldrh r0, [r4]
- cmp r0, r1
- bne _08041E2C
- adds r1, r0, 0
- adds r0, r7, 0
- str r2, [sp, 0x8]
- bl GiveMoveToMon
- lsls r0, 16
- lsrs r0, 16
- ldr r2, [sp, 0x8]
- cmp r0, r2
- bne _08041E38
- ldrh r1, [r4]
- adds r0, r7, 0
- bl DeleteFirstMoveAndGiveMoveToMon
- b _08041E38
- .align 2, 0
-_08041E14: .4byte gUnknown_030004D8
-_08041E18: .4byte 0x0000ffff
-_08041E1C: .4byte 0x00000121
-_08041E20: .4byte gUnknown_030004E0
-_08041E24: .4byte gUnknown_03000500
-_08041E28: .4byte gUnknown_03000470
-_08041E2C:
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- ldr r0, [sp, 0x4]
- cmp r5, r0
- bcc _08041DDE
-_08041E38:
- mov r1, r8
- lsls r0, r1, 16
- lsrs r6, r0, 16
- cmp r6, 0x3
- bhi _08041E50
- ldr r0, _08041E60 @ =gUnknown_030004E0
- lsls r1, r6, 1
- adds r1, r0
- ldrh r1, [r1]
- mov r10, r0
- cmp r1, 0
- bne _08041DD0
-_08041E50:
- add sp, 0xC
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08041E60: .4byte gUnknown_030004E0
- thumb_func_end daycare_build_child_moveset
-
- thumb_func_start sub_8041E64
-sub_8041E64: @ 8041E64
- adds r3, r0, 0
- movs r1, 0x8C
- lsls r1, 1
- adds r0, r3, r1
- movs r2, 0
- movs r1, 0
- strh r1, [r0]
- movs r1, 0x8D
- lsls r1, 1
- adds r0, r3, r1
- strb r2, [r0]
- bx lr
- thumb_func_end sub_8041E64
-
- thumb_func_start sub_8041E7C
-sub_8041E7C: @ 8041E7C
- push {lr}
- ldr r0, _08041E88 @ =gSaveBlock1 + 0x2F9C
- bl sub_8041E64
- pop {r0}
- bx r0
- .align 2, 0
-_08041E88: .4byte gSaveBlock1 + 0x2F9C
- thumb_func_end sub_8041E7C
-
- thumb_func_start incense_effects
-incense_effects: @ 8041E8C
- push {r4-r7,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- ldrh r1, [r4]
- movs r7, 0xB4
- lsls r7, 1
- cmp r1, r7
- beq _08041EA4
- movs r0, 0xAF
- lsls r0, 1
- cmp r1, r0
- bne _08041EE6
-_08041EA4:
- adds r0, r5, 0
- movs r1, 0xC
- bl GetBoxMonData
- lsls r0, 16
- lsrs r6, r0, 16
- adds r0, r5, 0
- adds r0, 0x50
- movs r1, 0xC
- bl GetBoxMonData
- lsls r0, 16
- lsrs r2, r0, 16
- ldrh r0, [r4]
- cmp r0, r7
- bne _08041ED0
- cmp r6, 0xDD
- beq _08041ED0
- cmp r2, 0xDD
- beq _08041ED0
- movs r0, 0xCA
- strh r0, [r4]
-_08041ED0:
- ldrh r1, [r4]
- movs r0, 0xAF
- lsls r0, 1
- cmp r1, r0
- bne _08041EE6
- cmp r6, 0xDC
- beq _08041EE6
- cmp r2, 0xDC
- beq _08041EE6
- movs r0, 0xB7
- strh r0, [r4]
-_08041EE6:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end incense_effects
-
- thumb_func_start sub_8041EEC
-sub_8041EEC: @ 8041EEC
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- mov r8, r0
- adds r6, r1, 0
- movs r4, 0
- movs r7, 0x1
-_08041EFC:
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 4
- mov r1, r8
- adds r5, r1, r0
- adds r0, r5, 0
- movs r1, 0xB
- bl GetBoxMonData
- lsls r1, r4, 1
- add r1, sp
- strh r0, [r1]
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x84
- bne _08041F26
- adds r0, r4, 0
- eors r0, r7
- strb r0, [r6]
- strb r4, [r6, 0x1]
- b _08041F3C
-_08041F26:
- adds r0, r5, 0
- bl GetBoxMonGender
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFE
- bne _08041F3C
- strb r4, [r6]
- adds r0, r4, 0
- eors r0, r7
- strb r0, [r6, 0x1]
-_08041F3C:
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x1
- bls _08041EFC
- ldrb r0, [r6]
- lsls r0, 1
- add r0, sp
- ldrh r0, [r0]
- bl sub_8041870
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0x1D
- bne _08041F6E
- movs r0, 0x8C
- lsls r0, 1
- add r0, r8
- ldrh r1, [r0]
- movs r0, 0x80
- lsls r0, 8
- ands r0, r1
- cmp r0, 0
- beq _08041F6E
- movs r4, 0x20
-_08041F6E:
- ldr r0, _08041FC0 @ =0x00000183
- cmp r4, r0
- bne _08041F88
- subs r0, 0x6B
- add r0, r8
- ldrh r1, [r0]
- movs r0, 0x80
- lsls r0, 8
- ands r0, r1
- cmp r0, 0
- beq _08041F88
- movs r4, 0xC1
- lsls r4, 1
-_08041F88:
- ldrb r0, [r6, 0x1]
- lsls r0, 1
- add r0, sp
- ldrh r0, [r0]
- cmp r0, 0x84
- bne _08041FB2
- ldrb r1, [r6]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 4
- add r0, r8
- bl GetBoxMonGender
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFE
- beq _08041FB2
- ldrb r1, [r6, 0x1]
- ldrb r0, [r6]
- strb r0, [r6, 0x1]
- strb r1, [r6]
-_08041FB2:
- adds r0, r4, 0
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08041FC0: .4byte 0x00000183
- thumb_func_end sub_8041EEC
-
- thumb_func_start sub_8041FC4
-sub_8041FC4: @ 8041FC4
- push {r4-r6,lr}
- sub sp, 0x6C
- adds r5, r0, 0
- add r6, sp, 0x64
- adds r1, r6, 0
- bl sub_8041EEC
- add r4, sp, 0x68
- strh r0, [r4]
- adds r0, r4, 0
- adds r1, r5, 0
- bl incense_effects
- ldrh r1, [r4]
- mov r0, sp
- adds r2, r5, 0
- bl sub_80420FC
- mov r0, sp
- adds r1, r5, 0
- bl sub_80419A8
- ldrb r0, [r6, 0x1]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 4
- adds r1, r5, r1
- ldrb r0, [r6]
- lsls r2, r0, 2
- adds r2, r0
- lsls r2, 4
- adds r2, r5, r2
- mov r0, sp
- bl daycare_build_child_moveset
- mov r2, sp
- adds r2, 0x6A
- movs r0, 0x1
- strb r0, [r2]
- mov r0, sp
- movs r1, 0x2D
- bl SetMonData
- ldr r0, _08042040 @ =gPlayerParty
- movs r1, 0xFA
- lsls r1, 1
- adds r0, r1
- mov r1, sp
- movs r2, 0x64
- bl memcpy
- bl party_compaction
- bl CalculatePlayerPartyCount
- adds r0, r5, 0
- bl sub_8041E64
- add sp, 0x6C
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08042040: .4byte gPlayerParty
- thumb_func_end sub_8041FC4
-
- thumb_func_start sub_8042044
-sub_8042044: @ 8042044
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x18
- adds r7, r0, 0
- adds r5, r1, 0
- adds r6, r2, 0
- lsls r5, 16
- lsrs r5, 16
- lsls r6, 24
- lsrs r6, 24
- movs r4, 0
- str r4, [sp]
- str r4, [sp, 0x4]
- str r4, [sp, 0x8]
- str r4, [sp, 0xC]
- adds r1, r5, 0
- movs r2, 0x5
- movs r3, 0x20
- bl CreateMon
- movs r0, 0x12
- add r0, sp
- mov r8, r0
- strb r4, [r0]
- movs r1, 0x4
- add r0, sp, 0x10
- strh r1, [r0]
- mov r4, sp
- adds r4, 0x13
- movs r0, 0x1
- mov r9, r0
- mov r0, r9
- strb r0, [r4]
- adds r0, r7, 0
- movs r1, 0x26
- add r2, sp, 0x10
- bl SetMonData
- ldr r2, _080420F4 @ =gUnknown_08209AD4
- adds r0, r7, 0
- movs r1, 0x2
- bl SetMonData
- lsls r2, r5, 3
- subs r2, r5
- lsls r2, 2
- ldr r0, _080420F8 @ =gBaseStats + 0x11 @ egg cycles offset
- adds r2, r0
- adds r0, r7, 0
- movs r1, 0x20
- bl SetMonData
- adds r0, r7, 0
- movs r1, 0x24
- mov r2, r8
- bl SetMonData
- adds r0, r7, 0
- movs r1, 0x3
- adds r2, r4, 0
- bl SetMonData
- cmp r6, 0
- beq _080420D6
- add r2, sp, 0x14
- movs r0, 0xFD
- strb r0, [r2]
- adds r0, r7, 0
- movs r1, 0x23
- bl SetMonData
-_080420D6:
- mov r2, sp
- adds r2, 0x15
- mov r0, r9
- strb r0, [r2]
- adds r0, r7, 0
- movs r1, 0x2D
- bl SetMonData
- add sp, 0x18
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080420F4: .4byte gUnknown_08209AD4
-_080420F8: .4byte gBaseStats + 0x11 @ egg cycles offset
- thumb_func_end sub_8042044
-
- thumb_func_start sub_80420FC
-sub_80420FC: @ 80420FC
- push {r4-r6,lr}
- mov r6, r9
- mov r5, r8
- push {r5,r6}
- sub sp, 0x14
- adds r6, r0, 0
- adds r5, r1, 0
- adds r4, r2, 0
- lsls r5, 16
- lsrs r5, 16
- bl Random
- movs r1, 0x8C
- lsls r1, 1
- adds r4, r1
- ldrh r1, [r4]
- lsls r0, 16
- orrs r1, r0
- movs r0, 0x1
- mov r8, r0
- str r0, [sp]
- str r1, [sp, 0x4]
- movs r4, 0
- str r4, [sp, 0x8]
- str r4, [sp, 0xC]
- adds r0, r6, 0
- adds r1, r5, 0
- movs r2, 0x5
- movs r3, 0x20
- bl CreateMon
- movs r1, 0x12
- add r1, sp
- mov r9, r1
- strb r4, [r1]
- movs r1, 0x4
- add r0, sp, 0x10
- strh r1, [r0]
- mov r4, sp
- adds r4, 0x13
- mov r0, r8
- strb r0, [r4]
- adds r0, r6, 0
- movs r1, 0x26
- add r2, sp, 0x10
- bl SetMonData
- ldr r2, _08042198 @ =gUnknown_08209AD4
- adds r0, r6, 0
- movs r1, 0x2
- bl SetMonData
- lsls r2, r5, 3
- subs r2, r5
- lsls r2, 2
- ldr r0, _0804219C @ =gBaseStats + 0x11 @ egg cycles offset
- adds r2, r0
- adds r0, r6, 0
- movs r1, 0x20
- bl SetMonData
- adds r0, r6, 0
- movs r1, 0x24
- mov r2, r9
- bl SetMonData
- adds r0, r6, 0
- movs r1, 0x3
- adds r2, r4, 0
- bl SetMonData
- add sp, 0x14
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08042198: .4byte gUnknown_08209AD4
-_0804219C: .4byte gBaseStats + 0x11 @ egg cycles offset
- thumb_func_end sub_80420FC
-
- thumb_func_start sp0B8_daycare
-sp0B8_daycare: @ 80421A0
- push {lr}
- ldr r0, _080421AC @ =gSaveBlock1 + 0x2F9C
- bl sub_8041FC4
- pop {r0}
- bx r0
- .align 2, 0
-_080421AC: .4byte gSaveBlock1 + 0x2F9C
- thumb_func_end sp0B8_daycare
-
- thumb_func_start sub_80421B0
-sub_80421B0: @ 80421B0
- push {r4-r7,lr}
- sub sp, 0x8
- adds r7, r0, 0
- movs r2, 0
- movs r6, 0
- adds r5, r7, 0
-_080421BC:
- lsls r4, r6, 2
- adds r0, r5, 0
- movs r1, 0x5
- str r2, [sp, 0x4]
- bl GetBoxMonData
- ldr r2, [sp, 0x4]
- cmp r0, 0
- beq _080421DE
- movs r0, 0x88
- lsls r0, 1
- adds r1, r7, r0
- adds r1, r4
- ldr r0, [r1]
- adds r0, 0x1
- str r0, [r1]
- adds r2, 0x1
-_080421DE:
- adds r5, 0x50
- adds r6, 0x1
- cmp r6, 0x1
- bls _080421BC
- movs r1, 0x8C
- lsls r1, 1
- adds r0, r7, r1
- ldrh r0, [r0]
- cmp r0, 0
- bne _08042226
- cmp r2, 0x2
- bne _08042226
- subs r1, 0x4
- adds r0, r7, r1
- ldrb r0, [r0]
- cmp r0, 0xFF
- bne _08042226
- adds r0, r7, 0
- bl daycare_relationship_score
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x64
- muls r0, r1
- ldr r1, _08042240 @ =0x0000ffff
- bl __udivsi3
- cmp r4, r0
- bls _08042226
- bl sub_8041940
-_08042226:
- movs r0, 0x8D
- lsls r0, 1
- adds r1, r7, r0
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0xFF
- bne _08042290
- movs r6, 0
- b _08042288
- .align 2, 0
-_08042240: .4byte 0x0000ffff
-_08042244:
- movs r0, 0x64
- adds r1, r6, 0
- muls r1, r0
- ldr r0, _08042270 @ =gPlayerParty
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0
- beq _08042286
- adds r0, r4, 0
- movs r1, 0x20
- bl GetMonData
- str r0, [sp]
- cmp r0, 0
- bne _08042278
- ldr r0, _08042274 @ =gSpecialVar_0x8004
- strh r6, [r0]
- movs r0, 0x1
- b _08042292
- .align 2, 0
-_08042270: .4byte gPlayerParty
-_08042274: .4byte gSpecialVar_0x8004
-_08042278:
- subs r0, 0x1
- str r0, [sp]
- adds r0, r4, 0
- movs r1, 0x20
- mov r2, sp
- bl SetMonData
-_08042286:
- adds r6, 0x1
-_08042288:
- ldr r0, _0804229C @ =gPlayerPartyCount
- ldrb r0, [r0]
- cmp r6, r0
- bcc _08042244
-_08042290:
- movs r0, 0
-_08042292:
- add sp, 0x8
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0804229C: .4byte gPlayerPartyCount
- thumb_func_end sub_80421B0
-
- thumb_func_start sub_80422A0
-sub_80422A0: @ 80422A0
- push {lr}
- ldr r0, _080422B0 @ =gSaveBlock1 + 0x2F9C
- bl sub_80421B0
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .align 2, 0
-_080422B0: .4byte gSaveBlock1 + 0x2F9C
- thumb_func_end sub_80422A0
-
- thumb_func_start sub_80422B4
-sub_80422B4: @ 80422B4
- movs r1, 0x8C
- lsls r1, 1
- adds r0, r1
- ldrh r1, [r0]
- negs r0, r1
- orrs r0, r1
- lsrs r0, 31
- bx lr
- thumb_func_end sub_80422B4
-
- thumb_func_start sub_80422C4
-sub_80422C4: @ 80422C4
- push {r4-r6,lr}
- adds r6, r0, 0
- movs r1, 0xB
- bl GetBoxMonData
- cmp r0, 0
- beq _080422FC
- ldr r1, _0804231C @ =gStringVar1
- adds r0, r6, 0
- bl GetBoxMonNick
- adds r0, r6, 0
- movs r1, 0x3
- bl GetBoxMonData
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r5, _08042320 @ =gStringVar3
- adds r0, r6, 0
- movs r1, 0x7
- adds r2, r5, 0
- bl GetBoxMonData
- adds r0, r5, 0
- adds r1, r4, 0
- bl ConvertInternationalString
-_080422FC:
- adds r4, r6, 0
- adds r4, 0x50
- adds r0, r4, 0
- movs r1, 0xB
- bl GetBoxMonData
- cmp r0, 0
- beq _08042314
- ldr r1, _08042324 @ =gStringVar2
- adds r0, r4, 0
- bl GetBoxMonNick
-_08042314:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0804231C: .4byte gStringVar1
-_08042320: .4byte gStringVar3
-_08042324: .4byte gStringVar2
- thumb_func_end sub_80422C4
-
- thumb_func_start sub_8042328
-sub_8042328: @ 8042328
- push {r4-r6,lr}
- ldr r6, _08042354 @ =gLastFieldPokeMenuOpened
- ldrb r0, [r6]
- movs r5, 0x64
- muls r0, r5
- ldr r4, _08042358 @ =gPlayerParty
- adds r0, r4
- ldr r1, _0804235C @ =gStringVar1
- bl GetBoxMonNick
- ldrb r0, [r6]
- muls r0, r5
- adds r0, r4
- movs r1, 0xB
- bl GetBoxMonData
- lsls r0, 16
- lsrs r0, 16
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_08042354: .4byte gLastFieldPokeMenuOpened
-_08042358: .4byte gPlayerParty
-_0804235C: .4byte gStringVar1
- thumb_func_end sub_8042328
-
- thumb_func_start sp0B5_daycare
-sp0B5_daycare: @ 8042360
- push {lr}
- ldr r0, _0804236C @ =gSaveBlock1 + 0x2F9C
- bl sub_80422C4
- pop {r0}
- bx r0
- .align 2, 0
-_0804236C: .4byte gSaveBlock1 + 0x2F9C
- thumb_func_end sp0B5_daycare
-
- thumb_func_start sp0B6_daycare
-sp0B6_daycare: @ 8042370
- push {r4,lr}
- ldr r4, _08042384 @ =gSaveBlock1 + 0x2F9C
- adds r0, r4, 0
- bl sub_80422B4
- lsls r0, 24
- cmp r0, 0
- beq _08042388
- movs r0, 0x1
- b _080423A0
- .align 2, 0
-_08042384: .4byte gSaveBlock1 + 0x2F9C
-_08042388:
- adds r0, r4, 0
- bl Daycare_CountPokemon
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- bne _0804239A
- movs r0, 0
- b _080423A0
-_0804239A:
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
-_080423A0:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sp0B6_daycare
-
- thumb_func_start sub_80423A8
-sub_80423A8: @ 80423A8
- push {r4-r6,lr}
- adds r5, r1, 0
- movs r4, 0
- adds r1, r0, 0
-_080423B0:
- movs r3, 0
- ldrh r0, [r1]
- adds r2, r5, 0
-_080423B6:
- ldrh r6, [r2]
- cmp r0, r6
- bne _080423C0
- movs r0, 0x1
- b _080423D2
-_080423C0:
- adds r2, 0x2
- adds r3, 0x1
- cmp r3, 0x1
- ble _080423B6
- adds r1, 0x2
- adds r4, 0x1
- cmp r4, 0x1
- ble _080423B0
- movs r0, 0
-_080423D2:
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_80423A8
-
- thumb_func_start daycare_relationship_score
-daycare_relationship_score: @ 80423D8
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x2C
- movs r1, 0
- mov r8, r1
- mov r2, sp
- adds r2, 0x8
- str r2, [sp, 0x1C]
- add r1, sp, 0xC
- mov r10, r1
- adds r2, 0xC
- str r2, [sp, 0x20]
- mov r1, sp
- adds r1, 0x2
- ldr r2, _08042488 @ =gBaseStats
- mov r9, r2
- ldr r5, [sp, 0x1C]
- adds r7, r1, 0
- mov r6, sp
- ldr r1, [sp, 0x20]
- str r1, [sp, 0x24]
- mov r2, r10
- str r2, [sp, 0x28]
- adds r4, r0, 0
-_0804240E:
- adds r0, r4, 0
- movs r1, 0xB
- bl GetBoxMonData
- strh r0, [r5]
- adds r0, r4, 0
- movs r1, 0x1
- bl GetBoxMonData
- ldr r1, [sp, 0x28]
- stm r1!, {r0}
- str r1, [sp, 0x28]
- adds r0, r4, 0
- movs r1, 0
- bl GetBoxMonData
- adds r1, r0, 0
- ldrh r0, [r5]
- bl GetGenderFromSpeciesAndPersonality
- lsls r0, 24
- lsrs r0, 24
- ldr r2, [sp, 0x24]
- stm r2!, {r0}
- str r2, [sp, 0x24]
- ldrh r1, [r5]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- add r0, r9
- ldrb r0, [r0, 0x14]
- strh r0, [r6]
- ldrh r1, [r5]
- lsls r0, r1, 3
- subs r0, r1
- lsls r0, 2
- add r0, r9
- ldrb r0, [r0, 0x15]
- strh r0, [r7]
- adds r5, 0x2
- adds r7, 0x4
- adds r6, 0x4
- adds r4, 0x50
- movs r0, 0x1
- add r8, r0
- mov r1, r8
- cmp r1, 0x1
- bls _0804240E
- mov r0, sp
- ldrh r1, [r0]
- cmp r1, 0xF
- beq _08042484
- ldrh r0, [r0, 0x4]
- cmp r0, 0xF
- beq _08042484
- cmp r1, 0xD
- bne _0804248C
- cmp r0, 0xD
- bne _08042490
-_08042484:
- movs r0, 0
- b _080424E4
- .align 2, 0
-_08042488: .4byte gBaseStats
-_0804248C:
- cmp r0, 0xD
- bne _0804249C
-_08042490:
- ldr r1, [sp, 0xC]
- mov r2, r10
- ldr r0, [r2, 0x4]
- cmp r1, r0
- beq _080424DE
- b _080424E2
-_0804249C:
- ldr r0, [sp, 0x14]
- ldr r2, [sp, 0x20]
- ldr r1, [r2, 0x4]
- cmp r0, r1
- beq _08042484
- cmp r0, 0xFF
- beq _08042484
- cmp r1, 0xFF
- beq _08042484
- add r1, sp, 0x4
- mov r0, sp
- bl sub_80423A8
- lsls r0, 24
- cmp r0, 0
- beq _08042484
- ldr r0, [sp, 0x1C]
- ldrh r1, [r0, 0x2]
- ldrh r0, [r0]
- cmp r0, r1
- bne _080424D4
- ldr r1, [sp, 0xC]
- mov r2, r10
- ldr r0, [r2, 0x4]
- cmp r1, r0
- beq _080424E2
- movs r0, 0x46
- b _080424E4
-_080424D4:
- ldr r1, [sp, 0xC]
- mov r2, r10
- ldr r0, [r2, 0x4]
- cmp r1, r0
- bne _080424E2
-_080424DE:
- movs r0, 0x14
- b _080424E4
-_080424E2:
- movs r0, 0x32
-_080424E4:
- add sp, 0x2C
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end daycare_relationship_score
-
- thumb_func_start daycare_relationship_score_from_savegame
-daycare_relationship_score_from_savegame: @ 80424F4
- push {lr}
- ldr r0, _08042504 @ =gSaveBlock1 + 0x2F9C
- bl daycare_relationship_score
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .align 2, 0
-_08042504: .4byte gSaveBlock1 + 0x2F9C
- thumb_func_end daycare_relationship_score_from_savegame
-
- thumb_func_start sp0B9_daycare_relationship_comment
-sp0B9_daycare_relationship_comment: @ 8042508
- push {lr}
- bl daycare_relationship_score_from_savegame
- lsls r0, 24
- lsrs r0, 24
- adds r2, r0, 0
- movs r1, 0
- cmp r0, 0
- bne _0804251C
- movs r1, 0x3
-_0804251C:
- cmp r0, 0x14
- bne _08042522
- movs r1, 0x2
-_08042522:
- cmp r0, 0x32
- bne _08042528
- movs r1, 0x1
-_08042528:
- cmp r2, 0x46
- bne _0804252E
- movs r1, 0
-_0804252E:
- ldr r0, _08042540 @ =gStringVar4
- ldr r2, _08042544 @ =gUnknown_08209AC4
- lsls r1, 2
- adds r1, r2
- ldr r1, [r1]
- bl StringCopy
- pop {r0}
- bx r0
- .align 2, 0
-_08042540: .4byte gStringVar4
-_08042544: .4byte gUnknown_08209AC4
- thumb_func_end sp0B9_daycare_relationship_comment
-
- thumb_func_start NameHasGenderSymbol
-NameHasGenderSymbol: @ 8042548
- push {r4,r5,lr}
- sub sp, 0x4
- adds r4, r0, 0
- lsls r1, 24
- lsrs r5, r1, 24
- mov r2, sp
- mov r1, sp
- movs r0, 0
- strb r0, [r1, 0x1]
- strb r0, [r2]
- movs r3, 0
- ldrb r0, [r4]
- cmp r0, 0xFF
- beq _0804258C
-_08042564:
- adds r1, r4, r3
- ldrb r0, [r1]
- cmp r0, 0xB5
- bne _08042572
- ldrb r0, [r2]
- adds r0, 0x1
- strb r0, [r2]
-_08042572:
- ldrb r0, [r1]
- cmp r0, 0xB6
- bne _0804257E
- ldrb r0, [r2, 0x1]
- adds r0, 0x1
- strb r0, [r2, 0x1]
-_0804257E:
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- adds r0, r4, r3
- ldrb r0, [r0]
- cmp r0, 0xFF
- bne _08042564
-_0804258C:
- cmp r5, 0
- bne _080425A0
- mov r0, sp
- ldrb r0, [r0]
- cmp r0, 0
- beq _080425A0
- mov r0, sp
- ldrb r0, [r0, 0x1]
- cmp r0, 0
- beq _080425B4
-_080425A0:
- cmp r5, 0xFE
- bne _080425B8
- mov r0, sp
- ldrb r0, [r0, 0x1]
- cmp r0, 0
- beq _080425B8
- mov r0, sp
- ldrb r0, [r0]
- cmp r0, 0
- bne _080425B8
-_080425B4:
- movs r0, 0x1
- b _080425BA
-_080425B8:
- movs r0, 0
-_080425BA:
- add sp, 0x4
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end NameHasGenderSymbol
-
- thumb_func_start AppendGenderSymbol
-AppendGenderSymbol: @ 80425C4
- push {r4,lr}
- adds r4, r0, 0
- lsls r1, 24
- lsrs r1, 24
- cmp r1, 0
- bne _080425E4
- movs r1, 0
- bl NameHasGenderSymbol
- lsls r0, 24
- cmp r0, 0
- bne _08042600
- ldr r1, _080425E0 @ =gOtherText_MaleSymbol3
- b _08042602
- .align 2, 0
-_080425E0: .4byte gOtherText_MaleSymbol3
-_080425E4:
- cmp r1, 0xFE
- bne _08042600
- adds r0, r4, 0
- movs r1, 0xFE
- bl NameHasGenderSymbol
- lsls r0, 24
- cmp r0, 0
- bne _08042600
- ldr r1, _080425FC @ =gOtherText_FemaleSymbol3
- b _08042602
- .align 2, 0
-_080425FC: .4byte gOtherText_FemaleSymbol3
-_08042600:
- ldr r1, _08042610 @ =gOtherText_GenderlessSymbol
-_08042602:
- adds r0, r4, 0
- bl StringAppend
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08042610: .4byte gOtherText_GenderlessSymbol
- thumb_func_end AppendGenderSymbol
-
- thumb_func_start MonAppendGenderSymbol
-MonAppendGenderSymbol: @ 8042614
- push {r4,lr}
- adds r4, r0, 0
- adds r0, r1, 0
- bl GetBoxMonGender
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl AppendGenderSymbol
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end MonAppendGenderSymbol
-
- thumb_func_start DaycareLevelMenuGetText
-DaycareLevelMenuGetText: @ 8042630
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x28
- mov r8, r0
- adds r7, r1, 0
- movs r0, 0xFF
- strb r0, [r7]
- movs r6, 0
- add r0, sp, 0x14
- mov r9, r0
-_08042648:
- lsls r0, r6, 2
- adds r0, r6
- lsls r4, r0, 4
- add r4, r8
- lsls r0, 2
- mov r1, sp
- adds r5, r1, r0
- adds r0, r4, 0
- adds r1, r5, 0
- bl GetBoxMonNick
- adds r0, r5, 0
- adds r1, r4, 0
- bl MonAppendGenderSymbol
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0x1
- bls _08042648
- adds r0, r7, 0
- mov r1, sp
- bl StringCopy
- ldr r4, _080426A8 @ =gOtherText_NewLine2
- adds r0, r7, 0
- adds r1, r4, 0
- bl StringAppend
- adds r0, r7, 0
- mov r1, r9
- bl StringAppend
- adds r0, r7, 0
- adds r1, r4, 0
- bl StringAppend
- ldr r1, _080426AC @ =gOtherText_CancelAndLv
- adds r0, r7, 0
- bl StringAppend
- add sp, 0x28
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080426A8: .4byte gOtherText_NewLine2
-_080426AC: .4byte gOtherText_CancelAndLv
- thumb_func_end DaycareLevelMenuGetText
-
- thumb_func_start DaycareLevelMenuGetLevelText
-DaycareLevelMenuGetLevelText: @ 80426B0
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r6, r0, 0
- adds r4, r1, 0
- movs r0, 0xFF
- strb r0, [r4]
- movs r5, 0
- movs r0, 0xFC
- mov r8, r0
- movs r7, 0x14
-_080426C6:
- lsls r2, r5, 2
- adds r0, r2, r5
- lsls r0, 4
- adds r0, r6, r0
- movs r3, 0x88
- lsls r3, 1
- adds r1, r6, r3
- adds r1, r2
- ldr r1, [r1]
- bl Daycare_GetLevelAfterSteps
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- movs r0, 0x34
- strb r0, [r4]
- mov r0, r8
- strb r0, [r4, 0x1]
- strb r7, [r4, 0x2]
- movs r0, 0x6
- strb r0, [r4, 0x3]
- adds r0, r4, 0x4
- movs r2, 0x1
- movs r3, 0x3
- bl ConvertIntToDecimalStringN
- adds r4, r0, 0
- mov r3, r8
- strb r3, [r4]
- strb r7, [r4, 0x1]
- movs r0, 0
- strb r0, [r4, 0x2]
- adds r0, r4, 0x3
- ldr r1, _08042728 @ =gOtherText_NewLine2
- bl StringCopy
- adds r4, r0, 0
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x1
- bls _080426C6
- movs r0, 0xFF
- strb r0, [r4]
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08042728: .4byte gOtherText_NewLine2
- thumb_func_end DaycareLevelMenuGetLevelText
-
- thumb_func_start DaycareLevelMenuProcessKeyInput
-DaycareLevelMenuProcessKeyInput: @ 804272C
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- adds r5, r4, 0
- ldr r0, _08042760 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _08042768
- ldr r0, _08042764 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldrh r2, [r1, 0x8]
- movs r3, 0x8
- ldrsh r0, [r1, r3]
- cmp r0, 0
- beq _08042816
- subs r0, r2, 0x1
- strh r0, [r1, 0x8]
- movs r0, 0x1
- negs r0, r0
- b _0804278A
- .align 2, 0
-_08042760: .4byte gMain
-_08042764: .4byte gTasks
-_08042768:
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0804279C
- ldr r0, _08042798 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldrh r2, [r1, 0x8]
- movs r3, 0x8
- ldrsh r0, [r1, r3]
- cmp r0, 0x2
- beq _08042816
- adds r0, r2, 0x1
- strh r0, [r1, 0x8]
- movs r0, 0x1
-_0804278A:
- bl MoveMenuCursor
- movs r0, 0x5
- bl PlaySE
- b _08042816
- .align 2, 0
-_08042798: .4byte gTasks
-_0804279C:
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080427E8
- bl HandleDestroyMenuCursors
- movs r0, 0x5
- bl PlaySE
- ldr r3, _080427DC @ =gLastFieldPokeMenuOpened
- ldr r2, _080427E0 @ =gScriptResult
- ldr r1, _080427E4 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldrh r0, [r0, 0x8]
- strh r0, [r2]
- strb r0, [r3]
- adds r0, r4, 0
- bl DestroyTask
- movs r0, 0xF
- movs r1, 0x6
- movs r2, 0x1D
- movs r3, 0xD
- bl MenuZeroFillWindowRect
- bl EnableBothScriptContexts
- b _08042816
- .align 2, 0
-_080427DC: .4byte gLastFieldPokeMenuOpened
-_080427E0: .4byte gScriptResult
-_080427E4: .4byte gTasks
-_080427E8:
- movs r4, 0x2
- adds r0, r4, 0
- ands r0, r1
- cmp r0, 0
- beq _08042816
- bl HandleDestroyMenuCursors
- ldr r0, _0804281C @ =gLastFieldPokeMenuOpened
- ldr r1, _08042820 @ =gScriptResult
- strh r4, [r1]
- movs r1, 0x2
- strb r1, [r0]
- adds r0, r5, 0
- bl DestroyTask
- movs r0, 0xF
- movs r1, 0x6
- movs r2, 0x1D
- movs r3, 0xD
- bl MenuZeroFillWindowRect
- bl EnableBothScriptContexts
-_08042816:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0804281C: .4byte gLastFieldPokeMenuOpened
-_08042820: .4byte gScriptResult
- thumb_func_end DaycareLevelMenuProcessKeyInput
-
- thumb_func_start ShowDaycareLevelMenu
-ShowDaycareLevelMenu: @ 8042824
- push {r4,lr}
- sub sp, 0x6C
- movs r0, 0xF
- movs r1, 0x6
- movs r2, 0x1D
- movs r3, 0xD
- bl MenuDrawTextWindow
- ldr r4, _08042880 @ =gSaveBlock1 + 0x2F9C
- adds r0, r4, 0
- add r1, sp, 0x8
- bl DaycareLevelMenuGetText
- add r0, sp, 0x8
- movs r1, 0x10
- movs r2, 0x7
- bl MenuPrint
- adds r0, r4, 0
- add r1, sp, 0x8
- bl DaycareLevelMenuGetLevelText
- add r0, sp, 0x8
- movs r1, 0xCE
- movs r2, 0x38
- movs r3, 0x1
- bl MenuPrint_PixelCoords
- movs r0, 0
- str r0, [sp]
- movs r0, 0xD
- str r0, [sp, 0x4]
- movs r0, 0
- movs r1, 0x10
- movs r2, 0x7
- movs r3, 0x3
- bl InitMenu
- ldr r0, _08042884 @ =DaycareLevelMenuProcessKeyInput
- movs r1, 0x3
- bl CreateTask
- add sp, 0x6C
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08042880: .4byte gSaveBlock1 + 0x2F9C
-_08042884: .4byte DaycareLevelMenuProcessKeyInput
- thumb_func_end ShowDaycareLevelMenu
-
- thumb_func_start ChooseSendDaycareMon
-ChooseSendDaycareMon: @ 8042888
- push {lr}
- movs r0, 0x6
- movs r1, 0
- bl OpenPartyMenu
- ldr r1, _0804289C @ =gMain
- ldr r0, _080428A0 @ =c2_exit_to_overworld_2_switch
- str r0, [r1, 0x8]
- pop {r0}
- bx r0
- .align 2, 0
-_0804289C: .4byte gMain
-_080428A0: .4byte c2_exit_to_overworld_2_switch
- thumb_func_end ChooseSendDaycareMon
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/evolution_graphics.s b/asm/evolution_graphics.s
deleted file mode 100644
index 1130e085e..000000000
--- a/asm/evolution_graphics.s
+++ /dev/null
@@ -1,1829 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "constants/species_constants.inc"
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start nullsub_84
-nullsub_84: @ 814951C
- bx lr
- thumb_func_end nullsub_84
-
- thumb_func_start sub_8149520
-sub_8149520: @ 8149520
- push {r4,r5,lr}
- sub sp, 0x4
- movs r4, 0
- ldr r5, _08149554 @ =gUnknown_08416ED0
-_08149528:
- adds r0, r4, 0
- adds r0, 0x14
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r4, 1
- adds r1, r5
- ldrh r1, [r1]
- str r1, [sp]
- movs r2, 0
- movs r3, 0
- bl SetOamMatrix
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r4, 0xB
- bls _08149528
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08149554: .4byte gUnknown_08416ED0
- thumb_func_end sub_8149520
-
- thumb_func_start sub_8149558
-sub_8149558: @ 8149558
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x22
- ldrsh r0, [r4, r1]
- cmp r0, 0x8
- ble _08149606
- movs r2, 0x3C
- ldrsh r0, [r4, r2]
- adds r1, r0, 0
- muls r1, r0
- adds r0, r1, 0
- movs r1, 0x50
- bl __divsi3
- movs r1, 0x58
- subs r1, r0
- strh r1, [r4, 0x22]
- ldrh r0, [r4, 0x3A]
- lsls r0, 24
- lsrs r0, 24
- movs r2, 0x38
- ldrsh r1, [r4, r2]
- bl Sin
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0
- bge _08149592
- adds r0, 0x3
-_08149592:
- asrs r0, 2
- strh r0, [r4, 0x26]
- ldrh r0, [r4, 0x3A]
- lsls r0, 24
- lsrs r0, 24
- movs r2, 0x38
- ldrsh r1, [r4, r2]
- bl Cos
- strh r0, [r4, 0x24]
- ldrh r0, [r4, 0x3A]
- adds r0, 0x4
- strh r0, [r4, 0x3A]
- ldrh r1, [r4, 0x3C]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _081495BC
- ldrh r0, [r4, 0x38]
- subs r0, 0x1
- strh r0, [r4, 0x38]
-_081495BC:
- ldrh r0, [r4, 0x3C]
- adds r0, 0x1
- strh r0, [r4, 0x3C]
- movs r1, 0x26
- ldrsh r0, [r4, r1]
- cmp r0, 0
- ble _081495D2
- adds r1, r4, 0
- adds r1, 0x43
- movs r0, 0x1
- b _081495D8
-_081495D2:
- adds r1, r4, 0
- adds r1, 0x43
- movs r0, 0x14
-_081495D8:
- strb r0, [r1]
- movs r2, 0x38
- ldrsh r0, [r4, r2]
- cmp r0, 0
- bge _081495E4
- adds r0, 0x3
-_081495E4:
- asrs r0, 2
- adds r0, 0x14
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x1F
- bls _081495F2
- movs r2, 0x1F
-_081495F2:
- movs r0, 0x1F
- ands r2, r0
- lsls r2, 1
- ldrb r1, [r4, 0x3]
- movs r0, 0x3F
- negs r0, r0
- ands r0, r1
- orrs r0, r2
- strb r0, [r4, 0x3]
- b _0814960C
-_08149606:
- adds r0, r4, 0
- bl DestroySprite
-_0814960C:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8149558
-
- thumb_func_start sub_8149614
-sub_8149614: @ 8149614
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, _08149664 @ =gSpriteTemplate_8416EB8
- movs r1, 0x78
- movs r2, 0x58
- movs r3, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x40
- beq _0814965E
- ldr r4, _08149668 @ =gSprites
- lsls r3, r0, 4
- adds r3, r0
- lsls r3, 2
- adds r2, r3, r4
- movs r1, 0
- movs r0, 0x30
- strh r0, [r2, 0x38]
- strh r5, [r2, 0x3A]
- strh r1, [r2, 0x3C]
- ldrb r1, [r2, 0x1]
- subs r0, 0x34
- ands r0, r1
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2, 0x1]
- ldrb r0, [r2, 0x3]
- movs r1, 0x3E
- orrs r0, r1
- strb r0, [r2, 0x3]
- adds r4, 0x1C
- adds r3, r4
- ldr r0, _0814966C @ =sub_8149558
- str r0, [r3]
-_0814965E:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08149664: .4byte gSpriteTemplate_8416EB8
-_08149668: .4byte gSprites
-_0814966C: .4byte sub_8149558
- thumb_func_end sub_8149614
-
- thumb_func_start sub_8149670
-sub_8149670: @ 8149670
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x22
- ldrsh r0, [r4, r1]
- cmp r0, 0x57
- bgt _081496D6
- movs r2, 0x3C
- ldrsh r0, [r4, r2]
- adds r1, r0, 0
- muls r1, r0
- adds r0, r1, 0
- movs r1, 0x5
- bl __divsi3
- adds r0, 0x8
- strh r0, [r4, 0x22]
- ldrh r0, [r4, 0x3A]
- lsls r0, 24
- lsrs r0, 24
- movs r2, 0x38
- ldrsh r1, [r4, r2]
- bl Sin
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0
- bge _081496A8
- adds r0, 0x3
-_081496A8:
- asrs r0, 2
- strh r0, [r4, 0x26]
- ldrh r0, [r4, 0x3A]
- lsls r0, 24
- lsrs r0, 24
- movs r2, 0x38
- ldrsh r1, [r4, r2]
- bl Cos
- strh r0, [r4, 0x24]
- movs r1, 0x3C
- ldrsh r0, [r4, r1]
- lsls r0, 26
- lsrs r0, 24
- movs r1, 0x28
- bl Sin
- adds r0, 0x8
- strh r0, [r4, 0x38]
- ldrh r0, [r4, 0x3C]
- adds r0, 0x1
- strh r0, [r4, 0x3C]
- b _081496DC
-_081496D6:
- adds r0, r4, 0
- bl DestroySprite
-_081496DC:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8149670
-
- thumb_func_start sub_81496E4
-sub_81496E4: @ 81496E4
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, _08149740 @ =gSpriteTemplate_8416EB8
- movs r1, 0x78
- movs r2, 0x8
- movs r3, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x40
- beq _0814973A
- ldr r4, _08149744 @ =gSprites
- lsls r3, r0, 4
- adds r3, r0
- lsls r3, 2
- adds r2, r3, r4
- movs r1, 0
- movs r0, 0x8
- strh r0, [r2, 0x38]
- strh r5, [r2, 0x3A]
- strh r1, [r2, 0x3C]
- ldrb r1, [r2, 0x1]
- subs r0, 0xC
- ands r0, r1
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2, 0x1]
- ldrb r1, [r2, 0x3]
- movs r0, 0x3F
- negs r0, r0
- ands r0, r1
- movs r1, 0x32
- orrs r0, r1
- strb r0, [r2, 0x3]
- adds r2, 0x43
- movs r0, 0x1
- strb r0, [r2]
- adds r4, 0x1C
- adds r3, r4
- ldr r0, _08149748 @ =sub_8149670
- str r0, [r3]
-_0814973A:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08149740: .4byte gSpriteTemplate_8416EB8
-_08149744: .4byte gSprites
-_08149748: .4byte sub_8149670
- thumb_func_end sub_81496E4
-
- thumb_func_start sub_814974C
-sub_814974C: @ 814974C
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0x38
- ldrsh r0, [r4, r1]
- cmp r0, 0x8
- ble _08149788
- ldrh r0, [r4, 0x3A]
- lsls r0, 24
- lsrs r0, 24
- movs r2, 0x38
- ldrsh r1, [r4, r2]
- bl Sin
- strh r0, [r4, 0x26]
- ldrh r0, [r4, 0x3A]
- lsls r0, 24
- lsrs r0, 24
- movs r2, 0x38
- ldrsh r1, [r4, r2]
- bl Cos
- strh r0, [r4, 0x24]
- ldrh r0, [r4, 0x38]
- ldrh r1, [r4, 0x34]
- subs r0, r1
- strh r0, [r4, 0x38]
- ldrh r0, [r4, 0x3A]
- adds r0, 0x4
- strh r0, [r4, 0x3A]
- b _0814978E
-_08149788:
- adds r0, r4, 0
- bl DestroySprite
-_0814978E:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_814974C
-
- thumb_func_start sub_8149794
-sub_8149794: @ 8149794
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r1, 24
- lsrs r5, r1, 24
- ldr r0, _081497F0 @ =gSpriteTemplate_8416EB8
- movs r1, 0x78
- movs r2, 0x38
- movs r3, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x40
- beq _081497EA
- ldr r4, _081497F4 @ =gSprites
- lsls r3, r0, 4
- adds r3, r0
- lsls r3, 2
- adds r2, r3, r4
- movs r1, 0
- strh r5, [r2, 0x34]
- movs r0, 0x78
- strh r0, [r2, 0x38]
- strh r6, [r2, 0x3A]
- strh r1, [r2, 0x3C]
- ldrb r1, [r2, 0x1]
- subs r0, 0x7C
- ands r0, r1
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2, 0x1]
- ldrb r0, [r2, 0x3]
- movs r1, 0x3E
- orrs r0, r1
- strb r0, [r2, 0x3]
- adds r2, 0x43
- movs r0, 0x1
- strb r0, [r2]
- adds r4, 0x1C
- adds r3, r4
- ldr r0, _081497F8 @ =sub_814974C
- str r0, [r3]
-_081497EA:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_081497F0: .4byte gSpriteTemplate_8416EB8
-_081497F4: .4byte gSprites
-_081497F8: .4byte sub_814974C
- thumb_func_end sub_8149794
-
- thumb_func_start sub_81497FC
-sub_81497FC: @ 81497FC
- push {r4,r5,lr}
- adds r4, r0, 0
- ldrh r1, [r4, 0x3C]
- movs r0, 0x3
- ands r0, r1
- cmp r0, 0
- bne _08149810
- ldrh r0, [r4, 0x22]
- adds r0, 0x1
- strh r0, [r4, 0x22]
-_08149810:
- ldrh r1, [r4, 0x3A]
- movs r2, 0x3A
- ldrsh r0, [r4, r2]
- cmp r0, 0x7F
- bgt _081498C0
- lsls r0, r1, 24
- lsrs r0, 24
- movs r5, 0x38
- ldrsh r1, [r4, r5]
- bl Sin
- negs r0, r0
- strh r0, [r4, 0x26]
- movs r0, 0x34
- ldrsh r1, [r4, r0]
- movs r2, 0x3C
- ldrsh r0, [r4, r2]
- muls r0, r1
- movs r1, 0x3
- bl __divsi3
- adds r0, 0x78
- strh r0, [r4, 0x20]
- ldrh r0, [r4, 0x3A]
- adds r3, r0, 0x1
- strh r3, [r4, 0x3A]
- movs r5, 0x3A
- ldrsh r1, [r4, r5]
- lsls r0, r1, 1
- adds r0, r1
- lsls r0, 2
- cmp r0, 0
- bge _08149854
- adds r0, 0x7F
-_08149854:
- asrs r0, 7
- movs r1, 0x1F
- subs r1, r0
- lsls r1, 24
- lsrs r2, r1, 24
- lsls r0, r3, 16
- asrs r0, 16
- cmp r0, 0x40
- ble _08149870
- adds r1, r4, 0
- adds r1, 0x43
- movs r0, 0x1
- strb r0, [r1]
- b _081498A0
-_08149870:
- adds r3, r4, 0
- adds r3, 0x3E
- ldrb r1, [r3]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- strb r0, [r3]
- adds r1, r4, 0
- adds r1, 0x43
- movs r0, 0x14
- strb r0, [r1]
- ldrh r1, [r4, 0x3A]
- movs r5, 0x3A
- ldrsh r0, [r4, r5]
- cmp r0, 0x70
- ble _081498A0
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _081498A0
- ldrb r0, [r3]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r3]
-_081498A0:
- cmp r2, 0x13
- bhi _081498A6
- movs r2, 0x14
-_081498A6:
- movs r0, 0x1F
- ands r2, r0
- lsls r2, 1
- ldrb r1, [r4, 0x3]
- movs r0, 0x3F
- negs r0, r0
- ands r0, r1
- orrs r0, r2
- strb r0, [r4, 0x3]
- ldrh r0, [r4, 0x3C]
- adds r0, 0x1
- strh r0, [r4, 0x3C]
- b _081498C6
-_081498C0:
- adds r0, r4, 0
- bl DestroySprite
-_081498C6:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_81497FC
-
- thumb_func_start sub_81498CC
-sub_81498CC: @ 81498CC
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- ldr r0, _08149948 @ =gSpriteTemplate_8416EB8
- movs r1, 0x78
- movs r2, 0x38
- movs r3, 0
- bl CreateSprite
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x40
- beq _0814993C
- bl Random
- ldr r6, _0814994C @ =gSprites
- lsls r5, r4, 4
- adds r5, r4
- lsls r5, 2
- adds r4, r5, r6
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x7
- bl __umodsi3
- movs r1, 0x3
- subs r1, r0
- movs r0, 0
- mov r8, r0
- strh r1, [r4, 0x34]
- bl Random
- movs r1, 0x3F
- ands r1, r0
- adds r1, 0x30
- strh r1, [r4, 0x38]
- mov r0, r8
- strh r0, [r4, 0x3C]
- ldrb r1, [r4, 0x1]
- movs r0, 0x4
- negs r0, r0
- ands r0, r1
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r4, 0x1]
- ldrb r0, [r4, 0x3]
- movs r1, 0x3E
- orrs r0, r1
- strb r0, [r4, 0x3]
- adds r4, 0x43
- movs r0, 0x14
- strb r0, [r4]
- adds r6, 0x1C
- adds r5, r6
- ldr r0, _08149950 @ =sub_81497FC
- str r0, [r5]
-_0814993C:
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08149948: .4byte gSpriteTemplate_8416EB8
-_0814994C: .4byte gSprites
-_08149950: .4byte sub_81497FC
- thumb_func_end sub_81498CC
-
- thumb_func_start sub_8149954
-sub_8149954: @ 8149954
- push {lr}
- ldr r0, _08149968 @ =gUnknown_08416E84
- bl LoadCompressedObjectPic
- ldr r0, _0814996C @ =gUnknown_08416E94
- bl LoadSpritePalettes
- pop {r0}
- bx r0
- .align 2, 0
-_08149968: .4byte gUnknown_08416E84
-_0814996C: .4byte gUnknown_08416E94
- thumb_func_end sub_8149954
-
- thumb_func_start sub_8149970
-sub_8149970: @ 8149970
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- ldr r0, _08149998 @ =sub_81499A0
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _0814999C @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- strh r4, [r1, 0xA]
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08149998: .4byte sub_81499A0
-_0814999C: .4byte gTasks
- thumb_func_end sub_8149970
-
- thumb_func_start sub_81499A0
-sub_81499A0: @ 81499A0
- push {r4,r5,lr}
- sub sp, 0x4
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl sub_8149520
- ldr r0, _081499E4 @ =gTasks
- lsls r5, r4, 2
- adds r5, r4
- lsls r5, 3
- adds r5, r0
- movs r0, 0
- strh r0, [r5, 0x26]
- movs r0, 0xA
- ldrsh r1, [r5, r0]
- movs r0, 0x3
- lsls r0, r1
- ldr r1, _081499E8 @ =0x00007fff
- str r1, [sp]
- movs r1, 0xA
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r0, _081499EC @ =sub_81499F0
- str r0, [r5]
- movs r0, 0x8C
- bl PlaySE
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_081499E4: .4byte gTasks
-_081499E8: .4byte 0x00007fff
-_081499EC: .4byte sub_81499F0
- thumb_func_end sub_81499A0
-
- thumb_func_start sub_81499F0
-sub_81499F0: @ 81499F0
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r1, _08149A48 @ =gTasks
- lsls r3, r5, 2
- adds r0, r3, r5
- lsls r0, 3
- adds r1, r0, r1
- ldrh r2, [r1, 0x26]
- movs r4, 0x26
- ldrsh r0, [r1, r4]
- cmp r0, 0x3F
- bgt _08149A4C
- movs r0, 0x7
- ands r0, r2
- adds r7, r3, 0
- cmp r0, 0
- bne _08149A36
- movs r4, 0
- adds r6, r1, 0
-_08149A18:
- ldrh r1, [r6, 0x26]
- movs r0, 0x78
- ands r0, r1
- lsls r0, 1
- lsls r1, r4, 6
- adds r0, r1
- lsls r0, 24
- lsrs r0, 24
- bl sub_8149614
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x3
- bls _08149A18
-_08149A36:
- ldr r0, _08149A48 @ =gTasks
- adds r1, r7, r5
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x26]
- adds r0, 0x1
- strh r0, [r1, 0x26]
- b _08149A54
- .align 2, 0
-_08149A48: .4byte gTasks
-_08149A4C:
- movs r0, 0x60
- strh r0, [r1, 0x26]
- ldr r0, _08149A5C @ =sub_8149A60
- str r0, [r1]
-_08149A54:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08149A5C: .4byte sub_8149A60
- thumb_func_end sub_81499F0
-
- thumb_func_start sub_8149A60
-sub_8149A60: @ 8149A60
- push {r4,lr}
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r1, _08149A80 @ =gTasks
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- adds r1, r0, r1
- ldrh r3, [r1, 0x26]
- movs r4, 0x26
- ldrsh r0, [r1, r4]
- cmp r0, 0
- beq _08149A84
- subs r0, r3, 0x1
- strh r0, [r1, 0x26]
- b _08149A8A
- .align 2, 0
-_08149A80: .4byte gTasks
-_08149A84:
- adds r0, r2, 0
- bl DestroyTask
-_08149A8A:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8149A60
-
- thumb_func_start sub_8149A90
-sub_8149A90: @ 8149A90
- push {lr}
- ldr r0, _08149AA4 @ =sub_8149AA8
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .align 2, 0
-_08149AA4: .4byte sub_8149AA8
- thumb_func_end sub_8149A90
-
- thumb_func_start sub_8149AA8
-sub_8149AA8: @ 8149AA8
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl sub_8149520
- ldr r1, _08149AD4 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- movs r1, 0
- strh r1, [r0, 0x26]
- ldr r1, _08149AD8 @ =sub_8149ADC
- str r1, [r0]
- movs r0, 0xB7
- bl PlaySE
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08149AD4: .4byte gTasks
-_08149AD8: .4byte sub_8149ADC
- thumb_func_end sub_8149AA8
-
- thumb_func_start sub_8149ADC
-sub_8149ADC: @ 8149ADC
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r1, _08149B20 @ =gTasks
- lsls r2, r5, 2
- adds r0, r2, r5
- lsls r0, 3
- adds r1, r0, r1
- movs r3, 0x26
- ldrsh r0, [r1, r3]
- cmp r0, 0x5F
- bgt _08149B24
- adds r6, r2, 0
- cmp r0, 0x5
- bgt _08149B0E
- movs r4, 0
-_08149AFC:
- lsls r0, r4, 28
- lsrs r0, 24
- bl sub_81496E4
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x8
- bls _08149AFC
-_08149B0E:
- ldr r0, _08149B20 @ =gTasks
- adds r1, r6, r5
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x26]
- adds r0, 0x1
- strh r0, [r1, 0x26]
- b _08149B28
- .align 2, 0
-_08149B20: .4byte gTasks
-_08149B24:
- ldr r0, _08149B30 @ =sub_8149B34
- str r0, [r1]
-_08149B28:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08149B30: .4byte sub_8149B34
- thumb_func_end sub_8149ADC
-
- thumb_func_start sub_8149B34
-sub_8149B34: @ 8149B34
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
- pop {r0}
- bx r0
- thumb_func_end sub_8149B34
-
- thumb_func_start sub_8149B44
-sub_8149B44: @ 8149B44
- push {lr}
- ldr r0, _08149B58 @ =sub_8149B5C
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- .align 2, 0
-_08149B58: .4byte sub_8149B5C
- thumb_func_end sub_8149B44
-
- thumb_func_start sub_8149B5C
-sub_8149B5C: @ 8149B5C
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl sub_8149520
- ldr r1, _08149B88 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- movs r1, 0
- strh r1, [r0, 0x26]
- ldr r1, _08149B8C @ =sub_8149B90
- str r1, [r0]
- movs r0, 0x66
- bl PlaySE
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08149B88: .4byte gTasks
-_08149B8C: .4byte sub_8149B90
- thumb_func_end sub_8149B5C
-
- thumb_func_start sub_8149B90
-sub_8149B90: @ 8149B90
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r1, _08149BFC @ =gTasks
- lsls r2, r5, 2
- adds r0, r2, r5
- lsls r0, 3
- adds r1, r0, r1
- movs r3, 0x26
- ldrsh r0, [r1, r3]
- cmp r0, 0x2F
- bgt _08149C00
- adds r6, r2, 0
- cmp r0, 0
- bne _08149BC4
- movs r4, 0
-_08149BB0:
- lsls r0, r4, 28
- lsrs r0, 24
- movs r1, 0x4
- bl sub_8149794
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0xF
- bls _08149BB0
-_08149BC4:
- ldr r0, _08149BFC @ =gTasks
- adds r1, r6, r5
- lsls r1, 3
- adds r1, r0
- movs r2, 0x26
- ldrsh r0, [r1, r2]
- cmp r0, 0x20
- bne _08149BEA
- movs r4, 0
-_08149BD6:
- lsls r0, r4, 28
- lsrs r0, 24
- movs r1, 0x8
- bl sub_8149794
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0xF
- bls _08149BD6
-_08149BEA:
- ldr r0, _08149BFC @ =gTasks
- adds r1, r6, r5
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x26]
- adds r0, 0x1
- strh r0, [r1, 0x26]
- b _08149C04
- .align 2, 0
-_08149BFC: .4byte gTasks
-_08149C00:
- ldr r0, _08149C0C @ =sub_8149C10
- str r0, [r1]
-_08149C04:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08149C0C: .4byte sub_8149C10
- thumb_func_end sub_8149B90
-
- thumb_func_start sub_8149C10
-sub_8149C10: @ 8149C10
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- bl DestroyTask
- pop {r0}
- bx r0
- thumb_func_end sub_8149C10
-
- thumb_func_start sub_8149C20
-sub_8149C20: @ 8149C20
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- ldr r0, _08149C48 @ =sub_8149C50
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _08149C4C @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- strh r4, [r1, 0xC]
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08149C48: .4byte sub_8149C50
-_08149C4C: .4byte gTasks
- thumb_func_end sub_8149C20
-
- thumb_func_start sub_8149C50
-sub_8149C50: @ 8149C50
- push {r4,r5,lr}
- sub sp, 0x4
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl sub_8149520
- ldr r0, _08149C98 @ =gTasks
- lsls r5, r4, 2
- adds r5, r4
- lsls r5, 3
- adds r5, r0
- movs r0, 0
- strh r0, [r5, 0x26]
- ldr r0, _08149C9C @ =gPlttBufferFaded + 0x40
- ldr r1, _08149CA0 @ =gPlttBufferUnfaded + 0x40
- movs r2, 0x30
- bl CpuSet
- ldr r0, _08149CA4 @ =0xfff9001c
- ldr r1, _08149CA8 @ =0x00007fff
- str r1, [sp]
- movs r1, 0
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r0, _08149CAC @ =sub_8149CB0
- str r0, [r5]
- movs r0, 0xCA
- bl PlaySE
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08149C98: .4byte gTasks
-_08149C9C: .4byte gPlttBufferFaded + 0x40
-_08149CA0: .4byte gPlttBufferUnfaded + 0x40
-_08149CA4: .4byte 0xfff9001c
-_08149CA8: .4byte 0x00007fff
-_08149CAC: .4byte sub_8149CB0
- thumb_func_end sub_8149C50
-
- thumb_func_start sub_8149CB0
-sub_8149CB0: @ 8149CB0
- push {r4-r6,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r1, _08149CE8 @ =gTasks
- lsls r5, r6, 2
- adds r0, r5, r6
- lsls r0, 3
- adds r1, r0, r1
- movs r0, 0x26
- ldrsh r2, [r1, r0]
- cmp r2, 0x7F
- bgt _08149D2C
- adds r0, r2, 0
- cmp r0, 0
- beq _08149CEC
- cmp r0, 0x20
- beq _08149D00
- cmp r2, 0x31
- bgt _08149D10
- bl Random
- movs r1, 0x7
- ands r0, r1
- bl sub_81498CC
- b _08149D10
- .align 2, 0
-_08149CE8: .4byte gTasks
-_08149CEC:
- movs r4, 0
-_08149CEE:
- adds r0, r4, 0
- bl sub_81498CC
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x7
- bls _08149CEE
- b _08149D10
-_08149D00:
- ldr r0, _08149D20 @ =0xffff001c
- ldr r1, _08149D24 @ =0x00007fff
- str r1, [sp]
- movs r1, 0x10
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
-_08149D10:
- ldr r0, _08149D28 @ =gTasks
- adds r1, r5, r6
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x26]
- adds r0, 0x1
- strh r0, [r1, 0x26]
- b _08149D30
- .align 2, 0
-_08149D20: .4byte 0xffff001c
-_08149D24: .4byte 0x00007fff
-_08149D28: .4byte gTasks
-_08149D2C:
- ldr r0, _08149D38 @ =sub_8149D3C
- str r0, [r1]
-_08149D30:
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08149D38: .4byte sub_8149D3C
- thumb_func_end sub_8149CB0
-
- thumb_func_start sub_8149D3C
-sub_8149D3C: @ 8149D3C
- push {lr}
- lsls r0, 24
- lsrs r2, r0, 24
- ldr r0, _08149D58 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08149D54
- adds r0, r2, 0
- bl DestroyTask
-_08149D54:
- pop {r0}
- bx r0
- .align 2, 0
-_08149D58: .4byte gPaletteFade
- thumb_func_end sub_8149D3C
-
- thumb_func_start sub_8149D5C
-sub_8149D5C: @ 8149D5C
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- ldr r0, _08149D84 @ =sub_8149D8C
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _08149D88 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- strh r4, [r1, 0xC]
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08149D84: .4byte sub_8149D8C
-_08149D88: .4byte gTasks
- thumb_func_end sub_8149D5C
-
- thumb_func_start sub_8149D8C
-sub_8149D8C: @ 8149D8C
- push {r4,r5,lr}
- sub sp, 0x4
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl sub_8149520
- ldr r0, _08149DD4 @ =gTasks
- lsls r5, r4, 2
- adds r5, r4
- lsls r5, 3
- adds r5, r0
- movs r0, 0
- strh r0, [r5, 0x26]
- ldr r0, _08149DD8 @ =gPlttBufferFaded + 0x40
- ldr r1, _08149DDC @ =gPlttBufferUnfaded + 0x40
- movs r2, 0x30
- bl CpuSet
- ldr r0, _08149DE0 @ =0xfff90001
- ldr r1, _08149DE4 @ =0x00007fff
- str r1, [sp]
- movs r1, 0
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r0, _08149DE8 @ =sub_8149DEC
- str r0, [r5]
- movs r0, 0xCA
- bl PlaySE
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08149DD4: .4byte gTasks
-_08149DD8: .4byte gPlttBufferFaded + 0x40
-_08149DDC: .4byte gPlttBufferUnfaded + 0x40
-_08149DE0: .4byte 0xfff90001
-_08149DE4: .4byte 0x00007fff
-_08149DE8: .4byte sub_8149DEC
- thumb_func_end sub_8149D8C
-
- thumb_func_start sub_8149DEC
-sub_8149DEC: @ 8149DEC
- push {r4-r6,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r1, _08149E24 @ =gTasks
- lsls r5, r6, 2
- adds r0, r5, r6
- lsls r0, 3
- adds r1, r0, r1
- movs r0, 0x26
- ldrsh r2, [r1, r0]
- cmp r2, 0x7F
- bgt _08149E68
- adds r0, r2, 0
- cmp r0, 0
- beq _08149E28
- cmp r0, 0x20
- beq _08149E3C
- cmp r2, 0x31
- bgt _08149E4C
- bl Random
- movs r1, 0x7
- ands r0, r1
- bl sub_81498CC
- b _08149E4C
- .align 2, 0
-_08149E24: .4byte gTasks
-_08149E28:
- movs r4, 0
-_08149E2A:
- adds r0, r4, 0
- bl sub_81498CC
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x7
- bls _08149E2A
- b _08149E4C
-_08149E3C:
- ldr r0, _08149E5C @ =0xffff0001
- ldr r1, _08149E60 @ =0x00007fff
- str r1, [sp]
- movs r1, 0x10
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
-_08149E4C:
- ldr r0, _08149E64 @ =gTasks
- adds r1, r5, r6
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x26]
- adds r0, 0x1
- strh r0, [r1, 0x26]
- b _08149E6C
- .align 2, 0
-_08149E5C: .4byte 0xffff0001
-_08149E60: .4byte 0x00007fff
-_08149E64: .4byte gTasks
-_08149E68:
- ldr r0, _08149E74 @ =sub_8149D3C
- str r0, [r1]
-_08149E6C:
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08149E74: .4byte sub_8149D3C
- thumb_func_end sub_8149DEC
-
- thumb_func_start nullsub_85
-nullsub_85: @ 8149E78
- bx lr
- thumb_func_end nullsub_85
-
- thumb_func_start sub_8149E7C
-sub_8149E7C: @ 8149E7C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x28
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r1, 24
- lsrs r7, r1, 24
- movs r1, 0
- ldr r3, _08149FB0 @ =sub_8149FC8
- ldr r2, _08149FB4 @ =0x00007fff
-_08149E96:
- lsls r0, r1, 1
- add r0, sp
- adds r0, 0x4
- strh r2, [r0]
- adds r0, r1, 0x1
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, 0xF
- bls _08149E96
- adds r0, r3, 0
- movs r1, 0
- bl CreateTask
- mov r8, r0
- mov r0, r8
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldr r0, _08149FB8 @ =gTasks
- mov r1, r8
- lsls r6, r1, 2
- add r6, r8
- lsls r6, 3
- adds r6, r0
- strh r5, [r6, 0xA]
- strh r7, [r6, 0xC]
- movs r1, 0x80
- lsls r1, 1
- strh r1, [r6, 0xE]
- movs r0, 0x10
- strh r0, [r6, 0x10]
- movs r4, 0x80
- lsls r4, 9
- str r1, [sp]
- movs r0, 0x1E
- movs r2, 0
- movs r3, 0
- bl SetOamMatrix
- movs r0, 0x10
- ldrsh r1, [r6, r0]
- adds r0, r4, 0
- bl __divsi3
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- str r1, [sp]
- movs r0, 0x1F
- movs r2, 0
- movs r3, 0
- bl SetOamMatrix
- ldr r1, _08149FBC @ =gSprites
- mov r9, r1
- lsls r2, r5, 4
- adds r2, r5
- lsls r2, 2
- mov r3, r9
- adds r3, 0x1C
- adds r0, r2, r3
- ldr r1, _08149FC0 @ =nullsub_85
- str r1, [r0]
- add r2, r9
- ldrb r1, [r2, 0x1]
- movs r4, 0x4
- negs r4, r4
- adds r0, r4, 0
- ands r0, r1
- movs r1, 0x1
- orrs r0, r1
- strb r0, [r2, 0x1]
- ldrb r1, [r2, 0x3]
- movs r0, 0x3F
- negs r0, r0
- ands r0, r1
- movs r1, 0x3C
- orrs r0, r1
- strb r0, [r2, 0x3]
- movs r0, 0x3E
- adds r0, r2
- mov r10, r0
- ldrb r1, [r0]
- movs r5, 0x5
- negs r5, r5
- adds r0, r5, 0
- ands r0, r1
- mov r1, r10
- strb r0, [r1]
- ldrb r1, [r2, 0x5]
- lsrs r1, 4
- lsls r1, 5
- ldr r0, _08149FC4 @ =gPlttBufferFaded + 0x200
- mov r10, r0
- add r1, r10
- add r0, sp, 0x4
- movs r2, 0x10
- str r3, [sp, 0x24]
- bl CpuSet
- lsls r1, r7, 4
- adds r1, r7
- lsls r1, 2
- ldr r3, [sp, 0x24]
- adds r3, r1, r3
- ldr r0, _08149FC0 @ =nullsub_85
- str r0, [r3]
- add r1, r9
- ldrb r0, [r1, 0x1]
- ands r4, r0
- movs r0, 0x1
- orrs r4, r0
- strb r4, [r1, 0x1]
- ldrb r0, [r1, 0x3]
- movs r2, 0x3E
- orrs r0, r2
- strb r0, [r1, 0x3]
- adds r2, r1, 0
- adds r2, 0x3E
- ldrb r0, [r2]
- ands r5, r0
- strb r5, [r2]
- ldrb r1, [r1, 0x5]
- lsrs r1, 4
- lsls r1, 5
- add r1, r10
- add r0, sp, 0x4
- movs r2, 0x10
- bl CpuSet
- movs r1, 0
- strh r1, [r6, 0x18]
- mov r0, r8
- add sp, 0x28
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08149FB0: .4byte sub_8149FC8
-_08149FB4: .4byte 0x00007fff
-_08149FB8: .4byte gTasks
-_08149FBC: .4byte gSprites
-_08149FC0: .4byte nullsub_85
-_08149FC4: .4byte gPlttBufferFaded + 0x200
- thumb_func_end sub_8149E7C
-
- thumb_func_start sub_8149FC8
-sub_8149FC8: @ 8149FC8
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _08149FE4 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- movs r0, 0
- strh r0, [r1, 0x12]
- movs r0, 0x8
- strh r0, [r1, 0x14]
- ldr r0, _08149FE8 @ =sub_8149FEC
- str r0, [r1]
- bx lr
- .align 2, 0
-_08149FE4: .4byte gTasks
-_08149FE8: .4byte sub_8149FEC
- thumb_func_end sub_8149FC8
-
- thumb_func_start sub_8149FEC
-sub_8149FEC: @ 8149FEC
- push {r4,lr}
- lsls r0, 24
- lsrs r3, r0, 24
- ldr r1, _0814A00C @ =gTasks
- lsls r0, r3, 2
- adds r0, r3
- lsls r0, 3
- adds r2, r0, r1
- movs r1, 0x18
- ldrsh r0, [r2, r1]
- cmp r0, 0
- beq _0814A010
- adds r0, r3, 0
- bl sub_814A208
- b _0814A032
- .align 2, 0
-_0814A00C: .4byte gTasks
-_0814A010:
- ldrh r1, [r2, 0x14]
- movs r4, 0x14
- ldrsh r0, [r2, r4]
- cmp r0, 0x80
- bne _0814A022
- adds r0, r3, 0
- bl sub_814A158
- b _0814A032
-_0814A022:
- adds r0, r1, 0x2
- strh r0, [r2, 0x14]
- ldrh r0, [r2, 0x12]
- movs r1, 0x1
- eors r0, r1
- strh r0, [r2, 0x12]
- ldr r0, _0814A038 @ =sub_814A03C
- str r0, [r2]
-_0814A032:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0814A038: .4byte sub_814A03C
- thumb_func_end sub_8149FEC
-
- thumb_func_start sub_814A03C
-sub_814A03C: @ 814A03C
- push {r4-r7,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r1, _0814A060 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r2, r0, r1
- movs r3, 0x18
- ldrsh r0, [r2, r3]
- adds r5, r1, 0
- cmp r0, 0
- beq _0814A068
- ldr r0, _0814A064 @ =sub_814A208
- str r0, [r2]
- b _0814A14C
- .align 2, 0
-_0814A060: .4byte gTasks
-_0814A064: .4byte sub_814A208
-_0814A068:
- movs r6, 0
- movs r7, 0x12
- ldrsh r0, [r2, r7]
- cmp r0, 0
- bne _0814A0B8
- movs r0, 0xE
- ldrsh r1, [r2, r0]
- movs r3, 0x14
- ldrsh r0, [r2, r3]
- movs r3, 0x80
- lsls r3, 1
- subs r0, r3, r0
- cmp r1, r0
- bge _0814A08E
- ldrh r0, [r2, 0x14]
- ldrh r7, [r2, 0xE]
- adds r0, r7
- strh r0, [r2, 0xE]
- b _0814A092
-_0814A08E:
- strh r3, [r2, 0xE]
- movs r6, 0x1
-_0814A092:
- lsls r2, r4, 2
- adds r0, r2, r4
- lsls r0, 3
- adds r3, r0, r5
- movs r0, 0x10
- ldrsh r1, [r3, r0]
- movs r7, 0x14
- ldrsh r0, [r3, r7]
- adds r0, 0x10
- cmp r1, r0
- ble _0814A0B2
- ldrh r0, [r3, 0x10]
- ldrh r1, [r3, 0x14]
- subs r0, r1
- strh r0, [r3, 0x10]
- b _0814A102
-_0814A0B2:
- movs r0, 0x10
- strh r0, [r3, 0x10]
- b _0814A0FC
-_0814A0B8:
- movs r0, 0x10
- ldrsh r1, [r2, r0]
- movs r3, 0x14
- ldrsh r0, [r2, r3]
- movs r3, 0x80
- lsls r3, 1
- subs r0, r3, r0
- cmp r1, r0
- bge _0814A0D4
- ldrh r0, [r2, 0x14]
- ldrh r7, [r2, 0x10]
- adds r0, r7
- strh r0, [r2, 0x10]
- b _0814A0D8
-_0814A0D4:
- strh r3, [r2, 0x10]
- movs r6, 0x1
-_0814A0D8:
- lsls r2, r4, 2
- adds r0, r2, r4
- lsls r0, 3
- adds r3, r0, r5
- movs r0, 0xE
- ldrsh r1, [r3, r0]
- movs r7, 0x14
- ldrsh r0, [r3, r7]
- adds r0, 0x10
- cmp r1, r0
- ble _0814A0F8
- ldrh r0, [r3, 0xE]
- ldrh r1, [r3, 0x14]
- subs r0, r1
- strh r0, [r3, 0xE]
- b _0814A102
-_0814A0F8:
- movs r0, 0x10
- strh r0, [r3, 0xE]
-_0814A0FC:
- adds r0, r6, 0x1
- lsls r0, 24
- lsrs r6, r0, 24
-_0814A102:
- adds r0, r2, r4
- lsls r0, 3
- adds r5, r0, r5
- movs r0, 0xE
- ldrsh r1, [r5, r0]
- movs r4, 0x80
- lsls r4, 9
- adds r0, r4, 0
- bl __divsi3
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- str r1, [sp]
- movs r0, 0x1E
- movs r2, 0
- movs r3, 0
- bl SetOamMatrix
- movs r3, 0x10
- ldrsh r1, [r5, r3]
- adds r0, r4, 0
- bl __divsi3
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- str r1, [sp]
- movs r0, 0x1F
- movs r2, 0
- movs r3, 0
- bl SetOamMatrix
- cmp r6, 0x2
- bne _0814A14C
- ldr r0, _0814A154 @ =sub_8149FEC
- str r0, [r5]
-_0814A14C:
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0814A154: .4byte sub_8149FEC
- thumb_func_end sub_814A03C
-
- thumb_func_start sub_814A158
-sub_814A158: @ 814A158
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0814A200 @ =gSprites
- mov r8, r1
- ldr r1, _0814A204 @ =gTasks
- lsls r4, r0, 2
- adds r4, r0
- lsls r4, 3
- adds r4, r1
- movs r2, 0xA
- ldrsh r1, [r4, r2]
- lsls r2, r1, 4
- adds r2, r1
- lsls r2, 2
- add r2, r8
- ldrb r3, [r2, 0x1]
- movs r6, 0x4
- negs r6, r6
- adds r1, r6, 0
- ands r1, r3
- strb r1, [r2, 0x1]
- movs r2, 0xA
- ldrsh r1, [r4, r2]
- lsls r2, r1, 4
- adds r2, r1
- lsls r2, 2
- add r2, r8
- ldrb r3, [r2, 0x3]
- movs r5, 0x3F
- negs r5, r5
- adds r1, r5, 0
- ands r1, r3
- strb r1, [r2, 0x3]
- movs r1, 0xA
- ldrsh r2, [r4, r1]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- add r1, r8
- adds r1, 0x3E
- ldrb r2, [r1]
- movs r3, 0x4
- orrs r2, r3
- strb r2, [r1]
- movs r1, 0xC
- ldrsh r2, [r4, r1]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- add r1, r8
- ldrb r2, [r1, 0x1]
- ands r6, r2
- strb r6, [r1, 0x1]
- movs r1, 0xC
- ldrsh r2, [r4, r1]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- add r1, r8
- ldrb r2, [r1, 0x3]
- ands r5, r2
- strb r5, [r1, 0x3]
- movs r1, 0xC
- ldrsh r2, [r4, r1]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- add r1, r8
- adds r1, 0x3E
- ldrb r3, [r1]
- movs r2, 0x5
- negs r2, r2
- ands r2, r3
- strb r2, [r1]
- bl DestroyTask
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0814A200: .4byte gSprites
-_0814A204: .4byte gTasks
- thumb_func_end sub_814A158
-
- thumb_func_start sub_814A208
-sub_814A208: @ 814A208
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0814A2B0 @ =gSprites
- mov r8, r1
- ldr r1, _0814A2B4 @ =gTasks
- lsls r4, r0, 2
- adds r4, r0
- lsls r4, 3
- adds r4, r1
- movs r2, 0xA
- ldrsh r1, [r4, r2]
- lsls r2, r1, 4
- adds r2, r1
- lsls r2, 2
- add r2, r8
- ldrb r3, [r2, 0x1]
- movs r6, 0x4
- negs r6, r6
- adds r1, r6, 0
- ands r1, r3
- strb r1, [r2, 0x1]
- movs r2, 0xA
- ldrsh r1, [r4, r2]
- lsls r2, r1, 4
- adds r2, r1
- lsls r2, 2
- add r2, r8
- ldrb r3, [r2, 0x3]
- movs r5, 0x3F
- negs r5, r5
- adds r1, r5, 0
- ands r1, r3
- strb r1, [r2, 0x3]
- movs r1, 0xA
- ldrsh r2, [r4, r1]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- add r1, r8
- adds r1, 0x3E
- ldrb r3, [r1]
- movs r2, 0x5
- negs r2, r2
- ands r2, r3
- strb r2, [r1]
- movs r1, 0xC
- ldrsh r2, [r4, r1]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- add r1, r8
- ldrb r2, [r1, 0x1]
- ands r6, r2
- strb r6, [r1, 0x1]
- movs r1, 0xC
- ldrsh r2, [r4, r1]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- add r1, r8
- ldrb r2, [r1, 0x3]
- ands r5, r2
- strb r5, [r1, 0x3]
- movs r1, 0xC
- ldrsh r2, [r4, r1]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- add r1, r8
- adds r1, 0x3E
- ldrb r2, [r1]
- movs r3, 0x4
- orrs r2, r3
- strb r2, [r1]
- bl DestroyTask
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0814A2B0: .4byte gSprites
-_0814A2B4: .4byte gTasks
- thumb_func_end sub_814A208
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/evolution_scene.s b/asm/evolution_scene.s
deleted file mode 100644
index 700464405..000000000
--- a/asm/evolution_scene.s
+++ /dev/null
@@ -1,6717 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "constants/species_constants.inc"
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start CB2_BeginEvolutionScene
-CB2_BeginEvolutionScene: @ 8111894
- push {lr}
- bl UpdatePaletteFade
- bl RunTasks
- pop {r0}
- bx r0
- thumb_func_end CB2_BeginEvolutionScene
-
- thumb_func_start Task_BeginEvolutionScene
-Task_BeginEvolutionScene: @ 81118A4
- push {r4-r7,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r2, r0, 24
- movs r7, 0
- ldr r1, _081118C8 @ =gTasks
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- adds r4, r0, r1
- movs r1, 0x8
- ldrsh r0, [r4, r1]
- cmp r0, 0
- beq _081118CC
- cmp r0, 0x1
- beq _081118E4
- b _08111918
- .align 2, 0
-_081118C8: .4byte gTasks
-_081118CC:
- movs r0, 0x1
- negs r0, r0
- str r7, [sp]
- movs r1, 0
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- b _08111918
-_081118E4:
- ldr r0, _08111920 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08111918
- movs r0, 0xA
- ldrsh r7, [r4, r0]
- movs r1, 0xC
- ldrsh r0, [r4, r1]
- lsls r0, 16
- orrs r7, r0
- ldrh r5, [r4, 0x10]
- ldrb r6, [r4, 0x12]
- ldrh r4, [r4, 0x20]
- lsls r4, 24
- lsrs r4, 24
- adds r0, r2, 0
- bl DestroyTask
- adds r0, r7, 0
- adds r1, r5, 0
- adds r2, r6, 0
- adds r3, r4, 0
- bl EvolutionScene
-_08111918:
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08111920: .4byte gPaletteFade
- thumb_func_end Task_BeginEvolutionScene
-
- thumb_func_start BeginEvolutionScene
-BeginEvolutionScene: @ 8111924
- 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 r4, 16
- lsrs r4, 16
- lsls r5, 24
- lsrs r5, 24
- lsls r6, 24
- lsrs r6, 24
- ldr r0, _08111978 @ =Task_BeginEvolutionScene
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _0811197C @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- movs r0, 0
- strh r0, [r1, 0x8]
- mov r0, r8
- strh r0, [r1, 0xA]
- mov r0, r8
- lsrs r0, 16
- strh r0, [r1, 0xC]
- strh r4, [r1, 0x10]
- strh r5, [r1, 0x12]
- strh r6, [r1, 0x20]
- ldr r0, _08111980 @ =CB2_BeginEvolutionScene
- bl SetMainCallback2
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08111978: .4byte Task_BeginEvolutionScene
-_0811197C: .4byte gTasks
-_08111980: .4byte CB2_BeginEvolutionScene
- thumb_func_end BeginEvolutionScene
-
- thumb_func_start EvolutionScene
-EvolutionScene: @ 8111984
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x38
- str r0, [sp, 0x20]
- mov r10, r1
- mov r0, r10
- lsls r0, 16
- lsrs r0, 16
- mov r10, r0
- lsls r2, 24
- lsrs r2, 24
- str r2, [sp, 0x24]
- lsls r3, 24
- lsrs r3, 24
- str r3, [sp, 0x28]
- movs r0, 0
- bl SetHBlankCallback
- movs r0, 0
- bl SetVBlankCallback
- movs r5, 0
- str r5, [sp, 0x1C]
- add r0, sp, 0x1C
- movs r1, 0xC0
- lsls r1, 19
- ldr r2, _08111C10 @ =0x05006000
- bl CpuSet
- ldr r0, _08111C14 @ =REG_MOSAIC
- strh r5, [r0]
- subs r0, 0xC
- strh r5, [r0]
- adds r0, 0x4
- strh r5, [r0]
- subs r0, 0x2
- strh r5, [r0]
- adds r0, 0x4
- strh r5, [r0]
- adds r0, 0x2
- strh r5, [r0]
- adds r0, 0x2
- strh r5, [r0]
- ldr r4, _08111C18 @ =gWindowConfig_81E6C58
- adds r0, r4, 0
- bl SetUpWindowConfig
- bl ResetPaletteFade
- ldr r0, _08111C1C @ =gUnknown_030042A4
- strh r5, [r0]
- ldr r0, _08111C20 @ =gUnknown_030042A0
- strh r5, [r0]
- ldr r0, _08111C24 @ =gUnknown_030042C0
- strh r5, [r0]
- ldr r0, _08111C28 @ =gUnknown_030041B4
- strh r5, [r0]
- ldr r0, _08111C2C @ =gUnknown_03004288
- strh r5, [r0]
- ldr r0, _08111C30 @ =gUnknown_03004280
- strh r5, [r0]
- ldr r1, _08111C34 @ =gUnknown_030041B0
- movs r2, 0x80
- lsls r2, 1
- adds r0, r2, 0
- strh r0, [r1]
- ldr r0, _08111C38 @ =gUnknown_030041B8
- strh r5, [r0]
- ldr r0, _08111C3C @ =gUnknown_03004210
- adds r1, r4, 0
- bl InitWindowFromConfig
- ldr r1, _08111C40 @ =gBattleTerrain
- movs r0, 0x9
- strb r0, [r1]
- bl sub_800D6D4
- bl sub_800DAB8
- bl ResetSpriteData
- bl remove_some_task
- bl ResetTasks
- bl FreeAllSpritePalettes
- ldr r0, _08111C44 @ =gReservedSpritePaletteCount
- movs r3, 0x4
- strb r3, [r0]
- ldr r0, [sp, 0x20]
- movs r1, 0x2
- add r2, sp, 0x8
- bl GetMonData
- ldr r0, _08111C48 @ =gStringVar1
- add r1, sp, 0x8
- bl StringCopy10
- ldr r0, _08111C4C @ =gStringVar2
- movs r1, 0xB
- mov r4, r10
- muls r4, r1
- adds r1, r4, 0
- ldr r2, _08111C50 @ =gSpeciesNames
- adds r1, r2
- bl StringCopy
- ldr r0, [sp, 0x20]
- movs r1, 0xB
- bl GetMonData
- adds r6, r0, 0
- lsls r6, 16
- lsrs r6, 16
- ldr r0, [sp, 0x20]
- movs r1, 0x1
- bl GetMonData
- str r0, [sp, 0x2C]
- ldr r0, [sp, 0x20]
- movs r1, 0
- bl GetMonData
- str r0, [sp, 0x30]
- lsls r0, r6, 3
- ldr r1, _08111C54 @ =gMonFrontPicTable
- adds r0, r1
- lsls r2, r6, 2
- ldr r3, _08111C58 @ =gMonFrontPicCoords
- adds r2, r3
- ldrb r1, [r2]
- ldrb r2, [r2, 0x1]
- ldr r4, _08111C5C @ =gUnknown_081FAF4C
- ldr r3, [r4, 0x4]
- str r3, [sp]
- str r6, [sp, 0x4]
- movs r3, 0x80
- lsls r3, 18
- bl DecompressPicFromTable_2
- adds r0, r6, 0
- ldr r1, [sp, 0x2C]
- ldr r2, [sp, 0x30]
- bl GetMonSpritePalStructFromOtIdPersonality
- ldr r0, [r0]
- movs r1, 0x88
- lsls r1, 1
- movs r2, 0x20
- bl LoadCompressedPalette
- adds r0, r6, 0
- movs r1, 0x1
- bl GetMonSpriteTemplate_803C56C
- ldr r0, _08111C60 @ =gUnknown_02024E8C
- mov r9, r0
- ldr r1, _08111C64 @ =gDummySpriteAffineAnimTable
- str r1, [r0, 0x10]
- movs r1, 0x78
- movs r2, 0x40
- movs r3, 0x1E
- bl CreateSprite
- lsls r1, r0, 24
- lsrs r2, r1, 24
- ldr r3, _08111C68 @ =0x02014800
- strb r0, [r3]
- ldr r7, _08111C6C @ =gSprites
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- movs r4, 0x1C
- adds r4, r7
- mov r8, r4
- adds r0, r1, r4
- ldr r2, _08111C70 @ =nullsub_37
- str r2, [r0]
- adds r1, r7
- ldrb r2, [r1, 0x5]
- movs r4, 0xF
- adds r0, r4, 0
- ands r0, r2
- movs r2, 0x10
- orrs r0, r2
- strb r0, [r1, 0x5]
- adds r1, 0x3E
- ldrb r0, [r1]
- movs r3, 0x4
- orrs r0, r3
- strb r0, [r1]
- mov r1, r10
- lsls r0, r1, 3
- ldr r2, _08111C54 @ =gMonFrontPicTable
- adds r0, r2
- lsls r2, r1, 2
- ldr r3, _08111C58 @ =gMonFrontPicCoords
- adds r2, r3
- ldrb r1, [r2]
- ldrb r2, [r2, 0x1]
- str r2, [sp, 0x34]
- ldr r2, _08111C5C @ =gUnknown_081FAF4C
- ldr r2, [r2, 0xC]
- str r2, [sp]
- mov r3, r10
- str r3, [sp, 0x4]
- ldr r2, [sp, 0x34]
- movs r3, 0x80
- lsls r3, 18
- bl DecompressPicFromTable_2
- mov r0, r10
- ldr r1, [sp, 0x2C]
- ldr r2, [sp, 0x30]
- bl GetMonSpritePalStructFromOtIdPersonality
- ldr r0, [r0]
- movs r1, 0x90
- lsls r1, 1
- movs r2, 0x20
- bl LoadCompressedPalette
- mov r0, r10
- movs r1, 0x3
- bl GetMonSpriteTemplate_803C56C
- ldr r0, _08111C64 @ =gDummySpriteAffineAnimTable
- mov r1, r9
- str r0, [r1, 0x10]
- mov r0, r9
- movs r1, 0x78
- movs r2, 0x40
- movs r3, 0x1E
- bl CreateSprite
- lsls r1, r0, 24
- lsrs r2, r1, 24
- ldr r3, _08111C68 @ =0x02014800
- strb r0, [r3, 0x1]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- add r8, r1
- ldr r0, _08111C70 @ =nullsub_37
- mov r2, r8
- str r0, [r2]
- adds r1, r7
- ldrb r0, [r1, 0x5]
- ands r4, r0
- movs r0, 0x20
- orrs r4, r0
- strb r4, [r1, 0x5]
- adds r1, 0x3E
- ldrb r0, [r1]
- movs r3, 0x4
- orrs r0, r3
- strb r0, [r1]
- bl sub_8149954
- ldr r0, _08111C74 @ =Task_EvolutionScene
- movs r1, 0
- bl CreateTask
- lsls r1, r0, 24
- lsrs r2, r1, 24
- ldr r4, _08111C68 @ =0x02014800
- strb r0, [r4, 0x2]
- ldr r1, _08111C78 @ =gTasks
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- adds r0, r1
- strh r5, [r0, 0x8]
- strh r6, [r0, 0xE]
- mov r1, r10
- strh r1, [r0, 0x10]
- mov r2, sp
- ldrh r2, [r2, 0x20]
- strh r2, [r0, 0xA]
- ldr r3, [sp, 0x20]
- lsrs r1, r3, 16
- strh r1, [r0, 0xC]
- mov r4, sp
- ldrh r4, [r4, 0x24]
- strh r4, [r0, 0x12]
- movs r1, 0x1
- strh r1, [r0, 0x14]
- strh r5, [r0, 0x1E]
- mov r1, sp
- ldrh r1, [r1, 0x28]
- strh r1, [r0, 0x20]
- ldr r0, _08111C7C @ =0x02009000
- ldr r1, _08111C80 @ =gPlttBufferUnfaded + 0x40
- movs r2, 0x60
- bl memcpy
- movs r1, 0x80
- lsls r1, 19
- movs r2, 0xFA
- lsls r2, 5
- adds r0, r2, 0
- strh r0, [r1]
- ldr r0, _08111C84 @ =HBlankCB_EvolutionScene
- bl SetHBlankCallback
- ldr r0, _08111C88 @ =VBlankCB_EvolutionScene
- bl SetVBlankCallback
- bl m4aMPlayAllStop
- ldr r0, _08111C8C @ =CB2_EvolutionSceneUpdate_0
- bl SetMainCallback2
- add sp, 0x38
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08111C10: .4byte 0x05006000
-_08111C14: .4byte REG_MOSAIC
-_08111C18: .4byte gWindowConfig_81E6C58
-_08111C1C: .4byte gUnknown_030042A4
-_08111C20: .4byte gUnknown_030042A0
-_08111C24: .4byte gUnknown_030042C0
-_08111C28: .4byte gUnknown_030041B4
-_08111C2C: .4byte gUnknown_03004288
-_08111C30: .4byte gUnknown_03004280
-_08111C34: .4byte gUnknown_030041B0
-_08111C38: .4byte gUnknown_030041B8
-_08111C3C: .4byte gUnknown_03004210
-_08111C40: .4byte gBattleTerrain
-_08111C44: .4byte gReservedSpritePaletteCount
-_08111C48: .4byte gStringVar1
-_08111C4C: .4byte gStringVar2
-_08111C50: .4byte gSpeciesNames
-_08111C54: .4byte gMonFrontPicTable
-_08111C58: .4byte gMonFrontPicCoords
-_08111C5C: .4byte gUnknown_081FAF4C
-_08111C60: .4byte gUnknown_02024E8C
-_08111C64: .4byte gDummySpriteAffineAnimTable
-_08111C68: .4byte 0x02014800
-_08111C6C: .4byte gSprites
-_08111C70: .4byte nullsub_37
-_08111C74: .4byte Task_EvolutionScene
-_08111C78: .4byte gTasks
-_08111C7C: .4byte 0x02009000
-_08111C80: .4byte gPlttBufferUnfaded + 0x40
-_08111C84: .4byte HBlankCB_EvolutionScene
-_08111C88: .4byte VBlankCB_EvolutionScene
-_08111C8C: .4byte CB2_EvolutionSceneUpdate_0
- thumb_func_end EvolutionScene
-
- thumb_func_start CB2_EvolutionSceneLoadGraphics
-CB2_EvolutionSceneLoadGraphics: @ 8111C90
- push {r4-r6,lr}
- mov r6, r10
- mov r5, r9
- mov r4, r8
- push {r4-r6}
- sub sp, 0xC
- ldr r2, _08111E14 @ =gTasks
- ldr r0, _08111E18 @ =0x02014800
- mov r9, r0
- ldrb r1, [r0, 0x2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- movs r1, 0x20
- ldrsh r2, [r0, r1]
- movs r1, 0x64
- adds r4, r2, 0
- muls r4, r1
- ldr r1, _08111E1C @ =gPlayerParty
- adds r4, r1
- ldrh r6, [r0, 0x10]
- adds r0, r4, 0
- movs r1, 0x1
- bl GetMonData
- mov r10, r0
- adds r0, r4, 0
- movs r1, 0
- bl GetMonData
- mov r8, r0
- movs r0, 0
- bl SetHBlankCallback
- movs r0, 0
- bl SetVBlankCallback
- movs r5, 0
- str r5, [sp, 0x8]
- movs r1, 0xC0
- lsls r1, 19
- ldr r2, _08111E20 @ =0x05006000
- add r0, sp, 0x8
- bl CpuSet
- ldr r0, _08111E24 @ =REG_MOSAIC
- strh r5, [r0]
- subs r0, 0xC
- strh r5, [r0]
- adds r0, 0x4
- strh r5, [r0]
- subs r0, 0x2
- strh r5, [r0]
- adds r0, 0x4
- strh r5, [r0]
- adds r0, 0x2
- strh r5, [r0]
- adds r0, 0x2
- strh r5, [r0]
- ldr r4, _08111E28 @ =gWindowConfig_81E6C58
- adds r0, r4, 0
- bl SetUpWindowConfig
- bl ResetPaletteFade
- ldr r0, _08111E2C @ =gUnknown_030042A4
- strh r5, [r0]
- ldr r0, _08111E30 @ =gUnknown_030042A0
- strh r5, [r0]
- ldr r0, _08111E34 @ =gUnknown_030042C0
- strh r5, [r0]
- ldr r0, _08111E38 @ =gUnknown_030041B4
- strh r5, [r0]
- ldr r0, _08111E3C @ =gUnknown_03004288
- strh r5, [r0]
- ldr r0, _08111E40 @ =gUnknown_03004280
- strh r5, [r0]
- ldr r1, _08111E44 @ =gUnknown_030041B0
- movs r2, 0x80
- lsls r2, 1
- adds r0, r2, 0
- strh r0, [r1]
- ldr r0, _08111E48 @ =gUnknown_030041B8
- strh r5, [r0]
- ldr r0, _08111E4C @ =gUnknown_03004210
- adds r1, r4, 0
- bl InitWindowFromConfig
- ldr r1, _08111E50 @ =gBattleTerrain
- movs r0, 0x9
- strb r0, [r1]
- bl sub_800D6D4
- bl sub_800DAB8
- bl ResetSpriteData
- bl FreeAllSpritePalettes
- ldr r1, _08111E54 @ =gReservedSpritePaletteCount
- movs r0, 0x4
- strb r0, [r1]
- lsls r0, r6, 3
- ldr r1, _08111E58 @ =gMonFrontPicTable
- adds r0, r1
- ldr r1, _08111E5C @ =gMonFrontPicCoords
- lsls r2, r6, 2
- adds r2, r1
- ldrb r1, [r2]
- ldrb r2, [r2, 0x1]
- movs r3, 0x80
- lsls r3, 18
- ldr r4, _08111E60 @ =gUnknown_081FAF4C
- ldr r4, [r4, 0xC]
- str r4, [sp]
- str r6, [sp, 0x4]
- bl DecompressPicFromTable_2
- adds r0, r6, 0
- mov r1, r10
- mov r2, r8
- bl GetMonSpritePalStructFromOtIdPersonality
- ldr r0, [r0]
- movs r1, 0x90
- lsls r1, 1
- movs r2, 0x20
- bl LoadCompressedPalette
- adds r0, r6, 0
- movs r1, 0x3
- bl GetMonSpriteTemplate_803C56C
- ldr r0, _08111E64 @ =gUnknown_02024E8C
- ldr r1, _08111E68 @ =gDummySpriteAffineAnimTable
- str r1, [r0, 0x10]
- movs r1, 0x78
- movs r2, 0x40
- movs r3, 0x1E
- bl CreateSprite
- lsls r2, r0, 24
- lsrs r2, 24
- mov r1, r9
- strb r0, [r1, 0x1]
- ldr r3, _08111E6C @ =gSprites
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r0, r3, 0
- adds r0, 0x1C
- adds r0, r1, r0
- ldr r2, _08111E70 @ =nullsub_37
- str r2, [r0]
- adds r1, r3
- ldrb r2, [r1, 0x5]
- movs r0, 0xF
- ands r0, r2
- movs r2, 0x20
- orrs r0, r2
- strb r0, [r1, 0x5]
- movs r1, 0x80
- lsls r1, 19
- movs r2, 0xFA
- lsls r2, 5
- adds r0, r2, 0
- strh r0, [r1]
- ldr r0, _08111E74 @ =HBlankCB_EvolutionScene
- bl SetHBlankCallback
- ldr r0, _08111E78 @ =VBlankCB_EvolutionScene
- bl SetVBlankCallback
- ldr r0, _08111E7C @ =CB2_EvolutionSceneUpdate_0
- bl SetMainCallback2
- movs r0, 0x1
- negs r0, r0
- str r5, [sp]
- movs r1, 0
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- add sp, 0xC
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08111E14: .4byte gTasks
-_08111E18: .4byte 0x02014800
-_08111E1C: .4byte gPlayerParty
-_08111E20: .4byte 0x05006000
-_08111E24: .4byte REG_MOSAIC
-_08111E28: .4byte gWindowConfig_81E6C58
-_08111E2C: .4byte gUnknown_030042A4
-_08111E30: .4byte gUnknown_030042A0
-_08111E34: .4byte gUnknown_030042C0
-_08111E38: .4byte gUnknown_030041B4
-_08111E3C: .4byte gUnknown_03004288
-_08111E40: .4byte gUnknown_03004280
-_08111E44: .4byte gUnknown_030041B0
-_08111E48: .4byte gUnknown_030041B8
-_08111E4C: .4byte gUnknown_03004210
-_08111E50: .4byte gBattleTerrain
-_08111E54: .4byte gReservedSpritePaletteCount
-_08111E58: .4byte gMonFrontPicTable
-_08111E5C: .4byte gMonFrontPicCoords
-_08111E60: .4byte gUnknown_081FAF4C
-_08111E64: .4byte gUnknown_02024E8C
-_08111E68: .4byte gDummySpriteAffineAnimTable
-_08111E6C: .4byte gSprites
-_08111E70: .4byte nullsub_37
-_08111E74: .4byte HBlankCB_EvolutionScene
-_08111E78: .4byte VBlankCB_EvolutionScene
-_08111E7C: .4byte CB2_EvolutionSceneUpdate_0
- thumb_func_end CB2_EvolutionSceneLoadGraphics
-
- thumb_func_start CB2_TradeEvolutionSceneLoadGraphics
-CB2_TradeEvolutionSceneLoadGraphics: @ 8111E80
- push {r4-r7,lr}
- sub sp, 0x8
- ldr r2, _08111EB8 @ =gTasks
- ldr r0, _08111EBC @ =0x02014800
- ldrb r1, [r0, 0x2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r2
- movs r1, 0x20
- ldrsh r2, [r0, r1]
- movs r1, 0x64
- muls r2, r1
- ldr r1, _08111EC0 @ =gPlayerParty
- adds r4, r2, r1
- ldrh r7, [r0, 0x10]
- ldr r0, _08111EC4 @ =gMain
- ldr r2, _08111EC8 @ =0x0000043c
- adds r0, r2
- ldrb r0, [r0]
- cmp r0, 0x6
- bls _08111EAE
- b _081120D6
-_08111EAE:
- lsls r0, 2
- ldr r1, _08111ECC @ =_08111ED0
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08111EB8: .4byte gTasks
-_08111EBC: .4byte 0x02014800
-_08111EC0: .4byte gPlayerParty
-_08111EC4: .4byte gMain
-_08111EC8: .4byte 0x0000043c
-_08111ECC: .4byte _08111ED0
- .align 2, 0
-_08111ED0:
- .4byte _08111EEC
- .4byte _08111F68
- .4byte _08111F88
- .4byte _08111FDC
- .4byte _08111FE2
- .4byte _08112048
- .4byte _081120B4
-_08111EEC:
- movs r0, 0x80
- lsls r0, 19
- movs r4, 0
- strh r4, [r0]
- movs r0, 0
- bl SetHBlankCallback
- movs r0, 0
- bl SetVBlankCallback
- bl ResetSpriteData
- bl FreeAllSpritePalettes
- ldr r1, _08111F3C @ =gReservedSpritePaletteCount
- movs r0, 0x4
- strb r0, [r1]
- ldr r0, _08111F40 @ =gUnknown_030042A4
- strh r4, [r0]
- ldr r0, _08111F44 @ =gUnknown_030042A0
- strh r4, [r0]
- ldr r0, _08111F48 @ =gUnknown_030042C0
- strh r4, [r0]
- ldr r0, _08111F4C @ =gUnknown_030041B4
- strh r4, [r0]
- ldr r0, _08111F50 @ =gUnknown_03004288
- strh r4, [r0]
- ldr r0, _08111F54 @ =gUnknown_03004280
- strh r4, [r0]
- ldr r1, _08111F58 @ =gUnknown_030041B0
- movs r2, 0x80
- lsls r2, 1
- adds r0, r2, 0
- strh r0, [r1]
- ldr r0, _08111F5C @ =gUnknown_030041B8
- strh r4, [r0]
- ldr r1, _08111F60 @ =gMain
- ldr r0, _08111F64 @ =0x0000043c
- adds r1, r0
- b _0811208E
- .align 2, 0
-_08111F3C: .4byte gReservedSpritePaletteCount
-_08111F40: .4byte gUnknown_030042A4
-_08111F44: .4byte gUnknown_030042A0
-_08111F48: .4byte gUnknown_030042C0
-_08111F4C: .4byte gUnknown_030041B4
-_08111F50: .4byte gUnknown_03004288
-_08111F54: .4byte gUnknown_03004280
-_08111F58: .4byte gUnknown_030041B0
-_08111F5C: .4byte gUnknown_030041B8
-_08111F60: .4byte gMain
-_08111F64: .4byte 0x0000043c
-_08111F68:
- ldr r4, _08111F80 @ =gWindowConfig_81E6F84
- adds r0, r4, 0
- bl SetUpWindowConfig
- ldr r0, _08111F84 @ =gUnknown_03004828
- ldr r0, [r0]
- adds r0, 0x4
- adds r1, r4, 0
- bl InitWindowFromConfig
- b _08112088
- .align 2, 0
-_08111F80: .4byte gWindowConfig_81E6F84
-_08111F84: .4byte gUnknown_03004828
-_08111F88:
- ldr r4, _08111FC8 @ =gUnknown_03004828
- ldr r0, [r4]
- adds r0, 0x4
- bl LoadTextWindowGraphics
- movs r0, 0x2
- bl SetTextWindowBaseTileNum
- ldr r1, [r4]
- adds r1, 0x34
- strb r0, [r1]
- ldr r0, [r4]
- adds r0, 0x4
- bl LoadTextWindowGraphics
- bl MenuZeroFillScreen
- bl ResetPaletteFade
- ldr r1, _08111FCC @ =gMain
- ldr r0, _08111FD0 @ =0x0000043c
- adds r1, r0
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- ldr r0, _08111FD4 @ =HBlankCB_EvolutionScene
- bl SetHBlankCallback
- ldr r0, _08111FD8 @ =VBlankCB_TradeEvolutionScene
- bl SetVBlankCallback
- b _081120D6
- .align 2, 0
-_08111FC8: .4byte gUnknown_03004828
-_08111FCC: .4byte gMain
-_08111FD0: .4byte 0x0000043c
-_08111FD4: .4byte HBlankCB_EvolutionScene
-_08111FD8: .4byte VBlankCB_TradeEvolutionScene
-_08111FDC:
- bl sub_804E22C
- b _08112088
-_08111FE2:
- adds r0, r4, 0
- movs r1, 0x1
- bl GetMonData
- adds r6, r0, 0
- adds r0, r4, 0
- movs r1, 0
- bl GetMonData
- adds r5, r0, 0
- lsls r0, r7, 3
- ldr r1, _08112034 @ =gMonFrontPicTable
- adds r0, r1
- ldr r1, _08112038 @ =gMonFrontPicCoords
- lsls r2, r7, 2
- adds r2, r1
- ldrb r1, [r2]
- ldrb r2, [r2, 0x1]
- movs r3, 0x80
- lsls r3, 18
- ldr r4, _0811203C @ =gUnknown_081FAF4C
- ldr r4, [r4, 0xC]
- str r4, [sp]
- str r7, [sp, 0x4]
- bl DecompressPicFromTable_2
- adds r0, r7, 0
- adds r1, r6, 0
- adds r2, r5, 0
- bl GetMonSpritePalStructFromOtIdPersonality
- ldr r0, [r0]
- movs r1, 0x90
- lsls r1, 1
- movs r2, 0x20
- bl LoadCompressedPalette
- ldr r1, _08112040 @ =gMain
- ldr r0, _08112044 @ =0x0000043c
- adds r1, r0
- b _0811208E
- .align 2, 0
-_08112034: .4byte gMonFrontPicTable
-_08112038: .4byte gMonFrontPicCoords
-_0811203C: .4byte gUnknown_081FAF4C
-_08112040: .4byte gMain
-_08112044: .4byte 0x0000043c
-_08112048:
- adds r0, r7, 0
- movs r1, 0x3
- bl GetMonSpriteTemplate_803C56C
- ldr r0, _08112098 @ =gUnknown_02024E8C
- ldr r1, _0811209C @ =gDummySpriteAffineAnimTable
- str r1, [r0, 0x10]
- movs r1, 0x78
- movs r2, 0x40
- movs r3, 0x1E
- bl CreateSprite
- ldr r1, _081120A0 @ =0x02014800
- lsls r2, r0, 24
- lsrs r2, 24
- strb r0, [r1, 0x1]
- ldr r3, _081120A4 @ =gSprites
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r0, r3, 0
- adds r0, 0x1C
- adds r0, r1, r0
- ldr r2, _081120A8 @ =nullsub_37
- str r2, [r0]
- adds r1, r3
- ldrb r2, [r1, 0x5]
- movs r0, 0xF
- ands r0, r2
- movs r2, 0x20
- orrs r0, r2
- strb r0, [r1, 0x5]
-_08112088:
- ldr r1, _081120AC @ =gMain
- ldr r2, _081120B0 @ =0x0000043c
- adds r1, r2
-_0811208E:
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _081120D6
- .align 2, 0
-_08112098: .4byte gUnknown_02024E8C
-_0811209C: .4byte gDummySpriteAffineAnimTable
-_081120A0: .4byte 0x02014800
-_081120A4: .4byte gSprites
-_081120A8: .4byte nullsub_37
-_081120AC: .4byte gMain
-_081120B0: .4byte 0x0000043c
-_081120B4:
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- ldr r0, _081120E0 @ =CB2_EvolutionSceneUpdate_1
- bl SetMainCallback2
- movs r1, 0x80
- lsls r1, 19
- movs r2, 0x9A
- lsls r2, 5
- adds r0, r2, 0
- strh r0, [r1]
-_081120D6:
- add sp, 0x8
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_081120E0: .4byte CB2_EvolutionSceneUpdate_1
- thumb_func_end CB2_TradeEvolutionSceneLoadGraphics
-
- thumb_func_start TradeEvolutionScene
-TradeEvolutionScene: @ 81120E4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x24
- str r0, [sp, 0x1C]
- adds r5, r1, 0
- adds r4, r2, 0
- mov r10, r3
- lsls r5, 16
- lsrs r5, 16
- lsls r4, 24
- lsrs r4, 24
- mov r0, r10
- lsls r0, 24
- lsrs r0, 24
- mov r10, r0
- ldr r0, [sp, 0x1C]
- movs r1, 0x2
- add r2, sp, 0x8
- bl GetMonData
- ldr r0, _08112234 @ =gStringVar1
- add r1, sp, 0x8
- bl StringCopy10
- ldr r0, _08112238 @ =gStringVar2
- movs r1, 0xB
- muls r1, r5
- ldr r2, _0811223C @ =gSpeciesNames
- adds r1, r2
- bl StringCopy
- ldr r1, _08112240 @ =gAffineAnimsDisabled
- movs r0, 0x1
- strb r0, [r1]
- ldr r0, [sp, 0x1C]
- movs r1, 0xB
- bl GetMonData
- mov r8, r0
- mov r1, r8
- lsls r1, 16
- lsrs r1, 16
- mov r8, r1
- ldr r0, [sp, 0x1C]
- movs r1, 0
- bl GetMonData
- adds r6, r0, 0
- ldr r0, [sp, 0x1C]
- movs r1, 0x1
- bl GetMonData
- adds r7, r0, 0
- ldr r2, _08112244 @ =0x02014800
- mov r9, r2
- strb r4, [r2]
- lsls r0, r5, 3
- ldr r1, _08112248 @ =gMonFrontPicTable
- adds r0, r1
- ldr r1, _0811224C @ =gMonFrontPicCoords
- lsls r2, r5, 2
- adds r2, r1
- ldrb r1, [r2]
- ldrb r2, [r2, 0x1]
- movs r3, 0x80
- lsls r3, 18
- ldr r4, _08112250 @ =gUnknown_081FAF4C
- ldr r4, [r4, 0x4]
- str r4, [sp]
- str r5, [sp, 0x4]
- bl DecompressPicFromTable_2
- adds r0, r5, 0
- adds r1, r7, 0
- adds r2, r6, 0
- bl GetMonSpritePalStructFromOtIdPersonality
- ldr r0, [r0]
- movs r1, 0x90
- lsls r1, 1
- movs r2, 0x20
- bl LoadCompressedPalette
- adds r0, r5, 0
- movs r1, 0x1
- bl GetMonSpriteTemplate_803C56C
- ldr r0, _08112254 @ =gUnknown_02024E8C
- ldr r1, _08112258 @ =gDummySpriteAffineAnimTable
- str r1, [r0, 0x10]
- movs r1, 0x78
- movs r2, 0x40
- movs r3, 0x1E
- bl CreateSprite
- lsls r1, r0, 24
- lsrs r2, r1, 24
- mov r1, r9
- strb r0, [r1, 0x1]
- ldr r3, _0811225C @ =gSprites
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r0, r3, 0
- adds r0, 0x1C
- adds r0, r1, r0
- ldr r2, _08112260 @ =nullsub_37
- str r2, [r0]
- adds r1, r3
- ldrb r2, [r1, 0x5]
- movs r0, 0xF
- ands r0, r2
- movs r2, 0x20
- orrs r0, r2
- strb r0, [r1, 0x5]
- adds r1, 0x3E
- ldrb r0, [r1]
- movs r2, 0x4
- orrs r0, r2
- strb r0, [r1]
- bl sub_8149954
- ldr r0, _08112264 @ =Task_TradeEvolutionScene
- movs r1, 0
- bl CreateTask
- lsls r1, r0, 24
- lsrs r2, r1, 24
- mov r1, r9
- strb r0, [r1, 0x2]
- ldr r1, _08112268 @ =gTasks
- lsls r0, r2, 2
- adds r0, r2
- lsls r0, 3
- adds r0, r1
- movs r2, 0
- strh r2, [r0, 0x8]
- mov r1, r8
- strh r1, [r0, 0xE]
- strh r5, [r0, 0x10]
- mov r2, sp
- ldrh r2, [r2, 0x1C]
- strh r2, [r0, 0xA]
- ldr r1, [sp, 0x1C]
- lsrs r1, 16
- str r1, [sp, 0x20]
- strh r1, [r0, 0xC]
- movs r1, 0x1
- strh r1, [r0, 0x14]
- movs r1, 0
- strh r1, [r0, 0x1E]
- mov r2, r10
- strh r2, [r0, 0x20]
- ldr r0, _0811226C @ =CB2_EvolutionSceneUpdate_1
- bl SetMainCallback2
- add sp, 0x24
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08112234: .4byte gStringVar1
-_08112238: .4byte gStringVar2
-_0811223C: .4byte gSpeciesNames
-_08112240: .4byte gAffineAnimsDisabled
-_08112244: .4byte 0x02014800
-_08112248: .4byte gMonFrontPicTable
-_0811224C: .4byte gMonFrontPicCoords
-_08112250: .4byte gUnknown_081FAF4C
-_08112254: .4byte gUnknown_02024E8C
-_08112258: .4byte gDummySpriteAffineAnimTable
-_0811225C: .4byte gSprites
-_08112260: .4byte nullsub_37
-_08112264: .4byte Task_TradeEvolutionScene
-_08112268: .4byte gTasks
-_0811226C: .4byte CB2_EvolutionSceneUpdate_1
- thumb_func_end TradeEvolutionScene
-
- thumb_func_start CB2_EvolutionSceneUpdate_0
-CB2_EvolutionSceneUpdate_0: @ 8112270
- push {lr}
- bl AnimateSprites
- bl BuildOamBuffer
- ldr r0, _0811228C @ =gUnknown_03004210
- bl sub_800374C
- bl UpdatePaletteFade
- bl RunTasks
- pop {r0}
- bx r0
- .align 2, 0
-_0811228C: .4byte gUnknown_03004210
- thumb_func_end CB2_EvolutionSceneUpdate_0
-
- thumb_func_start CB2_EvolutionSceneUpdate_1
-CB2_EvolutionSceneUpdate_1: @ 8112290
- push {lr}
- bl AnimateSprites
- bl BuildOamBuffer
- ldr r0, _081122B0 @ =gUnknown_03004828
- ldr r0, [r0]
- adds r0, 0x4
- bl sub_80035AC
- bl UpdatePaletteFade
- bl RunTasks
- pop {r0}
- bx r0
- .align 2, 0
-_081122B0: .4byte gUnknown_03004828
- thumb_func_end CB2_EvolutionSceneUpdate_1
-
- thumb_func_start CreateShedinja
-CreateShedinja: @ 81122B4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- mov r10, r1
- lsls r0, 16
- lsrs r7, r0, 16
- movs r0, 0
- str r0, [sp]
- ldr r0, _081123F4 @ =gEvolutionTable
- mov r8, r0
- lsls r1, r7, 2
- mov r9, r1
- adds r0, r1, r7
- lsls r4, r0, 3
- mov r0, r8
- adds r6, r4, r0
- ldrh r0, [r6]
- cmp r0, 0xD
- beq _081122E2
- b _081123E2
-_081122E2:
- ldr r1, _081123F8 @ =gPlayerPartyCount
- ldrb r0, [r1]
- cmp r0, 0x5
- bhi _081123E2
- adds r1, r0, 0
- movs r0, 0x64
- muls r1, r0
- ldr r0, _081123FC @ =gPlayerParty
- adds r5, r1, r0
- adds r0, r5, 0
- mov r1, r10
- movs r2, 0x64
- bl CopyMon
- mov r1, r8
- adds r2, r1, r4
- adds r2, 0xC
- adds r0, r5, 0
- movs r1, 0xB
- bl SetMonData
- ldrh r1, [r6, 0xC]
- movs r0, 0xB
- adds r2, r1, 0
- muls r2, r0
- ldr r0, _08112400 @ =gSpeciesNames
- adds r2, r0
- adds r0, r5, 0
- movs r1, 0x2
- bl SetMonData
- adds r0, r5, 0
- movs r1, 0xC
- mov r2, sp
- bl SetMonData
- adds r0, r5, 0
- movs r1, 0x8
- mov r2, sp
- bl SetMonData
- adds r0, r5, 0
- movs r1, 0xA
- mov r2, sp
- bl SetMonData
- movs r4, 0x32
- mov r6, r9
-_08112342:
- adds r0, r5, 0
- adds r1, r4, 0
- mov r2, sp
- bl SetMonData
- adds r4, 0x1
- cmp r4, 0x36
- ble _08112342
- movs r4, 0x43
-_08112354:
- adds r0, r5, 0
- adds r1, r4, 0
- mov r2, sp
- bl SetMonData
- adds r4, 0x1
- cmp r4, 0x4F
- ble _08112354
- adds r0, r5, 0
- movs r1, 0x37
- mov r2, sp
- bl SetMonData
- movs r0, 0xFF
- str r0, [sp]
- adds r0, r5, 0
- movs r1, 0x40
- mov r2, sp
- bl SetMonData
- adds r0, r5, 0
- bl CalculateMonStats
- bl CalculatePlayerPartyCount
- ldr r0, _081123F4 @ =gEvolutionTable
- adds r4, r6, r7
- lsls r4, 3
- adds r4, r0
- ldrh r0, [r4, 0xC]
- bl SpeciesToNationalPokedexNum
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x2
- bl GetSetPokedexFlag
- ldrh r0, [r4, 0xC]
- bl SpeciesToNationalPokedexNum
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x3
- bl GetSetPokedexFlag
- adds r0, r5, 0
- movs r1, 0xB
- bl GetMonData
- ldr r1, _08112404 @ =0x0000012f
- cmp r0, r1
- bne _081123E2
- adds r0, r5, 0
- movs r1, 0x3
- bl GetMonData
- cmp r0, 0x1
- bne _081123E2
- mov r0, r10
- movs r1, 0xB
- bl GetMonData
- movs r1, 0x97
- lsls r1, 1
- cmp r0, r1
- bne _081123E2
- ldr r2, _08112408 @ =gUnknown_083F868C
- adds r0, r5, 0
- movs r1, 0x2
- bl SetMonData
-_081123E2:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_081123F4: .4byte gEvolutionTable
-_081123F8: .4byte gPlayerPartyCount
-_081123FC: .4byte gPlayerParty
-_08112400: .4byte gSpeciesNames
-_08112404: .4byte 0x0000012f
-_08112408: .4byte gUnknown_083F868C
- thumb_func_end CreateShedinja
-
- thumb_func_start Task_EvolutionScene
-Task_EvolutionScene: @ 811240C
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x18
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r2, _08112490 @ =gTasks
- lsls r0, r7, 2
- adds r0, r7
- lsls r0, 3
- adds r3, r0, r2
- movs r1, 0xA
- ldrsh r0, [r3, r1]
- mov r9, r0
- movs r1, 0xC
- ldrsh r0, [r3, r1]
- lsls r0, 16
- mov r1, r9
- orrs r1, r0
- mov r9, r1
- ldr r0, _08112494 @ =gMain
- ldrh r1, [r0, 0x2C]
- adds r6, r2, 0
- adds r4, r0, 0
- cmp r1, 0x2
- bne _0811246E
- movs r2, 0x8
- ldrsh r0, [r3, r2]
- cmp r0, 0x8
- bne _0811246E
- ldrh r1, [r3, 0x12]
- movs r2, 0x1
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- beq _0811246E
- movs r0, 0x10
- strh r0, [r3, 0x8]
- ldr r0, _08112498 @ =gBattleCommunication
- ldrb r1, [r0, 0x2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r1, r0, r6
- ldrb r0, [r1, 0x4]
- cmp r0, 0
- beq _0811246E
- strh r2, [r1, 0x18]
-_0811246E:
- lsls r1, r7, 2
- adds r0, r1, r7
- lsls r0, 3
- adds r0, r6
- movs r3, 0x8
- ldrsh r0, [r0, r3]
- mov r8, r1
- cmp r0, 0x15
- bls _08112484
- bl _08112FD0
-_08112484:
- lsls r0, 2
- ldr r1, _0811249C @ =_081124A0
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08112490: .4byte gTasks
-_08112494: .4byte gMain
-_08112498: .4byte gBattleCommunication
-_0811249C: .4byte _081124A0
- .align 2, 0
-_081124A0:
- .4byte _081124F8
- .4byte _0811253C
- .4byte _08112588
- .4byte _08112594
- .4byte _081125BC
- .4byte _081125FC
- .4byte _08112630
- .4byte _0811266C
- .4byte _081126A0
- .4byte _081126E0
- .4byte _081126FC
- .4byte _08112728
- .4byte _08112754
- .4byte _081127A0
- .4byte _0811284C
- .4byte _081128E4
- .4byte _08112934
- .4byte _08112974
- .4byte _081129A0
- .4byte _081129E8
- .4byte _08112A4C
- .4byte _08112A88
-_081124F8:
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- ldr r2, _08112530 @ =gSprites
- ldr r0, _08112534 @ =0x02014800
- ldrb r1, [r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- adds r0, 0x3E
- ldrb r2, [r0]
- movs r1, 0x5
- negs r1, r1
- ands r1, r2
- strb r1, [r0]
- ldr r0, _08112538 @ =gTasks
- mov r2, r8
- adds r1, r2, r7
- lsls r1, 3
- adds r1, r0
- b _08112A2E
- .align 2, 0
-_08112530: .4byte gSprites
-_08112534: .4byte 0x02014800
-_08112538: .4byte gTasks
-_0811253C:
- ldr r0, _08112574 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0811254C
- bl _08112FD0
-_0811254C:
- ldr r4, _08112578 @ =gStringVar4
- ldr r1, _0811257C @ =gUnknown_08400C4A
- adds r0, r4, 0
- bl StringExpandPlaceholders
- ldr r0, _08112580 @ =gUnknown_03004210
- movs r1, 0xF
- str r1, [sp]
- adds r1, r4, 0
- movs r2, 0x90
- movs r3, 0x2
- bl sub_8002EB0
- ldr r0, _08112584 @ =gTasks
- mov r3, r8
- adds r1, r3, r7
- lsls r1, 3
- adds r1, r0
- b _08112A2E
- .align 2, 0
-_08112574: .4byte gPaletteFade
-_08112578: .4byte gStringVar4
-_0811257C: .4byte gUnknown_08400C4A
-_08112580: .4byte gUnknown_03004210
-_08112584: .4byte gTasks
-_08112588:
- ldr r0, _08112590 @ =gUnknown_03004210
- ldrh r0, [r0, 0x16]
- b _0811297C
- .align 2, 0
-_08112590: .4byte gUnknown_03004210
-_08112594:
- bl IsCryFinished
- lsls r0, 24
- cmp r0, 0
- bne _081125A2
- bl _08112FD0
-_081125A2:
- movs r0, 0xBC
- lsls r0, 1
- bl PlaySE
- ldr r0, _081125B8 @ =gTasks
- mov r2, r8
- adds r1, r2, r7
- lsls r1, 3
- adds r1, r0
- b _08112A2E
- .align 2, 0
-_081125B8: .4byte gTasks
-_081125BC:
- bl IsSEPlaying
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0
- beq _081125CC
- bl _08112FD0
-_081125CC:
- ldr r0, _081125F4 @ =0x00000179
- bl PlayNewMapMusic
- ldr r0, _081125F8 @ =gTasks
- mov r3, r8
- adds r1, r3, r7
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x8]
- adds r0, 0x1
- strh r0, [r1, 0x8]
- str r4, [sp]
- movs r0, 0x1C
- movs r1, 0x4
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- bl _08112FD0
- .align 2, 0
-_081125F4: .4byte 0x00000179
-_081125F8: .4byte gTasks
-_081125FC:
- ldr r0, _08112624 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0811260C
- bl _08112FD0
-_0811260C:
- movs r0, 0x11
- bl sub_8149970
- ldr r1, _08112628 @ =gBattleCommunication
- strb r0, [r1, 0x2]
- ldr r0, _0811262C @ =gTasks
- mov r2, r8
- adds r1, r2, r7
- lsls r1, 3
- adds r1, r0
- b _08112A2E
- .align 2, 0
-_08112624: .4byte gPaletteFade
-_08112628: .4byte gBattleCommunication
-_0811262C: .4byte gTasks
-_08112630:
- ldr r4, _08112664 @ =gBattleCommunication
- ldrb r0, [r4, 0x2]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r6
- ldrb r0, [r1, 0x4]
- cmp r0, 0
- beq _08112646
- bl _08112FD0
-_08112646:
- mov r3, r8
- adds r1, r3, r7
- lsls r1, 3
- adds r1, r6
- ldrh r0, [r1, 0x8]
- adds r0, 0x1
- strh r0, [r1, 0x8]
- ldr r1, _08112668 @ =0x02014800
- movs r0, 0x1
- strb r0, [r1, 0x3]
- bl sub_8149A90
- strb r0, [r4, 0x2]
- bl _08112FD0
- .align 2, 0
-_08112664: .4byte gBattleCommunication
-_08112668: .4byte 0x02014800
-_0811266C:
- ldr r4, _08112698 @ =gBattleCommunication
- ldrb r0, [r4, 0x2]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r6
- ldrb r0, [r1, 0x4]
- cmp r0, 0
- beq _08112682
- bl _08112FD0
-_08112682:
- ldr r1, _0811269C @ =0x02014800
- ldrb r0, [r1]
- ldrb r1, [r1, 0x1]
- bl sub_8149E7C
- strb r0, [r4, 0x2]
- mov r0, r8
- adds r1, r0, r7
- lsls r1, 3
- adds r1, r6
- b _08112A2E
- .align 2, 0
-_08112698: .4byte gBattleCommunication
-_0811269C: .4byte 0x02014800
-_081126A0:
- ldr r1, _081126D8 @ =0x02014800
- ldrb r0, [r1, 0x3]
- subs r0, 0x1
- strb r0, [r1, 0x3]
- lsls r0, 24
- cmp r0, 0
- beq _081126B2
- bl _08112FD0
-_081126B2:
- movs r0, 0x3
- strb r0, [r1, 0x3]
- ldr r0, _081126DC @ =gBattleCommunication
- ldrb r1, [r0, 0x2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r6
- ldrb r0, [r0, 0x4]
- cmp r0, 0
- beq _081126CC
- bl _08112FD0
-_081126CC:
- mov r2, r8
- adds r1, r2, r7
- lsls r1, 3
- adds r1, r6
- b _08112A2E
- .align 2, 0
-_081126D8: .4byte 0x02014800
-_081126DC: .4byte gBattleCommunication
-_081126E0:
- bl sub_8149B44
- ldr r1, _081126F4 @ =gBattleCommunication
- strb r0, [r1, 0x2]
- ldr r0, _081126F8 @ =gTasks
- mov r3, r8
- adds r1, r3, r7
- lsls r1, 3
- adds r1, r0
- b _08112A2E
- .align 2, 0
-_081126F4: .4byte gBattleCommunication
-_081126F8: .4byte gTasks
-_081126FC:
- ldr r5, _08112724 @ =gBattleCommunication
- ldrb r0, [r5, 0x2]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r6
- ldrb r0, [r1, 0x4]
- cmp r0, 0
- beq _08112712
- bl _08112FD0
-_08112712:
- mov r0, r8
- adds r4, r0, r7
- lsls r4, 3
- adds r4, r6
- ldrh r0, [r4, 0x10]
- bl sub_8149C20
- strb r0, [r5, 0x2]
- b _08112992
- .align 2, 0
-_08112724: .4byte gBattleCommunication
-_08112728:
- ldr r0, _08112750 @ =gBattleCommunication
- ldrb r1, [r0, 0x2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r6
- ldrb r0, [r0, 0x4]
- cmp r0, 0
- beq _0811273E
- bl _08112FD0
-_0811273E:
- movs r0, 0x21
- bl PlaySE
- mov r2, r8
- adds r1, r2, r7
- lsls r1, 3
- adds r1, r6
- b _08112A2E
- .align 2, 0
-_08112750: .4byte gBattleCommunication
-_08112754:
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- bne _08112762
- bl _08112FD0
-_08112762:
- bl m4aMPlayAllStop
- ldr r0, _08112794 @ =gTasks
- mov r3, r8
- adds r4, r3, r7
- lsls r4, 3
- adds r4, r0
- ldrh r0, [r4, 0x10]
- movs r1, 0
- bl PlayCry1
- ldr r0, _08112798 @ =gPlttBufferUnfaded + 0x40
- ldr r1, _0811279C @ =0x02009000
- movs r2, 0x60
- bl memcpy
- movs r0, 0
- str r0, [sp]
- movs r0, 0x1C
- movs r1, 0
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- b _08112992
- .align 2, 0
-_08112794: .4byte gTasks
-_08112798: .4byte gPlttBufferUnfaded + 0x40
-_0811279C: .4byte 0x02009000
-_081127A0:
- bl IsCryFinished
- lsls r0, 24
- cmp r0, 0
- bne _081127AE
- bl _08112FD0
-_081127AE:
- ldr r0, _08112834 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _081127BE
- bl _08112FD0
-_081127BE:
- ldr r4, _08112838 @ =gStringVar4
- ldr r1, _0811283C @ =gUnknown_08400C60
- adds r0, r4, 0
- bl StringExpandPlaceholders
- ldr r0, _08112840 @ =gUnknown_03004210
- movs r1, 0xF
- str r1, [sp]
- adds r1, r4, 0
- movs r2, 0x90
- movs r3, 0x2
- bl sub_8002EB0
- ldr r0, _08112844 @ =0x00000173
- bl PlayBGM
- ldr r2, _08112848 @ =gTasks
- mov r0, r8
- adds r1, r0, r7
- lsls r1, 3
- adds r4, r1, r2
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- adds r2, r1
- adds r2, 0x10
- mov r0, r9
- movs r1, 0xB
- bl SetMonData
- mov r0, r9
- bl CalculateMonStats
- ldrh r1, [r4, 0xE]
- ldrh r2, [r4, 0x10]
- mov r0, r9
- bl EvolutionRenameMon
- ldrh r0, [r4, 0x10]
- bl SpeciesToNationalPokedexNum
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x2
- bl GetSetPokedexFlag
- ldrh r0, [r4, 0x10]
- bl SpeciesToNationalPokedexNum
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x3
- bl GetSetPokedexFlag
- movs r0, 0xE
- bl IncrementGameStat
- b _08112FD0
- .align 2, 0
-_08112834: .4byte gPaletteFade
-_08112838: .4byte gStringVar4
-_0811283C: .4byte gUnknown_08400C60
-_08112840: .4byte gUnknown_03004210
-_08112844: .4byte 0x00000173
-_08112848: .4byte gTasks
-_0811284C:
- ldr r0, _081128A4 @ =gUnknown_03004210
- ldrh r0, [r0, 0x16]
- cmp r0, 0
- beq _08112856
- b _08112FD0
-_08112856:
- mov r1, r8
- adds r0, r1, r7
- lsls r0, 3
- adds r5, r0, r6
- ldrb r1, [r5, 0x14]
- mov r0, r9
- bl sub_803B7C8
- lsls r0, 16
- lsrs r6, r0, 16
- cmp r6, 0
- beq _081128C4
- movs r2, 0x1E
- ldrsh r4, [r5, r2]
- cmp r4, 0
- bne _081128C4
- bl sub_8053E90
- ldrh r1, [r5, 0x12]
- movs r0, 0x80
- orrs r0, r1
- strh r0, [r5, 0x12]
- strh r4, [r5, 0x14]
- strh r4, [r5, 0x18]
- mov r0, r9
- movs r1, 0x2
- add r2, sp, 0x4
- bl GetMonData
- ldr r0, _081128A8 @ =gBattleTextBuff1
- add r1, sp, 0x4
- bl StringCopy10
- ldr r0, _081128AC @ =0x0000ffff
- cmp r6, r0
- bne _081128B0
- movs r0, 0x15
- strh r0, [r5, 0x8]
- b _08112FD0
- .align 2, 0
-_081128A4: .4byte gUnknown_03004210
-_081128A8: .4byte gBattleTextBuff1
-_081128AC: .4byte 0x0000ffff
-_081128B0:
- ldr r0, _081128C0 @ =0x0000fffe
- cmp r6, r0
- bne _081128B8
- b _08112FD0
-_081128B8:
- movs r0, 0x13
- strh r0, [r5, 0x8]
- b _08112FD0
- .align 2, 0
-_081128C0: .4byte 0x0000fffe
-_081128C4:
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r0, _081128E0 @ =gTasks
- mov r3, r8
- adds r1, r3, r7
- lsls r1, 3
- adds r1, r0
- b _08112A2E
- .align 2, 0
-_081128E0: .4byte gTasks
-_081128E4:
- ldr r0, _0811292C @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r2, 0x80
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- beq _081128F4
- b _08112FD0
-_081128F4:
- mov r1, r8
- adds r0, r1, r7
- lsls r0, 3
- adds r4, r0, r6
- ldrh r1, [r4, 0x12]
- adds r0, r2, 0
- ands r0, r1
- cmp r0, 0
- bne _0811290A
- bl sub_8053E90
-_0811290A:
- movs r2, 0x1E
- ldrsh r0, [r4, r2]
- cmp r0, 0
- bne _0811291A
- ldrh r0, [r4, 0xE]
- mov r1, r9
- bl CreateShedinja
-_0811291A:
- adds r0, r7, 0
- bl DestroyTask
- ldr r0, _08112930 @ =gUnknown_03005E94
- ldr r0, [r0]
- bl SetMainCallback2
- b _08112FD0
- .align 2, 0
-_0811292C: .4byte gPaletteFade
-_08112930: .4byte gUnknown_03005E94
-_08112934:
- ldr r0, _08112968 @ =gBattleCommunication
- ldrb r1, [r0, 0x2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r6
- ldrb r0, [r0, 0x4]
- cmp r0, 0
- beq _08112948
- b _08112FD0
-_08112948:
- bl m4aMPlayAllStop
- ldr r0, _0811296C @ =0x0006001c
- ldr r1, _08112970 @ =0x00007fff
- str r1, [sp]
- movs r1, 0
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- mov r3, r8
- adds r1, r3, r7
- lsls r1, 3
- adds r1, r6
- b _08112A2E
- .align 2, 0
-_08112968: .4byte gBattleCommunication
-_0811296C: .4byte 0x0006001c
-_08112970: .4byte 0x00007fff
-_08112974:
- ldr r0, _0811299C @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
-_0811297C:
- cmp r0, 0
- beq _08112982
- b _08112FD0
-_08112982:
- mov r0, r8
- adds r4, r0, r7
- lsls r4, 3
- adds r4, r6
- ldrh r0, [r4, 0xE]
- movs r1, 0
- bl PlayCry1
-_08112992:
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- b _08112FD0
- .align 2, 0
-_0811299C: .4byte gPaletteFade
-_081129A0:
- bl IsCryFinished
- lsls r0, 24
- cmp r0, 0
- bne _081129AC
- b _08112FD0
-_081129AC:
- ldr r4, _081129D8 @ =gStringVar4
- ldr r1, _081129DC @ =gUnknown_08400C8D
- adds r0, r4, 0
- bl StringExpandPlaceholders
- ldr r0, _081129E0 @ =gUnknown_03004210
- movs r1, 0xF
- str r1, [sp]
- adds r1, r4, 0
- movs r2, 0x90
- movs r3, 0x2
- bl sub_8002EB0
- ldr r1, _081129E4 @ =gTasks
- mov r2, r8
- adds r0, r2, r7
- lsls r0, 3
- adds r0, r1
- movs r1, 0x1
- strh r1, [r0, 0x1E]
- b _08112F9A
- .align 2, 0
-_081129D8: .4byte gStringVar4
-_081129DC: .4byte gUnknown_08400C8D
-_081129E0: .4byte gUnknown_03004210
-_081129E4: .4byte gTasks
-_081129E8:
- ldr r4, _08112A38 @ =gUnknown_03004210
- ldrh r0, [r4, 0x16]
- cmp r0, 0
- beq _081129F2
- b _08112FD0
-_081129F2:
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- beq _081129FE
- b _08112FD0
-_081129FE:
- bl sub_8024CEC
- ldr r0, _08112A3C @ =0x0000016f
- bl PlayFanfare
- ldr r0, _08112A40 @ =gBattleStringsTable
- ldr r0, [r0, 0xC]
- bl StrCpyDecodeToDisplayedStringBattle
- ldr r1, _08112A44 @ =gDisplayedStringBattle
- movs r0, 0xF
- str r0, [sp]
- adds r0, r4, 0
- movs r2, 0x90
- movs r3, 0x2
- bl sub_8002EB0
- ldr r0, _08112A48 @ =gTasks
- mov r3, r8
- adds r1, r3, r7
- lsls r1, 3
- adds r1, r0
- movs r0, 0x40
- strh r0, [r1, 0x14]
-_08112A2E:
- ldrh r0, [r1, 0x8]
- adds r0, 0x1
- strh r0, [r1, 0x8]
- b _08112FD0
- .align 2, 0
-_08112A38: .4byte gUnknown_03004210
-_08112A3C: .4byte 0x0000016f
-_08112A40: .4byte gBattleStringsTable
-_08112A44: .4byte gDisplayedStringBattle
-_08112A48: .4byte gTasks
-_08112A4C:
- ldr r0, _08112A80 @ =gUnknown_03004210
- ldrh r0, [r0, 0x16]
- cmp r0, 0
- beq _08112A56
- b _08112FD0
-_08112A56:
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- beq _08112A62
- b _08112FD0
-_08112A62:
- ldr r0, _08112A84 @ =gTasks
- mov r2, r8
- adds r1, r2, r7
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x14]
- subs r0, 0x1
- strh r0, [r1, 0x14]
- lsls r0, 16
- cmp r0, 0
- beq _08112A7A
- b _08112FD0
-_08112A7A:
- movs r0, 0xE
- strh r0, [r1, 0x8]
- b _08112FD0
- .align 2, 0
-_08112A80: .4byte gUnknown_03004210
-_08112A84: .4byte gTasks
-_08112A88:
- mov r3, r8
- adds r0, r3, r7
- lsls r0, 3
- adds r0, r6
- movs r1, 0x18
- ldrsh r0, [r0, r1]
- cmp r0, 0xB
- bls _08112A9A
- b _08112FD0
-_08112A9A:
- lsls r0, 2
- ldr r1, _08112AA4 @ =_08112AA8
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08112AA4: .4byte _08112AA8
- .align 2, 0
-_08112AA8:
- .4byte _08112AD8
- .4byte _08112B2C
- .4byte _08112B7C
- .4byte _08112BC0
- .4byte _08112C0C
- .4byte _08112D3C
- .4byte _08112D8C
- .4byte _08112E98
- .4byte _08112EE8
- .4byte _08112F38
- .4byte _08112F78
- .4byte _08112FB0
-_08112AD8:
- ldr r4, _08112B1C @ =gUnknown_03004210
- ldrh r0, [r4, 0x16]
- cmp r0, 0
- beq _08112AE2
- b _08112FD0
-_08112AE2:
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- beq _08112AEE
- b _08112FD0
-_08112AEE:
- bl sub_8024CEC
- ldr r0, _08112B20 @ =gBattleStringsTable
- ldr r0, [r0, 0x10]
- bl StrCpyDecodeToDisplayedStringBattle
- ldr r1, _08112B24 @ =gDisplayedStringBattle
- movs r0, 0xF
- str r0, [sp]
- adds r0, r4, 0
- movs r2, 0x90
- movs r3, 0x2
- bl sub_8002EB0
- ldr r0, _08112B28 @ =gTasks
- mov r2, r8
- adds r1, r2, r7
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x18]
- adds r0, 0x1
- b _08112FCE
- .align 2, 0
-_08112B1C: .4byte gUnknown_03004210
-_08112B20: .4byte gBattleStringsTable
-_08112B24: .4byte gDisplayedStringBattle
-_08112B28: .4byte gTasks
-_08112B2C:
- ldr r4, _08112B6C @ =gUnknown_03004210
- ldrh r0, [r4, 0x16]
- cmp r0, 0
- beq _08112B36
- b _08112FD0
-_08112B36:
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- beq _08112B42
- b _08112FD0
-_08112B42:
- ldr r0, _08112B70 @ =gBattleStringsTable
- ldr r0, [r0, 0x14]
- bl StrCpyDecodeToDisplayedStringBattle
- ldr r1, _08112B74 @ =gDisplayedStringBattle
- movs r0, 0xF
- str r0, [sp]
- adds r0, r4, 0
- movs r2, 0x90
- movs r3, 0x2
- bl sub_8002EB0
- ldr r0, _08112B78 @ =gTasks
- mov r3, r8
- adds r1, r3, r7
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x18]
- adds r0, 0x1
- b _08112FCE
- .align 2, 0
-_08112B6C: .4byte gUnknown_03004210
-_08112B70: .4byte gBattleStringsTable
-_08112B74: .4byte gDisplayedStringBattle
-_08112B78: .4byte gTasks
-_08112B7C:
- ldr r4, _08112BF8 @ =gUnknown_03004210
- ldrh r0, [r4, 0x16]
- cmp r0, 0
- beq _08112B86
- b _08112FD0
-_08112B86:
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- bne _08112BC0
- ldr r0, _08112BFC @ =gBattleStringsTable
- ldr r0, [r0, 0x18]
- bl StrCpyDecodeToDisplayedStringBattle
- ldr r1, _08112C00 @ =gDisplayedStringBattle
- movs r0, 0xF
- str r0, [sp]
- adds r0, r4, 0
- movs r2, 0x90
- movs r3, 0x2
- bl sub_8002EB0
- ldr r0, _08112C04 @ =gTasks
- mov r2, r8
- adds r1, r2, r7
- lsls r1, 3
- adds r1, r0
- movs r0, 0x5
- strh r0, [r1, 0x1A]
- movs r0, 0x9
- strh r0, [r1, 0x1C]
- ldrh r0, [r1, 0x18]
- adds r0, 0x1
- strh r0, [r1, 0x18]
-_08112BC0:
- ldr r0, _08112BF8 @ =gUnknown_03004210
- ldrh r0, [r0, 0x16]
- cmp r0, 0
- beq _08112BCA
- b _08112FD0
-_08112BCA:
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- beq _08112BD6
- b _08112FD0
-_08112BD6:
- bl sub_8023A80
- ldr r0, _08112C04 @ =gTasks
- mov r3, r8
- adds r1, r3, r7
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x18]
- adds r0, 0x1
- movs r2, 0
- strh r0, [r1, 0x18]
- ldr r0, _08112C08 @ =gBattleCommunication
- strb r2, [r0, 0x1]
- bl sub_802BC6C
- b _08112FD0
- .align 2, 0
-_08112BF8: .4byte gUnknown_03004210
-_08112BFC: .4byte gBattleStringsTable
-_08112C00: .4byte gDisplayedStringBattle
-_08112C04: .4byte gTasks
-_08112C08: .4byte gBattleCommunication
-_08112C0C:
- ldr r0, _08112CA4 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _08112C32
- ldr r4, _08112CA8 @ =gBattleCommunication
- ldrb r0, [r4, 0x1]
- cmp r0, 0
- beq _08112C32
- movs r0, 0x5
- bl PlaySE
- bl nullsub_6
- movs r0, 0
- strb r0, [r4, 0x1]
- bl sub_802BC6C
-_08112C32:
- ldr r0, _08112CA4 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _08112C58
- ldr r4, _08112CA8 @ =gBattleCommunication
- ldrb r0, [r4, 0x1]
- cmp r0, 0
- bne _08112C58
- movs r0, 0x5
- bl PlaySE
- bl nullsub_6
- movs r0, 0x1
- strb r0, [r4, 0x1]
- bl sub_802BC6C
-_08112C58:
- ldr r0, _08112CA4 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08112CE2
- bl sub_8023AD8
- ldr r0, _08112CAC @ =gBattleStringsTable
- movs r1, 0x92
- lsls r1, 3
- adds r0, r1
- ldr r0, [r0]
- bl StrCpyDecodeToDisplayedStringBattle
- ldr r0, _08112CB0 @ =gUnknown_03004210
- ldr r1, _08112CB4 @ =gDisplayedStringBattle
- movs r2, 0xF
- str r2, [sp]
- movs r2, 0x90
- movs r3, 0x2
- bl sub_8002EB0
- movs r0, 0x5
- bl PlaySE
- ldr r0, _08112CA8 @ =gBattleCommunication
- ldrb r2, [r0, 0x1]
- cmp r2, 0
- beq _08112CBC
- ldr r0, _08112CB8 @ =gTasks
- mov r2, r8
- adds r1, r2, r7
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x1C]
- strh r0, [r1, 0x18]
- b _08112CE2
- .align 2, 0
-_08112CA4: .4byte gMain
-_08112CA8: .4byte gBattleCommunication
-_08112CAC: .4byte gBattleStringsTable
-_08112CB0: .4byte gUnknown_03004210
-_08112CB4: .4byte gDisplayedStringBattle
-_08112CB8: .4byte gTasks
-_08112CBC:
- ldr r0, _08112D28 @ =gTasks
- mov r3, r8
- adds r1, r3, r7
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x1A]
- strh r0, [r1, 0x18]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x5
- bne _08112CE2
- movs r0, 0x1
- negs r0, r0
- str r2, [sp]
- movs r1, 0
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
-_08112CE2:
- ldr r0, _08112D2C @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- bne _08112CF0
- b _08112FD0
-_08112CF0:
- bl sub_8023AD8
- ldr r0, _08112D30 @ =gBattleStringsTable
- movs r1, 0x92
- lsls r1, 3
- adds r0, r1
- ldr r0, [r0]
- bl StrCpyDecodeToDisplayedStringBattle
- ldr r0, _08112D34 @ =gUnknown_03004210
- ldr r1, _08112D38 @ =gDisplayedStringBattle
- movs r2, 0xF
- str r2, [sp]
- movs r2, 0x90
- movs r3, 0x2
- bl sub_8002EB0
- movs r0, 0x5
- bl PlaySE
- ldr r1, _08112D28 @ =gTasks
- mov r2, r8
- adds r0, r2, r7
- lsls r0, 3
- adds r0, r1
- ldrh r1, [r0, 0x1C]
- strh r1, [r0, 0x18]
- b _08112FD0
- .align 2, 0
-_08112D28: .4byte gTasks
-_08112D2C: .4byte gMain
-_08112D30: .4byte gBattleStringsTable
-_08112D34: .4byte gUnknown_03004210
-_08112D38: .4byte gDisplayedStringBattle
-_08112D3C:
- ldr r0, _08112D78 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _08112D4A
- b _08112FD0
-_08112D4A:
- ldr r0, _08112D7C @ =gPlayerParty
- mov r3, r8
- adds r5, r3, r7
- lsls r5, 3
- adds r5, r6
- ldrh r1, [r5, 0x20]
- lsls r1, 24
- lsrs r1, 24
- ldr r2, _08112D80 @ =gPlayerPartyCount
- ldrb r2, [r2]
- subs r2, 0x1
- lsls r2, 24
- lsrs r2, 24
- ldr r3, _08112D84 @ =CB2_EvolutionSceneLoadGraphics
- ldr r4, _08112D88 @ =word_2024E82
- ldrh r4, [r4]
- str r4, [sp]
- bl sub_809D9F0
- ldrh r0, [r5, 0x18]
- adds r0, 0x1
- strh r0, [r5, 0x18]
- b _08112FD0
- .align 2, 0
-_08112D78: .4byte gPaletteFade
-_08112D7C: .4byte gPlayerParty
-_08112D80: .4byte gPlayerPartyCount
-_08112D84: .4byte CB2_EvolutionSceneLoadGraphics
-_08112D88: .4byte word_2024E82
-_08112D8C:
- ldr r0, _08112DC0 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _08112D9A
- b _08112FD0
-_08112D9A:
- ldr r1, [r4, 0x4]
- ldr r0, _08112DC4 @ =CB2_EvolutionSceneUpdate_0
- cmp r1, r0
- beq _08112DA4
- b _08112FD0
-_08112DA4:
- bl sub_809FA30
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0x4
- bne _08112DCC
- ldr r0, _08112DC8 @ =gTasks
- mov r2, r8
- adds r1, r2, r7
- lsls r1, 3
- adds r1, r0
- movs r0, 0x9
- b _08112FCE
- .align 2, 0
-_08112DC0: .4byte gPaletteFade
-_08112DC4: .4byte CB2_EvolutionSceneUpdate_0
-_08112DC8: .4byte gTasks
-_08112DCC:
- adds r1, r6, 0
- adds r1, 0xD
- mov r0, r9
- bl GetMonData
- lsls r0, 16
- lsrs r4, r0, 16
- adds r0, r4, 0
- bl IsHMMove2
- cmp r0, 0
- beq _08112E24
- ldr r0, _08112E10 @ =gBattleStringsTable
- ldr r3, _08112E14 @ =0x000004cc
- adds r0, r3
- ldr r0, [r0]
- bl StrCpyDecodeToDisplayedStringBattle
- ldr r0, _08112E18 @ =gUnknown_03004210
- ldr r1, _08112E1C @ =gDisplayedStringBattle
- movs r2, 0xF
- str r2, [sp]
- movs r2, 0x90
- movs r3, 0x2
- bl sub_8002EB0
- ldr r1, _08112E20 @ =gTasks
- mov r2, r8
- adds r0, r2, r7
- lsls r0, 3
- adds r0, r1
- movs r1, 0xB
- strh r1, [r0, 0x18]
- b _08112FD0
- .align 2, 0
-_08112E10: .4byte gBattleStringsTable
-_08112E14: .4byte 0x000004cc
-_08112E18: .4byte gUnknown_03004210
-_08112E1C: .4byte gDisplayedStringBattle
-_08112E20: .4byte gTasks
-_08112E24:
- ldr r1, _08112E80 @ =gBattleTextBuff2
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x2
- strb r0, [r1, 0x1]
- strb r4, [r1, 0x2]
- lsrs r0, r4, 8
- strb r0, [r1, 0x3]
- movs r0, 0xFF
- strb r0, [r1, 0x4]
- lsls r4, r6, 24
- lsrs r4, 24
- mov r0, r9
- adds r1, r4, 0
- bl RemoveMonPPBonus
- ldr r0, _08112E84 @ =word_2024E82
- ldrh r1, [r0]
- mov r0, r9
- adds r2, r4, 0
- bl SetMonMoveSlot
- ldr r0, _08112E88 @ =gBattleStringsTable
- movs r3, 0xCF
- lsls r3, 2
- adds r0, r3
- ldr r0, [r0]
- bl StrCpyDecodeToDisplayedStringBattle
- ldr r0, _08112E8C @ =gUnknown_03004210
- ldr r1, _08112E90 @ =gDisplayedStringBattle
- movs r2, 0xF
- str r2, [sp]
- movs r2, 0x90
- movs r3, 0x2
- bl sub_8002EB0
- ldr r0, _08112E94 @ =gTasks
- mov r2, r8
- adds r1, r2, r7
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x18]
- adds r0, 0x1
- b _08112FCE
- .align 2, 0
-_08112E80: .4byte gBattleTextBuff2
-_08112E84: .4byte word_2024E82
-_08112E88: .4byte gBattleStringsTable
-_08112E8C: .4byte gUnknown_03004210
-_08112E90: .4byte gDisplayedStringBattle
-_08112E94: .4byte gTasks
-_08112E98:
- ldr r4, _08112ED8 @ =gUnknown_03004210
- ldrh r0, [r4, 0x16]
- cmp r0, 0
- beq _08112EA2
- b _08112FD0
-_08112EA2:
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- beq _08112EAE
- b _08112FD0
-_08112EAE:
- ldr r0, _08112EDC @ =gBattleStringsTable
- ldr r0, [r0, 0x1C]
- bl StrCpyDecodeToDisplayedStringBattle
- ldr r1, _08112EE0 @ =gDisplayedStringBattle
- movs r0, 0xF
- str r0, [sp]
- adds r0, r4, 0
- movs r2, 0x90
- movs r3, 0x2
- bl sub_8002EB0
- ldr r0, _08112EE4 @ =gTasks
- mov r3, r8
- adds r1, r3, r7
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x18]
- adds r0, 0x1
- b _08112FCE
- .align 2, 0
-_08112ED8: .4byte gUnknown_03004210
-_08112EDC: .4byte gBattleStringsTable
-_08112EE0: .4byte gDisplayedStringBattle
-_08112EE4: .4byte gTasks
-_08112EE8:
- ldr r4, _08112F28 @ =gUnknown_03004210
- ldrh r0, [r4, 0x16]
- cmp r0, 0
- bne _08112FD0
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- bne _08112FD0
- ldr r0, _08112F2C @ =gBattleStringsTable
- movs r1, 0xD0
- lsls r1, 2
- adds r0, r1
- ldr r0, [r0]
- bl StrCpyDecodeToDisplayedStringBattle
- ldr r1, _08112F30 @ =gDisplayedStringBattle
- movs r0, 0xF
- str r0, [sp]
- adds r0, r4, 0
- movs r2, 0x90
- movs r3, 0x2
- bl sub_8002EB0
- ldr r1, _08112F34 @ =gTasks
- mov r2, r8
- adds r0, r2, r7
- lsls r0, 3
- adds r0, r1
- movs r1, 0x13
- strh r1, [r0, 0x8]
- b _08112FD0
- .align 2, 0
-_08112F28: .4byte gUnknown_03004210
-_08112F2C: .4byte gBattleStringsTable
-_08112F30: .4byte gDisplayedStringBattle
-_08112F34: .4byte gTasks
-_08112F38:
- ldr r0, _08112F68 @ =gBattleStringsTable
- ldr r0, [r0, 0x20]
- bl StrCpyDecodeToDisplayedStringBattle
- ldr r0, _08112F6C @ =gUnknown_03004210
- ldr r1, _08112F70 @ =gDisplayedStringBattle
- movs r2, 0xF
- str r2, [sp]
- movs r2, 0x90
- movs r3, 0x2
- bl sub_8002EB0
- ldr r1, _08112F74 @ =gTasks
- mov r3, r8
- adds r0, r3, r7
- lsls r0, 3
- adds r0, r1
- movs r2, 0
- movs r1, 0xA
- strh r1, [r0, 0x1A]
- strh r2, [r0, 0x1C]
- movs r1, 0x3
- strh r1, [r0, 0x18]
- b _08112FD0
- .align 2, 0
-_08112F68: .4byte gBattleStringsTable
-_08112F6C: .4byte gUnknown_03004210
-_08112F70: .4byte gDisplayedStringBattle
-_08112F74: .4byte gTasks
-_08112F78:
- ldr r0, _08112FA0 @ =gBattleStringsTable
- ldr r0, [r0, 0x24]
- bl StrCpyDecodeToDisplayedStringBattle
- ldr r0, _08112FA4 @ =gUnknown_03004210
- ldr r1, _08112FA8 @ =gDisplayedStringBattle
- movs r2, 0xF
- str r2, [sp]
- movs r2, 0x90
- movs r3, 0x2
- bl sub_8002EB0
- ldr r1, _08112FAC @ =gTasks
- mov r2, r8
- adds r0, r2, r7
- lsls r0, 3
- adds r0, r1
-_08112F9A:
- movs r1, 0xE
- strh r1, [r0, 0x8]
- b _08112FD0
- .align 2, 0
-_08112FA0: .4byte gBattleStringsTable
-_08112FA4: .4byte gUnknown_03004210
-_08112FA8: .4byte gDisplayedStringBattle
-_08112FAC: .4byte gTasks
-_08112FB0:
- ldr r0, _08112FE0 @ =gUnknown_03004210
- ldrh r0, [r0, 0x16]
- cmp r0, 0
- bne _08112FD0
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- bne _08112FD0
- ldr r0, _08112FE4 @ =gTasks
- mov r3, r8
- adds r1, r3, r7
- lsls r1, 3
- adds r1, r0
- movs r0, 0x5
-_08112FCE:
- strh r0, [r1, 0x18]
-_08112FD0:
- add sp, 0x18
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08112FE0: .4byte gUnknown_03004210
-_08112FE4: .4byte gTasks
- thumb_func_end Task_EvolutionScene
-
- thumb_func_start Task_TradeEvolutionScene
-Task_TradeEvolutionScene: @ 8112FE8
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x18
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r2, _0811302C @ =gTasks
- lsls r1, r7, 2
- adds r1, r7
- lsls r1, 3
- adds r1, r2
- movs r3, 0xA
- ldrsh r0, [r1, r3]
- mov r8, r0
- movs r3, 0xC
- ldrsh r0, [r1, r3]
- lsls r0, 16
- mov r3, r8
- orrs r3, r0
- mov r8, r3
- movs r3, 0x8
- ldrsh r0, [r1, r3]
- adds r6, r2, 0
- cmp r0, 0x11
- bls _08113020
- bl _08113B3A
-_08113020:
- lsls r0, 2
- ldr r1, _08113030 @ =_08113034
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0811302C: .4byte gTasks
-_08113030: .4byte _08113034
- .align 2, 0
-_08113034:
- .4byte _0811307C
- .4byte _081130B8
- .4byte _081130DC
- .4byte _0811310C
- .4byte _0811314C
- .4byte _0811318C
- .4byte _081131C8
- .4byte _081131F4
- .4byte _0811322C
- .4byte _08113248
- .4byte _08113274
- .4byte _081132A8
- .4byte _081132F8
- .4byte _081133A8
- .4byte _0811346C
- .4byte _08113490
- .4byte _081134F8
- .4byte _08113538
-_0811307C:
- ldr r4, _081130A8 @ =gStringVar4
- ldr r1, _081130AC @ =gUnknown_08400C4A
- adds r0, r4, 0
- bl StringExpandPlaceholders
- ldr r0, _081130B0 @ =gUnknown_03004828
- ldr r1, [r0]
- adds r0, r1, 0x4
- adds r1, 0x34
- ldrb r2, [r1]
- movs r1, 0xF
- str r1, [sp]
- adds r1, r4, 0
- movs r3, 0x2
- bl sub_8002EB0
- ldr r1, _081130B4 @ =gTasks
- lsls r0, r7, 2
- adds r0, r7
- lsls r0, 3
- adds r0, r1
- b _08113298
- .align 2, 0
-_081130A8: .4byte gStringVar4
-_081130AC: .4byte gUnknown_08400C4A
-_081130B0: .4byte gUnknown_03004828
-_081130B4: .4byte gTasks
-_081130B8:
- ldr r0, _081130D8 @ =gUnknown_03004828
- ldr r0, [r0]
- ldrh r0, [r0, 0x1A]
- cmp r0, 0
- beq _081130C6
- bl _08113B3A
-_081130C6:
- lsls r4, r7, 2
- adds r4, r7
- lsls r4, 3
- adds r4, r6
- ldrh r0, [r4, 0xE]
- movs r1, 0
- bl PlayCry1
- b _081132E2
- .align 2, 0
-_081130D8: .4byte gUnknown_03004828
-_081130DC:
- bl IsCryFinished
- lsls r0, 24
- cmp r0, 0
- bne _081130EA
- bl _08113B3A
-_081130EA:
- ldr r0, _08113104 @ =0x00000179
- bl m4aSongNumStop
- movs r0, 0xBC
- lsls r0, 1
- bl PlaySE
- ldr r1, _08113108 @ =gTasks
- lsls r0, r7, 2
- adds r0, r7
- lsls r0, 3
- adds r0, r1
- b _08113298
- .align 2, 0
-_08113104: .4byte 0x00000179
-_08113108: .4byte gTasks
-_0811310C:
- bl IsSEPlaying
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0
- beq _0811311C
- bl _08113B3A
-_0811311C:
- ldr r0, _08113144 @ =0x00000179
- bl PlayBGM
- ldr r1, _08113148 @ =gTasks
- lsls r0, r7, 2
- adds r0, r7
- lsls r0, 3
- adds r0, r1
- ldrh r1, [r0, 0x8]
- adds r1, 0x1
- strh r1, [r0, 0x8]
- str r5, [sp]
- movs r0, 0x1C
- movs r1, 0x4
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- bl _08113B3A
- .align 2, 0
-_08113144: .4byte 0x00000179
-_08113148: .4byte gTasks
-_0811314C:
- ldr r0, _08113180 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0811315C
- bl _08113B3A
-_0811315C:
- movs r1, 0x80
- lsls r1, 19
- movs r2, 0x9A
- lsls r2, 5
- adds r0, r2, 0
- strh r0, [r1]
- movs r0, 0x11
- bl sub_8149970
- ldr r1, _08113184 @ =gBattleCommunication
- strb r0, [r1, 0x2]
- ldr r1, _08113188 @ =gTasks
- lsls r0, r7, 2
- adds r0, r7
- lsls r0, 3
- adds r0, r1
- b _08113298
- .align 2, 0
-_08113180: .4byte gPaletteFade
-_08113184: .4byte gBattleCommunication
-_08113188: .4byte gTasks
-_0811318C:
- ldr r4, _081131C0 @ =gBattleCommunication
- ldrb r0, [r4, 0x2]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r6
- ldrb r0, [r1, 0x4]
- cmp r0, 0
- beq _081131A2
- bl _08113B3A
-_081131A2:
- lsls r0, r7, 2
- adds r0, r7
- lsls r0, 3
- adds r0, r6
- ldrh r1, [r0, 0x8]
- adds r1, 0x1
- strh r1, [r0, 0x8]
- ldr r1, _081131C4 @ =0x02014800
- movs r0, 0x1
- strb r0, [r1, 0x3]
- bl sub_8149A90
- strb r0, [r4, 0x2]
- bl _08113B3A
- .align 2, 0
-_081131C0: .4byte gBattleCommunication
-_081131C4: .4byte 0x02014800
-_081131C8:
- ldr r4, _081131EC @ =gBattleCommunication
- ldrb r0, [r4, 0x2]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r6
- ldrb r0, [r1, 0x4]
- cmp r0, 0
- beq _081131DE
- bl _08113B3A
-_081131DE:
- ldr r1, _081131F0 @ =0x02014800
- ldrb r0, [r1]
- ldrb r1, [r1, 0x1]
- bl sub_8149E7C
- strb r0, [r4, 0x2]
- b _08113290
- .align 2, 0
-_081131EC: .4byte gBattleCommunication
-_081131F0: .4byte 0x02014800
-_081131F4:
- ldr r1, _08113224 @ =0x02014800
- ldrb r0, [r1, 0x3]
- subs r0, 0x1
- strb r0, [r1, 0x3]
- lsls r0, 24
- cmp r0, 0
- beq _08113206
- bl _08113B3A
-_08113206:
- movs r0, 0x3
- strb r0, [r1, 0x3]
- ldr r0, _08113228 @ =gBattleCommunication
- ldrb r1, [r0, 0x2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r6
- ldrb r0, [r0, 0x4]
- cmp r0, 0
- beq _08113220
- bl _08113B3A
-_08113220:
- b _08113290
- .align 2, 0
-_08113224: .4byte 0x02014800
-_08113228: .4byte gBattleCommunication
-_0811322C:
- bl sub_8149B44
- ldr r1, _08113240 @ =gBattleCommunication
- strb r0, [r1, 0x2]
- ldr r1, _08113244 @ =gTasks
- lsls r0, r7, 2
- adds r0, r7
- lsls r0, 3
- adds r0, r1
- b _08113298
- .align 2, 0
-_08113240: .4byte gBattleCommunication
-_08113244: .4byte gTasks
-_08113248:
- ldr r5, _08113270 @ =gBattleCommunication
- ldrb r0, [r5, 0x2]
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r6
- ldrb r0, [r1, 0x4]
- cmp r0, 0
- beq _0811325E
- bl _08113B3A
-_0811325E:
- lsls r4, r7, 2
- adds r4, r7
- lsls r4, 3
- adds r4, r6
- ldrh r0, [r4, 0x10]
- bl sub_8149D5C
- strb r0, [r5, 0x2]
- b _081132E2
- .align 2, 0
-_08113270: .4byte gBattleCommunication
-_08113274:
- ldr r0, _081132A4 @ =gBattleCommunication
- ldrb r1, [r0, 0x2]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r0, r6
- ldrb r0, [r0, 0x4]
- cmp r0, 0
- beq _0811328A
- bl _08113B3A
-_0811328A:
- movs r0, 0x21
- bl PlaySE
-_08113290:
- lsls r0, r7, 2
- adds r0, r7
- lsls r0, 3
- adds r0, r6
-_08113298:
- ldrh r1, [r0, 0x8]
- adds r1, 0x1
- strh r1, [r0, 0x8]
- bl _08113B3A
- .align 2, 0
-_081132A4: .4byte gBattleCommunication
-_081132A8:
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- bne _081132B6
- bl _08113B3A
-_081132B6:
- ldr r0, _081132EC @ =gTasks
- lsls r4, r7, 2
- adds r4, r7
- lsls r4, 3
- adds r4, r0
- ldrh r0, [r4, 0x10]
- movs r1, 0
- bl PlayCry1
- ldr r0, _081132F0 @ =gPlttBufferUnfaded + 0x40
- ldr r1, _081132F4 @ =0x02009000
- movs r2, 0x60
- bl memcpy
- movs r0, 0
- str r0, [sp]
- movs r0, 0x1
- movs r1, 0
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
-_081132E2:
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- bl _08113B3A
- .align 2, 0
-_081132EC: .4byte gTasks
-_081132F0: .4byte gPlttBufferUnfaded + 0x40
-_081132F4: .4byte 0x02009000
-_081132F8:
- bl IsCryFinished
- lsls r0, 24
- cmp r0, 0
- bne _08113306
- bl _08113B3A
-_08113306:
- ldr r0, _08113390 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _08113316
- bl _08113B3A
-_08113316:
- ldr r4, _08113394 @ =gStringVar4
- ldr r1, _08113398 @ =gUnknown_08400C60
- adds r0, r4, 0
- bl StringExpandPlaceholders
- ldr r0, _0811339C @ =gUnknown_03004828
- ldr r1, [r0]
- adds r0, r1, 0x4
- adds r1, 0x34
- ldrb r2, [r1]
- movs r1, 0xF
- str r1, [sp]
- adds r1, r4, 0
- movs r3, 0x2
- bl sub_8002EB0
- ldr r0, _081133A0 @ =0x00000173
- bl PlayFanfare
- ldr r2, _081133A4 @ =gTasks
- lsls r1, r7, 2
- adds r1, r7
- lsls r1, 3
- adds r4, r1, r2
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- adds r2, r1
- adds r2, 0x10
- mov r0, r8
- movs r1, 0xB
- bl SetMonData
- mov r0, r8
- bl CalculateMonStats
- ldrh r1, [r4, 0xE]
- ldrh r2, [r4, 0x10]
- mov r0, r8
- bl EvolutionRenameMon
- ldrh r0, [r4, 0x10]
- bl SpeciesToNationalPokedexNum
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x2
- bl GetSetPokedexFlag
- ldrh r0, [r4, 0x10]
- bl SpeciesToNationalPokedexNum
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x3
- bl GetSetPokedexFlag
- movs r0, 0xE
- bl IncrementGameStat
- b _08113B3A
- .align 2, 0
-_08113390: .4byte gPaletteFade
-_08113394: .4byte gStringVar4
-_08113398: .4byte gUnknown_08400C60
-_0811339C: .4byte gUnknown_03004828
-_081133A0: .4byte 0x00000173
-_081133A4: .4byte gTasks
-_081133A8:
- ldr r0, _08113410 @ =gUnknown_03004828
- ldr r0, [r0]
- ldrh r0, [r0, 0x1A]
- cmp r0, 0
- beq _081133B4
- b _08113B3A
-_081133B4:
- bl IsFanfareTaskInactive
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _081133C2
- b _08113B3A
-_081133C2:
- ldr r1, _08113414 @ =gTasks
- lsls r4, r7, 2
- adds r0, r4, r7
- lsls r0, 3
- adds r5, r0, r1
- ldrb r1, [r5, 0x14]
- mov r0, r8
- bl sub_803B7C8
- lsls r0, 16
- lsrs r6, r0, 16
- mov r9, r4
- cmp r6, 0
- beq _08113434
- movs r3, 0x1E
- ldrsh r2, [r5, r3]
- cmp r2, 0
- bne _08113434
- ldrh r1, [r5, 0x12]
- movs r0, 0x80
- orrs r0, r1
- strh r0, [r5, 0x12]
- strh r2, [r5, 0x14]
- strh r2, [r5, 0x18]
- mov r0, r8
- movs r1, 0x2
- add r2, sp, 0x4
- bl GetMonData
- ldr r0, _08113418 @ =gBattleTextBuff1
- add r1, sp, 0x4
- bl StringCopy10
- ldr r0, _0811341C @ =0x0000ffff
- cmp r6, r0
- bne _08113420
- movs r0, 0x11
- strh r0, [r5, 0x8]
- b _08113B3A
- .align 2, 0
-_08113410: .4byte gUnknown_03004828
-_08113414: .4byte gTasks
-_08113418: .4byte gBattleTextBuff1
-_0811341C: .4byte 0x0000ffff
-_08113420:
- ldr r0, _08113430 @ =0x0000fffe
- cmp r6, r0
- bne _08113428
- b _08113B3A
-_08113428:
- movs r0, 0xF
- strh r0, [r5, 0x8]
- b _08113B3A
- .align 2, 0
-_08113430: .4byte 0x0000fffe
-_08113434:
- ldr r0, _0811345C @ =0x00000179
- bl PlayBGM
- ldr r0, _08113460 @ =gUnknown_03004828
- ldr r2, [r0]
- adds r0, r2, 0x4
- ldr r1, _08113464 @ =gOtherText_LinkStandby2
- adds r2, 0x34
- ldrb r2, [r2]
- movs r3, 0xF
- str r3, [sp]
- movs r3, 0x2
- bl sub_8002EB0
- ldr r0, _08113468 @ =gTasks
- mov r2, r9
- adds r1, r2, r7
- lsls r1, 3
- adds r1, r0
- b _081134DC
- .align 2, 0
-_0811345C: .4byte 0x00000179
-_08113460: .4byte gUnknown_03004828
-_08113464: .4byte gOtherText_LinkStandby2
-_08113468: .4byte gTasks
-_0811346C:
- ldr r0, _08113488 @ =gUnknown_03004828
- ldr r0, [r0]
- ldrh r0, [r0, 0x1A]
- cmp r0, 0
- beq _08113478
- b _08113B3A
-_08113478:
- adds r0, r7, 0
- bl DestroyTask
- ldr r0, _0811348C @ =gUnknown_03005E94
- ldr r0, [r0]
- bl SetMainCallback2
- b _08113B3A
- .align 2, 0
-_08113488: .4byte gUnknown_03004828
-_0811348C: .4byte gUnknown_03005E94
-_08113490:
- ldr r4, _081134E4 @ =gUnknown_03004828
- ldr r0, [r4]
- ldrh r0, [r0, 0x1A]
- cmp r0, 0
- beq _0811349C
- b _08113B3A
-_0811349C:
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- beq _081134A8
- b _08113B3A
-_081134A8:
- bl sub_8024CEC
- ldr r0, _081134E8 @ =0x0000016f
- bl PlayFanfare
- ldr r0, _081134EC @ =gBattleStringsTable
- ldr r0, [r0, 0xC]
- bl StrCpyDecodeToDisplayedStringBattle
- ldr r2, [r4]
- adds r0, r2, 0x4
- ldr r1, _081134F0 @ =gDisplayedStringBattle
- adds r2, 0x34
- ldrb r2, [r2]
- movs r3, 0xF
- str r3, [sp]
- movs r3, 0x2
- bl sub_8002EB0
- ldr r0, _081134F4 @ =gTasks
- lsls r1, r7, 2
- adds r1, r7
- lsls r1, 3
- adds r1, r0
- movs r0, 0x40
- strh r0, [r1, 0x14]
-_081134DC:
- ldrh r0, [r1, 0x8]
- adds r0, 0x1
- strh r0, [r1, 0x8]
- b _08113B3A
- .align 2, 0
-_081134E4: .4byte gUnknown_03004828
-_081134E8: .4byte 0x0000016f
-_081134EC: .4byte gBattleStringsTable
-_081134F0: .4byte gDisplayedStringBattle
-_081134F4: .4byte gTasks
-_081134F8:
- ldr r0, _08113530 @ =gUnknown_03004828
- ldr r0, [r0]
- ldrh r0, [r0, 0x1A]
- cmp r0, 0
- beq _08113504
- b _08113B3A
-_08113504:
- bl IsFanfareTaskInactive
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08113512
- b _08113B3A
-_08113512:
- ldr r0, _08113534 @ =gTasks
- lsls r1, r7, 2
- adds r1, r7
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x14]
- subs r0, 0x1
- strh r0, [r1, 0x14]
- lsls r0, 16
- cmp r0, 0
- beq _0811352A
- b _08113B3A
-_0811352A:
- movs r0, 0xD
- strh r0, [r1, 0x8]
- b _08113B3A
- .align 2, 0
-_08113530: .4byte gUnknown_03004828
-_08113534: .4byte gTasks
-_08113538:
- lsls r1, r7, 2
- adds r0, r1, r7
- lsls r0, 3
- adds r0, r6
- movs r3, 0x18
- ldrsh r0, [r0, r3]
- mov r9, r1
- cmp r0, 0xB
- bls _0811354C
- b _08113B3A
-_0811354C:
- lsls r0, 2
- ldr r1, _08113558 @ =_0811355C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08113558: .4byte _0811355C
- .align 2, 0
-_0811355C:
- .4byte _0811358C
- .4byte _081135E4
- .4byte _08113638
- .4byte _08113682
- .4byte _0811371C
- .4byte _0811387C
- .4byte _081138CC
- .4byte _081139E8
- .4byte _08113A3C
- .4byte _08113A90
- .4byte _08113AD8
- .4byte _08113B18
-_0811358C:
- ldr r4, _081135D4 @ =gUnknown_03004828
- ldr r0, [r4]
- ldrh r0, [r0, 0x1A]
- cmp r0, 0
- beq _08113598
- b _08113B3A
-_08113598:
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- beq _081135A4
- b _08113B3A
-_081135A4:
- bl sub_8024CEC
- ldr r0, _081135D8 @ =gBattleStringsTable
- ldr r0, [r0, 0x10]
- bl StrCpyDecodeToDisplayedStringBattle
- ldr r2, [r4]
- adds r0, r2, 0x4
- ldr r1, _081135DC @ =gDisplayedStringBattle
- adds r2, 0x34
- ldrb r2, [r2]
- movs r3, 0xF
- str r3, [sp]
- movs r3, 0x2
- bl sub_8002EB0
- ldr r0, _081135E0 @ =gTasks
- mov r2, r9
- adds r1, r2, r7
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x18]
- adds r0, 0x1
- b _08113B38
- .align 2, 0
-_081135D4: .4byte gUnknown_03004828
-_081135D8: .4byte gBattleStringsTable
-_081135DC: .4byte gDisplayedStringBattle
-_081135E0: .4byte gTasks
-_081135E4:
- ldr r4, _08113628 @ =gUnknown_03004828
- ldr r0, [r4]
- ldrh r0, [r0, 0x1A]
- cmp r0, 0
- beq _081135F0
- b _08113B3A
-_081135F0:
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- beq _081135FC
- b _08113B3A
-_081135FC:
- ldr r0, _0811362C @ =gBattleStringsTable
- ldr r0, [r0, 0x14]
- bl StrCpyDecodeToDisplayedStringBattle
- ldr r2, [r4]
- adds r0, r2, 0x4
- ldr r1, _08113630 @ =gDisplayedStringBattle
- adds r2, 0x34
- ldrb r2, [r2]
- movs r3, 0xF
- str r3, [sp]
- movs r3, 0x2
- bl sub_8002EB0
- ldr r0, _08113634 @ =gTasks
- mov r3, r9
- adds r1, r3, r7
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x18]
- adds r0, 0x1
- b _08113B38
- .align 2, 0
-_08113628: .4byte gUnknown_03004828
-_0811362C: .4byte gBattleStringsTable
-_08113630: .4byte gDisplayedStringBattle
-_08113634: .4byte gTasks
-_08113638:
- ldr r4, _081136FC @ =gUnknown_03004828
- ldr r0, [r4]
- ldrh r0, [r0, 0x1A]
- cmp r0, 0
- beq _08113644
- b _08113B3A
-_08113644:
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- bne _08113682
- ldr r0, _08113700 @ =gBattleStringsTable
- ldr r0, [r0, 0x18]
- bl StrCpyDecodeToDisplayedStringBattle
- ldr r2, [r4]
- adds r0, r2, 0x4
- ldr r1, _08113704 @ =gDisplayedStringBattle
- adds r2, 0x34
- ldrb r2, [r2]
- movs r3, 0xF
- str r3, [sp]
- movs r3, 0x2
- bl sub_8002EB0
- ldr r0, _08113708 @ =gTasks
- mov r2, r9
- adds r1, r2, r7
- lsls r1, 3
- adds r1, r0
- movs r0, 0x5
- strh r0, [r1, 0x1A]
- movs r0, 0x9
- strh r0, [r1, 0x1C]
- ldrh r0, [r1, 0x18]
- adds r0, 0x1
- strh r0, [r1, 0x18]
-_08113682:
- ldr r5, _081136FC @ =gUnknown_03004828
- ldr r0, [r5]
- ldrh r0, [r0, 0x1A]
- cmp r0, 0
- beq _0811368E
- b _08113B3A
-_0811368E:
- bl IsSEPlaying
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0
- beq _0811369C
- b _08113B3A
-_0811369C:
- ldr r0, [r5]
- adds r0, 0x4
- movs r1, 0xD
- str r1, [sp]
- movs r1, 0x18
- movs r2, 0x8
- movs r3, 0x1D
- bl DrawTextWindow
- ldr r4, _0811370C @ =gBattleCommunication
- strb r6, [r4, 0x1]
- ldr r2, [r5]
- adds r0, r2, 0x4
- ldr r1, _08113710 @ =gOtherText_YesNoAndPlayer
- adds r2, 0x34
- ldrb r2, [r2]
- adds r2, 0x80
- movs r3, 0x9
- str r3, [sp]
- movs r3, 0x19
- bl InitWindow
- ldr r0, [r5]
- adds r0, 0x4
- bl sub_8002F44
- ldr r1, _08113714 @ =0x0000ffff
- ldr r3, _08113718 @ =0x00002d9f
- movs r0, 0x20
- str r0, [sp]
- movs r0, 0
- movs r2, 0xC
- bl sub_814A5C0
- bl sub_81150D8
- ldr r0, _08113708 @ =gTasks
- mov r3, r9
- adds r1, r3, r7
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x18]
- adds r0, 0x1
- movs r2, 0
- strh r0, [r1, 0x18]
- strb r2, [r4, 0x1]
- b _08113B3A
- .align 2, 0
-_081136FC: .4byte gUnknown_03004828
-_08113700: .4byte gBattleStringsTable
-_08113704: .4byte gDisplayedStringBattle
-_08113708: .4byte gTasks
-_0811370C: .4byte gBattleCommunication
-_08113710: .4byte gOtherText_YesNoAndPlayer
-_08113714: .4byte 0x0000ffff
-_08113718: .4byte 0x00002d9f
-_0811371C:
- ldr r0, _081137CC @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x40
- ands r0, r1
- cmp r0, 0
- beq _08113742
- ldr r4, _081137D0 @ =gBattleCommunication
- ldrb r0, [r4, 0x1]
- cmp r0, 0
- beq _08113742
- movs r0, 0x5
- bl PlaySE
- bl HBlankCB_TradeEvolutionScene
- movs r0, 0
- strb r0, [r4, 0x1]
- bl sub_81150D8
-_08113742:
- ldr r0, _081137CC @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _08113768
- ldr r4, _081137D0 @ =gBattleCommunication
- ldrb r0, [r4, 0x1]
- cmp r0, 0
- bne _08113768
- movs r0, 0x5
- bl PlaySE
- bl HBlankCB_TradeEvolutionScene
- movs r0, 0x1
- strb r0, [r4, 0x1]
- bl sub_81150D8
-_08113768:
- ldr r0, _081137CC @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0811380A
- ldr r4, _081137D4 @ =gUnknown_03004828
- ldr r0, [r4]
- adds r0, 0x4
- movs r1, 0xD
- str r1, [sp]
- movs r1, 0x18
- movs r2, 0x8
- movs r3, 0x1D
- bl ZeroFillWindowRect
- bl DestroyMenuCursor
- ldr r0, _081137D8 @ =gBattleStringsTable
- movs r1, 0x92
- lsls r1, 3
- adds r0, r1
- ldr r0, [r0]
- bl StrCpyDecodeToDisplayedStringBattle
- ldr r2, [r4]
- adds r0, r2, 0x4
- ldr r1, _081137DC @ =gDisplayedStringBattle
- adds r2, 0x34
- ldrb r2, [r2]
- movs r3, 0xF
- str r3, [sp]
- movs r3, 0x2
- bl sub_8002EB0
- movs r0, 0x5
- bl PlaySE
- ldr r0, _081137D0 @ =gBattleCommunication
- ldrb r2, [r0, 0x1]
- cmp r2, 0
- beq _081137E4
- ldr r0, _081137E0 @ =gTasks
- mov r2, r9
- adds r1, r2, r7
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x1C]
- strh r0, [r1, 0x18]
- b _0811380A
- .align 2, 0
-_081137CC: .4byte gMain
-_081137D0: .4byte gBattleCommunication
-_081137D4: .4byte gUnknown_03004828
-_081137D8: .4byte gBattleStringsTable
-_081137DC: .4byte gDisplayedStringBattle
-_081137E0: .4byte gTasks
-_081137E4:
- ldr r0, _08113868 @ =gTasks
- mov r3, r9
- adds r1, r3, r7
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x1A]
- strh r0, [r1, 0x18]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x5
- bne _0811380A
- movs r0, 0x1
- negs r0, r0
- str r2, [sp]
- movs r1, 0
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
-_0811380A:
- ldr r0, _0811386C @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- bne _08113818
- b _08113B3A
-_08113818:
- ldr r4, _08113870 @ =gUnknown_03004828
- ldr r0, [r4]
- adds r0, 0x4
- movs r1, 0xD
- str r1, [sp]
- movs r1, 0x18
- movs r2, 0x8
- movs r3, 0x1D
- bl ZeroFillWindowRect
- bl DestroyMenuCursor
- ldr r0, _08113874 @ =gBattleStringsTable
- movs r1, 0x92
- lsls r1, 3
- adds r0, r1
- ldr r0, [r0]
- bl StrCpyDecodeToDisplayedStringBattle
- ldr r2, [r4]
- adds r0, r2, 0x4
- ldr r1, _08113878 @ =gDisplayedStringBattle
- adds r2, 0x34
- ldrb r2, [r2]
- movs r3, 0xF
- str r3, [sp]
- movs r3, 0x2
- bl sub_8002EB0
- movs r0, 0x5
- bl PlaySE
- ldr r1, _08113868 @ =gTasks
- mov r2, r9
- adds r0, r2, r7
- lsls r0, 3
- adds r0, r1
- ldrh r1, [r0, 0x1C]
- strh r1, [r0, 0x18]
- b _08113B3A
- .align 2, 0
-_08113868: .4byte gTasks
-_0811386C: .4byte gMain
-_08113870: .4byte gUnknown_03004828
-_08113874: .4byte gBattleStringsTable
-_08113878: .4byte gDisplayedStringBattle
-_0811387C:
- ldr r0, _081138B8 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0811388A
- b _08113B3A
-_0811388A:
- ldr r0, _081138BC @ =gPlayerParty
- mov r3, r9
- adds r5, r3, r7
- lsls r5, 3
- adds r5, r6
- ldrh r1, [r5, 0x20]
- lsls r1, 24
- lsrs r1, 24
- ldr r2, _081138C0 @ =gPlayerPartyCount
- ldrb r2, [r2]
- subs r2, 0x1
- lsls r2, 24
- lsrs r2, 24
- ldr r3, _081138C4 @ =CB2_TradeEvolutionSceneLoadGraphics
- ldr r4, _081138C8 @ =word_2024E82
- ldrh r4, [r4]
- str r4, [sp]
- bl sub_809D9F0
- ldrh r0, [r5, 0x18]
- adds r0, 0x1
- strh r0, [r5, 0x18]
- b _08113B3A
- .align 2, 0
-_081138B8: .4byte gPaletteFade
-_081138BC: .4byte gPlayerParty
-_081138C0: .4byte gPlayerPartyCount
-_081138C4: .4byte CB2_TradeEvolutionSceneLoadGraphics
-_081138C8: .4byte word_2024E82
-_081138CC:
- ldr r0, _08113900 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _081138DA
- b _08113B3A
-_081138DA:
- ldr r0, _08113904 @ =gMain
- ldr r1, [r0, 0x4]
- ldr r0, _08113908 @ =CB2_EvolutionSceneUpdate_1
- cmp r1, r0
- beq _081138E6
- b _08113B3A
-_081138E6:
- bl sub_809FA30
- lsls r0, 24
- lsrs r6, r0, 24
- cmp r6, 0x4
- bne _08113910
- ldr r0, _0811390C @ =gTasks
- mov r2, r9
- adds r1, r2, r7
- lsls r1, 3
- adds r1, r0
- movs r0, 0x9
- b _08113B38
- .align 2, 0
-_08113900: .4byte gPaletteFade
-_08113904: .4byte gMain
-_08113908: .4byte CB2_EvolutionSceneUpdate_1
-_0811390C: .4byte gTasks
-_08113910:
- adds r1, r6, 0
- adds r1, 0xD
- mov r0, r8
- bl GetMonData
- lsls r0, 16
- lsrs r4, r0, 16
- adds r0, r4, 0
- bl IsHMMove2
- cmp r0, 0
- beq _08113970
- ldr r0, _0811395C @ =gBattleStringsTable
- ldr r3, _08113960 @ =0x000004cc
- adds r0, r3
- ldr r0, [r0]
- bl StrCpyDecodeToDisplayedStringBattle
- ldr r0, _08113964 @ =gUnknown_03004828
- ldr r2, [r0]
- adds r0, r2, 0x4
- ldr r1, _08113968 @ =gDisplayedStringBattle
- adds r2, 0x34
- ldrb r2, [r2]
- movs r3, 0xF
- str r3, [sp]
- movs r3, 0x2
- bl sub_8002EB0
- ldr r1, _0811396C @ =gTasks
- mov r2, r9
- adds r0, r2, r7
- lsls r0, 3
- adds r0, r1
- movs r1, 0xB
- strh r1, [r0, 0x18]
- b _08113B3A
- .align 2, 0
-_0811395C: .4byte gBattleStringsTable
-_08113960: .4byte 0x000004cc
-_08113964: .4byte gUnknown_03004828
-_08113968: .4byte gDisplayedStringBattle
-_0811396C: .4byte gTasks
-_08113970:
- ldr r1, _081139D0 @ =gBattleTextBuff2
- movs r0, 0xFD
- strb r0, [r1]
- movs r0, 0x2
- strb r0, [r1, 0x1]
- strb r4, [r1, 0x2]
- lsrs r0, r4, 8
- strb r0, [r1, 0x3]
- movs r0, 0xFF
- strb r0, [r1, 0x4]
- lsls r4, r6, 24
- lsrs r4, 24
- mov r0, r8
- adds r1, r4, 0
- bl RemoveMonPPBonus
- ldr r0, _081139D4 @ =word_2024E82
- ldrh r1, [r0]
- mov r0, r8
- adds r2, r4, 0
- bl SetMonMoveSlot
- ldr r0, _081139D8 @ =gBattleStringsTable
- movs r3, 0xCF
- lsls r3, 2
- adds r0, r3
- ldr r0, [r0]
- bl StrCpyDecodeToDisplayedStringBattle
- ldr r0, _081139DC @ =gUnknown_03004828
- ldr r2, [r0]
- adds r0, r2, 0x4
- ldr r1, _081139E0 @ =gDisplayedStringBattle
- adds r2, 0x34
- ldrb r2, [r2]
- movs r3, 0xF
- str r3, [sp]
- movs r3, 0x2
- bl sub_8002EB0
- ldr r0, _081139E4 @ =gTasks
- mov r2, r9
- adds r1, r2, r7
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x18]
- adds r0, 0x1
- b _08113B38
- .align 2, 0
-_081139D0: .4byte gBattleTextBuff2
-_081139D4: .4byte word_2024E82
-_081139D8: .4byte gBattleStringsTable
-_081139DC: .4byte gUnknown_03004828
-_081139E0: .4byte gDisplayedStringBattle
-_081139E4: .4byte gTasks
-_081139E8:
- ldr r4, _08113A2C @ =gUnknown_03004828
- ldr r0, [r4]
- ldrh r0, [r0, 0x1A]
- cmp r0, 0
- beq _081139F4
- b _08113B3A
-_081139F4:
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- beq _08113A00
- b _08113B3A
-_08113A00:
- ldr r0, _08113A30 @ =gBattleStringsTable
- ldr r0, [r0, 0x1C]
- bl StrCpyDecodeToDisplayedStringBattle
- ldr r2, [r4]
- adds r0, r2, 0x4
- ldr r1, _08113A34 @ =gDisplayedStringBattle
- adds r2, 0x34
- ldrb r2, [r2]
- movs r3, 0xF
- str r3, [sp]
- movs r3, 0x2
- bl sub_8002EB0
- ldr r0, _08113A38 @ =gTasks
- mov r3, r9
- adds r1, r3, r7
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x18]
- adds r0, 0x1
- b _08113B38
- .align 2, 0
-_08113A2C: .4byte gUnknown_03004828
-_08113A30: .4byte gBattleStringsTable
-_08113A34: .4byte gDisplayedStringBattle
-_08113A38: .4byte gTasks
-_08113A3C:
- ldr r4, _08113A80 @ =gUnknown_03004828
- ldr r0, [r4]
- ldrh r0, [r0, 0x1A]
- cmp r0, 0
- bne _08113B3A
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- bne _08113B3A
- ldr r0, _08113A84 @ =gBattleStringsTable
- movs r1, 0xD0
- lsls r1, 2
- adds r0, r1
- ldr r0, [r0]
- bl StrCpyDecodeToDisplayedStringBattle
- ldr r2, [r4]
- adds r0, r2, 0x4
- ldr r1, _08113A88 @ =gDisplayedStringBattle
- adds r2, 0x34
- ldrb r2, [r2]
- movs r4, 0xF
- str r4, [sp]
- movs r3, 0x2
- bl sub_8002EB0
- ldr r1, _08113A8C @ =gTasks
- mov r2, r9
- adds r0, r2, r7
- lsls r0, 3
- adds r0, r1
- strh r4, [r0, 0x8]
- b _08113B3A
- .align 2, 0
-_08113A80: .4byte gUnknown_03004828
-_08113A84: .4byte gBattleStringsTable
-_08113A88: .4byte gDisplayedStringBattle
-_08113A8C: .4byte gTasks
-_08113A90:
- ldr r0, _08113AC8 @ =gBattleStringsTable
- ldr r0, [r0, 0x20]
- bl StrCpyDecodeToDisplayedStringBattle
- ldr r0, _08113ACC @ =gUnknown_03004828
- ldr r2, [r0]
- adds r0, r2, 0x4
- ldr r1, _08113AD0 @ =gDisplayedStringBattle
- adds r2, 0x34
- ldrb r2, [r2]
- movs r3, 0xF
- str r3, [sp]
- movs r3, 0x2
- bl sub_8002EB0
- ldr r1, _08113AD4 @ =gTasks
- mov r3, r9
- adds r0, r3, r7
- lsls r0, 3
- adds r0, r1
- movs r2, 0
- movs r1, 0xA
- strh r1, [r0, 0x1A]
- strh r2, [r0, 0x1C]
- movs r1, 0x3
- strh r1, [r0, 0x18]
- b _08113B3A
- .align 2, 0
-_08113AC8: .4byte gBattleStringsTable
-_08113ACC: .4byte gUnknown_03004828
-_08113AD0: .4byte gDisplayedStringBattle
-_08113AD4: .4byte gTasks
-_08113AD8:
- ldr r0, _08113B08 @ =gBattleStringsTable
- ldr r0, [r0, 0x24]
- bl StrCpyDecodeToDisplayedStringBattle
- ldr r0, _08113B0C @ =gUnknown_03004828
- ldr r2, [r0]
- adds r0, r2, 0x4
- ldr r1, _08113B10 @ =gDisplayedStringBattle
- adds r2, 0x34
- ldrb r2, [r2]
- movs r3, 0xF
- str r3, [sp]
- movs r3, 0x2
- bl sub_8002EB0
- ldr r1, _08113B14 @ =gTasks
- mov r2, r9
- adds r0, r2, r7
- lsls r0, 3
- adds r0, r1
- movs r1, 0xD
- strh r1, [r0, 0x8]
- b _08113B3A
- .align 2, 0
-_08113B08: .4byte gBattleStringsTable
-_08113B0C: .4byte gUnknown_03004828
-_08113B10: .4byte gDisplayedStringBattle
-_08113B14: .4byte gTasks
-_08113B18:
- ldr r0, _08113B48 @ =gUnknown_03004828
- ldr r0, [r0]
- ldrh r0, [r0, 0x1A]
- cmp r0, 0
- bne _08113B3A
- bl IsSEPlaying
- lsls r0, 24
- cmp r0, 0
- bne _08113B3A
- ldr r0, _08113B4C @ =gTasks
- mov r3, r9
- adds r1, r3, r7
- lsls r1, 3
- adds r1, r0
- movs r0, 0x5
-_08113B38:
- strh r0, [r1, 0x18]
-_08113B3A:
- add sp, 0x18
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08113B48: .4byte gUnknown_03004828
-_08113B4C: .4byte gTasks
- thumb_func_end Task_TradeEvolutionScene
-
- thumb_func_start unref_sub_8113B50
-unref_sub_8113B50: @ 8113B50
- 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]
- movs r0, 0
- str r0, [sp, 0xC]
- movs r1, 0
- str r1, [sp, 0x10]
- movs r2, 0
- str r2, [sp, 0x8]
- ldr r3, _08113C60 @ =0x02014800
- mov r12, r3
- ldr r4, _08113C64 @ =0x000018c4
- add r4, r12
- mov r10, r4
- ldr r5, _08113C68 @ =0x000020c4
- add r5, r12
- mov r8, r5
-_08113B7C:
- adds r0, r3, 0
- adds r0, 0x84
- ldr r1, [sp, 0x8]
- adds r0, r1, r0
- strb r2, [r0]
- adds r0, r3, 0x4
- adds r0, r1, r0
- strb r2, [r0]
- ldr r4, _08113C6C @ =0x02014844
- adds r0, r1, r4
- strb r2, [r0]
- movs r6, 0
- lsls r1, 5
- mov r9, r1
- ldr r5, [sp, 0x8]
- lsls r4, r5, 6
-_08113B9C:
- mov r0, r9
- adds r1, r6, r0
- ldr r5, _08113C70 @ =0x020158c4
- adds r0, r1, r5
- strb r2, [r0]
- mov r5, r10
- adds r0, r1, r5
- strb r2, [r0]
- mov r5, r8
- adds r0, r1, r5
- strb r2, [r0]
- ldr r5, _08113C74 @ =0x020170c4
- adds r0, r1, r5
- strb r2, [r0]
- adds r7, r3, 0
- adds r7, 0xC4
- adds r0, r1, r7
- strb r2, [r0]
- ldr r5, _08113C78 @ =0x000008c4
- adds r0, r3, r5
- adds r0, r1, r0
- strb r2, [r0]
- ldr r5, _08113C7C @ =0x000030c4
- adds r0, r3, r5
- adds r0, r1, r0
- strb r2, [r0]
- ldr r5, _08113C80 @ =0x000038c4
- adds r0, r3, r5
- adds r1, r0
- strb r2, [r1]
- lsls r1, r6, 1
- adds r1, r4
- ldr r5, _08113C84 @ =0x000060c4
- adds r0, r3, r5
- adds r0, r1, r0
- strh r2, [r0]
- ldr r5, _08113C88 @ =0x000070c4
- adds r0, r3, r5
- adds r0, r1, r0
- strh r2, [r0]
- ldr r5, _08113C8C @ =0x000080c4
- adds r0, r3, r5
- adds r0, r1, r0
- strh r2, [r0]
- ldr r5, _08113C90 @ =0x000090c4
- adds r0, r3, r5
- adds r1, r0
- strh r2, [r1]
- adds r6, 0x1
- cmp r6, 0x1F
- ble _08113B9C
- ldr r0, [sp, 0x8]
- adds r0, 0x1
- str r0, [sp, 0x8]
- cmp r0, 0x3F
- ble _08113B7C
- ldr r1, _08113C94 @ =0x0000a0c4
- add r1, r12
- movs r0, 0x40
- strb r0, [r1]
- movs r1, 0
- mov r8, r1
- movs r2, 0
- str r2, [sp, 0x8]
- movs r3, 0x80
- lsls r3, 5
- adds r3, r7
- mov r12, r3
- movs r4, 0xC0
- lsls r4, 5
- adds r4, r7
- mov r9, r4
- movs r5, 0
- adds r4, r7, 0
- subs r4, 0xC0
-_08113C32:
- movs r3, 0
- ldr r2, [sp]
- add r2, r8
- movs r6, 0
- ldr r0, [sp, 0x8]
- adds r0, 0x1
- str r0, [sp, 0x30]
- ldr r1, [sp, 0x8]
- lsls r1, 7
- mov r10, r1
- movs r7, 0x1
- negs r7, r7
-_08113C4A:
- asrs r0, r6, 1
- lsls r0, 2
- add r0, r10
- ldr r1, _08113C98 @ =0x020188c4
- adds r0, r1
- str r2, [r0]
- cmp r3, 0
- beq _08113C9C
- cmp r3, 0x1
- beq _08113CC6
- b _08113CF4
- .align 2, 0
-_08113C60: .4byte 0x02014800
-_08113C64: .4byte 0x000018c4
-_08113C68: .4byte 0x000020c4
-_08113C6C: .4byte 0x02014844
-_08113C70: .4byte 0x020158c4
-_08113C74: .4byte 0x020170c4
-_08113C78: .4byte 0x000008c4
-_08113C7C: .4byte 0x000030c4
-_08113C80: .4byte 0x000038c4
-_08113C84: .4byte 0x000060c4
-_08113C88: .4byte 0x000070c4
-_08113C8C: .4byte 0x000080c4
-_08113C90: .4byte 0x000090c4
-_08113C94: .4byte 0x0000a0c4
-_08113C98: .4byte 0x020188c4
-_08113C9C:
- movs r0, 0x1
- ands r0, r6
- cmp r0, 0
- beq _08113CAA
- cmp r0, 0x1
- beq _08113CB0
- b _08113CF4
-_08113CAA:
- ldrb r1, [r2]
- movs r0, 0xF
- b _08113CB4
-_08113CB0:
- ldrb r1, [r2]
- movs r0, 0xF0
-_08113CB4:
- ands r0, r1
- cmp r0, 0
- beq _08113CF4
- ldrb r0, [r4]
- adds r0, r5
- add r0, r12
- strb r6, [r0]
- movs r3, 0x1
- b _08113CF4
-_08113CC6:
- adds r0, r6, 0
- ands r0, r3
- cmp r0, 0
- beq _08113CD4
- cmp r0, 0x1
- beq _08113CDA
- b _08113CF4
-_08113CD4:
- ldrb r1, [r2]
- movs r0, 0xF
- b _08113CDE
-_08113CDA:
- ldrb r1, [r2]
- movs r0, 0xF0
-_08113CDE:
- ands r0, r1
- cmp r0, 0
- bne _08113CF4
- ldrb r0, [r4]
- adds r0, r5
- add r0, r9
- strb r7, [r0]
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- movs r3, 0
-_08113CF4:
- adds r0, r6, 0x1
- movs r1, 0x7
- ands r0, r1
- cmp r0, 0
- bne _08113D02
- adds r2, 0x1D
- b _08113D0C
-_08113D02:
- movs r0, 0x1
- ands r0, r6
- cmp r0, 0
- beq _08113D0C
- adds r2, 0x1
-_08113D0C:
- adds r7, 0x1
- adds r6, 0x1
- cmp r6, 0x3F
- ble _08113C4A
- cmp r3, 0
- beq _08113D26
- ldrb r0, [r4]
- adds r0, r5
- add r0, r9
- strb r6, [r0]
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
-_08113D26:
- movs r0, 0x7
- ldr r2, [sp, 0x30]
- ands r2, r0
- cmp r2, 0
- bne _08113D36
- movs r3, 0xE4
- add r8, r3
- b _08113D3A
-_08113D36:
- movs r0, 0x4
- add r8, r0
-_08113D3A:
- adds r5, 0x20
- adds r4, 0x1
- ldr r1, [sp, 0x8]
- adds r1, 0x1
- str r1, [sp, 0x8]
- cmp r1, 0x3F
- bgt _08113D4A
- b _08113C32
-_08113D4A:
- movs r2, 0
- mov r8, r2
- movs r3, 0
- str r3, [sp, 0x8]
- ldr r0, _08113D84 @ =0x02014844
- movs r4, 0x82
- lsls r4, 6
- adds r4, r0
- mov r10, r4
- movs r5, 0xA2
- lsls r5, 6
- adds r7, r0, r5
- movs r5, 0
- adds r4, r0, 0
- movs r0, 0x1
- mov r9, r0
-_08113D6A:
- movs r3, 0
- ldr r2, [sp, 0x4]
- add r2, r8
- movs r6, 0
- ldr r1, [sp, 0x8]
- adds r1, 0x1
- str r1, [sp, 0x30]
-_08113D78:
- cmp r3, 0
- beq _08113D88
- cmp r3, 0x1
- beq _08113DB4
- b _08113DE4
- .align 2, 0
-_08113D84: .4byte 0x02014844
-_08113D88:
- adds r0, r6, 0
- mov r1, r9
- ands r0, r1
- cmp r0, 0
- beq _08113D98
- cmp r0, 0x1
- beq _08113D9E
- b _08113DE4
-_08113D98:
- ldrb r1, [r2]
- movs r0, 0xF
- b _08113DA2
-_08113D9E:
- ldrb r1, [r2]
- movs r0, 0xF0
-_08113DA2:
- ands r0, r1
- cmp r0, 0
- beq _08113DE4
- ldrb r0, [r4]
- adds r0, r5
- add r0, r10
- strb r6, [r0]
- movs r3, 0x1
- b _08113DE4
-_08113DB4:
- adds r0, r6, 0
- ands r0, r3
- cmp r0, 0
- beq _08113DC2
- cmp r0, 0x1
- beq _08113DC8
- b _08113DE4
-_08113DC2:
- ldrb r1, [r2]
- movs r0, 0xF
- b _08113DCC
-_08113DC8:
- ldrb r1, [r2]
- movs r0, 0xF0
-_08113DCC:
- ands r0, r1
- cmp r0, 0
- bne _08113DE4
- ldrb r0, [r4]
- adds r0, r5
- adds r0, r7
- subs r1, r6, 0x1
- strb r1, [r0]
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- movs r3, 0
-_08113DE4:
- adds r1, r6, 0x1
- movs r0, 0x7
- ands r0, r1
- cmp r0, 0
- bne _08113DF2
- adds r2, 0x1D
- b _08113DFC
-_08113DF2:
- mov r0, r9
- ands r6, r0
- cmp r6, 0
- beq _08113DFC
- adds r2, 0x1
-_08113DFC:
- adds r6, r1, 0
- cmp r6, 0x3F
- ble _08113D78
- cmp r3, 0
- beq _08113E14
- ldrb r0, [r4]
- adds r0, r5
- adds r0, r7
- strb r6, [r0]
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
-_08113E14:
- movs r0, 0x7
- ldr r1, [sp, 0x30]
- ands r1, r0
- cmp r1, 0
- bne _08113E24
- movs r2, 0xE4
- add r8, r2
- b _08113E28
-_08113E24:
- movs r3, 0x4
- add r8, r3
-_08113E28:
- adds r5, 0x20
- adds r4, 0x1
- ldr r0, [sp, 0x8]
- adds r0, 0x1
- str r0, [sp, 0x8]
- cmp r0, 0x3F
- ble _08113D6A
- movs r1, 0
- str r1, [sp, 0x8]
-_08113E3A:
- ldr r3, [sp, 0x8]
- ldr r4, _08113EBC @ =0x02014804
- adds r2, r3, r4
- ldr r5, _08113EC0 @ =0x02014844
- adds r1, r3, r5
- ldrb r0, [r2]
- adds r3, 0x1
- str r3, [sp, 0x30]
- ldrb r1, [r1]
- cmp r0, r1
- bcc _08113E52
- b _08113F9E
-_08113E52:
- movs r0, 0
- str r0, [sp, 0xC]
- ldrb r2, [r2]
- cmp r0, r2
- bge _08113F54
- ldr r0, _08113EC4 @ =0x02014800
- adds r0, 0x4
- ldr r1, [sp, 0x8]
- adds r0, r1, r0
- str r0, [sp, 0x18]
-_08113E66:
- movs r2, 0x80
- lsls r2, 1
- str r2, [sp, 0x14]
- movs r6, 0
- ldr r3, [sp, 0x8]
- ldr r4, _08113EC0 @ =0x02014844
- adds r0, r3, r4
- ldr r5, [sp, 0xC]
- adds r5, 0x1
- str r5, [sp, 0x34]
- ldrb r0, [r0]
- cmp r6, r0
- bge _08113F3E
- ldr r0, _08113EC4 @ =0x02014800
- mov r10, r0
- lsls r0, r3, 5
- ldr r2, [sp, 0xC]
- adds r1, r2, r0
- mov r9, r0
- ldr r0, _08113EC4 @ =0x02014800
- adds r0, 0xC4
- mov r3, r9
- adds r7, r3, r0
- mov r5, r9
- ldr r4, _08113EC4 @ =0x02014800
- ldr r2, _08113EC8 @ =0x000010c4
- adds r0, r4, r2
- adds r1, r0
- mov r8, r1
- ldrb r3, [r1]
- str r3, [sp, 0x1C]
-_08113EA4:
- ldr r0, _08113ECC @ =0x000020c4
- add r0, r10
- adds r0, r5, r0
- ldr r4, [sp, 0x1C]
- ldrb r1, [r0]
- cmp r4, r1
- bls _08113ED0
- mov r2, r8
- ldrb r1, [r2]
- ldrb r0, [r0]
- b _08113ED6
- .align 2, 0
-_08113EBC: .4byte 0x02014804
-_08113EC0: .4byte 0x02014844
-_08113EC4: .4byte 0x02014800
-_08113EC8: .4byte 0x000010c4
-_08113ECC: .4byte 0x000020c4
-_08113ED0:
- ldrb r1, [r0]
- mov r3, r8
- ldrb r0, [r3]
-_08113ED6:
- subs r3, r1, r0
- ldr r1, [sp, 0xC]
- add r1, r9
- ldr r0, _08113EFC @ =0x000018c4
- add r0, r10
- adds r4, r1, r0
- ldr r0, _08113F00 @ =0x000028c4
- add r0, r10
- adds r2, r5, r0
- ldrb r0, [r4]
- ldr r1, _08113F04 @ =0x02014800
- mov r12, r1
- ldrb r1, [r2]
- cmp r0, r1
- bls _08113F08
- adds r1, r0, 0
- ldrb r0, [r2]
- b _08113F0C
- .align 2, 0
-_08113EFC: .4byte 0x000018c4
-_08113F00: .4byte 0x000028c4
-_08113F04: .4byte 0x02014800
-_08113F08:
- ldrb r1, [r2]
- ldrb r0, [r4]
-_08113F0C:
- subs r1, r0
- adds r3, r1
- ldr r2, [sp, 0x14]
- cmp r2, r3
- ble _08113F2C
- ldrb r0, [r7]
- cmp r0, 0
- bne _08113F2C
- ldr r0, _08114050 @ =0x000008c4
- add r0, r12
- adds r0, r5, r0
- ldrb r0, [r0]
- cmp r0, 0
- bne _08113F2C
- str r6, [sp, 0x10]
- str r3, [sp, 0x14]
-_08113F2C:
- adds r7, 0x1
- adds r5, 0x1
- adds r6, 0x1
- ldr r3, [sp, 0x8]
- ldr r4, _08114054 @ =0x02014844
- adds r0, r3, r4
- ldrb r0, [r0]
- cmp r6, r0
- blt _08113EA4
-_08113F3E:
- ldr r0, [sp, 0xC]
- ldr r1, [sp, 0x10]
- ldr r2, [sp, 0x8]
- bl sub_81141F0
- ldr r5, [sp, 0x34]
- str r5, [sp, 0xC]
- ldr r0, [sp, 0x18]
- ldrb r0, [r0]
- cmp r5, r0
- blt _08113E66
-_08113F54:
- movs r6, 0
- ldr r2, _08114058 @ =0x02014800
- ldr r1, [sp, 0x8]
- ldr r3, _08114054 @ =0x02014844
- adds r0, r1, r3
- adds r4, r2, 0
- mov r12, r4
- ldrb r0, [r0]
- cmp r6, r0
- bge _08113F9E
- mov r0, r12
- adds r0, 0x44
- adds r4, r1, r0
-_08113F6E:
- ldr r5, [sp, 0x8]
- lsls r0, r5, 5
- adds r1, r6, r0
- adds r0, r2, 0
- adds r0, 0xC4
- adds r0, r1, r0
- ldrb r0, [r0]
- cmp r0, 0
- bne _08113F94
- ldr r3, _08114050 @ =0x000008c4
- adds r0, r2, r3
- adds r0, r1, r0
- ldrb r0, [r0]
- cmp r0, 0
- bne _08113F94
- adds r0, r6, 0
- adds r1, r5, 0
- bl sub_811430C
-_08113F94:
- adds r6, 0x1
- ldr r2, _08114058 @ =0x02014800
- ldrb r5, [r4]
- cmp r6, r5
- blt _08113F6E
-_08113F9E:
- ldr r0, [sp, 0x8]
- ldr r1, _0811405C @ =0x02014804
- adds r2, r0, r1
- ldr r3, _08114054 @ =0x02014844
- adds r1, r0, r3
- ldrb r0, [r2]
- ldrb r1, [r1]
- cmp r0, r1
- bne _08113FCC
- movs r6, 0
- ldrb r4, [r2]
- cmp r6, r4
- bge _08113FCC
- adds r4, r2, 0
-_08113FBA:
- adds r0, r6, 0
- adds r1, r6, 0
- ldr r2, [sp, 0x8]
- bl sub_81141F0
- adds r6, 0x1
- ldrb r5, [r4]
- cmp r6, r5
- blt _08113FBA
-_08113FCC:
- ldr r0, [sp, 0x8]
- ldr r1, _0811405C @ =0x02014804
- adds r2, r0, r1
- ldr r3, _08114054 @ =0x02014844
- adds r1, r0, r3
- ldrb r0, [r2]
- ldr r4, _08114058 @ =0x02014800
- ldrb r5, [r1]
- cmp r0, r5
- bhi _08113FE2
- b _081141C4
-_08113FE2:
- movs r0, 0
- str r0, [sp, 0x10]
- ldrb r1, [r1]
- cmp r0, r1
- blt _08113FEE
- b _08114104
-_08113FEE:
- str r2, [sp, 0x2C]
- ldr r1, [sp, 0x8]
- lsls r1, 5
- mov r9, r1
- adds r0, r4, 0
- adds r0, 0x44
- ldr r2, [sp, 0x8]
- adds r0, r2, r0
- str r0, [sp, 0x20]
- mov r3, r9
- str r3, [sp, 0x24]
-_08114004:
- movs r4, 0x80
- lsls r4, 1
- str r4, [sp, 0x14]
- movs r6, 0
- ldr r5, [sp, 0x10]
- adds r5, 0x1
- str r5, [sp, 0x38]
- ldr r0, [sp, 0x2C]
- ldrb r0, [r0]
- cmp r6, r0
- bge _081140C4
- ldr r1, [sp, 0x10]
- ldr r2, [sp, 0x24]
- adds r1, r2
- mov r10, r1
- ldr r0, _08114058 @ =0x02014800
- adds r0, 0xC4
- adds r2, r0
- mov r8, r2
- ldr r7, [sp, 0x24]
- ldr r3, _08114058 @ =0x02014800
- ldr r4, _08114060 @ =0x000010c4
- adds r0, r3, r4
- adds r5, r7, r0
- ldr r0, _08114064 @ =0x020168c4
- add r0, r10
- mov r12, r0
- ldrb r1, [r0]
- str r1, [sp, 0x28]
-_0811403E:
- ldrb r0, [r5]
- ldr r2, [sp, 0x28]
- cmp r0, r2
- bls _08114068
- adds r1, r0, 0
- mov r3, r12
- ldrb r0, [r3]
- b _0811406E
- .align 2, 0
-_08114050: .4byte 0x000008c4
-_08114054: .4byte 0x02014844
-_08114058: .4byte 0x02014800
-_0811405C: .4byte 0x02014804
-_08114060: .4byte 0x000010c4
-_08114064: .4byte 0x020168c4
-_08114068:
- mov r4, r12
- ldrb r1, [r4]
- ldrb r0, [r5]
-_0811406E:
- subs r3, r1, r0
- ldr r1, _0811408C @ =0x02014800
- ldr r2, _08114090 @ =0x000018c4
- adds r0, r1, r2
- adds r4, r7, r0
- ldr r2, _08114094 @ =0x020170c4
- add r2, r10
- ldrb r0, [r4]
- ldrb r1, [r2]
- cmp r0, r1
- bls _08114098
- adds r1, r0, 0
- ldrb r0, [r2]
- b _0811409C
- .align 2, 0
-_0811408C: .4byte 0x02014800
-_08114090: .4byte 0x000018c4
-_08114094: .4byte 0x020170c4
-_08114098:
- ldrb r1, [r2]
- ldrb r0, [r4]
-_0811409C:
- subs r1, r0
- adds r3, r1
- ldr r2, [sp, 0x14]
- cmp r2, r3
- ble _081140B2
- mov r4, r8
- ldrb r0, [r4]
- cmp r0, 0
- bne _081140B2
- str r6, [sp, 0xC]
- str r3, [sp, 0x14]
-_081140B2:
- movs r0, 0x1
- add r8, r0
- adds r7, 0x1
- adds r5, 0x1
- adds r6, 0x1
- ldr r1, [sp, 0x2C]
- ldrb r1, [r1]
- cmp r6, r1
- blt _0811403E
-_081140C4:
- ldr r3, [sp, 0xC]
- add r3, r9
- ldr r2, _08114164 @ =0x02014800
- ldr r4, _08114168 @ =0x000030c4
- adds r1, r2, r4
- adds r1, r3, r1
- ldr r2, [sp, 0x10]
- add r2, r9
- ldr r5, _0811416C @ =0x020168c4
- adds r0, r2, r5
- ldrb r0, [r0]
- strb r0, [r1]
- ldr r0, _08114164 @ =0x02014800
- ldr r4, _08114170 @ =0x000038c4
- adds r1, r0, r4
- adds r1, r3, r1
- ldr r5, _08114174 @ =0x020170c4
- adds r2, r5
- ldrb r0, [r2]
- strb r0, [r1]
- ldr r0, _08114164 @ =0x02014800
- adds r0, 0xC4
- adds r3, r0
- movs r0, 0x1
- strb r0, [r3]
- ldr r0, [sp, 0x38]
- str r0, [sp, 0x10]
- ldr r1, [sp, 0x20]
- ldrb r1, [r1]
- cmp r0, r1
- bge _08114104
- b _08114004
-_08114104:
- movs r6, 0
- ldr r4, _08114164 @ =0x02014800
- ldr r2, [sp, 0x8]
- ldr r3, _08114178 @ =0x02014804
- adds r0, r2, r3
- ldrb r0, [r0]
- cmp r6, r0
- bge _081141C4
- adds r7, r4, 0
- mov r9, r6
- movs r5, 0xC4
- adds r5, r7
- mov r8, r5
-_0811411E:
- ldr r1, [sp, 0x8]
- lsls r0, r1, 5
- adds r2, r6, r0
- ldr r3, _0811417C @ =0x000020c4
- adds r0, r7, r3
- adds r0, r2
- mov r10, r0
- ldr r5, _08114168 @ =0x000030c4
- adds r0, r7, r5
- adds r0, r2, r0
- ldrb r0, [r0]
- mov r1, r10
- strb r0, [r1]
- ldr r3, _08114180 @ =0x000028c4
- adds r0, r7, r3
- adds r3, r2, r0
- ldr r5, _08114170 @ =0x000038c4
- adds r0, r7, r5
- adds r0, r2, r0
- ldrb r0, [r0]
- strb r0, [r3]
- mov r0, r8
- adds r1, r2, r0
- ldrb r0, [r1]
- cmp r0, 0
- beq _08114184
- mov r2, r9
- strb r2, [r1]
- adds r0, r6, 0
- adds r1, r6, 0
- ldr r2, [sp, 0x8]
- bl sub_81141F0
- b _081141B4
- .align 2, 0
-_08114164: .4byte 0x02014800
-_08114168: .4byte 0x000030c4
-_0811416C: .4byte 0x020168c4
-_08114170: .4byte 0x000038c4
-_08114174: .4byte 0x020170c4
-_08114178: .4byte 0x02014804
-_0811417C: .4byte 0x000020c4
-_08114180: .4byte 0x000028c4
-_08114184:
- ldr r5, _081141E0 @ =0x000010c4
- adds r1, r4, r5
- adds r1, r2, r1
- ldr r5, _081141E4 @ =0x000018c4
- adds r0, r4, r5
- adds r0, r2, r0
- ldrb r0, [r0]
- ldrb r2, [r1]
- subs r0, r2
- lsrs r1, r0, 31
- adds r0, r1
- asrs r0, 1
- adds r2, r0
- strb r2, [r3]
- mov r0, r10
- strb r2, [r0]
- ldrb r0, [r3]
- subs r0, 0x1
- strb r0, [r3]
- adds r0, r6, 0
- adds r1, r6, 0
- ldr r2, [sp, 0x8]
- bl sub_81141F0
-_081141B4:
- adds r6, 0x1
- ldr r4, _081141E8 @ =0x02014800
- ldr r1, [sp, 0x8]
- ldr r2, _081141EC @ =0x02014804
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r6, r0
- blt _0811411E
-_081141C4:
- ldr r3, [sp, 0x30]
- str r3, [sp, 0x8]
- cmp r3, 0x3F
- bgt _081141CE
- b _08113E3A
-_081141CE:
- add sp, 0x3C
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_081141E0: .4byte 0x000010c4
-_081141E4: .4byte 0x000018c4
-_081141E8: .4byte 0x02014800
-_081141EC: .4byte 0x02014804
- thumb_func_end unref_sub_8113B50
-
- thumb_func_start sub_81141F0
-sub_81141F0: @ 81141F0
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- adds r6, r0, 0
- mov r8, r1
- mov r9, r2
- ldr r3, _0811424C @ =0x02014800
- lsls r1, r2, 5
- mov r0, r8
- adds r4, r0, r1
- ldr r5, _08114250 @ =0x000030c4
- adds r2, r3, r5
- adds r2, r4, r2
- adds r1, r6, r1
- ldr r7, _08114254 @ =0x000010c4
- adds r0, r3, r7
- adds r5, r1, r0
- ldrb r0, [r5]
- strb r0, [r2]
- ldr r0, _08114258 @ =0x000038c4
- adds r2, r3, r0
- adds r2, r4, r2
- ldr r7, _0811425C @ =0x000018c4
- adds r0, r3, r7
- adds r1, r0
- ldrb r0, [r1]
- strb r0, [r2]
- movs r7, 0
- ldr r1, _08114260 @ =0x000020c4
- adds r0, r3, r1
- adds r2, r4, r0
- ldrb r1, [r5]
- ldrb r0, [r2]
- mov r12, r3
- cmp r1, r0
- bcs _08114264
- mov r0, r12
- adds r0, 0xC4
- adds r0, r4, r0
- movs r1, 0x4
- strb r1, [r0]
- ldrb r1, [r2]
- ldrb r0, [r5]
- b _08114276
- .align 2, 0
-_0811424C: .4byte 0x02014800
-_08114250: .4byte 0x000030c4
-_08114254: .4byte 0x000010c4
-_08114258: .4byte 0x000038c4
-_0811425C: .4byte 0x000018c4
-_08114260: .4byte 0x000020c4
-_08114264:
- cmp r1, r0
- bls _08114278
- mov r0, r12
- adds r0, 0xC4
- adds r0, r4, r0
- movs r1, 0x1
- strb r1, [r0]
- ldrb r1, [r5]
- ldrb r0, [r2]
-_08114276:
- subs r7, r1, r0
-_08114278:
- mov r5, r8
- lsls r3, r5, 1
- mov r0, r9
- lsls r4, r0, 6
- adds r0, r3, r4
- ldr r1, _081142BC @ =0x000080c4
- add r1, r12
- adds r0, r1
- lsls r1, r7, 4
- strh r1, [r0]
- movs r7, 0
- mov r1, r9
- lsls r2, r1, 5
- adds r1, r6, r2
- ldr r0, _081142C0 @ =0x000018c4
- add r0, r12
- adds r6, r1, r0
- adds r1, r5, r2
- ldr r0, _081142C4 @ =0x000028c4
- add r0, r12
- adds r5, r1, r0
- ldrb r2, [r6]
- ldrb r0, [r5]
- cmp r2, r0
- bcs _081142CC
- ldr r0, _081142C8 @ =0x000008c4
- add r0, r12
- adds r0, r1, r0
- movs r1, 0x3
- strb r1, [r0]
- ldrb r1, [r5]
- ldrb r0, [r6]
- b _081142DE
- .align 2, 0
-_081142BC: .4byte 0x000080c4
-_081142C0: .4byte 0x000018c4
-_081142C4: .4byte 0x000028c4
-_081142C8: .4byte 0x000008c4
-_081142CC:
- cmp r2, r0
- bls _081142E0
- ldr r0, _08114304 @ =0x000008c4
- add r0, r12
- adds r0, r1, r0
- movs r1, 0x2
- strb r1, [r0]
- ldrb r1, [r6]
- ldrb r0, [r5]
-_081142DE:
- subs r7, r1, r0
-_081142E0:
- adds r0, r3, r4
- ldr r1, _08114308 @ =0x000090c4
- add r1, r12
- adds r0, r1
- lsls r1, r7, 4
- strh r1, [r0]
- mov r1, r12
- adds r1, 0x84
- add r1, r9
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08114304: .4byte 0x000008c4
-_08114308: .4byte 0x000090c4
- thumb_func_end sub_81141F0
-
- thumb_func_start sub_811430C
-sub_811430C: @ 811430C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- ldr r5, _081143AC @ =0x02014800
- lsls r4, r1, 5
- adds r4, r0, r4
- ldr r2, _081143B0 @ =0x000028c4
- adds r2, r5
- mov r10, r2
- add r10, r4
- mov r3, r10
- ldrb r2, [r3]
- ldr r6, _081143B4 @ =0x000020c4
- adds r6, r5
- mov r8, r6
- add r8, r4
- mov r6, r8
- ldrb r3, [r6]
- subs r7, r2, r3
- ldr r2, _081143B8 @ =0x000030c4
- adds r6, r5, r2
- adds r6, r4, r6
- ldr r2, _081143BC @ =0x000038c4
- adds r2, r5
- mov r9, r2
- add r9, r4
- lsrs r2, r7, 31
- adds r2, r7, r2
- asrs r2, 1
- adds r3, r2
- mov r2, r9
- strb r3, [r2]
- strb r3, [r6]
- adds r2, r5, 0
- adds r2, 0xC4
- adds r2, r4, r2
- movs r3, 0x5
- strb r3, [r2]
- ldr r3, _081143C0 @ =0x000008c4
- adds r2, r5, r3
- adds r4, r2
- movs r2, 0x7
- strb r2, [r4]
- adds r3, r5, 0
- adds r3, 0x84
- adds r3, r1, r3
- ldrb r2, [r3]
- adds r2, 0x1
- strb r2, [r3]
- ldrb r3, [r6]
- mov r4, r8
- ldrb r2, [r4]
- subs r7, r3, r2
- lsls r0, 1
- lsls r1, 6
- adds r0, r1
- ldr r6, _081143C4 @ =0x000080c4
- adds r1, r5, r6
- adds r1, r0, r1
- lsls r2, r7, 4
- strh r2, [r1]
- mov r1, r10
- ldrb r2, [r1]
- mov r3, r9
- ldrb r1, [r3]
- subs r7, r2, r1
- ldr r4, _081143C8 @ =0x000090c4
- adds r5, r4
- adds r0, r5
- lsls r1, r7, 4
- strh r1, [r0]
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_081143AC: .4byte 0x02014800
-_081143B0: .4byte 0x000028c4
-_081143B4: .4byte 0x000020c4
-_081143B8: .4byte 0x000030c4
-_081143BC: .4byte 0x000038c4
-_081143C0: .4byte 0x000008c4
-_081143C4: .4byte 0x000080c4
-_081143C8: .4byte 0x000090c4
- thumb_func_end sub_811430C
-
- thumb_func_start unref_sub_81143CC
-unref_sub_81143CC: @ 81143CC
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x14
- movs r0, 0x1
- str r0, [sp, 0x4]
- ldr r0, _08114408 @ =0x02014800
- ldr r2, _0811440C @ =0x0000a0c4
- adds r1, r0, r2
- ldrb r3, [r1]
- adds r4, r0, 0
- cmp r3, 0
- beq _081143EE
- subs r0, r3, 0x1
- strb r0, [r1]
-_081143EE:
- movs r5, 0
- str r5, [sp]
-_081143F2:
- movs r3, 0
- adds r2, r4, 0
- adds r0, r4, 0
- adds r0, 0x84
- ldr r1, [sp]
- adds r0, r1, r0
- adds r1, 0x1
- str r1, [sp, 0x8]
- bl _08114D84
- .align 2, 0
-_08114408: .4byte 0x02014800
-_0811440C: .4byte 0x0000a0c4
-_08114410:
- ldr r5, [sp]
- lsls r0, r5, 5
- adds r1, r3, r0
- adds r2, 0xC4
- adds r1, r2
- ldrb r2, [r1]
- mov r8, r0
- adds r0, r3, 0x1
- mov r10, r0
- cmp r2, 0xC
- bls _08114428
- b _081148D2
-_08114428:
- lsls r0, r2, 2
- ldr r1, _08114434 @ =_08114438
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08114434: .4byte _08114438
- .align 2, 0
-_08114438:
- .4byte _081148D2
- .4byte _0811446C
- .4byte _081144F0
- .4byte _0811457C
- .4byte _08114600
- .4byte _0811468C
- .4byte _081146C8
- .4byte _08114704
- .4byte _08114740
- .4byte _0811477C
- .4byte _081147D0
- .4byte _08114810
- .4byte _08114858
-_0811446C:
- movs r1, 0
- str r1, [sp, 0x4]
- lsls r0, r3, 1
- ldr r2, [sp]
- lsls r1, r2, 6
- adds r0, r1
- ldr r5, _081144E0 @ =0x000060c4
- adds r2, r4, r5
- adds r2, r0, r2
- ldr r5, _081144E4 @ =0x000080c4
- adds r1, r4, r5
- adds r0, r1
- ldrh r1, [r0]
- ldrh r0, [r2]
- adds r1, r0
- movs r0, 0xFF
- lsls r0, 8
- ands r0, r1
- lsrs r5, r0, 8
- movs r0, 0xFF
- ands r1, r0
- strh r1, [r2]
- movs r6, 0
- adds r1, r3, 0x1
- mov r10, r1
- ldr r2, [sp, 0x4]
- cmp r2, r5
- blt _081144A6
- b _081148D2
-_081144A6:
- mov r9, r4
- mov r4, r8
- adds r7, r3, r4
- ldr r0, _081144E8 @ =0x000030c4
- add r0, r9
- adds r4, r7, r0
- ldr r0, _081144EC @ =0x000020c4
- add r0, r9
- adds r2, r7, r0
-_081144B8:
- ldrb r0, [r4]
- subs r0, 0x1
- strb r0, [r4]
- ldrb r1, [r4]
- ldr r0, [sp]
- str r2, [sp, 0xC]
- str r3, [sp, 0x10]
- bl sub_8114DB4
- ldrb r0, [r4]
- ldr r2, [sp, 0xC]
- ldr r3, [sp, 0x10]
- ldrb r1, [r2]
- cmp r0, r1
- bne _081144D8
- b _081148A0
-_081144D8:
- adds r6, 0x1
- cmp r6, r5
- blt _081144B8
- b _081148D2
- .align 2, 0
-_081144E0: .4byte 0x000060c4
-_081144E4: .4byte 0x000080c4
-_081144E8: .4byte 0x000030c4
-_081144EC: .4byte 0x000020c4
-_081144F0:
- movs r2, 0
- str r2, [sp, 0x4]
- ldr r4, _08114568 @ =0x02014800
- lsls r0, r3, 1
- ldr r5, [sp]
- lsls r1, r5, 6
- adds r0, r1
- ldr r1, _0811456C @ =0x000060c4
- adds r2, r4, r1
- adds r2, r0, r2
- ldr r5, _08114570 @ =0x000080c4
- adds r1, r4, r5
- adds r0, r1
- ldrh r1, [r0]
- ldrh r0, [r2]
- adds r1, r0
- movs r0, 0xFF
- lsls r0, 8
- ands r0, r1
- lsrs r5, r0, 8
- movs r0, 0xFF
- ands r1, r0
- strh r1, [r2]
- movs r6, 0
- adds r1, r3, 0x1
- mov r10, r1
- ldr r2, [sp, 0x4]
- cmp r2, r5
- blt _0811452C
- b _081148D2
-_0811452C:
- mov r9, r4
- mov r4, r8
- adds r7, r3, r4
- ldr r0, _08114574 @ =0x000030c4
- add r0, r9
- adds r4, r7, r0
- ldr r0, _08114578 @ =0x000020c4
- add r0, r9
- adds r2, r7, r0
-_0811453E:
- ldrb r0, [r4]
- ldrb r1, [r2]
- cmp r0, r1
- bne _08114548
- b _081148B8
-_08114548:
- adds r1, r0, 0
- ldr r0, [sp]
- str r2, [sp, 0xC]
- str r3, [sp, 0x10]
- bl sub_8114DF0
- ldrb r0, [r4]
- subs r0, 0x1
- strb r0, [r4]
- adds r6, 0x1
- ldr r2, [sp, 0xC]
- ldr r3, [sp, 0x10]
- cmp r6, r5
- blt _0811453E
- b _081148D2
- .align 2, 0
-_08114568: .4byte 0x02014800
-_0811456C: .4byte 0x000060c4
-_08114570: .4byte 0x000080c4
-_08114574: .4byte 0x000030c4
-_08114578: .4byte 0x000020c4
-_0811457C:
- movs r2, 0
- str r2, [sp, 0x4]
- lsls r0, r3, 1
- ldr r5, [sp]
- lsls r1, r5, 6
- adds r0, r1
- ldr r1, _081145F0 @ =0x000060c4
- adds r2, r4, r1
- adds r2, r0, r2
- ldr r5, _081145F4 @ =0x000080c4
- adds r1, r4, r5
- adds r0, r1
- ldrh r1, [r0]
- ldrh r0, [r2]
- adds r1, r0
- movs r0, 0xFF
- lsls r0, 8
- ands r0, r1
- lsrs r5, r0, 8
- movs r0, 0xFF
- ands r1, r0
- strh r1, [r2]
- movs r6, 0
- adds r1, r3, 0x1
- mov r10, r1
- ldr r2, [sp, 0x4]
- cmp r2, r5
- blt _081145B6
- b _081148D2
-_081145B6:
- mov r9, r4
- mov r4, r8
- adds r7, r3, r4
- ldr r0, _081145F8 @ =0x000030c4
- add r0, r9
- adds r4, r7, r0
- ldr r0, _081145FC @ =0x000020c4
- add r0, r9
- adds r2, r7, r0
-_081145C8:
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- ldrb r1, [r4]
- ldr r0, [sp]
- str r2, [sp, 0xC]
- str r3, [sp, 0x10]
- bl sub_8114DB4
- ldrb r0, [r4]
- ldr r2, [sp, 0xC]
- ldr r3, [sp, 0x10]
- ldrb r1, [r2]
- cmp r0, r1
- bne _081145E8
- b _081148AC
-_081145E8:
- adds r6, 0x1
- cmp r6, r5
- blt _081145C8
- b _081148D2
- .align 2, 0
-_081145F0: .4byte 0x000060c4
-_081145F4: .4byte 0x000080c4
-_081145F8: .4byte 0x000030c4
-_081145FC: .4byte 0x000020c4
-_08114600:
- movs r2, 0
- str r2, [sp, 0x4]
- ldr r4, _08114678 @ =0x02014800
- lsls r0, r3, 1
- ldr r5, [sp]
- lsls r1, r5, 6
- adds r0, r1
- ldr r1, _0811467C @ =0x000060c4
- adds r2, r4, r1
- adds r2, r0, r2
- ldr r5, _08114680 @ =0x000080c4
- adds r1, r4, r5
- adds r0, r1
- ldrh r1, [r0]
- ldrh r0, [r2]
- adds r1, r0
- movs r0, 0xFF
- lsls r0, 8
- ands r0, r1
- lsrs r5, r0, 8
- movs r0, 0xFF
- ands r1, r0
- strh r1, [r2]
- movs r6, 0
- adds r1, r3, 0x1
- mov r10, r1
- ldr r2, [sp, 0x4]
- cmp r2, r5
- blt _0811463C
- b _081148D2
-_0811463C:
- mov r9, r4
- mov r4, r8
- adds r7, r3, r4
- ldr r0, _08114684 @ =0x000030c4
- add r0, r9
- adds r4, r7, r0
- ldr r0, _08114688 @ =0x000020c4
- add r0, r9
- adds r2, r7, r0
-_0811464E:
- ldrb r0, [r4]
- ldrb r1, [r2]
- cmp r0, r1
- bne _08114658
- b _081148B8
-_08114658:
- adds r1, r0, 0
- ldr r0, [sp]
- str r2, [sp, 0xC]
- str r3, [sp, 0x10]
- bl sub_8114DF0
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- adds r6, 0x1
- ldr r2, [sp, 0xC]
- ldr r3, [sp, 0x10]
- cmp r6, r5
- blt _0811464E
- b _081148D2
- .align 2, 0
-_08114678: .4byte 0x02014800
-_0811467C: .4byte 0x000060c4
-_08114680: .4byte 0x000080c4
-_08114684: .4byte 0x000030c4
-_08114688: .4byte 0x000020c4
-_0811468C:
- movs r2, 0
- str r2, [sp, 0x4]
- ldr r5, _081146C0 @ =0x02014800
- mov r0, r8
- adds r4, r3, r0
- ldr r1, _081146C4 @ =0x000030c4
- adds r0, r5, r1
- adds r0, r4, r0
- ldrb r1, [r0]
- ldr r0, [sp]
- str r3, [sp, 0x10]
- bl sub_8114E48
- lsls r0, 24
- ldr r3, [sp, 0x10]
- adds r2, r3, 0x1
- mov r10, r2
- cmp r0, 0
- bne _081146B4
- b _081148D2
-_081146B4:
- adds r0, r5, 0
- adds r0, 0xC4
- adds r0, r4, r0
- movs r1, 0x9
- strb r1, [r0]
- b _081148D2
- .align 2, 0
-_081146C0: .4byte 0x02014800
-_081146C4: .4byte 0x000030c4
-_081146C8:
- movs r4, 0
- str r4, [sp, 0x4]
- ldr r5, _081146FC @ =0x02014800
- mov r0, r8
- adds r4, r3, r0
- ldr r1, _08114700 @ =0x000030c4
- adds r0, r5, r1
- adds r0, r4, r0
- ldrb r1, [r0]
- ldr r0, [sp]
- str r3, [sp, 0x10]
- bl sub_8114E48
- lsls r0, 24
- ldr r3, [sp, 0x10]
- adds r2, r3, 0x1
- mov r10, r2
- cmp r0, 0
- bne _081146F0
- b _081148D2
-_081146F0:
- adds r0, r5, 0
- adds r0, 0xC4
- adds r0, r4, r0
- movs r1, 0xA
- strb r1, [r0]
- b _081148D2
- .align 2, 0
-_081146FC: .4byte 0x02014800
-_08114700: .4byte 0x000030c4
-_08114704:
- movs r4, 0
- str r4, [sp, 0x4]
- ldr r5, _08114738 @ =0x02014800
- mov r0, r8
- adds r4, r3, r0
- ldr r1, _0811473C @ =0x000030c4
- adds r0, r5, r1
- adds r0, r4, r0
- ldrb r1, [r0]
- ldr r0, [sp]
- str r3, [sp, 0x10]
- bl sub_8114E48
- lsls r0, 24
- ldr r3, [sp, 0x10]
- adds r2, r3, 0x1
- mov r10, r2
- cmp r0, 0
- bne _0811472C
- b _081148D2
-_0811472C:
- adds r0, r5, 0
- adds r0, 0xC4
- adds r0, r4, r0
- movs r1, 0xB
- strb r1, [r0]
- b _081148D2
- .align 2, 0
-_08114738: .4byte 0x02014800
-_0811473C: .4byte 0x000030c4
-_08114740:
- movs r4, 0
- str r4, [sp, 0x4]
- ldr r5, _08114774 @ =0x02014800
- mov r0, r8
- adds r4, r3, r0
- ldr r1, _08114778 @ =0x000030c4
- adds r0, r5, r1
- adds r0, r4, r0
- ldrb r1, [r0]
- ldr r0, [sp]
- str r3, [sp, 0x10]
- bl sub_8114E48
- lsls r0, 24
- ldr r3, [sp, 0x10]
- adds r2, r3, 0x1
- mov r10, r2
- cmp r0, 0
- bne _08114768
- b _081148D2
-_08114768:
- adds r0, r5, 0
- adds r0, 0xC4
- adds r0, r4, r0
- movs r1, 0xC
- strb r1, [r0]
- b _081148D2
- .align 2, 0
-_08114774: .4byte 0x02014800
-_08114778: .4byte 0x000030c4
-_0811477C:
- movs r4, 0
- str r4, [sp, 0x4]
- ldr r6, _081147B4 @ =0x02014800
- mov r0, r8
- adds r5, r3, r0
- ldr r1, _081147B8 @ =0x000030c4
- adds r4, r6, r1
- adds r4, r5, r4
- ldrb r1, [r4]
- ldr r0, [sp]
- str r3, [sp, 0x10]
- bl sub_8114DB4
- ldr r2, _081147BC @ =0x000020c4
- adds r0, r6, r2
- adds r0, r5, r0
- ldrb r1, [r4]
- ldr r3, [sp, 0x10]
- ldrb r0, [r0]
- cmp r1, r0
- bne _081147C0
- adds r0, r6, 0
- adds r0, 0xC4
- adds r0, r5, r0
- mov r4, sp
- ldrb r4, [r4, 0x4]
- strb r4, [r0]
- b _08114844
- .align 2, 0
-_081147B4: .4byte 0x02014800
-_081147B8: .4byte 0x000030c4
-_081147BC: .4byte 0x000020c4
-_081147C0:
- adds r0, r6, 0
- adds r0, 0xC4
- adds r0, r5, r0
- movs r1, 0x1
- strb r1, [r0]
- adds r0, r3, 0x1
- mov r10, r0
- b _081148D2
-_081147D0:
- movs r1, 0
- str r1, [sp, 0x4]
- ldr r6, _08114804 @ =0x02014800
- mov r2, r8
- adds r5, r3, r2
- ldr r0, _08114808 @ =0x000030c4
- adds r4, r6, r0
- adds r4, r5, r4
- ldrb r1, [r4]
- ldr r0, [sp]
- str r3, [sp, 0x10]
- bl sub_8114DF0
- ldr r1, _0811480C @ =0x000020c4
- adds r0, r6, r1
- adds r0, r5, r0
- ldrb r1, [r4]
- ldr r3, [sp, 0x10]
- ldrb r0, [r0]
- cmp r1, r0
- beq _08114882
- adds r0, r6, 0
- adds r0, 0xC4
- adds r0, r5, r0
- movs r1, 0x2
- b _08114842
- .align 2, 0
-_08114804: .4byte 0x02014800
-_08114808: .4byte 0x000030c4
-_0811480C: .4byte 0x000020c4
-_08114810:
- movs r0, 0
- str r0, [sp, 0x4]
- ldr r6, _0811484C @ =0x02014800
- mov r1, r8
- adds r5, r3, r1
- ldr r2, _08114850 @ =0x000030c4
- adds r4, r6, r2
- adds r4, r5, r4
- ldrb r1, [r4]
- ldr r0, [sp]
- str r3, [sp, 0x10]
- bl sub_8114DB4
- ldr r1, _08114854 @ =0x000020c4
- adds r0, r6, r1
- adds r0, r5, r0
- ldrb r1, [r4]
- ldr r3, [sp, 0x10]
- ldrb r0, [r0]
- cmp r1, r0
- beq _08114882
- adds r0, r6, 0
- adds r0, 0xC4
- adds r0, r5, r0
- movs r1, 0x3
-_08114842:
- strb r1, [r0]
-_08114844:
- adds r5, r3, 0x1
- mov r10, r5
- b _081148D2
- .align 2, 0
-_0811484C: .4byte 0x02014800
-_08114850: .4byte 0x000030c4
-_08114854: .4byte 0x000020c4
-_08114858:
- movs r0, 0
- str r0, [sp, 0x4]
- ldr r6, _08114894 @ =0x02014800
- mov r1, r8
- adds r5, r3, r1
- ldr r2, _08114898 @ =0x000030c4
- adds r4, r6, r2
- adds r4, r5, r4
- ldrb r1, [r4]
- ldr r0, [sp]
- str r3, [sp, 0x10]
- bl sub_8114DF0
- ldr r1, _0811489C @ =0x000020c4
- adds r0, r6, r1
- adds r0, r5, r0
- ldrb r1, [r4]
- ldr r3, [sp, 0x10]
- ldrb r0, [r0]
- cmp r1, r0
- bne _081148C4
-_08114882:
- adds r0, r6, 0
- adds r0, 0xC4
- adds r0, r5, r0
- mov r2, sp
- ldrb r2, [r2, 0x4]
- strb r2, [r0]
- adds r4, r3, 0x1
- mov r10, r4
- b _081148D2
- .align 2, 0
-_08114894: .4byte 0x02014800
-_08114898: .4byte 0x000030c4
-_0811489C: .4byte 0x000020c4
-_081148A0:
- mov r0, r9
- adds r0, 0xC4
- adds r0, r7, r0
- movs r5, 0
- strb r5, [r0]
- b _081148D2
-_081148AC:
- mov r0, r9
- adds r0, 0xC4
- adds r0, r7, r0
- movs r1, 0
- strb r1, [r0]
- b _081148D2
-_081148B8:
- mov r0, r9
- adds r0, 0xC4
- adds r0, r7, r0
- movs r1, 0
- strb r1, [r0]
- b _081148D2
-_081148C4:
- adds r0, r6, 0
- adds r0, 0xC4
- adds r0, r5, r0
- movs r1, 0x4
- strb r1, [r0]
- adds r2, r3, 0x1
- mov r10, r2
-_081148D2:
- ldr r0, _081148F4 @ =0x02014800
- mov r4, r8
- adds r1, r3, r4
- ldr r5, _081148F8 @ =0x000008c4
- adds r2, r0, r5
- adds r1, r2
- ldrb r1, [r1]
- adds r4, r0, 0
- cmp r1, 0xC
- bls _081148E8
- b _08114D76
-_081148E8:
- lsls r0, r1, 2
- ldr r1, _081148FC @ =_08114900
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_081148F4: .4byte 0x02014800
-_081148F8: .4byte 0x000008c4
-_081148FC: .4byte _08114900
- .align 2, 0
-_08114900:
- .4byte _08114D76
- .4byte _08114934
- .4byte _081149B8
- .4byte _08114A3C
- .4byte _08114AC0
- .4byte _08114B44
- .4byte _08114B7C
- .4byte _08114BB4
- .4byte _08114BEC
- .4byte _08114C24
- .4byte _08114C78
- .4byte _08114CB8
- .4byte _08114CF8
-_08114934:
- movs r0, 0
- str r0, [sp, 0x4]
- lsls r0, r3, 1
- ldr r2, [sp]
- lsls r1, r2, 6
- adds r0, r1
- ldr r5, _081149A8 @ =0x000070c4
- adds r2, r4, r5
- adds r2, r0, r2
- ldr r5, _081149AC @ =0x000090c4
- adds r1, r4, r5
- adds r0, r1
- ldrh r1, [r0]
- ldrh r0, [r2]
- adds r1, r0
- movs r0, 0xFF
- lsls r0, 8
- ands r0, r1
- lsrs r5, r0, 8
- movs r0, 0xFF
- ands r1, r0
- strh r1, [r2]
- movs r6, 0
- ldr r1, [sp, 0x4]
- cmp r1, r5
- blt _0811496A
- b _08114D76
-_0811496A:
- mov r9, r4
- mov r2, r8
- adds r7, r3, r2
- ldr r0, _081149B0 @ =0x000038c4
- add r0, r9
- adds r4, r7, r0
- movs r3, 0
- ldr r0, _081149B4 @ =0x000028c4
- add r0, r9
- adds r2, r7, r0
-_0811497E:
- ldrb r0, [r4]
- subs r0, 0x1
- strb r0, [r4]
- ldrb r1, [r4]
- ldr r0, [sp]
- str r2, [sp, 0xC]
- str r3, [sp, 0x10]
- bl sub_8114DB4
- ldrb r0, [r4]
- ldr r2, [sp, 0xC]
- ldr r3, [sp, 0x10]
- ldrb r1, [r2]
- cmp r0, r1
- bne _0811499E
- b _08114D4C
-_0811499E:
- adds r6, 0x1
- cmp r6, r5
- blt _0811497E
- b _08114D76
- .align 2, 0
-_081149A8: .4byte 0x000070c4
-_081149AC: .4byte 0x000090c4
-_081149B0: .4byte 0x000038c4
-_081149B4: .4byte 0x000028c4
-_081149B8:
- movs r2, 0
- str r2, [sp, 0x4]
- ldr r4, _08114A28 @ =0x02014800
- lsls r0, r3, 1
- ldr r5, [sp]
- lsls r1, r5, 6
- adds r0, r1
- ldr r1, _08114A2C @ =0x000070c4
- adds r2, r4, r1
- adds r2, r0, r2
- ldr r5, _08114A30 @ =0x000090c4
- adds r1, r4, r5
- adds r0, r1
- ldrh r1, [r0]
- ldrh r0, [r2]
- adds r1, r0
- movs r0, 0xFF
- lsls r0, 8
- ands r0, r1
- lsrs r5, r0, 8
- movs r0, 0xFF
- ands r1, r0
- strh r1, [r2]
- movs r6, 0
- ldr r1, [sp, 0x4]
- cmp r1, r5
- blt _081149F0
- b _08114D76
-_081149F0:
- mov r9, r4
- mov r2, r8
- adds r7, r3, r2
- ldr r0, _08114A34 @ =0x000038c4
- add r0, r9
- adds r4, r7, r0
- ldr r0, _08114A38 @ =0x000028c4
- add r0, r9
- adds r2, r7, r0
-_08114A02:
- ldrb r0, [r4]
- ldrb r1, [r2]
- cmp r0, r1
- bne _08114A0C
- b _08114D3C
-_08114A0C:
- adds r1, r0, 0
- ldr r0, [sp]
- str r2, [sp, 0xC]
- bl sub_8114DF0
- ldrb r0, [r4]
- subs r0, 0x1
- strb r0, [r4]
- adds r6, 0x1
- ldr r2, [sp, 0xC]
- cmp r6, r5
- blt _08114A02
- b _08114D76
- .align 2, 0
-_08114A28: .4byte 0x02014800
-_08114A2C: .4byte 0x000070c4
-_08114A30: .4byte 0x000090c4
-_08114A34: .4byte 0x000038c4
-_08114A38: .4byte 0x000028c4
-_08114A3C:
- movs r2, 0
- str r2, [sp, 0x4]
- lsls r0, r3, 1
- ldr r5, [sp]
- lsls r1, r5, 6
- adds r0, r1
- ldr r1, _08114AB0 @ =0x000070c4
- adds r2, r4, r1
- adds r2, r0, r2
- ldr r5, _08114AB4 @ =0x000090c4
- adds r1, r4, r5
- adds r0, r1
- ldrh r1, [r0]
- ldrh r0, [r2]
- adds r1, r0
- movs r0, 0xFF
- lsls r0, 8
- ands r0, r1
- lsrs r5, r0, 8
- movs r0, 0xFF
- ands r1, r0
- strh r1, [r2]
- movs r6, 0
- ldr r1, [sp, 0x4]
- cmp r1, r5
- blt _08114A72
- b _08114D76
-_08114A72:
- mov r9, r4
- mov r2, r8
- adds r7, r3, r2
- ldr r0, _08114AB8 @ =0x000038c4
- add r0, r9
- adds r4, r7, r0
- movs r3, 0
- ldr r0, _08114ABC @ =0x000028c4
- add r0, r9
- adds r2, r7, r0
-_08114A86:
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- ldrb r1, [r4]
- ldr r0, [sp]
- str r2, [sp, 0xC]
- str r3, [sp, 0x10]
- bl sub_8114DB4
- ldrb r0, [r4]
- ldr r2, [sp, 0xC]
- ldr r3, [sp, 0x10]
- ldrb r1, [r2]
- cmp r0, r1
- bne _08114AA6
- b _08114D4C
-_08114AA6:
- adds r6, 0x1
- cmp r6, r5
- blt _08114A86
- b _08114D76
- .align 2, 0
-_08114AB0: .4byte 0x000070c4
-_08114AB4: .4byte 0x000090c4
-_08114AB8: .4byte 0x000038c4
-_08114ABC: .4byte 0x000028c4
-_08114AC0:
- movs r2, 0
- str r2, [sp, 0x4]
- ldr r4, _08114B30 @ =0x02014800
- lsls r0, r3, 1
- ldr r5, [sp]
- lsls r1, r5, 6
- adds r0, r1
- ldr r1, _08114B34 @ =0x000070c4
- adds r2, r4, r1
- adds r2, r0, r2
- ldr r5, _08114B38 @ =0x000090c4
- adds r1, r4, r5
- adds r0, r1
- ldrh r1, [r0]
- ldrh r0, [r2]
- adds r1, r0
- movs r0, 0xFF
- lsls r0, 8
- ands r0, r1
- lsrs r5, r0, 8
- movs r0, 0xFF
- ands r1, r0
- strh r1, [r2]
- movs r6, 0
- ldr r1, [sp, 0x4]
- cmp r1, r5
- blt _08114AF8
- b _08114D76
-_08114AF8:
- mov r9, r4
- mov r2, r8
- adds r7, r3, r2
- ldr r0, _08114B3C @ =0x000038c4
- add r0, r9
- adds r4, r7, r0
- ldr r0, _08114B40 @ =0x000028c4
- add r0, r9
- adds r2, r7, r0
-_08114B0A:
- ldrb r0, [r4]
- ldrb r1, [r2]
- cmp r0, r1
- bne _08114B14
- b _08114D5C
-_08114B14:
- adds r1, r0, 0
- ldr r0, [sp]
- str r2, [sp, 0xC]
- bl sub_8114DF0
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- adds r6, 0x1
- ldr r2, [sp, 0xC]
- cmp r6, r5
- blt _08114B0A
- b _08114D76
- .align 2, 0
-_08114B30: .4byte 0x02014800
-_08114B34: .4byte 0x000070c4
-_08114B38: .4byte 0x000090c4
-_08114B3C: .4byte 0x000038c4
-_08114B40: .4byte 0x000028c4
-_08114B44:
- movs r2, 0
- str r2, [sp, 0x4]
- ldr r5, _08114B70 @ =0x02014800
- mov r0, r8
- adds r4, r3, r0
- ldr r1, _08114B74 @ =0x000038c4
- adds r0, r5, r1
- adds r0, r4, r0
- ldrb r1, [r0]
- ldr r0, [sp]
- bl sub_8114E48
- lsls r0, 24
- cmp r0, 0
- bne _08114B64
- b _08114D76
-_08114B64:
- ldr r2, _08114B78 @ =0x000008c4
- adds r0, r5, r2
- adds r0, r4, r0
- movs r1, 0x9
- b _08114D74
- .align 2, 0
-_08114B70: .4byte 0x02014800
-_08114B74: .4byte 0x000038c4
-_08114B78: .4byte 0x000008c4
-_08114B7C:
- movs r4, 0
- str r4, [sp, 0x4]
- ldr r5, _08114BA8 @ =0x02014800
- mov r0, r8
- adds r4, r3, r0
- ldr r1, _08114BAC @ =0x000038c4
- adds r0, r5, r1
- adds r0, r4, r0
- ldrb r1, [r0]
- ldr r0, [sp]
- bl sub_8114E48
- lsls r0, 24
- cmp r0, 0
- bne _08114B9C
- b _08114D76
-_08114B9C:
- ldr r2, _08114BB0 @ =0x000008c4
- adds r0, r5, r2
- adds r0, r4, r0
- movs r1, 0xA
- b _08114D74
- .align 2, 0
-_08114BA8: .4byte 0x02014800
-_08114BAC: .4byte 0x000038c4
-_08114BB0: .4byte 0x000008c4
-_08114BB4:
- movs r4, 0
- str r4, [sp, 0x4]
- ldr r5, _08114BE0 @ =0x02014800
- mov r0, r8
- adds r4, r3, r0
- ldr r1, _08114BE4 @ =0x000038c4
- adds r0, r5, r1
- adds r0, r4, r0
- ldrb r1, [r0]
- ldr r0, [sp]
- bl sub_8114E48
- lsls r0, 24
- cmp r0, 0
- bne _08114BD4
- b _08114D76
-_08114BD4:
- ldr r2, _08114BE8 @ =0x000008c4
- adds r0, r5, r2
- adds r0, r4, r0
- movs r1, 0xB
- b _08114D74
- .align 2, 0
-_08114BE0: .4byte 0x02014800
-_08114BE4: .4byte 0x000038c4
-_08114BE8: .4byte 0x000008c4
-_08114BEC:
- movs r4, 0
- str r4, [sp, 0x4]
- ldr r5, _08114C18 @ =0x02014800
- mov r0, r8
- adds r4, r3, r0
- ldr r1, _08114C1C @ =0x000038c4
- adds r0, r5, r1
- adds r0, r4, r0
- ldrb r1, [r0]
- ldr r0, [sp]
- bl sub_8114E48
- lsls r0, 24
- cmp r0, 0
- bne _08114C0C
- b _08114D76
-_08114C0C:
- ldr r2, _08114C20 @ =0x000008c4
- adds r0, r5, r2
- adds r0, r4, r0
- movs r1, 0xC
- b _08114D74
- .align 2, 0
-_08114C18: .4byte 0x02014800
-_08114C1C: .4byte 0x000038c4
-_08114C20: .4byte 0x000008c4
-_08114C24:
- movs r4, 0
- str r4, [sp, 0x4]
- ldr r6, _08114C58 @ =0x02014800
- mov r0, r8
- adds r5, r3, r0
- ldr r1, _08114C5C @ =0x000038c4
- adds r4, r6, r1
- adds r4, r5, r4
- ldrb r1, [r4]
- ldr r0, [sp]
- bl sub_8114DB4
- ldr r2, _08114C60 @ =0x000028c4
- adds r0, r6, r2
- adds r0, r5, r0
- ldrb r1, [r4]
- ldrb r0, [r0]
- cmp r1, r0
- bne _08114C68
- ldr r4, _08114C64 @ =0x000008c4
- adds r0, r6, r4
- adds r0, r5, r0
- mov r5, sp
- ldrb r5, [r5, 0x4]
- strb r5, [r0]
- b _08114D76
- .align 2, 0
-_08114C58: .4byte 0x02014800
-_08114C5C: .4byte 0x000038c4
-_08114C60: .4byte 0x000028c4
-_08114C64: .4byte 0x000008c4
-_08114C68:
- ldr r1, _08114C74 @ =0x000008c4
- adds r0, r6, r1
- adds r0, r5, r0
- movs r1, 0x1
- b _08114D74
- .align 2, 0
-_08114C74: .4byte 0x000008c4
-_08114C78:
- movs r2, 0
- str r2, [sp, 0x4]
- ldr r6, _08114CA8 @ =0x02014800
- mov r4, r8
- adds r5, r3, r4
- ldr r0, _08114CAC @ =0x000038c4
- adds r4, r6, r0
- adds r4, r5, r4
- ldrb r1, [r4]
- ldr r0, [sp]
- bl sub_8114DF0
- ldr r1, _08114CB0 @ =0x000028c4
- adds r0, r6, r1
- adds r0, r5, r0
- ldrb r1, [r4]
- ldrb r0, [r0]
- cmp r1, r0
- beq _08114D1E
- ldr r1, _08114CB4 @ =0x000008c4
- adds r0, r6, r1
- adds r0, r5, r0
- movs r1, 0x2
- b _08114D74
- .align 2, 0
-_08114CA8: .4byte 0x02014800
-_08114CAC: .4byte 0x000038c4
-_08114CB0: .4byte 0x000028c4
-_08114CB4: .4byte 0x000008c4
-_08114CB8:
- movs r2, 0
- str r2, [sp, 0x4]
- ldr r6, _08114CE8 @ =0x02014800
- mov r4, r8
- adds r5, r3, r4
- ldr r0, _08114CEC @ =0x000038c4
- adds r4, r6, r0
- adds r4, r5, r4
- ldrb r1, [r4]
- ldr r0, [sp]
- bl sub_8114DB4
- ldr r1, _08114CF0 @ =0x000028c4
- adds r0, r6, r1
- adds r0, r5, r0
- ldrb r1, [r4]
- ldrb r0, [r0]
- cmp r1, r0
- beq _08114D1E
- ldr r1, _08114CF4 @ =0x000008c4
- adds r0, r6, r1
- adds r0, r5, r0
- movs r1, 0x3
- b _08114D74
- .align 2, 0
-_08114CE8: .4byte 0x02014800
-_08114CEC: .4byte 0x000038c4
-_08114CF0: .4byte 0x000028c4
-_08114CF4: .4byte 0x000008c4
-_08114CF8:
- movs r2, 0
- str r2, [sp, 0x4]
- ldr r6, _08114D2C @ =0x02014800
- mov r4, r8
- adds r5, r3, r4
- ldr r0, _08114D30 @ =0x000038c4
- adds r4, r6, r0
- adds r4, r5, r4
- ldrb r1, [r4]
- ldr r0, [sp]
- bl sub_8114DF0
- ldr r1, _08114D34 @ =0x000028c4
- adds r0, r6, r1
- adds r0, r5, r0
- ldrb r1, [r4]
- ldrb r0, [r0]
- cmp r1, r0
- bne _08114D6C
-_08114D1E:
- ldr r2, _08114D38 @ =0x000008c4
- adds r0, r6, r2
- adds r0, r5, r0
- mov r4, sp
- ldrb r4, [r4, 0x4]
- strb r4, [r0]
- b _08114D76
- .align 2, 0
-_08114D2C: .4byte 0x02014800
-_08114D30: .4byte 0x000038c4
-_08114D34: .4byte 0x000028c4
-_08114D38: .4byte 0x000008c4
-_08114D3C:
- ldr r0, _08114D48 @ =0x000008c4
- add r0, r9
- adds r0, r7, r0
- movs r1, 0
- b _08114D74
- .align 2, 0
-_08114D48: .4byte 0x000008c4
-_08114D4C:
- ldr r0, _08114D58 @ =0x000008c4
- add r0, r9
- adds r0, r7, r0
- strb r3, [r0]
- b _08114D76
- .align 2, 0
-_08114D58: .4byte 0x000008c4
-_08114D5C:
- ldr r0, _08114D68 @ =0x000008c4
- add r0, r9
- adds r0, r7, r0
- movs r1, 0
- b _08114D74
- .align 2, 0
-_08114D68: .4byte 0x000008c4
-_08114D6C:
- ldr r1, _08114DAC @ =0x000008c4
- adds r0, r6, r1
- adds r0, r5, r0
- movs r1, 0x4
-_08114D74:
- strb r1, [r0]
-_08114D76:
- mov r3, r10
- ldr r2, _08114DB0 @ =0x02014800
- adds r0, r2, 0
- adds r0, 0x84
- ldr r4, [sp]
- adds r0, r4, r0
- adds r4, r2, 0
-_08114D84:
- ldrb r0, [r0]
- cmp r3, r0
- bge _08114D8E
- bl _08114410
-_08114D8E:
- ldr r5, [sp, 0x8]
- str r5, [sp]
- cmp r5, 0x3F
- bgt _08114D9A
- bl _081143F2
-_08114D9A:
- ldr r0, [sp, 0x4]
- add sp, 0x14
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08114DAC: .4byte 0x000008c4
-_08114DB0: .4byte 0x02014800
- thumb_func_end unref_sub_81143CC
-
- thumb_func_start sub_8114DB4
-sub_8114DB4: @ 8114DB4
- push {lr}
- lsls r1, 24
- lsrs r3, r1, 24
- ldr r2, _08114DDC @ =0x02014800
- lsrs r1, 25
- lsls r1, 2
- lsls r0, 7
- adds r1, r0
- ldr r0, _08114DE0 @ =0x000040c4
- adds r2, r0
- adds r1, r2
- ldr r2, [r1]
- movs r0, 0x1
- ands r3, r0
- cmp r3, 0
- beq _08114DE4
- ldrb r0, [r2]
- movs r1, 0xF0
- b _08114DE8
- .align 2, 0
-_08114DDC: .4byte 0x02014800
-_08114DE0: .4byte 0x000040c4
-_08114DE4:
- ldrb r0, [r2]
- movs r1, 0xF
-_08114DE8:
- orrs r0, r1
- strb r0, [r2]
- pop {r0}
- bx r0
- thumb_func_end sub_8114DB4
-
- thumb_func_start sub_8114DF0
-sub_8114DF0: @ 8114DF0
- push {lr}
- lsls r1, 24
- lsrs r3, r1, 24
- ldr r2, _08114E28 @ =0x02014800
- lsrs r1, 25
- lsls r1, 2
- lsls r0, 7
- adds r1, r0
- ldr r0, _08114E2C @ =0x000040c4
- adds r2, r0
- adds r1, r2
- ldr r2, [r1]
- movs r0, 0xC0
- lsls r0, 7
- adds r1, r2, r0
- movs r0, 0x1
- ands r3, r0
- cmp r3, 0
- beq _08114E30
- ldrb r1, [r1]
- movs r0, 0xF0
- ands r0, r1
- cmp r0, 0
- bne _08114E42
- ldrb r1, [r2]
- movs r0, 0xF
- b _08114E3E
- .align 2, 0
-_08114E28: .4byte 0x02014800
-_08114E2C: .4byte 0x000040c4
-_08114E30:
- ldrb r1, [r1]
- movs r0, 0xF
- ands r0, r1
- cmp r0, 0
- bne _08114E42
- ldrb r1, [r2]
- movs r0, 0xF0
-_08114E3E:
- ands r0, r1
- strb r0, [r2]
-_08114E42:
- pop {r0}
- bx r0
- thumb_func_end sub_8114DF0
-
- thumb_func_start sub_8114E48
-sub_8114E48: @ 8114E48
- push {r4-r7,lr}
- adds r4, r0, 0
- lsls r1, 24
- lsrs r6, r1, 24
- ldr r1, _08114E6C @ =0x02014800
- ldr r2, _08114E70 @ =0x0000a0c4
- adds r0, r1, r2
- ldrb r0, [r0]
- adds r5, r1, 0
- cmp r0, 0
- bne _08114E60
- b _08114F5E
-_08114E60:
- movs r1, 0
- movs r3, 0
- cmp r4, 0
- bne _08114E74
- movs r1, 0x1
- b _08114EA6
- .align 2, 0
-_08114E6C: .4byte 0x02014800
-_08114E70: .4byte 0x0000a0c4
-_08114E74:
- subs r0, r4, 0x1
- lsls r0, 5
- adds r2, r3, r0
- adds r0, r5, 0
- adds r0, 0xC4
- adds r0, r2, r0
- ldrb r0, [r0]
- cmp r0, 0
- bne _08114EA6
- ldr r7, _08114EC4 @ =0x000008c4
- adds r0, r5, r7
- adds r0, r2, r0
- ldrb r0, [r0]
- cmp r0, 0
- bne _08114EA6
- adds r3, 0x1
- cmp r3, 0x1F
- bgt _08114EA6
- cmp r4, 0
- bne _08114E74
- lsls r0, r1, 24
- movs r1, 0x80
- lsls r1, 17
- adds r0, r1
- lsrs r1, r0, 24
-_08114EA6:
- cmp r3, 0x20
- bne _08114EB4
- lsls r0, r1, 24
- movs r2, 0x80
- lsls r2, 17
- adds r0, r2
- lsrs r1, r0, 24
-_08114EB4:
- movs r3, 0
- cmp r4, 0x3F
- bne _08114EC8
- lsls r0, r1, 24
- movs r7, 0x80
- lsls r7, 17
- adds r0, r7
- b _08114EF8
- .align 2, 0
-_08114EC4: .4byte 0x000008c4
-_08114EC8:
- adds r0, r4, 0x1
- lsls r0, 5
- adds r2, r3, r0
- adds r0, r5, 0
- adds r0, 0xC4
- adds r0, r2, r0
- ldrb r0, [r0]
- cmp r0, 0
- bne _08114EFA
- ldr r7, _08114F64 @ =0x000008c4
- adds r0, r5, r7
- adds r0, r2, r0
- ldrb r0, [r0]
- cmp r0, 0
- bne _08114EFA
- adds r3, 0x1
- cmp r3, 0x1F
- bgt _08114EFA
- cmp r4, 0x3F
- bne _08114EC8
- lsls r0, r1, 24
- movs r1, 0x80
- lsls r1, 17
- adds r0, r1
-_08114EF8:
- lsrs r1, r0, 24
-_08114EFA:
- cmp r3, 0x20
- bne _08114F08
- lsls r0, r1, 24
- movs r2, 0x80
- lsls r2, 17
- adds r0, r2
- lsrs r1, r0, 24
-_08114F08:
- cmp r1, 0x2
- beq _08114F5E
- subs r0, r6, 0x2
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r0, 0
- bge _08114F18
- movs r1, 0
-_08114F18:
- adds r0, r6, 0x2
- lsls r0, 24
- lsrs r2, r0, 24
- asrs r0, 24
- cmp r0, 0x3F
- ble _08114F26
- movs r2, 0x3F
-_08114F26:
- lsls r1, 24
- asrs r3, r1, 24
- lsls r0, r2, 24
- asrs r2, r0, 24
- adds r6, r1, 0
- adds r7, r0, 0
- cmp r3, r2
- bge _08114F7C
- cmp r4, 0
- beq _08114F7C
- subs r0, r4, 0x1
- lsls r5, r0, 7
- ldr r0, _08114F68 @ =0x020188c4
- mov r12, r0
-_08114F42:
- asrs r0, r3, 1
- lsls r0, 2
- adds r0, r5
- add r0, r12
- ldr r1, [r0]
- movs r0, 0x1
- ands r0, r3
- cmp r0, 0
- beq _08114F6C
- ldrb r1, [r1]
- movs r0, 0xF0
-_08114F58:
- ands r0, r1
- cmp r0, 0
- beq _08114F72
-_08114F5E:
- movs r0, 0x1
- b _08114FCA
- .align 2, 0
-_08114F64: .4byte 0x000008c4
-_08114F68: .4byte 0x020188c4
-_08114F6C:
- ldrb r1, [r1]
- movs r0, 0xF
- b _08114F58
-_08114F72:
- adds r3, 0x1
- cmp r3, r2
- bge _08114F7C
- cmp r4, 0
- bne _08114F42
-_08114F7C:
- asrs r3, r6, 24
- asrs r1, r7, 24
- cmp r3, r1
- bge _08114FC8
- cmp r4, 0x3F
- beq _08114FC8
- adds r0, r4, 0x1
- lsls r5, r0, 7
- ldr r6, _08114FB0 @ =0x020188c4
- adds r2, r1, 0
-_08114F90:
- asrs r0, r3, 1
- lsls r0, 2
- adds r0, r5
- adds r0, r6
- ldr r1, [r0]
- movs r0, 0x1
- ands r0, r3
- cmp r0, 0
- beq _08114FB4
- ldrb r1, [r1]
- movs r0, 0xF0
- ands r0, r1
- cmp r0, 0
- beq _08114FBE
- b _08114F5E
- .align 2, 0
-_08114FB0: .4byte 0x020188c4
-_08114FB4:
- ldrb r1, [r1]
- movs r0, 0xF
- ands r0, r1
- cmp r0, 0
- bne _08114F5E
-_08114FBE:
- adds r3, 0x1
- cmp r3, r2
- bge _08114FC8
- cmp r4, 0x3F
- bne _08114F90
-_08114FC8:
- movs r0, 0
-_08114FCA:
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_8114E48
-
- thumb_func_start HBlankCB_EvolutionScene
-HBlankCB_EvolutionScene: @ 8114FD0
- bx lr
- thumb_func_end HBlankCB_EvolutionScene
-
- thumb_func_start VBlankCB_EvolutionScene
-VBlankCB_EvolutionScene: @ 8114FD4
- push {lr}
- ldr r1, _08115034 @ =REG_BG0CNT
- ldr r2, _08115038 @ =0x00009803
- adds r0, r2, 0
- strh r0, [r1]
- adds r1, 0x8
- ldr r0, _0811503C @ =gUnknown_030042A4
- ldrh r0, [r0]
- strh r0, [r1]
- adds r1, 0x2
- ldr r0, _08115040 @ =gUnknown_030042A0
- ldrh r0, [r0]
- strh r0, [r1]
- adds r1, 0x2
- ldr r0, _08115044 @ =gUnknown_030042C0
- ldrh r0, [r0]
- strh r0, [r1]
- adds r1, 0x2
- ldr r0, _08115048 @ =gUnknown_030041B4
- ldrh r0, [r0]
- strh r0, [r1]
- adds r1, 0x2
- ldr r0, _0811504C @ =gUnknown_03004288
- ldrh r0, [r0]
- strh r0, [r1]
- adds r1, 0x2
- ldr r0, _08115050 @ =gUnknown_03004280
- ldrh r0, [r0]
- strh r0, [r1]
- adds r1, 0x2
- ldr r0, _08115054 @ =gUnknown_030041B0
- ldrh r0, [r0]
- strh r0, [r1]
- adds r1, 0x2
- ldr r0, _08115058 @ =gUnknown_030041B8
- ldrh r0, [r0]
- strh r0, [r1]
- bl LoadOam
- bl ProcessSpriteCopyRequests
- bl TransferPlttBuffer
- bl sub_8089668
- pop {r0}
- bx r0
- .align 2, 0
-_08115034: .4byte REG_BG0CNT
-_08115038: .4byte 0x00009803
-_0811503C: .4byte gUnknown_030042A4
-_08115040: .4byte gUnknown_030042A0
-_08115044: .4byte gUnknown_030042C0
-_08115048: .4byte gUnknown_030041B4
-_0811504C: .4byte gUnknown_03004288
-_08115050: .4byte gUnknown_03004280
-_08115054: .4byte gUnknown_030041B0
-_08115058: .4byte gUnknown_030041B8
- thumb_func_end VBlankCB_EvolutionScene
-
- thumb_func_start VBlankCB_TradeEvolutionScene
-VBlankCB_TradeEvolutionScene: @ 811505C
- push {lr}
- ldr r1, _081150B4 @ =REG_BG0HOFS
- ldr r0, _081150B8 @ =gUnknown_030042A4
- ldrh r0, [r0]
- strh r0, [r1]
- adds r1, 0x2
- ldr r0, _081150BC @ =gUnknown_030042A0
- ldrh r0, [r0]
- strh r0, [r1]
- adds r1, 0x2
- ldr r0, _081150C0 @ =gUnknown_030042C0
- ldrh r0, [r0]
- strh r0, [r1]
- adds r1, 0x2
- ldr r0, _081150C4 @ =gUnknown_030041B4
- ldrh r0, [r0]
- strh r0, [r1]
- adds r1, 0x2
- ldr r0, _081150C8 @ =gUnknown_03004288
- ldrh r0, [r0]
- strh r0, [r1]
- adds r1, 0x2
- ldr r0, _081150CC @ =gUnknown_03004280
- ldrh r0, [r0]
- strh r0, [r1]
- adds r1, 0x2
- ldr r0, _081150D0 @ =gUnknown_030041B0
- ldrh r0, [r0]
- strh r0, [r1]
- adds r1, 0x2
- ldr r0, _081150D4 @ =gUnknown_030041B8
- ldrh r0, [r0]
- strh r0, [r1]
- bl LoadOam
- bl ProcessSpriteCopyRequests
- bl TransferPlttBuffer
- bl sub_8089668
- pop {r0}
- bx r0
- .align 2, 0
-_081150B4: .4byte REG_BG0HOFS
-_081150B8: .4byte gUnknown_030042A4
-_081150BC: .4byte gUnknown_030042A0
-_081150C0: .4byte gUnknown_030042C0
-_081150C4: .4byte gUnknown_030041B4
-_081150C8: .4byte gUnknown_03004288
-_081150CC: .4byte gUnknown_03004280
-_081150D0: .4byte gUnknown_030041B0
-_081150D4: .4byte gUnknown_030041B8
- thumb_func_end VBlankCB_TradeEvolutionScene
-
- thumb_func_start sub_81150D8
-sub_81150D8: @ 81150D8
- push {lr}
- ldr r0, _081150F4 @ =gBattleCommunication
- ldrb r1, [r0, 0x1]
- lsls r1, 28
- movs r0, 0x90
- lsls r0, 23
- adds r1, r0
- lsrs r1, 24
- movs r0, 0xC8
- bl sub_814A880
- pop {r0}
- bx r0
- .align 2, 0
-_081150F4: .4byte gBattleCommunication
- thumb_func_end sub_81150D8
-
- thumb_func_start HBlankCB_TradeEvolutionScene
-HBlankCB_TradeEvolutionScene: @ 81150F8
- bx lr
- thumb_func_end HBlankCB_TradeEvolutionScene
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/field_effect_helpers.s b/asm/field_effect_helpers.s
deleted file mode 100644
index 9df9dfd8d..000000000
--- a/asm/field_effect_helpers.s
+++ /dev/null
@@ -1,4349 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "constants/species_constants.inc"
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start SetUpReflection
-SetUpReflection: @ 812680C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r6, r0, 0
- adds r4, r1, 0
- lsls r5, r2, 24
- lsrs r5, 24
- movs r0, 0x20
- ldrsh r1, [r4, r0]
- movs r0, 0x22
- ldrsh r2, [r4, r0]
- adds r0, r4, 0
- movs r3, 0x98
- bl obj_unfreeze
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- ldr r0, _081268BC @ =gSprites
- adds r7, r1, r0
- ldr r0, _081268C0 @ =sub_81269E0
- str r0, [r7, 0x1C]
- ldrb r1, [r7, 0x5]
- movs r0, 0xC
- orrs r1, r0
- strb r1, [r7, 0x5]
- ldr r2, _081268C4 @ =gUnknown_0830FD14
- lsrs r0, r1, 4
- adds r0, r2
- ldrb r0, [r0]
- lsls r0, 4
- movs r2, 0xF
- ands r1, r2
- orrs r1, r0
- strb r1, [r7, 0x5]
- movs r1, 0x3F
- adds r1, r7
- mov r8, r1
- ldrb r0, [r1]
- movs r1, 0x40
- orrs r0, r1
- mov r1, r8
- strb r0, [r1]
- ldr r0, _081268C8 @ =gDummySpriteAnimTable
- str r0, [r7, 0x8]
- adds r0, r7, 0
- movs r1, 0
- bl StartSpriteAnim
- ldr r0, _081268CC @ =gDummySpriteAffineAnimTable
- str r0, [r7, 0x10]
- mov r1, r8
- ldrb r0, [r1]
- movs r1, 0x8
- orrs r0, r1
- mov r1, r8
- strb r0, [r1]
- adds r2, r7, 0
- adds r2, 0x42
- ldrb r1, [r2]
- movs r0, 0x3F
- ands r0, r1
- strb r0, [r2]
- ldrh r0, [r4, 0x2E]
- strh r0, [r7, 0x2E]
- ldrb r0, [r6, 0x8]
- strh r0, [r7, 0x30]
- strh r5, [r7, 0x3C]
- adds r0, r6, 0
- adds r1, r7, 0
- bl npc_pal_op
- cmp r5, 0
- bne _081268B2
- ldrb r0, [r7, 0x1]
- movs r1, 0x4
- negs r1, r1
- ands r1, r0
- movs r0, 0x1
- orrs r1, r0
- strb r1, [r7, 0x1]
-_081268B2:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_081268BC: .4byte gSprites
-_081268C0: .4byte sub_81269E0
-_081268C4: .4byte gUnknown_0830FD14
-_081268C8: .4byte gDummySpriteAnimTable
-_081268CC: .4byte gDummySpriteAffineAnimTable
- thumb_func_end SetUpReflection
-
- thumb_func_start sub_81268D0
-sub_81268D0: @ 81268D0
- push {lr}
- ldrb r0, [r0, 0x5]
- bl GetFieldObjectGraphicsInfo
- ldrh r0, [r0, 0xA]
- subs r0, 0x2
- lsls r0, 16
- asrs r0, 16
- pop {r1}
- bx r1
- thumb_func_end sub_81268D0
-
- thumb_func_start npc_pal_op
-npc_pal_op: @ 81268E4
- push {r4,r5,lr}
- sub sp, 0x8
- adds r5, r0, 0
- adds r4, r1, 0
- ldr r1, _0812693C @ =gUnknown_08401E2C
- mov r0, sp
- movs r2, 0x6
- bl memcpy
- movs r0, 0
- strh r0, [r4, 0x32]
- ldrb r0, [r5, 0x5]
- bl GetFieldObjectGraphicsInfo
- ldrb r1, [r0, 0xC]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08126940
- ldrb r0, [r5, 0x1F]
- bl sub_8057450
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- bne _08126926
- ldrb r0, [r5, 0x1E]
- bl sub_8057450
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- beq _08126940
-_08126926:
- subs r0, 0x1
- lsls r0, 1
- add r0, sp
- ldrh r0, [r0]
- strh r0, [r4, 0x32]
- ldrb r1, [r4, 0x5]
- lsrs r1, 4
- adds r0, r5, 0
- bl npc_pal_op_A
- b _0812694A
- .align 2, 0
-_0812693C: .4byte gUnknown_08401E2C
-_08126940:
- ldrb r1, [r4, 0x5]
- lsrs r1, 4
- adds r0, r5, 0
- bl npc_pal_op_B
-_0812694A:
- add sp, 0x8
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end npc_pal_op
-
- thumb_func_start npc_pal_op_B
-npc_pal_op_B: @ 8126954
- push {r4,lr}
- lsls r1, 24
- lsrs r4, r1, 24
- ldrb r0, [r0, 0x5]
- bl GetFieldObjectGraphicsInfo
- adds r2, r0, 0
- ldrh r1, [r2, 0x4]
- ldr r0, _08126980 @ =0x000011ff
- cmp r1, r0
- beq _081269A8
- ldrb r0, [r2, 0xC]
- movs r1, 0xF
- ands r1, r0
- cmp r1, 0
- bne _08126984
- ldrh r0, [r2, 0x2]
- adds r1, r4, 0
- bl npc_load_two_palettes__no_record
- b _081269A2
- .align 2, 0
-_08126980: .4byte 0x000011ff
-_08126984:
- cmp r1, 0xA
- bne _08126992
- ldrh r0, [r2, 0x2]
- adds r1, r4, 0
- bl npc_load_two_palettes__and_record
- b _081269A2
-_08126992:
- adds r0, r4, 0
- bl npc_paltag_by_palslot
- lsls r0, 16
- lsrs r0, 16
- adds r1, r4, 0
- bl pal_patch_for_npc
-_081269A2:
- adds r0, r4, 0
- bl sub_807D78C
-_081269A8:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end npc_pal_op_B
-
- thumb_func_start npc_pal_op_A
-npc_pal_op_A: @ 81269B0
- push {r4,lr}
- lsls r1, 24
- lsrs r4, r1, 24
- ldrb r0, [r0, 0x5]
- bl GetFieldObjectGraphicsInfo
- adds r2, r0, 0
- ldrh r1, [r2, 0x4]
- ldr r0, _081269DC @ =0x000011ff
- cmp r1, r0
- beq _081269D4
- adds r0, r1, 0
- adds r1, r4, 0
- bl pal_patch_for_npc
- adds r0, r4, 0
- bl sub_807D78C
-_081269D4:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_081269DC: .4byte 0x000011ff
- thumb_func_end npc_pal_op_A
-
- thumb_func_start sub_81269E0
-sub_81269E0: @ 81269E0
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- adds r4, r0, 0
- movs r0, 0x2E
- ldrsh r1, [r4, r0]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _08126A28 @ =gMapObjects
- adds r7, r0, r1
- ldrb r1, [r7, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _08126A2C @ =gSprites
- adds r5, r0, r1
- ldr r0, [r7]
- ldr r1, _08126A30 @ =0x00020001
- ands r0, r1
- cmp r0, r1
- bne _08126A18
- ldrb r1, [r7, 0x8]
- movs r2, 0x30
- ldrsh r0, [r4, r2]
- cmp r1, r0
- beq _08126A34
-_08126A18:
- adds r2, r4, 0
- adds r2, 0x3E
- ldrb r1, [r2]
- movs r0, 0x2
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
- b _08126B3E
- .align 2, 0
-_08126A28: .4byte gMapObjects
-_08126A2C: .4byte gSprites
-_08126A30: .4byte 0x00020001
-_08126A34:
- ldr r1, _08126B4C @ =gUnknown_0830FD14
- ldrb r0, [r5, 0x5]
- lsrs r0, 4
- adds r0, r1
- ldrb r1, [r0]
- lsls r1, 4
- ldrb r2, [r4, 0x5]
- movs r0, 0xF
- ands r0, r2
- orrs r0, r1
- strb r0, [r4, 0x5]
- ldrb r1, [r5, 0x1]
- lsrs r1, 6
- lsls r1, 6
- ldrb r2, [r4, 0x1]
- movs r3, 0x3F
- adds r0, r3, 0
- ands r0, r2
- orrs r0, r1
- strb r0, [r4, 0x1]
- ldrb r0, [r5, 0x3]
- lsrs r0, 6
- lsls r0, 6
- ldrb r2, [r4, 0x3]
- adds r1, r3, 0
- ands r1, r2
- orrs r1, r0
- strb r1, [r4, 0x3]
- ldrb r0, [r5, 0x3]
- lsls r0, 26
- lsrs r0, 27
- movs r2, 0x10
- orrs r0, r2
- lsls r0, 1
- subs r2, 0x4F
- mov r9, r2
- ands r1, r2
- orrs r1, r0
- strb r1, [r4, 0x3]
- ldrh r1, [r5, 0x4]
- lsls r1, 22
- lsrs r1, 22
- ldrh r2, [r4, 0x4]
- ldr r0, _08126B50 @ =0xfffffc00
- ands r0, r2
- orrs r0, r1
- strh r0, [r4, 0x4]
- ldr r0, [r5, 0x18]
- str r0, [r4, 0x18]
- adds r0, r5, 0
- adds r0, 0x42
- ldrb r0, [r0]
- lsls r0, 26
- lsrs r0, 26
- adds r2, r4, 0
- adds r2, 0x42
- ands r3, r0
- ldrb r1, [r2]
- movs r0, 0x40
- negs r0, r0
- ands r0, r1
- orrs r0, r3
- strb r0, [r2]
- movs r0, 0x3E
- adds r0, r5
- mov r8, r0
- ldrb r0, [r0]
- adds r6, r4, 0
- adds r6, 0x3E
- movs r1, 0x4
- ands r1, r0
- ldrb r2, [r6]
- movs r0, 0x5
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r6]
- ldrh r0, [r5, 0x20]
- strh r0, [r4, 0x20]
- adds r0, r7, 0
- bl sub_81268D0
- ldrh r1, [r5, 0x22]
- adds r0, r1
- ldrh r1, [r4, 0x32]
- adds r1, r0
- strh r1, [r4, 0x22]
- adds r0, r5, 0
- adds r0, 0x28
- ldrb r1, [r0]
- adds r0, r4, 0
- adds r0, 0x28
- strb r1, [r0]
- adds r0, r5, 0
- adds r0, 0x29
- ldrb r0, [r0]
- adds r1, r4, 0
- adds r1, 0x29
- strb r0, [r1]
- ldrh r0, [r5, 0x24]
- strh r0, [r4, 0x24]
- ldrh r0, [r5, 0x26]
- negs r0, r0
- strh r0, [r4, 0x26]
- mov r2, r8
- ldrb r0, [r2]
- movs r1, 0x2
- ands r1, r0
- ldrb r2, [r6]
- movs r0, 0x3
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r6]
- movs r1, 0x3C
- ldrsh r0, [r4, r1]
- cmp r0, 0
- bne _08126B3E
- ldrb r0, [r4, 0x3]
- mov r2, r9
- ands r2, r0
- strb r2, [r4, 0x3]
- ldrb r0, [r5, 0x3]
- lsls r0, 26
- lsrs r0, 27
- movs r1, 0x8
- ands r0, r1
- cmp r0, 0
- beq _08126B3E
- movs r1, 0x2
- adds r0, r2, 0
- orrs r0, r1
- strb r0, [r4, 0x3]
-_08126B3E:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08126B4C: .4byte gUnknown_0830FD14
-_08126B50: .4byte 0xfffffc00
- thumb_func_end sub_81269E0
-
- thumb_func_start sub_8126B54
-sub_8126B54: @ 8126B54
- push {r4,lr}
- ldr r0, _08126B9C @ =gFieldEffectObjectTemplatePointers
- ldr r0, [r0, 0x20]
- movs r1, 0
- movs r2, 0
- movs r3, 0x52
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r0, 24
- adds r4, r0, 0
- cmp r0, 0x40
- beq _08126B92
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- ldr r0, _08126BA0 @ =gSprites
- adds r1, r0
- ldrb r2, [r1, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- movs r3, 0x4
- orrs r0, r3
- strb r0, [r1, 0x5]
- adds r1, 0x3E
- ldrb r0, [r1]
- movs r2, 0x2
- orrs r0, r2
- orrs r0, r3
- strb r0, [r1]
-_08126B92:
- adds r0, r4, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08126B9C: .4byte gFieldEffectObjectTemplatePointers
-_08126BA0: .4byte gSprites
- thumb_func_end sub_8126B54
-
- thumb_func_start objid_set_invisible
-objid_set_invisible: @ 8126BA4
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _08126BC0 @ =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]
- bx lr
- .align 2, 0
-_08126BC0: .4byte gSprites
- thumb_func_end objid_set_invisible
-
- thumb_func_start sub_8126BC4
-sub_8126BC4: @ 8126BC4
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r1, 24
- lsrs r1, 24
- mov r8, r1
- lsls r2, 16
- lsrs r7, r2, 16
- lsls r3, 16
- lsrs r6, r3, 16
- lsls r0, r5, 4
- adds r0, r5
- lsls r0, 2
- ldr r1, _08126C68 @ =gSprites
- adds r2, r0, r1
- adds r0, r2, 0
- adds r0, 0x3E
- ldrb r1, [r0]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- bne _08126C0E
- movs r0, 0x2E
- ldrsh r1, [r2, r0]
- lsls r0, r7, 16
- asrs r0, 16
- cmp r1, r0
- bne _08126C0E
- movs r0, 0x30
- ldrsh r1, [r2, r0]
- lsls r0, r6, 16
- asrs r0, 16
- cmp r1, r0
- beq _08126C5A
-_08126C0E:
- lsls r0, r7, 16
- asrs r0, 16
- lsls r1, r6, 16
- asrs r1, 16
- mov r4, sp
- adds r4, 0x2
- mov r2, sp
- adds r3, r4, 0
- bl sub_80603CC
- lsls r0, r5, 4
- adds r0, r5
- lsls r0, 2
- ldr r1, _08126C68 @ =gSprites
- adds r2, r0, r1
- mov r0, sp
- ldrh r0, [r0]
- adds r0, 0x8
- strh r0, [r2, 0x20]
- ldrh r0, [r4]
- adds r0, 0x8
- strh r0, [r2, 0x22]
- adds r3, r2, 0
- adds r3, 0x3E
- ldrb r1, [r3]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- strb r0, [r3]
- strh r7, [r2, 0x2E]
- strh r6, [r2, 0x30]
- mov r1, r8
- subs r1, 0x1
- lsls r1, 24
- lsrs r1, 24
- adds r0, r2, 0
- bl StartSpriteAnim
-_08126C5A:
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08126C68: .4byte gSprites
- thumb_func_end sub_8126BC4
-
- thumb_func_start FldEff_Shadow
-FldEff_Shadow: @ 8126C6C
- push {r4,r5,lr}
- ldr r5, _08126CF8 @ =gUnknown_0202FF84
- ldrb r0, [r5]
- ldrb r1, [r5, 0x4]
- ldrb r2, [r5, 0x8]
- bl GetFieldObjectIdByLocalIdAndMap
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _08126CFC @ =gMapObjects
- lsls r1, r0, 3
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldrb r0, [r1, 0x5]
- bl GetFieldObjectGraphicsInfo
- adds r4, r0, 0
- ldr r2, _08126D00 @ =gFieldEffectObjectTemplatePointers
- ldr r1, _08126D04 @ =gUnknown_08401E32
- ldrb r0, [r4, 0xC]
- lsls r0, 26
- lsrs r0, 30
- adds r0, r1
- ldrb r0, [r0]
- lsls r0, 2
- adds r0, r2
- ldr r0, [r0]
- movs r1, 0
- movs r2, 0
- movs r3, 0x94
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x40
- beq _08126CF0
- ldr r0, _08126D08 @ =gSprites
- lsls r2, r1, 4
- adds r2, r1
- lsls r2, 2
- adds r2, r0
- adds r3, r2, 0
- adds r3, 0x3E
- ldrb r0, [r3]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r3]
- ldr r0, [r5]
- strh r0, [r2, 0x2E]
- ldr r0, [r5, 0x4]
- strh r0, [r2, 0x30]
- ldr r0, [r5, 0x8]
- strh r0, [r2, 0x32]
- ldrh r1, [r4, 0xA]
- lsls r1, 16
- asrs r1, 17
- ldr r3, _08126D0C @ =gUnknown_08401E36
- ldrb r0, [r4, 0xC]
- lsls r0, 26
- lsrs r0, 30
- lsls r0, 1
- adds r0, r3
- ldrh r0, [r0]
- subs r1, r0
- strh r1, [r2, 0x34]
-_08126CF0:
- movs r0, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_08126CF8: .4byte gUnknown_0202FF84
-_08126CFC: .4byte gMapObjects
-_08126D00: .4byte gFieldEffectObjectTemplatePointers
-_08126D04: .4byte gUnknown_08401E32
-_08126D08: .4byte gSprites
-_08126D0C: .4byte gUnknown_08401E36
- thumb_func_end FldEff_Shadow
-
- thumb_func_start oamc_shadow
-oamc_shadow: @ 8126D10
- push {r4,r5,lr}
- sub sp, 0x4
- adds r5, r0, 0
- ldrh r0, [r5, 0x2E]
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r5, 0x30]
- lsls r1, 24
- lsrs r1, 24
- ldrh r2, [r5, 0x32]
- lsls r2, 24
- lsrs r2, 24
- mov r3, sp
- bl TryGetFieldObjectIdByLocalIdAndMap
- lsls r0, 24
- cmp r0, 0
- beq _08126D3E
- adds r0, r5, 0
- movs r1, 0x3
- bl FieldEffectStop
- b _08126DC4
-_08126D3E:
- mov r0, sp
- ldrb r1, [r0]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _08126DCC @ =gMapObjects
- adds r4, r0, r1
- ldrb r0, [r4, 0x4]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- ldr r0, _08126DD0 @ =gSprites
- adds r1, r0
- ldrb r0, [r1, 0x5]
- movs r2, 0xC
- ands r2, r0
- ldrb r3, [r5, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r3
- orrs r0, r2
- strb r0, [r5, 0x5]
- ldrh r0, [r1, 0x20]
- strh r0, [r5, 0x20]
- ldrh r0, [r5, 0x34]
- ldrh r1, [r1, 0x22]
- adds r0, r1
- strh r0, [r5, 0x22]
- ldr r0, [r4]
- ldr r1, _08126DD4 @ =0x00400001
- ands r0, r1
- cmp r0, r1
- bne _08126DBC
- ldrb r0, [r4, 0x1E]
- bl MetatileBehavior_IsPokeGrass
- lsls r0, 24
- cmp r0, 0
- bne _08126DBC
- ldrb r0, [r4, 0x1E]
- bl MetatileBehavior_IsSurfableWaterOrUnderwater
- lsls r0, 24
- cmp r0, 0
- bne _08126DBC
- ldrb r0, [r4, 0x1F]
- bl MetatileBehavior_IsSurfableWaterOrUnderwater
- lsls r0, 24
- cmp r0, 0
- bne _08126DBC
- ldrb r0, [r4, 0x1E]
- bl MetatileBehavior_IsReflective
- lsls r0, 24
- cmp r0, 0
- bne _08126DBC
- ldrb r0, [r4, 0x1F]
- bl MetatileBehavior_IsReflective
- lsls r0, 24
- cmp r0, 0
- beq _08126DC4
-_08126DBC:
- adds r0, r5, 0
- movs r1, 0x3
- bl FieldEffectStop
-_08126DC4:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08126DCC: .4byte gMapObjects
-_08126DD0: .4byte gSprites
-_08126DD4: .4byte 0x00400001
- thumb_func_end oamc_shadow
-
- thumb_func_start FldEff_TallGrass
-FldEff_TallGrass: @ 8126DD8
- push {r4,r5,lr}
- sub sp, 0x4
- ldr r5, _08126E70 @ =gUnknown_0202FF84
- ldrh r1, [r5]
- mov r0, sp
- strh r1, [r0]
- ldrh r0, [r5, 0x4]
- mov r4, sp
- adds r4, 0x2
- strh r0, [r4]
- mov r0, sp
- adds r1, r4, 0
- movs r2, 0x8
- movs r3, 0x8
- bl sub_8060470
- ldr r0, _08126E74 @ =gFieldEffectObjectTemplatePointers
- ldr r0, [r0, 0x10]
- mov r1, sp
- movs r2, 0
- ldrsh r1, [r1, r2]
- movs r3, 0
- ldrsh r2, [r4, r3]
- movs r3, 0
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x40
- beq _08126E64
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _08126E78 @ =gSprites
- adds r3, r0, r1
- adds r2, r3, 0
- adds r2, 0x3E
- ldrb r0, [r2]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r2]
- movs r0, 0x3
- ldrb r1, [r5, 0xC]
- ands r1, r0
- lsls r1, 2
- ldrb r2, [r3, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r3, 0x5]
- ldr r0, [r5, 0x8]
- strh r0, [r3, 0x2E]
- ldr r0, [r5]
- strh r0, [r3, 0x30]
- ldr r0, [r5, 0x4]
- strh r0, [r3, 0x32]
- ldr r0, [r5, 0x10]
- strh r0, [r3, 0x34]
- ldr r0, [r5, 0x14]
- strh r0, [r3, 0x36]
- ldr r0, [r5, 0x18]
- strh r0, [r3, 0x38]
- ldr r0, [r5, 0x1C]
- cmp r0, 0
- beq _08126E64
- adds r0, r3, 0
- movs r1, 0x4
- bl SeekSpriteAnim
-_08126E64:
- movs r0, 0
- add sp, 0x4
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_08126E70: .4byte gUnknown_0202FF84
-_08126E74: .4byte gFieldEffectObjectTemplatePointers
-_08126E78: .4byte gSprites
- thumb_func_end FldEff_TallGrass
-
- thumb_func_start unc_grass_normal
-unc_grass_normal: @ 8126E7C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- adds r5, r0, 0
- ldrh r0, [r5, 0x38]
- lsrs r4, r0, 8
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r3, _08126F24 @ =gUnknown_0202E844
- ldrb r1, [r3]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08126EC6
- ldr r2, _08126F28 @ =gSaveBlock1
- movs r0, 0x5
- ldrsb r0, [r2, r0]
- cmp r0, r4
- bne _08126EAC
- movs r0, 0x4
- ldrsb r0, [r2, r0]
- cmp r0, r7
- beq _08126EC6
-_08126EAC:
- ldr r1, [r3, 0x4]
- ldrh r0, [r5, 0x30]
- subs r0, r1
- strh r0, [r5, 0x30]
- ldr r1, [r3, 0x8]
- ldrh r0, [r5, 0x32]
- subs r0, r1
- strh r0, [r5, 0x32]
- ldrb r1, [r2, 0x5]
- lsls r1, 8
- ldrb r0, [r2, 0x4]
- orrs r0, r1
- strh r0, [r5, 0x38]
-_08126EC6:
- ldrh r0, [r5, 0x34]
- lsrs r1, r0, 8
- mov r8, r1
- lsls r0, 24
- lsrs r4, r0, 24
- ldrh r0, [r5, 0x36]
- lsls r0, 24
- lsrs r7, r0, 24
- movs r2, 0x30
- ldrsh r0, [r5, r2]
- movs r2, 0x32
- ldrsh r1, [r5, r2]
- bl MapGridGetMetatileBehaviorAt
- lsls r0, 24
- lsrs r6, r0, 24
- mov r0, r8
- adds r1, r4, 0
- adds r2, r7, 0
- mov r3, sp
- bl TryGetFieldObjectIdByLocalIdAndMap
- lsls r0, 24
- cmp r0, 0
- bne _08126F1A
- adds r0, r6, 0
- bl MetatileBehavior_IsTallGrass
- lsls r0, 24
- cmp r0, 0
- beq _08126F1A
- movs r1, 0x3C
- ldrsh r0, [r5, r1]
- cmp r0, 0
- beq _08126F2C
- adds r0, r5, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _08126F2C
-_08126F1A:
- adds r0, r5, 0
- movs r1, 0x4
- bl FieldEffectStop
- b _08126F70
- .align 2, 0
-_08126F24: .4byte gUnknown_0202E844
-_08126F28: .4byte gSaveBlock1
-_08126F2C:
- mov r0, sp
- ldrb r1, [r0]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _08126F7C @ =gMapObjects
- adds r2, r0, r1
- ldr r0, [r2, 0x10]
- ldr r1, [r5, 0x30]
- cmp r0, r1
- beq _08126F4C
- ldr r0, [r2, 0x14]
- cmp r0, r1
- beq _08126F4C
- movs r0, 0x1
- strh r0, [r5, 0x3C]
-_08126F4C:
- movs r6, 0
- adds r0, r5, 0
- adds r0, 0x2B
- ldrb r0, [r0]
- cmp r0, 0
- bne _08126F5A
- movs r6, 0x4
-_08126F5A:
- adds r0, r5, 0
- movs r1, 0
- bl sub_806487C
- ldrh r1, [r5, 0x2E]
- lsls r1, 24
- lsrs r1, 24
- adds r0, r5, 0
- adds r2, r6, 0
- bl sub_812882C
-_08126F70:
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08126F7C: .4byte gMapObjects
- thumb_func_end unc_grass_normal
-
- thumb_func_start FldEff_JumpTallGrass
-FldEff_JumpTallGrass: @ 8126F80
- push {r4,lr}
- ldr r4, _08126FE4 @ =gUnknown_0202FF84
- adds r1, r4, 0x4
- adds r0, r4, 0
- movs r2, 0x8
- movs r3, 0xC
- bl sub_8060470
- ldr r0, _08126FE8 @ =gFieldEffectObjectTemplatePointers
- ldr r0, [r0, 0x28]
- movs r2, 0
- ldrsh r1, [r4, r2]
- movs r3, 0x4
- ldrsh r2, [r4, r3]
- movs r3, 0
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x40
- beq _08126FDC
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- ldr r0, _08126FEC @ =gSprites
- adds r2, r0
- adds r3, r2, 0
- adds r3, 0x3E
- ldrb r0, [r3]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r3]
- movs r0, 0x3
- ldrb r1, [r4, 0xC]
- ands r1, r0
- lsls r1, 2
- ldrb r3, [r2, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2, 0x5]
- ldr r0, [r4, 0x8]
- strh r0, [r2, 0x2E]
- movs r0, 0xC
- strh r0, [r2, 0x30]
-_08126FDC:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08126FE4: .4byte gUnknown_0202FF84
-_08126FE8: .4byte gFieldEffectObjectTemplatePointers
-_08126FEC: .4byte gSprites
- thumb_func_end FldEff_JumpTallGrass
-
- thumb_func_start sub_8126FF0
-sub_8126FF0: @ 8126FF0
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r4, [sp, 0x18]
- lsls r0, 24
- lsrs r0, 24
- mov r12, r0
- lsls r1, 24
- lsrs r7, r1, 24
- lsls r2, 24
- lsrs r6, r2, 24
- movs r5, 0
- ldr r0, _08127060 @ =gSprites
- mov r8, r0
- lsls r3, 16
- asrs r3, 16
- lsls r4, 16
- asrs r4, 16
-_08127014:
- lsls r0, r5, 4
- adds r0, r5
- lsls r0, 2
- mov r1, r8
- adds r2, r0, r1
- adds r0, r2, 0
- adds r0, 0x3E
- ldrb r0, [r0]
- lsls r0, 31
- cmp r0, 0
- beq _08127068
- ldr r1, [r2, 0x1C]
- ldr r0, _08127064 @ =unc_grass_normal
- cmp r1, r0
- bne _08127068
- movs r1, 0x30
- ldrsh r0, [r2, r1]
- cmp r3, r0
- bne _08127068
- movs r1, 0x32
- ldrsh r0, [r2, r1]
- cmp r4, r0
- bne _08127068
- ldrh r1, [r2, 0x34]
- lsrs r0, r1, 8
- cmp r12, r0
- bne _08127068
- movs r0, 0xFF
- ands r0, r1
- cmp r7, r0
- bne _08127068
- movs r1, 0x36
- ldrsh r0, [r2, r1]
- cmp r6, r0
- bne _08127068
- adds r0, r5, 0
- b _08127074
- .align 2, 0
-_08127060: .4byte gSprites
-_08127064: .4byte unc_grass_normal
-_08127068:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x3F
- bls _08127014
- movs r0, 0x40
-_08127074:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_8126FF0
-
- thumb_func_start FldEff_LongGrass
-FldEff_LongGrass: @ 8127080
- push {r4,r5,lr}
- sub sp, 0x4
- ldr r5, _0812711C @ =gUnknown_0202FF84
- ldrh r1, [r5]
- mov r0, sp
- strh r1, [r0]
- ldrh r0, [r5, 0x4]
- mov r4, sp
- adds r4, 0x2
- strh r0, [r4]
- mov r0, sp
- adds r1, r4, 0
- movs r2, 0x8
- movs r3, 0x8
- bl sub_8060470
- ldr r0, _08127120 @ =gFieldEffectObjectTemplatePointers
- ldr r0, [r0, 0x3C]
- mov r1, sp
- movs r2, 0
- ldrsh r1, [r1, r2]
- movs r3, 0
- ldrsh r2, [r4, r3]
- movs r3, 0
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x40
- beq _08127110
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _08127124 @ =gSprites
- adds r4, r0, r1
- adds r2, r4, 0
- adds r2, 0x3E
- ldrb r0, [r2]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r2]
- ldrb r0, [r5, 0x8]
- bl ZCoordToPriority
- movs r1, 0x3
- ands r1, r0
- lsls r1, 2
- ldrb r2, [r4, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r4, 0x5]
- ldr r0, [r5, 0x8]
- strh r0, [r4, 0x2E]
- ldr r0, [r5]
- strh r0, [r4, 0x30]
- ldr r0, [r5, 0x4]
- strh r0, [r4, 0x32]
- ldr r0, [r5, 0x10]
- strh r0, [r4, 0x34]
- ldr r0, [r5, 0x14]
- strh r0, [r4, 0x36]
- ldr r0, [r5, 0x18]
- strh r0, [r4, 0x38]
- ldr r0, [r5, 0x1C]
- cmp r0, 0
- beq _08127110
- adds r0, r4, 0
- movs r1, 0x6
- bl SeekSpriteAnim
-_08127110:
- movs r0, 0
- add sp, 0x4
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_0812711C: .4byte gUnknown_0202FF84
-_08127120: .4byte gFieldEffectObjectTemplatePointers
-_08127124: .4byte gSprites
- thumb_func_end FldEff_LongGrass
-
- thumb_func_start unc_grass_tall
-unc_grass_tall: @ 8127128
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- adds r5, r0, 0
- ldrh r0, [r5, 0x38]
- lsrs r7, r0, 8
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r3, _081271D0 @ =gUnknown_0202E844
- ldrb r1, [r3]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08127172
- ldr r2, _081271D4 @ =gSaveBlock1
- movs r0, 0x5
- ldrsb r0, [r2, r0]
- cmp r0, r7
- bne _08127158
- movs r0, 0x4
- ldrsb r0, [r2, r0]
- cmp r0, r6
- beq _08127172
-_08127158:
- ldr r1, [r3, 0x4]
- ldrh r0, [r5, 0x30]
- subs r0, r1
- strh r0, [r5, 0x30]
- ldr r1, [r3, 0x8]
- ldrh r0, [r5, 0x32]
- subs r0, r1
- strh r0, [r5, 0x32]
- ldrb r1, [r2, 0x5]
- lsls r1, 8
- ldrb r0, [r2, 0x4]
- orrs r0, r1
- strh r0, [r5, 0x38]
-_08127172:
- ldrh r0, [r5, 0x34]
- lsrs r1, r0, 8
- mov r8, r1
- lsls r0, 24
- lsrs r7, r0, 24
- ldrh r0, [r5, 0x36]
- lsls r0, 24
- lsrs r6, r0, 24
- movs r2, 0x30
- ldrsh r0, [r5, r2]
- movs r2, 0x32
- ldrsh r1, [r5, r2]
- bl MapGridGetMetatileBehaviorAt
- lsls r0, 24
- lsrs r4, r0, 24
- mov r0, r8
- adds r1, r7, 0
- adds r2, r6, 0
- mov r3, sp
- bl TryGetFieldObjectIdByLocalIdAndMap
- lsls r0, 24
- cmp r0, 0
- bne _081271C6
- adds r0, r4, 0
- bl MetatileBehavior_IsLongGrass
- lsls r0, 24
- cmp r0, 0
- beq _081271C6
- movs r1, 0x3C
- ldrsh r0, [r5, r1]
- cmp r0, 0
- beq _081271D8
- adds r0, r5, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _081271D8
-_081271C6:
- adds r0, r5, 0
- movs r1, 0x11
- bl FieldEffectStop
- b _0812720E
- .align 2, 0
-_081271D0: .4byte gUnknown_0202E844
-_081271D4: .4byte gSaveBlock1
-_081271D8:
- mov r0, sp
- ldrb r1, [r0]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- ldr r1, _0812721C @ =gMapObjects
- adds r2, r0, r1
- ldr r0, [r2, 0x10]
- ldr r1, [r5, 0x30]
- cmp r0, r1
- beq _081271F8
- ldr r0, [r2, 0x14]
- cmp r0, r1
- beq _081271F8
- movs r0, 0x1
- strh r0, [r5, 0x3C]
-_081271F8:
- adds r0, r5, 0
- movs r1, 0
- bl sub_806487C
- ldrh r1, [r5, 0x2E]
- lsls r1, 24
- lsrs r1, 24
- adds r0, r5, 0
- movs r2, 0
- bl sub_812882C
-_0812720E:
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0812721C: .4byte gMapObjects
- thumb_func_end unc_grass_tall
-
- thumb_func_start FldEff_JumpLongGrass
-FldEff_JumpLongGrass: @ 8127220
- push {r4,lr}
- ldr r4, _08127284 @ =gUnknown_0202FF84
- adds r1, r4, 0x4
- adds r0, r4, 0
- movs r2, 0x8
- movs r3, 0x8
- bl sub_8060470
- ldr r0, _08127288 @ =gFieldEffectObjectTemplatePointers
- ldr r0, [r0, 0x40]
- movs r2, 0
- ldrsh r1, [r4, r2]
- movs r3, 0x4
- ldrsh r2, [r4, r3]
- movs r3, 0
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x40
- beq _0812727C
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- ldr r0, _0812728C @ =gSprites
- adds r2, r0
- adds r3, r2, 0
- adds r3, 0x3E
- ldrb r0, [r3]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r3]
- movs r0, 0x3
- ldrb r1, [r4, 0xC]
- ands r1, r0
- lsls r1, 2
- ldrb r3, [r2, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2, 0x5]
- ldr r0, [r4, 0x8]
- strh r0, [r2, 0x2E]
- movs r0, 0x12
- strh r0, [r2, 0x30]
-_0812727C:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08127284: .4byte gUnknown_0202FF84
-_08127288: .4byte gFieldEffectObjectTemplatePointers
-_0812728C: .4byte gSprites
- thumb_func_end FldEff_JumpLongGrass
-
- thumb_func_start FldEff_ShortGrass
-FldEff_ShortGrass: @ 8127290
- push {r4-r6,lr}
- ldr r6, _08127324 @ =gUnknown_0202FF84
- ldrb r0, [r6]
- ldrb r1, [r6, 0x4]
- ldrb r2, [r6, 0x8]
- bl GetFieldObjectIdByLocalIdAndMap
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 3
- adds r1, r0
- lsls r1, 2
- ldr r0, _08127328 @ =gMapObjects
- adds r5, r1, r0
- ldr r0, _0812732C @ =gFieldEffectObjectTemplatePointers
- ldr r0, [r0, 0x78]
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x40
- beq _0812731C
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- ldr r4, _08127330 @ =gSprites
- adds r2, r4
- adds r3, r2, 0
- adds r3, 0x3E
- ldrb r0, [r3]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r3]
- ldrb r1, [r5, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrb r0, [r0, 0x5]
- movs r1, 0xC
- ands r1, r0
- ldrb r3, [r2, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2, 0x5]
- ldr r0, [r6]
- strh r0, [r2, 0x2E]
- ldr r0, [r6, 0x4]
- strh r0, [r2, 0x30]
- ldr r0, [r6, 0x8]
- strh r0, [r2, 0x32]
- ldrb r1, [r5, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrh r0, [r0, 0x20]
- strh r0, [r2, 0x34]
- ldrb r1, [r5, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrh r0, [r0, 0x22]
- strh r0, [r2, 0x36]
-_0812731C:
- movs r0, 0
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_08127324: .4byte gUnknown_0202FF84
-_08127328: .4byte gMapObjects
-_0812732C: .4byte gFieldEffectObjectTemplatePointers
-_08127330: .4byte gSprites
- thumb_func_end FldEff_ShortGrass
-
- thumb_func_start sub_8127334
-sub_8127334: @ 8127334
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- adds r4, r0, 0
- ldrh r0, [r4, 0x2E]
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r4, 0x30]
- lsls r1, 24
- lsrs r1, 24
- ldrh r2, [r4, 0x32]
- lsls r2, 24
- lsrs r2, 24
- mov r3, sp
- bl TryGetFieldObjectIdByLocalIdAndMap
- lsls r0, 24
- cmp r0, 0
- bne _08127372
- ldr r5, _0812737C @ =gMapObjects
- mov r0, sp
- ldrb r1, [r0]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r1, r0, r5
- ldrb r0, [r1, 0x2]
- lsls r0, 29
- cmp r0, 0
- blt _08127380
-_08127372:
- adds r0, r4, 0
- movs r1, 0x29
- bl FieldEffectStop
- b _08127416
- .align 2, 0
-_0812737C: .4byte gMapObjects
-_08127380:
- ldrb r0, [r1, 0x5]
- bl GetFieldObjectGraphicsInfo
- mov r8, r0
- mov r0, sp
- ldrb r1, [r0]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldrb r1, [r0, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _08127424 @ =gSprites
- adds r6, r0, r1
- ldrh r5, [r6, 0x22]
- ldrh r7, [r6, 0x20]
- movs r0, 0x20
- ldrsh r1, [r6, r0]
- movs r2, 0x34
- ldrsh r0, [r4, r2]
- cmp r1, r0
- bne _081273BC
- lsls r0, r5, 16
- asrs r0, 16
- movs r2, 0x36
- ldrsh r1, [r4, r2]
- cmp r0, r1
- beq _081273D6
-_081273BC:
- strh r7, [r4, 0x34]
- strh r5, [r4, 0x36]
- adds r0, r4, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _081273D6
- adds r0, r4, 0
- movs r1, 0
- bl StartSpriteAnim
-_081273D6:
- strh r7, [r4, 0x20]
- strh r5, [r4, 0x22]
- mov r1, r8
- ldrh r0, [r1, 0xA]
- lsls r0, 16
- asrs r0, 17
- subs r0, 0x8
- strh r0, [r4, 0x26]
- adds r0, r6, 0
- adds r0, 0x43
- ldrb r0, [r0]
- subs r0, 0x1
- adds r1, r4, 0
- adds r1, 0x43
- strb r0, [r1]
- ldrb r0, [r6, 0x5]
- movs r1, 0xC
- ands r1, r0
- ldrb r2, [r4, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r4, 0x5]
- adds r0, r6, 0
- adds r0, 0x3E
- ldrb r1, [r0]
- lsls r1, 29
- lsrs r1, 31
- adds r0, r4, 0
- bl sub_806487C
-_08127416:
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08127424: .4byte gSprites
- thumb_func_end sub_8127334
-
- thumb_func_start FldEff_SandFootprints
-FldEff_SandFootprints: @ 8127428
- push {r4,lr}
- ldr r4, _08127490 @ =gUnknown_0202FF84
- adds r1, r4, 0x4
- adds r0, r4, 0
- movs r2, 0x8
- movs r3, 0x8
- bl sub_8060470
- ldr r0, _08127494 @ =gFieldEffectObjectTemplatePointers
- ldr r0, [r0, 0x2C]
- movs r2, 0
- ldrsh r1, [r4, r2]
- movs r3, 0x4
- ldrsh r2, [r4, r3]
- ldrb r3, [r4, 0x8]
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x40
- beq _08127486
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _08127498 @ =gSprites
- adds r0, r1
- adds r3, r0, 0
- adds r3, 0x3E
- ldrb r1, [r3]
- movs r2, 0x2
- orrs r1, r2
- strb r1, [r3]
- movs r1, 0x3
- ldrb r2, [r4, 0xC]
- ands r2, r1
- lsls r2, 2
- ldrb r3, [r0, 0x5]
- movs r1, 0xD
- negs r1, r1
- ands r1, r3
- orrs r1, r2
- strb r1, [r0, 0x5]
- movs r1, 0xD
- strh r1, [r0, 0x3C]
- ldrb r1, [r4, 0x10]
- bl StartSpriteAnim
-_08127486:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08127490: .4byte gUnknown_0202FF84
-_08127494: .4byte gFieldEffectObjectTemplatePointers
-_08127498: .4byte gSprites
- thumb_func_end FldEff_SandFootprints
-
- thumb_func_start FldEff_DeepSandFootprints
-FldEff_DeepSandFootprints: @ 812749C
- push {r4,r5,lr}
- ldr r4, _08127504 @ =gUnknown_0202FF84
- adds r1, r4, 0x4
- adds r0, r4, 0
- movs r2, 0x8
- movs r3, 0x8
- bl sub_8060470
- ldr r0, _08127508 @ =gFieldEffectObjectTemplatePointers
- ldr r0, [r0, 0x5C]
- movs r2, 0
- ldrsh r1, [r4, r2]
- movs r3, 0x4
- ldrsh r2, [r4, r3]
- ldrb r3, [r4, 0x8]
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r1, r0, 24
- adds r5, r1, 0
- cmp r1, 0x40
- beq _081274FC
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _0812750C @ =gSprites
- adds r0, r1
- adds r3, r0, 0
- adds r3, 0x3E
- ldrb r1, [r3]
- movs r2, 0x2
- orrs r1, r2
- strb r1, [r3]
- movs r1, 0x3
- ldrb r2, [r4, 0xC]
- ands r2, r1
- lsls r2, 2
- ldrb r3, [r0, 0x5]
- movs r1, 0xD
- negs r1, r1
- ands r1, r3
- orrs r1, r2
- strb r1, [r0, 0x5]
- movs r1, 0x18
- strh r1, [r0, 0x3C]
- ldrb r1, [r4, 0x10]
- bl StartSpriteAnim
-_081274FC:
- adds r0, r5, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_08127504: .4byte gUnknown_0202FF84
-_08127508: .4byte gFieldEffectObjectTemplatePointers
-_0812750C: .4byte gSprites
- thumb_func_end FldEff_DeepSandFootprints
-
- thumb_func_start FldEff_BikeTireTracks
-FldEff_BikeTireTracks: @ 8127510
- push {r4,r5,lr}
- ldr r4, _08127578 @ =gUnknown_0202FF84
- adds r1, r4, 0x4
- adds r0, r4, 0
- movs r2, 0x8
- movs r3, 0x8
- bl sub_8060470
- ldr r0, _0812757C @ =gFieldEffectObjectTemplatePointers
- ldr r0, [r0, 0x6C]
- movs r2, 0
- ldrsh r1, [r4, r2]
- movs r3, 0x4
- ldrsh r2, [r4, r3]
- ldrb r3, [r4, 0x8]
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r1, r0, 24
- adds r5, r1, 0
- cmp r1, 0x40
- beq _08127570
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _08127580 @ =gSprites
- adds r0, r1
- adds r3, r0, 0
- adds r3, 0x3E
- ldrb r1, [r3]
- movs r2, 0x2
- orrs r1, r2
- strb r1, [r3]
- movs r1, 0x3
- ldrb r2, [r4, 0xC]
- ands r2, r1
- lsls r2, 2
- ldrb r3, [r0, 0x5]
- movs r1, 0xD
- negs r1, r1
- ands r1, r3
- orrs r1, r2
- strb r1, [r0, 0x5]
- movs r1, 0x23
- strh r1, [r0, 0x3C]
- ldrb r1, [r4, 0x10]
- bl StartSpriteAnim
-_08127570:
- adds r0, r5, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_08127578: .4byte gUnknown_0202FF84
-_0812757C: .4byte gFieldEffectObjectTemplatePointers
-_08127580: .4byte gSprites
- thumb_func_end FldEff_BikeTireTracks
-
- thumb_func_start sub_8127584
-sub_8127584: @ 8127584
- push {lr}
- ldr r2, _0812759C @ =gUnknown_08401E40
- movs r3, 0x2E
- ldrsh r1, [r0, r3]
- lsls r1, 2
- adds r1, r2
- ldr r1, [r1]
- bl _call_via_r1
- pop {r0}
- bx r0
- .align 2, 0
-_0812759C: .4byte gUnknown_08401E40
- thumb_func_end sub_8127584
-
- thumb_func_start sub_81275A0
-sub_81275A0: @ 81275A0
- push {lr}
- adds r1, r0, 0
- ldrh r0, [r1, 0x30]
- adds r0, 0x1
- strh r0, [r1, 0x30]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x28
- ble _081275B6
- movs r0, 0x1
- strh r0, [r1, 0x2E]
-_081275B6:
- adds r0, r1, 0
- movs r1, 0
- bl sub_806487C
- pop {r0}
- bx r0
- thumb_func_end sub_81275A0
-
- thumb_func_start sub_81275C4
-sub_81275C4: @ 81275C4
- push {r4,lr}
- adds r4, r0, 0
- adds r3, r4, 0
- adds r3, 0x3E
- ldrb r2, [r3]
- 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
- strb r0, [r3]
- ldrh r0, [r4, 0x30]
- adds r0, 0x1
- strh r0, [r4, 0x30]
- ldrb r1, [r3]
- lsls r1, 29
- lsrs r1, 31
- adds r0, r4, 0
- bl sub_806487C
- movs r1, 0x30
- ldrsh r0, [r4, r1]
- cmp r0, 0x38
- ble _08127608
- ldrh r1, [r4, 0x3C]
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl FieldEffectStop
-_08127608:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_81275C4
-
- thumb_func_start FldEff_Splash
-FldEff_Splash: @ 8127610
- push {r4-r6,lr}
- ldr r6, _081276A4 @ =gUnknown_0202FF84
- ldrb r0, [r6]
- ldrb r1, [r6, 0x4]
- ldrb r2, [r6, 0x8]
- bl GetFieldObjectIdByLocalIdAndMap
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 3
- adds r1, r0
- lsls r1, 2
- ldr r0, _081276A8 @ =gMapObjects
- adds r5, r1, r0
- ldr r0, _081276AC @ =gFieldEffectObjectTemplatePointers
- ldr r0, [r0, 0x34]
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x40
- beq _0812769A
- ldrb r0, [r5, 0x5]
- bl GetFieldObjectGraphicsInfo
- lsls r3, r4, 4
- adds r3, r4
- lsls r3, 2
- ldr r4, _081276B0 @ =gSprites
- adds r3, r4
- movs r1, 0x3E
- adds r1, r3
- mov r12, r1
- ldrb r1, [r1]
- movs r2, 0x2
- orrs r1, r2
- mov r2, r12
- strb r1, [r2]
- ldrb r2, [r5, 0x4]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r4
- ldrb r1, [r1, 0x5]
- movs r2, 0xC
- ands r2, r1
- ldrb r4, [r3, 0x5]
- movs r1, 0xD
- negs r1, r1
- ands r1, r4
- orrs r1, r2
- strb r1, [r3, 0x5]
- ldr r1, [r6]
- strh r1, [r3, 0x2E]
- ldr r1, [r6, 0x4]
- strh r1, [r3, 0x30]
- ldr r1, [r6, 0x8]
- strh r1, [r3, 0x32]
- ldrh r0, [r0, 0xA]
- lsls r0, 16
- asrs r0, 17
- subs r0, 0x4
- strh r0, [r3, 0x26]
- movs r0, 0x46
- bl PlaySE
-_0812769A:
- movs r0, 0
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_081276A4: .4byte gUnknown_0202FF84
-_081276A8: .4byte gMapObjects
-_081276AC: .4byte gFieldEffectObjectTemplatePointers
-_081276B0: .4byte gSprites
- thumb_func_end FldEff_Splash
-
- thumb_func_start sub_81276B4
-sub_81276B4: @ 81276B4
- push {r4,lr}
- sub sp, 0x4
- adds r4, r0, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- bne _081276E4
- ldrh r0, [r4, 0x2E]
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r4, 0x30]
- lsls r1, 24
- lsrs r1, 24
- ldrh r2, [r4, 0x32]
- lsls r2, 24
- lsrs r2, 24
- mov r3, sp
- bl TryGetFieldObjectIdByLocalIdAndMap
- lsls r0, 24
- cmp r0, 0
- beq _081276EE
-_081276E4:
- adds r0, r4, 0
- movs r1, 0xF
- bl FieldEffectStop
- b _0812772E
-_081276EE:
- ldr r3, _08127738 @ =gSprites
- ldr r2, _0812773C @ =gMapObjects
- mov r0, sp
- ldrb r1, [r0]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- ldrh r0, [r0, 0x20]
- strh r0, [r4, 0x20]
- mov r0, sp
- ldrb r1, [r0]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- ldrh r0, [r0, 0x22]
- strh r0, [r4, 0x22]
- adds r0, r4, 0
- movs r1, 0
- bl sub_806487C
-_0812772E:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08127738: .4byte gSprites
-_0812773C: .4byte gMapObjects
- thumb_func_end sub_81276B4
-
- thumb_func_start FldEff_JumpSmallSplash
-FldEff_JumpSmallSplash: @ 8127740
- push {r4,lr}
- ldr r4, _081277A4 @ =gUnknown_0202FF84
- adds r1, r4, 0x4
- adds r0, r4, 0
- movs r2, 0x8
- movs r3, 0xC
- bl sub_8060470
- ldr r0, _081277A8 @ =gFieldEffectObjectTemplatePointers
- ldr r0, [r0, 0x38]
- movs r2, 0
- ldrsh r1, [r4, r2]
- movs r3, 0x4
- ldrsh r2, [r4, r3]
- movs r3, 0
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x40
- beq _0812779C
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- ldr r0, _081277AC @ =gSprites
- adds r2, r0
- adds r3, r2, 0
- adds r3, 0x3E
- ldrb r0, [r3]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r3]
- movs r0, 0x3
- ldrb r1, [r4, 0xC]
- ands r1, r0
- lsls r1, 2
- ldrb r3, [r2, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2, 0x5]
- ldr r0, [r4, 0x8]
- strh r0, [r2, 0x2E]
- movs r0, 0x10
- strh r0, [r2, 0x30]
-_0812779C:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_081277A4: .4byte gUnknown_0202FF84
-_081277A8: .4byte gFieldEffectObjectTemplatePointers
-_081277AC: .4byte gSprites
- thumb_func_end FldEff_JumpSmallSplash
-
- thumb_func_start FldEff_JumpBigSplash
-FldEff_JumpBigSplash: @ 81277B0
- push {r4,lr}
- ldr r4, _08127814 @ =gUnknown_0202FF84
- adds r1, r4, 0x4
- adds r0, r4, 0
- movs r2, 0x8
- movs r3, 0x8
- bl sub_8060470
- ldr r0, _08127818 @ =gFieldEffectObjectTemplatePointers
- ldr r0, [r0, 0x30]
- movs r2, 0
- ldrsh r1, [r4, r2]
- movs r3, 0x4
- ldrsh r2, [r4, r3]
- movs r3, 0
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x40
- beq _0812780C
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- ldr r0, _0812781C @ =gSprites
- adds r2, r0
- adds r3, r2, 0
- adds r3, 0x3E
- ldrb r0, [r3]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r3]
- movs r0, 0x3
- ldrb r1, [r4, 0xC]
- ands r1, r0
- lsls r1, 2
- ldrb r3, [r2, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2, 0x5]
- ldr r0, [r4, 0x8]
- strh r0, [r2, 0x2E]
- movs r0, 0xE
- strh r0, [r2, 0x30]
-_0812780C:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08127814: .4byte gUnknown_0202FF84
-_08127818: .4byte gFieldEffectObjectTemplatePointers
-_0812781C: .4byte gSprites
- thumb_func_end FldEff_JumpBigSplash
-
- thumb_func_start FldEff_FeetInFlowingWater
-FldEff_FeetInFlowingWater: @ 8127820
- push {r4-r7,lr}
- ldr r7, _081278C0 @ =gUnknown_0202FF84
- ldrb r0, [r7]
- ldrb r1, [r7, 0x4]
- ldrb r2, [r7, 0x8]
- bl GetFieldObjectIdByLocalIdAndMap
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 3
- adds r1, r0
- lsls r1, 2
- ldr r0, _081278C4 @ =gMapObjects
- adds r6, r1, r0
- ldr r0, _081278C8 @ =gFieldEffectObjectTemplatePointers
- ldr r0, [r0, 0x34]
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x40
- beq _081278B6
- ldrb r0, [r6, 0x5]
- bl GetFieldObjectGraphicsInfo
- adds r4, r0, 0
- lsls r0, r5, 4
- adds r0, r5
- lsls r0, 2
- ldr r3, _081278CC @ =gSprites
- adds r0, r3
- ldr r1, _081278D0 @ =sub_81278D8
- str r1, [r0, 0x1C]
- adds r5, r0, 0
- adds r5, 0x3E
- ldrb r1, [r5]
- movs r2, 0x2
- orrs r1, r2
- strb r1, [r5]
- ldrb r2, [r6, 0x4]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r3
- ldrb r1, [r1, 0x5]
- movs r2, 0xC
- ands r2, r1
- ldrb r3, [r0, 0x5]
- movs r1, 0xD
- negs r1, r1
- ands r1, r3
- orrs r1, r2
- strb r1, [r0, 0x5]
- ldr r1, [r7]
- strh r1, [r0, 0x2E]
- ldr r1, [r7, 0x4]
- strh r1, [r0, 0x30]
- ldr r1, [r7, 0x8]
- strh r1, [r0, 0x32]
- ldr r1, _081278D4 @ =0x0000ffff
- strh r1, [r0, 0x34]
- movs r1, 0x1
- negs r1, r1
- strh r1, [r0, 0x36]
- ldrh r1, [r4, 0xA]
- lsls r1, 16
- asrs r1, 17
- subs r1, 0x4
- strh r1, [r0, 0x26]
- movs r1, 0x1
- bl StartSpriteAnim
-_081278B6:
- movs r0, 0
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_081278C0: .4byte gUnknown_0202FF84
-_081278C4: .4byte gMapObjects
-_081278C8: .4byte gFieldEffectObjectTemplatePointers
-_081278CC: .4byte gSprites
-_081278D0: .4byte sub_81278D8
-_081278D4: .4byte 0x0000ffff
- thumb_func_end FldEff_FeetInFlowingWater
-
- thumb_func_start sub_81278D8
-sub_81278D8: @ 81278D8
- push {r4,r5,lr}
- sub sp, 0x4
- adds r4, r0, 0
- ldrh r0, [r4, 0x2E]
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r4, 0x30]
- lsls r1, 24
- lsrs r1, 24
- ldrh r2, [r4, 0x32]
- lsls r2, 24
- lsrs r2, 24
- mov r3, sp
- bl TryGetFieldObjectIdByLocalIdAndMap
- lsls r0, 24
- cmp r0, 0
- bne _08127912
- ldr r2, _0812791C @ =gMapObjects
- mov r0, sp
- ldrb r1, [r0]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r5, r0, r2
- ldrb r0, [r5, 0x2]
- lsls r0, 28
- cmp r0, 0
- blt _08127920
-_08127912:
- adds r0, r4, 0
- movs r1, 0x22
- bl FieldEffectStop
- b _0812796A
- .align 2, 0
-_0812791C: .4byte gMapObjects
-_08127920:
- ldrb r1, [r5, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _08127974 @ =gSprites
- adds r0, r1
- ldrh r1, [r0, 0x20]
- strh r1, [r4, 0x20]
- ldrh r1, [r0, 0x22]
- strh r1, [r4, 0x22]
- adds r0, 0x43
- ldrb r0, [r0]
- adds r1, r4, 0
- adds r1, 0x43
- strb r0, [r1]
- adds r0, r4, 0
- movs r1, 0
- bl sub_806487C
- ldr r1, [r5, 0x10]
- ldr r0, [r4, 0x34]
- cmp r1, r0
- beq _0812796A
- ldrh r0, [r5, 0x10]
- strh r0, [r4, 0x34]
- ldrh r0, [r5, 0x12]
- strh r0, [r4, 0x36]
- adds r0, r4, 0
- adds r0, 0x3E
- ldrb r1, [r0]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- bne _0812796A
- movs r0, 0x46
- bl PlaySE
-_0812796A:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08127974: .4byte gSprites
- thumb_func_end sub_81278D8
-
- thumb_func_start FldEff_Ripple
-FldEff_Ripple: @ 8127978
- push {r4,lr}
- ldr r0, _081279CC @ =gFieldEffectObjectTemplatePointers
- ldr r0, [r0, 0x14]
- ldr r4, _081279D0 @ =gUnknown_0202FF84
- 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
- cmp r0, 0x40
- beq _081279C4
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- ldr r0, _081279D4 @ =gSprites
- adds r2, r0
- adds r3, r2, 0
- adds r3, 0x3E
- ldrb r0, [r3]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r3]
- movs r0, 0x3
- ldrb r1, [r4, 0xC]
- ands r1, r0
- lsls r1, 2
- ldrb r3, [r2, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2, 0x5]
- movs r0, 0x5
- strh r0, [r2, 0x2E]
-_081279C4:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_081279CC: .4byte gFieldEffectObjectTemplatePointers
-_081279D0: .4byte gUnknown_0202FF84
-_081279D4: .4byte gSprites
- thumb_func_end FldEff_Ripple
-
- thumb_func_start FldEff_HotSpringsWater
-FldEff_HotSpringsWater: @ 81279D8
- push {r4-r6,lr}
- ldr r6, _08127A6C @ =gUnknown_0202FF84
- ldrb r0, [r6]
- ldrb r1, [r6, 0x4]
- ldrb r2, [r6, 0x8]
- bl GetFieldObjectIdByLocalIdAndMap
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 3
- adds r1, r0
- lsls r1, 2
- ldr r0, _08127A70 @ =gMapObjects
- adds r5, r1, r0
- ldr r0, _08127A74 @ =gFieldEffectObjectTemplatePointers
- ldr r0, [r0, 0x7C]
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x40
- beq _08127A64
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- ldr r4, _08127A78 @ =gSprites
- adds r2, r4
- adds r3, r2, 0
- adds r3, 0x3E
- ldrb r0, [r3]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r3]
- ldrb r1, [r5, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrb r0, [r0, 0x5]
- movs r1, 0xC
- ands r1, r0
- ldrb r3, [r2, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2, 0x5]
- ldr r0, [r6]
- strh r0, [r2, 0x2E]
- ldr r0, [r6, 0x4]
- strh r0, [r2, 0x30]
- ldr r0, [r6, 0x8]
- strh r0, [r2, 0x32]
- ldrb r1, [r5, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrh r0, [r0, 0x20]
- strh r0, [r2, 0x34]
- ldrb r1, [r5, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrh r0, [r0, 0x22]
- strh r0, [r2, 0x36]
-_08127A64:
- movs r0, 0
- pop {r4-r6}
- pop {r1}
- bx r1
- .align 2, 0
-_08127A6C: .4byte gUnknown_0202FF84
-_08127A70: .4byte gMapObjects
-_08127A74: .4byte gFieldEffectObjectTemplatePointers
-_08127A78: .4byte gSprites
- thumb_func_end FldEff_HotSpringsWater
-
- thumb_func_start sub_8127A7C
-sub_8127A7C: @ 8127A7C
- push {r4,r5,lr}
- sub sp, 0x4
- adds r4, r0, 0
- ldrh r0, [r4, 0x2E]
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r4, 0x30]
- lsls r1, 24
- lsrs r1, 24
- ldrh r2, [r4, 0x32]
- lsls r2, 24
- lsrs r2, 24
- mov r3, sp
- bl TryGetFieldObjectIdByLocalIdAndMap
- lsls r0, 24
- cmp r0, 0
- bne _08127AB6
- ldr r5, _08127AC0 @ =gMapObjects
- mov r0, sp
- ldrb r1, [r0]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r1, r0, r5
- ldrb r0, [r1, 0x2]
- lsls r0, 26
- cmp r0, 0
- blt _08127AC4
-_08127AB6:
- adds r0, r4, 0
- movs r1, 0x2A
- bl FieldEffectStop
- b _08127B08
- .align 2, 0
-_08127AC0: .4byte gMapObjects
-_08127AC4:
- ldrb r0, [r1, 0x5]
- bl GetFieldObjectGraphicsInfo
- mov r1, sp
- ldrb r2, [r1]
- lsls r1, r2, 3
- adds r1, r2
- lsls r1, 2
- adds r1, r5
- ldrb r2, [r1, 0x4]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- ldr r2, _08127B10 @ =gSprites
- adds r1, r2
- ldrh r2, [r1, 0x20]
- strh r2, [r4, 0x20]
- ldrh r0, [r0, 0xA]
- lsls r0, 16
- asrs r0, 17
- ldrh r2, [r1, 0x22]
- adds r0, r2
- subs r0, 0x8
- strh r0, [r4, 0x22]
- adds r1, 0x43
- ldrb r0, [r1]
- subs r0, 0x1
- adds r1, r4, 0
- adds r1, 0x43
- strb r0, [r1]
- adds r0, r4, 0
- movs r1, 0
- bl sub_806487C
-_08127B08:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08127B10: .4byte gSprites
- thumb_func_end sub_8127A7C
-
- thumb_func_start FldEff_Unknown19
-FldEff_Unknown19: @ 8127B14
- push {r4,lr}
- ldr r4, _08127B74 @ =gUnknown_0202FF84
- adds r1, r4, 0x4
- adds r0, r4, 0
- movs r2, 0x8
- movs r3, 0x8
- bl sub_8060470
- ldr r0, _08127B78 @ =gFieldEffectObjectTemplatePointers
- ldr r0, [r0, 0x44]
- 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
- cmp r0, 0x40
- beq _08127B6C
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- ldr r0, _08127B7C @ =gSprites
- adds r2, r0
- adds r3, r2, 0
- adds r3, 0x3E
- ldrb r0, [r3]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r3]
- movs r0, 0x3
- ldrb r1, [r4, 0xC]
- ands r1, r0
- lsls r1, 2
- ldrb r3, [r2, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2, 0x5]
- movs r0, 0x13
- strh r0, [r2, 0x2E]
-_08127B6C:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08127B74: .4byte gUnknown_0202FF84
-_08127B78: .4byte gFieldEffectObjectTemplatePointers
-_08127B7C: .4byte gSprites
- thumb_func_end FldEff_Unknown19
-
- thumb_func_start FldEff_Unknown20
-FldEff_Unknown20: @ 8127B80
- push {r4,lr}
- ldr r4, _08127BE0 @ =gUnknown_0202FF84
- adds r1, r4, 0x4
- adds r0, r4, 0
- movs r2, 0x8
- movs r3, 0x8
- bl sub_8060470
- ldr r0, _08127BE4 @ =gFieldEffectObjectTemplatePointers
- ldr r0, [r0, 0x48]
- 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
- cmp r0, 0x40
- beq _08127BD8
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- ldr r0, _08127BE8 @ =gSprites
- adds r2, r0
- adds r3, r2, 0
- adds r3, 0x3E
- ldrb r0, [r3]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r3]
- movs r0, 0x3
- ldrb r1, [r4, 0xC]
- ands r1, r0
- lsls r1, 2
- ldrb r3, [r2, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2, 0x5]
- movs r0, 0x14
- strh r0, [r2, 0x2E]
-_08127BD8:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08127BE0: .4byte gUnknown_0202FF84
-_08127BE4: .4byte gFieldEffectObjectTemplatePointers
-_08127BE8: .4byte gSprites
- thumb_func_end FldEff_Unknown20
-
- thumb_func_start FldEff_Unknown21
-FldEff_Unknown21: @ 8127BEC
- push {r4,lr}
- ldr r4, _08127C4C @ =gUnknown_0202FF84
- adds r1, r4, 0x4
- adds r0, r4, 0
- movs r2, 0x8
- movs r3, 0x8
- bl sub_8060470
- ldr r0, _08127C50 @ =gFieldEffectObjectTemplatePointers
- ldr r0, [r0, 0x4C]
- 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
- cmp r0, 0x40
- beq _08127C44
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- ldr r0, _08127C54 @ =gSprites
- adds r2, r0
- adds r3, r2, 0
- adds r3, 0x3E
- ldrb r0, [r3]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r3]
- movs r0, 0x3
- ldrb r1, [r4, 0xC]
- ands r1, r0
- lsls r1, 2
- ldrb r3, [r2, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2, 0x5]
- movs r0, 0x15
- strh r0, [r2, 0x2E]
-_08127C44:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08127C4C: .4byte gUnknown_0202FF84
-_08127C50: .4byte gFieldEffectObjectTemplatePointers
-_08127C54: .4byte gSprites
- thumb_func_end FldEff_Unknown21
-
- thumb_func_start FldEff_Unknown22
-FldEff_Unknown22: @ 8127C58
- push {r4,lr}
- ldr r4, _08127CB8 @ =gUnknown_0202FF84
- adds r1, r4, 0x4
- adds r0, r4, 0
- movs r2, 0x8
- movs r3, 0x8
- bl sub_8060470
- ldr r0, _08127CBC @ =gFieldEffectObjectTemplatePointers
- ldr r0, [r0, 0x50]
- 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
- cmp r0, 0x40
- beq _08127CB0
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- ldr r0, _08127CC0 @ =gSprites
- adds r2, r0
- adds r3, r2, 0
- adds r3, 0x3E
- ldrb r0, [r3]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r3]
- movs r0, 0x3
- ldrb r1, [r4, 0xC]
- ands r1, r0
- lsls r1, 2
- ldrb r3, [r2, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2, 0x5]
- movs r0, 0x16
- strh r0, [r2, 0x2E]
-_08127CB0:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08127CB8: .4byte gUnknown_0202FF84
-_08127CBC: .4byte gFieldEffectObjectTemplatePointers
-_08127CC0: .4byte gSprites
- thumb_func_end FldEff_Unknown22
-
- thumb_func_start ash
-ash: @ 8127CC4
- push {r4,lr}
- lsls r2, 16
- lsrs r2, 16
- ldr r4, _08127CF4 @ =gUnknown_0202FF84
- lsls r0, 16
- asrs r0, 16
- str r0, [r4]
- lsls r1, 16
- asrs r1, 16
- str r1, [r4, 0x4]
- movs r0, 0x52
- str r0, [r4, 0x8]
- movs r0, 0x1
- str r0, [r4, 0xC]
- str r2, [r4, 0x10]
- lsls r3, 16
- asrs r3, 16
- str r3, [r4, 0x14]
- movs r0, 0x7
- bl FieldEffectStart
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08127CF4: .4byte gUnknown_0202FF84
- thumb_func_end ash
-
- thumb_func_start FldEff_Ash
-FldEff_Ash: @ 8127CF8
- push {r4,r5,lr}
- sub sp, 0x4
- ldr r5, _08127D78 @ =gUnknown_0202FF84
- ldrh r1, [r5]
- mov r0, sp
- strh r1, [r0]
- ldrh r0, [r5, 0x4]
- mov r4, sp
- adds r4, 0x2
- strh r0, [r4]
- mov r0, sp
- adds r1, r4, 0
- movs r2, 0x8
- movs r3, 0x8
- bl sub_8060470
- ldr r0, _08127D7C @ =gFieldEffectObjectTemplatePointers
- ldr r0, [r0, 0x18]
- mov r1, sp
- movs r2, 0
- ldrsh r1, [r1, r2]
- movs r3, 0
- ldrsh r2, [r4, r3]
- ldrb r3, [r5, 0x8]
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x40
- beq _08127D6E
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- ldr r0, _08127D80 @ =gSprites
- adds r2, r0
- adds r3, r2, 0
- adds r3, 0x3E
- ldrb r0, [r3]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r3]
- movs r0, 0x3
- ldrb r1, [r5, 0xC]
- ands r1, r0
- lsls r1, 2
- ldrb r3, [r2, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2, 0x5]
- ldr r0, [r5]
- strh r0, [r2, 0x30]
- ldr r0, [r5, 0x4]
- strh r0, [r2, 0x32]
- ldr r0, [r5, 0x10]
- strh r0, [r2, 0x34]
- ldr r0, [r5, 0x14]
- strh r0, [r2, 0x36]
-_08127D6E:
- movs r0, 0
- add sp, 0x4
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_08127D78: .4byte gUnknown_0202FF84
-_08127D7C: .4byte gFieldEffectObjectTemplatePointers
-_08127D80: .4byte gSprites
- thumb_func_end FldEff_Ash
-
- thumb_func_start sub_8127D84
-sub_8127D84: @ 8127D84
- push {lr}
- ldr r2, _08127D9C @ =gUnknown_08401E48
- movs r3, 0x2E
- ldrsh r1, [r0, r3]
- lsls r1, 2
- adds r1, r2
- ldr r1, [r1]
- bl _call_via_r1
- pop {r0}
- bx r0
- .align 2, 0
-_08127D9C: .4byte gUnknown_08401E48
- thumb_func_end sub_8127D84
-
- thumb_func_start sub_8127DA0
-sub_8127DA0: @ 8127DA0
- push {lr}
- adds r3, r0, 0
- adds r2, r3, 0
- adds r2, 0x3E
- ldrb r0, [r2]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r2]
- subs r2, 0x12
- ldrb r0, [r2]
- movs r1, 0x40
- orrs r0, r1
- strb r0, [r2]
- ldrh r0, [r3, 0x36]
- subs r0, 0x1
- strh r0, [r3, 0x36]
- lsls r0, 16
- cmp r0, 0
- bne _08127DCA
- movs r0, 0x1
- strh r0, [r3, 0x2E]
-_08127DCA:
- pop {r0}
- bx r0
- thumb_func_end sub_8127DA0
-
- thumb_func_start sub_8127DD0
-sub_8127DD0: @ 8127DD0
- push {r4,lr}
- adds r4, r0, 0
- adds r2, r4, 0
- adds r2, 0x3E
- ldrb r1, [r2]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
- subs r2, 0x12
- ldrb r1, [r2]
- movs r0, 0x41
- negs r0, r0
- ands r0, r1
- strb r0, [r2]
- movs r1, 0x30
- ldrsh r0, [r4, r1]
- movs r2, 0x32
- ldrsh r1, [r4, r2]
- ldrh r2, [r4, 0x34]
- bl MapGridSetMetatileIdAt
- movs r1, 0x30
- ldrsh r0, [r4, r1]
- movs r2, 0x32
- ldrsh r1, [r4, r2]
- bl CurrentMapDrawMetatileAt
- ldr r2, _08127E28 @ =gMapObjects
- ldr r0, _08127E2C @ =gPlayerAvatar
- ldrb r1, [r0, 0x5]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0]
- movs r2, 0x4
- orrs r1, r2
- strb r1, [r0]
- movs r0, 0x2
- strh r0, [r4, 0x2E]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08127E28: .4byte gMapObjects
-_08127E2C: .4byte gPlayerAvatar
- thumb_func_end sub_8127DD0
-
- thumb_func_start sub_8127E30
-sub_8127E30: @ 8127E30
- push {r4,lr}
- adds r4, r0, 0
- movs r1, 0
- bl sub_806487C
- adds r0, r4, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _08127E50
- adds r0, r4, 0
- movs r1, 0x7
- bl FieldEffectStop
-_08127E50:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_8127E30
-
- thumb_func_start FldEff_SurfBlob
-FldEff_SurfBlob: @ 8127E58
- push {r4,r5,lr}
- ldr r4, _08127EC0 @ =gUnknown_0202FF84
- adds r1, r4, 0x4
- adds r0, r4, 0
- movs r2, 0x8
- movs r3, 0x8
- bl sub_8060470
- ldr r0, _08127EC4 @ =gFieldEffectObjectTemplatePointers
- ldr r0, [r0, 0x1C]
- movs r2, 0
- ldrsh r1, [r4, r2]
- movs r3, 0x4
- ldrsh r2, [r4, r3]
- movs r3, 0x96
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r0, 24
- adds r5, r0, 0
- cmp r0, 0x40
- beq _08127EB2
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- ldr r0, _08127EC8 @ =gSprites
- adds r1, r0
- adds r3, r1, 0
- adds r3, 0x3E
- ldrb r0, [r3]
- movs r2, 0x2
- orrs r0, r2
- strb r0, [r3]
- ldrb r2, [r1, 0x5]
- movs r0, 0xF
- ands r0, r2
- strb r0, [r1, 0x5]
- ldr r0, [r4, 0x8]
- strh r0, [r1, 0x32]
- ldr r0, _08127ECC @ =0x0000ffff
- strh r0, [r1, 0x34]
- movs r0, 0x1
- negs r0, r0
- strh r0, [r1, 0x3A]
- strh r0, [r1, 0x3C]
-_08127EB2:
- movs r0, 0x8
- bl FieldEffectActiveListRemove
- adds r0, r5, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_08127EC0: .4byte gUnknown_0202FF84
-_08127EC4: .4byte gFieldEffectObjectTemplatePointers
-_08127EC8: .4byte gSprites
-_08127ECC: .4byte 0x0000ffff
- thumb_func_end FldEff_SurfBlob
-
- thumb_func_start sub_8127ED0
-sub_8127ED0: @ 8127ED0
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- ldr r3, _08127EF8 @ =gSprites
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r3
- ldrh r0, [r2, 0x2E]
- movs r3, 0x10
- negs r3, r3
- ands r3, r0
- movs r0, 0xF0
- lsls r0, 20
- ands r0, r1
- lsrs r0, 24
- orrs r0, r3
- strh r0, [r2, 0x2E]
- bx lr
- .align 2, 0
-_08127EF8: .4byte gSprites
- thumb_func_end sub_8127ED0
-
- thumb_func_start sub_8127EFC
-sub_8127EFC: @ 8127EFC
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- ldr r3, _08127F24 @ =gSprites
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r3
- ldrh r0, [r2, 0x2E]
- movs r3, 0xF1
- negs r3, r3
- ands r3, r0
- movs r0, 0xF0
- lsls r0, 20
- ands r0, r1
- lsrs r0, 20
- orrs r3, r0
- strh r3, [r2, 0x2E]
- bx lr
- .align 2, 0
-_08127F24: .4byte gSprites
- thumb_func_end sub_8127EFC
-
- thumb_func_start sub_8127F28
-sub_8127F28: @ 8127F28
- push {r4,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- ldr r4, _08127F54 @ =gSprites
- lsls r3, r0, 4
- adds r3, r0
- lsls r3, 2
- adds r3, r4
- ldrh r0, [r3, 0x2E]
- ldr r4, _08127F58 @ =0xfffff0ff
- ands r4, r0
- movs r0, 0xF0
- lsls r0, 20
- ands r0, r1
- lsrs r0, 16
- orrs r4, r0
- strh r4, [r3, 0x2E]
- strh r2, [r3, 0x30]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08127F54: .4byte gSprites
-_08127F58: .4byte 0xfffff0ff
- thumb_func_end sub_8127F28
-
- thumb_func_start sub_8127F5C
-sub_8127F5C: @ 8127F5C
- ldrh r1, [r0, 0x2E]
- movs r0, 0xF
- ands r0, r1
- bx lr
- thumb_func_end sub_8127F5C
-
- thumb_func_start sub_8127F64
-sub_8127F64: @ 8127F64
- ldrh r1, [r0, 0x2E]
- movs r0, 0xF0
- ands r0, r1
- lsrs r0, 4
- bx lr
- thumb_func_end sub_8127F64
-
- thumb_func_start sub_8127F70
-sub_8127F70: @ 8127F70
- ldrh r1, [r0, 0x2E]
- movs r0, 0xF0
- lsls r0, 4
- ands r0, r1
- lsrs r0, 8
- bx lr
- thumb_func_end sub_8127F70
-
- thumb_func_start sub_8127F7C
-sub_8127F7C: @ 8127F7C
- push {r4-r6,lr}
- adds r6, r0, 0
- movs r1, 0x32
- ldrsh r0, [r6, r1]
- lsls r4, r0, 3
- adds r4, r0
- lsls r4, 2
- ldr r0, _08127FCC @ =gMapObjects
- adds r4, r0
- ldrb r0, [r4, 0x4]
- lsls r5, r0, 4
- adds r5, r0
- lsls r5, 2
- ldr r0, _08127FD0 @ =gSprites
- adds r5, r0
- adds r0, r4, 0
- adds r1, r6, 0
- bl sub_8127FD4
- adds r0, r4, 0
- adds r1, r6, 0
- bl sub_812800C
- adds r0, r4, 0
- adds r1, r5, 0
- adds r2, r6, 0
- bl sub_81280A0
- ldrb r0, [r5, 0x5]
- movs r1, 0xC
- ands r1, r0
- ldrb r2, [r6, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- orrs r0, r1
- strb r0, [r6, 0x5]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08127FCC: .4byte gMapObjects
-_08127FD0: .4byte gSprites
- thumb_func_end sub_8127F7C
-
- thumb_func_start sub_8127FD4
-sub_8127FD4: @ 8127FD4
- push {r4,r5,lr}
- sub sp, 0x8
- adds r5, r0, 0
- adds r4, r1, 0
- ldr r1, _08128008 @ =gUnknown_08401E54
- mov r0, sp
- movs r2, 0x5
- bl memcpy
- adds r0, r4, 0
- bl sub_8127F64
- lsls r0, 24
- cmp r0, 0
- bne _08128000
- ldrb r0, [r5, 0x18]
- lsrs r0, 4
- add r0, sp
- ldrb r1, [r0]
- adds r0, r4, 0
- bl StartSpriteAnimIfDifferent
-_08128000:
- add sp, 0x8
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08128008: .4byte gUnknown_08401E54
- thumb_func_end sub_8127FD4
-
- thumb_func_start sub_812800C
-sub_812800C: @ 812800C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- adds r4, r1, 0
- ldrh r2, [r0, 0x10]
- mov r1, sp
- strh r2, [r1]
- ldrh r1, [r0, 0x12]
- mov r0, sp
- adds r0, 0x2
- strh r1, [r0]
- movs r2, 0x26
- ldrsh r3, [r4, r2]
- mov r8, r0
- cmp r3, 0
- bne _08128094
- mov r0, sp
- movs r5, 0
- ldrsh r2, [r0, r5]
- movs r5, 0x3A
- ldrsh r0, [r4, r5]
- cmp r2, r0
- bne _08128048
- lsls r0, r1, 16
- asrs r0, 16
- movs r5, 0x3C
- ldrsh r1, [r4, r5]
- cmp r0, r1
- beq _08128094
-_08128048:
- strh r3, [r4, 0x38]
- strh r2, [r4, 0x3A]
- mov r1, r8
- movs r2, 0
- ldrsh r0, [r1, r2]
- strh r0, [r4, 0x3C]
- movs r5, 0x1
- mov r7, r8
- mov r6, sp
-_0812805A:
- adds r0, r5, 0
- mov r1, sp
- adds r2, r7, 0
- bl MoveCoords
- movs r1, 0
- ldrsh r0, [r6, r1]
- movs r2, 0
- ldrsh r1, [r7, r2]
- bl MapGridGetZCoordAt
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x3
- bne _08128080
- ldrh r0, [r4, 0x38]
- adds r0, 0x1
- strh r0, [r4, 0x38]
- b _08128094
-_08128080:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- ldrh r0, [r4, 0x3A]
- strh r0, [r6]
- ldrh r0, [r4, 0x3C]
- mov r1, r8
- strh r0, [r1]
- cmp r5, 0x4
- bls _0812805A
-_08128094:
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_812800C
-
- thumb_func_start sub_81280A0
-sub_81280A0: @ 81280A0
- push {r4,r5,lr}
- sub sp, 0x4
- adds r5, r1, 0
- adds r4, r2, 0
- ldr r1, _08128104 @ =gUnknown_08401E5A
- mov r0, sp
- movs r2, 0x4
- bl memcpy
- adds r0, r4, 0
- bl sub_8127F5C
- lsls r0, 24
- lsrs r0, 24
- adds r2, r0, 0
- cmp r2, 0
- beq _0812811A
- ldrh r1, [r4, 0x36]
- adds r1, 0x1
- strh r1, [r4, 0x36]
- movs r3, 0x38
- ldrsh r0, [r4, r3]
- lsls r0, 1
- add r0, sp
- ldrh r0, [r0]
- ands r1, r0
- cmp r1, 0
- bne _081280E0
- ldrh r0, [r4, 0x34]
- ldrh r1, [r4, 0x26]
- adds r0, r1
- strh r0, [r4, 0x26]
-_081280E0:
- ldrh r1, [r4, 0x36]
- movs r0, 0xF
- ands r0, r1
- cmp r0, 0
- bne _081280F0
- ldrh r0, [r4, 0x34]
- negs r0, r0
- strh r0, [r4, 0x34]
-_081280F0:
- cmp r2, 0x2
- beq _0812811A
- adds r0, r4, 0
- bl sub_8127F70
- lsls r0, 24
- cmp r0, 0
- bne _08128108
- ldrh r0, [r4, 0x26]
- b _0812810E
- .align 2, 0
-_08128104: .4byte gUnknown_08401E5A
-_08128108:
- ldrh r0, [r4, 0x26]
- ldrh r3, [r4, 0x30]
- adds r0, r3
-_0812810E:
- strh r0, [r5, 0x26]
- ldrh r0, [r5, 0x20]
- strh r0, [r4, 0x20]
- ldrh r0, [r5, 0x22]
- adds r0, 0x8
- strh r0, [r4, 0x22]
-_0812811A:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_81280A0
-
- thumb_func_start sub_8128124
-sub_8128124: @ 8128124
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, _08128168 @ =gDummySpriteTemplate
- movs r1, 0
- movs r2, 0
- movs r3, 0xFF
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r0, 24
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- ldr r1, _0812816C @ =gSprites
- adds r2, r1
- ldr r1, _08128170 @ =sub_8128174
- str r1, [r2, 0x1C]
- movs r1, 0x3E
- adds r1, r2
- mov r12, r1
- ldrb r1, [r1]
- movs r3, 0x4
- orrs r1, r3
- mov r3, r12
- strb r1, [r3]
- strh r4, [r2, 0x2E]
- movs r1, 0x1
- strh r1, [r2, 0x30]
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08128168: .4byte gDummySpriteTemplate
-_0812816C: .4byte gSprites
-_08128170: .4byte sub_8128174
- thumb_func_end sub_8128124
-
- thumb_func_start sub_8128174
-sub_8128174: @ 8128174
- push {lr}
- adds r2, r0, 0
- movs r0, 0x2E
- ldrsh r1, [r2, r0]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _081281B0 @ =gSprites
- adds r3, r0, r1
- ldrh r1, [r2, 0x32]
- adds r0, r1, 0x1
- strh r0, [r2, 0x32]
- movs r0, 0x3
- ands r0, r1
- cmp r0, 0
- bne _0812819C
- ldrh r0, [r2, 0x30]
- ldrh r1, [r3, 0x26]
- adds r0, r1
- strh r0, [r3, 0x26]
-_0812819C:
- ldrh r1, [r2, 0x32]
- movs r0, 0xF
- ands r0, r1
- cmp r0, 0
- bne _081281AC
- ldrh r0, [r2, 0x30]
- negs r0, r0
- strh r0, [r2, 0x30]
-_081281AC:
- pop {r0}
- bx r0
- .align 2, 0
-_081281B0: .4byte gSprites
- thumb_func_end sub_8128174
-
- thumb_func_start FldEff_Dust
-FldEff_Dust: @ 81281B4
- push {r4,lr}
- ldr r4, _08128218 @ =gUnknown_0202FF84
- adds r1, r4, 0x4
- adds r0, r4, 0
- movs r2, 0x8
- movs r3, 0xC
- bl sub_8060470
- ldr r0, _0812821C @ =gFieldEffectObjectTemplatePointers
- ldr r0, [r0, 0x24]
- movs r2, 0
- ldrsh r1, [r4, r2]
- movs r3, 0x4
- ldrsh r2, [r4, r3]
- movs r3, 0
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x40
- beq _08128210
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- ldr r0, _08128220 @ =gSprites
- adds r2, r0
- adds r3, r2, 0
- adds r3, 0x3E
- ldrb r0, [r3]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r3]
- movs r0, 0x3
- ldrb r1, [r4, 0xC]
- ands r1, r0
- lsls r1, 2
- ldrb r3, [r2, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2, 0x5]
- ldr r0, [r4, 0x8]
- strh r0, [r2, 0x2E]
- movs r0, 0xA
- strh r0, [r2, 0x30]
-_08128210:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08128218: .4byte gUnknown_0202FF84
-_0812821C: .4byte gFieldEffectObjectTemplatePointers
-_08128220: .4byte gSprites
- thumb_func_end FldEff_Dust
-
- thumb_func_start FldEff_SandPile
-FldEff_SandPile: @ 8128224
- push {r4-r7,lr}
- ldr r7, _081282D0 @ =gUnknown_0202FF84
- ldrb r0, [r7]
- ldrb r1, [r7, 0x4]
- ldrb r2, [r7, 0x8]
- bl GetFieldObjectIdByLocalIdAndMap
- lsls r0, 24
- lsrs r0, 24
- lsls r1, r0, 3
- adds r1, r0
- lsls r1, 2
- ldr r0, _081282D4 @ =gMapObjects
- adds r6, r1, r0
- ldr r0, _081282D8 @ =gFieldEffectObjectTemplatePointers
- ldr r0, [r0, 0x74]
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x40
- beq _081282C8
- ldrb r0, [r6, 0x5]
- bl GetFieldObjectGraphicsInfo
- adds r5, r0, 0
- lsls r0, r4, 4
- adds r0, r4
- lsls r0, 2
- ldr r4, _081282DC @ =gSprites
- adds r0, r4
- adds r3, r0, 0
- adds r3, 0x3E
- ldrb r1, [r3]
- movs r2, 0x2
- orrs r1, r2
- strb r1, [r3]
- ldrb r2, [r6, 0x4]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r4
- ldrb r1, [r1, 0x5]
- movs r2, 0xC
- ands r2, r1
- ldrb r3, [r0, 0x5]
- movs r1, 0xD
- negs r1, r1
- ands r1, r3
- orrs r1, r2
- strb r1, [r0, 0x5]
- ldr r1, [r7]
- strh r1, [r0, 0x2E]
- ldr r1, [r7, 0x4]
- strh r1, [r0, 0x30]
- ldr r1, [r7, 0x8]
- strh r1, [r0, 0x32]
- ldrb r2, [r6, 0x4]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r4
- ldrh r1, [r1, 0x20]
- strh r1, [r0, 0x34]
- ldrb r2, [r6, 0x4]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r4
- ldrh r1, [r1, 0x22]
- strh r1, [r0, 0x36]
- ldrh r1, [r5, 0xA]
- lsls r1, 16
- asrs r1, 17
- subs r1, 0x2
- strh r1, [r0, 0x26]
- movs r1, 0x2
- bl SeekSpriteAnim
-_081282C8:
- movs r0, 0
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_081282D0: .4byte gUnknown_0202FF84
-_081282D4: .4byte gMapObjects
-_081282D8: .4byte gFieldEffectObjectTemplatePointers
-_081282DC: .4byte gSprites
- thumb_func_end FldEff_SandPile
-
- thumb_func_start sub_81282E0
-sub_81282E0: @ 81282E0
- push {r4-r6,lr}
- sub sp, 0x4
- adds r4, r0, 0
- ldrh r0, [r4, 0x2E]
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r4, 0x30]
- lsls r1, 24
- lsrs r1, 24
- ldrh r2, [r4, 0x32]
- lsls r2, 24
- lsrs r2, 24
- mov r3, sp
- bl TryGetFieldObjectIdByLocalIdAndMap
- lsls r0, 24
- cmp r0, 0
- bne _0812831A
- ldr r2, _08128324 @ =gMapObjects
- mov r0, sp
- ldrb r1, [r0]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r1, r0, r2
- ldrb r0, [r1, 0x2]
- lsls r0, 27
- cmp r0, 0
- blt _08128328
-_0812831A:
- adds r0, r4, 0
- movs r1, 0x27
- bl FieldEffectStop
- b _0812839A
- .align 2, 0
-_08128324: .4byte gMapObjects
-_08128328:
- ldr r2, _081283A4 @ =gSprites
- ldrb r1, [r1, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrh r5, [r0, 0x22]
- ldrh r6, [r0, 0x20]
- movs r2, 0x20
- ldrsh r1, [r0, r2]
- movs r2, 0x34
- ldrsh r0, [r4, r2]
- cmp r1, r0
- bne _08128350
- lsls r0, r5, 16
- asrs r0, 16
- movs r2, 0x36
- ldrsh r1, [r4, r2]
- cmp r0, r1
- beq _0812836A
-_08128350:
- strh r6, [r4, 0x34]
- strh r5, [r4, 0x36]
- adds r0, r4, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _0812836A
- adds r0, r4, 0
- movs r1, 0
- bl StartSpriteAnim
-_0812836A:
- strh r6, [r4, 0x20]
- strh r5, [r4, 0x22]
- ldr r3, _081283A4 @ =gSprites
- ldr r2, _081283A8 @ =gMapObjects
- mov r0, sp
- ldrb r1, [r0]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrb r1, [r0, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r3
- adds r0, 0x43
- ldrb r0, [r0]
- adds r1, r4, 0
- adds r1, 0x43
- strb r0, [r1]
- adds r0, r4, 0
- movs r1, 0
- bl sub_806487C
-_0812839A:
- add sp, 0x4
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_081283A4: .4byte gSprites
-_081283A8: .4byte gMapObjects
- thumb_func_end sub_81282E0
-
- thumb_func_start FldEff_Bubbles
-FldEff_Bubbles: @ 81283AC
- push {r4,lr}
- ldr r4, _08128404 @ =gUnknown_0202FF84
- adds r1, r4, 0x4
- adds r0, r4, 0
- movs r2, 0x8
- movs r3, 0
- bl sub_8060470
- ldr r0, _08128408 @ =gFieldEffectObjectTemplatePointers
- adds r0, 0x88
- ldr r0, [r0]
- movs r2, 0
- ldrsh r1, [r4, r2]
- movs r3, 0x4
- ldrsh r2, [r4, r3]
- movs r3, 0x52
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x40
- beq _081283FC
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- ldr r0, _0812840C @ =gSprites
- adds r1, r0
- adds r3, r1, 0
- adds r3, 0x3E
- ldrb r0, [r3]
- movs r2, 0x2
- orrs r0, r2
- strb r0, [r3]
- ldrb r2, [r1, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r2
- movs r2, 0x4
- orrs r0, r2
- strb r0, [r1, 0x5]
-_081283FC:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08128404: .4byte gUnknown_0202FF84
-_08128408: .4byte gFieldEffectObjectTemplatePointers
-_0812840C: .4byte gSprites
- thumb_func_end FldEff_Bubbles
-
- thumb_func_start sub_8128410
-sub_8128410: @ 8128410
- push {r4,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x2E]
- adds r0, 0x80
- movs r1, 0x80
- lsls r1, 1
- ands r0, r1
- strh r0, [r4, 0x2E]
- lsls r0, 16
- asrs r0, 24
- ldrh r1, [r4, 0x22]
- subs r1, r0
- strh r1, [r4, 0x22]
- adds r0, r4, 0
- movs r1, 0
- bl sub_806487C
- ldrh r1, [r4, 0x3E]
- ldr r0, _0812844C @ =0x00001004
- ands r0, r1
- cmp r0, 0
- beq _08128444
- adds r0, r4, 0
- movs r1, 0x35
- bl FieldEffectStop
-_08128444:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0812844C: .4byte 0x00001004
- thumb_func_end sub_8128410
-
- thumb_func_start FldEff_BerryTreeGrowthSparkle
-FldEff_BerryTreeGrowthSparkle: @ 8128450
- push {r4,lr}
- ldr r4, _081284B8 @ =gUnknown_0202FF84
- adds r1, r4, 0x4
- adds r0, r4, 0
- movs r2, 0x8
- movs r3, 0x4
- bl sub_8060470
- ldr r0, _081284BC @ =gFieldEffectObjectTemplatePointers
- ldr r0, [r0, 0x58]
- 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
- cmp r0, 0x40
- beq _081284B0
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- ldr r0, _081284C0 @ =gSprites
- adds r2, r0
- adds r3, r2, 0
- adds r3, 0x3E
- ldrb r0, [r3]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r3]
- movs r0, 0x3
- ldrb r1, [r4, 0xC]
- ands r1, r0
- lsls r1, 2
- ldrb r3, [r2, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- movs r1, 0xF
- ands r0, r1
- movs r1, 0x50
- orrs r0, r1
- strb r0, [r2, 0x5]
- movs r0, 0x17
- strh r0, [r2, 0x2E]
-_081284B0:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_081284B8: .4byte gUnknown_0202FF84
-_081284BC: .4byte gFieldEffectObjectTemplatePointers
-_081284C0: .4byte gSprites
- thumb_func_end FldEff_BerryTreeGrowthSparkle
-
- thumb_func_start FldEff_TreeDisguise
-FldEff_TreeDisguise: @ 81284C4
- push {lr}
- movs r0, 0x1C
- movs r1, 0x18
- movs r2, 0x4
- bl ShowDisguiseFieldEffect
- pop {r1}
- bx r1
- thumb_func_end FldEff_TreeDisguise
-
- thumb_func_start FldEff_MountainDisguise
-FldEff_MountainDisguise: @ 81284D4
- push {lr}
- movs r0, 0x1D
- movs r1, 0x19
- movs r2, 0x3
- bl ShowDisguiseFieldEffect
- pop {r1}
- bx r1
- thumb_func_end FldEff_MountainDisguise
-
- thumb_func_start FldEff_SandDisguise
-FldEff_SandDisguise: @ 81284E4
- push {lr}
- movs r0, 0x24
- movs r1, 0x1C
- movs r2, 0x2
- bl ShowDisguiseFieldEffect
- pop {r1}
- bx r1
- thumb_func_end FldEff_SandDisguise
-
- thumb_func_start ShowDisguiseFieldEffect
-ShowDisguiseFieldEffect: @ 81284F4
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- lsls r0, 24
- lsrs r4, r0, 24
- mov r8, r4
- lsls r1, 24
- lsrs r6, r1, 24
- lsls r2, 24
- lsrs r7, r2, 24
- ldr r5, _08128528 @ =gUnknown_0202FF84
- ldrb r0, [r5]
- ldrb r1, [r5, 0x4]
- ldrb r2, [r5, 0x8]
- mov r3, sp
- bl TryGetFieldObjectIdByLocalIdAndMap
- lsls r0, 24
- cmp r0, 0
- beq _0812852C
- adds r0, r4, 0
- bl FieldEffectActiveListRemove
- movs r0, 0x40
- b _08128598
- .align 2, 0
-_08128528: .4byte gUnknown_0202FF84
-_0812852C:
- ldr r1, _081285A4 @ =gFieldEffectObjectTemplatePointers
- lsls r0, r6, 2
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0
- movs r2, 0
- movs r3, 0
- bl CreateSpriteAtEnd
- mov r1, sp
- strb r0, [r1]
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x40
- beq _08128594
- mov r0, sp
- ldrb r0, [r0]
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- ldr r0, _081285A8 @ =gSprites
- adds r2, r0
- movs r0, 0x3E
- adds r0, r2
- mov r12, r0
- ldrb r3, [r0]
- lsls r1, r3, 30
- lsrs r1, 31
- adds r1, 0x1
- movs r0, 0x1
- ands r1, r0
- lsls r1, 1
- movs r0, 0x3
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- mov r1, r12
- strb r0, [r1]
- lsls r3, r7, 4
- ldrb r1, [r2, 0x5]
- movs r0, 0xF
- ands r0, r1
- orrs r0, r3
- strb r0, [r2, 0x5]
- mov r0, r8
- strh r0, [r2, 0x30]
- ldr r0, [r5]
- strh r0, [r2, 0x32]
- ldr r0, [r5, 0x4]
- strh r0, [r2, 0x34]
- ldr r0, [r5, 0x8]
- strh r0, [r2, 0x36]
-_08128594:
- mov r0, sp
- ldrb r0, [r0]
-_08128598:
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_081285A4: .4byte gFieldEffectObjectTemplatePointers
-_081285A8: .4byte gSprites
- thumb_func_end ShowDisguiseFieldEffect
-
- thumb_func_start sub_81285AC
-sub_81285AC: @ 81285AC
- push {r4,r5,lr}
- sub sp, 0x4
- adds r5, r0, 0
- ldrh r0, [r5, 0x32]
- lsls r0, 24
- lsrs r0, 24
- ldrh r1, [r5, 0x34]
- lsls r1, 24
- lsrs r1, 24
- ldrh r2, [r5, 0x36]
- lsls r2, 24
- lsrs r2, 24
- mov r3, sp
- bl TryGetFieldObjectIdByLocalIdAndMap
- lsls r0, 24
- cmp r0, 0
- beq _081285DC
- ldrh r1, [r5, 0x30]
- lsls r1, 24
- lsrs r1, 24
- adds r0, r5, 0
- bl FieldEffectStop
-_081285DC:
- ldr r4, _08128694 @ =gMapObjects
- mov r0, sp
- ldrb r1, [r0]
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- ldrb r0, [r0, 0x5]
- bl GetFieldObjectGraphicsInfo
- mov r1, sp
- ldrb r2, [r1]
- lsls r1, r2, 3
- adds r1, r2
- lsls r1, 2
- adds r1, r4
- ldrb r1, [r1, 0x4]
- lsls r2, r1, 4
- adds r2, r1
- lsls r2, 2
- ldr r1, _08128698 @ =gSprites
- adds r2, r1
- adds r1, r2, 0
- adds r1, 0x3E
- ldrb r1, [r1]
- movs r3, 0x3E
- adds r3, r5
- mov r12, r3
- movs r3, 0x4
- ands r3, r1
- mov r1, r12
- ldrb r4, [r1]
- movs r1, 0x5
- negs r1, r1
- ands r1, r4
- orrs r1, r3
- mov r3, r12
- strb r1, [r3]
- ldrh r1, [r2, 0x20]
- strh r1, [r5, 0x20]
- ldrh r0, [r0, 0xA]
- lsls r0, 16
- asrs r0, 17
- ldrh r1, [r2, 0x22]
- adds r0, r1
- subs r0, 0x10
- strh r0, [r5, 0x22]
- adds r2, 0x43
- ldrb r0, [r2]
- subs r0, 0x1
- adds r1, r5, 0
- adds r1, 0x43
- strb r0, [r1]
- ldrh r1, [r5, 0x2E]
- movs r2, 0x2E
- ldrsh r0, [r5, r2]
- cmp r0, 0x1
- bne _0812865C
- adds r0, r1, 0x1
- strh r0, [r5, 0x2E]
- adds r0, r5, 0
- movs r1, 0x1
- bl StartSpriteAnim
-_0812865C:
- movs r3, 0x2E
- ldrsh r0, [r5, r3]
- ldrh r2, [r5, 0x2E]
- cmp r0, 0x2
- bne _08128678
- adds r0, r5, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _08128678
- movs r0, 0x1
- strh r0, [r5, 0x3C]
-_08128678:
- lsls r0, r2, 16
- asrs r0, 16
- cmp r0, 0x3
- bne _0812868C
- ldrh r1, [r5, 0x30]
- lsls r1, 24
- lsrs r1, 24
- adds r0, r5, 0
- bl FieldEffectStop
-_0812868C:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08128694: .4byte gMapObjects
-_08128698: .4byte gSprites
- thumb_func_end sub_81285AC
-
- thumb_func_start sub_812869C
-sub_812869C: @ 812869C
- push {lr}
- adds r1, r0, 0
- adds r0, 0x21
- ldrb r0, [r0]
- cmp r0, 0x1
- bne _081286BA
- ldr r2, _081286C0 @ =gSprites
- ldrb r1, [r1, 0x1A]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrh r1, [r0, 0x2E]
- adds r1, 0x1
- strh r1, [r0, 0x2E]
-_081286BA:
- pop {r0}
- bx r0
- .align 2, 0
-_081286C0: .4byte gSprites
- thumb_func_end sub_812869C
-
- thumb_func_start sub_81286C4
-sub_81286C4: @ 81286C4
- push {lr}
- adds r2, r0, 0
- adds r2, 0x21
- ldrb r1, [r2]
- cmp r1, 0x2
- beq _081286FA
- cmp r1, 0
- beq _081286FA
- ldrb r1, [r0, 0x1A]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _081286EC @ =gSprites
- adds r1, r0, r1
- movs r3, 0x3C
- ldrsh r0, [r1, r3]
- cmp r0, 0
- bne _081286F0
- movs r0, 0
- b _081286FC
- .align 2, 0
-_081286EC: .4byte gSprites
-_081286F0:
- movs r0, 0x2
- strb r0, [r2]
- ldrh r0, [r1, 0x2E]
- adds r0, 0x1
- strh r0, [r1, 0x2E]
-_081286FA:
- movs r0, 0x1
-_081286FC:
- pop {r1}
- bx r1
- thumb_func_end sub_81286C4
-
- thumb_func_start FldEff_Sparkle
-FldEff_Sparkle: @ 8128700
- push {r4,lr}
- ldr r4, _08128768 @ =gUnknown_0202FF84
- ldr r0, [r4]
- adds r0, 0x7
- str r0, [r4]
- ldr r0, [r4, 0x4]
- adds r0, 0x7
- str r0, [r4, 0x4]
- adds r1, r4, 0x4
- adds r0, r4, 0
- movs r2, 0x8
- movs r3, 0x8
- bl sub_8060470
- ldr r0, _0812876C @ =gFieldEffectObjectTemplatePointers
- adds r0, 0x8C
- ldr r0, [r0]
- movs r2, 0
- ldrsh r1, [r4, r2]
- movs r3, 0x4
- ldrsh r2, [r4, r3]
- movs r3, 0x52
- bl CreateSpriteAtEnd
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x40
- beq _08128760
- ldr r0, _08128770 @ =gSprites
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r0
- movs r0, 0x3
- ldrb r2, [r4, 0x8]
- ands r2, r0
- lsls r2, 2
- ldrb r3, [r1, 0x5]
- movs r0, 0xD
- negs r0, r0
- ands r0, r3
- orrs r0, r2
- strb r0, [r1, 0x5]
- adds r1, 0x3E
- ldrb r0, [r1]
- movs r2, 0x2
- orrs r0, r2
- strb r0, [r1]
-_08128760:
- movs r0, 0
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_08128768: .4byte gUnknown_0202FF84
-_0812876C: .4byte gFieldEffectObjectTemplatePointers
-_08128770: .4byte gSprites
- thumb_func_end FldEff_Sparkle
-
- thumb_func_start sub_8128774
-sub_8128774: @ 8128774
- push {lr}
- adds r2, r0, 0
- movs r1, 0x2E
- ldrsh r0, [r2, r1]
- cmp r0, 0
- bne _081287A8
- adds r0, r2, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _081287A0
- adds r3, r2, 0
- adds r3, 0x3E
- ldrb r0, [r3]
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r3]
- ldrh r0, [r2, 0x2E]
- adds r0, 0x1
- strh r0, [r2, 0x2E]
-_081287A0:
- movs r1, 0x2E
- ldrsh r0, [r2, r1]
- cmp r0, 0
- beq _081287BE
-_081287A8:
- ldrh r0, [r2, 0x30]
- adds r0, 0x1
- strh r0, [r2, 0x30]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0x22
- ble _081287BE
- adds r0, r2, 0
- movs r1, 0x36
- bl FieldEffectStop
-_081287BE:
- pop {r0}
- bx r0
- thumb_func_end sub_8128774
-
- thumb_func_start sub_81287C4
-sub_81287C4: @ 81287C4
- push {r4,lr}
- adds r4, r0, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _081287E2
- ldrh r1, [r4, 0x30]
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl FieldEffectStop
- b _081287F8
-_081287E2:
- adds r0, r4, 0
- movs r1, 0
- bl sub_806487C
- ldrh r0, [r4, 0x2E]
- lsls r0, 24
- lsrs r0, 24
- adds r1, r4, 0
- movs r2, 0
- bl SetObjectSubpriorityByZCoord
-_081287F8:
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_81287C4
-
- thumb_func_start sub_8128800
-sub_8128800: @ 8128800
- push {lr}
- adds r2, r0, 0
- adds r0, 0x3F
- ldrb r1, [r0]
- movs r0, 0x10
- ands r0, r1
- cmp r0, 0
- beq _0812881E
- ldrh r1, [r2, 0x2E]
- lsls r1, 24
- lsrs r1, 24
- adds r0, r2, 0
- bl FieldEffectStop
- b _08128826
-_0812881E:
- adds r0, r2, 0
- movs r1, 0
- bl sub_806487C
-_08128826:
- pop {r0}
- bx r0
- thumb_func_end sub_8128800
-
- thumb_func_start sub_812882C
-sub_812882C: @ 812882C
- push {r4-r7,lr}
- adds r6, r0, 0
- adds r0, r1, 0
- lsls r0, 24
- lsrs r0, 24
- lsls r2, 24
- lsrs r2, 24
- adds r1, r6, 0
- bl SetObjectSubpriorityByZCoord
- movs r7, 0
-_08128842:
- lsls r0, r7, 3
- adds r0, r7
- lsls r0, 2
- ldr r1, _081288DC @ =gMapObjects
- adds r4, r0, r1
- ldrb r0, [r4]
- lsls r0, 31
- cmp r0, 0
- beq _081288E4
- ldrb r0, [r4, 0x5]
- bl GetFieldObjectGraphicsInfo
- ldrb r1, [r4, 0x4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- ldr r1, _081288E0 @ =gSprites
- adds r5, r0, r1
- adds r0, r6, 0
- adds r0, 0x28
- movs r2, 0
- ldrsb r2, [r0, r2]
- ldrh r0, [r6, 0x20]
- adds r1, r0, r2
- subs r0, r2
- lsls r0, 16
- lsrs r4, r0, 16
- lsls r1, 16
- asrs r1, 16
- movs r0, 0x20
- ldrsh r2, [r5, r0]
- cmp r1, r2
- bge _081288E4
- lsls r0, r4, 16
- asrs r0, 16
- cmp r0, r2
- ble _081288E4
- adds r0, r5, 0
- adds r0, 0x29
- movs r3, 0
- ldrsb r3, [r0, r3]
- ldrh r2, [r5, 0x22]
- adds r2, r3
- ldrh r4, [r5, 0x22]
- adds r0, r6, 0
- adds r0, 0x29
- movs r1, 0
- ldrsb r1, [r0, r1]
- ldrh r0, [r6, 0x22]
- subs r0, r1
- lsls r0, 16
- asrs r0, 16
- adds r3, r0, r3
- lsls r2, 16
- asrs r2, 16
- lsls r3, 16
- asrs r3, 16
- cmp r2, r3
- blt _081288BC
- cmp r2, r0
- bge _081288E4
-_081288BC:
- lsls r0, r4, 16
- asrs r0, 16
- cmp r0, r3
- ble _081288E4
- adds r2, r6, 0
- adds r2, 0x43
- adds r0, r5, 0
- adds r0, 0x43
- ldrb r1, [r0]
- ldrb r0, [r2]
- cmp r0, r1
- bhi _081288E4
- adds r0, r1, 0x2
- strb r0, [r2]
- b _081288EE
- .align 2, 0
-_081288DC: .4byte gMapObjects
-_081288E0: .4byte gSprites
-_081288E4:
- adds r0, r7, 0x1
- lsls r0, 24
- lsrs r7, r0, 24
- cmp r7, 0xF
- bls _08128842
-_081288EE:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_812882C
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/field_ground_effect.s b/asm/field_ground_effect.s
deleted file mode 100644
index 47c4b4c60..000000000
--- a/asm/field_ground_effect.s
+++ /dev/null
@@ -1,1302 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "constants/species_constants.inc"
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start FieldObjectCheckForReflectiveSurface
-FieldObjectCheckForReflectiveSurface: @ 8063A44
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- adds r5, r0, 0
- ldrb r0, [r5, 0x5]
- bl GetFieldObjectGraphicsInfo
- movs r2, 0x8
- ldrsh r1, [r0, r2]
- adds r1, 0x8
- lsls r1, 12
- lsrs r1, 16
- str r1, [sp]
- movs r1, 0xA
- ldrsh r0, [r0, r1]
- adds r0, 0x8
- lsls r0, 12
- movs r4, 0
- lsrs r2, r0, 16
- str r2, [sp, 0x4]
- asrs r0, 16
- cmp r4, r0
- blt _08063A7A
- b _08063B80
-_08063A7A:
- movs r0, 0x1
- mov r10, r0
-_08063A7E:
- movs r1, 0x10
- ldrsh r0, [r5, r1]
- movs r2, 0x12
- ldrsh r1, [r5, r2]
- add r1, r10
- lsls r4, 16
- asrs r6, r4, 16
- adds r1, r6
- bl MapGridGetMetatileBehaviorAt
- lsls r0, 24
- lsrs r0, 24
- bl GetReflectionTypeByMetatileBehavior
- lsls r0, 24
- lsrs r0, 24
- mov r9, r4
- cmp r0, 0
- bne _08063B82
- movs r1, 0x14
- ldrsh r0, [r5, r1]
- movs r2, 0x16
- ldrsh r1, [r5, r2]
- add r1, r10
- adds r1, r6
- bl MapGridGetMetatileBehaviorAt
- lsls r0, 24
- lsrs r0, 24
- bl GetReflectionTypeByMetatileBehavior
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- bne _08063B82
- movs r2, 0x1
- ldr r1, [sp]
- lsls r0, r1, 16
- asrs r1, r0, 16
- mov r8, r0
- cmp r2, r1
- bge _08063B6E
- movs r0, 0x80
- lsls r0, 9
- asrs r7, r0, 16
-_08063AD8:
- movs r1, 0x10
- ldrsh r0, [r5, r1]
- lsls r1, r2, 16
- asrs r4, r1, 16
- adds r0, r4
- movs r2, 0x12
- ldrsh r1, [r5, r2]
- adds r1, r7
- adds r1, r6
- bl MapGridGetMetatileBehaviorAt
- lsls r0, 24
- lsrs r0, 24
- bl GetReflectionTypeByMetatileBehavior
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- bne _08063B82
- movs r1, 0x10
- ldrsh r0, [r5, r1]
- subs r0, r4
- movs r2, 0x12
- ldrsh r1, [r5, r2]
- adds r1, r7
- adds r1, r6
- bl MapGridGetMetatileBehaviorAt
- lsls r0, 24
- lsrs r0, 24
- bl GetReflectionTypeByMetatileBehavior
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- bne _08063B82
- movs r1, 0x14
- ldrsh r0, [r5, r1]
- adds r0, r4
- movs r2, 0x16
- ldrsh r1, [r5, r2]
- adds r1, r7
- adds r1, r6
- bl MapGridGetMetatileBehaviorAt
- lsls r0, 24
- lsrs r0, 24
- bl GetReflectionTypeByMetatileBehavior
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- bne _08063B82
- movs r1, 0x14
- ldrsh r0, [r5, r1]
- subs r0, r4
- movs r2, 0x16
- ldrsh r1, [r5, r2]
- adds r1, r7
- adds r1, r6
- bl MapGridGetMetatileBehaviorAt
- lsls r0, 24
- lsrs r0, 24
- bl GetReflectionTypeByMetatileBehavior
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- bne _08063B82
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- cmp r0, r8
- blt _08063AD8
-_08063B6E:
- movs r1, 0x80
- lsls r1, 9
- add r1, r9
- lsrs r4, r1, 16
- ldr r2, [sp, 0x4]
- lsls r0, r2, 16
- cmp r1, r0
- bge _08063B80
- b _08063A7E
-_08063B80:
- movs r0, 0
-_08063B82:
- 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 FieldObjectCheckForReflectiveSurface
-
- thumb_func_start GetReflectionTypeByMetatileBehavior
-GetReflectionTypeByMetatileBehavior: @ 8063B94
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- adds r0, r4, 0
- bl MetatileBehavior_IsIce
- lsls r0, 24
- cmp r0, 0
- beq _08063BAA
- movs r0, 0x1
- b _08063BBC
-_08063BAA:
- adds r0, r4, 0
- bl MetatileBehavior_IsReflective
- lsls r0, 24
- cmp r0, 0
- bne _08063BBA
- movs r0, 0
- b _08063BBC
-_08063BBA:
- movs r0, 0x2
-_08063BBC:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end GetReflectionTypeByMetatileBehavior
-
- thumb_func_start GetLedgeJumpDirection
-GetLedgeJumpDirection: @ 8063BC4
- push {r4,lr}
- lsls r0, 16
- lsrs r3, r0, 16
- lsls r1, 16
- lsrs r1, 16
- lsls r2, 24
- lsrs r4, r2, 24
- cmp r4, 0
- beq _08063C0A
- cmp r4, 0x4
- bls _08063BE0
- subs r0, r4, 0x4
- lsls r0, 24
- lsrs r4, r0, 24
-_08063BE0:
- subs r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r0, r3, 16
- asrs r0, 16
- lsls r1, 16
- asrs r1, 16
- bl MapGridGetMetatileBehaviorAt
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _08063C10 @ =gUnknown_08376040
- lsls r1, r4, 2
- adds r1, r2
- ldr r1, [r1]
- bl _call_via_r1
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08063C14
-_08063C0A:
- movs r0, 0
- b _08063C1A
- .align 2, 0
-_08063C10: .4byte gUnknown_08376040
-_08063C14:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r0, 24
-_08063C1A:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end GetLedgeJumpDirection
-
- thumb_func_start FieldObjectSetSpriteOamTableForLongGrass
-FieldObjectSetSpriteOamTableForLongGrass: @ 8063C20
- push {r4-r6,lr}
- adds r5, r0, 0
- adds r4, r1, 0
- ldrb r0, [r5]
- lsls r0, 27
- cmp r0, 0
- blt _08063C74
- ldrb r0, [r5, 0x1E]
- bl MetatileBehavior_IsLongGrass
- lsls r0, 24
- cmp r0, 0
- beq _08063C74
- ldrb r0, [r5, 0x1F]
- bl MetatileBehavior_IsLongGrass
- lsls r0, 24
- cmp r0, 0
- beq _08063C74
- adds r4, 0x42
- ldrb r1, [r4]
- movs r6, 0x40
- negs r6, r6
- adds r0, r6, 0
- ands r0, r1
- movs r1, 0x4
- orrs r0, r1
- strb r0, [r4]
- ldrb r0, [r5, 0xB]
- lsrs r0, 4
- bl ZCoordToPriority
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08063C74
- ldrb r0, [r4]
- adds r1, r6, 0
- ands r1, r0
- movs r0, 0x5
- orrs r1, r0
- strb r1, [r4]
-_08063C74:
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end FieldObjectSetSpriteOamTableForLongGrass
-
- thumb_func_start IsZCoordMismatchAt
-IsZCoordMismatchAt: @ 8063C7C
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- lsls r1, 16
- lsrs r0, r1, 16
- lsls r2, 16
- lsrs r1, r2, 16
- cmp r4, 0
- beq _08063CAA
- lsls r0, 16
- asrs r0, 16
- lsls r1, 16
- asrs r1, 16
- bl MapGridGetZCoordAt
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0
- beq _08063CAA
- cmp r0, 0xF
- beq _08063CAA
- cmp r0, r4
- bne _08063CAE
-_08063CAA:
- movs r0, 0
- b _08063CB0
-_08063CAE:
- movs r0, 0x1
-_08063CB0:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end IsZCoordMismatchAt
-
- thumb_func_start FieldObjectUpdateZCoordAndPriority
-FieldObjectUpdateZCoordAndPriority: @ 8063CB8
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- ldrb r0, [r4, 0x3]
- lsls r0, 29
- cmp r0, 0
- blt _08063D06
- adds r0, r4, 0
- bl FieldObjectUpdateZCoord
- ldr r1, _08063D0C @ =gFieldObjectPriorities_08376070
- ldrb r2, [r4, 0xB]
- lsls r2, 24
- lsrs r0, r2, 28
- adds r0, r1
- ldrb r0, [r0]
- adds r4, r5, 0
- adds r4, 0x42
- movs r1, 0x3F
- ands r1, r0
- ldrb r3, [r4]
- movs r0, 0x40
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r4]
- ldr r0, _08063D10 @ =gFieldObjectPriorities_08376060
- lsrs r2, 28
- adds r2, r0
- movs r0, 0x3
- ldrb r1, [r2]
- 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]
-_08063D06:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08063D0C: .4byte gFieldObjectPriorities_08376070
-_08063D10: .4byte gFieldObjectPriorities_08376060
- thumb_func_end FieldObjectUpdateZCoordAndPriority
-
- thumb_func_start InitObjectPriorityByZCoord
-InitObjectPriorityByZCoord: @ 8063D14
- push {r4,lr}
- lsls r1, 24
- lsrs r1, 24
- ldr r2, _08063D58 @ =gFieldObjectPriorities_08376070
- adds r2, r1, r2
- ldrb r2, [r2]
- movs r3, 0x42
- adds r3, r0
- mov r12, r3
- movs r3, 0x3F
- ands r3, r2
- mov r2, r12
- ldrb r4, [r2]
- movs r2, 0x40
- negs r2, r2
- ands r2, r4
- orrs r2, r3
- mov r3, r12
- strb r2, [r3]
- ldr r2, _08063D5C @ =gFieldObjectPriorities_08376060
- adds r1, r2
- movs r3, 0x3
- ldrb r2, [r1]
- ands r2, r3
- lsls r2, 2
- ldrb r3, [r0, 0x5]
- movs r1, 0xD
- negs r1, r1
- ands r1, r3
- orrs r1, r2
- strb r1, [r0, 0x5]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08063D58: .4byte gFieldObjectPriorities_08376070
-_08063D5C: .4byte gFieldObjectPriorities_08376060
- thumb_func_end InitObjectPriorityByZCoord
-
- thumb_func_start ZCoordToPriority
-ZCoordToPriority: @ 8063D60
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _08063D6C @ =gFieldObjectPriorities_08376060
- adds r0, r1
- ldrb r0, [r0]
- bx lr
- .align 2, 0
-_08063D6C: .4byte gFieldObjectPriorities_08376060
- thumb_func_end ZCoordToPriority
-
- thumb_func_start FieldObjectUpdateZCoord
-FieldObjectUpdateZCoord: @ 8063D70
- push {r4,r5,lr}
- adds r4, r0, 0
- movs r1, 0x10
- ldrsh r0, [r4, r1]
- movs r2, 0x12
- ldrsh r1, [r4, r2]
- bl MapGridGetZCoordAt
- lsls r0, 24
- lsrs r5, r0, 24
- movs r1, 0x14
- ldrsh r0, [r4, r1]
- movs r2, 0x16
- ldrsh r1, [r4, r2]
- bl MapGridGetZCoordAt
- lsls r0, 24
- lsrs r0, 24
- cmp r5, 0xF
- beq _08063DBE
- cmp r0, 0xF
- beq _08063DBE
- movs r3, 0xF
- adds r0, r5, 0
- ands r0, r3
- ldrb r1, [r4, 0xB]
- movs r2, 0x10
- negs r2, r2
- ands r2, r1
- orrs r2, r0
- strb r2, [r4, 0xB]
- cmp r5, 0
- beq _08063DBE
- cmp r5, 0xF
- beq _08063DBE
- lsls r0, r5, 4
- ands r2, r3
- orrs r2, r0
- strb r2, [r4, 0xB]
-_08063DBE:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end FieldObjectUpdateZCoord
-
- thumb_func_start SetObjectSubpriorityByZCoord
-SetObjectSubpriorityByZCoord: @ 8063DC4
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r2, 24
- lsrs r2, 24
- adds r3, r1, 0
- adds r3, 0x29
- movs r5, 0
- ldrsb r5, [r3, r5]
- ldrh r4, [r1, 0x22]
- ldr r3, _08063E04 @ =gSpriteCoordOffsetY
- subs r4, r5
- ldrh r3, [r3]
- adds r4, r3
- adds r4, 0x8
- movs r3, 0xFF
- ands r4, r3
- lsrs r4, 4
- movs r3, 0x10
- subs r3, r4
- lsls r3, 17
- ldr r4, _08063E08 @ =gUnknown_08376050
- adds r0, r4
- lsrs r3, 16
- ldrb r0, [r0]
- adds r3, r0
- adds r2, r3
- adds r1, 0x43
- strb r2, [r1]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08063E04: .4byte gSpriteCoordOffsetY
-_08063E08: .4byte gUnknown_08376050
- thumb_func_end SetObjectSubpriorityByZCoord
-
- thumb_func_start FieldObjectUpdateSubpriority
-FieldObjectUpdateSubpriority: @ 8063E0C
- push {lr}
- adds r2, r0, 0
- ldrb r0, [r2, 0x3]
- lsls r0, 29
- cmp r0, 0
- blt _08063E22
- ldrb r0, [r2, 0xB]
- lsrs r0, 4
- movs r2, 0x1
- bl SetObjectSubpriorityByZCoord
-_08063E22:
- pop {r0}
- bx r0
- thumb_func_end FieldObjectUpdateSubpriority
-
- thumb_func_start AreZCoordsCompatible
-AreZCoordsCompatible: @ 8063E28
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 24
- cmp r0, 0
- beq _08063E3E
- cmp r1, 0
- beq _08063E3E
- cmp r0, r1
- bne _08063E42
-_08063E3E:
- movs r0, 0x1
- b _08063E44
-_08063E42:
- movs r0, 0
-_08063E44:
- pop {r1}
- bx r1
- thumb_func_end AreZCoordsCompatible
-
- thumb_func_start GroundEffect_SpawnOnTallGrass
-GroundEffect_SpawnOnTallGrass: @ 8063E48
- push {lr}
- ldr r3, _08063E8C @ =gUnknown_0202FF84
- movs r2, 0x10
- ldrsh r1, [r0, r2]
- str r1, [r3]
- movs r2, 0x12
- ldrsh r1, [r0, r2]
- str r1, [r3, 0x4]
- ldrb r1, [r0, 0xB]
- lsrs r1, 4
- str r1, [r3, 0x8]
- movs r1, 0x2
- str r1, [r3, 0xC]
- ldrb r1, [r0, 0x8]
- lsls r1, 8
- ldrb r2, [r0, 0x9]
- orrs r1, r2
- str r1, [r3, 0x10]
- ldrb r0, [r0, 0xA]
- str r0, [r3, 0x14]
- ldr r1, _08063E90 @ =gSaveBlock1
- ldrb r0, [r1, 0x5]
- lsls r0, 8
- ldrb r1, [r1, 0x4]
- orrs r0, r1
- str r0, [r3, 0x18]
- movs r0, 0x1
- str r0, [r3, 0x1C]
- movs r0, 0x4
- bl FieldEffectStart
- pop {r0}
- bx r0
- .align 2, 0
-_08063E8C: .4byte gUnknown_0202FF84
-_08063E90: .4byte gSaveBlock1
- thumb_func_end GroundEffect_SpawnOnTallGrass
-
- thumb_func_start sub_8063E94
-sub_8063E94: @ 8063E94
- push {lr}
- ldr r3, _08063ED8 @ =gUnknown_0202FF84
- movs r2, 0x10
- ldrsh r1, [r0, r2]
- str r1, [r3]
- movs r2, 0x12
- ldrsh r1, [r0, r2]
- str r1, [r3, 0x4]
- ldrb r1, [r0, 0xB]
- lsrs r1, 4
- str r1, [r3, 0x8]
- movs r1, 0x2
- str r1, [r3, 0xC]
- ldrb r1, [r0, 0x8]
- lsls r1, 8
- ldrb r2, [r0, 0x9]
- orrs r1, r2
- str r1, [r3, 0x10]
- ldrb r0, [r0, 0xA]
- str r0, [r3, 0x14]
- ldr r1, _08063EDC @ =gSaveBlock1
- ldrb r0, [r1, 0x5]
- lsls r0, 8
- ldrb r1, [r1, 0x4]
- orrs r0, r1
- str r0, [r3, 0x18]
- movs r0, 0
- str r0, [r3, 0x1C]
- movs r0, 0x4
- bl FieldEffectStart
- pop {r0}
- bx r0
- .align 2, 0
-_08063ED8: .4byte gUnknown_0202FF84
-_08063EDC: .4byte gSaveBlock1
- thumb_func_end sub_8063E94
-
- thumb_func_start sub_8063EE0
-sub_8063EE0: @ 8063EE0
- push {lr}
- ldr r3, _08063F24 @ =gUnknown_0202FF84
- movs r2, 0x10
- ldrsh r1, [r0, r2]
- str r1, [r3]
- movs r2, 0x12
- ldrsh r1, [r0, r2]
- str r1, [r3, 0x4]
- ldrb r1, [r0, 0xB]
- lsrs r1, 4
- str r1, [r3, 0x8]
- movs r1, 0x2
- str r1, [r3, 0xC]
- ldrb r1, [r0, 0x8]
- lsls r1, 8
- ldrb r2, [r0, 0x9]
- orrs r1, r2
- str r1, [r3, 0x10]
- ldrb r0, [r0, 0xA]
- str r0, [r3, 0x14]
- ldr r1, _08063F28 @ =gSaveBlock1
- ldrb r0, [r1, 0x5]
- lsls r0, 8
- ldrb r1, [r1, 0x4]
- orrs r0, r1
- str r0, [r3, 0x18]
- movs r0, 0x1
- str r0, [r3, 0x1C]
- movs r0, 0x11
- bl FieldEffectStart
- pop {r0}
- bx r0
- .align 2, 0
-_08063F24: .4byte gUnknown_0202FF84
-_08063F28: .4byte gSaveBlock1
- thumb_func_end sub_8063EE0
-
- thumb_func_start sub_8063F2C
-sub_8063F2C: @ 8063F2C
- push {lr}
- ldr r3, _08063F70 @ =gUnknown_0202FF84
- movs r2, 0x10
- ldrsh r1, [r0, r2]
- str r1, [r3]
- movs r2, 0x12
- ldrsh r1, [r0, r2]
- str r1, [r3, 0x4]
- ldrb r1, [r0, 0xB]
- lsrs r1, 4
- str r1, [r3, 0x8]
- movs r1, 0x2
- str r1, [r3, 0xC]
- ldrb r1, [r0, 0x8]
- lsls r1, 8
- ldrb r2, [r0, 0x9]
- orrs r1, r2
- str r1, [r3, 0x10]
- ldrb r0, [r0, 0xA]
- str r0, [r3, 0x14]
- ldr r1, _08063F74 @ =gSaveBlock1
- ldrb r0, [r1, 0x5]
- lsls r0, 8
- ldrb r1, [r1, 0x4]
- orrs r0, r1
- str r0, [r3, 0x18]
- movs r0, 0
- str r0, [r3, 0x1C]
- movs r0, 0x11
- bl FieldEffectStart
- pop {r0}
- bx r0
- .align 2, 0
-_08063F70: .4byte gUnknown_0202FF84
-_08063F74: .4byte gSaveBlock1
- thumb_func_end sub_8063F2C
-
- thumb_func_start GroundEffect_WaterReflection
-GroundEffect_WaterReflection: @ 8063F78
- push {lr}
- movs r2, 0
- bl SetUpReflection
- pop {r0}
- bx r0
- thumb_func_end GroundEffect_WaterReflection
-
- thumb_func_start GroundEffect_IceReflection
-GroundEffect_IceReflection: @ 8063F84
- push {lr}
- movs r2, 0x1
- bl SetUpReflection
- pop {r0}
- bx r0
- thumb_func_end GroundEffect_IceReflection
-
- thumb_func_start GroundEffect_FlowingWater
-GroundEffect_FlowingWater: @ 8063F90
- push {lr}
- adds r1, r0, 0
- movs r0, 0x22
- bl oe_exec_and_other_stuff
- pop {r0}
- bx r0
- thumb_func_end GroundEffect_FlowingWater
-
- thumb_func_start sub_8063FA0
-sub_8063FA0: @ 8063FA0
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- ldrb r0, [r4, 0x5]
- bl GetFieldObjectGraphicsInfo
- ldr r1, _08063FC8 @ =gUnknown_08376080
- ldrb r0, [r0, 0xD]
- lsls r0, 2
- adds r0, r1
- ldr r3, [r0]
- adds r0, r4, 0
- adds r1, r5, 0
- movs r2, 0
- bl _call_via_r3
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08063FC8: .4byte gUnknown_08376080
- thumb_func_end sub_8063FA0
-
- thumb_func_start sub_8063FCC
-sub_8063FCC: @ 8063FCC
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- ldrb r0, [r4, 0x5]
- bl GetFieldObjectGraphicsInfo
- ldr r1, _08063FF4 @ =gUnknown_08376080
- ldrb r0, [r0, 0xD]
- lsls r0, 2
- adds r0, r1
- ldr r3, [r0]
- adds r0, r4, 0
- adds r1, r5, 0
- movs r2, 0x1
- bl _call_via_r3
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08063FF4: .4byte gUnknown_08376080
- thumb_func_end sub_8063FCC
-
- thumb_func_start nullsub_50
-nullsub_50: @ 8063FF8
- bx lr
- thumb_func_end nullsub_50
-
- thumb_func_start DoTracksGroundEffect_Footprints
-DoTracksGroundEffect_Footprints: @ 8063FFC
- push {r4,r5,lr}
- sub sp, 0x4
- adds r5, r0, 0
- lsls r4, r2, 24
- lsrs r4, 24
- ldr r1, _08064044 @ =gSandFootprints_FieldEffectData
- mov r0, sp
- movs r2, 0x4
- bl memcpy
- ldr r1, _08064048 @ =gUnknown_0202FF84
- movs r2, 0x14
- ldrsh r0, [r5, r2]
- str r0, [r1]
- movs r2, 0x16
- ldrsh r0, [r5, r2]
- str r0, [r1, 0x4]
- movs r0, 0x95
- str r0, [r1, 0x8]
- movs r0, 0x2
- str r0, [r1, 0xC]
- ldrb r0, [r5, 0x18]
- lsls r0, 28
- lsrs r0, 28
- str r0, [r1, 0x10]
- lsls r4, 1
- mov r1, sp
- adds r0, r1, r4
- ldrb r0, [r0]
- bl FieldEffectStart
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08064044: .4byte gSandFootprints_FieldEffectData
-_08064048: .4byte gUnknown_0202FF84
- thumb_func_end DoTracksGroundEffect_Footprints
-
- thumb_func_start DoTracksGroundEffect_BikeTireTracks
-DoTracksGroundEffect_BikeTireTracks: @ 806404C
- push {r4,lr}
- adds r4, r0, 0
- ldr r1, [r4, 0x10]
- ldr r0, [r4, 0x14]
- cmp r1, r0
- beq _0806408E
- ldr r2, _08064094 @ =gUnknown_0202FF84
- movs r1, 0x14
- ldrsh r0, [r4, r1]
- str r0, [r2]
- movs r1, 0x16
- ldrsh r0, [r4, r1]
- str r0, [r2, 0x4]
- movs r0, 0x95
- str r0, [r2, 0x8]
- movs r0, 0x2
- str r0, [r2, 0xC]
- ldr r3, _08064098 @ =gBikeTireTracks_Transitions
- ldrb r1, [r4, 0x18]
- lsls r1, 28
- lsrs r1, 28
- adds r0, r4, 0
- adds r0, 0x20
- ldrb r0, [r0]
- lsls r0, 2
- subs r0, 0x5
- adds r1, r0
- adds r1, r3
- ldrb r0, [r1]
- str r0, [r2, 0x10]
- movs r0, 0x23
- bl FieldEffectStart
-_0806408E:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08064094: .4byte gUnknown_0202FF84
-_08064098: .4byte gBikeTireTracks_Transitions
- thumb_func_end DoTracksGroundEffect_BikeTireTracks
-
- thumb_func_start GroundEffect_Ripple
-GroundEffect_Ripple: @ 806409C
- push {lr}
- bl DoRippleFieldEffect
- pop {r0}
- bx r0
- thumb_func_end GroundEffect_Ripple
-
- thumb_func_start GroundEffect_StepOnPuddle
-GroundEffect_StepOnPuddle: @ 80640A8
- push {lr}
- adds r1, r0, 0
- movs r0, 0xF
- bl oe_exec_and_other_stuff
- pop {r0}
- bx r0
- thumb_func_end GroundEffect_StepOnPuddle
-
- thumb_func_start GroundEffect_SandPile
-GroundEffect_SandPile: @ 80640B8
- push {lr}
- adds r1, r0, 0
- movs r0, 0x27
- bl oe_exec_and_other_stuff
- pop {r0}
- bx r0
- thumb_func_end GroundEffect_SandPile
-
- thumb_func_start GroundEffect_JumpOnTallGrass
-GroundEffect_JumpOnTallGrass: @ 80640C8
- push {r4-r7,lr}
- sub sp, 0x4
- adds r5, r0, 0
- adds r6, r1, 0
- ldr r1, _0806411C @ =gUnknown_0202FF84
- movs r2, 0x10
- ldrsh r0, [r5, r2]
- str r0, [r1]
- movs r4, 0x12
- ldrsh r0, [r5, r4]
- str r0, [r1, 0x4]
- ldrb r0, [r5, 0xB]
- lsrs r0, 4
- str r0, [r1, 0x8]
- movs r0, 0x2
- str r0, [r1, 0xC]
- movs r0, 0xC
- bl FieldEffectStart
- ldrb r0, [r5, 0x8]
- ldrb r1, [r5, 0x9]
- ldrb r2, [r5, 0xA]
- movs r7, 0x10
- ldrsh r3, [r5, r7]
- movs r7, 0x12
- ldrsh r4, [r5, r7]
- str r4, [sp]
- bl sub_8126FF0
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x40
- bne _08064112
- adds r0, r5, 0
- adds r1, r6, 0
- bl GroundEffect_SpawnOnTallGrass
-_08064112:
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0806411C: .4byte gUnknown_0202FF84
- thumb_func_end GroundEffect_JumpOnTallGrass
-
- thumb_func_start GroundEffect_JumpOnLongGrass
-GroundEffect_JumpOnLongGrass: @ 8064120
- push {lr}
- ldr r2, _08064144 @ =gUnknown_0202FF84
- movs r3, 0x10
- ldrsh r1, [r0, r3]
- str r1, [r2]
- movs r3, 0x12
- ldrsh r1, [r0, r3]
- str r1, [r2, 0x4]
- ldrb r0, [r0, 0xB]
- lsrs r0, 4
- str r0, [r2, 0x8]
- movs r0, 0x2
- str r0, [r2, 0xC]
- movs r0, 0x12
- bl FieldEffectStart
- pop {r0}
- bx r0
- .align 2, 0
-_08064144: .4byte gUnknown_0202FF84
- thumb_func_end GroundEffect_JumpOnLongGrass
-
- thumb_func_start GroundEffect_JumpOnShallowWater
-GroundEffect_JumpOnShallowWater: @ 8064148
- push {r4,lr}
- ldr r3, _08064174 @ =gUnknown_0202FF84
- movs r4, 0x10
- ldrsh r2, [r0, r4]
- str r2, [r3]
- movs r4, 0x12
- ldrsh r2, [r0, r4]
- str r2, [r3, 0x4]
- ldrb r0, [r0, 0xB]
- lsrs r0, 4
- str r0, [r3, 0x8]
- ldrb r0, [r1, 0x5]
- lsls r0, 28
- lsrs r0, 30
- str r0, [r3, 0xC]
- movs r0, 0x10
- bl FieldEffectStart
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08064174: .4byte gUnknown_0202FF84
- thumb_func_end GroundEffect_JumpOnShallowWater
-
- thumb_func_start GroundEffect_JumpOnWater
-GroundEffect_JumpOnWater: @ 8064178
- push {r4,lr}
- ldr r3, _080641A4 @ =gUnknown_0202FF84
- movs r4, 0x10
- ldrsh r2, [r0, r4]
- str r2, [r3]
- movs r4, 0x12
- ldrsh r2, [r0, r4]
- str r2, [r3, 0x4]
- ldrb r0, [r0, 0xB]
- lsrs r0, 4
- str r0, [r3, 0x8]
- ldrb r0, [r1, 0x5]
- lsls r0, 28
- lsrs r0, 30
- str r0, [r3, 0xC]
- movs r0, 0xE
- bl FieldEffectStart
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080641A4: .4byte gUnknown_0202FF84
- thumb_func_end GroundEffect_JumpOnWater
-
- thumb_func_start GroundEffect_JumpLandingDust
-GroundEffect_JumpLandingDust: @ 80641A8
- push {r4,lr}
- ldr r3, _080641D4 @ =gUnknown_0202FF84
- movs r4, 0x10
- ldrsh r2, [r0, r4]
- str r2, [r3]
- movs r4, 0x12
- ldrsh r2, [r0, r4]
- str r2, [r3, 0x4]
- ldrb r0, [r0, 0xB]
- lsrs r0, 4
- str r0, [r3, 0x8]
- ldrb r0, [r1, 0x5]
- lsls r0, 28
- lsrs r0, 30
- str r0, [r3, 0xC]
- movs r0, 0xA
- bl FieldEffectStart
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080641D4: .4byte gUnknown_0202FF84
- thumb_func_end GroundEffect_JumpLandingDust
-
- thumb_func_start GroundEffect_ShortGrass
-GroundEffect_ShortGrass: @ 80641D8
- push {lr}
- adds r1, r0, 0
- movs r0, 0x29
- bl oe_exec_and_other_stuff
- pop {r0}
- bx r0
- thumb_func_end GroundEffect_ShortGrass
-
- thumb_func_start GroundEffect_HotSprings
-GroundEffect_HotSprings: @ 80641E8
- push {lr}
- adds r1, r0, 0
- movs r0, 0x2A
- bl oe_exec_and_other_stuff
- pop {r0}
- bx r0
- thumb_func_end GroundEffect_HotSprings
-
- thumb_func_start GroundEffect_Seaweed
-GroundEffect_Seaweed: @ 80641F8
- push {lr}
- ldr r2, _08064214 @ =gUnknown_0202FF84
- movs r3, 0x10
- ldrsh r1, [r0, r3]
- str r1, [r2]
- movs r1, 0x12
- ldrsh r0, [r0, r1]
- str r0, [r2, 0x4]
- movs r0, 0x35
- bl FieldEffectStart
- pop {r0}
- bx r0
- .align 2, 0
-_08064214: .4byte gUnknown_0202FF84
- thumb_func_end GroundEffect_Seaweed
-
- thumb_func_start sub_8064218
-sub_8064218: @ 8064218
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- adds r7, r0, 0
- adds r6, r1, 0
- adds r5, r2, 0
- movs r4, 0
- ldr r0, _08064258 @ =gUnknown_083760A0
- mov r8, r0
-_0806422A:
- movs r0, 0x1
- ands r0, r5
- cmp r0, 0
- beq _08064240
- lsls r0, r4, 2
- add r0, r8
- ldr r2, [r0]
- adds r0, r7, 0
- adds r1, r6, 0
- bl _call_via_r2
-_08064240:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- lsrs r5, 1
- cmp r4, 0x13
- bls _0806422A
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08064258: .4byte gUnknown_083760A0
- thumb_func_end sub_8064218
-
- thumb_func_start filters_out_some_ground_effects
-filters_out_some_ground_effects: @ 806425C
- push {lr}
- adds r2, r0, 0
- adds r3, r1, 0
- ldrb r0, [r2]
- lsls r0, 27
- cmp r0, 0
- bge _0806428A
- ldrb r1, [r2, 0x2]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- movs r1, 0x11
- negs r1, r1
- ands r0, r1
- adds r1, 0x8
- ands r0, r1
- subs r1, 0x18
- ands r0, r1
- strb r0, [r2, 0x2]
- ldr r0, [r3]
- ldr r1, _08064290 @ =0xfff9f7bd
- ands r0, r1
- str r0, [r3]
-_0806428A:
- pop {r0}
- bx r0
- .align 2, 0
-_08064290: .4byte 0xfff9f7bd
- thumb_func_end filters_out_some_ground_effects
-
- thumb_func_start FilterOutStepOnPuddleGroundEffectIfJumping
-FilterOutStepOnPuddleGroundEffectIfJumping: @ 8064294
- push {lr}
- adds r2, r1, 0
- ldrb r0, [r0]
- lsls r0, 26
- cmp r0, 0
- bge _080642A8
- ldr r0, [r2]
- ldr r1, _080642AC @ =0xfffffbff
- ands r0, r1
- str r0, [r2]
-_080642A8:
- pop {r0}
- bx r0
- .align 2, 0
-_080642AC: .4byte 0xfffffbff
- thumb_func_end FilterOutStepOnPuddleGroundEffectIfJumping
-
- thumb_func_start DoGroundEffects_OnSpawn
-DoGroundEffects_OnSpawn: @ 80642B0
- push {r4,r5,lr}
- sub sp, 0x4
- adds r4, r0, 0
- adds r5, r1, 0
- ldrb r0, [r4]
- lsls r0, 29
- cmp r0, 0
- bge _080642F4
- movs r0, 0
- str r0, [sp]
- adds r0, r4, 0
- bl FieldObjectUpdateZCoordAndPriority
- adds r0, r4, 0
- mov r1, sp
- bl GetAllGroundEffectFlags_OnSpawn
- adds r0, r4, 0
- adds r1, r5, 0
- bl FieldObjectSetSpriteOamTableForLongGrass
- ldr r2, [sp]
- adds r0, r4, 0
- adds r1, r5, 0
- bl sub_8064218
- ldrb r1, [r4]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- movs r1, 0x11
- negs r1, r1
- ands r0, r1
- strb r0, [r4]
-_080642F4:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end DoGroundEffects_OnSpawn
-
- thumb_func_start DoGroundEffects_OnBeginStep
-DoGroundEffects_OnBeginStep: @ 80642FC
- push {r4,r5,lr}
- sub sp, 0x4
- adds r4, r0, 0
- adds r5, r1, 0
- ldrb r0, [r4]
- lsls r0, 29
- cmp r0, 0
- bge _08064348
- movs r0, 0
- str r0, [sp]
- adds r0, r4, 0
- bl FieldObjectUpdateZCoordAndPriority
- adds r0, r4, 0
- mov r1, sp
- bl GetAllGroundEffectFlags_OnBeginStep
- adds r0, r4, 0
- adds r1, r5, 0
- bl FieldObjectSetSpriteOamTableForLongGrass
- adds r0, r4, 0
- mov r1, sp
- bl filters_out_some_ground_effects
- ldr r2, [sp]
- adds r0, r4, 0
- adds r1, r5, 0
- bl sub_8064218
- ldrb r1, [r4]
- movs r0, 0x5
- negs r0, r0
- ands r0, r1
- movs r1, 0x11
- negs r1, r1
- ands r0, r1
- strb r0, [r4]
-_08064348:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end DoGroundEffects_OnBeginStep
-
- thumb_func_start DoGroundEffects_OnFinishStep
-DoGroundEffects_OnFinishStep: @ 8064350
- push {r4,r5,lr}
- sub sp, 0x4
- adds r4, r0, 0
- adds r5, r1, 0
- ldrb r0, [r4]
- lsls r0, 28
- cmp r0, 0
- bge _0806439C
- movs r0, 0
- str r0, [sp]
- adds r0, r4, 0
- bl FieldObjectUpdateZCoordAndPriority
- adds r0, r4, 0
- mov r1, sp
- bl GetAllGroundEffectFlags_OnFinishStep
- adds r0, r4, 0
- adds r1, r5, 0
- bl FieldObjectSetSpriteOamTableForLongGrass
- adds r0, r4, 0
- mov r1, sp
- bl FilterOutStepOnPuddleGroundEffectIfJumping
- ldr r2, [sp]
- adds r0, r4, 0
- adds r1, r5, 0
- bl sub_8064218
- ldrb r1, [r4]
- movs r0, 0x9
- negs r0, r0
- ands r0, r1
- movs r1, 0x21
- negs r1, r1
- ands r0, r1
- strb r0, [r4]
-_0806439C:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end DoGroundEffects_OnFinishStep
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/field_map_obj.s b/asm/field_map_obj.s
deleted file mode 100644
index c8c402217..000000000
--- a/asm/field_map_obj.s
+++ /dev/null
@@ -1,628 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "constants/species_constants.inc"
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
-.ifndef NONMATCHING
- thumb_func_start sub_805F3EC
-sub_805F3EC: @ 805F3EC
- movs r0, 0
- bx lr
- thumb_func_end sub_805F3EC
-
- thumb_func_start sub_805F3F0
-sub_805F3F0: @ 805F3F0
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- lsls r2, 24
- lsrs r2, 24
- ldr r1, _0805F434 @ =gUnknown_0836DC09
- ldrb r0, [r4, 0x6]
- adds r0, r1
- ldrb r0, [r0]
- adds r1, r4, 0
- adds r1, 0x21
- ldrb r1, [r1]
- bl state_to_direction
- bl GetFaceDirectionAnimId
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- adds r0, r4, 0
- adds r1, r5, 0
- bl FieldObjectSetRegularAnim
- ldrb r0, [r4]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r4]
- movs r0, 0x2
- strh r0, [r5, 0x30]
- movs r0, 0x1
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_0805F434: .4byte gUnknown_0836DC09
- thumb_func_end sub_805F3F0
-
- thumb_func_start sub_805F438
-sub_805F438: @ 805F438
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- adds r4, r0, 0
- adds r7, r1, 0
- mov r8, r3
- lsls r2, 24
- lsrs r6, r2, 24
- ldr r1, _0805F4EC @ =gUnknown_0836DC09
- ldrb r0, [r4, 0x6]
- adds r0, r1
- ldrb r0, [r0]
- adds r1, r4, 0
- adds r1, 0x21
- ldrb r1, [r1]
- adds r2, r6, 0
- bl state_to_direction
- adds r6, r0, 0
- mov r5, sp
- adds r5, 0x2
- adds r0, r4, 0
- adds r1, r6, 0
- mov r2, sp
- adds r3, r5, 0
- bl FieldObjectMoveDestCoords
- adds r0, r6, 0
- bl GetGoSpeed0AnimId
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- adds r0, r4, 0
- adds r1, r7, 0
- bl FieldObjectSetRegularAnim
- mov r0, sp
- movs r2, 0
- ldrsh r1, [r0, r2]
- movs r0, 0
- ldrsh r2, [r5, r0]
- adds r0, r4, 0
- adds r3, r6, 0
- bl npc_block_way
- lsls r0, 24
- cmp r0, 0
- bne _0805F4BE
- mov r1, r8
- cmp r1, 0
- beq _0805F4D2
- mov r0, sp
- movs r2, 0
- ldrsh r0, [r0, r2]
- movs r2, 0
- ldrsh r1, [r5, r2]
- bl MapGridGetMetatileBehaviorAt
- lsls r0, 24
- lsrs r0, 24
- bl _call_via_r8
- lsls r0, 24
- cmp r0, 0
- bne _0805F4D2
-_0805F4BE:
- adds r0, r6, 0
- bl GetFaceDirectionAnimId
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- adds r0, r4, 0
- adds r1, r7, 0
- bl FieldObjectSetRegularAnim
-_0805F4D2:
- ldrb r0, [r4]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r4]
- movs r0, 0x2
- strh r0, [r7, 0x30]
- movs r0, 0x1
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0805F4EC: .4byte gUnknown_0836DC09
- thumb_func_end sub_805F438
-.endif
-
- thumb_func_start sub_805F4F0
-sub_805F4F0: @ 805F4F0
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- adds r4, r0, 0
- adds r7, r1, 0
- mov r8, r3
- lsls r2, 24
- lsrs r6, r2, 24
- ldr r1, _0805F5A4 @ =gUnknown_0836DC09
- ldrb r0, [r4, 0x6]
- adds r0, r1
- ldrb r0, [r0]
- adds r1, r4, 0
- adds r1, 0x21
- ldrb r1, [r1]
- adds r2, r6, 0
- bl state_to_direction
- adds r6, r0, 0
- mov r5, sp
- adds r5, 0x2
- adds r0, r4, 0
- adds r1, r6, 0
- mov r2, sp
- adds r3, r5, 0
- bl FieldObjectMoveDestCoords
- adds r0, r6, 0
- bl sub_8060744
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- adds r0, r4, 0
- adds r1, r7, 0
- bl FieldObjectSetRegularAnim
- mov r0, sp
- movs r2, 0
- ldrsh r1, [r0, r2]
- movs r0, 0
- ldrsh r2, [r5, r0]
- adds r0, r4, 0
- adds r3, r6, 0
- bl npc_block_way
- lsls r0, 24
- cmp r0, 0
- bne _0805F576
- mov r1, r8
- cmp r1, 0
- beq _0805F58A
- mov r0, sp
- movs r2, 0
- ldrsh r0, [r0, r2]
- movs r2, 0
- ldrsh r1, [r5, r2]
- bl MapGridGetMetatileBehaviorAt
- lsls r0, 24
- lsrs r0, 24
- bl _call_via_r8
- lsls r0, 24
- cmp r0, 0
- bne _0805F58A
-_0805F576:
- adds r0, r6, 0
- bl GetFaceDirectionAnimId
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- adds r0, r4, 0
- adds r1, r7, 0
- bl FieldObjectSetRegularAnim
-_0805F58A:
- ldrb r0, [r4]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r4]
- movs r0, 0x2
- strh r0, [r7, 0x30]
- movs r0, 0x1
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0805F5A4: .4byte gUnknown_0836DC09
- thumb_func_end sub_805F4F0
-
- thumb_func_start sub_805F5A8
-sub_805F5A8: @ 805F5A8
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- adds r4, r0, 0
- adds r7, r1, 0
- mov r8, r3
- lsls r2, 24
- lsrs r6, r2, 24
- ldr r1, _0805F65C @ =gUnknown_0836DC09
- ldrb r0, [r4, 0x6]
- adds r0, r1
- ldrb r0, [r0]
- adds r1, r4, 0
- adds r1, 0x21
- ldrb r1, [r1]
- adds r2, r6, 0
- bl state_to_direction
- adds r6, r0, 0
- mov r5, sp
- adds r5, 0x2
- adds r0, r4, 0
- adds r1, r6, 0
- mov r2, sp
- adds r3, r5, 0
- bl FieldObjectMoveDestCoords
- adds r0, r6, 0
- bl sub_806079C
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- adds r0, r4, 0
- adds r1, r7, 0
- bl FieldObjectSetRegularAnim
- mov r0, sp
- movs r2, 0
- ldrsh r1, [r0, r2]
- movs r0, 0
- ldrsh r2, [r5, r0]
- adds r0, r4, 0
- adds r3, r6, 0
- bl npc_block_way
- lsls r0, 24
- cmp r0, 0
- bne _0805F62E
- mov r1, r8
- cmp r1, 0
- beq _0805F642
- mov r0, sp
- movs r2, 0
- ldrsh r0, [r0, r2]
- movs r2, 0
- ldrsh r1, [r5, r2]
- bl MapGridGetMetatileBehaviorAt
- lsls r0, 24
- lsrs r0, 24
- bl _call_via_r8
- lsls r0, 24
- cmp r0, 0
- bne _0805F642
-_0805F62E:
- adds r0, r6, 0
- bl GetFaceDirectionAnimId
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- adds r0, r4, 0
- adds r1, r7, 0
- bl FieldObjectSetRegularAnim
-_0805F642:
- ldrb r0, [r4]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r4]
- movs r0, 0x2
- strh r0, [r7, 0x30]
- movs r0, 0x1
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0805F65C: .4byte gUnknown_0836DC09
- thumb_func_end sub_805F5A8
-
- thumb_func_start sub_805F660
-sub_805F660: @ 805F660
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- adds r4, r0, 0
- adds r7, r1, 0
- mov r8, r3
- lsls r2, 24
- lsrs r6, r2, 24
- ldr r1, _0805F714 @ =gUnknown_0836DC09
- ldrb r0, [r4, 0x6]
- adds r0, r1
- ldrb r0, [r0]
- adds r1, r4, 0
- adds r1, 0x21
- ldrb r1, [r1]
- adds r2, r6, 0
- bl state_to_direction
- adds r6, r0, 0
- mov r5, sp
- adds r5, 0x2
- adds r0, r4, 0
- adds r1, r6, 0
- mov r2, sp
- adds r3, r5, 0
- bl FieldObjectMoveDestCoords
- adds r0, r6, 0
- bl sub_80607C8
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- adds r0, r4, 0
- adds r1, r7, 0
- bl FieldObjectSetRegularAnim
- mov r0, sp
- movs r2, 0
- ldrsh r1, [r0, r2]
- movs r0, 0
- ldrsh r2, [r5, r0]
- adds r0, r4, 0
- adds r3, r6, 0
- bl npc_block_way
- lsls r0, 24
- cmp r0, 0
- bne _0805F6E6
- mov r1, r8
- cmp r1, 0
- beq _0805F6FA
- mov r0, sp
- movs r2, 0
- ldrsh r0, [r0, r2]
- movs r2, 0
- ldrsh r1, [r5, r2]
- bl MapGridGetMetatileBehaviorAt
- lsls r0, 24
- lsrs r0, 24
- bl _call_via_r8
- lsls r0, 24
- cmp r0, 0
- bne _0805F6FA
-_0805F6E6:
- adds r0, r6, 0
- bl GetFaceDirectionAnimId
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- adds r0, r4, 0
- adds r1, r7, 0
- bl FieldObjectSetRegularAnim
-_0805F6FA:
- ldrb r0, [r4]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r4]
- movs r0, 0x2
- strh r0, [r7, 0x30]
- movs r0, 0x1
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0805F714: .4byte gUnknown_0836DC09
- thumb_func_end sub_805F660
-
- thumb_func_start cph_IM_DIFFERENT
-cph_IM_DIFFERENT: @ 805F718
- push {r4,r5,lr}
- adds r4, r0, 0
- adds r5, r1, 0
- lsls r2, 24
- lsrs r2, 24
- ldr r1, _0805F75C @ =gUnknown_0836DC09
- ldrb r0, [r4, 0x6]
- adds r0, r1
- ldrb r0, [r0]
- adds r1, r4, 0
- adds r1, 0x21
- ldrb r1, [r1]
- bl state_to_direction
- bl sub_806084C
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- adds r0, r4, 0
- adds r1, r5, 0
- bl FieldObjectSetRegularAnim
- ldrb r0, [r4]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r4]
- movs r0, 0x2
- strh r0, [r5, 0x30]
- movs r0, 0x1
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_0805F75C: .4byte gUnknown_0836DC09
- thumb_func_end cph_IM_DIFFERENT
-
- thumb_func_start sub_805F760
-sub_805F760: @ 805F760
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- adds r4, r0, 0
- adds r7, r1, 0
- mov r8, r3
- lsls r2, 24
- lsrs r6, r2, 24
- ldr r1, _0805F814 @ =gUnknown_0836DC09
- ldrb r0, [r4, 0x6]
- adds r0, r1
- ldrb r0, [r0]
- adds r1, r4, 0
- adds r1, 0x21
- ldrb r1, [r1]
- adds r2, r6, 0
- bl state_to_direction
- adds r6, r0, 0
- mov r5, sp
- adds r5, 0x2
- adds r0, r4, 0
- adds r1, r6, 0
- mov r2, sp
- adds r3, r5, 0
- bl FieldObjectMoveDestCoords
- adds r0, r6, 0
- bl sub_80608A4
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- adds r0, r4, 0
- adds r1, r7, 0
- bl FieldObjectSetRegularAnim
- mov r0, sp
- movs r2, 0
- ldrsh r1, [r0, r2]
- movs r0, 0
- ldrsh r2, [r5, r0]
- adds r0, r4, 0
- adds r3, r6, 0
- bl npc_block_way
- lsls r0, 24
- cmp r0, 0
- bne _0805F7E6
- mov r1, r8
- cmp r1, 0
- beq _0805F7FA
- mov r0, sp
- movs r2, 0
- ldrsh r0, [r0, r2]
- movs r2, 0
- ldrsh r1, [r5, r2]
- bl MapGridGetMetatileBehaviorAt
- lsls r0, 24
- lsrs r0, 24
- bl _call_via_r8
- lsls r0, 24
- cmp r0, 0
- bne _0805F7FA
-_0805F7E6:
- adds r0, r6, 0
- bl GetFaceDirectionAnimId
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- adds r0, r4, 0
- adds r1, r7, 0
- bl FieldObjectSetRegularAnim
-_0805F7FA:
- ldrb r0, [r4]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r4]
- movs r0, 0x2
- strh r0, [r7, 0x30]
- movs r0, 0x1
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0805F814: .4byte gUnknown_0836DC09
- thumb_func_end sub_805F760
-
- thumb_func_start oac_hopping
-oac_hopping: @ 805F818
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x8
- adds r4, r0, 0
- adds r7, r1, 0
- mov r8, r3
- lsls r2, 24
- lsrs r6, r2, 24
- ldr r1, _0805F8DC @ =gUnknown_0836DC09
- ldrb r0, [r4, 0x6]
- adds r0, r1
- ldrb r0, [r0]
- adds r1, r4, 0
- adds r1, 0x21
- ldrb r1, [r1]
- adds r2, r6, 0
- bl state_to_direction
- adds r6, r0, 0
- ldrh r1, [r4, 0x10]
- add r0, sp, 0x4
- strh r1, [r0]
- ldrh r0, [r4, 0x12]
- mov r5, sp
- adds r5, 0x6
- strh r0, [r5]
- movs r0, 0x2
- str r0, [sp]
- adds r0, r6, 0
- add r1, sp, 0x4
- adds r2, r5, 0
- movs r3, 0x2
- bl sub_8060320
- adds r0, r6, 0
- bl GetJumpLedgeAnimId
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- adds r0, r4, 0
- adds r1, r7, 0
- bl FieldObjectSetRegularAnim
- add r0, sp, 0x4
- movs r2, 0
- ldrsh r1, [r0, r2]
- movs r0, 0
- ldrsh r2, [r5, r0]
- adds r0, r4, 0
- adds r3, r6, 0
- bl npc_block_way
- lsls r0, 24
- cmp r0, 0
- bne _0805F8AC
- mov r1, r8
- cmp r1, 0
- beq _0805F8C0
- add r0, sp, 0x4
- movs r2, 0
- ldrsh r0, [r0, r2]
- movs r2, 0
- ldrsh r1, [r5, r2]
- bl MapGridGetMetatileBehaviorAt
- lsls r0, 24
- lsrs r0, 24
- bl _call_via_r8
- lsls r0, 24
- cmp r0, 0
- bne _0805F8C0
-_0805F8AC:
- adds r0, r6, 0
- bl GetFaceDirectionAnimId
- adds r2, r0, 0
- lsls r2, 24
- lsrs r2, 24
- adds r0, r4, 0
- adds r1, r7, 0
- bl FieldObjectSetRegularAnim
-_0805F8C0:
- ldrb r0, [r4]
- movs r1, 0x2
- orrs r0, r1
- strb r0, [r4]
- movs r0, 0x2
- strh r0, [r7, 0x30]
- movs r0, 0x1
- add sp, 0x8
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_0805F8DC: .4byte gUnknown_0836DC09
- thumb_func_end oac_hopping
diff --git a/asm/fldeff_80C5CD4.s b/asm/fldeff_80C5CD4.s
index 33182fc6a..011ce6427 100644
--- a/asm/fldeff_80C5CD4.s
+++ b/asm/fldeff_80C5CD4.s
@@ -741,7 +741,7 @@ _080C627C: .4byte gMapHeader
thumb_func_start sub_80C6280
sub_80C6280: @ 80C6280
push {lr}
- ldr r1, _080C6294 @ =gUnknown_0202FF84
+ ldr r1, _080C6294 @ =gFieldEffectArguments
ldr r0, [r1, 0x4]
cmp r0, 0x2
beq _080C62AA
@@ -751,7 +751,7 @@ sub_80C6280: @ 80C6280
beq _080C62A2
b _080C62BE
.align 2, 0
-_080C6294: .4byte gUnknown_0202FF84
+_080C6294: .4byte gFieldEffectArguments
_080C6298:
cmp r0, 0x3
beq _080C62AE
@@ -815,7 +815,7 @@ SetUpFieldMove_SecretPower: @ 80C62C4
bne _080C6330
bl sub_80C6264
ldr r1, _080C6320 @ =gFieldCallback
- ldr r0, _080C6324 @ =sub_808AB90
+ ldr r0, _080C6324 @ =FieldCallback_Teleport
str r0, [r1]
ldr r1, _080C6328 @ =gUnknown_03005CE4
ldr r0, _080C632C @ =sub_80C639C
@@ -824,7 +824,7 @@ SetUpFieldMove_SecretPower: @ 80C62C4
_080C6318: .4byte gScriptResult
_080C631C: .4byte gUnknown_0203923C
_080C6320: .4byte gFieldCallback
-_080C6324: .4byte sub_808AB90
+_080C6324: .4byte FieldCallback_Teleport
_080C6328: .4byte gUnknown_03005CE4
_080C632C: .4byte sub_80C639C
_080C6330:
@@ -836,14 +836,14 @@ _080C6330:
bne _080C6360
bl sub_80C6264
ldr r1, _080C6350 @ =gFieldCallback
- ldr r0, _080C6354 @ =sub_808AB90
+ ldr r0, _080C6354 @ =FieldCallback_Teleport
str r0, [r1]
ldr r1, _080C6358 @ =gUnknown_03005CE4
ldr r0, _080C635C @ =sub_80C64A8
b _080C6380
.align 2, 0
_080C6350: .4byte gFieldCallback
-_080C6354: .4byte sub_808AB90
+_080C6354: .4byte FieldCallback_Teleport
_080C6358: .4byte gUnknown_03005CE4
_080C635C: .4byte sub_80C64A8
_080C6360:
@@ -859,7 +859,7 @@ _080C636E:
_080C6372:
bl sub_80C6264
ldr r1, _080C638C @ =gFieldCallback
- ldr r0, _080C6390 @ =sub_808AB90
+ ldr r0, _080C6390 @ =FieldCallback_Teleport
str r0, [r1]
ldr r1, _080C6394 @ =gUnknown_03005CE4
ldr r0, _080C6398 @ =sub_80C660C
@@ -872,7 +872,7 @@ _080C6384:
bx r1
.align 2, 0
_080C638C: .4byte gFieldCallback
-_080C6390: .4byte sub_808AB90
+_080C6390: .4byte FieldCallback_Teleport
_080C6394: .4byte gUnknown_03005CE4
_080C6398: .4byte sub_80C660C
thumb_func_end SetUpFieldMove_SecretPower
@@ -880,7 +880,7 @@ _080C6398: .4byte sub_80C660C
thumb_func_start sub_80C639C
sub_80C639C: @ 80C639C
push {lr}
- ldr r1, _080C63B0 @ =gUnknown_0202FF84
+ ldr r1, _080C63B0 @ =gFieldEffectArguments
ldr r0, _080C63B4 @ =gLastFieldPokeMenuOpened
ldrb r0, [r0]
str r0, [r1]
@@ -889,7 +889,7 @@ sub_80C639C: @ 80C639C
pop {r0}
bx r0
.align 2, 0
-_080C63B0: .4byte gUnknown_0202FF84
+_080C63B0: .4byte gFieldEffectArguments
_080C63B4: .4byte gLastFieldPokeMenuOpened
_080C63B8: .4byte gUnknown_081A2CE6
thumb_func_end sub_80C639C
@@ -943,7 +943,7 @@ FldEff_SecretPowerCave: @ 80C63FC
ldrh r1, [r2, 0x2]
lsls r1, 23
lsrs r1, 23
- ldr r4, _080C6448 @ =gUnknown_0202FF84
+ ldr r4, _080C6448 @ =gFieldEffectArguments
ldr r3, [r4, 0x14]
adds r1, r3
lsls r1, 16
@@ -963,7 +963,7 @@ FldEff_SecretPowerCave: @ 80C63FC
_080C643C: .4byte gSpriteTemplate_83D2614
_080C6440: .4byte gSprites
_080C6444: .4byte gPlayerAvatar
-_080C6448: .4byte gUnknown_0202FF84
+_080C6448: .4byte gFieldEffectArguments
thumb_func_end FldEff_SecretPowerCave
thumb_func_start sub_80C644C
@@ -1025,7 +1025,7 @@ sub_80C6498: @ 80C6498
thumb_func_start sub_80C64A8
sub_80C64A8: @ 80C64A8
push {lr}
- ldr r1, _080C64BC @ =gUnknown_0202FF84
+ ldr r1, _080C64BC @ =gFieldEffectArguments
ldr r0, _080C64C0 @ =gLastFieldPokeMenuOpened
ldrb r0, [r0]
str r0, [r1]
@@ -1034,7 +1034,7 @@ sub_80C64A8: @ 80C64A8
pop {r0}
bx r0
.align 2, 0
-_080C64BC: .4byte gUnknown_0202FF84
+_080C64BC: .4byte gFieldEffectArguments
_080C64C0: .4byte gLastFieldPokeMenuOpened
_080C64C4: .4byte gUnknown_081A2D3E
thumb_func_end sub_80C64A8
@@ -1088,13 +1088,13 @@ FldEff_SecretPowerTree: @ 80C6508
ands r2, r0
cmp r2, 0x96
bne _080C652A
- ldr r1, _080C6588 @ =gUnknown_0202FF84
+ ldr r1, _080C6588 @ =gFieldEffectArguments
movs r0, 0
str r0, [r1, 0x1C]
_080C652A:
cmp r2, 0x9C
bne _080C6534
- ldr r1, _080C6588 @ =gUnknown_0202FF84
+ ldr r1, _080C6588 @ =gFieldEffectArguments
movs r0, 0x2
str r0, [r1, 0x1C]
_080C6534:
@@ -1110,7 +1110,7 @@ _080C6534:
ldrh r1, [r2, 0x2]
lsls r1, 23
lsrs r1, 23
- ldr r4, _080C6588 @ =gUnknown_0202FF84
+ ldr r4, _080C6588 @ =gFieldEffectArguments
ldr r3, [r4, 0x14]
adds r1, r3
lsls r1, 16
@@ -1137,7 +1137,7 @@ _080C6576:
.align 2, 0
_080C6580: .4byte gUnknown_0203923C
_080C6584: .4byte 0x00000fff
-_080C6588: .4byte gUnknown_0202FF84
+_080C6588: .4byte gFieldEffectArguments
_080C658C: .4byte gSpriteTemplate_83D262C
_080C6590: .4byte gSprites
_080C6594: .4byte gPlayerAvatar
@@ -1149,7 +1149,7 @@ sub_80C6598: @ 80C6598
adds r4, r0, 0
movs r0, 0x9B
bl PlaySE
- ldr r0, _080C65BC @ =gUnknown_0202FF84
+ ldr r0, _080C65BC @ =gFieldEffectArguments
ldr r1, [r0, 0x1C]
adds r2, r4, 0
adds r2, 0x2A
@@ -1162,7 +1162,7 @@ sub_80C6598: @ 80C6598
pop {r0}
bx r0
.align 2, 0
-_080C65BC: .4byte gUnknown_0202FF84
+_080C65BC: .4byte gFieldEffectArguments
_080C65C0: .4byte sub_80C65C4
thumb_func_end sub_80C6598
@@ -1177,7 +1177,7 @@ sub_80C65C4: @ 80C65C4
asrs r0, 16
cmp r0, 0x27
ble _080C65EE
- ldr r0, _080C65F4 @ =gUnknown_0202FF84
+ ldr r0, _080C65F4 @ =gFieldEffectArguments
ldr r0, [r0, 0x1C]
cmp r0, 0
beq _080C65E2
@@ -1195,7 +1195,7 @@ _080C65EE:
pop {r0}
bx r0
.align 2, 0
-_080C65F4: .4byte gUnknown_0202FF84
+_080C65F4: .4byte gFieldEffectArguments
_080C65F8: .4byte sub_80C65FC
thumb_func_end sub_80C65C4
@@ -1212,7 +1212,7 @@ sub_80C65FC: @ 80C65FC
thumb_func_start sub_80C660C
sub_80C660C: @ 80C660C
push {lr}
- ldr r1, _080C6620 @ =gUnknown_0202FF84
+ ldr r1, _080C6620 @ =gFieldEffectArguments
ldr r0, _080C6624 @ =gLastFieldPokeMenuOpened
ldrb r0, [r0]
str r0, [r1]
@@ -1221,7 +1221,7 @@ sub_80C660C: @ 80C660C
pop {r0}
bx r0
.align 2, 0
-_080C6620: .4byte gUnknown_0202FF84
+_080C6620: .4byte gFieldEffectArguments
_080C6624: .4byte gLastFieldPokeMenuOpened
_080C6628: .4byte gUnknown_081A2D96
thumb_func_end sub_80C660C
@@ -1275,7 +1275,7 @@ FldEff_SecretPowerShrub: @ 80C666C
ldrh r1, [r2, 0x2]
lsls r1, 23
lsrs r1, 23
- ldr r4, _080C66B8 @ =gUnknown_0202FF84
+ ldr r4, _080C66B8 @ =gFieldEffectArguments
ldr r3, [r4, 0x14]
adds r1, r3
lsls r1, 16
@@ -1295,7 +1295,7 @@ FldEff_SecretPowerShrub: @ 80C666C
_080C66AC: .4byte gSpriteTemplate_83D2644
_080C66B0: .4byte gSprites
_080C66B4: .4byte gPlayerAvatar
-_080C66B8: .4byte gUnknown_0202FF84
+_080C66B8: .4byte gFieldEffectArguments
thumb_func_end FldEff_SecretPowerShrub
thumb_func_start sub_80C66BC
@@ -2103,7 +2103,7 @@ FldEff_SandPillar: @ 80C6D3C
mov r0, sp
adds r1, r4, 0
bl GetXYCoordsOneStepInFrontOfPlayer
- ldr r1, _080C6D78 @ =gUnknown_0202FF84
+ ldr r1, _080C6D78 @ =gFieldEffectArguments
mov r0, sp
movs r2, 0
ldrsh r0, [r0, r2]
@@ -2122,7 +2122,7 @@ FldEff_SandPillar: @ 80C6D3C
beq _080C6D86
b _080C6E4C
.align 2, 0
-_080C6D78: .4byte gUnknown_0202FF84
+_080C6D78: .4byte gFieldEffectArguments
_080C6D7C:
cmp r0, 0x3
beq _080C6DEC
@@ -2240,7 +2240,7 @@ SpriteCB_SandPillar_0: @ 80C6E64
adds r5, r0, 0
movs r0, 0x83
bl PlaySE
- ldr r4, _080C6E90 @ =gUnknown_0202FF84
+ ldr r4, _080C6E90 @ =gFieldEffectArguments
ldr r0, [r4, 0x14]
ldr r1, [r4, 0x18]
subs r1, 0x1
@@ -2255,7 +2255,7 @@ SpriteCB_SandPillar_0: @ 80C6E64
bl MapGridSetMetatileIdAt
b _080C6EAA
.align 2, 0
-_080C6E90: .4byte gUnknown_0202FF84
+_080C6E90: .4byte gFieldEffectArguments
_080C6E94: .4byte 0x00000286
_080C6E98: .4byte 0x00000e02
_080C6E9C:
@@ -2266,7 +2266,7 @@ _080C6E9C:
lsls r2, 2
bl MapGridSetMetatileIdAt
_080C6EAA:
- ldr r4, _080C6ED8 @ =gUnknown_0202FF84
+ ldr r4, _080C6ED8 @ =gFieldEffectArguments
ldr r0, [r4, 0x14]
ldr r1, [r4, 0x18]
ldr r2, _080C6EDC @ =0x0000020a
@@ -2286,7 +2286,7 @@ _080C6EAA:
pop {r0}
bx r0
.align 2, 0
-_080C6ED8: .4byte gUnknown_0202FF84
+_080C6ED8: .4byte gFieldEffectArguments
_080C6EDC: .4byte 0x0000020a
_080C6EE0: .4byte SpriteCB_SandPillar_1
thumb_func_end SpriteCB_SandPillar_0
@@ -2304,7 +2304,7 @@ SpriteCB_SandPillar_1: @ 80C6EE4
strh r0, [r5, 0x2E]
b _080C6F14
_080C6EF8:
- ldr r4, _080C6F1C @ =gUnknown_0202FF84
+ ldr r4, _080C6F1C @ =gFieldEffectArguments
ldr r0, [r4, 0x14]
ldr r1, [r4, 0x18]
ldr r2, _080C6F20 @ =0x00000e8c
@@ -2321,7 +2321,7 @@ _080C6F14:
pop {r0}
bx r0
.align 2, 0
-_080C6F1C: .4byte gUnknown_0202FF84
+_080C6F1C: .4byte gFieldEffectArguments
_080C6F20: .4byte 0x00000e8c
_080C6F24: .4byte SpriteCB_SandPillar_2
thumb_func_end SpriteCB_SandPillar_1
diff --git a/asm/macros/event.inc b/asm/macros/event.inc
index cd2927c66..9fddd9194 100644
--- a/asm/macros/event.inc
+++ b/asm/macros/event.inc
@@ -1493,6 +1493,12 @@
callstd \type
.endm
+ @ Message box types
+ MSGBOX_YESNO = 5
+
+ YES = 1
+ NO = 0
+
.macro giveitem item, amount=1, function=0
setorcopyvar 0x8000, \item
setorcopyvar 0x8001, \amount
diff --git a/asm/mauville_old_man.s b/asm/mauville_old_man.s
deleted file mode 100644
index 726de6fc1..000000000
--- a/asm/mauville_old_man.s
+++ /dev/null
@@ -1,1522 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "constants/species_constants.inc"
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_80F7DC0
-sub_80F7DC0: @ 80F7DC0
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x18
- ldr r1, _080F7E84 @ =gUnknown_083E53C8
- mov r0, sp
- movs r2, 0x18
- bl memcpy
- movs r5, 0
- movs r0, 0x2
- add r0, sp
- mov r8, r0
- ldr r1, _080F7E88 @ =gSaveBlock1 + 0x2D94
- adds r1, 0x18
- adds r3, r1, 0
-_080F7DE4:
- adds r0, r3, r5
- strb r5, [r0]
- adds r0, r5, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r5, 0x7
- bls _080F7DE4
- movs r5, 0
- ldr r2, _080F7E88 @ =gSaveBlock1 + 0x2D94
- adds r2, 0x4
- mov r9, r2
- adds r6, r1, 0
-_080F7DFC:
- 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 _080F7DFC
- movs r3, 0
- mov r10, r3
- movs r5, 0
-_080F7E2A:
- lsls r4, r5, 2
- mov r1, sp
- adds r0, r1, r4
- ldrb r0, [r0]
- bl sub_80EAE88
- 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 _080F7E2A
- movs r0, 0
- ldr r2, _080F7E88 @ =gSaveBlock1 + 0x2D94
- strb r0, [r2, 0x2]
- movs r7, 0
- movs r5, 0
-_080F7E56:
- bl Random
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0xA
- bl __umodsi3
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r1, 0x2
- bhi _080F7E90
- cmp r7, 0x7
- bhi _080F7E90
- lsls r0, r5, 1
- add r0, r9
- ldr r1, _080F7E8C @ =0x0000ffff
- strh r1, [r0]
- adds r0, r7, 0x1
- lsls r0, 16
- lsrs r7, r0, 16
- adds r4, r5, 0x1
- b _080F7EE2
- .align 2, 0
-_080F7E84: .4byte gUnknown_083E53C8
-_080F7E88: .4byte gSaveBlock1 + 0x2D94
-_080F7E8C: .4byte 0x0000ffff
-_080F7E90:
- 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 _080F7ECC
- mov r3, r8
- ldrh r0, [r3]
- b _080F7EC2
-_080F7EB2:
- adds r0, r1, 0x1
- lsls r0, 16
- lsrs r1, r0, 16
- cmp r5, 0x5
- bhi _080F7ECC
- lsls r0, r1, 2
- adds r0, r3, r0
- ldrh r0, [r0]
-_080F7EC2:
- subs r0, r2, r0
- lsls r0, 16
- lsrs r2, r0, 16
- cmp r0, 0
- bgt _080F7EB2
-_080F7ECC:
- cmp r1, 0x6
- bne _080F7ED2
- movs r1, 0
-_080F7ED2:
- lsls r0, r1, 2
- add r0, sp
- ldrh r0, [r0]
- bl sub_80EB784
- mov r2, r9
- adds r1, r2, r6
- strh r0, [r1]
-_080F7EE2:
- lsls r0, r4, 16
- lsrs r5, r0, 16
- cmp r5, 0x9
- bls _080F7E56
- 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_80F7DC0
-
- thumb_func_start sub_80F7EFC
-sub_80F7EFC: @ 80F7EFC
- ldr r0, _080F7F08 @ =gSaveBlock1 + 0x2D94
- adds r0, 0x29
- movs r1, 0
- strb r1, [r0]
- bx lr
- .align 2, 0
-_080F7F08: .4byte gSaveBlock1 + 0x2D94
- thumb_func_end sub_80F7EFC
-
- thumb_func_start sub_80F7F0C
-sub_80F7F0C: @ 80F7F0C
- ldr r1, _080F7F14 @ =gSaveBlock1 + 0x2D94
- movs r0, 0
- strb r0, [r1, 0x1]
- bx lr
- .align 2, 0
-_080F7F14: .4byte gSaveBlock1 + 0x2D94
- thumb_func_end sub_80F7F0C
-
- thumb_func_start sub_80F7F18
-sub_80F7F18: @ 80F7F18
- push {lr}
- bl sub_8109A20
- pop {r0}
- bx r0
- thumb_func_end sub_80F7F18
-
- thumb_func_start sub_80F7F24
-sub_80F7F24: @ 80F7F24
- push {lr}
- bl sub_80F8428
- pop {r0}
- bx r0
- thumb_func_end sub_80F7F24
-
- thumb_func_start sub_80F7F30
-sub_80F7F30: @ 80F7F30
- push {lr}
- bl GetCurrentMauvilleOldMan
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x4
- bhi _080F7F76
- lsls r0, 2
- ldr r1, _080F7F48 @ =_080F7F4C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080F7F48: .4byte _080F7F4C
- .align 2, 0
-_080F7F4C:
- .4byte _080F7F60
- .4byte _080F7F66
- .4byte _080F7F72
- .4byte _080F7F6C
- .4byte _080F7F76
-_080F7F60:
- bl sub_80F7EFC
- b _080F7F76
-_080F7F66:
- bl sub_80F7F0C
- b _080F7F76
-_080F7F6C:
- bl sub_80F7F24
- b _080F7F76
-_080F7F72:
- bl sub_80F7F18
-_080F7F76:
- bl sub_80F83D0
- pop {r0}
- bx r0
- thumb_func_end sub_80F7F30
-
- thumb_func_start sub_80F7F80
-sub_80F7F80: @ 80F7F80
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, _080F7FA8 @ =sub_80F8184
- movs r1, 0x50
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _080F7FAC @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- strh r4, [r1, 0x12]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080F7FA8: .4byte sub_80F8184
-_080F7FAC: .4byte gTasks
- thumb_func_end sub_80F7F80
-
- thumb_func_start sub_80F7FB0
-sub_80F7FB0: @ 80F7FB0
- push {r4-r7,lr}
- adds r6, r1, 0
- movs r1, 0x8
- ldrsh r0, [r0, r1]
- cmp r0, 0x5
- bls _080F7FBE
- b _080F817A
-_080F7FBE:
- lsls r0, 2
- ldr r1, _080F7FC8 @ =_080F7FCC
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080F7FC8: .4byte _080F7FCC
- .align 2, 0
-_080F7FCC:
- .4byte _080F7FE4
- .4byte _080F817A
- .4byte _080F8040
- .4byte _080F8074
- .4byte _080F8074
- .4byte _080F817A
-_080F7FE4:
- ldr r2, _080F8034 @ =gSaveBlock1 + 0x2D94
- ldr r0, _080F8038 @ =gSpecialVar_0x8004
- ldrh r0, [r0]
- adds r1, r2, 0
- adds r1, 0xE
- cmp r0, 0
- bne _080F7FF4
- adds r1, r2, 0x2
-_080F7FF4:
- adds r2, r1, 0
- adds r1, r6, 0
- adds r1, 0xC
- movs r3, 0x5
-_080F7FFC:
- ldrh r0, [r2]
- strh r0, [r1]
- adds r2, 0x2
- adds r1, 0x2
- subs r3, 0x1
- cmp r3, 0
- bge _080F7FFC
- ldr r2, _080F803C @ =0x0000ffff
- adds r4, r2, 0
- movs r2, 0
- adds r1, r6, 0
- adds r1, 0x18
- movs r3, 0x5
-_080F8016:
- ldrh r0, [r1]
- orrs r0, r4
- strh r0, [r1]
- strh r2, [r1, 0x2]
- strh r2, [r1, 0x4]
- strh r2, [r1, 0x6]
- adds r1, 0x8
- subs r3, 0x1
- cmp r3, 0
- bge _080F8016
- movs r0, 0
- strb r0, [r6]
- strb r0, [r6, 0x1]
- strh r0, [r6, 0x4]
- b _080F817A
- .align 2, 0
-_080F8034: .4byte gSaveBlock1 + 0x2D94
-_080F8038: .4byte gSpecialVar_0x8004
-_080F803C: .4byte 0x0000ffff
-_080F8040:
- ldrb r1, [r6]
- lsls r1, 1
- adds r0, r6, 0
- adds r0, 0xC
- adds r0, r1
- ldrh r4, [r0]
- lsrs r0, r4, 9
- ldr r1, _080F8070 @ =0x000001ff
- ands r1, r4
- bl sub_814A2D0
- adds r1, r0, 0
- movs r0, 0
- strh r0, [r6, 0x4]
- movs r2, 0x3
- ands r2, r4
- lsrs r4, 3
- movs r0, 0x1
- ands r4, r0
- adds r2, r4
- adds r0, r6, 0
- bl sub_814A2EC
- b _080F817A
- .align 2, 0
-_080F8070: .4byte 0x000001ff
-_080F8074:
- ldrb r1, [r6, 0x1]
- lsls r0, r1, 3
- adds r0, 0x18
- adds r7, r6, r0
- ldrb r0, [r6, 0x3]
- cmp r0, 0x1
- beq _080F8124
- cmp r0, 0x1
- bgt _080F808C
- cmp r0, 0
- beq _080F8092
- b _080F817A
-_080F808C:
- cmp r0, 0xFE
- beq _080F8170
- b _080F817A
-_080F8092:
- ldrb r0, [r6, 0x2]
- cmp r0, 0
- bne _080F80D0
- cmp r1, 0x6
- beq _080F80A2
- ldrh r0, [r7]
- cmp r0, 0xFF
- bne _080F80A6
-_080F80A2:
- movs r0, 0xFE
- b _080F8178
-_080F80A6:
- ldrh r0, [r7, 0x2]
- strb r0, [r6, 0x2]
- ldrh r0, [r7]
- cmp r0, 0x32
- bhi _080F80CA
- movs r1, 0x3
- bl __udivsi3
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- lsls r0, r1, 1
- adds r0, r1
- adds r0, 0xF9
- lsls r0, 16
- lsrs r0, 16
- bl m4aSongNumStart
-_080F80CA:
- movs r0, 0x1
- strb r0, [r6, 0x3]
- b _080F8114
-_080F80D0:
- ldrh r1, [r6, 0xA]
- movs r2, 0xA
- ldrsh r0, [r6, r2]
- cmp r0, 0xA
- ble _080F80E0
- ldrh r0, [r6, 0x6]
- subs r0, 0x2
- strh r0, [r6, 0x6]
-_080F80E0:
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080F80EE
- ldrh r0, [r6, 0x8]
- adds r0, 0x40
- b _080F80F2
-_080F80EE:
- ldrh r0, [r6, 0x8]
- subs r0, 0x40
-_080F80F2:
- strh r0, [r6, 0x8]
- ldr r4, _080F811C @ =gMPlay_SE2
- ldr r5, _080F8120 @ =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]
-_080F8114:
- ldrb r0, [r6, 0x2]
- subs r0, 0x1
- strb r0, [r6, 0x2]
- b _080F817A
- .align 2, 0
-_080F811C: .4byte gMPlay_SE2
-_080F8120: .4byte 0x0000ffff
-_080F8124:
- adds r0, r1, 0x1
- movs r1, 0
- strb r0, [r6, 0x1]
- strb r1, [r6, 0x3]
- ldrh r0, [r7]
- cmp r0, 0x32
- bhi _080F817A
- ldrh r0, [r7, 0x6]
- lsls r0, 4
- movs r1, 0x80
- lsls r1, 1
- adds r0, r1
- strh r0, [r6, 0x6]
- ldr r4, _080F8168 @ =gMPlay_SE2
- ldr r5, _080F816C @ =0x0000ffff
- ldrh r2, [r6, 0x6]
- adds r0, r4, 0
- adds r1, r5, 0
- bl m4aMPlayVolumeControl
- movs r2, 0x80
- lsls r2, 2
- adds r0, r2, 0
- ldrh r7, [r7, 0x4]
- adds r0, r7
- strh r0, [r6, 0x8]
- movs r0, 0x8
- ldrsh r2, [r6, r0]
- adds r0, r4, 0
- adds r1, r5, 0
- bl m4aMPlayPitchControl
- b _080F817A
- .align 2, 0
-_080F8168: .4byte gMPlay_SE2
-_080F816C: .4byte 0x0000ffff
-_080F8170:
- ldr r0, _080F8180 @ =gMPlay_SE2
- bl m4aMPlayStop
- movs r0, 0xFF
-_080F8178:
- strb r0, [r6, 0x3]
-_080F817A:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080F8180: .4byte gMPlay_SE2
- thumb_func_end sub_80F7FB0
-
- thumb_func_start sub_80F8184
-sub_80F8184: @ 80F8184
- push {r4-r7,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- ldr r1, _080F81B4 @ =gTasks
- adds r5, r0, r1
- ldr r1, _080F81B8 @ =gUnknown_03005DA0
- adds r0, r5, 0
- bl sub_80F7FB0
- movs r1, 0x8
- ldrsh r0, [r5, r1]
- cmp r0, 0x5
- bls _080F81A8
- b _080F83C8
-_080F81A8:
- lsls r0, 2
- ldr r1, _080F81BC @ =_080F81C0
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080F81B4: .4byte gTasks
-_080F81B8: .4byte gUnknown_03005DA0
-_080F81BC: .4byte _080F81C0
- .align 2, 0
-_080F81C0:
- .4byte _080F81D8
- .4byte _080F8218
- .4byte _080F8228
- .4byte _080F82D8
- .4byte _080F83B8
- .4byte _080F82C6
-_080F81D8:
- bl sub_80F7BA0
- ldr r4, _080F820C @ =gMenuWindowPtr
- ldr r0, [r4]
- ldr r1, _080F8210 @ =gWindowConfig_81E6CE4
- bl InitWindowFromConfig
- ldr r0, [r4]
- ldr r1, _080F8214 @ =gStringVar4
- movs r2, 0xF
- str r2, [sp]
- movs r2, 0x2
- movs r3, 0x4
- bl sub_8002EB0
- 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 _080F83C6
- .align 2, 0
-_080F820C: .4byte gMenuWindowPtr
-_080F8210: .4byte gWindowConfig_81E6CE4
-_080F8214: .4byte gStringVar4
-_080F8218:
- bl IsBGMPausedOrStopped
- lsls r0, 24
- cmp r0, 0
- bne _080F8224
- b _080F83C8
-_080F8224:
- movs r0, 0x2
- b _080F83C6
-_080F8228:
- ldr r4, _080F8240 @ =gSaveBlock1 + 0x2D94
- movs r2, 0xE
- ldrsh r1, [r5, r2]
- ldr r0, _080F8244 @ =gStringVar4
- adds r1, r0
- movs r3, 0
- ldrb r0, [r1]
- ldr r7, _080F8248 @ =gUnknown_03005DA0
- ldrh r2, [r5, 0x12]
- ldr r6, _080F824C @ =gUnknown_020388BC
- b _080F825A
- .align 2, 0
-_080F8240: .4byte gSaveBlock1 + 0x2D94
-_080F8244: .4byte gStringVar4
-_080F8248: .4byte gUnknown_03005DA0
-_080F824C: .4byte gUnknown_020388BC
-_080F8250:
- adds r1, 0x1
- adds r0, r3, 0x1
- lsls r0, 16
- lsrs r3, r0, 16
- ldrb r0, [r1]
-_080F825A:
- cmp r0, 0
- beq _080F826A
- cmp r0, 0xFE
- beq _080F826A
- cmp r0, 0xFC
- beq _080F826A
- cmp r0, 0xFF
- bne _080F8250
-_080F826A:
- cmp r2, 0
- bne _080F8278
- movs r0, 0x10
- ldrsh r1, [r5, r0]
- lsls r1, 1
- adds r0, r4, 0x2
- b _080F8282
-_080F8278:
- movs r2, 0x10
- ldrsh r1, [r5, r2]
- lsls r1, 1
- adds r0, r4, 0
- adds r0, 0xE
-_080F8282:
- 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 _080F82AC
- movs r0, 0x1
- strh r0, [r7, 0x4]
-_080F82AC:
- ldrh r0, [r5, 0x10]
- adds r0, 0x1
- strh r0, [r5, 0x10]
- movs r2, 0xC
- ldrsh r0, [r5, r2]
- cmp r0, 0
- bne _080F82BE
- movs r0, 0x3
- b _080F82C0
-_080F82BE:
- movs r0, 0x5
-_080F82C0:
- strh r0, [r5, 0x8]
- strh r1, [r5, 0xA]
- b _080F83C8
-_080F82C6:
- ldrh r1, [r5, 0xC]
- movs r2, 0xC
- ldrsh r0, [r5, r2]
- cmp r0, 0
- bne _080F82D2
- b _080F83C4
-_080F82D2:
- subs r0, r1, 0x1
- strh r0, [r5, 0xC]
- b _080F83C8
-_080F82D8:
- ldr r1, _080F8304 @ =gStringVar4
- movs r2, 0xE
- ldrsh r0, [r5, r2]
- adds r0, r1
- ldrb r4, [r0]
- cmp r4, 0xFF
- bne _080F830C
- movs r0, 0xC8
- lsls r0, 1
- movs r1, 0x6
- bl FadeInNewBGM
- ldr r0, _080F8308 @ =gMPlay_SE2
- movs r1, 0x2
- bl m4aMPlayFadeOutTemporarily
- bl EnableBothScriptContexts
- adds r0, r6, 0
- bl DestroyTask
- b _080F83C8
- .align 2, 0
-_080F8304: .4byte gStringVar4
-_080F8308: .4byte gMPlay_SE2
-_080F830C:
- cmp r4, 0
- bne _080F832C
- ldr r0, _080F8328 @ =gMenuWindowPtr
- ldr r0, [r0]
- bl sub_8003418
- ldrh r0, [r5, 0xE]
- adds r0, 0x1
- strh r0, [r5, 0xE]
- movs r0, 0x2
- strh r0, [r5, 0x8]
- strh r4, [r5, 0xC]
- b _080F83C8
- .align 2, 0
-_080F8328: .4byte gMenuWindowPtr
-_080F832C:
- cmp r4, 0xFE
- bne _080F8340
- 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 _080F83C8
-_080F8340:
- cmp r4, 0xFC
- bne _080F8354
- 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 _080F83C8
-_080F8354:
- cmp r4, 0x37
- bne _080F8374
- movs r4, 0
- strb r4, [r0]
- ldr r0, _080F8370 @ =gMenuWindowPtr
- ldr r0, [r0]
- bl sub_8003418
- ldrh r0, [r5, 0xE]
- adds r0, 0x1
- strh r0, [r5, 0xE]
- strh r4, [r5, 0xC]
- b _080F83C8
- .align 2, 0
-_080F8370: .4byte gMenuWindowPtr
-_080F8374:
- movs r1, 0xA
- ldrsh r0, [r5, r1]
- cmp r0, 0x1
- beq _080F8394
- cmp r0, 0x1
- bgt _080F8386
- cmp r0, 0
- beq _080F838C
- b _080F83C8
-_080F8386:
- cmp r0, 0x2
- beq _080F83A0
- b _080F83C8
-_080F838C:
- ldr r0, _080F839C @ =gMenuWindowPtr
- ldr r0, [r0]
- bl sub_8003418
-_080F8394:
- ldrh r0, [r5, 0xA]
- adds r0, 0x1
- strh r0, [r5, 0xA]
- b _080F83C8
- .align 2, 0
-_080F839C: .4byte gMenuWindowPtr
-_080F83A0:
- ldrh r0, [r5, 0xE]
- adds r0, 0x1
- movs r1, 0
- strh r0, [r5, 0xE]
- strh r1, [r5, 0xA]
- ldr r0, _080F83B4 @ =gUnknown_03005DA0
- ldrh r0, [r0, 0x4]
- strh r0, [r5, 0xC]
- movs r0, 0x4
- b _080F83C6
- .align 2, 0
-_080F83B4: .4byte gUnknown_03005DA0
-_080F83B8:
- ldrh r0, [r5, 0xC]
- subs r0, 0x1
- strh r0, [r5, 0xC]
- lsls r0, 16
- cmp r0, 0
- bne _080F83C8
-_080F83C4:
- movs r0, 0x3
-_080F83C6:
- strh r0, [r5, 0x8]
-_080F83C8:
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_80F8184
-
- thumb_func_start sub_80F83D0
-sub_80F83D0: @ 80F83D0
- push {r4,lr}
- ldr r4, _080F83F4 @ =0x00004010
- bl GetCurrentMauvilleOldMan
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 8
- movs r0, 0x8A
- lsls r0, 15
- adds r1, r0
- lsrs r1, 16
- adds r0, r4, 0
- bl VarSet
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080F83F4: .4byte 0x00004010
- thumb_func_end sub_80F83D0
-
- thumb_func_start sub_80F83F8
-sub_80F83F8: @ 80F83F8
- push {r4,lr}
- ldr r0, _080F8424 @ =gSaveBlock1 + 0x2D94
- movs r2, 0
- movs r1, 0x3
- strb r1, [r0]
- strb r2, [r0, 0x1]
- movs r4, 0
- movs r3, 0xFF
- adds r1, r0, 0x4
- movs r2, 0x3
-_080F840C:
- strb r4, [r1]
- ldrb r0, [r1, 0x4]
- orrs r0, r3
- strb r0, [r1, 0x4]
- adds r1, 0x1
- subs r2, 0x1
- cmp r2, 0
- bge _080F840C
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080F8424: .4byte gSaveBlock1 + 0x2D94
- thumb_func_end sub_80F83F8
-
- thumb_func_start sub_80F8428
-sub_80F8428: @ 80F8428
- ldr r0, _080F8434 @ =gSaveBlock1 + 0x2D94
- movs r2, 0
- movs r1, 0x3
- strb r1, [r0]
- strb r2, [r0, 0x1]
- bx lr
- .align 2, 0
-_080F8434: .4byte gSaveBlock1 + 0x2D94
- thumb_func_end sub_80F8428
-
- thumb_func_start sub_80F8438
-sub_80F8438: @ 80F8438
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x32
- bne _080F8444
- movs r0, 0
-_080F8444:
- bl GetGameStat
- pop {r1}
- bx r1
- thumb_func_end sub_80F8438
-
- thumb_func_start sub_80F844C
-sub_80F844C: @ 80F844C
- push {lr}
- adds r3, r0, 0
- movs r2, 0
- ldr r1, _080F8460 @ =gUnknown_083E53E0
-_080F8454:
- ldrb r0, [r1]
- cmp r0, r3
- bne _080F8464
- adds r0, r1, 0
- b _080F846E
- .align 2, 0
-_080F8460: .4byte gUnknown_083E53E0
-_080F8464:
- adds r1, 0x10
- adds r2, 0x1
- cmp r2, 0x23
- ble _080F8454
- ldr r0, _080F8474 @ =gUnknown_083E5610
-_080F846E:
- pop {r1}
- bx r1
- .align 2, 0
-_080F8474: .4byte gUnknown_083E5610
- thumb_func_end sub_80F844C
-
- thumb_func_start sub_80F8478
-sub_80F8478: @ 80F8478
- push {lr}
- bl sub_80F844C
- ldr r0, [r0, 0x4]
- pop {r1}
- bx r1
- thumb_func_end sub_80F8478
-
- thumb_func_start sub_80F8484
-sub_80F8484: @ 80F8484
- push {lr}
- bl sub_80F844C
- ldr r0, [r0, 0xC]
- pop {r1}
- bx r1
- thumb_func_end sub_80F8484
-
- thumb_func_start sub_80F8490
-sub_80F8490: @ 80F8490
- push {lr}
- bl sub_80F844C
- ldr r0, [r0, 0x8]
- pop {r1}
- bx r1
- thumb_func_end sub_80F8490
-
- thumb_func_start sub_80F849C
-sub_80F849C: @ 80F849C
- push {lr}
- movs r1, 0
- ldr r2, _080F84C4 @ =gSaveBlock1 + 0x2D94
- ldrb r0, [r2, 0x4]
- cmp r0, 0
- beq _080F84BC
- adds r2, 0x4
-_080F84AA:
- adds r0, r1, 0x1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0x3
- bhi _080F84BC
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, 0
- bne _080F84AA
-_080F84BC:
- adds r0, r1, 0
- pop {r1}
- bx r1
- .align 2, 0
-_080F84C4: .4byte gSaveBlock1 + 0x2D94
- thumb_func_end sub_80F849C
-
- thumb_func_start sub_80F84C8
-sub_80F84C8: @ 80F84C8
- lsls r0, 2
- ldr r1, _080F84E8 @ =gSaveBlock1 + 0x2DB8
- adds r0, r1
- ldrb r2, [r0]
- ldrb r1, [r0, 0x1]
- lsls r1, 8
- orrs r2, r1
- ldrb r1, [r0, 0x2]
- lsls r1, 16
- orrs r2, r1
- ldrb r0, [r0, 0x3]
- lsls r0, 24
- orrs r2, r0
- adds r0, r2, 0
- bx lr
- .align 2, 0
-_080F84E8: .4byte gSaveBlock1 + 0x2DB8
- thumb_func_end sub_80F84C8
-
- thumb_func_start sub_80F84EC
-sub_80F84EC: @ 80F84EC
- lsls r0, 2
- ldr r2, _080F8504 @ =gSaveBlock1 + 0x2DB8
- adds r0, r2
- strb r1, [r0]
- lsrs r2, r1, 8
- strb r2, [r0, 0x1]
- lsrs r2, r1, 16
- strb r2, [r0, 0x2]
- lsrs r1, 24
- strb r1, [r0, 0x3]
- bx lr
- .align 2, 0
-_080F8504: .4byte gSaveBlock1 + 0x2DB8
- thumb_func_end sub_80F84EC
-
- thumb_func_start sub_80F8508
-sub_80F8508: @ 80F8508
- push {r4,r5,lr}
- adds r5, r0, 0
- ldr r0, _080F8528 @ =gSaveBlock1 + 0x2D94
- adds r0, 0x4
- adds r0, r5, r0
- ldrb r0, [r0]
- bl sub_80F8438
- adds r4, r0, 0
- adds r0, r5, 0
- bl sub_80F84C8
- cmp r4, r0
- bhi _080F852C
- movs r0, 0
- b _080F852E
- .align 2, 0
-_080F8528: .4byte gSaveBlock1 + 0x2D94
-_080F852C:
- movs r0, 0x1
-_080F852E:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_80F8508
-
- thumb_func_start sub_80F8534
-sub_80F8534: @ 80F8534
- push {r4,r5,lr}
- adds r5, r1, 0
- lsls r4, r0, 3
- subs r4, r0
- ldr r0, _080F855C @ =gSaveBlock1 + 0x2D9C
- adds r4, r0
- 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
- .align 2, 0
-_080F855C: .4byte gSaveBlock1 + 0x2D9C
- thumb_func_end sub_80F8534
-
- thumb_func_start sub_80F8560
-sub_80F8560: @ 80F8560
- push {r4-r6,lr}
- adds r6, r1, 0
- lsls r5, r0, 3
- subs r5, r0
- ldr r0, _080F8594 @ =gSaveBlock1 + 0x2D9C
- adds r5, r0
- adds r0, r6, 0
- bl StringLength
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r5, 0
- movs r1, 0xFF
- movs r2, 0x7
- bl memset
- adds r0, r5, 0
- adds r1, r6, 0
- adds r2, r4, 0
- bl StringCopyN
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080F8594: .4byte gSaveBlock1 + 0x2D9C
- thumb_func_end sub_80F8560
-
- thumb_func_start sub_80F8598
-sub_80F8598: @ 80F8598
- push {r4-r6,lr}
- adds r5, r0, 0
- adds r6, r1, 0
- ldr r0, _080F85EC @ =gSaveBlock1 + 0x2D94
- adds r0, 0x4
- adds r0, r5, r0
- strb r6, [r0]
- ldr r1, _080F85F0 @ =gSaveBlock2
- adds r0, r5, 0
- bl sub_80F8560
- lsls r4, r6, 24
- lsrs r4, 24
- adds r0, r4, 0
- bl sub_80F8438
- adds r1, r0, 0
- adds r0, r5, 0
- bl sub_80F84EC
- ldr r5, _080F85F4 @ =gStringVar1
- adds r0, r4, 0
- bl sub_80F8438
- adds r1, r0, 0
- adds r0, r5, 0
- movs r2, 0
- movs r3, 0xA
- bl ConvertIntToDecimalStringN
- ldr r4, _080F85F8 @ =gStringVar2
- adds r0, r6, 0
- bl sub_80F8490
- adds r1, r0, 0
- adds r0, r4, 0
- bl StringCopy
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080F85EC: .4byte gSaveBlock1 + 0x2D94
-_080F85F0: .4byte gSaveBlock2
-_080F85F4: .4byte gStringVar1
-_080F85F8: .4byte gStringVar2
- thumb_func_end sub_80F8598
-
- thumb_func_start sub_80F85FC
-sub_80F85FC: @ 80F85FC
- push {r4-r7,lr}
- adds r7, r0, 0
- adds r6, r1, 0
- movs r5, 0
- cmp r5, r6
- bge _080F8612
-_080F8608:
- adds r0, r7, r5
- strb r5, [r0]
- adds r5, 0x1
- cmp r5, r6
- blt _080F8608
-_080F8612:
- cmp r6, 0
- ble _080F8648
- adds r5, r6, 0
-_080F8618:
- 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 _080F8618
-_080F8648:
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_80F85FC
-
- thumb_func_start sub_80F8650
-sub_80F8650: @ 80F8650
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- mov r7, sp
- mov r10, sp
- ldr r0, _080F86D4 @ =gUnknown_083E5620
- 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 r8, sp
- mov r0, sp
- movs r1, 0x24
- bl sub_80F85FC
- movs r5, 0
- ldr r0, _080F86D8 @ =gUnknown_083E53E0
- mov r9, r0
- ldr r3, _080F86DC @ =gSaveBlock1 + 0x2D94
-_080F8686:
- mov r1, r8
- adds r0, r1, r5
- ldrb r0, [r0]
- lsls r0, 4
- add r0, r9
- ldrb r4, [r0]
- ldrb r6, [r0, 0x1]
- movs r1, 0
- ldrb r0, [r3, 0x4]
- cmp r0, r4
- beq _080F86AC
- ldr r2, _080F86E0 @ =gSaveBlock1 + 0x2D98
-_080F869E:
- adds r1, 0x1
- cmp r1, 0x3
- bgt _080F86AC
- adds r0, r1, r2
- ldrb r0, [r0]
- cmp r0, r4
- bne _080F869E
-_080F86AC:
- cmp r1, 0x4
- bne _080F86E4
- adds r0, r4, 0
- str r3, [r7]
- bl sub_80F8438
- ldr r3, [r7]
- cmp r0, r6
- bcc _080F86E4
- movs r0, 0x1
- strb r0, [r3, 0x1]
- bl sub_80F849C
- lsls r0, 24
- lsrs r0, 24
- adds r1, r4, 0
- bl sub_80F8598
- movs r0, 0x1
- b _080F86EC
- .align 2, 0
-_080F86D4: .4byte gUnknown_083E5620
-_080F86D8: .4byte gUnknown_083E53E0
-_080F86DC: .4byte gSaveBlock1 + 0x2D94
-_080F86E0: .4byte gSaveBlock1 + 0x2D98
-_080F86E4:
- adds r5, 0x1
- cmp r5, 0x23
- ble _080F8686
- movs r0, 0
-_080F86EC:
- mov sp, r10
- 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 sub_80F8650
-
- thumb_func_start sub_80F8700
-sub_80F8700: @ 80F8700
- push {r4-r6,lr}
- adds r5, r0, 0
- ldr r0, _080F8748 @ =gSaveBlock1 + 0x2D94
- adds r0, 0x4
- adds r0, r5, r0
- ldrb r6, [r0]
- ldr r4, _080F874C @ =gStringVar1
- adds r0, r5, 0
- bl sub_80F84C8
- adds r1, r0, 0
- adds r0, r4, 0
- movs r2, 0
- movs r3, 0xA
- bl ConvertIntToDecimalStringN
- ldr r4, _080F8750 @ =gStringVar2
- adds r0, r6, 0
- bl sub_80F8490
- adds r1, r0, 0
- adds r0, r4, 0
- bl StringCopy
- ldr r1, _080F8754 @ =gStringVar3
- adds r0, r5, 0
- bl sub_80F8534
- adds r0, r6, 0
- bl sub_80F8484
- bl ShowFieldMessage
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080F8748: .4byte gSaveBlock1 + 0x2D94
-_080F874C: .4byte gStringVar1
-_080F8750: .4byte gStringVar2
-_080F8754: .4byte gStringVar3
- thumb_func_end sub_80F8700
-
- thumb_func_start sub_80F8758
-sub_80F8758: @ 80F8758
- push {r4-r6,lr}
- bl sub_80F849C
- adds r3, r0, 0
- lsls r3, 25
- movs r0, 0x80
- lsls r0, 19
- adds r3, r0
- lsrs r3, 24
- movs r0, 0
- movs r1, 0
- movs r2, 0x19
- bl MenuDrawTextWindow
- movs r4, 0
- ldr r1, _080F87BC @ =gSaveBlock1 + 0x2D94
- ldrb r0, [r1, 0x4]
- cmp r0, 0
- beq _080F87A4
- adds r6, r1, 0x4
- movs r5, 0x80
- lsls r5, 18
-_080F8784:
- bl sub_80F8478
- lsrs r2, r5, 24
- movs r1, 0x1
- bl MenuPrint
- movs r1, 0x80
- lsls r1, 18
- adds r5, r1
- adds r4, 0x1
- cmp r4, 0x3
- bgt _080F87A4
- adds r0, r4, r6
- ldrb r0, [r0]
- cmp r0, 0
- bne _080F8784
-_080F87A4:
- ldr r0, _080F87C0 @ =gPCText_Cancel
- lsls r2, r4, 25
- movs r1, 0x80
- lsls r1, 18
- adds r2, r1
- lsrs r2, 24
- movs r1, 0x1
- bl MenuPrint
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080F87BC: .4byte gSaveBlock1 + 0x2D94
-_080F87C0: .4byte gPCText_Cancel
- thumb_func_end sub_80F8758
-
- thumb_func_start sub_80F87C4
-sub_80F87C4: @ 80F87C4
- push {r4-r6,lr}
- sub sp, 0x8
- lsls r0, 24
- lsrs r6, r0, 24
- lsls r0, r6, 2
- adds r0, r6
- lsls r0, 3
- ldr r1, _080F87E4 @ =gTasks
- adds r4, r0, r1
- movs r0, 0x8
- ldrsh r5, [r4, r0]
- cmp r5, 0
- beq _080F87E8
- cmp r5, 0x1
- beq _080F8810
- b _080F8862
- .align 2, 0
-_080F87E4: .4byte gTasks
-_080F87E8:
- bl sub_80F8758
- bl sub_80F849C
- adds r3, r0, 0
- adds r3, 0x1
- lsls r3, 24
- lsrs r3, 24
- str r5, [sp]
- movs r0, 0x18
- str r0, [sp, 0x4]
- movs r0, 0
- movs r1, 0x1
- movs r2, 0x2
- bl InitMenu
- ldrh r0, [r4, 0x8]
- adds r0, 0x1
- strh r0, [r4, 0x8]
- b _080F8862
-_080F8810:
- bl ProcessMenuInput
- lsls r0, 24
- asrs r4, r0, 24
- movs r0, 0x2
- negs r0, r0
- cmp r4, r0
- beq _080F8862
- adds r0, 0x1
- cmp r4, r0
- beq _080F8832
- bl sub_80F849C
- lsls r0, 24
- lsrs r0, 24
- cmp r4, r0
- bne _080F8840
-_080F8832:
- ldr r1, _080F883C @ =gScriptResult
- movs r0, 0
- strh r0, [r1]
- b _080F8848
- .align 2, 0
-_080F883C: .4byte gScriptResult
-_080F8840:
- ldr r0, _080F886C @ =gScriptResult
- strh r5, [r0]
- ldr r0, _080F8870 @ =gUnknown_03000748
- strb r4, [r0]
-_080F8848:
- bl HandleDestroyMenuCursors
- movs r0, 0
- movs r1, 0
- movs r2, 0x19
- movs r3, 0xC
- bl MenuZeroFillWindowRect
- adds r0, r6, 0
- bl DestroyTask
- bl EnableBothScriptContexts
-_080F8862:
- add sp, 0x8
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080F886C: .4byte gScriptResult
-_080F8870: .4byte gUnknown_03000748
- thumb_func_end sub_80F87C4
-
- thumb_func_start sub_80F8874
-sub_80F8874: @ 80F8874
- push {lr}
- ldr r0, _080F8884 @ =sub_80F87C4
- movs r1, 0x50
- bl CreateTask
- pop {r0}
- bx r0
- .align 2, 0
-_080F8884: .4byte sub_80F87C4
- thumb_func_end sub_80F8874
-
- thumb_func_start sub_80F8888
-sub_80F8888: @ 80F8888
- push {lr}
- ldr r0, _080F8898 @ =gUnknown_03000748
- ldrb r0, [r0]
- bl sub_80F8700
- pop {r0}
- bx r0
- .align 2, 0
-_080F8898: .4byte gUnknown_03000748
- thumb_func_end sub_80F8888
-
- thumb_func_start sub_80F889C
-sub_80F889C: @ 80F889C
- push {lr}
- bl sub_80F849C
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- thumb_func_end sub_80F889C
-
- thumb_func_start sub_80F88AC
-sub_80F88AC: @ 80F88AC
- push {r4,r5,lr}
- ldr r1, _080F88C8 @ =gSaveBlock1 + 0x2D94
- ldr r5, _080F88CC @ =gUnknown_03000748
- ldrb r0, [r5]
- adds r1, 0x4
- adds r1, r0, r1
- ldrb r4, [r1]
- bl sub_80F8508
- cmp r0, 0x1
- beq _080F88D0
- movs r0, 0
- b _080F88DA
- .align 2, 0
-_080F88C8: .4byte gSaveBlock1 + 0x2D94
-_080F88CC: .4byte gUnknown_03000748
-_080F88D0:
- ldrb r0, [r5]
- adds r1, r4, 0
- bl sub_80F8598
- movs r0, 0x1
-_080F88DA:
- pop {r4,r5}
- pop {r1}
- bx r1
- thumb_func_end sub_80F88AC
-
- thumb_func_start sub_80F88E0
-sub_80F88E0: @ 80F88E0
- push {lr}
- ldr r0, _080F88F0 @ =gSaveBlock1 + 0x2D94
- ldrb r0, [r0, 0x1]
- cmp r0, 0
- beq _080F88F4
- movs r0, 0x1
- b _080F88F6
- .align 2, 0
-_080F88F0: .4byte gSaveBlock1 + 0x2D94
-_080F88F4:
- movs r0, 0
-_080F88F6:
- pop {r1}
- bx r1
- thumb_func_end sub_80F88E0
-
- thumb_func_start sub_80F88FC
-sub_80F88FC: @ 80F88FC
- push {lr}
- bl sub_80F8650
- lsls r0, 24
- lsrs r0, 24
- pop {r1}
- bx r1
- thumb_func_end sub_80F88FC
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/party_menu.s b/asm/party_menu.s
index 8a7c153b9..ec6754b86 100644
--- a/asm/party_menu.s
+++ b/asm/party_menu.s
@@ -7645,7 +7645,7 @@ _08070AF4:
ldr r7, _08070B28 @ =0x0201c000
ldr r0, [r7]
movs r1, 0x1
- bl sub_803B7C8
+ bl MonTryLearningNewMove
lsls r0, 16
lsrs r4, r0, 16
ldr r1, _08070B2C @ =0xfffff282
@@ -7680,7 +7680,7 @@ _08070B40:
lsrs r2, r0, 16
cmp r2, 0
beq _08070B74
- ldr r1, _08070B6C @ =gUnknown_03005E94
+ ldr r1, _08070B6C @ =gCB2_AfterEvolution
ldr r0, _08070B70 @ =sub_80A53F8
str r0, [r1]
ldr r0, [r7]
@@ -7692,7 +7692,7 @@ _08070B40:
bl DestroyTask
b _08070C2C
.align 2, 0
-_08070B6C: .4byte gUnknown_03005E94
+_08070B6C: .4byte gCB2_AfterEvolution
_08070B70: .4byte sub_80A53F8
_08070B74:
adds r0, r6, 0
@@ -7703,7 +7703,7 @@ _08070B7C:
ldr r1, _08070BBC @ =gStringVar1
bl GetMonNickname
ldr r0, _08070BC0 @ =gStringVar2
- ldr r5, _08070BC4 @ =word_2024E82
+ ldr r5, _08070BC4 @ =gMoveToLearn
ldrh r2, [r5]
movs r1, 0xD
muls r1, r2
@@ -7729,7 +7729,7 @@ _08070B7C:
.align 2, 0
_08070BBC: .4byte gStringVar1
_08070BC0: .4byte gStringVar2
-_08070BC4: .4byte word_2024E82
+_08070BC4: .4byte gMoveToLearn
_08070BC8: .4byte gMoveNames
_08070BCC: .4byte gStringVar4
_08070BD0: .4byte gOtherText_WantsToLearn
@@ -7796,7 +7796,7 @@ sub_8070C54: @ 8070C54
ldr r7, _08070C78 @ =0x0201c000
ldr r0, [r7]
movs r1, 0
- bl sub_803B7C8
+ bl MonTryLearningNewMove
lsls r0, 16
lsrs r4, r0, 16
ldr r0, _08070C7C @ =0x0000fffe
@@ -7826,7 +7826,7 @@ _08070C8C:
lsrs r2, r0, 16
cmp r2, 0
beq _08070CC0
- ldr r1, _08070CB8 @ =gUnknown_03005E94
+ ldr r1, _08070CB8 @ =gCB2_AfterEvolution
ldr r0, _08070CBC @ =sub_80A53F8
str r0, [r1]
ldr r0, [r7]
@@ -7838,7 +7838,7 @@ _08070C8C:
bl DestroyTask
b _08070D68
.align 2, 0
-_08070CB8: .4byte gUnknown_03005E94
+_08070CB8: .4byte gCB2_AfterEvolution
_08070CBC: .4byte sub_80A53F8
_08070CC0:
adds r0, r6, 0
@@ -7849,7 +7849,7 @@ _08070CC8:
ldr r1, _08070D08 @ =gStringVar1
bl GetMonNickname
ldr r0, _08070D0C @ =gStringVar2
- ldr r5, _08070D10 @ =word_2024E82
+ ldr r5, _08070D10 @ =gMoveToLearn
ldrh r2, [r5]
movs r1, 0xD
muls r1, r2
@@ -7875,7 +7875,7 @@ _08070CC8:
.align 2, 0
_08070D08: .4byte gStringVar1
_08070D0C: .4byte gStringVar2
-_08070D10: .4byte word_2024E82
+_08070D10: .4byte gMoveToLearn
_08070D14: .4byte gMoveNames
_08070D18: .4byte gStringVar4
_08070D1C: .4byte gOtherText_WantsToLearn
@@ -7971,7 +7971,7 @@ DoEvolutionStoneItemEffect: @ 8070DBC
adds r1, r6, 0
adds r2, r5, 0
bl sub_806E8D0
- ldr r1, _08070E20 @ =gUnknown_03005E94
+ ldr r1, _08070E20 @ =gCB2_AfterEvolution
ldr r0, _08070E24 @ =sub_80A53F8
str r0, [r1]
ldr r0, _08070E28 @ =0x0201c000
@@ -7995,7 +7995,7 @@ DoEvolutionStoneItemEffect: @ 8070DBC
.align 2, 0
_08070E18: .4byte gTasks
_08070E1C: .4byte TaskDummy
-_08070E20: .4byte gUnknown_03005E94
+_08070E20: .4byte gCB2_AfterEvolution
_08070E24: .4byte sub_80A53F8
_08070E28: .4byte 0x0201c000
_08070E2C: .4byte gUnknown_0202E8F4
diff --git a/asm/pokeblock_feed.s b/asm/pokeblock_feed.s
deleted file mode 100644
index df6dd1e36..000000000
--- a/asm/pokeblock_feed.s
+++ /dev/null
@@ -1,1836 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "constants/species_constants.inc"
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_8147890
-sub_8147890: @ 8147890
- push {lr}
- bl AnimateSprites
- bl BuildOamBuffer
- bl RunTasks
- bl UpdatePaletteFade
- pop {r0}
- bx r0
- thumb_func_end sub_8147890
-
- thumb_func_start sub_81478A8
-sub_81478A8: @ 81478A8
- push {lr}
- bl LoadOam
- bl ProcessSpriteCopyRequests
- bl TransferPlttBuffer
- pop {r0}
- bx r0
- thumb_func_end sub_81478A8
-
- thumb_func_start sub_81478BC
-sub_81478BC: @ 81478BC
- push {r4,lr}
- sub sp, 0x4
- ldr r0, _081478D8 @ =gMain
- ldr r1, _081478DC @ =0x0000043c
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0xD
- bls _081478CE
- b _08147AD0
-_081478CE:
- lsls r0, 2
- ldr r1, _081478E0 @ =_081478E4
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_081478D8: .4byte gMain
-_081478DC: .4byte 0x0000043c
-_081478E0: .4byte _081478E4
- .align 2, 0
-_081478E4:
- .4byte _0814791C
- .4byte _08147938
- .4byte _0814794C
- .4byte _08147960
- .4byte _08147966
- .4byte _08147980
- .4byte _0814798C
- .4byte _081479B8
- .4byte _081479DC
- .4byte _081479F4
- .4byte _08147A20
- .4byte _08147A3C
- .4byte _08147A5C
- .4byte _08147A8C
-_0814791C:
- bl sub_80F9438
- bl sub_80F9368
- bl sub_8147B04
- ldr r1, _08147930 @ =gMain
- ldr r2, _08147934 @ =0x0000043c
- adds r1, r2
- b _08147A4A
- .align 2, 0
-_08147930: .4byte gMain
-_08147934: .4byte 0x0000043c
-_08147938:
- bl ResetPaletteFade
- ldr r2, _08147948 @ =gPaletteFade
- ldrb r0, [r2, 0x8]
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r2, 0x8]
- b _08147A44
- .align 2, 0
-_08147948: .4byte gPaletteFade
-_0814794C:
- bl ResetSpriteData
- ldr r1, _08147958 @ =gMain
- ldr r2, _0814795C @ =0x0000043c
- adds r1, r2
- b _08147A4A
- .align 2, 0
-_08147958: .4byte gMain
-_0814795C: .4byte 0x0000043c
-_08147960:
- bl FreeAllSpritePalettes
- b _08147A44
-_08147966:
- ldr r0, _08147974 @ =gWindowConfig_81E6E50
- bl SetUpWindowConfig
- ldr r1, _08147978 @ =gMain
- ldr r2, _0814797C @ =0x0000043c
- adds r1, r2
- b _08147A4A
- .align 2, 0
-_08147974: .4byte gWindowConfig_81E6E50
-_08147978: .4byte gMain
-_0814797C: .4byte 0x0000043c
-_08147980:
- ldr r0, _08147988 @ =gWindowConfig_81E6E50
- bl MultistepInitMenuWindowBegin
- b _08147A44
- .align 2, 0
-_08147988: .4byte gWindowConfig_81E6E50
-_0814798C:
- bl MultistepInitMenuWindowContinue
- cmp r0, 0
- bne _08147996
- b _08147AD0
-_08147996:
- ldr r0, _081479A8 @ =0x02000000
- ldr r1, _081479AC @ =0x0001ffff
- adds r0, r1
- movs r1, 0
- strb r1, [r0]
- ldr r1, _081479B0 @ =gMain
- ldr r2, _081479B4 @ =0x0000043c
- adds r1, r2
- b _08147A4A
- .align 2, 0
-_081479A8: .4byte 0x02000000
-_081479AC: .4byte 0x0001ffff
-_081479B0: .4byte gMain
-_081479B4: .4byte 0x0000043c
-_081479B8:
- ldr r0, _081479D4 @ =gUnknown_02039310
- ldrb r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _081479D8 @ =gPlayerParty
- adds r0, r1
- bl sub_8147B20
- lsls r0, 24
- cmp r0, 0
- bne _081479D0
- b _08147AD0
-_081479D0:
- b _08147A44
- .align 2, 0
-_081479D4: .4byte gUnknown_02039310
-_081479D8: .4byte gPlayerParty
-_081479DC:
- bl sub_81480B4
- ldr r1, _081479EC @ =0x02000000
- ldr r2, _081479F0 @ =0x0001fffd
- adds r1, r2
- strb r0, [r1]
- b _08147A44
- .align 2, 0
-_081479EC: .4byte 0x02000000
-_081479F0: .4byte 0x0001fffd
-_081479F4:
- ldr r0, _08147A10 @ =gUnknown_02039310
- ldrb r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08147A14 @ =gPlayerParty
- adds r0, r1
- bl sub_8147F84
- ldr r1, _08147A18 @ =0x02000000
- ldr r2, _08147A1C @ =0x0001fffe
- adds r1, r2
- strb r0, [r1]
- b _08147A44
- .align 2, 0
-_08147A10: .4byte gUnknown_02039310
-_08147A14: .4byte gPlayerParty
-_08147A18: .4byte 0x02000000
-_08147A1C: .4byte 0x0001fffe
-_08147A20:
- movs r0, 0
- movs r1, 0xE
- movs r2, 0x1D
- movs r3, 0x13
- bl MenuDrawTextWindow
- ldr r1, _08147A34 @ =gMain
- ldr r2, _08147A38 @ =0x0000043c
- adds r1, r2
- b _08147A4A
- .align 2, 0
-_08147A34: .4byte gMain
-_08147A38: .4byte 0x0000043c
-_08147A3C:
- bl sub_8055870
- cmp r0, 0x1
- beq _08147AD0
-_08147A44:
- ldr r1, _08147A54 @ =gMain
- ldr r0, _08147A58 @ =0x0000043c
- adds r1, r0
-_08147A4A:
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _08147AD0
- .align 2, 0
-_08147A54: .4byte gMain
-_08147A58: .4byte 0x0000043c
-_08147A5C:
- ldr r3, _08147AB0 @ =0x04000208
- ldrh r2, [r3]
- movs r0, 0
- strh r0, [r3]
- ldr r4, _08147AB4 @ =0x04000200
- ldrh r0, [r4]
- movs r1, 0x1
- orrs r0, r1
- strh r0, [r4]
- strh r2, [r3]
- ldr r2, _08147AB8 @ =REG_DISPSTAT
- ldrh r0, [r2]
- movs r1, 0x8
- orrs r0, r1
- strh r0, [r2]
- ldr r0, _08147ABC @ =sub_81478A8
- bl SetVBlankCallback
- ldr r1, _08147AC0 @ =gMain
- ldr r2, _08147AC4 @ =0x0000043c
- adds r1, r2
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
-_08147A8C:
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0x10
- movs r3, 0
- bl BeginNormalPaletteFade
- ldr r2, _08147AC8 @ =gPaletteFade
- ldrb r1, [r2, 0x8]
- movs r0, 0x7F
- ands r0, r1
- strb r0, [r2, 0x8]
- ldr r0, _08147ACC @ =sub_8147890
- bl SetMainCallback2
- movs r0, 0x1
- b _08147AD2
- .align 2, 0
-_08147AB0: .4byte 0x04000208
-_08147AB4: .4byte 0x04000200
-_08147AB8: .4byte REG_DISPSTAT
-_08147ABC: .4byte sub_81478A8
-_08147AC0: .4byte gMain
-_08147AC4: .4byte 0x0000043c
-_08147AC8: .4byte gPaletteFade
-_08147ACC: .4byte sub_8147890
-_08147AD0:
- movs r0, 0
-_08147AD2:
- add sp, 0x4
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_81478BC
-
- thumb_func_start sub_8147ADC
-sub_8147ADC: @ 8147ADC
- push {lr}
-_08147ADE:
- bl sub_81478BC
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08147AF2
- movs r0, 0x1
- bl sub_8147DDC
- b _08147AFE
-_08147AF2:
- bl sub_80F9344
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08147ADE
-_08147AFE:
- pop {r0}
- bx r0
- thumb_func_end sub_8147ADC
-
- thumb_func_start sub_8147B04
-sub_8147B04: @ 8147B04
- ldr r1, _08147B18 @ =REG_BG1CNT
- ldr r2, _08147B1C @ =0x00001d02
- adds r0, r2, 0
- strh r0, [r1]
- subs r1, 0xA
- movs r2, 0x9A
- lsls r2, 5
- adds r0, r2, 0
- strh r0, [r1]
- bx lr
- .align 2, 0
-_08147B18: .4byte REG_BG1CNT
-_08147B1C: .4byte 0x00001d02
- thumb_func_end sub_8147B04
-
- thumb_func_start sub_8147B20
-sub_8147B20: @ 8147B20
- push {r4-r6,lr}
- sub sp, 0xC
- adds r4, r0, 0
- ldr r0, _08147B40 @ =0x02000000
- ldr r1, _08147B44 @ =0x0001ffff
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x8
- bls _08147B34
- b _08147C84
-_08147B34:
- lsls r0, 2
- ldr r1, _08147B48 @ =_08147B4C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08147B40: .4byte 0x02000000
-_08147B44: .4byte 0x0001ffff
-_08147B48: .4byte _08147B4C
- .align 2, 0
-_08147B4C:
- .4byte _08147B70
- .4byte _08147BB8
- .4byte _08147BF0
- .4byte _08147BFC
- .4byte _08147C08
- .4byte _08147C14
- .4byte _08147C2C
- .4byte _08147C38
- .4byte _08147C60
-_08147B70:
- adds r0, r4, 0
- movs r1, 0x41
- bl GetMonData
- lsls r0, 16
- lsrs r5, r0, 16
- adds r0, r4, 0
- movs r1, 0
- bl GetMonData
- adds r6, r0, 0
- lsls r0, r5, 3
- ldr r1, _08147BAC @ =gMonFrontPicTable
- adds r0, r1
- ldr r1, _08147BB0 @ =gMonFrontPicCoords
- lsls r2, r5, 2
- adds r2, r1
- ldrb r1, [r2]
- ldrb r2, [r2, 0x1]
- movs r3, 0x80
- lsls r3, 18
- ldr r4, _08147BB4 @ =gUnknown_081FAF4C
- ldr r4, [r4, 0x4]
- str r4, [sp]
- str r5, [sp, 0x4]
- str r6, [sp, 0x8]
- bl HandleLoadSpecialPokePic
- b _08147C40
- .align 2, 0
-_08147BAC: .4byte gMonFrontPicTable
-_08147BB0: .4byte gMonFrontPicCoords
-_08147BB4: .4byte gUnknown_081FAF4C
-_08147BB8:
- adds r0, r4, 0
- movs r1, 0x41
- bl GetMonData
- lsls r0, 16
- lsrs r5, r0, 16
- adds r0, r4, 0
- movs r1, 0
- bl GetMonData
- adds r6, r0, 0
- adds r0, r4, 0
- movs r1, 0x1
- bl GetMonData
- adds r1, r0, 0
- adds r0, r5, 0
- adds r2, r6, 0
- bl GetMonSpritePalStructFromOtIdPersonality
- adds r4, r0, 0
- bl LoadCompressedObjectPalette
- ldrh r0, [r4, 0x4]
- movs r1, 0x1
- bl GetMonSpriteTemplate_803C56C
- b _08147C40
-_08147BF0:
- ldr r0, _08147BF8 @ =gUnknown_083F7F74
- bl LoadCompressedObjectPic
- b _08147C40
- .align 2, 0
-_08147BF8: .4byte gUnknown_083F7F74
-_08147BFC:
- ldr r0, _08147C04 @ =gUnknown_083F7F7C
- bl LoadCompressedObjectPalette
- b _08147C40
- .align 2, 0
-_08147C04: .4byte gUnknown_083F7F7C
-_08147C08:
- ldr r0, _08147C10 @ =gUnknown_084121DC
- bl LoadCompressedObjectPic
- b _08147C40
- .align 2, 0
-_08147C10: .4byte gUnknown_084121DC
-_08147C14:
- ldr r0, _08147C24 @ =gScriptItemId
- ldrb r0, [r0]
- bl sub_8147C90
- ldr r0, _08147C28 @ =gUnknown_02039350
- bl LoadCompressedObjectPalette
- b _08147C40
- .align 2, 0
-_08147C24: .4byte gScriptItemId
-_08147C28: .4byte gUnknown_02039350
-_08147C2C:
- ldr r0, _08147C34 @ =gBattleTerrainTiles_Building
- movs r1, 0xC0
- lsls r1, 19
- b _08147C3C
- .align 2, 0
-_08147C34: .4byte gBattleTerrainTiles_Building
-_08147C38:
- ldr r0, _08147C50 @ =gUnknown_08E782FC
- ldr r1, _08147C54 @ =0x0600e800
-_08147C3C:
- bl LZDecompressVram
-_08147C40:
- ldr r1, _08147C58 @ =0x02000000
- ldr r0, _08147C5C @ =0x0001ffff
- adds r1, r0
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- b _08147C84
- .align 2, 0
-_08147C50: .4byte gUnknown_08E782FC
-_08147C54: .4byte 0x0600e800
-_08147C58: .4byte 0x02000000
-_08147C5C: .4byte 0x0001ffff
-_08147C60:
- ldr r0, _08147C78 @ =gBattleTerrainPalette_BattleTower
- movs r1, 0x20
- movs r2, 0x60
- bl LoadCompressedPalette
- ldr r0, _08147C7C @ =0x02000000
- ldr r1, _08147C80 @ =0x0001ffff
- adds r0, r1
- movs r1, 0
- strb r1, [r0]
- movs r0, 0x1
- b _08147C86
- .align 2, 0
-_08147C78: .4byte gBattleTerrainPalette_BattleTower
-_08147C7C: .4byte 0x02000000
-_08147C80: .4byte 0x0001ffff
-_08147C84:
- movs r0, 0
-_08147C86:
- add sp, 0xC
- pop {r4-r6}
- pop {r1}
- bx r1
- thumb_func_end sub_8147B20
-
- thumb_func_start sub_8147C90
-sub_8147C90: @ 8147C90
- push {lr}
- lsls r0, 24
- lsrs r0, 21
- ldr r1, _08147CB8 @ =gSaveBlock1 + 0x7F8
- adds r0, r1
- movs r1, 0
- bl sub_810CA9C
- lsls r0, 24
- ldr r2, _08147CBC @ =gUnknown_02039350
- ldr r1, _08147CC0 @ =gUnknown_084120A4
- lsrs r0, 22
- subs r0, 0x4
- adds r0, r1
- ldr r0, [r0]
- str r0, [r2]
- ldr r0, _08147CC4 @ =0x000039e2
- strh r0, [r2, 0x4]
- pop {r0}
- bx r0
- .align 2, 0
-_08147CB8: .4byte gSaveBlock1 + 0x7F8
-_08147CBC: .4byte gUnknown_02039350
-_08147CC0: .4byte gUnknown_084120A4
-_08147CC4: .4byte 0x000039e2
- thumb_func_end sub_8147C90
-
- thumb_func_start sub_8147CC8
-sub_8147CC8: @ 8147CC8
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _08147D00 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _08147CDC
- b _08147DCE
-_08147CDC:
- ldr r0, _08147D04 @ =gTasks
- lsls r2, r4, 2
- adds r1, r2, r4
- lsls r1, 3
- adds r1, r0
- movs r0, 0x8
- ldrsh r3, [r1, r0]
- ldr r0, _08147D08 @ =0x0000010d
- adds r5, r2, 0
- cmp r3, r0
- beq _08147D50
- cmp r3, r0
- bgt _08147D0C
- cmp r3, 0
- beq _08147D20
- cmp r3, 0xFF
- beq _08147D38
- b _08147D8C
- .align 2, 0
-_08147D00: .4byte gPaletteFade
-_08147D04: .4byte gTasks
-_08147D08: .4byte 0x0000010d
-_08147D0C:
- ldr r0, _08147D1C @ =0x00000119
- cmp r3, r0
- beq _08147D68
- adds r0, 0x10
- cmp r3, r0
- beq _08147D80
- b _08147D8C
- .align 2, 0
-_08147D1C: .4byte 0x00000119
-_08147D20:
- ldr r0, _08147D30 @ =gUnknown_03005F3C
- strb r3, [r0]
- ldr r0, _08147D34 @ =gUnknown_03005F94
- strh r3, [r0]
- bl sub_81481DC
- b _08147D8C
- .align 2, 0
-_08147D30: .4byte gUnknown_03005F3C
-_08147D34: .4byte gUnknown_03005F94
-_08147D38:
- ldr r0, _08147D48 @ =0x02000000
- ldr r2, _08147D4C @ =0x0001fffd
- adds r0, r2
- ldrb r0, [r0]
- ldrb r1, [r1, 0xA]
- bl sub_8148108
- b _08147D8C
- .align 2, 0
-_08147D48: .4byte 0x02000000
-_08147D4C: .4byte 0x0001fffd
-_08147D50:
- bl sub_814817C
- ldr r1, _08147D60 @ =0x02000000
- ldr r2, _08147D64 @ =0x0001fffc
- adds r1, r2
- strb r0, [r1]
- b _08147D8C
- .align 2, 0
-_08147D60: .4byte 0x02000000
-_08147D64: .4byte 0x0001fffc
-_08147D68:
- ldr r0, _08147D78 @ =0x02000000
- ldr r1, _08147D7C @ =0x0001fffe
- adds r0, r1
- ldrb r0, [r0]
- bl sub_8148044
- b _08147D8C
- .align 2, 0
-_08147D78: .4byte 0x02000000
-_08147D7C: .4byte 0x0001fffe
-_08147D80:
- ldr r0, _08147D88 @ =sub_8147E40
- str r0, [r1]
- b _08147DCE
- .align 2, 0
-_08147D88: .4byte sub_8147E40
-_08147D8C:
- ldr r0, _08147DA0 @ =gUnknown_03005F94
- ldr r1, _08147DA4 @ =gUnknown_03005F34
- ldrh r2, [r0]
- ldrh r0, [r1]
- cmp r2, r0
- bcs _08147DA8
- bl sub_814825C
- b _08147DB8
- .align 2, 0
-_08147DA0: .4byte gUnknown_03005F94
-_08147DA4: .4byte gUnknown_03005F34
-_08147DA8:
- cmp r2, r0
- bne _08147DB8
- ldr r0, _08147DD4 @ =gTasks
- adds r1, r5, r4
- lsls r1, 3
- adds r1, r0
- movs r0, 0xFE
- strh r0, [r1, 0x8]
-_08147DB8:
- ldr r1, _08147DD8 @ =gUnknown_03005F94
- ldrh r0, [r1]
- adds r0, 0x1
- strh r0, [r1]
- ldr r0, _08147DD4 @ =gTasks
- adds r1, r5, r4
- lsls r1, 3
- adds r1, r0
- ldrh r0, [r1, 0x8]
- adds r0, 0x1
- strh r0, [r1, 0x8]
-_08147DCE:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08147DD4: .4byte gTasks
-_08147DD8: .4byte gUnknown_03005F94
- thumb_func_end sub_8147CC8
-
- thumb_func_start sub_8147DDC
-sub_8147DDC: @ 8147DDC
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, _08147E08 @ =sub_8147CC8
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _08147E0C @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- movs r0, 0
- strh r0, [r1, 0x8]
- strh r4, [r1, 0xA]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08147E08: .4byte sub_8147CC8
-_08147E0C: .4byte gTasks
- thumb_func_end sub_8147DDC
-
- thumb_func_start sub_8147E10
-sub_8147E10: @ 8147E10
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl MenuUpdateWindowText
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08147E30
- ldr r0, _08147E38 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _08147E3C @ =sub_8147F4C
- str r0, [r1]
-_08147E30:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08147E38: .4byte gTasks
-_08147E3C: .4byte sub_8147F4C
- thumb_func_end sub_8147E10
-
- thumb_func_start sub_8147E40
-sub_8147E40: @ 8147E40
- push {r4-r7,lr}
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r0, _08147E94 @ =gUnknown_02039310
- ldrb r1, [r0]
- movs r0, 0x64
- adds r5, r1, 0
- muls r5, r0
- ldr r0, _08147E98 @ =gPlayerParty
- adds r5, r0
- ldr r0, _08147E9C @ =gScriptItemId
- ldrh r4, [r0]
- lsls r4, 3
- ldr r0, _08147EA0 @ =gSaveBlock1 + 0x7F8
- adds r4, r0
- adds r0, r5, 0
- bl GetNature
- lsls r0, 24
- lsrs r0, 24
- adds r1, r4, 0
- bl sub_810CAE4
- ldr r6, _08147EA4 @ =gUnknown_02039312
- strh r0, [r6]
- ldr r1, _08147EA8 @ =gStringVar1
- adds r0, r5, 0
- bl GetMonNickname
- ldr r1, _08147EAC @ =gStringVar2
- adds r0, r4, 0
- bl sub_810CB44
- movs r1, 0
- ldrsh r0, [r6, r1]
- cmp r0, 0
- bne _08147EB8
- ldr r0, _08147EB0 @ =gStringVar4
- ldr r1, _08147EB4 @ =gContestStatsText_NormallyAte
- bl StringExpandPlaceholders
- b _08147ED8
- .align 2, 0
-_08147E94: .4byte gUnknown_02039310
-_08147E98: .4byte gPlayerParty
-_08147E9C: .4byte gScriptItemId
-_08147EA0: .4byte gSaveBlock1 + 0x7F8
-_08147EA4: .4byte gUnknown_02039312
-_08147EA8: .4byte gStringVar1
-_08147EAC: .4byte gStringVar2
-_08147EB0: .4byte gStringVar4
-_08147EB4: .4byte gContestStatsText_NormallyAte
-_08147EB8:
- cmp r0, 0
- ble _08147ED0
- ldr r0, _08147EC8 @ =gStringVar4
- ldr r1, _08147ECC @ =gContestStatsText_HappilyAte
- bl StringExpandPlaceholders
- b _08147ED8
- .align 2, 0
-_08147EC8: .4byte gStringVar4
-_08147ECC: .4byte gContestStatsText_HappilyAte
-_08147ED0:
- ldr r0, _08147EF8 @ =gStringVar4
- ldr r1, _08147EFC @ =gContestStatsText_DisdainfullyAte
- bl StringExpandPlaceholders
-_08147ED8:
- ldr r0, _08147EF8 @ =gStringVar4
- movs r1, 0x1
- movs r2, 0xF
- bl MenuPrintMessage
- ldr r1, _08147F00 @ =gTasks
- lsls r0, r7, 2
- adds r0, r7
- lsls r0, 3
- adds r0, r1
- ldr r1, _08147F04 @ =sub_8147E10
- str r1, [r0]
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08147EF8: .4byte gStringVar4
-_08147EFC: .4byte gContestStatsText_DisdainfullyAte
-_08147F00: .4byte gTasks
-_08147F04: .4byte sub_8147E10
- thumb_func_end sub_8147E40
-
- thumb_func_start sub_8147F08
-sub_8147F08: @ 8147F08
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _08147F3C @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08147F34
- ldr r0, _08147F40 @ =gMPlay_BGM
- ldr r1, _08147F44 @ =0x0000ffff
- movs r2, 0x80
- lsls r2, 1
- bl m4aMPlayVolumeControl
- ldr r0, _08147F48 @ =gMain
- ldr r0, [r0, 0x8]
- bl SetMainCallback2
- adds r0, r4, 0
- bl DestroyTask
-_08147F34:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08147F3C: .4byte gPaletteFade
-_08147F40: .4byte gMPlay_BGM
-_08147F44: .4byte 0x0000ffff
-_08147F48: .4byte gMain
- thumb_func_end sub_8147F08
-
- thumb_func_start sub_8147F4C
-sub_8147F4C: @ 8147F4C
- 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, _08147F7C @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _08147F80 @ =sub_8147F08
- str r1, [r0]
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08147F7C: .4byte gTasks
-_08147F80: .4byte sub_8147F08
- thumb_func_end sub_8147F4C
-
- thumb_func_start sub_8147F84
-sub_8147F84: @ 8147F84
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- adds r5, r0, 0
- movs r1, 0x41
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- ldr r0, _08148024 @ =gUnknown_02024E8C
- movs r1, 0x30
- movs r2, 0x50
- movs r3, 0x2
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- ldr r0, _08148028 @ =gUnknown_03005F24
- strh r4, [r0]
- ldr r0, _0814802C @ =gUnknown_03005F2C
- mov r1, r8
- strb r1, [r0]
- adds r0, r5, 0
- bl GetNature
- ldr r1, _08148030 @ =gUnknown_03005F30
- strb r0, [r1]
- ldr r7, _08148034 @ =gSprites
- mov r1, r8
- lsls r0, r1, 4
- add r0, r8
- lsls r5, r0, 2
- adds r6, r5, r7
- strh r4, [r6, 0x32]
- adds r0, r7, 0
- adds r0, 0x1C
- adds r0, r5, r0
- ldr r1, _08148038 @ =SpriteCallbackDummy
- str r1, [r0]
- ldr r0, _0814803C @ =gUnknown_03005F28
- mov r9, r0
- movs r0, 0x1
- mov r1, r9
- strb r0, [r1]
- adds r0, r4, 0
- bl IsPokeSpriteNotFlipped
- lsls r0, 24
- cmp r0, 0
- bne _08148016
- adds r0, r7, 0
- adds r0, 0x10
- adds r0, r5, r0
- ldr r1, _08148040 @ =gSpriteAffineAnimTable_84120EC
- str r1, [r0]
- ldrb r3, [r6, 0x1]
- movs r0, 0x3
- orrs r3, r0
- strb r3, [r6, 0x1]
- lsrs r1, r3, 6
- ldrb r2, [r6, 0x3]
- lsrs r2, 6
- lsls r3, 30
- lsrs r3, 30
- adds r0, r6, 0
- bl CalcCenterToCornerVec
- movs r0, 0
- mov r1, r9
- strb r0, [r1]
-_08148016:
- mov r0, r8
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_08148024: .4byte gUnknown_02024E8C
-_08148028: .4byte gUnknown_03005F24
-_0814802C: .4byte gUnknown_03005F2C
-_08148030: .4byte gUnknown_03005F30
-_08148034: .4byte gSprites
-_08148038: .4byte SpriteCallbackDummy
-_0814803C: .4byte gUnknown_03005F28
-_08148040: .4byte gSpriteAffineAnimTable_84120EC
- thumb_func_end sub_8147F84
-
- thumb_func_start sub_8148044
-sub_8148044: @ 8148044
- lsls r0, 24
- lsrs r0, 24
- ldr r3, _0814806C @ =gSprites
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r2, r1, r3
- movs r0, 0x30
- strh r0, [r2, 0x20]
- movs r0, 0x50
- strh r0, [r2, 0x22]
- ldr r0, _08148070 @ =0x0000fff8
- strh r0, [r2, 0x2E]
- movs r0, 0x1
- strh r0, [r2, 0x30]
- adds r3, 0x1C
- adds r1, r3
- ldr r0, _08148074 @ =sub_8148078
- str r0, [r1]
- bx lr
- .align 2, 0
-_0814806C: .4byte gSprites
-_08148070: .4byte 0x0000fff8
-_08148074: .4byte sub_8148078
- thumb_func_end sub_8148044
-
- thumb_func_start sub_8148078
-sub_8148078: @ 8148078
- push {r4,lr}
- adds r4, r0, 0
- ldrh r0, [r4, 0x20]
- adds r0, 0x4
- strh r0, [r4, 0x20]
- ldrh r0, [r4, 0x2E]
- ldrh r2, [r4, 0x22]
- adds r1, r0, r2
- strh r1, [r4, 0x22]
- ldrh r1, [r4, 0x30]
- adds r0, r1
- strh r0, [r4, 0x2E]
- lsls r0, 16
- cmp r0, 0
- bne _0814809E
- ldrh r0, [r4, 0x32]
- movs r1, 0
- bl PlayCry1
-_0814809E:
- movs r1, 0x2E
- ldrsh r0, [r4, r1]
- cmp r0, 0x9
- bne _081480AA
- ldr r0, _081480B0 @ =SpriteCallbackDummy
- str r0, [r4, 0x1C]
-_081480AA:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_081480B0: .4byte SpriteCallbackDummy
- thumb_func_end sub_8148078
-
- thumb_func_start sub_81480B4
-sub_81480B4: @ 81480B4
- push {r4,r5,lr}
- movs r0, 0xBC
- movs r1, 0x64
- movs r2, 0x2
- bl sub_810BA50
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r5, _081480FC @ =gSprites
- lsls r3, r4, 4
- adds r3, r4
- lsls r3, 2
- adds r0, r3, r5
- ldrb r2, [r0, 0x1]
- movs r1, 0x4
- negs r1, r1
- ands r1, r2
- movs r2, 0x1
- orrs r1, r2
- strb r1, [r0, 0x1]
- adds r1, r5, 0
- adds r1, 0x10
- adds r1, r3, r1
- ldr r2, _08148100 @ =gSpriteAffineAnimTable_84121A0
- str r2, [r1]
- adds r5, 0x1C
- adds r3, r5
- ldr r1, _08148104 @ =SpriteCallbackDummy
- str r1, [r3]
- bl InitSpriteAffineAnim
- adds r0, r4, 0
- pop {r4,r5}
- pop {r1}
- bx r1
- .align 2, 0
-_081480FC: .4byte gSprites
-_08148100: .4byte gSpriteAffineAnimTable_84121A0
-_08148104: .4byte SpriteCallbackDummy
- thumb_func_end sub_81480B4
-
- thumb_func_start sub_8148108
-sub_8148108: @ 8148108
- 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
- ldr r0, _08148148 @ =gSprites
- mov r8, r0
- lsls r0, r7, 4
- adds r0, r7
- lsls r6, r0, 2
- mov r0, r8
- adds r4, r6, r0
- ldrb r0, [r4, 0x3]
- lsls r0, 26
- lsrs r0, 27
- bl FreeOamMatrix
- ldrb r0, [r4, 0x1]
- movs r1, 0x3
- orrs r0, r1
- strb r0, [r4, 0x1]
- cmp r5, 0
- bne _08148150
- mov r0, r8
- adds r0, 0x10
- adds r0, r6, r0
- ldr r1, _0814814C @ =gSpriteAffineAnimTable_84121A4
- b _08148158
- .align 2, 0
-_08148148: .4byte gSprites
-_0814814C: .4byte gSpriteAffineAnimTable_84121A4
-_08148150:
- mov r0, r8
- adds r0, 0x10
- adds r0, r6, r0
- ldr r1, _08148174 @ =gSpriteAffineAnimTable_84121A8
-_08148158:
- str r1, [r0]
- lsls r0, r7, 4
- adds r0, r7
- lsls r0, 2
- ldr r1, _08148178 @ =gSprites
- adds r0, r1
- bl InitSpriteAffineAnim
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08148174: .4byte gSpriteAffineAnimTable_84121A8
-_08148178: .4byte gSprites
- thumb_func_end sub_8148108
-
- thumb_func_start sub_814817C
-sub_814817C: @ 814817C
- push {lr}
- ldr r0, _081481A4 @ =gSpriteTemplate_84121E4
- movs r1, 0xAE
- movs r2, 0x54
- movs r3, 0x1
- bl CreateSprite
- lsls r0, 24
- lsrs r0, 24
- ldr r2, _081481A8 @ =gSprites
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r2
- ldr r2, _081481AC @ =0x0000fff4
- strh r2, [r1, 0x2E]
- movs r2, 0x1
- strh r2, [r1, 0x30]
- pop {r1}
- bx r1
- .align 2, 0
-_081481A4: .4byte gSpriteTemplate_84121E4
-_081481A8: .4byte gSprites
-_081481AC: .4byte 0x0000fff4
- thumb_func_end sub_814817C
-
- thumb_func_start sub_81481B0
-sub_81481B0: @ 81481B0
- push {lr}
- adds r2, r0, 0
- ldrh r0, [r2, 0x20]
- subs r0, 0x4
- strh r0, [r2, 0x20]
- ldrh r0, [r2, 0x2E]
- ldrh r3, [r2, 0x22]
- adds r1, r0, r3
- strh r1, [r2, 0x22]
- ldrh r1, [r2, 0x30]
- adds r0, r1
- strh r0, [r2, 0x2E]
- lsls r0, 16
- asrs r0, 16
- cmp r0, 0xA
- bne _081481D6
- adds r0, r2, 0
- bl DestroySprite
-_081481D6:
- pop {r0}
- bx r0
- thumb_func_end sub_81481B0
-
- thumb_func_start sub_81481DC
-sub_81481DC: @ 81481DC
- push {r4-r7,lr}
- ldr r6, _0814824C @ =gUnknown_03005F34
- movs r0, 0x1
- strh r0, [r6]
- ldr r1, _08148250 @ =gNatureToMonPokeblockAnim
- ldr r0, _08148254 @ =gUnknown_03005F30
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrb r3, [r0]
- movs r4, 0
- ldr r2, _08148258 @ =gMonPokeblockAnims
- lsls r1, r3, 2
- adds r1, r3
- lsls r1, 2
- adds r7, r2, 0
- adds r7, 0x8
- adds r0, r1, r7
- ldrh r0, [r0]
- adds r0, 0x1
- strh r0, [r6]
- adds r5, r2, 0
- adds r5, 0x12
- adds r1, r5
- movs r2, 0
- ldrsh r0, [r1, r2]
- cmp r0, 0x1
- beq _08148244
- adds r2, r6, 0
- adds r6, r5, 0
- adds r5, r7, 0
-_0814821A:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- adds r0, r3, 0x1
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r4, 0x7
- bhi _08148244
- lsls r1, r3, 2
- adds r1, r3
- lsls r1, 2
- adds r0, r1, r5
- ldrh r0, [r0]
- ldrh r7, [r2]
- adds r0, r7
- strh r0, [r2]
- adds r1, r6
- movs r7, 0
- ldrsh r0, [r1, r7]
- cmp r0, 0x1
- bne _0814821A
-_08148244:
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0814824C: .4byte gUnknown_03005F34
-_08148250: .4byte gNatureToMonPokeblockAnim
-_08148254: .4byte gUnknown_03005F30
-_08148258: .4byte gMonPokeblockAnims
- thumb_func_end sub_81481DC
-
- thumb_func_start sub_814825C
-sub_814825C: @ 814825C
- push {lr}
- ldr r0, _08148274 @ =gUnknown_03005F3C
- ldrb r0, [r0]
- cmp r0, 0x5A
- bls _08148268
- b _08148532
-_08148268:
- lsls r0, 2
- ldr r1, _08148278 @ =_0814827C
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_08148274: .4byte gUnknown_03005F3C
-_08148278: .4byte _0814827C
- .align 2, 0
-_0814827C:
- .4byte _081483E8
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _0814843C
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _0814847A
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _081484CC
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148524
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
- .4byte _08148532
-_081483E8:
- ldr r2, _0814841C @ =gUnknown_03005F40
- ldr r1, _08148420 @ =gNatureToMonPokeblockAnim
- ldr r0, _08148424 @ =gUnknown_03005F30
- ldrb r0, [r0]
- lsls r0, 1
- adds r0, r1
- ldrb r0, [r0]
- strb r0, [r2]
- ldr r2, _08148428 @ =gUnknown_03005F20
- ldr r0, _0814842C @ =gUnknown_03005F2C
- ldrb r0, [r0]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- ldr r0, _08148430 @ =gSprites
- adds r1, r0
- str r1, [r2]
- ldr r0, _08148434 @ =gUnknown_03005F50
- movs r2, 0x44
- bl memcpy
- ldr r1, _08148438 @ =gUnknown_03005F3C
- movs r0, 0xA
- strb r0, [r1]
- b _08148532
- .align 2, 0
-_0814841C: .4byte gUnknown_03005F40
-_08148420: .4byte gNatureToMonPokeblockAnim
-_08148424: .4byte gUnknown_03005F30
-_08148428: .4byte gUnknown_03005F20
-_0814842C: .4byte gUnknown_03005F2C
-_08148430: .4byte gSprites
-_08148434: .4byte gUnknown_03005F50
-_08148438: .4byte gUnknown_03005F3C
-_0814843C:
- bl sub_8148540
- ldr r1, _081484A4 @ =gNatureToMonPokeblockAnim
- ldr r0, _081484A8 @ =gUnknown_03005F30
- ldrb r0, [r0]
- lsls r0, 1
- adds r1, 0x1
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0
- beq _08148474
- ldr r3, _081484AC @ =gUnknown_03005F20
- ldr r2, [r3]
- ldrb r0, [r2, 0x1]
- movs r1, 0x3
- orrs r0, r1
- strb r0, [r2, 0x1]
- ldr r2, [r3]
- ldrb r1, [r2, 0x3]
- movs r0, 0x3F
- negs r0, r0
- ands r0, r1
- strb r0, [r2, 0x3]
- ldr r0, [r3]
- ldr r1, _081484B0 @ =gSpriteAffineAnimTable_8412050
- str r1, [r0, 0x10]
- bl InitSpriteAffineAnim
-_08148474:
- ldr r1, _081484B4 @ =gUnknown_03005F3C
- movs r0, 0x32
- strb r0, [r1]
-_0814847A:
- ldr r1, _081484A4 @ =gNatureToMonPokeblockAnim
- ldr r0, _081484A8 @ =gUnknown_03005F30
- ldrb r0, [r0]
- lsls r0, 1
- adds r1, 0x1
- adds r2, r0, r1
- ldrb r1, [r2]
- cmp r1, 0
- beq _081484EE
- ldr r0, _081484B8 @ =gUnknown_03005F28
- ldrb r0, [r0]
- cmp r0, 0
- bne _081484BC
- ldr r0, _081484AC @ =gUnknown_03005F20
- ldr r0, [r0]
- adds r1, 0xA
- lsls r1, 24
- lsrs r1, 24
- bl StartSpriteAffineAnim
- b _081484EE
- .align 2, 0
-_081484A4: .4byte gNatureToMonPokeblockAnim
-_081484A8: .4byte gUnknown_03005F30
-_081484AC: .4byte gUnknown_03005F20
-_081484B0: .4byte gSpriteAffineAnimTable_8412050
-_081484B4: .4byte gUnknown_03005F3C
-_081484B8: .4byte gUnknown_03005F28
-_081484BC:
- ldr r0, _081484C8 @ =gUnknown_03005F20
- ldr r0, [r0]
- ldrb r1, [r2]
- bl StartSpriteAffineAnim
- b _081484EE
- .align 2, 0
-_081484C8: .4byte gUnknown_03005F20
-_081484CC:
- bl sub_81485CC
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08148532
- ldr r0, _081484F8 @ =gUnknown_03005FA0
- movs r1, 0x12
- ldrsh r0, [r0, r1]
- cmp r0, 0
- bne _08148504
- ldr r1, _081484FC @ =gUnknown_03005F40
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- bl sub_8148540
-_081484EE:
- ldr r1, _08148500 @ =gUnknown_03005F3C
- movs r0, 0x3C
- strb r0, [r1]
- b _08148532
- .align 2, 0
-_081484F8: .4byte gUnknown_03005FA0
-_081484FC: .4byte gUnknown_03005F40
-_08148500: .4byte gUnknown_03005F3C
-_08148504:
- ldr r0, _0814851C @ =gUnknown_03005F20
- ldr r0, [r0]
- ldrb r0, [r0, 0x3]
- lsls r0, 26
- lsrs r0, 27
- bl FreeOamMatrix
- ldr r1, _08148520 @ =gUnknown_03005F3C
- movs r0, 0x46
- strb r0, [r1]
- b _08148532
- .align 2, 0
-_0814851C: .4byte gUnknown_03005F20
-_08148520: .4byte gUnknown_03005F3C
-_08148524:
- bl sub_8148618
- ldr r0, _08148538 @ =gUnknown_03005F40
- movs r1, 0
- strb r1, [r0]
- ldr r0, _0814853C @ =gUnknown_03005F3C
- strb r1, [r0]
-_08148532:
- pop {r0}
- bx r0
- .align 2, 0
-_08148538: .4byte gUnknown_03005F40
-_0814853C: .4byte gUnknown_03005F3C
- thumb_func_end sub_814825C
-
- thumb_func_start sub_8148540
-sub_8148540: @ 8148540
- push {r4-r7,lr}
- movs r4, 0
- ldr r5, _081485B4 @ =gUnknown_03005FA0
- mov r12, r5
- ldr r7, _081485B8 @ =gMonPokeblockAnims
- ldr r6, _081485BC @ =gUnknown_03005F40
-_0814854C:
- lsls r2, r4, 1
- mov r0, r12
- adds r3, r2, r0
- ldrb r1, [r6]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 2
- adds r2, r0
- adds r2, r7
- ldrh r0, [r2]
- strh r0, [r3]
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x9
- bls _0814854C
- movs r1, 0x8
- ldrsh r0, [r5, r1]
- cmp r0, 0
- beq _081485C4
- movs r2, 0
- ldrsh r0, [r5, r2]
- movs r2, 0x4
- ldrsh r1, [r5, r2]
- bl Sin
- strh r0, [r5, 0x14]
- movs r1, 0
- ldrsh r0, [r5, r1]
- movs r2, 0x6
- ldrsh r1, [r5, r2]
- bl Cos
- strh r0, [r5, 0x16]
- ldrh r0, [r5, 0x8]
- strh r0, [r5, 0x18]
- ldr r0, _081485C0 @ =gUnknown_03005F20
- ldr r1, [r0]
- ldrh r0, [r1, 0x24]
- strh r0, [r5, 0x1A]
- ldrh r0, [r1, 0x26]
- strh r0, [r5, 0x1C]
- bl sub_8148710
- ldrh r0, [r5, 0x18]
- strh r0, [r5, 0x8]
- bl sub_814862C
- ldrh r0, [r5, 0x18]
- strh r0, [r5, 0x8]
- movs r0, 0
- b _081485C6
- .align 2, 0
-_081485B4: .4byte gUnknown_03005FA0
-_081485B8: .4byte gMonPokeblockAnims
-_081485BC: .4byte gUnknown_03005F40
-_081485C0: .4byte gUnknown_03005F20
-_081485C4:
- movs r0, 0x1
-_081485C6:
- pop {r4-r7}
- pop {r1}
- bx r1
- thumb_func_end sub_8148540
-
- thumb_func_start sub_81485CC
-sub_81485CC: @ 81485CC
- push {r4,lr}
- ldr r3, _08148604 @ =gUnknown_03005FA0
- ldrh r0, [r3, 0x18]
- ldrh r1, [r3, 0x8]
- subs r0, r1
- lsls r0, 16
- ldr r1, _08148608 @ =gUnknown_03005F20
- ldr r4, [r1]
- lsrs r0, 15
- ldr r1, _0814860C @ =0x0201d000
- adds r2, r0, r1
- ldrh r2, [r2]
- strh r2, [r4, 0x24]
- movs r2, 0x80
- lsls r2, 3
- adds r1, r2
- adds r0, r1
- ldrh r0, [r0]
- strh r0, [r4, 0x26]
- ldrh r0, [r3, 0x8]
- subs r0, 0x1
- strh r0, [r3, 0x8]
- lsls r0, 16
- cmp r0, 0
- beq _08148610
- movs r0, 0
- b _08148612
- .align 2, 0
-_08148604: .4byte gUnknown_03005FA0
-_08148608: .4byte gUnknown_03005F20
-_0814860C: .4byte 0x0201d000
-_08148610:
- movs r0, 0x1
-_08148612:
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end sub_81485CC
-
- thumb_func_start sub_8148618
-sub_8148618: @ 8148618
- push {lr}
- ldr r0, _08148628 @ =gUnknown_03005F20
- ldr r0, [r0]
- bl FreeSpriteOamMatrix
- movs r0, 0
- pop {r1}
- bx r1
- .align 2, 0
-_08148628: .4byte gUnknown_03005F20
- thumb_func_end sub_8148618
-
- thumb_func_start sub_814862C
-sub_814862C: @ 814862C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x10
- ldr r1, _08148700 @ =gUnknown_03005FA0
- ldrh r0, [r1, 0x10]
- mov r8, r0
- ldrh r0, [r1, 0x18]
- mov r2, r8
- subs r0, r2
- lsls r0, 16
- lsrs r7, r0, 16
- ldrh r0, [r1, 0xC]
- ldrh r3, [r1, 0x1A]
- adds r0, r3
- lsls r0, 16
- lsrs r0, 16
- str r0, [sp]
- ldrh r0, [r1, 0xE]
- ldrh r1, [r1, 0x1C]
- adds r0, r1
- lsls r0, 16
- lsrs r0, 16
- mov r9, r0
- movs r6, 0
- subs r0, r7, 0x1
- ldr r4, _08148704 @ =0x0201cffe
- mov r10, r4
- cmp r6, r0
- bge _081486D4
- ldr r1, [sp]
- lsls r0, r1, 16
- asrs r0, 16
- str r0, [sp, 0x4]
-_08148674:
- mov r2, r8
- adds r5, r2, r6
- lsls r5, 1
- ldr r4, _08148708 @ =0x0201d000
- adds r3, r5, r4
- ldrh r2, [r3]
- ldr r0, [sp, 0x4]
- subs r1, r2, r0
- ldr r4, _0814870C @ =0x0201d400
- adds r5, r4
- ldrh r0, [r5]
- mov r12, r0
- mov r4, r9
- lsls r0, r4, 16
- asrs r0, 16
- mov r4, r12
- subs r0, r4, r0
- lsls r4, r0, 16
- lsrs r4, 16
- lsls r1, 16
- asrs r1, 16
- adds r6, 0x1
- adds r0, r1, 0
- muls r0, r6
- adds r1, r7, 0
- str r2, [sp, 0x8]
- str r3, [sp, 0xC]
- bl __divsi3
- ldr r2, [sp, 0x8]
- subs r2, r0
- ldr r3, [sp, 0xC]
- strh r2, [r3]
- lsls r4, 16
- asrs r4, 16
- adds r0, r4, 0
- muls r0, r6
- adds r1, r7, 0
- bl __divsi3
- ldrh r1, [r5]
- subs r1, r0
- strh r1, [r5]
- lsls r6, 16
- lsrs r6, 16
- subs r0, r7, 0x1
- cmp r6, r0
- blt _08148674
-_081486D4:
- mov r1, r8
- adds r0, r1, r7
- lsls r0, 1
- mov r2, r10
- adds r1, r0, r2
- mov r3, sp
- ldrh r3, [r3]
- strh r3, [r1]
- movs r1, 0x80
- lsls r1, 3
- add r1, r10
- adds r0, r1
- mov r4, r9
- strh r4, [r0]
- add sp, 0x10
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08148700: .4byte gUnknown_03005FA0
-_08148704: .4byte 0x0201cffe
-_08148708: .4byte 0x0201d000
-_0814870C: .4byte 0x0201d400
- thumb_func_end sub_814862C
-
- thumb_func_start sub_8148710
-sub_8148710: @ 8148710
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- movs r0, 0
- str r0, [sp]
- ldr r1, _081487A4 @ =gUnknown_03005FA0
- ldrh r2, [r1, 0x1A]
- ldrh r0, [r1, 0x14]
- subs r2, r0
- ldrh r3, [r1, 0x1C]
- ldrh r0, [r1, 0x16]
- subs r3, r0
- adds r6, r1, 0
- ldr r1, _081487A8 @ =0x0201d000
- mov r9, r1
- lsls r2, 16
- asrs r2, 16
- mov r8, r2
- movs r2, 0x80
- lsls r2, 3
- add r2, r9
- mov r10, r2
- lsls r3, 16
- asrs r7, r3, 16
-_08148746:
- movs r1, 0xA
- ldrsh r0, [r6, r1]
- cmp r0, 0
- bge _08148750
- negs r0, r0
-_08148750:
- lsls r0, 16
- lsrs r0, 16
- ldrh r2, [r6, 0x6]
- adds r0, r2
- lsls r5, r0, 16
- strh r0, [r6, 0x6]
- ldrh r2, [r6, 0x4]
- movs r1, 0x4
- ldrsh r0, [r6, r1]
- cmp r0, 0
- bge _0814876A
- movs r0, 0x1
- str r0, [sp]
-_0814876A:
- ldrh r0, [r6, 0x18]
- ldrh r1, [r6, 0x8]
- subs r0, r1
- lsls r0, 16
- lsrs r4, r0, 16
- cmp r1, 0
- beq _081487F0
- ldr r1, [sp]
- cmp r1, 0
- bne _081487AC
- movs r1, 0
- ldrsh r0, [r6, r1]
- lsrs r5, 24
- adds r1, r2, r5
- lsls r1, 16
- asrs r1, 16
- bl Sin
- lsls r4, 1
- mov r2, r9
- adds r1, r4, r2
- add r0, r8
- strh r0, [r1]
- movs r1, 0
- ldrsh r0, [r6, r1]
- ldrh r1, [r6, 0x6]
- adds r1, r5
- b _081487CE
- .align 2, 0
-_081487A4: .4byte gUnknown_03005FA0
-_081487A8: .4byte 0x0201d000
-_081487AC:
- movs r1, 0
- ldrsh r0, [r6, r1]
- lsrs r5, 24
- subs r1, r2, r5
- lsls r1, 16
- asrs r1, 16
- bl Sin
- lsls r4, 1
- mov r2, r9
- adds r1, r4, r2
- add r0, r8
- strh r0, [r1]
- movs r1, 0
- ldrsh r0, [r6, r1]
- ldrh r1, [r6, 0x6]
- subs r1, r5
-_081487CE:
- lsls r1, 16
- asrs r1, 16
- bl Cos
- add r4, r10
- adds r0, r7, r0
- strh r0, [r4]
- ldrh r0, [r6, 0x2]
- ldrh r2, [r6]
- adds r0, r2
- movs r1, 0xFF
- ands r0, r1
- strh r0, [r6]
- ldrh r0, [r6, 0x8]
- subs r0, 0x1
- strh r0, [r6, 0x8]
- b _08148746
-_081487F0:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8148710
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/pokedex_area_screen.s b/asm/pokedex_area_screen.s
index 542eed201..9e380f597 100644
--- a/asm/pokedex_area_screen.s
+++ b/asm/pokedex_area_screen.s
@@ -518,7 +518,7 @@ _08110A44:
bl GetRoamerLocation
ldrb r0, [r4, 0x10]
ldrb r1, [r4, 0x11]
- bl get_mapheader_by_bank_and_number
+ bl Overworld_GetMapHeaderByGroupAndId
ldrb r0, [r0, 0x14]
strh r0, [r4, 0x12]
movs r3, 0x88
@@ -566,7 +566,7 @@ SetAreaHasMon: @ 8110A98
adds r0, r5
strb r1, [r0, 0x11]
adds r0, r2, 0
- bl get_mapheader_by_bank_and_number
+ bl Overworld_GetMapHeaderByGroupAndId
ldrb r0, [r0, 0x14]
bl sub_80FBA04
ldrh r1, [r4]
@@ -599,7 +599,7 @@ SetSpecialMapHasMon: @ 8110AE4
cmp r0, 0x1F
bhi _08110B96
adds r0, r2, 0
- bl get_mapheader_by_bank_and_number
+ bl Overworld_GetMapHeaderByGroupAndId
adds r6, r0, 0
ldrb r0, [r6, 0x14]
cmp r0, 0x57
diff --git a/asm/pokemon_menu.s b/asm/pokemon_menu.s
deleted file mode 100644
index fe1b41724..000000000
--- a/asm/pokemon_menu.s
+++ /dev/null
@@ -1,3438 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "constants/species_constants.inc"
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_8089A70
-sub_8089A70: @ 8089A70
- push {lr}
- ldr r0, _08089A88 @ =gPaletteFade
- ldrb r1, [r0, 0x8]
- movs r2, 0x80
- orrs r1, r2
- strb r1, [r0, 0x8]
- movs r0, 0
- movs r1, 0
- bl OpenPartyMenu
- pop {r0}
- bx r0
- .align 2, 0
-_08089A88: .4byte gPaletteFade
- thumb_func_end sub_8089A70
-
- thumb_func_start sub_8089A8C
-sub_8089A8C: @ 8089A8C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r5, _08089AD0 @ =gUnknown_0202FFA9
- movs r0, 0
- strb r0, [r5]
- ldr r0, _08089AD4 @ =gLastFieldPokeMenuOpened
- ldrb r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08089AD8 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0
- beq _08089AE0
- ldr r4, _08089ADC @ =gUnknown_0202FFAA
- adds r0, r4, 0
- adds r1, r5, 0
- movs r2, 0
- bl AppendToList
- adds r0, r4, 0
- adds r1, r5, 0
- movs r2, 0x1
- bl AppendToList
- adds r0, r4, 0
- adds r1, r5, 0
- movs r2, 0x3
- bl AppendToList
- b _08089BC8
- .align 2, 0
-_08089AD0: .4byte gUnknown_0202FFA9
-_08089AD4: .4byte gLastFieldPokeMenuOpened
-_08089AD8: .4byte gPlayerParty
-_08089ADC: .4byte gUnknown_0202FFAA
-_08089AE0:
- movs r6, 0
- ldr r0, _08089B24 @ =gUnknown_0839F554
- ldrh r0, [r0]
- mov r8, r0
-_08089AE8:
- movs r4, 0
- adds r7, r6, 0x1
- mov r0, r8
- cmp r0, 0xFF
- beq _08089B48
- ldr r5, _08089B24 @ =gUnknown_0839F554
-_08089AF4:
- ldr r0, _08089B28 @ =gLastFieldPokeMenuOpened
- ldrb r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08089B2C @ =gPlayerParty
- adds r0, r1
- adds r1, r6, 0
- adds r1, 0xD
- bl GetMonData
- lsls r1, r4, 1
- adds r1, r5
- ldrh r1, [r1]
- cmp r0, r1
- bne _08089B38
- adds r2, r4, 0
- adds r2, 0xA
- lsls r2, 24
- lsrs r2, 24
- ldr r0, _08089B30 @ =gUnknown_0202FFAA
- ldr r1, _08089B34 @ =gUnknown_0202FFA9
- bl AppendToList
- b _08089B48
- .align 2, 0
-_08089B24: .4byte gUnknown_0839F554
-_08089B28: .4byte gLastFieldPokeMenuOpened
-_08089B2C: .4byte gPlayerParty
-_08089B30: .4byte gUnknown_0202FFAA
-_08089B34: .4byte gUnknown_0202FFA9
-_08089B38:
- adds r0, r4, 0x1
- lsls r0, 16
- lsrs r4, r0, 16
- lsls r0, r4, 1
- adds r0, r5
- ldrh r0, [r0]
- cmp r0, 0xFF
- bne _08089AF4
-_08089B48:
- lsls r0, r7, 16
- lsrs r6, r0, 16
- cmp r6, 0x3
- bls _08089AE8
- ldr r4, _08089BA4 @ =gUnknown_0202FFAA
- ldr r5, _08089BA8 @ =gUnknown_0202FFA9
- adds r0, r4, 0
- adds r1, r5, 0
- movs r2, 0
- bl AppendToList
- ldr r6, _08089BAC @ =gPlayerParty + 1 * 0x64
- adds r0, r6, 0
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _08089B76
- adds r0, r4, 0
- adds r1, r5, 0
- movs r2, 0x1
- bl AppendToList
-_08089B76:
- ldr r0, _08089BB0 @ =gLastFieldPokeMenuOpened
- ldrb r1, [r0]
- movs r0, 0x64
- muls r0, r1
- adds r1, r6, 0
- subs r1, 0x64
- adds r0, r1
- movs r1, 0xC
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- bl ItemIsMail
- lsls r0, 24
- cmp r0, 0
- beq _08089BB4
- adds r0, r4, 0
- adds r1, r5, 0
- movs r2, 0x7
- bl AppendToList
- b _08089BBE
- .align 2, 0
-_08089BA4: .4byte gUnknown_0202FFAA
-_08089BA8: .4byte gUnknown_0202FFA9
-_08089BAC: .4byte gPlayerParty + 1 * 0x64
-_08089BB0: .4byte gLastFieldPokeMenuOpened
-_08089BB4:
- adds r0, r4, 0
- adds r1, r5, 0
- movs r2, 0x2
- bl AppendToList
-_08089BBE:
- ldr r0, _08089BD4 @ =gUnknown_0202FFAA
- ldr r1, _08089BD8 @ =gUnknown_0202FFA9
- movs r2, 0x3
- bl AppendToList
-_08089BC8:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_08089BD4: .4byte gUnknown_0202FFAA
-_08089BD8: .4byte gUnknown_0202FFA9
- thumb_func_end sub_8089A8C
-
- thumb_func_start sub_8089BDC
-sub_8089BDC: @ 8089BDC
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- adds r5, r0, 0
- adds r6, r1, 0
- adds r4, r2, 0
- mov r8, r3
- ldr r7, [sp, 0x20]
- ldr r1, [sp, 0x24]
- lsls r5, 24
- lsrs r5, 24
- lsls r6, 24
- lsrs r6, 24
- lsls r4, 24
- lsrs r4, 24
- mov r0, r8
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- lsls r1, 24
- lsrs r1, 24
- movs r0, 0x5
- bl sub_806D538
- adds r4, r5, r4
- lsls r4, 24
- lsrs r4, 24
- mov r0, r8
- lsls r3, r0, 1
- adds r3, r6, r3
- adds r3, 0x1
- lsls r3, 24
- lsrs r3, 24
- adds r0, r5, 0
- adds r1, r6, 0
- adds r2, r4, 0
- bl MenuDrawTextWindow
- adds r5, 0x1
- lsls r5, 24
- lsrs r5, 24
- adds r6, 0x1
- lsls r6, 24
- lsrs r6, 24
- str r7, [sp]
- adds r0, r5, 0
- adds r1, r6, 0
- mov r2, r8
- ldr r3, [sp, 0x1C]
- bl PrintMenuItemsReordered
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_8089BDC
-
- thumb_func_start sub_8089C50
-sub_8089C50: @ 8089C50
- push {r4,r5,lr}
- sub sp, 0xC
- ldr r4, [sp, 0x18]
- ldr r5, [sp, 0x1C]
- lsls r0, 24
- lsrs r0, 24
- lsls r1, 24
- lsrs r1, 24
- lsls r2, 24
- lsrs r2, 24
- lsls r3, 24
- lsrs r3, 24
- str r4, [sp]
- str r5, [sp, 0x4]
- movs r4, 0x1
- str r4, [sp, 0x8]
- bl sub_8089BDC
- add sp, 0xC
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_8089C50
-
- thumb_func_start sub_8089C7C
-sub_8089C7C: @ 8089C7C
- push {r4-r6,lr}
- sub sp, 0xC
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- ldr r6, _08089CC8 @ =gUnknown_0202FFA9
- ldrb r0, [r6]
- lsls r0, 1
- movs r4, 0x12
- subs r4, r0
- lsls r4, 24
- lsrs r4, 24
- ldrb r3, [r6]
- ldr r0, _08089CCC @ =gPokemonMenuActions
- str r0, [sp]
- ldr r0, _08089CD0 @ =gUnknown_0202FFAA
- str r0, [sp, 0x4]
- movs r0, 0x3
- str r0, [sp, 0x8]
- movs r0, 0x13
- adds r1, r4, 0
- movs r2, 0xA
- bl sub_8089BDC
- movs r2, 0x1
- orrs r2, r4
- ldrb r3, [r6]
- str r5, [sp]
- movs r0, 0x9
- str r0, [sp, 0x4]
- movs r0, 0
- movs r1, 0x14
- bl InitMenu
- add sp, 0xC
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_08089CC8: .4byte gUnknown_0202FFA9
-_08089CCC: .4byte gPokemonMenuActions
-_08089CD0: .4byte gUnknown_0202FFAA
- thumb_func_end sub_8089C7C
-
- thumb_func_start sub_8089CD4
-sub_8089CD4: @ 8089CD4
- push {r4,r5,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _08089D00 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0
- bne _08089D84
- adds r0, r4, 0
- bl sub_806BD80
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x1
- beq _08089D04
- cmp r0, 0x2
- beq _08089D60
- b _08089D84
- .align 2, 0
-_08089D00: .4byte gPaletteFade
-_08089D04:
- movs r0, 0x5
- bl PlaySE
- adds r0, r4, 0
- bl sub_806CA38
- ldr r1, _08089D48 @ =gLastFieldPokeMenuOpened
- strb r0, [r1]
- ldrb r1, [r1]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08089D4C @ =gPlayerParty
- adds r0, r1
- ldr r1, _08089D50 @ =gStringVar1
- bl GetMonNickname
- bl sub_8089A8C
- ldr r0, _08089D54 @ =gUnknown_0202FFA8
- strb r5, [r0]
- movs r0, 0
- bl sub_8089C7C
- ldr r1, _08089D58 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _08089D5C @ =sub_8089D94
- str r1, [r0]
- adds r0, r4, 0
- bl sub_808B5B4
- b _08089D84
- .align 2, 0
-_08089D48: .4byte gLastFieldPokeMenuOpened
-_08089D4C: .4byte gPlayerParty
-_08089D50: .4byte gStringVar1
-_08089D54: .4byte gUnknown_0202FFA8
-_08089D58: .4byte gTasks
-_08089D5C: .4byte sub_8089D94
-_08089D60:
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x1
- negs r0, r0
- str r5, [sp]
- movs r1, 0
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r1, _08089D8C @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _08089D90 @ =sub_8089E4C
- str r1, [r0]
-_08089D84:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08089D8C: .4byte gTasks
-_08089D90: .4byte sub_8089E4C
- thumb_func_end sub_8089CD4
-
- thumb_func_start sub_8089D94
-sub_8089D94: @ 8089D94
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- adds r5, r4, 0
- ldr r0, _08089DC8 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _08089E44
- ldr r2, _08089DCC @ =gMain
- ldrh r0, [r2, 0x30]
- movs r1, 0xF0
- ands r1, r0
- cmp r1, 0x40
- bne _08089DD4
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x1
- negs r0, r0
- bl MoveMenuCursor
- ldr r1, _08089DD0 @ =gUnknown_0202FFA8
- strb r0, [r1]
- b _08089E1A
- .align 2, 0
-_08089DC8: .4byte gPaletteFade
-_08089DCC: .4byte gMain
-_08089DD0: .4byte gUnknown_0202FFA8
-_08089DD4:
- cmp r1, 0x80
- bne _08089DF0
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x1
- bl MoveMenuCursor
- ldr r1, _08089DEC @ =gUnknown_0202FFA8
- strb r0, [r1]
- b _08089E1A
- .align 2, 0
-_08089DEC: .4byte gUnknown_0202FFA8
-_08089DF0:
- ldrh r1, [r2, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _08089E30
- movs r0, 0x5
- bl PlaySE
- ldr r1, _08089E24 @ =gPokemonMenuActions
- ldr r2, _08089E28 @ =gUnknown_0202FFAA
- ldr r0, _08089E2C @ =gUnknown_0202FFA8
- ldrb r0, [r0]
- adds r0, r2
- ldrb r0, [r0]
- lsls r0, 3
- adds r1, 0x4
- adds r0, r1
- ldr r1, [r0]
- adds r0, r4, 0
- bl _call_via_r1
-_08089E1A:
- adds r0, r4, 0
- bl sub_808B5B4
- b _08089E44
- .align 2, 0
-_08089E24: .4byte gPokemonMenuActions
-_08089E28: .4byte gUnknown_0202FFAA
-_08089E2C: .4byte gUnknown_0202FFA8
-_08089E30:
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _08089E44
- adds r0, r5, 0
- bl PokemonMenu_Cancel
- adds r0, r5, 0
- bl sub_808B5B4
-_08089E44:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_8089D94
-
- thumb_func_start sub_8089E4C
-sub_8089E4C: @ 8089E4C
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _08089E78 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- lsls r0, 24
- lsrs r1, r0, 24
- cmp r1, 0
- bne _08089E72
- ldr r0, _08089E7C @ =gLastFieldPokeMenuOpened
- strb r1, [r0]
- ldr r0, _08089E80 @ =sub_805469C
- bl SetMainCallback2
- adds r0, r4, 0
- bl DestroyTask
-_08089E72:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08089E78: .4byte gPaletteFade
-_08089E7C: .4byte gLastFieldPokeMenuOpened
-_08089E80: .4byte sub_805469C
- thumb_func_end sub_8089E4C
-
- thumb_func_start sub_8089E84
-sub_8089E84: @ 8089E84
- push {lr}
- ldr r0, _08089EAC @ =gLastFieldPokeMenuOpened
- ldrb r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _08089EB0 @ =gPlayerParty
- adds r0, r1
- ldr r1, _08089EB4 @ =gStringVar1
- bl GetMonNickname
- bl sub_8089A8C
- ldr r1, _08089EB8 @ =gUnknown_0202FFA8
- movs r0, 0
- strb r0, [r1]
- movs r0, 0
- bl sub_8089C7C
- pop {r0}
- bx r0
- .align 2, 0
-_08089EAC: .4byte gLastFieldPokeMenuOpened
-_08089EB0: .4byte gPlayerParty
-_08089EB4: .4byte gStringVar1
-_08089EB8: .4byte gUnknown_0202FFA8
- thumb_func_end sub_8089E84
-
- thumb_func_start sub_8089EBC
-sub_8089EBC: @ 8089EBC
- push {r4,r5,lr}
- ldr r4, _08089EC4 @ =0x0201b260
- ldr r5, _08089EC8 @ =gUnknown_020384F0
- b _08089ED8
- .align 2, 0
-_08089EC4: .4byte 0x0201b260
-_08089EC8: .4byte gUnknown_020384F0
-_08089ECC:
- bl sub_80F9344
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _08089F04
-_08089ED8:
- bl sub_806B124
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _08089ECC
- ldrb r0, [r4]
- ldrb r1, [r5]
- bl sub_806C994
- ldrb r0, [r4]
- movs r1, 0
- bl sub_806BF74
- ldr r1, _08089F0C @ =gLastFieldPokeMenuOpened
- ldrb r0, [r5]
- strb r0, [r1]
- bl sub_8089E84
- ldr r0, _08089F10 @ =sub_806AEDC
- bl SetMainCallback2
-_08089F04:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08089F0C: .4byte gLastFieldPokeMenuOpened
-_08089F10: .4byte sub_806AEDC
- thumb_func_end sub_8089EBC
-
- thumb_func_start sub_8089F14
-sub_8089F14: @ 8089F14
- push {lr}
- ldr r2, _08089F38 @ =gPaletteFade
- ldrb r0, [r2, 0x8]
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r2, 0x8]
- ldr r2, _08089F3C @ =sub_8089D94
- movs r0, 0
- movs r1, 0xFF
- movs r3, 0x5
- bl sub_806AF4C
- ldr r0, _08089F40 @ =sub_8089EBC
- bl SetMainCallback2
- pop {r0}
- bx r0
- .align 2, 0
-_08089F38: .4byte gPaletteFade
-_08089F3C: .4byte sub_8089D94
-_08089F40: .4byte sub_8089EBC
- thumb_func_end sub_8089F14
-
- thumb_func_start sub_8089F44
-sub_8089F44: @ 8089F44
- push {r4,r5,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r3, r0, 24
- ldr r0, _08089FAC @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0
- bne _08089FA2
- ldr r2, _08089FB0 @ =gSprites
- ldr r1, _08089FB4 @ =gTasks
- lsls r0, r3, 2
- adds r0, r3
- lsls r0, 3
- adds r0, r1
- ldrh r1, [r0, 0xE]
- lsls r1, 16
- asrs r1, 24
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r2
- ldrh r4, [r0, 0x2E]
- lsls r4, 24
- lsrs r4, 24
- adds r0, r3, 0
- bl DestroyTask
- ldr r0, _08089FB8 @ =0x0201b000
- ldr r1, _08089FBC @ =0x00000262
- adds r0, r1
- movs r1, 0x1
- strb r1, [r0]
- ldr r0, _08089FC0 @ =gPlayerParty
- ldr r1, _08089FC4 @ =gPlayerPartyCount
- ldrb r2, [r1]
- subs r2, 0x1
- lsls r2, 24
- lsrs r2, 24
- ldr r3, _08089FC8 @ =sub_8089F14
- str r5, [sp]
- adds r1, r4, 0
- bl ShowPokemonSummaryScreen
-_08089FA2:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_08089FAC: .4byte gPaletteFade
-_08089FB0: .4byte gSprites
-_08089FB4: .4byte gTasks
-_08089FB8: .4byte 0x0201b000
-_08089FBC: .4byte 0x00000262
-_08089FC0: .4byte gPlayerParty
-_08089FC4: .4byte gPlayerPartyCount
-_08089FC8: .4byte sub_8089F14
- thumb_func_end sub_8089F44
-
- thumb_func_start PokemonMenu_Summary
-PokemonMenu_Summary: @ 8089FCC
- 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, _08089FFC @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _0808A000 @ =sub_8089F44
- str r1, [r0]
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_08089FFC: .4byte gTasks
-_0808A000: .4byte sub_8089F44
- thumb_func_end PokemonMenu_Summary
-
- thumb_func_start sub_808A004
-sub_808A004: @ 808A004
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0808A024 @ =sub_806CA60
- ldr r2, _0808A028 @ =sub_8089CD4
- bl SetTaskFuncWithFollowupFunc
- movs r0, 0x13
- movs r1, 0
- movs r2, 0x1D
- movs r3, 0x13
- bl MenuZeroFillWindowRect
- pop {r0}
- bx r0
- .align 2, 0
-_0808A024: .4byte sub_806CA60
-_0808A028: .4byte sub_8089CD4
- thumb_func_end sub_808A004
-
- thumb_func_start PokemonMenu_Switch
-PokemonMenu_Switch: @ 808A02C
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl HandleDestroyMenuCursors
- ldr r0, _0808A054 @ =0x02001000
- ldr r1, _0808A058 @ =sub_806CD5C
- str r1, [r0, 0xC]
- ldr r1, _0808A05C @ =0x0001a272
- adds r0, r1
- movs r1, 0x1
- strh r1, [r0]
- adds r0, r4, 0
- bl sub_808A004
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808A054: .4byte 0x02001000
-_0808A058: .4byte sub_806CD5C
-_0808A05C: .4byte 0x0001a272
- thumb_func_end PokemonMenu_Switch
-
- thumb_func_start sub_808A060
-sub_808A060: @ 808A060
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, _0808A0D0 @ =gMain
- ldrh r0, [r0, 0x2E]
- cmp r0, 0x40
- bne _0808A086
- ldr r4, _0808A0D4 @ =gUnknown_0202FFA8
- ldrb r0, [r4]
- cmp r0, 0
- beq _0808A086
- movs r0, 0x1
- negs r0, r0
- bl MoveMenuCursor
- strb r0, [r4]
- movs r0, 0x5
- bl PlaySE
-_0808A086:
- ldr r0, _0808A0D0 @ =gMain
- ldrh r0, [r0, 0x2E]
- cmp r0, 0x80
- bne _0808A0A4
- ldr r4, _0808A0D4 @ =gUnknown_0202FFA8
- ldrb r0, [r4]
- cmp r0, 0x2
- beq _0808A0A4
- movs r0, 0x1
- bl MoveMenuCursor
- strb r0, [r4]
- movs r0, 0x5
- bl PlaySE
-_0808A0A4:
- ldr r0, _0808A0D0 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0808A0E0
- movs r0, 0x5
- bl PlaySE
- ldr r1, _0808A0D8 @ =gUnknown_0839F578
- ldr r2, _0808A0DC @ =gPokemonMenuActions
- ldr r0, _0808A0D4 @ =gUnknown_0202FFA8
- ldrb r3, [r0]
- movs r0, 0
- bl PartyMenuGetPopupMenuFunc
- adds r1, r0, 0
- adds r0, r5, 0
- bl _call_via_r1
- b _0808A0F6
- .align 2, 0
-_0808A0D0: .4byte gMain
-_0808A0D4: .4byte gUnknown_0202FFA8
-_0808A0D8: .4byte gUnknown_0839F578
-_0808A0DC: .4byte gPokemonMenuActions
-_0808A0E0:
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0808A0F6
- ldr r1, _0808A0FC @ =gUnknown_0839F578
- movs r0, 0
- bl sub_806E7D0
- adds r0, r5, 0
- bl PokemonMenu_CancelSubmenu
-_0808A0F6:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0808A0FC: .4byte gUnknown_0839F578
- thumb_func_end sub_808A060
-
- thumb_func_start sub_808A100
-sub_808A100: @ 808A100
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r1, _0808A130 @ =gUnknown_0839F578
- ldr r2, _0808A134 @ =gPokemonMenuActions
- movs r0, 0
- movs r3, 0
- bl sub_806E750
- movs r0, 0xD
- movs r1, 0x2
- bl sub_806D538
- ldr r1, _0808A138 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _0808A13C @ =sub_808A060
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808A130: .4byte gUnknown_0839F578
-_0808A134: .4byte gPokemonMenuActions
-_0808A138: .4byte gTasks
-_0808A13C: .4byte sub_808A060
- thumb_func_end sub_808A100
-
- thumb_func_start PokemonMenu_Item
-PokemonMenu_Item: @ 808A140
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl HandleDestroyMenuCursors
- ldr r1, _0808A174 @ =gUnknown_0202FFA8
- movs r0, 0
- strb r0, [r1]
- movs r0, 0x13
- movs r1, 0
- movs r2, 0x1D
- movs r3, 0x13
- bl MenuZeroFillWindowRect
- ldr r1, _0808A178 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _0808A17C @ =sub_808A100
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808A174: .4byte gUnknown_0202FFA8
-_0808A178: .4byte gTasks
-_0808A17C: .4byte sub_808A100
- thumb_func_end PokemonMenu_Item
-
- thumb_func_start sub_808A180
-sub_808A180: @ 808A180
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, _0808A1D0 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0808A1CA
- adds r0, r5, 0
- bl sub_806CA38
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x64
- muls r0, r1
- ldr r1, _0808A1D4 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x40
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r5, 0
- bl DestroyTask
- lsls r1, r4, 3
- adds r1, r4
- lsls r1, 2
- ldr r0, _0808A1D8 @ =gSaveBlock1 + 0x2B4C
- adds r1, r0
- ldr r2, _0808A1DC @ =sub_808A520
- movs r0, 0x4
- movs r3, 0x3
- bl sub_80E62A0
-_0808A1CA:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0808A1D0: .4byte gPaletteFade
-_0808A1D4: .4byte gPlayerParty
-_0808A1D8: .4byte gSaveBlock1 + 0x2B4C
-_0808A1DC: .4byte sub_808A520
- thumb_func_end sub_808A180
-
- thumb_func_start sub_808A1E0
-sub_808A1E0: @ 808A1E0
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _0808A21C @ =gUnknown_0202E8F6
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _0808A216
- adds r0, r4, 0
- bl sub_806CA38
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl SetHeldItemIconVisibility
- movs r0, 0
- movs r1, 0
- bl sub_806D538
- ldr r1, _0808A220 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _0808A224 @ =sub_8089CD4
- str r1, [r0]
-_0808A216:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808A21C: .4byte gUnknown_0202E8F6
-_0808A220: .4byte gTasks
-_0808A224: .4byte sub_8089CD4
- thumb_func_end sub_808A1E0
-
- thumb_func_start sub_808A228
-sub_808A228: @ 808A228
- push {r4,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _0808A268 @ =gScriptItemId
- ldrh r0, [r0]
- bl ItemIsMail
- lsls r0, 24
- cmp r0, 0
- beq _0808A278
- ldr r0, _0808A26C @ =gUnknown_0202E8F4
- ldrb r0, [r0]
- cmp r0, 0
- beq _0808A278
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r1, _0808A270 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _0808A274 @ =sub_808A180
- str r1, [r0]
- b _0808A29A
- .align 2, 0
-_0808A268: .4byte gScriptItemId
-_0808A26C: .4byte gUnknown_0202E8F4
-_0808A270: .4byte gTasks
-_0808A274: .4byte sub_808A180
-_0808A278:
- movs r0, 0
- movs r1, 0
- movs r2, 0x1D
- movs r3, 0x13
- bl MenuZeroFillWindowRect
- movs r0, 0
- movs r1, 0
- bl sub_806D538
- ldr r0, _0808A2A4 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _0808A2A8 @ =sub_8089CD4
- str r0, [r1]
-_0808A29A:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808A2A4: .4byte gTasks
-_0808A2A8: .4byte sub_8089CD4
- thumb_func_end sub_808A228
-
- thumb_func_start sub_808A2AC
-sub_808A2AC: @ 808A2AC
- push {lr}
- lsls r0, 24
- lsrs r3, r0, 24
- ldr r0, _0808A2D0 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0808A2CA
- ldr r0, _0808A2D4 @ =gScriptItemId
- ldrh r1, [r0]
- ldr r2, _0808A2D8 @ =sub_808A228
- adds r0, r3, 0
- bl PartyMenuTryGiveMonHeldItem
-_0808A2CA:
- pop {r0}
- bx r0
- .align 2, 0
-_0808A2D0: .4byte gPaletteFade
-_0808A2D4: .4byte gScriptItemId
-_0808A2D8: .4byte sub_808A228
- thumb_func_end sub_808A2AC
-
- thumb_func_start sub_808A2DC
-sub_808A2DC: @ 808A2DC
- push {r4,r5,lr}
- adds r5, r0, 0
- lsls r5, 24
- lsrs r5, 24
- adds r0, r5, 0
- bl sub_806CA38
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x64
- muls r0, r1
- ldr r1, _0808A324 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x40
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r5, 0
- bl DestroyTask
- lsls r1, r4, 3
- adds r1, r4
- lsls r1, 2
- ldr r0, _0808A328 @ =gSaveBlock1 + 0x2B4C
- adds r1, r0
- ldr r2, _0808A32C @ =sub_808A520
- movs r0, 0x4
- movs r3, 0x3
- bl sub_80E62A0
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0808A324: .4byte gPlayerParty
-_0808A328: .4byte gSaveBlock1 + 0x2B4C
-_0808A32C: .4byte sub_808A520
- thumb_func_end sub_808A2DC
-
- thumb_func_start sub_808A330
-sub_808A330: @ 808A330
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- ldr r1, _0808A344 @ =gScriptItemId
- ldrh r1, [r1]
- ldr r2, _0808A348 @ =sub_808A2DC
- bl PartyMenuTryGiveMonHeldItem
- pop {r0}
- bx r0
- .align 2, 0
-_0808A344: .4byte gScriptItemId
-_0808A348: .4byte sub_808A2DC
- thumb_func_end sub_808A330
-
- thumb_func_start sub_808A34C
-sub_808A34C: @ 808A34C
- push {lr}
- bl RunTasks
- pop {r0}
- bx r0
- thumb_func_end sub_808A34C
-
- thumb_func_start sub_808A358
-sub_808A358: @ 808A358
- push {r4,lr}
- ldr r4, _0808A360 @ =0x0201b260
- b _0808A370
- .align 2, 0
-_0808A360: .4byte 0x0201b260
-_0808A364:
- bl sub_80F9344
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0808A394
-_0808A370:
- bl sub_806B124
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0808A364
- ldrb r0, [r4]
- ldr r1, _0808A39C @ =gLastFieldPokeMenuOpened
- ldrb r1, [r1]
- bl sub_806C994
- ldrb r0, [r4]
- movs r1, 0
- bl sub_806BF74
- ldr r0, _0808A3A0 @ =sub_806AEDC
- bl SetMainCallback2
-_0808A394:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808A39C: .4byte gLastFieldPokeMenuOpened
-_0808A3A0: .4byte sub_806AEDC
- thumb_func_end sub_808A358
-
- thumb_func_start sub_808A3A4
-sub_808A3A4: @ 808A3A4
- push {r4,r5,lr}
- ldr r4, _0808A3D8 @ =0x0201b260
- adds r5, r4, 0x2
-_0808A3AA:
- bl sub_806B124
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0808A3E4
- ldrb r0, [r4]
- ldr r1, _0808A3DC @ =gLastFieldPokeMenuOpened
- ldrb r1, [r1]
- bl sub_806C994
- ldrb r0, [r4]
- movs r1, 0
- bl sub_806BF74
- movs r0, 0x3
- strb r0, [r5]
- bl sub_8089E84
- ldr r0, _0808A3E0 @ =sub_806AEDC
- bl SetMainCallback2
- b _0808A3F0
- .align 2, 0
-_0808A3D8: .4byte 0x0201b260
-_0808A3DC: .4byte gLastFieldPokeMenuOpened
-_0808A3E0: .4byte sub_806AEDC
-_0808A3E4:
- bl sub_80F9344
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0808A3AA
-_0808A3F0:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_808A3A4
-
- thumb_func_start sub_808A3F8
-sub_808A3F8: @ 808A3F8
- push {r4,lr}
- ldr r0, _0808A460 @ =gScriptItemId
- ldrh r0, [r0]
- bl ItemIsMail
- lsls r0, 24
- cmp r0, 0
- beq _0808A47E
- ldr r0, _0808A464 @ =sub_808A330
- movs r1, 0
- bl CreateTask
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r2, _0808A468 @ =gPaletteFade
- ldrb r0, [r2, 0x8]
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r2, 0x8]
- adds r0, r4, 0
- movs r1, 0
- bl sub_806BD58
- ldr r0, _0808A46C @ =gLastFieldPokeMenuOpened
- ldrb r1, [r0]
- adds r0, r4, 0
- bl sub_806C994
- adds r0, r4, 0
- movs r1, 0
- bl sub_806BF74
- adds r0, r4, 0
- bl sub_806CA38
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x64
- muls r0, r1
- ldr r1, _0808A470 @ =gPlayerParty
- adds r0, r1
- movs r1, 0xC
- bl GetMonData
- lsls r0, 24
- cmp r0, 0
- bne _0808A478
- ldr r0, _0808A474 @ =sub_808A34C
- bl SetMainCallback2
- b _0808A4C6
- .align 2, 0
-_0808A460: .4byte gScriptItemId
-_0808A464: .4byte sub_808A330
-_0808A468: .4byte gPaletteFade
-_0808A46C: .4byte gLastFieldPokeMenuOpened
-_0808A470: .4byte gPlayerParty
-_0808A474: .4byte sub_808A34C
-_0808A478:
- adds r0, r4, 0
- bl DestroyTask
-_0808A47E:
- ldr r2, _0808A4A4 @ =gPaletteFade
- ldrb r0, [r2, 0x8]
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r2, 0x8]
- ldr r0, _0808A4A8 @ =gScriptItemId
- ldrh r0, [r0]
- cmp r0, 0
- beq _0808A4B4
- ldr r2, _0808A4AC @ =sub_808A2AC
- movs r0, 0
- movs r1, 0xFF
- movs r3, 0xFF
- bl sub_806AF4C
- ldr r0, _0808A4B0 @ =sub_808A358
- bl SetMainCallback2
- b _0808A4C6
- .align 2, 0
-_0808A4A4: .4byte gPaletteFade
-_0808A4A8: .4byte gScriptItemId
-_0808A4AC: .4byte sub_808A2AC
-_0808A4B0: .4byte sub_808A358
-_0808A4B4:
- ldr r2, _0808A4CC @ =sub_8089D94
- movs r0, 0
- movs r1, 0xFF
- movs r3, 0x5
- bl sub_806AF4C
- ldr r0, _0808A4D0 @ =sub_808A3A4
- bl SetMainCallback2
-_0808A4C6:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808A4CC: .4byte sub_8089D94
-_0808A4D0: .4byte sub_808A3A4
- thumb_func_end sub_808A3F8
-
- thumb_func_start sub_808A4D4
-sub_808A4D4: @ 808A4D4
- push {r4,lr}
- ldr r4, _0808A4DC @ =0x0201b260
- b _0808A4EC
- .align 2, 0
-_0808A4DC: .4byte 0x0201b260
-_0808A4E0:
- bl sub_80F9344
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0808A510
-_0808A4EC:
- bl sub_806B124
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0808A4E0
- ldrb r0, [r4]
- ldr r1, _0808A518 @ =gLastFieldPokeMenuOpened
- ldrb r1, [r1]
- bl sub_806C994
- ldrb r0, [r4]
- movs r1, 0
- bl sub_806BF74
- ldr r0, _0808A51C @ =sub_806AEDC
- bl SetMainCallback2
-_0808A510:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808A518: .4byte gLastFieldPokeMenuOpened
-_0808A51C: .4byte sub_806AEDC
- thumb_func_end sub_808A4D4
-
- thumb_func_start sub_808A520
-sub_808A520: @ 808A520
- push {r4-r7,lr}
- ldr r2, _0808A584 @ =gPaletteFade
- ldrb r0, [r2, 0x8]
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r2, 0x8]
- ldr r0, _0808A588 @ =gScriptResult
- ldrh r0, [r0]
- cmp r0, 0
- bne _0808A59C
- ldr r7, _0808A58C @ =gUnknown_0202E8F8
- ldrh r0, [r7]
- cmp r0, 0
- beq _0808A542
- movs r1, 0x1
- bl RemoveBagItem
-_0808A542:
- ldr r6, _0808A590 @ =gLastFieldPokeMenuOpened
- ldrb r0, [r6]
- movs r5, 0x64
- muls r0, r5
- ldr r4, _0808A594 @ =gPlayerParty
- adds r0, r4
- movs r1, 0xC
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x1
- bl AddBagItem
- ldrb r0, [r6]
- muls r0, r5
- adds r0, r4
- bl TakeMailFromMon
- ldrb r0, [r6]
- muls r0, r5
- adds r0, r4
- movs r1, 0xC
- adds r2, r7, 0
- bl SetMonData
- ldr r2, _0808A598 @ =sub_8089CD4
- movs r0, 0
- movs r1, 0xFF
- movs r3, 0
- bl sub_806AF4C
- b _0808A5A8
- .align 2, 0
-_0808A584: .4byte gPaletteFade
-_0808A588: .4byte gScriptResult
-_0808A58C: .4byte gUnknown_0202E8F8
-_0808A590: .4byte gLastFieldPokeMenuOpened
-_0808A594: .4byte gPlayerParty
-_0808A598: .4byte sub_8089CD4
-_0808A59C:
- ldr r2, _0808A5B4 @ =sub_808A5BC
- movs r0, 0
- movs r1, 0xFF
- movs r3, 0xFF
- bl sub_806AF4C
-_0808A5A8:
- ldr r0, _0808A5B8 @ =sub_808A4D4
- bl SetMainCallback2
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0808A5B4: .4byte sub_808A5BC
-_0808A5B8: .4byte sub_808A4D4
- thumb_func_end sub_808A520
-
- thumb_func_start sub_808A5BC
-sub_808A5BC: @ 808A5BC
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _0808A5F0 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0808A5EA
- ldr r0, _0808A5F4 @ =gLastFieldPokeMenuOpened
- ldrb r0, [r0]
- ldr r1, _0808A5F8 @ =gScriptItemId
- ldrh r1, [r1]
- movs r2, 0
- bl DisplayGiveHeldItemMessage
- ldr r1, _0808A5FC @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _0808A600 @ =sub_808A1E0
- str r1, [r0]
-_0808A5EA:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808A5F0: .4byte gPaletteFade
-_0808A5F4: .4byte gLastFieldPokeMenuOpened
-_0808A5F8: .4byte gScriptItemId
-_0808A5FC: .4byte gTasks
-_0808A600: .4byte sub_808A1E0
- thumb_func_end sub_808A5BC
-
- thumb_func_start sub_808A604
-sub_808A604: @ 808A604
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _0808A628 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0808A622
- ldr r0, _0808A62C @ =sub_80A61D0
- bl SetMainCallback2
- adds r0, r4, 0
- bl DestroyTask
-_0808A622:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808A628: .4byte gPaletteFade
-_0808A62C: .4byte sub_80A61D0
- thumb_func_end sub_808A604
-
- thumb_func_start PokemonMenu_GiveItem
-PokemonMenu_GiveItem: @ 808A630
- push {r4,lr}
- sub sp, 0x4
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r4, 0
- bl sub_806CA38
- ldr r1, _0808A66C @ =gUnknown_0202E8F5
- strb r0, [r1]
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r1, _0808A670 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _0808A674 @ =sub_808A604
- str r1, [r0]
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808A66C: .4byte gUnknown_0202E8F5
-_0808A670: .4byte gTasks
-_0808A674: .4byte sub_808A604
- thumb_func_end PokemonMenu_GiveItem
-
- thumb_func_start sub_808A678
-sub_808A678: @ 808A678
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- bl sub_808A8D4
- pop {r0}
- bx r0
- thumb_func_end sub_808A678
-
- thumb_func_start PokemonMenu_TakeItem
-PokemonMenu_TakeItem: @ 808A688
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl HandleDestroyMenuCursors
- movs r0, 0x13
- movs r1, 0
- movs r2, 0x1D
- movs r3, 0x13
- bl MenuZeroFillWindowRect
- bl sub_806D5A4
- ldr r1, _0808A6B4 @ =sub_808A678
- adds r0, r4, 0
- bl PartyMenuTryGiveMonHeldItem_806ECE8
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808A6B4: .4byte sub_808A678
- thumb_func_end PokemonMenu_TakeItem
-
- thumb_func_start PokemonMenu_TakeMail
-PokemonMenu_TakeMail: @ 808A6B8
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl HandleDestroyMenuCursors
- movs r0, 0x13
- movs r1, 0
- movs r2, 0x1D
- movs r3, 0x13
- bl MenuZeroFillWindowRect
- bl sub_806D5A4
- ldr r1, _0808A6E4 @ =sub_808A678
- adds r0, r4, 0
- bl DoTakeMail
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808A6E4: .4byte sub_808A678
- thumb_func_end PokemonMenu_TakeMail
-
- thumb_func_start PokemonMenu_Mail
-PokemonMenu_Mail: @ 808A6E8
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl HandleDestroyMenuCursors
- ldr r1, _0808A728 @ =gUnknown_0202FFA8
- movs r0, 0
- strb r0, [r1]
- movs r0, 0x13
- movs r1, 0
- movs r2, 0x1D
- movs r3, 0x13
- bl MenuZeroFillWindowRect
- ldr r1, _0808A72C @ =gUnknown_0839F584
- ldr r2, _0808A730 @ =gPokemonMenuActions
- movs r0, 0
- movs r3, 0
- bl sub_806E750
- ldr r1, _0808A734 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _0808A738 @ =sub_808A73C
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808A728: .4byte gUnknown_0202FFA8
-_0808A72C: .4byte gUnknown_0839F584
-_0808A730: .4byte gPokemonMenuActions
-_0808A734: .4byte gTasks
-_0808A738: .4byte sub_808A73C
- thumb_func_end PokemonMenu_Mail
-
- thumb_func_start sub_808A73C
-sub_808A73C: @ 808A73C
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, _0808A764 @ =gMain
- ldrh r0, [r0, 0x30]
- cmp r0, 0x40
- bne _0808A77A
- movs r0, 0x5
- bl PlaySE
- ldr r4, _0808A768 @ =gUnknown_0202FFA8
- ldrb r0, [r4]
- cmp r0, 0
- bne _0808A770
- ldr r0, _0808A76C @ =gUnknown_0839F584
- ldrb r0, [r0]
- subs r0, 0x1
- lsls r0, 24
- asrs r0, 24
- b _0808A774
- .align 2, 0
-_0808A764: .4byte gMain
-_0808A768: .4byte gUnknown_0202FFA8
-_0808A76C: .4byte gUnknown_0839F584
-_0808A770:
- movs r0, 0x1
- negs r0, r0
-_0808A774:
- bl MoveMenuCursor
- strb r0, [r4]
-_0808A77A:
- ldr r0, _0808A7A0 @ =gMain
- ldrh r0, [r0, 0x30]
- cmp r0, 0x80
- bne _0808A7B4
- movs r0, 0x5
- bl PlaySE
- ldr r4, _0808A7A4 @ =gUnknown_0202FFA8
- ldrb r0, [r4]
- ldr r1, _0808A7A8 @ =gUnknown_0839F584
- ldrb r2, [r1]
- subs r1, r2, 0x1
- cmp r0, r1
- bne _0808A7AC
- movs r0, 0x1
- subs r0, r2
- lsls r0, 24
- asrs r0, 24
- b _0808A7AE
- .align 2, 0
-_0808A7A0: .4byte gMain
-_0808A7A4: .4byte gUnknown_0202FFA8
-_0808A7A8: .4byte gUnknown_0839F584
-_0808A7AC:
- movs r0, 0x1
-_0808A7AE:
- bl MoveMenuCursor
- strb r0, [r4]
-_0808A7B4:
- ldr r0, _0808A7E0 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _0808A7F0
- movs r0, 0x5
- bl PlaySE
- ldr r1, _0808A7E4 @ =gUnknown_0839F584
- ldr r2, _0808A7E8 @ =gPokemonMenuActions
- ldr r0, _0808A7EC @ =gUnknown_0202FFA8
- ldrb r3, [r0]
- movs r0, 0
- bl PartyMenuGetPopupMenuFunc
- adds r1, r0, 0
- adds r0, r5, 0
- bl _call_via_r1
- b _0808A806
- .align 2, 0
-_0808A7E0: .4byte gMain
-_0808A7E4: .4byte gUnknown_0839F584
-_0808A7E8: .4byte gPokemonMenuActions
-_0808A7EC: .4byte gUnknown_0202FFA8
-_0808A7F0:
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0808A806
- ldr r1, _0808A80C @ =gUnknown_0839F584
- movs r0, 0
- bl sub_806E7D0
- adds r0, r5, 0
- bl PokemonMenu_Cancel
-_0808A806:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0808A80C: .4byte gUnknown_0839F584
- thumb_func_end sub_808A73C
-
- thumb_func_start PokemonMenu_ReadMail
-PokemonMenu_ReadMail: @ 808A810
- 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, _0808A840 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _0808A844 @ =sub_808A848
- str r1, [r0]
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808A840: .4byte gTasks
-_0808A844: .4byte sub_808A848
- thumb_func_end PokemonMenu_ReadMail
-
- thumb_func_start sub_808A848
-sub_808A848: @ 808A848
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, _0808A898 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0808A890
- adds r0, r5, 0
- bl sub_806CA38
- lsls r0, 24
- lsrs r0, 24
- movs r1, 0x64
- muls r0, r1
- ldr r1, _0808A89C @ =gPlayerParty
- adds r0, r1
- movs r1, 0x40
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r5, 0
- bl DestroyTask
- lsls r0, r4, 3
- adds r0, r4
- lsls r0, 2
- ldr r1, _0808A8A0 @ =gSaveBlock1 + 0x2B4C
- adds r0, r1
- ldr r1, _0808A8A4 @ =sub_808A8A8
- movs r2, 0x1
- bl HandleReadMail
-_0808A890:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0808A898: .4byte gPaletteFade
-_0808A89C: .4byte gPlayerParty
-_0808A8A0: .4byte gSaveBlock1 + 0x2B4C
-_0808A8A4: .4byte sub_808A8A8
- thumb_func_end sub_808A848
-
- thumb_func_start sub_808A8A8
-sub_808A8A8: @ 808A8A8
- push {lr}
- ldr r1, _0808A8C4 @ =gUnknown_020384F0
- ldr r0, _0808A8C8 @ =gLastFieldPokeMenuOpened
- ldrb r0, [r0]
- strb r0, [r1]
- ldr r0, _0808A8CC @ =0x0201b000
- ldr r1, _0808A8D0 @ =0x00000262
- adds r0, r1
- movs r1, 0x4
- strb r1, [r0]
- bl sub_8089F14
- pop {r0}
- bx r0
- .align 2, 0
-_0808A8C4: .4byte gUnknown_020384F0
-_0808A8C8: .4byte gLastFieldPokeMenuOpened
-_0808A8CC: .4byte 0x0201b000
-_0808A8D0: .4byte 0x00000262
- thumb_func_end sub_808A8A8
-
- thumb_func_start sub_808A8D4
-sub_808A8D4: @ 808A8D4
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r1, _0808A90C @ =gUnknown_0202FFA8
- movs r0, 0
- strb r0, [r1]
- movs r0, 0x13
- movs r1, 0
- movs r2, 0x1D
- movs r3, 0x13
- bl MenuZeroFillWindowRect
- movs r0, 0
- movs r1, 0
- bl sub_806D538
- ldr r1, _0808A910 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _0808A914 @ =sub_8089CD4
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808A90C: .4byte gUnknown_0202FFA8
-_0808A910: .4byte gTasks
-_0808A914: .4byte sub_8089CD4
- thumb_func_end sub_808A8D4
-
- thumb_func_start PokemonMenu_Cancel
-PokemonMenu_Cancel: @ 808A918
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl HandleDestroyMenuCursors
- movs r0, 0x5
- bl PlaySE
- adds r0, r4, 0
- bl sub_808A8D4
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end PokemonMenu_Cancel
-
- thumb_func_start PokemonMenu_CancelSubmenu
-PokemonMenu_CancelSubmenu: @ 808A938
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- bl HandleDestroyMenuCursors
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x13
- movs r1, 0
- movs r2, 0x1D
- movs r3, 0x13
- bl MenuZeroFillWindowRect
- bl sub_806D5A4
- ldr r0, _0808A978 @ =gUnknown_0202FFA8
- ldrb r0, [r0]
- bl sub_8089C7C
- ldr r1, _0808A97C @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _0808A980 @ =sub_8089D94
- str r1, [r0]
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808A978: .4byte gUnknown_0202FFA8
-_0808A97C: .4byte gTasks
-_0808A980: .4byte sub_8089D94
- thumb_func_end PokemonMenu_CancelSubmenu
-
- thumb_func_start PokemonMenu_FieldMove
-PokemonMenu_FieldMove: @ 808A984
- push {r4-r7,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r5, r0, 24
- lsls r0, r5, 2
- adds r0, r5
- lsls r6, r0, 3
- ldr r7, _0808A9D0 @ =gTasks + 0x8
- adds r4, r6, r7
- bl HandleDestroyMenuCursors
- ldr r1, _0808A9D4 @ =gUnknown_0202FFAA
- ldr r0, _0808A9D8 @ =gUnknown_0202FFA8
- ldrb r0, [r0]
- adds r0, r1
- ldrb r0, [r0]
- subs r0, 0xA
- strh r0, [r4, 0x16]
- bl sub_80F9344
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0808A9DC
- movs r0, 0x13
- movs r1, 0
- movs r2, 0x1D
- movs r3, 0x13
- bl MenuZeroFillWindowRect
- ldrh r0, [r4, 0x16]
- subs r0, 0xB
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x1
- bhi _0808AABA
- movs r0, 0x9
- b _0808AAB2
- .align 2, 0
-_0808A9D0: .4byte gTasks + 0x8
-_0808A9D4: .4byte gUnknown_0202FFAA
-_0808A9D8: .4byte gUnknown_0202FFA8
-_0808A9DC:
- ldrh r1, [r4, 0x16]
- movs r2, 0x16
- ldrsh r0, [r4, r2]
- cmp r0, 0x7
- bgt _0808AA2C
- ldr r2, _0808AA20 @ =0x00000807
- adds r0, r1, r2
- lsls r0, 16
- lsrs r0, 16
- bl FlagGet
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0808AA2C
- movs r0, 0x13
- movs r1, 0
- movs r2, 0x1D
- movs r3, 0x13
- bl MenuZeroFillWindowRect
- bl sub_806D5A4
- ldr r0, _0808AA24 @ =gOtherText_CantBeUsedBadge
- movs r1, 0x1
- bl sub_806E834
- adds r0, r7, 0
- subs r0, 0x8
- adds r0, r6, r0
- ldr r1, _0808AA28 @ =sub_808AAF0
- str r1, [r0]
- b _0808AADA
- .align 2, 0
-_0808AA20: .4byte 0x00000807
-_0808AA24: .4byte gOtherText_CantBeUsedBadge
-_0808AA28: .4byte sub_808AAF0
-_0808AA2C:
- ldr r1, _0808AA78 @ =gFieldMoveFuncs
- movs r2, 0x16
- ldrsh r0, [r4, r2]
- lsls r0, 3
- adds r0, r1
- ldr r0, [r0]
- bl _call_via_r0
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0808AA90
- ldr r1, _0808AA7C @ =gUnknown_0202FFA8
- movs r0, 0
- strb r0, [r1]
- ldrh r0, [r4, 0x16]
- subs r0, 0xB
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x1
- bls _0808AA88
- ldr r1, _0808AA80 @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- ldr r1, _0808AA84 @ =sub_808AB34
- str r1, [r0]
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- b _0808AADA
- .align 2, 0
-_0808AA78: .4byte gFieldMoveFuncs
-_0808AA7C: .4byte gUnknown_0202FFA8
-_0808AA80: .4byte gTasks
-_0808AA84: .4byte sub_808AB34
-_0808AA88:
- adds r0, r5, 0
- bl sub_8133D28
- b _0808AADA
-_0808AA90:
- movs r0, 0x13
- movs r1, 0
- movs r2, 0x1D
- movs r3, 0x13
- bl MenuZeroFillWindowRect
- movs r1, 0x16
- ldrsh r0, [r4, r1]
- cmp r0, 0x4
- bne _0808AABA
- movs r0, 0x8
- bl TestPlayerAvatarFlags
- lsls r0, 24
- cmp r0, 0
- beq _0808AABA
- movs r0, 0x8
-_0808AAB2:
- movs r1, 0
- bl sub_806D538
- b _0808AACC
-_0808AABA:
- ldr r0, _0808AAE4 @ =gFieldMoveFuncs
- movs r2, 0x16
- ldrsh r1, [r4, r2]
- lsls r1, 3
- adds r1, r0
- ldrb r0, [r1, 0x4]
- movs r1, 0
- bl sub_806D538
-_0808AACC:
- ldr r0, _0808AAE8 @ =gTasks
- lsls r1, r5, 2
- adds r1, r5
- lsls r1, 3
- adds r1, r0
- ldr r0, _0808AAEC @ =sub_808ABF4
- str r0, [r1]
-_0808AADA:
- add sp, 0x4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0808AAE4: .4byte gFieldMoveFuncs
-_0808AAE8: .4byte gTasks
-_0808AAEC: .4byte sub_808ABF4
- thumb_func_end PokemonMenu_FieldMove
-
- thumb_func_start sub_808AAF0
-sub_808AAF0: @ 808AAF0
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _0808AB2C @ =gUnknown_0202E8F6
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _0808AB24
- ldr r0, _0808AB30 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _0808AB12
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0808AB24
-_0808AB12:
- movs r0, 0
- movs r1, 0xE
- movs r2, 0x1D
- movs r3, 0x13
- bl MenuZeroFillWindowRect
- adds r0, r4, 0
- bl PokemonMenu_Cancel
-_0808AB24:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808AB2C: .4byte gUnknown_0202E8F6
-_0808AB30: .4byte gMain
- thumb_func_end sub_808AAF0
-
- thumb_func_start sub_808AB34
-sub_808AB34: @ 808AB34
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _0808AB6C @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0808AB84
- ldr r0, _0808AB70 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- movs r2, 0x1E
- ldrsh r0, [r1, r2]
- cmp r0, 0x5
- bne _0808AB62
- bl ShouldDoBrailleFlyEffect
- lsls r0, 24
- cmp r0, 0
- beq _0808AB78
-_0808AB62:
- ldr r0, _0808AB74 @ =c2_exit_to_overworld_2_switch
- bl SetMainCallback2
- b _0808AB7E
- .align 2, 0
-_0808AB6C: .4byte gPaletteFade
-_0808AB70: .4byte gTasks
-_0808AB74: .4byte c2_exit_to_overworld_2_switch
-_0808AB78:
- ldr r0, _0808AB8C @ =CB2_InitFlyRegionMap
- bl SetMainCallback2
-_0808AB7E:
- adds r0, r4, 0
- bl DestroyTask
-_0808AB84:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808AB8C: .4byte CB2_InitFlyRegionMap
- thumb_func_end sub_808AB34
-
- thumb_func_start sub_808AB90
-sub_808AB90: @ 808AB90
- push {lr}
- bl pal_fill_black
- ldr r0, _0808ABA4 @ =sub_808ABA8
- movs r1, 0x8
- bl CreateTask
- pop {r0}
- bx r0
- .align 2, 0
-_0808ABA4: .4byte sub_808ABA8
- thumb_func_end sub_808AB90
-
- thumb_func_start sub_808ABA8
-sub_808ABA8: @ 808ABA8
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl sub_807D770
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0808ABDE
- ldr r0, _0808ABE4 @ =gLastFieldPokeMenuOpened
- ldrb r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _0808ABE8 @ =gPlayerParty
- adds r0, r1
- movs r1, 0xB
- bl GetMonData
- ldr r1, _0808ABEC @ =gUnknown_0202FF84
- str r0, [r1]
- ldr r0, _0808ABF0 @ =gUnknown_03005CE4
- ldr r0, [r0]
- bl _call_via_r0
- adds r0, r4, 0
- bl DestroyTask
-_0808ABDE:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808ABE4: .4byte gLastFieldPokeMenuOpened
-_0808ABE8: .4byte gPlayerParty
-_0808ABEC: .4byte gUnknown_0202FF84
-_0808ABF0: .4byte gUnknown_03005CE4
- thumb_func_end sub_808ABA8
-
- thumb_func_start sub_808ABF4
-sub_808ABF4: @ 808ABF4
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _0808AC28 @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _0808AC0E
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _0808AC20
-_0808AC0E:
- movs r0, 0x1
- movs r1, 0x11
- movs r2, 0x1C
- movs r3, 0x12
- bl MenuZeroFillWindowRect
- adds r0, r4, 0
- bl PokemonMenu_Cancel
-_0808AC20:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808AC28: .4byte gMain
- thumb_func_end sub_808ABF4
-
- thumb_func_start sub_808AC2C
-sub_808AC2C: @ 808AC2C
- push {lr}
- ldr r0, _0808AC40 @ =gUnknown_0202FF84
- ldr r1, _0808AC44 @ =gLastFieldPokeMenuOpened
- ldrb r1, [r1]
- str r1, [r0]
- movs r0, 0x9
- bl FieldEffectStart
- pop {r0}
- bx r0
- .align 2, 0
-_0808AC40: .4byte gUnknown_0202FF84
-_0808AC44: .4byte gLastFieldPokeMenuOpened
- thumb_func_end sub_808AC2C
-
- thumb_func_start SetUpFieldMove_Surf
-SetUpFieldMove_Surf: @ 808AC48
- push {lr}
- bl PartyHasMonWithSurf
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0808AC84
- bl IsPlayerFacingSurfableFishableWater
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0808AC84
- ldr r1, _0808AC74 @ =gFieldCallback
- ldr r0, _0808AC78 @ =sub_808AB90
- str r0, [r1]
- ldr r1, _0808AC7C @ =gUnknown_03005CE4
- ldr r0, _0808AC80 @ =sub_808AC2C
- str r0, [r1]
- movs r0, 0x1
- b _0808AC86
- .align 2, 0
-_0808AC74: .4byte gFieldCallback
-_0808AC78: .4byte sub_808AB90
-_0808AC7C: .4byte gUnknown_03005CE4
-_0808AC80: .4byte sub_808AC2C
-_0808AC84:
- movs r0, 0
-_0808AC86:
- pop {r1}
- bx r1
- thumb_func_end SetUpFieldMove_Surf
-
- thumb_func_start sub_808AC8C
-sub_808AC8C: @ 808AC8C
- push {lr}
- ldr r0, _0808ACA0 @ =gUnknown_0202FF84
- ldr r1, _0808ACA4 @ =gLastFieldPokeMenuOpened
- ldrb r1, [r1]
- str r1, [r0]
- movs r0, 0x1F
- bl FieldEffectStart
- pop {r0}
- bx r0
- .align 2, 0
-_0808ACA0: .4byte gUnknown_0202FF84
-_0808ACA4: .4byte gLastFieldPokeMenuOpened
- thumb_func_end sub_808AC8C
-
- thumb_func_start SetUpFieldMove_Fly
-SetUpFieldMove_Fly: @ 808ACA8
- push {lr}
- bl ShouldDoBrailleFlyEffect
- lsls r0, 24
- cmp r0, 0
- beq _0808ACD0
- ldr r1, _0808ACC0 @ =gFieldCallback
- ldr r0, _0808ACC4 @ =sub_808AB90
- str r0, [r1]
- ldr r1, _0808ACC8 @ =gUnknown_03005CE4
- ldr r0, _0808ACCC @ =DoBrailleFlyEffect
- b _0808ACF2
- .align 2, 0
-_0808ACC0: .4byte gFieldCallback
-_0808ACC4: .4byte sub_808AB90
-_0808ACC8: .4byte gUnknown_03005CE4
-_0808ACCC: .4byte DoBrailleFlyEffect
-_0808ACD0:
- ldr r0, _0808ACE4 @ =gMapHeader
- ldrb r0, [r0, 0x17]
- bl is_light_level_1_2_3_or_6
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0808ACE8
- movs r0, 0
- b _0808ACF6
- .align 2, 0
-_0808ACE4: .4byte gMapHeader
-_0808ACE8:
- ldr r1, _0808ACFC @ =gFieldCallback
- ldr r0, _0808AD00 @ =sub_808AB90
- str r0, [r1]
- ldr r1, _0808AD04 @ =gUnknown_03005CE4
- ldr r0, _0808AD08 @ =sub_808AC8C
-_0808ACF2:
- str r0, [r1]
- movs r0, 0x1
-_0808ACF6:
- pop {r1}
- bx r1
- .align 2, 0
-_0808ACFC: .4byte gFieldCallback
-_0808AD00: .4byte sub_808AB90
-_0808AD04: .4byte gUnknown_03005CE4
-_0808AD08: .4byte sub_808AC8C
- thumb_func_end SetUpFieldMove_Fly
-
- thumb_func_start sub_808AD0C
-sub_808AD0C: @ 808AD0C
- push {r4,lr}
- ldr r4, _0808AD14 @ =0x0201b260
- b _0808AD24
- .align 2, 0
-_0808AD14: .4byte 0x0201b260
-_0808AD18:
- bl sub_80F9344
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0808AD48
-_0808AD24:
- bl sub_806B124
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0808AD18
- ldrb r0, [r4]
- ldr r1, _0808AD50 @ =gLastFieldPokeMenuOpened
- ldrb r1, [r1]
- bl sub_806C994
- ldrb r0, [r4]
- movs r1, 0
- bl sub_806BF74
- ldr r0, _0808AD54 @ =sub_806AEDC
- bl SetMainCallback2
-_0808AD48:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808AD50: .4byte gLastFieldPokeMenuOpened
-_0808AD54: .4byte sub_806AEDC
- thumb_func_end sub_808AD0C
-
- thumb_func_start sub_808AD58
-sub_808AD58: @ 808AD58
- push {lr}
- ldr r2, _0808AD7C @ =gPaletteFade
- ldrb r0, [r2, 0x8]
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r2, 0x8]
- ldr r2, _0808AD80 @ =sub_8089CD4
- movs r0, 0
- movs r1, 0xFF
- movs r3, 0
- bl sub_806AF4C
- ldr r0, _0808AD84 @ =sub_808AD0C
- bl SetMainCallback2
- pop {r0}
- bx r0
- .align 2, 0
-_0808AD7C: .4byte gPaletteFade
-_0808AD80: .4byte sub_8089CD4
-_0808AD84: .4byte sub_808AD0C
- thumb_func_end sub_808AD58
-
- thumb_func_start unref_sub_808AD88
-unref_sub_808AD88: @ 808AD88
- push {lr}
- ldr r0, _0808ADA4 @ =gLastFieldPokeMenuOpened
- ldrb r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _0808ADA8 @ =gPlayerParty
- adds r0, r1
- movs r1, 0xB
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- pop {r1}
- bx r1
- .align 2, 0
-_0808ADA4: .4byte gLastFieldPokeMenuOpened
-_0808ADA8: .4byte gPlayerParty
- thumb_func_end unref_sub_808AD88
-
- thumb_func_start sub_808ADAC
-sub_808ADAC: @ 808ADAC
- push {lr}
- ldr r0, _0808ADC0 @ =gUnknown_0202FF84
- ldr r1, _0808ADC4 @ =gLastFieldPokeMenuOpened
- ldrb r1, [r1]
- str r1, [r0]
- movs r0, 0x2C
- bl FieldEffectStart
- pop {r0}
- bx r0
- .align 2, 0
-_0808ADC0: .4byte gUnknown_0202FF84
-_0808ADC4: .4byte gLastFieldPokeMenuOpened
- thumb_func_end sub_808ADAC
-
- thumb_func_start SetUpFieldMove_Dive
-SetUpFieldMove_Dive: @ 808ADC8
- push {lr}
- bl sub_8068F18
- ldr r1, _0808ADE0 @ =gUnknown_0202FF84
- lsls r0, 24
- lsrs r0, 24
- str r0, [r1, 0x4]
- cmp r0, 0
- bne _0808ADE4
- movs r0, 0
- b _0808ADF2
- .align 2, 0
-_0808ADE0: .4byte gUnknown_0202FF84
-_0808ADE4:
- ldr r1, _0808ADF8 @ =gFieldCallback
- ldr r0, _0808ADFC @ =sub_808AB90
- str r0, [r1]
- ldr r1, _0808AE00 @ =gUnknown_03005CE4
- ldr r0, _0808AE04 @ =sub_808ADAC
- str r0, [r1]
- movs r0, 0x1
-_0808ADF2:
- pop {r1}
- bx r1
- .align 2, 0
-_0808ADF8: .4byte gFieldCallback
-_0808ADFC: .4byte sub_808AB90
-_0808AE00: .4byte gUnknown_03005CE4
-_0808AE04: .4byte sub_808ADAC
- thumb_func_end SetUpFieldMove_Dive
-
- thumb_func_start sub_808AE08
-sub_808AE08: @ 808AE08
- push {lr}
- ldr r0, _0808AE1C @ =gUnknown_0202FF84
- ldr r1, _0808AE20 @ =gLastFieldPokeMenuOpened
- ldrb r1, [r1]
- str r1, [r0]
- movs r0, 0x2B
- bl FieldEffectStart
- pop {r0}
- bx r0
- .align 2, 0
-_0808AE1C: .4byte gUnknown_0202FF84
-_0808AE20: .4byte gLastFieldPokeMenuOpened
- thumb_func_end sub_808AE08
-
- thumb_func_start SetUpFieldMove_Waterfall
-SetUpFieldMove_Waterfall: @ 808AE24
- push {r4,lr}
- sub sp, 0x4
- mov r4, sp
- adds r4, 0x2
- mov r0, sp
- adds r1, r4, 0
- bl GetXYCoordsOneStepInFrontOfPlayer
- 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_IsWaterfall
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0808AE80
- bl IsPlayerSurfingNorth
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0808AE80
- ldr r1, _0808AE70 @ =gFieldCallback
- ldr r0, _0808AE74 @ =sub_808AB90
- str r0, [r1]
- ldr r1, _0808AE78 @ =gUnknown_03005CE4
- ldr r0, _0808AE7C @ =sub_808AE08
- str r0, [r1]
- movs r0, 0x1
- b _0808AE82
- .align 2, 0
-_0808AE70: .4byte gFieldCallback
-_0808AE74: .4byte sub_808AB90
-_0808AE78: .4byte gUnknown_03005CE4
-_0808AE7C: .4byte sub_808AE08
-_0808AE80:
- movs r0, 0
-_0808AE82:
- add sp, 0x4
- pop {r4}
- pop {r1}
- bx r1
- thumb_func_end SetUpFieldMove_Waterfall
-
- thumb_func_start sub_808AE8C
-sub_808AE8C: @ 808AE8C
- push {r4-r6,lr}
- ldr r0, _0808AED8 @ =gScriptItemId
- ldrb r0, [r0]
- subs r0, 0x21
- lsls r0, 24
- lsrs r6, r0, 24
- movs r5, 0
-_0808AE9A:
- movs r0, 0x64
- adds r1, r5, 0
- muls r1, r0
- ldr r0, _0808AEDC @ =gPlayerParty
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _0808AF10
- adds r0, r5, 0
- bl sub_806D668
- adds r0, r4, 0
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0
- bne _0808AECE
- adds r0, r4, 0
- adds r1, r6, 0
- bl CanMonLearnTMHM
- cmp r0, 0
- bne _0808AEE0
-_0808AECE:
- adds r0, r5, 0
- movs r1, 0x9A
- bl sub_806BC3C
- b _0808AF10
- .align 2, 0
-_0808AED8: .4byte gScriptItemId
-_0808AEDC: .4byte gPlayerParty
-_0808AEE0:
- ldr r0, _0808AF04 @ =gScriptItemId
- ldrh r0, [r0]
- bl ItemIdToBattleMoveId
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- adds r0, r4, 0
- bl pokemon_has_move
- lsls r0, 24
- cmp r0, 0
- beq _0808AF08
- adds r0, r5, 0
- movs r1, 0xA8
- bl sub_806BC3C
- b _0808AF10
- .align 2, 0
-_0808AF04: .4byte gScriptItemId
-_0808AF08:
- adds r0, r5, 0
- movs r1, 0x8C
- bl sub_806BC3C
-_0808AF10:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x5
- bls _0808AE9A
- pop {r4-r6}
- pop {r0}
- bx r0
- thumb_func_end sub_808AE8C
-
- thumb_func_start sub_808AF20
-sub_808AF20: @ 808AF20
- push {r4,r5,lr}
- movs r5, 0
-_0808AF24:
- movs r0, 0x64
- adds r1, r5, 0
- muls r1, r0
- ldr r0, _0808AF78 @ =gPlayerParty
- adds r4, r1, r0
- adds r0, r4, 0
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- beq _0808AF66
- adds r0, r4, 0
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0
- bne _0808AF58
- ldr r0, _0808AF7C @ =gScriptItemId
- ldrh r2, [r0]
- adds r0, r4, 0
- movs r1, 0x3
- bl GetEvolutionTargetSpecies
- lsls r0, 16
- cmp r0, 0
- bne _0808AF66
-_0808AF58:
- adds r0, r5, 0
- bl sub_806D668
- adds r0, r5, 0
- movs r1, 0
- bl sub_806BC3C
-_0808AF66:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0x5
- bls _0808AF24
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0808AF78: .4byte gPlayerParty
-_0808AF7C: .4byte gScriptItemId
- thumb_func_end sub_808AF20
-
- thumb_func_start sub_808AF80
-sub_808AF80: @ 808AF80
- push {r4,r5,lr}
- ldr r5, _0808AFB0 @ =0x0201b260
-_0808AF84:
- bl sub_806B124
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0808B00C
- ldr r0, _0808AFB4 @ =gUnknown_02038561
- ldrb r0, [r0]
- cmp r0, 0
- bne _0808AFC6
- ldr r0, _0808AFB8 @ =gScriptItemId
- ldrh r0, [r0]
- bl CheckIfItemIsTMHMOrEvolutionStone
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0808AFBC
- cmp r0, 0x2
- beq _0808AFC2
- b _0808AFC6
- .align 2, 0
-_0808AFB0: .4byte 0x0201b260
-_0808AFB4: .4byte gUnknown_02038561
-_0808AFB8: .4byte gScriptItemId
-_0808AFBC:
- bl sub_808AE8C
- b _0808AFC6
-_0808AFC2:
- bl sub_808AF20
-_0808AFC6:
- ldr r4, _0808B000 @ =gLastFieldPokeMenuOpened
- ldrb r0, [r4]
- cmp r0, 0x5
- bhi _0808AFE2
- adds r1, r0, 0
- movs r0, 0x64
- muls r0, r1
- ldr r1, _0808B004 @ =gPlayerParty
- adds r0, r1
- movs r1, 0xB
- bl GetMonData
- cmp r0, 0
- bne _0808AFE6
-_0808AFE2:
- movs r0, 0
- strb r0, [r4]
-_0808AFE6:
- ldrb r0, [r5]
- ldr r1, _0808B000 @ =gLastFieldPokeMenuOpened
- ldrb r1, [r1]
- bl sub_806C994
- ldrb r0, [r5]
- movs r1, 0
- bl sub_806BF74
- ldr r0, _0808B008 @ =sub_806AEDC
- bl SetMainCallback2
- b _0808B018
- .align 2, 0
-_0808B000: .4byte gLastFieldPokeMenuOpened
-_0808B004: .4byte gPlayerParty
-_0808B008: .4byte sub_806AEDC
-_0808B00C:
- bl sub_80F9344
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0808AF84
-_0808B018:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_808AF80
-
- thumb_func_start sub_808B020
-sub_808B020: @ 808B020
- push {lr}
- ldr r2, _0808B040 @ =gPaletteFade
- ldrb r0, [r2, 0x8]
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r2, 0x8]
- ldr r0, _0808B044 @ =gUnknown_02038561
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _0808B0A0
- cmp r0, 0x1
- bgt _0808B048
- cmp r0, 0
- beq _0808B052
- b _0808B0AC
- .align 2, 0
-_0808B040: .4byte gPaletteFade
-_0808B044: .4byte gUnknown_02038561
-_0808B048:
- cmp r0, 0x3
- beq _0808B0A0
- cmp r0, 0x4
- beq _0808B08C
- b _0808B0AC
-_0808B052:
- ldr r0, _0808B070 @ =gScriptItemId
- ldrh r0, [r0]
- bl CheckIfItemIsTMHMOrEvolutionStone
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0808B078
- ldr r2, _0808B074 @ =sub_808B0C0
- movs r0, 0
- movs r1, 0
- movs r3, 0x14
- bl sub_806AF4C
- b _0808B0AC
- .align 2, 0
-_0808B070: .4byte gScriptItemId
-_0808B074: .4byte sub_808B0C0
-_0808B078:
- ldr r2, _0808B088 @ =sub_808B0C0
- movs r0, 0
- movs r1, 0
- movs r3, 0x3
- bl sub_806AF4C
- b _0808B0AC
- .align 2, 0
-_0808B088: .4byte sub_808B0C0
-_0808B08C:
- ldr r2, _0808B09C @ =sub_808B1EC
- movs r0, 0
- movs r1, 0
- movs r3, 0xFF
- bl sub_806AF4C
- b _0808B0AC
- .align 2, 0
-_0808B09C: .4byte sub_808B1EC
-_0808B0A0:
- ldr r2, _0808B0B8 @ =sub_808B0C0
- movs r0, 0
- movs r1, 0
- movs r3, 0x4
- bl sub_806AF4C
-_0808B0AC:
- ldr r0, _0808B0BC @ =sub_808AF80
- bl SetMainCallback2
- pop {r0}
- bx r0
- .align 2, 0
-_0808B0B8: .4byte sub_808B0C0
-_0808B0BC: .4byte sub_808AF80
- thumb_func_end sub_808B020
-
- thumb_func_start sub_808B0C0
-sub_808B0C0: @ 808B0C0
- push {r4,r5,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _0808B0EC @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0
- bne _0808B1CE
- adds r0, r4, 0
- bl sub_806BD80
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x1
- beq _0808B0F0
- cmp r0, 0x2
- beq _0808B184
- b _0808B1CE
- .align 2, 0
-_0808B0EC: .4byte gPaletteFade
-_0808B0F0:
- adds r0, r4, 0
- bl sub_806CA38
- ldr r1, _0808B118 @ =gLastFieldPokeMenuOpened
- strb r0, [r1]
- ldrb r1, [r1]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _0808B11C @ =gPlayerParty
- adds r0, r1
- movs r1, 0x2D
- bl GetMonData
- cmp r0, 0
- beq _0808B120
- movs r0, 0x20
- bl PlaySE
- b _0808B1CE
- .align 2, 0
-_0808B118: .4byte gLastFieldPokeMenuOpened
-_0808B11C: .4byte gPlayerParty
-_0808B120:
- bl sub_806D5A4
- ldr r5, _0808B16C @ =gUnknown_02038561
- ldrb r0, [r5]
- cmp r0, 0
- bne _0808B13C
- ldr r3, _0808B170 @ =gUnknown_03004AE4
- ldr r0, _0808B174 @ =gScriptItemId
- ldrh r1, [r0]
- ldr r2, _0808B178 @ =sub_808B224
- ldr r3, [r3]
- adds r0, r4, 0
- bl _call_via_r3
-_0808B13C:
- ldrb r0, [r5]
- cmp r0, 0x1
- bne _0808B154
- movs r0, 0x5
- bl PlaySE
- ldr r0, _0808B174 @ =gScriptItemId
- ldrh r1, [r0]
- ldr r2, _0808B17C @ =sub_808B2EC
- adds r0, r4, 0
- bl PartyMenuTryGiveMonHeldItem
-_0808B154:
- ldrb r0, [r5]
- cmp r0, 0x3
- bne _0808B1CE
- movs r0, 0x5
- bl PlaySE
- ldr r1, _0808B180 @ =sub_808B2B4
- adds r0, r4, 0
- bl PartyMenuTryGiveMonMail
- b _0808B1CE
- .align 2, 0
-_0808B16C: .4byte gUnknown_02038561
-_0808B170: .4byte gUnknown_03004AE4
-_0808B174: .4byte gScriptItemId
-_0808B178: .4byte sub_808B224
-_0808B17C: .4byte sub_808B2EC
-_0808B180: .4byte sub_808B2B4
-_0808B184:
- adds r0, r4, 0
- bl sub_806CA38
- ldr r1, _0808B1D8 @ =gLastFieldPokeMenuOpened
- strb r0, [r1]
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x1
- negs r0, r0
- str r5, [sp]
- movs r1, 0
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r2, _0808B1DC @ =gUnknown_02038561
- ldrb r0, [r2]
- cmp r0, 0x1
- bhi _0808B1BA
- ldr r0, _0808B1E0 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _0808B1E4 @ =sub_808B25C
- str r0, [r1]
-_0808B1BA:
- ldrb r0, [r2]
- cmp r0, 0x3
- bne _0808B1CE
- ldr r0, _0808B1E0 @ =gTasks
- lsls r1, r4, 2
- adds r1, r4
- lsls r1, 3
- adds r1, r0
- ldr r0, _0808B1E8 @ =sub_808B2B4
- str r0, [r1]
-_0808B1CE:
- add sp, 0x4
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0808B1D8: .4byte gLastFieldPokeMenuOpened
-_0808B1DC: .4byte gUnknown_02038561
-_0808B1E0: .4byte gTasks
-_0808B1E4: .4byte sub_808B25C
-_0808B1E8: .4byte sub_808B2B4
- thumb_func_end sub_808B0C0
-
- thumb_func_start sub_808B1EC
-sub_808B1EC: @ 808B1EC
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _0808B214 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0808B20E
- ldr r3, _0808B218 @ =gUnknown_03004AE4
- ldr r0, _0808B21C @ =gScriptItemId
- ldrh r1, [r0]
- ldr r2, _0808B220 @ =sub_808B224
- ldr r3, [r3]
- adds r0, r4, 0
- bl _call_via_r3
-_0808B20E:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808B214: .4byte gPaletteFade
-_0808B218: .4byte gUnknown_03004AE4
-_0808B21C: .4byte gScriptItemId
-_0808B220: .4byte sub_808B224
- thumb_func_end sub_808B1EC
-
- thumb_func_start sub_808B224
-sub_808B224: @ 808B224
- 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, _0808B254 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _0808B258 @ =sub_808B25C
- str r1, [r0]
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808B254: .4byte gTasks
-_0808B258: .4byte sub_808B25C
- thumb_func_end sub_808B224
-
- thumb_func_start sub_808B25C
-sub_808B25C: @ 808B25C
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _0808B280 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0808B27A
- ldr r0, _0808B284 @ =sub_80A5B40
- bl SetMainCallback2
- adds r0, r4, 0
- bl DestroyTask
-_0808B27A:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808B280: .4byte gPaletteFade
-_0808B284: .4byte sub_80A5B40
- thumb_func_end sub_808B25C
-
- thumb_func_start sub_808B288
-sub_808B288: @ 808B288
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _0808B2AC @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0808B2A6
- ldr r0, _0808B2B0 @ =Mailbox_ReturnToMailListAfterDeposit
- bl SetMainCallback2
- adds r0, r4, 0
- bl DestroyTask
-_0808B2A6:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808B2AC: .4byte gPaletteFade
-_0808B2B0: .4byte Mailbox_ReturnToMailListAfterDeposit
- thumb_func_end sub_808B288
-
- thumb_func_start sub_808B2B4
-sub_808B2B4: @ 808B2B4
- 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, _0808B2E4 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _0808B2E8 @ =sub_808B288
- str r1, [r0]
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808B2E4: .4byte gTasks
-_0808B2E8: .4byte sub_808B288
- thumb_func_end sub_808B2B4
-
- thumb_func_start sub_808B2EC
-sub_808B2EC: @ 808B2EC
- push {r4,lr}
- sub sp, 0x4
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _0808B31C @ =gUnknown_0202E8F4
- ldrb r0, [r0]
- cmp r0, 0x2
- bne _0808B328
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r1, _0808B320 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _0808B324 @ =sub_808B338
- str r1, [r0]
- b _0808B32E
- .align 2, 0
-_0808B31C: .4byte gUnknown_0202E8F4
-_0808B320: .4byte gTasks
-_0808B324: .4byte sub_808B338
-_0808B328:
- adds r0, r4, 0
- bl sub_808B224
-_0808B32E:
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- thumb_func_end sub_808B2EC
-
- thumb_func_start sub_808B338
-sub_808B338: @ 808B338
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, _0808B38C @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0808B384
- adds r0, r5, 0
- bl sub_806CA38
- ldr r1, _0808B390 @ =gLastFieldPokeMenuOpened
- strb r0, [r1]
- ldrb r1, [r1]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _0808B394 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x40
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r5, 0
- bl DestroyTask
- lsls r1, r4, 3
- adds r1, r4
- lsls r1, 2
- ldr r0, _0808B398 @ =gSaveBlock1 + 0x2B4C
- adds r1, r0
- ldr r2, _0808B39C @ =sub_808B3EC
- movs r0, 0x4
- movs r3, 0x3
- bl sub_80E62A0
-_0808B384:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_0808B38C: .4byte gPaletteFade
-_0808B390: .4byte gLastFieldPokeMenuOpened
-_0808B394: .4byte gPlayerParty
-_0808B398: .4byte gSaveBlock1 + 0x2B4C
-_0808B39C: .4byte sub_808B3EC
- thumb_func_end sub_808B338
-
- thumb_func_start sub_808B3A0
-sub_808B3A0: @ 808B3A0
- push {r4,lr}
- ldr r4, _0808B3A8 @ =0x0201b260
- b _0808B3B8
- .align 2, 0
-_0808B3A8: .4byte 0x0201b260
-_0808B3AC:
- bl sub_80F9344
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0808B3DC
-_0808B3B8:
- bl sub_806B124
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0808B3AC
- ldrb r0, [r4]
- ldr r1, _0808B3E4 @ =gLastFieldPokeMenuOpened
- ldrb r1, [r1]
- bl sub_806C994
- ldrb r0, [r4]
- movs r1, 0
- bl sub_806BF74
- ldr r0, _0808B3E8 @ =sub_806AEDC
- bl SetMainCallback2
-_0808B3DC:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808B3E4: .4byte gLastFieldPokeMenuOpened
-_0808B3E8: .4byte sub_806AEDC
- thumb_func_end sub_808B3A0
-
- thumb_func_start sub_808B3EC
-sub_808B3EC: @ 808B3EC
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- ldr r0, _0808B464 @ =gPaletteFade
- mov r8, r0
- ldrb r0, [r0, 0x8]
- movs r1, 0x80
- orrs r0, r1
- mov r1, r8
- strb r0, [r1, 0x8]
- ldr r0, _0808B468 @ =gScriptResult
- ldrh r0, [r0]
- cmp r0, 0
- bne _0808B480
- ldr r7, _0808B46C @ =gUnknown_0202E8F8
- ldrh r0, [r7]
- cmp r0, 0
- beq _0808B416
- movs r1, 0x1
- bl RemoveBagItem
-_0808B416:
- ldr r6, _0808B470 @ =gLastFieldPokeMenuOpened
- ldrb r0, [r6]
- movs r5, 0x64
- muls r0, r5
- ldr r4, _0808B474 @ =gPlayerParty
- adds r0, r4
- movs r1, 0xC
- bl GetMonData
- lsls r0, 16
- lsrs r0, 16
- movs r1, 0x1
- bl AddBagItem
- ldrb r0, [r6]
- muls r0, r5
- adds r0, r4
- bl TakeMailFromMon
- ldrb r0, [r6]
- muls r0, r5
- adds r0, r4
- movs r1, 0xC
- adds r2, r7, 0
- bl SetMonData
- ldr r0, _0808B478 @ =sub_808B25C
- movs r1, 0x5
- bl CreateTask
- mov r0, r8
- ldrb r1, [r0, 0x8]
- movs r0, 0x7F
- ands r0, r1
- mov r1, r8
- strb r0, [r1, 0x8]
- ldr r0, _0808B47C @ =sub_806AEDC
- b _0808B48E
- .align 2, 0
-_0808B464: .4byte gPaletteFade
-_0808B468: .4byte gScriptResult
-_0808B46C: .4byte gUnknown_0202E8F8
-_0808B470: .4byte gLastFieldPokeMenuOpened
-_0808B474: .4byte gPlayerParty
-_0808B478: .4byte sub_808B25C
-_0808B47C: .4byte sub_806AEDC
-_0808B480:
- ldr r2, _0808B49C @ =sub_808B4A4
- movs r0, 0
- movs r1, 0
- movs r3, 0xFF
- bl sub_806AF4C
- ldr r0, _0808B4A0 @ =sub_808B3A0
-_0808B48E:
- bl SetMainCallback2
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0808B49C: .4byte sub_808B4A4
-_0808B4A0: .4byte sub_808B3A0
- thumb_func_end sub_808B3EC
-
- thumb_func_start sub_808B4A4
-sub_808B4A4: @ 808B4A4
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _0808B4D8 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0808B4D2
- ldr r0, _0808B4DC @ =gLastFieldPokeMenuOpened
- ldrb r0, [r0]
- ldr r1, _0808B4E0 @ =gScriptItemId
- ldrh r1, [r1]
- movs r2, 0x1
- bl DisplayGiveHeldItemMessage
- ldr r1, _0808B4E4 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _0808B4E8 @ =sub_808B4EC
- str r1, [r0]
-_0808B4D2:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808B4D8: .4byte gPaletteFade
-_0808B4DC: .4byte gLastFieldPokeMenuOpened
-_0808B4E0: .4byte gScriptItemId
-_0808B4E4: .4byte gTasks
-_0808B4E8: .4byte sub_808B4EC
- thumb_func_end sub_808B4A4
-
- thumb_func_start sub_808B4EC
-sub_808B4EC: @ 808B4EC
- push {lr}
- lsls r0, 24
- lsrs r1, r0, 24
- ldr r0, _0808B504 @ =gUnknown_0202E8F6
- ldrb r0, [r0]
- cmp r0, 0x1
- beq _0808B500
- adds r0, r1, 0
- bl sub_808B224
-_0808B500:
- pop {r0}
- bx r0
- .align 2, 0
-_0808B504: .4byte gUnknown_0202E8F6
- thumb_func_end sub_808B4EC
-
- thumb_func_start sub_808B508
-sub_808B508: @ 808B508
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- bl sub_808B224
- pop {r0}
- bx r0
- thumb_func_end sub_808B508
-
- thumb_func_start sub_808B518
-sub_808B518: @ 808B518
- push {r4,lr}
- ldr r4, _0808B520 @ =0x0201b260
- b _0808B530
- .align 2, 0
-_0808B520: .4byte 0x0201b260
-_0808B524:
- bl sub_80F9344
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- beq _0808B554
-_0808B530:
- bl sub_806B124
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _0808B524
- ldrb r0, [r4]
- ldr r1, _0808B55C @ =gUnknown_020384F0
- ldrb r1, [r1]
- bl sub_806C994
- ldrb r0, [r4]
- movs r1, 0
- bl sub_806BF74
- ldr r0, _0808B560 @ =sub_806AEDC
- bl SetMainCallback2
-_0808B554:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808B55C: .4byte gUnknown_020384F0
-_0808B560: .4byte sub_806AEDC
- thumb_func_end sub_808B518
-
- thumb_func_start sub_808B564
-sub_808B564: @ 808B564
- push {lr}
- ldr r2, _0808B58C @ =gPaletteFade
- ldrb r0, [r2, 0x8]
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r2, 0x8]
- bl sub_809FA30
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x4
- beq _0808B594
- ldr r2, _0808B590 @ =TaughtMove
- movs r0, 0
- movs r1, 0
- movs r3, 0xFF
- bl sub_806AF4C
- b _0808B5A0
- .align 2, 0
-_0808B58C: .4byte gPaletteFade
-_0808B590: .4byte TaughtMove
-_0808B594:
- ldr r2, _0808B5AC @ =StopTryingToTeachMove_806F588
- movs r0, 0
- movs r1, 0
- movs r3, 0xFF
- bl sub_806AF4C
-_0808B5A0:
- ldr r0, _0808B5B0 @ =sub_808B518
- bl SetMainCallback2
- pop {r0}
- bx r0
- .align 2, 0
-_0808B5AC: .4byte StopTryingToTeachMove_806F588
-_0808B5B0: .4byte sub_808B518
- thumb_func_end sub_808B564
-
- thumb_func_start sub_808B5B4
-sub_808B5B4: @ 808B5B4
- push {lr}
- ldr r3, _0808B5D8 @ =gUnknown_03005CF0
- ldr r2, _0808B5DC @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- ldr r2, [r1]
- str r2, [r3]
- ldr r2, _0808B5E0 @ =sub_808B5E4
- str r2, [r1]
- lsls r0, 24
- lsrs r0, 24
- bl _call_via_r2
- pop {r0}
- bx r0
- .align 2, 0
-_0808B5D8: .4byte gUnknown_03005CF0
-_0808B5DC: .4byte gTasks
-_0808B5E0: .4byte sub_808B5E4
- thumb_func_end sub_808B5B4
-
- thumb_func_start sub_808B5E4
-sub_808B5E4: @ 808B5E4
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- bl sub_8055870
- cmp r0, 0x1
- beq _0808B602
- ldr r1, _0808B608 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _0808B60C @ =gUnknown_03005CF0
- ldr r1, [r1]
- str r1, [r0]
-_0808B602:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_0808B608: .4byte gTasks
-_0808B60C: .4byte gUnknown_03005CF0
- thumb_func_end sub_808B5E4
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/pokenav.s b/asm/pokenav.s
index ea5c0e315..a4d585815 100644
--- a/asm/pokenav.s
+++ b/asm/pokenav.s
@@ -22370,7 +22370,7 @@ _080F6C3A:
adds r6, r0, r1
ldrh r7, [r6]
adds r0, r7, 0
- bl trainer_flag_check
+ bl HasTrainerAlreadyBeenFought
lsls r0, 24
cmp r0, 0
beq _080F6CA0
@@ -22402,7 +22402,7 @@ _080F6C3A:
strb r1, [r0]
ldrh r0, [r6, 0xA]
ldrh r1, [r6, 0xC]
- bl get_mapheader_by_bank_and_number
+ bl Overworld_GetMapHeaderByGroupAndId
ldrh r1, [r5]
lsls r1, 3
adds r4, r1
@@ -22431,7 +22431,7 @@ _080F6CB4:
adds r5, r0, r1
ldrh r4, [r5]
adds r0, r4, 0
- bl trainer_flag_check
+ bl HasTrainerAlreadyBeenFought
lsls r0, 24
cmp r0, 0
beq _080F6D0E
diff --git a/asm/reshow_battle_screen.s b/asm/reshow_battle_screen.s
deleted file mode 100644
index 59b08dd01..000000000
--- a/asm/reshow_battle_screen.s
+++ /dev/null
@@ -1,1097 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "constants/species_constants.inc"
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start nullsub_14
-nullsub_14: @ 807AD54
- bx lr
- thumb_func_end nullsub_14
-
- thumb_func_start ReshowBattleScreenAfterMenu
-ReshowBattleScreenAfterMenu: @ 807AD58
- push {lr}
- ldr r2, _0807AD90 @ =gPaletteFade
- ldrb r0, [r2, 0x8]
- movs r1, 0x80
- orrs r0, r1
- strb r0, [r2, 0x8]
- movs r0, 0
- bl SetHBlankCallback
- movs r0, 0
- bl SetVBlankCallback
- ldr r0, _0807AD94 @ =REG_MOSAIC
- movs r2, 0
- strh r2, [r0]
- ldr r0, _0807AD98 @ =0x02000000
- ldr r3, _0807AD9C @ =0x0001ffff
- adds r1, r0, r3
- strb r2, [r1]
- ldr r1, _0807ADA0 @ =0x0001fffe
- adds r0, r1
- strb r2, [r0]
- ldr r0, _0807ADA4 @ =CB2_ReshowBattleScreenAfterMenu
- bl SetMainCallback2
- pop {r0}
- bx r0
- .align 2, 0
-_0807AD90: .4byte gPaletteFade
-_0807AD94: .4byte REG_MOSAIC
-_0807AD98: .4byte 0x02000000
-_0807AD9C: .4byte 0x0001ffff
-_0807ADA0: .4byte 0x0001fffe
-_0807ADA4: .4byte CB2_ReshowBattleScreenAfterMenu
- thumb_func_end ReshowBattleScreenAfterMenu
-
- thumb_func_start CB2_ReshowBattleScreenAfterMenu
-CB2_ReshowBattleScreenAfterMenu: @ 807ADA8
- push {r4-r7,lr}
- sub sp, 0x8
- ldr r0, _0807ADC4 @ =0x02000000
- ldr r1, _0807ADC8 @ =0x0001ffff
- adds r0, r1
- ldrb r0, [r0]
- cmp r0, 0x13
- bls _0807ADBA
- b _0807B010
-_0807ADBA:
- lsls r0, 2
- ldr r1, _0807ADCC @ =_0807ADD0
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_0807ADC4: .4byte 0x02000000
-_0807ADC8: .4byte 0x0001ffff
-_0807ADCC: .4byte _0807ADD0
- .align 2, 0
-_0807ADD0:
- .4byte _0807AE20
- .4byte _0807AE84
- .4byte _0807AE9C
- .4byte _0807AEC8
- .4byte _0807AECE
- .4byte _0807AEE0
- .4byte _0807AEE6
- .4byte _0807AF18
- .4byte _0807AF1C
- .4byte _0807AF20
- .4byte _0807AF24
- .4byte _0807AF48
- .4byte _0807AF50
- .4byte _0807AF58
- .4byte _0807AF60
- .4byte _0807AF68
- .4byte _0807AF70
- .4byte _0807AF78
- .4byte _0807AF80
- .4byte _0807AF88
-_0807AE20:
- bl dp12_8087EA4
- ldr r4, _0807AE5C @ =gWindowConfig_81E6C58
- adds r0, r4, 0
- bl SetUpWindowConfig
- bl ResetPaletteFade
- ldr r0, _0807AE60 @ =gUnknown_03004210
- adds r1, r4, 0
- bl InitWindowFromConfig
- ldr r0, _0807AE64 @ =gUnknown_030042A4
- movs r1, 0
- strh r1, [r0]
- ldr r0, _0807AE68 @ =gUnknown_030042A0
- strh r1, [r0]
- ldr r0, _0807AE6C @ =gUnknown_030042C0
- strh r1, [r0]
- ldr r0, _0807AE70 @ =gUnknown_030041B4
- strh r1, [r0]
- ldr r0, _0807AE74 @ =gUnknown_03004288
- strh r1, [r0]
- ldr r0, _0807AE78 @ =gUnknown_03004280
- strh r1, [r0]
- ldr r0, _0807AE7C @ =gUnknown_030041B0
- strh r1, [r0]
- ldr r0, _0807AE80 @ =gUnknown_030041B8
- strh r1, [r0]
- b _0807B040
- .align 2, 0
-_0807AE5C: .4byte gWindowConfig_81E6C58
-_0807AE60: .4byte gUnknown_03004210
-_0807AE64: .4byte gUnknown_030042A4
-_0807AE68: .4byte gUnknown_030042A0
-_0807AE6C: .4byte gUnknown_030042C0
-_0807AE70: .4byte gUnknown_030041B4
-_0807AE74: .4byte gUnknown_03004288
-_0807AE78: .4byte gUnknown_03004280
-_0807AE7C: .4byte gUnknown_030041B0
-_0807AE80: .4byte gUnknown_030041B8
-_0807AE84:
- movs r0, 0
- str r0, [sp, 0x4]
- movs r1, 0xC0
- lsls r1, 19
- ldr r2, _0807AE98 @ =0x01006000
- add r0, sp, 0x4
- bl CpuFastSet
- b _0807B040
- .align 2, 0
-_0807AE98: .4byte 0x01006000
-_0807AE9C:
- ldr r5, _0807AEBC @ =0x02000000
- ldr r0, _0807AEC0 @ =0x0001fffe
- adds r4, r5, r0
- ldrb r0, [r4]
- bl sub_800E414
- lsls r0, 24
- cmp r0, 0
- bne _0807AEF8
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- ldr r0, _0807AEC4 @ =0x0001ffff
- adds r1, r5, r0
- b _0807AF38
- .align 2, 0
-_0807AEBC: .4byte 0x02000000
-_0807AEC0: .4byte 0x0001fffe
-_0807AEC4: .4byte 0x0001ffff
-_0807AEC8:
- bl ResetSpriteData
- b _0807B040
-_0807AECE:
- bl FreeAllSpritePalettes
- ldr r1, _0807AEDC @ =gReservedSpritePaletteCount
- movs r0, 0x4
- strb r0, [r1]
- b _0807B040
- .align 2, 0
-_0807AEDC: .4byte gReservedSpritePaletteCount
-_0807AEE0:
- bl sub_8031EE8
- b _0807B040
-_0807AEE6:
- ldr r5, _0807AF00 @ =0x02000000
- ldr r1, _0807AF04 @ =0x0001fffe
- adds r4, r5, r1
- ldrb r0, [r4]
- bl sub_8031C30
- lsls r0, 24
- cmp r0, 0
- beq _0807AF08
-_0807AEF8:
- movs r0, 0
- strb r0, [r4]
- b _0807B040
- .align 2, 0
-_0807AF00: .4byte 0x02000000
-_0807AF04: .4byte 0x0001fffe
-_0807AF08:
- ldrb r0, [r4]
- adds r0, 0x1
- strb r0, [r4]
- ldr r0, _0807AF14 @ =0x0001ffff
- adds r1, r5, r0
- b _0807AF38
- .align 2, 0
-_0807AF14: .4byte 0x0001ffff
-_0807AF18:
- movs r0, 0
- b _0807AF26
-_0807AF1C:
- movs r0, 0x1
- b _0807AF26
-_0807AF20:
- movs r0, 0x2
- b _0807AF26
-_0807AF24:
- movs r0, 0x3
-_0807AF26:
- bl sub_807B094
- lsls r0, 24
- cmp r0, 0
- beq _0807AF32
- b _0807B040
-_0807AF32:
- ldr r1, _0807AF40 @ =0x02000000
- ldr r0, _0807AF44 @ =0x0001ffff
- adds r1, r0
-_0807AF38:
- ldrb r0, [r1]
- subs r0, 0x1
- strb r0, [r1]
- b _0807B040
- .align 2, 0
-_0807AF40: .4byte 0x02000000
-_0807AF44: .4byte 0x0001ffff
-_0807AF48:
- movs r0, 0
- bl sub_807B184
- b _0807B040
-_0807AF50:
- movs r0, 0x1
- bl sub_807B184
- b _0807B040
-_0807AF58:
- movs r0, 0x2
- bl sub_807B184
- b _0807B040
-_0807AF60:
- movs r0, 0x3
- bl sub_807B184
- b _0807B040
-_0807AF68:
- movs r0, 0
- bl sub_807B508
- b _0807B040
-_0807AF70:
- movs r0, 0x1
- bl sub_807B508
- b _0807B040
-_0807AF78:
- movs r0, 0x2
- bl sub_807B508
- b _0807B040
-_0807AF80:
- movs r0, 0x3
- bl sub_807B508
- b _0807B040
-_0807AF88:
- bl sub_80327CC
- movs r0, 0x1
- bl GetBankByPlayerAI
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r7, _0807B000 @ =gBattlePartyID
- lsls r0, r4, 1
- adds r0, r7
- ldrh r0, [r0]
- movs r6, 0x64
- muls r0, r6
- ldr r5, _0807B004 @ =gEnemyParty
- adds r0, r5
- movs r1, 0xB
- bl GetMonData
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- adds r0, r4, 0
- bl sub_8032984
- bl IsDoubleBattle
- lsls r0, 24
- cmp r0, 0
- beq _0807AFEC
- movs r0, 0x3
- bl GetBankByPlayerAI
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- lsls r0, r4, 1
- adds r0, r7
- ldrh r0, [r0]
- muls r0, r6
- adds r0, r5
- movs r1, 0xB
- bl GetMonData
- adds r1, r0, 0
- lsls r1, 16
- lsrs r1, 16
- adds r0, r4, 0
- bl sub_8032984
-_0807AFEC:
- ldr r1, _0807B008 @ =gActionSelectionCursor
- ldr r0, _0807B00C @ =gBankInMenu
- ldrb r0, [r0]
- adds r0, r1
- ldrb r0, [r0]
- movs r1, 0
- bl sub_802E3E4
- b _0807B040
- .align 2, 0
-_0807B000: .4byte gBattlePartyID
-_0807B004: .4byte gEnemyParty
-_0807B008: .4byte gActionSelectionCursor
-_0807B00C: .4byte gBankInMenu
-_0807B010:
- ldr r0, _0807B054 @ =sub_800FCD4
- bl SetHBlankCallback
- ldr r0, _0807B058 @ =sub_800FCFC
- bl SetVBlankCallback
- bl sub_807B06C
- movs r0, 0x1
- str r0, [sp]
- movs r0, 0xFF
- movs r1, 0
- movs r2, 0x10
- movs r3, 0
- bl BeginHardwarePaletteFade
- ldr r2, _0807B05C @ =gPaletteFade
- ldrb r1, [r2, 0x8]
- movs r0, 0x7F
- ands r0, r1
- strb r0, [r2, 0x8]
- ldr r0, _0807B060 @ =sub_800F808
- bl SetMainCallback2
-_0807B040:
- ldr r1, _0807B064 @ =0x02000000
- ldr r0, _0807B068 @ =0x0001ffff
- adds r1, r0
- ldrb r0, [r1]
- adds r0, 0x1
- strb r0, [r1]
- add sp, 0x8
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0807B054: .4byte sub_800FCD4
-_0807B058: .4byte sub_800FCFC
-_0807B05C: .4byte gPaletteFade
-_0807B060: .4byte sub_800F808
-_0807B064: .4byte 0x02000000
-_0807B068: .4byte 0x0001ffff
- thumb_func_end CB2_ReshowBattleScreenAfterMenu
-
- thumb_func_start sub_807B06C
-sub_807B06C: @ 807B06C
- push {lr}
- bl sub_800D6D4
- ldr r3, _0807B08C @ =REG_BG1CNT
- ldrb r2, [r3]
- movs r1, 0xD
- negs r1, r1
- adds r0, r1, 0
- ands r0, r2
- strb r0, [r3]
- ldr r2, _0807B090 @ =REG_BG2CNT
- ldrb r0, [r2]
- ands r1, r0
- strb r1, [r2]
- pop {r0}
- bx r0
- .align 2, 0
-_0807B08C: .4byte REG_BG1CNT
-_0807B090: .4byte REG_BG2CNT
- thumb_func_end sub_807B06C
-
- thumb_func_start sub_807B094
-sub_807B094: @ 807B094
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _0807B0D8 @ =gNoOfAllBanks
- ldrb r0, [r0]
- cmp r4, r0
- bcs _0807B172
- adds r0, r4, 0
- bl GetBankSide
- lsls r0, 24
- cmp r0, 0
- beq _0807B0F2
- lsls r0, r4, 2
- ldr r1, _0807B0DC @ =0x02017800
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- bne _0807B0E8
- ldr r1, _0807B0E0 @ =gBattlePartyID
- lsls r0, r4, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _0807B0E4 @ =gEnemyParty
- adds r0, r1
- adds r1, r4, 0
- bl sub_8031794
- b _0807B168
- .align 2, 0
-_0807B0D8: .4byte gNoOfAllBanks
-_0807B0DC: .4byte 0x02017800
-_0807B0E0: .4byte gBattlePartyID
-_0807B0E4: .4byte gEnemyParty
-_0807B0E8:
- adds r0, r4, 0
- movs r1, 0
- bl sub_8032350
- b _0807B168
-_0807B0F2:
- ldr r2, _0807B108 @ =gBattleTypeFlags
- ldrh r1, [r2]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0807B110
- cmp r4, 0
- bne _0807B110
- ldr r0, _0807B10C @ =gSaveBlock2
- ldrb r0, [r0, 0x8]
- b _0807B122
- .align 2, 0
-_0807B108: .4byte gBattleTypeFlags
-_0807B10C: .4byte gSaveBlock2
-_0807B110:
- ldrh r1, [r2]
- movs r0, 0x80
- lsls r0, 2
- ands r0, r1
- cmp r0, 0
- beq _0807B12A
- cmp r4, 0
- bne _0807B12A
- movs r0, 0x2
-_0807B122:
- movs r1, 0
- bl sub_8031AF4
- b _0807B168
-_0807B12A:
- lsls r0, r4, 2
- ldr r1, _0807B154 @ =0x02017800
- adds r0, r1
- ldrb r1, [r0]
- movs r0, 0x4
- ands r0, r1
- cmp r0, 0
- bne _0807B160
- ldr r1, _0807B158 @ =gBattlePartyID
- lsls r0, r4, 1
- adds r0, r1
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _0807B15C @ =gPlayerParty
- adds r0, r1
- adds r1, r4, 0
- bl sub_80318FC
- b _0807B168
- .align 2, 0
-_0807B154: .4byte 0x02017800
-_0807B158: .4byte gBattlePartyID
-_0807B15C: .4byte gPlayerParty
-_0807B160:
- adds r0, r4, 0
- movs r1, 0
- bl sub_8032350
-_0807B168:
- ldr r0, _0807B17C @ =0x02000000
- ldr r1, _0807B180 @ =0x0001fffe
- adds r0, r1
- movs r1, 0
- strb r1, [r0]
-_0807B172:
- movs r0, 0x1
- pop {r4}
- pop {r1}
- bx r1
- .align 2, 0
-_0807B17C: .4byte 0x02000000
-_0807B180: .4byte 0x0001fffe
- thumb_func_end sub_807B094
-
- thumb_func_start sub_807B184
-sub_807B184: @ 807B184
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- lsls r0, 24
- lsrs r7, r0, 24
- ldr r0, _0807B1B8 @ =gNoOfAllBanks
- ldrb r0, [r0]
- cmp r7, r0
- bcc _0807B19E
- b _0807B4D8
-_0807B19E:
- lsls r2, r7, 2
- ldr r0, _0807B1BC @ =0x02017800
- adds r0, r2, r0
- ldrb r1, [r0]
- movs r0, 0x4
- ands r0, r1
- str r2, [sp]
- cmp r0, 0
- beq _0807B1C0
- adds r0, r7, 0
- bl sub_8077F7C
- b _0807B1C6
- .align 2, 0
-_0807B1B8: .4byte gNoOfAllBanks
-_0807B1BC: .4byte 0x02017800
-_0807B1C0:
- adds r0, r7, 0
- bl sub_8077F68
-_0807B1C6:
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
- adds r0, r7, 0
- bl GetBankSide
- lsls r0, 24
- cmp r0, 0
- bne _0807B1DA
- b _0807B2D8
-_0807B1DA:
- ldr r1, _0807B2BC @ =gBattlePartyID
- lsls r0, r7, 1
- adds r6, r0, r1
- ldrh r0, [r6]
- movs r1, 0x64
- mov r10, r1
- mov r1, r10
- muls r1, r0
- adds r0, r1, 0
- ldr r1, _0807B2C0 @ =gEnemyParty
- mov r9, r1
- add r0, r9
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- bne _0807B1FE
- b _0807B4D8
-_0807B1FE:
- ldrh r0, [r6]
- mov r1, r10
- muls r1, r0
- adds r0, r1, 0
- add r0, r9
- movs r1, 0xB
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- adds r0, r7, 0
- bl GetBankIdentity
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl GetMonSpriteTemplate_803C56C
- ldr r5, _0807B2C4 @ =gUnknown_02024E8C
- adds r0, r7, 0
- movs r1, 0x2
- bl sub_8077ABC
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r7, 0
- bl sub_8079E90
- adds r3, r0, 0
- lsls r3, 24
- lsrs r3, 24
- adds r0, r5, 0
- adds r1, r4, 0
- mov r2, r8
- bl CreateSprite
- ldr r4, _0807B2C8 @ =gObjectBankIDs
- adds r4, r7, r4
- strb r0, [r4]
- ldr r5, _0807B2CC @ =gSprites
- ldrb r0, [r4]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r5
- lsls r3, r7, 4
- ldrb r2, [r1, 0x5]
- movs r0, 0xF
- ands r0, r2
- orrs r0, r3
- strb r0, [r1, 0x5]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r1, r5, 0
- adds r1, 0x1C
- adds r0, r1
- ldr r1, _0807B2D0 @ =SpriteCallbackDummy
- str r1, [r0]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- strh r7, [r0, 0x2E]
- ldrh r0, [r6]
- mov r1, r10
- muls r1, r0
- adds r0, r1, 0
- add r0, r9
- movs r1, 0xB
- bl GetMonData
- ldrb r2, [r4]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r5
- strh r0, [r1, 0x32]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldr r1, _0807B2D4 @ =gBattleMonForms
- adds r1, r7, r1
- ldrb r1, [r1]
- bl StartSpriteAnim
- b _0807B4AC
- .align 2, 0
-_0807B2BC: .4byte gBattlePartyID
-_0807B2C0: .4byte gEnemyParty
-_0807B2C4: .4byte gUnknown_02024E8C
-_0807B2C8: .4byte gObjectBankIDs
-_0807B2CC: .4byte gSprites
-_0807B2D0: .4byte SpriteCallbackDummy
-_0807B2D4: .4byte gBattleMonForms
-_0807B2D8:
- ldr r2, _0807B328 @ =gBattleTypeFlags
- ldrh r1, [r2]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0807B338
- cmp r7, 0
- bne _0807B338
- ldr r5, _0807B32C @ =gSaveBlock2
- ldrb r4, [r5, 0x8]
- movs r0, 0
- bl GetBankIdentity
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl GetMonSpriteTemplate_803C5A0
- ldr r6, _0807B330 @ =gUnknown_02024E8C
- ldr r1, _0807B334 @ =gTrainerBackPicCoords
- ldrb r0, [r5, 0x8]
- lsls r0, 2
- adds r0, r1
- ldrb r0, [r0]
- movs r4, 0x8
- subs r4, r0
- lsls r4, 18
- movs r0, 0xA0
- lsls r0, 15
- adds r4, r0
- asrs r4, 16
- movs r0, 0
- bl sub_8079E90
- adds r3, r0, 0
- lsls r3, 24
- lsrs r3, 24
- adds r0, r6, 0
- b _0807B37C
- .align 2, 0
-_0807B328: .4byte gBattleTypeFlags
-_0807B32C: .4byte gSaveBlock2
-_0807B330: .4byte gUnknown_02024E8C
-_0807B334: .4byte gTrainerBackPicCoords
-_0807B338:
- ldrh r1, [r2]
- movs r0, 0x80
- lsls r0, 2
- ands r0, r1
- cmp r0, 0
- beq _0807B3D0
- cmp r7, 0
- bne _0807B3D0
- movs r0, 0
- bl GetBankIdentity
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- movs r0, 0x2
- bl GetMonSpriteTemplate_803C5A0
- ldr r5, _0807B3BC @ =gUnknown_02024E8C
- ldr r0, _0807B3C0 @ =gTrainerBackPicCoords
- ldrb r0, [r0, 0x8]
- movs r4, 0x8
- subs r4, r0
- lsls r4, 18
- movs r1, 0xA0
- lsls r1, 15
- adds r4, r1
- asrs r4, 16
- movs r0, 0
- bl sub_8079E90
- adds r3, r0, 0
- lsls r3, 24
- lsrs r3, 24
- adds r0, r5, 0
-_0807B37C:
- movs r1, 0x50
- adds r2, r4, 0
- bl CreateSprite
- ldr r3, _0807B3C4 @ =gObjectBankIDs
- strb r0, [r3]
- ldr r4, _0807B3C8 @ =gSprites
- ldrb r0, [r3]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r4
- ldrb r2, [r1, 0x5]
- movs r0, 0xF
- ands r0, r2
- strb r0, [r1, 0x5]
- ldrb r1, [r3]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r1, r4, 0
- adds r1, 0x1C
- adds r0, r1
- ldr r1, _0807B3CC @ =SpriteCallbackDummy
- str r1, [r0]
- ldrb r1, [r3]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r4
- strh r7, [r0, 0x2E]
- b _0807B4AC
- .align 2, 0
-_0807B3BC: .4byte gUnknown_02024E8C
-_0807B3C0: .4byte gTrainerBackPicCoords
-_0807B3C4: .4byte gObjectBankIDs
-_0807B3C8: .4byte gSprites
-_0807B3CC: .4byte SpriteCallbackDummy
-_0807B3D0:
- ldr r1, _0807B4E8 @ =gBattlePartyID
- lsls r0, r7, 1
- adds r6, r0, r1
- ldrh r0, [r6]
- movs r1, 0x64
- mov r10, r1
- mov r1, r10
- muls r1, r0
- adds r0, r1, 0
- ldr r1, _0807B4EC @ =gPlayerParty
- mov r9, r1
- add r0, r9
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- beq _0807B4D8
- ldrh r0, [r6]
- mov r1, r10
- muls r1, r0
- adds r0, r1, 0
- add r0, r9
- movs r1, 0xB
- bl GetMonData
- adds r4, r0, 0
- lsls r4, 16
- lsrs r4, 16
- adds r0, r7, 0
- bl GetBankIdentity
- adds r1, r0, 0
- lsls r1, 24
- lsrs r1, 24
- adds r0, r4, 0
- bl GetMonSpriteTemplate_803C56C
- ldr r5, _0807B4F0 @ =gUnknown_02024E8C
- adds r0, r7, 0
- movs r1, 0x2
- bl sub_8077ABC
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- adds r0, r7, 0
- bl sub_8079E90
- adds r3, r0, 0
- lsls r3, 24
- lsrs r3, 24
- adds r0, r5, 0
- adds r1, r4, 0
- mov r2, r8
- bl CreateSprite
- ldr r4, _0807B4F4 @ =gObjectBankIDs
- adds r4, r7, r4
- strb r0, [r4]
- ldr r5, _0807B4F8 @ =gSprites
- ldrb r0, [r4]
- lsls r1, r0, 4
- adds r1, r0
- lsls r1, 2
- adds r1, r5
- lsls r3, r7, 4
- ldrb r2, [r1, 0x5]
- movs r0, 0xF
- ands r0, r2
- orrs r0, r3
- strb r0, [r1, 0x5]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r1, r5, 0
- adds r1, 0x1C
- adds r0, r1
- ldr r1, _0807B4FC @ =SpriteCallbackDummy
- str r1, [r0]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- strh r7, [r0, 0x2E]
- ldrh r0, [r6]
- mov r1, r10
- muls r1, r0
- adds r0, r1, 0
- add r0, r9
- movs r1, 0xB
- bl GetMonData
- ldrb r2, [r4]
- lsls r1, r2, 4
- adds r1, r2
- lsls r1, 2
- adds r1, r5
- strh r0, [r1, 0x32]
- ldrb r1, [r4]
- lsls r0, r1, 4
- adds r0, r1
- lsls r0, 2
- adds r0, r5
- ldr r1, _0807B500 @ =gBattleMonForms
- adds r1, r7, r1
- ldrb r1, [r1]
- bl StartSpriteAnim
-_0807B4AC:
- ldr r1, _0807B4F8 @ =gSprites
- ldr r0, _0807B4F4 @ =gObjectBankIDs
- adds r0, r7, r0
- ldrb r0, [r0]
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- adds r2, r1
- ldr r0, _0807B504 @ =0x02017800
- ldr r1, [sp]
- adds r0, r1, r0
- ldr r1, [r0]
- lsls r1, 31
- adds r2, 0x3E
- lsrs r1, 31
- lsls r1, 2
- ldrb r3, [r2]
- movs r0, 0x5
- negs r0, r0
- ands r0, r3
- orrs r0, r1
- strb r0, [r2]
-_0807B4D8:
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_0807B4E8: .4byte gBattlePartyID
-_0807B4EC: .4byte gPlayerParty
-_0807B4F0: .4byte gUnknown_02024E8C
-_0807B4F4: .4byte gObjectBankIDs
-_0807B4F8: .4byte gSprites
-_0807B4FC: .4byte SpriteCallbackDummy
-_0807B500: .4byte gBattleMonForms
-_0807B504: .4byte 0x02017800
- thumb_func_end sub_807B184
-
- thumb_func_start sub_807B508
-sub_807B508: @ 807B508
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, _0807B530 @ =gNoOfAllBanks
- ldrb r0, [r0]
- cmp r5, r0
- bcc _0807B518
- b _0807B68A
-_0807B518:
- ldr r2, _0807B534 @ =gBattleTypeFlags
- ldrh r1, [r2]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0807B538
- cmp r5, 0
- bne _0807B538
- bl battle_make_oam_safari_battle
- b _0807B550
- .align 2, 0
-_0807B530: .4byte gNoOfAllBanks
-_0807B534: .4byte gBattleTypeFlags
-_0807B538:
- ldrh r1, [r2]
- movs r0, 0x80
- lsls r0, 2
- ands r0, r1
- cmp r0, 0
- beq _0807B54A
- cmp r5, 0
- bne _0807B54A
- b _0807B68A
-_0807B54A:
- adds r0, r5, 0
- bl battle_make_oam_normal_battle
-_0807B550:
- lsls r0, 24
- lsrs r6, r0, 24
- ldr r0, _0807B58C @ =gHealthboxIDs
- adds r4, r5, r0
- strb r6, [r4]
- adds r0, r5, 0
- bl sub_8043F44
- adds r0, r6, 0
- bl sub_8043DFC
- adds r0, r5, 0
- bl GetBankSide
- lsls r0, 24
- cmp r0, 0
- beq _0807B598
- ldrb r0, [r4]
- ldr r1, _0807B590 @ =gBattlePartyID
- lsls r4, r5, 1
- adds r1, r4, r1
- ldrh r2, [r1]
- movs r1, 0x64
- muls r1, r2
- ldr r2, _0807B594 @ =gEnemyParty
- adds r1, r2
- movs r2, 0
- bl sub_8045A5C
- b _0807B5E4
- .align 2, 0
-_0807B58C: .4byte gHealthboxIDs
-_0807B590: .4byte gBattlePartyID
-_0807B594: .4byte gEnemyParty
-_0807B598:
- ldr r0, _0807B5C0 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _0807B5CC
- ldrb r0, [r4]
- ldr r1, _0807B5C4 @ =gBattlePartyID
- lsls r4, r5, 1
- adds r1, r4, r1
- ldrh r2, [r1]
- movs r1, 0x64
- muls r1, r2
- ldr r2, _0807B5C8 @ =gPlayerParty
- adds r1, r2
- movs r2, 0xA
- bl sub_8045A5C
- b _0807B5E4
- .align 2, 0
-_0807B5C0: .4byte gBattleTypeFlags
-_0807B5C4: .4byte gBattlePartyID
-_0807B5C8: .4byte gPlayerParty
-_0807B5CC:
- ldrb r0, [r4]
- ldr r1, _0807B610 @ =gBattlePartyID
- lsls r4, r5, 1
- adds r1, r4, r1
- ldrh r2, [r1]
- movs r1, 0x64
- muls r1, r2
- ldr r2, _0807B614 @ =gPlayerParty
- adds r1, r2
- movs r2, 0
- bl sub_8045A5C
-_0807B5E4:
- adds r0, r5, 0
- bl GetBankIdentity
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x3
- beq _0807B600
- adds r0, r5, 0
- bl GetBankIdentity
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x2
- bne _0807B61C
-_0807B600:
- ldr r0, _0807B618 @ =gHealthboxIDs
- adds r0, r5, r0
- ldrb r0, [r0]
- movs r1, 0x1
- bl nullsub_11
- b _0807B628
- .align 2, 0
-_0807B610: .4byte gBattlePartyID
-_0807B614: .4byte gPlayerParty
-_0807B618: .4byte gHealthboxIDs
-_0807B61C:
- ldr r0, _0807B654 @ =gHealthboxIDs
- adds r0, r5, r0
- ldrb r0, [r0]
- movs r1, 0
- bl nullsub_11
-_0807B628:
- adds r0, r5, 0
- bl GetBankSide
- lsls r0, 24
- cmp r0, 0
- beq _0807B660
- ldr r0, _0807B658 @ =gBattlePartyID
- adds r0, r4, r0
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _0807B65C @ =gEnemyParty
- adds r0, r1
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- bne _0807B68A
- adds r0, r6, 0
- bl sub_8043DB0
- b _0807B68A
- .align 2, 0
-_0807B654: .4byte gHealthboxIDs
-_0807B658: .4byte gBattlePartyID
-_0807B65C: .4byte gEnemyParty
-_0807B660:
- ldr r0, _0807B690 @ =gBattleTypeFlags
- ldrh r1, [r0]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _0807B68A
- ldr r0, _0807B694 @ =gBattlePartyID
- adds r0, r4, r0
- ldrh r1, [r0]
- movs r0, 0x64
- muls r0, r1
- ldr r1, _0807B698 @ =gPlayerParty
- adds r0, r1
- movs r1, 0x39
- bl GetMonData
- cmp r0, 0
- bne _0807B68A
- adds r0, r6, 0
- bl sub_8043DB0
-_0807B68A:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_0807B690: .4byte gBattleTypeFlags
-_0807B694: .4byte gBattlePartyID
-_0807B698: .4byte gPlayerParty
- thumb_func_end sub_807B508
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/shop.s b/asm/shop.s
deleted file mode 100644
index a341e90a1..000000000
--- a/asm/shop.s
+++ /dev/null
@@ -1,2613 +0,0 @@
- .include "constants/gba_constants.inc"
- .include "constants/species_constants.inc"
- .include "asm/macros.inc"
-
- .syntax unified
-
- .text
-
- thumb_func_start sub_80B33D0
-sub_80B33D0: @ 80B33D0
- push {r4-r6,lr}
- mov r6, r8
- push {r6}
- adds r6, r0, 0
- adds r4, r1, 0
- mov r8, r2
- lsls r4, 22
- ldr r5, _080B3418 @ =gBGTilemapBuffers + 0x1800
- lsls r6, 17
- asrs r6, 16
- movs r0, 0x80
- lsls r0, 15
- adds r4, r0
- asrs r4, 16
- adds r0, r5, 0
- adds r1, r6, 0
- adds r2, r4, 0
- mov r3, r8
- bl BuyMenuDrawMapMetatileLayer
- ldr r0, _080B341C @ =0xfffff800
- adds r5, r0
- movs r0, 0x8
- add r8, r0
- adds r0, r5, 0
- adds r1, r6, 0
- adds r2, r4, 0
- mov r3, r8
- bl BuyMenuDrawMapMetatileLayer
- pop {r3}
- mov r8, r3
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080B3418: .4byte gBGTilemapBuffers + 0x1800
-_080B341C: .4byte 0xfffff800
- thumb_func_end sub_80B33D0
-
- thumb_func_start sub_80B3420
-sub_80B3420: @ 80B3420
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- mov r4, sp
- adds r4, 0x2
- mov r0, sp
- adds r1, r4, 0
- bl GetXYCoordsOneStepInFrontOfPlayer
- mov r1, sp
- mov r0, sp
- ldrh r0, [r0]
- subs r0, 0x3
- strh r0, [r1]
- ldrh r0, [r4]
- subs r0, 0x3
- strh r0, [r4]
- movs r1, 0
- ldr r0, _080B34A8 @ =0x000001ff
- mov r10, r0
- ldr r2, _080B34AC @ =gMapHeader
- mov r9, r2
-_080B3452:
- movs r4, 0
- lsls r1, 16
- mov r8, r1
- asrs r7, r1, 16
-_080B345A:
- mov r0, sp
- movs r3, 0
- ldrsh r0, [r0, r3]
- lsls r4, 16
- asrs r6, r4, 16
- adds r0, r6
- mov r2, sp
- movs r3, 0x2
- ldrsh r1, [r2, r3]
- adds r1, r7
- bl MapGridGetMetatileIdAt
- lsls r0, 16
- lsrs r5, r0, 16
- cmp r7, 0x5
- beq _080B34D0
- cmp r6, 0x6
- beq _080B34D0
- mov r0, sp
- movs r1, 0
- ldrsh r0, [r0, r1]
- adds r0, r6
- mov r2, sp
- movs r3, 0x2
- ldrsh r1, [r2, r3]
- adds r1, r7
- bl MapGridGetMetatileLayerTypeAt
- lsls r0, 24
- lsrs r3, r0, 24
- cmp r5, r10
- bhi _080B34B0
- mov r1, r9
- ldr r0, [r1]
- ldr r0, [r0, 0x10]
- lsls r1, r5, 4
- ldr r2, [r0, 0xC]
- adds r2, r1
- b _080B34C0
- .align 2, 0
-_080B34A8: .4byte 0x000001ff
-_080B34AC: .4byte gMapHeader
-_080B34B0:
- mov r2, r9
- ldr r0, [r2]
- ldr r1, [r0, 0x14]
- ldr r2, _080B34CC @ =0xfffffe00
- adds r0, r5, r2
- lsls r0, 4
- ldr r2, [r1, 0xC]
- adds r2, r0
-_080B34C0:
- adds r0, r6, 0
- adds r1, r7, 0
- bl BuyMenuDrawMapMetatile
- b _080B3506
- .align 2, 0
-_080B34CC: .4byte 0xfffffe00
-_080B34D0:
- cmp r5, r10
- bhi _080B34EC
- asrs r0, r4, 16
- mov r3, r9
- ldr r1, [r3]
- ldr r1, [r1, 0x10]
- lsls r3, r5, 4
- ldr r2, [r1, 0xC]
- adds r2, r3
- mov r3, r8
- asrs r1, r3, 16
- bl sub_80B33D0
- b _080B3506
-_080B34EC:
- asrs r0, r4, 16
- mov r2, r9
- ldr r1, [r2]
- ldr r2, [r1, 0x14]
- ldr r3, _080B354C @ =0xfffffe00
- adds r1, r5, r3
- lsls r1, 4
- ldr r2, [r2, 0xC]
- adds r2, r1
- mov r3, r8
- asrs r1, r3, 16
- bl sub_80B33D0
-_080B3506:
- cmp r7, 0
- bne _080B3520
- asrs r1, r4, 16
- cmp r1, 0
- beq _080B3520
- cmp r1, 0x6
- beq _080B3520
- lsls r1, 17
- asrs r1, 16
- ldr r0, _080B3550 @ =gBGTilemapBuffers + 0x800
- movs r2, 0x40
- bl sub_80B32EC
-_080B3520:
- movs r1, 0x80
- lsls r1, 9
- adds r0, r4, r1
- lsrs r4, r0, 16
- asrs r0, 16
- cmp r0, 0x6
- ble _080B345A
- adds r0, r1, 0
- add r0, r8
- lsrs r1, r0, 16
- asrs r0, 16
- cmp r0, 0x5
- ble _080B3452
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080B354C: .4byte 0xfffffe00
-_080B3550: .4byte gBGTilemapBuffers + 0x800
- thumb_func_end sub_80B3420
-
- thumb_func_start BuyMenuDrawMapGraphics
-BuyMenuDrawMapGraphics: @ 80B3554
- push {lr}
- bl sub_80F9020
- bl sub_80B356C
- bl sub_80B368C
- bl sub_80B3420
- pop {r0}
- bx r0
- thumb_func_end BuyMenuDrawMapGraphics
-
- thumb_func_start sub_80B356C
-sub_80B356C: @ 80B356C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x8
- movs r0, 0
- mov r8, r0
- mov r4, sp
- adds r4, 0x2
- mov r0, sp
- adds r1, r4, 0
- bl GetXYCoordsOneStepInFrontOfPlayer
- bl PlayerGetZCoord
- lsls r0, 24
- lsrs r0, 24
- str r0, [sp, 0x4]
- movs r5, 0
- ldr r2, _080B3674 @ =gUnknown_020386A4
- movs r1, 0x10
-_080B3598:
- lsls r0, r5, 3
- adds r0, r2
- strh r1, [r0]
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0xF
- bls _080B3598
- movs r5, 0
- ldr r7, _080B3678 @ =gUnknown_020386AA
- subs r1, r7, 0x6
- mov r9, r1
-_080B35B0:
- movs r4, 0
- adds r2, r5, 0x1
- mov r10, r2
-_080B35B6:
- mov r1, sp
- ldr r3, _080B367C @ =0x0000fffd
- adds r0, r3, 0
- ldrh r1, [r1]
- adds r0, r1
- adds r0, r4
- lsls r0, 16
- lsrs r0, 16
- ldr r2, _080B3680 @ =0x0000fffe
- adds r1, r2, 0
- mov r3, sp
- ldrh r3, [r3, 0x2]
- adds r1, r3
- adds r1, r5
- lsls r1, 16
- lsrs r1, 16
- ldr r2, [sp, 0x4]
- bl GetFieldObjectIdByXYZ
- lsls r0, 24
- lsrs r2, r0, 24
- cmp r2, 0x10
- beq _080B3650
- mov r0, r8
- lsls r3, r0, 3
- mov r1, r9
- adds r0, r3, r1
- movs r6, 0
- strh r2, [r0]
- mov r0, r9
- adds r0, 0x2
- adds r0, r3, r0
- strh r4, [r0]
- ldr r1, _080B3684 @ =gUnknown_020386A8
- adds r0, r3, r1
- strh r5, [r0]
- ldr r1, _080B3688 @ =gMapObjects
- lsls r0, r2, 3
- adds r0, r2
- lsls r0, 2
- adds r2, r0, r1
- ldrb r0, [r2, 0x18]
- lsls r0, 28
- lsrs r0, 28
- cmp r0, 0x1
- bne _080B3616
- adds r0, r3, r7
- strh r6, [r0]
-_080B3616:
- ldrb r0, [r2, 0x18]
- lsls r0, 28
- lsrs r0, 28
- cmp r0, 0x2
- bne _080B3626
- adds r1, r3, r7
- movs r0, 0x1
- strh r0, [r1]
-_080B3626:
- ldrb r0, [r2, 0x18]
- lsls r0, 28
- lsrs r0, 28
- cmp r0, 0x3
- bne _080B3636
- adds r1, r3, r7
- movs r0, 0x2
- strh r0, [r1]
-_080B3636:
- ldrb r0, [r2, 0x18]
- lsls r0, 28
- lsrs r0, 28
- cmp r0, 0x4
- bne _080B3646
- adds r1, r3, r7
- movs r0, 0x3
- strh r0, [r1]
-_080B3646:
- mov r0, r8
- adds r0, 0x1
- lsls r0, 24
- lsrs r0, 24
- mov r8, r0
-_080B3650:
- adds r0, r4, 0x1
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, 0x6
- bls _080B35B6
- mov r2, r10
- lsls r0, r2, 24
- lsrs r5, r0, 24
- cmp r5, 0x4
- bls _080B35B0
- add sp, 0x8
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080B3674: .4byte gUnknown_020386A4
-_080B3678: .4byte gUnknown_020386AA
-_080B367C: .4byte 0x0000fffd
-_080B3680: .4byte 0x0000fffe
-_080B3684: .4byte gUnknown_020386A8
-_080B3688: .4byte gMapObjects
- thumb_func_end sub_80B356C
-
- thumb_func_start sub_80B368C
-sub_80B368C: @ 80B368C
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x4
- movs r5, 0
- ldr r6, _080B3710 @ =gUnknown_020386A4
- adds r0, r6, 0x6
- mov r8, r0
- ldr r7, _080B3714 @ =gMapObjects
-_080B369E:
- lsls r4, r5, 3
- adds r1, r4, r6
- movs r2, 0
- ldrsh r0, [r1, r2]
- cmp r0, 0x10
- beq _080B36F8
- adds r1, r0, 0
- lsls r0, r1, 3
- adds r0, r1
- lsls r0, 2
- adds r0, r7
- ldrb r0, [r0, 0x5]
- adds r1, r6, 0x2
- adds r1, r4, r1
- ldrh r2, [r1]
- lsls r2, 4
- adds r2, 0x8
- lsls r2, 16
- asrs r2, 16
- adds r1, r6, 0x4
- adds r1, r4, r1
- ldrh r3, [r1]
- lsls r3, 20
- movs r1, 0x80
- lsls r1, 14
- adds r3, r1
- asrs r3, 16
- movs r1, 0x2
- str r1, [sp]
- ldr r1, _080B3718 @ =SpriteCallbackDummy
- bl AddPseudoFieldObject
- lsls r0, 24
- lsrs r0, 24
- lsls r2, r0, 4
- adds r2, r0
- lsls r2, 2
- ldr r0, _080B371C @ =gSprites
- adds r2, r0
- mov r1, r8
- adds r0, r4, r1
- ldrb r1, [r0]
- adds r0, r2, 0
- bl StartSpriteAnim
-_080B36F8:
- adds r0, r5, 0x1
- lsls r0, 24
- lsrs r5, r0, 24
- cmp r5, 0xF
- bls _080B369E
- add sp, 0x4
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080B3710: .4byte gUnknown_020386A4
-_080B3714: .4byte gMapObjects
-_080B3718: .4byte SpriteCallbackDummy
-_080B371C: .4byte gSprites
- thumb_func_end sub_80B368C
-
- thumb_func_start sub_80B3720
-sub_80B3720: @ 80B3720
- push {r4-r6,lr}
- movs r1, 0
- ldr r6, _080B3754 @ =gBGTilemapBuffers + 0x800
- ldr r5, _080B3758 @ =0x000003ff
- ldr r4, _080B375C @ =0x02018000
- ldr r0, _080B3760 @ =0x0000c3e0
- adds r3, r0, 0
-_080B372E:
- lsls r0, r1, 16
- asrs r2, r0, 16
- lsls r1, r2, 1
- adds r0, r1, r4
- ldrh r0, [r0]
- cmp r0, 0
- beq _080B3742
- adds r1, r6
- adds r0, r3
- strh r0, [r1]
-_080B3742:
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r1, r0, 16
- asrs r0, 16
- cmp r0, r5
- ble _080B372E
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080B3754: .4byte gBGTilemapBuffers + 0x800
-_080B3758: .4byte 0x000003ff
-_080B375C: .4byte 0x02018000
-_080B3760: .4byte 0x0000c3e0
- thumb_func_end sub_80B3720
-
- thumb_func_start sub_80B3764
-sub_80B3764: @ 80B3764
- push {r4,r5,lr}
- sub sp, 0x8
- adds r4, r0, 0
- adds r5, r1, 0
- bl sub_80B3720
- adds r0, r4, 0
- adds r1, r5, 0
- movs r2, 0
- bl sub_80B39D0
- ldr r0, _080B3798 @ =gUnknown_03000708
- ldrb r0, [r0, 0x9]
- str r0, [sp]
- movs r0, 0xF
- str r0, [sp, 0x4]
- movs r0, 0
- movs r1, 0xE
- movs r2, 0x2
- movs r3, 0x8
- bl InitMenu
- add sp, 0x8
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080B3798: .4byte gUnknown_03000708
- thumb_func_end sub_80B3764
-
- thumb_func_start sub_80B379C
-sub_80B379C: @ 80B379C
- push {r4-r7,lr}
- movs r1, 0
- ldr r0, _080B37E0 @ =gBGTilemapBuffers + 0x800
- mov r12, r0
- ldr r7, _080B37E4 @ =0x02018300
- ldr r0, _080B37E8 @ =0x0000c3e0
- adds r6, r0, 0
-_080B37AA:
- movs r2, 0
- adds r0, r1, 0
- adds r0, 0xC
- adds r5, r1, 0x1
- lsls r4, r0, 5
- lsls r3, r1, 5
-_080B37B6:
- adds r1, r4, r2
- lsls r1, 1
- add r1, r12
- adds r0, r3, r2
- lsls r0, 1
- adds r0, r7
- ldrh r0, [r0]
- adds r0, r6, r0
- strh r0, [r1]
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- cmp r2, 0xD
- bls _080B37B6
- lsls r0, r5, 16
- lsrs r1, r0, 16
- cmp r1, 0x7
- bls _080B37AA
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080B37E0: .4byte gBGTilemapBuffers + 0x800
-_080B37E4: .4byte 0x02018300
-_080B37E8: .4byte 0x0000c3e0
- thumb_func_end sub_80B379C
-
- thumb_func_start sub_80B37EC
-sub_80B37EC: @ 80B37EC
- push {lr}
- bl sub_80B3A70
- pop {r0}
- bx r0
- thumb_func_end sub_80B37EC
-
- thumb_func_start sub_80B37F8
-sub_80B37F8: @ 80B37F8
- push {r4-r6,lr}
- sub sp, 0x8
- adds r6, r0, 0
- lsls r6, 24
- lsrs r6, 24
- ldr r1, _080B3884 @ =gUnknown_03000708
- ldrb r0, [r1, 0xB]
- ldrb r2, [r1, 0x9]
- adds r0, r2
- ldr r1, [r1, 0x4]
- lsls r0, 1
- adds r0, r1
- ldrh r0, [r0]
- bl ItemId_GetPrice
- adds r4, r0, 0
- movs r0, 0x1
- bl GetPriceReduction
- lsls r4, 16
- lsrs r4, 16
- lsls r0, 24
- lsrs r0, 24
- asrs r4, r0
- ldr r0, _080B3888 @ =gTasks
- lsls r5, r6, 2
- adds r5, r6
- lsls r5, 3
- adds r5, r0
- movs r1, 0xA
- ldrsh r0, [r5, r1]
- muls r0, r4
- movs r1, 0x6
- movs r2, 0x6
- movs r3, 0xB
- bl sub_80B7A94
- ldr r0, _080B388C @ =gStringVar1
- movs r1, 0xFC
- strb r1, [r0]
- movs r1, 0x14
- strb r1, [r0, 0x1]
- movs r1, 0x6
- strb r1, [r0, 0x2]
- adds r0, 0x3
- movs r2, 0xA
- ldrsh r1, [r5, r2]
- movs r2, 0x1
- movs r3, 0x2
- bl ConvertIntToDecimalStringN
- ldr r0, _080B3890 @ =gOtherText_xString1
- movs r1, 0x1
- movs r2, 0xB
- bl MenuPrint
- ldr r0, _080B3894 @ =gBGTilemapBuffers + 0x800
- movs r1, 0x2
- str r1, [sp]
- ldr r1, _080B3898 @ =0x0000c3e1
- str r1, [sp, 0x4]
- movs r1, 0x1
- movs r2, 0xB
- movs r3, 0xC
- bl sub_80A3FA0
- add sp, 0x8
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080B3884: .4byte gUnknown_03000708
-_080B3888: .4byte gTasks
-_080B388C: .4byte gStringVar1
-_080B3890: .4byte gOtherText_xString1
-_080B3894: .4byte gBGTilemapBuffers + 0x800
-_080B3898: .4byte 0x0000c3e1
- thumb_func_end sub_80B37F8
-
- thumb_func_start sub_80B389C
-sub_80B389C: @ 80B389C
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x4
- mov r8, r2
- lsls r0, 16
- lsrs r2, r0, 16
- mov r9, r2
- lsls r1, 24
- lsrs r4, r1, 24
- ldr r5, _080B392C @ =gStringVar1
- mov r0, r8
- cmp r0, 0
- beq _080B38C8
- movs r0, 0xFC
- strb r0, [r5]
- movs r0, 0x1
- strb r0, [r5, 0x1]
- movs r0, 0x2
- strb r0, [r5, 0x2]
- adds r5, 0x3
-_080B38C8:
- adds r0, r2, 0
- adds r1, r5, 0
- bl CopyItemName
- ldr r6, _080B392C @ =gStringVar1
- lsls r7, r4, 3
- movs r0, 0x1
- str r0, [sp]
- adds r0, r6, 0
- movs r1, 0x70
- adds r2, r7, 0
- movs r3, 0x58
- bl sub_8072A18
- adds r5, r6, 0
- mov r0, r8
- cmp r0, 0
- beq _080B38EE
- adds r5, r6, 0x3
-_080B38EE:
- mov r0, r9
- bl ItemId_GetPrice
- adds r4, r0, 0
- movs r0, 0x1
- bl GetPriceReduction
- lsls r4, 16
- lsrs r4, 16
- lsls r0, 24
- lsrs r0, 24
- asrs r4, r0
- adds r0, r5, 0
- adds r1, r4, 0
- movs r2, 0x4
- bl sub_80B79F8
- adds r0, r6, 0
- movs r1, 0xCA
- adds r2, r7, 0
- movs r3, 0x1
- bl MenuPrint_PixelCoords
- add sp, 0x4
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080B392C: .4byte gStringVar1
- thumb_func_end sub_80B389C
-
- thumb_func_start sub_80B3930
-sub_80B3930: @ 80B3930
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- sub sp, 0x4
- adds r4, r2, 0
- lsls r0, 16
- lsrs r3, r0, 16
- lsls r1, 24
- lsrs r1, 24
- mov r9, r1
- ldr r2, _080B39A0 @ =gStringVar1
- cmp r4, 0
- beq _080B395A
- movs r0, 0xFC
- strb r0, [r2]
- movs r0, 0x1
- strb r0, [r2, 0x1]
- movs r0, 0x2
- strb r0, [r2, 0x2]
- adds r2, 0x3
-_080B395A:
- lsls r6, r3, 5
- ldr r0, _080B39A4 @ =gDecorations + 0x1
- mov r8, r0
- adds r1, r6, r0
- adds r0, r2, 0
- bl StringCopy
- ldr r5, _080B39A0 @ =gStringVar1
- mov r0, r9
- lsls r7, r0, 3
- movs r0, 0x1
- str r0, [sp]
- adds r0, r5, 0
- movs r1, 0x70
- adds r2, r7, 0
- movs r3, 0x58
- bl sub_8072A18
- adds r2, r5, 0
- cmp r4, 0
- beq _080B3986
- adds r2, r5, 0x3
-_080B3986:
- mov r0, r8
- subs r0, 0x1
- adds r3, r6, r0
- ldrh r1, [r3, 0x14]
- ldr r0, _080B39A8 @ =0x00002710
- cmp r1, r0
- bne _080B39AC
- movs r0, 0x19
- mov r1, r9
- adds r2, r4, 0
- bl sub_80B7B34
- b _080B39C2
- .align 2, 0
-_080B39A0: .4byte gStringVar1
-_080B39A4: .4byte gDecorations + 0x1
-_080B39A8: .4byte 0x00002710
-_080B39AC:
- ldrh r1, [r3, 0x14]
- adds r0, r2, 0
- movs r2, 0x4
- bl sub_80B79F8
- adds r0, r5, 0
- movs r1, 0xCA
- adds r2, r7, 0
- movs r3, 0x1
- bl MenuPrint_PixelCoords
-_080B39C2:
- add sp, 0x4
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_80B3930
-
- thumb_func_start sub_80B39D0
-sub_80B39D0: @ 80B39D0
- push {r4-r6,lr}
- adds r6, r1, 0
- adds r5, r2, 0
- b _080B3A1A
-_080B39D8:
- ldrb r0, [r1, 0xC]
- cmp r0, 0
- bne _080B39FC
- ldrb r0, [r1, 0xB]
- adds r0, r4
- ldr r1, [r1, 0x4]
- lsls r0, 1
- adds r0, r1
- ldrh r0, [r0]
- lsls r1, r4, 25
- movs r2, 0x80
- lsls r2, 18
- adds r1, r2
- lsrs r1, 24
- adds r2, r5, 0
- bl sub_80B389C
- b _080B3A18
-_080B39FC:
- ldrb r0, [r1, 0xB]
- adds r0, r4
- ldr r1, [r1, 0x4]
- lsls r0, 1
- adds r0, r1
- ldrh r0, [r0]
- lsls r1, r4, 25
- movs r2, 0x80
- lsls r2, 18
- adds r1, r2
- lsrs r1, 24
- adds r2, r5, 0
- bl sub_80B3930
-_080B3A18:
- adds r0, r4, 0x1
-_080B3A1A:
- lsls r0, 24
- lsrs r4, r0, 24
- cmp r4, r6
- bgt _080B3A2E
- ldr r1, _080B3A68 @ =gUnknown_03000708
- ldrb r0, [r1, 0xB]
- adds r0, r4
- ldrb r2, [r1, 0x8]
- cmp r0, r2
- blt _080B39D8
-_080B3A2E:
- cmp r4, 0x8
- beq _080B3A60
- ldr r1, _080B3A68 @ =gUnknown_03000708
- ldrb r0, [r1, 0xB]
- adds r0, r4
- ldrb r1, [r1, 0x8]
- cmp r0, r1
- bne _080B3A60
- lsls r3, r4, 1
- adds r4, r3, 0x2
- lsls r4, 24
- lsrs r4, 24
- adds r3, 0x3
- lsls r3, 24
- lsrs r3, 24
- movs r0, 0xE
- adds r1, r4, 0
- movs r2, 0x1C
- bl MenuFillWindowRectWithBlankTile
- ldr r0, _080B3A6C @ =gOtherText_CancelNoTerminator
- movs r1, 0xE
- adds r2, r4, 0
- bl MenuPrint
-_080B3A60:
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080B3A68: .4byte gUnknown_03000708
-_080B3A6C: .4byte gOtherText_CancelNoTerminator
- thumb_func_end sub_80B39D0
-
- thumb_func_start sub_80B3A70
-sub_80B3A70: @ 80B3A70
- push {r4,lr}
- sub sp, 0x8
- ldr r2, _080B3A9C @ =gUnknown_03000708
- ldrb r1, [r2, 0xB]
- ldrb r0, [r2, 0x9]
- adds r0, r1, r0
- ldrb r1, [r2, 0x8]
- cmp r0, r1
- beq _080B3ACC
- ldrb r4, [r2, 0xC]
- cmp r4, 0
- bne _080B3AA0
- ldr r1, [r2, 0x4]
- lsls r0, 1
- adds r0, r1
- ldrh r0, [r0]
- bl ItemId_GetDescription
- movs r1, 0x30
- str r1, [sp]
- str r4, [sp, 0x4]
- b _080B3ABA
- .align 2, 0
-_080B3A9C: .4byte gUnknown_03000708
-_080B3AA0:
- ldr r1, _080B3AC8 @ =gDecorations
- ldr r2, [r2, 0x4]
- lsls r0, 1
- adds r0, r2
- ldrh r0, [r0]
- lsls r0, 5
- adds r1, 0x18
- adds r0, r1
- ldr r0, [r0]
- movs r1, 0x30
- str r1, [sp]
- movs r1, 0
- str r1, [sp, 0x4]
-_080B3ABA:
- movs r1, 0x4
- movs r2, 0x68
- movs r3, 0x68
- bl sub_8072AB0
- b _080B3AE0
- .align 2, 0
-_080B3AC8: .4byte gDecorations
-_080B3ACC:
- ldr r0, _080B3AE8 @ =gOtherText_QuitShopping
- movs r1, 0x30
- str r1, [sp]
- movs r1, 0
- str r1, [sp, 0x4]
- movs r1, 0x4
- movs r2, 0x68
- movs r3, 0x68
- bl sub_8072AB0
-_080B3AE0:
- add sp, 0x8
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080B3AE8: .4byte gOtherText_QuitShopping
- thumb_func_end sub_80B3A70
-
- thumb_func_start sub_80B3AEC
-sub_80B3AEC: @ 80B3AEC
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r0, _080B3B5C @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _080B3B06
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _080B3B7A
-_080B3B06:
- ldr r4, _080B3B60 @ =gUnknown_03000708
- ldrb r1, [r4, 0x9]
- adds r0, r1, 0
- movs r2, 0
- bl sub_80B39D0
- movs r0, 0x5
- bl PlaySE
- ldrb r0, [r4, 0xB]
- ldrb r1, [r4, 0x9]
- adds r0, r1
- ldr r1, [r4, 0x4]
- lsls r0, 1
- adds r0, r1
- ldrh r0, [r0]
- cmp r0, 0x4
- bne _080B3B74
- ldr r0, _080B3B64 @ =gTasks
- lsls r1, r5, 2
- adds r1, r5
- lsls r1, 3
- adds r1, r0
- movs r2, 0xA
- ldrsh r0, [r1, r2]
- cmp r0, 0x9
- ble _080B3B74
- movs r0, 0xC
- movs r1, 0x1
- bl AddBagItem
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080B3B74
- ldr r1, _080B3B68 @ =gOtherText_FreePremierBall
- ldr r2, _080B3B6C @ =sub_80B4378
- ldr r3, _080B3B70 @ =0x0000c3e1
- adds r0, r5, 0
- bl DisplayItemMessageOnField
- b _080B3B7A
- .align 2, 0
-_080B3B5C: .4byte gMain
-_080B3B60: .4byte gUnknown_03000708
-_080B3B64: .4byte gTasks
-_080B3B68: .4byte gOtherText_FreePremierBall
-_080B3B6C: .4byte sub_80B4378
-_080B3B70: .4byte 0x0000c3e1
-_080B3B74:
- adds r0, r5, 0
- bl sub_80B4378
-_080B3B7A:
- pop {r4,r5}
- pop {r0}
- bx r0
- thumb_func_end sub_80B3AEC
-
- thumb_func_start sub_80B3B80
-sub_80B3B80: @ 80B3B80
- push {r4,r5,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x26
- bl IncrementGameStat
- ldr r5, _080B3BC0 @ =gSaveBlock1 + 0x490
- ldr r0, _080B3BC4 @ =gUnknown_020386A0
- ldr r1, [r0]
- adds r0, r5, 0
- bl sub_80B79E0
- movs r0, 0x5F
- bl PlaySE
- ldr r0, [r5]
- movs r1, 0
- movs r2, 0
- bl sub_80B7BEC
- ldr r1, _080B3BC8 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _080B3BCC @ =sub_80B3AEC
- str r1, [r0]
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080B3BC0: .4byte gSaveBlock1 + 0x490
-_080B3BC4: .4byte gUnknown_020386A0
-_080B3BC8: .4byte gTasks
-_080B3BCC: .4byte sub_80B3AEC
- thumb_func_end sub_80B3B80
-
- thumb_func_start sub_80B3BD0
-sub_80B3BD0: @ 80B3BD0
- push {r4,lr}
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, _080B3BF0 @ =gUnknown_03000708
- ldrb r1, [r0, 0x9]
- adds r0, r1, 0
- movs r2, 0
- bl sub_80B39D0
- adds r0, r4, 0
- bl sub_80B4378
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080B3BF0: .4byte gUnknown_03000708
- thumb_func_end sub_80B3BD0
-
- thumb_func_start sub_80B3BF4
-sub_80B3BF4: @ 80B3BF4
- push {r4,r5,lr}
- sub sp, 0x8
- lsls r0, 24
- lsrs r5, r0, 24
- movs r0, 0x7
- movs r1, 0x8
- movs r2, 0xD
- movs r3, 0xD
- bl MenuZeroFillWindowRect
- ldr r0, _080B3C7C @ =gBGTilemapBuffers + 0x800
- movs r1, 0x4
- str r1, [sp]
- movs r1, 0
- str r1, [sp, 0x4]
- movs r1, 0x8
- movs r2, 0x9
- movs r3, 0x4
- bl sub_80A3FA0
- bl sub_80B379C
- bl sub_80B3420
- ldr r0, _080B3C80 @ =gSaveBlock1
- movs r1, 0x92
- lsls r1, 3
- adds r0, r1
- ldr r0, [r0]
- ldr r1, _080B3C84 @ =gUnknown_020386A0
- ldr r1, [r1]
- bl IsEnoughMoney
- lsls r0, 24
- cmp r0, 0
- beq _080B3D18
- ldr r4, _080B3C88 @ =gUnknown_03000708
- ldrb r0, [r4, 0xC]
- cmp r0, 0
- bne _080B3CAC
- ldrb r0, [r4, 0xB]
- ldrb r1, [r4, 0x9]
- adds r0, r1
- ldr r1, [r4, 0x4]
- lsls r0, 1
- adds r0, r1
- ldrh r0, [r0]
- ldr r2, _080B3C8C @ =gTasks
- lsls r1, r5, 2
- adds r1, r5
- lsls r1, 3
- adds r1, r2
- ldrh r1, [r1, 0xA]
- bl AddBagItem
- lsls r0, 24
- cmp r0, 0
- beq _080B3C9C
- ldr r1, _080B3C90 @ =gOtherText_HereYouGo
- ldr r2, _080B3C94 @ =sub_80B3B80
- ldr r3, _080B3C98 @ =0x0000c3e1
- adds r0, r5, 0
- bl DisplayItemMessageOnField
- adds r0, r5, 0
- bl sub_80B4470
- b _080B3D24
- .align 2, 0
-_080B3C7C: .4byte gBGTilemapBuffers + 0x800
-_080B3C80: .4byte gSaveBlock1
-_080B3C84: .4byte gUnknown_020386A0
-_080B3C88: .4byte gUnknown_03000708
-_080B3C8C: .4byte gTasks
-_080B3C90: .4byte gOtherText_HereYouGo
-_080B3C94: .4byte sub_80B3B80
-_080B3C98: .4byte 0x0000c3e1
-_080B3C9C:
- ldr r1, _080B3CA4 @ =gOtherText_NoRoomFor
- ldr r2, _080B3CA8 @ =sub_80B3BD0
- b _080B3CD8
- .align 2, 0
-_080B3CA4: .4byte gOtherText_NoRoomFor
-_080B3CA8: .4byte sub_80B3BD0
-_080B3CAC:
- ldrb r0, [r4, 0xB]
- ldrb r1, [r4, 0x9]
- adds r0, r1
- ldr r1, [r4, 0x4]
- lsls r0, 1
- adds r0, r1
- ldrb r0, [r0]
- bl IsThereStorageSpaceForDecoration
- lsls r0, 24
- cmp r0, 0
- beq _080B3CF0
- ldrb r0, [r4, 0xC]
- cmp r0, 0x1
- bne _080B3CD4
- ldr r1, _080B3CD0 @ =gOtherText_HereYouGo2
- b _080B3CD6
- .align 2, 0
-_080B3CD0: .4byte gOtherText_HereYouGo2
-_080B3CD4:
- ldr r1, _080B3CE4 @ =gOtherText_HereYouGo3
-_080B3CD6:
- ldr r2, _080B3CE8 @ =sub_80B3B80
-_080B3CD8:
- ldr r3, _080B3CEC @ =0x0000c3e1
- adds r0, r5, 0
- bl DisplayItemMessageOnField
- b _080B3D24
- .align 2, 0
-_080B3CE4: .4byte gOtherText_HereYouGo3
-_080B3CE8: .4byte sub_80B3B80
-_080B3CEC: .4byte 0x0000c3e1
-_080B3CF0:
- ldr r4, _080B3D08 @ =gStringVar4
- ldr r1, _080B3D0C @ =gOtherText_SpaceForIsFull
- adds r0, r4, 0
- bl StringExpandPlaceholders
- ldr r2, _080B3D10 @ =sub_80B3BD0
- ldr r3, _080B3D14 @ =0x0000c3e1
- adds r0, r5, 0
- adds r1, r4, 0
- bl DisplayItemMessageOnField
- b _080B3D24
- .align 2, 0
-_080B3D08: .4byte gStringVar4
-_080B3D0C: .4byte gOtherText_SpaceForIsFull
-_080B3D10: .4byte sub_80B3BD0
-_080B3D14: .4byte 0x0000c3e1
-_080B3D18:
- ldr r1, _080B3D2C @ =gOtherText_NotEnoughMoney
- ldr r2, _080B3D30 @ =sub_80B3BD0
- ldr r3, _080B3D34 @ =0x0000c3e1
- adds r0, r5, 0
- bl DisplayItemMessageOnField
-_080B3D24:
- add sp, 0x8
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080B3D2C: .4byte gOtherText_NotEnoughMoney
-_080B3D30: .4byte sub_80B3BD0
-_080B3D34: .4byte 0x0000c3e1
- thumb_func_end sub_80B3BF4
-
- thumb_func_start sub_80B3D38
-sub_80B3D38: @ 80B3D38
- push {r4,lr}
- sub sp, 0x8
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0x7
- movs r1, 0x8
- movs r2, 0x1
- bl DisplayYesNoMenu
- ldr r0, _080B3D70 @ =gBGTilemapBuffers + 0x800
- movs r1, 0x4
- str r1, [sp]
- ldr r1, _080B3D74 @ =0x0000c3e1
- str r1, [sp, 0x4]
- movs r1, 0x8
- movs r2, 0x9
- movs r3, 0x4
- bl sub_80A3FA0
- ldr r1, _080B3D78 @ =gUnknown_083CC708
- adds r0, r4, 0
- bl DoYesNoFuncWithChoice
- add sp, 0x8
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080B3D70: .4byte gBGTilemapBuffers + 0x800
-_080B3D74: .4byte 0x0000c3e1
-_080B3D78: .4byte gUnknown_083CC708
- thumb_func_end sub_80B3D38
-
- thumb_func_start sub_80B3D7C
-sub_80B3D7C: @ 80B3D7C
- push {r4,lr}
- sub sp, 0x8
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r0, _080B3DC0 @ =gUnknown_03000708
- ldrb r1, [r0, 0x9]
- adds r0, r1, 0
- movs r2, 0
- bl sub_80B39D0
- movs r0, 0x7
- movs r1, 0x8
- movs r2, 0xD
- movs r3, 0xD
- bl MenuZeroFillWindowRect
- ldr r0, _080B3DC4 @ =gBGTilemapBuffers + 0x800
- movs r1, 0x4
- str r1, [sp]
- movs r1, 0
- str r1, [sp, 0x4]
- movs r1, 0x8
- movs r2, 0x9
- movs r3, 0x4
- bl sub_80A3FA0
- adds r0, r4, 0
- bl sub_80B4378
- add sp, 0x8
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080B3DC0: .4byte gUnknown_03000708
-_080B3DC4: .4byte gBGTilemapBuffers + 0x800
- thumb_func_end sub_80B3D7C
-
- thumb_func_start sub_80B3DC8
-sub_80B3DC8: @ 80B3DC8
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- sub sp, 0x8
- lsls r0, 24
- lsrs r6, r0, 24
- adds r4, r6, 0
- ldr r7, _080B3EA8 @ =gUnknown_03000708
- ldrb r1, [r7, 0xD]
- adds r0, r6, 0
- bl sub_80A52C4
- lsls r0, 24
- lsrs r0, 24
- cmp r0, 0x1
- bne _080B3DEE
- adds r0, r6, 0
- bl sub_80B37F8
-_080B3DEE:
- ldr r0, _080B3EAC @ =gMain
- ldrh r1, [r0, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- beq _080B3ED8
- ldr r0, _080B3EB0 @ =gUnknown_020386A0
- mov r8, r0
- ldrb r0, [r7, 0xB]
- ldrb r1, [r7, 0x9]
- adds r0, r1
- ldr r1, [r7, 0x4]
- lsls r0, 1
- adds r0, r1
- ldrh r0, [r0]
- bl ItemId_GetPrice
- adds r4, r0, 0
- movs r0, 0x1
- bl GetPriceReduction
- lsls r4, 16
- lsrs r4, 16
- lsls r0, 24
- lsrs r0, 24
- asrs r4, r0
- ldr r0, _080B3EB4 @ =gTasks
- lsls r5, r6, 2
- adds r5, r6
- lsls r5, 3
- adds r5, r0
- movs r1, 0xA
- ldrsh r0, [r5, r1]
- muls r0, r4
- mov r2, r8
- str r0, [r2]
- movs r0, 0
- movs r1, 0xA
- movs r2, 0xD
- movs r3, 0xD
- bl MenuZeroFillWindowRect
- ldr r0, _080B3EB8 @ =gBGTilemapBuffers + 0x800
- movs r1, 0x2
- str r1, [sp]
- movs r1, 0
- str r1, [sp, 0x4]
- movs r1, 0x1
- movs r2, 0xB
- movs r3, 0xC
- bl sub_80A3FA0
- bl sub_80B379C
- bl sub_80B3420
- ldrb r0, [r7, 0xB]
- ldrb r1, [r7, 0x9]
- adds r0, r1
- ldr r1, [r7, 0x4]
- lsls r0, 1
- adds r0, r1
- ldrh r0, [r0]
- ldr r1, _080B3EBC @ =gStringVar1
- bl CopyItemName
- ldr r0, _080B3EC0 @ =gStringVar2
- movs r2, 0xA
- ldrsh r1, [r5, r2]
- movs r2, 0
- movs r3, 0x2
- bl ConvertIntToDecimalStringN
- ldr r0, _080B3EC4 @ =gStringVar3
- mov r2, r8
- ldr r1, [r2]
- movs r2, 0
- movs r3, 0x8
- bl ConvertIntToDecimalStringN
- ldr r4, _080B3EC8 @ =gStringVar4
- ldr r1, _080B3ECC @ =gOtherText_ThatWillBe
- adds r0, r4, 0
- bl StringExpandPlaceholders
- ldr r2, _080B3ED0 @ =sub_80B3D38
- ldr r3, _080B3ED4 @ =0x0000c3e1
- adds r0, r6, 0
- adds r1, r4, 0
- bl DisplayItemMessageOnField
- b _080B3EF0
- .align 2, 0
-_080B3EA8: .4byte gUnknown_03000708
-_080B3EAC: .4byte gMain
-_080B3EB0: .4byte gUnknown_020386A0
-_080B3EB4: .4byte gTasks
-_080B3EB8: .4byte gBGTilemapBuffers + 0x800
-_080B3EBC: .4byte gStringVar1
-_080B3EC0: .4byte gStringVar2
-_080B3EC4: .4byte gStringVar3
-_080B3EC8: .4byte gStringVar4
-_080B3ECC: .4byte gOtherText_ThatWillBe
-_080B3ED0: .4byte sub_80B3D38
-_080B3ED4: .4byte 0x0000c3e1
-_080B3ED8:
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _080B3EF0
- ldrb r1, [r7, 0x9]
- adds r0, r1, 0
- movs r2, 0
- bl sub_80B39D0
- adds r0, r4, 0
- bl sub_80B4378
-_080B3EF0:
- add sp, 0x8
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_80B3DC8
-
- thumb_func_start sub_80B3EFC
-sub_80B3EFC: @ 80B3EFC
- push {r4-r6,lr}
- lsls r0, 24
- lsrs r5, r0, 24
- ldr r1, _080B3F78 @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r1
- movs r1, 0x1
- strh r1, [r0, 0xA]
- movs r0, 0
- movs r1, 0xA
- movs r2, 0xD
- movs r3, 0xD
- bl MenuDrawTextWindow
- adds r0, r5, 0
- bl sub_80B37F8
- ldr r6, _080B3F7C @ =gUnknown_03000708
- ldrb r0, [r6, 0xB]
- ldrb r1, [r6, 0x9]
- adds r0, r1
- ldr r1, [r6, 0x4]
- lsls r0, 1
- adds r0, r1
- ldrh r0, [r0]
- bl ItemId_GetPrice
- adds r4, r0, 0
- movs r0, 0x1
- bl GetPriceReduction
- ldr r1, _080B3F80 @ =gSaveBlock1
- movs r2, 0x92
- lsls r2, 3
- adds r1, r2
- lsls r4, 16
- lsrs r4, 16
- lsls r0, 24
- lsrs r0, 24
- asrs r4, r0
- ldr r0, [r1]
- adds r1, r4, 0
- bl __udivsi3
- lsls r0, 16
- lsrs r0, 16
- cmp r0, 0x63
- bls _080B3F62
- movs r0, 0x63
-_080B3F62:
- strb r0, [r6, 0xD]
- ldr r0, _080B3F78 @ =gTasks
- lsls r1, r5, 2
- adds r1, r5
- lsls r1, 3
- adds r1, r0
- ldr r0, _080B3F84 @ =sub_80B3DC8
- str r0, [r1]
- pop {r4-r6}
- pop {r0}
- bx r0
- .align 2, 0
-_080B3F78: .4byte gTasks
-_080B3F7C: .4byte gUnknown_03000708
-_080B3F80: .4byte gSaveBlock1
-_080B3F84: .4byte sub_80B3DC8
- thumb_func_end sub_80B3EFC
-
- thumb_func_start sub_80B3F88
-sub_80B3F88: @ 80B3F88
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- ldr r0, _080B4020 @ =gMenuWindow
- mov r8, r0
- ldr r1, [r0, 0x28]
- ldr r3, _080B4024 @ =0x000003de
- adds r1, r3
- adds r2, r1, 0
- adds r2, 0x80
- ldr r7, [r0, 0x24]
- mov r10, r7
- ldr r0, _080B4028 @ =0x000003ff
- mov r9, r0
- movs r6, 0xD
-_080B3FAC:
- adds r3, r2, 0
- subs r3, 0x40
- str r3, [sp]
- movs r7, 0x40
- negs r7, r7
- adds r7, r1
- mov r12, r7
- adds r3, r2, 0
- adds r4, r1, 0
- movs r5, 0xE
-_080B3FC0:
- ldrh r2, [r4]
- mov r1, r9
- ands r1, r2
- mov r7, r8
- ldrh r0, [r7, 0x1A]
- adds r0, 0x1
- cmp r1, r0
- ble _080B3FD4
- adds r0, r2, 0
- adds r0, 0x3C
-_080B3FD4:
- strh r0, [r3]
- adds r3, 0x2
- adds r4, 0x2
- subs r5, 0x1
- cmp r5, 0
- bge _080B3FC0
- ldr r2, [sp]
- mov r1, r12
- subs r6, 0x1
- cmp r6, 0
- bge _080B3FAC
- ldr r1, _080B402C @ =0x00003a20
- add r1, r10
- movs r0, 0xF0
- lsls r0, 3
- adds r2, r1, r0
- ldr r3, _080B4030 @ =0x040000d4
- ldr r5, _080B4034 @ =0x800000f0
- ldr r4, _080B4038 @ =0xfffffc40
- movs r6, 0xD
-_080B3FFC:
- str r1, [r3]
- str r2, [r3, 0x4]
- str r5, [r3, 0x8]
- ldr r0, [r3, 0x8]
- adds r2, r4
- adds r1, r4
- subs r6, 0x1
- cmp r6, 0
- bge _080B3FFC
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080B4020: .4byte gMenuWindow
-_080B4024: .4byte 0x000003de
-_080B4028: .4byte 0x000003ff
-_080B402C: .4byte 0x00003a20
-_080B4030: .4byte 0x040000d4
-_080B4034: .4byte 0x800000f0
-_080B4038: .4byte 0xfffffc40
- thumb_func_end sub_80B3F88
-
- thumb_func_start sub_80B403C
-sub_80B403C: @ 80B403C
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x4
- ldr r0, _080B40D8 @ =gMenuWindow
- mov r8, r0
- ldr r2, [r0, 0x28]
- adds r1, r2, 0
- adds r1, 0x9E
- adds r2, r1, 0
- adds r1, 0x80
- ldr r3, [r0, 0x24]
- mov r10, r3
- ldr r7, _080B40DC @ =0x000003ff
- mov r9, r7
- movs r6, 0xD
-_080B4060:
- adds r0, r2, 0
- adds r0, 0x40
- str r0, [sp]
- movs r3, 0x40
- adds r3, r1
- mov r12, r3
- adds r3, r2, 0
- adds r4, r1, 0
- movs r5, 0xE
-_080B4072:
- ldrh r2, [r4]
- mov r1, r9
- ands r1, r2
- mov r7, r8
- ldrh r0, [r7, 0x1A]
- adds r0, 0x1
- cmp r1, r0
- ble _080B4086
- adds r0, r2, 0
- subs r0, 0x3C
-_080B4086:
- strh r0, [r3]
- adds r3, 0x2
- adds r4, 0x2
- subs r5, 0x1
- cmp r5, 0
- bge _080B4072
- ldr r2, [sp]
- mov r1, r12
- subs r6, 0x1
- cmp r6, 0
- bge _080B4060
- movs r1, 0x96
- lsls r1, 4
- add r1, r10
- adds r2, r1, 0
- movs r0, 0xF0
- lsls r0, 3
- adds r1, r0
- ldr r3, _080B40E0 @ =0x040000d4
- ldr r5, _080B40E4 @ =0x800000f0
- movs r4, 0xF0
- lsls r4, 2
- movs r6, 0xD
-_080B40B4:
- str r1, [r3]
- str r2, [r3, 0x4]
- str r5, [r3, 0x8]
- ldr r0, [r3, 0x8]
- adds r2, r4
- adds r1, r4
- subs r6, 0x1
- cmp r6, 0
- bge _080B40B4
- add sp, 0x4
- pop {r3-r5}
- mov r8, r3
- mov r9, r4
- mov r10, r5
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080B40D8: .4byte gMenuWindow
-_080B40DC: .4byte 0x000003ff
-_080B40E0: .4byte 0x040000d4
-_080B40E4: .4byte 0x800000f0
- thumb_func_end sub_80B403C
-
- thumb_func_start sub_80B40E8
-sub_80B40E8: @ 80B40E8
- push {r4-r7,lr}
- mov r7, r8
- push {r7}
- lsls r0, 24
- lsrs r7, r0, 24
- mov r8, r7
- ldr r0, _080B4134 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- beq _080B4102
- b _080B436C
-_080B4102:
- ldr r2, _080B4138 @ =gMain
- ldrh r0, [r2, 0x30]
- movs r1, 0xF0
- ands r1, r0
- cmp r1, 0x40
- bne _080B414C
- ldr r4, _080B413C @ =gUnknown_03000708
- ldrb r0, [r4, 0x9]
- cmp r0, 0
- bne _080B4140
- ldrb r0, [r4, 0xB]
- cmp r0, 0
- bne _080B411E
- b _080B436C
-_080B411E:
- movs r0, 0x5
- bl PlaySE
- ldrb r0, [r4, 0xB]
- subs r0, 0x1
- strb r0, [r4, 0xB]
- bl sub_80B3F88
- movs r0, 0
- movs r1, 0
- b _080B417A
- .align 2, 0
-_080B4134: .4byte gPaletteFade
-_080B4138: .4byte gMain
-_080B413C: .4byte gUnknown_03000708
-_080B4140:
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x1
- negs r0, r0
- b _080B41A0
-_080B414C:
- cmp r1, 0x80
- bne _080B41AC
- ldr r4, _080B418C @ =gUnknown_03000708
- ldrb r0, [r4, 0x9]
- cmp r0, 0x7
- bne _080B4190
- ldrb r0, [r4, 0xB]
- ldrb r1, [r4, 0x9]
- adds r0, r1
- ldrb r1, [r4, 0x8]
- cmp r0, r1
- bne _080B4166
- b _080B436C
-_080B4166:
- movs r0, 0x5
- bl PlaySE
- ldrb r0, [r4, 0xB]
- adds r0, 0x1
- strb r0, [r4, 0xB]
- bl sub_80B403C
- movs r0, 0x7
- movs r1, 0x7
-_080B417A:
- movs r2, 0
- bl sub_80B39D0
- bl sub_80B3A70
- bl sub_80B32A4
- b _080B436C
- .align 2, 0
-_080B418C: .4byte gUnknown_03000708
-_080B4190:
- ldrb r2, [r4, 0x8]
- cmp r0, r2
- bne _080B4198
- b _080B436C
-_080B4198:
- movs r0, 0x5
- bl PlaySE
- movs r0, 0x1
-_080B41A0:
- bl MoveMenuCursor
- strb r0, [r4, 0x9]
- bl sub_80B3A70
- b _080B436C
-_080B41AC:
- ldrh r1, [r2, 0x2E]
- movs r0, 0x1
- ands r0, r1
- cmp r0, 0
- bne _080B41B8
- b _080B4358
-_080B41B8:
- movs r0, 0x5
- bl PlaySE
- ldr r6, _080B426C @ =gUnknown_03000708
- ldrb r0, [r6, 0xB]
- ldrb r1, [r6, 0x9]
- adds r0, r1
- ldrb r1, [r6, 0x8]
- cmp r0, r1
- bne _080B41CE
- b _080B4350
-_080B41CE:
- movs r0, 0
- bl PauseVerticalScrollIndicator
- movs r0, 0x1
- bl PauseVerticalScrollIndicator
- movs r0, 0x1
- movs r1, 0x1
- bl sub_80F979C
- ldrb r1, [r6, 0x9]
- adds r0, r1, 0
- movs r2, 0x1
- bl sub_80B39D0
- bl HandleDestroyMenuCursors
- movs r0, 0
- movs r1, 0xC
- movs r2, 0xD
- movs r3, 0x13
- bl MenuZeroFillWindowRect
- ldrb r0, [r6, 0xC]
- cmp r0, 0
- bne _080B428C
- ldr r5, _080B4270 @ =gUnknown_020386A0
- ldrb r0, [r6, 0xB]
- ldrb r1, [r6, 0x9]
- adds r0, r1
- ldr r1, [r6, 0x4]
- lsls r0, 1
- adds r0, r1
- ldrh r0, [r0]
- bl ItemId_GetPrice
- adds r4, r0, 0
- movs r0, 0x1
- bl GetPriceReduction
- lsls r4, 16
- lsrs r4, 16
- lsls r0, 24
- lsrs r0, 24
- asrs r4, r0
- str r4, [r5]
- ldr r0, _080B4274 @ =gSaveBlock1
- movs r2, 0x92
- lsls r2, 3
- adds r0, r2
- ldr r0, [r0]
- adds r1, r4, 0
- bl IsEnoughMoney
- lsls r0, 24
- cmp r0, 0
- beq _080B42BA
- ldrb r0, [r6, 0xB]
- ldrb r1, [r6, 0x9]
- adds r0, r1
- ldr r1, [r6, 0x4]
- lsls r0, 1
- adds r0, r1
- ldrh r0, [r0]
- ldr r1, _080B4278 @ =gStringVar1
- bl CopyItemName
- ldr r4, _080B427C @ =gStringVar4
- ldr r1, _080B4280 @ =gOtherText_HowManyYouWant
- adds r0, r4, 0
- bl StringExpandPlaceholders
- ldr r2, _080B4284 @ =sub_80B3EFC
- ldr r3, _080B4288 @ =0x0000c3e1
- adds r0, r7, 0
- adds r1, r4, 0
- bl DisplayItemMessageOnField
- b _080B436C
- .align 2, 0
-_080B426C: .4byte gUnknown_03000708
-_080B4270: .4byte gUnknown_020386A0
-_080B4274: .4byte gSaveBlock1
-_080B4278: .4byte gStringVar1
-_080B427C: .4byte gStringVar4
-_080B4280: .4byte gOtherText_HowManyYouWant
-_080B4284: .4byte sub_80B3EFC
-_080B4288: .4byte 0x0000c3e1
-_080B428C:
- ldr r5, _080B42C8 @ =gUnknown_020386A0
- ldr r4, _080B42CC @ =gDecorations
- ldrb r0, [r6, 0xB]
- ldrb r1, [r6, 0x9]
- adds r0, r1
- ldr r1, [r6, 0x4]
- lsls r0, 1
- adds r0, r1
- ldrh r0, [r0]
- lsls r0, 5
- adds r0, r4
- ldrh r1, [r0, 0x14]
- str r1, [r5]
- ldr r0, _080B42D0 @ =gSaveBlock1
- movs r2, 0x92
- lsls r2, 3
- adds r0, r2
- ldr r0, [r0]
- bl IsEnoughMoney
- lsls r0, 24
- cmp r0, 0
- bne _080B42E0
-_080B42BA:
- ldr r1, _080B42D4 @ =gOtherText_NotEnoughMoney
- ldr r2, _080B42D8 @ =sub_80B3BD0
- ldr r3, _080B42DC @ =0x0000c3e1
- adds r0, r7, 0
- bl DisplayItemMessageOnField
- b _080B436C
- .align 2, 0
-_080B42C8: .4byte gUnknown_020386A0
-_080B42CC: .4byte gDecorations
-_080B42D0: .4byte gSaveBlock1
-_080B42D4: .4byte gOtherText_NotEnoughMoney
-_080B42D8: .4byte sub_80B3BD0
-_080B42DC: .4byte 0x0000c3e1
-_080B42E0:
- ldr r0, _080B4318 @ =gStringVar1
- ldrb r1, [r6, 0xB]
- ldrb r2, [r6, 0x9]
- adds r1, r2
- ldr r2, [r6, 0x4]
- lsls r1, 1
- adds r1, r2
- ldrh r1, [r1]
- lsls r1, 5
- adds r2, r4, 0x1
- adds r1, r2
- bl StringCopy
- ldr r0, _080B431C @ =gStringVar2
- ldr r1, [r5]
- movs r2, 0
- movs r3, 0x8
- bl ConvertIntToDecimalStringN
- ldrb r0, [r6, 0xC]
- cmp r0, 0x1
- bne _080B4328
- ldr r0, _080B4320 @ =gStringVar4
- ldr r1, _080B4324 @ =gOtherText_ThatWillBe2
- bl StringExpandPlaceholders
- b _080B4330
- .align 2, 0
-_080B4318: .4byte gStringVar1
-_080B431C: .4byte gStringVar2
-_080B4320: .4byte gStringVar4
-_080B4324: .4byte gOtherText_ThatWillBe2
-_080B4328:
- ldr r0, _080B4340 @ =gStringVar4
- ldr r1, _080B4344 @ =gOtherText_ThatWillBe3
- bl StringExpandPlaceholders
-_080B4330:
- ldr r1, _080B4340 @ =gStringVar4
- ldr r2, _080B4348 @ =sub_80B3D38
- ldr r3, _080B434C @ =0x0000c3e1
- mov r0, r8
- bl DisplayItemMessageOnField
- b _080B436C
- .align 2, 0
-_080B4340: .4byte gStringVar4
-_080B4344: .4byte gOtherText_ThatWillBe3
-_080B4348: .4byte sub_80B3D38
-_080B434C: .4byte 0x0000c3e1
-_080B4350:
- adds r0, r7, 0
- bl sub_80B43F0
- b _080B436C
-_080B4358:
- movs r0, 0x2
- ands r0, r1
- cmp r0, 0
- beq _080B436C
- movs r0, 0x5
- bl PlaySE
- mov r0, r8
- bl sub_80B43F0
-_080B436C:
- pop {r3}
- mov r8, r3
- pop {r4-r7}
- pop {r0}
- bx r0
- thumb_func_end sub_80B40E8
-
- thumb_func_start sub_80B4378
-sub_80B4378: @ 80B4378
- push {r4,lr}
- sub sp, 0x8
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- movs r0, 0
- movs r1, 0xE
- movs r2, 0x1D
- movs r3, 0x13
- bl MenuZeroFillWindowRect
- movs r0, 0
- movs r1, 0xA
- movs r2, 0xD
- movs r3, 0xD
- bl MenuZeroFillWindowRect
- ldr r0, _080B43E4 @ =gBGTilemapBuffers + 0x800
- movs r1, 0x2
- str r1, [sp]
- movs r1, 0
- str r1, [sp, 0x4]
- movs r1, 0x1
- movs r2, 0xB
- movs r3, 0xC
- bl sub_80A3FA0
- bl sub_80B3420
- movs r0, 0x6
- movs r1, 0x7
- bl sub_80B3764
- bl sub_80B37EC
- movs r0, 0
- bl StartVerticalScrollIndicators
- movs r0, 0x1
- bl StartVerticalScrollIndicators
- bl sub_80B32A4
- ldr r1, _080B43E8 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _080B43EC @ =sub_80B40E8
- str r1, [r0]
- add sp, 0x8
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080B43E4: .4byte gBGTilemapBuffers + 0x800
-_080B43E8: .4byte gTasks
-_080B43EC: .4byte sub_80B40E8
- thumb_func_end sub_80B4378
-
- thumb_func_start sub_80B43F0
-sub_80B43F0: @ 80B43F0
- push {r4,lr}
- sub sp, 0x4
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- ldr r1, _080B4428 @ =gFieldCallback
- ldr r0, _080B442C @ =sub_80B3050
- str r0, [r1]
- movs r0, 0x1
- negs r0, r0
- movs r1, 0
- str r1, [sp]
- movs r2, 0
- movs r3, 0x10
- bl BeginNormalPaletteFade
- ldr r1, _080B4430 @ =gTasks
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- adds r0, r1
- ldr r1, _080B4434 @ =Task_ExitBuyMenu
- str r1, [r0]
- add sp, 0x4
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080B4428: .4byte gFieldCallback
-_080B442C: .4byte sub_80B3050
-_080B4430: .4byte gTasks
-_080B4434: .4byte Task_ExitBuyMenu
- thumb_func_end sub_80B43F0
-
- thumb_func_start Task_ExitBuyMenu
-Task_ExitBuyMenu: @ 80B4438
- push {r4,lr}
- lsls r0, 24
- lsrs r4, r0, 24
- ldr r0, _080B4468 @ =gPaletteFade
- ldrb r1, [r0, 0x7]
- movs r0, 0x80
- ands r0, r1
- cmp r0, 0
- bne _080B4462
- movs r0, 0
- movs r1, 0
- bl RemoveMoneyLabelObject
- bl BuyMenuFreeMemory
- ldr r0, _080B446C @ =c2_exit_to_overworld_2_switch
- bl SetMainCallback2
- adds r0, r4, 0
- bl DestroyTask
-_080B4462:
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080B4468: .4byte gPaletteFade
-_080B446C: .4byte c2_exit_to_overworld_2_switch
- thumb_func_end Task_ExitBuyMenu
-
- thumb_func_start sub_80B4470
-sub_80B4470: @ 80B4470
- push {r4-r7,lr}
- mov r7, r9
- mov r6, r8
- push {r6,r7}
- lsls r0, 24
- lsrs r5, r0, 24
- movs r2, 0
- ldr r0, _080B44C8 @ =gUnknown_02038724
- mov r12, r0
- ldr r6, _080B44CC @ =gUnknown_03000708
- mov r8, r12
- adds r4, r6, 0
- ldr r1, _080B44D0 @ =gTasks
- mov r9, r1
- lsls r0, r5, 2
- adds r0, r5
- lsls r7, r0, 3
-_080B4492:
- lsls r0, r2, 2
- mov r1, r8
- adds r3, r0, r1
- ldrb r0, [r4, 0xB]
- ldrb r1, [r4, 0x9]
- adds r0, r1
- ldr r1, [r4, 0x4]
- lsls r0, 1
- adds r0, r1
- ldrh r1, [r3]
- ldrh r0, [r0]
- cmp r1, r0
- bne _080B44DC
- ldrh r0, [r3, 0x2]
- cmp r0, 0
- beq _080B44DC
- adds r2, r0, 0
- mov r4, r9
- adds r1, r7, r4
- movs r4, 0xA
- ldrsh r0, [r1, r4]
- adds r0, r2, r0
- cmp r0, 0xFF
- ble _080B44D4
- movs r0, 0xFF
- strh r0, [r3, 0x2]
- b _080B451E
- .align 2, 0
-_080B44C8: .4byte gUnknown_02038724
-_080B44CC: .4byte gUnknown_03000708
-_080B44D0: .4byte gTasks
-_080B44D4:
- ldrh r0, [r1, 0xA]
- adds r0, r2, r0
- strh r0, [r3, 0x2]
- b _080B451E
-_080B44DC:
- adds r0, r2, 0x1
- lsls r0, 16
- lsrs r2, r0, 16
- cmp r2, 0x2
- bls _080B4492
- ldr r3, _080B452C @ =gUnknown_02038730
- ldrb r0, [r3]
- cmp r0, 0x2
- bhi _080B451E
- adds r2, r0, 0
- lsls r2, 2
- add r2, r12
- ldrb r0, [r6, 0xB]
- ldrb r1, [r6, 0x9]
- adds r0, r1
- ldr r1, [r6, 0x4]
- lsls r0, 1
- adds r0, r1
- ldrh r0, [r0]
- strh r0, [r2]
- ldrb r1, [r3]
- lsls r1, 2
- add r1, r12
- ldr r2, _080B4530 @ =gTasks
- lsls r0, r5, 2
- adds r0, r5
- lsls r0, 3
- adds r0, r2
- ldrh r0, [r0, 0xA]
- strh r0, [r1, 0x2]
- ldrb r0, [r3]
- adds r0, 0x1
- strb r0, [r3]
-_080B451E:
- pop {r3,r4}
- mov r8, r3
- mov r9, r4
- pop {r4-r7}
- pop {r0}
- bx r0
- .align 2, 0
-_080B452C: .4byte gUnknown_02038730
-_080B4530: .4byte gTasks
- thumb_func_end sub_80B4470
-
- thumb_func_start ClearItemPurchases
-ClearItemPurchases: @ 80B4534
- push {lr}
- ldr r0, _080B4548 @ =gUnknown_02038730
- movs r1, 0
- strb r1, [r0]
- ldr r0, _080B454C @ =gUnknown_02038724
- movs r1, 0x3
- bl ClearItemSlots
- pop {r0}
- bx r0
- .align 2, 0
-_080B4548: .4byte gUnknown_02038730
-_080B454C: .4byte gUnknown_02038724
- thumb_func_end ClearItemPurchases
-
- thumb_func_start CreatePokemartMenu
-CreatePokemartMenu: @ 80B4550
- push {r4,lr}
- adds r4, r0, 0
- movs r0, 0
- bl CreateShopMenu
- adds r0, r4, 0
- bl SetShopItemsForSale
- bl ClearItemPurchases
- ldr r0, _080B4570 @ =EnableBothScriptContexts
- bl SetShopMenuCallback
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080B4570: .4byte EnableBothScriptContexts
- thumb_func_end CreatePokemartMenu
-
- thumb_func_start CreateDecorationShop1Menu
-CreateDecorationShop1Menu: @ 80B4574
- push {r4,lr}
- adds r4, r0, 0
- movs r0, 0x1
- bl CreateShopMenu
- adds r0, r4, 0
- bl SetShopItemsForSale
- ldr r0, _080B4590 @ =EnableBothScriptContexts
- bl SetShopMenuCallback
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080B4590: .4byte EnableBothScriptContexts
- thumb_func_end CreateDecorationShop1Menu
-
- thumb_func_start CreateDecorationShop2Menu
-CreateDecorationShop2Menu: @ 80B4594
- push {r4,lr}
- adds r4, r0, 0
- movs r0, 0x2
- bl CreateShopMenu
- adds r0, r4, 0
- bl SetShopItemsForSale
- ldr r0, _080B45B0 @ =EnableBothScriptContexts
- bl SetShopMenuCallback
- pop {r4}
- pop {r0}
- bx r0
- .align 2, 0
-_080B45B0: .4byte EnableBothScriptContexts
- thumb_func_end CreateDecorationShop2Menu
-
- thumb_func_start sub_80B45B4
-sub_80B45B4: @ 80B45B4
- push {r4-r7,lr}
- mov r7, r10
- mov r6, r9
- mov r5, r8
- push {r5-r7}
- sub sp, 0x10
- mov r9, r1
- lsls r0, 24
- lsrs r0, 24
- lsls r2, 16
- lsrs r2, 16
- mov r10, r2
- ldr r2, _080B4648 @ =gTasks
- lsls r1, r0, 2
- adds r1, r0
- lsls r1, 3
- adds r1, r2
- ldrh r0, [r1, 0x10]
- subs r0, 0x1
- lsls r0, 16
- lsrs r5, r0, 16
- ldrh r0, [r1, 0x12]
- subs r0, 0x1
- lsls r0, 16
- lsrs r3, r0, 16
- ldrh r4, [r1, 0xA]
- movs r2, 0xC
- ldrsh r0, [r1, r2]
- cmp r0, 0
- bne _080B4678
- movs r2, 0
- lsls r5, 16
- str r5, [sp, 0xC]
- lsls r0, r3, 16
- lsls r1, r4, 16
- asrs r0, 16
- str r0, [sp]
- asrs r1, 16
- str r1, [sp, 0x4]
- lsls r0, r1, 1
- mov r1, r9
- adds r7, r0, r1
-_080B4608:
- movs r4, 0
- lsls r2, 16
- mov r8, r2
- asrs r0, r2, 16
- ldr r2, [sp]
- adds r6, r2, r0
-_080B4614:
- ldr r0, [sp, 0xC]
- asrs r1, r0, 16
- lsls r4, 16
- asrs r0, r4, 16
- adds r5, r1, r0
- adds r0, r5, 0
- adds r1, r6, 0
- bl MapGridGetMetatileIdAt
- movs r2, 0
- ldrsh r1, [r7, r2]
- lsls r0, 16
- asrs r0, 16
- cmp r1, r0
- bne _080B465C
- ldr r0, [sp, 0x4]
- cmp r0, 0x2
- beq _080B464C
- ldrh r0, [r7, 0x2]
- mov r2, r10
- orrs r2, r0
- adds r0, r5, 0
- adds r1, r6, 0
- bl MapGridSetMetatileIdAt
- b _080B465C
- .align 2, 0
-_080B4648: .4byte gTasks
-_080B464C:
- mov r1, r9
- ldrh r0, [r1]
- mov r2, r10
- orrs r2, r0
- adds r0, r5, 0
- adds r1, r6, 0
- bl MapGridSetMetatileIdAt
-_080B465C:
- movs r2, 0x80
- lsls r2, 9
- adds r0, r4, r2
- lsrs r4, r0, 16
- asrs r0, 16
- cmp r0, 0x2
- ble _080B4614
- adds r0, r2, 0
- add r0, r8
- lsrs r2, r0, 16
- asrs r0, 16
- cmp r0, 0x2
- ble _080B4608
- b _080B4700
-_080B4678:
- movs r2, 0
- lsls r5, 16
- str r5, [sp, 0xC]
- lsls r0, r3, 16
- lsls r1, r4, 16
- asrs r0, 16
- str r0, [sp, 0x8]
- asrs r7, r1, 16
-_080B4688:
- movs r4, 0
- lsls r2, 16
- mov r8, r2
- asrs r0, r2, 16
- ldr r1, [sp, 0x8]
- adds r6, r1, r0
-_080B4694:
- ldr r2, [sp, 0xC]
- asrs r1, r2, 16
- lsls r4, 16
- asrs r0, r4, 16
- adds r5, r1, r0
- adds r0, r5, 0
- adds r1, r6, 0
- bl MapGridGetMetatileIdAt
- movs r1, 0x2
- subs r1, r7
- lsls r1, 1
- add r1, r9
- movs r2, 0
- ldrsh r1, [r1, r2]
- lsls r0, 16
- asrs r0, 16
- cmp r1, r0
- bne _080B46E6
- cmp r7, 0x2
- beq _080B46D6
- movs r0, 0x1
- subs r0, r7
- lsls r0, 1
- add r0, r9
- ldrh r0, [r0]
- mov r2, r10
- orrs r2, r0
- adds r0, r5, 0
- adds r1, r6, 0
- bl MapGridSetMetatileIdAt
- b _080B46E6
-_080B46D6:
- mov r1, r9
- ldrh r0, [r1, 0x4]
- mov r2, r10
- orrs r2, r0
- adds r0, r5, 0
- adds r1, r6, 0
- bl MapGridSetMetatileIdAt
-_080B46E6:
- movs r2, 0x80
- lsls r2, 9
- adds r0, r4, r2
- lsrs r4, r0, 16
- asrs r0, 16
- cmp r0, 0x2
- ble _080B4694
- adds r0, r2, 0
- add r0, r8
- lsrs r2, r0, 16
- asrs r0, 16
- cmp r0, 0x2
- ble _080B4688
-_080B4700:
- 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_80B45B4
-
- thumb_func_start sub_80B4710
-sub_80B4710: @ 80B4710
- push {r4,r5,lr}
- lsls r0, 24
- lsrs r3, r0, 24
- lsls r0, r3, 2
- adds r0, r3
- lsls r0, 3
- ldr r1, _080B4738 @ =gTasks + 0x8
- adds r4, r0, r1
- movs r0, 0x1
- strh r0, [r4, 0x6]
- movs r1, 0
- ldrsh r0, [r4, r1]
- cmp r0, 0x6
- bhi _080B47AA
- lsls r0, 2
- ldr r1, _080B473C @ =_080B4740
- adds r0, r1
- ldr r0, [r0]
- mov pc, r0
- .align 2, 0
-_080B4738: .4byte gTasks + 0x8
-_080B473C: .4byte _080B4740
- .align 2, 0
-_080B4740:
- .4byte _080B475C
- .4byte _080B4764
- .4byte _080B476C
- .4byte _080B4774
- .4byte _080B477C
- .4byte _080B4790
- .4byte _080B47A0
-_080B475C:
- ldr r1, _080B4760 @ =gUnknown_083CC714
- b _080B4792
- .align 2, 0
-_080B4760: .4byte gUnknown_083CC714
-_080B4764:
- ldr r1, _080B4768 @ =gUnknown_083CC71A
- b _080B4792
- .align 2, 0
-_080B4768: .4byte gUnknown_083CC71A
-_080B476C:
- ldr r1, _080B4770 @ =gUnknown_083CC720
- b _080B477E
- .align 2, 0
-_080B4770: .4byte gUnknown_083CC720
-_080B4774:
- ldr r1, _080B4778 @ =gUnknown_083CC726
- b _080B4792
- .align 2, 0
-_080B4778: .4byte gUnknown_083CC726
-_080B477C:
- ldr r1, _080B478C @ =gUnknown_083CC72C
-_080B477E:
- movs r2, 0xC0
- lsls r2, 4
- adds r0, r3, 0
- bl sub_80B45B4
- b _080B47AA
- .align 2, 0
-_080B478C: .4byte gUnknown_083CC72C
-_080B4790:
- ldr r1, _080B479C @ =gUnknown_083CC732
-_080B4792:
- adds r0, r3, 0
- movs r2, 0
- bl sub_80B45B4
- b _080B47AA
- .align 2, 0
-_080B479C: .4byte gUnknown_083CC732
-_080B47A0:
- ldr r1, _080B47D4 @ =gUnknown_083CC738
- adds r0, r3, 0
- movs r2, 0
- bl sub_80B45B4
-_080B47AA:
- ldrh r0, [r4]
- adds r0, 0x1
- movs r1, 0x7
- ands r0, r1
- strh r0, [r4]
- adds r5, r0, 0
- cmp r5, 0
- bne _080B47CE
- bl DrawWholeMapView
- movs r1, 0x2
- ldrsh r0, [r4, r1]
- adds r0, 0x1
- movs r1, 0x3
- bl __modsi3
- strh r0, [r4, 0x2]
- strh r5, [r4, 0x6]
-_080B47CE:
- pop {r4,r5}
- pop {r0}
- bx r0
- .align 2, 0
-_080B47D4: .4byte gUnknown_083CC738
- thumb_func_end sub_80B4710
-
- thumb_func_start sub_80B47D8
-sub_80B47D8: @ 80B47D8
- push {r4-r7,lr}
- adds r5, r0, 0
- lsls r5, 16
- lsrs r5, 16
- ldr r6, _080B481C @ =sub_80B4710
- adds r0, r6, 0
- movs r1, 0
- bl CreateTask
- adds r4, r0, 0
- lsls r4, 24
- lsrs r4, 24
- lsls r0, r4, 2
- adds r0, r4
- lsls r0, 3
- ldr r1, _080B4820 @ =gTasks + 0x8
- adds r7, r0, r1
- adds r0, r7, 0
- adds r0, 0x8
- adds r1, r7, 0
- adds r1, 0xA
- bl PlayerGetDestCoords
- movs r0, 0
- strh r0, [r7]
- strh r0, [r7, 0x2]
- strh r5, [r7, 0x4]
- adds r0, r4, 0
- bl _call_via_r6
- adds r0, r4, 0
- pop {r4-r7}
- pop {r1}
- bx r1
- .align 2, 0
-_080B481C: .4byte sub_80B4710
-_080B4820: .4byte gTasks + 0x8
- thumb_func_end sub_80B47D8
-
- thumb_func_start sub_80B4824
-sub_80B4824: @ 80B4824
- push {lr}
- lsls r0, 24
- lsrs r0, 24
- bl sub_80B47D8
- ldr r1, _080B4838 @ =gUnknown_02038731
- strb r0, [r1]
- pop {r0}
- bx r0
- .align 2, 0
-_080B4838: .4byte gUnknown_02038731
- thumb_func_end sub_80B4824
-
- thumb_func_start sub_80B483C
-sub_80B483C: @ 80B483C
- push {lr}
- ldr r0, _080B484C @ =gUnknown_02038731
- ldrb r0, [r0]
- bl DestroyTask
- pop {r0}
- bx r0
- .align 2, 0
-_080B484C: .4byte gUnknown_02038731
- thumb_func_end sub_80B483C
-
- thumb_func_start sub_80B4850
-sub_80B4850: @ 80B4850
- push {lr}
- ldr r2, _080B4874 @ =gTasks
- ldr r0, _080B4878 @ =gUnknown_02038731
- ldrb r1, [r0]
- lsls r0, r1, 2
- adds r0, r1
- lsls r0, 3
- adds r1, r0, r2
- movs r2, 0xE
- ldrsh r0, [r1, r2]
- cmp r0, 0
- bne _080B487C
- movs r2, 0xA
- ldrsh r0, [r1, r2]
- cmp r0, 0x2
- bne _080B487C
- movs r0, 0
- b _080B487E
- .align 2, 0
-_080B4874: .4byte gTasks
-_080B4878: .4byte gUnknown_02038731
-_080B487C:
- movs r0, 0x1
-_080B487E:
- pop {r1}
- bx r1
- thumb_func_end sub_80B4850
-
- .align 2, 0 @ Don't pad with nop.
diff --git a/asm/trade.s b/asm/trade.s
index 32c5c60e6..fb5e8f199 100644
--- a/asm/trade.s
+++ b/asm/trade.s
@@ -10512,7 +10512,7 @@ _0804D4CC:
ldrb r0, [r0]
movs r1, 0
bl sub_804BA94
- ldr r1, _0804D514 @ =gUnknown_03005E94
+ ldr r1, _0804D514 @ =gCB2_AfterEvolution
ldr r0, _0804D518 @ =sub_804BBCC
str r0, [r1]
ldr r7, _0804D51C @ =gUnknown_020297D8
@@ -10541,7 +10541,7 @@ _0804D4CC:
b _0804D538
.align 2, 0
_0804D510: .4byte gSpecialVar_0x8005
-_0804D514: .4byte gUnknown_03005E94
+_0804D514: .4byte gCB2_AfterEvolution
_0804D518: .4byte sub_804BBCC
_0804D51C: .4byte gUnknown_020297D8
_0804D520: .4byte gPlayerParty
@@ -10623,7 +10623,7 @@ _0804D5A8:
.align 2, 0
_0804D5B4: .4byte gSoftResetDisabled
_0804D5B8:
- ldr r0, _0804D5F4 @ =gUnknown_03005E94
+ ldr r0, _0804D5F4 @ =gCB2_AfterEvolution
ldr r1, _0804D5F8 @ =sub_804DC88
mov r8, r1
str r1, [r0]
@@ -10652,7 +10652,7 @@ _0804D5B8:
bl TradeEvolutionScene
b _0804D60E
.align 2, 0
-_0804D5F4: .4byte gUnknown_03005E94
+_0804D5F4: .4byte gCB2_AfterEvolution
_0804D5F8: .4byte sub_804DC88
_0804D5FC: .4byte gUnknown_020297D8
_0804D600: .4byte gPlayerParty
diff --git a/common_syms/berry_blender.txt b/common_syms/berry_blender.txt
index 36d14f986..524a31411 100644
--- a/common_syms/berry_blender.txt
+++ b/common_syms/berry_blender.txt
@@ -1,4 +1,4 @@
gUnknown_03004830
gInGameOpponentsNo
gUnknown_03004840
-gBerryBlenderData \ No newline at end of file
+gBerryBlenderData
diff --git a/common_syms/cute_sketch.txt b/common_syms/cute_sketch.txt
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/common_syms/cute_sketch.txt
diff --git a/common_syms/egg_hatch.txt b/common_syms/egg_hatch.txt
index f49202045..891ccc104 100644
--- a/common_syms/egg_hatch.txt
+++ b/common_syms/egg_hatch.txt
@@ -1 +1 @@
-gEggHatchData \ No newline at end of file
+gEggHatchData
diff --git a/common_syms/evolution_scene.txt b/common_syms/evolution_scene.txt
new file mode 100644
index 000000000..137cd3e05
--- /dev/null
+++ b/common_syms/evolution_scene.txt
@@ -0,0 +1 @@
+gCB2_AfterEvolution
diff --git a/common_syms/rom4.txt b/common_syms/overworld.txt
index ecdb190b2..ecdb190b2 100644
--- a/common_syms/rom4.txt
+++ b/common_syms/overworld.txt
diff --git a/common_syms/pokeblock_feed.txt b/common_syms/pokeblock_feed.txt
new file mode 100644
index 000000000..827e6526e
--- /dev/null
+++ b/common_syms/pokeblock_feed.txt
@@ -0,0 +1,12 @@
+gPokeblockFeedPokeSprite
+gPokeblockFeedMonSpecies
+gPokeblockMonNotFlipped
+gPokeblockFeedMonSpriteID
+gPokeblockFeedMonNature
+gUnknown_03005F34
+gPokeblockFeedUnused0
+gUnknown_03005F3C
+gUnknown_03005F40
+gPokeblockFeedPokeSpriteCopy
+gUnknown_03005F94
+gUnknown_03005FA0
diff --git a/common_syms/pokemon_menu.txt b/common_syms/pokemon_menu.txt
new file mode 100644
index 000000000..98a1bf53b
--- /dev/null
+++ b/common_syms/pokemon_menu.txt
@@ -0,0 +1,2 @@
+gLastFieldPokeMenuOpened
+gUnknown_03005CE4
diff --git a/data-de/event_scripts.s b/data-de/event_scripts.s
index 4d809241c..114bc4d97 100644
--- a/data-de/event_scripts.s
+++ b/data-de/event_scripts.s
@@ -919,20 +919,20 @@ Std_5:
@ 819F805
return
-BattleTower_Lobby_EventScript_19F806:: @ 819F806
-FallarborTown_ContestLobby_EventScript_19F806:: @ 819F806
-LilycoveCity_ContestLobby_EventScript_19F806:: @ 819F806
-MossdeepCity_GameCorner_1F_EventScript_19F806:: @ 819F806
-OldaleTown_PokemonCenter_2F_EventScript_19F806:: @ 819F806
-SecretBase_RedCave1_EventScript_19F806:: @ 819F806
- special InitSaveDialog
+S_DoSaveDialog:: @ 819F806
+S_DoSaveDialog:: @ 819F806
+S_DoSaveDialog:: @ 819F806
+S_DoSaveDialog:: @ 819F806
+S_DoSaveDialog:: @ 819F806
+S_DoSaveDialog:: @ 819F806
+ special ScrSpecial_DoSaveDialog
waitstate
return
gUnknown_0819F80B:: @ 819F80B
lock
special PlayTrainerEncounterMusic
- special sub_80847C8
+ special ScrSpecial_EndTrainerApproach
waitstate
jump EventScript_19F8F2
@@ -941,7 +941,7 @@ gUnknown_0819F818:: @ 819F818
faceplayer
move LAST_TALKED, Movement_19F8F0
waitmove 0
- specialval RESULT, sub_8082564
+ specialval RESULT, ScrSpecial_HasTrainerBeenFought
compare RESULT, 0
jumpif 5, EventScript_19F83F
special PlayTrainerEncounterMusic
@@ -955,7 +955,7 @@ gUnknown_0819F840:: @ 819F840
lock
faceplayer
call EventScript_19F8E5
- specialval RESULT, sub_8082564
+ specialval RESULT, ScrSpecial_HasTrainerBeenFought
compare RESULT, 0
jumpif 5, EventScript_19F877
special CheckForAlivePartyMons
@@ -966,7 +966,7 @@ gUnknown_0819F840:: @ 819F840
jump EventScript_19F8F2
EventScript_19F870:
- special sub_8082718
+ special ScrSpecial_ShowTrainerNonBattlingSpeech
waittext
waitbutton
release
@@ -984,15 +984,15 @@ gUnknown_0819F878:: @ 819F878
gUnknown_0819F887:: @ 819F887
call EventScript_19F8E5
- specialval RESULT, sub_8082C9C
+ specialval RESULT, ScrSpecial_GetTrainerEyeRematchFlag
compare RESULT, 0
jumpeq EventScript_19F8AD
special PlayTrainerEncounterMusic
special sub_8082524
- special sub_80826D8
+ special ScrSpecial_ShowTrainerIntroSpeech
waittext
waitbutton
- special sub_80826B0
+ special ScrSpecial_StartTrainerEyeRematch
waitstate
releaseall
end
@@ -1001,7 +1001,7 @@ EventScript_19F8AD:
endtrainerbattle
gUnknown_0819F8AE:: @ 819F8AE
- specialval RESULT, sub_8082C9C
+ specialval RESULT, ScrSpecial_GetTrainerEyeRematchFlag
compare RESULT, 0
jumpeq EventScript_19F8DD
special CheckForAlivePartyMons
@@ -1009,10 +1009,10 @@ gUnknown_0819F8AE:: @ 819F8AE
jumpif 5, EventScript_19F8DE
special PlayTrainerEncounterMusic
special sub_8082524
- special sub_80826D8
+ special ScrSpecial_ShowTrainerIntroSpeech
waittext
waitbutton
- special sub_80826B0
+ special ScrSpecial_StartTrainerEyeRematch
waitstate
releaseall
end
@@ -1021,7 +1021,7 @@ EventScript_19F8DD:
endtrainerbattle
EventScript_19F8DE:
- special sub_8082718
+ special ScrSpecial_ShowTrainerNonBattlingSpeech
waittext
waitbutton
release
@@ -1037,11 +1037,11 @@ Movement_19F8F0::
step_end
EventScript_19F8F2:
- special sub_80826D8
+ special ScrSpecial_ShowTrainerIntroSpeech
waittext
waitbutton
reptrainerbattle
- specialval RESULT, sub_8082558
+ specialval RESULT, ScrSpecial_GetTrainerBattleMode
compare RESULT, 0
jumpeq EventScript_19F934
compare RESULT, 2
@@ -1325,7 +1325,7 @@ EverGrandeCity_HallOfFame_EventScript_19FC70:: @ 819FC70
setflag 2141
return
-EventScript_LeagueWhiteOut:: @ 819FC74
+S_WhiteOut:: @ 819FC74
call EverGrandeCity_HallOfFame_EventScript_19FD09
call EventScript_19FC84
jump gUnknown_0819FC9F
@@ -1438,7 +1438,7 @@ SootopolisCity_PokemonCenter_1F_EventScript_19FD5B:: @ 819FD5B
VerdanturfTown_PokemonCenter_1F_EventScript_19FD5B:: @ 819FD5B
lock
faceplayer
- msgbox OldaleTown_PokemonCenter_1F_Text_1A0A7D, 5
+ msgbox gText_NurseJoy_Welcome, 5
compare RESULT, 1
jumpeq OldaleTown_PokemonCenter_1F_EventScript_19FD7C
compare RESULT, 0
@@ -1447,7 +1447,7 @@ VerdanturfTown_PokemonCenter_1F_EventScript_19FD5B:: @ 819FD5B
OldaleTown_PokemonCenter_1F_EventScript_19FD7C:: @ 819FD7C
inccounter GAME_STAT_USED_POKECENTER
- message OldaleTown_PokemonCenter_1F_Text_1A1245
+ message gText_NurseJoy_OkayIllTakeYourPokemon
waittext
move 0x800b, OldaleTown_PokemonCenter_1F_Movement_1A083F
waitmove 0
@@ -1455,23 +1455,23 @@ OldaleTown_PokemonCenter_1F_EventScript_19FD7C:: @ 819FD7C
checkanimation 25
move 0x800b, OldaleTown_PokemonCenter_1F_Movement_1A0845
waitmove 0
- special HealPlayerParty
+ special ScrSpecial_HealPlayerParty
checkflag 273
jumpif 0, OldaleTown_PokemonCenter_1F_EventScript_19FDCE
jump OldaleTown_PokemonCenter_1F_EventScript_19FDB0
end
OldaleTown_PokemonCenter_1F_EventScript_19FDB0:: @ 819FDB0
- message OldaleTown_PokemonCenter_1F_Text_1A0B14
+ message gText_NurseJoy_ThankYouForWaiting
waittext
move 0x800b, OldaleTown_PokemonCenter_1F_Movement_19FDF4
waitmove 0
- message OldaleTown_PokemonCenter_1F_Text_1A0AFA
+ message gText_NurseJoy_WeHopeToSeeYouAgain
waittext
return
OldaleTown_PokemonCenter_1F_EventScript_19FDC7:: @ 819FDC7
- message OldaleTown_PokemonCenter_1F_Text_1A0AFA
+ message gText_NurseJoy_WeHopeToSeeYouAgain
waittext
return
@@ -1484,7 +1484,7 @@ OldaleTown_PokemonCenter_1F_EventScript_19FDCE:: @ 819FDCE
end
OldaleTown_PokemonCenter_1F_EventScript_19FDEA:: @ 819FDEA
- message OldaleTown_PokemonCenter_1F_Text_1A1275
+ message gText_NurseJoy_Pokerus
waittext
setflag 273
return
@@ -1689,7 +1689,7 @@ gUnknown_081A0009:: @ 81A0009
EventScript_1A0023:
message gPCText_WhichPCShouldBeAccessed
waittext
- special TryCreatePCMenu
+ special ScrSpecial_CreatePCMenu
waitstate
jump EventScript_1A0033
end
@@ -2112,7 +2112,7 @@ SSTidalRooms_EventScript_1A02CA:: @ 81A02CA
fadescreen 1
fanfare 368
waitfanfare
- special HealPlayerParty
+ special ScrSpecial_HealPlayerParty
fadescreen 0
return
@@ -2986,16 +2986,16 @@ UnknownString_81A0A54: @ 81A0A54
UnknownString_81A0A66: @ 81A0A66
.string "Verbindung zu LANETTES PC hergestellt.$"
-OldaleTown_PokemonCenter_1F_Text_1A0A7D:: @ 81A0A7D
+gText_NurseJoy_Welcome:: @ 81A0A7D
.string "Willkommen im POKéMON-CENTER!\p"
.string "Wir heilen deine POKéMON und\n"
.string "machen sie wieder fit.\p"
.string "O.K. Wir benötigen deine POKéMON.$"
-OldaleTown_PokemonCenter_1F_Text_1A0AFA:: @ 81A0AFA
+gText_NurseJoy_WeHopeToSeeYouAgain:: @ 81A0AFA
.string "Komm jederzeit wieder vorbei!$"
-OldaleTown_PokemonCenter_1F_Text_1A0B14:: @ 81A0B14
+gText_NurseJoy_ThankYouForWaiting:: @ 81A0B14
.string "Danke!\p"
.string "Deine POKéMON sind wieder topfit!$"
@@ -3214,11 +3214,11 @@ SlateportCity_Text_1A116E:: @ 81A116E
.string "nehmen und dir unter der Hand tolle\l"
.string "Sachen verkaufen.$"
-OldaleTown_PokemonCenter_1F_Text_1A1245:: @ 81A1245
+gText_NurseJoy_OkayIllTakeYourPokemon:: @ 81A1245
.string "Okay, ich nehme deine POKéMON für einen\n"
.string "Moment in meine Obhut.$"
-OldaleTown_PokemonCenter_1F_Text_1A1275:: @ 81A1275
+gText_NurseJoy_Pokerus:: @ 81A1275
.string "Dein POKéMON scheint von dem\n"
.string "POKéRUS befallen zu sein.\p"
.string "Über den POKéRUS ist bisher wenig be-\n"
@@ -3965,7 +3965,7 @@ SecretBase_RedCave1_EventScript_1A3032:: @ 81A3032
jumpeq SecretBase_RedCave1_EventScript_1A308F
setvar RESULT, 1
special sub_80BCE4C
- call SecretBase_RedCave1_EventScript_19F806
+ call S_DoSaveDialog
compare RESULT, 0
jumpeq SecretBase_RedCave1_EventScript_1A308F
hidebox 0, 0, 15, 10
@@ -4000,7 +4000,7 @@ SecretBase_RedCave1_EventScript_1A30AE:: @ 81A30AE
jumpeq SecretBase_RedCave1_EventScript_1A310B
setvar RESULT, 1
special sub_80BCE4C
- call SecretBase_RedCave1_EventScript_19F806
+ call S_DoSaveDialog
compare RESULT, 0
jumpeq SecretBase_RedCave1_EventScript_1A310B
hidebox 0, 0, 15, 10
@@ -4035,7 +4035,7 @@ SecretBase_RedCave1_EventScript_1A312A:: @ 81A312A
jumpeq SecretBase_RedCave1_EventScript_1A3187
setvar RESULT, 1
special sub_80BCE4C
- call SecretBase_RedCave1_EventScript_19F806
+ call S_DoSaveDialog
compare RESULT, 0
jumpeq SecretBase_RedCave1_EventScript_1A3187
hidebox 0, 0, 15, 10
@@ -4070,7 +4070,7 @@ SecretBase_RedCave1_EventScript_1A31A6:: @ 81A31A6
jumpeq SecretBase_RedCave1_EventScript_1A3203
setvar RESULT, 1
special sub_80BCE4C
- call SecretBase_RedCave1_EventScript_19F806
+ call S_DoSaveDialog
compare RESULT, 0
jumpeq SecretBase_RedCave1_EventScript_1A3203
hidebox 0, 0, 15, 10
@@ -4105,7 +4105,7 @@ SecretBase_RedCave1_EventScript_1A3222:: @ 81A3222
jumpeq SecretBase_RedCave1_EventScript_1A327F
setvar RESULT, 1
special sub_80BCE4C
- call SecretBase_RedCave1_EventScript_19F806
+ call S_DoSaveDialog
compare RESULT, 0
jumpeq SecretBase_RedCave1_EventScript_1A327F
hidebox 0, 0, 15, 10
@@ -4140,7 +4140,7 @@ SecretBase_RedCave1_EventScript_1A329E:: @ 81A329E
jumpeq SecretBase_RedCave1_EventScript_1A32FB
setvar RESULT, 1
special sub_80BCE4C
- call SecretBase_RedCave1_EventScript_19F806
+ call S_DoSaveDialog
compare RESULT, 0
jumpeq SecretBase_RedCave1_EventScript_1A32FB
hidebox 0, 0, 15, 10
@@ -4175,7 +4175,7 @@ SecretBase_RedCave1_EventScript_1A331A:: @ 81A331A
jumpeq SecretBase_RedCave1_EventScript_1A3377
setvar RESULT, 1
special sub_80BCE4C
- call SecretBase_RedCave1_EventScript_19F806
+ call S_DoSaveDialog
compare RESULT, 0
jumpeq SecretBase_RedCave1_EventScript_1A3377
hidebox 0, 0, 15, 10
@@ -4210,7 +4210,7 @@ SecretBase_RedCave1_EventScript_1A3396:: @ 81A3396
jumpeq SecretBase_RedCave1_EventScript_1A33F3
setvar RESULT, 1
special sub_80BCE4C
- call SecretBase_RedCave1_EventScript_19F806
+ call S_DoSaveDialog
compare RESULT, 0
jumpeq SecretBase_RedCave1_EventScript_1A33F3
hidebox 0, 0, 15, 10
@@ -4245,7 +4245,7 @@ SecretBase_RedCave1_EventScript_1A3412:: @ 81A3412
jumpeq SecretBase_RedCave1_EventScript_1A346F
setvar RESULT, 1
special sub_80BCE4C
- call SecretBase_RedCave1_EventScript_19F806
+ call S_DoSaveDialog
compare RESULT, 0
jumpeq SecretBase_RedCave1_EventScript_1A346F
hidebox 0, 0, 15, 10
@@ -4280,7 +4280,7 @@ SecretBase_RedCave1_EventScript_1A348E:: @ 81A348E
jumpeq SecretBase_RedCave1_EventScript_1A34EB
setvar RESULT, 1
special sub_80BCE4C
- call SecretBase_RedCave1_EventScript_19F806
+ call S_DoSaveDialog
compare RESULT, 0
jumpeq SecretBase_RedCave1_EventScript_1A34EB
hidebox 0, 0, 15, 10
@@ -4309,7 +4309,7 @@ SecretBase_RedCave1_EventScript_1A350A:: @ 81A350A
setvar 0x8005, 0
special sub_813556C
waitstate
- special HealPlayerParty
+ special ScrSpecial_HealPlayerParty
release
end
@@ -4771,16 +4771,7 @@ BattleTower_Lobby_EventScript_1AE30F:: @ 81AE30F
.include "data/scripts/gabby_and_ty.inc"
- .include "data/scripts/bard.inc"
- .include "data/scripts/hipster.inc"
- .include "data/text/trader.inc"
- .include "data/scripts/trader.inc"
- .include "data/text/storyteller.inc"
- .include "data/scripts/storyteller.inc"
- .include "data/text/giddy.inc"
- .include "data/scripts/giddy.inc"
- .include "data/text/bard.inc"
- .include "data/text/hipster.inc"
+ .include "data/scripts/mauville_man.inc"
.include "data/field_move_scripts.inc"
.include "data/item_ball_scripts.inc"
@@ -4810,7 +4801,7 @@ gUnknown_081B694A:: @ 81B694A
.include "data/scripts/players_house.inc"
-Event_RunningShoesManual:: @ 81B6E5A
+S_RunningShoesManual:: @ 81B6E5A
msgbox UnknownString_81728E3, 3
end
@@ -4819,7 +4810,7 @@ Event_RunningShoesManual:: @ 81B6E5A
.include "data/text/trainers.inc"
-Event_RepelWoreOff:: @ 81C33E6
+S_RepelWoreOff:: @ 81C33E6
msgbox Text_RepelWoreOff, 3
end
@@ -4899,7 +4890,7 @@ GraniteCave_B1F_MapScript2_1C6BB5:: @ 81C6BB5
MtPyre_2F_MapScript2_1C6BB5:: @ 81C6BB5
SkyPillar_2F_MapScript2_1C6BB5:: @ 81C6BB5
SkyPillar_4F_MapScript2_1C6BB5:: @ 81C6BB5
- map_script_2 0x4022, 0, GraniteCave_B1F_EventScript_1C6BC5
+ map_script_2 0x4022, 0, S_FallDownHole
.2byte 0
GraniteCave_B1F_MapScript1_1C6BBF:: @ 81C6BBF
@@ -4909,7 +4900,7 @@ SkyPillar_4F_MapScript1_1C6BBF:: @ 81C6BBF
copyvar 0x4022, 0x1
end
-GraniteCave_B1F_EventScript_1C6BC5:: @ 81C6BC5
+S_FallDownHole:: @ 81C6BC5
lockall
pause 20
move 255, GraniteCave_B1F_Movement_1C6BF7
diff --git a/data-de/field_move_scripts.inc b/data-de/field_move_scripts.inc
index 91c3dcca8..017198c2d 100644
--- a/data-de/field_move_scripts.inc
+++ b/data-de/field_move_scripts.inc
@@ -1,4 +1,4 @@
-CuttableTreeScript:: @ 81B0DCC
+S_CuttableTree:: @ 81B0DCC
lockall
checkflag 2055
jumpif 0, CannotUseCut
@@ -18,7 +18,7 @@ CuttableTreeScript:: @ 81B0DCC
jump DoTreeCutMovement
end
-UseCutScript:: @ 81B0E16
+S_UseCut:: @ 81B0E16
lockall
doanimation 2
waitstate
@@ -59,7 +59,7 @@ CannotUseCutText: @ 81B0E8E
.string "Der ZERSCHNEIDER kann hier eingesetzt\n"
.string "werden.$"
-BreakableRockScript:: @ 81B0EB7
+S_BreakableRock:: @ 81B0EB7
lockall
checkflag 2057
jumpif 0, CannotUseRockSmash
@@ -79,7 +79,7 @@ BreakableRockScript:: @ 81B0EB7
jump DoRockSmashMovement
end
-UseRockSmashScript:: @ 81B0F01
+S_UseRockSmash:: @ 81B0F01
lockall
doanimation 37
waitstate
@@ -93,7 +93,7 @@ DoRockSmashMovement: @ 81B0F0C
specialval RESULT, sub_810F5BC
compare RESULT, 1
jumpeq DoRockSmashMovement_Done
- special RockSmashWildEncounter
+ special ScrSpecial_RockSmashWildEncounter
compare RESULT, 0
jumpeq DoRockSmashMovement_Done
waitstate
@@ -126,7 +126,7 @@ CannotUseRockSmashText: @ 81B0F90
.string "Ein großer Felsen. Ein POKéMON könnte\n"
.string "ihn vielleicht zertrümmern.$"
-PushableBoulderScript:: @ 81B0FCB
+S_PushableBoulder:: @ 81B0FCB
lockall
checkflag 2058
jumpif 0, CannotUseStrength
@@ -145,7 +145,7 @@ PushableBoulderScript:: @ 81B0FCB
jump UsedStrength
end
-UseStrengthScript:: @ 81B100E
+S_UseStrength:: @ 81B100E
lockall
doanimation 40
waitstate
@@ -191,7 +191,7 @@ AlreadyUsedStrengthText: @ 81B1127
.string "STÄRKE ermöglicht es, Felsen zu\n"
.string "bewegen.$"
-UseWaterfallScript:: @ 81B115A
+S_UseWaterfall:: @ 81B115A
lockall
checkattack MOVE_WATERFALL
compare RESULT, 6
@@ -205,7 +205,7 @@ UseWaterfallScript:: @ 81B115A
doanimation 43
jump Waterfall_Done
-CannotUseWaterfallScript:: @ 81B1194
+S_CannotUseWaterfall:: @ 81B1194
lockall
Waterfall_NoMonKnows: @ 81B1195
msgbox CannotUseWaterfallText, 4
@@ -247,7 +247,7 @@ Dive_Done: @ 81B1267
releaseall
end
-UnderwaterUseDiveScript:: @ 81B1269
+S_UseDiveUnderwater:: @ 81B1269
lockall
checkattack MOVE_DIVE
compare RESULT, 6
diff --git a/data-de/text/bard.inc b/data-de/text/bard.inc
index 089741d00..dbfb7d400 100644
--- a/data-de/text/bard.inc
+++ b/data-de/text/bard.inc
@@ -1,20 +1,20 @@
-UnknownString_81B0A83: @ 81B0A83
+gTextBard_BardTesting: @ 81B0A83
.string "BARDEN Test.$"
-MauvilleCity_PokemonCenter_1F_Text_1B0A91:: @ 81B0A91
+gTextBard_HiImTheBard:: @ 81B0A91
.string "Hallo, ich bin der BARDE.\n"
.string "Möchtest du meinem Lied lauschen?$"
-MauvilleCity_PokemonCenter_1F_Text_1B0AC3:: @ 81B0AC3
+gTextBard_OhYouveLeftMe:: @ 81B0AC3
.string "Oh...\n"
.string "Du überlässt mich meinem Blues?$"
-MauvilleCity_PokemonCenter_1F_Text_1B0AED:: @ 81B0AED
+gTextBard_OhWhatAMovingSong:: @ 81B0AED
.string "Hach, was für ein bewegendes Lied...\n"
.string "Ich wünschte, ich könnte es für\l"
.string "andere spielen...$"
-MauvilleCity_PokemonCenter_1F_Text_1B0B2C:: @ 81B0B2C
+gTextBard_SoHowDoYouLikeMySong:: @ 81B0B2C
.string "So?\n"
.string "Wie fandest du mein Lied?\p"
.string "Ich bin noch nicht ganz zufrieden mit\n"
@@ -22,17 +22,17 @@ MauvilleCity_PokemonCenter_1F_Text_1B0B2C:: @ 81B0B2C
.string "Hast du nicht Lust, den Text für mich\n"
.string "neu zu schreiben?$"
-MauvilleCity_PokemonCenter_1F_Text_1B0BA6:: @ 81B0BA6
+gTextBard_OhYouveLeftMe2:: @ 81B0BA6
.string "Oh... Und wieder werde ich meinem\n"
.string "Blues überlassen.$"
-MauvilleCity_PokemonCenter_1F_Text_1B0BD0:: @ 81B0BD0
+gTextBard_ThankYouKindly:: @ 81B0BD0
.string "Vielen herzlichen Dank!\n"
.string "Ich möchte für dich singen.$"
-MauvilleCity_PokemonCenter_1F_Text_1B0BFA:: @ 81B0BFA
+gTextBard_WasThatHowYouWanted:: @ 81B0BFA
.string "Hast du dir dein Lied so vorgestellt?$"
-MauvilleCity_PokemonCenter_1F_Text_1B0C23:: @ 81B0C23
+gTextBard_OkayThatsIt:: @ 81B0C23
.string "Okay! Das ist es! Dieses Lied werde\n"
.string "ich nun für eine Weile singen.$"
diff --git a/data-de/text/giddy.inc b/data-de/text/giddy.inc
index 6e1a46883..8bc5bebda 100644
--- a/data-de/text/giddy.inc
+++ b/data-de/text/giddy.inc
@@ -1,16 +1,16 @@
-MauvilleCity_PokemonCenter_1F_Text_1B092A:: @ 81B092A
+gTextGiddy_Introduction:: @ 81B092A
.string "Ich bin MÄRCHEN-MAN! Ich habe eine sehr\n"
.string "geistreiche Geschichte für dich!\p"
.string "Soll ich sie dir erzählen?$"
-MauvilleCity_PokemonCenter_1F_Text_1B097C:: @ 81B097C
+gTextGiddy_YouveDeflatedMe:: @ 81B097C
.string "Oh...\n"
.string "Du hast mir die Luft rausgelassen...$"
-MauvilleCity_PokemonCenter_1F_Text_1B0998:: @ 81B0998
+gTextGiddy_AlsoIWasThinking:: @ 81B0998
.string "Und ich war in Gedanken vertieft...$"
-MauvilleCity_PokemonCenter_1F_Text_1B09B0:: @ 81B09B0
+gTextGiddy_ByeBye:: @ 81B09B0
.string "Das wäre alles, glaube ich...\p"
.string "Wir sollten bald wieder ein Schwätzchen\n"
.string "halten! Tschüss!$"
diff --git a/data-de/text/hipster.inc b/data-de/text/hipster.inc
index c315b523d..8801b05fd 100644
--- a/data-de/text/hipster.inc
+++ b/data-de/text/hipster.inc
@@ -1,18 +1,18 @@
-MauvilleCity_PokemonCenter_1F_Text_1B0C5B:: @ 81B0C5B
+gTextHipster_TheyCallMeTheHipster:: @ 81B0C5B
.string "Hey, yo! Man nennt mich TRENDWIG. Ich\n"
.string "zeige dir, was hip ist und abgeht.$"
-MauvilleCity_PokemonCenter_1F_Text_1B0CA7:: @ 81B0CA7
+gTextHipster_TaughtYouAlready:: @ 81B0CA7
.string "Aber, hey, ich habe dir doch schon ge-\n"
.string "zeigt, was hip ist und abgeht.\p"
.string "Ich will das auch anderen mitteilen.$"
-MauvilleCity_PokemonCenter_1F_Text_1B0D11:: @ 81B0D11
+gTextHipster_YouAlreadyKnowALot:: @ 81B0D11
.string "Aber, hey, ich habe dir doch schon ge-\n"
.string "zeigt, was hip ist und abgeht.\p"
.string "Ich habe nichts mehr in petto.$"
-MauvilleCity_PokemonCenter_1F_Text_1B0D75:: @ 81B0D75
+gTextHipster_HaveYouHeardAbout:: @ 81B0D75
.string "Hast du schon von\n"
.string "“{STR_VAR_1}” gehört?\p"
.string "Was das heißt? Ähäm...\n"
diff --git a/data-de/text/storyteller.inc b/data-de/text/storyteller.inc
index ee2068766..abcc8a4a8 100644
--- a/data-de/text/storyteller.inc
+++ b/data-de/text/storyteller.inc
@@ -1,25 +1,25 @@
-MauvilleCity_PokemonCenter_1F_Text_1AECC6:: @ 81AECC6
+gTextStoryteller_Introduction:: @ 81AECC6
.string "Ich bin der GESCHICHTENERZÄHLER.\n"
.string "Ich erzähle dir die Geschichten von\l"
.string "legendären TRAINERN.\p"
.string "Soll ich dir etwas erzählen?$"
-MauvilleCity_PokemonCenter_1F_Text_1AED1D:: @ 81AED1D
+gTextStoryteller_OhIFeelStifled:: @ 81AED1D
.string "Oh...\n"
.string "Keiner mag mich...$"
-MauvilleCity_PokemonCenter_1F_Text_1AED35:: @ 81AED35
+gTextStoryteller_WhichTale:: @ 81AED35
.string "Ich kenne viele dieser Legenden.\n"
.string "Welche möchtest du hören?$"
-MauvilleCity_PokemonCenter_1F_Text_1AED70:: @ 81AED70
+gTextStoryteller_ButIKnowOfNoLegendaryTrainers:: @ 81AED70
.string "Aber ich weiß nichts über legendäre\n"
.string "TRAINER. Also habe ich keine Ge-\l"
.string "schichte auf Lager.\p"
.string "Wo findet man wohl einen TRAINER, der\n"
.string "einer lebenden Legende gleicht?$"
-MauvilleCity_PokemonCenter_1F_Text_1AEDE8:: @ 81AEDE8
+gTextStoryteller_BirthOfANewLegend:: @ 81AEDE8
.string "Was ist?\n"
.string "Du... Du...\p"
.string "{STR_VAR_2}\n"
@@ -27,39 +27,39 @@ MauvilleCity_PokemonCenter_1F_Text_1AEDE8:: @ 81AEDE8
.string "Das ist einfach großartig!\n"
.string "Die Geburt einer neuen Legende!$"
-MauvilleCity_PokemonCenter_1F_Text_1AEE50:: @ 81AEE50
+gTextStoryteller_CouldThereBeOtherTrainers:: @ 81AEE50
.string "Ich überlege, ob es nicht noch andere\n"
.string "TRAINER gibt, die mir beeindruckende\l"
.string "Geschichten erzählen können.$"
-MauvilleCity_PokemonCenter_1F_Text_1AEEB4:: @ 81AEEB4
+gTextStoryteller_HaveYouAnyTales:: @ 81AEEB4
.string "Bist du ein TRAINER?\p"
.string "Dann sag mir, ob du Geschichten\n"
.string "für mich hast, die legendär sind?$"
-MauvilleCity_PokemonCenter_1F_Text_1AEF0A:: @ 81AEF0A
+gTextStoryteller_HearAnotherLegendaryTale:: @ 81AEF0A
.string "Übrigens... Möchtest du eine weitere\n"
.string "legendäre Geschichte hören?$"
-MauvilleCity_PokemonCenter_1F_Text_1AEF49:: @ 81AEF49
+gTextStoryteller_ImNotSatisfied:: @ 81AEF49
.string "Hmm...\n"
.string "Ich bin nicht zufrieden...\p"
.string "Ich wünschte, du würdest mir Neuig-\n"
.string "keiten erzählen, die den Titel Legende\l"
.string "verdienen.$"
-MauvilleCity_PokemonCenter_1F_Text_1AEFA5:: @ 81AEFA5
+gTextStoryteller_WishMorePeopleWould:: @ 81AEFA5
.string "Ich wollte, mehr Leute würden sich für\n"
.string "meine epischen Geschichten über\l"
.string "legendäre TRAINER interessieren.$"
-UnknownString_81AEFFC:: @ 81AEFFC
+gTextStoryteller_Story1Title:: @ 81AEFFC
.string "Der speicherfreudige TRAINER$"
-UnknownString_81AF013:: @ 81AF013
+gTextStoryteller_Story1Action:: @ 81AF013
.string "Hast das Spiel gespeichert?$"
-UnknownString_81AF022:: @ 81AF022
+gTextStoryteller_Story1Text:: @ 81AF022
.string "Dies ist die Geschichte eines TRAINERS\n"
.string "namens {STR_VAR_3}.\p"
.string "Dieser TRAINER hat das Spiel\n"
@@ -67,13 +67,13 @@ UnknownString_81AF022:: @ 81AF022
.string "Einen vorsichtigeren TRAINER als\n"
.string "{STR_VAR_3} wird man nicht finden!$"
-UnknownString_81AF0A3:: @ 81AF0A3
+gTextStoryteller_Story2Title:: @ 81AF0A3
.string "Der TRAINER als Trendsetter$"
-UnknownString_81AF0BB:: @ 81AF0BB
+gTextStoryteller_Story2Action:: @ 81AF0BB
.string "Hast Trends gesetzt?$"
-UnknownString_81AF0CA:: @ 81AF0CA
+gTextStoryteller_Story2Text:: @ 81AF0CA
.string "Dies ist die Geschichte eines TRAINERS\n"
.string "namens {STR_VAR_3}.\p"
.string "Dieser TRAINER hat {STR_VAR_1}-mal\n"
@@ -81,13 +81,13 @@ UnknownString_81AF0CA:: @ 81AF0CA
.string "{STR_VAR_3} setzt den Trend für alle - in\n"
.string "der ganzen HOENN-Region!$"
-UnknownString_81AF149:: @ 81AF149
+gTextStoryteller_Story3Title:: @ 81AF149
.string "Der BEEREN pflanzende TRAINER$"
-UnknownString_81AF164:: @ 81AF164
+gTextStoryteller_Story3Action:: @ 81AF164
.string "Hast BEEREN gepflanzt?$"
-UnknownString_81AF174:: @ 81AF174
+gTextStoryteller_Story3Text:: @ 81AF174
.string "Dies ist die Geschichte eines TRAINERS\n"
.string "namens {STR_VAR_3}.\p"
.string "Dieser TRAINER hat {STR_VAR_1}-mal\n"
@@ -95,13 +95,13 @@ UnknownString_81AF174:: @ 81AF174
.string "{STR_VAR_3} ist ein legendärer Lieb-\n"
.string "haber von BEEREN!$"
-UnknownString_81AF1E5:: @ 81AF1E5
+gTextStoryteller_Story4Title:: @ 81AF1E5
.string "Der RAD verrückte TRAINER$"
-UnknownString_81AF1FD:: @ 81AF1FD
+gTextStoryteller_Story4Action:: @ 81AF1FD
.string "Hast RÄDER getauscht?$"
-UnknownString_81AF20A:: @ 81AF20A
+gTextStoryteller_Story4Text:: @ 81AF20A
.string "Dies ist die Geschichte eines TRAINERS\n"
.string "namens {STR_VAR_3}.\p"
.string "Dieser TRAINER hat {STR_VAR_1}-mal\n"
@@ -109,13 +109,13 @@ UnknownString_81AF20A:: @ 81AF20A
.string "{STR_VAR_3} ist ein TRAINER, dessen\n"
.string "Passion das RADfahren ist!$"
-UnknownString_81AF281:: @ 81AF281
+gTextStoryteller_Story5Title:: @ 81AF281
.string "Der Interviews gebende TRAINER$"
-UnknownString_81AF299:: @ 81AF299
+gTextStoryteller_Story5Action:: @ 81AF299
.string "Hast Interviews gegeben?$"
-UnknownString_81AF2A9:: @ 81AF2A9
+gTextStoryteller_Story5Text:: @ 81AF2A9
.string "Dies ist die Geschichte eines TRAINERS\n"
.string "namens {STR_VAR_3}.\p"
.string "Dieser TRAINER wurde {STR_VAR_1}-mal\n"
@@ -123,13 +123,13 @@ UnknownString_81AF2A9:: @ 81AF2A9
.string "{STR_VAR_3} ist ein TRAINER, der überall\n"
.string "Aufmerksamkeit erregt!$"
-UnknownString_81AF32C:: @ 81AF32C
+gTextStoryteller_Story6Title:: @ 81AF32C
.string "Der kampfliebende TRAINER$"
-UnknownString_81AF345:: @ 81AF345
+gTextStoryteller_Story6Action:: @ 81AF345
.string "Hast oft gekämpft?$"
-UnknownString_81AF34D:: @ 81AF34D
+gTextStoryteller_Story6Text:: @ 81AF34D
.string "Dies ist die Geschichte eines TRAINERS\n"
.string "namens {STR_VAR_3}.\p"
.string "Dieser TRAINER hat {STR_VAR_1}-mal\n"
@@ -137,13 +137,13 @@ UnknownString_81AF34D:: @ 81AF34D
.string "{STR_VAR_3} ist ein TRAINER, der zu\n"
.string "einem Kampf nicht nein sagt!$"
-UnknownString_81AF3D0:: @ 81AF3D0
+gTextStoryteller_Story7Title:: @ 81AF3D0
.string "Der POKéMON fangende TRAINER$"
-UnknownString_81AF3ED:: @ 81AF3ED
+gTextStoryteller_Story7Action:: @ 81AF3ED
.string "Hast POKéMON gefangen?$"
-UnknownString_81AF3FC:: @ 81AF3FC
+gTextStoryteller_Story7Text:: @ 81AF3FC
.string "Dies ist die Geschichte eines TRAINERS\n"
.string "namens {STR_VAR_3}.\p"
.string "Dieser TRAINER hat {STR_VAR_1}\n"
@@ -151,13 +151,13 @@ UnknownString_81AF3FC:: @ 81AF3FC
.string "{STR_VAR_3} ist ein legendärer Fänger\n"
.string "von POKéMON!$"
-UnknownString_81AF46D:: @ 81AF46D
+gTextStoryteller_Story8Title:: @ 81AF46D
.string "Der angelnde TRAINER$"
-UnknownString_81AF481:: @ 81AF481
+gTextStoryteller_Story8Action:: @ 81AF481
.string "Hast POKéMON mit einer ANGEL gefangen?$"
-UnknownString_81AF49B:: @ 81AF49B
+gTextStoryteller_Story8Text:: @ 81AF49B
.string "Dies ist die Geschichte eines TRAINERS\n"
.string "namens {STR_VAR_3}.\p"
.string "Dieser TRAINER hat {STR_VAR_1}\n"
@@ -165,13 +165,13 @@ UnknownString_81AF49B:: @ 81AF49B
.string "{STR_VAR_3} ist ein legendärer Angel-\n"
.string "experte!$"
-UnknownString_81AF511:: @ 81AF511
+gTextStoryteller_Story9Title:: @ 81AF511
.string "Der EIER wärmende TRAINER$"
-UnknownString_81AF529:: @ 81AF529
+gTextStoryteller_Story9Action:: @ 81AF529
.string "Hast EIER ausgebrütet?$"
-UnknownString_81AF536:: @ 81AF536
+gTextStoryteller_Story9Text:: @ 81AF536
.string "Dies ist die Geschichte eines TRAINERS\n"
.string "namens {STR_VAR_3}.\p"
.string "Es passierte {STR_VAR_1}-mal, dass der TRAINER\n"
@@ -179,13 +179,13 @@ UnknownString_81AF536:: @ 81AF536
.string "{STR_VAR_3} ist ein legendärer Pfleger\n"
.string "von EIERN!$"
-UnknownString_81AF5A9:: @ 81AF5A9
+gTextStoryteller_Story10Title:: @ 81AF5A9
.string "Der TRAINER der Entwicklungen$"
-UnknownString_81AF5BD:: @ 81AF5BD
+gTextStoryteller_Story10Action:: @ 81AF5BD
.string "Hast POKéMON sich entwickeln lassen?$"
-UnknownString_81AF5CD:: @ 81AF5CD
+gTextStoryteller_Story10Text:: @ 81AF5CD
.string "Dies ist die Geschichte eines TRAINERS\n"
.string "namens {STR_VAR_3}.\p"
.string "Dieser TRAINER hat {STR_VAR_1}\n"
@@ -193,13 +193,13 @@ UnknownString_81AF5CD:: @ 81AF5CD
.string "{STR_VAR_3} ist der ultimative Ent-\n"
.string "wickler von POKéMON!$"
-UnknownString_81AF63F:: @ 81AF63F
+gTextStoryteller_Story11Title:: @ 81AF63F
.string "Der PKMN-CENTER liebende TRAINER$"
-UnknownString_81AF661:: @ 81AF661
+gTextStoryteller_Story11Action:: @ 81AF661
.string "Gingst in ein POKéMON-CENTER?$"
-UnknownString_81AF676:: @ 81AF676
+gTextStoryteller_Story11Text:: @ 81AF676
.string "Dies ist die Geschichte eines TRAINERS\n"
.string "namens {STR_VAR_3}.\p"
.string "Dieser TRAINER hat POKéMON\n"
@@ -208,13 +208,13 @@ UnknownString_81AF676:: @ 81AF676
.string "Es gibt keinen größeren Fan der\n"
.string "POKéMON-CENTER als {STR_VAR_3}!$"
-UnknownString_81AF711:: @ 81AF711
+gTextStoryteller_Story12Title:: @ 81AF711
.string "Der gastfreundliche TRAINER$"
-UnknownString_81AF726:: @ 81AF726
+gTextStoryteller_Story12Action:: @ 81AF726
.string "POKéMON haben sich bei dir erholt?$"
-UnknownString_81AF73D:: @ 81AF73D
+gTextStoryteller_Story12Text:: @ 81AF73D
.string "Dies ist die Geschichte eines TRAINERS\n"
.string "namens {STR_VAR_3}.\p"
.string "Dieser TRAINER hat POKéMON\n"
@@ -223,13 +223,13 @@ UnknownString_81AF73D:: @ 81AF73D
.string "Kein TRAINER ist so gastfreundlich\n"
.string "wie {STR_VAR_3}!$"
-UnknownString_81AF7BF:: @ 81AF7BF
+gTextStoryteller_Story13Title:: @ 81AF7BF
.string "Der SAFARI liebende TRAINER$"
-UnknownString_81AF7D9:: @ 81AF7D9
+gTextStoryteller_Story13Action:: @ 81AF7D9
.string "Bist in die SAFARI-ZONE gegangen?$"
-UnknownString_81AF7F1:: @ 81AF7F1
+gTextStoryteller_Story13Text:: @ 81AF7F1
.string "Dies ist die Geschichte eines TRAINERS\n"
.string "namens {STR_VAR_3}.\p"
.string "Dieser TRAINER ist {STR_VAR_1}-mal in die\n"
@@ -238,13 +238,13 @@ UnknownString_81AF7F1:: @ 81AF7F1
.string "wilde Seite in der SAFARI-ZONE zum\l"
.string "Vorschein kommt!$"
-UnknownString_81AF88A:: @ 81AF88A
+gTextStoryteller_Story14Title:: @ 81AF88A
.string "Der TRAINER als ZERSCHNEIDER$"
-UnknownString_81AF8A1:: @ 81AF8A1
+gTextStoryteller_Story14Action:: @ 81AF8A1
.string "Hast ZERSCHNEIDER eingesetzt?$"
-UnknownString_81AF8AA:: @ 81AF8AA
+gTextStoryteller_Story14Text:: @ 81AF8AA
.string "Dies ist die Geschichte eines TRAINERS\n"
.string "namens {STR_VAR_3}.\p"
.string "Dieser TRAINER hat {STR_VAR_1}-mal\n"
@@ -252,13 +252,13 @@ UnknownString_81AF8AA:: @ 81AF8AA
.string "{STR_VAR_3} ist ein TRAINER, der es\n"
.string "liebt, etwas zu ZERSCHNEIDEN.$"
-UnknownString_81AF91B:: @ 81AF91B
+gTextStoryteller_Story15Title:: @ 81AF91B
.string "Der TRAINER als ZERTRÜMMERER$"
-UnknownString_81AF935:: @ 81AF935
+gTextStoryteller_Story15Action:: @ 81AF935
.string "Hast Felsen ZERTRÜMMERT?$"
-UnknownString_81AF943:: @ 81AF943
+gTextStoryteller_Story15Text:: @ 81AF943
.string "Dies ist die Geschichte eines TRAINERS\n"
.string "namens {STR_VAR_3}.\p"
.string "Dieser TRAINER hat {STR_VAR_1}-mal\n"
@@ -266,13 +266,13 @@ UnknownString_81AF943:: @ 81AF943
.string "{STR_VAR_3} ist ein TRAINER, der keinen\n"
.string "Felsen unbeschädigt lassen kann.$"
-UnknownString_81AF9C8:: @ 81AF9C8
+gTextStoryteller_Story16Title:: @ 81AF9C8
.string "Der Umzüge liebende TRAINER$"
-UnknownString_81AF9E0:: @ 81AF9E0
+gTextStoryteller_Story16Action:: @ 81AF9E0
.string "Bist du mit der GEHEIMBASIS umgezogen?$"
-UnknownString_81AF9F6:: @ 81AF9F6
+gTextStoryteller_Story16Text:: @ 81AF9F6
.string "Dies ist die Geschichte eines TRAINERS\n"
.string "namens {STR_VAR_3}.\p"
.string "Dieser TRAINER ist {STR_VAR_1}-mal mit\n"
@@ -280,13 +280,13 @@ UnknownString_81AF9F6:: @ 81AF9F6
.string "{STR_VAR_3} ist ein TRAINER, der es\n"
.string "liebt, sich ein neues Haus einzurichten.$"
-UnknownString_81AFA79:: @ 81AFA79
+gTextStoryteller_Story17Title:: @ 81AFA79
.string "Der PLATSCHER des TRAINERS$"
-UnknownString_81AFA92:: @ 81AFA92
+gTextStoryteller_Story17Action:: @ 81AFA92
.string "Hast PLATSCHER eingesetzt?$"
-UnknownString_81AFA9E:: @ 81AFA9E
+gTextStoryteller_Story17Text:: @ 81AFA9E
.string "Dies ist die Geschichte eines TRAINERS\n"
.string "namens {STR_VAR_3}.\p"
.string "Dieser TRAINER hat {STR_VAR_1}-mal\n"
@@ -294,13 +294,13 @@ UnknownString_81AFA9E:: @ 81AFA9E
.string "{STR_VAR_3} ist ein TRAINER, der es\n"
.string "liebt, zu PLATSCHEN.$"
-UnknownString_81AFB17:: @ 81AFB17
+gTextStoryteller_Story18Title:: @ 81AFB17
.string "Der verbissene TRAINER$"
-UnknownString_81AFB2D:: @ 81AFB2D
+gTextStoryteller_Story18Action:: @ 81AFB2D
.string "Hast VERZWEIFLER angewendet?$"
-UnknownString_81AFB48:: @ 81AFB48
+gTextStoryteller_Story18Text:: @ 81AFB48
.string "Dies ist die Geschichte eines TRAINERS\n"
.string "namens {STR_VAR_3}.\p"
.string "Dieser TRAINER hat sich {STR_VAR_1}-mal\n"
@@ -308,13 +308,13 @@ UnknownString_81AFB48:: @ 81AFB48
.string "{STR_VAR_3}... Ein verbissener TRAINER,\n"
.string "der auch in der Not nicht aufgibt.$"
-UnknownString_81AFBD8:: @ 81AFBD8
+gTextStoryteller_Story19Title:: @ 81AFBD8
.string "Der König der EINARMIGEN BANDITEN$"
-UnknownString_81AFBE7:: @ 81AFBE7
+gTextStoryteller_Story19Action:: @ 81AFBE7
.string "Hast den EINARMIGEN BANDITEN besiegt?$"
-UnknownString_81AFC04:: @ 81AFC04
+gTextStoryteller_Story19Text:: @ 81AFC04
.string "Dies ist die Geschichte eines TRAINERS\n"
.string "namens {STR_VAR_3}.\p"
.string "Dieser TRAINER hat {STR_VAR_1}-mal\n"
@@ -322,13 +322,13 @@ UnknownString_81AFC04:: @ 81AFC04
.string "{STR_VAR_3}... Ein TRAINER, der am\n"
.string "EINARMIGEN BANDITEN Glück hat.$"
-UnknownString_81AFC8A:: @ 81AFC8A
+gTextStoryteller_Story20Title:: @ 81AFC8A
.string "Der König des ROULETTES$"
-UnknownString_81AFC9D:: @ 81AFC9D
+gTextStoryteller_Story20Action:: @ 81AFC9D
.string "Hast in Folge beim ROULETTE gewonnen,$"
-UnknownString_81AFCBE:: @ 81AFCBE
+gTextStoryteller_Story20Text:: @ 81AFCBE
.string "Dies ist die Geschichte eines TRAINERS\n"
.string "namens {STR_VAR_3}.\p"
.string "Dieser TRAINER hat {STR_VAR_1}-mal in Folge\n"
@@ -336,13 +336,13 @@ UnknownString_81AFCBE:: @ 81AFCBE
.string "{STR_VAR_3}... Ein TRAINER, dem die Kugel\n"
.string "beim ROULETTE gehorcht.$"
-UnknownString_81AFD44:: @ 81AFD44
+gTextStoryteller_Story21Title:: @ 81AFD44
.string "Der Herausforderer im DUELLTURM$"
-UnknownString_81AFD60:: @ 81AFD60
+gTextStoryteller_Story21Action:: @ 81AFD60
.string "Hast Gegner im DUELLTURM gefordert?$"
-UnknownString_81AFD80:: @ 81AFD80
+gTextStoryteller_Story21Text:: @ 81AFD80
.string "Dies ist die Geschichte eines TRAINERS\n"
.string "namens {STR_VAR_3}.\p"
.string "Dieser TRAINER hat {STR_VAR_1}-mal Gegner\n"
@@ -350,13 +350,13 @@ UnknownString_81AFD80:: @ 81AFD80
.string "{STR_VAR_3}... Ein TRAINER, der im DUELL-\n"
.string "TURM nach Perfektion strebt.$"
-UnknownString_81AFE1D:: @ 81AFE1D
+gTextStoryteller_Story22Title:: @ 81AFE1D
.string "Der mixende TRAINER$"
-UnknownString_81AFE36:: @ 81AFE36
+gTextStoryteller_Story22Action:: @ 81AFE36
.string "Hast {POKEBLOCK} hergestellt?$"
-UnknownString_81AFE42:: @ 81AFE42
+gTextStoryteller_Story22Text:: @ 81AFE42
.string "Dies ist die Geschichte eines TRAINERS\n"
.string "namens {STR_VAR_3}.\p"
.string "Dieser TRAINER hat {STR_VAR_1}-mal\n"
@@ -364,13 +364,13 @@ UnknownString_81AFE42:: @ 81AFE42
.string "Niemand bedient den BEERENMIXER\n"
.string "besser als {STR_VAR_3}.$"
-UnknownString_81AFEC2:: @ 81AFEC2
+gTextStoryteller_Story23Title:: @ 81AFEC2
.string "Der Fan der WETTBEWERBE$"
-UnknownString_81AFEDD:: @ 81AFEDD
+gTextStoryteller_Story23Action:: @ 81AFEDD
.string "Hast an WETTBEWERBEN teilgenommen?$"
-UnknownString_81AFEEE:: @ 81AFEEE
+gTextStoryteller_Story23Text:: @ 81AFEEE
.string "Dies ist die Geschichte eines TRAINERS\n"
.string "namens {STR_VAR_3}.\p"
.string "Dieser TRAINER hat {STR_VAR_1}-mal\n"
@@ -378,13 +378,13 @@ UnknownString_81AFEEE:: @ 81AFEEE
.string "{STR_VAR_3} liebt es, anderen seine\n"
.string "POKéMON zu zeigen.$"
-UnknownString_81AFF68:: @ 81AFF68
+gTextStoryteller_Story24Title:: @ 81AFF68
.string "Der Meister der WETTBEWERBE$"
-UnknownString_81AFF7B:: @ 81AFF7B
+gTextStoryteller_Story24Action:: @ 81AFF7B
.string "Hast WETTBEWERBE gewonnen?$"
-UnknownString_81AFF88:: @ 81AFF88
+gTextStoryteller_Story24Text:: @ 81AFF88
.string "Dies ist die Geschichte eines TRAINERS\n"
.string "namens {STR_VAR_3}.\p"
.string "Dieser TRAINER hat {STR_VAR_1}-mal\n"
@@ -392,26 +392,26 @@ UnknownString_81AFF88:: @ 81AFF88
.string "{STR_VAR_3} ist ein unvergleichlicher\n"
.string "Meister der WETTBEWERBE.$"
-UnknownString_81AFFFB:: @ 81AFFFB
+gTextStoryteller_Story25Title:: @ 81AFFFB
.string "Der glückliche Einkäufer$"
-UnknownString_81B000D:: @ 81B000D
+gTextStoryteller_Story25Action:: @ 81B000D
.string "Bist einkaufen gegangen?$"
-UnknownString_81B0015:: @ 81B0015
+gTextStoryteller_Story25Text:: @ 81B0015
.string "Dies ist die Geschichte eines TRAINERS\n"
.string "namens {STR_VAR_3}.\p"
.string "Dieser TRAINER hat {STR_VAR_1}-mal\n"
.string "in einem Geschäft Items gekauft!\p"
.string "{STR_VAR_3} ein geborener Einkäufer.$"
-UnknownString_81B009D:: @ 81B009D
+gTextStoryteller_Story26Title:: @ 81B009D
.string "Der TRAINER, der Items findet$"
-UnknownString_81B00B6:: @ 81B00B6
+gTextStoryteller_Story26Action:: @ 81B00B6
.string "Hast den DETEKTOR eingesetzt?$"
-UnknownString_81B00C9:: @ 81B00C9
+gTextStoryteller_Story26Text:: @ 81B00C9
.string "Dies ist die Geschichte eines TRAINERS\n"
.string "namens {STR_VAR_3}.\p"
.string "Dieser TRAINER hat {STR_VAR_1}-mal\n"
@@ -419,13 +419,13 @@ UnknownString_81B00C9:: @ 81B00C9
.string "{STR_VAR_3} liebt es, den Boden nach\n"
.string "verborgenen Items abzusuchen.$"
-UnknownString_81B014D:: @ 81B014D
+gTextStoryteller_Story27Title:: @ 81B014D
.string "Der regennasse TRAINER$"
-UnknownString_81B0165:: @ 81B0165
+gTextStoryteller_Story27Action:: @ 81B0165
.string "Wurdest nass geregnet?$"
-UnknownString_81B0173:: @ 81B0173
+gTextStoryteller_Story27Text:: @ 81B0173
.string "Dies ist die Geschichte eines TRAINERS\n"
.string "namens {STR_VAR_3}.\p"
.string "Dieser TRAINER wurde {STR_VAR_1}-mal\n"
@@ -433,13 +433,13 @@ UnknownString_81B0173:: @ 81B0173
.string "Das Charisma von {STR_VAR_3} zieht\n"
.string "sogar den Regen an.$"
-UnknownString_81B01E9:: @ 81B01E9
+gTextStoryteller_Story28Title:: @ 81B01E9
.string "Der passionierte POKéDEX-Leser$"
-UnknownString_81B0201:: @ 81B0201
+gTextStoryteller_Story28Action:: @ 81B0201
.string "Hast im POKéDEX nachgeschlagen?$"
-UnknownString_81B0213:: @ 81B0213
+gTextStoryteller_Story28Text:: @ 81B0213
.string "Dies ist die Geschichte eines TRAINERS\n"
.string "namens {STR_VAR_3}.\p"
.string "Dieser TRAINER hat {STR_VAR_1}-mal\n"
@@ -447,13 +447,13 @@ UnknownString_81B0213:: @ 81B0213
.string "{STR_VAR_3} liebt es, alles über\n"
.string "POKéMON im POKéDEX nachzulesen.$"
-UnknownString_81B0290:: @ 81B0290
+gTextStoryteller_Story29Title:: @ 81B0290
.string "Der Sammler der BÄNDER$"
-UnknownString_81B02A5:: @ 81B02A5
+gTextStoryteller_Story29Action:: @ 81B02A5
.string "Hast BÄNDER erhalten?$"
-UnknownString_81B02B6:: @ 81B02B6
+gTextStoryteller_Story29Text:: @ 81B02B6
.string "Dies ist die Geschichte eines TRAINERS\n"
.string "namens {STR_VAR_3}.\p"
.string "Dieser TRAINER hat {STR_VAR_1}\n"
@@ -461,13 +461,13 @@ UnknownString_81B02B6:: @ 81B02B6
.string "{STR_VAR_3} ist ein TRAINER, der es\n"
.string "liebt, BÄNDER zu sammeln.$"
-UnknownString_81B0337:: @ 81B0337
+gTextStoryteller_Story30Title:: @ 81B0337
.string "Der springende TRAINER$"
-UnknownString_81B0351:: @ 81B0351
+gTextStoryteller_Story30Action:: @ 81B0351
.string "Bist Absätze heruntergesprungen?$"
-UnknownString_81B0364:: @ 81B0364
+gTextStoryteller_Story30Text:: @ 81B0364
.string "Dies ist die Geschichte eines TRAINERS\n"
.string "namens {STR_VAR_3}.\p"
.string "Dieser TRAINER ist {STR_VAR_1}-mal\n"
@@ -476,26 +476,26 @@ UnknownString_81B0364:: @ 81B0364
.string "TRAINER {STR_VAR_3} einfach hinab-\l"
.string "springen.$"
-UnknownString_81B03E9:: @ 81B03E9
+gTextStoryteller_Story31Title:: @ 81B03E9
.string "Der legendäre Fernsehzuschauer$"
-UnknownString_81B0401:: @ 81B0401
+gTextStoryteller_Story31Action:: @ 81B0401
.string "Hast ferngeschaut?$"
-UnknownString_81B040C:: @ 81B040C
+gTextStoryteller_Story31Text:: @ 81B040C
.string "Dies ist die Geschichte eines TRAINERS\n"
.string "namens {STR_VAR_3}.\p"
.string "Dieser TRAINER hat {STR_VAR_1}-mal\n"
.string "Fernsehen geschaut!\p"
.string "{STR_VAR_3} liebt es, fernzusehen.$"
-UnknownString_81B046E:: @ 81B046E
+gTextStoryteller_Story32Title:: @ 81B046E
.string "Der zeitbewusste TRAINER$"
-UnknownString_81B0489:: @ 81B0489
+gTextStoryteller_Story32Action:: @ 81B0489
.string "Hast nach der Uhrzeit gesehen?$"
-UnknownString_81B049A:: @ 81B049A
+gTextStoryteller_Story32Text:: @ 81B049A
.string "Dies ist die Geschichte eines TRAINERS\n"
.string "namens {STR_VAR_3}.\p"
.string "Dieser TRAINER hat {STR_VAR_1}-mal\n"
@@ -503,13 +503,13 @@ UnknownString_81B049A:: @ 81B049A
.string "{STR_VAR_3} ist ein pünktlicher\n"
.string "TRAINER, der sich der Zeit bewusst ist.$"
-UnknownString_81B0523:: @ 81B0523
+gTextStoryteller_Story33Title:: @ 81B0523
.string "Der Zauberer der POKéMON-LOTTERIE$"
-UnknownString_81B053E:: @ 81B053E
+gTextStoryteller_Story33Action:: @ 81B053E
.string "Hast in der LOTTERIE gewonnen?$"
-UnknownString_81B0554:: @ 81B0554
+gTextStoryteller_Story33Text:: @ 81B0554
.string "Dies ist die Geschichte eines TRAINERS\n"
.string "namens {STR_VAR_3}.\p"
.string "Dieser TRAINER hat {STR_VAR_1}-mal\n"
@@ -517,13 +517,13 @@ UnknownString_81B0554:: @ 81B0554
.string "TRAINER {STR_VAR_3} hat viele Freunde,\n"
.string "die mit ihm POKéMON tauschen.$"
-UnknownString_81B05D8:: @ 81B05D8
+gTextStoryteller_Story34Title:: @ 81B05D8
.string "Der TRAINER und die PENSION$"
-UnknownString_81B05F3:: @ 81B05F3
+gTextStoryteller_Story34Action:: @ 81B05F3
.string "Hast POKéMON in die PENSION gebracht?$"
-UnknownString_81B0610:: @ 81B0610
+gTextStoryteller_Story34Text:: @ 81B0610
.string "Dies ist die Geschichte eines TRAINERS\n"
.string "namens {STR_VAR_3}.\p"
.string "Dieser TRAINER hat {STR_VAR_1}-mal\n"
@@ -532,13 +532,13 @@ UnknownString_81B0610:: @ 81B0610
.string "alles für die Entwicklung seiner\l"
.string "POKéMON tut.$"
-UnknownString_81B06A9:: @ 81B06A9
+gTextStoryteller_Story35Title:: @ 81B06A9
.string "Der SEILBAHN verrückte TRAINER$"
-UnknownString_81B06C6:: @ 81B06C6
+gTextStoryteller_Story35Action:: @ 81B06C6
.string "Bist mit der SEILBAHN gefahren?$"
-UnknownString_81B06D9:: @ 81B06D9
+gTextStoryteller_Story35Text:: @ 81B06D9
.string "Dies ist die Geschichte eines TRAINERS\n"
.string "namens {STR_VAR_3}.\p"
.string "Dieser TRAINER ist {STR_VAR_1}-mal\n"
@@ -547,13 +547,13 @@ UnknownString_81B06D9:: @ 81B06D9
.string "TRAINER, der ständig rauf und runter\l"
.string "fährt.$"
-UnknownString_81B0763:: @ 81B0763
+gTextStoryteller_Story36Title:: @ 81B0763
.string "Der Liebhaber der Heißen Quellen$"
-UnknownString_81B0781:: @ 81B0781
+gTextStoryteller_Story36Action:: @ 81B0781
.string "Hast in den Heißen Quellen gebadet?$"
-UnknownString_81B0797:: @ 81B0797
+gTextStoryteller_Story36Text:: @ 81B0797
.string "Dies ist die Geschichte eines TRAINERS\n"
.string "namens {STR_VAR_3}.\p"
.string "Dieser TRAINER hat {STR_VAR_1}-mal\n"
diff --git a/data-de/text/trader.inc b/data-de/text/trader.inc
index adf5d3aeb..dae453e8b 100644
--- a/data-de/text/trader.inc
+++ b/data-de/text/trader.inc
@@ -1,58 +1,58 @@
-MauvilleCity_PokemonCenter_1F_Text_1AE88F:: @ 81AE88F
+gTextTrader_Introduction:: @ 81AE88F
.string "Hallo! Ich bin der HÄNDLER. Möchtest\n"
.string "du Dekorationen mit mir tauschen?$"
-MauvilleCity_PokemonCenter_1F_Text_1AE8C6:: @ 81AE8C6
+gTextTrader_FeelUnwanted1:: @ 81AE8C6
.string "Oh...\n"
.string "Ich fühle mich überflüssig...$"
-MauvilleCity_PokemonCenter_1F_Text_1AE8DF:: @ 81AE8DF
+gTextTrader_TradedAlready:: @ 81AE8DF
.string "Aber wir beide haben doch bereits\n"
.string "Dekorationen ausgetauscht.$"
-MauvilleCity_PokemonCenter_1F_Text_1AE910:: @ 81AE910
+gTextTrader_MenuPrompt:: @ 81AE910
.string "Wenn du etwas Dekoratives siehst, das\n"
.string "du haben möchtest, lass es mich wissen.$"
-MauvilleCity_PokemonCenter_1F_Text_1AE950:: @ 81AE950
+gTextTrader_DontWantAnything:: @ 81AE950
.string "Du möchtest nichts haben?\n"
.string "Ich fühle mich so überflüssig...$"
-MauvilleCity_PokemonCenter_1F_Text_1AE97C:: @ 81AE97C
+gTextTrader_ItemOnceBelongedTo:: @ 81AE97C
.string "Das dekorative Item gehörte einst\n"
.string "{STR_VAR_1}.\p"
.string "Möchtest du es haben?$"
-MauvilleCity_PokemonCenter_1F_Text_1AE9B6:: @ 81AE9B6
+gTextTrader_YouDontHaveDecorations:: @ 81AE9B6
.string "Äh... Warte eine Sekunde. Du hast über-\n"
.string "haupt kein dekoratives Item!$"
-MauvilleCity_PokemonCenter_1F_Text_1AE9F8:: @ 81AE9F8
+gTextTrader_PickDecorationYoullTrade:: @ 81AE9F8
.string "Okay, wähle die Dekoration aus, die du\n"
.string "mit mir tauschen willst.$"
-MauvilleCity_PokemonCenter_1F_Text_1AEA2B:: @ 81AEA2B
+gTextTrader_FeelUnwanted2:: @ 81AEA2B
.string "Du willst nicht mit mir tauschen?\n"
.string "Ich fühle mich überflüssig...$"
-MauvilleCity_PokemonCenter_1F_Text_1AEA57:: @ 81AEA57
+gTextTrader_NoRoomForThis:: @ 81AEA57
.string "Du hast keinen Platz mehr für eine/n\n"
.string "{STR_VAR_2}.$"
-MauvilleCity_PokemonCenter_1F_Text_1AEA9B:: @ 81AEA9B
+gTextTrader_SoWellTrade:: @ 81AEA9B
.string "Okay, dann lass uns tauschen:\n"
.string "{STR_VAR_3} gegen\l"
.string "{STR_VAR_2}!$"
-MauvilleCity_PokemonCenter_1F_Text_1AEAC3:: @ 81AEAC3
+gTextTrader_InUseYouCantTradeIt:: @ 81AEAC3
.string "Dieses Dekorationsstück ist im Ge-\n"
.string "brauch. Das kannst du nicht tauschen.$"
-MauvilleCity_PokemonCenter_1F_Text_1AEAFB:: @ 81AEAFB
+gTextTrader_ThenWellTrade:: @ 81AEAFB
.string "Dann lass uns tauschen! Ich werde meine\n"
.string "Dekorationen auf deinen PC senden.$"
-MauvilleCity_PokemonCenter_1F_Text_1AEB31:: @ 81AEB31
+gTextTrader_ICantTradeThatOneAway:: @ 81AEB31
.string "Huups! Tut mir Leid!\n"
.string "Das ist ein ganz seltenes Stück!\l"
.string "Das kann ich nicht tauschen!\p"
diff --git a/data/battle_811DA74.s b/data/battle_811DA74.s
deleted file mode 100644
index 873c76eb9..000000000
--- a/data/battle_811DA74.s
+++ /dev/null
@@ -1,64 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 2
-gLinkPartnerBufferCommands:: @ 83FE4F4
- .4byte LinkPartnerHandleGetAttributes
- .4byte sub_811EC04
- .4byte LinkPartnerHandleSetAttributes
- .4byte sub_811F664
- .4byte sub_811F6D8
- .4byte sub_811F7F4
- .4byte sub_811F9D0
- .4byte sub_811FAE4
- .4byte sub_811FC30
- .4byte sub_811FC3C
- .4byte sub_811FCE8
- .4byte sub_811FDCC
- .4byte sub_811FDD8
- .4byte sub_811FDE4
- .4byte sub_811FDF0
- .4byte sub_811FDFC
- .4byte sub_8120094
- .4byte sub_81200F8
- .4byte sub_8120104
- .4byte sub_8120110
- .4byte sub_812011C
- .4byte sub_8120128
- .4byte sub_8120134
- .4byte sub_8120140
- .4byte LinkPartnerHandleHealthBarUpdate
- .4byte LinkPartnerHandleExpBarUpdate
- .4byte LinkPartnerHandleStatusIconUpdate
- .4byte LinkPartnerHandleStatusAnimation
- .4byte sub_8120324
- .4byte sub_8120330
- .4byte sub_812033C
- .4byte sub_8120348
- .4byte sub_8120354
- .4byte sub_8120360
- .4byte sub_812036C
- .4byte sub_8120378
- .4byte sub_8120384
- .4byte sub_8120390
- .4byte sub_81203AC
- .4byte sub_81203E4
- .4byte sub_81203FC
- .4byte LinkPartnerHandleHitAnimation
- .4byte sub_8120494
- .4byte LinkPartnerHandleEffectivenessSound
- .4byte sub_81204E4
- .4byte LinkPartnerHandleFaintingCry
- .4byte dp01t_2E_3_battle_intro
- .4byte sub_8120588
- .4byte dp01t_30_3_80EB11C
- .4byte sub_8120920
- .4byte sub_812096C
- .4byte sub_8120978
- .4byte sub_81209D8
- .4byte sub_8120A40
- .4byte sub_8120A4C
- .4byte sub_8120A58
- .4byte nullsub_75
diff --git a/data/battle_anim_81258BC.s b/data/battle_anim_81258BC.s
deleted file mode 100644
index 993adbc2e..000000000
--- a/data/battle_anim_81258BC.s
+++ /dev/null
@@ -1,64 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 2
-gSafariBufferCommands:: @ 8402080
- .4byte SafariHandleGetAttributes
- .4byte sub_812B870
- .4byte sub_812B87C
- .4byte sub_812B888
- .4byte sub_812B894
- .4byte sub_812B8A0
- .4byte sub_812B8AC
- .4byte sub_812B8B8
- .4byte sub_812B994
- .4byte sub_812B9A0
- .4byte sub_812B9AC
- .4byte sub_812B9B8
- .4byte sub_812B9C4
- .4byte sub_812BA14
- .4byte sub_812BA70
- .4byte sub_812BA7C
- .4byte SafariHandlePrintString
- .4byte SafariHandlePrintStringPlayerOnly
- .4byte sub_812BB10
- .4byte sub_812BBFC
- .4byte sub_812BC08
- .4byte sub_812BC14
- .4byte sub_812BC54
- .4byte sub_812BC60
- .4byte sub_812BC6C
- .4byte sub_812BC78
- .4byte sub_812BC84
- .4byte sub_812BCC0
- .4byte sub_812BCCC
- .4byte sub_812BCD8
- .4byte sub_812BCE4
- .4byte sub_812BCF0
- .4byte sub_812BCFC
- .4byte sub_812BD08
- .4byte sub_812BD14
- .4byte sub_812BD20
- .4byte sub_812BD2C
- .4byte sub_812BD38
- .4byte sub_812BD44
- .4byte sub_812BD50
- .4byte sub_812BD5C
- .4byte sub_812BD68
- .4byte sub_812BD74
- .4byte sub_812BD80
- .4byte sub_812BDC4
- .4byte sub_812BDF4
- .4byte dp01t_2E_6_battle_intro
- .4byte sub_812BE64
- .4byte sub_812BEB0
- .4byte sub_812BEBC
- .4byte sub_812BEC8
- .4byte sub_812BED4
- .4byte sub_812BEE0
- .4byte sub_812BF3C
- .4byte sub_812BF48
- .4byte sub_812BF54
- .4byte nullsub_78
diff --git a/data/battle_anim_8137220.s b/data/battle_anim_8137220.s
deleted file mode 100644
index c1673af9a..000000000
--- a/data/battle_anim_8137220.s
+++ /dev/null
@@ -1,64 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 2
-gWallyBufferCommands:: @ 84061A4
- .4byte dp01t_00_5_getattr
- .4byte sub_8138230
- .4byte sub_813823C
- .4byte sub_8138C90
- .4byte sub_8138C9C
- .4byte sub_8138CA8
- .4byte sub_8138CB4
- .4byte sub_8138D38
- .4byte sub_8138E04
- .4byte sub_8138ED0
- .4byte sub_8138EDC
- .4byte sub_8138EE8
- .4byte sub_8138EF4
- .4byte sub_8138F44
- .4byte sub_8138FA0
- .4byte sub_8138FAC
- .4byte sub_8139208
- .4byte dp01t_11_5_message_for_player_only
- .4byte sub_8139298
- .4byte sub_8139378
- .4byte sub_8139384
- .4byte sub_81393EC
- .4byte sub_813942C
- .4byte sub_8139438
- .4byte sub_8139444
- .4byte sub_8139544
- .4byte sub_8139550
- .4byte sub_813955C
- .4byte sub_8139568
- .4byte sub_8139574
- .4byte sub_8139580
- .4byte sub_813958C
- .4byte sub_8139598
- .4byte sub_81395A4
- .4byte sub_81395B0
- .4byte sub_81395BC
- .4byte sub_81395C8
- .4byte sub_81395D4
- .4byte sub_81395E0
- .4byte sub_81395EC
- .4byte sub_81395F8
- .4byte sub_8139604
- .4byte sub_8139674
- .4byte sub_8139680
- .4byte sub_81396B0
- .4byte sub_81396E0
- .4byte dp01t_2E_5_battle_intro
- .4byte sub_8139750
- .4byte sub_8139AA0
- .4byte sub_8139B20
- .4byte sub_8139B2C
- .4byte sub_8139B38
- .4byte sub_8139B44
- .4byte sub_8139BA0
- .4byte sub_8139BAC
- .4byte sub_8139BB8
- .4byte nullsub_80
diff --git a/data/battle_moves.inc b/data/battle_moves.s
index ff7e2cb33..ea32446d2 100644
--- a/data/battle_moves.inc
+++ b/data/battle_moves.s
@@ -1,3 +1,8 @@
+ .include "asm/macros.inc"
+ .include "constants/constants.inc"
+
+ .section .rodata
+
.align 2
gBattleMoves:: @ 81FB12C
@ NONE
diff --git a/data/battle_scripts_1.s b/data/battle_scripts_1.s
index 0945d75c8..e046794b3 100644
--- a/data/battle_scripts_1.s
+++ b/data/battle_scripts_1.s
@@ -3485,7 +3485,7 @@ BattleScript_PerishSongTimerGoesDown:: @ 81D921D
waitmessage 64
end2
-gUnknown_081D9224:: @ 81D9224
+BattleScript_AllStatsUp:: @ 81D9224
jumpifstat USER, 3, 1, 12, BattleScript_1D9251
jumpifstat USER, 3, 2, 12, BattleScript_1D9251
jumpifstat USER, 3, 3, 12, BattleScript_1D9251
@@ -3659,7 +3659,7 @@ BattleScript_1D93EC: @ 81D93EC
waitmessage 64
jump BattleScript_EndTurn
-gUnknown_081D93FA:: @ 81D93FA
+BattleScript_AtkDefDown:: @ 81D93FA
setbyte 0x20160dc, 0
playstatchangeanimation USER, 6, 13
playstatchangeanimation USER, 2, 9
@@ -3731,7 +3731,7 @@ BattleScript_OneHitKOMsg:: @ 81D94A9
waitmessage 64
return
-gUnknown_081D94B0:: @ 81D94B0
+BattleScript_SAtkDown2:: @ 81D94B0
setbyte 0x20160dc, 0
playstatchangeanimation USER, 16, 11
setbyte 0x201601e, 164
diff --git a/data/battle_transition.s b/data/battle_transition.s
deleted file mode 100644
index 0d463ddef..000000000
--- a/data/battle_transition.s
+++ /dev/null
@@ -1,399 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 2
-gUnknown_083FBB88:: @ 83FBB88
- .incbin "graphics/battle_transitions/big_pokeball.4bpp"
-
- .align 2
-gUnknown_083FC108:: @ 83FC108
- .incbin "graphics/battle_transitions/pokeball_trail.4bpp"
-
- .align 2
-gSpriteImage_83FC148:: @ 83FC148
- .incbin "graphics/battle_transitions/pokeball.4bpp"
-
- .align 2
-gUnknown_083FC348:: @ 83FC348
- .incbin "graphics/battle_transitions/elite_four_bg.4bpp"
-
- .align 2
-gSpriteImage_83FC528:: @ 83FC528
- .incbin "graphics/battle_transitions/unused_brendan.4bpp"
-
- .align 2
-gSpriteImage_83FCD28:: @ 83FCD28
- .incbin "graphics/battle_transitions/unused_lass.4bpp"
-
- .align 2
-gUnknown_083FD528:: @ 83FD528
- .incbin "graphics/battle_transitions/shrinking_box.4bpp"
-
- .align 2
-gUnknown_083FD708:: @ 83FD708
- .4byte 0x0200c000
-
- .align 2
-gUnknown_083FD70C:: @ 83FD70C
- .4byte sub_811AC64
- .4byte sub_811AC64
- .4byte sub_811AC64
- .4byte sub_811AC64
- .4byte sub_811AC64
- .4byte sub_811AC64
- .4byte sub_811AC64
- .4byte sub_811AC64
- .4byte sub_811AC64
- .4byte sub_811AC64
- .4byte sub_811AC64
- .4byte sub_811AC64
- .4byte sub_811AC64
- .4byte sub_811AC64
- .4byte sub_811AC64
- .4byte sub_811AC64
- .4byte sub_811AC64
-
- .align 2
-gBattleTransitionFuncs:: @ 83FD750
- .4byte sub_811ACB4
- .4byte sub_811ADAC
- .4byte sub_811AF44
- .4byte sub_811B0F0
- .4byte sub_811B578
- .4byte sub_811B7E8
- .4byte sub_811BCBC
- .4byte sub_811BEA0
- .4byte sub_811CA5C
- .4byte sub_811CCDC
- .4byte sub_811D0B8
- .4byte sub_811D1C8
- .4byte sub_811C08C
- .4byte sub_811C0AC
- .4byte sub_811C0CC
- .4byte sub_811C0EC
- .4byte sub_811C10C
-
- .align 2
-gUnknown_083FD794:: @ 83FD794
- .4byte sub_811AB88
- .4byte sub_811ABD8
- .4byte sub_811AC0C
- .4byte sub_811AC34
-
- .align 2
-gUnknown_083FD7A4:: @ 83FD7A4
- .4byte sub_811ACEC
- .4byte sub_811AD1C
- .4byte sub_811AD80
-
- .align 2
-gUnknown_083FD7B0:: @ 83FD7B0
- .4byte sub_811ADE4
- .4byte sub_811AE70
-
- .align 2
-gUnknown_083FD7B8:: @ 83FD7B8
- .4byte sub_811AF7C
- .4byte sub_811B000
-
- .align 2
-gUnknown_083FD7C0:: @ 83FD7C0
- .4byte sub_811B128
- .4byte sub_811B1D8
- .4byte sub_811B268
- .4byte sub_811B2F4
- .4byte sub_811B380
- .4byte sub_811B3EC
-
- .align 2
-gUnknown_083FD7D8:: @ 83FD7D8
- .4byte sub_811B5B0
- .4byte sub_811B5FC
- .4byte sub_811B688
-
- .align 1
-gUnknown_083FD7E4:: @ 83FD7E4
- .2byte -16
- .2byte 256
-
- .align 1
-gUnknown_083FD7E8:: @ 83FD7E8
- .2byte 0
- .2byte 32
- .2byte 64
- .2byte 18
- .2byte 48
-
- .align 1
-gUnknown_083FD7F2:: @ 83FD7F2
- .2byte 8
- .2byte -8
-
- .align 2
-gUnknown_083FD7F8:: @ 83FD7F8
- .4byte sub_811B820
- .4byte sub_811B884
- .4byte sub_811B90C
- .4byte sub_811B9F0
- .4byte sub_811BA70
- .4byte sub_811BB60
- .4byte sub_811BBEC
-
- .align 2
-gUnknown_083FD814:: @ 83FD814
- .4byte sub_811BCF4
- .4byte sub_811BD60
-
- .align 2
-gUnknown_083FD81C:: @ 83FD81C
- .4byte sub_811BED8
- .4byte sub_811BF2C
- .4byte sub_811BFC4
-
- .align 2
-gUnknown_083FD828:: @ 83FD828
- .4byte sub_811C164
- .4byte sub_811C1CC
- .4byte sub_811C2A4
- .4byte sub_811C38C
- .4byte sub_811C400
- .4byte sub_811C43C
- .4byte sub_811C4F0
- .4byte sub_811C5B4
- .4byte sub_811C5E8
- .4byte sub_811C630
-
-gUnknown_083FD850:: @ 83FD850
- .byte TRAINER_PIC_SIDNEY
- .byte TRAINER_PIC_PHOEBE
- .byte TRAINER_PIC_GLACIA
- .byte TRAINER_PIC_DRAKE
- .byte TRAINER_PIC_STEVEN
-
- .align 1
-gUnknown_083FD856:: @ 83FD856
- .2byte 0x200, 0x200
- .2byte 0x200, 0x200
- .2byte 0x1B0, 0x1B0
- .2byte 0x1A0, 0x1A0
- .2byte 0x188, 0x188
-
- .align 1
-gUnknown_083FD86A:: @ 83FD86A
- .2byte 0, 0
- .2byte 0, 0
- .2byte -4, 4
- .2byte 0, 5
- .2byte 0, 7
-
- .align 2
-gUnknown_083FD880:: @ 83FD880
- .4byte sub_811C934
- .4byte sub_811C938
- .4byte sub_811C984
- .4byte sub_811C9B8
- .4byte sub_811C934
- .4byte sub_811C9E4
- .4byte sub_811C934
-
- .align 1
-gUnknown_083FD89C:: @ 83FD89C
- .2byte 12, -12
-
- .align 1
-gUnknown_083FD8A0:: @ 83FD8A0
- .2byte -1, 1
-
- .align 2
-gUnknown_083FD8A4:: @ 83FD8A4
- .4byte sub_811CA94
- .4byte sub_811CB20
- .4byte sub_811CBE8
-
- .align 2
-gUnknown_083FD8B0:: @ 83FD8B0
- .4byte sub_811CD14
- .4byte sub_811CDA0
- .4byte sub_811CE14
- .4byte sub_811CE4C
- .4byte sub_811CEB0
-
- .align 1
-gUnknown_083FD8C4:: @ 83FD8C4
- .2byte 0
- .2byte 20
- .2byte 15
- .2byte 40
- .2byte 10
- .2byte 25
- .2byte 35
- .2byte 5
-
- .align 2
-gUnknown_083FD8D4:: @ 83FD8D4
- .4byte sub_811D0F0
- .4byte sub_811D144
- .4byte sub_811D19C
-
- .align 2
-gUnknown_083FD8E0:: @ 83FD8E0
- .4byte sub_811D200
- .4byte sub_811D260
- .4byte sub_811D2D8
- .4byte sub_811D3B0
- .4byte sub_811D41C
-
- .align 1
-gUnknown_083FD8F4:: @ 83FD8F4
- .2byte 56, 0, 0, 160, 0
- .2byte 104, 160, 240, 88, 1
- .2byte 240, 72, 56, 0, 1
- .2byte 0, 32, 144, 160, 0
- .2byte 144, 160, 184, 0, 1
- .2byte 56, 0, 168, 160, 0
- .2byte 168, 160, 48, 0, 1
-
- .align 1
-gUnknown_083FD93A:: @ 83FD93A
- .2byte 8
- .2byte 4
- .2byte 2
- .2byte 1
- .2byte 1
- .2byte 1
- .2byte 0
-
- .align 2
-gUnknown_083FD948:: @ 83FD948
- .4byte sub_811D584
- .4byte sub_811D5E0
-
- .align 2
-gSpriteImageTable_83FD950:: @ 83FD950
- obj_frame_tiles gSpriteImage_83FC148, 0x200
-
- .align 2
-gSpriteAnim_83FD958:: @ 83FD958
- obj_image_anim_frame 0, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83FD960:: @ 83FD960
- .4byte gSpriteAnim_83FD958
-
- .align 2
-gSpriteAffineAnim_83FD964:: @ 83FD964
- obj_rot_scal_anim_frame 0x0, 0x0, -4, 1
- obj_rot_scal_anim_jump 0
-
- .align 2
-gSpriteAffineAnim_83FD974:: @ 83FD974
- obj_rot_scal_anim_frame 0x0, 0x0, 4, 1
- obj_rot_scal_anim_jump 0
-
- .align 2
-gSpriteAffineAnimTable_83FD984:: @ 83FD984
- .4byte gSpriteAffineAnim_83FD964
- .4byte gSpriteAffineAnim_83FD974
-
- .align 2
-gSpriteTemplate_83FD98C:: @ 83FD98C
- spr_template 0xFFFF, 4105, gFieldOamData_32x32, gSpriteAnimTable_83FD960, gSpriteImageTable_83FD950, gSpriteAffineAnimTable_83FD984, sub_811B720
-
- .align 2
-gOamData_83FD9A4:: @ 83FD9A4
- .2byte 0x0000
- .2byte 0xC000
- .2byte 0x0000
-
- .align 2
-gSpriteImageTable_83FD9AC:: @ 83FD9AC
- obj_frame_tiles gSpriteImage_83FC528, 0x800
-
- .align 2
-gSpriteImageTable_83FD9B4:: @ 83FD9B4
- obj_frame_tiles gSpriteImage_83FCD28, 0x800
-
- .align 2
-gSpriteAnim_83FD9BC:: @ 83FD9BC
- obj_image_anim_frame 0, 1
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_83FD9C4:: @ 83FD9C4
- .4byte gSpriteAnim_83FD9BC
-
- .align 2
-gSpriteTemplate_83FD9C8:: @ 83FD9C8
- spr_template 0xFFFF, 4106, gOamData_83FD9A4, gSpriteAnimTable_83FD9C4, gSpriteImageTable_83FD9AC, gDummySpriteAffineAnimTable, sub_811C90C
-
- .align 2
-gSpriteTemplate_83FD9E0:: @ 83FD9E0
- spr_template 0xFFFF, 4106, gOamData_83FD9A4, gSpriteAnimTable_83FD9C4, gSpriteImageTable_83FD9B4, gDummySpriteAffineAnimTable, sub_811C90C
-
- .align 2
-gFieldEffectObjectPalette10:: @ 83FD9F8
- .incbin "graphics/field_effect_objects/palettes/10.gbapal"
-
- .align 2
-gFieldEffectObjectPaletteInfo10:: @ 83FDA18
- obj_pal gFieldEffectObjectPalette10, 0x1009
-
- .align 2
-Unknown_83FDA20:
- .incbin "graphics/battle_transitions/sidney_bg.gbapal"
-
- .align 2
-Unknown_83FDA40:
- .incbin "graphics/battle_transitions/phoebe_bg.gbapal"
-
- .align 2
-Unknown_83FDA60:
- .incbin "graphics/battle_transitions/glacia_bg.gbapal"
-
- .align 2
-Unknown_83FDA80:
- .incbin "graphics/battle_transitions/drake_bg.gbapal"
-
- .align 2
-Unknown_83FDAA0:
- .incbin "graphics/battle_transitions/steven_bg.gbapal"
-
- .align 2
-Unknown_83FDAC0:
- .incbin "graphics/battle_transitions/brendan_bg.gbapal"
-
- .align 2
-Unknown_83FDAE0:
- .incbin "graphics/battle_transitions/may_bg.gbapal"
-
- .align 2
-gUnknown_083FDB00:: @ 83FDB00
- .4byte Unknown_83FDA20
- .4byte Unknown_83FDA40
- .4byte Unknown_83FDA60
- .4byte Unknown_83FDA80
- .4byte Unknown_83FDAA0
-
- .align 2
-gUnknown_083FDB14:: @ 83FDB14
- .4byte Unknown_83FDAC0
- .4byte Unknown_83FDAE0
-
- .align 2
-UnusedTrainerPalette:
- .incbin "graphics/battle_transitions/unused_trainer.gbapal"
-
- .align 2
-gSpritePalette_UnusedTrainer:: @ 83FDB3C
- obj_pal UnusedTrainerPalette, 0x100A
-
- .align 2
-gUnknown_083FDB44:: @ 83FDB44
- .incbin "graphics/battle_transitions/big_pokeball_map.bin"
-
- .align 2
-gUnknown_083FDFF4:: @ 83FDFF4
- .incbin "graphics/battle_transitions/elite_four_bg_map.bin"
diff --git a/data/data2b.s b/data/data2b.s
index 5fb3fa982..329384396 100644
--- a/data/data2b.s
+++ b/data/data2b.s
@@ -3,90 +3,6 @@
.section .rodata
- .string "ターン$" @ "turn"
-
- .align 2
-gPlayerBufferCommands:: @ 81FAD98
- .4byte PlayerHandleGetAttributes
- .4byte sub_802ECF0
- .4byte PlayerHandleSetAttributes
- .4byte sub_802F7CC
- .4byte PlayerHandleLoadPokeSprite
- .4byte PlayerHandleSendOutPoke
- .4byte PlayerHandleReturnPokeToBall
- .4byte PlayerHandleTrainerThrow
- .4byte PlayerHandleTrainerSlide
- .4byte PlayerHandleTrainerSlideBack
- .4byte sub_802FE7C
- .4byte sub_802FF60
- .4byte sub_802FF80
- .4byte PlayerHandleBallThrow
- .4byte PlayerHandlePuase
- .4byte PlayerHandleMoveAnimation
- .4byte PlayerHandlePrintString
- .4byte PlayerHandlePrintStringPlayerOnly
- .4byte sub_803037C
- .4byte nullsub_42
- .4byte sub_8030468
- .4byte PlayerHandleOpenBag
- .4byte sub_8030594
- .4byte sub_8030674
- .4byte PlayerHandleHealthBarUpdate
- .4byte PlayerHandleExpBarUpdate
- .4byte PlayerHandleStatusIconUpdate
- .4byte PlayerHandleStatusAnimation
- .4byte PlayerHandleStatusXor
- .4byte sub_803097C
- .4byte PlayerHandleDMATransfer
- .4byte sub_8030A3C
- .4byte sub_8030A6C
- .4byte sub_8030A78
- .4byte sub_8030A8C
- .4byte sub_8030AA0
- .4byte sub_8030AB4
- .4byte sub_8030AC8
- .4byte sub_8030AE4
- .4byte sub_8030B1C
- .4byte sub_8030B34
- .4byte PlayerHandleHitAnimation
- .4byte sub_8030BCC
- .4byte PlayerHandleEffectivenessSound
- .4byte sub_8030C1C
- .4byte PlayerHandleFaintingCry
- .4byte PlayerHandleIntroSlide
- .4byte PlayerHandleTrainerBallThrow
- .4byte sub_8030FAC
- .4byte sub_80310A4
- .4byte sub_80310F0
- .4byte PlayerHandleSpriteInvisibility
- .4byte PlayerHandleBattleAnimation
- .4byte PlayerHandleLinkStandbyMsg
- .4byte PlayerHandleResetActionMoveSelection
- .4byte sub_80312A0
- .4byte nullsub_43
-
-gUnknown_081FAE7C:: @ 81FAE7C
- .byte 0, 2, 3, 1
-
-gUnknown_081FAE80:: @ 81FAE80
- .string "{PALETTE 5}{COLOR_HIGHLIGHT_SHADOW WHITE LIGHT_BLUE WHITE2}$"
-
-gUnknown_081FAE89:: @ 81FAE89
- .byte 8, 120
- .byte 88, 120
- .byte 8, 136
- .byte 88, 136
-
-gUnknown_081FAE91:: @ 81FAE91
- .byte 144, 120
- .byte 190, 120
- .byte 144, 136
- .byte 190, 136
- .byte 72, 72
- .byte 32, 90
- .byte 80, 80
- .byte 80, 88
-
.align 2
gUnknown_081FAEA4:: @ 81FAEA4
obj_tiles gSmokescreenImpactTiles, 0x180, 55019
@@ -160,129 +76,3 @@ gUnknown_081FAF4C:: @ 81FAF4C
.4byte 0x0200a000
.4byte 0x0200c000
.4byte 0x0200e000
-
- .align 2
-gOpponentBufferCommands:: @ 81FAF5C
- .4byte OpponentHandleGetAttributes
- .4byte dp01t_01_2_read_pokmon_data_slice
- .4byte OpponentHandleSetAttributes
- .4byte sub_8034744
- .4byte OpponentHandleLoadPokeSprite
- .4byte OpponentHandleSendOutPoke
- .4byte OpponentHandleReturnPokeToBall
- .4byte OpponentHandleTrainerThrow
- .4byte OpponentHandleTrainerSlide
- .4byte OpponentHandleTrainerSlideBack
- .4byte sub_8035030
- .4byte sub_80350D4
- .4byte sub_80350E0
- .4byte OpponentHandleBallThrow
- .4byte OpponentHandlePause
- .4byte OpponentHandleMoveAnimation
- .4byte OpponentHandlePrintString
- .4byte OpponentHandlePrintStringPlayerOnly
- .4byte sub_803540C
- .4byte sub_803541C
- .4byte sub_8035428
- .4byte sub_8035590
- .4byte sub_80355C0
- .4byte sub_80356C0
- .4byte OpponentHandleHealthBarUpdate
- .4byte OpponentHandleExpBarUpdate
- .4byte OpponentHandleStatusIconUpdate
- .4byte OpponentHandleStatusAnimation
- .4byte OpponentHandleStatusXor
- .4byte sub_80358B0
- .4byte OpponentHandleDMATransfer
- .4byte sub_80358C8
- .4byte sub_80358D4
- .4byte sub_80358E0
- .4byte sub_80358EC
- .4byte sub_80358F8
- .4byte sub_8035904
- .4byte sub_8035910
- .4byte sub_803592C
- .4byte sub_8035964
- .4byte sub_803597C
- .4byte OpponentHandleHitAnimation
- .4byte sub_8035A14
- .4byte OpponentHandleEffectivenessSound
- .4byte sub_8035A64
- .4byte OpponentHandleFaintingCry
- .4byte dp01t_2E_7_battle_intro
- .4byte sub_8035B04
- .4byte dp01t_30_7_0803D67C
- .4byte sub_8035E6C
- .4byte sub_8035EB8
- .4byte OpponentHandleSpriteInvisibility
- .4byte OpponentHandleBattleAnimation
- .4byte OpponentHandleLinkStandbyMsg
- .4byte OpponentHandleResetActionMoveSelection
- .4byte sub_8035FA4
- .4byte nullsub_46
-
-@ unreferenced unknown values
- .byte 0xB0, 0xB0, 0xC8, 0x98, 0x28, 0x28, 0x28, 0x20
-
- .align 2
-gLinkOpponentBufferCommands:: @ 81FB048
- .4byte LinkOpponentHandleGetAttributes
- .4byte sub_803889C
- .4byte sub_80388A8
- .4byte sub_8039220
- .4byte sub_8039294
- .4byte sub_80393E4
- .4byte sub_80395B4
- .4byte sub_80396D0
- .4byte sub_80398A4
- .4byte sub_80398B0
- .4byte sub_803995C
- .4byte sub_8039A00
- .4byte sub_8039A0C
- .4byte sub_8039A18
- .4byte sub_8039A24
- .4byte sub_8039A30
- .4byte sub_8039CC8
- .4byte sub_8039D2C
- .4byte sub_8039D38
- .4byte sub_8039D44
- .4byte sub_8039D50
- .4byte sub_8039D5C
- .4byte sub_8039D68
- .4byte sub_8039D74
- .4byte sub_8039D80
- .4byte sub_8039E70
- .4byte sub_8039E7C
- .4byte sub_8039EF0
- .4byte sub_8039F58
- .4byte sub_8039F64
- .4byte sub_8039F70
- .4byte sub_8039F7C
- .4byte sub_8039F88
- .4byte sub_8039F94
- .4byte sub_8039FA0
- .4byte sub_8039FAC
- .4byte sub_8039FB8
- .4byte sub_8039FC4
- .4byte sub_8039FE0
- .4byte sub_803A018
- .4byte sub_803A030
- .4byte dp01t_29_4_blink
- .4byte sub_803A0C8
- .4byte sub_803A0D4
- .4byte sub_803A118
- .4byte sub_803A148
- .4byte dp01t_2E_4_battle_intro
- .4byte sub_803A1B8
- .4byte sub_803A3DC
- .4byte sub_803A520
- .4byte sub_803A56C
- .4byte sub_803A578
- .4byte bx_exec_buffer_A_ch0_tbl4
- .4byte sub_803A640
- .4byte sub_803A64C
- .4byte sub_803A658
- .4byte nullsub_48
-
-@ 81FB12C
- .include "data/battle_moves.inc"
diff --git a/data/daycare.s b/data/daycare.s
deleted file mode 100644
index 92eb4637e..000000000
--- a/data/daycare.s
+++ /dev/null
@@ -1,17 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
-@ 82091DC
- .include "data/egg_moves.inc"
-
- .align 2
-gUnknown_08209AC4:: @ 8209AC4
- .4byte DaycareText_GetAlongVeryWell
- .4byte DaycareText_GetAlong
- .4byte DaycareText_DontLikeOther
- .4byte DaycareText_PlayOther
-
-gUnknown_08209AD4:: @ 8209AD4
- .string "タマゴ$"
diff --git a/data/egg_moves.inc b/data/egg_moves.inc
deleted file mode 100644
index e684e04ce..000000000
--- a/data/egg_moves.inc
+++ /dev/null
@@ -1,1306 +0,0 @@
- .align 2
-gEggMoves:: @ 82091DC
- egg_moves_begin SPECIES_BULBASAUR
- .2byte MOVE_LIGHT_SCREEN
- .2byte MOVE_SKULL_BASH
- .2byte MOVE_SAFEGUARD
- .2byte MOVE_CHARM
- .2byte MOVE_PETAL_DANCE
- .2byte MOVE_MAGICAL_LEAF
- .2byte MOVE_GRASS_WHISTLE
- .2byte MOVE_CURSE
-
- egg_moves_begin SPECIES_CHARMANDER
- .2byte MOVE_BELLY_DRUM
- .2byte MOVE_ANCIENT_POWER
- .2byte MOVE_ROCK_SLIDE
- .2byte MOVE_BITE
- .2byte MOVE_OUTRAGE
- .2byte MOVE_BEAT_UP
- .2byte MOVE_SWORDS_DANCE
- .2byte MOVE_DRAGON_DANCE
-
- egg_moves_begin SPECIES_SQUIRTLE
- .2byte MOVE_MIRROR_COAT
- .2byte MOVE_HAZE
- .2byte MOVE_MIST
- .2byte MOVE_FORESIGHT
- .2byte MOVE_FLAIL
- .2byte MOVE_REFRESH
- .2byte MOVE_MUD_SPORT
- .2byte MOVE_YAWN
-
- egg_moves_begin SPECIES_PIDGEY
- .2byte MOVE_PURSUIT
- .2byte MOVE_FAINT_ATTACK
- .2byte MOVE_FORESIGHT
- .2byte MOVE_STEEL_WING
- .2byte MOVE_AIR_CUTTER
-
- egg_moves_begin SPECIES_RATTATA
- .2byte MOVE_SCREECH
- .2byte MOVE_FLAME_WHEEL
- .2byte MOVE_FURY_SWIPES
- .2byte MOVE_BITE
- .2byte MOVE_COUNTER
- .2byte MOVE_REVERSAL
- .2byte MOVE_UPROAR
- .2byte MOVE_SWAGGER
-
- egg_moves_begin SPECIES_SPEAROW
- .2byte MOVE_FAINT_ATTACK
- .2byte MOVE_FALSE_SWIPE
- .2byte MOVE_SCARY_FACE
- .2byte MOVE_QUICK_ATTACK
- .2byte MOVE_TRI_ATTACK
- .2byte MOVE_ASTONISH
- .2byte MOVE_SKY_ATTACK
-
- egg_moves_begin SPECIES_EKANS
- .2byte MOVE_PURSUIT
- .2byte MOVE_SLAM
- .2byte MOVE_SPITE
- .2byte MOVE_BEAT_UP
- .2byte MOVE_POISON_FANG
-
- egg_moves_begin SPECIES_SANDSHREW
- .2byte MOVE_FLAIL
- .2byte MOVE_SAFEGUARD
- .2byte MOVE_COUNTER
- .2byte MOVE_RAPID_SPIN
- .2byte MOVE_ROCK_SLIDE
- .2byte MOVE_METAL_CLAW
- .2byte MOVE_SWORDS_DANCE
- .2byte MOVE_CRUSH_CLAW
-
- egg_moves_begin SPECIES_NIDORAN_F
- .2byte MOVE_SUPERSONIC
- .2byte MOVE_DISABLE
- .2byte MOVE_TAKE_DOWN
- .2byte MOVE_FOCUS_ENERGY
- .2byte MOVE_CHARM
- .2byte MOVE_COUNTER
- .2byte MOVE_BEAT_UP
-
- egg_moves_begin SPECIES_NIDORAN_M
- .2byte MOVE_COUNTER
- .2byte MOVE_DISABLE
- .2byte MOVE_SUPERSONIC
- .2byte MOVE_TAKE_DOWN
- .2byte MOVE_AMNESIA
- .2byte MOVE_CONFUSION
- .2byte MOVE_BEAT_UP
-
- egg_moves_begin SPECIES_VULPIX
- .2byte MOVE_FAINT_ATTACK
- .2byte MOVE_HYPNOSIS
- .2byte MOVE_FLAIL
- .2byte MOVE_SPITE
- .2byte MOVE_DISABLE
- .2byte MOVE_HOWL
- .2byte MOVE_PSYCH_UP
- .2byte MOVE_HEAT_WAVE
-
- egg_moves_begin SPECIES_ZUBAT
- .2byte MOVE_QUICK_ATTACK
- .2byte MOVE_PURSUIT
- .2byte MOVE_FAINT_ATTACK
- .2byte MOVE_GUST
- .2byte MOVE_WHIRLWIND
- .2byte MOVE_CURSE
-
- egg_moves_begin SPECIES_ODDISH
- .2byte MOVE_SWORDS_DANCE
- .2byte MOVE_RAZOR_LEAF
- .2byte MOVE_FLAIL
- .2byte MOVE_SYNTHESIS
- .2byte MOVE_CHARM
- .2byte MOVE_INGRAIN
-
- egg_moves_begin SPECIES_PARAS
- .2byte MOVE_FALSE_SWIPE
- .2byte MOVE_SCREECH
- .2byte MOVE_COUNTER
- .2byte MOVE_PSYBEAM
- .2byte MOVE_FLAIL
- .2byte MOVE_SWEET_SCENT
- .2byte MOVE_LIGHT_SCREEN
- .2byte MOVE_PURSUIT
-
- egg_moves_begin SPECIES_VENONAT
- .2byte MOVE_BATON_PASS
- .2byte MOVE_SCREECH
- .2byte MOVE_GIGA_DRAIN
- .2byte MOVE_SIGNAL_BEAM
-
- egg_moves_begin SPECIES_DIGLETT
- .2byte MOVE_FAINT_ATTACK
- .2byte MOVE_SCREECH
- .2byte MOVE_ANCIENT_POWER
- .2byte MOVE_PURSUIT
- .2byte MOVE_BEAT_UP
- .2byte MOVE_UPROAR
- .2byte MOVE_ROCK_SLIDE
-
- egg_moves_begin SPECIES_MEOWTH
- .2byte MOVE_SPITE
- .2byte MOVE_CHARM
- .2byte MOVE_HYPNOSIS
- .2byte MOVE_AMNESIA
- .2byte MOVE_PSYCH_UP
- .2byte MOVE_ASSIST
-
- egg_moves_begin SPECIES_PSYDUCK
- .2byte MOVE_HYPNOSIS
- .2byte MOVE_PSYBEAM
- .2byte MOVE_FORESIGHT
- .2byte MOVE_LIGHT_SCREEN
- .2byte MOVE_FUTURE_SIGHT
- .2byte MOVE_PSYCHIC
- .2byte MOVE_CROSS_CHOP
- .2byte MOVE_REFRESH
-
- egg_moves_begin SPECIES_MANKEY
- .2byte MOVE_ROCK_SLIDE
- .2byte MOVE_FORESIGHT
- .2byte MOVE_MEDITATE
- .2byte MOVE_COUNTER
- .2byte MOVE_REVERSAL
- .2byte MOVE_BEAT_UP
- .2byte MOVE_REVENGE
- .2byte MOVE_SMELLING_SALT
-
- egg_moves_begin SPECIES_GROWLITHE
- .2byte MOVE_BODY_SLAM
- .2byte MOVE_SAFEGUARD
- .2byte MOVE_CRUNCH
- .2byte MOVE_THRASH
- .2byte MOVE_FIRE_SPIN
- .2byte MOVE_HOWL
- .2byte MOVE_HEAT_WAVE
-
- egg_moves_begin SPECIES_POLIWAG
- .2byte MOVE_MIST
- .2byte MOVE_SPLASH
- .2byte MOVE_BUBBLE_BEAM
- .2byte MOVE_HAZE
- .2byte MOVE_MIND_READER
- .2byte MOVE_WATER_SPORT
- .2byte MOVE_ICE_BALL
-
- egg_moves_begin SPECIES_ABRA
- .2byte MOVE_ENCORE
- .2byte MOVE_BARRIER
- .2byte MOVE_KNOCK_OFF
- .2byte MOVE_FIRE_PUNCH
- .2byte MOVE_THUNDER_PUNCH
- .2byte MOVE_ICE_PUNCH
-
- egg_moves_begin SPECIES_MACHOP
- .2byte MOVE_LIGHT_SCREEN
- .2byte MOVE_MEDITATE
- .2byte MOVE_ROLLING_KICK
- .2byte MOVE_ENCORE
- .2byte MOVE_SMELLING_SALT
- .2byte MOVE_COUNTER
- .2byte MOVE_ROCK_SLIDE
-
- egg_moves_begin SPECIES_BELLSPROUT
- .2byte MOVE_SWORDS_DANCE
- .2byte MOVE_ENCORE
- .2byte MOVE_REFLECT
- .2byte MOVE_SYNTHESIS
- .2byte MOVE_LEECH_LIFE
- .2byte MOVE_INGRAIN
- .2byte MOVE_MAGICAL_LEAF
-
- egg_moves_begin SPECIES_TENTACOOL
- .2byte MOVE_AURORA_BEAM
- .2byte MOVE_MIRROR_COAT
- .2byte MOVE_RAPID_SPIN
- .2byte MOVE_HAZE
- .2byte MOVE_SAFEGUARD
- .2byte MOVE_CONFUSE_RAY
-
- egg_moves_begin SPECIES_GEODUDE
- .2byte MOVE_MEGA_PUNCH
- .2byte MOVE_ROCK_SLIDE
- .2byte MOVE_BLOCK
-
- egg_moves_begin SPECIES_PONYTA
- .2byte MOVE_FLAME_WHEEL
- .2byte MOVE_THRASH
- .2byte MOVE_DOUBLE_KICK
- .2byte MOVE_HYPNOSIS
- .2byte MOVE_CHARM
- .2byte MOVE_DOUBLE_EDGE
-
- egg_moves_begin SPECIES_SLOWPOKE
- .2byte MOVE_SAFEGUARD
- .2byte MOVE_BELLY_DRUM
- .2byte MOVE_FUTURE_SIGHT
- .2byte MOVE_STOMP
- .2byte MOVE_MUD_SPORT
- .2byte MOVE_SLEEP_TALK
- .2byte MOVE_SNORE
-
- egg_moves_begin SPECIES_FARFETCHD
- .2byte MOVE_STEEL_WING
- .2byte MOVE_FORESIGHT
- .2byte MOVE_MIRROR_MOVE
- .2byte MOVE_GUST
- .2byte MOVE_QUICK_ATTACK
- .2byte MOVE_FLAIL
- .2byte MOVE_FEATHER_DANCE
- .2byte MOVE_CURSE
-
- egg_moves_begin SPECIES_DODUO
- .2byte MOVE_QUICK_ATTACK
- .2byte MOVE_SUPERSONIC
- .2byte MOVE_HAZE
- .2byte MOVE_FAINT_ATTACK
- .2byte MOVE_FLAIL
- .2byte MOVE_ENDEAVOR
-
- egg_moves_begin SPECIES_SEEL
- .2byte MOVE_LICK
- .2byte MOVE_PERISH_SONG
- .2byte MOVE_DISABLE
- .2byte MOVE_HORN_DRILL
- .2byte MOVE_SLAM
- .2byte MOVE_ENCORE
- .2byte MOVE_FAKE_OUT
- .2byte MOVE_ICICLE_SPEAR
-
- egg_moves_begin SPECIES_GRIMER
- .2byte MOVE_HAZE
- .2byte MOVE_MEAN_LOOK
- .2byte MOVE_LICK
- .2byte MOVE_IMPRISON
- .2byte MOVE_CURSE
- .2byte MOVE_SHADOW_PUNCH
- .2byte MOVE_EXPLOSION
-
- egg_moves_begin SPECIES_SHELLDER
- .2byte MOVE_BUBBLE_BEAM
- .2byte MOVE_TAKE_DOWN
- .2byte MOVE_BARRIER
- .2byte MOVE_RAPID_SPIN
- .2byte MOVE_SCREECH
- .2byte MOVE_ICICLE_SPEAR
-
- egg_moves_begin SPECIES_GASTLY
- .2byte MOVE_PSYWAVE
- .2byte MOVE_PERISH_SONG
- .2byte MOVE_HAZE
- .2byte MOVE_ASTONISH
- .2byte MOVE_WILL_O_WISP
- .2byte MOVE_GRUDGE
- .2byte MOVE_EXPLOSION
-
- egg_moves_begin SPECIES_ONIX
- .2byte MOVE_ROCK_SLIDE
- .2byte MOVE_FLAIL
- .2byte MOVE_EXPLOSION
- .2byte MOVE_BLOCK
-
- egg_moves_begin SPECIES_DROWZEE
- .2byte MOVE_BARRIER
- .2byte MOVE_ASSIST
- .2byte MOVE_ROLE_PLAY
- .2byte MOVE_FIRE_PUNCH
- .2byte MOVE_THUNDER_PUNCH
- .2byte MOVE_ICE_PUNCH
-
- egg_moves_begin SPECIES_KRABBY
- .2byte MOVE_DIG
- .2byte MOVE_HAZE
- .2byte MOVE_AMNESIA
- .2byte MOVE_FLAIL
- .2byte MOVE_SLAM
- .2byte MOVE_KNOCK_OFF
- .2byte MOVE_SWORDS_DANCE
-
- egg_moves_begin SPECIES_EXEGGCUTE
- .2byte MOVE_SYNTHESIS
- .2byte MOVE_MOONLIGHT
- .2byte MOVE_REFLECT
- .2byte MOVE_ANCIENT_POWER
- .2byte MOVE_PSYCH_UP
- .2byte MOVE_INGRAIN
- .2byte MOVE_CURSE
-
- egg_moves_begin SPECIES_CUBONE
- .2byte MOVE_ROCK_SLIDE
- .2byte MOVE_ANCIENT_POWER
- .2byte MOVE_BELLY_DRUM
- .2byte MOVE_SCREECH
- .2byte MOVE_SKULL_BASH
- .2byte MOVE_PERISH_SONG
- .2byte MOVE_SWORDS_DANCE
-
- egg_moves_begin SPECIES_LICKITUNG
- .2byte MOVE_BELLY_DRUM
- .2byte MOVE_MAGNITUDE
- .2byte MOVE_BODY_SLAM
- .2byte MOVE_CURSE
- .2byte MOVE_SMELLING_SALT
- .2byte MOVE_SLEEP_TALK
- .2byte MOVE_SNORE
- .2byte MOVE_SUBSTITUTE
-
- egg_moves_begin SPECIES_KOFFING
- .2byte MOVE_SCREECH
- .2byte MOVE_PSYWAVE
- .2byte MOVE_PSYBEAM
- .2byte MOVE_DESTINY_BOND
- .2byte MOVE_PAIN_SPLIT
- .2byte MOVE_WILL_O_WISP
-
- egg_moves_begin SPECIES_RHYHORN
- .2byte MOVE_CRUNCH
- .2byte MOVE_REVERSAL
- .2byte MOVE_ROCK_SLIDE
- .2byte MOVE_COUNTER
- .2byte MOVE_MAGNITUDE
- .2byte MOVE_SWORDS_DANCE
- .2byte MOVE_CURSE
- .2byte MOVE_CRUSH_CLAW
-
- egg_moves_begin SPECIES_CHANSEY
- .2byte MOVE_PRESENT
- .2byte MOVE_METRONOME
- .2byte MOVE_HEAL_BELL
- .2byte MOVE_AROMATHERAPY
- .2byte MOVE_SUBSTITUTE
-
- egg_moves_begin SPECIES_TANGELA
- .2byte MOVE_FLAIL
- .2byte MOVE_CONFUSION
- .2byte MOVE_MEGA_DRAIN
- .2byte MOVE_REFLECT
- .2byte MOVE_AMNESIA
- .2byte MOVE_LEECH_SEED
- .2byte MOVE_NATURE_POWER
-
- egg_moves_begin SPECIES_KANGASKHAN
- .2byte MOVE_STOMP
- .2byte MOVE_FORESIGHT
- .2byte MOVE_FOCUS_ENERGY
- .2byte MOVE_SAFEGUARD
- .2byte MOVE_DISABLE
- .2byte MOVE_COUNTER
- .2byte MOVE_CRUSH_CLAW
- .2byte MOVE_SUBSTITUTE
-
- egg_moves_begin SPECIES_HORSEA
- .2byte MOVE_FLAIL
- .2byte MOVE_AURORA_BEAM
- .2byte MOVE_OCTAZOOKA
- .2byte MOVE_DISABLE
- .2byte MOVE_SPLASH
- .2byte MOVE_DRAGON_RAGE
- .2byte MOVE_DRAGON_BREATH
-
- egg_moves_begin SPECIES_GOLDEEN
- .2byte MOVE_PSYBEAM
- .2byte MOVE_HAZE
- .2byte MOVE_HYDRO_PUMP
- .2byte MOVE_SLEEP_TALK
- .2byte MOVE_MUD_SPORT
-
- egg_moves_begin SPECIES_MR_MIME
- .2byte MOVE_FUTURE_SIGHT
- .2byte MOVE_HYPNOSIS
- .2byte MOVE_MIMIC
- .2byte MOVE_PSYCH_UP
- .2byte MOVE_FAKE_OUT
- .2byte MOVE_TRICK
-
- egg_moves_begin SPECIES_SCYTHER
- .2byte MOVE_COUNTER
- .2byte MOVE_SAFEGUARD
- .2byte MOVE_BATON_PASS
- .2byte MOVE_RAZOR_WIND
- .2byte MOVE_REVERSAL
- .2byte MOVE_LIGHT_SCREEN
- .2byte MOVE_ENDURE
- .2byte MOVE_SILVER_WIND
-
- egg_moves_begin SPECIES_PINSIR
- .2byte MOVE_FURY_ATTACK
- .2byte MOVE_FLAIL
- .2byte MOVE_FALSE_SWIPE
- .2byte MOVE_FAINT_ATTACK
-
- egg_moves_begin SPECIES_LAPRAS
- .2byte MOVE_FORESIGHT
- .2byte MOVE_SUBSTITUTE
- .2byte MOVE_TICKLE
- .2byte MOVE_REFRESH
- .2byte MOVE_DRAGON_DANCE
- .2byte MOVE_CURSE
- .2byte MOVE_SLEEP_TALK
- .2byte MOVE_HORN_DRILL
-
- egg_moves_begin SPECIES_EEVEE
- .2byte MOVE_CHARM
- .2byte MOVE_FLAIL
- .2byte MOVE_ENDURE
- .2byte MOVE_CURSE
- .2byte MOVE_TICKLE
- .2byte MOVE_WISH
-
- egg_moves_begin SPECIES_OMANYTE
- .2byte MOVE_BUBBLE_BEAM
- .2byte MOVE_AURORA_BEAM
- .2byte MOVE_SLAM
- .2byte MOVE_SUPERSONIC
- .2byte MOVE_HAZE
- .2byte MOVE_ROCK_SLIDE
- .2byte MOVE_SPIKES
-
- egg_moves_begin SPECIES_KABUTO
- .2byte MOVE_BUBBLE_BEAM
- .2byte MOVE_AURORA_BEAM
- .2byte MOVE_RAPID_SPIN
- .2byte MOVE_DIG
- .2byte MOVE_FLAIL
- .2byte MOVE_KNOCK_OFF
- .2byte MOVE_CONFUSE_RAY
-
- egg_moves_begin SPECIES_AERODACTYL
- .2byte MOVE_WHIRLWIND
- .2byte MOVE_PURSUIT
- .2byte MOVE_FORESIGHT
- .2byte MOVE_STEEL_WING
- .2byte MOVE_DRAGON_BREATH
- .2byte MOVE_CURSE
-
- egg_moves_begin SPECIES_SNORLAX
- .2byte MOVE_LICK
- .2byte MOVE_CHARM
- .2byte MOVE_DOUBLE_EDGE
- .2byte MOVE_CURSE
- .2byte MOVE_FISSURE
- .2byte MOVE_SUBSTITUTE
-
- egg_moves_begin SPECIES_DRATINI
- .2byte MOVE_LIGHT_SCREEN
- .2byte MOVE_MIST
- .2byte MOVE_HAZE
- .2byte MOVE_SUPERSONIC
- .2byte MOVE_DRAGON_BREATH
- .2byte MOVE_DRAGON_DANCE
-
- egg_moves_begin SPECIES_CHIKORITA
- .2byte MOVE_VINE_WHIP
- .2byte MOVE_LEECH_SEED
- .2byte MOVE_COUNTER
- .2byte MOVE_ANCIENT_POWER
- .2byte MOVE_FLAIL
- .2byte MOVE_NATURE_POWER
- .2byte MOVE_INGRAIN
- .2byte MOVE_GRASS_WHISTLE
-
- egg_moves_begin SPECIES_CYNDAQUIL
- .2byte MOVE_FURY_SWIPES
- .2byte MOVE_QUICK_ATTACK
- .2byte MOVE_REVERSAL
- .2byte MOVE_THRASH
- .2byte MOVE_FORESIGHT
- .2byte MOVE_COVET
- .2byte MOVE_HOWL
- .2byte MOVE_CRUSH_CLAW
-
- egg_moves_begin SPECIES_TOTODILE
- .2byte MOVE_CRUNCH
- .2byte MOVE_THRASH
- .2byte MOVE_HYDRO_PUMP
- .2byte MOVE_ANCIENT_POWER
- .2byte MOVE_ROCK_SLIDE
- .2byte MOVE_MUD_SPORT
- .2byte MOVE_WATER_SPORT
- .2byte MOVE_DRAGON_CLAW
-
- egg_moves_begin SPECIES_SENTRET
- .2byte MOVE_DOUBLE_EDGE
- .2byte MOVE_PURSUIT
- .2byte MOVE_SLASH
- .2byte MOVE_FOCUS_ENERGY
- .2byte MOVE_REVERSAL
- .2byte MOVE_SUBSTITUTE
- .2byte MOVE_TRICK
- .2byte MOVE_ASSIST
-
- egg_moves_begin SPECIES_HOOTHOOT
- .2byte MOVE_MIRROR_MOVE
- .2byte MOVE_SUPERSONIC
- .2byte MOVE_FAINT_ATTACK
- .2byte MOVE_WING_ATTACK
- .2byte MOVE_WHIRLWIND
- .2byte MOVE_SKY_ATTACK
- .2byte MOVE_FEATHER_DANCE
-
- egg_moves_begin SPECIES_LEDYBA
- .2byte MOVE_PSYBEAM
- .2byte MOVE_BIDE
- .2byte MOVE_SILVER_WIND
-
- egg_moves_begin SPECIES_SPINARAK
- .2byte MOVE_PSYBEAM
- .2byte MOVE_DISABLE
- .2byte MOVE_SONIC_BOOM
- .2byte MOVE_BATON_PASS
- .2byte MOVE_PURSUIT
- .2byte MOVE_SIGNAL_BEAM
-
- egg_moves_begin SPECIES_CHINCHOU
- .2byte MOVE_FLAIL
- .2byte MOVE_SCREECH
- .2byte MOVE_AMNESIA
-
- egg_moves_begin SPECIES_PICHU
- .2byte MOVE_REVERSAL
- .2byte MOVE_BIDE
- .2byte MOVE_PRESENT
- .2byte MOVE_ENCORE
- .2byte MOVE_DOUBLE_SLAP
- .2byte MOVE_WISH
- .2byte MOVE_CHARGE
-
- egg_moves_begin SPECIES_CLEFFA
- .2byte MOVE_PRESENT
- .2byte MOVE_METRONOME
- .2byte MOVE_AMNESIA
- .2byte MOVE_BELLY_DRUM
- .2byte MOVE_SPLASH
- .2byte MOVE_MIMIC
- .2byte MOVE_WISH
- .2byte MOVE_SUBSTITUTE
-
- egg_moves_begin SPECIES_IGGLYBUFF
- .2byte MOVE_PERISH_SONG
- .2byte MOVE_PRESENT
- .2byte MOVE_FAINT_ATTACK
- .2byte MOVE_WISH
- .2byte MOVE_FAKE_TEARS
-
- egg_moves_begin SPECIES_TOGEPI
- .2byte MOVE_PRESENT
- .2byte MOVE_MIRROR_MOVE
- .2byte MOVE_PECK
- .2byte MOVE_FORESIGHT
- .2byte MOVE_FUTURE_SIGHT
- .2byte MOVE_SUBSTITUTE
- .2byte MOVE_PSYCH_UP
-
- egg_moves_begin SPECIES_NATU
- .2byte MOVE_HAZE
- .2byte MOVE_DRILL_PECK
- .2byte MOVE_QUICK_ATTACK
- .2byte MOVE_FAINT_ATTACK
- .2byte MOVE_STEEL_WING
- .2byte MOVE_PSYCH_UP
- .2byte MOVE_FEATHER_DANCE
- .2byte MOVE_REFRESH
-
- egg_moves_begin SPECIES_MAREEP
- .2byte MOVE_TAKE_DOWN
- .2byte MOVE_BODY_SLAM
- .2byte MOVE_SAFEGUARD
- .2byte MOVE_SCREECH
- .2byte MOVE_REFLECT
- .2byte MOVE_ODOR_SLEUTH
- .2byte MOVE_CHARGE
-
- egg_moves_begin SPECIES_MARILL
- .2byte MOVE_LIGHT_SCREEN
- .2byte MOVE_PRESENT
- .2byte MOVE_AMNESIA
- .2byte MOVE_FUTURE_SIGHT
- .2byte MOVE_BELLY_DRUM
- .2byte MOVE_PERISH_SONG
- .2byte MOVE_SUPERSONIC
- .2byte MOVE_SUBSTITUTE
-
- egg_moves_begin SPECIES_SUDOWOODO
- .2byte MOVE_SELF_DESTRUCT
-
- egg_moves_begin SPECIES_HOPPIP
- .2byte MOVE_CONFUSION
- .2byte MOVE_ENCORE
- .2byte MOVE_DOUBLE_EDGE
- .2byte MOVE_REFLECT
- .2byte MOVE_AMNESIA
- .2byte MOVE_HELPING_HAND
- .2byte MOVE_PSYCH_UP
-
- egg_moves_begin SPECIES_AIPOM
- .2byte MOVE_COUNTER
- .2byte MOVE_SCREECH
- .2byte MOVE_PURSUIT
- .2byte MOVE_AGILITY
- .2byte MOVE_SPITE
- .2byte MOVE_SLAM
- .2byte MOVE_DOUBLE_SLAP
- .2byte MOVE_BEAT_UP
-
- egg_moves_begin SPECIES_SUNKERN
- .2byte MOVE_GRASS_WHISTLE
- .2byte MOVE_ENCORE
- .2byte MOVE_LEECH_SEED
- .2byte MOVE_NATURE_POWER
- .2byte MOVE_CURSE
- .2byte MOVE_HELPING_HAND
-
- egg_moves_begin SPECIES_YANMA
- .2byte MOVE_WHIRLWIND
- .2byte MOVE_REVERSAL
- .2byte MOVE_LEECH_LIFE
- .2byte MOVE_SIGNAL_BEAM
- .2byte MOVE_SILVER_WIND
-
- egg_moves_begin SPECIES_WOOPER
- .2byte MOVE_BODY_SLAM
- .2byte MOVE_ANCIENT_POWER
- .2byte MOVE_SAFEGUARD
- .2byte MOVE_CURSE
- .2byte MOVE_MUD_SPORT
- .2byte MOVE_STOCKPILE
- .2byte MOVE_SWALLOW
- .2byte MOVE_SPIT_UP
-
- egg_moves_begin SPECIES_MURKROW
- .2byte MOVE_WHIRLWIND
- .2byte MOVE_DRILL_PECK
- .2byte MOVE_MIRROR_MOVE
- .2byte MOVE_WING_ATTACK
- .2byte MOVE_SKY_ATTACK
- .2byte MOVE_CONFUSE_RAY
- .2byte MOVE_FEATHER_DANCE
- .2byte MOVE_PERISH_SONG
-
- egg_moves_begin SPECIES_MISDREAVUS
- .2byte MOVE_SCREECH
- .2byte MOVE_DESTINY_BOND
- .2byte MOVE_PSYCH_UP
- .2byte MOVE_IMPRISON
-
- egg_moves_begin SPECIES_GIRAFARIG
- .2byte MOVE_TAKE_DOWN
- .2byte MOVE_AMNESIA
- .2byte MOVE_FORESIGHT
- .2byte MOVE_FUTURE_SIGHT
- .2byte MOVE_BEAT_UP
- .2byte MOVE_PSYCH_UP
- .2byte MOVE_WISH
- .2byte MOVE_MAGIC_COAT
-
- egg_moves_begin SPECIES_PINECO
- .2byte MOVE_REFLECT
- .2byte MOVE_PIN_MISSILE
- .2byte MOVE_FLAIL
- .2byte MOVE_SWIFT
- .2byte MOVE_COUNTER
- .2byte MOVE_SAND_TOMB
-
- egg_moves_begin SPECIES_DUNSPARCE
- .2byte MOVE_BIDE
- .2byte MOVE_ANCIENT_POWER
- .2byte MOVE_ROCK_SLIDE
- .2byte MOVE_BITE
- .2byte MOVE_HEADBUTT
- .2byte MOVE_ASTONISH
- .2byte MOVE_CURSE
-
- egg_moves_begin SPECIES_GLIGAR
- .2byte MOVE_METAL_CLAW
- .2byte MOVE_WING_ATTACK
- .2byte MOVE_RAZOR_WIND
- .2byte MOVE_COUNTER
- .2byte MOVE_SAND_TOMB
-
- egg_moves_begin SPECIES_SNUBBULL
- .2byte MOVE_METRONOME
- .2byte MOVE_FAINT_ATTACK
- .2byte MOVE_REFLECT
- .2byte MOVE_PRESENT
- .2byte MOVE_CRUNCH
- .2byte MOVE_HEAL_BELL
- .2byte MOVE_SNORE
- .2byte MOVE_SMELLING_SALT
-
- egg_moves_begin SPECIES_QWILFISH
- .2byte MOVE_FLAIL
- .2byte MOVE_HAZE
- .2byte MOVE_BUBBLE_BEAM
- .2byte MOVE_SUPERSONIC
- .2byte MOVE_ASTONISH
-
- egg_moves_begin SPECIES_SHUCKLE
- .2byte MOVE_SWEET_SCENT
-
- egg_moves_begin SPECIES_HERACROSS
- .2byte MOVE_HARDEN
- .2byte MOVE_BIDE
- .2byte MOVE_FLAIL
- .2byte MOVE_FALSE_SWIPE
-
- egg_moves_begin SPECIES_SNEASEL
- .2byte MOVE_COUNTER
- .2byte MOVE_SPITE
- .2byte MOVE_FORESIGHT
- .2byte MOVE_REFLECT
- .2byte MOVE_BITE
- .2byte MOVE_CRUSH_CLAW
- .2byte MOVE_FAKE_OUT
-
- egg_moves_begin SPECIES_TEDDIURSA
- .2byte MOVE_CRUNCH
- .2byte MOVE_TAKE_DOWN
- .2byte MOVE_SEISMIC_TOSS
- .2byte MOVE_COUNTER
- .2byte MOVE_METAL_CLAW
- .2byte MOVE_FAKE_TEARS
- .2byte MOVE_YAWN
- .2byte MOVE_SLEEP_TALK
-
- egg_moves_begin SPECIES_SLUGMA
- .2byte MOVE_ACID_ARMOR
- .2byte MOVE_HEAT_WAVE
-
- egg_moves_begin SPECIES_SWINUB
- .2byte MOVE_TAKE_DOWN
- .2byte MOVE_BITE
- .2byte MOVE_BODY_SLAM
- .2byte MOVE_ROCK_SLIDE
- .2byte MOVE_ANCIENT_POWER
- .2byte MOVE_MUD_SHOT
- .2byte MOVE_ICICLE_SPEAR
- .2byte MOVE_DOUBLE_EDGE
-
- egg_moves_begin SPECIES_CORSOLA
- .2byte MOVE_ROCK_SLIDE
- .2byte MOVE_SCREECH
- .2byte MOVE_MIST
- .2byte MOVE_AMNESIA
- .2byte MOVE_BARRIER
- .2byte MOVE_INGRAIN
- .2byte MOVE_CONFUSE_RAY
- .2byte MOVE_ICICLE_SPEAR
-
- egg_moves_begin SPECIES_REMORAID
- .2byte MOVE_AURORA_BEAM
- .2byte MOVE_OCTAZOOKA
- .2byte MOVE_SUPERSONIC
- .2byte MOVE_HAZE
- .2byte MOVE_SCREECH
- .2byte MOVE_THUNDER_WAVE
- .2byte MOVE_ROCK_BLAST
-
- egg_moves_begin SPECIES_DELIBIRD
- .2byte MOVE_AURORA_BEAM
- .2byte MOVE_QUICK_ATTACK
- .2byte MOVE_FUTURE_SIGHT
- .2byte MOVE_SPLASH
- .2byte MOVE_RAPID_SPIN
- .2byte MOVE_ICE_BALL
-
- egg_moves_begin SPECIES_MANTINE
- .2byte MOVE_TWISTER
- .2byte MOVE_HYDRO_PUMP
- .2byte MOVE_HAZE
- .2byte MOVE_SLAM
- .2byte MOVE_MUD_SPORT
- .2byte MOVE_ROCK_SLIDE
-
- egg_moves_begin SPECIES_SKARMORY
- .2byte MOVE_DRILL_PECK
- .2byte MOVE_PURSUIT
- .2byte MOVE_WHIRLWIND
- .2byte MOVE_SKY_ATTACK
- .2byte MOVE_CURSE
-
- egg_moves_begin SPECIES_HOUNDOUR
- .2byte MOVE_FIRE_SPIN
- .2byte MOVE_RAGE
- .2byte MOVE_PURSUIT
- .2byte MOVE_COUNTER
- .2byte MOVE_SPITE
- .2byte MOVE_REVERSAL
- .2byte MOVE_BEAT_UP
- .2byte MOVE_WILL_O_WISP
-
- egg_moves_begin SPECIES_PHANPY
- .2byte MOVE_FOCUS_ENERGY
- .2byte MOVE_BODY_SLAM
- .2byte MOVE_ANCIENT_POWER
- .2byte MOVE_SNORE
- .2byte MOVE_COUNTER
- .2byte MOVE_FISSURE
-
- egg_moves_begin SPECIES_STANTLER
- .2byte MOVE_SPITE
- .2byte MOVE_DISABLE
- .2byte MOVE_BITE
- .2byte MOVE_SWAGGER
- .2byte MOVE_PSYCH_UP
- .2byte MOVE_EXTRASENSORY
-
- egg_moves_begin SPECIES_TYROGUE
- .2byte MOVE_RAPID_SPIN
- .2byte MOVE_HI_JUMP_KICK
- .2byte MOVE_MACH_PUNCH
- .2byte MOVE_MIND_READER
- .2byte MOVE_HELPING_HAND
-
- egg_moves_begin SPECIES_SMOOCHUM
- .2byte MOVE_MEDITATE
- .2byte MOVE_PSYCH_UP
- .2byte MOVE_FAKE_OUT
- .2byte MOVE_WISH
- .2byte MOVE_ICE_PUNCH
-
- egg_moves_begin SPECIES_ELEKID
- .2byte MOVE_KARATE_CHOP
- .2byte MOVE_BARRIER
- .2byte MOVE_ROLLING_KICK
- .2byte MOVE_MEDITATE
- .2byte MOVE_CROSS_CHOP
- .2byte MOVE_FIRE_PUNCH
- .2byte MOVE_ICE_PUNCH
-
- egg_moves_begin SPECIES_MAGBY
- .2byte MOVE_KARATE_CHOP
- .2byte MOVE_MEGA_PUNCH
- .2byte MOVE_BARRIER
- .2byte MOVE_SCREECH
- .2byte MOVE_CROSS_CHOP
- .2byte MOVE_THUNDER_PUNCH
-
- egg_moves_begin SPECIES_MILTANK
- .2byte MOVE_PRESENT
- .2byte MOVE_REVERSAL
- .2byte MOVE_SEISMIC_TOSS
- .2byte MOVE_ENDURE
- .2byte MOVE_PSYCH_UP
- .2byte MOVE_CURSE
- .2byte MOVE_HELPING_HAND
- .2byte MOVE_SLEEP_TALK
-
- egg_moves_begin SPECIES_LARVITAR
- .2byte MOVE_PURSUIT
- .2byte MOVE_STOMP
- .2byte MOVE_OUTRAGE
- .2byte MOVE_FOCUS_ENERGY
- .2byte MOVE_ANCIENT_POWER
- .2byte MOVE_DRAGON_DANCE
- .2byte MOVE_CURSE
-
- egg_moves_begin SPECIES_TREECKO
- .2byte MOVE_CRUNCH
- .2byte MOVE_MUD_SPORT
- .2byte MOVE_ENDEAVOR
- .2byte MOVE_LEECH_SEED
- .2byte MOVE_DRAGON_BREATH
- .2byte MOVE_CRUSH_CLAW
-
- egg_moves_begin SPECIES_TORCHIC
- .2byte MOVE_COUNTER
- .2byte MOVE_REVERSAL
- .2byte MOVE_ENDURE
- .2byte MOVE_SWAGGER
- .2byte MOVE_ROCK_SLIDE
- .2byte MOVE_SMELLING_SALT
-
- egg_moves_begin SPECIES_MUDKIP
- .2byte MOVE_REFRESH
- .2byte MOVE_UPROAR
- .2byte MOVE_CURSE
- .2byte MOVE_STOMP
- .2byte MOVE_ICE_BALL
- .2byte MOVE_MIRROR_COAT
-
- egg_moves_begin SPECIES_POOCHYENA
- .2byte MOVE_ASTONISH
- .2byte MOVE_POISON_FANG
- .2byte MOVE_COVET
- .2byte MOVE_LEER
- .2byte MOVE_YAWN
-
- egg_moves_begin SPECIES_ZIGZAGOON
- .2byte MOVE_CHARM
- .2byte MOVE_PURSUIT
- .2byte MOVE_SUBSTITUTE
- .2byte MOVE_TICKLE
- .2byte MOVE_TRICK
-
- egg_moves_begin SPECIES_LOTAD
- .2byte MOVE_SYNTHESIS
- .2byte MOVE_RAZOR_LEAF
- .2byte MOVE_SWEET_SCENT
- .2byte MOVE_LEECH_SEED
- .2byte MOVE_FLAIL
- .2byte MOVE_WATER_GUN
-
- egg_moves_begin SPECIES_SEEDOT
- .2byte MOVE_LEECH_SEED
- .2byte MOVE_AMNESIA
- .2byte MOVE_QUICK_ATTACK
- .2byte MOVE_RAZOR_WIND
- .2byte MOVE_TAKE_DOWN
- .2byte MOVE_FALSE_SWIPE
-
- egg_moves_begin SPECIES_NINCADA
- .2byte MOVE_ENDURE
- .2byte MOVE_FAINT_ATTACK
- .2byte MOVE_GUST
- .2byte MOVE_SILVER_WIND
-
- egg_moves_begin SPECIES_TAILLOW
- .2byte MOVE_PURSUIT
- .2byte MOVE_SUPERSONIC
- .2byte MOVE_REFRESH
- .2byte MOVE_MIRROR_MOVE
- .2byte MOVE_RAGE
- .2byte MOVE_SKY_ATTACK
-
- egg_moves_begin SPECIES_SHROOMISH
- .2byte MOVE_FAKE_TEARS
- .2byte MOVE_SWAGGER
- .2byte MOVE_CHARM
- .2byte MOVE_FALSE_SWIPE
- .2byte MOVE_HELPING_HAND
-
- egg_moves_begin SPECIES_SPINDA
- .2byte MOVE_ENCORE
- .2byte MOVE_ROCK_SLIDE
- .2byte MOVE_ASSIST
- .2byte MOVE_DISABLE
- .2byte MOVE_BATON_PASS
- .2byte MOVE_WISH
- .2byte MOVE_TRICK
- .2byte MOVE_SMELLING_SALT
-
- egg_moves_begin SPECIES_WINGULL
- .2byte MOVE_MIST
- .2byte MOVE_TWISTER
- .2byte MOVE_AGILITY
- .2byte MOVE_GUST
- .2byte MOVE_WATER_SPORT
-
- egg_moves_begin SPECIES_SURSKIT
- .2byte MOVE_FORESIGHT
- .2byte MOVE_MUD_SHOT
- .2byte MOVE_PSYBEAM
- .2byte MOVE_HYDRO_PUMP
- .2byte MOVE_MIND_READER
-
- egg_moves_begin SPECIES_WAILMER
- .2byte MOVE_DOUBLE_EDGE
- .2byte MOVE_THRASH
- .2byte MOVE_SWAGGER
- .2byte MOVE_SNORE
- .2byte MOVE_SLEEP_TALK
- .2byte MOVE_CURSE
- .2byte MOVE_FISSURE
- .2byte MOVE_TICKLE
-
- egg_moves_begin SPECIES_SKITTY
- .2byte MOVE_HELPING_HAND
- .2byte MOVE_PSYCH_UP
- .2byte MOVE_UPROAR
- .2byte MOVE_FAKE_TEARS
- .2byte MOVE_WISH
- .2byte MOVE_BATON_PASS
- .2byte MOVE_SUBSTITUTE
- .2byte MOVE_TICKLE
-
- egg_moves_begin SPECIES_KECLEON
- .2byte MOVE_DISABLE
- .2byte MOVE_MAGIC_COAT
- .2byte MOVE_TRICK
-
- egg_moves_begin SPECIES_NOSEPASS
- .2byte MOVE_MAGNITUDE
- .2byte MOVE_ROLLOUT
- .2byte MOVE_EXPLOSION
-
- egg_moves_begin SPECIES_TORKOAL
- .2byte MOVE_ERUPTION
- .2byte MOVE_ENDURE
- .2byte MOVE_SLEEP_TALK
- .2byte MOVE_YAWN
-
- egg_moves_begin SPECIES_SABLEYE
- .2byte MOVE_PSYCH_UP
- .2byte MOVE_RECOVER
- .2byte MOVE_MOONLIGHT
-
- egg_moves_begin SPECIES_BARBOACH
- .2byte MOVE_THRASH
- .2byte MOVE_WHIRLPOOL
- .2byte MOVE_SPARK
-
- egg_moves_begin SPECIES_LUVDISC
- .2byte MOVE_SPLASH
- .2byte MOVE_SUPERSONIC
- .2byte MOVE_WATER_SPORT
- .2byte MOVE_MUD_SPORT
-
- egg_moves_begin SPECIES_CORPHISH
- .2byte MOVE_MUD_SPORT
- .2byte MOVE_ENDEAVOR
- .2byte MOVE_BODY_SLAM
- .2byte MOVE_ANCIENT_POWER
-
- egg_moves_begin SPECIES_FEEBAS
- .2byte MOVE_MIRROR_COAT
- .2byte MOVE_DRAGON_BREATH
- .2byte MOVE_MUD_SPORT
- .2byte MOVE_HYPNOSIS
- .2byte MOVE_LIGHT_SCREEN
- .2byte MOVE_CONFUSE_RAY
-
- egg_moves_begin SPECIES_CARVANHA
- .2byte MOVE_HYDRO_PUMP
- .2byte MOVE_DOUBLE_EDGE
- .2byte MOVE_THRASH
-
- egg_moves_begin SPECIES_TRAPINCH
- .2byte MOVE_FOCUS_ENERGY
- .2byte MOVE_QUICK_ATTACK
- .2byte MOVE_GUST
-
- egg_moves_begin SPECIES_MAKUHITA
- .2byte MOVE_FAINT_ATTACK
- .2byte MOVE_DETECT
- .2byte MOVE_FORESIGHT
- .2byte MOVE_HELPING_HAND
- .2byte MOVE_CROSS_CHOP
- .2byte MOVE_REVENGE
- .2byte MOVE_DYNAMIC_PUNCH
- .2byte MOVE_COUNTER
-
- egg_moves_begin SPECIES_ELECTRIKE
- .2byte MOVE_CRUNCH
- .2byte MOVE_HEADBUTT
- .2byte MOVE_UPROAR
- .2byte MOVE_CURSE
- .2byte MOVE_SWIFT
-
- egg_moves_begin SPECIES_NUMEL
- .2byte MOVE_HOWL
- .2byte MOVE_SCARY_FACE
- .2byte MOVE_BODY_SLAM
- .2byte MOVE_ROLLOUT
- .2byte MOVE_DEFENSE_CURL
- .2byte MOVE_STOMP
-
- egg_moves_begin SPECIES_SPHEAL
- .2byte MOVE_WATER_SPORT
- .2byte MOVE_STOCKPILE
- .2byte MOVE_SWALLOW
- .2byte MOVE_SPIT_UP
- .2byte MOVE_YAWN
- .2byte MOVE_ROCK_SLIDE
- .2byte MOVE_CURSE
- .2byte MOVE_FISSURE
-
- egg_moves_begin SPECIES_CACNEA
- .2byte MOVE_GRASS_WHISTLE
- .2byte MOVE_ACID
- .2byte MOVE_TEETER_DANCE
- .2byte MOVE_DYNAMIC_PUNCH
- .2byte MOVE_COUNTER
-
- egg_moves_begin SPECIES_SNORUNT
- .2byte MOVE_BLOCK
- .2byte MOVE_SPIKES
-
- egg_moves_begin SPECIES_AZURILL
- .2byte MOVE_ENCORE
- .2byte MOVE_SING
- .2byte MOVE_REFRESH
- .2byte MOVE_SLAM
- .2byte MOVE_TICKLE
-
- egg_moves_begin SPECIES_SPOINK
- .2byte MOVE_FUTURE_SIGHT
- .2byte MOVE_EXTRASENSORY
- .2byte MOVE_SUBSTITUTE
- .2byte MOVE_TRICK
-
- egg_moves_begin SPECIES_PLUSLE
- .2byte MOVE_SUBSTITUTE
- .2byte MOVE_WISH
-
- egg_moves_begin SPECIES_MINUN
- .2byte MOVE_SUBSTITUTE
- .2byte MOVE_WISH
-
- egg_moves_begin SPECIES_MAWILE
- .2byte MOVE_SWORDS_DANCE
- .2byte MOVE_FALSE_SWIPE
- .2byte MOVE_POISON_FANG
- .2byte MOVE_PSYCH_UP
- .2byte MOVE_ANCIENT_POWER
- .2byte MOVE_TICKLE
-
- egg_moves_begin SPECIES_MEDITITE
- .2byte MOVE_FIRE_PUNCH
- .2byte MOVE_THUNDER_PUNCH
- .2byte MOVE_ICE_PUNCH
- .2byte MOVE_FORESIGHT
- .2byte MOVE_FAKE_OUT
- .2byte MOVE_BATON_PASS
- .2byte MOVE_DYNAMIC_PUNCH
-
- egg_moves_begin SPECIES_SWABLU
- .2byte MOVE_AGILITY
- .2byte MOVE_HAZE
- .2byte MOVE_PURSUIT
- .2byte MOVE_RAGE
-
- egg_moves_begin SPECIES_DUSKULL
- .2byte MOVE_IMPRISON
- .2byte MOVE_DESTINY_BOND
- .2byte MOVE_PAIN_SPLIT
- .2byte MOVE_GRUDGE
- .2byte MOVE_MEMENTO
- .2byte MOVE_FAINT_ATTACK
-
- egg_moves_begin SPECIES_ROSELIA
- .2byte MOVE_SPIKES
- .2byte MOVE_SYNTHESIS
- .2byte MOVE_PIN_MISSILE
- .2byte MOVE_COTTON_SPORE
-
- egg_moves_begin SPECIES_SLAKOTH
- .2byte MOVE_PURSUIT
- .2byte MOVE_SLASH
- .2byte MOVE_BODY_SLAM
- .2byte MOVE_SNORE
- .2byte MOVE_CRUSH_CLAW
- .2byte MOVE_CURSE
- .2byte MOVE_SLEEP_TALK
-
- egg_moves_begin SPECIES_GULPIN
- .2byte MOVE_DREAM_EATER
- .2byte MOVE_ACID_ARMOR
- .2byte MOVE_SMOG
- .2byte MOVE_PAIN_SPLIT
-
- egg_moves_begin SPECIES_TROPIUS
- .2byte MOVE_HEADBUTT
- .2byte MOVE_SLAM
- .2byte MOVE_RAZOR_WIND
- .2byte MOVE_LEECH_SEED
- .2byte MOVE_NATURE_POWER
-
- egg_moves_begin SPECIES_WHISMUR
- .2byte MOVE_TAKE_DOWN
- .2byte MOVE_SNORE
- .2byte MOVE_SWAGGER
- .2byte MOVE_EXTRASENSORY
- .2byte MOVE_SMELLING_SALT
-
- egg_moves_begin SPECIES_CLAMPERL
- .2byte MOVE_REFRESH
- .2byte MOVE_MUD_SPORT
- .2byte MOVE_BODY_SLAM
- .2byte MOVE_SUPERSONIC
- .2byte MOVE_BARRIER
- .2byte MOVE_CONFUSE_RAY
-
- egg_moves_begin SPECIES_ABSOL
- .2byte MOVE_BATON_PASS
- .2byte MOVE_FAINT_ATTACK
- .2byte MOVE_DOUBLE_EDGE
- .2byte MOVE_MAGIC_COAT
- .2byte MOVE_CURSE
- .2byte MOVE_SUBSTITUTE
-
- egg_moves_begin SPECIES_SHUPPET
- .2byte MOVE_DISABLE
- .2byte MOVE_DESTINY_BOND
- .2byte MOVE_FORESIGHT
- .2byte MOVE_ASTONISH
- .2byte MOVE_IMPRISON
-
- egg_moves_begin SPECIES_SEVIPER
- .2byte MOVE_STOCKPILE
- .2byte MOVE_SWALLOW
- .2byte MOVE_SPIT_UP
- .2byte MOVE_BODY_SLAM
-
- egg_moves_begin SPECIES_ZANGOOSE
- .2byte MOVE_FLAIL
- .2byte MOVE_DOUBLE_KICK
- .2byte MOVE_RAZOR_WIND
- .2byte MOVE_COUNTER
- .2byte MOVE_ROAR
- .2byte MOVE_CURSE
-
- egg_moves_begin SPECIES_RELICANTH
- .2byte MOVE_MAGNITUDE
- .2byte MOVE_SKULL_BASH
- .2byte MOVE_WATER_SPORT
- .2byte MOVE_AMNESIA
- .2byte MOVE_SLEEP_TALK
- .2byte MOVE_ROCK_SLIDE
-
- egg_moves_begin SPECIES_ARON
- .2byte MOVE_ENDEAVOR
- .2byte MOVE_BODY_SLAM
- .2byte MOVE_STOMP
- .2byte MOVE_SMELLING_SALT
-
- egg_moves_begin SPECIES_CASTFORM
- .2byte MOVE_FUTURE_SIGHT
- .2byte MOVE_PSYCH_UP
-
- egg_moves_begin SPECIES_VOLBEAT
- .2byte MOVE_BATON_PASS
- .2byte MOVE_SILVER_WIND
- .2byte MOVE_TRICK
-
- egg_moves_begin SPECIES_ILLUMISE
- .2byte MOVE_BATON_PASS
- .2byte MOVE_SILVER_WIND
- .2byte MOVE_GROWTH
-
- egg_moves_begin SPECIES_LILEEP
- .2byte MOVE_BARRIER
- .2byte MOVE_RECOVER
- .2byte MOVE_MIRROR_COAT
- .2byte MOVE_ROCK_SLIDE
-
- egg_moves_begin SPECIES_ANORITH
- .2byte MOVE_RAPID_SPIN
- .2byte MOVE_KNOCK_OFF
- .2byte MOVE_SWORDS_DANCE
- .2byte MOVE_ROCK_SLIDE
-
- egg_moves_begin SPECIES_RALTS
- .2byte MOVE_DISABLE
- .2byte MOVE_WILL_O_WISP
- .2byte MOVE_MEAN_LOOK
- .2byte MOVE_MEMENTO
- .2byte MOVE_DESTINY_BOND
-
- egg_moves_begin SPECIES_BAGON
- .2byte MOVE_HYDRO_PUMP
- .2byte MOVE_THRASH
- .2byte MOVE_DRAGON_RAGE
- .2byte MOVE_TWISTER
- .2byte MOVE_DRAGON_DANCE
-
- egg_moves_begin SPECIES_CHIMECHO
- .2byte MOVE_DISABLE
- .2byte MOVE_CURSE
- .2byte MOVE_HYPNOSIS
- .2byte MOVE_DREAM_EATER
-
- .2byte -1
diff --git a/data/event_scripts.s b/data/event_scripts.s
index d6702745a..0a8390a8f 100644
--- a/data/event_scripts.s
+++ b/data/event_scripts.s
@@ -918,20 +918,15 @@ Std_5:
@ 819F805
return
-BattleTower_Lobby_EventScript_19F806:: @ 819F806
-FallarborTown_ContestLobby_EventScript_19F806:: @ 819F806
-LilycoveCity_ContestLobby_EventScript_19F806:: @ 819F806
-MossdeepCity_GameCorner_1F_EventScript_19F806:: @ 819F806
-OldaleTown_PokemonCenter_2F_EventScript_19F806:: @ 819F806
-SecretBase_RedCave1_EventScript_19F806:: @ 819F806
- special InitSaveDialog
+S_DoSaveDialog:: @ 819F806
+ special ScrSpecial_DoSaveDialog
waitstate
return
gUnknown_0819F80B:: @ 819F80B
lock
special PlayTrainerEncounterMusic
- special sub_80847C8
+ special ScrSpecial_EndTrainerApproach
waitstate
jump EventScript_19F8F2
@@ -940,7 +935,7 @@ gUnknown_0819F818:: @ 819F818
faceplayer
move LAST_TALKED, Movement_19F8F0
waitmove 0
- specialval RESULT, sub_8082564
+ specialval RESULT, ScrSpecial_HasTrainerBeenFought
compare RESULT, 0
jumpif 5, EventScript_19F83F
special PlayTrainerEncounterMusic
@@ -954,7 +949,7 @@ gUnknown_0819F840:: @ 819F840
lock
faceplayer
call EventScript_19F8E5
- specialval RESULT, sub_8082564
+ specialval RESULT, ScrSpecial_HasTrainerBeenFought
compare RESULT, 0
jumpif 5, EventScript_19F877
special CheckForAlivePartyMons
@@ -965,7 +960,7 @@ gUnknown_0819F840:: @ 819F840
jump EventScript_19F8F2
EventScript_19F870:
- special sub_8082718
+ special ScrSpecial_ShowTrainerNonBattlingSpeech
waittext
waitbutton
release
@@ -983,15 +978,15 @@ gUnknown_0819F878:: @ 819F878
gUnknown_0819F887:: @ 819F887
call EventScript_19F8E5
- specialval RESULT, sub_8082C9C
+ specialval RESULT, ScrSpecial_GetTrainerEyeRematchFlag
compare RESULT, 0
jumpeq EventScript_19F8AD
special PlayTrainerEncounterMusic
special sub_8082524
- special sub_80826D8
+ special ScrSpecial_ShowTrainerIntroSpeech
waittext
waitbutton
- special sub_80826B0
+ special ScrSpecial_StartTrainerEyeRematch
waitstate
releaseall
end
@@ -1000,7 +995,7 @@ EventScript_19F8AD:
endtrainerbattle
gUnknown_0819F8AE:: @ 819F8AE
- specialval RESULT, sub_8082C9C
+ specialval RESULT, ScrSpecial_GetTrainerEyeRematchFlag
compare RESULT, 0
jumpeq EventScript_19F8DD
special CheckForAlivePartyMons
@@ -1008,10 +1003,10 @@ gUnknown_0819F8AE:: @ 819F8AE
jumpif 5, EventScript_19F8DE
special PlayTrainerEncounterMusic
special sub_8082524
- special sub_80826D8
+ special ScrSpecial_ShowTrainerIntroSpeech
waittext
waitbutton
- special sub_80826B0
+ special ScrSpecial_StartTrainerEyeRematch
waitstate
releaseall
end
@@ -1020,7 +1015,7 @@ EventScript_19F8DD:
endtrainerbattle
EventScript_19F8DE:
- special sub_8082718
+ special ScrSpecial_ShowTrainerNonBattlingSpeech
waittext
waitbutton
release
@@ -1036,11 +1031,11 @@ Movement_19F8F0::
step_end
EventScript_19F8F2:
- special sub_80826D8
+ special ScrSpecial_ShowTrainerIntroSpeech
waittext
waitbutton
reptrainerbattle
- specialval RESULT, sub_8082558
+ specialval RESULT, ScrSpecial_GetTrainerBattleMode
compare RESULT, 0
jumpeq EventScript_19F934
compare RESULT, 2
@@ -1324,7 +1319,7 @@ EverGrandeCity_HallOfFame_EventScript_19FC70:: @ 819FC70
setflag 2141
return
-EventScript_LeagueWhiteOut:: @ 819FC74
+S_WhiteOut:: @ 819FC74
call EverGrandeCity_HallOfFame_EventScript_19FD09
call EventScript_19FC84
jump gUnknown_0819FC9F
@@ -1437,16 +1432,16 @@ SootopolisCity_PokemonCenter_1F_EventScript_19FD5B:: @ 819FD5B
VerdanturfTown_PokemonCenter_1F_EventScript_19FD5B:: @ 819FD5B
lock
faceplayer
- msgbox OldaleTown_PokemonCenter_1F_Text_1A0A7D, 5
+ msgbox gText_NurseJoy_Welcome, MSGBOX_YESNO
compare RESULT, 1
- jumpeq OldaleTown_PokemonCenter_1F_EventScript_19FD7C
+ jumpeq do_heal_party
compare RESULT, 0
- jumpeq OldaleTown_PokemonCenter_1F_EventScript_19FDC7
+ jumpeq dont_heal_party
end
-OldaleTown_PokemonCenter_1F_EventScript_19FD7C:: @ 819FD7C
+do_heal_party:: @ 819FD7C
inccounter GAME_STAT_USED_POKECENTER
- message OldaleTown_PokemonCenter_1F_Text_1A1245
+ message gText_NurseJoy_OkayIllTakeYourPokemon
waittext
move 0x800b, OldaleTown_PokemonCenter_1F_Movement_1A083F
waitmove 0
@@ -1454,23 +1449,23 @@ OldaleTown_PokemonCenter_1F_EventScript_19FD7C:: @ 819FD7C
checkanimation 25
move 0x800b, OldaleTown_PokemonCenter_1F_Movement_1A0845
waitmove 0
- special HealPlayerParty
+ special ScrSpecial_HealPlayerParty
checkflag 273
jumpif 0, OldaleTown_PokemonCenter_1F_EventScript_19FDCE
jump OldaleTown_PokemonCenter_1F_EventScript_19FDB0
end
OldaleTown_PokemonCenter_1F_EventScript_19FDB0:: @ 819FDB0
- message OldaleTown_PokemonCenter_1F_Text_1A0B14
+ message gText_NurseJoy_ThankYouForWaiting
waittext
move 0x800b, OldaleTown_PokemonCenter_1F_Movement_19FDF4
waitmove 0
- message OldaleTown_PokemonCenter_1F_Text_1A0AFA
+ message gText_NurseJoy_WeHopeToSeeYouAgain
waittext
return
-OldaleTown_PokemonCenter_1F_EventScript_19FDC7:: @ 819FDC7
- message OldaleTown_PokemonCenter_1F_Text_1A0AFA
+dont_heal_party:: @ 819FDC7
+ message gText_NurseJoy_WeHopeToSeeYouAgain
waittext
return
@@ -1483,7 +1478,7 @@ OldaleTown_PokemonCenter_1F_EventScript_19FDCE:: @ 819FDCE
end
OldaleTown_PokemonCenter_1F_EventScript_19FDEA:: @ 819FDEA
- message OldaleTown_PokemonCenter_1F_Text_1A1275
+ message gText_NurseJoy_Pokerus
waittext
setflag 273
return
@@ -1688,7 +1683,7 @@ gUnknown_081A0009:: @ 81A0009
EventScript_1A0023:
message gPCText_WhichPCShouldBeAccessed
waittext
- special TryCreatePCMenu
+ special ScrSpecial_CreatePCMenu
waitstate
jump EventScript_1A0033
end
@@ -2111,7 +2106,7 @@ SSTidalRooms_EventScript_1A02CA:: @ 81A02CA
fadescreen 1
fanfare 368
waitfanfare
- special HealPlayerParty
+ special ScrSpecial_HealPlayerParty
fadescreen 0
return
@@ -2985,17 +2980,17 @@ UnknownString_81A0A54: @ 81A0A54
UnknownString_81A0A66: @ 81A0A66
.string "Accessed LANETTE’s PC.$"
-OldaleTown_PokemonCenter_1F_Text_1A0A7D:: @ 81A0A7D
+gText_NurseJoy_Welcome:: @ 81A0A7D
.string "Hello, and welcome to the POKéMON\n"
.string "CENTER.\p"
.string "We restore your tired POKéMON to\n"
.string "full health.\p"
.string "Would you like to rest your POKéMON?$"
-OldaleTown_PokemonCenter_1F_Text_1A0AFA:: @ 81A0AFA
+gText_NurseJoy_WeHopeToSeeYouAgain:: @ 81A0AFA
.string "We hope to see you again!$"
-OldaleTown_PokemonCenter_1F_Text_1A0B14:: @ 81A0B14
+gText_NurseJoy_ThankYouForWaiting:: @ 81A0B14
.string "Thank you for waiting.\p"
.string "We’ve restored your POKéMON to\n"
.string "full health.$"
@@ -3209,11 +3204,11 @@ SlateportCity_Text_1A116E:: @ 81A116E
.string "We’ll accept you as a member and sell\n"
.string "you good stuff in secrecy.$"
-OldaleTown_PokemonCenter_1F_Text_1A1245:: @ 81A1245
+gText_NurseJoy_OkayIllTakeYourPokemon:: @ 81A1245
.string "Okay, I’ll take your POKéMON for a\n"
.string "few seconds.$"
-OldaleTown_PokemonCenter_1F_Text_1A1275:: @ 81A1275
+gText_NurseJoy_Pokerus:: @ 81A1275
.string "Your POKéMON may be infected with\n"
.string "POKéRUS.\p"
.string "Little is known about the POKéRUS\n"
@@ -3949,7 +3944,7 @@ SecretBase_RedCave1_EventScript_1A3032:: @ 81A3032
jumpeq SecretBase_RedCave1_EventScript_1A308F
setvar RESULT, 1
special sub_80BCE4C
- call SecretBase_RedCave1_EventScript_19F806
+ call S_DoSaveDialog
compare RESULT, 0
jumpeq SecretBase_RedCave1_EventScript_1A308F
hidebox 0, 0, 15, 10
@@ -3984,7 +3979,7 @@ SecretBase_RedCave1_EventScript_1A30AE:: @ 81A30AE
jumpeq SecretBase_RedCave1_EventScript_1A310B
setvar RESULT, 1
special sub_80BCE4C
- call SecretBase_RedCave1_EventScript_19F806
+ call S_DoSaveDialog
compare RESULT, 0
jumpeq SecretBase_RedCave1_EventScript_1A310B
hidebox 0, 0, 15, 10
@@ -4019,7 +4014,7 @@ SecretBase_RedCave1_EventScript_1A312A:: @ 81A312A
jumpeq SecretBase_RedCave1_EventScript_1A3187
setvar RESULT, 1
special sub_80BCE4C
- call SecretBase_RedCave1_EventScript_19F806
+ call S_DoSaveDialog
compare RESULT, 0
jumpeq SecretBase_RedCave1_EventScript_1A3187
hidebox 0, 0, 15, 10
@@ -4054,7 +4049,7 @@ SecretBase_RedCave1_EventScript_1A31A6:: @ 81A31A6
jumpeq SecretBase_RedCave1_EventScript_1A3203
setvar RESULT, 1
special sub_80BCE4C
- call SecretBase_RedCave1_EventScript_19F806
+ call S_DoSaveDialog
compare RESULT, 0
jumpeq SecretBase_RedCave1_EventScript_1A3203
hidebox 0, 0, 15, 10
@@ -4089,7 +4084,7 @@ SecretBase_RedCave1_EventScript_1A3222:: @ 81A3222
jumpeq SecretBase_RedCave1_EventScript_1A327F
setvar RESULT, 1
special sub_80BCE4C
- call SecretBase_RedCave1_EventScript_19F806
+ call S_DoSaveDialog
compare RESULT, 0
jumpeq SecretBase_RedCave1_EventScript_1A327F
hidebox 0, 0, 15, 10
@@ -4124,7 +4119,7 @@ SecretBase_RedCave1_EventScript_1A329E:: @ 81A329E
jumpeq SecretBase_RedCave1_EventScript_1A32FB
setvar RESULT, 1
special sub_80BCE4C
- call SecretBase_RedCave1_EventScript_19F806
+ call S_DoSaveDialog
compare RESULT, 0
jumpeq SecretBase_RedCave1_EventScript_1A32FB
hidebox 0, 0, 15, 10
@@ -4159,7 +4154,7 @@ SecretBase_RedCave1_EventScript_1A331A:: @ 81A331A
jumpeq SecretBase_RedCave1_EventScript_1A3377
setvar RESULT, 1
special sub_80BCE4C
- call SecretBase_RedCave1_EventScript_19F806
+ call S_DoSaveDialog
compare RESULT, 0
jumpeq SecretBase_RedCave1_EventScript_1A3377
hidebox 0, 0, 15, 10
@@ -4194,7 +4189,7 @@ SecretBase_RedCave1_EventScript_1A3396:: @ 81A3396
jumpeq SecretBase_RedCave1_EventScript_1A33F3
setvar RESULT, 1
special sub_80BCE4C
- call SecretBase_RedCave1_EventScript_19F806
+ call S_DoSaveDialog
compare RESULT, 0
jumpeq SecretBase_RedCave1_EventScript_1A33F3
hidebox 0, 0, 15, 10
@@ -4229,7 +4224,7 @@ SecretBase_RedCave1_EventScript_1A3412:: @ 81A3412
jumpeq SecretBase_RedCave1_EventScript_1A346F
setvar RESULT, 1
special sub_80BCE4C
- call SecretBase_RedCave1_EventScript_19F806
+ call S_DoSaveDialog
compare RESULT, 0
jumpeq SecretBase_RedCave1_EventScript_1A346F
hidebox 0, 0, 15, 10
@@ -4264,7 +4259,7 @@ SecretBase_RedCave1_EventScript_1A348E:: @ 81A348E
jumpeq SecretBase_RedCave1_EventScript_1A34EB
setvar RESULT, 1
special sub_80BCE4C
- call SecretBase_RedCave1_EventScript_19F806
+ call S_DoSaveDialog
compare RESULT, 0
jumpeq SecretBase_RedCave1_EventScript_1A34EB
hidebox 0, 0, 15, 10
@@ -4293,7 +4288,7 @@ SecretBase_RedCave1_EventScript_1A350A:: @ 81A350A
setvar 0x8005, 0
special sub_813556C
waitstate
- special HealPlayerParty
+ special ScrSpecial_HealPlayerParty
release
end
@@ -4744,16 +4739,7 @@ BattleTower_Lobby_EventScript_1AE30F:: @ 81AE30F
.include "data/scripts/gabby_and_ty.inc"
- .include "data/scripts/bard.inc"
- .include "data/scripts/hipster.inc"
- .include "data/text/trader.inc"
- .include "data/scripts/trader.inc"
- .include "data/text/storyteller.inc"
- .include "data/scripts/storyteller.inc"
- .include "data/text/giddy.inc"
- .include "data/scripts/giddy.inc"
- .include "data/text/bard.inc"
- .include "data/text/hipster.inc"
+ .include "data/scripts/mauville_man.inc"
.include "data/field_move_scripts.inc"
.include "data/item_ball_scripts.inc"
@@ -4783,7 +4769,7 @@ gUnknown_081B694A:: @ 81B694A
.include "data/scripts/players_house.inc"
-Event_RunningShoesManual:: @ 81B6E5A
+S_RunningShoesManual:: @ 81B6E5A
msgbox UnknownString_81728E3, 3
end
@@ -4792,7 +4778,7 @@ Event_RunningShoesManual:: @ 81B6E5A
.include "data/text/trainers.inc"
-Event_RepelWoreOff:: @ 81C33E6
+S_RepelWoreOff:: @ 81C33E6
msgbox Text_RepelWoreOff, 3
end
@@ -4872,7 +4858,7 @@ GraniteCave_B1F_MapScript2_1C6BB5:: @ 81C6BB5
MtPyre_2F_MapScript2_1C6BB5:: @ 81C6BB5
SkyPillar_2F_MapScript2_1C6BB5:: @ 81C6BB5
SkyPillar_4F_MapScript2_1C6BB5:: @ 81C6BB5
- map_script_2 0x4022, 0, GraniteCave_B1F_EventScript_1C6BC5
+ map_script_2 0x4022, 0, S_FallDownHole
.2byte 0
GraniteCave_B1F_MapScript1_1C6BBF:: @ 81C6BBF
@@ -4882,7 +4868,7 @@ SkyPillar_4F_MapScript1_1C6BBF:: @ 81C6BBF
copyvar 0x4022, 0x1
end
-GraniteCave_B1F_EventScript_1C6BC5:: @ 81C6BC5
+S_FallDownHole:: @ 81C6BC5
lockall
pause 20
move 255, GraniteCave_B1F_Movement_1C6BF7
diff --git a/data/evolution_graphics.s b/data/evolution_graphics.s
deleted file mode 100644
index e362b4dba..000000000
--- a/data/evolution_graphics.s
+++ /dev/null
@@ -1,70 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 2
-gEvoSparklePalette: @ 8416E44
- .incbin "graphics/misc/evo_sparkle.gbapal"
-
- .align 2
-gEvoSparkleTiles: @ 8416E64
- .incbin "graphics/misc/evo_sparkle.4bpp.lz"
-
-gUnknown_08416E84:: @ 8416E84
- obj_tiles gEvoSparkleTiles, 0x20, 1001
- .space 8
-
-gUnknown_08416E94:: @ 8416E94
- obj_pal gEvoSparklePalette, 1001
- .space 8
-
- .align 2
-gOamData_8416EA4:: @ 8416EA4
- .2byte 0x00A0
- .2byte 0x0000
- .2byte 0x0400
-
- .align 2
-gSpriteAnim_8416EAC:: @ 8416EAC
- obj_image_anim_frame 0, 8
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_8416EB4:: @ 8416EB4
- .4byte gSpriteAnim_8416EAC
-
- .align 2
-gSpriteTemplate_8416EB8:: @ 8416EB8
- spr_template 1001, 1001, gOamData_8416EA4, gSpriteAnimTable_8416EB4, NULL, gDummySpriteAffineAnimTable, nullsub_84
-
- .align 1
-gUnknown_08416ED0:: @ 8416ED0
- .2byte 0x3C0
- .2byte 0x380
- .2byte 0x340
- .2byte 0x300
- .2byte 0x2C0
- .2byte 0x280
- .2byte 0x240
- .2byte 0x200
- .2byte 0x1C0
- .2byte 0x180
- .2byte 0x140
- .2byte 0x100
- .2byte 0xFFFC
- .2byte 0x10
- .2byte 0xFFFD
- .2byte 0x30
- .2byte 0xFFFE
- .2byte 0x50
- .2byte 0xFFFF
- .2byte 0x70
- .2byte 0x1
- .2byte 0x70
- .2byte 0x2
- .2byte 0x50
- .2byte 0x3
- .2byte 0x30
- .2byte 0x4
- .2byte 0x10
diff --git a/data/evolution_scene.s b/data/evolution_scene.s
deleted file mode 100644
index 24744a196..000000000
--- a/data/evolution_scene.s
+++ /dev/null
@@ -1,14 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
-gUnknown_083F868C:: @ 83F868C
- .string "ヌケニン$"
-
- .string "{COLOR DARK_GREY}{HIGHLIGHT WHITE2}{SHADOW LIGHT_GREY}$"
- .string "▶\n $"
- .string " \n▶$"
- .string " \n $"
-
- .space 9
diff --git a/data/field_effect_helpers.s b/data/field_effect_helpers.s
deleted file mode 100644
index d22bd8dde..000000000
--- a/data/field_effect_helpers.s
+++ /dev/null
@@ -1,37 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
-@ XXX: Unused? Probably aligned because it's at the beginning of an object file.
- .align 2
- .string "タマゴ$"
-
- .align 1
-gUnknown_08401E2C:: @ 8401E2C
- .2byte 0xC, 0x1C, 0x2C
-
-gUnknown_08401E32:: @ 8401E32
- .byte 0, 1, 2, 3
-
- .align 1
-gUnknown_08401E36:: @ 8401E36
- .2byte 4, 4, 4, 16
-
- .align 2
-gUnknown_08401E40:: @ 8401E40
- .4byte sub_81275A0
- .4byte sub_81275C4
-
- .align 2
-gUnknown_08401E48:: @ 8401E48
- .4byte sub_8127DA0
- .4byte sub_8127DD0
- .4byte sub_8127E30
-
-gUnknown_08401E54:: @ 8401E54
- .byte 0, 0, 1, 2, 3
-
- .align 1
-gUnknown_08401E5A:: @ 8401E5A
- .2byte 3, 7
diff --git a/data/field_ground_effect.s b/data/field_ground_effect.s
deleted file mode 100644
index d3dbceedb..000000000
--- a/data/field_ground_effect.s
+++ /dev/null
@@ -1,72 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 2
-gUnknown_08376040:: @ 8376040
- .4byte MetatileBehavior_IsJumpSouth
- .4byte MetatileBehavior_IsJumpNorth
- .4byte MetatileBehavior_IsJumpWest
- .4byte MetatileBehavior_IsJumpEast
-
-gUnknown_08376050:: @ 8376050
- .byte 0x73, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x00, 0x00, 0x73
-
-@ Each byte corresponds to a sprite priority for a field object.
-@ This is directly the inverse of gFieldObjectPriorities_08376070.
-gFieldObjectPriorities_08376060:: @ 8376060
- .byte 2, 2, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 0, 0, 2
-
-@ Each byte corresponds to a sprite priority for a field object.
-@ This is the inverse of gFieldObjectPriorities_08376060.
-@ 1 = Above player sprite
-@ 2 = Below player sprite
-gFieldObjectPriorities_08376070:: @ 8376070
- .byte 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 0, 0, 1
-
- .align 2
-gUnknown_08376080:: @ 8376080
- .4byte nullsub_50
- .4byte DoTracksGroundEffect_Footprints
- .4byte DoTracksGroundEffect_BikeTireTracks
-
-@ First byte is a Field Effect script id. (gFieldEffectScriptPointers)
-@ Last three bytes are unknown.
-gSandFootprints_FieldEffectData:: @ 837608C
- .byte 0xD, 0x0, 0x18, 0x0
-
-@ Specifies which bike track shape to show next.
-@ For example, when the bike turns from up to right, it will show
-@ a track that curves to the right.
-@ Each 4-byte row corresponds to the initial direction of the bike, and
-@ each byte in that row is for the next direction of the bike in the order
-@ of down, up, left, right.
-gBikeTireTracks_Transitions:: @ 8376090
- .byte 1, 2, 7, 8
- .byte 1, 2, 6, 5
- .byte 5, 8, 3, 4
- .byte 6, 7, 3, 4
-
- .align 2
-gUnknown_083760A0:: @ 83760A0
- .4byte GroundEffect_SpawnOnTallGrass
- .4byte sub_8063E94
- .4byte sub_8063EE0
- .4byte sub_8063F2C
- .4byte GroundEffect_WaterReflection
- .4byte GroundEffect_IceReflection
- .4byte GroundEffect_FlowingWater
- .4byte sub_8063FA0
- .4byte sub_8063FCC
- .4byte GroundEffect_Ripple
- .4byte GroundEffect_StepOnPuddle
- .4byte GroundEffect_SandPile
- .4byte GroundEffect_JumpOnTallGrass
- .4byte GroundEffect_JumpOnLongGrass
- .4byte GroundEffect_JumpOnShallowWater
- .4byte GroundEffect_JumpOnWater
- .4byte GroundEffect_JumpLandingDust
- .4byte GroundEffect_ShortGrass
- .4byte GroundEffect_HotSprings
- .4byte GroundEffect_Seaweed
diff --git a/data/field_move_scripts.inc b/data/field_move_scripts.inc
index 315217055..9911dca3a 100644
--- a/data/field_move_scripts.inc
+++ b/data/field_move_scripts.inc
@@ -1,4 +1,4 @@
-CuttableTreeScript:: @ 81B0DCC
+S_CuttableTree:: @ 81B0DCC
lockall
checkflag 2055
jumpif 0, CannotUseCut
@@ -18,7 +18,7 @@ CuttableTreeScript:: @ 81B0DCC
jump DoTreeCutMovement
end
-UseCutScript:: @ 81B0E16
+S_UseCut:: @ 81B0E16
lockall
doanimation 2
waitstate
@@ -56,7 +56,7 @@ UsedCutRockSmashText: @ 81B0E82
CannotUseCutText: @ 81B0E8E
.string "This tree looks like it can be CUT down.$"
-BreakableRockScript:: @ 81B0EB7
+S_BreakableRock:: @ 81B0EB7
lockall
checkflag 2057
jumpif 0, CannotUseRockSmash
@@ -76,7 +76,7 @@ BreakableRockScript:: @ 81B0EB7
jump DoRockSmashMovement
end
-UseRockSmashScript:: @ 81B0F01
+S_UseRockSmash:: @ 81B0F01
lockall
doanimation 37
waitstate
@@ -90,7 +90,7 @@ DoRockSmashMovement: @ 81B0F0C
specialval RESULT, sub_810F5BC
compare RESULT, 1
jumpeq DoRockSmashMovement_Done
- special RockSmashWildEncounter
+ special ScrSpecial_RockSmashWildEncounter
compare RESULT, 0
jumpeq DoRockSmashMovement_Done
waitstate
@@ -123,7 +123,7 @@ CannotUseRockSmashText: @ 81B0F90
.string "It’s a rugged rock, but a POKéMON\n"
.string "may be able to smash it.$"
-PushableBoulderScript:: @ 81B0FCB
+S_PushableBoulder:: @ 81B0FCB
lockall
checkflag 2058
jumpif 0, CannotUseStrength
@@ -142,7 +142,7 @@ PushableBoulderScript:: @ 81B0FCB
jump UsedStrength
end
-UseStrengthScript:: @ 81B100E
+S_UseStrength:: @ 81B100E
lockall
doanimation 40
waitstate
@@ -188,7 +188,7 @@ AlreadyUsedStrengthText: @ 81B1127
.string "STRENGTH made it possible to move\n"
.string "boulders around.$"
-UseWaterfallScript:: @ 81B115A
+S_UseWaterfall:: @ 81B115A
lockall
checkattack MOVE_WATERFALL
compare RESULT, 6
@@ -202,7 +202,7 @@ UseWaterfallScript:: @ 81B115A
doanimation 43
jump Waterfall_Done
-CannotUseWaterfallScript:: @ 81B1194
+S_CannotUseWaterfall:: @ 81B1194
lockall
Waterfall_NoMonKnows: @ 81B1195
msgbox CannotUseWaterfallText, 4
@@ -244,7 +244,7 @@ Dive_Done: @ 81B1267
releaseall
end
-UnderwaterUseDiveScript:: @ 81B1269
+S_UseDiveUnderwater:: @ 81B1269
lockall
checkattack MOVE_DIVE
compare RESULT, 6
diff --git a/data/maps/events/FieryPath.inc b/data/maps/events/FieryPath.inc
index 01b7b3efe..a4ac688d8 100644
--- a/data/maps/events/FieryPath.inc
+++ b/data/maps/events/FieryPath.inc
@@ -1,11 +1,11 @@
FieryPath_MapObjects:: @ 838C718
object_event 1, MAP_OBJ_GFX_ITEM_BALL, 0, 8, 0, 3, 0, 3, 1, 17, 0, 0, 0, 0, 0, FieryPath_EventScript_1B17EE, 1091, 0, 0
- object_event 2, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 10, 0, 15, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 17, 0, 0
- object_event 3, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 17, 0, 15, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 18, 0, 0
- object_event 4, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 8, 0, 11, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 19, 0, 0
- object_event 5, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 3, 0, 12, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 20, 0, 0
- object_event 6, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 6, 0, 23, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 21, 0, 0
- object_event 7, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 5, 0, 24, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 22, 0, 0
+ object_event 2, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 10, 0, 15, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 17, 0, 0
+ object_event 3, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 17, 0, 15, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 18, 0, 0
+ object_event 4, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 8, 0, 11, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 19, 0, 0
+ object_event 5, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 3, 0, 12, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 20, 0, 0
+ object_event 6, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 6, 0, 23, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 21, 0, 0
+ object_event 7, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 5, 0, 24, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 22, 0, 0
object_event 8, MAP_OBJ_GFX_ITEM_BALL, 0, 7, 0, 32, 0, 3, 1, 17, 0, 0, 0, 0, 0, FieryPath_EventScript_1B17E1, 1111, 0, 0
FieryPath_MapWarps:: @ 838C7D8
diff --git a/data/maps/events/GraniteCave_B2F.inc b/data/maps/events/GraniteCave_B2F.inc
index 49c0bace0..158577482 100644
--- a/data/maps/events/GraniteCave_B2F.inc
+++ b/data/maps/events/GraniteCave_B2F.inc
@@ -1,13 +1,13 @@
GraniteCave_B2F_MapObjects:: @ 838BFEC
object_event 1, MAP_OBJ_GFX_ITEM_BALL, 0, 4, 0, 4, 0, 3, 1, 0, 0, 0, 0, 0, 0, GraniteCave_B2F_EventScript_1B17BA, 1053, 0, 0
object_event 2, MAP_OBJ_GFX_ITEM_BALL, 0, 29, 0, 4, 0, 3, 1, 0, 0, 0, 0, 0, 0, GraniteCave_B2F_EventScript_1B17C7, 1054, 0, 0
- object_event 3, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 5, 0, 14, 0, 3, 1, 17, 0, 0, 0, 0, 0, BreakableRockScript, 17, 0, 0
- object_event 4, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 3, 0, 14, 0, 3, 1, 17, 0, 0, 0, 0, 0, BreakableRockScript, 18, 0, 0
- object_event 5, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 2, 0, 16, 0, 3, 1, 17, 0, 0, 0, 0, 0, BreakableRockScript, 19, 0, 0
- object_event 6, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 7, 0, 12, 0, 3, 1, 17, 0, 0, 0, 0, 0, BreakableRockScript, 20, 0, 0
- object_event 7, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 4, 0, 22, 0, 3, 1, 17, 0, 0, 0, 0, 0, BreakableRockScript, 21, 0, 0
- object_event 8, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 6, 0, 22, 0, 3, 1, 17, 0, 0, 0, 0, 0, BreakableRockScript, 22, 0, 0
- object_event 9, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 3, 0, 21, 0, 3, 1, 17, 0, 0, 0, 0, 0, BreakableRockScript, 23, 0, 0
+ object_event 3, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 5, 0, 14, 0, 3, 1, 17, 0, 0, 0, 0, 0, S_BreakableRock, 17, 0, 0
+ object_event 4, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 3, 0, 14, 0, 3, 1, 17, 0, 0, 0, 0, 0, S_BreakableRock, 18, 0, 0
+ object_event 5, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 2, 0, 16, 0, 3, 1, 17, 0, 0, 0, 0, 0, S_BreakableRock, 19, 0, 0
+ object_event 6, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 7, 0, 12, 0, 3, 1, 17, 0, 0, 0, 0, 0, S_BreakableRock, 20, 0, 0
+ object_event 7, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 4, 0, 22, 0, 3, 1, 17, 0, 0, 0, 0, 0, S_BreakableRock, 21, 0, 0
+ object_event 8, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 6, 0, 22, 0, 3, 1, 17, 0, 0, 0, 0, 0, S_BreakableRock, 22, 0, 0
+ object_event 9, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 3, 0, 21, 0, 3, 1, 17, 0, 0, 0, 0, 0, S_BreakableRock, 23, 0, 0
GraniteCave_B2F_MapWarps:: @ 838C0C4
warp_def 29, 13, 3, 2, GraniteCave_B1F
diff --git a/data/maps/events/PetalburgWoods.inc b/data/maps/events/PetalburgWoods.inc
index 0ec69c1a2..cb0ff7ca1 100644
--- a/data/maps/events/PetalburgWoods.inc
+++ b/data/maps/events/PetalburgWoods.inc
@@ -1,6 +1,6 @@
PetalburgWoods_MapObjects:: @ 838C14C
- object_event 1, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 19, 0, 10, 0, 3, 1, 0, 0, 0, 0, 0, 0, CuttableTreeScript, 17, 0, 0
- object_event 2, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 19, 0, 11, 0, 3, 1, 0, 0, 0, 0, 0, 0, CuttableTreeScript, 18, 0, 0
+ object_event 1, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 19, 0, 10, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_CuttableTree, 17, 0, 0
+ object_event 2, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 19, 0, 11, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_CuttableTree, 18, 0, 0
object_event 3, 241, 0, 26, 0, 17, 0, 3, 10, 0, 0, 0, 0, 0, 0, 0x0, 725, 0, 0
object_event 4, MAP_OBJ_GFX_MAN_2, 0, 26, 0, 20, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0x0, 724, 0, 0
object_event 5, MAP_OBJ_GFX_ITEM_BALL, 0, 45, 0, 7, 0, 3, 8, 0, 0, 0, 0, 0, 0, PetalburgWoods_EventScript_1B175F, 1056, 0, 0
diff --git a/data/maps/events/Route102.inc b/data/maps/events/Route102.inc
index 9cf97de4b..7ffa0e191 100644
--- a/data/maps/events/Route102.inc
+++ b/data/maps/events/Route102.inc
@@ -5,8 +5,8 @@ Route102_MapObjects:: @ 83811FC
object_event 4, MAP_OBJ_GFX_LASS, 0, 8, 0, 7, 0, 3, 18, 0, 0, 1, 0, 3, 0, Route102_EventScript_14EB53, 0, 0, 0
object_event 5, MAP_OBJ_GFX_BOY_1, 0, 37, 0, 4, 0, 3, 2, 17, 0, 0, 0, 0, 0, Route102_EventScript_14EAF5, 0, 0, 0
object_event 6, MAP_OBJ_GFX_ITEM_BALL, 0, 11, 0, 15, 0, 3, 8, 0, 0, 0, 0, 0, 0, Route102_EventScript_1B1439, 1000, 0, 0
- object_event 7, MAP_OBJ_GFX_BERRY_TREE, 0, 24, 0, 2, 0, 3, 12, 0, 0, 0, 0, 2, 0, BerryTreeScript, 0, 0, 0
- object_event 8, MAP_OBJ_GFX_BERRY_TREE, 0, 25, 0, 2, 0, 3, 12, 0, 0, 0, 0, 1, 0, BerryTreeScript, 0, 0, 0
+ object_event 7, MAP_OBJ_GFX_BERRY_TREE, 0, 24, 0, 2, 0, 3, 12, 0, 0, 0, 0, 2, 0, S_BerryTree, 0, 0, 0
+ object_event 8, MAP_OBJ_GFX_BERRY_TREE, 0, 25, 0, 2, 0, 3, 12, 0, 0, 0, 0, 1, 0, S_BerryTree, 0, 0, 0
object_event 9, MAP_OBJ_GFX_YOUNGSTER, 0, 19, 0, 4, 0, 3, 8, 17, 0, 1, 0, 3, 0, Route102_EventScript_14EB6A, 0, 0, 0
Route102_MapBGEvents:: @ 83812D4
diff --git a/data/maps/events/Route103.inc b/data/maps/events/Route103.inc
index 01640eb65..462fe1a3b 100644
--- a/data/maps/events/Route103.inc
+++ b/data/maps/events/Route103.inc
@@ -5,15 +5,15 @@ Route103_MapObjects:: @ 8381300
object_event 4, MAP_OBJ_GFX_LITTLE_GIRL_1, 0, 65, 0, 11, 0, 3, 8, 0, 0, 1, 0, 0, 0, Route103_EventScript_14EDF1, 0, 0, 0
object_event 5, MAP_OBJ_GFX_LITTLE_GIRL_1, 0, 64, 0, 11, 0, 3, 8, 0, 0, 1, 0, 0, 0, Route103_EventScript_14EDAB, 0, 0, 0
object_event 6, MAP_OBJ_GFX_FISHERMAN, 0, 50, 0, 8, 0, 3, 26, 16, 0, 1, 0, 3, 0, Route103_EventScript_14EE37, 0, 0, 0
- object_event 7, MAP_OBJ_GFX_BERRY_TREE, 0, 58, 0, 5, 0, 3, 12, 0, 0, 0, 0, 5, 0, BerryTreeScript, 0, 0, 0
- object_event 8, MAP_OBJ_GFX_BERRY_TREE, 0, 59, 0, 5, 0, 3, 12, 0, 0, 0, 0, 6, 0, BerryTreeScript, 0, 0, 0
- object_event 9, MAP_OBJ_GFX_BERRY_TREE, 0, 60, 0, 5, 0, 3, 12, 0, 0, 0, 0, 7, 0, BerryTreeScript, 0, 0, 0
+ object_event 7, MAP_OBJ_GFX_BERRY_TREE, 0, 58, 0, 5, 0, 3, 12, 0, 0, 0, 0, 5, 0, S_BerryTree, 0, 0, 0
+ object_event 8, MAP_OBJ_GFX_BERRY_TREE, 0, 59, 0, 5, 0, 3, 12, 0, 0, 0, 0, 6, 0, S_BerryTree, 0, 0, 0
+ object_event 9, MAP_OBJ_GFX_BERRY_TREE, 0, 60, 0, 5, 0, 3, 12, 0, 0, 0, 0, 7, 0, S_BerryTree, 0, 0, 0
object_event 10, MAP_OBJ_GFX_BOY_1, 0, 20, 0, 10, 0, 3, 2, 33, 0, 0, 0, 0, 0, Route103_EventScript_14ED79, 0, 0, 0
object_event 11, MAP_OBJ_GFX_PROF_BIRCH, 0, 7, 0, 3, 0, 3, 2, 17, 0, 0, 0, 0, 0, Route103_EventScript_1A037F, 898, 0, 0
object_event 12, MAP_OBJ_GFX_MAN_3, 0, 56, 0, 12, 0, 3, 10, 0, 0, 1, 0, 5, 0, Route103_EventScript_14EE4E, 0, 0, 0
object_event 13, MAP_OBJ_GFX_ITEM_BALL, 0, 63, 0, 8, 0, 3, 1, 17, 0, 0, 0, 0, 0, Route103_EventScript_1B1446, 1114, 0, 0
- object_event 14, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 67, 0, 7, 0, 3, 1, 17, 0, 0, 0, 0, 0, CuttableTreeScript, 18, 0, 0
- object_event 15, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 69, 0, 7, 0, 3, 1, 17, 0, 0, 0, 0, 0, CuttableTreeScript, 19, 0, 0
+ object_event 14, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 67, 0, 7, 0, 3, 1, 17, 0, 0, 0, 0, 0, S_CuttableTree, 18, 0, 0
+ object_event 15, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 69, 0, 7, 0, 3, 1, 17, 0, 0, 0, 0, 0, S_CuttableTree, 19, 0, 0
Route103_MapBGEvents:: @ 8381468
bg_event 11, 9, 0, 0, 0, Route103_EventScript_14ED8B
diff --git a/data/maps/events/Route104.inc b/data/maps/events/Route104.inc
index da4b5ffc1..b4c8a2834 100644
--- a/data/maps/events/Route104.inc
+++ b/data/maps/events/Route104.inc
@@ -8,17 +8,17 @@ Route104_MapObjects:: @ 8381488
object_event 7, MAP_OBJ_GFX_MR_BRINEYS_BOAT, 0, 12, 0, 54, 0, 1, 7, 0, 0, 0, 0, 0, 0, 0x0, 742, 0, 0
object_event 8, MAP_OBJ_GFX_OLD_MAN_1, 0, 12, 0, 51, 0, 4, 10, 0, 0, 0, 0, 0, 0, 0x0, 738, 0, 0
object_event 9, MAP_OBJ_GFX_FISHERMAN, 0, 29, 0, 8, 0, 3, 8, 0, 0, 1, 0, 0, 0, Route104_EventScript_14F172, 0, 0, 0
- object_event 10, MAP_OBJ_GFX_BERRY_TREE, 0, 34, 0, 6, 0, 3, 12, 0, 0, 0, 0, 8, 0, BerryTreeScript, 0, 0, 0
- object_event 11, MAP_OBJ_GFX_BERRY_TREE, 0, 35, 0, 6, 0, 3, 12, 0, 0, 0, 0, 9, 0, BerryTreeScript, 0, 0, 0
- object_event 12, MAP_OBJ_GFX_BERRY_TREE, 0, 36, 0, 6, 0, 3, 12, 0, 0, 0, 0, 10, 0, BerryTreeScript, 0, 0, 0
- object_event 13, MAP_OBJ_GFX_BERRY_TREE, 0, 22, 0, 41, 0, 3, 12, 0, 0, 0, 0, 11, 0, BerryTreeScript, 0, 0, 0
- object_event 14, MAP_OBJ_GFX_BERRY_TREE, 0, 23, 0, 41, 0, 3, 12, 0, 0, 0, 0, 12, 0, BerryTreeScript, 0, 0, 0
- object_event 15, MAP_OBJ_GFX_BERRY_TREE, 0, 24, 0, 41, 0, 3, 12, 0, 0, 0, 0, 13, 0, BerryTreeScript, 0, 0, 0
+ object_event 10, MAP_OBJ_GFX_BERRY_TREE, 0, 34, 0, 6, 0, 3, 12, 0, 0, 0, 0, 8, 0, S_BerryTree, 0, 0, 0
+ object_event 11, MAP_OBJ_GFX_BERRY_TREE, 0, 35, 0, 6, 0, 3, 12, 0, 0, 0, 0, 9, 0, S_BerryTree, 0, 0, 0
+ object_event 12, MAP_OBJ_GFX_BERRY_TREE, 0, 36, 0, 6, 0, 3, 12, 0, 0, 0, 0, 10, 0, S_BerryTree, 0, 0, 0
+ object_event 13, MAP_OBJ_GFX_BERRY_TREE, 0, 22, 0, 41, 0, 3, 12, 0, 0, 0, 0, 11, 0, S_BerryTree, 0, 0, 0
+ object_event 14, MAP_OBJ_GFX_BERRY_TREE, 0, 23, 0, 41, 0, 3, 12, 0, 0, 0, 0, 12, 0, S_BerryTree, 0, 0, 0
+ object_event 15, MAP_OBJ_GFX_BERRY_TREE, 0, 24, 0, 41, 0, 3, 12, 0, 0, 0, 0, 13, 0, S_BerryTree, 0, 0, 0
object_event 16, MAP_OBJ_GFX_OLD_WOMAN_1, 0, 37, 0, 8, 0, 3, 9, 17, 0, 0, 0, 0, 0, Route104_EventScript_14EEC8, 0, 0, 0
- object_event 17, MAP_OBJ_GFX_BERRY_TREE, 0, 3, 0, 22, 0, 3, 12, 0, 0, 0, 0, 3, 0, BerryTreeScript, 0, 0, 0
- object_event 18, MAP_OBJ_GFX_BERRY_TREE, 0, 3, 0, 23, 0, 3, 12, 0, 0, 0, 0, 4, 0, BerryTreeScript, 0, 0, 0
- object_event 19, MAP_OBJ_GFX_BERRY_TREE, 0, 3, 0, 24, 0, 3, 12, 0, 0, 0, 0, 75, 0, BerryTreeScript, 0, 0, 0
- object_event 20, MAP_OBJ_GFX_BERRY_TREE, 0, 3, 0, 25, 0, 3, 12, 0, 0, 0, 0, 76, 0, BerryTreeScript, 0, 0, 0
+ object_event 17, MAP_OBJ_GFX_BERRY_TREE, 0, 3, 0, 22, 0, 3, 12, 0, 0, 0, 0, 3, 0, S_BerryTree, 0, 0, 0
+ object_event 18, MAP_OBJ_GFX_BERRY_TREE, 0, 3, 0, 23, 0, 3, 12, 0, 0, 0, 0, 4, 0, S_BerryTree, 0, 0, 0
+ object_event 19, MAP_OBJ_GFX_BERRY_TREE, 0, 3, 0, 24, 0, 3, 12, 0, 0, 0, 0, 75, 0, S_BerryTree, 0, 0, 0
+ object_event 20, MAP_OBJ_GFX_BERRY_TREE, 0, 3, 0, 25, 0, 3, 12, 0, 0, 0, 0, 76, 0, S_BerryTree, 0, 0, 0
object_event 21, MAP_OBJ_GFX_ITEM_BALL, 0, 39, 0, 15, 0, 3, 1, 0, 0, 0, 0, 0, 0, Route104_EventScript_1B1453, 1002, 0, 0
object_event 22, MAP_OBJ_GFX_WOMAN_7, 0, 8, 0, 19, 0, 3, 5, 1, 0, 0, 0, 0, 0, Route104_EventScript_14EF09, 906, 0, 0
object_event 23, MAP_OBJ_GFX_LITTLE_GIRL_1, 0, 27, 0, 15, 0, 3, 8, 0, 0, 1, 0, 0, 0, Route104_EventScript_14F25A, 0, 0, 0
@@ -28,7 +28,7 @@ Route104_MapObjects:: @ 8381488
object_event 27, MAP_OBJ_GFX_ITEM_BALL, 0, 29, 0, 53, 0, 3, 1, 17, 0, 0, 0, 0, 0, Route104_EventScript_1B1460, 1057, 0, 0
object_event 28, MAP_OBJ_GFX_YOUNGSTER, 0, 18, 0, 67, 0, 3, 46, 101, 0, 1, 0, 2, 0, Route104_EventScript_14F189, 0, 0, 0
object_event 29, MAP_OBJ_GFX_ITEM_BALL, 0, 37, 0, 22, 0, 3, 1, 17, 0, 0, 0, 0, 0, Route104_EventScript_1B146D, 1115, 0, 0
- object_event 30, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 35, 0, 22, 0, 3, 1, 17, 0, 0, 0, 0, 0, CuttableTreeScript, 17, 0, 0
+ object_event 30, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 35, 0, 22, 0, 3, 1, 17, 0, 0, 0, 0, 0, S_CuttableTree, 17, 0, 0
object_event 31, MAP_OBJ_GFX_ITEM_BALL, 0, 5, 0, 8, 0, 3, 1, 17, 0, 0, 0, 0, 0, Route104_EventScript_1B147A, 1135, 0, 0
object_event 32, MAP_OBJ_GFX_BOY_2, 0, 5, 0, 26, 0, 3, 1, 17, 0, 0, 0, 0, 0, Route104_EventScript_14EF93, 0, 0, 0
diff --git a/data/maps/events/Route110.inc b/data/maps/events/Route110.inc
index 4ece25549..3db4ce8e8 100644
--- a/data/maps/events/Route110.inc
+++ b/data/maps/events/Route110.inc
@@ -14,9 +14,9 @@ Route110_MapObjects:: @ 8381D58
object_event 13, MAP_OBJ_GFX_LASS, 0, 33, 0, 15, 0, 3, 9, 0, 0, 1, 0, 1, 0, Route110_EventScript_14FAA5, 0, 0, 0
object_event 14, MAP_OBJ_GFX_MANIAC, 0, 23, 0, 40, 0, 3, 20, 0, 0, 1, 0, 3, 0, Route110_EventScript_14FABC, 0, 0, 0
object_event 15, MAP_OBJ_GFX_FISHERMAN, 0, 10, 0, 19, 0, 3, 8, 0, 0, 1, 0, 1, 0, Route110_EventScript_14FAFA, 0, 0, 0
- object_event 16, MAP_OBJ_GFX_BERRY_TREE, 0, 5, 0, 11, 0, 3, 12, 0, 0, 0, 0, 16, 0, BerryTreeScript, 0, 0, 0
- object_event 17, MAP_OBJ_GFX_BERRY_TREE, 0, 6, 0, 11, 0, 3, 12, 0, 0, 0, 0, 17, 0, BerryTreeScript, 0, 0, 0
- object_event 18, MAP_OBJ_GFX_BERRY_TREE, 0, 7, 0, 11, 0, 3, 12, 0, 0, 0, 0, 18, 0, BerryTreeScript, 0, 0, 0
+ object_event 16, MAP_OBJ_GFX_BERRY_TREE, 0, 5, 0, 11, 0, 3, 12, 0, 0, 0, 0, 16, 0, S_BerryTree, 0, 0, 0
+ object_event 17, MAP_OBJ_GFX_BERRY_TREE, 0, 6, 0, 11, 0, 3, 12, 0, 0, 0, 0, 17, 0, S_BerryTree, 0, 0, 0
+ object_event 18, MAP_OBJ_GFX_BERRY_TREE, 0, 7, 0, 11, 0, 3, 12, 0, 0, 0, 0, 18, 0, S_BerryTree, 0, 0, 0
object_event 19, MAP_OBJ_GFX_ITEM_BALL, 0, 30, 0, 69, 0, 3, 1, 0, 0, 0, 0, 0, 0, Route110_EventScript_1B14BB, 1007, 0, 0
object_event 20, MAP_OBJ_GFX_ITEM_BALL, 0, 26, 0, 47, 0, 3, 1, 0, 0, 0, 0, 0, 0, Route110_EventScript_1B14AE, 1006, 0, 0
object_event 21, MAP_OBJ_GFX_CYCLING_TRIATHLETE_M, 0, 27, 0, 92, 0, 3, 8, 0, 0, 0, 0, 0, 0, Route110_EventScript_14FA53, 0, 0, 0
diff --git a/data/maps/events/Route110_TrickHousePuzzle1.inc b/data/maps/events/Route110_TrickHousePuzzle1.inc
index 7e282f0e8..3660e3c3f 100644
--- a/data/maps/events/Route110_TrickHousePuzzle1.inc
+++ b/data/maps/events/Route110_TrickHousePuzzle1.inc
@@ -2,22 +2,22 @@ Route110_TrickHousePuzzle1_MapObjects:: @ 839225C
object_event 1, MAP_OBJ_GFX_LASS, 0, 13, 0, 21, 0, 3, 9, 0, 0, 1, 0, 5, 0, Route110_TrickHousePuzzle1_EventScript_161D31, 0, 0, 0
object_event 2, MAP_OBJ_GFX_YOUNGSTER, 0, 13, 0, 7, 0, 3, 8, 0, 0, 1, 0, 2, 0, Route110_TrickHousePuzzle1_EventScript_161D48, 0, 0, 0
object_event 3, MAP_OBJ_GFX_LASS, 0, 3, 0, 8, 0, 3, 9, 0, 0, 1, 0, 3, 0, Route110_TrickHousePuzzle1_EventScript_161D5F, 0, 0, 0
- object_event 4, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 3, 0, 18, 0, 3, 1, 0, 0, 0, 0, 0, 0, CuttableTreeScript, 19, 0, 0
- object_event 5, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 7, 0, 21, 0, 3, 1, 0, 0, 0, 0, 0, 0, CuttableTreeScript, 17, 0, 0
- object_event 6, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 12, 0, 18, 0, 3, 1, 0, 0, 0, 0, 0, 0, CuttableTreeScript, 18, 0, 0
- object_event 7, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 10, 0, 16, 0, 3, 1, 0, 0, 0, 0, 0, 0, CuttableTreeScript, 20, 0, 0
- object_event 8, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 12, 0, 12, 0, 3, 1, 0, 0, 0, 0, 0, 0, CuttableTreeScript, 23, 0, 0
- object_event 9, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 3, 0, 12, 0, 3, 1, 0, 0, 0, 0, 0, 0, CuttableTreeScript, 22, 0, 0
- object_event 10, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 0, 0, 14, 0, 3, 1, 0, 0, 0, 0, 0, 0, CuttableTreeScript, 21, 0, 0
- object_event 11, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 6, 0, 10, 0, 3, 1, 0, 0, 0, 0, 0, 0, CuttableTreeScript, 25, 0, 0
- object_event 12, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 2, 0, 10, 0, 3, 1, 0, 0, 0, 0, 0, 0, CuttableTreeScript, 24, 0, 0
- object_event 13, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 9, 0, 8, 0, 3, 1, 0, 0, 0, 0, 0, 0, CuttableTreeScript, 26, 0, 0
- object_event 14, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 2, 0, 4, 0, 3, 1, 0, 0, 0, 0, 0, 0, CuttableTreeScript, 28, 0, 0
- object_event 15, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 0, 0, 6, 0, 3, 1, 0, 0, 0, 0, 0, 0, CuttableTreeScript, 27, 0, 0
- object_event 16, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 6, 0, 4, 0, 3, 1, 0, 0, 0, 0, 0, 0, CuttableTreeScript, 29, 0, 0
- object_event 17, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 11, 0, 4, 0, 3, 1, 0, 0, 0, 0, 0, 0, CuttableTreeScript, 30, 0, 0
+ object_event 4, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 3, 0, 18, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_CuttableTree, 19, 0, 0
+ object_event 5, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 7, 0, 21, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_CuttableTree, 17, 0, 0
+ object_event 6, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 12, 0, 18, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_CuttableTree, 18, 0, 0
+ object_event 7, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 10, 0, 16, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_CuttableTree, 20, 0, 0
+ object_event 8, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 12, 0, 12, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_CuttableTree, 23, 0, 0
+ object_event 9, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 3, 0, 12, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_CuttableTree, 22, 0, 0
+ object_event 10, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 0, 0, 14, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_CuttableTree, 21, 0, 0
+ object_event 11, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 6, 0, 10, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_CuttableTree, 25, 0, 0
+ object_event 12, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 2, 0, 10, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_CuttableTree, 24, 0, 0
+ object_event 13, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 9, 0, 8, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_CuttableTree, 26, 0, 0
+ object_event 14, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 2, 0, 4, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_CuttableTree, 28, 0, 0
+ object_event 15, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 0, 0, 6, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_CuttableTree, 27, 0, 0
+ object_event 16, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 6, 0, 4, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_CuttableTree, 29, 0, 0
+ object_event 17, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 11, 0, 4, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_CuttableTree, 30, 0, 0
object_event 18, MAP_OBJ_GFX_ITEM_BALL, 0, 9, 0, 12, 0, 3, 1, 0, 0, 0, 0, 0, 0, Route110_TrickHousePuzzle1_EventScript_1B1A51, 1060, 0, 0
- object_event 19, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 14, 0, 14, 0, 3, 1, 0, 0, 0, 0, 0, 0, CuttableTreeScript, 31, 0, 0
+ object_event 19, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 14, 0, 14, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_CuttableTree, 31, 0, 0
Route110_TrickHousePuzzle1_MapWarps:: @ 8392424
warp_def 0, 21, 3, 2, Route110_TrickHouseEntrance
diff --git a/data/maps/events/Route110_TrickHousePuzzle3.inc b/data/maps/events/Route110_TrickHousePuzzle3.inc
index b7a902a54..abccae1d4 100644
--- a/data/maps/events/Route110_TrickHousePuzzle3.inc
+++ b/data/maps/events/Route110_TrickHousePuzzle3.inc
@@ -2,14 +2,14 @@ Route110_TrickHousePuzzle3_MapObjects:: @ 839254C
object_event 1, MAP_OBJ_GFX_CAMPER, 0, 10, 0, 16, 0, 3, 8, 0, 0, 1, 0, 1, 0, Route110_TrickHousePuzzle3_EventScript_162708, 0, 0, 0
object_event 2, MAP_OBJ_GFX_PICNICKER, 0, 1, 0, 13, 0, 3, 10, 0, 0, 1, 0, 1, 0, Route110_TrickHousePuzzle3_EventScript_16271F, 0, 0, 0
object_event 3, MAP_OBJ_GFX_HIKER, 0, 11, 0, 4, 0, 3, 8, 0, 0, 1, 0, 1, 0, Route110_TrickHousePuzzle3_EventScript_162736, 0, 0, 0
- object_event 4, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 4, 0, 12, 0, 3, 1, 0, 0, 0, 0, 0, 0, BreakableRockScript, 17, 0, 0
- object_event 5, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 1, 0, 3, 0, 3, 1, 0, 0, 0, 0, 0, 0, BreakableRockScript, 18, 0, 0
- object_event 6, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 11, 0, 10, 0, 3, 1, 0, 0, 0, 0, 0, 0, BreakableRockScript, 19, 0, 0
- object_event 7, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 13, 0, 7, 0, 3, 1, 0, 0, 0, 0, 0, 0, BreakableRockScript, 20, 0, 0
+ object_event 4, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 4, 0, 12, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_BreakableRock, 17, 0, 0
+ object_event 5, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 1, 0, 3, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_BreakableRock, 18, 0, 0
+ object_event 6, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 11, 0, 10, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_BreakableRock, 19, 0, 0
+ object_event 7, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 13, 0, 7, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_BreakableRock, 20, 0, 0
object_event 8, MAP_OBJ_GFX_ITEM_BALL, 0, 0, 0, 11, 0, 3, 1, 0, 0, 0, 0, 0, 0, Route110_TrickHousePuzzle3_EventScript_1B1A85, 1064, 0, 0
object_event 9, MAP_OBJ_GFX_ITEM_BALL, 0, 7, 0, 2, 0, 3, 1, 0, 0, 0, 0, 0, 0, Route110_TrickHousePuzzle3_EventScript_1B1A78, 1063, 0, 0
- object_event 10, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 1, 0, 20, 0, 3, 1, 17, 0, 0, 0, 0, 0, BreakableRockScript, 21, 0, 0
- object_event 11, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 2, 0, 21, 0, 3, 1, 17, 0, 0, 0, 0, 0, BreakableRockScript, 22, 0, 0
+ object_event 10, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 1, 0, 20, 0, 3, 1, 17, 0, 0, 0, 0, 0, S_BreakableRock, 21, 0, 0
+ object_event 11, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 2, 0, 21, 0, 3, 1, 17, 0, 0, 0, 0, 0, S_BreakableRock, 22, 0, 0
Route110_TrickHousePuzzle3_MapWarps:: @ 8392654
warp_def 0, 21, 3, 2, Route110_TrickHouseEntrance
diff --git a/data/maps/events/Route110_TrickHousePuzzle4.inc b/data/maps/events/Route110_TrickHousePuzzle4.inc
index ac3e152a2..ef450800d 100644
--- a/data/maps/events/Route110_TrickHousePuzzle4.inc
+++ b/data/maps/events/Route110_TrickHousePuzzle4.inc
@@ -3,17 +3,17 @@ Route110_TrickHousePuzzle4_MapObjects:: @ 83926FC
object_event 2, MAP_OBJ_GFX_GIRL_3, 0, 10, 0, 4, 0, 3, 10, 0, 0, 1, 0, 1, 0, Route110_TrickHousePuzzle4_EventScript_162799, 0, 0, 0
object_event 3, MAP_OBJ_GFX_BLACK_BELT, 0, 7, 0, 4, 0, 3, 9, 0, 0, 1, 0, 2, 0, Route110_TrickHousePuzzle4_EventScript_162782, 0, 0, 0
object_event 4, MAP_OBJ_GFX_ITEM_BALL, 0, 4, 0, 4, 0, 0, 1, 0, 0, 0, 0, 0, 0, Route110_TrickHousePuzzle4_EventScript_1B1A92, 1065, 0, 0
- object_event 5, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 13, 0, 3, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 17, 0, 0
- object_event 6, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 6, 0, 14, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 18, 0, 0
- object_event 7, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 2, 0, 12, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 19, 0, 0
- object_event 8, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 3, 0, 9, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 20, 0, 0
- object_event 9, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 12, 0, 2, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 21, 0, 0
- object_event 10, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 8, 0, 8, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 22, 0, 0
- object_event 11, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 9, 0, 7, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 23, 0, 0
- object_event 12, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 11, 0, 13, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 24, 0, 0
- object_event 13, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 14, 0, 2, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 25, 0, 0
- object_event 14, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 4, 0, 14, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 26, 0, 0
- object_event 15, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 14, 0, 9, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 27, 0, 0
+ object_event 5, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 13, 0, 3, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 17, 0, 0
+ object_event 6, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 6, 0, 14, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 18, 0, 0
+ object_event 7, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 2, 0, 12, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 19, 0, 0
+ object_event 8, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 3, 0, 9, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 20, 0, 0
+ object_event 9, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 12, 0, 2, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 21, 0, 0
+ object_event 10, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 8, 0, 8, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 22, 0, 0
+ object_event 11, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 9, 0, 7, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 23, 0, 0
+ object_event 12, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 11, 0, 13, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 24, 0, 0
+ object_event 13, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 14, 0, 2, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 25, 0, 0
+ object_event 14, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 4, 0, 14, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 26, 0, 0
+ object_event 15, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 14, 0, 9, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 27, 0, 0
Route110_TrickHousePuzzle4_MapWarps:: @ 8392864
warp_def 0, 21, 3, 2, Route110_TrickHouseEntrance
diff --git a/data/maps/events/Route111.inc b/data/maps/events/Route111.inc
index 9eeed5ede..e36cd7e74 100644
--- a/data/maps/events/Route111.inc
+++ b/data/maps/events/Route111.inc
@@ -4,8 +4,8 @@ Route111_MapObjects:: @ 83821A0
object_event 3, MAP_OBJ_GFX_LASS, 0, 13, 0, 113, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0x0, 770, 0, 0
object_event 4, MAP_OBJ_GFX_OLD_WOMAN_1, 0, 13, 0, 113, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0x0, 771, 0, 0
object_event 5, MAP_OBJ_GFX_PICNICKER, 0, 28, 0, 51, 0, 3, 17, 0, 0, 1, 0, 3, 0, Route111_EventScript_1503BE, 0, 0, 0
- object_event 6, MAP_OBJ_GFX_BERRY_TREE, 0, 22, 0, 5, 0, 3, 12, 0, 0, 0, 0, 19, 0, BerryTreeScript, 0, 0, 0
- object_event 7, MAP_OBJ_GFX_BERRY_TREE, 0, 23, 0, 5, 0, 3, 12, 0, 0, 0, 0, 20, 0, BerryTreeScript, 0, 0, 0
+ object_event 6, MAP_OBJ_GFX_BERRY_TREE, 0, 22, 0, 5, 0, 3, 12, 0, 0, 0, 0, 19, 0, S_BerryTree, 0, 0, 0
+ object_event 7, MAP_OBJ_GFX_BERRY_TREE, 0, 23, 0, 5, 0, 3, 12, 0, 0, 0, 0, 20, 0, S_BerryTree, 0, 0, 0
object_event 8, MAP_OBJ_GFX_MAN_4, 0, 8, 0, 91, 0, 3, 2, 17, 0, 0, 0, 0, 0, Route111_EventScript_150395, 0, 0, 0
object_event 9, MAP_OBJ_GFX_CAMPER, 0, 24, 0, 60, 0, 3, 21, 0, 0, 1, 0, 3, 0, Route111_EventScript_1503A7, 0, 0, 0
object_event 10, MAP_OBJ_GFX_HIKER, 0, 27, 0, 69, 0, 3, 50, 34, 0, 1, 0, 2, 0, Route111_EventScript_150403, 0, 0, 0
@@ -13,19 +13,19 @@ Route111_MapObjects:: @ 83821A0
object_event 12, MAP_OBJ_GFX_PICNICKER, 0, 32, 0, 72, 0, 3, 24, 0, 0, 1, 0, 3, 0, Route111_EventScript_1503EC, 0, 0, 0
object_event 13, MAP_OBJ_GFX_CAMERAMAN, 0, 14, 0, 86, 0, 3, 8, 0, 0, 0, 0, 0, 0, Route111_EventScript_1AE442, 796, 0, 0
object_event 14, MAP_OBJ_GFX_REPORTER_F, 0, 13, 0, 86, 0, 3, 8, 0, 0, 0, 0, 0, 0, Route111_EventScript_1AE422, 796, 0, 0
- object_event 15, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 18, 0, 101, 0, 3, 1, 0, 0, 0, 0, 0, 0, BreakableRockScript, 17, 0, 0
- object_event 16, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 19, 0, 100, 0, 3, 1, 0, 0, 0, 0, 0, 0, BreakableRockScript, 18, 0, 0
+ object_event 15, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 18, 0, 101, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_BreakableRock, 17, 0, 0
+ object_event 16, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 19, 0, 100, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_BreakableRock, 18, 0, 0
object_event 17, MAP_OBJ_GFX_GIRL_1, 0, 23, 0, 8, 0, 3, 5, 1, 0, 0, 0, 0, 0, Route111_EventScript_1500C5, 0, 0, 0
object_event 18, MAP_OBJ_GFX_ITEM_BALL, 0, 32, 0, 105, 0, 3, 1, 0, 0, 0, 0, 0, 0, Route111_EventScript_1B14C8, 1008, 0, 0
- object_event 19, MAP_OBJ_GFX_BERRY_TREE, 0, 18, 0, 5, 0, 3, 12, 0, 0, 0, 0, 80, 0, BerryTreeScript, 0, 0, 0
- object_event 20, MAP_OBJ_GFX_BERRY_TREE, 0, 19, 0, 5, 0, 3, 12, 0, 0, 0, 0, 81, 0, BerryTreeScript, 0, 0, 0
+ object_event 19, MAP_OBJ_GFX_BERRY_TREE, 0, 18, 0, 5, 0, 3, 12, 0, 0, 0, 0, 80, 0, S_BerryTree, 0, 0, 0
+ object_event 20, MAP_OBJ_GFX_BERRY_TREE, 0, 19, 0, 5, 0, 3, 12, 0, 0, 0, 0, 81, 0, S_BerryTree, 0, 0, 0
object_event 21, MAP_OBJ_GFX_REPORTER_F, 0, 13, 0, 86, 0, 3, 8, 0, 0, 0, 0, 0, 0, Route111_EventScript_1AE4E2, 799, 0, 0
object_event 22, MAP_OBJ_GFX_CAMERAMAN, 0, 14, 0, 86, 0, 3, 8, 0, 0, 0, 0, 0, 0, Route111_EventScript_1AE502, 799, 0, 0
object_event 23, MAP_OBJ_GFX_REPORTER_F, 0, 13, 0, 86, 0, 3, 8, 0, 0, 0, 0, 0, 0, Route111_EventScript_1AE562, 903, 0, 0
object_event 24, MAP_OBJ_GFX_CAMERAMAN, 0, 14, 0, 86, 0, 3, 8, 0, 0, 0, 0, 0, 0, Route111_EventScript_1AE582, 903, 0, 0
object_event 25, MAP_OBJ_GFX_ITEM_BALL, 0, 12, 0, 54, 0, 3, 1, 0, 0, 0, 0, 0, 0, Route111_EventScript_1B14D5, 1009, 0, 0
object_event 26, MAP_OBJ_GFX_ITEM_BALL, 0, 3, 0, 114, 0, 3, 1, 0, 0, 0, 0, 0, 0, Route111_EventScript_1B14E2, 1010, 0, 0
- object_event 27, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 22, 0, 21, 0, 3, 1, 0, 0, 0, 0, 0, 0, CuttableTreeScript, 19, 0, 0
+ object_event 27, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 22, 0, 21, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_CuttableTree, 19, 0, 0
object_event 28, MAP_OBJ_GFX_PICNICKER, 0, 10, 0, 82, 0, 3, 14, 0, 0, 1, 0, 2, 0, Route111_EventScript_150458, 0, 0, 0
object_event 29, MAP_OBJ_GFX_CAMPER, 0, 11, 0, 71, 0, 3, 22, 0, 0, 1, 0, 3, 0, Route111_EventScript_150441, 0, 0, 0
object_event 30, MAP_OBJ_GFX_BLACK_BELT, 0, 32, 0, 29, 0, 3, 28, 1, 0, 1, 0, 2, 0, Route111_EventScript_15046F, 0, 0, 0
diff --git a/data/maps/events/Route112.inc b/data/maps/events/Route112.inc
index f6dfcfbe5..a4991a907 100644
--- a/data/maps/events/Route112.inc
+++ b/data/maps/events/Route112.inc
@@ -5,10 +5,10 @@ Route112_MapObjects:: @ 8382818
object_event 4, MAP_OBJ_GFX_PICNICKER, 0, 22, 0, 46, 0, 3, 23, 0, 0, 1, 0, 3, 0, Route112_EventScript_1505B5, 0, 0, 0
object_event 5, MAP_OBJ_GFX_HIKER, 0, 17, 0, 40, 0, 3, 16, 0, 0, 1, 0, 4, 0, Route112_EventScript_150560, 0, 0, 0
object_event 6, 241, 0, 27, 0, 30, 0, 3, 8, 0, 0, 0, 0, 0, 0, Route112_EventScript_15051C, 819, 0, 0
- object_event 7, MAP_OBJ_GFX_BERRY_TREE, 0, 27, 0, 6, 0, 0, 12, 0, 0, 0, 0, 24, 0, BerryTreeScript, 0, 0, 0
- object_event 8, MAP_OBJ_GFX_BERRY_TREE, 0, 28, 0, 6, 0, 0, 12, 0, 0, 0, 0, 23, 0, BerryTreeScript, 0, 0, 0
- object_event 9, MAP_OBJ_GFX_BERRY_TREE, 0, 29, 0, 6, 0, 0, 12, 0, 0, 0, 0, 22, 0, BerryTreeScript, 0, 0, 0
- object_event 10, MAP_OBJ_GFX_BERRY_TREE, 0, 30, 0, 6, 0, 3, 12, 0, 0, 0, 0, 21, 0, BerryTreeScript, 0, 0, 0
+ object_event 7, MAP_OBJ_GFX_BERRY_TREE, 0, 27, 0, 6, 0, 0, 12, 0, 0, 0, 0, 24, 0, S_BerryTree, 0, 0, 0
+ object_event 8, MAP_OBJ_GFX_BERRY_TREE, 0, 28, 0, 6, 0, 0, 12, 0, 0, 0, 0, 23, 0, S_BerryTree, 0, 0, 0
+ object_event 9, MAP_OBJ_GFX_BERRY_TREE, 0, 29, 0, 6, 0, 0, 12, 0, 0, 0, 0, 22, 0, S_BerryTree, 0, 0, 0
+ object_event 10, MAP_OBJ_GFX_BERRY_TREE, 0, 30, 0, 6, 0, 3, 12, 0, 0, 0, 0, 21, 0, S_BerryTree, 0, 0, 0
object_event 11, MAP_OBJ_GFX_HIKER, 0, 8, 0, 50, 0, 3, 26, 48, 0, 0, 0, 0, 0, Route112_EventScript_150540, 0, 0, 0
object_event 12, MAP_OBJ_GFX_ITEM_BALL, 0, 14, 0, 43, 0, 3, 1, 0, 0, 0, 0, 0, 0, Route112_EventScript_1B14EF, 1011, 0, 0
diff --git a/data/maps/events/Route114.inc b/data/maps/events/Route114.inc
index a2d948d33..1f4d761e3 100644
--- a/data/maps/events/Route114.inc
+++ b/data/maps/events/Route114.inc
@@ -1,25 +1,25 @@
Route114_MapObjects:: @ 8382C48
- object_event 1, MAP_OBJ_GFX_BERRY_TREE, 0, 31, 0, 43, 0, 3, 12, 0, 0, 0, 0, 77, 0, BerryTreeScript, 0, 0, 0
- object_event 2, MAP_OBJ_GFX_BERRY_TREE, 0, 31, 0, 44, 0, 3, 12, 0, 0, 0, 0, 78, 0, BerryTreeScript, 0, 0, 0
+ object_event 1, MAP_OBJ_GFX_BERRY_TREE, 0, 31, 0, 43, 0, 3, 12, 0, 0, 0, 0, 77, 0, S_BerryTree, 0, 0, 0
+ object_event 2, MAP_OBJ_GFX_BERRY_TREE, 0, 31, 0, 44, 0, 3, 12, 0, 0, 0, 0, 78, 0, S_BerryTree, 0, 0, 0
object_event 3, MAP_OBJ_GFX_HIKER, 0, 15, 0, 65, 0, 7, 10, 0, 0, 1, 0, 6, 0, Route114_EventScript_1507F1, 0, 0, 0
object_event 4, MAP_OBJ_GFX_HIKER, 0, 30, 0, 72, 0, 5, 15, 0, 0, 1, 0, 4, 0, Route114_EventScript_150808, 0, 0, 0
object_event 5, MAP_OBJ_GFX_CAMPER, 0, 22, 0, 50, 0, 3, 10, 0, 0, 1, 0, 3, 0, Route114_EventScript_15081F, 0, 0, 0
object_event 6, MAP_OBJ_GFX_PICNICKER, 0, 19, 0, 35, 0, 3, 1, 0, 0, 1, 0, 3, 0, Route114_EventScript_150836, 0, 0, 0
object_event 7, MAP_OBJ_GFX_MANIAC, 0, 20, 0, 56, 0, 3, 7, 0, 0, 1, 0, 3, 0, Route114_EventScript_15084D, 0, 0, 0
- object_event 8, MAP_OBJ_GFX_BERRY_TREE, 0, 31, 0, 45, 0, 3, 12, 0, 0, 0, 0, 68, 0, BerryTreeScript, 0, 0, 0
+ object_event 8, MAP_OBJ_GFX_BERRY_TREE, 0, 31, 0, 45, 0, 3, 12, 0, 0, 0, 0, 68, 0, S_BerryTree, 0, 0, 0
object_event 9, MAP_OBJ_GFX_ITEM_BALL, 0, 7, 0, 6, 0, 3, 1, 0, 0, 0, 0, 0, 0, Route114_EventScript_1B1516, 1014, 0, 0
object_event 10, MAP_OBJ_GFX_ITEM_BALL, 0, 11, 0, 37, 0, 4, 1, 0, 0, 0, 0, 0, 0, Route114_EventScript_1B1523, 1015, 0, 0
- object_event 11, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 12, 0, 43, 0, 4, 1, 0, 0, 0, 0, 0, 0, BreakableRockScript, 17, 0, 0
+ object_event 11, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 12, 0, 43, 0, 4, 1, 0, 0, 0, 0, 0, 0, S_BreakableRock, 17, 0, 0
object_event 12, MAP_OBJ_GFX_GENTLEMAN, 0, 19, 0, 11, 0, 3, 10, 0, 0, 0, 0, 0, 0, Route114_EventScript_150782, 0, 0, 0
object_event 13, MAP_OBJ_GFX_POOCHYENA, 0, 19, 0, 12, 0, 3, 10, 0, 0, 0, 0, 0, 0, Route114_EventScript_1507C3, 0, 0, 0
object_event 14, MAP_OBJ_GFX_MAN_5, 0, 27, 0, 42, 0, 3, 3, 16, 0, 0, 0, 0, 0, Route114_EventScript_150733, 0, 0, 0
object_event 15, MAP_OBJ_GFX_FISHERMAN, 0, 23, 0, 20, 0, 3, 8, 0, 0, 1, 0, 0, 0, Route114_EventScript_1508E0, 0, 0, 0
object_event 16, MAP_OBJ_GFX_FISHERMAN, 0, 19, 0, 26, 0, 3, 9, 0, 0, 1, 0, 0, 0, Route114_EventScript_1508C9, 0, 0, 0
object_event 17, MAP_OBJ_GFX_MAN_6, 0, 30, 0, 58, 0, 5, 23, 0, 0, 1, 0, 3, 0, Route114_EventScript_15088B, 0, 0, 0
- object_event 18, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 29, 0, 53, 0, 5, 1, 17, 0, 0, 0, 0, 0, BreakableRockScript, 18, 0, 0
- object_event 19, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 30, 0, 54, 0, 5, 1, 17, 0, 0, 0, 0, 0, BreakableRockScript, 19, 0, 0
- object_event 20, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 22, 0, 69, 0, 7, 1, 17, 0, 0, 0, 0, 0, BreakableRockScript, 20, 0, 0
- object_event 21, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 11, 0, 64, 0, 5, 1, 17, 0, 0, 0, 0, 0, BreakableRockScript, 21, 0, 0
+ object_event 18, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 29, 0, 53, 0, 5, 1, 17, 0, 0, 0, 0, 0, S_BreakableRock, 18, 0, 0
+ object_event 19, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 30, 0, 54, 0, 5, 1, 17, 0, 0, 0, 0, 0, S_BreakableRock, 19, 0, 0
+ object_event 20, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 22, 0, 69, 0, 7, 1, 17, 0, 0, 0, 0, 0, S_BreakableRock, 20, 0, 0
+ object_event 21, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 11, 0, 64, 0, 5, 1, 17, 0, 0, 0, 0, 0, S_BreakableRock, 21, 0, 0
object_event 22, MAP_OBJ_GFX_LASS, 0, 24, 0, 44, 0, 3, 8, 17, 0, 1, 0, 0, 0, Route114_EventScript_150912, 0, 0, 0
object_event 23, MAP_OBJ_GFX_LASS, 0, 23, 0, 44, 0, 3, 8, 17, 0, 1, 0, 0, 0, Route114_EventScript_1508F7, 0, 0, 0
diff --git a/data/maps/events/Route115.inc b/data/maps/events/Route115.inc
index cba3c3e7d..ddca08fad 100644
--- a/data/maps/events/Route115.inc
+++ b/data/maps/events/Route115.inc
@@ -2,18 +2,18 @@ Route115_MapObjects:: @ 8382F2C
object_event 1, MAP_OBJ_GFX_WOMAN_3, 0, 18, 0, 68, 0, 3, 2, 17, 0, 0, 0, 0, 0, Route115_EventScript_15092E, 0, 0, 0
object_event 2, MAP_OBJ_GFX_OLD_MAN_1, 0, 5, 0, 15, 0, 3, 10, 0, 0, 1, 0, 6, 0, Route115_EventScript_150949, 0, 0, 0
object_event 3, MAP_OBJ_GFX_BLACK_BELT, 0, 27, 0, 53, 0, 3, 15, 17, 0, 1, 0, 4, 0, Route115_EventScript_15099E, 0, 0, 0
- object_event 4, MAP_OBJ_GFX_BERRY_TREE, 0, 11, 0, 5, 0, 3, 12, 0, 0, 0, 0, 69, 0, BerryTreeScript, 0, 0, 0
- object_event 5, MAP_OBJ_GFX_BERRY_TREE, 0, 12, 0, 5, 0, 3, 12, 0, 0, 0, 0, 70, 0, BerryTreeScript, 0, 0, 0
- object_event 6, MAP_OBJ_GFX_BERRY_TREE, 0, 13, 0, 5, 0, 3, 12, 0, 0, 0, 0, 71, 0, BerryTreeScript, 0, 0, 0
+ object_event 4, MAP_OBJ_GFX_BERRY_TREE, 0, 11, 0, 5, 0, 3, 12, 0, 0, 0, 0, 69, 0, S_BerryTree, 0, 0, 0
+ object_event 5, MAP_OBJ_GFX_BERRY_TREE, 0, 12, 0, 5, 0, 3, 12, 0, 0, 0, 0, 70, 0, S_BerryTree, 0, 0, 0
+ object_event 6, MAP_OBJ_GFX_BERRY_TREE, 0, 13, 0, 5, 0, 3, 12, 0, 0, 0, 0, 71, 0, S_BerryTree, 0, 0, 0
object_event 7, MAP_OBJ_GFX_GIRL_3, 0, 15, 0, 50, 0, 3, 64, 0, 0, 1, 0, 3, 0, Route115_EventScript_1509DC, 0, 0, 0
object_event 8, MAP_OBJ_GFX_BLACK_BELT, 0, 17, 0, 17, 0, 3, 50, 51, 0, 1, 0, 2, 0, Route115_EventScript_150987, 0, 0, 0
object_event 9, MAP_OBJ_GFX_MANIAC, 0, 25, 0, 61, 0, 3, 14, 0, 0, 1, 0, 3, 0, Route115_EventScript_150A1A, 0, 0, 0
object_event 10, MAP_OBJ_GFX_ITEM_BALL, 0, 20, 0, 60, 0, 3, 1, 0, 0, 0, 0, 0, 0, Route115_EventScript_1B1530, 1016, 0, 0
object_event 11, MAP_OBJ_GFX_ITEM_BALL, 0, 19, 0, 5, 0, 3, 1, 0, 0, 0, 0, 0, 0, Route115_EventScript_1B153D, 1017, 0, 0
object_event 12, MAP_OBJ_GFX_ITEM_BALL, 0, 23, 0, 29, 0, 3, 1, 0, 0, 0, 0, 0, 0, Route115_EventScript_1B154A, 1018, 0, 0
- object_event 13, MAP_OBJ_GFX_BERRY_TREE, 0, 31, 0, 64, 0, 3, 12, 0, 0, 0, 0, 55, 0, BerryTreeScript, 0, 0, 0
- object_event 14, MAP_OBJ_GFX_BERRY_TREE, 0, 31, 0, 65, 0, 3, 12, 0, 0, 0, 0, 56, 0, BerryTreeScript, 0, 0, 0
- object_event 15, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 29, 0, 50, 0, 3, 1, 17, 0, 0, 0, 0, 0, BreakableRockScript, 17, 0, 0
+ object_event 13, MAP_OBJ_GFX_BERRY_TREE, 0, 31, 0, 64, 0, 3, 12, 0, 0, 0, 0, 55, 0, S_BerryTree, 0, 0, 0
+ object_event 14, MAP_OBJ_GFX_BERRY_TREE, 0, 31, 0, 65, 0, 3, 12, 0, 0, 0, 0, 56, 0, S_BerryTree, 0, 0, 0
+ object_event 15, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 29, 0, 50, 0, 3, 1, 17, 0, 0, 0, 0, 0, S_BreakableRock, 17, 0, 0
object_event 16, MAP_OBJ_GFX_ITEM_BALL, 0, 31, 0, 56, 0, 3, 1, 17, 0, 0, 0, 0, 0, Route115_EventScript_1B1557, 1118, 0, 0
Route115_MapWarps:: @ 83830AC
diff --git a/data/maps/events/Route116.inc b/data/maps/events/Route116.inc
index 18717be4e..b5f922524 100644
--- a/data/maps/events/Route116.inc
+++ b/data/maps/events/Route116.inc
@@ -1,18 +1,18 @@
Route116_MapObjects:: @ 8383170
- object_event 1, MAP_OBJ_GFX_BERRY_TREE, 0, 18, 0, 2, 0, 3, 12, 0, 0, 0, 0, 25, 0, BerryTreeScript, 0, 0, 0
- object_event 2, MAP_OBJ_GFX_BERRY_TREE, 0, 19, 0, 2, 0, 3, 12, 0, 0, 0, 0, 26, 0, BerryTreeScript, 0, 0, 0
+ object_event 1, MAP_OBJ_GFX_BERRY_TREE, 0, 18, 0, 2, 0, 3, 12, 0, 0, 0, 0, 25, 0, S_BerryTree, 0, 0, 0
+ object_event 2, MAP_OBJ_GFX_BERRY_TREE, 0, 19, 0, 2, 0, 3, 12, 0, 0, 0, 0, 26, 0, S_BerryTree, 0, 0, 0
object_event 3, MAP_OBJ_GFX_YOUNGSTER, 0, 12, 0, 7, 0, 3, 16, 0, 0, 1, 0, 3, 0, Route116_EventScript_150C62, 0, 0, 0
- object_event 4, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 21, 0, 6, 0, 3, 1, 0, 0, 0, 0, 0, 0, CuttableTreeScript, 17, 0, 0
- object_event 5, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 33, 0, 8, 0, 3, 1, 0, 0, 0, 0, 0, 0, CuttableTreeScript, 18, 0, 0
+ object_event 4, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 21, 0, 6, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_CuttableTree, 17, 0, 0
+ object_event 5, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 33, 0, 8, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_CuttableTree, 18, 0, 0
object_event 6, MAP_OBJ_GFX_BUG_CATCHER, 0, 13, 0, 17, 0, 3, 24, 0, 0, 1, 0, 2, 0, Route116_EventScript_150C79, 0, 0, 0
object_event 7, MAP_OBJ_GFX_ITEM_BALL, 0, 19, 0, 6, 0, 3, 1, 0, 0, 0, 0, 0, 0, Route116_EventScript_1B1571, 1019, 0, 0
object_event 8, MAP_OBJ_GFX_ITEM_BALL, 0, 10, 0, 17, 0, 3, 1, 0, 0, 0, 0, 0, 0, Route116_EventScript_1B157E, 1020, 0, 0
- object_event 9, MAP_OBJ_GFX_BERRY_TREE, 0, 20, 0, 2, 0, 3, 12, 0, 0, 0, 0, 66, 0, BerryTreeScript, 0, 0, 0
- object_event 10, MAP_OBJ_GFX_BERRY_TREE, 0, 21, 0, 2, 0, 3, 12, 0, 0, 0, 0, 67, 0, BerryTreeScript, 0, 0, 0
+ object_event 9, MAP_OBJ_GFX_BERRY_TREE, 0, 20, 0, 2, 0, 3, 12, 0, 0, 0, 0, 66, 0, S_BerryTree, 0, 0, 0
+ object_event 10, MAP_OBJ_GFX_BERRY_TREE, 0, 21, 0, 2, 0, 3, 12, 0, 0, 0, 0, 67, 0, S_BerryTree, 0, 0, 0
object_event 11, MAP_OBJ_GFX_OLD_MAN_1, 0, 46, 0, 9, 0, 3, 1, 0, 0, 0, 0, 0, 0, Route116_EventScript_150B5D, 891, 0, 0
- object_event 12, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 30, 0, 6, 0, 3, 1, 0, 0, 0, 0, 0, 0, CuttableTreeScript, 19, 0, 0
+ object_event 12, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 30, 0, 6, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_CuttableTree, 19, 0, 0
object_event 13, MAP_OBJ_GFX_HIKER, 0, 36, 0, 15, 0, 3, 13, 0, 0, 1, 0, 2, 0, Route116_EventScript_150CCE, 0, 0, 0
- object_event 14, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 24, 0, 9, 0, 3, 1, 0, 0, 0, 0, 0, 0, CuttableTreeScript, 20, 0, 0
+ object_event 14, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 24, 0, 9, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_CuttableTree, 20, 0, 0
object_event 15, MAP_OBJ_GFX_ITEM_BALL, 0, 80, 0, 8, 0, 3, 1, 0, 0, 0, 0, 0, 0, Route116_EventScript_1B158B, 1021, 0, 0
object_event 16, MAP_OBJ_GFX_LASS, 0, 22, 0, 16, 0, 3, 13, 0, 0, 1, 0, 3, 0, Route116_EventScript_150CE5, 0, 0, 0
object_event 17, MAP_OBJ_GFX_GIRL_3, 0, 25, 0, 4, 0, 3, 8, 0, 0, 1, 0, 2, 0, Route116_EventScript_150CFC, 0, 0, 0
diff --git a/data/maps/events/Route117.inc b/data/maps/events/Route117.inc
index b53e3de57..bf6aeb5d0 100644
--- a/data/maps/events/Route117.inc
+++ b/data/maps/events/Route117.inc
@@ -9,11 +9,11 @@ Route117_MapObjects:: @ 8383440
object_event 8, MAP_OBJ_GFX_RUNNING_TRIATHLETE_M, 0, 35, 0, 7, 0, 3, 28, 7, 0, 1, 0, 4, 0, Route117_EventScript_150E09, 0, 0, 0
object_event 9, MAP_OBJ_GFX_WOMAN_3, 0, 31, 0, 11, 0, 3, 23, 0, 0, 1, 0, 3, 0, Route117_EventScript_150DCB, 0, 0, 0
object_event 10, MAP_OBJ_GFX_MAN_5, 0, 10, 0, 9, 0, 3, 18, 0, 0, 1, 0, 3, 0, Route117_EventScript_150D8D, 0, 0, 0
- object_event 11, MAP_OBJ_GFX_BERRY_TREE, 0, 41, 0, 13, 0, 3, 12, 0, 0, 0, 0, 29, 0, BerryTreeScript, 0, 0, 0
- object_event 12, MAP_OBJ_GFX_BERRY_TREE, 0, 42, 0, 13, 0, 3, 12, 0, 0, 0, 0, 28, 0, BerryTreeScript, 0, 0, 0
- object_event 13, MAP_OBJ_GFX_BERRY_TREE, 0, 43, 0, 13, 0, 3, 12, 0, 0, 0, 0, 27, 0, BerryTreeScript, 0, 0, 0
+ object_event 11, MAP_OBJ_GFX_BERRY_TREE, 0, 41, 0, 13, 0, 3, 12, 0, 0, 0, 0, 29, 0, S_BerryTree, 0, 0, 0
+ object_event 12, MAP_OBJ_GFX_BERRY_TREE, 0, 42, 0, 13, 0, 3, 12, 0, 0, 0, 0, 28, 0, S_BerryTree, 0, 0, 0
+ object_event 13, MAP_OBJ_GFX_BERRY_TREE, 0, 43, 0, 13, 0, 3, 12, 0, 0, 0, 0, 27, 0, S_BerryTree, 0, 0, 0
object_event 14, MAP_OBJ_GFX_ITEM_BALL, 0, 16, 0, 18, 0, 3, 1, 0, 0, 0, 0, 0, 0, Route117_EventScript_1B1598, 1022, 0, 0
- object_event 15, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 15, 0, 2, 0, 3, 1, 0, 0, 0, 0, 0, 0, CuttableTreeScript, 17, 0, 0
+ object_event 15, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 15, 0, 2, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_CuttableTree, 17, 0, 0
object_event 16, MAP_OBJ_GFX_ITEM_BALL, 0, 9, 0, 1, 0, 3, 1, 0, 0, 0, 0, 0, 0, Route117_EventScript_1B15A5, 1023, 0, 0
object_event 17, MAP_OBJ_GFX_RUNNING_TRIATHLETE_F, 0, 21, 0, 1, 0, 3, 40, 68, 0, 1, 0, 3, 0, Route117_EventScript_150E47, 0, 0, 0
object_event 18, MAP_OBJ_GFX_MANIAC, 0, 17, 0, 12, 0, 3, 7, 17, 0, 1, 0, 4, 0, Route117_EventScript_150E85, 0, 0, 0
diff --git a/data/maps/events/Route118.inc b/data/maps/events/Route118.inc
index f912b6fbd..df887ba1e 100644
--- a/data/maps/events/Route118.inc
+++ b/data/maps/events/Route118.inc
@@ -1,7 +1,7 @@
Route118_MapObjects:: @ 8383684
- object_event 1, MAP_OBJ_GFX_BERRY_TREE, 0, 35, 0, 5, 0, 3, 12, 0, 0, 0, 0, 31, 0, BerryTreeScript, 0, 0, 0
- object_event 2, MAP_OBJ_GFX_BERRY_TREE, 0, 36, 0, 5, 0, 3, 12, 0, 0, 0, 0, 32, 0, BerryTreeScript, 0, 0, 0
- object_event 3, MAP_OBJ_GFX_BERRY_TREE, 0, 37, 0, 5, 0, 3, 12, 0, 0, 0, 0, 33, 0, BerryTreeScript, 0, 0, 0
+ object_event 1, MAP_OBJ_GFX_BERRY_TREE, 0, 35, 0, 5, 0, 3, 12, 0, 0, 0, 0, 31, 0, S_BerryTree, 0, 0, 0
+ object_event 2, MAP_OBJ_GFX_BERRY_TREE, 0, 36, 0, 5, 0, 3, 12, 0, 0, 0, 0, 32, 0, S_BerryTree, 0, 0, 0
+ object_event 3, MAP_OBJ_GFX_BERRY_TREE, 0, 37, 0, 5, 0, 3, 12, 0, 0, 0, 0, 33, 0, S_BerryTree, 0, 0, 0
object_event 4, MAP_OBJ_GFX_MAN_6, 0, 64, 0, 10, 0, 3, 8, 0, 0, 1, 0, 3, 0, Route118_EventScript_151139, 0, 0, 0
object_event 5, MAP_OBJ_GFX_REPORTER_F, 0, 33, 0, 8, 0, 3, 8, 0, 0, 0, 0, 0, 0, Route118_EventScript_1AE462, 797, 0, 0
object_event 6, MAP_OBJ_GFX_CAMERAMAN, 0, 34, 0, 8, 0, 3, 8, 0, 0, 0, 0, 0, 0, Route118_EventScript_1AE482, 797, 0, 0
@@ -10,7 +10,7 @@ Route118_MapObjects:: @ 8383684
object_event 9, MAP_OBJ_GFX_CAMERAMAN, 0, 34, 0, 8, 0, 3, 8, 0, 0, 0, 0, 0, 0, Route118_EventScript_1AE542, 901, 0, 0
object_event 10, MAP_OBJ_GFX_REPORTER_F, 0, 33, 0, 8, 0, 3, 8, 0, 0, 0, 0, 0, 0, Route118_EventScript_1AE562, 904, 0, 0
object_event 11, MAP_OBJ_GFX_CAMERAMAN, 0, 34, 0, 8, 0, 3, 8, 0, 0, 0, 0, 0, 0, Route118_EventScript_1AE582, 904, 0, 0
- object_event 12, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 38, 0, 8, 0, 3, 1, 0, 0, 0, 0, 0, 0, CuttableTreeScript, 17, 0, 0
+ object_event 12, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 38, 0, 8, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_CuttableTree, 17, 0, 0
object_event 13, MAP_OBJ_GFX_FISHERMAN, 0, 28, 0, 8, 0, 3, 9, 0, 0, 0, 0, 0, 0, Route118_EventScript_150F34, 0, 0, 0
object_event 14, MAP_OBJ_GFX_WOMAN_3, 0, 7, 0, 10, 0, 3, 24, 0, 0, 1, 0, 4, 0, Route118_EventScript_15108F, 0, 0, 0
object_event 15, MAP_OBJ_GFX_FISHERMAN, 0, 14, 0, 14, 0, 3, 8, 0, 0, 1, 0, 0, 0, Route118_EventScript_1510E4, 0, 0, 0
diff --git a/data/maps/events/Route119.inc b/data/maps/events/Route119.inc
index 966ae6058..08e6e3649 100644
--- a/data/maps/events/Route119.inc
+++ b/data/maps/events/Route119.inc
@@ -1,7 +1,7 @@
Route119_MapObjects:: @ 8383914
- object_event 1, MAP_OBJ_GFX_BERRY_TREE, 0, 24, 0, 5, 0, 3, 12, 0, 0, 0, 0, 34, 0, BerryTreeScript, 0, 0, 0
- object_event 2, MAP_OBJ_GFX_BERRY_TREE, 0, 25, 0, 5, 0, 3, 12, 0, 0, 0, 0, 35, 0, BerryTreeScript, 0, 0, 0
- object_event 3, MAP_OBJ_GFX_BERRY_TREE, 0, 26, 0, 5, 0, 3, 12, 0, 0, 0, 0, 36, 0, BerryTreeScript, 0, 0, 0
+ object_event 1, MAP_OBJ_GFX_BERRY_TREE, 0, 24, 0, 5, 0, 3, 12, 0, 0, 0, 0, 34, 0, S_BerryTree, 0, 0, 0
+ object_event 2, MAP_OBJ_GFX_BERRY_TREE, 0, 25, 0, 5, 0, 3, 12, 0, 0, 0, 0, 35, 0, S_BerryTree, 0, 0, 0
+ object_event 3, MAP_OBJ_GFX_BERRY_TREE, 0, 26, 0, 5, 0, 3, 12, 0, 0, 0, 0, 36, 0, S_BerryTree, 0, 0, 0
object_event 4, MAP_OBJ_GFX_BUG_CATCHER, 0, 12, 0, 123, 0, 3, 59, 0, 0, 1, 0, 1, 0, Route119_EventScript_151491, 0, 0, 0
object_event 5, MAP_OBJ_GFX_MANIAC, 0, 26, 0, 123, 0, 3, 60, 0, 0, 1, 0, 1, 0, Route119_EventScript_151463, 0, 0, 0
object_event 6, MAP_OBJ_GFX_MANIAC, 0, 5, 0, 125, 0, 3, 62, 0, 0, 1, 0, 1, 0, Route119_EventScript_15144C, 0, 0, 0
@@ -25,10 +25,10 @@ Route119_MapObjects:: @ 8383914
object_event 24, 241, 0, 13, 0, 34, 0, 4, 10, 0, 0, 0, 0, 0, 0, Route119_EventScript_1515DC, 890, 0, 0
object_event 25, 243, 0, 17, 0, 33, 0, 4, 7, 0, 0, 0, 0, 0, 0, 0x0, 923, 0, 0
object_event 26, MAP_OBJ_GFX_BOY_3, 0, 31, 0, 109, 0, 3, 8, 17, 0, 0, 0, 0, 0, Route119_EventScript_1515F3, 0, 0, 0
- object_event 27, MAP_OBJ_GFX_BERRY_TREE, 0, 8, 0, 23, 0, 3, 12, 0, 0, 0, 0, 83, 0, BerryTreeScript, 0, 0, 0
- object_event 28, MAP_OBJ_GFX_BERRY_TREE, 0, 9, 0, 23, 0, 3, 12, 0, 0, 0, 0, 84, 0, BerryTreeScript, 0, 0, 0
- object_event 29, MAP_OBJ_GFX_BERRY_TREE, 0, 29, 0, 90, 0, 3, 12, 0, 0, 0, 0, 85, 0, BerryTreeScript, 0, 0, 0
- object_event 30, MAP_OBJ_GFX_BERRY_TREE, 0, 30, 0, 90, 0, 3, 12, 0, 0, 0, 0, 86, 0, BerryTreeScript, 0, 0, 0
+ object_event 27, MAP_OBJ_GFX_BERRY_TREE, 0, 8, 0, 23, 0, 3, 12, 0, 0, 0, 0, 83, 0, S_BerryTree, 0, 0, 0
+ object_event 28, MAP_OBJ_GFX_BERRY_TREE, 0, 9, 0, 23, 0, 3, 12, 0, 0, 0, 0, 84, 0, S_BerryTree, 0, 0, 0
+ object_event 29, MAP_OBJ_GFX_BERRY_TREE, 0, 29, 0, 90, 0, 3, 12, 0, 0, 0, 0, 85, 0, S_BerryTree, 0, 0, 0
+ object_event 30, MAP_OBJ_GFX_BERRY_TREE, 0, 30, 0, 90, 0, 3, 12, 0, 0, 0, 0, 86, 0, S_BerryTree, 0, 0, 0
object_event 31, MAP_OBJ_GFX_CYCLING_TRIATHLETE_M, 0, 19, 0, 133, 0, 3, 5, 18, 0, 0, 0, 0, 0, Route119_EventScript_15141A, 0, 0, 0
object_event 32, MAP_OBJ_GFX_ITEM_BALL, 0, 3, 0, 56, 0, 3, 1, 17, 0, 0, 0, 0, 0, Route119_EventScript_1B160D, 1106, 0, 0
object_event 33, MAP_OBJ_GFX_BOY_2, 0, 35, 0, 93, 0, 4, 2, 17, 0, 0, 0, 0, 0, Route119_EventScript_1515FC, 0, 0, 0
diff --git a/data/maps/events/Route120.inc b/data/maps/events/Route120.inc
index 43a67ee99..81fa21c7f 100644
--- a/data/maps/events/Route120.inc
+++ b/data/maps/events/Route120.inc
@@ -1,14 +1,14 @@
Route120_MapObjects:: @ 8383F30
- object_event 1, MAP_OBJ_GFX_BERRY_TREE, 0, 4, 0, 79, 0, 3, 12, 0, 0, 0, 0, 46, 0, BerryTreeScript, 0, 0, 0
- object_event 2, MAP_OBJ_GFX_BERRY_TREE, 0, 5, 0, 79, 0, 3, 12, 0, 0, 0, 0, 45, 0, BerryTreeScript, 0, 0, 0
- object_event 3, MAP_OBJ_GFX_BERRY_TREE, 0, 6, 0, 79, 0, 3, 12, 0, 0, 0, 0, 44, 0, BerryTreeScript, 0, 0, 0
- object_event 4, MAP_OBJ_GFX_BERRY_TREE, 0, 7, 0, 79, 0, 3, 12, 0, 0, 0, 0, 43, 0, BerryTreeScript, 0, 0, 0
- object_event 5, MAP_OBJ_GFX_BERRY_TREE, 0, 34, 0, 24, 0, 3, 12, 0, 0, 0, 0, 37, 0, BerryTreeScript, 0, 0, 0
- object_event 6, MAP_OBJ_GFX_BERRY_TREE, 0, 35, 0, 24, 0, 3, 12, 0, 0, 0, 0, 38, 0, BerryTreeScript, 0, 0, 0
- object_event 7, MAP_OBJ_GFX_BERRY_TREE, 0, 36, 0, 24, 0, 3, 12, 0, 0, 0, 0, 39, 0, BerryTreeScript, 0, 0, 0
- object_event 8, MAP_OBJ_GFX_BERRY_TREE, 0, 9, 0, 92, 0, 5, 12, 0, 0, 0, 0, 40, 0, BerryTreeScript, 0, 0, 0
- object_event 9, MAP_OBJ_GFX_BERRY_TREE, 0, 10, 0, 92, 0, 5, 12, 0, 0, 0, 0, 41, 0, BerryTreeScript, 0, 0, 0
- object_event 10, MAP_OBJ_GFX_BERRY_TREE, 0, 11, 0, 92, 0, 5, 12, 0, 0, 0, 0, 42, 0, BerryTreeScript, 0, 0, 0
+ object_event 1, MAP_OBJ_GFX_BERRY_TREE, 0, 4, 0, 79, 0, 3, 12, 0, 0, 0, 0, 46, 0, S_BerryTree, 0, 0, 0
+ object_event 2, MAP_OBJ_GFX_BERRY_TREE, 0, 5, 0, 79, 0, 3, 12, 0, 0, 0, 0, 45, 0, S_BerryTree, 0, 0, 0
+ object_event 3, MAP_OBJ_GFX_BERRY_TREE, 0, 6, 0, 79, 0, 3, 12, 0, 0, 0, 0, 44, 0, S_BerryTree, 0, 0, 0
+ object_event 4, MAP_OBJ_GFX_BERRY_TREE, 0, 7, 0, 79, 0, 3, 12, 0, 0, 0, 0, 43, 0, S_BerryTree, 0, 0, 0
+ object_event 5, MAP_OBJ_GFX_BERRY_TREE, 0, 34, 0, 24, 0, 3, 12, 0, 0, 0, 0, 37, 0, S_BerryTree, 0, 0, 0
+ object_event 6, MAP_OBJ_GFX_BERRY_TREE, 0, 35, 0, 24, 0, 3, 12, 0, 0, 0, 0, 38, 0, S_BerryTree, 0, 0, 0
+ object_event 7, MAP_OBJ_GFX_BERRY_TREE, 0, 36, 0, 24, 0, 3, 12, 0, 0, 0, 0, 39, 0, S_BerryTree, 0, 0, 0
+ object_event 8, MAP_OBJ_GFX_BERRY_TREE, 0, 9, 0, 92, 0, 5, 12, 0, 0, 0, 0, 40, 0, S_BerryTree, 0, 0, 0
+ object_event 9, MAP_OBJ_GFX_BERRY_TREE, 0, 10, 0, 92, 0, 5, 12, 0, 0, 0, 0, 41, 0, S_BerryTree, 0, 0, 0
+ object_event 10, MAP_OBJ_GFX_BERRY_TREE, 0, 11, 0, 92, 0, 5, 12, 0, 0, 0, 0, 42, 0, S_BerryTree, 0, 0, 0
object_event 11, MAP_OBJ_GFX_MAN_6, 0, 5, 0, 22, 0, 3, 14, 0, 0, 1, 0, 3, 0, Route120_EventScript_1519B3, 0, 0, 0
object_event 12, MAP_OBJ_GFX_MAN_6, 0, 32, 0, 14, 0, 3, 10, 0, 0, 1, 0, 3, 0, Route120_EventScript_1519CA, 0, 0, 0
object_event 13, MAP_OBJ_GFX_CAMPER, 0, 27, 0, 51, 0, 3, 9, 0, 0, 1, 0, 7, 0, Route120_EventScript_151A08, 0, 0, 0
@@ -19,7 +19,7 @@ Route120_MapObjects:: @ 8383F30
object_event 18, MAP_OBJ_GFX_REPORTER_F, 0, 36, 0, 5, 0, 3, 8, 0, 0, 0, 0, 0, 0, Route120_EventScript_1AE4A2, 798, 0, 0
object_event 19, MAP_OBJ_GFX_REPORTER_F, 0, 36, 0, 5, 0, 3, 8, 0, 0, 0, 0, 0, 0, Route120_EventScript_1AE562, 902, 0, 0
object_event 20, MAP_OBJ_GFX_CAMERAMAN, 0, 37, 0, 5, 0, 3, 8, 0, 0, 0, 0, 0, 0, Route120_EventScript_1AE582, 902, 0, 0
- object_event 21, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 35, 0, 32, 0, 3, 1, 0, 0, 0, 0, 0, 0, CuttableTreeScript, 17, 0, 0
+ object_event 21, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 35, 0, 32, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_CuttableTree, 17, 0, 0
object_event 22, MAP_OBJ_GFX_ITEM_BALL, 0, 7, 0, 89, 0, 3, 1, 0, 0, 0, 0, 0, 0, Route120_EventScript_1B1627, 1031, 0, 0
object_event 23, MAP_OBJ_GFX_BEAUTY, 0, 14, 0, 92, 0, 5, 5, 1, 0, 0, 0, 0, 0, Route120_EventScript_151739, 0, 0, 0
object_event 24, MAP_OBJ_GFX_WOMAN_7, 0, 28, 0, 35, 0, 3, 15, 0, 0, 1, 0, 4, 0, Route120_EventScript_151A74, 0, 0, 0
@@ -30,8 +30,8 @@ Route120_MapObjects:: @ 8383F30
object_event 29, MAP_OBJ_GFX_ITEM_BALL, 0, 23, 0, 82, 0, 5, 1, 17, 0, 0, 0, 0, 0, Route120_EventScript_1B1634, 1107, 0, 0
object_event 30, MAP_OBJ_GFX_KECLEON_1, 0, 12, 0, 16, 0, 4, 76, 17, 0, 0, 0, 0, 0, Route120_EventScript_151998, 970, 0, 0
object_event 31, MAP_OBJ_GFX_STEVEN, 0, 13, 0, 15, 0, 4, 8, 17, 0, 0, 0, 0, 0, Route120_EventScript_151853, 972, 0, 0
- object_event 32, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 20, 0, 1, 0, 3, 1, 17, 0, 0, 0, 0, 0, CuttableTreeScript, 20, 0, 0
- object_event 33, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 15, 0, 1, 0, 3, 1, 17, 0, 0, 0, 0, 0, CuttableTreeScript, 18, 0, 0
+ object_event 32, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 20, 0, 1, 0, 3, 1, 17, 0, 0, 0, 0, 0, S_CuttableTree, 20, 0, 0
+ object_event 33, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 15, 0, 1, 0, 3, 1, 17, 0, 0, 0, 0, 0, S_CuttableTree, 18, 0, 0
object_event 34, MAP_OBJ_GFX_LITTLE_BOY_1, 0, 10, 0, 72, 0, 3, 58, 17, 0, 1, 0, 3, 0, Route120_EventScript_151AD0, 0, 0, 0
object_event 35, MAP_OBJ_GFX_LITTLE_BOY_1, 0, 19, 0, 28, 0, 3, 57, 17, 0, 1, 0, 3, 0, Route120_EventScript_151AE7, 0, 0, 0
object_event 36, MAP_OBJ_GFX_KECLEON_2, 0, 12, 0, 16, 0, 3, 8, 17, 0, 0, 0, 0, 0, 0x0, 981, 0, 0
diff --git a/data/maps/events/Route121.inc b/data/maps/events/Route121.inc
index 514f51349..9961344a8 100644
--- a/data/maps/events/Route121.inc
+++ b/data/maps/events/Route121.inc
@@ -1,26 +1,26 @@
Route121_MapObjects:: @ 8384504
object_event 1, MAP_OBJ_GFX_WOMAN_4, 0, 29, 0, 14, 0, 3, 10, 17, 0, 0, 0, 0, 0, Route121_EventScript_151B0A, 0, 0, 0
- object_event 2, MAP_OBJ_GFX_BERRY_TREE, 0, 14, 0, 2, 0, 3, 12, 0, 0, 0, 0, 47, 0, BerryTreeScript, 0, 0, 0
- object_event 3, MAP_OBJ_GFX_BERRY_TREE, 0, 15, 0, 2, 0, 3, 12, 0, 0, 0, 0, 48, 0, BerryTreeScript, 0, 0, 0
- object_event 4, MAP_OBJ_GFX_BERRY_TREE, 0, 16, 0, 2, 0, 3, 12, 0, 0, 0, 0, 49, 0, BerryTreeScript, 0, 0, 0
- object_event 5, MAP_OBJ_GFX_BERRY_TREE, 0, 17, 0, 2, 0, 3, 12, 0, 0, 0, 0, 50, 0, BerryTreeScript, 0, 0, 0
- object_event 6, MAP_OBJ_GFX_BERRY_TREE, 0, 64, 0, 14, 0, 3, 12, 0, 0, 0, 0, 51, 0, BerryTreeScript, 0, 0, 0
- object_event 7, MAP_OBJ_GFX_BERRY_TREE, 0, 65, 0, 14, 0, 3, 12, 0, 0, 0, 0, 52, 0, BerryTreeScript, 0, 0, 0
- object_event 8, MAP_OBJ_GFX_BERRY_TREE, 0, 66, 0, 14, 0, 3, 12, 0, 0, 0, 0, 53, 0, BerryTreeScript, 0, 0, 0
- object_event 9, MAP_OBJ_GFX_BERRY_TREE, 0, 67, 0, 14, 0, 3, 12, 0, 0, 0, 0, 54, 0, BerryTreeScript, 0, 0, 0
+ object_event 2, MAP_OBJ_GFX_BERRY_TREE, 0, 14, 0, 2, 0, 3, 12, 0, 0, 0, 0, 47, 0, S_BerryTree, 0, 0, 0
+ object_event 3, MAP_OBJ_GFX_BERRY_TREE, 0, 15, 0, 2, 0, 3, 12, 0, 0, 0, 0, 48, 0, S_BerryTree, 0, 0, 0
+ object_event 4, MAP_OBJ_GFX_BERRY_TREE, 0, 16, 0, 2, 0, 3, 12, 0, 0, 0, 0, 49, 0, S_BerryTree, 0, 0, 0
+ object_event 5, MAP_OBJ_GFX_BERRY_TREE, 0, 17, 0, 2, 0, 3, 12, 0, 0, 0, 0, 50, 0, S_BerryTree, 0, 0, 0
+ object_event 6, MAP_OBJ_GFX_BERRY_TREE, 0, 64, 0, 14, 0, 3, 12, 0, 0, 0, 0, 51, 0, S_BerryTree, 0, 0, 0
+ object_event 7, MAP_OBJ_GFX_BERRY_TREE, 0, 65, 0, 14, 0, 3, 12, 0, 0, 0, 0, 52, 0, S_BerryTree, 0, 0, 0
+ object_event 8, MAP_OBJ_GFX_BERRY_TREE, 0, 66, 0, 14, 0, 3, 12, 0, 0, 0, 0, 53, 0, S_BerryTree, 0, 0, 0
+ object_event 9, MAP_OBJ_GFX_BERRY_TREE, 0, 67, 0, 14, 0, 3, 12, 0, 0, 0, 0, 54, 0, S_BerryTree, 0, 0, 0
object_event 10, MAP_OBJ_GFX_LASS, 0, 39, 0, 9, 0, 3, 8, 0, 0, 1, 0, 0, 0, Route121_EventScript_151BDE, 0, 0, 0
object_event 11, MAP_OBJ_GFX_LASS, 0, 40, 0, 9, 0, 3, 8, 0, 0, 1, 0, 0, 0, Route121_EventScript_151BF9, 0, 0, 0
object_event 12, 241, 0, 30, 0, 8, 0, 3, 7, 0, 0, 0, 0, 0, 0, 0x0, 914, 0, 0
object_event 13, 241, 0, 30, 0, 7, 0, 3, 10, 0, 0, 0, 0, 0, 0, 0x0, 914, 0, 0
object_event 14, 241, 0, 31, 0, 7, 0, 3, 9, 0, 0, 0, 0, 0, 0, 0x0, 914, 0, 0
- object_event 15, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 32, 0, 5, 0, 3, 1, 0, 0, 0, 0, 0, 0, CuttableTreeScript, 17, 0, 0
- object_event 16, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 65, 0, 4, 0, 3, 1, 0, 0, 0, 0, 0, 0, CuttableTreeScript, 18, 0, 0
+ object_event 15, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 32, 0, 5, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_CuttableTree, 17, 0, 0
+ object_event 16, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 65, 0, 4, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_CuttableTree, 18, 0, 0
object_event 17, MAP_OBJ_GFX_WOMAN_2, 0, 63, 0, 5, 0, 3, 9, 0, 0, 1, 0, 4, 0, Route121_EventScript_151B72, 0, 0, 0
object_event 18, MAP_OBJ_GFX_GENTLEMAN, 0, 55, 0, 8, 0, 3, 17, 0, 0, 1, 0, 3, 0, Route121_EventScript_151B89, 0, 0, 0
object_event 19, MAP_OBJ_GFX_HEX_MANIAC, 0, 11, 0, 10, 0, 3, 15, 0, 0, 1, 0, 4, 0, Route121_EventScript_151BC7, 0, 0, 0
object_event 20, MAP_OBJ_GFX_BEAUTY, 0, 22, 0, 5, 0, 3, 17, 0, 0, 1, 0, 4, 0, Route121_EventScript_151C14, 0, 0, 0
object_event 21, MAP_OBJ_GFX_ITEM_BALL, 0, 55, 0, 10, 0, 3, 1, 17, 0, 0, 0, 0, 0, Route121_EventScript_1B164E, 1103, 0, 0
- object_event 22, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 26, 0, 12, 0, 3, 1, 17, 0, 0, 0, 0, 0, CuttableTreeScript, 19, 0, 0
+ object_event 22, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 26, 0, 12, 0, 3, 1, 17, 0, 0, 0, 0, 0, S_CuttableTree, 19, 0, 0
Route121_MapWarps:: @ 8384714
warp_def 37, 5, 0, 2, Route121_SafariZoneEntrance
diff --git a/data/maps/events/Route123.inc b/data/maps/events/Route123.inc
index 6b97bafe5..dc5ac0fb4 100644
--- a/data/maps/events/Route123.inc
+++ b/data/maps/events/Route123.inc
@@ -1,30 +1,30 @@
Route123_MapObjects:: @ 83847F8
- object_event 1, MAP_OBJ_GFX_BERRY_TREE, 0, 11, 0, 3, 0, 3, 12, 0, 0, 0, 0, 58, 0, BerryTreeScript, 0, 0, 0
- object_event 2, MAP_OBJ_GFX_BERRY_TREE, 0, 12, 0, 3, 0, 3, 12, 0, 0, 0, 0, 59, 0, BerryTreeScript, 0, 0, 0
- object_event 3, MAP_OBJ_GFX_BERRY_TREE, 0, 14, 0, 3, 0, 3, 12, 0, 0, 0, 0, 60, 0, BerryTreeScript, 0, 0, 0
- object_event 4, MAP_OBJ_GFX_BERRY_TREE, 0, 15, 0, 3, 0, 3, 12, 0, 0, 0, 0, 61, 0, BerryTreeScript, 0, 0, 0
- object_event 5, MAP_OBJ_GFX_BERRY_TREE, 0, 81, 0, 1, 0, 3, 12, 0, 0, 0, 0, 62, 0, BerryTreeScript, 0, 0, 0
- object_event 6, MAP_OBJ_GFX_BERRY_TREE, 0, 82, 0, 1, 0, 3, 12, 0, 0, 0, 0, 63, 0, BerryTreeScript, 0, 0, 0
- object_event 7, MAP_OBJ_GFX_BERRY_TREE, 0, 83, 0, 1, 0, 3, 12, 0, 0, 0, 0, 64, 0, BerryTreeScript, 0, 0, 0
+ object_event 1, MAP_OBJ_GFX_BERRY_TREE, 0, 11, 0, 3, 0, 3, 12, 0, 0, 0, 0, 58, 0, S_BerryTree, 0, 0, 0
+ object_event 2, MAP_OBJ_GFX_BERRY_TREE, 0, 12, 0, 3, 0, 3, 12, 0, 0, 0, 0, 59, 0, S_BerryTree, 0, 0, 0
+ object_event 3, MAP_OBJ_GFX_BERRY_TREE, 0, 14, 0, 3, 0, 3, 12, 0, 0, 0, 0, 60, 0, S_BerryTree, 0, 0, 0
+ object_event 4, MAP_OBJ_GFX_BERRY_TREE, 0, 15, 0, 3, 0, 3, 12, 0, 0, 0, 0, 61, 0, S_BerryTree, 0, 0, 0
+ object_event 5, MAP_OBJ_GFX_BERRY_TREE, 0, 81, 0, 1, 0, 3, 12, 0, 0, 0, 0, 62, 0, S_BerryTree, 0, 0, 0
+ object_event 6, MAP_OBJ_GFX_BERRY_TREE, 0, 82, 0, 1, 0, 3, 12, 0, 0, 0, 0, 63, 0, S_BerryTree, 0, 0, 0
+ object_event 7, MAP_OBJ_GFX_BERRY_TREE, 0, 83, 0, 1, 0, 3, 12, 0, 0, 0, 0, 64, 0, S_BerryTree, 0, 0, 0
object_event 8, MAP_OBJ_GFX_WOMAN_7, 0, 70, 0, 12, 0, 3, 24, 0, 0, 1, 0, 1, 0, Route123_EventScript_151CD1, 0, 0, 0
object_event 9, MAP_OBJ_GFX_MAN_4, 0, 58, 0, 7, 0, 3, 17, 0, 0, 1, 0, 2, 0, Route123_EventScript_151CE8, 0, 0, 0
- object_event 10, MAP_OBJ_GFX_BERRY_TREE, 0, 14, 0, 5, 0, 3, 12, 0, 0, 0, 0, 65, 0, BerryTreeScript, 0, 0, 0
- object_event 11, MAP_OBJ_GFX_BERRY_TREE, 0, 15, 0, 5, 0, 3, 12, 0, 0, 0, 0, 72, 0, BerryTreeScript, 0, 0, 0
- object_event 12, MAP_OBJ_GFX_BERRY_TREE, 0, 17, 0, 5, 0, 3, 12, 0, 0, 0, 0, 73, 0, BerryTreeScript, 0, 0, 0
- object_event 13, MAP_OBJ_GFX_BERRY_TREE, 0, 18, 0, 5, 0, 3, 12, 0, 0, 0, 0, 74, 0, BerryTreeScript, 0, 0, 0
- object_event 14, MAP_OBJ_GFX_BERRY_TREE, 0, 17, 0, 3, 0, 3, 12, 0, 0, 0, 0, 79, 0, BerryTreeScript, 0, 0, 0
- object_event 15, MAP_OBJ_GFX_BERRY_TREE, 0, 18, 0, 3, 0, 3, 12, 0, 0, 0, 0, 14, 0, BerryTreeScript, 0, 0, 0
- object_event 16, MAP_OBJ_GFX_BERRY_TREE, 0, 11, 0, 5, 0, 3, 12, 0, 0, 0, 0, 15, 0, BerryTreeScript, 0, 0, 0
- object_event 17, MAP_OBJ_GFX_BERRY_TREE, 0, 12, 0, 5, 0, 3, 12, 0, 0, 0, 0, 30, 0, BerryTreeScript, 0, 0, 0
- object_event 18, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 101, 0, 13, 0, 3, 1, 0, 0, 0, 0, 0, 0, CuttableTreeScript, 17, 0, 0
- object_event 19, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 129, 0, 14, 0, 3, 1, 0, 0, 0, 0, 0, 0, CuttableTreeScript, 18, 0, 0
- object_event 20, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 92, 0, 9, 0, 3, 1, 0, 0, 0, 0, 0, 0, CuttableTreeScript, 19, 0, 0
+ object_event 10, MAP_OBJ_GFX_BERRY_TREE, 0, 14, 0, 5, 0, 3, 12, 0, 0, 0, 0, 65, 0, S_BerryTree, 0, 0, 0
+ object_event 11, MAP_OBJ_GFX_BERRY_TREE, 0, 15, 0, 5, 0, 3, 12, 0, 0, 0, 0, 72, 0, S_BerryTree, 0, 0, 0
+ object_event 12, MAP_OBJ_GFX_BERRY_TREE, 0, 17, 0, 5, 0, 3, 12, 0, 0, 0, 0, 73, 0, S_BerryTree, 0, 0, 0
+ object_event 13, MAP_OBJ_GFX_BERRY_TREE, 0, 18, 0, 5, 0, 3, 12, 0, 0, 0, 0, 74, 0, S_BerryTree, 0, 0, 0
+ object_event 14, MAP_OBJ_GFX_BERRY_TREE, 0, 17, 0, 3, 0, 3, 12, 0, 0, 0, 0, 79, 0, S_BerryTree, 0, 0, 0
+ object_event 15, MAP_OBJ_GFX_BERRY_TREE, 0, 18, 0, 3, 0, 3, 12, 0, 0, 0, 0, 14, 0, S_BerryTree, 0, 0, 0
+ object_event 16, MAP_OBJ_GFX_BERRY_TREE, 0, 11, 0, 5, 0, 3, 12, 0, 0, 0, 0, 15, 0, S_BerryTree, 0, 0, 0
+ object_event 17, MAP_OBJ_GFX_BERRY_TREE, 0, 12, 0, 5, 0, 3, 12, 0, 0, 0, 0, 30, 0, S_BerryTree, 0, 0, 0
+ object_event 18, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 101, 0, 13, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_CuttableTree, 17, 0, 0
+ object_event 19, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 129, 0, 14, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_CuttableTree, 18, 0, 0
+ object_event 20, MAP_OBJ_GFX_CUTTABLE_TREE, 0, 92, 0, 9, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_CuttableTree, 19, 0, 0
object_event 21, MAP_OBJ_GFX_ITEM_BALL, 0, 31, 0, 8, 0, 3, 1, 0, 0, 0, 0, 0, 0, Route123_EventScript_1B165B, 1032, 0, 0
object_event 22, MAP_OBJ_GFX_ITEM_BALL, 0, 139, 0, 18, 0, 3, 1, 0, 0, 0, 0, 0, 0, Route123_EventScript_1B1668, 1033, 0, 0
object_event 23, MAP_OBJ_GFX_GIRL_3, 0, 108, 0, 13, 0, 3, 15, 0, 0, 0, 0, 0, 0, Route123_EventScript_151C5D, 0, 0, 0
- object_event 24, MAP_OBJ_GFX_BERRY_TREE, 0, 109, 0, 13, 0, 3, 12, 0, 0, 0, 0, 87, 0, BerryTreeScript, 0, 0, 0
- object_event 25, MAP_OBJ_GFX_BERRY_TREE, 0, 110, 0, 13, 0, 3, 12, 0, 0, 0, 0, 88, 0, BerryTreeScript, 0, 0, 0
- object_event 26, MAP_OBJ_GFX_BERRY_TREE, 0, 111, 0, 13, 0, 3, 12, 0, 0, 0, 0, 89, 0, BerryTreeScript, 0, 0, 0
+ object_event 24, MAP_OBJ_GFX_BERRY_TREE, 0, 109, 0, 13, 0, 3, 12, 0, 0, 0, 0, 87, 0, S_BerryTree, 0, 0, 0
+ object_event 25, MAP_OBJ_GFX_BERRY_TREE, 0, 110, 0, 13, 0, 3, 12, 0, 0, 0, 0, 88, 0, S_BerryTree, 0, 0, 0
+ object_event 26, MAP_OBJ_GFX_BERRY_TREE, 0, 111, 0, 13, 0, 3, 12, 0, 0, 0, 0, 89, 0, S_BerryTree, 0, 0, 0
object_event 27, MAP_OBJ_GFX_WOMAN_3, 0, 16, 0, 9, 0, 3, 23, 0, 0, 1, 0, 2, 0, Route123_EventScript_151CFF, 0, 0, 0
object_event 28, MAP_OBJ_GFX_LITTLE_GIRL_1, 0, 38, 0, 13, 0, 3, 8, 0, 0, 1, 0, 0, 0, Route123_EventScript_151DAD, 0, 0, 0
object_event 29, MAP_OBJ_GFX_LITTLE_GIRL_1, 0, 37, 0, 13, 0, 3, 8, 0, 0, 1, 0, 0, 0, Route123_EventScript_151D92, 0, 0, 0
diff --git a/data/maps/events/Route130.inc b/data/maps/events/Route130.inc
index f2c72ef2d..009604d4b 100644
--- a/data/maps/events/Route130.inc
+++ b/data/maps/events/Route130.inc
@@ -1,7 +1,7 @@
Route130_MapObjects:: @ 838523C
object_event 1, MAP_OBJ_GFX_SWIMMER_M, 0, 7, 0, 26, 0, 1, 29, 99, 0, 1, 0, 3, 0, Route130_EventScript_152410, 0, 0, 0
object_event 2, MAP_OBJ_GFX_SWIMMER_F, 0, 68, 0, 22, 0, 1, 13, 17, 0, 1, 0, 3, 0, Route130_EventScript_152427, 0, 0, 0
- object_event 3, MAP_OBJ_GFX_BERRY_TREE, 0, 52, 0, 9, 0, 3, 12, 0, 0, 0, 0, 82, 0, BerryTreeScript, 17, 0, 0
+ object_event 3, MAP_OBJ_GFX_BERRY_TREE, 0, 52, 0, 9, 0, 3, 12, 0, 0, 0, 0, 82, 0, S_BerryTree, 17, 0, 0
Route130_MapEvents:: @ 8385284
map_events Route130_MapObjects, 0x0, 0x0, 0x0
diff --git a/data/maps/events/RusturfTunnel.inc b/data/maps/events/RusturfTunnel.inc
index 490afda7b..ef1559687 100644
--- a/data/maps/events/RusturfTunnel.inc
+++ b/data/maps/events/RusturfTunnel.inc
@@ -1,12 +1,12 @@
RusturfTunnel_MapObjects:: @ 838BD2C
object_event 1, MAP_OBJ_GFX_BLACK_BELT, 0, 23, 0, 5, 0, 3, 10, 0, 0, 0, 0, 0, 0, RusturfTunnel_EventScript_15C799, 807, 0, 0
- object_event 2, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 24, 0, 5, 0, 3, 1, 0, 0, 0, 0, 0, 0, BreakableRockScript, 931, 0, 0
+ object_event 2, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 24, 0, 5, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_BreakableRock, 931, 0, 0
object_event 3, MAP_OBJ_GFX_ITEM_BALL, 0, 3, 0, 1, 0, 3, 1, 0, 0, 0, 0, 0, 0, RusturfTunnel_EventScript_1B1786, 1048, 0, 0
object_event 4, MAP_OBJ_GFX_ITEM_BALL, 0, 30, 0, 2, 0, 3, 1, 0, 0, 0, 0, 0, 0, RusturfTunnel_EventScript_1B1793, 1049, 0, 0
object_event 5, MAP_OBJ_GFX_OLD_MAN_1, 0, 5, 0, 4, 0, 3, 10, 0, 0, 0, 0, 0, 0, 0x0, 879, 0, 0
object_event 6, 241, 0, 14, 0, 5, 0, 3, 9, 0, 0, 0, 0, 0, 0, RusturfTunnel_EventScript_15C9EA, 878, 0, 0
object_event 7, MAP_OBJ_GFX_WINGULL, 0, 14, 0, 4, 0, 3, 9, 0, 0, 0, 0, 0, 0, RusturfTunnel_EventScript_15C9D7, 880, 0, 0
- object_event 8, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 24, 0, 4, 0, 3, 8, 0, 0, 0, 0, 0, 0, BreakableRockScript, 932, 0, 0
+ object_event 8, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 24, 0, 4, 0, 3, 8, 0, 0, 0, 0, 0, 0, S_BreakableRock, 932, 0, 0
object_event 9, MAP_OBJ_GFX_HIKER, 0, 32, 0, 13, 0, 3, 9, 17, 0, 1, 0, 3, 0, RusturfTunnel_EventScript_15CACD, 0, 0, 0
object_event 10, MAP_OBJ_GFX_WOMAN_3, 0, 25, 0, 4, 0, 3, 9, 17, 0, 0, 0, 0, 0, RusturfTunnel_EventScript_15C782, 983, 0, 0
diff --git a/data/maps/events/SafariZone_Northeast.inc b/data/maps/events/SafariZone_Northeast.inc
index 30921f095..cea87fb14 100644
--- a/data/maps/events/SafariZone_Northeast.inc
+++ b/data/maps/events/SafariZone_Northeast.inc
@@ -1,12 +1,12 @@
SafariZone_Northeast_MapObjects:: @ 8391A2C
object_event 1, MAP_OBJ_GFX_FISHERMAN, 0, 22, 0, 9, 0, 3, 2, 17, 0, 0, 0, 0, 0, SafariZone_Northeast_EventScript_160011, 0, 0, 0
object_event 2, MAP_OBJ_GFX_MAN_5, 0, 6, 0, 29, 0, 3, 2, 17, 0, 0, 0, 0, 0, SafariZone_Northeast_EventScript_16001A, 0, 0, 0
- object_event 3, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 25, 0, 10, 0, 3, 1, 17, 0, 0, 0, 0, 0, BreakableRockScript, 17, 0, 0
- object_event 4, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 25, 0, 13, 0, 3, 1, 17, 0, 0, 0, 0, 0, BreakableRockScript, 18, 0, 0
- object_event 5, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 28, 0, 14, 0, 3, 1, 17, 0, 0, 0, 0, 0, BreakableRockScript, 19, 0, 0
- object_event 6, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 23, 0, 6, 0, 3, 1, 17, 0, 0, 0, 0, 0, BreakableRockScript, 20, 0, 0
- object_event 7, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 20, 0, 7, 0, 3, 1, 17, 0, 0, 0, 0, 0, BreakableRockScript, 21, 0, 0
- object_event 8, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 27, 0, 7, 0, 3, 1, 17, 0, 0, 0, 0, 0, BreakableRockScript, 22, 0, 0
+ object_event 3, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 25, 0, 10, 0, 3, 1, 17, 0, 0, 0, 0, 0, S_BreakableRock, 17, 0, 0
+ object_event 4, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 25, 0, 13, 0, 3, 1, 17, 0, 0, 0, 0, 0, S_BreakableRock, 18, 0, 0
+ object_event 5, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 28, 0, 14, 0, 3, 1, 17, 0, 0, 0, 0, 0, S_BreakableRock, 19, 0, 0
+ object_event 6, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 23, 0, 6, 0, 3, 1, 17, 0, 0, 0, 0, 0, S_BreakableRock, 20, 0, 0
+ object_event 7, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 20, 0, 7, 0, 3, 1, 17, 0, 0, 0, 0, 0, S_BreakableRock, 21, 0, 0
+ object_event 8, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 27, 0, 7, 0, 3, 1, 17, 0, 0, 0, 0, 0, S_BreakableRock, 22, 0, 0
object_event 9, MAP_OBJ_GFX_ITEM_BALL, 0, 7, 0, 6, 0, 3, 1, 17, 0, 0, 0, 0, 0, SafariZone_Northeast_EventScript_1B1919, 1119, 0, 0
SafariZone_Northeast_MapEvents:: @ 8391B04
diff --git a/data/maps/events/SeafloorCavern_Room1.inc b/data/maps/events/SeafloorCavern_Room1.inc
index 1e791f884..093934481 100644
--- a/data/maps/events/SeafloorCavern_Room1.inc
+++ b/data/maps/events/SeafloorCavern_Room1.inc
@@ -1,7 +1,7 @@
SeafloorCavern_Room1_MapObjects:: @ 838D0B8
- object_event 1, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 5, 0, 11, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 17, 0, 0
- object_event 2, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 12, 0, 11, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 18, 0, 0
- object_event 3, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 5, 0, 10, 0, 3, 1, 0, 0, 0, 0, 0, 0, BreakableRockScript, 19, 0, 0
+ object_event 1, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 5, 0, 11, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 17, 0, 0
+ object_event 2, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 12, 0, 11, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 18, 0, 0
+ object_event 3, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 5, 0, 10, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_BreakableRock, 19, 0, 0
object_event 4, 241, 0, 8, 0, 6, 0, 3, 1, 17, 0, 1, 0, 2, 0, SeafloorCavern_Room1_EventScript_15DA6D, 946, 0, 0
object_event 5, 241, 0, 15, 0, 10, 0, 3, 16, 17, 0, 1, 0, 3, 0, SeafloorCavern_Room1_EventScript_15DA84, 946, 0, 0
diff --git a/data/maps/events/SeafloorCavern_Room2.inc b/data/maps/events/SeafloorCavern_Room2.inc
index 3dbe5e8a7..86a0354e4 100644
--- a/data/maps/events/SeafloorCavern_Room2.inc
+++ b/data/maps/events/SeafloorCavern_Room2.inc
@@ -1,13 +1,13 @@
SeafloorCavern_Room2_MapObjects:: @ 838D15C
- object_event 1, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 6, 0, 14, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 17, 0, 0
- object_event 2, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 6, 0, 10, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 18, 0, 0
- object_event 3, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 6, 0, 6, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 19, 0, 0
- object_event 4, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 11, 0, 6, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 20, 0, 0
- object_event 5, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 11, 0, 10, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 21, 0, 0
- object_event 6, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 11, 0, 14, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 22, 0, 0
- object_event 7, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 11, 0, 9, 0, 3, 1, 0, 0, 0, 0, 0, 0, BreakableRockScript, 24, 0, 0
- object_event 8, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 7, 0, 6, 0, 3, 1, 0, 0, 0, 0, 0, 0, BreakableRockScript, 25, 0, 0
- object_event 9, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 15, 0, 11, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 23, 0, 0
+ object_event 1, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 6, 0, 14, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 17, 0, 0
+ object_event 2, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 6, 0, 10, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 18, 0, 0
+ object_event 3, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 6, 0, 6, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 19, 0, 0
+ object_event 4, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 11, 0, 6, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 20, 0, 0
+ object_event 5, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 11, 0, 10, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 21, 0, 0
+ object_event 6, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 11, 0, 14, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 22, 0, 0
+ object_event 7, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 11, 0, 9, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_BreakableRock, 24, 0, 0
+ object_event 8, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 7, 0, 6, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_BreakableRock, 25, 0, 0
+ object_event 9, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 15, 0, 11, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 23, 0, 0
SeafloorCavern_Room2_MapWarps:: @ 838D234
warp_def 12, 19, 3, 2, SeafloorCavern_Room1
diff --git a/data/maps/events/SeafloorCavern_Room3.inc b/data/maps/events/SeafloorCavern_Room3.inc
index 98e6066f2..5c5c9c219 100644
--- a/data/maps/events/SeafloorCavern_Room3.inc
+++ b/data/maps/events/SeafloorCavern_Room3.inc
@@ -1,13 +1,13 @@
SeafloorCavern_Room3_MapObjects:: @ 838D268
- object_event 1, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 6, 0, 13, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 17, 0, 0
- object_event 2, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 8, 0, 12, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 18, 0, 0
- object_event 3, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 7, 0, 11, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 19, 0, 0
- object_event 4, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 9, 0, 11, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 20, 0, 0
- object_event 5, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 6, 0, 10, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 21, 0, 0
- object_event 6, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 8, 0, 10, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 22, 0, 0
- object_event 7, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 5, 0, 9, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 23, 0, 0
- object_event 8, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 7, 0, 9, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 24, 0, 0
- object_event 9, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 9, 0, 9, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 25, 0, 0
+ object_event 1, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 6, 0, 13, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 17, 0, 0
+ object_event 2, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 8, 0, 12, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 18, 0, 0
+ object_event 3, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 7, 0, 11, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 19, 0, 0
+ object_event 4, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 9, 0, 11, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 20, 0, 0
+ object_event 5, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 6, 0, 10, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 21, 0, 0
+ object_event 6, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 8, 0, 10, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 22, 0, 0
+ object_event 7, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 5, 0, 9, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 23, 0, 0
+ object_event 8, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 7, 0, 9, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 24, 0, 0
+ object_event 9, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 9, 0, 9, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 25, 0, 0
object_event 10, 242, 0, 10, 0, 5, 0, 3, 8, 17, 0, 1, 0, 3, 0, SeafloorCavern_Room3_EventScript_15DAA8, 946, 0, 0
SeafloorCavern_Room3_MapWarps:: @ 838D358
diff --git a/data/maps/events/SeafloorCavern_Room5.inc b/data/maps/events/SeafloorCavern_Room5.inc
index 0ebd46a56..37a501512 100644
--- a/data/maps/events/SeafloorCavern_Room5.inc
+++ b/data/maps/events/SeafloorCavern_Room5.inc
@@ -1,10 +1,10 @@
SeafloorCavern_Room5_MapObjects:: @ 838D3D0
- object_event 1, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 3, 0, 11, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 17, 0, 0
- object_event 2, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 4, 0, 11, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 18, 0, 0
- object_event 3, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 11, 0, 7, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 19, 0, 0
- object_event 4, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 3, 0, 13, 0, 3, 1, 0, 0, 0, 0, 0, 0, BreakableRockScript, 21, 0, 0
- object_event 5, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 13, 0, 8, 0, 3, 1, 0, 0, 0, 0, 0, 0, BreakableRockScript, 22, 0, 0
- object_event 6, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 12, 0, 8, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 20, 0, 0
+ object_event 1, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 3, 0, 11, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 17, 0, 0
+ object_event 2, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 4, 0, 11, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 18, 0, 0
+ object_event 3, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 11, 0, 7, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 19, 0, 0
+ object_event 4, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 3, 0, 13, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_BreakableRock, 21, 0, 0
+ object_event 5, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 13, 0, 8, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_BreakableRock, 22, 0, 0
+ object_event 6, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 12, 0, 8, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 20, 0, 0
SeafloorCavern_Room5_MapWarps:: @ 838D460
warp_def 4, 1, 3, 1, SeafloorCavern_Room1
diff --git a/data/maps/events/SeafloorCavern_Room8.inc b/data/maps/events/SeafloorCavern_Room8.inc
index 610937753..2d7329aec 100644
--- a/data/maps/events/SeafloorCavern_Room8.inc
+++ b/data/maps/events/SeafloorCavern_Room8.inc
@@ -1,16 +1,16 @@
SeafloorCavern_Room8_MapObjects:: @ 838D4DC
- object_event 1, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 4, 0, 7, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 17, 0, 0
- object_event 2, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 5, 0, 7, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 18, 0, 0
- object_event 3, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 6, 0, 7, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 19, 0, 0
- object_event 4, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 3, 0, 6, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 20, 0, 0
- object_event 5, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 7, 0, 6, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 21, 0, 0
- object_event 6, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 4, 0, 5, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 22, 0, 0
- object_event 7, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 5, 0, 5, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 23, 0, 0
- object_event 8, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 6, 0, 5, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 24, 0, 0
- object_event 9, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 3, 0, 4, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 25, 0, 0
- object_event 10, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 4, 0, 4, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 26, 0, 0
- object_event 11, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 6, 0, 4, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 27, 0, 0
- object_event 12, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 7, 0, 4, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 28, 0, 0
+ object_event 1, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 4, 0, 7, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 17, 0, 0
+ object_event 2, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 5, 0, 7, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 18, 0, 0
+ object_event 3, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 6, 0, 7, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 19, 0, 0
+ object_event 4, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 3, 0, 6, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 20, 0, 0
+ object_event 5, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 7, 0, 6, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 21, 0, 0
+ object_event 6, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 4, 0, 5, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 22, 0, 0
+ object_event 7, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 5, 0, 5, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 23, 0, 0
+ object_event 8, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 6, 0, 5, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 24, 0, 0
+ object_event 9, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 3, 0, 4, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 25, 0, 0
+ object_event 10, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 4, 0, 4, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 26, 0, 0
+ object_event 11, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 6, 0, 4, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 27, 0, 0
+ object_event 12, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 7, 0, 4, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 28, 0, 0
SeafloorCavern_Room8_MapWarps:: @ 838D5FC
warp_def 5, 2, 3, 0, SeafloorCavern_Room9
diff --git a/data/maps/events/ShoalCave_LowTideLowerRoom.inc b/data/maps/events/ShoalCave_LowTideLowerRoom.inc
index a1770b5bb..858f919e0 100644
--- a/data/maps/events/ShoalCave_LowTideLowerRoom.inc
+++ b/data/maps/events/ShoalCave_LowTideLowerRoom.inc
@@ -1,5 +1,5 @@
ShoalCave_LowTideLowerRoom_MapObjects:: @ 838DE3C
- object_event 1, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 25, 0, 3, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 17, 0, 0
+ object_event 1, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 25, 0, 3, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 17, 0, 0
object_event 2, MAP_OBJ_GFX_BLACK_BELT, 0, 11, 0, 4, 0, 3, 2, 17, 0, 0, 0, 0, 0, ShoalCave_LowTideLowerRoom_EventScript_15E44F, 0, 0, 0
ShoalCave_LowTideLowerRoom_MapWarps:: @ 838DE6C
diff --git a/data/maps/events/VictoryRoad_B1F.inc b/data/maps/events/VictoryRoad_B1F.inc
index a4f778c4d..b00074990 100644
--- a/data/maps/events/VictoryRoad_B1F.inc
+++ b/data/maps/events/VictoryRoad_B1F.inc
@@ -1,21 +1,21 @@
VictoryRoad_B1F_MapObjects:: @ 838DA04
- object_event 1, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 20, 0, 5, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 19, 0, 0
- object_event 2, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 21, 0, 4, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 20, 0, 0
- object_event 3, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 4, 0, 7, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 17, 0, 0
- object_event 4, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 9, 0, 10, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 18, 0, 0
- object_event 5, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 20, 0, 26, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 23, 0, 0
- object_event 6, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 21, 0, 25, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 22, 0, 0
- object_event 7, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 35, 0, 6, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 30, 0, 0
- object_event 8, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 19, 0, 5, 0, 3, 1, 0, 0, 0, 0, 0, 0, BreakableRockScript, 25, 0, 0
- object_event 9, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 20, 0, 4, 0, 3, 1, 0, 0, 0, 0, 0, 0, BreakableRockScript, 26, 0, 0
- object_event 10, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 18, 0, 12, 0, 3, 1, 0, 0, 0, 0, 0, 0, BreakableRockScript, 27, 0, 0
- object_event 11, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 20, 0, 25, 0, 3, 1, 0, 0, 0, 0, 0, 0, BreakableRockScript, 28, 0, 0
- object_event 12, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 21, 0, 26, 0, 3, 1, 0, 0, 0, 0, 0, 0, BreakableRockScript, 29, 0, 0
- object_event 13, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 34, 0, 4, 0, 3, 1, 0, 0, 0, 0, 0, 0, PushableBoulderScript, 31, 0, 0
+ object_event 1, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 20, 0, 5, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 19, 0, 0
+ object_event 2, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 21, 0, 4, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 20, 0, 0
+ object_event 3, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 4, 0, 7, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 17, 0, 0
+ object_event 4, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 9, 0, 10, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 18, 0, 0
+ object_event 5, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 20, 0, 26, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 23, 0, 0
+ object_event 6, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 21, 0, 25, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 22, 0, 0
+ object_event 7, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 35, 0, 6, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 30, 0, 0
+ object_event 8, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 19, 0, 5, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_BreakableRock, 25, 0, 0
+ object_event 9, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 20, 0, 4, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_BreakableRock, 26, 0, 0
+ object_event 10, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 18, 0, 12, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_BreakableRock, 27, 0, 0
+ object_event 11, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 20, 0, 25, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_BreakableRock, 28, 0, 0
+ object_event 12, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 21, 0, 26, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_BreakableRock, 29, 0, 0
+ object_event 13, MAP_OBJ_GFX_PUSHABLE_BOULDER, 0, 34, 0, 4, 0, 3, 1, 0, 0, 0, 0, 0, 0, S_PushableBoulder, 31, 0, 0
object_event 14, MAP_OBJ_GFX_MAN_4, 0, 37, 0, 12, 0, 3, 9, 0, 0, 1, 0, 3, 0, VictoryRoad_B1F_EventScript_15DFB5, 0, 0, 0
object_event 15, MAP_OBJ_GFX_WOMAN_7, 0, 26, 0, 16, 0, 3, 7, 0, 0, 1, 0, 4, 0, VictoryRoad_B1F_EventScript_15DFCC, 0, 0, 0
object_event 16, MAP_OBJ_GFX_WOMAN_7, 0, 5, 0, 21, 0, 3, 9, 0, 0, 1, 0, 2, 0, VictoryRoad_B1F_EventScript_15DFE3, 0, 0, 0
- object_event 17, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 34, 0, 3, 0, 3, 1, 17, 0, 0, 0, 0, 0, BreakableRockScript, 32, 0, 0
+ object_event 17, MAP_OBJ_GFX_BREAKABLE_ROCK, 0, 34, 0, 3, 0, 3, 1, 17, 0, 0, 0, 0, 0, S_BreakableRock, 32, 0, 0
object_event 18, MAP_OBJ_GFX_ITEM_BALL, 0, 42, 0, 8, 0, 4, 1, 17, 0, 0, 0, 0, 0, VictoryRoad_B1F_EventScript_1B1AE0, 1086, 0, 0
object_event 19, MAP_OBJ_GFX_ITEM_BALL, 0, 32, 0, 3, 0, 3, 1, 17, 0, 0, 0, 0, 0, VictoryRoad_B1F_EventScript_1B1AED, 1087, 0, 0
diff --git a/data/mauville_old_man.s b/data/mauville_old_man.s
deleted file mode 100644
index 5c4bd47b9..000000000
--- a/data/mauville_old_man.s
+++ /dev/null
@@ -1,101 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 1
-gUnknown_083E537C:: @ 83E537C
-.ifdef ENGLISH
- ec_word SISTER
- ec_word EATS
- ec_word SWEETS
- ec_word VORACIOUS
- ec_word AND
- ec_word DROOLING
-.else
- ec_word SISTER
- ec_word MUST_BE
- ec_word SWEETS
- ec_word VORACIOUS
- ec_word DROOLING
- ec_word THICK
-.endif
-
-
- .align 2
-gUnknown_083E5388:: @ 83E5388
- .4byte OtherText_SoPretty
- .4byte OtherText_SoDarling
- .4byte OtherText_SoRelaxed
- .4byte OtherText_SoSunny
- .4byte OtherText_SoDesirable
- .4byte OtherText_SoExciting
- .4byte OtherText_SoAmusing
- .4byte OtherText_SoMagical
-
- .align 2
-gUnknown_083E53A8:: @ 83E53A8
- .4byte OtherText_WantVacationNicePlace
- .4byte OtherText_BoughtCrayonsIsNice
- .4byte OtherText_IfWeCouldFloat
- .4byte OtherText_SandWashesAwayMakeSad
- .4byte OtherText_WhatsBottomSeaLike
- .4byte OtherText_SeeSettingSun
- .4byte OtherText_LyingInGreenGrass
- .4byte OtherText_SecretBasesWonderful
-
- .align 1
-gUnknown_083E53C8:: @ 83E53C8
- .2byte 0x0, 0
- .2byte 0xC, 0
- .2byte 0xD, 0
- .2byte 0x12, 0
- .2byte 0x13, 0
- .2byte 0x15, 0
-
- .align 2
-gUnknown_083E53E0:: @ 83E53E0
- .4byte 0x132, UnknownString_81AEFFC, UnknownString_81AF013, UnknownString_81AF022
- .4byte 0x102, UnknownString_81AF0A3, UnknownString_81AF0BB, UnknownString_81AF0CA
- .4byte 0x103, UnknownString_81AF149, UnknownString_81AF164, UnknownString_81AF174
- .4byte 0x104, UnknownString_81AF1E5, UnknownString_81AF1FD, UnknownString_81AF20A
- .4byte 0x106, UnknownString_81AF281, UnknownString_81AF299, UnknownString_81AF2A9
- .4byte 0x109, UnknownString_81AF32C, UnknownString_81AF345, UnknownString_81AF34D
- .4byte 0x10b, UnknownString_81AF3D0, UnknownString_81AF3ED, UnknownString_81AF3FC
- .4byte 0x10c, UnknownString_81AF46D, UnknownString_81AF481, UnknownString_81AF49B
- .4byte 0x10d, UnknownString_81AF511, UnknownString_81AF529, UnknownString_81AF536
- .4byte 0x10e, UnknownString_81AF5A9, UnknownString_81AF5BD, UnknownString_81AF5CD
- .4byte 0x10f, UnknownString_81AF63F, UnknownString_81AF661, UnknownString_81AF676
- .4byte 0x110, UnknownString_81AF711, UnknownString_81AF726, UnknownString_81AF73D
- .4byte 0x111, UnknownString_81AF7BF, UnknownString_81AF7D9, UnknownString_81AF7F1
- .4byte 0x112, UnknownString_81AF88A, UnknownString_81AF8A1, UnknownString_81AF8AA
- .4byte 0x113, UnknownString_81AF91B, UnknownString_81AF935, UnknownString_81AF943
- .4byte 0x114, UnknownString_81AF9C8, UnknownString_81AF9E0, UnknownString_81AF9F6
- .4byte 0x11a, UnknownString_81AFA79, UnknownString_81AFA92, UnknownString_81AFA9E
- .4byte 0x11b, UnknownString_81AFB17, UnknownString_81AFB2D, UnknownString_81AFB48
- .4byte 0x11c, UnknownString_81AFBD8, UnknownString_81AFBE7, UnknownString_81AFC04
- .4byte 0x21d, UnknownString_81AFC8A, UnknownString_81AFC9D, UnknownString_81AFCBE
- .4byte 0x11e, UnknownString_81AFD44, UnknownString_81AFD60, UnknownString_81AFD80
- .4byte 0x121, UnknownString_81AFE1D, UnknownString_81AFE36, UnknownString_81AFE42
- .4byte 0x124, UnknownString_81AFEC2, UnknownString_81AFEDD, UnknownString_81AFEEE
- .4byte 0x125, UnknownString_81AFF68, UnknownString_81AFF7B, UnknownString_81AFF88
- .4byte 0x126, UnknownString_81AFFFB, UnknownString_81B000D, UnknownString_81B0015
- .4byte 0x127, UnknownString_81B009D, UnknownString_81B00B6, UnknownString_81B00C9
- .4byte 0x128, UnknownString_81B014D, UnknownString_81B0165, UnknownString_81B0173
- .4byte 0x129, UnknownString_81B01E9, UnknownString_81B0201, UnknownString_81B0213
- .4byte 0x12a, UnknownString_81B0290, UnknownString_81B02A5, UnknownString_81B02B6
- .4byte 0x12b, UnknownString_81B0337, UnknownString_81B0351, UnknownString_81B0364
- .4byte 0x12c, UnknownString_81B03E9, UnknownString_81B0401, UnknownString_81B040C
- .4byte 0x12d, UnknownString_81B046E, UnknownString_81B0489, UnknownString_81B049A
- .4byte 0x12e, UnknownString_81B0523, UnknownString_81B053E, UnknownString_81B0554
- .4byte 0x12f, UnknownString_81B05D8, UnknownString_81B05F3, UnknownString_81B0610
- .4byte 0x130, UnknownString_81B06A9, UnknownString_81B06C6, UnknownString_81B06D9
-
-gUnknown_083E5610:: @ 83E5610
- .4byte 0x131, UnknownString_81B0763, UnknownString_81B0781, UnknownString_81B0797
-
- .align 2
-gUnknown_083E5620:: @ 83E5620
- .4byte 0x24
- .4byte gSaveBlock1 + 0x2D94
- .4byte 0xC
diff --git a/data/mon_pokeblock_anims.inc b/data/mon_pokeblock_anims.inc
deleted file mode 100644
index d8df29c1d..000000000
--- a/data/mon_pokeblock_anims.inc
+++ /dev/null
@@ -1,133 +0,0 @@
-gNatureToMonPokeblockAnim:: @ 8411A10
- .byte 0, 0 @ HARDY
- .byte 3, 0 @ LONELY
- .byte 4, 1 @ BRAVE
- .byte 5, 0 @ ADAMANT
- .byte 10, 0 @ NAUGHTY
- .byte 13, 0 @ BOLD
- .byte 15, 0 @ DOCILE
- .byte 16, 2 @ RELAXED
- .byte 18, 0 @ IMPISH
- .byte 19, 0 @ LAX
- .byte 20, 0 @ TIMID
- .byte 25, 0 @ HASTY
- .byte 27, 3 @ SERIOUS
- .byte 28, 0 @ JOLLY
- .byte 29, 0 @ NAIVE
- .byte 33, 4 @ MODEST
- .byte 36, 0 @ MILD
- .byte 37, 0 @ QUIET
- .byte 39, 0 @ BASHFUL
- .byte 42, 0 @ RASH
- .byte 45, 0 @ CALM
- .byte 46, 5 @ GENTLE
- .byte 47, 6 @ SASSY
- .byte 48, 0 @ CAREFUL
- .byte 53, 0 @ QUIRKY
-
- .align 1
-gMonPokeblockAnims:: @ 8411A42
- @ HARDY
- .2byte 0, 4, 0, 8, 24, 0, 0, 0, 12, 0
- .2byte 0, 4, 0, 16, 24, 0, 0, 0, 12, 0
- .2byte 0, 4, 0, 32, 32, 0, 0, 0, 16, 1
-
- @ LONELY
- .2byte 0, 3, 6, 0, 48, 0, 0, 0, 24, 1
-
- @ BRAVE
- .2byte 64, 16, -24, 0, 32, 0, 0, 0, 0, 1
-
- @ ADAMANT
- .2byte 0, 4, 8, 0, 16, 0, -8, 0, 0, 0
- .2byte 0, 0, 0, 0, 16, 0, 0, 0, 0, 0
- .2byte 0, 4, 8, 0, 16, 0, -8, 0, 0, 0
- .2byte 0, 0, 0, 0, 16, 0, 0, 0, 0, 0
- .2byte 0, 4, -16, 0, 4, 0, 16, 0, 0, 1
-
- @ NAUGHTY
- .2byte 0, 3, 6, 0, 12, 0, 0, 0, 6, 0
- .2byte 0, 3, -6, 0, 12, 0, 0, 0, 6, 0
- .2byte 0, 16, 16, 0, 45, 1, 0, 0, 0, 1
-
- @ BOLD
- .2byte 0, 16, 0, 24, 32, 0, 0, 0, 16, 0
- .2byte 0, 16, 0, 23, 32, 0, 0, 0, 16, 1
-
- @ DOCILE
- .2byte 0, 0, 0, 0, 80, 0, 0, 0, 0, 1
-
- @ RELAXED
- .2byte 0, 2, 8, 0, 32, 0, 0, 0, 0, 0
- .2byte 0, 2, -8, 0, 32, 0, 0, 0, 0, 1
-
- @ IMPISH
- .2byte 0, 32, 2, 1, 48, 1, 0, 0, 24, 1
-
- @ LAX
- .2byte 0, 2, 16, 16, 128, 0, 0, 0, 0, 1
-
- @ TIMID
- .2byte 0, 2, -8, 0, 48, 0, -24, 0, 0, 0
- .2byte 0, 0, 0, 0, 8, 0, 0, 0, 0, 0
- .2byte 64, 32, 2, 0, 36, 0, 0, 0, 0, 0
- .2byte 0, 0, 0, 0, 8, 0, 0, 0, 0, 0
- .2byte 0, 2, 8, 0, 48, 0, 24, 0, 0, 1
-
- @ HASTY
- .2byte 64, 24, 16, 0, 32, 0, 0, 0, 0, 0
- .2byte 0, 28, 2, 1, 32, 1, 0, 0, 16, 1
-
- @ SERIOUS
- .2byte 0, 0, 0, 0, 32, 0, 0, 0, 0, 1
-
- @ JOLLY
- .2byte 64, 16, -16, 2, 48, 0, 0, 0, 32, 1
-
- @ NAIVE
- .2byte 0, 12, -8, 4, 24, 0, 8, 0, 12, 0
- .2byte 0, 12, 8, 8, 24, 0, -16, 0, 12, 0
- .2byte 0, 12, -8, 16, 24, 0, 16, 0, 12, 0
- .2byte 0, 12, 8, 28, 24, 0, -8, 0, 12, 1
-
- @ MODEST
- .2byte 0, 0, 0, 0, 8, 0, 0, 0, 0, 0
- .2byte 64, 16, -4, 0, 32, 0, 0, 0, 0, 0
- .2byte 0, 0, 0, 0, 8, 0, 0, 0, 0, 1
-
- @ MILD
- .2byte 128, 4, 0, 8, 64, 0, 0, 0, 0, 1
-
- @ QUIET
- .2byte 0, 2, 16, 0, 48, 0, 0, 0, 0, 0
- .2byte 128, 2, 16, 0, 48, 0, 0, 0, 0, 1
-
- @ BASHFUL
- .2byte 0, 2, -4, 0, 48, 0, -48, 0, 0, 0
- .2byte 0, 0, 0, 0, 80, 0, 0, 0, 0, 0
- .2byte 0, 2, 8, 0, 24, 0, 48, 0, 0, 1
-
- @ RASH
- .2byte 64, 4, 64, 58, 52, 0, -88, 0, 0, 0
- .2byte 0, 0, 0, 0, 80, 0, 0, 0, 0, 0
- .2byte 0, 24, 80, 0, 32, 0, 88, 0, 0, 1
-
- @ CALM
- .2byte 0, 2, 16, 4, 64, 0, 0, 0, 0, 1
-
- @ GENTLE
- .2byte 0, 0, 0, 0, 32, 0, 0, 0, 0, 1
-
- @ SASSY
- .2byte 0, 0, 0, 0, 42, 0, 0, 0, 0, 1
-
- @ CAREFUL
- .2byte 0, 4, 0, 8, 24, 0, 0, 0, 12, 0
- .2byte 0, 0, 0, 0, 12, 0, 0, 0, 0, 0
- .2byte 0, 4, 0, 12, 24, 0, 0, 0, 12, 0
- .2byte 0, 0, 0, 0, 12, 0, 0, 0, 0, 0
- .2byte 0, 4, 0, 4, 24, 0, 0, 0, 12, 1
-
- @ QUIRKY
- .2byte 0, 4, 16, 12, 64, 0, 0, 0, 0, 0
- .2byte 0, -4, 16, 12, 64, 0, 0, 0, 0, 1
diff --git a/data/pokeblock_feed.s b/data/pokeblock_feed.s
deleted file mode 100644
index ae5b17d12..000000000
--- a/data/pokeblock_feed.s
+++ /dev/null
@@ -1,225 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
-@ 8411A10
- .include "data/mon_pokeblock_anims.inc"
-
- .align 2
-gSpriteAffineAnim_8411E90:: @ 8411E90
- obj_rot_scal_anim_frame 0xFF00, 0x100, 0, 0
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_8411EA0:: @ 8411EA0
- obj_rot_scal_anim_frame 0x0, 0x0, 12, 1
- obj_rot_scal_anim_frame 0x0, 0x0, 0, 30
- obj_rot_scal_anim_frame 0x0, 0x0, -12, 1
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_8411EC0:: @ 8411EC0
- obj_rot_scal_anim_frame 0xFF00, 0x100, 0, 0
- obj_rot_scal_anim_frame 0x0, 0x0, 12, 1
- obj_rot_scal_anim_frame 0x0, 0x0, 0, 28
- obj_rot_scal_anim_frame 0x0, 0x0, -4, 3
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_8411EE8:: @ 8411EE8
- obj_rot_scal_anim_frame 0x0, 0x0, 1, 16
- obj_rot_scal_anim_frame 0x0, 0x0, -1, 32
- obj_rot_scal_anim_frame 0x0, 0x0, 1, 16
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_8411F08:: @ 8411F08
- obj_rot_scal_anim_frame 0xFF00, 0x100, 0, 0
- obj_rot_scal_anim_frame 0x0, 0x0, 1, 16
- obj_rot_scal_anim_frame 0x0, 0x0, -1, 32
- obj_rot_scal_anim_frame 0x0, 0x0, 1, 16
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_8411F30:: @ 8411F30
- obj_rot_scal_anim_frame 0x0, 0x0, -1, 8
- obj_rot_scal_anim_frame 0x0, 0x0, 0, 16
- obj_rot_scal_anim_frame 0x0, 0x0, 1, 8
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_8411F50:: @ 8411F50
- obj_rot_scal_anim_frame 0xFF00, 0x100, 0, 0
- obj_rot_scal_anim_frame 0x0, 0x0, -1, 8
- obj_rot_scal_anim_frame 0x0, 0x0, 0, 16
- obj_rot_scal_anim_frame 0x0, 0x0, 1, 8
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_8411F78:: @ 8411F78
- obj_rot_scal_anim_frame 0x0, 0x0, -1, 8
- obj_rot_scal_anim_frame 0x0, 0x0, 0, 32
- obj_rot_scal_anim_frame 0x0, 0x0, 1, 8
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_8411F98:: @ 8411F98
- obj_rot_scal_anim_frame 0xFF00, 0x100, 0, 0
- obj_rot_scal_anim_frame 0x0, 0x0, -1, 8
- obj_rot_scal_anim_frame 0x0, 0x0, 0, 32
- obj_rot_scal_anim_frame 0x0, 0x0, 1, 8
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_8411FC0:: @ 8411FC0
- obj_rot_scal_anim_frame 0x0, 0x0, -1, 4
- obj_rot_scal_anim_frame 0x0, 0x0, 0, 24
- obj_rot_scal_anim_frame 0x0, 0x0, 1, 4
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_8411FE0:: @ 8411FE0
- obj_rot_scal_anim_frame 0xFF00, 0x100, 0, 0
- obj_rot_scal_anim_frame 0x0, 0x0, -1, 4
- obj_rot_scal_anim_frame 0x0, 0x0, 0, 24
- obj_rot_scal_anim_frame 0x0, 0x0, 1, 4
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_8412008:: @ 8412008
- obj_rot_scal_anim_frame 0x0, 0x0, 1, 24
- obj_rot_scal_anim_frame 0x0, 0x0, 0, 16
- obj_rot_scal_anim_frame 0x0, 0x0, -12, 2
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_8412028:: @ 8412028
- obj_rot_scal_anim_frame 0xFF00, 0x100, 0, 0
- obj_rot_scal_anim_frame 0x0, 0x0, 1, 24
- obj_rot_scal_anim_frame 0x0, 0x0, 0, 16
- obj_rot_scal_anim_frame 0x0, 0x0, -12, 2
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnimTable_8412050:: @ 8412050
- .4byte gSpriteAffineAnim_8411E90
- .4byte gSpriteAffineAnim_8411EA0
- .4byte gSpriteAffineAnim_8411EE8
- .4byte gSpriteAffineAnim_8411F30
- .4byte gSpriteAffineAnim_8411F78
- .4byte gSpriteAffineAnim_8411FC0
- .4byte gSpriteAffineAnim_8412008
- .4byte gSpriteAffineAnim_8411E90
- .4byte gSpriteAffineAnim_8411E90
- .4byte gSpriteAffineAnim_8411E90
- .4byte gSpriteAffineAnim_8411E90
- .4byte gSpriteAffineAnim_8411EC0
- .4byte gSpriteAffineAnim_8411F08
- .4byte gSpriteAffineAnim_8411F50
- .4byte gSpriteAffineAnim_8411F98
- .4byte gSpriteAffineAnim_8411FE0
- .4byte gSpriteAffineAnim_8412028
- .4byte gSpriteAffineAnim_8411E90
- .4byte gSpriteAffineAnim_8411E90
- .4byte gSpriteAffineAnim_8411E90
- .4byte gSpriteAffineAnim_8411E90
-
- .align 2
-gUnknown_084120A4:: @ 84120A4
- .4byte gPokeblockRed_Pal
- .4byte gPokeblockBlue_Pal
- .4byte gPokeblockPink_Pal
- .4byte gPokeblockGreen_Pal
- .4byte gPokeblockYellow_Pal
- .4byte gPokeblockPurple_Pal
- .4byte gPokeblockIndigo_Pal
- .4byte gPokeblockBrown_Pal
- .4byte gPokeblockLiteBlue_Pal
- .4byte gPokeblockOlive_Pal
- .4byte gPokeblockGray_Pal
- .4byte gPokeblockBlack_Pal
- .4byte gPokeblockWhite_Pal
- .4byte gPokeblockGold_Pal
-
- .align 2
-gSpriteAffineAnim_84120DC:: @ 84120DC
- obj_rot_scal_anim_frame 0xFF00, 0x100, 0, 0
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnimTable_84120EC:: @ 84120EC
- .4byte gSpriteAffineAnim_84120DC
-
- .align 2
-gSpriteAffineAnim_84120F0:: @ 84120F0
- obj_rot_scal_anim_frame 0xFF00, 0x100, 0, 0
- obj_rot_scal_anim_frame 0x0, 0x0, -8, 1
- obj_rot_scal_anim_frame 0x0, 0x0, -8, 1
- obj_rot_scal_anim_frame 0x0, 0x0, -8, 1
- obj_rot_scal_anim_frame 0x0, 0x0, -8, 1
- obj_rot_scal_anim_frame 0x0, 0x0, 0, 8
- obj_rot_scal_anim_frame 0x0, 0x0, 16, 1
- obj_rot_scal_anim_frame 0x0, 0x0, 16, 1
- obj_rot_scal_anim_frame 0x0, 0x0, 16, 1
- obj_rot_scal_anim_frame 0xFF00, 0x100, 0, 0
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnim_8412148:: @ 8412148
- obj_rot_scal_anim_frame 0xFF00, 0x100, 0, 0
- obj_rot_scal_anim_frame 0x0, 0x0, 8, 1
- obj_rot_scal_anim_frame 0x0, 0x0, 8, 1
- obj_rot_scal_anim_frame 0x0, 0x0, 8, 1
- obj_rot_scal_anim_frame 0x0, 0x0, 8, 1
- obj_rot_scal_anim_frame 0x0, 0x0, 0, 8
- obj_rot_scal_anim_frame 0x0, 0x0, -16, 1
- obj_rot_scal_anim_frame 0x0, 0x0, -16, 1
- obj_rot_scal_anim_frame 0x0, 0x0, -16, 1
- obj_rot_scal_anim_frame 0xFF00, 0x100, 0, 0
- obj_rot_scal_anim_end
-
- .align 2
-gSpriteAffineAnimTable_84121A0:: @ 84121A0
- .4byte gSpriteAffineAnim_84120DC
-
- .align 2
-gSpriteAffineAnimTable_84121A4:: @ 84121A4
- .4byte gSpriteAffineAnim_84120F0
-
- .align 2
-gSpriteAffineAnimTable_84121A8:: @ 84121A8
- .4byte gSpriteAffineAnim_8412148
-
- .align 2
-gOamData_84121AC:: @ 84121AC
- .2byte 0x0300
- .2byte 0x0000
- .2byte 0x0400
-
- .align 2
-gSpriteAnim_84121B4:: @ 84121B4
- obj_image_anim_frame 0, 0
- obj_image_anim_end
-
- .align 2
-gSpriteAnimTable_84121BC:: @ 84121BC
- .4byte gSpriteAnim_84121B4
-
- .align 2
-gSpriteAffineAnim_84121C0:: @ 84121C0
- obj_rot_scal_anim_frame 0x100, 0x100, 0, 0
- obj_rot_scal_anim_frame 0xFFF8, 0xFFF8, 0, 1
- obj_rot_scal_anim_jump 1
-
- .align 2
-gSpriteAffineAnimTable_84121D8:: @ 84121D8
- .4byte gSpriteAffineAnim_84121C0
-
- .align 2
-gUnknown_084121DC:: @ 84121DC
- obj_tiles gPokeblock_Gfx, 0x20, 14818
-
- .align 2
-gSpriteTemplate_84121E4:: @ 84121E4
- spr_template 14818, 14818, gOamData_84121AC, gSpriteAnimTable_84121BC, NULL, gSpriteAffineAnimTable_84121D8, sub_81481B0
diff --git a/data/pokemon_menu.s b/data/pokemon_menu.s
deleted file mode 100644
index 9e2ce2864..000000000
--- a/data/pokemon_menu.s
+++ /dev/null
@@ -1,82 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 2
-gPokemonMenuActions:: @ 839F494
- .4byte OtherText_Summary, PokemonMenu_Summary
- .4byte OtherText_Switch2, PokemonMenu_Switch
- .4byte OtherText_Item, PokemonMenu_Item
- .4byte gOtherText_CancelNoTerminator, PokemonMenu_Cancel
- .4byte OtherText_Give2, PokemonMenu_GiveItem
- .4byte OtherText_Take2, PokemonMenu_TakeItem
- .4byte OtherText_Take, PokemonMenu_TakeMail
- .4byte OtherText_Mail, PokemonMenu_Mail
- .4byte OtherText_Read2, PokemonMenu_ReadMail
- .4byte gOtherText_CancelNoTerminator, PokemonMenu_CancelSubmenu
- .4byte gMoveNames + 13 * MOVE_CUT, PokemonMenu_FieldMove
- .4byte gMoveNames + 13 * MOVE_FLASH, PokemonMenu_FieldMove
- .4byte gMoveNames + 13 * MOVE_ROCK_SMASH, PokemonMenu_FieldMove
- .4byte gMoveNames + 13 * MOVE_STRENGTH, PokemonMenu_FieldMove
- .4byte gMoveNames + 13 * MOVE_SURF, PokemonMenu_FieldMove
- .4byte gMoveNames + 13 * MOVE_FLY, PokemonMenu_FieldMove
- .4byte gMoveNames + 13 * MOVE_DIVE, PokemonMenu_FieldMove
- .4byte gMoveNames + 13 * MOVE_WATERFALL, PokemonMenu_FieldMove
- .4byte gMoveNames + 13 * MOVE_TELEPORT, PokemonMenu_FieldMove
- .4byte gMoveNames + 13 * MOVE_DIG, PokemonMenu_FieldMove
- .4byte gMoveNames + 13 * MOVE_SECRET_POWER, PokemonMenu_FieldMove
- .4byte gMoveNames + 13 * MOVE_MILK_DRINK, PokemonMenu_FieldMove
- .4byte gMoveNames + 13 * MOVE_SOFT_BOILED, PokemonMenu_FieldMove
- .4byte gMoveNames + 13 * MOVE_SWEET_SCENT, PokemonMenu_FieldMove
-
- .align 1
-gUnknown_0839F554:: @ 839F554
- .2byte MOVE_CUT
- .2byte MOVE_FLASH
- .2byte MOVE_ROCK_SMASH
- .2byte MOVE_STRENGTH
- .2byte MOVE_SURF
- .2byte MOVE_FLY
- .2byte MOVE_DIVE
- .2byte MOVE_WATERFALL
- .2byte MOVE_TELEPORT
- .2byte MOVE_DIG
- .2byte MOVE_SECRET_POWER
- .2byte MOVE_MILK_DRINK
- .2byte MOVE_SOFT_BOILED
- .2byte MOVE_SWEET_SCENT
- .2byte 0xFF
-
-Unknown_39F572: @ 839F572
- .byte 4, 5, 9, 0
-
- .align 2
-gUnknown_0839F578:: @ 839F578
- .byte 3, 6, 0, 0
- .4byte Unknown_39F572
-
-Unknown_39F580: @ 839F580
- .byte 8, 6, 9, 0
-
- .align 2
-gUnknown_0839F584:: @ 839F584
- .byte 3, 9, 0, 0
- .4byte Unknown_39F580
-
- .align 2
-gFieldMoveFuncs:: @ 839F58C
- .4byte SetUpFieldMove_Cut, 0x6
- .4byte SetUpFieldMove_Flash, 0x9
- .4byte SetUpFieldMove_RockSmash, 0x9
- .4byte SetUpFieldMove_Strength, 0x9
- .4byte SetUpFieldMove_Surf, 0x7
- .4byte SetUpFieldMove_Fly, 0x9
- .4byte SetUpFieldMove_Dive, 0x9
- .4byte SetUpFieldMove_Waterfall, 0x9
- .4byte SetUpFieldMove_Teleport, 0x9
- .4byte SetUpFieldMove_Dig, 0x9
- .4byte SetUpFieldMove_SecretPower, 0x9
- .4byte SetUpFieldMove_SoftBoiled, 0x10
- .4byte SetUpFieldMove_SoftBoiled, 0x10
- .4byte SetUpFieldMove_SweetScent, 0x9
diff --git a/data/rom4.s b/data/rom4.s
deleted file mode 100644
index 6f883c64c..000000000
--- a/data/rom4.s
+++ /dev/null
@@ -1,66 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 2
-gDummyWarpData:: @ 8216624
- .byte -1
- .byte -1
- .byte -1
- .space 1
- .2byte -1
- .2byte -1
-
-@ unused, unknown data
- .byte 0xB0, 0x04, 0x00, 0x00
- .byte 0x10, 0x0E, 0x00, 0x00
- .byte 0xB0, 0x04, 0x00, 0x00
- .byte 0x60, 0x09, 0x00, 0x00
- .byte 0x32, 0x00, 0x00, 0x00
- .byte 0x50, 0x00, 0x00, 0x00
- .byte 0xD4, 0xFF, 0xFF, 0xFF
- .byte 0x2C, 0x00, 0x00, 0x00
-
- .align 2
-gUnknown_0821664C:: @ 821664C
- .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
-
- .align 2
-gUnknown_08216694:: @ 8216694
- .4byte REG_WIN0H
- .4byte ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_DEST_RELOAD) << 16) | 1
- .4byte 1
-
- .align 2
-gUnknown_082166A0:: @ 82166A0
- .4byte sub_8055C68
- .4byte sub_8055C88
- .4byte sub_8055C8C
-
- .align 2
-gUnknown_082166AC:: @ 82166AC
- .4byte sub_8055CAC
- .4byte sub_8055CB0
- .4byte sub_8055CB0
- .4byte sub_8055CB0
- .4byte sub_8055CB0
- .4byte sub_8055CAC
- .4byte sub_8055CAC
- .4byte sub_8055D18
- .4byte sub_8055D18
- .4byte sub_8055D18
- .4byte sub_8055D18
-
- .align 2
-gUnknown_082166D8:: @ 82166D8
- .4byte sub_8055D30
- .4byte sub_8055D38
diff --git a/data/scripts/bard.inc b/data/scripts/bard.inc
deleted file mode 100644
index 3f25b100f..000000000
--- a/data/scripts/bard.inc
+++ /dev/null
@@ -1,67 +0,0 @@
-MauvilleCity_PokemonCenter_1F_EventScript_1AE744:: @ 81AE744
- special sub_80F7B14
- switch RESULT
- case 0, MauvilleCity_PokemonCenter_1F_EventScript_1AE784
- case 1, MauvilleCity_PokemonCenter_1F_EventScript_1AE845
- case 2, MauvilleCity_PokemonCenter_1F_EventScript_1AEBAB
- case 3, MauvilleCity_PokemonCenter_1F_EventScript_1B0816
- case 4, MauvilleCity_PokemonCenter_1F_EventScript_1B09EB
- end
-
-MauvilleCity_PokemonCenter_1F_EventScript_1AE784:: @ 81AE784
- lock
- faceplayer
- msgbox MauvilleCity_PokemonCenter_1F_Text_1B0A91, 5
- compare RESULT, 1
- jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AE7A5
- compare RESULT, 0
- jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AE7C8
- end
-
-MauvilleCity_PokemonCenter_1F_EventScript_1AE7A5:: @ 81AE7A5
- setvar 0x8004, 0
- special sub_80F7C54
- pause 60
- special sub_80F7B2C
- compare RESULT, 0
- jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AE7D2
- msgbox MauvilleCity_PokemonCenter_1F_Text_1B0AED, 4
- release
- end
-
-MauvilleCity_PokemonCenter_1F_EventScript_1AE7C8:: @ 81AE7C8
- msgbox MauvilleCity_PokemonCenter_1F_Text_1B0AC3, 4
- release
- end
-
-MauvilleCity_PokemonCenter_1F_EventScript_1AE7D2:: @ 81AE7D2
- msgbox MauvilleCity_PokemonCenter_1F_Text_1B0B2C, 5
- compare RESULT, 1
- jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AE7F1
- compare RESULT, 0
- jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AE83B
- end
-
-MauvilleCity_PokemonCenter_1F_EventScript_1AE7F1:: @ 81AE7F1
- setvar 0x8004, 6
- call MauvilleCity_PokemonCenter_1F_EventScript_1A00F3
- lock
- faceplayer
- compare RESULT, 0
- jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AE83B
- msgbox MauvilleCity_PokemonCenter_1F_Text_1B0BD0, 4
- setvar 0x8004, 1
- special sub_80F7C54
- pause 60
- msgbox MauvilleCity_PokemonCenter_1F_Text_1B0BFA, 5
- compare RESULT, 0
- jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AE7F1
- special sub_80F7B40
- msgbox MauvilleCity_PokemonCenter_1F_Text_1B0C23, 4
- release
- end
-
-MauvilleCity_PokemonCenter_1F_EventScript_1AE83B:: @ 81AE83B
- msgbox MauvilleCity_PokemonCenter_1F_Text_1B0BA6, 4
- release
- end
diff --git a/data/scripts/berry_tree.inc b/data/scripts/berry_tree.inc
index 1bbe7d355..f4707d8cb 100644
--- a/data/scripts/berry_tree.inc
+++ b/data/scripts/berry_tree.inc
@@ -1,4 +1,4 @@
-BerryTreeScript:: @ 81A14DD
+S_BerryTree:: @ 81A14DD
special FieldObjectInteractionGetBerryTreeData
switch 0x8004
case 255, Route102_EventScript_1A1533
diff --git a/data/scripts/cable_club.inc b/data/scripts/cable_club.inc
index 4a919c597..6507677e0 100644
--- a/data/scripts/cable_club.inc
+++ b/data/scripts/cable_club.inc
@@ -191,7 +191,7 @@ OldaleTown_PokemonCenter_2F_EventScript_1A3EBC:: @ 81A3EBC
case 127, OldaleTown_PokemonCenter_2F_EventScript_1A4319
OldaleTown_PokemonCenter_2F_EventScript_1A3EF2:: @ 81A3EF2
- call OldaleTown_PokemonCenter_2F_EventScript_19F806
+ call S_DoSaveDialog
compare RESULT, 0
jumpeq OldaleTown_PokemonCenter_2F_EventScript_1A4319
call OldaleTown_PokemonCenter_2F_EventScript_1A3FEF
@@ -215,7 +215,7 @@ OldaleTown_PokemonCenter_2F_EventScript_1A3EF2:: @ 81A3EF2
jumpeq OldaleTown_PokemonCenter_2F_EventScript_1A42F5
OldaleTown_PokemonCenter_2F_EventScript_1A3F5E:: @ 81A3F5E
- special HealPlayerParty
+ special ScrSpecial_HealPlayerParty
special SavePlayerParty
special LoadPlayerBag
copyvar 0x4087, 0x8004
@@ -361,7 +361,7 @@ OldaleTown_PokemonCenter_2F_EventScript_1A40FA:: @ 81A40FA
call OldaleTown_PokemonCenter_2F_EventScript_1A41BB
compare RESULT, 0
jumpeq OldaleTown_PokemonCenter_2F_EventScript_1A4319
- call OldaleTown_PokemonCenter_2F_EventScript_19F806
+ call S_DoSaveDialog
compare RESULT, 0
jumpeq OldaleTown_PokemonCenter_2F_EventScript_1A4319
message OldaleTown_PokemonCenter_2F_Text_1A490C
@@ -455,7 +455,7 @@ VerdanturfTown_PokemonCenter_2F_EventScript_1A41FB:: @ 81A41FB
jumpeq OldaleTown_PokemonCenter_2F_EventScript_1A4229
OldaleTown_PokemonCenter_2F_EventScript_1A4229:: @ 81A4229
- call OldaleTown_PokemonCenter_2F_EventScript_19F806
+ call S_DoSaveDialog
compare RESULT, 0
jumpeq OldaleTown_PokemonCenter_2F_EventScript_1A4319
message OldaleTown_PokemonCenter_2F_Text_1A490C
diff --git a/data/scripts/day_care.inc b/data/scripts/day_care.inc
index b5b3d4670..dcc4b44e7 100644
--- a/data/scripts/day_care.inc
+++ b/data/scripts/day_care.inc
@@ -282,7 +282,7 @@ Route117_PokemonDayCare_EventScript_1B2558:: @ 81B2558
release
end
-Event_EggHatch:: @ 81B25BC
+S_EggHatch:: @ 81B25BC
lockall
msgbox UnknownString_81B2C68, 4
special EggHatch
diff --git a/data/scripts/giddy.inc b/data/scripts/giddy.inc
deleted file mode 100644
index 263589fe9..000000000
--- a/data/scripts/giddy.inc
+++ /dev/null
@@ -1,51 +0,0 @@
-MauvilleCity_PokemonCenter_1F_EventScript_1B09EB:: @ 81B09EB
- lock
- faceplayer
- msgbox MauvilleCity_PokemonCenter_1F_Text_1B092A, 5
- compare RESULT, 1
- jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B0A0C
- compare RESULT, 0
- jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B0A6F
- end
-
-MauvilleCity_PokemonCenter_1F_EventScript_1B0A0C:: @ 81B0A0C
- special sub_80F7CC8
- compare RESULT, 1
- jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B0A4E
- compare RESULT, 0
- jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B0A79
- end
-
-MauvilleCity_PokemonCenter_1F_EventScript_1B0A26:: @ 81B0A26
- special sub_80F7CC8
- compare RESULT, 1
- jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B0A40
- compare RESULT, 0
- jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B0A79
- end
-
-MauvilleCity_PokemonCenter_1F_EventScript_1B0A40:: @ 81B0A40
- msgbox MauvilleCity_PokemonCenter_1F_Text_1B0998, 4
- jump MauvilleCity_PokemonCenter_1F_EventScript_1B0A4E
- end
-
-MauvilleCity_PokemonCenter_1F_EventScript_1B0A4E:: @ 81B0A4E
- special sub_80F7CF4
- special ShowFieldMessageStringVar4
- waittext
- yesnobox 20, 8
- compare RESULT, 1
- jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B0A26
- compare RESULT, 0
- jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B0A26
- end
-
-MauvilleCity_PokemonCenter_1F_EventScript_1B0A6F:: @ 81B0A6F
- msgbox MauvilleCity_PokemonCenter_1F_Text_1B097C, 4
- release
- end
-
-MauvilleCity_PokemonCenter_1F_EventScript_1B0A79:: @ 81B0A79
- msgbox MauvilleCity_PokemonCenter_1F_Text_1B09B0, 4
- release
- end
diff --git a/data/scripts/hipster.inc b/data/scripts/hipster.inc
deleted file mode 100644
index 3e24e4868..000000000
--- a/data/scripts/hipster.inc
+++ /dev/null
@@ -1,25 +0,0 @@
-MauvilleCity_PokemonCenter_1F_EventScript_1AE845:: @ 81AE845
- lock
- faceplayer
- setflag 2054
- msgbox MauvilleCity_PokemonCenter_1F_Text_1B0C5B, 4
- special sub_80F7C70
- compare RESULT, 0
- jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AE86A
- msgbox MauvilleCity_PokemonCenter_1F_Text_1B0CA7, 4
- release
- end
-
-MauvilleCity_PokemonCenter_1F_EventScript_1AE86A:: @ 81AE86A
- special sub_80F7C90
- compare RESULT, 1
- jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AE882
- msgbox MauvilleCity_PokemonCenter_1F_Text_1B0D11, 4
- release
- end
-
-MauvilleCity_PokemonCenter_1F_EventScript_1AE882:: @ 81AE882
- msgbox MauvilleCity_PokemonCenter_1F_Text_1B0D75, 4
- special sub_80F7C84
- release
- end
diff --git a/data/scripts/maps/AncientTomb.inc b/data/scripts/maps/AncientTomb.inc
index 7ba7540c4..bfc5b6a79 100644
--- a/data/scripts/maps/AncientTomb.inc
+++ b/data/scripts/maps/AncientTomb.inc
@@ -64,7 +64,7 @@ AncientTomb_EventScript_15F050:: @ 815F050
setwildbattle SPECIES_REGISTEEL, 40, ITEM_NONE
setflag 937
setflag 2145
- special StartBattle_Regi
+ special ScrSpecial_StartRegiBattle
waitstate
clearflag 2145
release
diff --git a/data/scripts/maps/BattleTower_BattleRoom.inc b/data/scripts/maps/BattleTower_BattleRoom.inc
index 176d8e8e8..2f0fb97b9 100644
--- a/data/scripts/maps/BattleTower_BattleRoom.inc
+++ b/data/scripts/maps/BattleTower_BattleRoom.inc
@@ -20,7 +20,7 @@ BattleTower_BattleRoom_EventScript_1608FA:: @ 81608FA
msgbox 0x20234cc, 4
waittext
closebutton
- special HealPlayerParty
+ special ScrSpecial_HealPlayerParty
setvar 0x8004, 0
setvar 0x8005, 0
special sub_813556C
@@ -56,7 +56,7 @@ BattleTower_BattleRoom_EventScript_160961:: @ 8160961
special sub_8135A14
fanfare 368
waitfanfare
- special HealPlayerParty
+ special ScrSpecial_HealPlayerParty
BattleTower_BattleRoom_EventScript_1609B2:: @ 81609B2
msgbox BattleTower_BattleRoom_Text_19AD09, 5
diff --git a/data/scripts/maps/BattleTower_Lobby.inc b/data/scripts/maps/BattleTower_Lobby.inc
index 8cd3639a5..a1570ac13 100644
--- a/data/scripts/maps/BattleTower_Lobby.inc
+++ b/data/scripts/maps/BattleTower_Lobby.inc
@@ -242,7 +242,7 @@ BattleTower_Lobby_EventScript_160587:: @ 8160587
special LoadPlayerParty
closebutton
pause 2
- call BattleTower_Lobby_EventScript_19F806
+ call S_DoSaveDialog
setvar 0x4000, 5
hidebox 0, 0, 15, 10
compare RESULT, 0
diff --git a/data/scripts/maps/CaveOfOrigin_B4F.inc b/data/scripts/maps/CaveOfOrigin_B4F.inc
index 023892d36..5517a9c7e 100644
--- a/data/scripts/maps/CaveOfOrigin_B4F.inc
+++ b/data/scripts/maps/CaveOfOrigin_B4F.inc
@@ -62,7 +62,7 @@ CaveOfOrigin_B4F_EventScript_15DDD7:: @ 815DDD7
pause 40
waitpokecry
setflag 2145
- special StartBattle_GroudonKyogre
+ special ScrSpecial_StartGroudonKyogreBattle
waitstate
clearflag 2145
specialval RESULT, sub_810E300
diff --git a/data/scripts/maps/DesertRuins.inc b/data/scripts/maps/DesertRuins.inc
index df40fc126..97a22bae3 100644
--- a/data/scripts/maps/DesertRuins.inc
+++ b/data/scripts/maps/DesertRuins.inc
@@ -64,7 +64,7 @@ DesertRuins_EventScript_15CB85:: @ 815CB85
setwildbattle SPECIES_REGIROCK, 40, ITEM_NONE
setflag 935
setflag 2145
- special StartBattle_Regi
+ special ScrSpecial_StartRegiBattle
waitstate
clearflag 2145
release
diff --git a/data/scripts/maps/IslandCave.inc b/data/scripts/maps/IslandCave.inc
index b16f386d8..2f8ba2121 100644
--- a/data/scripts/maps/IslandCave.inc
+++ b/data/scripts/maps/IslandCave.inc
@@ -31,7 +31,7 @@ IslandCave_MapScript1_15EF15:: @ 815EF15
setflag 2133
end
-gIslandCave_EventScript_OpenRegiiceChamber:: @ 815EF19
+S_OpenRegiceChamber:: @ 815EF19
setmaptile 7, 19, 554, 1
setmaptile 8, 19, 555, 1
setmaptile 9, 19, 556, 1
@@ -84,7 +84,7 @@ IslandCave_EventScript_15EF9D:: @ 815EF9D
setwildbattle SPECIES_REGICE, 40, ITEM_NONE
setflag 936
setflag 2145
- special StartBattle_Regi
+ special ScrSpecial_StartRegiBattle
waitstate
clearflag 2145
release
diff --git a/data/scripts/maps/LilycoveCity_ContestLobby.inc b/data/scripts/maps/LilycoveCity_ContestLobby.inc
index 3c8cc5bdf..6bdcf55e2 100644
--- a/data/scripts/maps/LilycoveCity_ContestLobby.inc
+++ b/data/scripts/maps/LilycoveCity_ContestLobby.inc
@@ -330,7 +330,7 @@ LilycoveCity_ContestLobby_EventScript_158BC4:: @ 8158BC4
msgbox LilycoveCity_ContestLobby_Text_188521, 5
compare RESULT, 0
jumpeq LilycoveCity_ContestLobby_EventScript_158C35
- call LilycoveCity_ContestLobby_EventScript_19F806
+ call S_DoSaveDialog
hidebox 0, 0, 15, 9
compare RESULT, 0
jumpeq LilycoveCity_ContestLobby_EventScript_158C35
diff --git a/data/scripts/maps/LilycoveCity_CoveLilyMotel_2F.inc b/data/scripts/maps/LilycoveCity_CoveLilyMotel_2F.inc
index dcf74b77c..09d19c1c5 100644
--- a/data/scripts/maps/LilycoveCity_CoveLilyMotel_2F.inc
+++ b/data/scripts/maps/LilycoveCity_CoveLilyMotel_2F.inc
@@ -29,7 +29,7 @@ LilycoveCity_CoveLilyMotel_2F_EventScript_1583DD:: @ 81583DD
message LilycoveCity_CoveLilyMotel_2F_Text_18708F
waittext
call LilycoveCity_CoveLilyMotel_2F_EventScript_1A02C5
- special sub_810D6A4
+ special ScrSpecial_ShowDiploma
waitstate
release
end
diff --git a/data/scripts/maps/LilycoveCity_Harbor.inc b/data/scripts/maps/LilycoveCity_Harbor.inc
index f8ff8f9f3..aca6b16d4 100644
--- a/data/scripts/maps/LilycoveCity_Harbor.inc
+++ b/data/scripts/maps/LilycoveCity_Harbor.inc
@@ -135,7 +135,7 @@ LilycoveCity_Harbor_EventScript_1599EE:: @ 81599EE
callif 1, LilycoveCity_Harbor_EventScript_1599CE
pause 30
spriteinvisible 255, 0, 0
- special HealPlayerParty
+ special ScrSpecial_HealPlayerParty
setvar 0x8004, 2
call LilycoveCity_Harbor_EventScript_1A040E
warp SouthernIsland_Exterior, 255, 13, 22
diff --git a/data/scripts/maps/LilycoveCity_MoveDeletersHouse.inc b/data/scripts/maps/LilycoveCity_MoveDeletersHouse.inc
index 6adea2eb2..2786c930c 100644
--- a/data/scripts/maps/LilycoveCity_MoveDeletersHouse.inc
+++ b/data/scripts/maps/LilycoveCity_MoveDeletersHouse.inc
@@ -21,7 +21,7 @@ LilycoveCity_MoveDeletersHouse_EventScript_159ADE:: @ 8159ADE
special sub_80FA148
compare RESULT, 1
jumpeq LilycoveCity_MoveDeletersHouse_EventScript_159B71
- special sub_80F9F3C
+ special ScrSpecial_CountPokemonMoves
compare RESULT, 1
jumpeq LilycoveCity_MoveDeletersHouse_EventScript_159B64
msgbox LilycoveCity_MoveDeletersHouse_Text_18B6B0, 4
@@ -30,7 +30,7 @@ LilycoveCity_MoveDeletersHouse_EventScript_159ADE:: @ 8159ADE
fadescreen 0
compare 0x8005, 4
jumpeq LilycoveCity_MoveDeletersHouse_EventScript_159ADE
- special sub_80F9F84
+ special ScrSpecial_GetPokemonNicknameAndMoveName
msgbox LilycoveCity_MoveDeletersHouse_Text_18B6F2, 5
switch RESULT
case 1, LilycoveCity_MoveDeletersHouse_EventScript_159B53
@@ -47,7 +47,7 @@ LilycoveCity_MoveDeletersHouse_EventScript_159B53:: @ 8159B53
end
LilycoveCity_MoveDeletersHouse_EventScript_159B64:: @ 8159B64
- special sub_80F9F84
+ special ScrSpecial_GetPokemonNicknameAndMoveName
msgbox LilycoveCity_MoveDeletersHouse_Text_18B6D0, 4
releaseall
end
diff --git a/data/scripts/maps/MossdeepCity_GameCorner_1F.inc b/data/scripts/maps/MossdeepCity_GameCorner_1F.inc
index 14836f3e0..59669596a 100644
--- a/data/scripts/maps/MossdeepCity_GameCorner_1F.inc
+++ b/data/scripts/maps/MossdeepCity_GameCorner_1F.inc
@@ -103,7 +103,7 @@ MossdeepCity_GameCorner_1F_EventScript_15AD59:: @ 815AD59
compare RESULT, 0
callif 1, MossdeepCity_GameCorner_1F_EventScript_15ADE8
special LoadPlayerParty
- call MossdeepCity_GameCorner_1F_EventScript_19F806
+ call S_DoSaveDialog
compare RESULT, 0
jumpeq MossdeepCity_GameCorner_1F_EventScript_15ADE8
hidebox 0, 0, 15, 10
diff --git a/data/scripts/maps/MossdeepCity_GameCorner_B1F.inc b/data/scripts/maps/MossdeepCity_GameCorner_B1F.inc
index a5a013d5f..c7d1201fd 100644
--- a/data/scripts/maps/MossdeepCity_GameCorner_B1F.inc
+++ b/data/scripts/maps/MossdeepCity_GameCorner_B1F.inc
@@ -29,7 +29,7 @@ MossdeepCity_GameCorner_B1F_EventScript_15AE6E:: @ 815AE6E
compare RESULT, 2
callif 1, MossdeepCity_GameCorner_B1F_EventScript_15AEEE
closebutton
- special HealPlayerParty
+ special ScrSpecial_HealPlayerParty
move 255, MossdeepCity_GameCorner_B1F_Movement_15AEFF
waitmove 0
special LoadPlayerParty
diff --git a/data/scripts/maps/PetalburgCity.inc b/data/scripts/maps/PetalburgCity.inc
index dc5efe243..123b099fe 100644
--- a/data/scripts/maps/PetalburgCity.inc
+++ b/data/scripts/maps/PetalburgCity.inc
@@ -32,7 +32,7 @@ PetalburgCity_EventScript_14B747:: @ 814B747
move 255, PetalburgCity_Movement_14B7CC
waitmove 0
msgbox PetalburgCity_Text_16D361, 4
- special StartBattle_WallyTutorial
+ special ScrSpecial_StartWallyTutorialBattle
waitstate
msgbox PetalburgCity_Text_16D3DE, 4
movecoords 2, PetalburgCity_Movement_1A083F, 0, 0
diff --git a/data/scripts/maps/Route101.inc b/data/scripts/maps/Route101.inc
index 8462603a6..d945aadfc 100644
--- a/data/scripts/maps/Route101.inc
+++ b/data/scripts/maps/Route101.inc
@@ -224,12 +224,12 @@ Route101_EventScript_14EA7F:: @ 814EA7F
movesprite 255, 6, 13
move 255, Route101_Movement_1A083F
waitmove 0
- special ChooseStarter
+ special ScrSpecial_ChooseStarter
waitstate
move 2, Route101_Movement_14EAD7
waitmove 0
msgbox Route101_Text_16D191, 4
- special HealPlayerParty
+ special ScrSpecial_HealPlayerParty
setflag 720
clearflag 721
setflag 700
diff --git a/data/scripts/maps/Route110.inc b/data/scripts/maps/Route110.inc
index d8c19d92c..a77feaa0f 100644
--- a/data/scripts/maps/Route110.inc
+++ b/data/scripts/maps/Route110.inc
@@ -25,7 +25,7 @@ Route110_MapScript2_14F933:: @ 814F933
.2byte 0
Route110_EventScript_14F93D:: @ 814F93D
- special BeginCyclingRoadChallenge
+ special ScrSpecial_BeginCyclingRoadChallenge
setvar 0x40a9, 2
return
diff --git a/data/scripts/maps/SkyPillar_Top.inc b/data/scripts/maps/SkyPillar_Top.inc
index 23db6a8ea..d659a23c1 100644
--- a/data/scripts/maps/SkyPillar_Top.inc
+++ b/data/scripts/maps/SkyPillar_Top.inc
@@ -21,7 +21,7 @@ SkyPillar_Top_EventScript_15F316:: @ 815F316
waitpokecry
setflag 773
setflag 2145
- special StartBattle_Rayquaza
+ special ScrSpecial_StartRayquazaBattle
waitstate
clearflag 2145
release
diff --git a/data/scripts/maps/SlateportCity.inc b/data/scripts/maps/SlateportCity.inc
index 48eb5c1df..e156f8948 100644
--- a/data/scripts/maps/SlateportCity.inc
+++ b/data/scripts/maps/SlateportCity.inc
@@ -69,7 +69,7 @@ SlateportCity_EventScript_14BAE0:: @ 814BAE0
specialval RESULT, LeadMonHasEffortRibbon
compare RESULT, 1
callif 1, SlateportCity_EventScript_14BB35
- specialval RESULT, GetLeadMonEVCount
+ specialval RESULT, ScrSpecial_AreLeadMonEVsMaxedOut
compare RESULT, 0
callif 1, SlateportCity_EventScript_14BB2B
msgbox SlateportCity_Text_164691, 4
diff --git a/data/scripts/maps/SouthernIsland_Interior.inc b/data/scripts/maps/SouthernIsland_Interior.inc
index 3adf3545f..e5eaadab5 100644
--- a/data/scripts/maps/SouthernIsland_Interior.inc
+++ b/data/scripts/maps/SouthernIsland_Interior.inc
@@ -67,7 +67,7 @@ SouthernIsland_Interior_EventScript_160BA7:: @ 8160BA7
setwildbattle SPECIES_LATIAS_OR_LATIOS, 50, ITEM_SOUL_DEW
setflag 911
setflag 2145
- special StartBattle_SouthernIsland
+ special ScrSpecial_StartSouthernIslandBattle
waitstate
clearflag 2145
releaseall
diff --git a/data/scripts/mauville_man.inc b/data/scripts/mauville_man.inc
new file mode 100644
index 000000000..997b5a31c
--- /dev/null
+++ b/data/scripts/mauville_man.inc
@@ -0,0 +1,357 @@
+@ From mauville_old_man.h
+@ TODO: Put these in a header
+
+MAUVILLE_MAN_BARD = 0
+MAUVILLE_MAN_HIPSTER = 1
+MAUVILLE_MAN_TRADER = 2
+MAUVILLE_MAN_STORYTELLER = 3
+MAUVILLE_MAN_GIDDY = 4
+
+MauvilleCity_PokemonCenter_1F_EventScript_1AE744:: @ 81AE744
+ special ScrSpecial_GetCurrentMauvilleMan
+ switch RESULT
+ case MAUVILLE_MAN_BARD, SpeakToBard
+ case MAUVILLE_MAN_HIPSTER, SpeakToHipster
+ case MAUVILLE_MAN_TRADER, SpeakToTrader
+ case MAUVILLE_MAN_STORYTELLER, SpeakToStoryteller
+ case MAUVILLE_MAN_GIDDY, SpeakToGiddy
+ end
+
+
+@-------------------------------------------------------------------------------
+@ Bard
+@-------------------------------------------------------------------------------
+
+SpeakToBard:
+ lock
+ faceplayer
+ msgbox gTextBard_HiImTheBard, MSGBOX_YESNO
+ compare RESULT, YES
+ jumpeq yes_hear_song
+ compare RESULT, NO
+ jumpeq dont_hear_song
+ end
+
+yes_hear_song:
+ setvar 0x8004, 0
+ @ Give the player ear rape
+ special ScrSpecial_PlayBardSong
+ pause 60
+ special ScrSpecial_HasBardSongBeenChanged
+ compare RESULT, FALSE
+ @ Prompt new lyrics only if song hasn't been changed
+ jumpeq prompt_write_lyrics
+ msgbox gTextBard_OhWhatAMovingSong, 4
+ release
+ end
+
+dont_hear_song:
+ msgbox gTextBard_OhYouveLeftMe, 4
+ release
+ end
+
+prompt_write_lyrics:
+ msgbox gTextBard_SoHowDoYouLikeMySong, MSGBOX_YESNO
+ compare RESULT, YES
+ jumpeq write_lyrics
+ compare RESULT, NO
+ jumpeq dont_write_lyrics
+ end
+
+write_lyrics:
+ setvar 0x8004, 6
+ call MauvilleCity_PokemonCenter_1F_EventScript_1A00F3
+ lock
+ faceplayer
+ compare RESULT, NO
+ jumpeq dont_write_lyrics
+ msgbox gTextBard_ThankYouKindly, 4
+ setvar 0x8004, 1
+ @ Give the player ear rape again
+ special ScrSpecial_PlayBardSong
+ pause 60
+ msgbox gTextBard_WasThatHowYouWanted, MSGBOX_YESNO
+ compare RESULT, NO
+ jumpeq write_lyrics @ Keep looping until player responds YES
+ special ScrSpecial_SaveBardSongLyrics
+ msgbox gTextBard_OkayThatsIt, 4
+ release
+ end
+
+dont_write_lyrics:
+ msgbox gTextBard_OhYouveLeftMe2, 4
+ release
+ end
+
+
+@-------------------------------------------------------------------------------
+@ Hipster
+@-------------------------------------------------------------------------------
+
+SpeakToHipster:
+ lock
+ faceplayer
+ setflag 2054
+ msgbox gTextHipster_TheyCallMeTheHipster, 4
+ special ScrSpecial_GetHipsterSpokenFlag
+ compare RESULT, FALSE
+ jumpeq hipster_first_time
+ msgbox gTextHipster_TaughtYouAlready, 4
+ release
+ end
+
+hipster_first_time:
+ special ScrSpecial_HipsterTeachWord
+ compare RESULT, TRUE @ TRUE if player learned a new word
+ jumpeq teach_new_word
+ msgbox gTextHipster_YouAlreadyKnowALot, 4
+ release
+ end
+
+teach_new_word:
+ msgbox gTextHipster_HaveYouHeardAbout, 4
+ special ScrSpecial_SetHipsterSpokenFlag
+ release
+ end
+
+
+@-------------------------------------------------------------------------------
+@ Trader
+@-------------------------------------------------------------------------------
+
+ .include "data/text/trader.inc"
+
+SpeakToTrader:
+ lock
+ faceplayer
+ msgbox gTextTrader_Introduction, MSGBOX_YESNO
+ compare RESULT, NO
+ jumpeq dont_want_to_trade
+ special ScrSpecial_GetTraderTradedFlag
+ compare RESULT, TRUE
+ jumpeq already_traded
+ message gTextTrader_MenuPrompt
+ waittext
+ jump do_trader_menu_get
+ end
+
+dont_want_to_trade:
+ msgbox gTextTrader_FeelUnwanted1, 2
+ end
+
+already_traded:
+ msgbox gTextTrader_TradedAlready, 2
+ end
+
+do_trader_menu_get:
+ special ScrSpecial_TraderMenuGetDecoration
+ waitstate
+ compare 0x8004, 0
+ jumpeq cancelled_get_menu
+ compare 0x8004, 65535
+ jumpeq rare_item_cant_trade_away
+ msgbox gTextTrader_ItemOnceBelongedTo, MSGBOX_YESNO
+ compare RESULT, NO
+ jumpeq dont_want_item
+ special ScrSpecial_DoesPlayerHaveNoDecorations
+ compare RESULT, TRUE
+ jumpeq player_has_no_decorations
+ jump do_trader_menu_give
+ end
+
+cancelled_get_menu:
+ msgbox gTextTrader_DontWantAnything, 2
+ end
+
+rare_item_cant_trade_away:
+ message gTextTrader_ICantTradeThatOneAway
+ waittext
+ jump do_trader_menu_get
+ end
+
+dont_want_item:
+ message gTextTrader_MenuPrompt
+ waittext
+ jump do_trader_menu_get
+ end
+
+player_has_no_decorations:
+ msgbox gTextTrader_YouDontHaveDecorations, 2
+ end
+
+do_trader_menu_give:
+ msgbox gTextTrader_PickDecorationYoullTrade, 4
+ special ScrSpecial_TraderMenuGiveDecoration
+ waitstate
+ compare 0x8006, 0
+ jumpeq cancelled_give_menu
+ compare 0x8006, 65535
+ jumpeq decoration_is_in_use
+ special ScrSpecial_IsDecorationFull
+ compare RESULT, 1
+ jumpeq decorations_full
+ msgbox gTextTrader_SoWellTrade, MSGBOX_YESNO
+ compare RESULT, NO
+ jumpeq do_trader_menu_give
+ special ScrSpecial_TraderDoDecorationTrade
+ msgbox gTextTrader_ThenWellTrade, 2
+ end
+
+cancelled_give_menu:
+ msgbox gTextTrader_FeelUnwanted2, 2
+ end
+
+decoration_is_in_use:
+ msgbox gTextTrader_InUseYouCantTradeIt, 4
+ jump do_trader_menu_give
+ end
+
+decorations_full:
+ msgbox gTextTrader_NoRoomForThis, 2
+ end
+
+
+@-------------------------------------------------------------------------------
+@ Storyteller
+@-------------------------------------------------------------------------------
+
+ .include "data/text/storyteller.inc"
+
+SpeakToStoryteller:
+ setvar 0x8008, 0
+ setvar 0x8009, 0
+ setvar 0x800a, 0
+ setvar 0x800b, 0
+ lock
+ faceplayer
+ msgbox gTextStoryteller_Introduction, MSGBOX_YESNO
+ compare RESULT, NO
+ jumpeq dont_hear_story
+ specialval RESULT, ScrSpecial_StorytellerGetFreeStorySlot
+ compare RESULT, 0 @ If slot is 0, then the list is empty
+ jumpeq no_stories_recorded
+choose_story:
+ message gTextStoryteller_WhichTale
+ waittext
+ special ScrSpecial_StorytellerStoryListMenu
+ waitstate
+ compare RESULT, FALSE
+ jumpeq cancel_story_menu
+ setvar 0x8008, 1
+ special ScrSpecial_StorytellerDisplayStory
+ waittext
+ waitbutton
+ specialval RESULT, ScrSpecial_StorytellerUpdateStat
+ compare RESULT, FALSE
+ jumpeq no_stat_update
+ jump stat_update
+cancel_story_menu:
+ compare 0x8008, 0
+ jumpeq dont_hear_story
+ jump yes_hear_story
+no_stat_update:
+ msgbox gTextStoryteller_CouldThereBeOtherTrainers, 4
+ msgbox gTextStoryteller_HearAnotherLegendaryTale, MSGBOX_YESNO
+ compare RESULT, YES
+ jumpeq choose_story
+yes_hear_story:
+ specialval RESULT, ScrSpecial_HasStorytellerAlreadyRecorded
+ compare RESULT, TRUE
+ jumpeq cant_record_story @ already recorded story
+ specialval RESULT, ScrSpecial_StorytellerGetFreeStorySlot
+ compare RESULT, 4
+ jumpeq cant_record_story @ story list is full
+ jump prompt_record_story
+no_stories_recorded:
+ msgbox gTextStoryteller_ButIKnowOfNoLegendaryTrainers, 4
+prompt_record_story:
+ msgbox gTextStoryteller_HaveYouAnyTales, MSGBOX_YESNO
+ compare RESULT, NO
+ jumpeq dont_hear_story
+ specialval RESULT, ScrSpecial_StorytellerInitializeRandomStat
+ compare RESULT, TRUE
+ jumpeq stat_update
+ msgbox gTextStoryteller_ImNotSatisfied, 4
+ closebutton
+ release
+ end
+
+stat_update:
+ msgbox gTextStoryteller_BirthOfANewLegend, 4
+ closebutton
+ release
+ end
+
+dont_hear_story:
+ msgbox gTextStoryteller_OhIFeelStifled, 4
+ closebutton
+ release
+ end
+
+cant_record_story:
+ msgbox gTextStoryteller_WishMorePeopleWould, 4
+ closebutton
+ release
+ end
+
+
+@-------------------------------------------------------------------------------
+@ Giddy
+@-------------------------------------------------------------------------------
+
+ .include "data/text/giddy.inc"
+
+SpeakToGiddy:
+ lock
+ faceplayer
+ msgbox gTextGiddy_Introduction, MSGBOX_YESNO
+ compare RESULT, YES
+ jumpeq yes_hear_giddy
+ compare RESULT, NO
+ jumpeq dont_hear_giddy
+ end
+
+yes_hear_giddy:
+ special ScrSpecial_GiddyShouldTellAnotherTale
+ compare RESULT, TRUE
+ jumpeq tell_giddy_tale
+ compare RESULT, FALSE
+ jumpeq bye_bye
+ end
+
+tell_another_giddy_tale:
+ special ScrSpecial_GiddyShouldTellAnotherTale
+ compare RESULT, TRUE
+ jumpeq also_i_was_thinking
+ compare RESULT, FALSE
+ jumpeq bye_bye
+ end
+
+also_i_was_thinking:
+ msgbox gTextGiddy_AlsoIWasThinking, 4
+ jump tell_giddy_tale
+ end
+
+tell_giddy_tale:
+ special ScrSpecial_GenerateGiddyLine
+ special ShowFieldMessageStringVar4
+ waittext
+ yesnobox 20, 8
+ compare RESULT, 1
+ jumpeq tell_another_giddy_tale
+ compare RESULT, 0
+ jumpeq tell_another_giddy_tale
+ end
+
+dont_hear_giddy:
+ msgbox gTextGiddy_YouveDeflatedMe, 4
+ release
+ end
+
+bye_bye:
+ msgbox gTextGiddy_ByeBye, 4
+ release
+ end
+
+ .include "data/text/bard.inc"
+ .include "data/text/hipster.inc"
diff --git a/data/scripts/players_house.inc b/data/scripts/players_house.inc
index ca4b2bdb9..e9f379b24 100644
--- a/data/scripts/players_house.inc
+++ b/data/scripts/players_house.inc
@@ -107,7 +107,7 @@ LittlerootTown_BrendansHouse_2F_EventScript_1B6A61:: @ 81B6A61
LittlerootTown_BrendansHouse_2F_EventScript_1B6A91:: @ 81B6A91
inccounter GAME_STAT_CHECKED_CLOCK
fadescreen 1
- special sub_810D6B8
+ special ScrSpecial_ViewWallClock
waitstate
releaseall
end
diff --git a/data/scripts/pokeblocks.inc b/data/scripts/pokeblocks.inc
index e1add8734..852acd292 100644
--- a/data/scripts/pokeblocks.inc
+++ b/data/scripts/pokeblocks.inc
@@ -235,7 +235,7 @@ FallarborTown_ContestLobby_EventScript_1B7897:: @ 81B7897
end
FallarborTown_ContestLobby_EventScript_1B78A1:: @ 81B78A1
- call FallarborTown_ContestLobby_EventScript_19F806
+ call S_DoSaveDialog
compare RESULT, 0
jumpeq FallarborTown_ContestLobby_EventScript_1B7936
message FallarborTown_ContestLobby_Text_1B7304
diff --git a/data/scripts/storyteller.inc b/data/scripts/storyteller.inc
deleted file mode 100644
index eba94e698..000000000
--- a/data/scripts/storyteller.inc
+++ /dev/null
@@ -1,82 +0,0 @@
-MauvilleCity_PokemonCenter_1F_EventScript_1B0816:: @ 81B0816
- setvar 0x8008, 0
- setvar 0x8009, 0
- setvar 0x800a, 0
- setvar 0x800b, 0
- lock
- faceplayer
- msgbox MauvilleCity_PokemonCenter_1F_Text_1AECC6, 5
- compare RESULT, 0
- jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B0914
- specialval RESULT, sub_80F889C
- compare RESULT, 0
- jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B08D3
-
-MauvilleCity_PokemonCenter_1F_EventScript_1B084F:: @ 81B084F
- message MauvilleCity_PokemonCenter_1F_Text_1AED35
- waittext
- special sub_80F8874
- waitstate
- compare RESULT, 0
- jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B0883
- setvar 0x8008, 1
- special sub_80F8888
- waittext
- waitbutton
- specialval RESULT, sub_80F88AC
- compare RESULT, 0
- jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B0893
- jump MauvilleCity_PokemonCenter_1F_EventScript_1B0909
-
-MauvilleCity_PokemonCenter_1F_EventScript_1B0883:: @ 81B0883
- compare 0x8008, 0
- jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B0914
- jump MauvilleCity_PokemonCenter_1F_EventScript_1B08AE
-
-MauvilleCity_PokemonCenter_1F_EventScript_1B0893:: @ 81B0893
- msgbox MauvilleCity_PokemonCenter_1F_Text_1AEE50, 4
- msgbox MauvilleCity_PokemonCenter_1F_Text_1AEF0A, 5
- compare RESULT, 1
- jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B084F
-
-MauvilleCity_PokemonCenter_1F_EventScript_1B08AE:: @ 81B08AE
- specialval RESULT, sub_80F88E0
- compare RESULT, 1
- jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B091F
- specialval RESULT, sub_80F889C
- compare RESULT, 4
- jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B091F
- jump MauvilleCity_PokemonCenter_1F_EventScript_1B08DB
-
-MauvilleCity_PokemonCenter_1F_EventScript_1B08D3:: @ 81B08D3
- msgbox MauvilleCity_PokemonCenter_1F_Text_1AED70, 4
-
-MauvilleCity_PokemonCenter_1F_EventScript_1B08DB:: @ 81B08DB
- msgbox MauvilleCity_PokemonCenter_1F_Text_1AEEB4, 5
- compare RESULT, 0
- jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B0914
- specialval RESULT, sub_80F88FC
- compare RESULT, 1
- jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1B0909
- msgbox MauvilleCity_PokemonCenter_1F_Text_1AEF49, 4
- closebutton
- release
- end
-
-MauvilleCity_PokemonCenter_1F_EventScript_1B0909:: @ 81B0909
- msgbox MauvilleCity_PokemonCenter_1F_Text_1AEDE8, 4
- closebutton
- release
- end
-
-MauvilleCity_PokemonCenter_1F_EventScript_1B0914:: @ 81B0914
- msgbox MauvilleCity_PokemonCenter_1F_Text_1AED1D, 4
- closebutton
- release
- end
-
-MauvilleCity_PokemonCenter_1F_EventScript_1B091F:: @ 81B091F
- msgbox MauvilleCity_PokemonCenter_1F_Text_1AEFA5, 4
- closebutton
- release
- end
diff --git a/data/scripts/trader.inc b/data/scripts/trader.inc
deleted file mode 100644
index b52c8a2dc..000000000
--- a/data/scripts/trader.inc
+++ /dev/null
@@ -1,88 +0,0 @@
-MauvilleCity_PokemonCenter_1F_EventScript_1AEBAB:: @ 81AEBAB
- lock
- faceplayer
- msgbox MauvilleCity_PokemonCenter_1F_Text_1AE88F, 5
- compare RESULT, 0
- jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AEBDA
- special sub_8109C44
- compare RESULT, 1
- jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AEBE3
- message MauvilleCity_PokemonCenter_1F_Text_1AE910
- waittext
- jump MauvilleCity_PokemonCenter_1F_EventScript_1AEBEC
- end
-
-MauvilleCity_PokemonCenter_1F_EventScript_1AEBDA:: @ 81AEBDA
- msgbox MauvilleCity_PokemonCenter_1F_Text_1AE8C6, 2
- end
-
-MauvilleCity_PokemonCenter_1F_EventScript_1AEBE3:: @ 81AEBE3
- msgbox MauvilleCity_PokemonCenter_1F_Text_1AE8DF, 2
- end
-
-MauvilleCity_PokemonCenter_1F_EventScript_1AEBEC:: @ 81AEBEC
- special sub_8109E34
- waitstate
- compare 0x8004, 0
- jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AEC2D
- compare 0x8004, 65535
- jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AEC36
- msgbox MauvilleCity_PokemonCenter_1F_Text_1AE97C, 5
- compare RESULT, 0
- jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AEC42
- special sub_8109C58
- compare RESULT, 1
- jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AEC4E
- jump MauvilleCity_PokemonCenter_1F_EventScript_1AEC57
- end
-
-MauvilleCity_PokemonCenter_1F_EventScript_1AEC2D:: @ 81AEC2D
- msgbox MauvilleCity_PokemonCenter_1F_Text_1AE950, 2
- end
-
-MauvilleCity_PokemonCenter_1F_EventScript_1AEC36:: @ 81AEC36
- message MauvilleCity_PokemonCenter_1F_Text_1AEB31
- waittext
- jump MauvilleCity_PokemonCenter_1F_EventScript_1AEBEC
- end
-
-MauvilleCity_PokemonCenter_1F_EventScript_1AEC42:: @ 81AEC42
- message MauvilleCity_PokemonCenter_1F_Text_1AE910
- waittext
- jump MauvilleCity_PokemonCenter_1F_EventScript_1AEBEC
- end
-
-MauvilleCity_PokemonCenter_1F_EventScript_1AEC4E:: @ 81AEC4E
- msgbox MauvilleCity_PokemonCenter_1F_Text_1AE9B6, 2
- end
-
-MauvilleCity_PokemonCenter_1F_EventScript_1AEC57:: @ 81AEC57
- msgbox MauvilleCity_PokemonCenter_1F_Text_1AE9F8, 4
- special sub_8109CF0
- waitstate
- compare 0x8006, 0
- jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AECA6
- compare 0x8006, 65535
- jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AECAF
- special sub_8109C90
- compare RESULT, 1
- jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AECBD
- msgbox MauvilleCity_PokemonCenter_1F_Text_1AEA9B, 5
- compare RESULT, 0
- jumpeq MauvilleCity_PokemonCenter_1F_EventScript_1AEC57
- special sub_8109DE0
- msgbox MauvilleCity_PokemonCenter_1F_Text_1AEAFB, 2
- end
-
-MauvilleCity_PokemonCenter_1F_EventScript_1AECA6:: @ 81AECA6
- msgbox MauvilleCity_PokemonCenter_1F_Text_1AEA2B, 2
- end
-
-MauvilleCity_PokemonCenter_1F_EventScript_1AECAF:: @ 81AECAF
- msgbox MauvilleCity_PokemonCenter_1F_Text_1AEAC3, 4
- jump MauvilleCity_PokemonCenter_1F_EventScript_1AEC57
- end
-
-MauvilleCity_PokemonCenter_1F_EventScript_1AECBD:: @ 81AECBD
- msgbox MauvilleCity_PokemonCenter_1F_Text_1AEA57, 2
- end
diff --git a/data/shop.s b/data/shop.s
deleted file mode 100644
index 071874d0e..000000000
--- a/data/shop.s
+++ /dev/null
@@ -1,69 +0,0 @@
- .include "asm/macros.inc"
- .include "constants/constants.inc"
-
- .section .rodata
-
- .align 2
-gUnknown_083CC6D0:: @ 83CC6D0
- .4byte MartText_Buy, sub_80B2EFC
- .4byte MartText_Sell, sub_80B2F30
- .4byte MartText_Quit2, HandleShopMenuQuit
-
-gUnknown_083CC6E8:: @ 83CC6E8
- .byte 0, 1, 2
-
-gUnknown_083CC6EB:: @ 83CC6EB
- .byte 0, 2
-
-@ unknown, unreferenced data
- .align 1
- .2byte 0x2
- .2byte 0x3
- .2byte 0x4
- .2byte 0xD
- .2byte 0x121
- .2byte 0xE
- .2byte 0xE
- .2byte 0xE
- .2byte 0xE
- .2byte 0xE
- .2byte 0xE
- .2byte 0x0
- .2byte 0x0
-
- .align 2
-gUnknown_083CC708:: @ 83CC708
- .4byte sub_80B3BF4
- .4byte sub_80B3D7C
-
- .align 1
-gUnknown_083CC710:: @ 83CC710
- .2byte 0x41EE,0x7FFF
-
- .align 1
-gUnknown_083CC714:: @ 83CC714
- .2byte 0x284,0x282,0x280
-
- .align 1
-gUnknown_083CC71A:: @ 83CC71A
- .2byte 0x285,0x283,0x281
-
- .align 1
-gUnknown_083CC720:: @ 83CC720
- .2byte 0x28C,0x28A,0x288
-
- .align 1
-gUnknown_083CC726:: @ 83CC726
- .2byte 0x28D,0x28B,0x289
-
- .align 1
-gUnknown_083CC72C:: @ 83CC72C
- .2byte 0x2A0,0x2A2,0x2A4
-
- .align 1
-gUnknown_083CC732:: @ 83CC732
- .2byte 0x2A1,0x2A3,0x2A5
-
- .align 1
-gUnknown_083CC738:: @ 83CC738
- .2byte 0x2A8,0x2AA,0x2AC
diff --git a/data/specials.inc b/data/specials.inc
index 0eb6b742d..3545d1dff 100644
--- a/data/specials.inc
+++ b/data/specials.inc
@@ -7,7 +7,7 @@
.set __special__, 0
.align 2
gSpecials::
- def_special HealPlayerParty
+ def_special ScrSpecial_HealPlayerParty
def_special SetCableClubWarp
def_special DoCableClubWarp
def_special sub_80810DC
@@ -58,15 +58,15 @@ gSpecials::
def_special FieldObjectInteractionWaterBerryTree
def_special PlayerHasBerries
def_special IsEnigmaBerryValid
- def_special sub_8082558
- def_special sub_80826D8
- def_special sub_8082718
- def_special sub_8082564
- def_special sub_80847C8
+ def_special ScrSpecial_GetTrainerBattleMode
+ def_special ScrSpecial_ShowTrainerIntroSpeech
+ def_special ScrSpecial_ShowTrainerNonBattlingSpeech
+ def_special ScrSpecial_HasTrainerBeenFought
+ def_special ScrSpecial_EndTrainerApproach
def_special PlayTrainerEncounterMusic
def_special sub_8082C68
- def_special sub_8082C9C
- def_special sub_80826B0
+ def_special ScrSpecial_GetTrainerEyeRematchFlag
+ def_special ScrSpecial_StartTrainerEyeRematch
def_special ShowPokemonStorageSystem
def_special CheckForAlivePartyMons
def_special TurnOffTVScreen
@@ -100,32 +100,32 @@ gSpecials::
def_special sub_80C5044
def_special GiveMonArtistRibbon
def_special sub_808363C
- def_special InitSaveDialog
+ def_special ScrSpecial_DoSaveDialog
def_special DoWateringBerryTreeAnim
def_special sub_80E60D8
def_special sub_80EB7C4
- def_special sub_80F7B14
- def_special sub_80F7B2C
- def_special sub_80F7B40
- def_special sub_80F7C70
- def_special sub_80F7C84
- def_special sub_80F7C90
- def_special sub_80F7C54
+ 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 sub_80F83D0
- def_special sub_80F7CF4
- def_special sub_80F7CC8
- def_special sub_80F889C
- def_special sub_80F8888
- def_special sub_80F8874
- def_special sub_80F88AC
- def_special sub_80F88FC
- def_special sub_80F88E0
- def_special sub_8109E34
- def_special sub_8109C44
- def_special sub_8109C58
- def_special sub_8109C90
- def_special sub_8109CF0
- def_special sub_8109DE0
+ 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 GetShroomishSizeRecordInfo
def_special CompareShroomishSize
def_special GetBarboachSizeRecordInfo
@@ -162,9 +162,9 @@ gSpecials::
def_special sub_8123218
def_special sub_8053E90
def_special StartWallClock
- def_special sub_810D6B8
- def_special ChooseStarter
- def_special StartBattle_WallyTutorial
+ def_special ScrSpecial_ViewWallClock
+ def_special ScrSpecial_ChooseStarter
+ def_special ScrSpecial_StartWallyTutorialBattle
def_special sub_80BF9F8
def_special sub_80F9A0C
def_special sub_810CA00
@@ -178,7 +178,7 @@ gSpecials::
def_special sub_810FF48
def_special sub_810FAA0
def_special sub_810FF60
- def_special RockSmashWildEncounter
+ def_special ScrSpecial_RockSmashWildEncounter
def_special GabbyAndTyGetBattleNum
def_special sub_80BDC14
def_special GabbyAndTyBeforeInterview
@@ -229,11 +229,11 @@ gSpecials::
def_special sub_80F9A4C
def_special sub_80F9EEC
def_special sub_80FA0DC
- def_special sub_80F9F84
- def_special sub_80F9F3C
+ def_special ScrSpecial_GetPokemonNicknameAndMoveName
+ def_special ScrSpecial_CountPokemonMoves
def_special sub_8132670
def_special GetRecordedCyclingRoadResults
- def_special BeginCyclingRoadChallenge
+ def_special ScrSpecial_BeginCyclingRoadChallenge
def_special GetPlayerAvatarBike
def_special FinishCyclingRoadChallenge
def_special UpdateCyclingRoadState
@@ -269,9 +269,9 @@ gSpecials::
def_special ShowBerryBlenderRecordWindow
def_special ResetTrickHouseEndRoomFlag
def_special SetTrickHouseEndRoomFlag
- def_special TryCreatePCMenu
+ def_special ScrSpecial_CreatePCMenu
def_special AccessHallOfFamePC
- def_special sub_810D6A4
+ def_special ScrSpecial_ShowDiploma
def_special CheckLeadMonCool
def_special CheckLeadMonBeauty
def_special CheckLeadMonCute
@@ -301,7 +301,7 @@ gSpecials::
def_special sub_810F4FC
def_special LeadMonHasEffortRibbon
def_special GivLeadMonEffortRibbon
- def_special GetLeadMonEVCount
+ def_special ScrSpecial_AreLeadMonEVsMaxedOut
def_special sub_8064EAC
def_special sub_8064ED4
def_special InitRoamer
@@ -318,9 +318,9 @@ gSpecials::
def_special IsPokerusInParty
def_special sub_8069D78
def_special sub_810F758
- def_special StartBattle_GroudonKyogre
- def_special StartBattle_Rayquaza
- def_special StartBattle_Regi
+ def_special ScrSpecial_StartGroudonKyogreBattle
+ def_special ScrSpecial_StartRayquazaBattle
+ def_special ScrSpecial_StartRegiBattle
def_special sub_8082524
def_special DoSealedChamberShakingEffect2
def_special sub_810F828
@@ -330,7 +330,7 @@ gSpecials::
def_special ShowContestEntryMonPic
def_special sub_80C5164
def_special sub_8134AB4
- def_special StartBattle_SouthernIsland
+ def_special ScrSpecial_StartSouthernIslandBattle
def_special SetRoute119Weather
def_special SetRoute123Weather
def_special ScriptGetMultiplayerId
diff --git a/data/text/bard.inc b/data/text/bard.inc
index edf4942f6..bd22c97a3 100644
--- a/data/text/bard.inc
+++ b/data/text/bard.inc
@@ -1,19 +1,19 @@
-UnknownString_81B0A83: @ 81B0A83
+gTextBard_BardTesting: @ 81B0A83
.string "BARD testing!$"
-MauvilleCity_PokemonCenter_1F_Text_1B0A91:: @ 81B0A91
+gTextBard_HiImTheBard:: @ 81B0A91
.string "Hi, I’m the BARD.\n"
.string "Would you like to hear my song?$"
-MauvilleCity_PokemonCenter_1F_Text_1B0AC3:: @ 81B0AC3
+gTextBard_OhYouveLeftMe:: @ 81B0AC3
.string "Oh...\n"
.string "You’ve left me feeling the blues...$"
-MauvilleCity_PokemonCenter_1F_Text_1B0AED:: @ 81B0AED
+gTextBard_OhWhatAMovingSong:: @ 81B0AED
.string "Oh, what a moving song...\n"
.string "I wish I could play it for others...$"
-MauvilleCity_PokemonCenter_1F_Text_1B0B2C:: @ 81B0B2C
+gTextBard_SoHowDoYouLikeMySong:: @ 81B0B2C
.string "So?\n"
.string "How do you like my song?\p"
.string "But I’m none too happy about the\n"
@@ -21,18 +21,18 @@ MauvilleCity_PokemonCenter_1F_Text_1B0B2C:: @ 81B0B2C
.string "How would you like to write some new\n"
.string "lyrics for me?$"
-MauvilleCity_PokemonCenter_1F_Text_1B0BA6:: @ 81B0BA6
+gTextBard_OhYouveLeftMe2:: @ 81B0BA6
.string "Oh...\n"
.string "You’ve left me feeling the blues...$"
-MauvilleCity_PokemonCenter_1F_Text_1B0BD0:: @ 81B0BD0
+gTextBard_ThankYouKindly:: @ 81B0BD0
.string "Thank you kindly!\n"
.string "Let me sing it for you.$"
-MauvilleCity_PokemonCenter_1F_Text_1B0BFA:: @ 81B0BFA
+gTextBard_WasThatHowYouWanted:: @ 81B0BFA
.string "Was that how you wanted your song\n"
.string "to go?$"
-MauvilleCity_PokemonCenter_1F_Text_1B0C23:: @ 81B0C23
+gTextBard_OkayThatsIt:: @ 81B0C23
.string "Okay! That’s it, then.\n"
.string "I’ll sing this song for a while.$"
diff --git a/data/text/giddy.inc b/data/text/giddy.inc
index 040ef2ae5..a763776bf 100644
--- a/data/text/giddy.inc
+++ b/data/text/giddy.inc
@@ -1,16 +1,16 @@
-MauvilleCity_PokemonCenter_1F_Text_1B092A:: @ 81B092A
+gTextGiddy_Introduction:: @ 81B092A
.string "I’m GIDDY!\n"
.string "I have a scintillating story for you!\p"
.string "Would you like to hear my story?$"
-MauvilleCity_PokemonCenter_1F_Text_1B097C:: @ 81B097C
+gTextGiddy_YouveDeflatedMe:: @ 81B097C
.string "Oh...\n"
.string "You’ve deflated me...$"
-MauvilleCity_PokemonCenter_1F_Text_1B0998:: @ 81B0998
+gTextGiddy_AlsoIWasThinking:: @ 81B0998
.string "Also, I was thinking...$"
-MauvilleCity_PokemonCenter_1F_Text_1B09B0:: @ 81B09B0
+gTextGiddy_ByeBye:: @ 81B09B0
.string "That’s about it, I think...\p"
.string "We should chat again!\n"
.string "Bye-bye!$"
diff --git a/data/text/hipster.inc b/data/text/hipster.inc
index a30943d3a..630db02b2 100644
--- a/data/text/hipster.inc
+++ b/data/text/hipster.inc
@@ -1,19 +1,19 @@
-MauvilleCity_PokemonCenter_1F_Text_1B0C5B:: @ 81B0C5B
+gTextHipster_TheyCallMeTheHipster:: @ 81B0C5B
.string "Hey, yo! They call me the HIPSTER.\n"
.string "I’ll teach you what’s hip and happening.$"
-MauvilleCity_PokemonCenter_1F_Text_1B0CA7:: @ 81B0CA7
+gTextHipster_TaughtYouAlready:: @ 81B0CA7
.string "But, hey, I taught you what’s hip and\n"
.string "happening already.\p"
.string "I’d like to spread the good word to\n"
.string "other folks.$"
-MauvilleCity_PokemonCenter_1F_Text_1B0D11:: @ 81B0D11
+gTextHipster_YouAlreadyKnowALot:: @ 81B0D11
.string "But, hey, you already know a lot about\n"
.string "what’s hip and happening.\p"
.string "I’ve got nothing new to teach you!$"
-MauvilleCity_PokemonCenter_1F_Text_1B0D75:: @ 81B0D75
+gTextHipster_HaveYouHeardAbout:: @ 81B0D75
.string "Hey, have you heard about\n"
.string "“{STR_VAR_1}”?\p"
.string "What’s it mean? Well...\n"
diff --git a/data/text/storyteller.inc b/data/text/storyteller.inc
index 3cfa8a698..437a1fa21 100644
--- a/data/text/storyteller.inc
+++ b/data/text/storyteller.inc
@@ -1,24 +1,24 @@
-MauvilleCity_PokemonCenter_1F_Text_1AECC6:: @ 81AECC6
+gTextStoryteller_Introduction:: @ 81AECC6
.string "I’m the STORYTELLER.\n"
.string "I’ll tell you tales of legendary\l"
.string "TRAINERS.\p"
.string "Will you hear my tale?$"
-MauvilleCity_PokemonCenter_1F_Text_1AED1D:: @ 81AED1D
+gTextStoryteller_OhIFeelStifled:: @ 81AED1D
.string "Oh...\n"
.string "I feel stifled...$"
-MauvilleCity_PokemonCenter_1F_Text_1AED35:: @ 81AED35
+gTextStoryteller_WhichTale:: @ 81AED35
.string "I know of these legends.\n"
.string "Which tale will you have me tell?$"
-MauvilleCity_PokemonCenter_1F_Text_1AED70:: @ 81AED70
+gTextStoryteller_ButIKnowOfNoLegendaryTrainers:: @ 81AED70
.string "But, I know of no legendary TRAINERS.\n"
.string "Hence, I know no tales.\p"
.string "Where does one find a TRAINER worthy\n"
.string "of a legendary tale?$"
-MauvilleCity_PokemonCenter_1F_Text_1AEDE8:: @ 81AEDE8
+gTextStoryteller_BirthOfANewLegend:: @ 81AEDE8
.string "What’s that?!\n"
.string "You... You...\p"
.string "{STR_VAR_2}\n"
@@ -26,38 +26,38 @@ MauvilleCity_PokemonCenter_1F_Text_1AEDE8:: @ 81AEDE8
.string "That is indeed magnificent!\n"
.string "It’s the birth of a new legend!$"
-MauvilleCity_PokemonCenter_1F_Text_1AEE50:: @ 81AEE50
+gTextStoryteller_CouldThereBeOtherTrainers:: @ 81AEE50
.string "It gets me thinking, could there be\n"
.string "other TRAINERS with more impressive\l"
.string "legends awaiting discovery?$"
-MauvilleCity_PokemonCenter_1F_Text_1AEEB4:: @ 81AEEB4
+gTextStoryteller_HaveYouAnyTales:: @ 81AEEB4
.string "Are you a TRAINER?\p"
.string "Then tell me, have you any tales that\n"
.string "are even remotely legendary?$"
-MauvilleCity_PokemonCenter_1F_Text_1AEF0A:: @ 81AEF0A
+gTextStoryteller_HearAnotherLegendaryTale:: @ 81AEF0A
.string "Incidentally... Would you care to hear\n"
.string "another legendary tale?$"
-MauvilleCity_PokemonCenter_1F_Text_1AEF49:: @ 81AEF49
+gTextStoryteller_ImNotSatisfied:: @ 81AEF49
.string "Hmm...\n"
.string "I’m not satisfied...\p"
.string "I wish you would bring me news worthy\n"
.string "of being called a legend.$"
-MauvilleCity_PokemonCenter_1F_Text_1AEFA5:: @ 81AEFA5
+gTextStoryteller_WishMorePeopleWould:: @ 81AEFA5
.string "I wish more people would be interested\n"
.string "in hearing my epic tales of legendary\l"
.string "TRAINERS.$"
-UnknownString_81AEFFC:: @ 81AEFFC
+gTextStoryteller_Story1Title:: @ 81AEFFC
.string "The Save-Happy TRAINER$"
-UnknownString_81AF013:: @ 81AF013
+gTextStoryteller_Story1Action:: @ 81AF013
.string "Saved the game$"
-UnknownString_81AF022:: @ 81AF022
+gTextStoryteller_Story1Text:: @ 81AF022
.string "This is a tale of a TRAINER\n"
.string "named {STR_VAR_3}.\p"
.string "This TRAINER saved the game\n"
@@ -65,13 +65,13 @@ UnknownString_81AF022:: @ 81AF022
.string "A more cautious TRAINER than\n"
.string "{STR_VAR_3} one will never find!$"
-UnknownString_81AF0A3:: @ 81AF0A3
+gTextStoryteller_Story2Title:: @ 81AF0A3
.string "The Trendsetter TRAINER$"
-UnknownString_81AF0BB:: @ 81AF0BB
+gTextStoryteller_Story2Action:: @ 81AF0BB
.string "Started trends$"
-UnknownString_81AF0CA:: @ 81AF0CA
+gTextStoryteller_Story2Text:: @ 81AF0CA
.string "This is a tale of a TRAINER\n"
.string "named {STR_VAR_3}.\p"
.string "This TRAINER started new trends\n"
@@ -79,13 +79,13 @@ UnknownString_81AF0CA:: @ 81AF0CA
.string "{STR_VAR_3} is setting trends for all\n"
.string "the HOENN region!$"
-UnknownString_81AF149:: @ 81AF149
+gTextStoryteller_Story3Title:: @ 81AF149
.string "The BERRY-Planting TRAINER$"
-UnknownString_81AF164:: @ 81AF164
+gTextStoryteller_Story3Action:: @ 81AF164
.string "Planted BERRIES$"
-UnknownString_81AF174:: @ 81AF174
+gTextStoryteller_Story3Text:: @ 81AF174
.string "This is a tale of a TRAINER\n"
.string "named {STR_VAR_3}.\p"
.string "This TRAINER planted BERRIES\n"
@@ -93,13 +93,13 @@ UnknownString_81AF174:: @ 81AF174
.string "{STR_VAR_3} is a legendary lover of\n"
.string "BERRIES!$"
-UnknownString_81AF1E5:: @ 81AF1E5
+gTextStoryteller_Story4Title:: @ 81AF1E5
.string "The BIKE-Loving TRAINER$"
-UnknownString_81AF1FD:: @ 81AF1FD
+gTextStoryteller_Story4Action:: @ 81AF1FD
.string "Traded BIKES$"
-UnknownString_81AF20A:: @ 81AF20A
+gTextStoryteller_Story4Text:: @ 81AF20A
.string "This is a tale of a TRAINER\n"
.string "named {STR_VAR_3}.\p"
.string "This TRAINER swapped BIKES\n"
@@ -107,13 +107,13 @@ UnknownString_81AF20A:: @ 81AF20A
.string "{STR_VAR_3} must love BIKES deeply\n"
.string "and passionately!$"
-UnknownString_81AF281:: @ 81AF281
+gTextStoryteller_Story5Title:: @ 81AF281
.string "The Interviewed TRAINER$"
-UnknownString_81AF299:: @ 81AF299
+gTextStoryteller_Story5Action:: @ 81AF299
.string "Got interviewed$"
-UnknownString_81AF2A9:: @ 81AF2A9
+gTextStoryteller_Story5Text:: @ 81AF2A9
.string "This is a tale of a TRAINER\n"
.string "named {STR_VAR_3}.\p"
.string "This TRAINER got interviewed\n"
@@ -121,26 +121,26 @@ UnknownString_81AF2A9:: @ 81AF2A9
.string "{STR_VAR_3} must be a TRAINER who’s\n"
.string "attracting much attention!$"
-UnknownString_81AF32C:: @ 81AF32C
+gTextStoryteller_Story6Title:: @ 81AF32C
.string "The Battle-Happy TRAINER$"
-UnknownString_81AF345:: @ 81AF345
+gTextStoryteller_Story6Action:: @ 81AF345
.string "Battled$"
-UnknownString_81AF34D:: @ 81AF34D
+gTextStoryteller_Story6Text:: @ 81AF34D
.string "This is a tale of a TRAINER\n"
.string "named {STR_VAR_3}.\p"
.string "This TRAINER battled {STR_VAR_1} times!\p"
.string "{STR_VAR_3} must be a TRAINER who can\n"
.string "never refuse a chance to battle!$"
-UnknownString_81AF3D0:: @ 81AF3D0
+gTextStoryteller_Story7Title:: @ 81AF3D0
.string "The POKéMON-Catching TRAINER$"
-UnknownString_81AF3ED:: @ 81AF3ED
+gTextStoryteller_Story7Action:: @ 81AF3ED
.string "Caught POKéMON$"
-UnknownString_81AF3FC:: @ 81AF3FC
+gTextStoryteller_Story7Text:: @ 81AF3FC
.string "This is a tale of a TRAINER\n"
.string "named {STR_VAR_3}.\p"
.string "This TRAINER caught\n"
@@ -148,13 +148,13 @@ UnknownString_81AF3FC:: @ 81AF3FC
.string "{STR_VAR_3} is a legendary catcher of\n"
.string "wild POKéMON!$"
-UnknownString_81AF46D:: @ 81AF46D
+gTextStoryteller_Story8Title:: @ 81AF46D
.string "The Fishing TRAINER$"
-UnknownString_81AF481:: @ 81AF481
+gTextStoryteller_Story8Action:: @ 81AF481
.string "Caught POKéMON with a ROD$"
-UnknownString_81AF49B:: @ 81AF49B
+gTextStoryteller_Story8Text:: @ 81AF49B
.string "This is a tale of a TRAINER\n"
.string "named {STR_VAR_3}.\p"
.string "This TRAINER caught\n"
@@ -162,13 +162,13 @@ UnknownString_81AF49B:: @ 81AF49B
.string "{STR_VAR_3} is a legendary fishing\n"
.string "expert!$"
-UnknownString_81AF511:: @ 81AF511
+gTextStoryteller_Story9Title:: @ 81AF511
.string "The EGG-Warming TRAINER$"
-UnknownString_81AF529:: @ 81AF529
+gTextStoryteller_Story9Action:: @ 81AF529
.string "Hatched EGGS$"
-UnknownString_81AF536:: @ 81AF536
+gTextStoryteller_Story9Text:: @ 81AF536
.string "This is a tale of a TRAINER\n"
.string "named {STR_VAR_3}.\p"
.string "This TRAINER hatched {STR_VAR_1} POKéMON\n"
@@ -176,13 +176,13 @@ UnknownString_81AF536:: @ 81AF536
.string "{STR_VAR_3} is a legendary warmer\n"
.string "of EGGS!$"
-UnknownString_81AF5A9:: @ 81AF5A9
+gTextStoryteller_Story10Title:: @ 81AF5A9
.string "The Evolver TRAINER$"
-UnknownString_81AF5BD:: @ 81AF5BD
+gTextStoryteller_Story10Action:: @ 81AF5BD
.string "Evolved POKéMON$"
-UnknownString_81AF5CD:: @ 81AF5CD
+gTextStoryteller_Story10Text:: @ 81AF5CD
.string "This is a tale of a TRAINER\n"
.string "named {STR_VAR_3}.\p"
.string "This TRAINER made {STR_VAR_1} POKéMON\n"
@@ -190,13 +190,13 @@ UnknownString_81AF5CD:: @ 81AF5CD
.string "{STR_VAR_3} is the ultimate evolver\n"
.string "of POKéMON!$"
-UnknownString_81AF63F:: @ 81AF63F
+gTextStoryteller_Story11Title:: @ 81AF63F
.string "The POKéMON CENTER-Loving TRAINER$"
-UnknownString_81AF661:: @ 81AF661
+gTextStoryteller_Story11Action:: @ 81AF661
.string "Used POKéMON CENTERS$"
-UnknownString_81AF676:: @ 81AF676
+gTextStoryteller_Story11Text:: @ 81AF676
.string "This is a tale of a TRAINER\n"
.string "named {STR_VAR_3}.\p"
.string "This TRAINER healed POKéMON\n"
@@ -204,13 +204,13 @@ UnknownString_81AF676:: @ 81AF676
.string "There could be no greater lover of\n"
.string "POKéMON CENTERS than {STR_VAR_3}!$"
-UnknownString_81AF711:: @ 81AF711
+gTextStoryteller_Story12Title:: @ 81AF711
.string "The Homebody TRAINER$"
-UnknownString_81AF726:: @ 81AF726
+gTextStoryteller_Story12Action:: @ 81AF726
.string "Rested POKéMON at home$"
-UnknownString_81AF73D:: @ 81AF73D
+gTextStoryteller_Story12Text:: @ 81AF73D
.string "This is a tale of a TRAINER\n"
.string "named {STR_VAR_3}.\p"
.string "This TRAINER healed POKéMON\n"
@@ -218,13 +218,13 @@ UnknownString_81AF73D:: @ 81AF73D
.string "There could be no more of a homebody\n"
.string "than {STR_VAR_3}!$"
-UnknownString_81AF7BF:: @ 81AF7BF
+gTextStoryteller_Story13Title:: @ 81AF7BF
.string "The SAFARI-Loving TRAINER$"
-UnknownString_81AF7D9:: @ 81AF7D9
+gTextStoryteller_Story13Action:: @ 81AF7D9
.string "Entered the SAFARI ZONE$"
-UnknownString_81AF7F1:: @ 81AF7F1
+gTextStoryteller_Story13Text:: @ 81AF7F1
.string "This is a tale of a TRAINER\n"
.string "named {STR_VAR_3}.\p"
.string "This TRAINER went into the SAFARI ZONE\n"
@@ -232,13 +232,13 @@ UnknownString_81AF7F1:: @ 81AF7F1
.string "{STR_VAR_3} is a TRAINER whose wild side\n"
.string "must come out in the SAFARI ZONE!$"
-UnknownString_81AF88A:: @ 81AF88A
+gTextStoryteller_Story14Title:: @ 81AF88A
.string "The CUT-Frenzy TRAINER$"
-UnknownString_81AF8A1:: @ 81AF8A1
+gTextStoryteller_Story14Action:: @ 81AF8A1
.string "Used CUT$"
-UnknownString_81AF8AA:: @ 81AF8AA
+gTextStoryteller_Story14Text:: @ 81AF8AA
.string "This is a tale of a TRAINER\n"
.string "named {STR_VAR_3}.\p"
.string "This TRAINER used CUT\n"
@@ -246,13 +246,13 @@ UnknownString_81AF8AA:: @ 81AF8AA
.string "{STR_VAR_3} is a TRAINER who just must\n"
.string "love to CUT!$"
-UnknownString_81AF91B:: @ 81AF91B
+gTextStoryteller_Story15Title:: @ 81AF91B
.string "The ROCK-SMASHING TRAINER$"
-UnknownString_81AF935:: @ 81AF935
+gTextStoryteller_Story15Action:: @ 81AF935
.string "Smashed rocks$"
-UnknownString_81AF943:: @ 81AF943
+gTextStoryteller_Story15Text:: @ 81AF943
.string "This is a tale of a TRAINER\n"
.string "named {STR_VAR_3}.\p"
.string "This TRAINER used ROCK SMASH\n"
@@ -260,13 +260,13 @@ UnknownString_81AF943:: @ 81AF943
.string "{STR_VAR_3} must be a TRAINER who\n"
.string "can’t leave a stone unsmashed!$"
-UnknownString_81AF9C8:: @ 81AF9C8
+gTextStoryteller_Story16Title:: @ 81AF9C8
.string "The Move-Loving TRAINER$"
-UnknownString_81AF9E0:: @ 81AF9E0
+gTextStoryteller_Story16Action:: @ 81AF9E0
.string "Moved the SECRET BASE$"
-UnknownString_81AF9F6:: @ 81AF9F6
+gTextStoryteller_Story16Text:: @ 81AF9F6
.string "This is a tale of a TRAINER\n"
.string "named {STR_VAR_3}.\p"
.string "This TRAINER moved the SECRET BASE\n"
@@ -274,13 +274,13 @@ UnknownString_81AF9F6:: @ 81AF9F6
.string "{STR_VAR_3} is a TRAINER who loves\n"
.string "to move houses often!$"
-UnknownString_81AFA79:: @ 81AFA79
+gTextStoryteller_Story17Title:: @ 81AFA79
.string "The SPLASH-Happy TRAINER$"
-UnknownString_81AFA92:: @ 81AFA92
+gTextStoryteller_Story17Action:: @ 81AFA92
.string "Used SPLASH$"
-UnknownString_81AFA9E:: @ 81AFA9E
+gTextStoryteller_Story17Text:: @ 81AFA9E
.string "This is a tale of a TRAINER\n"
.string "named {STR_VAR_3}.\p"
.string "This TRAINER used SPLASH\n"
@@ -288,13 +288,13 @@ UnknownString_81AFA9E:: @ 81AFA9E
.string "{STR_VAR_3} is a TRAINER who must love\n"
.string "SPLASHING around!$"
-UnknownString_81AFB17:: @ 81AFB17
+gTextStoryteller_Story18Title:: @ 81AFB17
.string "The Tenacious TRAINER$"
-UnknownString_81AFB2D:: @ 81AFB2D
+gTextStoryteller_Story18Action:: @ 81AFB2D
.string "Resorted to using STRUGGLE$"
-UnknownString_81AFB48:: @ 81AFB48
+gTextStoryteller_Story18Text:: @ 81AFB48
.string "This is a tale of a TRAINER\n"
.string "named {STR_VAR_3}.\p"
.string "This TRAINER had to rely on STRUGGLE\n"
@@ -302,13 +302,13 @@ UnknownString_81AFB48:: @ 81AFB48
.string "{STR_VAR_3} is a tenacious TRAINER\n"
.string "who never gives in to adversity!$"
-UnknownString_81AFBD8:: @ 81AFBD8
+gTextStoryteller_Story19Title:: @ 81AFBD8
.string "The SLOT Champ$"
-UnknownString_81AFBE7:: @ 81AFBE7
+gTextStoryteller_Story19Action:: @ 81AFBE7
.string "Won the jackpot on the SLOTS$"
-UnknownString_81AFC04:: @ 81AFC04
+gTextStoryteller_Story19Text:: @ 81AFC04
.string "This is a tale of a TRAINER\n"
.string "named {STR_VAR_3}.\p"
.string "This TRAINER won the jackpot on\n"
@@ -316,13 +316,13 @@ UnknownString_81AFC04:: @ 81AFC04
.string "{STR_VAR_3} is a TRAINER who was lucky\n"
.string "on the SLOTS!$"
-UnknownString_81AFC8A:: @ 81AFC8A
+gTextStoryteller_Story20Title:: @ 81AFC8A
.string "The ROULETTE Champ$"
-UnknownString_81AFC9D:: @ 81AFC9D
+gTextStoryteller_Story20Action:: @ 81AFC9D
.string "Had consecutive ROULETTE wins of$"
-UnknownString_81AFCBE:: @ 81AFCBE
+gTextStoryteller_Story20Text:: @ 81AFCBE
.string "This is a tale of a TRAINER\n"
.string "named {STR_VAR_3}.\p"
.string "This TRAINER won in ROULETTE\n"
@@ -330,13 +330,13 @@ UnknownString_81AFCBE:: @ 81AFCBE
.string "{STR_VAR_3} was lucky when the ball\n"
.string "bounced in ROULETTE!$"
-UnknownString_81AFD44:: @ 81AFD44
+gTextStoryteller_Story21Title:: @ 81AFD44
.string "The BATTLE TOWER Challenger$"
-UnknownString_81AFD60:: @ 81AFD60
+gTextStoryteller_Story21Action:: @ 81AFD60
.string "Took the BATTLE TOWER challenge$"
-UnknownString_81AFD80:: @ 81AFD80
+gTextStoryteller_Story21Text:: @ 81AFD80
.string "This is a tale of a TRAINER\n"
.string "named {STR_VAR_3}.\p"
.string "This TRAINER took the BATTLE TOWER\n"
@@ -344,13 +344,13 @@ UnknownString_81AFD80:: @ 81AFD80
.string "{STR_VAR_3} is a TRAINER who aspires\n"
.string "for excellence in the BATTLE TOWER!$"
-UnknownString_81AFE1D:: @ 81AFE1D
+gTextStoryteller_Story22Title:: @ 81AFE1D
.string "The Blend-Loving TRAINER$"
-UnknownString_81AFE36:: @ 81AFE36
+gTextStoryteller_Story22Action:: @ 81AFE36
.string "Made {POKEBLOCK}S$"
-UnknownString_81AFE42:: @ 81AFE42
+gTextStoryteller_Story22Text:: @ 81AFE42
.string "This is a tale of a TRAINER\n"
.string "named {STR_VAR_3}.\p"
.string "This TRAINER made {POKEBLOCK}S\n"
@@ -358,13 +358,13 @@ UnknownString_81AFE42:: @ 81AFE42
.string "There is none better at using a BERRY\n"
.string "BLENDER than {STR_VAR_3}!$"
-UnknownString_81AFEC2:: @ 81AFEC2
+gTextStoryteller_Story23Title:: @ 81AFEC2
.string "The CONTEST-Loving TRAINER$"
-UnknownString_81AFEDD:: @ 81AFEDD
+gTextStoryteller_Story23Action:: @ 81AFEDD
.string "Entered CONTESTS$"
-UnknownString_81AFEEE:: @ 81AFEEE
+gTextStoryteller_Story23Text:: @ 81AFEEE
.string "This is a tale of a TRAINER\n"
.string "named {STR_VAR_3}.\p"
.string "This TRAINER entered CONTESTS\n"
@@ -372,13 +372,13 @@ UnknownString_81AFEEE:: @ 81AFEEE
.string "{STR_VAR_3} must love showing off\n"
.string "POKéMON to others!$"
-UnknownString_81AFF68:: @ 81AFF68
+gTextStoryteller_Story24Title:: @ 81AFF68
.string "The CONTEST Master$"
-UnknownString_81AFF7B:: @ 81AFF7B
+gTextStoryteller_Story24Action:: @ 81AFF7B
.string "Won CONTESTS$"
-UnknownString_81AFF88:: @ 81AFF88
+gTextStoryteller_Story24Text:: @ 81AFF88
.string "This is a tale of a TRAINER\n"
.string "named {STR_VAR_3}.\p"
.string "This TRAINER won CONTESTS\n"
@@ -386,13 +386,13 @@ UnknownString_81AFF88:: @ 81AFF88
.string "{STR_VAR_3} must be an incredible\n"
.string "CONTEST master!$"
-UnknownString_81AFFFB:: @ 81AFFFB
+gTextStoryteller_Story25Title:: @ 81AFFFB
.string "The Happy Shopper$"
-UnknownString_81B000D:: @ 81B000D
+gTextStoryteller_Story25Action:: @ 81B000D
.string "Shopped$"
-UnknownString_81B0015:: @ 81B0015
+gTextStoryteller_Story25Text:: @ 81B0015
.string "This is a tale of a TRAINER\n"
.string "named {STR_VAR_3}.\p"
.string "This TRAINER bought items in shops\n"
@@ -400,13 +400,13 @@ UnknownString_81B0015:: @ 81B0015
.string "{STR_VAR_3} must be one of those\n"
.string "people who are born to shop.$"
-UnknownString_81B009D:: @ 81B009D
+gTextStoryteller_Story26Title:: @ 81B009D
.string "The Item-Finding TRAINER$"
-UnknownString_81B00B6:: @ 81B00B6
+gTextStoryteller_Story26Action:: @ 81B00B6
.string "Used an ITEMFINDER$"
-UnknownString_81B00C9:: @ 81B00C9
+gTextStoryteller_Story26Text:: @ 81B00C9
.string "This is a tale of a TRAINER\n"
.string "named {STR_VAR_3}.\p"
.string "This TRAINER used an ITEMFINDER\n"
@@ -414,13 +414,13 @@ UnknownString_81B00C9:: @ 81B00C9
.string "{STR_VAR_3} must enjoy scouring the\n"
.string "ground for hidden items!$"
-UnknownString_81B014D:: @ 81B014D
+gTextStoryteller_Story27Title:: @ 81B014D
.string "The Rain-Soaked TRAINER$"
-UnknownString_81B0165:: @ 81B0165
+gTextStoryteller_Story27Action:: @ 81B0165
.string "Got rained on$"
-UnknownString_81B0173:: @ 81B0173
+gTextStoryteller_Story27Text:: @ 81B0173
.string "This is a tale of a TRAINER\n"
.string "named {STR_VAR_3}.\p"
.string "This TRAINER got soaked by rain\n"
@@ -428,13 +428,13 @@ UnknownString_81B0173:: @ 81B0173
.string "{STR_VAR_3}’s charisma must even\n"
.string "attract rain!$"
-UnknownString_81B01E9:: @ 81B01E9
+gTextStoryteller_Story28Title:: @ 81B01E9
.string "The Avid POKéDEX Reader$"
-UnknownString_81B0201:: @ 81B0201
+gTextStoryteller_Story28Action:: @ 81B0201
.string "Checked a POKéDEX$"
-UnknownString_81B0213:: @ 81B0213
+gTextStoryteller_Story28Text:: @ 81B0213
.string "This is a tale of a TRAINER\n"
.string "named {STR_VAR_3}.\p"
.string "This TRAINER checked a POKéDEX\n"
@@ -442,13 +442,13 @@ UnknownString_81B0213:: @ 81B0213
.string "{STR_VAR_3} must love inspecting\n"
.string "POKéMON in a POKéDEX!$"
-UnknownString_81B0290:: @ 81B0290
+gTextStoryteller_Story29Title:: @ 81B0290
.string "The RIBBON Collector$"
-UnknownString_81B02A5:: @ 81B02A5
+gTextStoryteller_Story29Action:: @ 81B02A5
.string "Received RIBBONS$"
-UnknownString_81B02B6:: @ 81B02B6
+gTextStoryteller_Story29Text:: @ 81B02B6
.string "This is a tale of a TRAINER\n"
.string "named {STR_VAR_3}.\p"
.string "This TRAINER received RIBBONS\n"
@@ -456,13 +456,13 @@ UnknownString_81B02B6:: @ 81B02B6
.string "{STR_VAR_3} must be a TRAINER who\n"
.string "loves to collect RIBBONS!$"
-UnknownString_81B0337:: @ 81B0337
+gTextStoryteller_Story30Title:: @ 81B0337
.string "The Ledge-Jumping TRAINER$"
-UnknownString_81B0351:: @ 81B0351
+gTextStoryteller_Story30Action:: @ 81B0351
.string "Jumped down ledges$"
-UnknownString_81B0364:: @ 81B0364
+gTextStoryteller_Story30Text:: @ 81B0364
.string "This is a tale of a TRAINER\n"
.string "named {STR_VAR_3}.\p"
.string "This TRAINER jumped down ledges\n"
@@ -470,26 +470,26 @@ UnknownString_81B0364:: @ 81B0364
.string "If there’s a ledge to be jumped,\n"
.string "{STR_VAR_3} can’t ignore it!$"
-UnknownString_81B03E9:: @ 81B03E9
+gTextStoryteller_Story31Title:: @ 81B03E9
.string "The Legendary TV Viewer$"
-UnknownString_81B0401:: @ 81B0401
+gTextStoryteller_Story31Action:: @ 81B0401
.string "Watched TV$"
-UnknownString_81B040C:: @ 81B040C
+gTextStoryteller_Story31Text:: @ 81B040C
.string "This is a tale of a TRAINER\n"
.string "named {STR_VAR_3}.\p"
.string "This TRAINER watched TV\n"
.string "{STR_VAR_1} times!\p"
.string "{STR_VAR_3} must love watching TV!$"
-UnknownString_81B046E:: @ 81B046E
+gTextStoryteller_Story32Title:: @ 81B046E
.string "The Time-Conscious TRAINER$"
-UnknownString_81B0489:: @ 81B0489
+gTextStoryteller_Story32Action:: @ 81B0489
.string "Checked the time$"
-UnknownString_81B049A:: @ 81B049A
+gTextStoryteller_Story32Text:: @ 81B049A
.string "This is a tale of a TRAINER\n"
.string "named {STR_VAR_3}.\p"
.string "This TRAINER checked the time\n"
@@ -497,13 +497,13 @@ UnknownString_81B049A:: @ 81B049A
.string "{STR_VAR_3} must be a punctual TRAINER\n"
.string "who’s conscious of the time.$"
-UnknownString_81B0523:: @ 81B0523
+gTextStoryteller_Story33Title:: @ 81B0523
.string "The POKéMON LOTTERY Wizard$"
-UnknownString_81B053E:: @ 81B053E
+gTextStoryteller_Story33Action:: @ 81B053E
.string "Won POKéMON LOTTERIES$"
-UnknownString_81B0554:: @ 81B0554
+gTextStoryteller_Story33Text:: @ 81B0554
.string "This is a tale of a TRAINER\n"
.string "named {STR_VAR_3}.\p"
.string "This TRAINER won POKéMON LOTTERIES\n"
@@ -511,13 +511,13 @@ UnknownString_81B0554:: @ 81B0554
.string "{STR_VAR_3} must have many friends\n"
.string "to trade POKéMON with!$"
-UnknownString_81B05D8:: @ 81B05D8
+gTextStoryteller_Story34Title:: @ 81B05D8
.string "The DAY CARE-Using Trainer$"
-UnknownString_81B05F3:: @ 81B05F3
+gTextStoryteller_Story34Action:: @ 81B05F3
.string "Left POKéMON at the DAY CARE$"
-UnknownString_81B0610:: @ 81B0610
+gTextStoryteller_Story34Text:: @ 81B0610
.string "This is a tale of a TRAINER\n"
.string "named {STR_VAR_3}.\p"
.string "This TRAINER left POKéMON with the\n"
@@ -525,13 +525,13 @@ UnknownString_81B0610:: @ 81B0610
.string "{STR_VAR_3} must be a real go-getter\n"
.string "who raises POKéMON aggressively!$"
-UnknownString_81B06A9:: @ 81B06A9
+gTextStoryteller_Story35Title:: @ 81B06A9
.string "The CABLE CAR-Loving TRAINER$"
-UnknownString_81B06C6:: @ 81B06C6
+gTextStoryteller_Story35Action:: @ 81B06C6
.string "Rode the CABLE CAR$"
-UnknownString_81B06D9:: @ 81B06D9
+gTextStoryteller_Story35Text:: @ 81B06D9
.string "This is a tale of a TRAINER\n"
.string "named {STR_VAR_3}.\p"
.string "This TRAINER rode the CABLE CAR\n"
@@ -539,13 +539,13 @@ UnknownString_81B06D9:: @ 81B06D9
.string "{STR_VAR_3} must be a busy TRAINER\n"
.string "who’s up and down all the time!$"
-UnknownString_81B0763:: @ 81B0763
+gTextStoryteller_Story36Title:: @ 81B0763
.string "The Hot Spring-Loving TRAINER$"
-UnknownString_81B0781:: @ 81B0781
+gTextStoryteller_Story36Action:: @ 81B0781
.string "Bathed in hot springs$"
-UnknownString_81B0797:: @ 81B0797
+gTextStoryteller_Story36Text:: @ 81B0797
.string "This is a tale of a TRAINER\n"
.string "named {STR_VAR_3}.\p"
.string "This TRAINER bathed in hot springs\n"
diff --git a/data/text/trader.inc b/data/text/trader.inc
index dba63bcf8..599344091 100644
--- a/data/text/trader.inc
+++ b/data/text/trader.inc
@@ -1,57 +1,57 @@
-MauvilleCity_PokemonCenter_1F_Text_1AE88F:: @ 81AE88F
+gTextTrader_Introduction:: @ 81AE88F
.string "Hi, I’m the TRADER.\n"
.string "Want to trade decorations with me?$"
-MauvilleCity_PokemonCenter_1F_Text_1AE8C6:: @ 81AE8C6
+gTextTrader_FeelUnwanted1:: @ 81AE8C6
.string "Oh...\n"
.string "I feel unwanted...$"
-MauvilleCity_PokemonCenter_1F_Text_1AE8DF:: @ 81AE8DF
+gTextTrader_TradedAlready:: @ 81AE8DF
.string "But we’ve traded decorations already,\n"
.string "you and I.$"
-MauvilleCity_PokemonCenter_1F_Text_1AE910:: @ 81AE910
+gTextTrader_MenuPrompt:: @ 81AE910
.string "If you see any decorative item that\n"
.string "you want of mine, speak up.$"
-MauvilleCity_PokemonCenter_1F_Text_1AE950:: @ 81AE950
+gTextTrader_DontWantAnything:: @ 81AE950
.string "You don’t want anything?\n"
.string "I feel unwanted...$"
-MauvilleCity_PokemonCenter_1F_Text_1AE97C:: @ 81AE97C
+gTextTrader_ItemOnceBelongedTo:: @ 81AE97C
.string "That decorative item once belonged\n"
.string "to {STR_VAR_1}.\p"
.string "Do you want it?$"
-MauvilleCity_PokemonCenter_1F_Text_1AE9B6:: @ 81AE9B6
+gTextTrader_YouDontHaveDecorations:: @ 81AE9B6
.string "Uh... Wait a second. You don’t have a\n"
.string "single piece of decoration!$"
-MauvilleCity_PokemonCenter_1F_Text_1AE9F8:: @ 81AE9F8
+gTextTrader_PickDecorationYoullTrade:: @ 81AE9F8
.string "Okay, pick the decoration that you’ll\n"
.string "trade to me.$"
-MauvilleCity_PokemonCenter_1F_Text_1AEA2B:: @ 81AEA2B
+gTextTrader_FeelUnwanted2:: @ 81AEA2B
.string "You won’t trade with me?\n"
.string "I feel unwanted...$"
-MauvilleCity_PokemonCenter_1F_Text_1AEA57:: @ 81AEA57
+gTextTrader_NoRoomForThis:: @ 81AEA57
.string "You’ve got all the {STR_VAR_2}S that can\n"
.string "be stored. You’ve no room for this.$"
-MauvilleCity_PokemonCenter_1F_Text_1AEA9B:: @ 81AEA9B
+gTextTrader_SoWellTrade:: @ 81AEA9B
.string "Okay, so we’ll trade my {STR_VAR_3}\n"
.string "for your {STR_VAR_2}?$"
-MauvilleCity_PokemonCenter_1F_Text_1AEAC3:: @ 81AEAC3
+gTextTrader_InUseYouCantTradeIt:: @ 81AEAC3
.string "That piece of decoration is in use.\n"
.string "You can’t trade it.$"
-MauvilleCity_PokemonCenter_1F_Text_1AEAFB:: @ 81AEAFB
+gTextTrader_ThenWellTrade:: @ 81AEAFB
.string "Then we’ll trade!\n"
.string "I’ll send my decoration to your PC.$"
-MauvilleCity_PokemonCenter_1F_Text_1AEB31:: @ 81AEB31
+gTextTrader_ICantTradeThatOneAway:: @ 81AEB31
.string "Oops! Sorry!\n"
.string "That’s a really rare piece of decoration.\l"
.string "I can’t trade that one away!\p"
diff --git a/data/trainer_see.s b/data/trainer_see.s
index 57eeae061..04a787f0c 100644
--- a/data/trainer_see.s
+++ b/data/trainer_see.s
@@ -4,47 +4,6 @@
.section .rodata
.align 2
-gSpriteImage_839B308:: @ 839B308
- .incbin "graphics/unknown_sprites/839B4E0/0.4bpp"
-
- .align 2
-gSpriteImage_839B388:: @ 839B388
- .incbin "graphics/unknown_sprites/839B4E0/1.4bpp"
-
- .align 2
-gSpriteImage_839B408:: @ 839B408
- .incbin "graphics/unknown_sprites/839B408.4bpp"
-
- .align 2
-gIsTrainerInRange:: @ 839B488
- .4byte IsTrainerInRangeSouth
- .4byte IsTrainerInRangeNorth
- .4byte IsTrainerInRangeWest
- .4byte IsTrainerInRangeEast
-
- .align 2
-gTrainerSeeFuncList:: @ 839B498
- .4byte sub_8084394
- .4byte sub_8084398
- .4byte sub_80843DC
- .4byte sub_808441C
- .4byte sub_8084478
- .4byte sub_8084534
- .4byte sub_8084578
- .4byte sub_80845AC
- .4byte sub_80845C8
- .4byte sub_80845FC
- .4byte sub_8084654
- .4byte sub_80846C8
-
- .align 2
-gTrainerSeeFuncList2:: @ 839B4C8
- .4byte sub_80845C8
- .4byte sub_80845FC
- .4byte sub_8084654
- .4byte sub_80846C8
-
- .align 2
gOamData_839B4D8:: @ 839B4D8
.2byte 0x0000
.2byte 0x4000
diff --git a/include/bard_music.h b/include/bard_music.h
new file mode 100644
index 000000000..529fd50f8
--- /dev/null
+++ b/include/bard_music.h
@@ -0,0 +1,31 @@
+#ifndef GUARD_BARD_MUSIC_H
+#define GUARD_BARD_MUSIC_H
+
+struct BardSound;
+
+struct BardPhoneme
+{
+ /*0x00*/ u16 sound;
+ /*0x02*/ u16 length;
+ /*0x04*/ s16 pitch;
+ /*0x06*/ u16 volume;
+};
+
+struct BardSong
+{
+ /*0x00*/ u8 currWord;
+ /*0x01*/ u8 currPhoneme;
+ /*0x02*/ u8 phonemeTimer;
+ /*0x03*/ u8 state;
+ /*0x04*/ s16 var04;
+ /*0x06*/ u16 volume;
+ /*0x08*/ s16 pitch;
+ /*0x0A*/ s16 voiceInflection;
+ /*0x0C*/ u16 lyrics[6];
+ /*0x18*/ struct BardPhoneme phonemes[6];
+};
+
+const struct BardSound *GetWordSounds(u16 arg0, u16 arg1);
+s32 GetWordPhonemes(struct BardSong *dest, const struct BardSound *src, u16 arg2);
+
+#endif // GUARD_BARD_MUSIC_H
diff --git a/include/battle.h b/include/battle.h
index 669f65d0a..7850a9dd6 100644
--- a/include/battle.h
+++ b/include/battle.h
@@ -173,6 +173,20 @@
#define WEATHER_SUN_ANY ((WEATHER_SUN_TEMPORARY | WEATHER_SUN_PERMANENT))
#define WEATHER_HAIL (1 << 7)
+enum
+{
+ BATTLE_TERRAIN_GRASS,
+ BATTLE_TERRAIN_LONG_GRASS,
+ BATTLE_TERRAIN_SAND,
+ BATTLE_TERRAIN_UNDERWATER,
+ BATTLE_TERRAIN_WATER,
+ BATTLE_TERRAIN_POND,
+ BATTLE_TERRAIN_MOUNTAIN,
+ BATTLE_TERRAIN_CAVE,
+ BATTLE_TERRAIN_BUILDING,
+ BATTLE_TERRAIN_PLAIN,
+};
+
// needed to match the hack that is get_item, thanks cam, someone else clean this up later.
extern u8 unk_2000000[];
@@ -229,12 +243,11 @@ struct BattleStruct /* 0x2000000 */
/*0x16001*/ u8 turnEffectsBank;
/*0x16002*/ u8 animTurn;
/*0x16003*/ u8 scriptingActive;
- /*0x16004*/ u8 wrappedMove1[4];
- /*0x16008*/ u8 wrappedMove2[4];
+ /*0x16004*/ u8 wrappedMove[8];
/*0x1600C*/ u8 cmd49StateTracker;
/*0x1600D*/ u8 unk1600D;
/*0x1600E*/ u8 turncountersTracker;
- /*0x1600F*/ u8 cmd23StateTracker;
+ /*0x1600F*/ u8 atk23StateTracker;
/*0x16010*/ u8 moveTarget[4];
/*0x16014*/ u8 unk16014;
/*0x16015*/ u8 unk16015;
@@ -520,12 +533,12 @@ struct BattleResults
struct Struct2017800
{
- u8 unk0_0:1;
+ u8 invisible:1;
u8 unk0_1:1;
- u8 unk0_2:1;
+ u8 substituteSprite:1;
u8 unk0_3:1;
u8 unk0_4:1;
- u16 unk2;
+ u16 transformedSpecies;
};
struct Struct2017810
@@ -689,13 +702,13 @@ extern u8 gBattleTextBuff1[];
//function declarations of buffer emits
void EmitGetAttributes(u8 buffID, u8 request, u8 c); //0x0
-void dp01_build_cmdbuf_x01_a_b_0(u8 a, u8 b, u8 c); //0x1
+void Emitcmd1(u8 a, u8 b, u8 c); //0x1
void EmitSetAttributes(u8 a, u8 request, u8 c, u8 bytes, void *data); //0x2
-void EmitSwitchInAnim(u8 a, u8 b, u8 c); //0x5
+void EmitSendOutPoke(u8 a, u8 b, u8 c); //0x5
void EmitReturnPokeToBall(u8 a, u8 b); //0x6
void EmitTrainerSlide(u8 a); //0x8
-void EmitFaintAnimation(u8 a); //0xA
-void EmitBallThrowAnim(u8 a, u8 shakes); //0xD
+void Emitcmd10(u8 a); //0xA
+void EmitBallThrow(u8 a, u8 shakes); //0xD
//void EmitMoveAnimation(u8 a, u16 move, u8 turn, u16 power, s32 dmg, u8 happiness, void *disable_struct); //0xF
void EmitPrintString(u8 a, u16 stringID); //0x10
//void EmitPrintStringPlayerOnly(u8 a, u16 stringID); //0x11
@@ -707,15 +720,15 @@ void EmitStatusAnimation(u8 a, u8 b, u32 c); //0x1B
void EmitStatusXor(u8 a, u8 b); //0x1C
void EmitHitAnimation(u8 a); //0x29
void EmitEffectivenessSound(u8 a, u16 sound); //0x2B
-void EmitPlaySound(u8 a, u16 sound); //0x2C
+void Emitcmd44(u8 a, u16 sound); //0x2C
void EmitFaintingCry(u8 a); //0x2D
-void EmitBattleIntroSlide(u8 a, u8 b); //0x2E
-void dp01_build_cmdbuf_x30_TODO(u8 a, u8 *b, u8 c); //0x30
-void dp01_build_cmdbuf_x31_31_31_31(u8 a); //0x31
+void EmitIntroSlide(u8 a, u8 b); //0x2E
+void Emitcmd48(u8 a, u8 *b, u8 c); //0x30
+void Emitcmd49(u8 a); //0x31
void EmitSpriteInvisibility(u8 a, u8 b); //0x33
void EmitBattleAnimation(u8 a, u8 b, u16 c); //0x34
void EmitResetActionMoveSelection(u8 a, u8 b); //0x36
-void dp01_build_cmdbuf_x37_a(u8 a, u8 b); //0x37
+void Emitcmd55(u8 a, u8 b); //0x37
#define REQUEST_ALL_BATTLE 0x0
#define REQUEST_SPECIES_BATTLE 0x1
diff --git a/include/battle_message.h b/include/battle_message.h
index d115e5357..3e37a1ccd 100644
--- a/include/battle_message.h
+++ b/include/battle_message.h
@@ -1,6 +1,21 @@
#ifndef GUARD_BATTLE_MESSAGE_H
#define GUARD_BATTLE_MESSAGE_H
+struct StringInfoBattle
+{
+ u16 currentMove;
+ u16 lastMove;
+ u16 lastItem;
+ u8 lastAbility;
+ u8 scrActive;
+ u8 unk1605E;
+ u8 hpScale;
+ u8 StringBank;
+ u8 moveType;
+ u8 abilities[4];
+ u8 textBuffs[3][0x10];
+};
+
void BufferStringBattle(u16 stringID);
u32 StrCpyDecodeToDisplayedStringBattle(const u8* src);
u32 StrCpyDecodeBattle(const u8* src, u8* dst);
diff --git a/include/battle_setup.h b/include/battle_setup.h
index c8c463f6d..444ab5467 100644
--- a/include/battle_setup.h
+++ b/include/battle_setup.h
@@ -40,72 +40,38 @@ struct TrainerPartyMember3
u16 moves[4];
};
-struct TrainerBattleSpec
-{
- void *ptr;
- u8 ptrType;
-};
-
struct TrainerEyeTrainer
{
- u16 trainerNums[5];
+ u16 opponentIDs[5]; // Each of these trainers has 5 increasingly stronger teams.
u16 mapGroup;
u16 mapNum;
};
-//void task01_battle_start(u8 taskId);
-//void task_add_01_battle_start(u8 transition, u16 song);
-void CheckForSafariZoneAndProceed(void);
-void StartBattle_StandardWild(void);
-void StartBattle_Roamer(void);
-void StartBattle_Safari(void);
-//void task_add_01_battle_start_with_music_and_stats(void);
-//void StartBattle_WallyTutorial(void);
-void StartBattle_ScriptedWild(void);
-//void StartBattle_SouthernIsland(void);
-//void StartBattle_Rayquaza(void);
-//void StartBattle_GroudonKyogre(void);
-//void StartBattle_Regi(void);
-void HandleWildBattleEnd(void);
-void HandleScriptedWildBattleEnd(void);
-s8 GetBattleTerrain(void);
-//s8 GetBattleTransitionTypeByMap(void);
-//u16 GetSumOfPartyMonLevel(u8 numMons);
-//u8 GetSumOfEnemyPartyLevel(u16 trainerNum, u8 numMons);
-u8 GetWildBattleTransition(void);
-u8 GetTrainerBattleTransition(void);
-u8 GetBattleTowerBattleTransition(void);
-//void ChooseStarter(void);
-void CB2_GiveStarter(void);
-void CB2_StartFirstBattle(void);
-void HandleFirstBattleEnd(void);
-//u32 TrainerBattleLoadArg32(u8 *ptr);
-//u16 TrainerBattleLoadArg16(u8 *ptr);
-//u8 TrainerBattleLoadArg8(u8 *ptr);
-//u16 trainerflag_opponent(void);
-bool32 battle_exit_is_player_defeat(u32 a1);
-//void sub_80822BC(void);
-//void TrainerBattleLoadArgs(const struct TrainerBattleSpec *specs, u8 *data);
-//void battle_80801F0(void);
-u8 *TrainerBattleConfigure(const u8 *data);
+void BattleSetup_StartWildBattle(void);
+void BattleSetup_StartRoamerBattle(void);
+void BattleSetup_StartScriptedWildBattle(void);
+s8 BattleSetup_GetTerrain(void);
+u8 BattleSetup_GetBattleTowerBattleTransition(void);
+u8 *BattleSetup_ConfigureTrainerBattle(const u8 *data);
void TrainerWantsBattle(u8, u8 *);
+
bool32 GetTrainerFlagFromScriptPointer(u8 *data);
//void sub_8082524(void);
-//u8 sub_8082558(void);
-//u8 sub_8082564(void);
+//u8 ScrSpecial_GetTrainerBattleMode(void);
+//u8 ScrSpecial_HasTrainerBeenFought(void);
//void sub_808257C(void);
//void unref_sub_8082590(void); // unused
-u8 trainer_flag_check(u16);
+u8 HasTrainerAlreadyBeenFought(u16);
void trainer_flag_set(u16);
void trainer_flag_clear(u16);
-void sub_80825E4(void);
+void BattleSetup_StartTrainerBattle(void);
void sub_808260C(void);
void do_choose_name_or_words_screen(void);
-//void sub_80826B0(void);
-//void sub_80826D8(void);
-u8 *sub_80826E8(void);
-u8 *sub_8082700(void);
-//void sub_8082718(void);
+//void ScrSpecial_StartTrainerEyeRematch(void);
+//void ScrSpecial_ShowTrainerIntroSpeech(void);
+u8 *BattleSetup_GetScriptAddrAfterBattle(void);
+u8 *BattleSetup_GetTrainerPostBattleScript(void);
+//void ScrSpecial_ShowTrainerNonBattlingSpeech(void);
//void PlayTrainerEncounterMusic(void);
//u8 *SanitizeString(u8 *str);
u8 *sub_808281C(void);
@@ -118,7 +84,7 @@ u8 *sub_8082880(void);
//s32 sub_80829A8(const struct TrainerEyeTrainer *trainers, u16 mapGroup, u16 mapNum);
//s32 sub_80829E8(const struct TrainerEyeTrainer *trainers, u16 mapGroup, u16 mapNum);
//bool8 sub_8082A18(const struct TrainerEyeTrainer *trainers, u16 trainerNum);
-//bool8 sub_8082A54(const struct TrainerEyeTrainer *trainers, u16 trainerNum);
+//bool8 DoesTrainerEyeTrainerWantRematch(const struct TrainerEyeTrainer *trainers, u16 trainerNum);
//u16 sub_8082A90(const struct TrainerEyeTrainer *trainers, u16 trainerNum);
//void sub_8082AE4(const struct TrainerEyeTrainer *trainers, u16 trainerNum);
//bool8 sub_8082B10(const struct TrainerEyeTrainer *trainers, u16 trainerNum);
@@ -130,7 +96,7 @@ s32 sub_8082C0C(u16 mapGroup, u16 mapNum);
s32 unref_sub_8082C2C(u16 mapGroup, u16 mapNum);
u16 sub_8082C4C(u16 a1);
//s32 sub_8082C68(void);
-//u8 sub_8082C9C(void);
+//u8 ScrSpecial_GetTrainerEyeRematchFlag(void);
void sub_8082CB8(void);
#endif // GUARD_BATTLE_SETUP_H
diff --git a/include/battle_transition.h b/include/battle_transition.h
index b01378505..0b8766e87 100644
--- a/include/battle_transition.h
+++ b/include/battle_transition.h
@@ -1,8 +1,42 @@
#ifndef GUARD_BATTLE_TRANSITION_H
#define GUARD_BATTLE_TRANSITION_H
-void sub_811AABC(u8);
-void sub_811AAD8(u8);
-u8 sub_811AAE8(void);
+void BattleTransition_StartOnField(u8 transitionID);
+void BattleTransition_Start(u8 transitionID);
+bool8 IsBattleTransitionDone(void);
+
+#define TRANSITIONS_NO 17
+
+enum // TRANSITION_MUGSHOT
+{
+ MUGSHOT_SYDNEY,
+ MUGSHOT_PHOEBE,
+ MUGSHOT_GLACIA,
+ MUGSHOT_DRAKE,
+ MUGSHOT_STEVEN,
+};
+
+#define MUGSHOTS_NO 5
+
+// credits for the names go to Dyskinesia and Tetrable
+// names are naturally subject to change
+
+#define B_TRANSITION_BLUR 0
+#define B_TRANSITION_SWIRL 1
+#define B_TRANSITION_SHUFFLE 2
+#define B_TRANSITION_BIG_POKEBALL 3
+#define B_TRANSITION_POKEBALLS_TRAIL 4
+#define B_TRANSITION_CLOCKWISE_BLACKFADE 5
+#define B_TRANSITION_RIPPLE 6
+#define B_TRANSITION_WAVE 7
+#define B_TRANSITION_SLICE 8
+#define B_TRANSITION_WHITEFADE 9
+#define B_TRANSITION_GRID_SQUARES 10
+#define B_TRANSITION_SHARDS 11
+#define B_TRANSITION_SYDNEY 12
+#define B_TRANSITION_PHOEBE 13
+#define B_TRANSITION_GLACIA 14
+#define B_TRANSITION_DRAKE 15
+#define B_TRANSITION_STEVEN 16
#endif // GUARD_BATTLE_TRANSITION_H
diff --git a/include/braille_puzzles.h b/include/braille_puzzles.h
index 2b0e2bb96..e9d1f5d7c 100644
--- a/include/braille_puzzles.h
+++ b/include/braille_puzzles.h
@@ -2,6 +2,7 @@
#define GUARD_BRAILLEPUZZLES_H
bool8 ShouldDoBrailleStrengthEffect(void);
+bool8 ShouldDoBrailleFlyEffect(void);
void DoBrailleStrengthEffect(void);
void UseFlyAncientTomb_Callback(void);
void UseFlyAncientTomb_Finish(void);
@@ -10,5 +11,6 @@ bool32 BrailleWait_CheckButtonPress(void);
void SealedChamberShakingEffect(u8 taskId);
bool8 ShouldDoBrailleDigEffect(void);
void DoBrailleDigEffect(void);
+void DoBrailleFlyEffect(void);
#endif
diff --git a/include/cable_club.h b/include/cable_club.h
index 9e6a703e3..a2fe46b30 100644
--- a/include/cable_club.h
+++ b/include/cable_club.h
@@ -3,20 +3,22 @@
#include "task.h"
-void sub_8082D4C();
-void sub_8082D60(u8, u8);
-u16 sub_8082D9C(u8, u8);
-u32 sub_8082DF4(u8);
-u32 sub_8082E28(u8);
-u32 sub_8082EB8(u8);
-void sub_8082FEC(u8 taskId);
-void sub_80833C4(u8 taskId);
-void sub_8083418(u8 taskId);
-u8 sub_8083444(u8 taskId);
+void sub_808347C(u8 arg0);
+void sub_80834E4(void);
+void sub_808350C(void);
+void sub_80835D8(void);
+void sub_8083614(void);
+void sub_808363C(void);
u8 sub_8083664(void);
-void sub_8083A84(TaskFunc);
-s32 sub_8083BF4(u8 id);
-void sub_8083C50(u8);
-void sub_8083188(u8 taskId);
+void sub_8083820(void);
+void sub_80839A4(void);
+void sub_80839D0(void);
+void sub_8083A84(TaskFunc followupFunc);
+void sub_8083B5C(void);
+void sub_8083B80(void);
+void sub_8083B90(void);
+void sub_8083BDC(void);
+bool32 sub_8083BF4(u8 linkPlayerIndex);
+void sub_8083C50(u8 taskId);
#endif // GUARD_CABLE_CLUB_H
diff --git a/include/data/field_map_obj/anim_func_ptrs.h b/include/data/field_map_obj/anim_func_ptrs.h
index 63575727d..1d1fac71e 100644
--- a/include/data/field_map_obj/anim_func_ptrs.h
+++ b/include/data/field_map_obj/anim_func_ptrs.h
@@ -1,5 +1,5 @@
//
-// Created by scott on 6/18/2017.
+
//
#ifndef POKERUBY_ANIM_FUNC_PTRS_H
diff --git a/include/data/field_map_obj/base_oam.h b/include/data/field_map_obj/base_oam.h
index 8595f97e7..49c14e8c2 100644
--- a/include/data/field_map_obj/base_oam.h
+++ b/include/data/field_map_obj/base_oam.h
@@ -1,5 +1,5 @@
//
-// Created by scott on 6/17/2017.
+
//
#ifndef POKERUBY_BASE_OAM_H
diff --git a/include/data/field_map_obj/berry_tree_graphics_tables.h b/include/data/field_map_obj/berry_tree_graphics_tables.h
index 53a0fd482..5b60fee6f 100644
--- a/include/data/field_map_obj/berry_tree_graphics_tables.h
+++ b/include/data/field_map_obj/berry_tree_graphics_tables.h
@@ -1,5 +1,5 @@
//
-// Created by scott on 6/17/2017.
+
//
#ifndef POKERUBY_BERRY_TREE_GRAPHICS_TABLES_H
diff --git a/include/data/field_map_obj/callback_subroutine_pointers.h b/include/data/field_map_obj/callback_subroutine_pointers.h
index d24a47184..a324066b7 100644
--- a/include/data/field_map_obj/callback_subroutine_pointers.h
+++ b/include/data/field_map_obj/callback_subroutine_pointers.h
@@ -1,5 +1,5 @@
//
-// Created by scott on 6/18/2017.
+
//
#ifndef POKERUBY_CALLBACK_SUBROUTINE_POINTERS_H
@@ -394,7 +394,7 @@ u8 (*const gUnknown_08375588[])(struct MapObject *, struct Sprite *) = {
sub_805F3C4
};
-u8 (*const gUnknown_08375594[])(struct MapObject *, struct Sprite *, u8, bool8 (*const)(u8)) = {
+u8 (*const gUnknown_08375594[])(struct MapObject *, struct Sprite *, u8, bool8(u8)) = {
sub_805F3EC,
sub_805F3F0,
sub_805F438,
diff --git a/include/data/field_map_obj/field_effect_object_template_pointers.h b/include/data/field_map_obj/field_effect_object_template_pointers.h
index 8e19747ce..320af1ff8 100644
--- a/include/data/field_map_obj/field_effect_object_template_pointers.h
+++ b/include/data/field_map_obj/field_effect_object_template_pointers.h
@@ -1,5 +1,5 @@
//
-// Created by scott on 6/17/2017.
+
//
#ifndef POKERUBY_FIELD_EFFECT_OBJECT_TEMPLATE_POINTERS_H
diff --git a/include/data/field_map_obj/field_effect_objects.h b/include/data/field_map_obj/field_effect_objects.h
index dc8a38542..9d3ae343d 100644
--- a/include/data/field_map_obj/field_effect_objects.h
+++ b/include/data/field_map_obj/field_effect_objects.h
@@ -1,5 +1,5 @@
//
-// Created by scott on 6/17/2017.
+
//
#ifndef POKERUBY_FIELD_EFFECT_OBJECTS_H
diff --git a/include/data/field_map_obj/map_object_anims.h b/include/data/field_map_obj/map_object_anims.h
index 0d6e299ee..0993f3efd 100644
--- a/include/data/field_map_obj/map_object_anims.h
+++ b/include/data/field_map_obj/map_object_anims.h
@@ -1,5 +1,5 @@
//
-// Created by scott on 6/17/2017.
+
//
#ifndef POKERUBY_MAP_OBJECT_ANIMS_H
diff --git a/include/data/field_map_obj/map_object_graphics_info.h b/include/data/field_map_obj/map_object_graphics_info.h
index 818c5b90c..7b021b66d 100644
--- a/include/data/field_map_obj/map_object_graphics_info.h
+++ b/include/data/field_map_obj/map_object_graphics_info.h
@@ -1,5 +1,5 @@
//
-// Created by scott on 6/17/2017.
+
//
#ifndef POKERUBY_MAP_OBJECT_GRAPHICS_INFO_H
diff --git a/include/data/field_map_obj/map_object_graphics_info_pointers.h b/include/data/field_map_obj/map_object_graphics_info_pointers.h
index c36827709..22a052b0d 100644
--- a/include/data/field_map_obj/map_object_graphics_info_pointers.h
+++ b/include/data/field_map_obj/map_object_graphics_info_pointers.h
@@ -1,5 +1,5 @@
//
-// Created by scott on 6/17/2017.
+
//
#ifndef POKERUBY_MAP_OBJECT_GRAPHICS_INFO_POINTERS_H
diff --git a/include/data/field_map_obj/map_object_pic_tables.h b/include/data/field_map_obj/map_object_pic_tables.h
index 37d579512..ecb5c8836 100644
--- a/include/data/field_map_obj/map_object_pic_tables.h
+++ b/include/data/field_map_obj/map_object_pic_tables.h
@@ -1,5 +1,5 @@
//
-// Created by scott on 6/17/2017.
+
//
#ifndef POKERUBY_MAP_OBJECT_PIC_TABLES_H
diff --git a/include/data/field_map_obj/map_object_subsprites.h b/include/data/field_map_obj/map_object_subsprites.h
index f928db88a..951d71e99 100644
--- a/include/data/field_map_obj/map_object_subsprites.h
+++ b/include/data/field_map_obj/map_object_subsprites.h
@@ -1,5 +1,5 @@
//
-// Created by scott on 6/17/2017.
+
//
#ifndef POKERUBY_MAP_OBJECT_SUBSPRITES_H
diff --git a/include/data/pokemon/base_stats.h b/include/data/pokemon/base_stats.h
index eadfbfe30..37f59e1c6 100644
--- a/include/data/pokemon/base_stats.h
+++ b/include/data/pokemon/base_stats.h
@@ -1,5 +1,5 @@
//
-// Created by Scott Norton on 6/27/17.
+
//
#ifndef POKERUBY_BASE_STATS_H
diff --git a/include/data/pokemon/cry_ids.h b/include/data/pokemon/cry_ids.h
index d965a41cf..6207a92f0 100644
--- a/include/data/pokemon/cry_ids.h
+++ b/include/data/pokemon/cry_ids.h
@@ -1,5 +1,5 @@
//
-// Created by Scott Norton on 6/27/17.
+
//
#ifndef POKERUBY_CRY_IDS_H
diff --git a/include/data/pokemon/dex_order.h b/include/data/pokemon/dex_order.h
index 6f8582533..cbb7182ed 100644
--- a/include/data/pokemon/dex_order.h
+++ b/include/data/pokemon/dex_order.h
@@ -1,5 +1,5 @@
//
-// Created by Scott Norton on 6/27/17.
+
//
#ifndef POKERUBY_DEX_ORDER_H
diff --git a/include/data/pokemon/egg_moves.h b/include/data/pokemon/egg_moves.h
new file mode 100644
index 000000000..ab1b1dd33
--- /dev/null
+++ b/include/data/pokemon/egg_moves.h
@@ -0,0 +1,1318 @@
+//
+
+//
+
+#ifndef POKERUBY_DAYCARE_H
+#define POKERUBY_DAYCARE_H
+
+#define EGG_MOVES_SPECIES_OFFSET 20000
+#define egg_moves(species, moves...) (SPECIES_##species + EGG_MOVES_SPECIES_OFFSET), moves
+
+#endif //POKERUBY_DAYCARE_H
+
+const u16 gEggMoves[] = {
+ egg_moves(BULBASAUR,
+ MOVE_LIGHT_SCREEN,
+ MOVE_SKULL_BASH,
+ MOVE_SAFEGUARD,
+ MOVE_CHARM,
+ MOVE_PETAL_DANCE,
+ MOVE_MAGICAL_LEAF,
+ MOVE_GRASS_WHISTLE,
+ MOVE_CURSE),
+
+ egg_moves(CHARMANDER,
+ MOVE_BELLY_DRUM,
+ MOVE_ANCIENT_POWER,
+ MOVE_ROCK_SLIDE,
+ MOVE_BITE,
+ MOVE_OUTRAGE,
+ MOVE_BEAT_UP,
+ MOVE_SWORDS_DANCE,
+ MOVE_DRAGON_DANCE),
+
+ egg_moves(SQUIRTLE,
+ MOVE_MIRROR_COAT,
+ MOVE_HAZE,
+ MOVE_MIST,
+ MOVE_FORESIGHT,
+ MOVE_FLAIL,
+ MOVE_REFRESH,
+ MOVE_MUD_SPORT,
+ MOVE_YAWN),
+
+ egg_moves(PIDGEY,
+ MOVE_PURSUIT,
+ MOVE_FAINT_ATTACK,
+ MOVE_FORESIGHT,
+ MOVE_STEEL_WING,
+ MOVE_AIR_CUTTER),
+
+ egg_moves(RATTATA,
+ MOVE_SCREECH,
+ MOVE_FLAME_WHEEL,
+ MOVE_FURY_SWIPES,
+ MOVE_BITE,
+ MOVE_COUNTER,
+ MOVE_REVERSAL,
+ MOVE_UPROAR,
+ MOVE_SWAGGER),
+
+ egg_moves(SPEAROW,
+ MOVE_FAINT_ATTACK,
+ MOVE_FALSE_SWIPE,
+ MOVE_SCARY_FACE,
+ MOVE_QUICK_ATTACK,
+ MOVE_TRI_ATTACK,
+ MOVE_ASTONISH,
+ MOVE_SKY_ATTACK),
+
+ egg_moves(EKANS,
+ MOVE_PURSUIT,
+ MOVE_SLAM,
+ MOVE_SPITE,
+ MOVE_BEAT_UP,
+ MOVE_POISON_FANG),
+
+ egg_moves(SANDSHREW,
+ MOVE_FLAIL,
+ MOVE_SAFEGUARD,
+ MOVE_COUNTER,
+ MOVE_RAPID_SPIN,
+ MOVE_ROCK_SLIDE,
+ MOVE_METAL_CLAW,
+ MOVE_SWORDS_DANCE,
+ MOVE_CRUSH_CLAW),
+
+ egg_moves(NIDORAN_F,
+ MOVE_SUPERSONIC,
+ MOVE_DISABLE,
+ MOVE_TAKE_DOWN,
+ MOVE_FOCUS_ENERGY,
+ MOVE_CHARM,
+ MOVE_COUNTER,
+ MOVE_BEAT_UP),
+
+ egg_moves(NIDORAN_M,
+ MOVE_COUNTER,
+ MOVE_DISABLE,
+ MOVE_SUPERSONIC,
+ MOVE_TAKE_DOWN,
+ MOVE_AMNESIA,
+ MOVE_CONFUSION,
+ MOVE_BEAT_UP),
+
+ egg_moves(VULPIX,
+ MOVE_FAINT_ATTACK,
+ MOVE_HYPNOSIS,
+ MOVE_FLAIL,
+ MOVE_SPITE,
+ MOVE_DISABLE,
+ MOVE_HOWL,
+ MOVE_PSYCH_UP,
+ MOVE_HEAT_WAVE),
+
+ egg_moves(ZUBAT,
+ MOVE_QUICK_ATTACK,
+ MOVE_PURSUIT,
+ MOVE_FAINT_ATTACK,
+ MOVE_GUST,
+ MOVE_WHIRLWIND,
+ MOVE_CURSE),
+
+ egg_moves(ODDISH,
+ MOVE_SWORDS_DANCE,
+ MOVE_RAZOR_LEAF,
+ MOVE_FLAIL,
+ MOVE_SYNTHESIS,
+ MOVE_CHARM,
+ MOVE_INGRAIN),
+
+ egg_moves(PARAS,
+ MOVE_FALSE_SWIPE,
+ MOVE_SCREECH,
+ MOVE_COUNTER,
+ MOVE_PSYBEAM,
+ MOVE_FLAIL,
+ MOVE_SWEET_SCENT,
+ MOVE_LIGHT_SCREEN,
+ MOVE_PURSUIT),
+
+ egg_moves(VENONAT,
+ MOVE_BATON_PASS,
+ MOVE_SCREECH,
+ MOVE_GIGA_DRAIN,
+ MOVE_SIGNAL_BEAM),
+
+ egg_moves(DIGLETT,
+ MOVE_FAINT_ATTACK,
+ MOVE_SCREECH,
+ MOVE_ANCIENT_POWER,
+ MOVE_PURSUIT,
+ MOVE_BEAT_UP,
+ MOVE_UPROAR,
+ MOVE_ROCK_SLIDE),
+
+ egg_moves(MEOWTH,
+ MOVE_SPITE,
+ MOVE_CHARM,
+ MOVE_HYPNOSIS,
+ MOVE_AMNESIA,
+ MOVE_PSYCH_UP,
+ MOVE_ASSIST),
+
+ egg_moves(PSYDUCK,
+ MOVE_HYPNOSIS,
+ MOVE_PSYBEAM,
+ MOVE_FORESIGHT,
+ MOVE_LIGHT_SCREEN,
+ MOVE_FUTURE_SIGHT,
+ MOVE_PSYCHIC,
+ MOVE_CROSS_CHOP,
+ MOVE_REFRESH),
+
+ egg_moves(MANKEY,
+ MOVE_ROCK_SLIDE,
+ MOVE_FORESIGHT,
+ MOVE_MEDITATE,
+ MOVE_COUNTER,
+ MOVE_REVERSAL,
+ MOVE_BEAT_UP,
+ MOVE_REVENGE,
+ MOVE_SMELLING_SALT),
+
+ egg_moves(GROWLITHE,
+ MOVE_BODY_SLAM,
+ MOVE_SAFEGUARD,
+ MOVE_CRUNCH,
+ MOVE_THRASH,
+ MOVE_FIRE_SPIN,
+ MOVE_HOWL,
+ MOVE_HEAT_WAVE),
+
+ egg_moves(POLIWAG,
+ MOVE_MIST,
+ MOVE_SPLASH,
+ MOVE_BUBBLE_BEAM,
+ MOVE_HAZE,
+ MOVE_MIND_READER,
+ MOVE_WATER_SPORT,
+ MOVE_ICE_BALL),
+
+ egg_moves(ABRA,
+ MOVE_ENCORE,
+ MOVE_BARRIER,
+ MOVE_KNOCK_OFF,
+ MOVE_FIRE_PUNCH,
+ MOVE_THUNDER_PUNCH,
+ MOVE_ICE_PUNCH),
+
+ egg_moves(MACHOP,
+ MOVE_LIGHT_SCREEN,
+ MOVE_MEDITATE,
+ MOVE_ROLLING_KICK,
+ MOVE_ENCORE,
+ MOVE_SMELLING_SALT,
+ MOVE_COUNTER,
+ MOVE_ROCK_SLIDE),
+
+ egg_moves(BELLSPROUT,
+ MOVE_SWORDS_DANCE,
+ MOVE_ENCORE,
+ MOVE_REFLECT,
+ MOVE_SYNTHESIS,
+ MOVE_LEECH_LIFE,
+ MOVE_INGRAIN,
+ MOVE_MAGICAL_LEAF),
+
+ egg_moves(TENTACOOL,
+ MOVE_AURORA_BEAM,
+ MOVE_MIRROR_COAT,
+ MOVE_RAPID_SPIN,
+ MOVE_HAZE,
+ MOVE_SAFEGUARD,
+ MOVE_CONFUSE_RAY),
+
+ egg_moves(GEODUDE,
+ MOVE_MEGA_PUNCH,
+ MOVE_ROCK_SLIDE,
+ MOVE_BLOCK),
+
+ egg_moves(PONYTA,
+ MOVE_FLAME_WHEEL,
+ MOVE_THRASH,
+ MOVE_DOUBLE_KICK,
+ MOVE_HYPNOSIS,
+ MOVE_CHARM,
+ MOVE_DOUBLE_EDGE),
+
+ egg_moves(SLOWPOKE,
+ MOVE_SAFEGUARD,
+ MOVE_BELLY_DRUM,
+ MOVE_FUTURE_SIGHT,
+ MOVE_STOMP,
+ MOVE_MUD_SPORT,
+ MOVE_SLEEP_TALK,
+ MOVE_SNORE),
+
+ egg_moves(FARFETCHD,
+ MOVE_STEEL_WING,
+ MOVE_FORESIGHT,
+ MOVE_MIRROR_MOVE,
+ MOVE_GUST,
+ MOVE_QUICK_ATTACK,
+ MOVE_FLAIL,
+ MOVE_FEATHER_DANCE,
+ MOVE_CURSE),
+
+ egg_moves(DODUO,
+ MOVE_QUICK_ATTACK,
+ MOVE_SUPERSONIC,
+ MOVE_HAZE,
+ MOVE_FAINT_ATTACK,
+ MOVE_FLAIL,
+ MOVE_ENDEAVOR),
+
+ egg_moves(SEEL,
+ MOVE_LICK,
+ MOVE_PERISH_SONG,
+ MOVE_DISABLE,
+ MOVE_HORN_DRILL,
+ MOVE_SLAM,
+ MOVE_ENCORE,
+ MOVE_FAKE_OUT,
+ MOVE_ICICLE_SPEAR),
+
+ egg_moves(GRIMER,
+ MOVE_HAZE,
+ MOVE_MEAN_LOOK,
+ MOVE_LICK,
+ MOVE_IMPRISON,
+ MOVE_CURSE,
+ MOVE_SHADOW_PUNCH,
+ MOVE_EXPLOSION),
+
+ egg_moves(SHELLDER,
+ MOVE_BUBBLE_BEAM,
+ MOVE_TAKE_DOWN,
+ MOVE_BARRIER,
+ MOVE_RAPID_SPIN,
+ MOVE_SCREECH,
+ MOVE_ICICLE_SPEAR),
+
+ egg_moves(GASTLY,
+ MOVE_PSYWAVE,
+ MOVE_PERISH_SONG,
+ MOVE_HAZE,
+ MOVE_ASTONISH,
+ MOVE_WILL_O_WISP,
+ MOVE_GRUDGE,
+ MOVE_EXPLOSION),
+
+ egg_moves(ONIX,
+ MOVE_ROCK_SLIDE,
+ MOVE_FLAIL,
+ MOVE_EXPLOSION,
+ MOVE_BLOCK),
+
+ egg_moves(DROWZEE,
+ MOVE_BARRIER,
+ MOVE_ASSIST,
+ MOVE_ROLE_PLAY,
+ MOVE_FIRE_PUNCH,
+ MOVE_THUNDER_PUNCH,
+ MOVE_ICE_PUNCH),
+
+ egg_moves(KRABBY,
+ MOVE_DIG,
+ MOVE_HAZE,
+ MOVE_AMNESIA,
+ MOVE_FLAIL,
+ MOVE_SLAM,
+ MOVE_KNOCK_OFF,
+ MOVE_SWORDS_DANCE),
+
+ egg_moves(EXEGGCUTE,
+ MOVE_SYNTHESIS,
+ MOVE_MOONLIGHT,
+ MOVE_REFLECT,
+ MOVE_ANCIENT_POWER,
+ MOVE_PSYCH_UP,
+ MOVE_INGRAIN,
+ MOVE_CURSE),
+
+ egg_moves(CUBONE,
+ MOVE_ROCK_SLIDE,
+ MOVE_ANCIENT_POWER,
+ MOVE_BELLY_DRUM,
+ MOVE_SCREECH,
+ MOVE_SKULL_BASH,
+ MOVE_PERISH_SONG,
+ MOVE_SWORDS_DANCE),
+
+ egg_moves(LICKITUNG,
+ MOVE_BELLY_DRUM,
+ MOVE_MAGNITUDE,
+ MOVE_BODY_SLAM,
+ MOVE_CURSE,
+ MOVE_SMELLING_SALT,
+ MOVE_SLEEP_TALK,
+ MOVE_SNORE,
+ MOVE_SUBSTITUTE),
+
+ egg_moves(KOFFING,
+ MOVE_SCREECH,
+ MOVE_PSYWAVE,
+ MOVE_PSYBEAM,
+ MOVE_DESTINY_BOND,
+ MOVE_PAIN_SPLIT,
+ MOVE_WILL_O_WISP),
+
+ egg_moves(RHYHORN,
+ MOVE_CRUNCH,
+ MOVE_REVERSAL,
+ MOVE_ROCK_SLIDE,
+ MOVE_COUNTER,
+ MOVE_MAGNITUDE,
+ MOVE_SWORDS_DANCE,
+ MOVE_CURSE,
+ MOVE_CRUSH_CLAW),
+
+ egg_moves(CHANSEY,
+ MOVE_PRESENT,
+ MOVE_METRONOME,
+ MOVE_HEAL_BELL,
+ MOVE_AROMATHERAPY,
+ MOVE_SUBSTITUTE),
+
+ egg_moves(TANGELA,
+ MOVE_FLAIL,
+ MOVE_CONFUSION,
+ MOVE_MEGA_DRAIN,
+ MOVE_REFLECT,
+ MOVE_AMNESIA,
+ MOVE_LEECH_SEED,
+ MOVE_NATURE_POWER),
+
+ egg_moves(KANGASKHAN,
+ MOVE_STOMP,
+ MOVE_FORESIGHT,
+ MOVE_FOCUS_ENERGY,
+ MOVE_SAFEGUARD,
+ MOVE_DISABLE,
+ MOVE_COUNTER,
+ MOVE_CRUSH_CLAW,
+ MOVE_SUBSTITUTE),
+
+ egg_moves(HORSEA,
+ MOVE_FLAIL,
+ MOVE_AURORA_BEAM,
+ MOVE_OCTAZOOKA,
+ MOVE_DISABLE,
+ MOVE_SPLASH,
+ MOVE_DRAGON_RAGE,
+ MOVE_DRAGON_BREATH),
+
+ egg_moves(GOLDEEN,
+ MOVE_PSYBEAM,
+ MOVE_HAZE,
+ MOVE_HYDRO_PUMP,
+ MOVE_SLEEP_TALK,
+ MOVE_MUD_SPORT),
+
+ egg_moves(MR_MIME,
+ MOVE_FUTURE_SIGHT,
+ MOVE_HYPNOSIS,
+ MOVE_MIMIC,
+ MOVE_PSYCH_UP,
+ MOVE_FAKE_OUT,
+ MOVE_TRICK),
+
+ egg_moves(SCYTHER,
+ MOVE_COUNTER,
+ MOVE_SAFEGUARD,
+ MOVE_BATON_PASS,
+ MOVE_RAZOR_WIND,
+ MOVE_REVERSAL,
+ MOVE_LIGHT_SCREEN,
+ MOVE_ENDURE,
+ MOVE_SILVER_WIND),
+
+ egg_moves(PINSIR,
+ MOVE_FURY_ATTACK,
+ MOVE_FLAIL,
+ MOVE_FALSE_SWIPE,
+ MOVE_FAINT_ATTACK),
+
+ egg_moves(LAPRAS,
+ MOVE_FORESIGHT,
+ MOVE_SUBSTITUTE,
+ MOVE_TICKLE,
+ MOVE_REFRESH,
+ MOVE_DRAGON_DANCE,
+ MOVE_CURSE,
+ MOVE_SLEEP_TALK,
+ MOVE_HORN_DRILL),
+
+ egg_moves(EEVEE,
+ MOVE_CHARM,
+ MOVE_FLAIL,
+ MOVE_ENDURE,
+ MOVE_CURSE,
+ MOVE_TICKLE,
+ MOVE_WISH),
+
+ egg_moves(OMANYTE,
+ MOVE_BUBBLE_BEAM,
+ MOVE_AURORA_BEAM,
+ MOVE_SLAM,
+ MOVE_SUPERSONIC,
+ MOVE_HAZE,
+ MOVE_ROCK_SLIDE,
+ MOVE_SPIKES),
+
+ egg_moves(KABUTO,
+ MOVE_BUBBLE_BEAM,
+ MOVE_AURORA_BEAM,
+ MOVE_RAPID_SPIN,
+ MOVE_DIG,
+ MOVE_FLAIL,
+ MOVE_KNOCK_OFF,
+ MOVE_CONFUSE_RAY),
+
+ egg_moves(AERODACTYL,
+ MOVE_WHIRLWIND,
+ MOVE_PURSUIT,
+ MOVE_FORESIGHT,
+ MOVE_STEEL_WING,
+ MOVE_DRAGON_BREATH,
+ MOVE_CURSE),
+
+ egg_moves(SNORLAX,
+ MOVE_LICK,
+ MOVE_CHARM,
+ MOVE_DOUBLE_EDGE,
+ MOVE_CURSE,
+ MOVE_FISSURE,
+ MOVE_SUBSTITUTE),
+
+ egg_moves(DRATINI,
+ MOVE_LIGHT_SCREEN,
+ MOVE_MIST,
+ MOVE_HAZE,
+ MOVE_SUPERSONIC,
+ MOVE_DRAGON_BREATH,
+ MOVE_DRAGON_DANCE),
+
+ egg_moves(CHIKORITA,
+ MOVE_VINE_WHIP,
+ MOVE_LEECH_SEED,
+ MOVE_COUNTER,
+ MOVE_ANCIENT_POWER,
+ MOVE_FLAIL,
+ MOVE_NATURE_POWER,
+ MOVE_INGRAIN,
+ MOVE_GRASS_WHISTLE),
+
+ egg_moves(CYNDAQUIL,
+ MOVE_FURY_SWIPES,
+ MOVE_QUICK_ATTACK,
+ MOVE_REVERSAL,
+ MOVE_THRASH,
+ MOVE_FORESIGHT,
+ MOVE_COVET,
+ MOVE_HOWL,
+ MOVE_CRUSH_CLAW),
+
+ egg_moves(TOTODILE,
+ MOVE_CRUNCH,
+ MOVE_THRASH,
+ MOVE_HYDRO_PUMP,
+ MOVE_ANCIENT_POWER,
+ MOVE_ROCK_SLIDE,
+ MOVE_MUD_SPORT,
+ MOVE_WATER_SPORT,
+ MOVE_DRAGON_CLAW),
+
+ egg_moves(SENTRET,
+ MOVE_DOUBLE_EDGE,
+ MOVE_PURSUIT,
+ MOVE_SLASH,
+ MOVE_FOCUS_ENERGY,
+ MOVE_REVERSAL,
+ MOVE_SUBSTITUTE,
+ MOVE_TRICK,
+ MOVE_ASSIST),
+
+ egg_moves(HOOTHOOT,
+ MOVE_MIRROR_MOVE,
+ MOVE_SUPERSONIC,
+ MOVE_FAINT_ATTACK,
+ MOVE_WING_ATTACK,
+ MOVE_WHIRLWIND,
+ MOVE_SKY_ATTACK,
+ MOVE_FEATHER_DANCE),
+
+ egg_moves(LEDYBA,
+ MOVE_PSYBEAM,
+ MOVE_BIDE,
+ MOVE_SILVER_WIND),
+
+ egg_moves(SPINARAK,
+ MOVE_PSYBEAM,
+ MOVE_DISABLE,
+ MOVE_SONIC_BOOM,
+ MOVE_BATON_PASS,
+ MOVE_PURSUIT,
+ MOVE_SIGNAL_BEAM),
+
+ egg_moves(CHINCHOU,
+ MOVE_FLAIL,
+ MOVE_SCREECH,
+ MOVE_AMNESIA),
+
+ egg_moves(PICHU,
+ MOVE_REVERSAL,
+ MOVE_BIDE,
+ MOVE_PRESENT,
+ MOVE_ENCORE,
+ MOVE_DOUBLE_SLAP,
+ MOVE_WISH,
+ MOVE_CHARGE),
+
+ egg_moves(CLEFFA,
+ MOVE_PRESENT,
+ MOVE_METRONOME,
+ MOVE_AMNESIA,
+ MOVE_BELLY_DRUM,
+ MOVE_SPLASH,
+ MOVE_MIMIC,
+ MOVE_WISH,
+ MOVE_SUBSTITUTE),
+
+ egg_moves(IGGLYBUFF,
+ MOVE_PERISH_SONG,
+ MOVE_PRESENT,
+ MOVE_FAINT_ATTACK,
+ MOVE_WISH,
+ MOVE_FAKE_TEARS),
+
+ egg_moves(TOGEPI,
+ MOVE_PRESENT,
+ MOVE_MIRROR_MOVE,
+ MOVE_PECK,
+ MOVE_FORESIGHT,
+ MOVE_FUTURE_SIGHT,
+ MOVE_SUBSTITUTE,
+ MOVE_PSYCH_UP),
+
+ egg_moves(NATU,
+ MOVE_HAZE,
+ MOVE_DRILL_PECK,
+ MOVE_QUICK_ATTACK,
+ MOVE_FAINT_ATTACK,
+ MOVE_STEEL_WING,
+ MOVE_PSYCH_UP,
+ MOVE_FEATHER_DANCE,
+ MOVE_REFRESH),
+
+ egg_moves(MAREEP,
+ MOVE_TAKE_DOWN,
+ MOVE_BODY_SLAM,
+ MOVE_SAFEGUARD,
+ MOVE_SCREECH,
+ MOVE_REFLECT,
+ MOVE_ODOR_SLEUTH,
+ MOVE_CHARGE),
+
+ egg_moves(MARILL,
+ MOVE_LIGHT_SCREEN,
+ MOVE_PRESENT,
+ MOVE_AMNESIA,
+ MOVE_FUTURE_SIGHT,
+ MOVE_BELLY_DRUM,
+ MOVE_PERISH_SONG,
+ MOVE_SUPERSONIC,
+ MOVE_SUBSTITUTE),
+
+ egg_moves(SUDOWOODO,
+ MOVE_SELF_DESTRUCT),
+
+ egg_moves(HOPPIP,
+ MOVE_CONFUSION,
+ MOVE_ENCORE,
+ MOVE_DOUBLE_EDGE,
+ MOVE_REFLECT,
+ MOVE_AMNESIA,
+ MOVE_HELPING_HAND,
+ MOVE_PSYCH_UP),
+
+ egg_moves(AIPOM,
+ MOVE_COUNTER,
+ MOVE_SCREECH,
+ MOVE_PURSUIT,
+ MOVE_AGILITY,
+ MOVE_SPITE,
+ MOVE_SLAM,
+ MOVE_DOUBLE_SLAP,
+ MOVE_BEAT_UP),
+
+ egg_moves(SUNKERN,
+ MOVE_GRASS_WHISTLE,
+ MOVE_ENCORE,
+ MOVE_LEECH_SEED,
+ MOVE_NATURE_POWER,
+ MOVE_CURSE,
+ MOVE_HELPING_HAND),
+
+ egg_moves(YANMA,
+ MOVE_WHIRLWIND,
+ MOVE_REVERSAL,
+ MOVE_LEECH_LIFE,
+ MOVE_SIGNAL_BEAM,
+ MOVE_SILVER_WIND),
+
+ egg_moves(WOOPER,
+ MOVE_BODY_SLAM,
+ MOVE_ANCIENT_POWER,
+ MOVE_SAFEGUARD,
+ MOVE_CURSE,
+ MOVE_MUD_SPORT,
+ MOVE_STOCKPILE,
+ MOVE_SWALLOW,
+ MOVE_SPIT_UP),
+
+ egg_moves(MURKROW,
+ MOVE_WHIRLWIND,
+ MOVE_DRILL_PECK,
+ MOVE_MIRROR_MOVE,
+ MOVE_WING_ATTACK,
+ MOVE_SKY_ATTACK,
+ MOVE_CONFUSE_RAY,
+ MOVE_FEATHER_DANCE,
+ MOVE_PERISH_SONG),
+
+ egg_moves(MISDREAVUS,
+ MOVE_SCREECH,
+ MOVE_DESTINY_BOND,
+ MOVE_PSYCH_UP,
+ MOVE_IMPRISON),
+
+ egg_moves(GIRAFARIG,
+ MOVE_TAKE_DOWN,
+ MOVE_AMNESIA,
+ MOVE_FORESIGHT,
+ MOVE_FUTURE_SIGHT,
+ MOVE_BEAT_UP,
+ MOVE_PSYCH_UP,
+ MOVE_WISH,
+ MOVE_MAGIC_COAT),
+
+ egg_moves(PINECO,
+ MOVE_REFLECT,
+ MOVE_PIN_MISSILE,
+ MOVE_FLAIL,
+ MOVE_SWIFT,
+ MOVE_COUNTER,
+ MOVE_SAND_TOMB),
+
+ egg_moves(DUNSPARCE,
+ MOVE_BIDE,
+ MOVE_ANCIENT_POWER,
+ MOVE_ROCK_SLIDE,
+ MOVE_BITE,
+ MOVE_HEADBUTT,
+ MOVE_ASTONISH,
+ MOVE_CURSE),
+
+ egg_moves(GLIGAR,
+ MOVE_METAL_CLAW,
+ MOVE_WING_ATTACK,
+ MOVE_RAZOR_WIND,
+ MOVE_COUNTER,
+ MOVE_SAND_TOMB),
+
+ egg_moves(SNUBBULL,
+ MOVE_METRONOME,
+ MOVE_FAINT_ATTACK,
+ MOVE_REFLECT,
+ MOVE_PRESENT,
+ MOVE_CRUNCH,
+ MOVE_HEAL_BELL,
+ MOVE_SNORE,
+ MOVE_SMELLING_SALT),
+
+ egg_moves(QWILFISH,
+ MOVE_FLAIL,
+ MOVE_HAZE,
+ MOVE_BUBBLE_BEAM,
+ MOVE_SUPERSONIC,
+ MOVE_ASTONISH),
+
+ egg_moves(SHUCKLE,
+ MOVE_SWEET_SCENT),
+
+ egg_moves(HERACROSS,
+ MOVE_HARDEN,
+ MOVE_BIDE,
+ MOVE_FLAIL,
+ MOVE_FALSE_SWIPE),
+
+ egg_moves(SNEASEL,
+ MOVE_COUNTER,
+ MOVE_SPITE,
+ MOVE_FORESIGHT,
+ MOVE_REFLECT,
+ MOVE_BITE,
+ MOVE_CRUSH_CLAW,
+ MOVE_FAKE_OUT),
+
+ egg_moves(TEDDIURSA,
+ MOVE_CRUNCH,
+ MOVE_TAKE_DOWN,
+ MOVE_SEISMIC_TOSS,
+ MOVE_COUNTER,
+ MOVE_METAL_CLAW,
+ MOVE_FAKE_TEARS,
+ MOVE_YAWN,
+ MOVE_SLEEP_TALK),
+
+ egg_moves(SLUGMA,
+ MOVE_ACID_ARMOR,
+ MOVE_HEAT_WAVE),
+
+ egg_moves(SWINUB,
+ MOVE_TAKE_DOWN,
+ MOVE_BITE,
+ MOVE_BODY_SLAM,
+ MOVE_ROCK_SLIDE,
+ MOVE_ANCIENT_POWER,
+ MOVE_MUD_SHOT,
+ MOVE_ICICLE_SPEAR,
+ MOVE_DOUBLE_EDGE),
+
+ egg_moves(CORSOLA,
+ MOVE_ROCK_SLIDE,
+ MOVE_SCREECH,
+ MOVE_MIST,
+ MOVE_AMNESIA,
+ MOVE_BARRIER,
+ MOVE_INGRAIN,
+ MOVE_CONFUSE_RAY,
+ MOVE_ICICLE_SPEAR),
+
+ egg_moves(REMORAID,
+ MOVE_AURORA_BEAM,
+ MOVE_OCTAZOOKA,
+ MOVE_SUPERSONIC,
+ MOVE_HAZE,
+ MOVE_SCREECH,
+ MOVE_THUNDER_WAVE,
+ MOVE_ROCK_BLAST),
+
+ egg_moves(DELIBIRD,
+ MOVE_AURORA_BEAM,
+ MOVE_QUICK_ATTACK,
+ MOVE_FUTURE_SIGHT,
+ MOVE_SPLASH,
+ MOVE_RAPID_SPIN,
+ MOVE_ICE_BALL),
+
+ egg_moves(MANTINE,
+ MOVE_TWISTER,
+ MOVE_HYDRO_PUMP,
+ MOVE_HAZE,
+ MOVE_SLAM,
+ MOVE_MUD_SPORT,
+ MOVE_ROCK_SLIDE),
+
+ egg_moves(SKARMORY,
+ MOVE_DRILL_PECK,
+ MOVE_PURSUIT,
+ MOVE_WHIRLWIND,
+ MOVE_SKY_ATTACK,
+ MOVE_CURSE),
+
+ egg_moves(HOUNDOUR,
+ MOVE_FIRE_SPIN,
+ MOVE_RAGE,
+ MOVE_PURSUIT,
+ MOVE_COUNTER,
+ MOVE_SPITE,
+ MOVE_REVERSAL,
+ MOVE_BEAT_UP,
+ MOVE_WILL_O_WISP),
+
+ egg_moves(PHANPY,
+ MOVE_FOCUS_ENERGY,
+ MOVE_BODY_SLAM,
+ MOVE_ANCIENT_POWER,
+ MOVE_SNORE,
+ MOVE_COUNTER,
+ MOVE_FISSURE),
+
+ egg_moves(STANTLER,
+ MOVE_SPITE,
+ MOVE_DISABLE,
+ MOVE_BITE,
+ MOVE_SWAGGER,
+ MOVE_PSYCH_UP,
+ MOVE_EXTRASENSORY),
+
+ egg_moves(TYROGUE,
+ MOVE_RAPID_SPIN,
+ MOVE_HI_JUMP_KICK,
+ MOVE_MACH_PUNCH,
+ MOVE_MIND_READER,
+ MOVE_HELPING_HAND),
+
+ egg_moves(SMOOCHUM,
+ MOVE_MEDITATE,
+ MOVE_PSYCH_UP,
+ MOVE_FAKE_OUT,
+ MOVE_WISH,
+ MOVE_ICE_PUNCH),
+
+ egg_moves(ELEKID,
+ MOVE_KARATE_CHOP,
+ MOVE_BARRIER,
+ MOVE_ROLLING_KICK,
+ MOVE_MEDITATE,
+ MOVE_CROSS_CHOP,
+ MOVE_FIRE_PUNCH,
+ MOVE_ICE_PUNCH),
+
+ egg_moves(MAGBY,
+ MOVE_KARATE_CHOP,
+ MOVE_MEGA_PUNCH,
+ MOVE_BARRIER,
+ MOVE_SCREECH,
+ MOVE_CROSS_CHOP,
+ MOVE_THUNDER_PUNCH),
+
+ egg_moves(MILTANK,
+ MOVE_PRESENT,
+ MOVE_REVERSAL,
+ MOVE_SEISMIC_TOSS,
+ MOVE_ENDURE,
+ MOVE_PSYCH_UP,
+ MOVE_CURSE,
+ MOVE_HELPING_HAND,
+ MOVE_SLEEP_TALK),
+
+ egg_moves(LARVITAR,
+ MOVE_PURSUIT,
+ MOVE_STOMP,
+ MOVE_OUTRAGE,
+ MOVE_FOCUS_ENERGY,
+ MOVE_ANCIENT_POWER,
+ MOVE_DRAGON_DANCE,
+ MOVE_CURSE),
+
+ egg_moves(TREECKO,
+ MOVE_CRUNCH,
+ MOVE_MUD_SPORT,
+ MOVE_ENDEAVOR,
+ MOVE_LEECH_SEED,
+ MOVE_DRAGON_BREATH,
+ MOVE_CRUSH_CLAW),
+
+ egg_moves(TORCHIC,
+ MOVE_COUNTER,
+ MOVE_REVERSAL,
+ MOVE_ENDURE,
+ MOVE_SWAGGER,
+ MOVE_ROCK_SLIDE,
+ MOVE_SMELLING_SALT),
+
+ egg_moves(MUDKIP,
+ MOVE_REFRESH,
+ MOVE_UPROAR,
+ MOVE_CURSE,
+ MOVE_STOMP,
+ MOVE_ICE_BALL,
+ MOVE_MIRROR_COAT),
+
+ egg_moves(POOCHYENA,
+ MOVE_ASTONISH,
+ MOVE_POISON_FANG,
+ MOVE_COVET,
+ MOVE_LEER,
+ MOVE_YAWN),
+
+ egg_moves(ZIGZAGOON,
+ MOVE_CHARM,
+ MOVE_PURSUIT,
+ MOVE_SUBSTITUTE,
+ MOVE_TICKLE,
+ MOVE_TRICK),
+
+ egg_moves(LOTAD,
+ MOVE_SYNTHESIS,
+ MOVE_RAZOR_LEAF,
+ MOVE_SWEET_SCENT,
+ MOVE_LEECH_SEED,
+ MOVE_FLAIL,
+ MOVE_WATER_GUN),
+
+ egg_moves(SEEDOT,
+ MOVE_LEECH_SEED,
+ MOVE_AMNESIA,
+ MOVE_QUICK_ATTACK,
+ MOVE_RAZOR_WIND,
+ MOVE_TAKE_DOWN,
+ MOVE_FALSE_SWIPE),
+
+ egg_moves(NINCADA,
+ MOVE_ENDURE,
+ MOVE_FAINT_ATTACK,
+ MOVE_GUST,
+ MOVE_SILVER_WIND),
+
+ egg_moves(TAILLOW,
+ MOVE_PURSUIT,
+ MOVE_SUPERSONIC,
+ MOVE_REFRESH,
+ MOVE_MIRROR_MOVE,
+ MOVE_RAGE,
+ MOVE_SKY_ATTACK),
+
+ egg_moves(SHROOMISH,
+ MOVE_FAKE_TEARS,
+ MOVE_SWAGGER,
+ MOVE_CHARM,
+ MOVE_FALSE_SWIPE,
+ MOVE_HELPING_HAND),
+
+ egg_moves(SPINDA,
+ MOVE_ENCORE,
+ MOVE_ROCK_SLIDE,
+ MOVE_ASSIST,
+ MOVE_DISABLE,
+ MOVE_BATON_PASS,
+ MOVE_WISH,
+ MOVE_TRICK,
+ MOVE_SMELLING_SALT),
+
+ egg_moves(WINGULL,
+ MOVE_MIST,
+ MOVE_TWISTER,
+ MOVE_AGILITY,
+ MOVE_GUST,
+ MOVE_WATER_SPORT),
+
+ egg_moves(SURSKIT,
+ MOVE_FORESIGHT,
+ MOVE_MUD_SHOT,
+ MOVE_PSYBEAM,
+ MOVE_HYDRO_PUMP,
+ MOVE_MIND_READER),
+
+ egg_moves(WAILMER,
+ MOVE_DOUBLE_EDGE,
+ MOVE_THRASH,
+ MOVE_SWAGGER,
+ MOVE_SNORE,
+ MOVE_SLEEP_TALK,
+ MOVE_CURSE,
+ MOVE_FISSURE,
+ MOVE_TICKLE),
+
+ egg_moves(SKITTY,
+ MOVE_HELPING_HAND,
+ MOVE_PSYCH_UP,
+ MOVE_UPROAR,
+ MOVE_FAKE_TEARS,
+ MOVE_WISH,
+ MOVE_BATON_PASS,
+ MOVE_SUBSTITUTE,
+ MOVE_TICKLE),
+
+ egg_moves(KECLEON,
+ MOVE_DISABLE,
+ MOVE_MAGIC_COAT,
+ MOVE_TRICK),
+
+ egg_moves(NOSEPASS,
+ MOVE_MAGNITUDE,
+ MOVE_ROLLOUT,
+ MOVE_EXPLOSION),
+
+ egg_moves(TORKOAL,
+ MOVE_ERUPTION,
+ MOVE_ENDURE,
+ MOVE_SLEEP_TALK,
+ MOVE_YAWN),
+
+ egg_moves(SABLEYE,
+ MOVE_PSYCH_UP,
+ MOVE_RECOVER,
+ MOVE_MOONLIGHT),
+
+ egg_moves(BARBOACH,
+ MOVE_THRASH,
+ MOVE_WHIRLPOOL,
+ MOVE_SPARK),
+
+ egg_moves(LUVDISC,
+ MOVE_SPLASH,
+ MOVE_SUPERSONIC,
+ MOVE_WATER_SPORT,
+ MOVE_MUD_SPORT),
+
+ egg_moves(CORPHISH,
+ MOVE_MUD_SPORT,
+ MOVE_ENDEAVOR,
+ MOVE_BODY_SLAM,
+ MOVE_ANCIENT_POWER),
+
+ egg_moves(FEEBAS,
+ MOVE_MIRROR_COAT,
+ MOVE_DRAGON_BREATH,
+ MOVE_MUD_SPORT,
+ MOVE_HYPNOSIS,
+ MOVE_LIGHT_SCREEN,
+ MOVE_CONFUSE_RAY),
+
+ egg_moves(CARVANHA,
+ MOVE_HYDRO_PUMP,
+ MOVE_DOUBLE_EDGE,
+ MOVE_THRASH),
+
+ egg_moves(TRAPINCH,
+ MOVE_FOCUS_ENERGY,
+ MOVE_QUICK_ATTACK,
+ MOVE_GUST),
+
+ egg_moves(MAKUHITA,
+ MOVE_FAINT_ATTACK,
+ MOVE_DETECT,
+ MOVE_FORESIGHT,
+ MOVE_HELPING_HAND,
+ MOVE_CROSS_CHOP,
+ MOVE_REVENGE,
+ MOVE_DYNAMIC_PUNCH,
+ MOVE_COUNTER),
+
+ egg_moves(ELECTRIKE,
+ MOVE_CRUNCH,
+ MOVE_HEADBUTT,
+ MOVE_UPROAR,
+ MOVE_CURSE,
+ MOVE_SWIFT),
+
+ egg_moves(NUMEL,
+ MOVE_HOWL,
+ MOVE_SCARY_FACE,
+ MOVE_BODY_SLAM,
+ MOVE_ROLLOUT,
+ MOVE_DEFENSE_CURL,
+ MOVE_STOMP),
+
+ egg_moves(SPHEAL,
+ MOVE_WATER_SPORT,
+ MOVE_STOCKPILE,
+ MOVE_SWALLOW,
+ MOVE_SPIT_UP,
+ MOVE_YAWN,
+ MOVE_ROCK_SLIDE,
+ MOVE_CURSE,
+ MOVE_FISSURE),
+
+ egg_moves(CACNEA,
+ MOVE_GRASS_WHISTLE,
+ MOVE_ACID,
+ MOVE_TEETER_DANCE,
+ MOVE_DYNAMIC_PUNCH,
+ MOVE_COUNTER),
+
+ egg_moves(SNORUNT,
+ MOVE_BLOCK,
+ MOVE_SPIKES),
+
+ egg_moves(AZURILL,
+ MOVE_ENCORE,
+ MOVE_SING,
+ MOVE_REFRESH,
+ MOVE_SLAM,
+ MOVE_TICKLE),
+
+ egg_moves(SPOINK,
+ MOVE_FUTURE_SIGHT,
+ MOVE_EXTRASENSORY,
+ MOVE_SUBSTITUTE,
+ MOVE_TRICK),
+
+ egg_moves(PLUSLE,
+ MOVE_SUBSTITUTE,
+ MOVE_WISH),
+
+ egg_moves(MINUN,
+ MOVE_SUBSTITUTE,
+ MOVE_WISH),
+
+ egg_moves(MAWILE,
+ MOVE_SWORDS_DANCE,
+ MOVE_FALSE_SWIPE,
+ MOVE_POISON_FANG,
+ MOVE_PSYCH_UP,
+ MOVE_ANCIENT_POWER,
+ MOVE_TICKLE),
+
+ egg_moves(MEDITITE,
+ MOVE_FIRE_PUNCH,
+ MOVE_THUNDER_PUNCH,
+ MOVE_ICE_PUNCH,
+ MOVE_FORESIGHT,
+ MOVE_FAKE_OUT,
+ MOVE_BATON_PASS,
+ MOVE_DYNAMIC_PUNCH),
+
+ egg_moves(SWABLU,
+ MOVE_AGILITY,
+ MOVE_HAZE,
+ MOVE_PURSUIT,
+ MOVE_RAGE),
+
+ egg_moves(DUSKULL,
+ MOVE_IMPRISON,
+ MOVE_DESTINY_BOND,
+ MOVE_PAIN_SPLIT,
+ MOVE_GRUDGE,
+ MOVE_MEMENTO,
+ MOVE_FAINT_ATTACK),
+
+ egg_moves(ROSELIA,
+ MOVE_SPIKES,
+ MOVE_SYNTHESIS,
+ MOVE_PIN_MISSILE,
+ MOVE_COTTON_SPORE),
+
+ egg_moves(SLAKOTH,
+ MOVE_PURSUIT,
+ MOVE_SLASH,
+ MOVE_BODY_SLAM,
+ MOVE_SNORE,
+ MOVE_CRUSH_CLAW,
+ MOVE_CURSE,
+ MOVE_SLEEP_TALK),
+
+ egg_moves(GULPIN,
+ MOVE_DREAM_EATER,
+ MOVE_ACID_ARMOR,
+ MOVE_SMOG,
+ MOVE_PAIN_SPLIT),
+
+ egg_moves(TROPIUS,
+ MOVE_HEADBUTT,
+ MOVE_SLAM,
+ MOVE_RAZOR_WIND,
+ MOVE_LEECH_SEED,
+ MOVE_NATURE_POWER),
+
+ egg_moves(WHISMUR,
+ MOVE_TAKE_DOWN,
+ MOVE_SNORE,
+ MOVE_SWAGGER,
+ MOVE_EXTRASENSORY,
+ MOVE_SMELLING_SALT),
+
+ egg_moves(CLAMPERL,
+ MOVE_REFRESH,
+ MOVE_MUD_SPORT,
+ MOVE_BODY_SLAM,
+ MOVE_SUPERSONIC,
+ MOVE_BARRIER,
+ MOVE_CONFUSE_RAY),
+
+ egg_moves(ABSOL,
+ MOVE_BATON_PASS,
+ MOVE_FAINT_ATTACK,
+ MOVE_DOUBLE_EDGE,
+ MOVE_MAGIC_COAT,
+ MOVE_CURSE,
+ MOVE_SUBSTITUTE),
+
+ egg_moves(SHUPPET,
+ MOVE_DISABLE,
+ MOVE_DESTINY_BOND,
+ MOVE_FORESIGHT,
+ MOVE_ASTONISH,
+ MOVE_IMPRISON),
+
+ egg_moves(SEVIPER,
+ MOVE_STOCKPILE,
+ MOVE_SWALLOW,
+ MOVE_SPIT_UP,
+ MOVE_BODY_SLAM),
+
+ egg_moves(ZANGOOSE,
+ MOVE_FLAIL,
+ MOVE_DOUBLE_KICK,
+ MOVE_RAZOR_WIND,
+ MOVE_COUNTER,
+ MOVE_ROAR,
+ MOVE_CURSE),
+
+ egg_moves(RELICANTH,
+ MOVE_MAGNITUDE,
+ MOVE_SKULL_BASH,
+ MOVE_WATER_SPORT,
+ MOVE_AMNESIA,
+ MOVE_SLEEP_TALK,
+ MOVE_ROCK_SLIDE),
+
+ egg_moves(ARON,
+ MOVE_ENDEAVOR,
+ MOVE_BODY_SLAM,
+ MOVE_STOMP,
+ MOVE_SMELLING_SALT),
+
+ egg_moves(CASTFORM,
+ MOVE_FUTURE_SIGHT,
+ MOVE_PSYCH_UP),
+
+ egg_moves(VOLBEAT,
+ MOVE_BATON_PASS,
+ MOVE_SILVER_WIND,
+ MOVE_TRICK),
+
+ egg_moves(ILLUMISE,
+ MOVE_BATON_PASS,
+ MOVE_SILVER_WIND,
+ MOVE_GROWTH),
+
+ egg_moves(LILEEP,
+ MOVE_BARRIER,
+ MOVE_RECOVER,
+ MOVE_MIRROR_COAT,
+ MOVE_ROCK_SLIDE),
+
+ egg_moves(ANORITH,
+ MOVE_RAPID_SPIN,
+ MOVE_KNOCK_OFF,
+ MOVE_SWORDS_DANCE,
+ MOVE_ROCK_SLIDE),
+
+ egg_moves(RALTS,
+ MOVE_DISABLE,
+ MOVE_WILL_O_WISP,
+ MOVE_MEAN_LOOK,
+ MOVE_MEMENTO,
+ MOVE_DESTINY_BOND),
+
+ egg_moves(BAGON,
+ MOVE_HYDRO_PUMP,
+ MOVE_THRASH,
+ MOVE_DRAGON_RAGE,
+ MOVE_TWISTER,
+ MOVE_DRAGON_DANCE),
+
+ egg_moves(CHIMECHO,
+ MOVE_DISABLE,
+ MOVE_CURSE,
+ MOVE_HYPNOSIS,
+ MOVE_DREAM_EATER),
+
+ 0xFFFF
+};
diff --git a/include/data/pokemon/evolution.h b/include/data/pokemon/evolution.h
index 51e993347..919416fee 100644
--- a/include/data/pokemon/evolution.h
+++ b/include/data/pokemon/evolution.h
@@ -1,5 +1,5 @@
//
-// Created by Scott Norton on 6/27/17.
+
//
#ifndef POKERUBY_EVOLUTION_H
diff --git a/include/data/pokemon/experience_tables.h b/include/data/pokemon/experience_tables.h
index 70c5e88ed..2fb416fe9 100644
--- a/include/data/pokemon/experience_tables.h
+++ b/include/data/pokemon/experience_tables.h
@@ -1,5 +1,5 @@
//
-// Created by Scott Norton on 6/27/17.
+
//
#ifndef POKERUBY_EXPERIENCE_TABLES_H
diff --git a/include/data/pokemon/item_effects.h b/include/data/pokemon/item_effects.h
index b07573933..cd06228dd 100644
--- a/include/data/pokemon/item_effects.h
+++ b/include/data/pokemon/item_effects.h
@@ -1,5 +1,5 @@
//
-// Created by Scott Norton on 6/27/17.
+
//
#ifndef POKERUBY_ITEM_EFFECTS_H
diff --git a/include/data/pokemon/level_up_learnset_pointers.h b/include/data/pokemon/level_up_learnset_pointers.h
index 753947d51..19761c996 100644
--- a/include/data/pokemon/level_up_learnset_pointers.h
+++ b/include/data/pokemon/level_up_learnset_pointers.h
@@ -1,5 +1,5 @@
//
-// Created by Scott Norton on 6/27/17.
+
//
#ifndef POKERUBY_LEVEL_UP_LEARNSET_POINTERS_H
diff --git a/include/data/pokemon/level_up_learnsets.h b/include/data/pokemon/level_up_learnsets.h
index 5b79f4bc0..bc1de82de 100644
--- a/include/data/pokemon/level_up_learnsets.h
+++ b/include/data/pokemon/level_up_learnsets.h
@@ -1,5 +1,5 @@
//
-// Created by Scott Norton on 6/27/17.
+
//
#ifndef POKERUBY_LEVEL_UP_LEARNSETS_H
diff --git a/include/data/pokemon/nature_stats.h b/include/data/pokemon/nature_stats.h
index 27bd98f9d..fcef2a0ac 100644
--- a/include/data/pokemon/nature_stats.h
+++ b/include/data/pokemon/nature_stats.h
@@ -1,5 +1,5 @@
//
-// Created by Scott Norton on 6/27/17.
+
//
#ifndef POKERUBY_NATURE_STATS_H
diff --git a/include/data/pokemon/spinda_spots.h b/include/data/pokemon/spinda_spots.h
index 234cdf00e..d045e0734 100644
--- a/include/data/pokemon/spinda_spots.h
+++ b/include/data/pokemon/spinda_spots.h
@@ -1,5 +1,5 @@
//
-// Created by Scott Norton on 6/27/17.
+
//
#ifndef POKERUBY_SPINDA_SPOTS_H
diff --git a/include/data/pokemon/tmhm_learnsets.h b/include/data/pokemon/tmhm_learnsets.h
index fa48f7f5c..02cd22d56 100644
--- a/include/data/pokemon/tmhm_learnsets.h
+++ b/include/data/pokemon/tmhm_learnsets.h
@@ -1,5 +1,5 @@
//
-// Created by Scott Norton on 6/27/17.
+
//
#ifndef POKERUBY_TMHM_LEARNSETS_H
diff --git a/include/data/pokemon/trainer_class_lookups.h b/include/data/pokemon/trainer_class_lookups.h
index 0aea322a0..c86e795c4 100644
--- a/include/data/pokemon/trainer_class_lookups.h
+++ b/include/data/pokemon/trainer_class_lookups.h
@@ -1,5 +1,5 @@
//
-// Created by Scott Norton on 6/27/17.
+
//
#ifndef POKERUBY_TRAINER_CLASS_LOOKUPS_H
diff --git a/include/data2.h b/include/data2.h
index 2837a4451..53a90944d 100644
--- a/include/data2.h
+++ b/include/data2.h
@@ -3,12 +3,7 @@
#include "sprite.h"
-struct UnknownStructD2
-{
- u32 unk0;
- u32 unk4;
- u32 unk8;
-};
+struct UnknownTaskStruct;
struct MonCoords
{
@@ -44,10 +39,10 @@ extern u8 gEnemyMonElevation[];
extern const u8 gTrainerClassNames[][13];
extern const struct Trainer gTrainers[];
extern u8 gSpeciesNames[][11];
-extern u8 gMoveNames[][13];
+extern const u8 gMoveNames[][13];
extern const u8 gAbilityNames[][13];
extern const u8 gTypeNames[][7];
-extern const struct UnknownStructD2 gUnknown_081F9674;
+extern const struct UnknownTaskStruct gUnknown_081F9674;
extern const u8 gUnknown_081F96C8[];
extern struct CompressedSpriteSheet gUnknown_081FAEA4;
extern struct CompressedSpritePalette gUnknown_081FAEAC;
diff --git a/include/daycare.h b/include/daycare.h
index b90c50610..e3aec68d3 100644
--- a/include/daycare.h
+++ b/include/daycare.h
@@ -1,9 +1,9 @@
#ifndef GUARD_DAYCARE_H
#define GUARD_DAYCARE_H
-u8 Daycare_CountPokemon(struct BoxPokemon *);
-void sub_8041324(struct BoxPokemon *, struct RecordMixing_UnknownStruct *);
-void sub_8041790(int i);
+u8 Daycare_CountPokemon(struct DayCareData *);
+void sub_8041324(struct BoxPokemon *, struct RecordMixingDayCareMail *);
+void sub_8041790(u16 i);
u16 sub_8041870(u16);
void sub_8041940(void);
void sub_8041950(void);
diff --git a/include/diploma.h b/include/diploma.h
index 81e9e3bb2..8d730fa05 100644
--- a/include/diploma.h
+++ b/include/diploma.h
@@ -1,6 +1,6 @@
#ifndef GUARD_DIPLOMA_H
#define GUARD_DIPLOMA_H
-void sub_8145D88(void);
+void CB2_ShowDiploma(void);
#endif // GUARD_DIPLOMA_H
diff --git a/include/easy_chat.h b/include/easy_chat.h
index 03e9bb737..702082966 100644
--- a/include/easy_chat.h
+++ b/include/easy_chat.h
@@ -1,7 +1,8 @@
#ifndef GUARD_EASYCHAT_H
#define GUARD_EASYCHAT_H
-enum {
+enum
+{
EC_GROUP_POKEMON,
EC_GROUP_TRAINER,
EC_GROUP_STATUS,
@@ -26,6 +27,1037 @@ enum {
EC_GROUP_POKEMON_2,
};
+// TRAINER
+#define EC_WORD_I_CHOOSE_YOU (EC_GROUP_TRAINER << 9) | 0x0
+#define EC_WORD_GOTCHA (EC_GROUP_TRAINER << 9) | 0x1
+#define EC_WORD_TRADE (EC_GROUP_TRAINER << 9) | 0x2
+#define EC_WORD_SAPPHIRE (EC_GROUP_TRAINER << 9) | 0x3
+#define EC_WORD_EVOLVE (EC_GROUP_TRAINER << 9) | 0x4
+#define EC_WORD_ENCYCLOPEDIA (EC_GROUP_TRAINER << 9) | 0x5
+#define EC_WORD_NATURE (EC_GROUP_TRAINER << 9) | 0x6
+#define EC_WORD_CENTER (EC_GROUP_TRAINER << 9) | 0x7
+#define EC_WORD_EGG (EC_GROUP_TRAINER << 9) | 0x8
+#define EC_WORD_LINK (EC_GROUP_TRAINER << 9) | 0x9
+#define EC_WORD_SP_ABILITY (EC_GROUP_TRAINER << 9) | 0xa
+#define EC_WORD_TRAINER (EC_GROUP_TRAINER << 9) | 0xb
+#define EC_WORD_VERSION (EC_GROUP_TRAINER << 9) | 0xc
+#define EC_WORD_POKENAV (EC_GROUP_TRAINER << 9) | 0xd
+#define EC_WORD_POKEMON (EC_GROUP_TRAINER << 9) | 0xe
+#define EC_WORD_GET (EC_GROUP_TRAINER << 9) | 0xf
+#define EC_WORD_POKEDEX (EC_GROUP_TRAINER << 9) | 0x10
+#define EC_WORD_RUBY (EC_GROUP_TRAINER << 9) | 0x11
+#define EC_WORD_LEVEL (EC_GROUP_TRAINER << 9) | 0x12
+
+// STATUS
+#define EC_WORD_DARK (EC_GROUP_STATUS << 9) | 0x0
+#define EC_WORD_STENCH (EC_GROUP_STATUS << 9) | 0x1
+#define EC_WORD_THICK_FAT (EC_GROUP_STATUS << 9) | 0x2
+#define EC_WORD_RAIN_DISH (EC_GROUP_STATUS << 9) | 0x3
+#define EC_WORD_DRIZZLE (EC_GROUP_STATUS << 9) | 0x4
+#define EC_WORD_ARENA_TRAP (EC_GROUP_STATUS << 9) | 0x5
+#define EC_WORD_INTIMIDATE (EC_GROUP_STATUS << 9) | 0x6
+#define EC_WORD_ROCK_HEAD (EC_GROUP_STATUS << 9) | 0x7
+#define EC_WORD_COLOR (EC_GROUP_STATUS << 9) | 0x8
+#define EC_WORD_ALT_COLOR (EC_GROUP_STATUS << 9) | 0x9
+#define EC_WORD_ROCK (EC_GROUP_STATUS << 9) | 0xa
+#define EC_WORD_BEAUTIFUL (EC_GROUP_STATUS << 9) | 0xb
+#define EC_WORD_BEAUTY (EC_GROUP_STATUS << 9) | 0xc
+#define EC_WORD_AIR_LOCK (EC_GROUP_STATUS << 9) | 0xd
+#define EC_WORD_PSYCHIC (EC_GROUP_STATUS << 9) | 0xe
+#define EC_WORD_HYPER_CUTTER (EC_GROUP_STATUS << 9) | 0xf
+#define EC_WORD_FIGHTING (EC_GROUP_STATUS << 9) | 0x10
+#define EC_WORD_SHADOW_TAG (EC_GROUP_STATUS << 9) | 0x11
+#define EC_WORD_SMART (EC_GROUP_STATUS << 9) | 0x12
+#define EC_WORD_SMARTNESS (EC_GROUP_STATUS << 9) | 0x13
+#define EC_WORD_SPEED_BOOST (EC_GROUP_STATUS << 9) | 0x14
+#define EC_WORD_COOL (EC_GROUP_STATUS << 9) | 0x15
+#define EC_WORD_COOLNESS (EC_GROUP_STATUS << 9) | 0x16
+#define EC_WORD_BATTLE_ARMOR (EC_GROUP_STATUS << 9) | 0x17
+#define EC_WORD_CUTE (EC_GROUP_STATUS << 9) | 0x18
+#define EC_WORD_CUTENESS (EC_GROUP_STATUS << 9) | 0x19
+#define EC_WORD_STURDY (EC_GROUP_STATUS << 9) | 0x1a
+#define EC_WORD_SUCTION_CUPS (EC_GROUP_STATUS << 9) | 0x1b
+#define EC_WORD_GRASS (EC_GROUP_STATUS << 9) | 0x1c
+#define EC_WORD_CLEAR_BODY (EC_GROUP_STATUS << 9) | 0x1d
+#define EC_WORD_TORRENT (EC_GROUP_STATUS << 9) | 0x1e
+#define EC_WORD_GHOST (EC_GROUP_STATUS << 9) | 0x1f
+#define EC_WORD_ICE (EC_GROUP_STATUS << 9) | 0x20
+#define EC_WORD_GUTS (EC_GROUP_STATUS << 9) | 0x21
+#define EC_WORD_ROUGH_SKIN (EC_GROUP_STATUS << 9) | 0x22
+#define EC_WORD_SHELL_ARMOR (EC_GROUP_STATUS << 9) | 0x23
+#define EC_WORD_NATURAL_CURE (EC_GROUP_STATUS << 9) | 0x24
+#define EC_WORD_DAMP (EC_GROUP_STATUS << 9) | 0x25
+#define EC_WORD_GROUND (EC_GROUP_STATUS << 9) | 0x26
+#define EC_WORD_LIMBER (EC_GROUP_STATUS << 9) | 0x27
+#define EC_WORD_MAGNET_PULL (EC_GROUP_STATUS << 9) | 0x28
+#define EC_WORD_WHITE_SMOKE (EC_GROUP_STATUS << 9) | 0x29
+#define EC_WORD_SYNCHRONIZE (EC_GROUP_STATUS << 9) | 0x2a
+#define EC_WORD_OVERGROW (EC_GROUP_STATUS << 9) | 0x2b
+#define EC_WORD_SWIFT_SWIM (EC_GROUP_STATUS << 9) | 0x2c
+#define EC_WORD_SAND_STREAM (EC_GROUP_STATUS << 9) | 0x2d
+#define EC_WORD_SAND_VEIL (EC_GROUP_STATUS << 9) | 0x2e
+#define EC_WORD_KEEN_EYE (EC_GROUP_STATUS << 9) | 0x2f
+#define EC_WORD_INNER_FOCUS (EC_GROUP_STATUS << 9) | 0x30
+#define EC_WORD_STATIC (EC_GROUP_STATUS << 9) | 0x31
+#define EC_WORD_TYPE (EC_GROUP_STATUS << 9) | 0x32
+#define EC_WORD_TOUGH (EC_GROUP_STATUS << 9) | 0x33
+#define EC_WORD_TOUGHNESS (EC_GROUP_STATUS << 9) | 0x34
+#define EC_WORD_SHED_SKIN (EC_GROUP_STATUS << 9) | 0x35
+#define EC_WORD_HUGE_POWER (EC_GROUP_STATUS << 9) | 0x36
+#define EC_WORD_VOLT_ABSORB (EC_GROUP_STATUS << 9) | 0x37
+#define EC_WORD_WATER_ABSORB (EC_GROUP_STATUS << 9) | 0x38
+#define EC_WORD_ELECTRIC (EC_GROUP_STATUS << 9) | 0x39
+#define EC_WORD_FORECAST (EC_GROUP_STATUS << 9) | 0x3a
+#define EC_WORD_SERENE_GRACE (EC_GROUP_STATUS << 9) | 0x3b
+#define EC_WORD_POISON (EC_GROUP_STATUS << 9) | 0x3c
+#define EC_WORD_POISON_POINT (EC_GROUP_STATUS << 9) | 0x3d
+#define EC_WORD_DRAGON (EC_GROUP_STATUS << 9) | 0x3e
+#define EC_WORD_TRACE (EC_GROUP_STATUS << 9) | 0x3f
+#define EC_WORD_OBLIVIOUS (EC_GROUP_STATUS << 9) | 0x40
+#define EC_WORD_TRUANT (EC_GROUP_STATUS << 9) | 0x41
+#define EC_WORD_RUN_AWAY (EC_GROUP_STATUS << 9) | 0x42
+#define EC_WORD_STICKY_HOLD (EC_GROUP_STATUS << 9) | 0x43
+#define EC_WORD_CLOUD_NINE (EC_GROUP_STATUS << 9) | 0x44
+#define EC_WORD_NORMAL (EC_GROUP_STATUS << 9) | 0x45
+#define EC_WORD_STEEL (EC_GROUP_STATUS << 9) | 0x46
+#define EC_WORD_ILLUMINATE (EC_GROUP_STATUS << 9) | 0x47
+#define EC_WORD_EARLY_BIRD (EC_GROUP_STATUS << 9) | 0x48
+#define EC_WORD_HUSTLE (EC_GROUP_STATUS << 9) | 0x49
+#define EC_WORD_SHINE (EC_GROUP_STATUS << 9) | 0x4a
+#define EC_WORD_FLYING (EC_GROUP_STATUS << 9) | 0x4b
+#define EC_WORD_DROUGHT (EC_GROUP_STATUS << 9) | 0x4c
+#define EC_WORD_LIGHTNINGROD (EC_GROUP_STATUS << 9) | 0x4d
+#define EC_WORD_COMPOUNDEYES (EC_GROUP_STATUS << 9) | 0x4e
+#define EC_WORD_MARVEL_SCALE (EC_GROUP_STATUS << 9) | 0x4f
+#define EC_WORD_WONDER_GUARD (EC_GROUP_STATUS << 9) | 0x50
+#define EC_WORD_INSOMNIA (EC_GROUP_STATUS << 9) | 0x51
+#define EC_WORD_LEVITATE (EC_GROUP_STATUS << 9) | 0x52
+#define EC_WORD_PLUS (EC_GROUP_STATUS << 9) | 0x53
+#define EC_WORD_PRESSURE (EC_GROUP_STATUS << 9) | 0x54
+#define EC_WORD_LIQUID_OOZE (EC_GROUP_STATUS << 9) | 0x55
+#define EC_WORD_COLOR_CHANGE (EC_GROUP_STATUS << 9) | 0x56
+#define EC_WORD_SOUNDPROOF (EC_GROUP_STATUS << 9) | 0x57
+#define EC_WORD_EFFECT_SPORE (EC_GROUP_STATUS << 9) | 0x58
+#define EC_WORD_PKRS (EC_GROUP_STATUS << 9) | 0x59
+#define EC_WORD_FIRE (EC_GROUP_STATUS << 9) | 0x5a
+#define EC_WORD_FLAME_BODY (EC_GROUP_STATUS << 9) | 0x5b
+#define EC_WORD_MINUS (EC_GROUP_STATUS << 9) | 0x5c
+#define EC_WORD_OWN_TEMPO (EC_GROUP_STATUS << 9) | 0x5d
+#define EC_WORD_MAGMA_ARMOR (EC_GROUP_STATUS << 9) | 0x5e
+#define EC_WORD_WATER (EC_GROUP_STATUS << 9) | 0x5f
+#define EC_WORD_WATER_VEIL (EC_GROUP_STATUS << 9) | 0x60
+#define EC_WORD_BUG (EC_GROUP_STATUS << 9) | 0x61
+#define EC_WORD_SWARM (EC_GROUP_STATUS << 9) | 0x62
+#define EC_WORD_CUTE_CHARM (EC_GROUP_STATUS << 9) | 0x63
+#define EC_WORD_IMMUNITY (EC_GROUP_STATUS << 9) | 0x64
+#define EC_WORD_BLAZE (EC_GROUP_STATUS << 9) | 0x65
+#define EC_WORD_PICKUP (EC_GROUP_STATUS << 9) | 0x66
+#define EC_WORD_PATTERN (EC_GROUP_STATUS << 9) | 0x67
+#define EC_WORD_FLASH_FIRE (EC_GROUP_STATUS << 9) | 0x68
+#define EC_WORD_VITAL_SPIRIT (EC_GROUP_STATUS << 9) | 0x69
+#define EC_WORD_CHLOROPHYLL (EC_GROUP_STATUS << 9) | 0x6a
+#define EC_WORD_PURE_POWER (EC_GROUP_STATUS << 9) | 0x6b
+#define EC_WORD_SHIELD_DUST (EC_GROUP_STATUS << 9) | 0x6c
+
+// BATTLE
+#define EC_WORD_MATCH_UP (EC_GROUP_BATTLE << 9) | 0x0
+#define EC_WORD_GO (EC_GROUP_BATTLE << 9) | 0x1
+#define EC_WORD_NO_1 (EC_GROUP_BATTLE << 9) | 0x2
+#define EC_WORD_DECIDE (EC_GROUP_BATTLE << 9) | 0x3
+#define EC_WORD_LET_ME_WIN (EC_GROUP_BATTLE << 9) | 0x4
+#define EC_WORD_WINS (EC_GROUP_BATTLE << 9) | 0x5
+#define EC_WORD_WIN (EC_GROUP_BATTLE << 9) | 0x6
+#define EC_WORD_WON (EC_GROUP_BATTLE << 9) | 0x7
+#define EC_WORD_IF_I_WIN (EC_GROUP_BATTLE << 9) | 0x8
+#define EC_WORD_WHEN_I_WIN (EC_GROUP_BATTLE << 9) | 0x9
+#define EC_WORD_CAN_T_WIN (EC_GROUP_BATTLE << 9) | 0xa
+#define EC_WORD_CAN_WIN (EC_GROUP_BATTLE << 9) | 0xb
+#define EC_WORD_NO_MATCH (EC_GROUP_BATTLE << 9) | 0xc
+#define EC_WORD_SPIRIT (EC_GROUP_BATTLE << 9) | 0xd
+#define EC_WORD_DECIDED (EC_GROUP_BATTLE << 9) | 0xe
+#define EC_WORD_TRUMP_CARD (EC_GROUP_BATTLE << 9) | 0xf
+#define EC_WORD_TAKE_THAT (EC_GROUP_BATTLE << 9) | 0x10
+#define EC_WORD_COME_ON (EC_GROUP_BATTLE << 9) | 0x11
+#define EC_WORD_ATTACK (EC_GROUP_BATTLE << 9) | 0x12
+#define EC_WORD_SURRENDER (EC_GROUP_BATTLE << 9) | 0x13
+#define EC_WORD_GUTSY (EC_GROUP_BATTLE << 9) | 0x14
+#define EC_WORD_TALENT (EC_GROUP_BATTLE << 9) | 0x15
+#define EC_WORD_STRATEGY (EC_GROUP_BATTLE << 9) | 0x16
+#define EC_WORD_SMITE (EC_GROUP_BATTLE << 9) | 0x17
+#define EC_WORD_MATCH (EC_GROUP_BATTLE << 9) | 0x18
+#define EC_WORD_VICTORY (EC_GROUP_BATTLE << 9) | 0x19
+#define EC_WORD_OFFENSIVE (EC_GROUP_BATTLE << 9) | 0x1a
+#define EC_WORD_SENSE (EC_GROUP_BATTLE << 9) | 0x1b
+#define EC_WORD_VERSUS (EC_GROUP_BATTLE << 9) | 0x1c
+#define EC_WORD_FIGHTS (EC_GROUP_BATTLE << 9) | 0x1d
+#define EC_WORD_POWER (EC_GROUP_BATTLE << 9) | 0x1e
+#define EC_WORD_CHALLENGE (EC_GROUP_BATTLE << 9) | 0x1f
+#define EC_WORD_STRONG (EC_GROUP_BATTLE << 9) | 0x20
+#define EC_WORD_TOO_STRONG (EC_GROUP_BATTLE << 9) | 0x21
+#define EC_WORD_GO_EASY (EC_GROUP_BATTLE << 9) | 0x22
+#define EC_WORD_FOE (EC_GROUP_BATTLE << 9) | 0x23
+#define EC_WORD_GENIUS (EC_GROUP_BATTLE << 9) | 0x24
+#define EC_WORD_LEGEND (EC_GROUP_BATTLE << 9) | 0x25
+#define EC_WORD_ESCAPE (EC_GROUP_BATTLE << 9) | 0x26
+#define EC_WORD_AIM (EC_GROUP_BATTLE << 9) | 0x27
+#define EC_WORD_BATTLE (EC_GROUP_BATTLE << 9) | 0x28
+#define EC_WORD_FIGHT (EC_GROUP_BATTLE << 9) | 0x29
+#define EC_WORD_RESUSCITATE (EC_GROUP_BATTLE << 9) | 0x2a
+#define EC_WORD_POINTS (EC_GROUP_BATTLE << 9) | 0x2b
+#define EC_WORD_SERIOUS (EC_GROUP_BATTLE << 9) | 0x2c
+#define EC_WORD_GIVE_UP (EC_GROUP_BATTLE << 9) | 0x2d
+#define EC_WORD_LOSS (EC_GROUP_BATTLE << 9) | 0x2e
+#define EC_WORD_IF_I_LOSE (EC_GROUP_BATTLE << 9) | 0x2f
+#define EC_WORD_LOST (EC_GROUP_BATTLE << 9) | 0x30
+#define EC_WORD_LOSE (EC_GROUP_BATTLE << 9) | 0x31
+#define EC_WORD_GUARD (EC_GROUP_BATTLE << 9) | 0x32
+#define EC_WORD_PARTNER (EC_GROUP_BATTLE << 9) | 0x33
+#define EC_WORD_REJECT (EC_GROUP_BATTLE << 9) | 0x34
+#define EC_WORD_ACCEPT (EC_GROUP_BATTLE << 9) | 0x35
+#define EC_WORD_INVINCIBLE (EC_GROUP_BATTLE << 9) | 0x36
+#define EC_WORD_RECEIVED (EC_GROUP_BATTLE << 9) | 0x37
+#define EC_WORD_EASY (EC_GROUP_BATTLE << 9) | 0x38
+#define EC_WORD_WEAK (EC_GROUP_BATTLE << 9) | 0x39
+#define EC_WORD_TOO_WEAK (EC_GROUP_BATTLE << 9) | 0x3a
+#define EC_WORD_PUSHOVER (EC_GROUP_BATTLE << 9) | 0x3b
+#define EC_WORD_LEADER (EC_GROUP_BATTLE << 9) | 0x3c
+#define EC_WORD_RULE (EC_GROUP_BATTLE << 9) | 0x3d
+#define EC_WORD_MOVE (EC_GROUP_BATTLE << 9) | 0x3e
+
+// GREETINGS
+#define EC_WORD_THANKS (EC_GROUP_GREETINGS << 9) | 0x0
+#define EC_WORD_YES (EC_GROUP_GREETINGS << 9) | 0x1
+#define EC_WORD_HERE_GOES (EC_GROUP_GREETINGS << 9) | 0x2
+#define EC_WORD_HERE_I_COME (EC_GROUP_GREETINGS << 9) | 0x3
+#define EC_WORD_HERE_IT_IS (EC_GROUP_GREETINGS << 9) | 0x4
+#define EC_WORD_YEAH (EC_GROUP_GREETINGS << 9) | 0x5
+#define EC_WORD_WELCOME (EC_GROUP_GREETINGS << 9) | 0x6
+#define EC_WORD_OI (EC_GROUP_GREETINGS << 9) | 0x7
+#define EC_WORD_HOW_DO (EC_GROUP_GREETINGS << 9) | 0x8
+#define EC_WORD_CONGRATS (EC_GROUP_GREETINGS << 9) | 0x9
+#define EC_WORD_GIVE_ME (EC_GROUP_GREETINGS << 9) | 0xa
+#define EC_WORD_SORRY (EC_GROUP_GREETINGS << 9) | 0xb
+#define EC_WORD_APOLOGIZE (EC_GROUP_GREETINGS << 9) | 0xc
+#define EC_WORD_FORGIVE (EC_GROUP_GREETINGS << 9) | 0xd
+#define EC_WORD_HEY_THERE (EC_GROUP_GREETINGS << 9) | 0xe
+#define EC_WORD_HELLO (EC_GROUP_GREETINGS << 9) | 0xf
+#define EC_WORD_GOOD_BYE (EC_GROUP_GREETINGS << 9) | 0x10
+#define EC_WORD_THANK_YOU (EC_GROUP_GREETINGS << 9) | 0x11
+#define EC_WORD_I_VE_ARRIVED (EC_GROUP_GREETINGS << 9) | 0x12
+#define EC_WORD_PARDON (EC_GROUP_GREETINGS << 9) | 0x13
+#define EC_WORD_EXCUSE (EC_GROUP_GREETINGS << 9) | 0x14
+#define EC_WORD_SEE_YA (EC_GROUP_GREETINGS << 9) | 0x15
+#define EC_WORD_EXCUSE_ME (EC_GROUP_GREETINGS << 9) | 0x16
+#define EC_WORD_WELL_THEN (EC_GROUP_GREETINGS << 9) | 0x17
+#define EC_WORD_GO_AHEAD (EC_GROUP_GREETINGS << 9) | 0x18
+#define EC_WORD_APPRECIATE (EC_GROUP_GREETINGS << 9) | 0x19
+#define EC_WORD_HEY_QUES (EC_GROUP_GREETINGS << 9) | 0x1a
+#define EC_WORD_WHAT_S_UP_QUES (EC_GROUP_GREETINGS << 9) | 0x1b
+#define EC_WORD_HUH_QUES (EC_GROUP_GREETINGS << 9) | 0x1c
+#define EC_WORD_NO (EC_GROUP_GREETINGS << 9) | 0x1d
+#define EC_WORD_HI (EC_GROUP_GREETINGS << 9) | 0x1e
+#define EC_WORD_YEAH_YEAH (EC_GROUP_GREETINGS << 9) | 0x1f
+#define EC_WORD_BYE_BYE (EC_GROUP_GREETINGS << 9) | 0x20
+#define EC_WORD_MEET_YOU (EC_GROUP_GREETINGS << 9) | 0x21
+#define EC_WORD_HEY (EC_GROUP_GREETINGS << 9) | 0x22
+#define EC_WORD_SMELL (EC_GROUP_GREETINGS << 9) | 0x23
+#define EC_WORD_LISTENING (EC_GROUP_GREETINGS << 9) | 0x24
+#define EC_WORD_HOO_HAH (EC_GROUP_GREETINGS << 9) | 0x25
+#define EC_WORD_YAHOO (EC_GROUP_GREETINGS << 9) | 0x26
+#define EC_WORD_YO (EC_GROUP_GREETINGS << 9) | 0x27
+#define EC_WORD_COME_OVER (EC_GROUP_GREETINGS << 9) | 0x28
+#define EC_WORD_COUNT_ON (EC_GROUP_GREETINGS << 9) | 0x29
+
+// PEOPLE
+#define EC_WORD_OPPONENT (EC_GROUP_PEOPLE << 9) | 0x0
+#define EC_WORD_I (EC_GROUP_PEOPLE << 9) | 0x1
+#define EC_WORD_YOU (EC_GROUP_PEOPLE << 9) | 0x2
+#define EC_WORD_YOURS (EC_GROUP_PEOPLE << 9) | 0x3
+#define EC_WORD_SON (EC_GROUP_PEOPLE << 9) | 0x4
+#define EC_WORD_YOUR (EC_GROUP_PEOPLE << 9) | 0x5
+#define EC_WORD_YOU_RE (EC_GROUP_PEOPLE << 9) | 0x6
+#define EC_WORD_YOU_VE (EC_GROUP_PEOPLE << 9) | 0x7
+#define EC_WORD_MOTHER (EC_GROUP_PEOPLE << 9) | 0x8
+#define EC_WORD_GRANDFATHER (EC_GROUP_PEOPLE << 9) | 0x9
+#define EC_WORD_UNCLE (EC_GROUP_PEOPLE << 9) | 0xa
+#define EC_WORD_FATHER (EC_GROUP_PEOPLE << 9) | 0xb
+#define EC_WORD_BOY (EC_GROUP_PEOPLE << 9) | 0xc
+#define EC_WORD_ADULT (EC_GROUP_PEOPLE << 9) | 0xd
+#define EC_WORD_BROTHER (EC_GROUP_PEOPLE << 9) | 0xe
+#define EC_WORD_SISTER (EC_GROUP_PEOPLE << 9) | 0xf
+#define EC_WORD_GRANDMOTHER (EC_GROUP_PEOPLE << 9) | 0x10
+#define EC_WORD_AUNT (EC_GROUP_PEOPLE << 9) | 0x11
+#define EC_WORD_PARENT (EC_GROUP_PEOPLE << 9) | 0x12
+#define EC_WORD_MAN (EC_GROUP_PEOPLE << 9) | 0x13
+#define EC_WORD_ME (EC_GROUP_PEOPLE << 9) | 0x14
+#define EC_WORD_GIRL (EC_GROUP_PEOPLE << 9) | 0x15
+#define EC_WORD_BABE (EC_GROUP_PEOPLE << 9) | 0x16
+#define EC_WORD_FAMILY (EC_GROUP_PEOPLE << 9) | 0x17
+#define EC_WORD_HER (EC_GROUP_PEOPLE << 9) | 0x18
+#define EC_WORD_HIM (EC_GROUP_PEOPLE << 9) | 0x19
+#define EC_WORD_HE (EC_GROUP_PEOPLE << 9) | 0x1a
+#define EC_WORD_PLACE (EC_GROUP_PEOPLE << 9) | 0x1b
+#define EC_WORD_DAUGHTER (EC_GROUP_PEOPLE << 9) | 0x1c
+#define EC_WORD_HIS (EC_GROUP_PEOPLE << 9) | 0x1d
+#define EC_WORD_HE_S (EC_GROUP_PEOPLE << 9) | 0x1e
+#define EC_WORD_AREN_T (EC_GROUP_PEOPLE << 9) | 0x1f
+#define EC_WORD_SIBLINGS (EC_GROUP_PEOPLE << 9) | 0x20
+#define EC_WORD_KID (EC_GROUP_PEOPLE << 9) | 0x21
+#define EC_WORD_CHILDREN (EC_GROUP_PEOPLE << 9) | 0x22
+#define EC_WORD_MR (EC_GROUP_PEOPLE << 9) | 0x23
+#define EC_WORD_MRS (EC_GROUP_PEOPLE << 9) | 0x24
+#define EC_WORD_MYSELF (EC_GROUP_PEOPLE << 9) | 0x25
+#define EC_WORD_I_WAS (EC_GROUP_PEOPLE << 9) | 0x26
+#define EC_WORD_TO_ME (EC_GROUP_PEOPLE << 9) | 0x27
+#define EC_WORD_MY (EC_GROUP_PEOPLE << 9) | 0x28
+#define EC_WORD_I_AM (EC_GROUP_PEOPLE << 9) | 0x29
+#define EC_WORD_I_VE (EC_GROUP_PEOPLE << 9) | 0x2a
+#define EC_WORD_WHO (EC_GROUP_PEOPLE << 9) | 0x2b
+#define EC_WORD_SOMEONE (EC_GROUP_PEOPLE << 9) | 0x2c
+#define EC_WORD_WHO_WAS (EC_GROUP_PEOPLE << 9) | 0x2d
+#define EC_WORD_TO_WHOM (EC_GROUP_PEOPLE << 9) | 0x2e
+#define EC_WORD_WHOSE (EC_GROUP_PEOPLE << 9) | 0x2f
+#define EC_WORD_WHO_IS (EC_GROUP_PEOPLE << 9) | 0x30
+#define EC_WORD_IT_S (EC_GROUP_PEOPLE << 9) | 0x31
+#define EC_WORD_LADY (EC_GROUP_PEOPLE << 9) | 0x32
+#define EC_WORD_FRIEND (EC_GROUP_PEOPLE << 9) | 0x33
+#define EC_WORD_ALLY (EC_GROUP_PEOPLE << 9) | 0x34
+#define EC_WORD_PERSON (EC_GROUP_PEOPLE << 9) | 0x35
+#define EC_WORD_DUDE (EC_GROUP_PEOPLE << 9) | 0x36
+#define EC_WORD_THEY (EC_GROUP_PEOPLE << 9) | 0x37
+#define EC_WORD_THEY_WERE (EC_GROUP_PEOPLE << 9) | 0x38
+#define EC_WORD_TO_THEM (EC_GROUP_PEOPLE << 9) | 0x39
+#define EC_WORD_THEIR (EC_GROUP_PEOPLE << 9) | 0x3a
+#define EC_WORD_THEY_RE (EC_GROUP_PEOPLE << 9) | 0x3b
+#define EC_WORD_THEY_VE (EC_GROUP_PEOPLE << 9) | 0x3c
+#define EC_WORD_WE (EC_GROUP_PEOPLE << 9) | 0x3d
+#define EC_WORD_BEEN (EC_GROUP_PEOPLE << 9) | 0x3e
+#define EC_WORD_TO_US (EC_GROUP_PEOPLE << 9) | 0x3f
+#define EC_WORD_OUR (EC_GROUP_PEOPLE << 9) | 0x40
+#define EC_WORD_WE_RE (EC_GROUP_PEOPLE << 9) | 0x41
+#define EC_WORD_RIVAL (EC_GROUP_PEOPLE << 9) | 0x42
+#define EC_WORD_WE_VE (EC_GROUP_PEOPLE << 9) | 0x43
+#define EC_WORD_WOMAN (EC_GROUP_PEOPLE << 9) | 0x44
+#define EC_WORD_SHE (EC_GROUP_PEOPLE << 9) | 0x45
+#define EC_WORD_SHE_WAS (EC_GROUP_PEOPLE << 9) | 0x46
+#define EC_WORD_TO_HER (EC_GROUP_PEOPLE << 9) | 0x47
+#define EC_WORD_HERS (EC_GROUP_PEOPLE << 9) | 0x48
+#define EC_WORD_SHE_IS (EC_GROUP_PEOPLE << 9) | 0x49
+#define EC_WORD_SOME (EC_GROUP_PEOPLE << 9) | 0x4a
+
+// VOICES
+#define EC_WORD_EXCL (EC_GROUP_VOICES << 9) | 0x0
+#define EC_WORD_EXCL_EXCL (EC_GROUP_VOICES << 9) | 0x1
+#define EC_WORD_QUES_EXCL (EC_GROUP_VOICES << 9) | 0x2
+#define EC_WORD_QUES (EC_GROUP_VOICES << 9) | 0x3
+#define EC_WORD_ELLIPSIS (EC_GROUP_VOICES << 9) | 0x4
+#define EC_WORD_ELLIPSIS_EXCL (EC_GROUP_VOICES << 9) | 0x5
+#define EC_WORD_ELLIPSIS_ELLIPSIS_ELLIPSIS (EC_GROUP_VOICES << 9) | 0x6
+#define EC_WORD_DASH (EC_GROUP_VOICES << 9) | 0x7
+#define EC_WORD_DASH_DASH_DASH (EC_GROUP_VOICES << 9) | 0x8
+#define EC_WORD_UH_OH (EC_GROUP_VOICES << 9) | 0x9
+#define EC_WORD_WAAAH (EC_GROUP_VOICES << 9) | 0xa
+#define EC_WORD_AHAHA (EC_GROUP_VOICES << 9) | 0xb
+#define EC_WORD_OH_QUES (EC_GROUP_VOICES << 9) | 0xc
+#define EC_WORD_NOPE (EC_GROUP_VOICES << 9) | 0xd
+#define EC_WORD_URGH (EC_GROUP_VOICES << 9) | 0xe
+#define EC_WORD_HMM (EC_GROUP_VOICES << 9) | 0xf
+#define EC_WORD_WHOAH (EC_GROUP_VOICES << 9) | 0x10
+#define EC_WORD_WROOOAAR_EXCL (EC_GROUP_VOICES << 9) | 0x11
+#define EC_WORD_WOW (EC_GROUP_VOICES << 9) | 0x12
+#define EC_WORD_GIGGLE (EC_GROUP_VOICES << 9) | 0x13
+#define EC_WORD_SIGH (EC_GROUP_VOICES << 9) | 0x14
+#define EC_WORD_UNBELIEVABLE (EC_GROUP_VOICES << 9) | 0x15
+#define EC_WORD_CRIES (EC_GROUP_VOICES << 9) | 0x16
+#define EC_WORD_AGREE (EC_GROUP_VOICES << 9) | 0x17
+#define EC_WORD_EH_QUES (EC_GROUP_VOICES << 9) | 0x18
+#define EC_WORD_CRY (EC_GROUP_VOICES << 9) | 0x19
+#define EC_WORD_EHEHE (EC_GROUP_VOICES << 9) | 0x1a
+#define EC_WORD_OI_OI_OI (EC_GROUP_VOICES << 9) | 0x1b
+#define EC_WORD_OH_YEAH (EC_GROUP_VOICES << 9) | 0x1c
+#define EC_WORD_OH (EC_GROUP_VOICES << 9) | 0x1d
+#define EC_WORD_OOPS (EC_GROUP_VOICES << 9) | 0x1e
+#define EC_WORD_SHOCKED (EC_GROUP_VOICES << 9) | 0x1f
+#define EC_WORD_EEK (EC_GROUP_VOICES << 9) | 0x20
+#define EC_WORD_GRAAAH (EC_GROUP_VOICES << 9) | 0x21
+#define EC_WORD_GWAHAHAHA (EC_GROUP_VOICES << 9) | 0x22
+#define EC_WORD_WAY (EC_GROUP_VOICES << 9) | 0x23
+#define EC_WORD_TCH (EC_GROUP_VOICES << 9) | 0x24
+#define EC_WORD_HEHE (EC_GROUP_VOICES << 9) | 0x25
+#define EC_WORD_HAH (EC_GROUP_VOICES << 9) | 0x26
+#define EC_WORD_YUP (EC_GROUP_VOICES << 9) | 0x27
+#define EC_WORD_HAHAHA (EC_GROUP_VOICES << 9) | 0x28
+#define EC_WORD_AIYEEH (EC_GROUP_VOICES << 9) | 0x29
+#define EC_WORD_HIYAH (EC_GROUP_VOICES << 9) | 0x2a
+#define EC_WORD_FUFUFU (EC_GROUP_VOICES << 9) | 0x2b
+#define EC_WORD_LOL (EC_GROUP_VOICES << 9) | 0x2c
+#define EC_WORD_SNORT (EC_GROUP_VOICES << 9) | 0x2d
+#define EC_WORD_HUMPH (EC_GROUP_VOICES << 9) | 0x2e
+#define EC_WORD_HEHEHE (EC_GROUP_VOICES << 9) | 0x2f
+#define EC_WORD_HEH (EC_GROUP_VOICES << 9) | 0x30
+#define EC_WORD_HOHOHO (EC_GROUP_VOICES << 9) | 0x31
+#define EC_WORD_UH_HUH (EC_GROUP_VOICES << 9) | 0x32
+#define EC_WORD_OH_DEAR (EC_GROUP_VOICES << 9) | 0x33
+#define EC_WORD_ARRGH (EC_GROUP_VOICES << 9) | 0x34
+#define EC_WORD_MUFUFU (EC_GROUP_VOICES << 9) | 0x35
+#define EC_WORD_MMM (EC_GROUP_VOICES << 9) | 0x36
+#define EC_WORD_OH_KAY (EC_GROUP_VOICES << 9) | 0x37
+#define EC_WORD_OKAY (EC_GROUP_VOICES << 9) | 0x38
+#define EC_WORD_LALALA (EC_GROUP_VOICES << 9) | 0x39
+#define EC_WORD_YAY (EC_GROUP_VOICES << 9) | 0x3a
+#define EC_WORD_AWW (EC_GROUP_VOICES << 9) | 0x3b
+#define EC_WORD_WOWEE (EC_GROUP_VOICES << 9) | 0x3c
+#define EC_WORD_GWAH (EC_GROUP_VOICES << 9) | 0x3d
+#define EC_WORD_WAHAHAHA (EC_GROUP_VOICES << 9) | 0x3e
+
+// SPEECH
+#define EC_WORD_LISTEN (EC_GROUP_SPEECH << 9) | 0x0
+#define EC_WORD_NOT_VERY (EC_GROUP_SPEECH << 9) | 0x1
+#define EC_WORD_MEAN (EC_GROUP_SPEECH << 9) | 0x2
+#define EC_WORD_LIE (EC_GROUP_SPEECH << 9) | 0x3
+#define EC_WORD_LAY (EC_GROUP_SPEECH << 9) | 0x4
+#define EC_WORD_RECOMMEND (EC_GROUP_SPEECH << 9) | 0x5
+#define EC_WORD_NITWIT (EC_GROUP_SPEECH << 9) | 0x6
+#define EC_WORD_QUITE (EC_GROUP_SPEECH << 9) | 0x7
+#define EC_WORD_FROM (EC_GROUP_SPEECH << 9) | 0x8
+#define EC_WORD_FEELING (EC_GROUP_SPEECH << 9) | 0x9
+#define EC_WORD_BUT (EC_GROUP_SPEECH << 9) | 0xa
+#define EC_WORD_HOWEVER (EC_GROUP_SPEECH << 9) | 0xb
+#define EC_WORD_CASE (EC_GROUP_SPEECH << 9) | 0xc
+#define EC_WORD_THE (EC_GROUP_SPEECH << 9) | 0xd
+#define EC_WORD_MISS (EC_GROUP_SPEECH << 9) | 0xe
+#define EC_WORD_HOW (EC_GROUP_SPEECH << 9) | 0xf
+#define EC_WORD_HIT (EC_GROUP_SPEECH << 9) | 0x10
+#define EC_WORD_ENOUGH (EC_GROUP_SPEECH << 9) | 0x11
+#define EC_WORD_A_LOT (EC_GROUP_SPEECH << 9) | 0x12
+#define EC_WORD_A_LITTLE (EC_GROUP_SPEECH << 9) | 0x13
+#define EC_WORD_ABSOLUTELY (EC_GROUP_SPEECH << 9) | 0x14
+#define EC_WORD_AND (EC_GROUP_SPEECH << 9) | 0x15
+#define EC_WORD_ONLY (EC_GROUP_SPEECH << 9) | 0x16
+#define EC_WORD_AROUND (EC_GROUP_SPEECH << 9) | 0x17
+#define EC_WORD_PROBABLY (EC_GROUP_SPEECH << 9) | 0x18
+#define EC_WORD_IF (EC_GROUP_SPEECH << 9) | 0x19
+#define EC_WORD_VERY (EC_GROUP_SPEECH << 9) | 0x1a
+#define EC_WORD_A_TINY_BIT (EC_GROUP_SPEECH << 9) | 0x1b
+#define EC_WORD_WILD (EC_GROUP_SPEECH << 9) | 0x1c
+#define EC_WORD_THAT_S (EC_GROUP_SPEECH << 9) | 0x1d
+#define EC_WORD_JUST (EC_GROUP_SPEECH << 9) | 0x1e
+#define EC_WORD_EVEN_SO (EC_GROUP_SPEECH << 9) | 0x1f
+#define EC_WORD_MUST_BE (EC_GROUP_SPEECH << 9) | 0x20
+#define EC_WORD_NATURALLY (EC_GROUP_SPEECH << 9) | 0x21
+#define EC_WORD_FOR_NOW (EC_GROUP_SPEECH << 9) | 0x22
+#define EC_WORD_UNDERSTOOD (EC_GROUP_SPEECH << 9) | 0x23
+#define EC_WORD_JOKING (EC_GROUP_SPEECH << 9) | 0x24
+#define EC_WORD_READY (EC_GROUP_SPEECH << 9) | 0x25
+#define EC_WORD_SOMETHING (EC_GROUP_SPEECH << 9) | 0x26
+#define EC_WORD_SOMEHOW (EC_GROUP_SPEECH << 9) | 0x27
+#define EC_WORD_ALTHOUGH (EC_GROUP_SPEECH << 9) | 0x28
+#define EC_WORD_ALSO (EC_GROUP_SPEECH << 9) | 0x29
+#define EC_WORD_PERFECT (EC_GROUP_SPEECH << 9) | 0x2a
+#define EC_WORD_AS_MUCH_AS (EC_GROUP_SPEECH << 9) | 0x2b
+#define EC_WORD_REALLY (EC_GROUP_SPEECH << 9) | 0x2c
+#define EC_WORD_TRULY (EC_GROUP_SPEECH << 9) | 0x2d
+#define EC_WORD_SERIOUSLY (EC_GROUP_SPEECH << 9) | 0x2e
+#define EC_WORD_TOTALLY (EC_GROUP_SPEECH << 9) | 0x2f
+#define EC_WORD_UNTIL (EC_GROUP_SPEECH << 9) | 0x30
+#define EC_WORD_AS_IF (EC_GROUP_SPEECH << 9) | 0x31
+#define EC_WORD_MOOD (EC_GROUP_SPEECH << 9) | 0x32
+#define EC_WORD_RATHER (EC_GROUP_SPEECH << 9) | 0x33
+#define EC_WORD_AWFULLY (EC_GROUP_SPEECH << 9) | 0x34
+#define EC_WORD_MODE (EC_GROUP_SPEECH << 9) | 0x35
+#define EC_WORD_MORE (EC_GROUP_SPEECH << 9) | 0x36
+#define EC_WORD_TOO_LATE (EC_GROUP_SPEECH << 9) | 0x37
+#define EC_WORD_FINALLY (EC_GROUP_SPEECH << 9) | 0x38
+#define EC_WORD_ANY (EC_GROUP_SPEECH << 9) | 0x39
+#define EC_WORD_INSTEAD (EC_GROUP_SPEECH << 9) | 0x3a
+#define EC_WORD_FANTASTIC (EC_GROUP_SPEECH << 9) | 0x3b
+
+// ENDINGS
+#define EC_WORD_WILL (EC_GROUP_ENDINGS << 9) | 0x0
+#define EC_WORD_WILL_BE_HERE (EC_GROUP_ENDINGS << 9) | 0x1
+#define EC_WORD_OR (EC_GROUP_ENDINGS << 9) | 0x2
+#define EC_WORD_TIMES (EC_GROUP_ENDINGS << 9) | 0x3
+#define EC_WORD_WONDER (EC_GROUP_ENDINGS << 9) | 0x4
+#define EC_WORD_IS_IT_QUES (EC_GROUP_ENDINGS << 9) | 0x5
+#define EC_WORD_BE (EC_GROUP_ENDINGS << 9) | 0x6
+#define EC_WORD_GIMME (EC_GROUP_ENDINGS << 9) | 0x7
+#define EC_WORD_COULD (EC_GROUP_ENDINGS << 9) | 0x8
+#define EC_WORD_LIKELY_TO (EC_GROUP_ENDINGS << 9) | 0x9
+#define EC_WORD_WOULD (EC_GROUP_ENDINGS << 9) | 0xa
+#define EC_WORD_IS (EC_GROUP_ENDINGS << 9) | 0xb
+#define EC_WORD_ISN_T_IT_QUES (EC_GROUP_ENDINGS << 9) | 0xc
+#define EC_WORD_LET_S (EC_GROUP_ENDINGS << 9) | 0xd
+#define EC_WORD_OTHER (EC_GROUP_ENDINGS << 9) | 0xe
+#define EC_WORD_ARE (EC_GROUP_ENDINGS << 9) | 0xf
+#define EC_WORD_WAS (EC_GROUP_ENDINGS << 9) | 0x10
+#define EC_WORD_WERE (EC_GROUP_ENDINGS << 9) | 0x11
+#define EC_WORD_THOSE (EC_GROUP_ENDINGS << 9) | 0x12
+#define EC_WORD_ISN_T (EC_GROUP_ENDINGS << 9) | 0x13
+#define EC_WORD_WON_T (EC_GROUP_ENDINGS << 9) | 0x14
+#define EC_WORD_CAN_T (EC_GROUP_ENDINGS << 9) | 0x15
+#define EC_WORD_CAN (EC_GROUP_ENDINGS << 9) | 0x16
+#define EC_WORD_DON_T (EC_GROUP_ENDINGS << 9) | 0x17
+#define EC_WORD_DO (EC_GROUP_ENDINGS << 9) | 0x18
+#define EC_WORD_DOES (EC_GROUP_ENDINGS << 9) | 0x19
+#define EC_WORD_WHOM (EC_GROUP_ENDINGS << 9) | 0x1a
+#define EC_WORD_WHICH (EC_GROUP_ENDINGS << 9) | 0x1b
+#define EC_WORD_WASN_T (EC_GROUP_ENDINGS << 9) | 0x1c
+#define EC_WORD_WEREN_T (EC_GROUP_ENDINGS << 9) | 0x1d
+#define EC_WORD_HAVE (EC_GROUP_ENDINGS << 9) | 0x1e
+#define EC_WORD_HAVEN_T (EC_GROUP_ENDINGS << 9) | 0x1f
+#define EC_WORD_A (EC_GROUP_ENDINGS << 9) | 0x20
+#define EC_WORD_AN (EC_GROUP_ENDINGS << 9) | 0x21
+#define EC_WORD_NOT (EC_GROUP_ENDINGS << 9) | 0x22
+#define EC_WORD_THERE (EC_GROUP_ENDINGS << 9) | 0x23
+#define EC_WORD_OK_QUES (EC_GROUP_ENDINGS << 9) | 0x24
+#define EC_WORD_SO (EC_GROUP_ENDINGS << 9) | 0x25
+#define EC_WORD_MAYBE (EC_GROUP_ENDINGS << 9) | 0x26
+#define EC_WORD_ABOUT (EC_GROUP_ENDINGS << 9) | 0x27
+#define EC_WORD_OVER (EC_GROUP_ENDINGS << 9) | 0x28
+#define EC_WORD_IT (EC_GROUP_ENDINGS << 9) | 0x29
+#define EC_WORD_ALL (EC_GROUP_ENDINGS << 9) | 0x2a
+#define EC_WORD_FOR (EC_GROUP_ENDINGS << 9) | 0x2b
+#define EC_WORD_ON (EC_GROUP_ENDINGS << 9) | 0x2c
+#define EC_WORD_OFF (EC_GROUP_ENDINGS << 9) | 0x2d
+#define EC_WORD_AS (EC_GROUP_ENDINGS << 9) | 0x2e
+#define EC_WORD_TO (EC_GROUP_ENDINGS << 9) | 0x2f
+#define EC_WORD_WITH (EC_GROUP_ENDINGS << 9) | 0x30
+#define EC_WORD_BETTER (EC_GROUP_ENDINGS << 9) | 0x31
+#define EC_WORD_EVER (EC_GROUP_ENDINGS << 9) | 0x32
+#define EC_WORD_SINCE (EC_GROUP_ENDINGS << 9) | 0x33
+#define EC_WORD_OF (EC_GROUP_ENDINGS << 9) | 0x34
+#define EC_WORD_BELONGS_TO (EC_GROUP_ENDINGS << 9) | 0x35
+#define EC_WORD_AT (EC_GROUP_ENDINGS << 9) | 0x36
+#define EC_WORD_IN (EC_GROUP_ENDINGS << 9) | 0x37
+#define EC_WORD_OUT (EC_GROUP_ENDINGS << 9) | 0x38
+#define EC_WORD_TOO (EC_GROUP_ENDINGS << 9) | 0x39
+#define EC_WORD_LIKE (EC_GROUP_ENDINGS << 9) | 0x3a
+#define EC_WORD_DID (EC_GROUP_ENDINGS << 9) | 0x3b
+#define EC_WORD_DIDN_T (EC_GROUP_ENDINGS << 9) | 0x3c
+#define EC_WORD_DOESN_T (EC_GROUP_ENDINGS << 9) | 0x3d
+#define EC_WORD_WITHOUT (EC_GROUP_ENDINGS << 9) | 0x3e
+#define EC_WORD_AFTER (EC_GROUP_ENDINGS << 9) | 0x3f
+#define EC_WORD_BEFORE (EC_GROUP_ENDINGS << 9) | 0x40
+#define EC_WORD_WHILE (EC_GROUP_ENDINGS << 9) | 0x41
+#define EC_WORD_THAN (EC_GROUP_ENDINGS << 9) | 0x42
+#define EC_WORD_ONCE (EC_GROUP_ENDINGS << 9) | 0x43
+#define EC_WORD_ANYWHERE (EC_GROUP_ENDINGS << 9) | 0x44
+
+// FEELINGS
+#define EC_WORD_MEET (EC_GROUP_FEELINGS << 9) | 0x0
+#define EC_WORD_PLAY (EC_GROUP_FEELINGS << 9) | 0x1
+#define EC_WORD_HURRIED (EC_GROUP_FEELINGS << 9) | 0x2
+#define EC_WORD_GOES (EC_GROUP_FEELINGS << 9) | 0x3
+#define EC_WORD_GIDDY (EC_GROUP_FEELINGS << 9) | 0x4
+#define EC_WORD_HAPPY (EC_GROUP_FEELINGS << 9) | 0x5
+#define EC_WORD_HAPPINESS (EC_GROUP_FEELINGS << 9) | 0x6
+#define EC_WORD_EXCITE (EC_GROUP_FEELINGS << 9) | 0x7
+#define EC_WORD_IMPORTANT (EC_GROUP_FEELINGS << 9) | 0x8
+#define EC_WORD_FUNNY (EC_GROUP_FEELINGS << 9) | 0x9
+#define EC_WORD_GOT (EC_GROUP_FEELINGS << 9) | 0xa
+#define EC_WORD_GO_HOME (EC_GROUP_FEELINGS << 9) | 0xb
+#define EC_WORD_DISAPPOINTED (EC_GROUP_FEELINGS << 9) | 0xc
+#define EC_WORD_DISAPPOINTS (EC_GROUP_FEELINGS << 9) | 0xd
+#define EC_WORD_SAD (EC_GROUP_FEELINGS << 9) | 0xe
+#define EC_WORD_TRY (EC_GROUP_FEELINGS << 9) | 0xf
+#define EC_WORD_TRIES (EC_GROUP_FEELINGS << 9) | 0x10
+#define EC_WORD_HEARS (EC_GROUP_FEELINGS << 9) | 0x11
+#define EC_WORD_THINK (EC_GROUP_FEELINGS << 9) | 0x12
+#define EC_WORD_HEAR (EC_GROUP_FEELINGS << 9) | 0x13
+#define EC_WORD_WANTS (EC_GROUP_FEELINGS << 9) | 0x14
+#define EC_WORD_MISHEARD (EC_GROUP_FEELINGS << 9) | 0x15
+#define EC_WORD_DISLIKE (EC_GROUP_FEELINGS << 9) | 0x16
+#define EC_WORD_ANGRY (EC_GROUP_FEELINGS << 9) | 0x17
+#define EC_WORD_ANGER (EC_GROUP_FEELINGS << 9) | 0x18
+#define EC_WORD_SCARY (EC_GROUP_FEELINGS << 9) | 0x19
+#define EC_WORD_LONESOME (EC_GROUP_FEELINGS << 9) | 0x1a
+#define EC_WORD_DISAPPOINT (EC_GROUP_FEELINGS << 9) | 0x1b
+#define EC_WORD_JOY (EC_GROUP_FEELINGS << 9) | 0x1c
+#define EC_WORD_GETS (EC_GROUP_FEELINGS << 9) | 0x1d
+#define EC_WORD_NEVER (EC_GROUP_FEELINGS << 9) | 0x1e
+#define EC_WORD_DARN (EC_GROUP_FEELINGS << 9) | 0x1f
+#define EC_WORD_DOWNCAST (EC_GROUP_FEELINGS << 9) | 0x20
+#define EC_WORD_INCREDIBLE (EC_GROUP_FEELINGS << 9) | 0x21
+#define EC_WORD_LIKES (EC_GROUP_FEELINGS << 9) | 0x22
+#define EC_WORD_DISLIKES (EC_GROUP_FEELINGS << 9) | 0x23
+#define EC_WORD_BORING (EC_GROUP_FEELINGS << 9) | 0x24
+#define EC_WORD_CARE (EC_GROUP_FEELINGS << 9) | 0x25
+#define EC_WORD_CARES (EC_GROUP_FEELINGS << 9) | 0x26
+#define EC_WORD_ALL_RIGHT (EC_GROUP_FEELINGS << 9) | 0x27
+#define EC_WORD_ADORE (EC_GROUP_FEELINGS << 9) | 0x28
+#define EC_WORD_DISASTER (EC_GROUP_FEELINGS << 9) | 0x29
+#define EC_WORD_ENJOY (EC_GROUP_FEELINGS << 9) | 0x2a
+#define EC_WORD_ENJOYS (EC_GROUP_FEELINGS << 9) | 0x2b
+#define EC_WORD_EAT (EC_GROUP_FEELINGS << 9) | 0x2c
+#define EC_WORD_LACKING (EC_GROUP_FEELINGS << 9) | 0x2d
+#define EC_WORD_BAD (EC_GROUP_FEELINGS << 9) | 0x2e
+#define EC_WORD_HARD (EC_GROUP_FEELINGS << 9) | 0x2f
+#define EC_WORD_TERRIBLE (EC_GROUP_FEELINGS << 9) | 0x30
+#define EC_WORD_SHOULD (EC_GROUP_FEELINGS << 9) | 0x31
+#define EC_WORD_NICE (EC_GROUP_FEELINGS << 9) | 0x32
+#define EC_WORD_DRINK (EC_GROUP_FEELINGS << 9) | 0x33
+#define EC_WORD_SURPRISE (EC_GROUP_FEELINGS << 9) | 0x34
+#define EC_WORD_FEAR (EC_GROUP_FEELINGS << 9) | 0x35
+#define EC_WORD_WANT (EC_GROUP_FEELINGS << 9) | 0x36
+#define EC_WORD_WAIT (EC_GROUP_FEELINGS << 9) | 0x37
+#define EC_WORD_SATISFIED (EC_GROUP_FEELINGS << 9) | 0x38
+#define EC_WORD_SEE (EC_GROUP_FEELINGS << 9) | 0x39
+#define EC_WORD_RARE (EC_GROUP_FEELINGS << 9) | 0x3a
+#define EC_WORD_NEGATIVE (EC_GROUP_FEELINGS << 9) | 0x3b
+#define EC_WORD_DONE (EC_GROUP_FEELINGS << 9) | 0x3c
+#define EC_WORD_DANGER (EC_GROUP_FEELINGS << 9) | 0x3d
+#define EC_WORD_DEFEATED (EC_GROUP_FEELINGS << 9) | 0x3e
+#define EC_WORD_BEAT (EC_GROUP_FEELINGS << 9) | 0x3f
+#define EC_WORD_GREAT (EC_GROUP_FEELINGS << 9) | 0x40
+#define EC_WORD_ROMANTIC (EC_GROUP_FEELINGS << 9) | 0x41
+#define EC_WORD_QUESTION (EC_GROUP_FEELINGS << 9) | 0x42
+#define EC_WORD_UNDERSTAND (EC_GROUP_FEELINGS << 9) | 0x43
+#define EC_WORD_UNDERSTANDS (EC_GROUP_FEELINGS << 9) | 0x44
+
+// CONDITIONS
+#define EC_WORD_HOT (EC_GROUP_CONDITIONS << 9) | 0x0
+#define EC_WORD_EXISTS (EC_GROUP_CONDITIONS << 9) | 0x1
+#define EC_WORD_EXCESS (EC_GROUP_CONDITIONS << 9) | 0x2
+#define EC_WORD_APPROVED (EC_GROUP_CONDITIONS << 9) | 0x3
+#define EC_WORD_HAS (EC_GROUP_CONDITIONS << 9) | 0x4
+#define EC_WORD_GOOD (EC_GROUP_CONDITIONS << 9) | 0x5
+#define EC_WORD_LESS (EC_GROUP_CONDITIONS << 9) | 0x6
+#define EC_WORD_MOMENTUM (EC_GROUP_CONDITIONS << 9) | 0x7
+#define EC_WORD_GOING (EC_GROUP_CONDITIONS << 9) | 0x8
+#define EC_WORD_WEIRD (EC_GROUP_CONDITIONS << 9) | 0x9
+#define EC_WORD_BUSY (EC_GROUP_CONDITIONS << 9) | 0xa
+#define EC_WORD_TOGETHER (EC_GROUP_CONDITIONS << 9) | 0xb
+#define EC_WORD_FULL (EC_GROUP_CONDITIONS << 9) | 0xc
+#define EC_WORD_ABSENT (EC_GROUP_CONDITIONS << 9) | 0xd
+#define EC_WORD_BEING (EC_GROUP_CONDITIONS << 9) | 0xe
+#define EC_WORD_NEED (EC_GROUP_CONDITIONS << 9) | 0xf
+#define EC_WORD_TASTY (EC_GROUP_CONDITIONS << 9) | 0x10
+#define EC_WORD_SKILLED (EC_GROUP_CONDITIONS << 9) | 0x11
+#define EC_WORD_NOISY (EC_GROUP_CONDITIONS << 9) | 0x12
+#define EC_WORD_BIG (EC_GROUP_CONDITIONS << 9) | 0x13
+#define EC_WORD_LATE (EC_GROUP_CONDITIONS << 9) | 0x14
+#define EC_WORD_CLOSE (EC_GROUP_CONDITIONS << 9) | 0x15
+#define EC_WORD_DOCILE (EC_GROUP_CONDITIONS << 9) | 0x16
+#define EC_WORD_AMUSING (EC_GROUP_CONDITIONS << 9) | 0x17
+#define EC_WORD_ENTERTAINING (EC_GROUP_CONDITIONS << 9) | 0x18
+#define EC_WORD_PERFECTION (EC_GROUP_CONDITIONS << 9) | 0x19
+#define EC_WORD_PRETTY (EC_GROUP_CONDITIONS << 9) | 0x1a
+#define EC_WORD_HEALTHY (EC_GROUP_CONDITIONS << 9) | 0x1b
+#define EC_WORD_EXCELLENT (EC_GROUP_CONDITIONS << 9) | 0x1c
+#define EC_WORD_UPSIDE_DOWN (EC_GROUP_CONDITIONS << 9) | 0x1d
+#define EC_WORD_COLD (EC_GROUP_CONDITIONS << 9) | 0x1e
+#define EC_WORD_REFRESHING (EC_GROUP_CONDITIONS << 9) | 0x1f
+#define EC_WORD_UNAVOIDABLE (EC_GROUP_CONDITIONS << 9) | 0x20
+#define EC_WORD_MUCH (EC_GROUP_CONDITIONS << 9) | 0x21
+#define EC_WORD_OVERWHELMING (EC_GROUP_CONDITIONS << 9) | 0x22
+#define EC_WORD_FABULOUS (EC_GROUP_CONDITIONS << 9) | 0x23
+#define EC_WORD_ELSE (EC_GROUP_CONDITIONS << 9) | 0x24
+#define EC_WORD_EXPENSIVE (EC_GROUP_CONDITIONS << 9) | 0x25
+#define EC_WORD_CORRECT (EC_GROUP_CONDITIONS << 9) | 0x26
+#define EC_WORD_IMPOSSIBLE (EC_GROUP_CONDITIONS << 9) | 0x27
+#define EC_WORD_SMALL (EC_GROUP_CONDITIONS << 9) | 0x28
+#define EC_WORD_DIFFERENT (EC_GROUP_CONDITIONS << 9) | 0x29
+#define EC_WORD_TIRED (EC_GROUP_CONDITIONS << 9) | 0x2a
+#define EC_WORD_SKILL (EC_GROUP_CONDITIONS << 9) | 0x2b
+#define EC_WORD_TOP (EC_GROUP_CONDITIONS << 9) | 0x2c
+#define EC_WORD_NON_STOP (EC_GROUP_CONDITIONS << 9) | 0x2d
+#define EC_WORD_PREPOSTEROUS (EC_GROUP_CONDITIONS << 9) | 0x2e
+#define EC_WORD_NONE (EC_GROUP_CONDITIONS << 9) | 0x2f
+#define EC_WORD_NOTHING (EC_GROUP_CONDITIONS << 9) | 0x30
+#define EC_WORD_NATURAL (EC_GROUP_CONDITIONS << 9) | 0x31
+#define EC_WORD_BECOMES (EC_GROUP_CONDITIONS << 9) | 0x32
+#define EC_WORD_LUKEWARM (EC_GROUP_CONDITIONS << 9) | 0x33
+#define EC_WORD_FAST (EC_GROUP_CONDITIONS << 9) | 0x34
+#define EC_WORD_LOW (EC_GROUP_CONDITIONS << 9) | 0x35
+#define EC_WORD_AWFUL (EC_GROUP_CONDITIONS << 9) | 0x36
+#define EC_WORD_ALONE (EC_GROUP_CONDITIONS << 9) | 0x37
+#define EC_WORD_BORED (EC_GROUP_CONDITIONS << 9) | 0x38
+#define EC_WORD_SECRET (EC_GROUP_CONDITIONS << 9) | 0x39
+#define EC_WORD_MYSTERY (EC_GROUP_CONDITIONS << 9) | 0x3a
+#define EC_WORD_LACKS (EC_GROUP_CONDITIONS << 9) | 0x3b
+#define EC_WORD_BEST (EC_GROUP_CONDITIONS << 9) | 0x3c
+#define EC_WORD_LOUSY (EC_GROUP_CONDITIONS << 9) | 0x3d
+#define EC_WORD_MISTAKE (EC_GROUP_CONDITIONS << 9) | 0x3e
+#define EC_WORD_KIND (EC_GROUP_CONDITIONS << 9) | 0x3f
+#define EC_WORD_WELL (EC_GROUP_CONDITIONS << 9) | 0x40
+#define EC_WORD_WEAKENED (EC_GROUP_CONDITIONS << 9) | 0x41
+#define EC_WORD_SIMPLE (EC_GROUP_CONDITIONS << 9) | 0x42
+#define EC_WORD_SEEMS (EC_GROUP_CONDITIONS << 9) | 0x43
+#define EC_WORD_BADLY (EC_GROUP_CONDITIONS << 9) | 0x44
+
+// ACTIONS
+#define EC_WORD_MEETS (EC_GROUP_ACTIONS << 9) | 0x0
+#define EC_WORD_CONCEDE (EC_GROUP_ACTIONS << 9) | 0x1
+#define EC_WORD_GIVE (EC_GROUP_ACTIONS << 9) | 0x2
+#define EC_WORD_GIVES (EC_GROUP_ACTIONS << 9) | 0x3
+#define EC_WORD_PLAYED (EC_GROUP_ACTIONS << 9) | 0x4
+#define EC_WORD_PLAYS (EC_GROUP_ACTIONS << 9) | 0x5
+#define EC_WORD_COLLECT (EC_GROUP_ACTIONS << 9) | 0x6
+#define EC_WORD_WALKING (EC_GROUP_ACTIONS << 9) | 0x7
+#define EC_WORD_WALKS (EC_GROUP_ACTIONS << 9) | 0x8
+#define EC_WORD_SAYS (EC_GROUP_ACTIONS << 9) | 0x9
+#define EC_WORD_WENT (EC_GROUP_ACTIONS << 9) | 0xa
+#define EC_WORD_SAID (EC_GROUP_ACTIONS << 9) | 0xb
+#define EC_WORD_WAKE_UP (EC_GROUP_ACTIONS << 9) | 0xc
+#define EC_WORD_WAKES_UP (EC_GROUP_ACTIONS << 9) | 0xd
+#define EC_WORD_ANGERS (EC_GROUP_ACTIONS << 9) | 0xe
+#define EC_WORD_TEACH (EC_GROUP_ACTIONS << 9) | 0xf
+#define EC_WORD_TEACHES (EC_GROUP_ACTIONS << 9) | 0x10
+#define EC_WORD_PLEASE (EC_GROUP_ACTIONS << 9) | 0x11
+#define EC_WORD_LEARN (EC_GROUP_ACTIONS << 9) | 0x12
+#define EC_WORD_CHANGE (EC_GROUP_ACTIONS << 9) | 0x13
+#define EC_WORD_STORY (EC_GROUP_ACTIONS << 9) | 0x14
+#define EC_WORD_TRUST (EC_GROUP_ACTIONS << 9) | 0x15
+#define EC_WORD_LAVISH (EC_GROUP_ACTIONS << 9) | 0x16
+#define EC_WORD_LISTENS (EC_GROUP_ACTIONS << 9) | 0x17
+#define EC_WORD_HEARING (EC_GROUP_ACTIONS << 9) | 0x18
+#define EC_WORD_TRAINS (EC_GROUP_ACTIONS << 9) | 0x19
+#define EC_WORD_CHOOSE (EC_GROUP_ACTIONS << 9) | 0x1a
+#define EC_WORD_COME (EC_GROUP_ACTIONS << 9) | 0x1b
+#define EC_WORD_CAME (EC_GROUP_ACTIONS << 9) | 0x1c
+#define EC_WORD_SEARCH (EC_GROUP_ACTIONS << 9) | 0x1d
+#define EC_WORD_MAKE (EC_GROUP_ACTIONS << 9) | 0x1e
+#define EC_WORD_CAUSE (EC_GROUP_ACTIONS << 9) | 0x1f
+#define EC_WORD_KNOW (EC_GROUP_ACTIONS << 9) | 0x20
+#define EC_WORD_KNOWS (EC_GROUP_ACTIONS << 9) | 0x21
+#define EC_WORD_REFUSE (EC_GROUP_ACTIONS << 9) | 0x22
+#define EC_WORD_STORES (EC_GROUP_ACTIONS << 9) | 0x23
+#define EC_WORD_BRAG (EC_GROUP_ACTIONS << 9) | 0x24
+#define EC_WORD_IGNORANT (EC_GROUP_ACTIONS << 9) | 0x25
+#define EC_WORD_THINKS (EC_GROUP_ACTIONS << 9) | 0x26
+#define EC_WORD_BELIEVE (EC_GROUP_ACTIONS << 9) | 0x27
+#define EC_WORD_SLIDE (EC_GROUP_ACTIONS << 9) | 0x28
+#define EC_WORD_EATS (EC_GROUP_ACTIONS << 9) | 0x29
+#define EC_WORD_USE (EC_GROUP_ACTIONS << 9) | 0x2a
+#define EC_WORD_USES (EC_GROUP_ACTIONS << 9) | 0x2b
+#define EC_WORD_USING (EC_GROUP_ACTIONS << 9) | 0x2c
+#define EC_WORD_COULDN_T (EC_GROUP_ACTIONS << 9) | 0x2d
+#define EC_WORD_CAPABLE (EC_GROUP_ACTIONS << 9) | 0x2e
+#define EC_WORD_DISAPPEAR (EC_GROUP_ACTIONS << 9) | 0x2f
+#define EC_WORD_APPEAR (EC_GROUP_ACTIONS << 9) | 0x30
+#define EC_WORD_THROW (EC_GROUP_ACTIONS << 9) | 0x31
+#define EC_WORD_WORRY (EC_GROUP_ACTIONS << 9) | 0x32
+#define EC_WORD_SLEPT (EC_GROUP_ACTIONS << 9) | 0x33
+#define EC_WORD_SLEEP (EC_GROUP_ACTIONS << 9) | 0x34
+#define EC_WORD_RELEASE (EC_GROUP_ACTIONS << 9) | 0x35
+#define EC_WORD_DRINKS (EC_GROUP_ACTIONS << 9) | 0x36
+#define EC_WORD_RUNS (EC_GROUP_ACTIONS << 9) | 0x37
+#define EC_WORD_RUN (EC_GROUP_ACTIONS << 9) | 0x38
+#define EC_WORD_WORKS (EC_GROUP_ACTIONS << 9) | 0x39
+#define EC_WORD_WORKING (EC_GROUP_ACTIONS << 9) | 0x3a
+#define EC_WORD_TALKING (EC_GROUP_ACTIONS << 9) | 0x3b
+#define EC_WORD_TALK (EC_GROUP_ACTIONS << 9) | 0x3c
+#define EC_WORD_SINK (EC_GROUP_ACTIONS << 9) | 0x3d
+#define EC_WORD_SMACK (EC_GROUP_ACTIONS << 9) | 0x3e
+#define EC_WORD_PRETEND (EC_GROUP_ACTIONS << 9) | 0x3f
+#define EC_WORD_PRAISE (EC_GROUP_ACTIONS << 9) | 0x40
+#define EC_WORD_OVERDO (EC_GROUP_ACTIONS << 9) | 0x41
+#define EC_WORD_SHOW (EC_GROUP_ACTIONS << 9) | 0x42
+#define EC_WORD_LOOKS (EC_GROUP_ACTIONS << 9) | 0x43
+#define EC_WORD_SEES (EC_GROUP_ACTIONS << 9) | 0x44
+#define EC_WORD_SEEK (EC_GROUP_ACTIONS << 9) | 0x45
+#define EC_WORD_OWN (EC_GROUP_ACTIONS << 9) | 0x46
+#define EC_WORD_TAKE (EC_GROUP_ACTIONS << 9) | 0x47
+#define EC_WORD_ALLOW (EC_GROUP_ACTIONS << 9) | 0x48
+#define EC_WORD_FORGET (EC_GROUP_ACTIONS << 9) | 0x49
+#define EC_WORD_FORGETS (EC_GROUP_ACTIONS << 9) | 0x4a
+#define EC_WORD_APPEARS (EC_GROUP_ACTIONS << 9) | 0x4b
+#define EC_WORD_FAINT (EC_GROUP_ACTIONS << 9) | 0x4c
+#define EC_WORD_FAINTED (EC_GROUP_ACTIONS << 9) | 0x4d
+
+// LIFESTYLE
+#define EC_WORD_CHORES (EC_GROUP_LIFESTYLE << 9) | 0x0
+#define EC_WORD_HOME (EC_GROUP_LIFESTYLE << 9) | 0x1
+#define EC_WORD_MONEY (EC_GROUP_LIFESTYLE << 9) | 0x2
+#define EC_WORD_ALLOWANCE (EC_GROUP_LIFESTYLE << 9) | 0x3
+#define EC_WORD_BATH (EC_GROUP_LIFESTYLE << 9) | 0x4
+#define EC_WORD_CONVERSATION (EC_GROUP_LIFESTYLE << 9) | 0x5
+#define EC_WORD_SCHOOL (EC_GROUP_LIFESTYLE << 9) | 0x6
+#define EC_WORD_COMMEMORATE (EC_GROUP_LIFESTYLE << 9) | 0x7
+#define EC_WORD_HABIT (EC_GROUP_LIFESTYLE << 9) | 0x8
+#define EC_WORD_GROUP (EC_GROUP_LIFESTYLE << 9) | 0x9
+#define EC_WORD_WORD (EC_GROUP_LIFESTYLE << 9) | 0xa
+#define EC_WORD_STORE (EC_GROUP_LIFESTYLE << 9) | 0xb
+#define EC_WORD_SERVICE (EC_GROUP_LIFESTYLE << 9) | 0xc
+#define EC_WORD_WORK (EC_GROUP_LIFESTYLE << 9) | 0xd
+#define EC_WORD_SYSTEM (EC_GROUP_LIFESTYLE << 9) | 0xe
+#define EC_WORD_TRAIN (EC_GROUP_LIFESTYLE << 9) | 0xf
+#define EC_WORD_CLASS (EC_GROUP_LIFESTYLE << 9) | 0x10
+#define EC_WORD_LESSONS (EC_GROUP_LIFESTYLE << 9) | 0x11
+#define EC_WORD_INFORMATION (EC_GROUP_LIFESTYLE << 9) | 0x12
+#define EC_WORD_LIVING (EC_GROUP_LIFESTYLE << 9) | 0x13
+#define EC_WORD_TEACHER (EC_GROUP_LIFESTYLE << 9) | 0x14
+#define EC_WORD_TOURNAMENT (EC_GROUP_LIFESTYLE << 9) | 0x15
+#define EC_WORD_LETTER (EC_GROUP_LIFESTYLE << 9) | 0x16
+#define EC_WORD_EVENT (EC_GROUP_LIFESTYLE << 9) | 0x17
+#define EC_WORD_DIGITAL (EC_GROUP_LIFESTYLE << 9) | 0x18
+#define EC_WORD_TEST (EC_GROUP_LIFESTYLE << 9) | 0x19
+#define EC_WORD_DEPT_STORE (EC_GROUP_LIFESTYLE << 9) | 0x1a
+#define EC_WORD_TELEVISION (EC_GROUP_LIFESTYLE << 9) | 0x1b
+#define EC_WORD_PHONE (EC_GROUP_LIFESTYLE << 9) | 0x1c
+#define EC_WORD_ITEM (EC_GROUP_LIFESTYLE << 9) | 0x1d
+#define EC_WORD_NAME (EC_GROUP_LIFESTYLE << 9) | 0x1e
+#define EC_WORD_NEWS (EC_GROUP_LIFESTYLE << 9) | 0x1f
+#define EC_WORD_POPULAR (EC_GROUP_LIFESTYLE << 9) | 0x20
+#define EC_WORD_PARTY (EC_GROUP_LIFESTYLE << 9) | 0x21
+#define EC_WORD_STUDY (EC_GROUP_LIFESTYLE << 9) | 0x22
+#define EC_WORD_MACHINE (EC_GROUP_LIFESTYLE << 9) | 0x23
+#define EC_WORD_MAIL (EC_GROUP_LIFESTYLE << 9) | 0x24
+#define EC_WORD_MESSAGE (EC_GROUP_LIFESTYLE << 9) | 0x25
+#define EC_WORD_PROMISE (EC_GROUP_LIFESTYLE << 9) | 0x26
+#define EC_WORD_DREAM (EC_GROUP_LIFESTYLE << 9) | 0x27
+#define EC_WORD_KINDERGARTEN (EC_GROUP_LIFESTYLE << 9) | 0x28
+#define EC_WORD_LIFE (EC_GROUP_LIFESTYLE << 9) | 0x29
+#define EC_WORD_RADIO (EC_GROUP_LIFESTYLE << 9) | 0x2a
+#define EC_WORD_RENTAL (EC_GROUP_LIFESTYLE << 9) | 0x2b
+#define EC_WORD_WORLD (EC_GROUP_LIFESTYLE << 9) | 0x2c
+
+// HOBBIES
+#define EC_WORD_IDOL (EC_GROUP_HOBBIES << 9) | 0x0
+#define EC_WORD_ANIME (EC_GROUP_HOBBIES << 9) | 0x1
+#define EC_WORD_SONG (EC_GROUP_HOBBIES << 9) | 0x2
+#define EC_WORD_MOVIE (EC_GROUP_HOBBIES << 9) | 0x3
+#define EC_WORD_SWEETS (EC_GROUP_HOBBIES << 9) | 0x4
+#define EC_WORD_CHAT (EC_GROUP_HOBBIES << 9) | 0x5
+#define EC_WORD_CHILD_S_PLAY (EC_GROUP_HOBBIES << 9) | 0x6
+#define EC_WORD_TOYS (EC_GROUP_HOBBIES << 9) | 0x7
+#define EC_WORD_MUSIC (EC_GROUP_HOBBIES << 9) | 0x8
+#define EC_WORD_CARDS (EC_GROUP_HOBBIES << 9) | 0x9
+#define EC_WORD_SHOPPING (EC_GROUP_HOBBIES << 9) | 0xa
+#define EC_WORD_CAMERA (EC_GROUP_HOBBIES << 9) | 0xb
+#define EC_WORD_VIEWING (EC_GROUP_HOBBIES << 9) | 0xc
+#define EC_WORD_SPECTATOR (EC_GROUP_HOBBIES << 9) | 0xd
+#define EC_WORD_GOURMET (EC_GROUP_HOBBIES << 9) | 0xe
+#define EC_WORD_GAME (EC_GROUP_HOBBIES << 9) | 0xf
+#define EC_WORD_RPG (EC_GROUP_HOBBIES << 9) | 0x10
+#define EC_WORD_COLLECTION (EC_GROUP_HOBBIES << 9) | 0x11
+#define EC_WORD_COMPLETE (EC_GROUP_HOBBIES << 9) | 0x12
+#define EC_WORD_MAGAZINE (EC_GROUP_HOBBIES << 9) | 0x13
+#define EC_WORD_WALK (EC_GROUP_HOBBIES << 9) | 0x14
+#define EC_WORD_BIKE (EC_GROUP_HOBBIES << 9) | 0x15
+#define EC_WORD_HOBBY (EC_GROUP_HOBBIES << 9) | 0x16
+#define EC_WORD_SPORTS (EC_GROUP_HOBBIES << 9) | 0x17
+#define EC_WORD_SOFTWARE (EC_GROUP_HOBBIES << 9) | 0x18
+#define EC_WORD_SONGS (EC_GROUP_HOBBIES << 9) | 0x19
+#define EC_WORD_DIET (EC_GROUP_HOBBIES << 9) | 0x1a
+#define EC_WORD_TREASURE (EC_GROUP_HOBBIES << 9) | 0x1b
+#define EC_WORD_TRAVEL (EC_GROUP_HOBBIES << 9) | 0x1c
+#define EC_WORD_DANCE (EC_GROUP_HOBBIES << 9) | 0x1d
+#define EC_WORD_CHANNEL (EC_GROUP_HOBBIES << 9) | 0x1e
+#define EC_WORD_MAKING (EC_GROUP_HOBBIES << 9) | 0x1f
+#define EC_WORD_FISHING (EC_GROUP_HOBBIES << 9) | 0x20
+#define EC_WORD_DATE (EC_GROUP_HOBBIES << 9) | 0x21
+#define EC_WORD_DESIGN (EC_GROUP_HOBBIES << 9) | 0x22
+#define EC_WORD_LOCOMOTIVE (EC_GROUP_HOBBIES << 9) | 0x23
+#define EC_WORD_PLUSH_DOLL (EC_GROUP_HOBBIES << 9) | 0x24
+#define EC_WORD_PC (EC_GROUP_HOBBIES << 9) | 0x25
+#define EC_WORD_FLOWERS (EC_GROUP_HOBBIES << 9) | 0x26
+#define EC_WORD_HERO (EC_GROUP_HOBBIES << 9) | 0x27
+#define EC_WORD_NAP (EC_GROUP_HOBBIES << 9) | 0x28
+#define EC_WORD_HEROINE (EC_GROUP_HOBBIES << 9) | 0x29
+#define EC_WORD_FASHION (EC_GROUP_HOBBIES << 9) | 0x2a
+#define EC_WORD_ADVENTURE (EC_GROUP_HOBBIES << 9) | 0x2b
+#define EC_WORD_BOARD (EC_GROUP_HOBBIES << 9) | 0x2c
+#define EC_WORD_BALL (EC_GROUP_HOBBIES << 9) | 0x2d
+#define EC_WORD_BOOK (EC_GROUP_HOBBIES << 9) | 0x2e
+#define EC_WORD_FESTIVAL (EC_GROUP_HOBBIES << 9) | 0x2f
+#define EC_WORD_COMICS (EC_GROUP_HOBBIES << 9) | 0x30
+#define EC_WORD_HOLIDAY (EC_GROUP_HOBBIES << 9) | 0x31
+#define EC_WORD_PLANS (EC_GROUP_HOBBIES << 9) | 0x32
+#define EC_WORD_TRENDY (EC_GROUP_HOBBIES << 9) | 0x33
+#define EC_WORD_VACATION (EC_GROUP_HOBBIES << 9) | 0x34
+#define EC_WORD_LOOK (EC_GROUP_HOBBIES << 9) | 0x35
+
+// TIME
+#define EC_WORD_FALL (EC_GROUP_TIME << 9) | 0x0
+#define EC_WORD_MORNING (EC_GROUP_TIME << 9) | 0x1
+#define EC_WORD_TOMORROW (EC_GROUP_TIME << 9) | 0x2
+#define EC_WORD_LAST (EC_GROUP_TIME << 9) | 0x3
+#define EC_WORD_DAY (EC_GROUP_TIME << 9) | 0x4
+#define EC_WORD_SOMETIME (EC_GROUP_TIME << 9) | 0x5
+#define EC_WORD_ALWAYS (EC_GROUP_TIME << 9) | 0x6
+#define EC_WORD_CURRENT (EC_GROUP_TIME << 9) | 0x7
+#define EC_WORD_FOREVER (EC_GROUP_TIME << 9) | 0x8
+#define EC_WORD_DAYS (EC_GROUP_TIME << 9) | 0x9
+#define EC_WORD_END (EC_GROUP_TIME << 9) | 0xa
+#define EC_WORD_TUESDAY (EC_GROUP_TIME << 9) | 0xb
+#define EC_WORD_YESTERDAY (EC_GROUP_TIME << 9) | 0xc
+#define EC_WORD_TODAY (EC_GROUP_TIME << 9) | 0xd
+#define EC_WORD_FRIDAY (EC_GROUP_TIME << 9) | 0xe
+#define EC_WORD_MONDAY (EC_GROUP_TIME << 9) | 0xf
+#define EC_WORD_LATER (EC_GROUP_TIME << 9) | 0x10
+#define EC_WORD_EARLIER (EC_GROUP_TIME << 9) | 0x11
+#define EC_WORD_ANOTHER (EC_GROUP_TIME << 9) | 0x12
+#define EC_WORD_TIME (EC_GROUP_TIME << 9) | 0x13
+#define EC_WORD_FINISH (EC_GROUP_TIME << 9) | 0x14
+#define EC_WORD_WEDNESDAY (EC_GROUP_TIME << 9) | 0x15
+#define EC_WORD_SOON (EC_GROUP_TIME << 9) | 0x16
+#define EC_WORD_START (EC_GROUP_TIME << 9) | 0x17
+#define EC_WORD_MONTH (EC_GROUP_TIME << 9) | 0x18
+#define EC_WORD_STOP (EC_GROUP_TIME << 9) | 0x19
+#define EC_WORD_NOW (EC_GROUP_TIME << 9) | 0x1a
+#define EC_WORD_FINAL (EC_GROUP_TIME << 9) | 0x1b
+#define EC_WORD_NEXT (EC_GROUP_TIME << 9) | 0x1c
+#define EC_WORD_AGE (EC_GROUP_TIME << 9) | 0x1d
+#define EC_WORD_SATURDAY (EC_GROUP_TIME << 9) | 0x1e
+#define EC_WORD_SUMMER (EC_GROUP_TIME << 9) | 0x1f
+#define EC_WORD_SUNDAY (EC_GROUP_TIME << 9) | 0x20
+#define EC_WORD_BEGINNING (EC_GROUP_TIME << 9) | 0x21
+#define EC_WORD_SPRING (EC_GROUP_TIME << 9) | 0x22
+#define EC_WORD_DAYTIME (EC_GROUP_TIME << 9) | 0x23
+#define EC_WORD_WINTER (EC_GROUP_TIME << 9) | 0x24
+#define EC_WORD_DAILY (EC_GROUP_TIME << 9) | 0x25
+#define EC_WORD_OLDEN (EC_GROUP_TIME << 9) | 0x26
+#define EC_WORD_ALMOST (EC_GROUP_TIME << 9) | 0x27
+#define EC_WORD_NEARLY (EC_GROUP_TIME << 9) | 0x28
+#define EC_WORD_THURSDAY (EC_GROUP_TIME << 9) | 0x29
+#define EC_WORD_NIGHTTIME (EC_GROUP_TIME << 9) | 0x2a
+#define EC_WORD_NIGHT (EC_GROUP_TIME << 9) | 0x2b
+#define EC_WORD_WEEK (EC_GROUP_TIME << 9) | 0x2c
+
+// MISC
+#define EC_WORD_HIGHS (EC_GROUP_MISC << 9) | 0x0
+#define EC_WORD_LOWS (EC_GROUP_MISC << 9) | 0x1
+#define EC_WORD_UM (EC_GROUP_MISC << 9) | 0x2
+#define EC_WORD_REAR (EC_GROUP_MISC << 9) | 0x3
+#define EC_WORD_THINGS (EC_GROUP_MISC << 9) | 0x4
+#define EC_WORD_THING (EC_GROUP_MISC << 9) | 0x5
+#define EC_WORD_BELOW (EC_GROUP_MISC << 9) | 0x6
+#define EC_WORD_ABOVE (EC_GROUP_MISC << 9) | 0x7
+#define EC_WORD_BACK (EC_GROUP_MISC << 9) | 0x8
+#define EC_WORD_HIGH (EC_GROUP_MISC << 9) | 0x9
+#define EC_WORD_HERE (EC_GROUP_MISC << 9) | 0xa
+#define EC_WORD_INSIDE (EC_GROUP_MISC << 9) | 0xb
+#define EC_WORD_OUTSIDE (EC_GROUP_MISC << 9) | 0xc
+#define EC_WORD_BESIDE (EC_GROUP_MISC << 9) | 0xd
+#define EC_WORD_THIS_IS_IT_EXCL (EC_GROUP_MISC << 9) | 0xe
+#define EC_WORD_THIS (EC_GROUP_MISC << 9) | 0xf
+#define EC_WORD_EVERY (EC_GROUP_MISC << 9) | 0x10
+#define EC_WORD_THESE (EC_GROUP_MISC << 9) | 0x11
+#define EC_WORD_THESE_WERE (EC_GROUP_MISC << 9) | 0x12
+#define EC_WORD_DOWN (EC_GROUP_MISC << 9) | 0x13
+#define EC_WORD_THAT (EC_GROUP_MISC << 9) | 0x14
+#define EC_WORD_THOSE_ARE (EC_GROUP_MISC << 9) | 0x15
+#define EC_WORD_THOSE_WERE (EC_GROUP_MISC << 9) | 0x16
+#define EC_WORD_THAT_S_IT_EXCL (EC_GROUP_MISC << 9) | 0x17
+#define EC_WORD_AM (EC_GROUP_MISC << 9) | 0x18
+#define EC_WORD_THAT_WAS (EC_GROUP_MISC << 9) | 0x19
+#define EC_WORD_FRONT (EC_GROUP_MISC << 9) | 0x1a
+#define EC_WORD_UP (EC_GROUP_MISC << 9) | 0x1b
+#define EC_WORD_CHOICE (EC_GROUP_MISC << 9) | 0x1c
+#define EC_WORD_FAR (EC_GROUP_MISC << 9) | 0x1d
+#define EC_WORD_AWAY (EC_GROUP_MISC << 9) | 0x1e
+#define EC_WORD_NEAR (EC_GROUP_MISC << 9) | 0x1f
+#define EC_WORD_WHERE (EC_GROUP_MISC << 9) | 0x20
+#define EC_WORD_WHEN (EC_GROUP_MISC << 9) | 0x21
+#define EC_WORD_WHAT (EC_GROUP_MISC << 9) | 0x22
+#define EC_WORD_DEEP (EC_GROUP_MISC << 9) | 0x23
+#define EC_WORD_SHALLOW (EC_GROUP_MISC << 9) | 0x24
+#define EC_WORD_WHY (EC_GROUP_MISC << 9) | 0x25
+#define EC_WORD_CONFUSED (EC_GROUP_MISC << 9) | 0x26
+#define EC_WORD_OPPOSITE (EC_GROUP_MISC << 9) | 0x27
+#define EC_WORD_LEFT (EC_GROUP_MISC << 9) | 0x28
+#define EC_WORD_RIGHT (EC_GROUP_MISC << 9) | 0x29
+
+// ADJECTIVES
+#define EC_WORD_WANDERING (EC_GROUP_ADJECTIVES << 9) | 0x0
+#define EC_WORD_RICKETY (EC_GROUP_ADJECTIVES << 9) | 0x1
+#define EC_WORD_ROCK_SOLID (EC_GROUP_ADJECTIVES << 9) | 0x2
+#define EC_WORD_HUNGRY (EC_GROUP_ADJECTIVES << 9) | 0x3
+#define EC_WORD_TIGHT (EC_GROUP_ADJECTIVES << 9) | 0x4
+#define EC_WORD_TICKLISH (EC_GROUP_ADJECTIVES << 9) | 0x5
+#define EC_WORD_TWIRLING (EC_GROUP_ADJECTIVES << 9) | 0x6
+#define EC_WORD_SPIRALING (EC_GROUP_ADJECTIVES << 9) | 0x7
+#define EC_WORD_THIRSTY (EC_GROUP_ADJECTIVES << 9) | 0x8
+#define EC_WORD_LOLLING (EC_GROUP_ADJECTIVES << 9) | 0x9
+#define EC_WORD_SILKY (EC_GROUP_ADJECTIVES << 9) | 0xa
+#define EC_WORD_SADLY (EC_GROUP_ADJECTIVES << 9) | 0xb
+#define EC_WORD_HOPELESS (EC_GROUP_ADJECTIVES << 9) | 0xc
+#define EC_WORD_USELESS (EC_GROUP_ADJECTIVES << 9) | 0xd
+#define EC_WORD_DROOLING (EC_GROUP_ADJECTIVES << 9) | 0xe
+#define EC_WORD_EXCITING (EC_GROUP_ADJECTIVES << 9) | 0xf
+#define EC_WORD_THICK (EC_GROUP_ADJECTIVES << 9) | 0x10
+#define EC_WORD_SMOOTH (EC_GROUP_ADJECTIVES << 9) | 0x11
+#define EC_WORD_SLIMY (EC_GROUP_ADJECTIVES << 9) | 0x12
+#define EC_WORD_THIN (EC_GROUP_ADJECTIVES << 9) | 0x13
+#define EC_WORD_BREAK (EC_GROUP_ADJECTIVES << 9) | 0x14
+#define EC_WORD_VORACIOUS (EC_GROUP_ADJECTIVES << 9) | 0x15
+#define EC_WORD_SCATTER (EC_GROUP_ADJECTIVES << 9) | 0x16
+#define EC_WORD_AWESOME (EC_GROUP_ADJECTIVES << 9) | 0x17
+#define EC_WORD_WIMPY (EC_GROUP_ADJECTIVES << 9) | 0x18
+#define EC_WORD_WOBBLY (EC_GROUP_ADJECTIVES << 9) | 0x19
+#define EC_WORD_SHAKY (EC_GROUP_ADJECTIVES << 9) | 0x1a
+#define EC_WORD_RIPPED (EC_GROUP_ADJECTIVES << 9) | 0x1b
+#define EC_WORD_SHREDDED (EC_GROUP_ADJECTIVES << 9) | 0x1c
+#define EC_WORD_INCREASING (EC_GROUP_ADJECTIVES << 9) | 0x1d
+#define EC_WORD_YET (EC_GROUP_ADJECTIVES << 9) | 0x1e
+#define EC_WORD_DESTROYED (EC_GROUP_ADJECTIVES << 9) | 0x1f
+#define EC_WORD_FIERY (EC_GROUP_ADJECTIVES << 9) | 0x20
+#define EC_WORD_LOVEY_DOVEY (EC_GROUP_ADJECTIVES << 9) | 0x21
+#define EC_WORD_HAPPILY (EC_GROUP_ADJECTIVES << 9) | 0x22
+#define EC_WORD_ANTICIPATION (EC_GROUP_ADJECTIVES << 9) | 0x23
+
+// EVENTS
+#define EC_WORD_APPEAL (EC_GROUP_EVENTS << 9) | 0x0
+#define EC_WORD_EVENTS (EC_GROUP_EVENTS << 9) | 0x1
+#define EC_WORD_STAY_AT_HOME (EC_GROUP_EVENTS << 9) | 0x2
+#define EC_WORD_BERRY (EC_GROUP_EVENTS << 9) | 0x3
+#define EC_WORD_CONTEST (EC_GROUP_EVENTS << 9) | 0x4
+#define EC_WORD_MC (EC_GROUP_EVENTS << 9) | 0x5
+#define EC_WORD_JUDGE (EC_GROUP_EVENTS << 9) | 0x6
+#define EC_WORD_SUPER (EC_GROUP_EVENTS << 9) | 0x7
+#define EC_WORD_STAGE (EC_GROUP_EVENTS << 9) | 0x8
+#define EC_WORD_HALL_OF_FAME (EC_GROUP_EVENTS << 9) | 0x9
+#define EC_WORD_EVOLUTION (EC_GROUP_EVENTS << 9) | 0xa
+#define EC_WORD_HYPER (EC_GROUP_EVENTS << 9) | 0xb
+#define EC_WORD_BATTLE_TOWER (EC_GROUP_EVENTS << 9) | 0xc
+#define EC_WORD_LEADERS (EC_GROUP_EVENTS << 9) | 0xd
+#define EC_WORD_BATTLE_ROOM (EC_GROUP_EVENTS << 9) | 0xe
+#define EC_WORD_HIDDEN (EC_GROUP_EVENTS << 9) | 0xf
+#define EC_WORD_SECRET_BASE (EC_GROUP_EVENTS << 9) | 0x10
+#define EC_WORD_BLEND (EC_GROUP_EVENTS << 9) | 0x11
+#define EC_WORD_POKEBLOCK (EC_GROUP_EVENTS << 9) | 0x12
+#define EC_WORD_MASTER (EC_GROUP_EVENTS << 9) | 0x13
+#define EC_WORD_RANK (EC_GROUP_EVENTS << 9) | 0x14
+#define EC_WORD_RIBBON (EC_GROUP_EVENTS << 9) | 0x15
+
+// TRENDY_SAYING
+#define EC_WORD_KTHX_BYE (EC_GROUP_TRENDY_SAYING << 9) | 0x0
+#define EC_WORD_YES_SIR_EXCL (EC_GROUP_TRENDY_SAYING << 9) | 0x1
+#define EC_WORD_AVANT_GARDE (EC_GROUP_TRENDY_SAYING << 9) | 0x2
+#define EC_WORD_COUPLE (EC_GROUP_TRENDY_SAYING << 9) | 0x3
+#define EC_WORD_MUCH_OBLIGED (EC_GROUP_TRENDY_SAYING << 9) | 0x4
+#define EC_WORD_YEEHAW_EXCL (EC_GROUP_TRENDY_SAYING << 9) | 0x5
+#define EC_WORD_MEGA (EC_GROUP_TRENDY_SAYING << 9) | 0x6
+#define EC_WORD_1_HIT_KO_EXCL (EC_GROUP_TRENDY_SAYING << 9) | 0x7
+#define EC_WORD_DESTINY (EC_GROUP_TRENDY_SAYING << 9) | 0x8
+#define EC_WORD_CANCEL (EC_GROUP_TRENDY_SAYING << 9) | 0x9
+#define EC_WORD_NEW (EC_GROUP_TRENDY_SAYING << 9) | 0xa
+#define EC_WORD_FLATTEN (EC_GROUP_TRENDY_SAYING << 9) | 0xb
+#define EC_WORD_KIDDING (EC_GROUP_TRENDY_SAYING << 9) | 0xc
+#define EC_WORD_LOSER (EC_GROUP_TRENDY_SAYING << 9) | 0xd
+#define EC_WORD_LOSING (EC_GROUP_TRENDY_SAYING << 9) | 0xe
+#define EC_WORD_HAPPENING (EC_GROUP_TRENDY_SAYING << 9) | 0xf
+#define EC_WORD_HIP_AND (EC_GROUP_TRENDY_SAYING << 9) | 0x10
+#define EC_WORD_SHAKE (EC_GROUP_TRENDY_SAYING << 9) | 0x11
+#define EC_WORD_SHADY (EC_GROUP_TRENDY_SAYING << 9) | 0x12
+#define EC_WORD_UPBEAT (EC_GROUP_TRENDY_SAYING << 9) | 0x13
+#define EC_WORD_MODERN (EC_GROUP_TRENDY_SAYING << 9) | 0x14
+#define EC_WORD_SMELL_YA (EC_GROUP_TRENDY_SAYING << 9) | 0x15
+#define EC_WORD_BANG (EC_GROUP_TRENDY_SAYING << 9) | 0x16
+#define EC_WORD_KNOCKOUT (EC_GROUP_TRENDY_SAYING << 9) | 0x17
+#define EC_WORD_HASSLE (EC_GROUP_TRENDY_SAYING << 9) | 0x18
+#define EC_WORD_WINNER (EC_GROUP_TRENDY_SAYING << 9) | 0x19
+#define EC_WORD_FEVER (EC_GROUP_TRENDY_SAYING << 9) | 0x1a
+#define EC_WORD_WANNABE (EC_GROUP_TRENDY_SAYING << 9) | 0x1b
+#define EC_WORD_BABY (EC_GROUP_TRENDY_SAYING << 9) | 0x1c
+#define EC_WORD_HEART (EC_GROUP_TRENDY_SAYING << 9) | 0x1d
+#define EC_WORD_OLD (EC_GROUP_TRENDY_SAYING << 9) | 0x1e
+#define EC_WORD_YOUNG (EC_GROUP_TRENDY_SAYING << 9) | 0x1f
+#define EC_WORD_UGLY (EC_GROUP_TRENDY_SAYING << 9) | 0x20
+
+#define EC_GROUP(word) ((word) >> 9)
+#define EC_INDEX(word) ((word) & 0x1FF)
u16 sub_80EB72C(u16 group);
void sub_80EB6FC(u16 *, u16);
@@ -33,7 +1065,7 @@ void InitEasyChatPhrases(void);
u8 sub_80EAD7C(u8 group);
u16 sub_80EAE88(u8);
u8 sub_80EB37C(u16);
-u8* sub_80EB3FC(u8 *, u16);
+u8* EasyChat_GetWordText(u8 *, u16);
u8 *ConvertEasyChatWordsToString(u8 *dst, u16 *words, u16, u16);
u16 sub_80EB784(u16 group);
u8 sub_80EB868(u8);
diff --git a/include/event_data.h b/include/event_data.h
index 98e4a6da3..ae048af4c 100644
--- a/include/event_data.h
+++ b/include/event_data.h
@@ -22,7 +22,7 @@ bool8 VarSet(u16 id, u16 value);
u8 VarGetFieldObjectGraphicsId(u8 id);
u8 *GetFlagPointer(u16 id);
u8 FlagSet(u16 id);
-u8 FlagReset(u16 id);
+u8 FlagClear(u16 id);
bool8 FlagGet(u16 id);
extern u16 gSpecialVar_0x8000;
diff --git a/include/evolution_graphics.h b/include/evolution_graphics.h
new file mode 100644
index 000000000..a960f637b
--- /dev/null
+++ b/include/evolution_graphics.h
@@ -0,0 +1,15 @@
+#ifndef GUARD_EVOLUTION_GRAPHICS_H
+#define GUARD_EVOLUTION_GRAPHICS_H
+
+void LoadEvoSparkleSpriteAndPal(void);
+
+u8 LaunchTask_PreEvoSparklesSet1(u16 arg0);
+u8 LaunchTask_PreEvoSparklesSet2(void);
+u8 LaunchTask_PostEvoSparklesSet1(void);
+u8 LaunchTask_PostEvoSparklesSet2AndFlash(u16 species);
+u8 LaunchTask_PostEvoSparklesSet2AndFlash_Trade(u16 species);
+u8 sub_8149E7C(u8 preEvoSpriteID, u8 postEvoSpriteID);
+
+#define EvoGraphicsTaskEvoStop data[8]
+
+#endif // GUARD_EVOLUTION_GRAPHICS_H
diff --git a/include/evolution_scene.h b/include/evolution_scene.h
new file mode 100644
index 000000000..48bd6ebe1
--- /dev/null
+++ b/include/evolution_scene.h
@@ -0,0 +1,10 @@
+#ifndef GUARD_EVOLUTION_SCENE_H
+#define GUARD_EVOLUTION_SCENE_H
+
+void EvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStopEvo, u8 partyID);
+void BeginEvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStopEvo, u8 partyID);
+void TradeEvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, u8 preEvoSpriteID, u8 partyID);
+
+extern void (*gCB2_AfterEvolution)(void);
+
+#endif // GUARD_EVOLUTION_SCENE_H
diff --git a/include/field_camera.h b/include/field_camera.h
index 4ce207541..17126d190 100644
--- a/include/field_camera.h
+++ b/include/field_camera.h
@@ -11,7 +11,7 @@ struct CameraSomething
s32 unk14;
};
-extern struct Camera gUnknown_0202E844;
+extern struct Camera gCamera;
void move_tilemap_camera_to_upper_left_corner(void);
void sub_8057A58(void);
diff --git a/include/field_door.h b/include/field_door.h
index 1759e0dc1..31fdd154b 100644
--- a/include/field_door.h
+++ b/include/field_door.h
@@ -20,6 +20,6 @@ void FieldSetDoorClosed(u32, u32);
s8 FieldAnimateDoorClose(u32, u32);
s8 FieldAnimateDoorOpen(u32, u32);
bool8 FieldIsDoorAnimationRunning(void);
-u32 sub_8058790(u32 x, u32 y);
+u32 GetDoorSoundEffect(u32 x, u32 y);
#endif
diff --git a/include/field_effect.h b/include/field_effect.h
index ea02c4131..a509697e4 100644
--- a/include/field_effect.h
+++ b/include/field_effect.h
@@ -244,7 +244,7 @@ void sub_808948C(struct Task *);
void sub_80894C4(struct Task *);
void fishE(struct Task *);
-u8 CreateTrainerSprite_BirchSpeech(u8 gender, s16 x, s16 y, u8 subpriority, u8 *buffer);
+u8 CreateTrainerSprite(u8 trainerSpriteID, s16 x, s16 y, u8 subpriority, u8 *buffer);
void LoadTrainerGfx_TrainerCard(u8 gender, u16 palOffset, u8 *dest);
u8 CreateBirchSprite(s16 x, s16 y, u8 subpriority);
u8 CreateMonSprite_PicBox(u16, s16, s16, u8);
@@ -253,6 +253,6 @@ void MultiplyInvertedPaletteRGBComponents(u16, u8, u8, u8);
void sub_80878A8(void);
void sub_8087BA8(void);
-extern u32 gUnknown_0202FF84[8];
+extern u32 gFieldEffectArguments[8];
#endif // GUARD_FIELD_EFFECT_H
diff --git a/include/field_effect_helpers.h b/include/field_effect_helpers.h
index a1dd53a2b..7bba24fa6 100644
--- a/include/field_effect_helpers.h
+++ b/include/field_effect_helpers.h
@@ -1,6 +1,8 @@
#ifndef GUARD_FIELD_EFFECT_HELPERS_H
#define GUARD_FIELD_EFFECT_HELPERS_H
+extern const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[];
+
void sub_812869C(struct MapObject *);
bool8 sub_81286C4(struct MapObject *);
void oamc_shadow(struct Sprite *);
@@ -26,6 +28,9 @@ void sub_8126BC4(u8 unk_1B, u8 r6, s16 x, s16 y);
void sub_8127ED0(u8, u8);
void sub_8127F28(u8, u8, s16);
u8 sub_8128124(u8 id);
-void ash(s16, s16, u16, u8);
+void ash(s16, s16, u16, s16);
+void SetUpReflection(struct MapObject *mapObj, struct Sprite *sprite, u8 a);
+u32 oe_exec_and_other_stuff(u8 fieldEffectId, struct MapObject *mapObject);
+u8 sub_8126FF0(u8, u8, u8, s16, s16);
#endif // GUARD_FIELD_EFFECT_HELPERS_H
diff --git a/include/field_map_obj.h b/include/field_map_obj.h
index d2a1a9b1f..641a28ed3 100644
--- a/include/field_map_obj.h
+++ b/include/field_map_obj.h
@@ -3,6 +3,8 @@
#include "sprite.h"
+extern const u8 gUnknown_0830FD14[];
+
#define fieldmap_object_cb(setup, callback, table) \
static u8 callback(struct MapObject *, struct Sprite *);\
void setup(struct Sprite *sprite)\
@@ -54,17 +56,15 @@ u8 sub_805CCAC(s16 a0, s16 a1, s16 a2, s16 a3);
u8 sub_805CCE8(s16 a0, s16 a1, s16 a2, s16 a3);
u8 sub_805CD24(s16 a0, s16 a1, s16 a2, s16 a3);
-u8 sub_805F3EC(struct MapObject *, struct Sprite *, u8, bool8 (*const)(u8));
-u8 sub_805F3F0(struct MapObject *, struct Sprite *, u8, bool8 (*const)(u8));
-u8 sub_805F438(struct MapObject *, struct Sprite *, u8, bool8 (*const)(u8));
-u8 sub_805F4F0(struct MapObject *, struct Sprite *, u8, bool8 (*const)(u8));
-u8 sub_805F5A8(struct MapObject *, struct Sprite *, u8, bool8 (*const)(u8));
-u8 sub_805F660(struct MapObject *, struct Sprite *, u8, bool8 (*const)(u8));
-u8 cph_IM_DIFFERENT(struct MapObject *, struct Sprite *, u8, bool8 (*const)(u8));
-u8 sub_805F760(struct MapObject *, struct Sprite *, u8, bool8 (*const)(u8));
-u8 oac_hopping(struct MapObject *, struct Sprite *, u8, bool8 (*const)(u8));
-u8 sub_805F3EC(struct MapObject *, struct Sprite *, u8, bool8 (*const)(u8));
-u8 sub_805F3EC(struct MapObject *, struct Sprite *, u8, bool8 (*const)(u8));
+u8 sub_805F3EC(struct MapObject *, struct Sprite *, u8, bool8(u8));
+u8 sub_805F3F0(struct MapObject *, struct Sprite *, u8, bool8(u8));
+u8 sub_805F438(struct MapObject *, struct Sprite *, u8, bool8(u8));
+u8 sub_805F4F0(struct MapObject *, struct Sprite *, u8, bool8(u8));
+u8 sub_805F5A8(struct MapObject *, struct Sprite *, u8, bool8(u8));
+u8 sub_805F660(struct MapObject *, struct Sprite *, u8, bool8(u8));
+u8 cph_IM_DIFFERENT(struct MapObject *, struct Sprite *, u8, bool8(u8));
+u8 sub_805F760(struct MapObject *, struct Sprite *, u8, bool8(u8));
+u8 oac_hopping(struct MapObject *, struct Sprite *, u8, bool8(u8));
extern struct CameraSomething gUnknown_03004880;
extern u16 gUnknown_03004898;
@@ -318,7 +318,7 @@ u8 get_go_fast_image_anim_num(u8);
u8 get_go_faster_image_anim_num(u8);
u8 sub_805FD78(u8);
-int state_to_direction(u8, u8, u8);
+u32 state_to_direction(u8, u32, u32);
void sub_805AA98();
void sub_805AAB0(void);
@@ -379,14 +379,14 @@ u8 sub_805FDF8(u8);
u8 sub_805FE08(u8);
void npc_set_running_behaviour_etc(struct MapObject *, u8);
u8 npc_running_behaviour_by_direction(u8);
-u8 npc_block_way(struct MapObject *, s16, s16, u8);
+u8 npc_block_way(struct MapObject *, s16, s16, u32);
u8 sub_8060024(struct MapObject *, s16, s16, u8);
u8 sub_8060234(u8, u8, u8);
void sub_8060288(u8, u8, u8);
void sub_8060388(s16, s16, s16 *, s16 *);
void sub_80603CC(s16 x, s16 y, s16 *pInt, s16 *pInt1);
void GetFieldObjectMovingCameraOffset(s16 *, s16 *);
-void FieldObjectMoveDestCoords(struct MapObject *pObject, u8 unk_19, s16 *pInt, s16 *pInt1);
+void FieldObjectMoveDestCoords(struct MapObject *pObject, u32 unk_19, s16 *pInt, s16 *pInt1);
bool8 FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(struct MapObject *);
bool8 FieldObjectIsSpecialAnimActive(struct MapObject *);
bool8 FieldObjectSetSpecialAnim(struct MapObject *, u8);
@@ -396,21 +396,23 @@ void FieldObjectClearAnim(struct MapObject *);
bool8 FieldObjectCheckIfSpecialAnimFinishedOrInactive(struct MapObject *);
u8 FieldObjectClearAnimIfSpecialAnimFinished(struct MapObject *);
u8 FieldObjectGetSpecialAnim(struct MapObject *);
-u8 GetFaceDirectionAnimId(u8);
-u8 GetSimpleGoAnimId(u8);
-u8 GetGoSpeed0AnimId(u8 a);
-u8 sub_8060744(u8 a);
-u8 d2s_08064034(u8 a);
-u8 sub_806079C(u8 a);
-u8 sub_80607F4(u8 a);
-u8 GetJumpLedgeAnimId(u8 a);
-u8 sub_806084C(u8);
-u8 sub_8060878(u8);
-u8 sub_80608D0(u8);
-u8 GetStepInPlaceDelay32AnimId(u8 a);
-u8 GetStepInPlaceDelay16AnimId(u8);
-u8 GetStepInPlaceDelay8AnimId(u8 a);
-u8 GetStepInPlaceDelay4AnimId(u8 a);
+u8 GetFaceDirectionAnimId(u32);
+u8 GetSimpleGoAnimId(u32);
+u8 GetGoSpeed0AnimId(u32);
+u8 sub_8060744(u32);
+u8 d2s_08064034(u32);
+u8 sub_806079C(u32);
+u8 sub_80607C8(u32);
+u8 sub_80607F4(u32);
+u8 GetJumpLedgeAnimId(u32);
+u8 sub_806084C(u32);
+u8 sub_8060878(u32);
+u8 sub_80608A4(u32);
+u8 sub_80608D0(u32);
+u8 GetStepInPlaceDelay32AnimId(u32);
+u8 GetStepInPlaceDelay16AnimId(u32);
+u8 GetStepInPlaceDelay8AnimId(u32);
+u8 GetStepInPlaceDelay4AnimId(u32);
u8 FieldObjectFaceOppositeDirection(struct MapObject *, u8);
u8 sub_80609D8(u8);
u8 sub_8060A04(u8);
@@ -427,5 +429,9 @@ void sub_80634D0(struct MapObject *, struct Sprite *);
u8 SpawnSpecialFieldObjectParametrized(u8, u8, u8, s16, s16, u8);
void CameraObjectSetFollowedObjectId(u8);
u8 sub_805ADDC(u8);
+void sub_8060320(u32, s16 *, s16 *, s16, s16);
+u8 obj_unfreeze(struct Sprite *, s16, s16, u8);
+u16 npc_paltag_by_palslot(u8);
+void sub_8060470(s16 *, s16 *, s16, s16);
#endif // GUARD_FIELD_MAP_OBJ_H
diff --git a/include/field_map_obj_helpers.h b/include/field_map_obj_helpers.h
index fd29a9a7f..f760bf153 100644
--- a/include/field_map_obj_helpers.h
+++ b/include/field_map_obj_helpers.h
@@ -18,4 +18,6 @@ void DoShadowFieldEffect(struct MapObject *mapObject);
u8 sub_8064704(struct Sprite *);
u8 sub_806478C(struct Sprite *);
void obj_anim_image_set_and_seek(struct Sprite *sprite, u8 a2, u8 a3);
+void DoRippleFieldEffect(struct MapObject *mapObj, struct Sprite *sprite);
+
#endif
diff --git a/include/field_poison.h b/include/field_poison.h
index 8e8e2746f..df0b31434 100644
--- a/include/field_poison.h
+++ b/include/field_poison.h
@@ -1,6 +1,6 @@
#ifndef GUARD_FIELD_POISON_H
#define GUARD_FIELD_POISON_H
-s32 overworld_poison(void);
+s32 DoPoisonFieldEffect(void);
#endif // GUARD_FIELD_POISON_H
diff --git a/include/gba/m4a_internal.h b/include/gba/m4a_internal.h
index 572b77711..ff92fcc40 100644
--- a/include/gba/m4a_internal.h
+++ b/include/gba/m4a_internal.h
@@ -404,10 +404,6 @@ void SampleFreqSet(u32 freq);
void m4aSoundVSyncOn(void);
void m4aSoundVSyncOff(void);
-void m4aMPlayTempoControl(struct MusicPlayerInfo *mplayInfo, u16 tempo);
-void m4aMPlayVolumeControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u16 volume);
-void m4aMPlayPitchControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u16 pitch);
-void m4aMPlayPanpotControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, s8 pan);
void ClearModM(struct MusicPlayerTrack *track);
void m4aMPlayModDepthSet(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u8 modDepth);
void m4aMPlayLFOSpeedSet(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u8 lfoSpeed);
diff --git a/include/gba/types.h b/include/gba/types.h
index 96e057ab7..480619d21 100644
--- a/include/gba/types.h
+++ b/include/gba/types.h
@@ -39,11 +39,11 @@ struct PlttData
struct OamData
{
/*0x00*/ u32 y:8;
- /*0x01*/ u32 affineMode:2;
- u32 objMode:2;
- u32 mosaic:1;
- u32 bpp:1;
- u32 shape:2;
+ /*0x01*/ u32 affineMode:2; // 0x1, 0x2 = 0x3
+ u32 objMode:2; // 0x4, 0x8 = 0xC
+ u32 mosaic:1; // 0x10
+ u32 bpp:1; // 0x20
+ u32 shape:2; // 0x40, 0x80
/*0x02*/ u32 x:9;
u32 matrixNum:5; // bits 3/4 are h-flip/v-flip if not in affine mode
diff --git a/include/global.fieldmap.h b/include/global.fieldmap.h
index 4029132e8..5c93eb8ab 100644
--- a/include/global.fieldmap.h
+++ b/include/global.fieldmap.h
@@ -14,16 +14,16 @@ enum
// map types
enum
{
- MAP_TYPE_0,
- MAP_TYPE_TOWN,
- MAP_TYPE_CITY,
- MAP_TYPE_ROUTE,
- MAP_TYPE_UNDERGROUND,
- MAP_TYPE_UNDERWATER,
- MAP_TYPE_6,
- MAP_TYPE_7,
- MAP_TYPE_INDOOR,
- MAP_TYPE_SECRET_BASE
+ MAP_TYPE_0, // 0
+ MAP_TYPE_TOWN, // 1
+ MAP_TYPE_CITY, // 2
+ MAP_TYPE_ROUTE, // 3
+ MAP_TYPE_UNDERGROUND, // 4
+ MAP_TYPE_UNDERWATER, // 5
+ MAP_TYPE_6, // 6
+ MAP_TYPE_7, // 7
+ MAP_TYPE_INDOOR, // 8
+ MAP_TYPE_SECRET_BASE // 9
};
// map battle scenes
diff --git a/include/global.h b/include/global.h
index 8f28c8c59..5ca331bf1 100644
--- a/include/global.h
+++ b/include/global.h
@@ -448,43 +448,69 @@ struct MailStruct
/*0x20*/ u16 itemId;
};
-struct UnkMauvilleOldManStruct
-{
- 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;
-}; /*size = 0x2C*/
-struct UnkMauvilleOldManStruct2
+// Mauville Pokemon Center men
+
+struct MauvilleManCommon
+{
+ u8 id;
+};
+
+struct MauvilleManBard
{
- u8 filler0;
- u8 unk1;
- u8 unk2;
- u16 mauvilleOldMan_ecArray[10];
- u8 mauvilleOldMan_ecArray2[12];
- u8 fillerF[0x2];
+ /*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;
}; /*size = 0x2C*/
-struct MauvilleOldManTrader
+struct MauvilleManHipster
{
- u8 unk0;
+ u8 id;
+ bool8 alreadySpoken;
+};
+
+struct MauvilleManTrader
+{
+ u8 id;
u8 unk1[4];
u8 unk5[4][11];
- u8 unk31;
+ bool8 alreadyTraded;
+};
+
+struct MauvilleManStoryteller
+{
+ u8 id;
+ bool8 alreadyRecorded;
+ u8 filler2[2];
+ u8 gameStatIDs[4];
+ u8 trainerNames[4][7];
+ u8 statValues[4][4];
};
-typedef union OldMan
+struct MauvilleManGiddy
{
- struct UnkMauvilleOldManStruct oldMan1;
- struct UnkMauvilleOldManStruct2 oldMan2;
- struct MauvilleOldManTrader trader;
- u8 filler[0x40];
-} OldMan;
+ /*0x00*/ u8 id;
+ /*0x01*/ u8 taleCounter;
+ /*0x02*/ u8 questionNum;
+ /*0x04*/ u16 randomWords[10];
+ /*0x18*/ u8 questionList[12];
+}; /*size = 0x2C*/
+
+
+union MauvilleMan
+{
+ struct MauvilleManCommon common;
+ struct MauvilleManBard bard;
+ struct MauvilleManHipster hipster;
+ struct MauvilleManTrader trader;
+ struct MauvilleManStoryteller storyteller;
+ struct MauvilleManGiddy giddy;
+ u8 filler[0x40]; // needed to pad out the struct
+};
struct Unk_SB_Access_Struct1
{
@@ -535,18 +561,34 @@ struct GabbyAndTyData
/*2b1b*/ u8 valB_5:3;
};
-struct RecordMixing_UnknownStructSub
+struct DayCareMail
{
- u32 unk0;
- u8 data[0x34];
- //u8 data[0x38];
+ /*0x00*/ struct MailStruct message;
+ /*0x24*/ u8 names[19];
+};
+
+struct DayCareStepCountersEtc {
+ u32 steps[2];
+ u16 personalityLo;
+ u8 unk_11a;
};
-struct RecordMixing_UnknownStruct
+struct RecordMixingDayCareMail
{
- struct RecordMixing_UnknownStructSub data[2];
+ struct DayCareMail mail[2];
u32 unk70;
- u16 unk74[0x2];
+ u16 unk74[2];
+};
+
+struct DayCareMisc
+{
+ struct DayCareMail mail[2];
+ struct DayCareStepCountersEtc countersEtc;
+};
+
+struct DayCareData {
+ struct BoxPokemon mons[2];
+ struct DayCareMisc misc;
};
struct LinkBattleRecord
@@ -588,7 +630,7 @@ struct SaveBlock1 /* 0x02025734 */
/*0x2C*/ u16 battleMusic;
/*0x2E*/ u8 weather;
/*0x2F*/ u8 filler_2F;
- /*0x30*/ u8 flashUsed;
+ /*0x30*/ u8 flashLevel; // flash level on current map, 0 being normal and 4 being the darkest
/*0x32*/ u16 mapDataId;
/*0x34*/ u16 mapView[0x100];
/*0x234*/ u8 playerPartyCount;
@@ -646,15 +688,11 @@ struct SaveBlock1 /* 0x02025734 */
/*0x2B4C*/ struct MailStruct mail[16];
/*0x2D8C*/ u8 unk2D8C[4];
/*0x2D90*/ u8 filler_2D90[0x4];
- /*0x2D94*/ OldMan oldMan;
+ /*0x2D94*/ union MauvilleMan mauvilleMan;
/*0x2DD4*/ struct EasyChatPair easyChatPairs[5]; //Dewford trend [0] and some other stuff
/*0x2DFC*/ u8 filler_2DFC[0x8];
/*0x2E04*/ SB_Struct sbStruct;
- /*0x2F9C*/ struct BoxPokemon daycareData[2];
- /*0x303C*/ struct RecordMixing_UnknownStruct filler_303C;
- /*0x30AC*/ u8 filler_30B4[0x2];
- /*0x30B6*/ u8 filler_30B6;
- /*0x30B7*/ u8 filler_30B7[1];
+ /*0x2F9C*/ struct DayCareData daycareData;
/*0x30B8*/ struct LinkBattleRecord linkBattleRecords[5];
/*0x3108*/ u8 filler_3108[8];
/*0x3110*/ u8 giftRibbons[7];
diff --git a/include/item_use.h b/include/item_use.h
index 1558f7691..227c0c9ee 100644
--- a/include/item_use.h
+++ b/include/item_use.h
@@ -38,7 +38,7 @@ void sub_80C9FC0(u8);
void ItemUseOutOfBattle_Repel(u8);
void ItemUseOutOfBattle_BlackWhiteFlute(u8);
void task08_080A1C44(u8);
-u8 sub_80CA1C8(void);
+u8 CanUseEscapeRopeOnCurrMap(void);
void ItemUseOutOfBattle_EscapeRope(u8);
void ItemUseOutOfBattle_EvolutionStone(u8);
void ItemUseInBattle_PokeBall(u8);
@@ -49,5 +49,6 @@ void ItemUseInBattle_Escape(u8);
void ItemUseOutOfBattle_EnigmaBerry(u8);
void ItemUseInBattle_EnigmaBerry(u8);
void ItemUseOutOfBattle_CannotUse(u8);
+u8 CheckIfItemIsTMHMOrEvolutionStone(u16 itemId);
#endif // GUARD_ITEM_USE_H
diff --git a/include/m4a.h b/include/m4a.h
index b6c8f9072..7d016c98b 100644
--- a/include/m4a.h
+++ b/include/m4a.h
@@ -16,4 +16,9 @@ void m4aMPlayFadeOutTemporarily(struct MusicPlayerInfo *mplayInfo, u16 speed);
void m4aMPlayFadeIn(struct MusicPlayerInfo *mplayInfo, u16 speed);
void m4aMPlayImmInit(struct MusicPlayerInfo *mplayInfo);
+void m4aMPlayTempoControl(struct MusicPlayerInfo *mplayInfo, u16 tempo);
+void m4aMPlayVolumeControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u16 volume);
+void m4aMPlayPitchControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, s16 pitch);
+void m4aMPlayPanpotControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, s8 pan);
+
#endif //GUARD_M4A_H
diff --git a/include/mail_data.h b/include/mail_data.h
index df4b385a1..2659c0d37 100644
--- a/include/mail_data.h
+++ b/include/mail_data.h
@@ -11,6 +11,6 @@ u8 GiveMailToMon2(struct Pokemon *, struct MailStruct *);
void TakeMailFromMon(struct Pokemon *);
u8 TakeMailFromMon2(struct Pokemon *);
bool8 ItemIsMail(u16);
-bool8 ItemIsMail(u16);
+bool8 MonHasMail(struct Pokemon *);
#endif // GUARD_MAIL_DATA_H
diff --git a/include/map_obj_lock.h b/include/map_obj_lock.h
index f7352be22..9fb57743e 100644
--- a/include/map_obj_lock.h
+++ b/include/map_obj_lock.h
@@ -7,7 +7,7 @@ bool8 sub_8064CFC(void);
void ScriptFreezeMapObjects(void);
void sub_8064D38(u8 taskId);
bool8 sub_8064DB4(void);
-void sub_8064DD8(void);
+void LockSelectedMapObject(void);
void sub_8064E2C(void);
void unref_sub_8064E5C(void);
void sub_8064EAC(void);
diff --git a/include/mauville_man.h b/include/mauville_man.h
new file mode 100644
index 000000000..2b8f139f2
--- /dev/null
+++ b/include/mauville_man.h
@@ -0,0 +1,18 @@
+#ifndef GUARD_MAUVILLE_OLD_MAN_H
+#define GUARD_MAUVILLE_OLD_MAN_H
+
+// IDs
+enum
+{
+ MAUVILLE_MAN_BARD,
+ MAUVILLE_MAN_HIPSTER,
+ MAUVILLE_MAN_TRADER,
+ MAUVILLE_MAN_STORYTELLER,
+ MAUVILLE_MAN_GIDDY,
+};
+
+void SetupMauvilleOldMan(void);
+void sub_80F7F30(void);
+void sub_80F83D0(void);
+
+#endif // GUARD_MAUVILLE_OLD_MAN_H
diff --git a/include/mauville_old_man.h b/include/mauville_old_man.h
deleted file mode 100644
index 473fcf5c8..000000000
--- a/include/mauville_old_man.h
+++ /dev/null
@@ -1,11 +0,0 @@
-#ifndef GUARD_MAUVILLE_OLD_MAN_H
-#define GUARD_MAUVILLE_OLD_MAN_H
-
-void SetMauvilleOldMan(void);
-void sub_80F7DC0(void);
-void sub_80F7F30(void);
-void sub_80F7F80(u8);
-void sub_80F83D0(void);
-void sub_80F83F8(void);
-
-#endif // GUARD_MAUVILLE_OLD_MAN_H
diff --git a/include/menu.h b/include/menu.h
index e1bb4f1e4..3cf47b9b8 100644
--- a/include/menu.h
+++ b/include/menu.h
@@ -43,7 +43,7 @@ u16 unref_sub_8071F98(u8, u8);
void unref_sub_8071FBC(u16, u8, u8, u8, u8);
void MenuDisplayMessageBox(void);
void MenuPrintMessage(const u8 *, u8, u8);
-void sub_8072044(const u8 *);
+void MenuPrintMessageDefaultCoords(const u8 *);
void MenuSetText(const u8 *);
u8 MenuUpdateWindowText(void);
u8 unref_sub_8072098(void);
@@ -59,7 +59,7 @@ void sub_807274C(u8, u8, u8, u8, const struct MenuAction[], u8, u32);
s8 sub_80727CC(void);
u8 sub_807288C(u8);
void PrintMenuItems(u8, u8, u8, const struct MenuAction[]);
-void PrintMenuItemsReordered(u8, u8, u8, const struct MenuAction[], const u8*);
+void PrintMenuItemsReordered(u8 left, u8 top, u8 menuItemCount, const struct MenuAction2 menuItems[], const u8 *order);
void InitYesNoMenu(u8, u8, u8);
void DisplayYesNoMenu(u8, u8, u32);
s8 ProcessMenuInputNoWrap_(void);
diff --git a/include/money.h b/include/money.h
index 49015ee19..5a0acd482 100644
--- a/include/money.h
+++ b/include/money.h
@@ -2,15 +2,15 @@
#define GUARD_MONEY_H
bool8 IsEnoughMoney(u32, u32);
-void sub_80B79B8(u32 *, u32);
-void sub_80B79E0(u32 *, u32);
-void sub_80B79F8(u8 *buffer, u32 arg1, u8 arg2);
-void sub_80B7A94(u32 arg0, u8 arg1, u8 x, u8 y);
+void AddMoney(u32 *, u32);
+void RemoveMoney(u32 *, u32);
+void GetMoneyAmountText(u8 *buffer, u32 arg1, u8 arg2);
+void PrintMoneyAmount(u32 arg0, u8 arg1, u8 x, u8 y);
void sub_80B7AEC(u32, u8 left, u8 top);
-void sub_80B7B34(void);
-void sub_80B7BEC(u32, u8, u8);
-void sub_80B7C14(u32, u8, u8);
-void RemoveMoneyLabelObject(u8, u8);
+void sub_80B7B34(u8, u8, int);
+void UpdateMoneyWindow(u32, u8, u8);
+void OpenMoneyWindow(u32, u8, u8);
+void CloseMoneyWindow(u8, u8);
bool8 sub_80B7CE8(void);
void sub_80B7D0C(void);
diff --git a/include/rom4.h b/include/overworld.h
index 8d5b1bfa2..fcdc8ed97 100644
--- a/include/rom4.h
+++ b/include/overworld.h
@@ -22,12 +22,12 @@ struct UCoords32
u32 x, y;
};
-extern struct UCoords32 gUnknown_0821664C[];
+extern const struct UCoords32 gUnknown_0821664C[];
extern void (*gFieldCallback)(void);
// sub_8052F5C
void flag_var_implications_of_teleport_(void);
-void new_game(void);
+void Overworld_ResetStateAfterTeleport(void);
void sub_8053014(void);
void sub_8053050(void);
// sub_805308C
@@ -36,18 +36,18 @@ void IncrementGameStat(u8 index);
u32 GetGameStat(u8 index);
void SetGameStat(u8, u32);
// sub_8053154
-// sub_8053198
-void update_saveblock1_field_object_coords(u8, s16, s16);
-void update_saveblock1_field_object_movement_behavior(u8, u8);
+// LoadSaveblockMapObjScripts
+void Overworld_SaveMapObjCoords(u8, s16, s16);
+void Overworld_SaveMapObjMovementType(u8, u8);
// mapdata_load_assets_to_gpu_and_full_redraw
// get_mapdata_header
// warp_shift
// warp_set
// warp_data_is_not_neg_1
-struct MapHeader * const get_mapheader_by_bank_and_number(u16 mapGroup, u16 mapNum);
+struct MapHeader * const Overworld_GetMapHeaderByGroupAndId(u16 mapGroup, u16 mapNum);
struct MapHeader * const warp1_get_mapheader(void);
// set_current_map_header_from_sav1_save_old_name
-// sub_805338C
+// LoadSaveblockMapHeader
// sub_80533CC
void warp_in(void);
void warp1_set(s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y);
@@ -81,14 +81,14 @@ void walkrun_find_lowest_active_bit_in_bitfield(void);
u8 sub_8053B00(struct UnkPlayerStruct *playerStruct, u16 a2, u8 a3);
u8 sub_8053B60(struct UnkPlayerStruct *playerStruct, u8, u16, u8);
u16 cur_mapdata_block_role_at_screen_center_acc_to_sav1(void);
-bool32 IsBikingAllowedByMap(void);
-void sub_8053C98(void);
-void sub_8053CE4(s32 a1);
-u8 sav1_get_flash_used_on_map(void);
+bool32 Overworld_IsBikeAllowedOnCurrentMap(void);
+void SetDefaultFlashLevel(void);
+void Overworld_SetFlashLevel(s32 a1);
+u8 Overworld_GetFlashLevel(void);
void sub_8053D14(u16);
// sub_8053D30
// sub_8053D6C
-// sub_8053D9C
+// GetLocationMusic
// sav1_map_get_music
// warp1_target_get_music
// call_map_music_set_to_zero
@@ -97,21 +97,21 @@ void sav1_set_battle_music_maybe(u16);
void sav1_reset_battle_music_maybe(void);
void sub_8053F0C(void);
void sub_8053F84(void);
-void sub_8053FB0(u16);
-// is_warp1_light_level_8_or_9
+void Overworld_ChangeMusicTo(u16);
+// GetMapMusicFadeoutSpeed
void sub_8053FF8(void);
bool8 sub_8054034(void);
void sub_8054044(void);
-// sub_8054050
-void sub_80540D0(s16 *, u16 *);
-void sub_8054164(void);
-u8 get_map_light_level_by_bank_and_number(s8 mapGroup, s8 mapNum);
-// get_map_light_level_from_warp
-u8 sav1_map_get_light_level(void);
-u8 get_map_light_from_warp0(void);
-bool8 is_light_level_1_2_3_5_or_6(u8 a1);
-bool8 is_light_level_1_2_3_or_6(u8 a1);
-u8 is_light_level_8_or_9(u8);
+// PlayAmbientCry
+void UpdateAmbientCry(s16 *, u16 *);
+void ChooseAmbientCrySpecies(void);
+u8 GetMapTypeByGroupAndId(s8 mapGroup, s8 mapNum);
+// GetMapTypeByWarpData
+u8 Overworld_GetMapTypeOfSaveblockLocation(void);
+u8 get_map_type_from_warp0(void);
+bool8 is_map_type_1_2_3_5_or_6(u8 a1);
+bool8 Overworld_MapTypeAllowsTeleportAndFly(u8 a1);
+u8 Overworld_MapTypeIsIndoors(u8);
// unref_sub_8054260
u8 sav1_map_get_name();
// sav1_map_get_battletype
@@ -119,8 +119,8 @@ u8 sav1_map_get_name();
bool32 is_c1_link_related_active(void);
// c1_overworld_normal
// c1_overworld
-// c2_overworld_basic
-// sub_8054398
+// OverworldBasic
+void CB2_OverworldBasic(void);
void c2_overworld(void);
// set_callback1
// sub_80543DC
diff --git a/include/party_menu.h b/include/party_menu.h
index 9ce476869..5250486bb 100644
--- a/include/party_menu.h
+++ b/include/party_menu.h
@@ -53,38 +53,55 @@ struct Struct201B000
u16 unk282;
};
+struct Unk2001000
+{
+ u8 unk0;
+ u8 unk1;
+ u8 unk2;
+ u8 unk3;
+ u8 unk4;
+ u8 unk5;
+ u8 unk6;
+ u8 unk7;
+ u8 unk8;
+ u8 unk9;
+ u8 unkA;
+ u8 unkB;
+ void* unkC;
+ u16 array[53561];
+};
+
extern u8 ewram[];
+#define ewram01000 (*(struct Unk2001000 *)(ewram + 0x01000))
#define ewram1B000 (*(struct Unk201B000 *)(ewram + 0x1B000))
#define ewram1B000_alt (*(struct Struct201B000 *)(ewram + 0x1B000))
#define EWRAM_1B000 ewram1B000_alt
void sub_806AEDC(void);
-void sub_806AF4C();
+void sub_806AF4C(u8 arg0, u8 arg1, void* arg2, u8 arg3);
void OpenPartyMenu(u8, u8);
void OpenPartyMenu();
-u8 sub_806B124(void);
+bool8 sub_806B124(void);
u8 IsLinkDoubleBattle(void);
u8 sub_806B58C(u8);
u8 sub_806B58C(u8);
void sub_806BC3C(u8, u8);
u8 sub_806BD58(u8, u8);
u8 sub_806BD58(u8, u8);
-u16 sub_806BD80(); // undefined args in battle_party_menu.c
+u16 sub_806BD80(u8);
void task_pc_turn_off();
-void sub_806BF74();
-void sub_806C994();
-u8 sub_806CA38(u8);
+void sub_806BF74(u8 arg0, u8 arg1);
+void sub_806C994(u8 arg0, u8 arg1);
+u8 sub_806CA38(u8 taskID);
void sub_806CB74(u8 taskId);
void sub_806CCE4(void);
void sub_806CD44(u8 taskId);
-void sub_806D538();
-void sub_806D538();
-void sub_806D538();
+void sub_806D538(u8 arg0, u8 arg1);
void sub_806D5A4(void);
void SetMonIconAnim();
void TryCreatePartyMenuMonIcon(u8, u8, struct Pokemon *);
void LoadHeldItemIconGraphics(void);
-void LoadHeldItemIconGraphics(void);
+void PartyMenuTryGiveMonHeldItem(u8 taskId, u16 newItem, TaskFunc c);
void CreateHeldItemIcons_806DC34(); // undefined args
void CreateHeldItemIcons_806DC34();
u8 GetMonIconSpriteId_maybe();
@@ -151,5 +168,13 @@ void DoRareCandyItemEffect(u8, u16, TaskFunc);
void Task_RareCandy1(u8);
void Task_RareCandy2(u8);
void sub_8070848(u8 taskId);
+void sub_806CA60(u8 taskId);
+void sub_806CD5C(u8 taskId);
+void DoTakeMail(u8 taskId, TaskFunc func);
+void PartyMenuTryGiveMonHeldItem_806ECE8(u8 taskId, TaskFunc func);
+void PartyMenuTryGiveMonMail(u8 taskId, TaskFunc func);
+void sub_806D668(u8 partyID);
+void TaughtMove(u8 taskId);
+void StopTryingToTeachMove_806F588(u8 taskId);
#endif // GUARD_PARTY_MENU_H
diff --git a/include/pokeblock.h b/include/pokeblock.h
index f78ed40c3..6720653a0 100644
--- a/include/pokeblock.h
+++ b/include/pokeblock.h
@@ -1,7 +1,8 @@
#ifndef GUARD_POKEBLOCK_H
#define GUARD_POKEBLOCK_H
-enum {
+enum
+{
PBLOCK_CLR_BLACK,
PBLOCK_CLR_RED,
PBLOCK_CLR_BLUE,
@@ -10,15 +11,32 @@ enum {
PBLOCK_CLR_YELLOW
};
+enum
+{
+ PBLOCK_COLOR,
+ PBLOCK_SPICY,
+ PBLOCK_DRY,
+ PBLOCK_SWEET,
+ PBLOCK_BITTER,
+ PBLOCK_SOUR,
+ PBLOCK_FEEL,
+};
+
void sub_810B96C(void);
u8 sub_810BA50(s16, s16, u8);
u8 sub_810C9B0(struct Pokeblock *);
-s16 sub_810CA9C(const struct Pokeblock *, u8);
+s16 GetPokeblockData(const struct Pokeblock *, u8);
u8 sub_810C9E8(struct Pokeblock *);
void sub_810BA7C(u8);
void ClearPokeblocks(void);
-bool8 sub_810CA6C(u8);
-s16 sub_810CAE4(u8, const struct Pokeblock *);
+bool8 PokeblockClearIfExists(u8);
+s16 PokeblockGetGain(u8, const struct Pokeblock *);
u8 sub_810CB68(u8, u8*);
+void PokeblockCopyName(struct Pokeblock *pokeblock, u8 *dest);
+void CB2_PreparePokeblockFeedScene(void);
+
+#include "main.h"
+
+void sub_8136130(struct Pokeblock *, MainCallback);
#endif // GUARD_POKEBLOCK_H
diff --git a/include/pokeblock_feed.h b/include/pokeblock_feed.h
deleted file mode 100644
index 65d0d1dc9..000000000
--- a/include/pokeblock_feed.h
+++ /dev/null
@@ -1,10 +0,0 @@
-//
-// Created by Scott Norton on 6/28/17.
-//
-
-#ifndef POKERUBY_POKEBLOCK_FEED_H
-#define POKERUBY_POKEBLOCK_FEED_H
-
-void sub_8147ADC(void);
-
-#endif //POKERUBY_POKEBLOCK_FEED_H
diff --git a/include/pokemon.h b/include/pokemon.h
index e2c7bd60e..67f56eb53 100644
--- a/include/pokemon.h
+++ b/include/pokemon.h
@@ -93,6 +93,8 @@
#define MON_DATA_SPATK2 87
#define MON_DATA_SPDEF2 88
+#define MAX_LEVEL 100
+
#define MON_MALE 0x00
#define MON_FEMALE 0xFE
#define MON_GENDERLESS 0xFF
@@ -510,7 +512,7 @@ void sub_803ADE8(struct Pokemon *mon, struct UnknownPokemonStruct *src);
void sub_803AF78(struct Pokemon *mon, struct UnknownPokemonStruct *dest);
u16 CalculateBoxMonChecksum(struct BoxPokemon *boxMon);
void CalculateMonStats(struct Pokemon *mon);
-void sub_803B4B4(struct Pokemon *src, struct Pokemon *dest);
+void sub_803B4B4(const struct BoxPokemon *src, struct Pokemon *dest);
u8 GetLevelFromMonExp(struct Pokemon *mon);
u8 GetLevelFromBoxMonExp(struct BoxPokemon *boxMon);
u16 GiveMoveToMon(struct Pokemon *mon, u16 move);
@@ -520,7 +522,7 @@ 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 sub_803B7C8(struct Pokemon *mon, u8 a2);
+u16 MonTryLearningNewMove(struct Pokemon *mon, bool8 a2);
void DeleteFirstMoveAndGiveMoveToMon(struct Pokemon *mon, u16 move);
void DeleteFirstMoveAndGiveMoveToBoxMon(struct BoxPokemon *boxMon, u16 move);
@@ -576,6 +578,7 @@ u16 NationalPokedexNumToSpecies(u16 nationalNum);
u16 NationalToHoennOrder(u16);
u16 SpeciesToNationalPokedexNum(u16);
u16 HoennToNationalOrder(u16);
+u16 SpeciesToCryId(u16 species);
void DrawSpindaSpots(u16, u32, u8 *, u8);
u8 sub_803FBBC(void);
u8 sub_803FC58(u16);
@@ -598,5 +601,7 @@ u8 *sub_8040D08();
bool32 sub_8040D3C(u16 species, u8 *name, u8 language);
s8 sub_8040A54(struct Pokemon *, u8);
u16 GetMonEVCount(struct Pokemon *);
+u8 GetLevelUpMovesBySpecies(u16, u16 *);
+u8 TryIncrementMonLevel(struct Pokemon *);
#endif // GUARD_POKEMON_H
diff --git a/include/pokemon_menu.h b/include/pokemon_menu.h
index fc43a44c6..06f905577 100644
--- a/include/pokemon_menu.h
+++ b/include/pokemon_menu.h
@@ -1,15 +1,47 @@
#ifndef GUARD_POKEMON_MENU_H
#define GUARD_POKEMON_MENU_H
+#define POKEMENU_FIRST_FIELD_MOVE_ID 10
+
+enum
+{
+ POKEMENU_SUMMARY, // 0
+ POKEMENU_SWITCH, // 1
+ POKEMENU_ITEM, // 2
+ POKEMENU_CANCEL, // 3
+ POKEMENU_GIVE_ITEM, // 4
+ POKEMENU_TAKE_ITEM, // 5
+ POKEMENU_TAKE_MAIL, // 6
+ POKEMENU_MAIL, // 7
+ POKEMENU_READ_MAIL, // 8
+ POKEMENU_CANCEL_SUBMENU, // 9
+ POKEMENU_CUT, // 10
+ POKEMENU_FLASH, // 11
+ POKEMENU_ROCK_SMASH, // 12
+ POKEMENU_STRENGTH, // 13
+ POKEMENU_SURF, // 14
+ POKEMENU_FLY, // 15
+ POKEMENU_DIVE, // 16
+ POKEMENU_WATERFALL, // 17
+ POKEMENU_TELEPORT, // 18
+ POKEMENU_DIG, // 19
+ POKEMENU_SECRET_POWER, // 20
+ POKEMENU_MILK_DRINK, // 21
+ POKEMENU_SOFT_BOILED, // 22
+ POKEMENU_SWEET_SCENT, // 23
+};
+
+extern u8 gLastFieldPokeMenuOpened;
+extern void (*gUnknown_03005CE4)(void);
+
+void sub_808B5B4(u32 taskID);
void sub_8089A70(void);
-void sub_808A004();
-void sub_808AB90(void);
-void sub_808AB90(void); // unknown args
-void sub_808AB90(void);
+void sub_808A004(u8 taskID);
+void FieldCallback_Teleport(void);
void sub_808AD58(void);
void sub_808B020(void);
-void sub_808B0C0(u8);
+void sub_808B0C0(u8 taskID);
void sub_808B508(u8);
-void sub_808B564();
+void sub_808B564(void);
#endif // GUARD_POKEMON_MENU_H
diff --git a/include/pokemon_storage_system.h b/include/pokemon_storage_system.h
index bd4e7915b..9fe3436ef 100644
--- a/include/pokemon_storage_system.h
+++ b/include/pokemon_storage_system.h
@@ -2,5 +2,7 @@
#define GUARD_POKEMON_STORAGE_SYSTEM_H
void ResetPokemonStorageSystem(void);
+void BoxMonRestorePP(struct BoxPokemon *);
+void party_compaction(void);
#endif // GUARD_POKEMON_STORAGE_SYSTEM_H
diff --git a/include/rom3.h b/include/rom3.h
index 1fa55d11a..81bb56df1 100644
--- a/include/rom3.h
+++ b/include/rom3.h
@@ -10,58 +10,58 @@ void sub_800B9A8(void);
void sub_800BA78(void);
void sub_800BD54(void);
void sub_800BF28(void);
-void dp01_prepare_buffer_wireless_probably(u8 a, u16, u8 *c);
+void PrepareBufferDataTransferLink(u8 a, u16, u8 *c);
void sub_800C1A8(u8);
void sub_800C35C(void);
void sub_800C47C(u8);
void EmitGetAttributes(u8 a, u8 b, u8 c);
-void dp01_build_cmdbuf_x01_a_b_0(u8 a, u8 b, u8 c);
-void dp01_build_cmdbuf_x04_4_4_4(u8 a);
-void EmitSwitchInAnim(u8, u8, u8);
+void Emitcmd1(u8 a, u8 b, u8 c);
+void EmitLoadPokeSprite(u8 a);
+void EmitSendOutPoke(u8, u8, u8);
void EmitReturnPokeToBall(u8 a, u8 b);
-void dp01_build_cmdbuf_x07_7_7_7(u8 a);
+void EmitTrainerThrow(u8 a);
void EmitTrainerSlide(u8 a);
-void dp01_build_cmdbuf_x09_9_9_9(u8 a);
-void EmitFaintAnimation(u8 a);
-void dp01_build_cmdbuf_x0B_B_B_B(u8 a);
-void dp01_build_cmdbuf_x0C_C_C_C(u8 a);
-void EmitBallThrowAnim(u8 a, u8 b);
+void EmitTrainerSlideBack(u8 a);
+void Emitcmd10(u8 a);
+void Emitcmd11(u8 a);
+void Emitcmd12(u8 a);
+void EmitBallThrow(u8 a, u8 b);
void EmitMoveAnimation(u8 a, u16 b, u8 c, u16 d, s32 e, u8 f, struct DisableStruct *g);
void EmitPrintString(u8 a, u16 b);
void EmitPrintStringPlayerOnly(u8 a, u16 stringID);
-void dp01_build_cmdbuf_x12_a_bb(u8 a, u8 b, u16 c);
-void sub_800CBA4(u8 a, u8 b, u8 c, u8 *d);
-void sub_800CBE0(u8 a, u8 *b);
+void Emitcmd18(u8 a, u8 b, u16 c);
+void Emitcmd20(u8 a, u8 b, u8 c, u8 *d);
+void EmitOpenBag(u8 a, u8 *b);
void EmitChoosePokemon(u8 a, u8 b, u8 c, u8 d, u8 *e);
-void dp01_build_cmdbuf_x17_17_17_17(u8 a);
+void Emitcmd23(u8 a);
void EmitHealthBarUpdate(u8 a, u16 b);
void EmitExpBarUpdate(u8 a, u8 b, u16 c);
void EmitStatusIconUpdate(u8 a, u32 b, u32 c);
void EmitStatusAnimation(u8 a, u8 b, u32 c);
void EmitStatusXor(u8 a, u8 b);
-void dp01_build_cmdbuf_x1D_1D_numargs_varargs(u8, u16, u8 *);
-void dp01_build_cmdbuf_x21_a_bb(u8 a, u8 b, u16 c);
-void dp01_build_cmdbuf_x22_a_three_bytes(u8 a, u8 b, u8 *c);
-void dp01_build_cmdbuf_x23_aa_0(u8 a, u16 b);
-void dp01_build_cmdbuf_x24_aa_0(u8 a, u16 b);
-void dp01_build_cmdbuf_x25_25_25_25(u8 a);
-void dp01_build_cmdbuf_x26_a(u8 a, u8 b);
-void dp01_build_cmdbuf_x27_27_27_27(u8 a);
-void dp01_build_cmdbuf_x28_28_28_28(u8 a);
+void Emitcmd29(u8, u16, u8 *);
+void Emitcmd33(u8 a, u8 b, u16 c);
+void Emitcmd34(u8 a, u8 b, u8 *c);
+void Emitcmd35(u8 a, u16 b);
+void Emitcmd36(u8 a, u16 b);
+void Emitcmd37(u8 a);
+void Emitcmd38(u8 a, u8 b);
+void Emitcmd39(u8 a);
+void Emitcmd40(u8 a);
void EmitHitAnimation(u8 a);
-void dp01_build_cmdbuf_x2A_2A_2A_2A(u8 a);
+void Emitcmd42(u8 a);
void EmitEffectivenessSound(u8 a, u16 b);
-void EmitPlaySound(u8 a, u16 b);
+void Emitcmd44(u8 a, u16 b);
void EmitFaintingCry(u8 a);
-void EmitBattleIntroSlide(u8 a, u8 b);
-void dp01_build_cmdbuf_x2F_2F_2F_2F(u8 a);
-void dp01_build_cmdbuf_x30_TODO(u8 a, u8 *b, u8 c);
-void dp01_build_cmdbuf_x31_31_31_31(u8 a);
-void dp01_build_cmdbuf_x32_32_32_32(u8 a);
+void EmitIntroSlide(u8 a, u8 b);
+void EmitTrainerBallThrow(u8 a);
+void Emitcmd48(u8 a, u8 *b, u8 c);
+void Emitcmd49(u8 a);
+void Emitcmd50(u8 a);
void EmitSpriteInvisibility(u8 a, u8 b);
void EmitBattleAnimation(u8 a, u8 b, u16 c);
void EmitLinkStandbyMsg(u8 a, u8 b);
void EmitResetActionMoveSelection(u8 a, u8 b);
-void dp01_build_cmdbuf_x37_a(u8 a, u8 b);
+void Emitcmd55(u8 a, u8 b);
#endif // GUARD_ROM3_H
diff --git a/include/script.h b/include/script.h
index 2a738698c..5a899cf4a 100644
--- a/include/script.h
+++ b/include/script.h
@@ -11,7 +11,7 @@ struct ScriptContext
u8 stackDepth;
u8 mode;
u8 comparisonResult;
- u8 (*nativePtr)(void);
+ bool8 (*nativePtr)(void);
const u8 *scriptPtr;
const u8 *stack[20];
ScrCmdFunc *cmdTable;
@@ -23,7 +23,7 @@ struct ScriptContext
void InitScriptContext(struct ScriptContext *ctx, void *cmdTable, void *cmdTableEnd);
u8 SetupBytecodeScript(struct ScriptContext *ctx, const u8 *ptr);
-void SetupNativeScript(struct ScriptContext *ctx, void *ptr);
+void SetupNativeScript(struct ScriptContext *ctx, bool8 (*ptr)(void));
void StopScript(struct ScriptContext *ctx);
u8 RunScriptCommand(struct ScriptContext *ctx);
u8 ScriptPush(struct ScriptContext *ctx, const u8 *ptr);
@@ -42,16 +42,12 @@ void ScriptContext1_SetupScript(const u8 *ptr);
void ScriptContext1_Stop(void);
void EnableBothScriptContexts(void);
void ScriptContext2_RunNewScript(const u8 *ptr);
-u8 *mapheader_get_tagged_pointer(u8 tag);
-void mapheader_run_script_by_tag(u8 tag);
-u8 *mapheader_get_first_match_from_tagged_ptr_list(u8 tag);
void mapheader_run_script_with_tag_x1(void);
void mapheader_run_script_with_tag_x3(void);
void mapheader_run_script_with_tag_x5(void);
void mapheader_run_script_with_tag_x6(void);
bool8 mapheader_run_first_tag2_script_list_match(void);
void mapheader_run_first_tag4_script_list_match(void);
-u32 CalculateRamScriptChecksum(void);
void ClearRamScript(void);
bool8 InitRamScript(u8 *script, u16 scriptSize, u8 mapGroup, u8 mapNum, u8 objectId);
u8 *GetRamScript(u8 objectId, u8 *script);
diff --git a/include/script_menu.h b/include/script_menu.h
index cc5c442ec..dca8c26a7 100644
--- a/include/script_menu.h
+++ b/include/script_menu.h
@@ -1,33 +1,19 @@
#ifndef GUARD_SCRIPTMENU_H
#define GUARD_SCRIPTMENU_H
-struct MultichoiceListStruct
-{
- struct MenuAction *list;
- u8 count;
-};
+struct MenuAction;
extern const u8 *const gUnknown_083CE048[];
-bool8 sub_80B5054(u8 left, u8 top, u8 var3, u8 var4);
-bool8 sub_80B50B0(u8 left, u8 top, u8 var3, u8 var4, u8 var5);
-u16 GetStringWidthInTilesForScriptMenu(const u8 *str);
-void DrawMultichoiceMenu(u8, u8, u8, struct MenuAction *list, u8, u8);
-void sub_80B5230(u8, u8, u8, u8, u8, u8);
-void sub_80B52B4(u8);
+bool8 ScriptMenu_Multichoice(u8 left, u8 top, u8 var3, u8 var4);
+bool8 ScriptMenu_MultichoiceWithDefault(u8 left, u8 top, u8 var3, u8 var4, u8 var5);
bool8 Multichoice(u8 var1, u8 var2, u8 var3, u8 var4);
-void sub_80B53B4(u8, u8, u8, struct MenuAction *list, u8);
-bool8 yes_no_box(u8 var1, u8 var2);
-bool8 IsScriptActive(void); // unused
-void task_yes_no_maybe(u8);
-bool8 sub_80B5578(u8 left, u8 top, u8 multichoiceId, u8 a4, u8 columnCount);
-void sub_80B5684(u8);
-bool8 TryCreatePCMenu(void);
-void CreatePCMenu(void);
-void sub_80B5838(void);
-void task_picbox(u8 taskId);
-bool8 sub_80B58C4(u16 var1, u8 var2, u8 var3);
-void *picbox_close(void);
-bool8 sub_80B59AC(void);
+bool8 ScriptMenu_YesNo(u8 var1, u8 var2);
+bool8 ScriptMenu_MultichoiceGrid(u8 left, u8 top, u8 multichoiceId, u8 a4, u8 columnCount);
+bool8 ScrSpecial_CreatePCMenu(void);
+void ScriptMenu_CreatePCMenu(void);
+void ScriptMenu_DisplayPCStartupPrompt(void);
+bool8 ScriptMenu_ShowPokemonPic(u16 var1, u8 var2, u8 var3);
+bool8 (*ScriptMenu_GetPicboxWaitFunc(void))(void);
#endif
diff --git a/include/script_movement.h b/include/script_movement.h
index e3cdc25b3..dc6d7e51b 100644
--- a/include/script_movement.h
+++ b/include/script_movement.h
@@ -1,8 +1,8 @@
#ifndef GUARD_SCRIPT_MOVEMENT_H
#define GUARD_SCRIPT_MOVEMENT_H
-bool8 exec_movement(u8, u8, u8, u8 *);
-bool8 sub_80A212C(u8, u8, u8);
+bool8 ScriptMovement_StartObjectMovementScript(u8, u8, u8, u8 *);
+bool8 ScriptMovement_IsObjectMovementFinished(u8, u8, u8);
void sub_80A2178(void);
#endif // GUARD_SCRIPT_MOVEMENT_H
diff --git a/include/script_pokemon_80C4.h b/include/script_pokemon_80C4.h
index 629980a2d..fab07994e 100644
--- a/include/script_pokemon_80C4.h
+++ b/include/script_pokemon_80C4.h
@@ -8,10 +8,10 @@ void ReducePlayerPartyToThree(void);
u8 sub_80C4D50(void);
void ShowContestWinner(void);
-void HealPlayerParty();
+void ScrSpecial_HealPlayerParty();
u8 ScriptGiveMon(u16, u8, u16, u32, u32, u8);
u8 ScriptGiveEgg(u16);
-void ScriptWildBattle(u16, u8, u16);
+void CreateScriptedWildMon(u16, u8, u16);
void ScriptSetMonMoveSlot(u8, u16, u8);
#endif
diff --git a/include/shop.h b/include/shop.h
index cca6091c9..b785ca764 100644
--- a/include/shop.h
+++ b/include/shop.h
@@ -1,6 +1,34 @@
#ifndef GUARD_SHOP_H
#define GUARD_SHOP_H
+enum
+{
+ MART_TYPE_0, // normal mart
+ MART_TYPE_1,
+ MART_TYPE_2,
+};
+
+// shop view window NPC info enum
+enum
+{
+ MAP_OBJ_ID,
+ X_COORD,
+ Y_COORD,
+ ANIM_NUM
+};
+
+struct MartInfo
+{
+ /* 0x0 */ void (* callback) (void);
+ /* 0x4 */ u16 *itemList;
+ /* 0x8 */ u8 itemCount; // how many unique items are there for sale?
+ /* 0x9 */ u8 cursor; // this shows the on-screen true index of the cursor and not the current item selected.
+ /* 0xA */ u8 numChoices; // how many options does the mart have? can be either 2 or 1 (BUY/SELL vs BUY)
+ /* 0xB */ u8 choicesAbove; // when your cursor is far down, there are choices that have scrolled up past the top. this is the count of that.
+ /* 0xC */ u8 martType; // 0-2. 0 is normal mart while 1-2 seem to be decor shops or non-stackable purchases in general.
+ /* 0xD */ u8 curItemCount; // if you are selling an item, this is the count of the current item stack you have.
+};
+
void sub_80B2E38(u8);
void HandleShopMenuQuit(u8);
void sub_80B2FA0(u8);
@@ -11,8 +39,10 @@ void BuyMenuDrawMapGraphics(void);
void sub_80B3764(int, int);
void sub_80B37EC(void);
void sub_80B40E8(u8);
-void CreatePokemartMenu(void *);
-void CreateDecorationShop1Menu(void *);
-void CreateDecorationShop2Menu(void *);
+void CreatePokemartMenu(u16 *);
+void CreateDecorationShop1Menu(u16 *);
+void CreateDecorationShop2Menu(u16 *);
+void sub_80B356C(void);
+void sub_80B368C(void);
#endif // GUARD_SHOP_H
diff --git a/include/songs.h b/include/songs.h
index e801ac7d7..afd26d683 100644
--- a/include/songs.h
+++ b/include/songs.h
@@ -105,9 +105,9 @@ enum
SE_C_PASI,
SE_C_SYU,
SE_C_PIKON,
- SE_REAPOKE,
- SE_OP_BASYU,
- SE_BT_START,
+ /*0x66*/ SE_REAPOKE,
+ /*0x67*/ SE_OP_BASYU,
+ /*0x68*/ SE_BT_START,
SE_DENDOU,
SE_JIHANKI,
SE_TAMA,
@@ -131,20 +131,20 @@ enum
/*0x7D*/ SE_W145B,
/*0x7E*/ SE_W145C,
/*0x7F*/ SE_W240,
- SE_W015,
- SE_W081,
- SE_W081B,
- SE_W088,
- SE_W016,
- SE_W016B,
- SE_W003,
- SE_W104,
- SE_W013,
- SE_W196,
- SE_W086,
- SE_W004,
- SE_W025,
- SE_W025B,
+ /*0x80*/ SE_W015,
+ /*0x81*/ SE_W081,
+ /*0x82*/ SE_W081B,
+ /*0x83*/ SE_W088,
+ /*0x84*/ SE_W016,
+ /*0x85*/ SE_W016B,
+ /*0x86*/ SE_W003,
+ /*0x87*/ SE_W104,
+ /*0x88*/ SE_W013,
+ /*0x89*/ SE_W196,
+ /*0x8A*/ SE_W086,
+ /*0x8B*/ SE_W004,
+ /*0x8C*/ SE_W025,
+ /*0x8D*/ SE_W025B,
SE_W152,
SE_W026,
SE_W172,
@@ -185,29 +185,29 @@ enum
SE_W071B,
SE_W071,
SE_W103,
- SE_W062,
- SE_W062B,
- SE_W048,
- SE_W187,
- SE_W118,
- SE_W155,
- SE_W122,
- SE_W060,
- SE_W185,
- SE_W014,
- SE_W043,
- SE_W207,
- SE_W207B,
- SE_W215,
- SE_W109,
- SE_W173,
- SE_W280,
- SE_W202,
- SE_W060B,
- SE_W076,
- SE_W080,
- SE_W100,
- SE_W107,
+ /*0xB6*/ SE_W062,
+ /*0xB7*/ SE_W062B,
+ /*0xB8*/ SE_W048,
+ /*0xB9*/ SE_W187,
+ /*0xBA*/ SE_W118,
+ /*0xBB*/ SE_W155,
+ /*0xBC*/ SE_W122,
+ /*0xBD*/ SE_W060,
+ /*0xBE*/ SE_W185,
+ /*0xBF*/ SE_W014,
+ /*0xC0*/ SE_W043,
+ /*0xC1*/ SE_W207,
+ /*0xC2*/ SE_W207B,
+ /*0xC3*/ SE_W215,
+ /*0xC4*/ SE_W109,
+ /*0xC5*/ SE_W173,
+ /*0xC6*/ SE_W280,
+ /*0xC7*/ SE_W202,
+ /*0xC8*/ SE_W060B,
+ /*0xC9*/ SE_W076,
+ /*0xCA*/ SE_W080,
+ /*0xCB*/ SE_W100,
+ /*0xCC*/ SE_W107,
SE_W166,
SE_W129,
SE_W115,
diff --git a/include/species.h b/include/species.h
index e33481afd..9ab0565cb 100644
--- a/include/species.h
+++ b/include/species.h
@@ -1,7 +1,8 @@
#ifndef GUARD_SPECIES_H
#define GUARD_SPECIES_H
-enum {
+enum
+{
SPECIES_NONE, // 0x000
SPECIES_BULBASAUR, // 0x001
SPECIES_IVYSAUR, // 0x002
diff --git a/include/sprite.h b/include/sprite.h
index 5682a7c1d..0d84c8127 100644
--- a/include/sprite.h
+++ b/include/sprite.h
@@ -299,4 +299,6 @@ u8 SpriteTileAllocBitmapOp(u16 bit, u8 op);
extern const union AffineAnimCmd *const gDummySpriteAffineAnimTable[];
+extern const struct SpriteTemplate gDummySpriteTemplate;
+
#endif // GUARD_SPRITE_H
diff --git a/include/start_menu.h b/include/start_menu.h
index 5169b3bf0..d3f77dc99 100644
--- a/include/start_menu.h
+++ b/include/start_menu.h
@@ -5,7 +5,7 @@
void CreateStartMenuTask(void (*func)(u8));
void sub_80712B4(u8 taskId);
void sub_8071310(void);
-void InitSaveDialog(void);
+void ScrSpecial_DoSaveDialog(void);
void sub_8071B28(void);
#endif // GUARD_STARTER_CHOOSE_H
diff --git a/include/text.h b/include/text.h
index 99987d2c3..7125bc803 100644
--- a/include/text.h
+++ b/include/text.h
@@ -2,6 +2,7 @@
#define GUARD_TEXT_H
#define CHAR_SPACE 0x00
+#define CHAR_SONG_WORD_SEPARATOR 0x37 // separates words in the bard song. Not sure if it's used for anything else
#define CHAR_0 0xA1
#define CHAR_QUESTION_MARK 0xAC
#define CHAR_PERIOD 0xAD
@@ -97,35 +98,35 @@ struct WindowConfig
struct Window
{
- u8 textMode;
- u8 fontNum;
- u8 language;
- u8 foregroundColor;
- u8 backgroundColor;
- u8 shadowColor;
- u8 paletteNum;
- u8 tilemapLeft;
- u8 tilemapTop;
- u8 width;
- u8 height;
- u8 win_field_B;
- u8 win_field_C;
- u8 delayCounter;
- u8 spacing;
- u8 win_field_F;
- u8 cursorX;
- u8 cursorY;
- u8 left;
- u16 top;
- u16 state;
- u16 downArrowCounter;
- u16 tileDataStartOffset;
- u16 tileDataOffset;
- u16 textIndex;
- const u8 *text;
- u8 *tileData;
- u16 *tilemap;
- struct WindowConfig *config;
+ /*0x00*/ u8 textMode;
+ /*0x01*/ u8 fontNum;
+ /*0x02*/ u8 language;
+ /*0x03*/ u8 foregroundColor;
+ /*0x04*/ u8 backgroundColor;
+ /*0x05*/ u8 shadowColor;
+ /*0x06*/ u8 paletteNum;
+ /*0x07*/ u8 tilemapLeft;
+ /*0x08*/ u8 tilemapTop;
+ /*0x09*/ u8 width;
+ /*0x0A*/ u8 height;
+ /*0x0B*/ u8 win_field_B;
+ /*0x0C*/ u8 win_field_C;
+ /*0x0D*/ u8 delayCounter;
+ /*0x0E*/ u8 spacing;
+ /*0x0F*/ u8 win_field_F;
+ /*0x10*/ u8 cursorX;
+ /*0x11*/ u8 cursorY;
+ /*0x12*/ u8 left;
+ /*0x14*/ u16 top; // padded to 0x14
+ /*0x16*/ u16 state;
+ /*0x18*/ u16 downArrowCounter;
+ /*0x1A*/ u16 tileDataStartOffset;
+ /*0x1C*/ u16 tileDataOffset;
+ /*0x1E*/ u16 textIndex;
+ /*0x20*/ const u8 *text;
+ /*0x24*/ u8 *tileData;
+ /*0x28*/ u16 *tilemap;
+ /*0x2C*/ struct WindowConfig *config;
};
extern vu16 *const gBGControlRegs[];
diff --git a/include/trade.h b/include/trade.h
new file mode 100644
index 000000000..a44388506
--- /dev/null
+++ b/include/trade.h
@@ -0,0 +1,23 @@
+
+#ifndef GUARD_TRADE_H
+#define GUARD_TRADE_H
+
+struct SomeTradeStruct
+{
+ u8 unk0;
+ u8 unk1;
+ u8 unk2;
+ u8 unk3;
+ struct Window field_4;
+ u8 field_34;
+};
+
+extern struct SomeTradeStruct* gUnknown_03004828;
+
+const u8 gOtherText_MaleSymbol3[1];
+const u8 gOtherText_FemaleSymbol3[1];
+const u8 gOtherText_GenderlessSymbol[1];
+
+void sub_804E22C(void);
+
+#endif // GUARD_TRADE_H
diff --git a/include/trader.h b/include/trader.h
index 24a9f2a07..832a04b65 100644
--- a/include/trader.h
+++ b/include/trader.h
@@ -1,6 +1,7 @@
#ifndef GUARD_TRADER_H
#define GUARD_TRADER_H
-void sub_81099CC(void);
+void TraderSetup(void);
+void sub_8109A20(void);
#endif // GUARD_TRADER_H
diff --git a/include/trainer_see.h b/include/trainer_see.h
index b80a41641..de96dcd3a 100644
--- a/include/trainer_see.h
+++ b/include/trainer_see.h
@@ -7,29 +7,13 @@
bool8 CheckTrainers(void);
bool8 CheckTrainer(u8);
u8 TrainerCanApproachPlayer(struct MapObject *);
-bool8 IsTrainerInRangeSouth(struct MapObject *trainerObj, s16 vision, s16 x, s16 y);
-bool8 IsTrainerInRangeNorth(struct MapObject *trainerObj, s16 vision, s16 x, s16 y);
-bool8 IsTrainerInRangeWest(struct MapObject *trainerObj, s16 vision, s16 x, s16 y);
-bool8 IsTrainerInRangeEast(struct MapObject *trainerObj, s16 vision, s16 x, s16 y);
+
bool8 CheckPathBetweenTrainerAndPlayer(struct MapObject2 *, u8, u8);
void sub_80842C8(struct MapObject *, u8);
void sub_80842FC(void (*func)(u8));
void RunTrainerSeeFuncList(u8);
-u8 sub_8084394(void);
-s8 sub_8084398(u8 taskId, struct Task *task, struct MapObject *trainerObj);
-s8 sub_80843DC(u8 taskId, struct Task *task, struct MapObject *trainerObj);
-s8 sub_808441C(u8 taskId, struct Task *task, struct MapObject *trainerObj);
-s8 sub_8084478(u8 taskId, struct Task *task, struct MapObject *trainerObj);
-s8 sub_8084534(u8 taskId, struct Task *task, struct MapObject *trainerObj);
-s8 sub_8084578(u8 taskId, struct Task *task, struct MapObject *trainerObj);
-s8 sub_80845AC(u8 taskId, struct Task *task, struct MapObject *trainerObj);
-s8 sub_80845C8(u8 taskId, struct Task *task, struct MapObject *trainerObj);
-s8 sub_80845FC(u8 taskId, struct Task *task, struct MapObject *trainerObj);
-s8 sub_8084654(u8 taskId, struct Task *task, struct MapObject *trainerObj);
-s8 sub_80846C8(u8 taskId, struct Task *task, struct MapObject *trainerObj);
-void sub_80846E4(u8 taskId);
void sub_8084794(struct MapObject *var);
-void sub_80847C8(void);
+void ScrSpecial_EndTrainerApproach(void);
void sub_80847D8(u8);
void sub_8084894(struct Sprite *sprite, u16 a2, u8 a3);
void objc_exclamation_mark_probably(struct Sprite *sprite);
diff --git a/include/unknown_task.h b/include/unknown_task.h
index dc07767d6..d7ac63931 100644
--- a/include/unknown_task.h
+++ b/include/unknown_task.h
@@ -1,14 +1,24 @@
#ifndef GUARD_UNKNOWN_TASK_H
#define GUARD_UNKNOWN_TASK_H
+struct UnknownTaskStruct
+{
+ volatile void *dest;
+ u32 control;
+ u8 unk8;
+ u8 unk9;
+};
+
void remove_some_task(void);
void remove_some_task(void);
void dp12_8087EA4(void);
void dp12_8087EA4(void);
-void sub_80895F8(u32 i, u32 i1, u32 i2);
-void sub_80895F8();
+//void sub_80895F8(u32 i, u32 i1, u32 i2);
+//void sub_80895F8();
+void sub_80895F8(struct UnknownTaskStruct unk);
void sub_8089668(void);
void sub_8089668();
-void sub_8089944(int i, int i1, int i2, int i3, int i4, int i5, int i6);
+//void sub_8089944(int i, int i1, int i2, int i3, int i4, int i5, int i6);
+u8 sub_8089944(u8 a1, u8 a2, u8 a3, u8 a4, u8 a5, u8 a6, u8 a7);
#endif // GUARD_UNKNOWN_TASK_H
diff --git a/include/use_pokeblock.h b/include/use_pokeblock.h
deleted file mode 100644
index f34857cf1..000000000
--- a/include/use_pokeblock.h
+++ /dev/null
@@ -1,10 +0,0 @@
-//
-// Created by Scott Norton on 5/31/17.
-//
-
-#ifndef POKERUBY_USE_POKEBLOCK_H
-#define POKERUBY_USE_POKEBLOCK_H
-
-void sub_8136130(struct Pokeblock *, MainCallback);
-
-#endif //POKERUBY_USE_POKEBLOCK_H
diff --git a/include/vars.h b/include/vars.h
index efbb462a4..179fd6f93 100644
--- a/include/vars.h
+++ b/include/vars.h
@@ -45,6 +45,7 @@
#define VAR_0x4095 0x4095
#define VAR_0x4097 0x4097
#define VAR_0x409a 0x409a
+#define VAR_WEATHER_INSTITUTE_CLEARED 0x040B3
#define VAR_PORTHOLE 0x40B4
#define VAR_0x40BC 0x40BC
diff --git a/include/wild_encounter.h b/include/wild_encounter.h
index a4485b08d..d4b343126 100644
--- a/include/wild_encounter.h
+++ b/include/wild_encounter.h
@@ -28,12 +28,12 @@ extern struct WildPokemonHeader gWildMonHeaders[];
void DisableWildEncounters(bool8 disabled);
bool8 StandardWildEncounter(u16 a, u16 b);
-void RockSmashWildEncounter(void);
+void ScrSpecial_RockSmashWildEncounter(void);
bool8 SweetScentWildEncounter(void);
-bool8 GetFishingWildMonListHeader(void);
+bool8 DoesCurrentMapHaveFishingMons(void);
void FishingWildEncounter(u8 rod);
u16 GetLocalWildMon(bool8 *isWaterMon);
-u16 GetMirageIslandMon(void);
+u16 GetLocalWaterMon(void);
bool8 UpdateRepelCounter(void);
#endif // GUARD_WILD_ENCOUNTER_H
diff --git a/ld_script.txt b/ld_script.txt
index c60aa3729..aacee605e 100644
--- a/ld_script.txt
+++ b/ld_script.txt
@@ -55,12 +55,11 @@ SECTIONS {
asm/battle_2.o(.text);
src/battle_3.o(.text);
src/battle_4.o(.text);
- asm/battle_5.o(.text);
- src/battle_6.o(.text);
+ src/battle_controller_player.o(.text);
src/battle_7.o(.text);
- src/battle_8.o(.text);
+ src/battle_controller_opponent.o(.text);
asm/battle_9.o(.text);
- src/battle_10.o(.text);
+ src/battle_controller_linkopponent.o(.text);
src/pokemon_1.o(.text);
src/calculate_base_damage.o(.text);
src/pokemon_2.o(.text);
@@ -72,7 +71,6 @@ SECTIONS {
src/util.o(.text);
src/blend_palette.o(.text);
src/daycare.o(.text);
- asm/daycare.o(.text);
src/egg_hatch.o(.text);
src/battle_interface.o(.text);
src/smokescreen.o(.text);
@@ -86,17 +84,14 @@ SECTIONS {
src/berry_blender.o(.text);
src/play_time.o(.text);
src/new_game.o(.text);
- src/rom4.o(.text);
+ src/overworld.o(.text);
src/fieldmap.o(.text);
src/metatile_behavior.o(.text);
src/field_camera.o(.text);
src/field_door.o(.text);
src/field_player_avatar.o(.text);
src/field_map_obj.o(.text);
- asm/field_map_obj.o(.text);
- src/field_map_obj.o(.text_fmocb2_c);
src/field_ground_effect.o(.text);
- asm/field_ground_effect.o(.text);
src/field_map_obj_helpers.o(.text);
src/field_message_box.o(.text);
src/map_obj_lock.o(.text);
@@ -120,7 +115,7 @@ SECTIONS {
src/battle_anim.o(.text);
src/rom_8077ABC.o(.text);
src/task.o(.text);
- asm/reshow_battle_screen.o(.text);
+ src/reshow_battle_screen.o(.text);
src/battle_anim_807B69C.o(.text);
src/title_screen.o(.text);
src/field_weather.o(.text);
@@ -128,15 +123,13 @@ SECTIONS {
src/field_fadetransition.o(.text);
src/field_screen_effect.o(.text);
src/battle_setup.o(.text);
- asm/cable_club.o(.text);
src/cable_club.o(.text);
- asm/cable_club.o(.text_80830E4);
src/mori_debug_menu.o(.text);
src/trainer_see.o(.text);
src/wild_encounter.o(.text);
src/field_effect.o(.text);
src/unknown_task.o(.text);
- asm/pokemon_menu.o(.text);
+ src/pokemon_menu.o(.text);
src/option_menu.o(.text);
src/pokedex.o(.text);
src/trainer_card.o(.text);
@@ -159,7 +152,6 @@ SECTIONS {
src/matsuda_debug_menu.o(.text);
asm/contest.o(.text);
src/shop.o(.text);
- asm/shop.o(.text);
src/berry.o(.text);
src/script_menu.o(.text);
src/naming_screen.o(.text);
@@ -189,14 +181,14 @@ SECTIONS {
src/pokenav.o(.text);
asm/pokenav.o(.text_80F708C);
src/mon_markings.o(.text);
- src/mauville_old_man.o(.text);
- asm/mauville_old_man.o(.text);
+ src/mauville_man.o(.text);
src/mail.o(.text);
src/menu_helpers.o(.text);
src/script_pokemon_util_80F99CC.o(.text);
src/dewford_trend.o(.text);
src/heal_location.o(.text);
src/region_map.o(.text);
+ src/cute_sketch.o(.text);
asm/cute_sketch.o(.text);
src/decoration.o(.text);
asm/slot_machine.o(.text);
@@ -218,7 +210,7 @@ SECTIONS {
src/field_specials.o(.text);
src/battle_records.o(.text);
asm/pokedex_area_screen.o(.text);
- asm/evolution_scene.o(.text);
+ src/evolution_scene.o(.text);
asm/roulette.o(.text);
asm/pokedex_cry_screen.o(.text);
src/pokedex_cry_screen.o(.text);
@@ -226,8 +218,8 @@ SECTIONS {
src/coins.o(.text);
src/landmark.o(.text);
src/fldeff_strength.o(.text);
- asm/battle_transition.o(.text);
- src/battle_811DA74.o(.text);
+ src/battle_transition.o(.text);
+ src/battle_controller_linkpartner.o(.text);
src/battle_message.o(.text);
src/choose_party.o(.text);
asm/cable_car.o(.text);
@@ -236,11 +228,10 @@ SECTIONS {
src/unused_8124F94.o(.text);
src/save.o(.text);
src/mystery_event_script.o(.text);
- asm/field_effect_helpers.o(.text);
+ src/field_effect_helpers.o(.text);
asm/contest_ai.o(.text);
asm/battle_anim_81258BC.o(.text);
- src/battle_anim_81258BC.o(.text);
- asm/battle_anim_81258BC.o(.text_812BBFC);
+ src/battle_controller_safari.o(.text);
src/fldeff_sweetscent.o(.text);
asm/battle_anim_812C144.o(.text);
src/learn_move.o(.text);
@@ -249,7 +240,7 @@ SECTIONS {
src/roamer.o(.text);
asm/battle_tower.o(.text);
src/use_pokeblock.o(.text);
- src/battle_anim_8137220.o(.text);
+ src/battle_controller_wally.o(.text);
src/player_pc.o(.text);
src/intro.o(.text);
src/field_region_map.o(.text);
@@ -262,10 +253,10 @@ SECTIONS {
src/mystery_event_menu.o(.text);
src/save_failed_screen.o(.text);
src/braille_puzzles.o(.text);
- asm/pokeblock_feed.o(.text);
+ src/pokeblock_feed.o(.text);
src/clear_save_data_menu.o(.text);
src/intro_credits_graphics.o(.text);
- asm/evolution_graphics.o(.text);
+ src/evolution_graphics.o(.text);
src/bard_music.o(.text);
src/fldeff_teleport.o(.text);
src/unknown_debug_menu.o(.text);
@@ -330,20 +321,24 @@ SECTIONS {
data/main_menu.o(.rodata);
data/data2a.o(.rodata);
src/battle_4.o(.rodata);
+ src/battle_controller_player.o(.rodata);
data/data2b.o(.rodata);
+ src/battle_controller_opponent.o(.rodata);
+ src/battle_controller_linkopponent.o(.rodata);
+ data/battle_moves.o(.rodata);
src/battle_3.o(.rodata);
src/pokemon_data.o(.rodata);
. = ALIGN(4);
src/trig.o(.rodata);
src/util.o(.rodata);
- data/daycare.o(.rodata);
+ src/daycare.o(.rodata);
src/egg_hatch.o(.rodata);
data/battle_interface.o(.rodata);
src/pokeball.o(.rodata);
data/trade.o(.rodata);
src/berry_blender.o(.rodata);
src/new_game.o(.rodata);
- data/rom4.o(.rodata);
+ src/overworld.o(.rodata);
data/tilesets.o(.rodata);
data/maps.o(.rodata);
src/fieldmap.o(.rodata);
@@ -352,7 +347,6 @@ SECTIONS {
src/field_player_avatar.o(.rodata);
src/field_map_obj.o(.rodata);
src/field_ground_effect.o(.rodata);
- data/field_ground_effect.o(.rodata);
data/field_map_obj_helpers.o(.rodata);
data/text_window.o(.rodata);
src/script.o(.rodata);
@@ -379,11 +373,12 @@ SECTIONS {
src/battle_setup.o(.rodata);
data/cable_club.o(.rodata);
data/mori_debug_menu.o(.rodata);
+ src/trainer_see.o(.rodata);
data/trainer_see.o(.rodata);
src/wild_encounter.o(.rodata);
data/wild_encounter.o(.rodata);
src/field_effect.o(.rodata);
- data/pokemon_menu.o(.rodata);
+ src/pokemon_menu.o(.rodata);
src/option_menu.o(.rodata);
src/pokedex.o(.rodata);
src/trainer_card.o(.rodata);
@@ -397,7 +392,7 @@ SECTIONS {
src/item.o(.rodata);
data/matsuda_debug_menu.o(.rodata);
data/contest.o(.rodata);
- data/shop.o(.rodata);
+ src/shop.o(.rodata);
src/berry.o(.rodata);
src/script_menu.o(.rodata);
src/naming_screen.o(.rodata);
@@ -421,7 +416,7 @@ SECTIONS {
data/easy_chat.o(.rodata);
data/pokenav.o(.rodata);
data/mon_markings.o(.rodata);
- data/mauville_old_man.o(.rodata);
+ src/mauville_man.o(.rodata);
data/mail.o(.rodata);
src/menu_helpers.o(.rodata);
src/heal_location.o(.rodata);
@@ -439,26 +434,26 @@ SECTIONS {
src/time_events.o(.rodata);
src/field_specials.o(.rodata);
data/pokedex_area_screen.o(.rodata);
- data/evolution_scene.o(.rodata);
+ src/evolution_scene.o(.rodata);
data/roulette.o(.rodata);
data/pokedex_cry_screen.o(.rodata);
data/landmark.o(.rodata);
- data/battle_transition.o(.rodata);
- data/battle_811DA74.o(.rodata);
+ src/battle_transition.o(.rodata);
+ src/battle_controller_linkpartner.o(.rodata);
data/battle_message.o(.rodata);
src/choose_party.o(.rodata);
data/cable_car.o(.rodata);
src/save.o(.rodata);
- data/field_effect_helpers.o(.rodata);
+ src/field_effect_helpers.o(.rodata);
data/contest_ai.o(.rodata);
- data/battle_anim_81258BC.o(.rodata);
+ src/battle_controller_safari.o(.rodata);
data/battle_anim_812C144.o(.rodata);
src/learn_move.o(.rodata);
src/decoration_inventory.o(.rodata);
src/roamer.o(.rodata);
data/battle_tower.o(.rodata);
src/use_pokeblock.o(.rodata);
- data/battle_anim_8137220.o(.rodata);
+ src/battle_controller_wally.o(.rodata);
src/player_pc.o(.rodata);
src/intro.o(.rodata);
data/battle_anim_813F0F4.o(.rodata);
@@ -470,9 +465,9 @@ SECTIONS {
src/strings.o(.rodata);
src/berry_tag_screen.o(.rodata);
src/save_failed_screen.o(.rodata);
- data/pokeblock_feed.o(.rodata);
+ src/pokeblock_feed.o(.rodata);
data/intro_credits_graphics.o(.rodata);
- data/evolution_graphics.o(.rodata);
+ src/evolution_graphics.o(.rodata);
data/bard_music.o(.rodata);
data/unknown_debug_menu.o(.rodata);
data/strings2.o(.rodata);
diff --git a/shared_syms.txt b/shared_syms.txt
index 884f0e89d..571e0633e 100644
--- a/shared_syms.txt
+++ b/shared_syms.txt
@@ -3,6 +3,8 @@ ewram = 0x2000000;
unk_2004000 = 0x2004000;
+gUnk_2009000 = 0x2009000;
+
unk_2007800 = 0x2007800;
unk_2007900 = 0x2007900;
diff --git a/src/bard_music.c b/src/bard_music.c
index a31568475..daf003233 100644
--- a/src/bard_music.c
+++ b/src/bard_music.c
@@ -1,71 +1,43 @@
#include "global.h"
+#include "bard_music.h"
#include "easy_chat.h"
struct BardSound
{
- u8 pad_00[48];
-};
-
-struct UnkBard
-{
/*0x00*/ u8 var00;
/*0x01*/ s8 var01;
/*0x02*/ u16 var02;
- /*0x04*/ u16 var04;
+ /*0x04*/ u16 volume;
/*0x06*/ u16 var06;
};
-struct UnkBard3
-{
- /*0x00*/ u16 var00;
- /*0x02*/ u16 var02;
- /*0x04*/ s16 var04;
- /*0x06*/ u16 var06;
-};
-
-struct UnkBard2
-{
- /*0x00*/ u8 var00;
- /*0x01*/ u8 var01;
- /*0x02*/ u8 var02;
- /*0x03*/ u8 var03;
- /*0x04*/ u16 var04;
- u8 pad06[4];
- /*0x0A*/ u16 var0A;
- u8 pad0C[12];
- /*0x18*/ struct UnkBard3 var18[6];
-};
-
-extern struct BardSound *gBardMusicTable[];
+extern const struct BardSound (*const gBardMusicTable[])[][6];
extern s16 *gUnknown_08417068[];
extern u32 gUnknown_084170F4[];
-static s16 sub_814A2B8(u32 arg0, u32 arg1)
+static s16 CalcWordPitch(u32 arg0, u32 songPos)
{
- return gUnknown_08417068[arg0][arg1];
+ return gUnknown_08417068[arg0][songPos];
}
#if ENGLISH
-struct BardSound *sub_814A2D0(u16 arg0, u16 arg1)
+const struct BardSound *GetWordSounds(u16 group, u16 word)
{
- struct BardSound *sounds = gBardMusicTable[arg0];
+ const struct BardSound (*sounds)[][6] = gBardMusicTable[group];
- return &sounds[arg1];
+ return (*sounds)[word];
}
#elif GERMAN
-struct BardSound *sub_814A2D0(u16 arg0, u16 arg1)
+const struct BardSound *GetWordSounds(u16 group, u16 word)
{
- u32 index;
- struct BardSound *sounds;
-
- sounds = gBardMusicTable[arg0];
- index = de_sub_80EB748(arg0, arg1);
+ const struct BardSound (*sounds)[][6] = gBardMusicTable[group];
+ u32 index = de_sub_80EB748(group, word);
- return &sounds[index];
+ return (*sounds)[index];
}
#endif
-s32 sub_814A2EC(struct UnkBard2 *dest, struct UnkBard *src, u16 arg2)
+s32 GetWordPhonemes(struct BardSong *song, const struct BardSound *src, u16 arg2)
{
s32 i;
s32 j;
@@ -73,25 +45,25 @@ s32 sub_814A2EC(struct UnkBard2 *dest, struct UnkBard *src, u16 arg2)
for (i = 0; i < 6; i++)
{
- dest->var18[i].var00 = src[i].var00;
+ song->phonemes[i].sound = src[i].var00;
if (src[i].var00 != 0xFF)
{
- s32 r1 = src[i].var01 +gUnknown_084170F4[src[i].var00];
+ s32 length = src[i].var01 + gUnknown_084170F4[src[i].var00];
- dest->var18[i].var02 = r1;
- dest->var18[i].var06 = src[i].var04;
- dest->var04 += r1;
+ song->phonemes[i].length = length;
+ song->phonemes[i].volume = src[i].volume;
+ song->var04 += length;
}
}
for (j = 0, thirty = 30; j < i; j++)
- dest->var18[j].var04 = sub_814A2B8(thirty + arg2, j);
+ song->phonemes[j].pitch = CalcWordPitch(thirty + arg2, j);
- dest->var00++;
- dest->var01 = 0;
- dest->var02 = 0;
- dest->var03 = 0;
- dest->var0A = 0;
+ song->currWord++;
+ song->currPhoneme = 0;
+ song->phonemeTimer = 0;
+ song->state = 0;
+ song->voiceInflection = 0;
//warning: no return statement in function returning non-void
}
diff --git a/src/battle_2.c b/src/battle_2.c
index a7668302b..770aa1209 100644
--- a/src/battle_2.c
+++ b/src/battle_2.c
@@ -181,7 +181,7 @@ extern u8 gHealthboxIDs[];
extern struct UnknownStruct6 gUnknown_03004DE0;
//extern u16 gUnknown_03004DE0[][0xA0]; // possibly?
extern u16 gBattleTypeFlags;
-extern s8 gBattleTerrain; // I'm not sure if this is supposed to be s8 or u8. Regardless, it must have the same type as the return value of GetBattleTerrain.
+extern s8 gBattleTerrain; // I'm not sure if this is supposed to be s8 or u8. Regardless, it must have the same type as the return value of BattleSetup_GetTerrain.
extern u8 gReservedSpritePaletteCount;
extern u16 gTrainerBattleOpponent;
extern struct BattleEnigmaBerry gEnigmaBerries[];
@@ -239,7 +239,8 @@ void InitBattle(void)
gUnknown_03004DE0.unk0[i] = 0xFF10;
gUnknown_03004DE0.unk780[i] = 0xFF10;
}
- sub_80895F8(gUnknown_081F9674.unk0, gUnknown_081F9674.unk4, gUnknown_081F9674.unk8);
+ //sub_80895F8(gUnknown_081F9674.unk0, gUnknown_081F9674.unk4, gUnknown_081F9674.unk8);
+ sub_80895F8(gUnknown_081F9674);
SetUpWindowConfig(&gWindowConfig_81E6C58);
ResetPaletteFade();
gUnknown_030042A4 = 0;
@@ -250,7 +251,7 @@ void InitBattle(void)
gUnknown_03004280 = 0;
gUnknown_030041B0 = 0;
gUnknown_030041B8 = 0;
- gBattleTerrain = GetBattleTerrain();
+ gBattleTerrain = BattleSetup_GetTerrain();
InitWindowFromConfig(&gUnknown_03004210, &gWindowConfig_81E6C58);
InitWindowFromConfig(&gUnknown_030041D0, &gWindowConfig_81E71D0);
InitWindowFromConfig(&gUnknown_03004250, &gWindowConfig_81E71EC);
@@ -1347,8 +1348,8 @@ void sub_8010384(struct Sprite *sprite)
u16 species;
u8 yOffset;
- if (ewram17800[r6].unk2 != 0)
- species = ewram17800[r6].unk2;
+ if (ewram17800[r6].transformedSpecies != 0)
+ species = ewram17800[r6].transformedSpecies;
else
species = sprite->data2;
@@ -1866,7 +1867,7 @@ static void BattlePrepIntroSlide(void)
if (gBattleExecBuffer == 0)
{
gActiveBank = GetBankByPlayerAI(0);
- EmitBattleIntroSlide(0, gBattleTerrain);
+ EmitIntroSlide(0, gBattleTerrain);
MarkBufferBankForExecution(gActiveBank);
gBattleMainFunc = sub_8011384;
gBattleCommunication[0] = 0;
@@ -1910,7 +1911,7 @@ void sub_8011384(void)
if (GetBankIdentity(gActiveBank) == 0)
{
- dp01_build_cmdbuf_x07_7_7_7(0);
+ EmitTrainerThrow(0);
MarkBufferBankForExecution(gActiveBank);
}
@@ -1918,7 +1919,7 @@ void sub_8011384(void)
{
if (GetBankIdentity(gActiveBank) == 1)
{
- dp01_build_cmdbuf_x07_7_7_7(0);
+ EmitTrainerThrow(0);
MarkBufferBankForExecution(gActiveBank);
}
if (GetBankSide(gActiveBank) == 1
@@ -1931,7 +1932,7 @@ void sub_8011384(void)
&& !(gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_LINK)))
{
GetSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gActiveBank].species), 2);
- dp01_build_cmdbuf_x04_4_4_4(0);
+ EmitLoadPokeSprite(0);
MarkBufferBankForExecution(gActiveBank);
}
}
@@ -1941,7 +1942,7 @@ void sub_8011384(void)
if (GetBankIdentity(gActiveBank) == 2
|| GetBankIdentity(gActiveBank) == 3)
{
- dp01_build_cmdbuf_x07_7_7_7(0);
+ EmitTrainerThrow(0);
MarkBufferBankForExecution(gActiveBank);
}
}
@@ -1979,7 +1980,7 @@ void bc_801333C(void)
}
}
gActiveBank = GetBankByPlayerAI(1);
- dp01_build_cmdbuf_x30_TODO(0, (u8 *)sp0, 0x80);
+ Emitcmd48(0, (u8 *)sp0, 0x80);
MarkBufferBankForExecution(gActiveBank);
for (i = 0; i < 6; i++)
@@ -1997,7 +1998,7 @@ void bc_801333C(void)
}
}
gActiveBank = GetBankByPlayerAI(0);
- dp01_build_cmdbuf_x30_TODO(0, (u8 *)sp0, 0x80);
+ Emitcmd48(0, (u8 *)sp0, 0x80);
MarkBufferBankForExecution(gActiveBank);
gBattleMainFunc = bc_battle_begin_message;
@@ -2063,13 +2064,13 @@ void sub_8011834(void)
{
if (GetBankIdentity(gActiveBank) == 1)
{
- dp01_build_cmdbuf_x2F_2F_2F_2F(0);
+ EmitTrainerBallThrow(0);
MarkBufferBankForExecution(gActiveBank);
}
if ((gBattleTypeFlags & BATTLE_TYPE_MULTI)
&& GetBankIdentity(gActiveBank) == 3)
{
- dp01_build_cmdbuf_x2F_2F_2F_2F(0);
+ EmitTrainerBallThrow(0);
MarkBufferBankForExecution(gActiveBank);
}
}
@@ -2115,13 +2116,13 @@ void sub_80119B4(void)
{
if (GetBankIdentity(gActiveBank) == 0)
{
- dp01_build_cmdbuf_x2F_2F_2F_2F(0);
+ EmitTrainerBallThrow(0);
MarkBufferBankForExecution(gActiveBank);
}
if ((gBattleTypeFlags & BATTLE_TYPE_MULTI)
&& GetBankIdentity(gActiveBank) == 2)
{
- dp01_build_cmdbuf_x2F_2F_2F_2F(0);
+ EmitTrainerBallThrow(0);
MarkBufferBankForExecution(gActiveBank);
}
}
@@ -2140,7 +2141,7 @@ void unref_sub_8011A68(void)
{
if (GetBankSide(gActiveBank) == 0)
{
- EmitSwitchInAnim(0, gBattlePartyID[gActiveBank], 0);
+ EmitSendOutPoke(0, gBattlePartyID[gActiveBank], 0);
MarkBufferBankForExecution(gActiveBank);
}
}
@@ -2429,7 +2430,7 @@ void sub_8012324(void)
}
else
{
- dp01_build_cmdbuf_x12_a_bb(0, gActionForBanks[0], gBattleBufferB[0][1] | (gBattleBufferB[0][2] << 8));
+ Emitcmd18(0, gActionForBanks[0], gBattleBufferB[0][1] | (gBattleBufferB[0][2] << 8));
MarkBufferBankForExecution(gActiveBank);
gBattleCommunication[gActiveBank]++;
}
diff --git a/src/battle_3.c b/src/battle_3.c
index 12a91810e..b59757f00 100644
--- a/src/battle_3.c
+++ b/src/battle_3.c
@@ -1506,11 +1506,11 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
if (gBankAttacker >= gNoOfAllBanks)
gBankAttacker = bank;
switch (gLastUsedAbility)
- {
- case 0xFF: //weather from overworld
+ {
+ case 0xFF: //weather from overworld
//_08018586
- switch (weather_get_current())
- {
+ switch (weather_get_current())
+ {
case 3:
case 5:
case 13:
@@ -1540,34 +1540,34 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
effect++;
}
break;
- }
- if (effect)
+ }
+ if (effect)
{
gBattleCommunication[MULTISTRING_CHOOSER] = weather_get_current();
b_push_move_exec(gUnknown_081D901D);
}
- break;
- case ABILITY_DRIZZLE:
+ break;
+ case ABILITY_DRIZZLE:
//_08018680
- if (!(gBattleWeather & WEATHER_RAIN_PERMANENT))
+ if (!(gBattleWeather & WEATHER_RAIN_PERMANENT))
{
gBattleWeather = (WEATHER_RAIN_PERMANENT | WEATHER_RAIN_TEMPORARY);
b_push_move_exec(BattleScript_DrizzleActivates);
BATTLE_STRUCT->scriptingActive = bank;
effect++;
}
- break;
- case ABILITY_SAND_STREAM:
+ break;
+ case ABILITY_SAND_STREAM:
//_080186B8
- if (!(gBattleWeather & WEATHER_SANDSTORM_PERMANENT))
+ if (!(gBattleWeather & WEATHER_SANDSTORM_PERMANENT))
{
gBattleWeather = (WEATHER_SANDSTORM_PERMANENT | WEATHER_SANDSTORM_TEMPORARY);
b_push_move_exec(BattleScript_SandstreamActivates);
BATTLE_STRUCT->scriptingActive = bank;
effect++;
}
- break;
- case ABILITY_DROUGHT:
+ break;
+ case ABILITY_DROUGHT:
//_080186F0
if (!(gBattleWeather & WEATHER_SUN_PERMANENT))
{
@@ -1576,16 +1576,16 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
BATTLE_STRUCT->scriptingActive = bank;
effect++;
}
- break;
- case ABILITY_INTIMIDATE:
+ break;
+ case ABILITY_INTIMIDATE:
//_08018728
if (!(gSpecialStatuses[bank].intimidatedPoke))
{
gStatuses3[bank] |= STATUS3_INTIMIDATE_POKES;
gSpecialStatuses[bank].intimidatedPoke = 1;
}
- break;
- case ABILITY_FORECAST:
+ break;
+ case ABILITY_FORECAST:
//_0801875C
effect = CastformDataTypeChange(bank);
if (effect != 0)
@@ -1594,22 +1594,22 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
BATTLE_STRUCT->scriptingActive = bank;
BATTLE_STRUCT->castformToChangeInto = effect - 1;
}
- break;
- case ABILITY_TRACE:
+ break;
+ case ABILITY_TRACE:
//_080187A0
- if (!(gSpecialStatuses[bank].traced))
+ if (!(gSpecialStatuses[bank].traced))
{
gStatuses3[bank] |= STATUS3_TRACE;
gSpecialStatuses[bank].traced = 1;
}
- break;
- case ABILITY_CLOUD_NINE:
- case ABILITY_AIR_LOCK:
+ break;
+ case ABILITY_CLOUD_NINE:
+ case ABILITY_AIR_LOCK:
//_080187DC
- {
- u8 i;
+ {
+ u8 i;
- for (i = 0; i < gNoOfAllBanks; i++)
+ for (i = 0; i < gNoOfAllBanks; i++)
{
// TODO: i should be in r6 here
//asm("":::"r4","r5");
@@ -1622,10 +1622,10 @@ u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
break;
}
}
- }
- break;
- }
- break;
+ }
+ break;
+ }
+ break;
case ABILITYEFFECT_ENDTURN: // 1
//_08018814
if (gBattleMons[bank].hp != 0)
@@ -2271,391 +2271,391 @@ __attribute__((naked))
u8 AbilityBattleEffects(u8 caseID, u8 bank, u8 ability, u8 special, u16 moveArg)
{
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, 0x28\n\
- ldr r4, [sp, 0x48]\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- str r0, [sp, 0x4]\n\
- lsls r1, 24\n\
- lsrs r1, 24\n\
- mov r10, r1\n\
- lsls r2, 24\n\
- lsrs r6, r2, 24\n\
- lsls r3, 24\n\
- lsrs r3, 24\n\
- mov r8, r3\n\
- lsls r4, 16\n\
- lsrs r4, 16\n\
- movs r0, 0\n\
- mov r9, r0\n\
- ldr r5, _08018380 @ =gBankAttacker\n\
- ldr r1, _08018384 @ =gNoOfAllBanks\n\
- ldrb r0, [r5]\n\
- ldrb r1, [r1]\n\
- cmp r0, r1\n\
- bcc _08018360\n\
- mov r1, r10\n\
- strb r1, [r5]\n\
+ push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ sub sp, 0x28\n\
+ ldr r4, [sp, 0x48]\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ str r0, [sp, 0x4]\n\
+ lsls r1, 24\n\
+ lsrs r1, 24\n\
+ mov r10, r1\n\
+ lsls r2, 24\n\
+ lsrs r6, r2, 24\n\
+ lsls r3, 24\n\
+ lsrs r3, 24\n\
+ mov r8, r3\n\
+ lsls r4, 16\n\
+ lsrs r4, 16\n\
+ movs r0, 0\n\
+ mov r9, r0\n\
+ ldr r5, _08018380 @ =gBankAttacker\n\
+ ldr r1, _08018384 @ =gNoOfAllBanks\n\
+ ldrb r0, [r5]\n\
+ ldrb r1, [r1]\n\
+ cmp r0, r1\n\
+ bcc _08018360\n\
+ mov r1, r10\n\
+ strb r1, [r5]\n\
_08018360:\n\
- ldrb r0, [r5]\n\
- bl GetBankSide\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- bne _08018390\n\
- ldr r1, _08018388 @ =gBattlePartyID\n\
- ldrb r0, [r5]\n\
- lsls r0, 1\n\
- adds r0, r1\n\
- ldrh r1, [r0]\n\
- movs r0, 0x64\n\
- muls r1, r0\n\
- ldr r0, _0801838C @ =gPlayerParty\n\
- b _080183A0\n\
- .align 2, 0\n\
+ ldrb r0, [r5]\n\
+ bl GetBankSide\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ bne _08018390\n\
+ ldr r1, _08018388 @ =gBattlePartyID\n\
+ ldrb r0, [r5]\n\
+ lsls r0, 1\n\
+ adds r0, r1\n\
+ ldrh r1, [r0]\n\
+ movs r0, 0x64\n\
+ muls r1, r0\n\
+ ldr r0, _0801838C @ =gPlayerParty\n\
+ b _080183A0\n\
+ .align 2, 0\n\
_08018380: .4byte gBankAttacker\n\
_08018384: .4byte gNoOfAllBanks\n\
_08018388: .4byte gBattlePartyID\n\
_0801838C: .4byte gPlayerParty\n\
_08018390:\n\
- ldr r1, _080183D0 @ =gBattlePartyID\n\
- ldrb r0, [r5]\n\
- lsls r0, 1\n\
- adds r0, r1\n\
- ldrh r1, [r0]\n\
- movs r0, 0x64\n\
- muls r1, r0\n\
- ldr r0, _080183D4 @ =gEnemyParty\n\
+ ldr r1, _080183D0 @ =gBattlePartyID\n\
+ ldrb r0, [r5]\n\
+ lsls r0, 1\n\
+ adds r0, r1\n\
+ ldrh r1, [r0]\n\
+ movs r0, 0x64\n\
+ muls r1, r0\n\
+ ldr r0, _080183D4 @ =gEnemyParty\n\
_080183A0:\n\
- adds r7, r1, r0\n\
- ldr r5, _080183D8 @ =gBankTarget\n\
- ldr r1, _080183DC @ =gNoOfAllBanks\n\
- ldrb r0, [r5]\n\
- ldrb r1, [r1]\n\
- cmp r0, r1\n\
- bcc _080183B2\n\
- mov r2, r10\n\
- strb r2, [r5]\n\
+ adds r7, r1, r0\n\
+ ldr r5, _080183D8 @ =gBankTarget\n\
+ ldr r1, _080183DC @ =gNoOfAllBanks\n\
+ ldrb r0, [r5]\n\
+ ldrb r1, [r1]\n\
+ cmp r0, r1\n\
+ bcc _080183B2\n\
+ mov r2, r10\n\
+ strb r2, [r5]\n\
_080183B2:\n\
- ldrb r0, [r5]\n\
- bl GetBankSide\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- bne _080183E4\n\
- ldr r1, _080183D0 @ =gBattlePartyID\n\
- ldrb r0, [r5]\n\
- lsls r0, 1\n\
- adds r0, r1\n\
- ldrh r1, [r0]\n\
- movs r0, 0x64\n\
- muls r1, r0\n\
- ldr r0, _080183E0 @ =gPlayerParty\n\
- b _080183F4\n\
- .align 2, 0\n\
+ ldrb r0, [r5]\n\
+ bl GetBankSide\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ bne _080183E4\n\
+ ldr r1, _080183D0 @ =gBattlePartyID\n\
+ ldrb r0, [r5]\n\
+ lsls r0, 1\n\
+ adds r0, r1\n\
+ ldrh r1, [r0]\n\
+ movs r0, 0x64\n\
+ muls r1, r0\n\
+ ldr r0, _080183E0 @ =gPlayerParty\n\
+ b _080183F4\n\
+ .align 2, 0\n\
_080183D0: .4byte gBattlePartyID\n\
_080183D4: .4byte gEnemyParty\n\
_080183D8: .4byte gBankTarget\n\
_080183DC: .4byte gNoOfAllBanks\n\
_080183E0: .4byte gPlayerParty\n\
_080183E4:\n\
- ldr r1, _08018444 @ =gBattlePartyID\n\
- ldrb r0, [r5]\n\
- lsls r0, 1\n\
- adds r0, r1\n\
- ldrh r1, [r0]\n\
- movs r0, 0x64\n\
- muls r1, r0\n\
- ldr r0, _08018448 @ =gEnemyParty\n\
+ ldr r1, _08018444 @ =gBattlePartyID\n\
+ ldrb r0, [r5]\n\
+ lsls r0, 1\n\
+ adds r0, r1\n\
+ ldrh r1, [r0]\n\
+ movs r0, 0x64\n\
+ muls r1, r0\n\
+ ldr r0, _08018448 @ =gEnemyParty\n\
_080183F4:\n\
- adds r5, r1, r0\n\
- adds r0, r7, 0\n\
- movs r1, 0xB\n\
- bl GetMonData\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- str r0, [sp, 0x8]\n\
- adds r0, r7, 0\n\
- movs r1, 0\n\
- bl GetMonData\n\
- str r0, [sp, 0x10]\n\
- adds r0, r5, 0\n\
- movs r1, 0xB\n\
- bl GetMonData\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- str r0, [sp, 0xC]\n\
- adds r0, r5, 0\n\
- movs r1, 0\n\
- bl GetMonData\n\
- str r0, [sp, 0x14]\n\
- ldr r0, _0801844C @ =gBattleTypeFlags\n\
- ldrh r1, [r0]\n\
- movs r0, 0x80\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _08018436\n\
- bl _08019F92\n\
+ adds r5, r1, r0\n\
+ adds r0, r7, 0\n\
+ movs r1, 0xB\n\
+ bl GetMonData\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ str r0, [sp, 0x8]\n\
+ adds r0, r7, 0\n\
+ movs r1, 0\n\
+ bl GetMonData\n\
+ str r0, [sp, 0x10]\n\
+ adds r0, r5, 0\n\
+ movs r1, 0xB\n\
+ bl GetMonData\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ str r0, [sp, 0xC]\n\
+ adds r0, r5, 0\n\
+ movs r1, 0\n\
+ bl GetMonData\n\
+ str r0, [sp, 0x14]\n\
+ ldr r0, _0801844C @ =gBattleTypeFlags\n\
+ ldrh r1, [r0]\n\
+ movs r0, 0x80\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _08018436\n\
+ bl _08019F92\n\
_08018436:\n\
- mov r3, r8\n\
- cmp r3, 0\n\
- beq _08018454\n\
- ldr r0, _08018450 @ =gLastUsedAbility\n\
- strb r3, [r0]\n\
- mov r8, r0\n\
- b _0801846A\n\
- .align 2, 0\n\
+ mov r3, r8\n\
+ cmp r3, 0\n\
+ beq _08018454\n\
+ ldr r0, _08018450 @ =gLastUsedAbility\n\
+ strb r3, [r0]\n\
+ mov r8, r0\n\
+ b _0801846A\n\
+ .align 2, 0\n\
_08018444: .4byte gBattlePartyID\n\
_08018448: .4byte gEnemyParty\n\
_0801844C: .4byte gBattleTypeFlags\n\
_08018450: .4byte gLastUsedAbility\n\
_08018454:\n\
- ldr r2, _08018474 @ =gLastUsedAbility\n\
- ldr r1, _08018478 @ =gBattleMons\n\
- movs r0, 0x58\n\
- mov r5, r10\n\
- muls r5, r0\n\
- adds r0, r5, 0\n\
- adds r0, r1\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- strb r0, [r2]\n\
- mov r8, r2\n\
+ ldr r2, _08018474 @ =gLastUsedAbility\n\
+ ldr r1, _08018478 @ =gBattleMons\n\
+ movs r0, 0x58\n\
+ mov r5, r10\n\
+ muls r5, r0\n\
+ adds r0, r5, 0\n\
+ adds r0, r1\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ strb r0, [r2]\n\
+ mov r8, r2\n\
_0801846A:\n\
- cmp r4, 0\n\
- beq _0801847C\n\
- adds r3, r4, 0\n\
- b _08018480\n\
- .align 2, 0\n\
+ cmp r4, 0\n\
+ beq _0801847C\n\
+ adds r3, r4, 0\n\
+ b _08018480\n\
+ .align 2, 0\n\
_08018474: .4byte gLastUsedAbility\n\
_08018478: .4byte gBattleMons\n\
_0801847C:\n\
- ldr r0, _08018494 @ =gCurrentMove\n\
- ldrh r3, [r0]\n\
+ ldr r0, _08018494 @ =gCurrentMove\n\
+ ldrh r3, [r0]\n\
_08018480:\n\
- ldr r1, _08018498 @ =0x02000000\n\
- ldr r2, _0801849C @ =0x0001601c\n\
- adds r0, r1, r2\n\
- ldrb r0, [r0]\n\
- adds r7, r1, 0\n\
- cmp r0, 0\n\
- beq _080184A0\n\
- movs r4, 0x3F\n\
- ands r4, r0\n\
- b _080184AC\n\
- .align 2, 0\n\
+ ldr r1, _08018498 @ =0x02000000\n\
+ ldr r2, _0801849C @ =0x0001601c\n\
+ adds r0, r1, r2\n\
+ ldrb r0, [r0]\n\
+ adds r7, r1, 0\n\
+ cmp r0, 0\n\
+ beq _080184A0\n\
+ movs r4, 0x3F\n\
+ ands r4, r0\n\
+ b _080184AC\n\
+ .align 2, 0\n\
_08018494: .4byte gCurrentMove\n\
_08018498: .4byte 0x02000000\n\
_0801849C: .4byte 0x0001601c\n\
_080184A0:\n\
- ldr r1, _080184C0 @ =gBattleMoves\n\
- lsls r0, r3, 1\n\
- adds r0, r3\n\
- lsls r0, 2\n\
- adds r0, r1\n\
- ldrb r4, [r0, 0x2]\n\
+ ldr r1, _080184C0 @ =gBattleMoves\n\
+ lsls r0, r3, 1\n\
+ adds r0, r3\n\
+ lsls r0, 2\n\
+ adds r0, r1\n\
+ ldrb r4, [r0, 0x2]\n\
_080184AC:\n\
- ldr r5, [sp, 0x4]\n\
- cmp r5, 0x13\n\
- bls _080184B6\n\
- bl _08019F76\n\
+ ldr r5, [sp, 0x4]\n\
+ cmp r5, 0x13\n\
+ bls _080184B6\n\
+ bl _08019F76\n\
_080184B6:\n\
- lsls r0, r5, 2\n\
- ldr r1, _080184C4 @ =_080184C8\n\
- adds r0, r1\n\
- ldr r0, [r0]\n\
- mov pc, r0\n\
- .align 2, 0\n\
+ lsls r0, r5, 2\n\
+ ldr r1, _080184C4 @ =_080184C8\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ mov pc, r0\n\
+ .align 2, 0\n\
_080184C0: .4byte gBattleMoves\n\
_080184C4: .4byte _080184C8\n\
- .align 2, 0\n\
+ .align 2, 0\n\
_080184C8:\n\
- .4byte _08018518\n\
- .4byte _08018814\n\
- .4byte _08018A40\n\
- .4byte _08018AD8\n\
- .4byte _08018CF0\n\
- .4byte _08019448\n\
- .4byte _080197B4\n\
- .4byte _08019804\n\
- .4byte _08019880\n\
- .4byte _080198FC\n\
- .4byte _08019B1C\n\
- .4byte _08019940\n\
- .4byte _08019B60\n\
- .4byte _08019BBC\n\
- .4byte _08019C18\n\
- .4byte _08019D18\n\
- .4byte _08019D5C\n\
- .4byte _08019DB8\n\
- .4byte _08019F44\n\
- .4byte _08019CD4\n\
+ .4byte _08018518\n\
+ .4byte _08018814\n\
+ .4byte _08018A40\n\
+ .4byte _08018AD8\n\
+ .4byte _08018CF0\n\
+ .4byte _08019448\n\
+ .4byte _080197B4\n\
+ .4byte _08019804\n\
+ .4byte _08019880\n\
+ .4byte _080198FC\n\
+ .4byte _08019B1C\n\
+ .4byte _08019940\n\
+ .4byte _08019B60\n\
+ .4byte _08019BBC\n\
+ .4byte _08019C18\n\
+ .4byte _08019D18\n\
+ .4byte _08019D5C\n\
+ .4byte _08019DB8\n\
+ .4byte _08019F44\n\
+ .4byte _08019CD4\n\
_08018518:\n\
- ldr r2, _0801854C @ =gBankAttacker\n\
- ldr r0, _08018550 @ =gNoOfAllBanks\n\
- ldrb r1, [r2]\n\
- adds r5, r0, 0\n\
- ldrb r0, [r5]\n\
- cmp r1, r0\n\
- bcc _0801852A\n\
- mov r1, r10\n\
- strb r1, [r2]\n\
+ ldr r2, _0801854C @ =gBankAttacker\n\
+ ldr r0, _08018550 @ =gNoOfAllBanks\n\
+ ldrb r1, [r2]\n\
+ adds r5, r0, 0\n\
+ ldrb r0, [r5]\n\
+ cmp r1, r0\n\
+ bcc _0801852A\n\
+ mov r1, r10\n\
+ strb r1, [r2]\n\
_0801852A:\n\
- mov r2, r8\n\
- ldrb r0, [r2]\n\
- cmp r0, 0x2D\n\
- bne _08018534\n\
- b _080186B8\n\
+ mov r2, r8\n\
+ ldrb r0, [r2]\n\
+ cmp r0, 0x2D\n\
+ bne _08018534\n\
+ b _080186B8\n\
_08018534:\n\
- cmp r0, 0x2D\n\
- bgt _08018564\n\
- cmp r0, 0xD\n\
- bne _0801853E\n\
- b _080187DC\n\
+ cmp r0, 0x2D\n\
+ bgt _08018564\n\
+ cmp r0, 0xD\n\
+ bne _0801853E\n\
+ b _080187DC\n\
_0801853E:\n\
- cmp r0, 0xD\n\
- bgt _08018554\n\
- cmp r0, 0x2\n\
- bne _08018548\n\
- b _08018680\n\
+ cmp r0, 0xD\n\
+ bgt _08018554\n\
+ cmp r0, 0x2\n\
+ bne _08018548\n\
+ b _08018680\n\
_08018548:\n\
- bl _08019F76\n\
- .align 2, 0\n\
+ bl _08019F76\n\
+ .align 2, 0\n\
_0801854C: .4byte gBankAttacker\n\
_08018550: .4byte gNoOfAllBanks\n\
_08018554:\n\
- cmp r0, 0x16\n\
- bne _0801855A\n\
- b _08018728\n\
+ cmp r0, 0x16\n\
+ bne _0801855A\n\
+ b _08018728\n\
_0801855A:\n\
- cmp r0, 0x24\n\
- bne _08018560\n\
- b _080187A0\n\
+ cmp r0, 0x24\n\
+ bne _08018560\n\
+ b _080187A0\n\
_08018560:\n\
- bl _08019F76\n\
+ bl _08019F76\n\
_08018564:\n\
- cmp r0, 0x46\n\
- bne _0801856A\n\
- b _080186F0\n\
+ cmp r0, 0x46\n\
+ bne _0801856A\n\
+ b _080186F0\n\
_0801856A:\n\
- cmp r0, 0x46\n\
- bgt _08018578\n\
- cmp r0, 0x3B\n\
- bne _08018574\n\
- b _0801875C\n\
+ cmp r0, 0x46\n\
+ bgt _08018578\n\
+ cmp r0, 0x3B\n\
+ bne _08018574\n\
+ b _0801875C\n\
_08018574:\n\
- bl _08019F76\n\
+ bl _08019F76\n\
_08018578:\n\
- cmp r0, 0x4D\n\
- bne _0801857E\n\
- b _080187DC\n\
+ cmp r0, 0x4D\n\
+ bne _0801857E\n\
+ b _080187DC\n\
_0801857E:\n\
- cmp r0, 0xFF\n\
- beq _08018586\n\
- bl _08019F76\n\
+ cmp r0, 0xFF\n\
+ beq _08018586\n\
+ bl _08019F76\n\
_08018586:\n\
- bl weather_get_current\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- subs r0, 0x3\n\
- cmp r0, 0xA\n\
- bhi _0801864C\n\
- lsls r0, 2\n\
- ldr r1, _080185A0 @ =_080185A4\n\
- adds r0, r1\n\
- ldr r0, [r0]\n\
- mov pc, r0\n\
- .align 2, 0\n\
+ bl weather_get_current\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ subs r0, 0x3\n\
+ cmp r0, 0xA\n\
+ bhi _0801864C\n\
+ lsls r0, 2\n\
+ ldr r1, _080185A0 @ =_080185A4\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ mov pc, r0\n\
+ .align 2, 0\n\
_080185A0: .4byte _080185A4\n\
- .align 2, 0\n\
+ .align 2, 0\n\
_080185A4:\n\
- .4byte _080185D0\n\
- .4byte _0801864C\n\
- .4byte _080185D0\n\
- .4byte _0801864C\n\
- .4byte _0801864C\n\
- .4byte _080185F8\n\
- .4byte _0801864C\n\
- .4byte _0801864C\n\
- .4byte _0801864C\n\
- .4byte _08018620\n\
- .4byte _080185D0\n\
+ .4byte _080185D0\n\
+ .4byte _0801864C\n\
+ .4byte _080185D0\n\
+ .4byte _0801864C\n\
+ .4byte _0801864C\n\
+ .4byte _080185F8\n\
+ .4byte _0801864C\n\
+ .4byte _0801864C\n\
+ .4byte _0801864C\n\
+ .4byte _08018620\n\
+ .4byte _080185D0\n\
_080185D0:\n\
- ldr r2, _080185EC @ =gBattleWeather\n\
- ldrh r1, [r2]\n\
- movs r0, 0x7\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _0801864C\n\
- movs r0, 0x5\n\
- strh r0, [r2]\n\
- ldr r0, _080185F0 @ =0x02000000\n\
- ldr r3, _080185F4 @ =0x000160a4\n\
- adds r2, r0, r3\n\
- movs r1, 0xA\n\
- b _08018638\n\
- .align 2, 0\n\
+ ldr r2, _080185EC @ =gBattleWeather\n\
+ ldrh r1, [r2]\n\
+ movs r0, 0x7\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _0801864C\n\
+ movs r0, 0x5\n\
+ strh r0, [r2]\n\
+ ldr r0, _080185F0 @ =0x02000000\n\
+ ldr r3, _080185F4 @ =0x000160a4\n\
+ adds r2, r0, r3\n\
+ movs r1, 0xA\n\
+ b _08018638\n\
+ .align 2, 0\n\
_080185EC: .4byte gBattleWeather\n\
_080185F0: .4byte 0x02000000\n\
_080185F4: .4byte 0x000160a4\n\
_080185F8:\n\
- ldr r3, _08018614 @ =gBattleWeather\n\
- ldrh r1, [r3]\n\
- movs r2, 0x18\n\
- adds r0, r2, 0\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _0801864C\n\
- strh r2, [r3]\n\
- ldr r0, _08018618 @ =0x02000000\n\
- ldr r3, _0801861C @ =0x000160a4\n\
- adds r2, r0, r3\n\
- movs r1, 0xC\n\
- b _08018638\n\
- .align 2, 0\n\
+ ldr r3, _08018614 @ =gBattleWeather\n\
+ ldrh r1, [r3]\n\
+ movs r2, 0x18\n\
+ adds r0, r2, 0\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _0801864C\n\
+ strh r2, [r3]\n\
+ ldr r0, _08018618 @ =0x02000000\n\
+ ldr r3, _0801861C @ =0x000160a4\n\
+ adds r2, r0, r3\n\
+ movs r1, 0xC\n\
+ b _08018638\n\
+ .align 2, 0\n\
_08018614: .4byte gBattleWeather\n\
_08018618: .4byte 0x02000000\n\
_0801861C: .4byte 0x000160a4\n\
_08018620:\n\
- ldr r3, _08018668 @ =gBattleWeather\n\
- ldrh r1, [r3]\n\
- movs r2, 0x60\n\
- adds r0, r2, 0\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _0801864C\n\
- strh r2, [r3]\n\
- ldr r0, _0801866C @ =0x02000000\n\
- ldr r3, _08018670 @ =0x000160a4\n\
- adds r2, r0, r3\n\
- movs r1, 0xB\n\
+ ldr r3, _08018668 @ =gBattleWeather\n\
+ ldrh r1, [r3]\n\
+ movs r2, 0x60\n\
+ adds r0, r2, 0\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _0801864C\n\
+ strh r2, [r3]\n\
+ ldr r0, _0801866C @ =0x02000000\n\
+ ldr r3, _08018670 @ =0x000160a4\n\
+ adds r2, r0, r3\n\
+ movs r1, 0xB\n\
_08018638:\n\
- strb r1, [r2]\n\
- ldr r5, _08018674 @ =0x00016003\n\
- adds r0, r5\n\
- mov r1, r10\n\
- strb r1, [r0]\n\
- mov r0, r9\n\
- adds r0, 0x1\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r9, r0\n\
+ strb r1, [r2]\n\
+ ldr r5, _08018674 @ =0x00016003\n\
+ adds r0, r5\n\
+ mov r1, r10\n\
+ strb r1, [r0]\n\
+ mov r0, r9\n\
+ adds r0, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r9, r0\n\
_0801864C:\n\
- mov r2, r9\n\
- cmp r2, 0\n\
- bne _08018656\n\
- bl _08019F92\n\
+ mov r2, r9\n\
+ cmp r2, 0\n\
+ bne _08018656\n\
+ bl _08019F92\n\
_08018656:\n\
- bl weather_get_current\n\
- ldr r1, _08018678 @ =gBattleCommunication\n\
- strb r0, [r1, 0x5]\n\
- ldr r0, _0801867C @ =gUnknown_081D901D\n\
- bl b_push_move_exec\n\
- bl _08019F76\n\
- .align 2, 0\n\
+ bl weather_get_current\n\
+ ldr r1, _08018678 @ =gBattleCommunication\n\
+ strb r0, [r1, 0x5]\n\
+ ldr r0, _0801867C @ =gUnknown_081D901D\n\
+ bl b_push_move_exec\n\
+ bl _08019F76\n\
+ .align 2, 0\n\
_08018668: .4byte gBattleWeather\n\
_0801866C: .4byte 0x02000000\n\
_08018670: .4byte 0x000160a4\n\
@@ -2663,367 +2663,367 @@ _08018674: .4byte 0x00016003\n\
_08018678: .4byte gBattleCommunication\n\
_0801867C: .4byte gUnknown_081D901D\n\
_08018680:\n\
- ldr r2, _080186A8 @ =gBattleWeather\n\
- ldrh r1, [r2]\n\
- movs r0, 0x4\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _08018690\n\
- bl _08019F76\n\
+ ldr r2, _080186A8 @ =gBattleWeather\n\
+ ldrh r1, [r2]\n\
+ movs r0, 0x4\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _08018690\n\
+ bl _08019F76\n\
_08018690:\n\
- movs r0, 0x5\n\
- strh r0, [r2]\n\
- ldr r0, _080186AC @ =BattleScript_DrizzleActivates\n\
- bl b_push_move_exec\n\
- ldr r0, _080186B0 @ =0x02000000\n\
- ldr r3, _080186B4 @ =0x00016003\n\
- adds r0, r3\n\
- mov r5, r10\n\
- strb r5, [r0]\n\
- bl _08019F22\n\
- .align 2, 0\n\
+ movs r0, 0x5\n\
+ strh r0, [r2]\n\
+ ldr r0, _080186AC @ =BattleScript_DrizzleActivates\n\
+ bl b_push_move_exec\n\
+ ldr r0, _080186B0 @ =0x02000000\n\
+ ldr r3, _080186B4 @ =0x00016003\n\
+ adds r0, r3\n\
+ mov r5, r10\n\
+ strb r5, [r0]\n\
+ bl _08019F22\n\
+ .align 2, 0\n\
_080186A8: .4byte gBattleWeather\n\
_080186AC: .4byte BattleScript_DrizzleActivates\n\
_080186B0: .4byte 0x02000000\n\
_080186B4: .4byte 0x00016003\n\
_080186B8:\n\
- ldr r2, _080186E0 @ =gBattleWeather\n\
- ldrh r1, [r2]\n\
- movs r0, 0x10\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080186C8\n\
- bl _08019F76\n\
+ ldr r2, _080186E0 @ =gBattleWeather\n\
+ ldrh r1, [r2]\n\
+ movs r0, 0x10\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _080186C8\n\
+ bl _08019F76\n\
_080186C8:\n\
- movs r0, 0x18\n\
- strh r0, [r2]\n\
- ldr r0, _080186E4 @ =BattleScript_SandstreamActivates\n\
- bl b_push_move_exec\n\
- ldr r0, _080186E8 @ =0x02000000\n\
- ldr r1, _080186EC @ =0x00016003\n\
- adds r0, r1\n\
- mov r2, r10\n\
- strb r2, [r0]\n\
- bl _08019F22\n\
- .align 2, 0\n\
+ movs r0, 0x18\n\
+ strh r0, [r2]\n\
+ ldr r0, _080186E4 @ =BattleScript_SandstreamActivates\n\
+ bl b_push_move_exec\n\
+ ldr r0, _080186E8 @ =0x02000000\n\
+ ldr r1, _080186EC @ =0x00016003\n\
+ adds r0, r1\n\
+ mov r2, r10\n\
+ strb r2, [r0]\n\
+ bl _08019F22\n\
+ .align 2, 0\n\
_080186E0: .4byte gBattleWeather\n\
_080186E4: .4byte BattleScript_SandstreamActivates\n\
_080186E8: .4byte 0x02000000\n\
_080186EC: .4byte 0x00016003\n\
_080186F0:\n\
- ldr r2, _08018718 @ =gBattleWeather\n\
- ldrh r1, [r2]\n\
- movs r0, 0x40\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _08018700\n\
- bl _08019F76\n\
+ ldr r2, _08018718 @ =gBattleWeather\n\
+ ldrh r1, [r2]\n\
+ movs r0, 0x40\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _08018700\n\
+ bl _08019F76\n\
_08018700:\n\
- movs r0, 0x60\n\
- strh r0, [r2]\n\
- ldr r0, _0801871C @ =BattleScript_DroughtActivates\n\
- bl b_push_move_exec\n\
- ldr r0, _08018720 @ =0x02000000\n\
- ldr r3, _08018724 @ =0x00016003\n\
- adds r0, r3\n\
- mov r5, r10\n\
- strb r5, [r0]\n\
- bl _08019F22\n\
- .align 2, 0\n\
+ movs r0, 0x60\n\
+ strh r0, [r2]\n\
+ ldr r0, _0801871C @ =BattleScript_DroughtActivates\n\
+ bl b_push_move_exec\n\
+ ldr r0, _08018720 @ =0x02000000\n\
+ ldr r3, _08018724 @ =0x00016003\n\
+ adds r0, r3\n\
+ mov r5, r10\n\
+ strb r5, [r0]\n\
+ bl _08019F22\n\
+ .align 2, 0\n\
_08018718: .4byte gBattleWeather\n\
_0801871C: .4byte BattleScript_DroughtActivates\n\
_08018720: .4byte 0x02000000\n\
_08018724: .4byte 0x00016003\n\
_08018728:\n\
- ldr r0, _08018754 @ =gSpecialStatuses\n\
- mov r1, r10\n\
- lsls r2, r1, 2\n\
- adds r1, r2, r1\n\
- lsls r1, 2\n\
- adds r3, r1, r0\n\
- ldrb r0, [r3]\n\
- lsls r0, 28\n\
- cmp r0, 0\n\
- bge _08018740\n\
- bl _08019F76\n\
+ ldr r0, _08018754 @ =gSpecialStatuses\n\
+ mov r1, r10\n\
+ lsls r2, r1, 2\n\
+ adds r1, r2, r1\n\
+ lsls r1, 2\n\
+ adds r3, r1, r0\n\
+ ldrb r0, [r3]\n\
+ lsls r0, 28\n\
+ cmp r0, 0\n\
+ bge _08018740\n\
+ bl _08019F76\n\
_08018740:\n\
- ldr r1, _08018758 @ =gStatuses3\n\
- adds r1, r2, r1\n\
- ldr r0, [r1]\n\
- movs r2, 0x80\n\
- lsls r2, 12\n\
- orrs r0, r2\n\
- str r0, [r1]\n\
- ldrb r0, [r3]\n\
- movs r1, 0x8\n\
- b _080187CA\n\
- .align 2, 0\n\
+ ldr r1, _08018758 @ =gStatuses3\n\
+ adds r1, r2, r1\n\
+ ldr r0, [r1]\n\
+ movs r2, 0x80\n\
+ lsls r2, 12\n\
+ orrs r0, r2\n\
+ str r0, [r1]\n\
+ ldrb r0, [r3]\n\
+ movs r1, 0x8\n\
+ b _080187CA\n\
+ .align 2, 0\n\
_08018754: .4byte gSpecialStatuses\n\
_08018758: .4byte gStatuses3\n\
_0801875C:\n\
- mov r0, r10\n\
- bl CastformDataTypeChange\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r9, r0\n\
- cmp r0, 0\n\
- bne _08018770\n\
- bl _08019F92\n\
+ mov r0, r10\n\
+ bl CastformDataTypeChange\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r9, r0\n\
+ cmp r0, 0\n\
+ bne _08018770\n\
+ bl _08019F92\n\
_08018770:\n\
- ldr r0, _08018790 @ =BattleScript_CastformChange\n\
- bl b_push_move_exec\n\
- ldr r0, _08018794 @ =0x02000000\n\
- ldr r2, _08018798 @ =0x00016003\n\
- adds r1, r0, r2\n\
- mov r3, r10\n\
- strb r3, [r1]\n\
- mov r1, r9\n\
- subs r1, 0x1\n\
- ldr r5, _0801879C @ =0x0001609b\n\
- adds r0, r5\n\
- strb r1, [r0]\n\
- bl _08019F76\n\
- .align 2, 0\n\
+ ldr r0, _08018790 @ =BattleScript_CastformChange\n\
+ bl b_push_move_exec\n\
+ ldr r0, _08018794 @ =0x02000000\n\
+ ldr r2, _08018798 @ =0x00016003\n\
+ adds r1, r0, r2\n\
+ mov r3, r10\n\
+ strb r3, [r1]\n\
+ mov r1, r9\n\
+ subs r1, 0x1\n\
+ ldr r5, _0801879C @ =0x0001609b\n\
+ adds r0, r5\n\
+ strb r1, [r0]\n\
+ bl _08019F76\n\
+ .align 2, 0\n\
_08018790: .4byte BattleScript_CastformChange\n\
_08018794: .4byte 0x02000000\n\
_08018798: .4byte 0x00016003\n\
_0801879C: .4byte 0x0001609b\n\
_080187A0:\n\
- ldr r0, _080187D4 @ =gSpecialStatuses\n\
- mov r1, r10\n\
- lsls r2, r1, 2\n\
- adds r1, r2, r1\n\
- lsls r1, 2\n\
- adds r3, r1, r0\n\
- ldrb r0, [r3]\n\
- lsls r0, 27\n\
- cmp r0, 0\n\
- bge _080187B8\n\
- bl _08019F76\n\
+ ldr r0, _080187D4 @ =gSpecialStatuses\n\
+ mov r1, r10\n\
+ lsls r2, r1, 2\n\
+ adds r1, r2, r1\n\
+ lsls r1, 2\n\
+ adds r3, r1, r0\n\
+ ldrb r0, [r3]\n\
+ lsls r0, 27\n\
+ cmp r0, 0\n\
+ bge _080187B8\n\
+ bl _08019F76\n\
_080187B8:\n\
- ldr r1, _080187D8 @ =gStatuses3\n\
- adds r1, r2, r1\n\
- ldr r0, [r1]\n\
- movs r2, 0x80\n\
- lsls r2, 13\n\
- orrs r0, r2\n\
- str r0, [r1]\n\
- ldrb r0, [r3]\n\
- movs r1, 0x10\n\
+ ldr r1, _080187D8 @ =gStatuses3\n\
+ adds r1, r2, r1\n\
+ ldr r0, [r1]\n\
+ movs r2, 0x80\n\
+ lsls r2, 13\n\
+ orrs r0, r2\n\
+ str r0, [r1]\n\
+ ldrb r0, [r3]\n\
+ movs r1, 0x10\n\
_080187CA:\n\
- orrs r0, r1\n\
- strb r0, [r3]\n\
- bl _08019F76\n\
- .align 2, 0\n\
+ orrs r0, r1\n\
+ strb r0, [r3]\n\
+ bl _08019F76\n\
+ .align 2, 0\n\
_080187D4: .4byte gSpecialStatuses\n\
_080187D8: .4byte gStatuses3\n\
_080187DC:\n\
- movs r6, 0\n\
- ldrb r5, [r5]\n\
- cmp r6, r5\n\
- bcc _080187E8\n\
- bl _08019F76\n\
+ movs r6, 0\n\
+ ldrb r5, [r5]\n\
+ cmp r6, r5\n\
+ bcc _080187E8\n\
+ bl _08019F76\n\
_080187E8:\n\
- adds r0, r6, 0\n\
- bl CastformDataTypeChange\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r9, r0\n\
- cmp r0, 0\n\
- beq _080187FC\n\
- bl _08019E14\n\
+ adds r0, r6, 0\n\
+ bl CastformDataTypeChange\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r9, r0\n\
+ cmp r0, 0\n\
+ beq _080187FC\n\
+ bl _08019E14\n\
_080187FC:\n\
- adds r0, r6, 0x1\n\
- lsls r0, 24\n\
- lsrs r6, r0, 24\n\
- ldr r0, _08018810 @ =gNoOfAllBanks\n\
- ldrb r0, [r0]\n\
- cmp r6, r0\n\
- bcc _080187E8\n\
- bl _08019F76\n\
- .align 2, 0\n\
+ adds r0, r6, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r6, r0, 24\n\
+ ldr r0, _08018810 @ =gNoOfAllBanks\n\
+ ldrb r0, [r0]\n\
+ cmp r6, r0\n\
+ bcc _080187E8\n\
+ bl _08019F76\n\
+ .align 2, 0\n\
_08018810: .4byte gNoOfAllBanks\n\
_08018814:\n\
- ldr r2, _08018844 @ =gBattleMons\n\
- movs r0, 0x58\n\
- mov r1, r10\n\
- muls r1, r0\n\
- adds r4, r1, r2\n\
- ldrh r0, [r4, 0x28]\n\
- cmp r0, 0\n\
- bne _08018828\n\
- bl _08019F76\n\
+ ldr r2, _08018844 @ =gBattleMons\n\
+ movs r0, 0x58\n\
+ mov r1, r10\n\
+ muls r1, r0\n\
+ adds r4, r1, r2\n\
+ ldrh r0, [r4, 0x28]\n\
+ cmp r0, 0\n\
+ bne _08018828\n\
+ bl _08019F76\n\
_08018828:\n\
- ldr r0, _08018848 @ =gBankAttacker\n\
- mov r3, r10\n\
- strb r3, [r0]\n\
- mov r3, r8\n\
- ldrb r5, [r3]\n\
- cmp r5, 0x2C\n\
- beq _0801885A\n\
- cmp r5, 0x2C\n\
- bgt _0801884C\n\
- cmp r5, 0x3\n\
- bne _08018840\n\
- b _080189B8\n\
+ ldr r0, _08018848 @ =gBankAttacker\n\
+ mov r3, r10\n\
+ strb r3, [r0]\n\
+ mov r3, r8\n\
+ ldrb r5, [r3]\n\
+ cmp r5, 0x2C\n\
+ beq _0801885A\n\
+ cmp r5, 0x2C\n\
+ bgt _0801884C\n\
+ cmp r5, 0x3\n\
+ bne _08018840\n\
+ b _080189B8\n\
_08018840:\n\
- bl _08019F76\n\
- .align 2, 0\n\
+ bl _08019F76\n\
+ .align 2, 0\n\
_08018844: .4byte gBattleMons\n\
_08018848: .4byte gBankAttacker\n\
_0801884C:\n\
- cmp r5, 0x36\n\
- bne _08018852\n\
- b _08018A18\n\
+ cmp r5, 0x36\n\
+ bne _08018852\n\
+ b _08018A18\n\
_08018852:\n\
- cmp r5, 0x3D\n\
- beq _080188DC\n\
- bl _08019F76\n\
+ cmp r5, 0x3D\n\
+ beq _080188DC\n\
+ bl _08019F76\n\
_0801885A:\n\
- movs r0, 0\n\
- str r0, [sp]\n\
- movs r0, 0x13\n\
- movs r1, 0\n\
- movs r2, 0xD\n\
- movs r3, 0\n\
- bl AbilityBattleEffects\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- cmp r0, 0\n\
- beq _08018876\n\
- bl _08019F76\n\
+ movs r0, 0\n\
+ str r0, [sp]\n\
+ movs r0, 0x13\n\
+ movs r1, 0\n\
+ movs r2, 0xD\n\
+ movs r3, 0\n\
+ bl AbilityBattleEffects\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, 0\n\
+ beq _08018876\n\
+ bl _08019F76\n\
_08018876:\n\
- str r0, [sp]\n\
- movs r0, 0x13\n\
- movs r1, 0\n\
- movs r2, 0x4D\n\
- movs r3, 0\n\
- bl AbilityBattleEffects\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- beq _0801888E\n\
- bl _08019F76\n\
+ str r0, [sp]\n\
+ movs r0, 0x13\n\
+ movs r1, 0\n\
+ movs r2, 0x4D\n\
+ movs r3, 0\n\
+ bl AbilityBattleEffects\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ beq _0801888E\n\
+ bl _08019F76\n\
_0801888E:\n\
- ldr r0, _080188D0 @ =gBattleWeather\n\
- ldrh r1, [r0]\n\
- movs r0, 0x7\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _0801889E\n\
- bl _08019F76\n\
+ ldr r0, _080188D0 @ =gBattleWeather\n\
+ ldrh r1, [r0]\n\
+ movs r0, 0x7\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _0801889E\n\
+ bl _08019F76\n\
_0801889E:\n\
- ldrh r0, [r4, 0x2C]\n\
- ldrh r1, [r4, 0x28]\n\
- cmp r0, r1\n\
- bhi _080188AA\n\
- bl _08019F76\n\
+ ldrh r0, [r4, 0x2C]\n\
+ ldrh r1, [r4, 0x28]\n\
+ cmp r0, r1\n\
+ bhi _080188AA\n\
+ bl _08019F76\n\
_080188AA:\n\
- mov r2, r8\n\
- strb r5, [r2]\n\
- ldr r0, _080188D4 @ =BattleScript_RainDishActivates\n\
- bl b_push_move_exec\n\
- ldr r1, _080188D8 @ =gBattleMoveDamage\n\
- ldrh r0, [r4, 0x2C]\n\
- lsrs r0, 4\n\
- str r0, [r1]\n\
- cmp r0, 0\n\
- bne _080188C4\n\
- movs r0, 0x1\n\
- str r0, [r1]\n\
+ mov r2, r8\n\
+ strb r5, [r2]\n\
+ ldr r0, _080188D4 @ =BattleScript_RainDishActivates\n\
+ bl b_push_move_exec\n\
+ ldr r1, _080188D8 @ =gBattleMoveDamage\n\
+ ldrh r0, [r4, 0x2C]\n\
+ lsrs r0, 4\n\
+ str r0, [r1]\n\
+ cmp r0, 0\n\
+ bne _080188C4\n\
+ movs r0, 0x1\n\
+ str r0, [r1]\n\
_080188C4:\n\
- ldr r0, [r1]\n\
- negs r0, r0\n\
- str r0, [r1]\n\
- bl _08019F22\n\
- .align 2, 0\n\
+ ldr r0, [r1]\n\
+ negs r0, r0\n\
+ str r0, [r1]\n\
+ bl _08019F22\n\
+ .align 2, 0\n\
_080188D0: .4byte gBattleWeather\n\
_080188D4: .4byte BattleScript_RainDishActivates\n\
_080188D8: .4byte gBattleMoveDamage\n\
_080188DC:\n\
- adds r0, r2, 0\n\
- adds r0, 0x4C\n\
- adds r5, r1, r0\n\
- ldrb r0, [r5]\n\
- cmp r0, 0\n\
- bne _080188EC\n\
- bl _08019F76\n\
+ adds r0, r2, 0\n\
+ adds r0, 0x4C\n\
+ adds r5, r1, r0\n\
+ ldrb r0, [r5]\n\
+ cmp r0, 0\n\
+ bne _080188EC\n\
+ bl _08019F76\n\
_080188EC:\n\
- bl Random\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- movs r1, 0x3\n\
- bl __umodsi3\n\
- lsls r0, 16\n\
- lsrs r4, r0, 16\n\
- cmp r4, 0\n\
- beq _08018906\n\
- bl _08019F76\n\
+ bl Random\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ movs r1, 0x3\n\
+ bl __umodsi3\n\
+ lsls r0, 16\n\
+ lsrs r4, r0, 16\n\
+ cmp r4, 0\n\
+ beq _08018906\n\
+ bl _08019F76\n\
_08018906:\n\
- ldr r0, [r5]\n\
- movs r1, 0x88\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _08018918\n\
- ldr r0, _08018990 @ =gBattleTextBuff1\n\
- ldr r1, _08018994 @ =gStatusConditionString_PoisonJpn\n\
- bl StringCopy\n\
+ ldr r0, [r5]\n\
+ movs r1, 0x88\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _08018918\n\
+ ldr r0, _08018990 @ =gBattleTextBuff1\n\
+ ldr r1, _08018994 @ =gStatusConditionString_PoisonJpn\n\
+ bl StringCopy\n\
_08018918:\n\
- ldr r0, [r5]\n\
- movs r1, 0x7\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0801892A\n\
- ldr r0, _08018990 @ =gBattleTextBuff1\n\
- ldr r1, _08018998 @ =gStatusConditionString_SleepJpn\n\
- bl StringCopy\n\
+ ldr r0, [r5]\n\
+ movs r1, 0x7\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0801892A\n\
+ ldr r0, _08018990 @ =gBattleTextBuff1\n\
+ ldr r1, _08018998 @ =gStatusConditionString_SleepJpn\n\
+ bl StringCopy\n\
_0801892A:\n\
- ldr r0, [r5]\n\
- movs r1, 0x40\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0801893C\n\
- ldr r0, _08018990 @ =gBattleTextBuff1\n\
- ldr r1, _0801899C @ =gStatusConditionString_ParalysisJpn\n\
- bl StringCopy\n\
+ ldr r0, [r5]\n\
+ movs r1, 0x40\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0801893C\n\
+ ldr r0, _08018990 @ =gBattleTextBuff1\n\
+ ldr r1, _0801899C @ =gStatusConditionString_ParalysisJpn\n\
+ bl StringCopy\n\
_0801893C:\n\
- ldr r0, [r5]\n\
- movs r1, 0x10\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0801894E\n\
- ldr r0, _08018990 @ =gBattleTextBuff1\n\
- ldr r1, _080189A0 @ =gStatusConditionString_BurnJpn\n\
- bl StringCopy\n\
+ ldr r0, [r5]\n\
+ movs r1, 0x10\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0801894E\n\
+ ldr r0, _08018990 @ =gBattleTextBuff1\n\
+ ldr r1, _080189A0 @ =gStatusConditionString_BurnJpn\n\
+ bl StringCopy\n\
_0801894E:\n\
- ldr r0, [r5]\n\
- movs r1, 0x20\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _08018960\n\
- ldr r0, _08018990 @ =gBattleTextBuff1\n\
- ldr r1, _080189A4 @ =gStatusConditionString_IceJpn\n\
- bl StringCopy\n\
+ ldr r0, [r5]\n\
+ movs r1, 0x20\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _08018960\n\
+ ldr r0, _08018990 @ =gBattleTextBuff1\n\
+ ldr r1, _080189A4 @ =gStatusConditionString_IceJpn\n\
+ bl StringCopy\n\
_08018960:\n\
- str r4, [r5]\n\
- ldr r0, _080189A8 @ =0x02000000\n\
- ldr r4, _080189AC @ =gActiveBank\n\
- mov r3, r10\n\
- strb r3, [r4]\n\
- ldr r1, _080189B0 @ =0x00016003\n\
- adds r0, r1\n\
- strb r3, [r0]\n\
- ldr r0, _080189B4 @ =BattleScript_ShedSkinActivates\n\
- bl b_push_move_exec\n\
- str r5, [sp]\n\
- movs r0, 0\n\
- movs r1, 0x28\n\
- movs r2, 0\n\
- movs r3, 0x4\n\
- bl EmitSetAttributes\n\
- ldrb r0, [r4]\n\
- bl MarkBufferBankForExecution\n\
- bl _08019F22\n\
- .align 2, 0\n\
+ str r4, [r5]\n\
+ ldr r0, _080189A8 @ =0x02000000\n\
+ ldr r4, _080189AC @ =gActiveBank\n\
+ mov r3, r10\n\
+ strb r3, [r4]\n\
+ ldr r1, _080189B0 @ =0x00016003\n\
+ adds r0, r1\n\
+ strb r3, [r0]\n\
+ ldr r0, _080189B4 @ =BattleScript_ShedSkinActivates\n\
+ bl b_push_move_exec\n\
+ str r5, [sp]\n\
+ movs r0, 0\n\
+ movs r1, 0x28\n\
+ movs r2, 0\n\
+ movs r3, 0x4\n\
+ bl EmitSetAttributes\n\
+ ldrb r0, [r4]\n\
+ bl MarkBufferBankForExecution\n\
+ bl _08019F22\n\
+ .align 2, 0\n\
_08018990: .4byte gBattleTextBuff1\n\
_08018994: .4byte gStatusConditionString_PoisonJpn\n\
_08018998: .4byte gStatusConditionString_SleepJpn\n\
@@ -3035,132 +3035,132 @@ _080189AC: .4byte gActiveBank\n\
_080189B0: .4byte 0x00016003\n\
_080189B4: .4byte BattleScript_ShedSkinActivates\n\
_080189B8:\n\
- ldrb r2, [r4, 0x1B]\n\
- movs r0, 0x1B\n\
- ldrsb r0, [r4, r0]\n\
- cmp r0, 0xB\n\
- ble _080189C6\n\
- bl _08019F76\n\
+ ldrb r2, [r4, 0x1B]\n\
+ movs r0, 0x1B\n\
+ ldrsb r0, [r4, r0]\n\
+ cmp r0, 0xB\n\
+ ble _080189C6\n\
+ bl _08019F76\n\
_080189C6:\n\
- ldr r0, _08018A04 @ =gDisableStructs\n\
- mov r3, r10\n\
- lsls r1, r3, 3\n\
- subs r1, r3\n\
- lsls r1, 2\n\
- adds r1, r0\n\
- ldrb r0, [r1, 0x16]\n\
- cmp r0, 0x2\n\
- bne _080189DC\n\
- bl _08019F76\n\
+ ldr r0, _08018A04 @ =gDisableStructs\n\
+ mov r3, r10\n\
+ lsls r1, r3, 3\n\
+ subs r1, r3\n\
+ lsls r1, 2\n\
+ adds r1, r0\n\
+ ldrb r0, [r1, 0x16]\n\
+ cmp r0, 0x2\n\
+ bne _080189DC\n\
+ bl _08019F76\n\
_080189DC:\n\
- adds r0, r2, 0x1\n\
- movs r2, 0\n\
- strb r0, [r4, 0x1B]\n\
- ldr r5, _08018A08 @ =0x000160a4\n\
- adds r1, r7, r5\n\
- movs r0, 0x11\n\
- strb r0, [r1]\n\
- ldr r1, _08018A0C @ =0x000160a5\n\
- adds r0, r7, r1\n\
- strb r2, [r0]\n\
- ldr r0, _08018A10 @ =BattleScript_SpeedBoostActivates\n\
- bl b_push_move_exec\n\
- ldr r2, _08018A14 @ =0x00016003\n\
- adds r0, r7, r2\n\
- mov r3, r10\n\
- strb r3, [r0]\n\
- bl _08019F22\n\
- .align 2, 0\n\
+ adds r0, r2, 0x1\n\
+ movs r2, 0\n\
+ strb r0, [r4, 0x1B]\n\
+ ldr r5, _08018A08 @ =0x000160a4\n\
+ adds r1, r7, r5\n\
+ movs r0, 0x11\n\
+ strb r0, [r1]\n\
+ ldr r1, _08018A0C @ =0x000160a5\n\
+ adds r0, r7, r1\n\
+ strb r2, [r0]\n\
+ ldr r0, _08018A10 @ =BattleScript_SpeedBoostActivates\n\
+ bl b_push_move_exec\n\
+ ldr r2, _08018A14 @ =0x00016003\n\
+ adds r0, r7, r2\n\
+ mov r3, r10\n\
+ strb r3, [r0]\n\
+ bl _08019F22\n\
+ .align 2, 0\n\
_08018A04: .4byte gDisableStructs\n\
_08018A08: .4byte 0x000160a4\n\
_08018A0C: .4byte 0x000160a5\n\
_08018A10: .4byte BattleScript_SpeedBoostActivates\n\
_08018A14: .4byte 0x00016003\n\
_08018A18:\n\
- ldr r2, _08018A3C @ =gDisableStructs\n\
- ldrb r0, [r0]\n\
- lsls r1, r0, 3\n\
- subs r1, r0\n\
- lsls r1, 2\n\
- adds r1, r2\n\
- ldrb r3, [r1, 0x18]\n\
- lsls r0, r3, 31\n\
- lsrs r0, 31\n\
- movs r2, 0x1\n\
- eors r2, r0\n\
- movs r0, 0x2\n\
- negs r0, r0\n\
- ands r0, r3\n\
- orrs r0, r2\n\
- strb r0, [r1, 0x18]\n\
- bl _08019F76\n\
- .align 2, 0\n\
+ ldr r2, _08018A3C @ =gDisableStructs\n\
+ ldrb r0, [r0]\n\
+ lsls r1, r0, 3\n\
+ subs r1, r0\n\
+ lsls r1, 2\n\
+ adds r1, r2\n\
+ ldrb r3, [r1, 0x18]\n\
+ lsls r0, r3, 31\n\
+ lsrs r0, 31\n\
+ movs r2, 0x1\n\
+ eors r2, r0\n\
+ movs r0, 0x2\n\
+ negs r0, r0\n\
+ ands r0, r3\n\
+ orrs r0, r2\n\
+ strb r0, [r1, 0x18]\n\
+ bl _08019F76\n\
+ .align 2, 0\n\
_08018A3C: .4byte gDisableStructs\n\
_08018A40:\n\
- mov r5, r8\n\
- ldrb r0, [r5]\n\
- cmp r0, 0x2B\n\
- beq _08018A4C\n\
- bl _08019F76\n\
+ mov r5, r8\n\
+ ldrb r0, [r5]\n\
+ cmp r0, 0x2B\n\
+ beq _08018A4C\n\
+ bl _08019F76\n\
_08018A4C:\n\
- movs r4, 0\n\
- ldr r0, _08018ABC @ =gSoundMovesTable\n\
- ldrh r2, [r0]\n\
- ldr r5, _08018AC0 @ =0x0000ffff\n\
- adds r1, r0, 0\n\
- cmp r2, r5\n\
- bne _08018A5E\n\
- bl _08019F76\n\
+ movs r4, 0\n\
+ ldr r0, _08018ABC @ =gSoundMovesTable\n\
+ ldrh r2, [r0]\n\
+ ldr r5, _08018AC0 @ =0x0000ffff\n\
+ adds r1, r0, 0\n\
+ cmp r2, r5\n\
+ bne _08018A5E\n\
+ bl _08019F76\n\
_08018A5E:\n\
- cmp r2, r3\n\
- beq _08018A76\n\
- adds r2, r1, 0\n\
+ cmp r2, r3\n\
+ beq _08018A76\n\
+ adds r2, r1, 0\n\
_08018A64:\n\
- adds r2, 0x2\n\
- adds r4, 0x1\n\
- ldrh r0, [r2]\n\
- cmp r0, r5\n\
- bne _08018A72\n\
- bl _08019F76\n\
+ adds r2, 0x2\n\
+ adds r4, 0x1\n\
+ ldrh r0, [r2]\n\
+ cmp r0, r5\n\
+ bne _08018A72\n\
+ bl _08019F76\n\
_08018A72:\n\
- cmp r0, r3\n\
- bne _08018A64\n\
+ cmp r0, r3\n\
+ bne _08018A64\n\
_08018A76:\n\
- lsls r0, r4, 1\n\
- adds r0, r1\n\
- ldrh r1, [r0]\n\
- ldr r0, _08018AC0 @ =0x0000ffff\n\
- cmp r1, r0\n\
- bne _08018A86\n\
- bl _08019F76\n\
+ lsls r0, r4, 1\n\
+ adds r0, r1\n\
+ ldrh r1, [r0]\n\
+ ldr r0, _08018AC0 @ =0x0000ffff\n\
+ cmp r1, r0\n\
+ bne _08018A86\n\
+ bl _08019F76\n\
_08018A86:\n\
- ldr r1, _08018AC4 @ =gBattleMons\n\
- ldr r0, _08018AC8 @ =gBankAttacker\n\
- ldrb r2, [r0]\n\
- movs r0, 0x58\n\
- muls r0, r2\n\
- adds r1, 0x50\n\
- adds r0, r1\n\
- ldr r0, [r0]\n\
- movs r1, 0x80\n\
- lsls r1, 5\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _08018AAC\n\
- ldr r0, _08018ACC @ =gHitMarker\n\
- ldr r1, [r0]\n\
- movs r2, 0x80\n\
- lsls r2, 4\n\
- orrs r1, r2\n\
- str r1, [r0]\n\
+ ldr r1, _08018AC4 @ =gBattleMons\n\
+ ldr r0, _08018AC8 @ =gBankAttacker\n\
+ ldrb r2, [r0]\n\
+ movs r0, 0x58\n\
+ muls r0, r2\n\
+ adds r1, 0x50\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ movs r1, 0x80\n\
+ lsls r1, 5\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _08018AAC\n\
+ ldr r0, _08018ACC @ =gHitMarker\n\
+ ldr r1, [r0]\n\
+ movs r2, 0x80\n\
+ lsls r2, 4\n\
+ orrs r1, r2\n\
+ str r1, [r0]\n\
_08018AAC:\n\
- ldr r1, _08018AD0 @ =gBattlescriptCurrInstr\n\
- ldr r0, _08018AD4 @ =BattleScript_SoundproofProtected\n\
- str r0, [r1]\n\
- movs r0, 0x1\n\
- mov r9, r0\n\
- bl _08019F7C\n\
- .align 2, 0\n\
+ ldr r1, _08018AD0 @ =gBattlescriptCurrInstr\n\
+ ldr r0, _08018AD4 @ =BattleScript_SoundproofProtected\n\
+ str r0, [r1]\n\
+ movs r0, 0x1\n\
+ mov r9, r0\n\
+ bl _08019F7C\n\
+ .align 2, 0\n\
_08018ABC: .4byte gSoundMovesTable\n\
_08018AC0: .4byte 0x0000ffff\n\
_08018AC4: .4byte gBattleMons\n\
@@ -3169,150 +3169,150 @@ _08018ACC: .4byte gHitMarker\n\
_08018AD0: .4byte gBattlescriptCurrInstr\n\
_08018AD4: .4byte BattleScript_SoundproofProtected\n\
_08018AD8:\n\
- cmp r3, 0\n\
- bne _08018AE0\n\
- bl _08019F76\n\
+ cmp r3, 0\n\
+ bne _08018AE0\n\
+ bl _08019F76\n\
_08018AE0:\n\
- mov r1, r8\n\
- ldrb r0, [r1]\n\
- cmp r0, 0xB\n\
- beq _08018B50\n\
- cmp r0, 0xB\n\
- bgt _08018AF2\n\
- cmp r0, 0xA\n\
- beq _08018AF8\n\
- b _08018C6A\n\
+ mov r1, r8\n\
+ ldrb r0, [r1]\n\
+ cmp r0, 0xB\n\
+ beq _08018B50\n\
+ cmp r0, 0xB\n\
+ bgt _08018AF2\n\
+ cmp r0, 0xA\n\
+ beq _08018AF8\n\
+ b _08018C6A\n\
_08018AF2:\n\
- cmp r0, 0x12\n\
- beq _08018BA8\n\
- b _08018C6A\n\
+ cmp r0, 0x12\n\
+ beq _08018BA8\n\
+ b _08018C6A\n\
_08018AF8:\n\
- cmp r4, 0xD\n\
- beq _08018AFE\n\
- b _08018C6A\n\
+ cmp r4, 0xD\n\
+ beq _08018AFE\n\
+ b _08018C6A\n\
_08018AFE:\n\
- ldr r0, _08018B28 @ =gBattleMoves\n\
- lsls r1, r3, 1\n\
- adds r1, r3\n\
- lsls r1, 2\n\
- adds r1, r0\n\
- ldrb r0, [r1, 0x1]\n\
- cmp r0, 0\n\
- bne _08018B10\n\
- b _08018C6A\n\
+ ldr r0, _08018B28 @ =gBattleMoves\n\
+ lsls r1, r3, 1\n\
+ adds r1, r3\n\
+ lsls r1, 2\n\
+ adds r1, r0\n\
+ ldrb r0, [r1, 0x1]\n\
+ cmp r0, 0\n\
+ bne _08018B10\n\
+ b _08018C6A\n\
_08018B10:\n\
- ldr r1, _08018B2C @ =gProtectStructs\n\
- ldr r0, _08018B30 @ =gBankAttacker\n\
- ldrb r0, [r0]\n\
- lsls r0, 4\n\
- adds r0, r1\n\
- ldrb r0, [r0, 0x2]\n\
- lsls r0, 28\n\
- cmp r0, 0\n\
- bge _08018B3C\n\
- ldr r1, _08018B34 @ =gBattlescriptCurrInstr\n\
- ldr r0, _08018B38 @ =BattleScript_MoveHPDrain\n\
- b _08018B40\n\
- .align 2, 0\n\
+ ldr r1, _08018B2C @ =gProtectStructs\n\
+ ldr r0, _08018B30 @ =gBankAttacker\n\
+ ldrb r0, [r0]\n\
+ lsls r0, 4\n\
+ adds r0, r1\n\
+ ldrb r0, [r0, 0x2]\n\
+ lsls r0, 28\n\
+ cmp r0, 0\n\
+ bge _08018B3C\n\
+ ldr r1, _08018B34 @ =gBattlescriptCurrInstr\n\
+ ldr r0, _08018B38 @ =BattleScript_MoveHPDrain\n\
+ b _08018B40\n\
+ .align 2, 0\n\
_08018B28: .4byte gBattleMoves\n\
_08018B2C: .4byte gProtectStructs\n\
_08018B30: .4byte gBankAttacker\n\
_08018B34: .4byte gBattlescriptCurrInstr\n\
_08018B38: .4byte BattleScript_MoveHPDrain\n\
_08018B3C:\n\
- ldr r1, _08018B48 @ =gBattlescriptCurrInstr\n\
- ldr r0, _08018B4C @ =BattleScript_MoveHPDrain_PPLoss\n\
+ ldr r1, _08018B48 @ =gBattlescriptCurrInstr\n\
+ ldr r0, _08018B4C @ =BattleScript_MoveHPDrain_PPLoss\n\
_08018B40:\n\
- str r0, [r1]\n\
- movs r2, 0x1\n\
- b _08018C68\n\
- .align 2, 0\n\
+ str r0, [r1]\n\
+ movs r2, 0x1\n\
+ b _08018C68\n\
+ .align 2, 0\n\
_08018B48: .4byte gBattlescriptCurrInstr\n\
_08018B4C: .4byte BattleScript_MoveHPDrain_PPLoss\n\
_08018B50:\n\
- cmp r4, 0xB\n\
- beq _08018B56\n\
- b _08018C6A\n\
+ cmp r4, 0xB\n\
+ beq _08018B56\n\
+ b _08018C6A\n\
_08018B56:\n\
- ldr r0, _08018B80 @ =gBattleMoves\n\
- lsls r1, r3, 1\n\
- adds r1, r3\n\
- lsls r1, 2\n\
- adds r1, r0\n\
- ldrb r0, [r1, 0x1]\n\
- cmp r0, 0\n\
- bne _08018B68\n\
- b _08018C6A\n\
+ ldr r0, _08018B80 @ =gBattleMoves\n\
+ lsls r1, r3, 1\n\
+ adds r1, r3\n\
+ lsls r1, 2\n\
+ adds r1, r0\n\
+ ldrb r0, [r1, 0x1]\n\
+ cmp r0, 0\n\
+ bne _08018B68\n\
+ b _08018C6A\n\
_08018B68:\n\
- ldr r1, _08018B84 @ =gProtectStructs\n\
- ldr r0, _08018B88 @ =gBankAttacker\n\
- ldrb r0, [r0]\n\
- lsls r0, 4\n\
- adds r0, r1\n\
- ldrb r0, [r0, 0x2]\n\
- lsls r0, 28\n\
- cmp r0, 0\n\
- bge _08018B94\n\
- ldr r1, _08018B8C @ =gBattlescriptCurrInstr\n\
- ldr r0, _08018B90 @ =BattleScript_MoveHPDrain\n\
- b _08018B98\n\
- .align 2, 0\n\
+ ldr r1, _08018B84 @ =gProtectStructs\n\
+ ldr r0, _08018B88 @ =gBankAttacker\n\
+ ldrb r0, [r0]\n\
+ lsls r0, 4\n\
+ adds r0, r1\n\
+ ldrb r0, [r0, 0x2]\n\
+ lsls r0, 28\n\
+ cmp r0, 0\n\
+ bge _08018B94\n\
+ ldr r1, _08018B8C @ =gBattlescriptCurrInstr\n\
+ ldr r0, _08018B90 @ =BattleScript_MoveHPDrain\n\
+ b _08018B98\n\
+ .align 2, 0\n\
_08018B80: .4byte gBattleMoves\n\
_08018B84: .4byte gProtectStructs\n\
_08018B88: .4byte gBankAttacker\n\
_08018B8C: .4byte gBattlescriptCurrInstr\n\
_08018B90: .4byte BattleScript_MoveHPDrain\n\
_08018B94:\n\
- ldr r1, _08018BA0 @ =gBattlescriptCurrInstr\n\
- ldr r0, _08018BA4 @ =BattleScript_MoveHPDrain_PPLoss\n\
+ ldr r1, _08018BA0 @ =gBattlescriptCurrInstr\n\
+ ldr r0, _08018BA4 @ =BattleScript_MoveHPDrain_PPLoss\n\
_08018B98:\n\
- str r0, [r1]\n\
- movs r3, 0x1\n\
- mov r9, r3\n\
- b _08018C6A\n\
- .align 2, 0\n\
+ str r0, [r1]\n\
+ movs r3, 0x1\n\
+ mov r9, r3\n\
+ b _08018C6A\n\
+ .align 2, 0\n\
_08018BA0: .4byte gBattlescriptCurrInstr\n\
_08018BA4: .4byte BattleScript_MoveHPDrain_PPLoss\n\
_08018BA8:\n\
- cmp r4, 0xA\n\
- bne _08018C6A\n\
- ldr r1, _08018BF4 @ =gBattleMons\n\
- movs r0, 0x58\n\
- mov r5, r10\n\
- muls r5, r0\n\
- adds r0, r5, 0\n\
- adds r1, 0x4C\n\
- adds r0, r1\n\
- ldr r0, [r0]\n\
- movs r1, 0x20\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _08018C6A\n\
- ldr r2, _08018BF8 @ =0x02017100\n\
- mov r0, r10\n\
- lsls r1, r0, 2\n\
- adds r0, r1, r2\n\
- ldr r3, [r0]\n\
- movs r4, 0x1\n\
- ands r3, r4\n\
- adds r5, r1, 0\n\
- cmp r3, 0\n\
- bne _08018C30\n\
- ldr r0, _08018BFC @ =gBattleCommunication\n\
- strb r3, [r0, 0x5]\n\
- ldr r1, _08018C00 @ =gProtectStructs\n\
- ldr r0, _08018C04 @ =gBankAttacker\n\
- ldrb r0, [r0]\n\
- lsls r0, 4\n\
- adds r0, r1\n\
- ldrb r0, [r0, 0x2]\n\
- lsls r0, 28\n\
- cmp r0, 0\n\
- bge _08018C10\n\
- ldr r1, _08018C08 @ =gBattlescriptCurrInstr\n\
- ldr r0, _08018C0C @ =BattleScript_FlashFireBoost\n\
- b _08018C14\n\
- .align 2, 0\n\
+ cmp r4, 0xA\n\
+ bne _08018C6A\n\
+ ldr r1, _08018BF4 @ =gBattleMons\n\
+ movs r0, 0x58\n\
+ mov r5, r10\n\
+ muls r5, r0\n\
+ adds r0, r5, 0\n\
+ adds r1, 0x4C\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ movs r1, 0x20\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _08018C6A\n\
+ ldr r2, _08018BF8 @ =0x02017100\n\
+ mov r0, r10\n\
+ lsls r1, r0, 2\n\
+ adds r0, r1, r2\n\
+ ldr r3, [r0]\n\
+ movs r4, 0x1\n\
+ ands r3, r4\n\
+ adds r5, r1, 0\n\
+ cmp r3, 0\n\
+ bne _08018C30\n\
+ ldr r0, _08018BFC @ =gBattleCommunication\n\
+ strb r3, [r0, 0x5]\n\
+ ldr r1, _08018C00 @ =gProtectStructs\n\
+ ldr r0, _08018C04 @ =gBankAttacker\n\
+ ldrb r0, [r0]\n\
+ lsls r0, 4\n\
+ adds r0, r1\n\
+ ldrb r0, [r0, 0x2]\n\
+ lsls r0, 28\n\
+ cmp r0, 0\n\
+ bge _08018C10\n\
+ ldr r1, _08018C08 @ =gBattlescriptCurrInstr\n\
+ ldr r0, _08018C0C @ =BattleScript_FlashFireBoost\n\
+ b _08018C14\n\
+ .align 2, 0\n\
_08018BF4: .4byte gBattleMons\n\
_08018BF8: .4byte 0x02017100\n\
_08018BFC: .4byte gBattleCommunication\n\
@@ -3321,80 +3321,80 @@ _08018C04: .4byte gBankAttacker\n\
_08018C08: .4byte gBattlescriptCurrInstr\n\
_08018C0C: .4byte BattleScript_FlashFireBoost\n\
_08018C10:\n\
- ldr r1, _08018C28 @ =gBattlescriptCurrInstr\n\
- ldr r0, _08018C2C @ =BattleScript_FlashFireBoost_PPLoss\n\
+ ldr r1, _08018C28 @ =gBattlescriptCurrInstr\n\
+ ldr r0, _08018C2C @ =BattleScript_FlashFireBoost_PPLoss\n\
_08018C14:\n\
- str r0, [r1]\n\
- adds r0, r5, r2\n\
- ldr r1, [r0]\n\
- movs r2, 0x1\n\
- orrs r1, r2\n\
- str r1, [r0]\n\
- movs r1, 0x2\n\
- mov r9, r1\n\
- b _08018C6A\n\
- .align 2, 0\n\
+ str r0, [r1]\n\
+ adds r0, r5, r2\n\
+ ldr r1, [r0]\n\
+ movs r2, 0x1\n\
+ orrs r1, r2\n\
+ str r1, [r0]\n\
+ movs r1, 0x2\n\
+ mov r9, r1\n\
+ b _08018C6A\n\
+ .align 2, 0\n\
_08018C28: .4byte gBattlescriptCurrInstr\n\
_08018C2C: .4byte BattleScript_FlashFireBoost_PPLoss\n\
_08018C30:\n\
- ldr r0, _08018C4C @ =gBattleCommunication\n\
- strb r4, [r0, 0x5]\n\
- ldr r1, _08018C50 @ =gProtectStructs\n\
- ldr r0, _08018C54 @ =gBankAttacker\n\
- ldrb r0, [r0]\n\
- lsls r0, 4\n\
- adds r0, r1\n\
- ldrb r0, [r0, 0x2]\n\
- lsls r0, 28\n\
- cmp r0, 0\n\
- bge _08018C60\n\
- ldr r1, _08018C58 @ =gBattlescriptCurrInstr\n\
- ldr r0, _08018C5C @ =BattleScript_FlashFireBoost\n\
- b _08018C64\n\
- .align 2, 0\n\
+ ldr r0, _08018C4C @ =gBattleCommunication\n\
+ strb r4, [r0, 0x5]\n\
+ ldr r1, _08018C50 @ =gProtectStructs\n\
+ ldr r0, _08018C54 @ =gBankAttacker\n\
+ ldrb r0, [r0]\n\
+ lsls r0, 4\n\
+ adds r0, r1\n\
+ ldrb r0, [r0, 0x2]\n\
+ lsls r0, 28\n\
+ cmp r0, 0\n\
+ bge _08018C60\n\
+ ldr r1, _08018C58 @ =gBattlescriptCurrInstr\n\
+ ldr r0, _08018C5C @ =BattleScript_FlashFireBoost\n\
+ b _08018C64\n\
+ .align 2, 0\n\
_08018C4C: .4byte gBattleCommunication\n\
_08018C50: .4byte gProtectStructs\n\
_08018C54: .4byte gBankAttacker\n\
_08018C58: .4byte gBattlescriptCurrInstr\n\
_08018C5C: .4byte BattleScript_FlashFireBoost\n\
_08018C60:\n\
- ldr r1, _08018CA4 @ =gBattlescriptCurrInstr\n\
- ldr r0, _08018CA8 @ =BattleScript_FlashFireBoost_PPLoss\n\
+ ldr r1, _08018CA4 @ =gBattlescriptCurrInstr\n\
+ ldr r0, _08018CA8 @ =BattleScript_FlashFireBoost_PPLoss\n\
_08018C64:\n\
- str r0, [r1]\n\
- movs r2, 0x2\n\
+ str r0, [r1]\n\
+ movs r2, 0x2\n\
_08018C68:\n\
- mov r9, r2\n\
+ mov r9, r2\n\
_08018C6A:\n\
- mov r3, r9\n\
- cmp r3, 0x1\n\
- beq _08018C74\n\
- bl _08019F76\n\
+ mov r3, r9\n\
+ cmp r3, 0x1\n\
+ beq _08018C74\n\
+ bl _08019F76\n\
_08018C74:\n\
- ldr r1, _08018CAC @ =gBattleMons\n\
- movs r0, 0x58\n\
- mov r5, r10\n\
- muls r5, r0\n\
- adds r0, r5, 0\n\
- adds r1, r0, r1\n\
- ldrh r0, [r1, 0x2C]\n\
- ldrh r2, [r1, 0x28]\n\
- cmp r0, r2\n\
- bne _08018CD0\n\
- ldr r1, _08018CB0 @ =gProtectStructs\n\
- ldr r0, _08018CB4 @ =gBankAttacker\n\
- ldrb r0, [r0]\n\
- lsls r0, 4\n\
- adds r0, r1\n\
- ldrb r0, [r0, 0x2]\n\
- lsls r0, 28\n\
- cmp r0, 0\n\
- bge _08018CBC\n\
- ldr r1, _08018CA4 @ =gBattlescriptCurrInstr\n\
- ldr r0, _08018CB8 @ =BattleScript_MoveHPDrain_FullHP\n\
- str r0, [r1]\n\
- bl _08019F76\n\
- .align 2, 0\n\
+ ldr r1, _08018CAC @ =gBattleMons\n\
+ movs r0, 0x58\n\
+ mov r5, r10\n\
+ muls r5, r0\n\
+ adds r0, r5, 0\n\
+ adds r1, r0, r1\n\
+ ldrh r0, [r1, 0x2C]\n\
+ ldrh r2, [r1, 0x28]\n\
+ cmp r0, r2\n\
+ bne _08018CD0\n\
+ ldr r1, _08018CB0 @ =gProtectStructs\n\
+ ldr r0, _08018CB4 @ =gBankAttacker\n\
+ ldrb r0, [r0]\n\
+ lsls r0, 4\n\
+ adds r0, r1\n\
+ ldrb r0, [r0, 0x2]\n\
+ lsls r0, 28\n\
+ cmp r0, 0\n\
+ bge _08018CBC\n\
+ ldr r1, _08018CA4 @ =gBattlescriptCurrInstr\n\
+ ldr r0, _08018CB8 @ =BattleScript_MoveHPDrain_FullHP\n\
+ str r0, [r1]\n\
+ bl _08019F76\n\
+ .align 2, 0\n\
_08018CA4: .4byte gBattlescriptCurrInstr\n\
_08018CA8: .4byte BattleScript_FlashFireBoost_PPLoss\n\
_08018CAC: .4byte gBattleMons\n\
@@ -3402,178 +3402,178 @@ _08018CB0: .4byte gProtectStructs\n\
_08018CB4: .4byte gBankAttacker\n\
_08018CB8: .4byte BattleScript_MoveHPDrain_FullHP\n\
_08018CBC:\n\
- ldr r1, _08018CC8 @ =gBattlescriptCurrInstr\n\
- ldr r0, _08018CCC @ =BattleScript_MoveHPDrain_FullHP_PPLoss\n\
- str r0, [r1]\n\
- bl _08019F76\n\
- .align 2, 0\n\
+ ldr r1, _08018CC8 @ =gBattlescriptCurrInstr\n\
+ ldr r0, _08018CCC @ =BattleScript_MoveHPDrain_FullHP_PPLoss\n\
+ str r0, [r1]\n\
+ bl _08019F76\n\
+ .align 2, 0\n\
_08018CC8: .4byte gBattlescriptCurrInstr\n\
_08018CCC: .4byte BattleScript_MoveHPDrain_FullHP_PPLoss\n\
_08018CD0:\n\
- ldr r2, _08018CEC @ =gBattleMoveDamage\n\
- ldrh r0, [r1, 0x2C]\n\
- lsrs r0, 2\n\
- str r0, [r2]\n\
- cmp r0, 0\n\
- bne _08018CE0\n\
- mov r3, r9\n\
- str r3, [r2]\n\
+ ldr r2, _08018CEC @ =gBattleMoveDamage\n\
+ ldrh r0, [r1, 0x2C]\n\
+ lsrs r0, 2\n\
+ str r0, [r2]\n\
+ cmp r0, 0\n\
+ bne _08018CE0\n\
+ mov r3, r9\n\
+ str r3, [r2]\n\
_08018CE0:\n\
- ldr r0, [r2]\n\
- negs r0, r0\n\
- str r0, [r2]\n\
- bl _08019F76\n\
- .align 2, 0\n\
+ ldr r0, [r2]\n\
+ negs r0, r0\n\
+ str r0, [r2]\n\
+ bl _08019F76\n\
+ .align 2, 0\n\
_08018CEC: .4byte gBattleMoveDamage\n\
_08018CF0:\n\
- mov r5, r8\n\
- ldrb r0, [r5]\n\
- subs r0, 0x9\n\
- cmp r0, 0x2F\n\
- bls _08018CFE\n\
- bl _08019F76\n\
+ mov r5, r8\n\
+ ldrb r0, [r5]\n\
+ subs r0, 0x9\n\
+ cmp r0, 0x2F\n\
+ bls _08018CFE\n\
+ bl _08019F76\n\
_08018CFE:\n\
- lsls r0, 2\n\
- ldr r1, _08018D08 @ =_08018D0C\n\
- adds r0, r1\n\
- ldr r0, [r0]\n\
- mov pc, r0\n\
- .align 2, 0\n\
+ lsls r0, 2\n\
+ ldr r1, _08018D08 @ =_08018D0C\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ mov pc, r0\n\
+ .align 2, 0\n\
_08018D08: .4byte _08018D0C\n\
- .align 2, 0\n\
+ .align 2, 0\n\
_08018D0C:\n\
- .4byte _08019128\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08018DCC\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08018E94\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08018F54\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _0801904C\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08019204\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _08019F76\n\
- .4byte _080192E0\n\
+ .4byte _08019128\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08018DCC\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08018E94\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08018F54\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _0801904C\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08019204\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _08019F76\n\
+ .4byte _080192E0\n\
_08018DCC:\n\
- ldr r0, _08018E74 @ =gBattleMoveFlags\n\
- ldrb r1, [r0]\n\
- movs r0, 0x29\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _08018DDC\n\
- bl _08019F76\n\
+ ldr r0, _08018E74 @ =gBattleMoveFlags\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x29\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _08018DDC\n\
+ bl _08019F76\n\
_08018DDC:\n\
- cmp r3, 0xA5\n\
- bne _08018DE4\n\
- bl _08019F76\n\
+ cmp r3, 0xA5\n\
+ bne _08018DE4\n\
+ bl _08019F76\n\
_08018DE4:\n\
- ldr r0, _08018E78 @ =gBattleMoves\n\
- lsls r1, r3, 1\n\
- adds r1, r3\n\
- lsls r1, 2\n\
- adds r1, r0\n\
- ldrb r0, [r1, 0x1]\n\
- cmp r0, 0\n\
- bne _08018DF8\n\
- bl _08019F76\n\
+ ldr r0, _08018E78 @ =gBattleMoves\n\
+ lsls r1, r3, 1\n\
+ adds r1, r3\n\
+ lsls r1, 2\n\
+ adds r1, r0\n\
+ ldrb r0, [r1, 0x1]\n\
+ cmp r0, 0\n\
+ bne _08018DF8\n\
+ bl _08019F76\n\
_08018DF8:\n\
- ldr r2, _08018E7C @ =gSpecialStatuses\n\
- ldr r0, _08018E80 @ =gBankTarget\n\
- ldrb r1, [r0]\n\
- lsls r0, r1, 2\n\
- adds r0, r1\n\
- lsls r1, r0, 2\n\
- adds r0, r2, 0\n\
- adds r0, 0x8\n\
- adds r0, r1, r0\n\
- ldr r0, [r0]\n\
- cmp r0, 0\n\
- bne _08018E20\n\
- adds r0, r2, 0\n\
- adds r0, 0xC\n\
- adds r0, r1, r0\n\
- ldr r0, [r0]\n\
- cmp r0, 0\n\
- bne _08018E20\n\
- bl _08019F76\n\
+ ldr r2, _08018E7C @ =gSpecialStatuses\n\
+ ldr r0, _08018E80 @ =gBankTarget\n\
+ ldrb r1, [r0]\n\
+ lsls r0, r1, 2\n\
+ adds r0, r1\n\
+ lsls r1, r0, 2\n\
+ adds r0, r2, 0\n\
+ adds r0, 0x8\n\
+ adds r0, r1, r0\n\
+ ldr r0, [r0]\n\
+ cmp r0, 0\n\
+ bne _08018E20\n\
+ adds r0, r2, 0\n\
+ adds r0, 0xC\n\
+ adds r0, r1, r0\n\
+ ldr r0, [r0]\n\
+ cmp r0, 0\n\
+ bne _08018E20\n\
+ bl _08019F76\n\
_08018E20:\n\
- ldr r1, _08018E84 @ =gBattleMons\n\
- movs r0, 0x58\n\
- mov r2, r10\n\
- muls r2, r0\n\
- adds r0, r2, 0\n\
- adds r1, r0, r1\n\
- adds r3, r1, 0\n\
- adds r3, 0x21\n\
- ldrb r0, [r3]\n\
- cmp r0, r4\n\
- bne _08018E3A\n\
- bl _08019F76\n\
+ ldr r1, _08018E84 @ =gBattleMons\n\
+ movs r0, 0x58\n\
+ mov r2, r10\n\
+ muls r2, r0\n\
+ adds r0, r2, 0\n\
+ adds r1, r0, r1\n\
+ adds r3, r1, 0\n\
+ adds r3, 0x21\n\
+ ldrb r0, [r3]\n\
+ cmp r0, r4\n\
+ bne _08018E3A\n\
+ bl _08019F76\n\
_08018E3A:\n\
- adds r2, r1, 0\n\
- adds r2, 0x22\n\
- ldrb r0, [r2]\n\
- cmp r0, r4\n\
- bne _08018E48\n\
- bl _08019F76\n\
+ adds r2, r1, 0\n\
+ adds r2, 0x22\n\
+ ldrb r0, [r2]\n\
+ cmp r0, r4\n\
+ bne _08018E48\n\
+ bl _08019F76\n\
_08018E48:\n\
- ldrh r0, [r1, 0x28]\n\
- cmp r0, 0\n\
- bne _08018E52\n\
- bl _08019F76\n\
+ ldrh r0, [r1, 0x28]\n\
+ cmp r0, 0\n\
+ bne _08018E52\n\
+ bl _08019F76\n\
_08018E52:\n\
- strb r4, [r3]\n\
- strb r4, [r2]\n\
- ldr r1, _08018E88 @ =gBattleTextBuff1\n\
- movs r0, 0xFD\n\
- strb r0, [r1]\n\
- movs r0, 0x3\n\
- strb r0, [r1, 0x1]\n\
- strb r4, [r1, 0x2]\n\
- movs r0, 0xFF\n\
- strb r0, [r1, 0x3]\n\
- bl b_movescr_stack_push_cursor\n\
- ldr r1, _08018E8C @ =gBattlescriptCurrInstr\n\
- ldr r0, _08018E90 @ =BattleScript_ColorChangeActivates\n\
- str r0, [r1]\n\
- bl _08019F22\n\
- .align 2, 0\n\
+ strb r4, [r3]\n\
+ strb r4, [r2]\n\
+ ldr r1, _08018E88 @ =gBattleTextBuff1\n\
+ movs r0, 0xFD\n\
+ strb r0, [r1]\n\
+ movs r0, 0x3\n\
+ strb r0, [r1, 0x1]\n\
+ strb r4, [r1, 0x2]\n\
+ movs r0, 0xFF\n\
+ strb r0, [r1, 0x3]\n\
+ bl b_movescr_stack_push_cursor\n\
+ ldr r1, _08018E8C @ =gBattlescriptCurrInstr\n\
+ ldr r0, _08018E90 @ =BattleScript_ColorChangeActivates\n\
+ str r0, [r1]\n\
+ bl _08019F22\n\
+ .align 2, 0\n\
_08018E74: .4byte gBattleMoveFlags\n\
_08018E78: .4byte gBattleMoves\n\
_08018E7C: .4byte gSpecialStatuses\n\
@@ -3583,81 +3583,81 @@ _08018E88: .4byte gBattleTextBuff1\n\
_08018E8C: .4byte gBattlescriptCurrInstr\n\
_08018E90: .4byte BattleScript_ColorChangeActivates\n\
_08018E94:\n\
- ldr r0, _08018F2C @ =gBattleMoveFlags\n\
- ldrb r1, [r0]\n\
- movs r0, 0x29\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _08018EA4\n\
- bl _08019F76\n\
+ ldr r0, _08018F2C @ =gBattleMoveFlags\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x29\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _08018EA4\n\
+ bl _08019F76\n\
_08018EA4:\n\
- ldr r1, _08018F30 @ =gBattleMons\n\
- ldr r0, _08018F34 @ =gBankAttacker\n\
- ldrb r2, [r0]\n\
- movs r0, 0x58\n\
- muls r0, r2\n\
- adds r4, r0, r1\n\
- ldrh r0, [r4, 0x28]\n\
- cmp r0, 0\n\
- bne _08018EBA\n\
- bl _08019F76\n\
+ ldr r1, _08018F30 @ =gBattleMons\n\
+ ldr r0, _08018F34 @ =gBankAttacker\n\
+ ldrb r2, [r0]\n\
+ movs r0, 0x58\n\
+ muls r0, r2\n\
+ adds r4, r0, r1\n\
+ ldrh r0, [r4, 0x28]\n\
+ cmp r0, 0\n\
+ bne _08018EBA\n\
+ bl _08019F76\n\
_08018EBA:\n\
- ldr r0, _08018F38 @ =gProtectStructs\n\
- lsls r1, r2, 4\n\
- adds r1, r0\n\
- ldrb r0, [r1, 0x1]\n\
- lsls r0, 31\n\
- cmp r0, 0\n\
- beq _08018ECC\n\
- bl _08019F76\n\
+ ldr r0, _08018F38 @ =gProtectStructs\n\
+ lsls r1, r2, 4\n\
+ adds r1, r0\n\
+ ldrb r0, [r1, 0x1]\n\
+ lsls r0, 31\n\
+ cmp r0, 0\n\
+ beq _08018ECC\n\
+ bl _08019F76\n\
_08018ECC:\n\
- ldr r2, _08018F3C @ =gSpecialStatuses\n\
- ldr r0, _08018F40 @ =gBankTarget\n\
- ldrb r1, [r0]\n\
- lsls r0, r1, 2\n\
- adds r0, r1\n\
- lsls r1, r0, 2\n\
- adds r0, r2, 0\n\
- adds r0, 0x8\n\
- adds r0, r1, r0\n\
- ldr r0, [r0]\n\
- cmp r0, 0\n\
- bne _08018EF4\n\
- adds r0, r2, 0\n\
- adds r0, 0xC\n\
- adds r0, r1, r0\n\
- ldr r0, [r0]\n\
- cmp r0, 0\n\
- bne _08018EF4\n\
- bl _08019F76\n\
+ ldr r2, _08018F3C @ =gSpecialStatuses\n\
+ ldr r0, _08018F40 @ =gBankTarget\n\
+ ldrb r1, [r0]\n\
+ lsls r0, r1, 2\n\
+ adds r0, r1\n\
+ lsls r1, r0, 2\n\
+ adds r0, r2, 0\n\
+ adds r0, 0x8\n\
+ adds r0, r1, r0\n\
+ ldr r0, [r0]\n\
+ cmp r0, 0\n\
+ bne _08018EF4\n\
+ adds r0, r2, 0\n\
+ adds r0, 0xC\n\
+ adds r0, r1, r0\n\
+ ldr r0, [r0]\n\
+ cmp r0, 0\n\
+ bne _08018EF4\n\
+ bl _08019F76\n\
_08018EF4:\n\
- ldr r1, _08018F44 @ =gBattleMoves\n\
- lsls r0, r3, 1\n\
- adds r0, r3\n\
- lsls r0, 2\n\
- adds r0, r1\n\
- ldrb r1, [r0, 0x8]\n\
- movs r2, 0x1\n\
- adds r0, r2, 0\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _08018F0E\n\
- bl _08019F76\n\
+ ldr r1, _08018F44 @ =gBattleMoves\n\
+ lsls r0, r3, 1\n\
+ adds r0, r3\n\
+ lsls r0, 2\n\
+ adds r0, r1\n\
+ ldrb r1, [r0, 0x8]\n\
+ movs r2, 0x1\n\
+ adds r0, r2, 0\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _08018F0E\n\
+ bl _08019F76\n\
_08018F0E:\n\
- ldr r1, _08018F48 @ =gBattleMoveDamage\n\
- ldrh r0, [r4, 0x2C]\n\
- lsrs r0, 4\n\
- str r0, [r1]\n\
- cmp r0, 0\n\
- bne _08018F1C\n\
- str r2, [r1]\n\
+ ldr r1, _08018F48 @ =gBattleMoveDamage\n\
+ ldrh r0, [r4, 0x2C]\n\
+ lsrs r0, 4\n\
+ str r0, [r1]\n\
+ cmp r0, 0\n\
+ bne _08018F1C\n\
+ str r2, [r1]\n\
_08018F1C:\n\
- bl b_movescr_stack_push_cursor\n\
- ldr r1, _08018F4C @ =gBattlescriptCurrInstr\n\
- ldr r0, _08018F50 @ =BattleScript_RoughSkinActivates\n\
- str r0, [r1]\n\
- bl _08019F22\n\
- .align 2, 0\n\
+ bl b_movescr_stack_push_cursor\n\
+ ldr r1, _08018F4C @ =gBattlescriptCurrInstr\n\
+ ldr r0, _08018F50 @ =BattleScript_RoughSkinActivates\n\
+ str r0, [r1]\n\
+ bl _08019F22\n\
+ .align 2, 0\n\
_08018F2C: .4byte gBattleMoveFlags\n\
_08018F30: .4byte gBattleMons\n\
_08018F34: .4byte gBankAttacker\n\
@@ -3669,106 +3669,106 @@ _08018F48: .4byte gBattleMoveDamage\n\
_08018F4C: .4byte gBattlescriptCurrInstr\n\
_08018F50: .4byte BattleScript_RoughSkinActivates\n\
_08018F54:\n\
- ldr r0, _08019020 @ =gBattleMoveFlags\n\
- ldrb r1, [r0]\n\
- movs r0, 0x29\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _08018F64\n\
- bl _08019F76\n\
+ ldr r0, _08019020 @ =gBattleMoveFlags\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x29\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _08018F64\n\
+ bl _08019F76\n\
_08018F64:\n\
- ldr r1, _08019024 @ =gBattleMons\n\
- ldr r0, _08019028 @ =gBankAttacker\n\
- ldrb r2, [r0]\n\
- movs r0, 0x58\n\
- muls r0, r2\n\
- adds r0, r1\n\
- ldrh r0, [r0, 0x28]\n\
- cmp r0, 0\n\
- bne _08018F7A\n\
- bl _08019F76\n\
+ ldr r1, _08019024 @ =gBattleMons\n\
+ ldr r0, _08019028 @ =gBankAttacker\n\
+ ldrb r2, [r0]\n\
+ movs r0, 0x58\n\
+ muls r0, r2\n\
+ adds r0, r1\n\
+ ldrh r0, [r0, 0x28]\n\
+ cmp r0, 0\n\
+ bne _08018F7A\n\
+ bl _08019F76\n\
_08018F7A:\n\
- ldr r0, _0801902C @ =gProtectStructs\n\
- lsls r1, r2, 4\n\
- adds r1, r0\n\
- ldrb r0, [r1, 0x1]\n\
- lsls r0, 31\n\
- cmp r0, 0\n\
- beq _08018F8C\n\
- bl _08019F76\n\
+ ldr r0, _0801902C @ =gProtectStructs\n\
+ lsls r1, r2, 4\n\
+ adds r1, r0\n\
+ ldrb r0, [r1, 0x1]\n\
+ lsls r0, 31\n\
+ cmp r0, 0\n\
+ beq _08018F8C\n\
+ bl _08019F76\n\
_08018F8C:\n\
- ldr r2, _08019030 @ =gSpecialStatuses\n\
- ldr r0, _08019034 @ =gBankTarget\n\
- ldrb r1, [r0]\n\
- lsls r0, r1, 2\n\
- adds r0, r1\n\
- lsls r1, r0, 2\n\
- adds r0, r2, 0\n\
- adds r0, 0x8\n\
- adds r0, r1, r0\n\
- ldr r0, [r0]\n\
- cmp r0, 0\n\
- bne _08018FB4\n\
- adds r0, r2, 0\n\
- adds r0, 0xC\n\
- adds r0, r1, r0\n\
- ldr r0, [r0]\n\
- cmp r0, 0\n\
- bne _08018FB4\n\
- bl _08019F76\n\
+ ldr r2, _08019030 @ =gSpecialStatuses\n\
+ ldr r0, _08019034 @ =gBankTarget\n\
+ ldrb r1, [r0]\n\
+ lsls r0, r1, 2\n\
+ adds r0, r1\n\
+ lsls r1, r0, 2\n\
+ adds r0, r2, 0\n\
+ adds r0, 0x8\n\
+ adds r0, r1, r0\n\
+ ldr r0, [r0]\n\
+ cmp r0, 0\n\
+ bne _08018FB4\n\
+ adds r0, r2, 0\n\
+ adds r0, 0xC\n\
+ adds r0, r1, r0\n\
+ ldr r0, [r0]\n\
+ cmp r0, 0\n\
+ bne _08018FB4\n\
+ bl _08019F76\n\
_08018FB4:\n\
- ldr r1, _08019038 @ =gBattleMoves\n\
- lsls r0, r3, 1\n\
- adds r0, r3\n\
- lsls r0, 2\n\
- adds r0, r1\n\
- ldrb r1, [r0, 0x8]\n\
- movs r0, 0x1\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _08018FCC\n\
- bl _08019F76\n\
+ ldr r1, _08019038 @ =gBattleMoves\n\
+ lsls r0, r3, 1\n\
+ adds r0, r3\n\
+ lsls r0, 2\n\
+ adds r0, r1\n\
+ ldrb r1, [r0, 0x8]\n\
+ movs r0, 0x1\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _08018FCC\n\
+ bl _08019F76\n\
_08018FCC:\n\
- bl Random\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- movs r1, 0xA\n\
- bl __umodsi3\n\
- lsls r0, 16\n\
- cmp r0, 0\n\
- beq _08018FE4\n\
- bl _08019F76\n\
+ bl Random\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ movs r1, 0xA\n\
+ bl __umodsi3\n\
+ lsls r0, 16\n\
+ cmp r0, 0\n\
+ beq _08018FE4\n\
+ bl _08019F76\n\
_08018FE4:\n\
- ldr r5, _0801903C @ =gBattleCommunication\n\
- movs r4, 0x3\n\
+ ldr r5, _0801903C @ =gBattleCommunication\n\
+ movs r4, 0x3\n\
_08018FE8:\n\
- bl Random\n\
- ands r0, r4\n\
- strb r0, [r5, 0x3]\n\
- cmp r0, 0\n\
- beq _08018FE8\n\
- ldr r1, _0801903C @ =gBattleCommunication\n\
- ldrb r0, [r1, 0x3]\n\
- cmp r0, 0x3\n\
- bne _08019000\n\
- adds r0, 0x2\n\
- strb r0, [r1, 0x3]\n\
+ bl Random\n\
+ ands r0, r4\n\
+ strb r0, [r5, 0x3]\n\
+ cmp r0, 0\n\
+ beq _08018FE8\n\
+ ldr r1, _0801903C @ =gBattleCommunication\n\
+ ldrb r0, [r1, 0x3]\n\
+ cmp r0, 0x3\n\
+ bne _08019000\n\
+ adds r0, 0x2\n\
+ strb r0, [r1, 0x3]\n\
_08019000:\n\
- ldrb r0, [r1, 0x3]\n\
- adds r0, 0x40\n\
- strb r0, [r1, 0x3]\n\
- bl b_movescr_stack_push_cursor\n\
- ldr r1, _08019040 @ =gBattlescriptCurrInstr\n\
- ldr r0, _08019044 @ =BattleScript_ApplySecondaryEffect\n\
- str r0, [r1]\n\
- ldr r2, _08019048 @ =gHitMarker\n\
- ldr r0, [r2]\n\
- movs r1, 0x80\n\
- lsls r1, 6\n\
- orrs r0, r1\n\
- str r0, [r2]\n\
- bl _08019F22\n\
- .align 2, 0\n\
+ ldrb r0, [r1, 0x3]\n\
+ adds r0, 0x40\n\
+ strb r0, [r1, 0x3]\n\
+ bl b_movescr_stack_push_cursor\n\
+ ldr r1, _08019040 @ =gBattlescriptCurrInstr\n\
+ ldr r0, _08019044 @ =BattleScript_ApplySecondaryEffect\n\
+ str r0, [r1]\n\
+ ldr r2, _08019048 @ =gHitMarker\n\
+ ldr r0, [r2]\n\
+ movs r1, 0x80\n\
+ lsls r1, 6\n\
+ orrs r0, r1\n\
+ str r0, [r2]\n\
+ bl _08019F22\n\
+ .align 2, 0\n\
_08019020: .4byte gBattleMoveFlags\n\
_08019024: .4byte gBattleMons\n\
_08019028: .4byte gBankAttacker\n\
@@ -3781,91 +3781,91 @@ _08019040: .4byte gBattlescriptCurrInstr\n\
_08019044: .4byte BattleScript_ApplySecondaryEffect\n\
_08019048: .4byte gHitMarker\n\
_0801904C:\n\
- ldr r0, _080190FC @ =gBattleMoveFlags\n\
- ldrb r1, [r0]\n\
- movs r0, 0x29\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0801905C\n\
- bl _08019F76\n\
+ ldr r0, _080190FC @ =gBattleMoveFlags\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x29\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _0801905C\n\
+ bl _08019F76\n\
_0801905C:\n\
- ldr r1, _08019100 @ =gBattleMons\n\
- ldr r0, _08019104 @ =gBankAttacker\n\
- ldrb r2, [r0]\n\
- movs r0, 0x58\n\
- muls r0, r2\n\
- adds r0, r1\n\
- ldrh r0, [r0, 0x28]\n\
- cmp r0, 0\n\
- bne _08019072\n\
- bl _08019F76\n\
+ ldr r1, _08019100 @ =gBattleMons\n\
+ ldr r0, _08019104 @ =gBankAttacker\n\
+ ldrb r2, [r0]\n\
+ movs r0, 0x58\n\
+ muls r0, r2\n\
+ adds r0, r1\n\
+ ldrh r0, [r0, 0x28]\n\
+ cmp r0, 0\n\
+ bne _08019072\n\
+ bl _08019F76\n\
_08019072:\n\
- ldr r0, _08019108 @ =gProtectStructs\n\
- lsls r1, r2, 4\n\
- adds r1, r0\n\
- ldrb r0, [r1, 0x1]\n\
- lsls r0, 31\n\
- cmp r0, 0\n\
- beq _08019084\n\
- bl _08019F76\n\
+ ldr r0, _08019108 @ =gProtectStructs\n\
+ lsls r1, r2, 4\n\
+ adds r1, r0\n\
+ ldrb r0, [r1, 0x1]\n\
+ lsls r0, 31\n\
+ cmp r0, 0\n\
+ beq _08019084\n\
+ bl _08019F76\n\
_08019084:\n\
- ldr r2, _0801910C @ =gSpecialStatuses\n\
- ldr r0, _08019110 @ =gBankTarget\n\
- ldrb r1, [r0]\n\
- lsls r0, r1, 2\n\
- adds r0, r1\n\
- lsls r1, r0, 2\n\
- adds r0, r2, 0\n\
- adds r0, 0x8\n\
- adds r0, r1, r0\n\
- ldr r0, [r0]\n\
- cmp r0, 0\n\
- bne _080190AC\n\
- adds r0, r2, 0\n\
- adds r0, 0xC\n\
- adds r0, r1, r0\n\
- ldr r0, [r0]\n\
- cmp r0, 0\n\
- bne _080190AC\n\
- bl _08019F76\n\
+ ldr r2, _0801910C @ =gSpecialStatuses\n\
+ ldr r0, _08019110 @ =gBankTarget\n\
+ ldrb r1, [r0]\n\
+ lsls r0, r1, 2\n\
+ adds r0, r1\n\
+ lsls r1, r0, 2\n\
+ adds r0, r2, 0\n\
+ adds r0, 0x8\n\
+ adds r0, r1, r0\n\
+ ldr r0, [r0]\n\
+ cmp r0, 0\n\
+ bne _080190AC\n\
+ adds r0, r2, 0\n\
+ adds r0, 0xC\n\
+ adds r0, r1, r0\n\
+ ldr r0, [r0]\n\
+ cmp r0, 0\n\
+ bne _080190AC\n\
+ bl _08019F76\n\
_080190AC:\n\
- ldr r1, _08019114 @ =gBattleMoves\n\
- lsls r0, r3, 1\n\
- adds r0, r3\n\
- lsls r0, 2\n\
- adds r0, r1\n\
- ldrb r1, [r0, 0x8]\n\
- movs r0, 0x1\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _080190C4\n\
- bl _08019F76\n\
+ ldr r1, _08019114 @ =gBattleMoves\n\
+ lsls r0, r3, 1\n\
+ adds r0, r3\n\
+ lsls r0, 2\n\
+ adds r0, r1\n\
+ ldrb r1, [r0, 0x8]\n\
+ movs r0, 0x1\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _080190C4\n\
+ bl _08019F76\n\
_080190C4:\n\
- bl Random\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- movs r1, 0x3\n\
- bl __umodsi3\n\
- lsls r0, 16\n\
- cmp r0, 0\n\
- beq _080190DC\n\
- bl _08019F76\n\
+ bl Random\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ movs r1, 0x3\n\
+ bl __umodsi3\n\
+ lsls r0, 16\n\
+ cmp r0, 0\n\
+ beq _080190DC\n\
+ bl _08019F76\n\
_080190DC:\n\
- ldr r1, _08019118 @ =gBattleCommunication\n\
- movs r0, 0x42\n\
- strb r0, [r1, 0x3]\n\
- bl b_movescr_stack_push_cursor\n\
- ldr r1, _0801911C @ =gBattlescriptCurrInstr\n\
- ldr r0, _08019120 @ =BattleScript_ApplySecondaryEffect\n\
- str r0, [r1]\n\
- ldr r2, _08019124 @ =gHitMarker\n\
- ldr r0, [r2]\n\
- movs r1, 0x80\n\
- lsls r1, 6\n\
- orrs r0, r1\n\
- str r0, [r2]\n\
- bl _08019F22\n\
- .align 2, 0\n\
+ ldr r1, _08019118 @ =gBattleCommunication\n\
+ movs r0, 0x42\n\
+ strb r0, [r1, 0x3]\n\
+ bl b_movescr_stack_push_cursor\n\
+ ldr r1, _0801911C @ =gBattlescriptCurrInstr\n\
+ ldr r0, _08019120 @ =BattleScript_ApplySecondaryEffect\n\
+ str r0, [r1]\n\
+ ldr r2, _08019124 @ =gHitMarker\n\
+ ldr r0, [r2]\n\
+ movs r1, 0x80\n\
+ lsls r1, 6\n\
+ orrs r0, r1\n\
+ str r0, [r2]\n\
+ bl _08019F22\n\
+ .align 2, 0\n\
_080190FC: .4byte gBattleMoveFlags\n\
_08019100: .4byte gBattleMons\n\
_08019104: .4byte gBankAttacker\n\
@@ -3878,91 +3878,91 @@ _0801911C: .4byte gBattlescriptCurrInstr\n\
_08019120: .4byte BattleScript_ApplySecondaryEffect\n\
_08019124: .4byte gHitMarker\n\
_08019128:\n\
- ldr r0, _080191D8 @ =gBattleMoveFlags\n\
- ldrb r1, [r0]\n\
- movs r0, 0x29\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _08019138\n\
- bl _08019F76\n\
+ ldr r0, _080191D8 @ =gBattleMoveFlags\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x29\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _08019138\n\
+ bl _08019F76\n\
_08019138:\n\
- ldr r1, _080191DC @ =gBattleMons\n\
- ldr r0, _080191E0 @ =gBankAttacker\n\
- ldrb r2, [r0]\n\
- movs r0, 0x58\n\
- muls r0, r2\n\
- adds r0, r1\n\
- ldrh r0, [r0, 0x28]\n\
- cmp r0, 0\n\
- bne _0801914E\n\
- bl _08019F76\n\
+ ldr r1, _080191DC @ =gBattleMons\n\
+ ldr r0, _080191E0 @ =gBankAttacker\n\
+ ldrb r2, [r0]\n\
+ movs r0, 0x58\n\
+ muls r0, r2\n\
+ adds r0, r1\n\
+ ldrh r0, [r0, 0x28]\n\
+ cmp r0, 0\n\
+ bne _0801914E\n\
+ bl _08019F76\n\
_0801914E:\n\
- ldr r0, _080191E4 @ =gProtectStructs\n\
- lsls r1, r2, 4\n\
- adds r1, r0\n\
- ldrb r0, [r1, 0x1]\n\
- lsls r0, 31\n\
- cmp r0, 0\n\
- beq _08019160\n\
- bl _08019F76\n\
+ ldr r0, _080191E4 @ =gProtectStructs\n\
+ lsls r1, r2, 4\n\
+ adds r1, r0\n\
+ ldrb r0, [r1, 0x1]\n\
+ lsls r0, 31\n\
+ cmp r0, 0\n\
+ beq _08019160\n\
+ bl _08019F76\n\
_08019160:\n\
- ldr r2, _080191E8 @ =gSpecialStatuses\n\
- ldr r0, _080191EC @ =gBankTarget\n\
- ldrb r1, [r0]\n\
- lsls r0, r1, 2\n\
- adds r0, r1\n\
- lsls r1, r0, 2\n\
- adds r0, r2, 0\n\
- adds r0, 0x8\n\
- adds r0, r1, r0\n\
- ldr r0, [r0]\n\
- cmp r0, 0\n\
- bne _08019188\n\
- adds r0, r2, 0\n\
- adds r0, 0xC\n\
- adds r0, r1, r0\n\
- ldr r0, [r0]\n\
- cmp r0, 0\n\
- bne _08019188\n\
- bl _08019F76\n\
+ ldr r2, _080191E8 @ =gSpecialStatuses\n\
+ ldr r0, _080191EC @ =gBankTarget\n\
+ ldrb r1, [r0]\n\
+ lsls r0, r1, 2\n\
+ adds r0, r1\n\
+ lsls r1, r0, 2\n\
+ adds r0, r2, 0\n\
+ adds r0, 0x8\n\
+ adds r0, r1, r0\n\
+ ldr r0, [r0]\n\
+ cmp r0, 0\n\
+ bne _08019188\n\
+ adds r0, r2, 0\n\
+ adds r0, 0xC\n\
+ adds r0, r1, r0\n\
+ ldr r0, [r0]\n\
+ cmp r0, 0\n\
+ bne _08019188\n\
+ bl _08019F76\n\
_08019188:\n\
- ldr r1, _080191F0 @ =gBattleMoves\n\
- lsls r0, r3, 1\n\
- adds r0, r3\n\
- lsls r0, 2\n\
- adds r0, r1\n\
- ldrb r1, [r0, 0x8]\n\
- movs r0, 0x1\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _080191A0\n\
- bl _08019F76\n\
+ ldr r1, _080191F0 @ =gBattleMoves\n\
+ lsls r0, r3, 1\n\
+ adds r0, r3\n\
+ lsls r0, 2\n\
+ adds r0, r1\n\
+ ldrb r1, [r0, 0x8]\n\
+ movs r0, 0x1\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _080191A0\n\
+ bl _08019F76\n\
_080191A0:\n\
- bl Random\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- movs r1, 0x3\n\
- bl __umodsi3\n\
- lsls r0, 16\n\
- cmp r0, 0\n\
- beq _080191B8\n\
- bl _08019F76\n\
+ bl Random\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ movs r1, 0x3\n\
+ bl __umodsi3\n\
+ lsls r0, 16\n\
+ cmp r0, 0\n\
+ beq _080191B8\n\
+ bl _08019F76\n\
_080191B8:\n\
- ldr r1, _080191F4 @ =gBattleCommunication\n\
- movs r0, 0x45\n\
- strb r0, [r1, 0x3]\n\
- bl b_movescr_stack_push_cursor\n\
- ldr r1, _080191F8 @ =gBattlescriptCurrInstr\n\
- ldr r0, _080191FC @ =BattleScript_ApplySecondaryEffect\n\
- str r0, [r1]\n\
- ldr r2, _08019200 @ =gHitMarker\n\
- ldr r0, [r2]\n\
- movs r1, 0x80\n\
- lsls r1, 6\n\
- orrs r0, r1\n\
- str r0, [r2]\n\
- bl _08019F22\n\
- .align 2, 0\n\
+ ldr r1, _080191F4 @ =gBattleCommunication\n\
+ movs r0, 0x45\n\
+ strb r0, [r1, 0x3]\n\
+ bl b_movescr_stack_push_cursor\n\
+ ldr r1, _080191F8 @ =gBattlescriptCurrInstr\n\
+ ldr r0, _080191FC @ =BattleScript_ApplySecondaryEffect\n\
+ str r0, [r1]\n\
+ ldr r2, _08019200 @ =gHitMarker\n\
+ ldr r0, [r2]\n\
+ movs r1, 0x80\n\
+ lsls r1, 6\n\
+ orrs r0, r1\n\
+ str r0, [r2]\n\
+ bl _08019F22\n\
+ .align 2, 0\n\
_080191D8: .4byte gBattleMoveFlags\n\
_080191DC: .4byte gBattleMons\n\
_080191E0: .4byte gBankAttacker\n\
@@ -3975,91 +3975,91 @@ _080191F8: .4byte gBattlescriptCurrInstr\n\
_080191FC: .4byte BattleScript_ApplySecondaryEffect\n\
_08019200: .4byte gHitMarker\n\
_08019204:\n\
- ldr r0, _080192B4 @ =gBattleMoveFlags\n\
- ldrb r1, [r0]\n\
- movs r0, 0x29\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _08019214\n\
- bl _08019F76\n\
+ ldr r0, _080192B4 @ =gBattleMoveFlags\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x29\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _08019214\n\
+ bl _08019F76\n\
_08019214:\n\
- ldr r1, _080192B8 @ =gBattleMons\n\
- ldr r0, _080192BC @ =gBankAttacker\n\
- ldrb r2, [r0]\n\
- movs r0, 0x58\n\
- muls r0, r2\n\
- adds r0, r1\n\
- ldrh r0, [r0, 0x28]\n\
- cmp r0, 0\n\
- bne _0801922A\n\
- bl _08019F76\n\
+ ldr r1, _080192B8 @ =gBattleMons\n\
+ ldr r0, _080192BC @ =gBankAttacker\n\
+ ldrb r2, [r0]\n\
+ movs r0, 0x58\n\
+ muls r0, r2\n\
+ adds r0, r1\n\
+ ldrh r0, [r0, 0x28]\n\
+ cmp r0, 0\n\
+ bne _0801922A\n\
+ bl _08019F76\n\
_0801922A:\n\
- ldr r0, _080192C0 @ =gProtectStructs\n\
- lsls r1, r2, 4\n\
- adds r1, r0\n\
- ldrb r0, [r1, 0x1]\n\
- lsls r0, 31\n\
- cmp r0, 0\n\
- beq _0801923C\n\
- bl _08019F76\n\
+ ldr r0, _080192C0 @ =gProtectStructs\n\
+ lsls r1, r2, 4\n\
+ adds r1, r0\n\
+ ldrb r0, [r1, 0x1]\n\
+ lsls r0, 31\n\
+ cmp r0, 0\n\
+ beq _0801923C\n\
+ bl _08019F76\n\
_0801923C:\n\
- ldr r1, _080192C4 @ =gBattleMoves\n\
- lsls r0, r3, 1\n\
- adds r0, r3\n\
- lsls r0, 2\n\
- adds r0, r1\n\
- ldrb r1, [r0, 0x8]\n\
- movs r0, 0x1\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _08019254\n\
- bl _08019F76\n\
+ ldr r1, _080192C4 @ =gBattleMoves\n\
+ lsls r0, r3, 1\n\
+ adds r0, r3\n\
+ lsls r0, 2\n\
+ adds r0, r1\n\
+ ldrb r1, [r0, 0x8]\n\
+ movs r0, 0x1\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _08019254\n\
+ bl _08019F76\n\
_08019254:\n\
- ldr r2, _080192C8 @ =gSpecialStatuses\n\
- ldr r0, _080192CC @ =gBankTarget\n\
- ldrb r1, [r0]\n\
- lsls r0, r1, 2\n\
- adds r0, r1\n\
- lsls r1, r0, 2\n\
- adds r0, r2, 0\n\
- adds r0, 0x8\n\
- adds r0, r1, r0\n\
- ldr r0, [r0]\n\
- cmp r0, 0\n\
- bne _0801927C\n\
- adds r0, r2, 0\n\
- adds r0, 0xC\n\
- adds r0, r1, r0\n\
- ldr r0, [r0]\n\
- cmp r0, 0\n\
- bne _0801927C\n\
- bl _08019F76\n\
+ ldr r2, _080192C8 @ =gSpecialStatuses\n\
+ ldr r0, _080192CC @ =gBankTarget\n\
+ ldrb r1, [r0]\n\
+ lsls r0, r1, 2\n\
+ adds r0, r1\n\
+ lsls r1, r0, 2\n\
+ adds r0, r2, 0\n\
+ adds r0, 0x8\n\
+ adds r0, r1, r0\n\
+ ldr r0, [r0]\n\
+ cmp r0, 0\n\
+ bne _0801927C\n\
+ adds r0, r2, 0\n\
+ adds r0, 0xC\n\
+ adds r0, r1, r0\n\
+ ldr r0, [r0]\n\
+ cmp r0, 0\n\
+ bne _0801927C\n\
+ bl _08019F76\n\
_0801927C:\n\
- bl Random\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- movs r1, 0x3\n\
- bl __umodsi3\n\
- lsls r0, 16\n\
- cmp r0, 0\n\
- beq _08019294\n\
- bl _08019F76\n\
+ bl Random\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ movs r1, 0x3\n\
+ bl __umodsi3\n\
+ lsls r0, 16\n\
+ cmp r0, 0\n\
+ beq _08019294\n\
+ bl _08019F76\n\
_08019294:\n\
- ldr r1, _080192D0 @ =gBattleCommunication\n\
- movs r0, 0x43\n\
- strb r0, [r1, 0x3]\n\
- bl b_movescr_stack_push_cursor\n\
- ldr r1, _080192D4 @ =gBattlescriptCurrInstr\n\
- ldr r0, _080192D8 @ =BattleScript_ApplySecondaryEffect\n\
- str r0, [r1]\n\
- ldr r2, _080192DC @ =gHitMarker\n\
- ldr r0, [r2]\n\
- movs r1, 0x80\n\
- lsls r1, 6\n\
- orrs r0, r1\n\
- str r0, [r2]\n\
- bl _08019F22\n\
- .align 2, 0\n\
+ ldr r1, _080192D0 @ =gBattleCommunication\n\
+ movs r0, 0x43\n\
+ strb r0, [r1, 0x3]\n\
+ bl b_movescr_stack_push_cursor\n\
+ ldr r1, _080192D4 @ =gBattlescriptCurrInstr\n\
+ ldr r0, _080192D8 @ =BattleScript_ApplySecondaryEffect\n\
+ str r0, [r1]\n\
+ ldr r2, _080192DC @ =gHitMarker\n\
+ ldr r0, [r2]\n\
+ movs r1, 0x80\n\
+ lsls r1, 6\n\
+ orrs r0, r1\n\
+ str r0, [r2]\n\
+ bl _08019F22\n\
+ .align 2, 0\n\
_080192B4: .4byte gBattleMoveFlags\n\
_080192B8: .4byte gBattleMons\n\
_080192BC: .4byte gBankAttacker\n\
@@ -4072,159 +4072,159 @@ _080192D4: .4byte gBattlescriptCurrInstr\n\
_080192D8: .4byte BattleScript_ApplySecondaryEffect\n\
_080192DC: .4byte gHitMarker\n\
_080192E0:\n\
- ldr r0, _08019420 @ =gBattleMoveFlags\n\
- ldrb r1, [r0]\n\
- movs r0, 0x29\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080192F0\n\
- bl _08019F76\n\
+ ldr r0, _08019420 @ =gBattleMoveFlags\n\
+ ldrb r1, [r0]\n\
+ movs r0, 0x29\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _080192F0\n\
+ bl _08019F76\n\
_080192F0:\n\
- ldr r5, _08019424 @ =gBattleMons\n\
- ldr r7, _08019428 @ =gBankAttacker\n\
- ldrb r1, [r7]\n\
- movs r6, 0x58\n\
- adds r0, r1, 0\n\
- muls r0, r6\n\
- adds r0, r5\n\
- ldrh r0, [r0, 0x28]\n\
- cmp r0, 0\n\
- bne _08019308\n\
- bl _08019F76\n\
+ ldr r5, _08019424 @ =gBattleMons\n\
+ ldr r7, _08019428 @ =gBankAttacker\n\
+ ldrb r1, [r7]\n\
+ movs r6, 0x58\n\
+ adds r0, r1, 0\n\
+ muls r0, r6\n\
+ adds r0, r5\n\
+ ldrh r0, [r0, 0x28]\n\
+ cmp r0, 0\n\
+ bne _08019308\n\
+ bl _08019F76\n\
_08019308:\n\
- ldr r0, _0801942C @ =gProtectStructs\n\
- lsls r1, 4\n\
- adds r1, r0\n\
- ldrb r0, [r1, 0x1]\n\
- lsls r0, 31\n\
- cmp r0, 0\n\
- beq _0801931A\n\
- bl _08019F76\n\
+ ldr r0, _0801942C @ =gProtectStructs\n\
+ lsls r1, 4\n\
+ adds r1, r0\n\
+ ldrb r0, [r1, 0x1]\n\
+ lsls r0, 31\n\
+ cmp r0, 0\n\
+ beq _0801931A\n\
+ bl _08019F76\n\
_0801931A:\n\
- ldr r1, _08019430 @ =gBattleMoves\n\
- lsls r0, r3, 1\n\
- adds r0, r3\n\
- lsls r0, 2\n\
- adds r0, r1\n\
- ldrb r1, [r0, 0x8]\n\
- movs r0, 0x1\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _08019332\n\
- bl _08019F76\n\
+ ldr r1, _08019430 @ =gBattleMoves\n\
+ lsls r0, r3, 1\n\
+ adds r0, r3\n\
+ lsls r0, 2\n\
+ adds r0, r1\n\
+ ldrb r1, [r0, 0x8]\n\
+ movs r0, 0x1\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _08019332\n\
+ bl _08019F76\n\
_08019332:\n\
- ldr r3, _08019434 @ =gSpecialStatuses\n\
- ldr r0, _08019438 @ =gBankTarget\n\
- mov r8, r0\n\
- ldrb r1, [r0]\n\
- lsls r0, r1, 2\n\
- adds r0, r1\n\
- lsls r2, r0, 2\n\
- adds r0, r3, 0\n\
- adds r0, 0x8\n\
- adds r0, r2, r0\n\
- ldr r0, [r0]\n\
- cmp r0, 0\n\
- bne _0801935C\n\
- adds r0, r3, 0\n\
- adds r0, 0xC\n\
- adds r0, r2, r0\n\
- ldr r0, [r0]\n\
- cmp r0, 0\n\
- bne _0801935C\n\
- bl _08019F76\n\
+ ldr r3, _08019434 @ =gSpecialStatuses\n\
+ ldr r0, _08019438 @ =gBankTarget\n\
+ mov r8, r0\n\
+ ldrb r1, [r0]\n\
+ lsls r0, r1, 2\n\
+ adds r0, r1\n\
+ lsls r2, r0, 2\n\
+ adds r0, r3, 0\n\
+ adds r0, 0x8\n\
+ adds r0, r2, r0\n\
+ ldr r0, [r0]\n\
+ cmp r0, 0\n\
+ bne _0801935C\n\
+ adds r0, r3, 0\n\
+ adds r0, 0xC\n\
+ adds r0, r2, r0\n\
+ ldr r0, [r0]\n\
+ cmp r0, 0\n\
+ bne _0801935C\n\
+ bl _08019F76\n\
_0801935C:\n\
- adds r0, r1, 0\n\
- muls r0, r6\n\
- adds r0, r5\n\
- ldrh r0, [r0, 0x28]\n\
- cmp r0, 0\n\
- bne _0801936C\n\
- bl _08019F76\n\
+ adds r0, r1, 0\n\
+ muls r0, r6\n\
+ adds r0, r5\n\
+ ldrh r0, [r0, 0x28]\n\
+ cmp r0, 0\n\
+ bne _0801936C\n\
+ bl _08019F76\n\
_0801936C:\n\
- bl Random\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- movs r1, 0x3\n\
- bl __umodsi3\n\
- lsls r0, 16\n\
- cmp r0, 0\n\
- beq _08019384\n\
- bl _08019F76\n\
+ bl Random\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ movs r1, 0x3\n\
+ bl __umodsi3\n\
+ lsls r0, 16\n\
+ cmp r0, 0\n\
+ beq _08019384\n\
+ bl _08019F76\n\
_08019384:\n\
- ldrb r0, [r7]\n\
- muls r0, r6\n\
- adds r0, r5\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- cmp r0, 0xC\n\
- bne _08019396\n\
- bl _08019F76\n\
+ ldrb r0, [r7]\n\
+ muls r0, r6\n\
+ adds r0, r5\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0xC\n\
+ bne _08019396\n\
+ bl _08019F76\n\
_08019396:\n\
- ldr r0, [sp, 0x8]\n\
- ldr r1, [sp, 0x10]\n\
- bl GetGenderFromSpeciesAndPersonality\n\
- adds r4, r0, 0\n\
- ldr r0, [sp, 0xC]\n\
- ldr r1, [sp, 0x14]\n\
- bl GetGenderFromSpeciesAndPersonality\n\
- lsls r4, 24\n\
- lsls r0, 24\n\
- cmp r4, r0\n\
- bne _080193B4\n\
- bl _08019F76\n\
+ ldr r0, [sp, 0x8]\n\
+ ldr r1, [sp, 0x10]\n\
+ bl GetGenderFromSpeciesAndPersonality\n\
+ adds r4, r0, 0\n\
+ ldr r0, [sp, 0xC]\n\
+ ldr r1, [sp, 0x14]\n\
+ bl GetGenderFromSpeciesAndPersonality\n\
+ lsls r4, 24\n\
+ lsls r0, 24\n\
+ cmp r4, r0\n\
+ bne _080193B4\n\
+ bl _08019F76\n\
_080193B4:\n\
- ldrb r0, [r7]\n\
- muls r0, r6\n\
- adds r4, r5, 0\n\
- adds r4, 0x50\n\
- adds r0, r4\n\
- ldr r0, [r0]\n\
- movs r1, 0xF0\n\
- lsls r1, 12\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080193CE\n\
- bl _08019F76\n\
+ ldrb r0, [r7]\n\
+ muls r0, r6\n\
+ adds r4, r5, 0\n\
+ adds r4, 0x50\n\
+ adds r0, r4\n\
+ ldr r0, [r0]\n\
+ movs r1, 0xF0\n\
+ lsls r1, 12\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _080193CE\n\
+ bl _08019F76\n\
_080193CE:\n\
- ldr r0, [sp, 0x8]\n\
- ldr r1, [sp, 0x10]\n\
- bl GetGenderFromSpeciesAndPersonality\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- cmp r0, 0xFF\n\
- bne _080193E2\n\
- bl _08019F76\n\
+ ldr r0, [sp, 0x8]\n\
+ ldr r1, [sp, 0x10]\n\
+ bl GetGenderFromSpeciesAndPersonality\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, 0xFF\n\
+ bne _080193E2\n\
+ bl _08019F76\n\
_080193E2:\n\
- ldr r0, [sp, 0xC]\n\
- ldr r1, [sp, 0x14]\n\
- bl GetGenderFromSpeciesAndPersonality\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- cmp r0, 0xFF\n\
- bne _080193F6\n\
- bl _08019F76\n\
+ ldr r0, [sp, 0xC]\n\
+ ldr r1, [sp, 0x14]\n\
+ bl GetGenderFromSpeciesAndPersonality\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, 0xFF\n\
+ bne _080193F6\n\
+ bl _08019F76\n\
_080193F6:\n\
- ldrb r0, [r7]\n\
- adds r2, r0, 0\n\
- muls r2, r6\n\
- adds r2, r4\n\
- ldr r1, _0801943C @ =gBitTable\n\
- mov r3, r8\n\
- ldrb r0, [r3]\n\
- lsls r0, 2\n\
- adds r0, r1\n\
- ldr r1, [r0]\n\
- lsls r1, 16\n\
- ldr r0, [r2]\n\
- orrs r0, r1\n\
- str r0, [r2]\n\
- bl b_movescr_stack_push_cursor\n\
- ldr r1, _08019440 @ =gBattlescriptCurrInstr\n\
- ldr r0, _08019444 @ =BattleScript_CuteCharmActivates\n\
- str r0, [r1]\n\
- bl _08019F22\n\
- .align 2, 0\n\
+ ldrb r0, [r7]\n\
+ adds r2, r0, 0\n\
+ muls r2, r6\n\
+ adds r2, r4\n\
+ ldr r1, _0801943C @ =gBitTable\n\
+ mov r3, r8\n\
+ ldrb r0, [r3]\n\
+ lsls r0, 2\n\
+ adds r0, r1\n\
+ ldr r1, [r0]\n\
+ lsls r1, 16\n\
+ ldr r0, [r2]\n\
+ orrs r0, r1\n\
+ str r0, [r2]\n\
+ bl b_movescr_stack_push_cursor\n\
+ ldr r1, _08019440 @ =gBattlescriptCurrInstr\n\
+ ldr r0, _08019444 @ =BattleScript_CuteCharmActivates\n\
+ str r0, [r1]\n\
+ bl _08019F22\n\
+ .align 2, 0\n\
_08019420: .4byte gBattleMoveFlags\n\
_08019424: .4byte gBattleMons\n\
_08019428: .4byte gBankAttacker\n\
@@ -4236,347 +4236,347 @@ _0801943C: .4byte gBitTable\n\
_08019440: .4byte gBattlescriptCurrInstr\n\
_08019444: .4byte BattleScript_CuteCharmActivates\n\
_08019448:\n\
- movs r5, 0\n\
- mov r10, r5\n\
- ldr r0, _0801947C @ =gNoOfAllBanks\n\
- ldrb r0, [r0]\n\
- cmp r10, r0\n\
- bcc _08019458\n\
- bl _08019F76\n\
+ movs r5, 0\n\
+ mov r10, r5\n\
+ ldr r0, _0801947C @ =gNoOfAllBanks\n\
+ ldrb r0, [r0]\n\
+ cmp r10, r0\n\
+ bcc _08019458\n\
+ bl _08019F76\n\
_08019458:\n\
- ldr r1, _08019480 @ =gBattleMons\n\
- movs r0, 0x58\n\
- mov r2, r10\n\
- muls r2, r0\n\
- adds r0, r2, 0\n\
- adds r0, r1\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- subs r0, 0x7\n\
- adds r2, r1, 0\n\
- cmp r0, 0x41\n\
- bls _08019472\n\
- b _080196D6\n\
+ ldr r1, _08019480 @ =gBattleMons\n\
+ movs r0, 0x58\n\
+ mov r2, r10\n\
+ muls r2, r0\n\
+ adds r0, r2, 0\n\
+ adds r0, r1\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ subs r0, 0x7\n\
+ adds r2, r1, 0\n\
+ cmp r0, 0x41\n\
+ bls _08019472\n\
+ b _080196D6\n\
_08019472:\n\
- lsls r0, 2\n\
- ldr r1, _08019484 @ =_08019488\n\
- adds r0, r1\n\
- ldr r0, [r0]\n\
- mov pc, r0\n\
- .align 2, 0\n\
+ lsls r0, 2\n\
+ ldr r1, _08019484 @ =_08019488\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ mov pc, r0\n\
+ .align 2, 0\n\
_0801947C: .4byte gNoOfAllBanks\n\
_08019480: .4byte gBattleMons\n\
_08019484: .4byte _08019488\n\
- .align 2, 0\n\
+ .align 2, 0\n\
_08019488:\n\
- .4byte _080195EC\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196B0\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _08019614\n\
- .4byte _080196D6\n\
- .4byte _08019590\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080195BC\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _08019680\n\
- .4byte _08019650\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _080196D6\n\
- .4byte _08019614\n\
+ .4byte _080195EC\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196B0\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _08019614\n\
+ .4byte _080196D6\n\
+ .4byte _08019590\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080195BC\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _08019680\n\
+ .4byte _08019650\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _080196D6\n\
+ .4byte _08019614\n\
_08019590:\n\
- movs r0, 0x58\n\
- mov r3, r10\n\
- muls r3, r0\n\
- adds r0, r3, 0\n\
- adds r1, r2, 0\n\
- adds r1, 0x4C\n\
- adds r0, r1\n\
- ldr r0, [r0]\n\
- ldr r1, _080195B0 @ =0x00000f88\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _080195AA\n\
- b _080196D6\n\
+ movs r0, 0x58\n\
+ mov r3, r10\n\
+ muls r3, r0\n\
+ adds r0, r3, 0\n\
+ adds r1, r2, 0\n\
+ adds r1, 0x4C\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ ldr r1, _080195B0 @ =0x00000f88\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _080195AA\n\
+ b _080196D6\n\
_080195AA:\n\
- ldr r0, _080195B4 @ =gBattleTextBuff1\n\
- ldr r1, _080195B8 @ =gStatusConditionString_PoisonJpn\n\
- b _0801969C\n\
- .align 2, 0\n\
+ ldr r0, _080195B4 @ =gBattleTextBuff1\n\
+ ldr r1, _080195B8 @ =gStatusConditionString_PoisonJpn\n\
+ b _0801969C\n\
+ .align 2, 0\n\
_080195B0: .4byte 0x00000f88\n\
_080195B4: .4byte gBattleTextBuff1\n\
_080195B8: .4byte gStatusConditionString_PoisonJpn\n\
_080195BC:\n\
- movs r0, 0x58\n\
- mov r1, r10\n\
- muls r1, r0\n\
- adds r0, r1, 0\n\
- adds r1, r2, 0\n\
- adds r1, 0x50\n\
- adds r0, r1\n\
- ldr r0, [r0]\n\
- movs r1, 0x7\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _080195D6\n\
- b _080196D6\n\
+ movs r0, 0x58\n\
+ mov r1, r10\n\
+ muls r1, r0\n\
+ adds r0, r1, 0\n\
+ adds r1, r2, 0\n\
+ adds r1, 0x50\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ movs r1, 0x7\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _080195D6\n\
+ b _080196D6\n\
_080195D6:\n\
- ldr r0, _080195E4 @ =gBattleTextBuff1\n\
- ldr r1, _080195E8 @ =gStatusConditionString_ConfusionJpn\n\
- bl StringCopy\n\
- movs r2, 0x2\n\
- mov r9, r2\n\
- b _080196DC\n\
- .align 2, 0\n\
+ ldr r0, _080195E4 @ =gBattleTextBuff1\n\
+ ldr r1, _080195E8 @ =gStatusConditionString_ConfusionJpn\n\
+ bl StringCopy\n\
+ movs r2, 0x2\n\
+ mov r9, r2\n\
+ b _080196DC\n\
+ .align 2, 0\n\
_080195E4: .4byte gBattleTextBuff1\n\
_080195E8: .4byte gStatusConditionString_ConfusionJpn\n\
_080195EC:\n\
- movs r0, 0x58\n\
- mov r3, r10\n\
- muls r3, r0\n\
- adds r0, r3, 0\n\
- adds r1, r2, 0\n\
- adds r1, 0x4C\n\
- adds r0, r1\n\
- ldr r0, [r0]\n\
- movs r1, 0x40\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080196D6\n\
- ldr r0, _0801960C @ =gBattleTextBuff1\n\
- ldr r1, _08019610 @ =gStatusConditionString_ParalysisJpn\n\
- b _0801969C\n\
- .align 2, 0\n\
+ movs r0, 0x58\n\
+ mov r3, r10\n\
+ muls r3, r0\n\
+ adds r0, r3, 0\n\
+ adds r1, r2, 0\n\
+ adds r1, 0x4C\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ movs r1, 0x40\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _080196D6\n\
+ ldr r0, _0801960C @ =gBattleTextBuff1\n\
+ ldr r1, _08019610 @ =gStatusConditionString_ParalysisJpn\n\
+ b _0801969C\n\
+ .align 2, 0\n\
_0801960C: .4byte gBattleTextBuff1\n\
_08019610: .4byte gStatusConditionString_ParalysisJpn\n\
_08019614:\n\
- movs r0, 0x58\n\
- mov r3, r10\n\
- muls r3, r0\n\
- adds r0, r2, 0\n\
- adds r0, 0x4C\n\
- adds r0, r3, r0\n\
- ldr r0, [r0]\n\
- movs r1, 0x7\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080196D6\n\
- adds r2, 0x50\n\
- adds r2, r3, r2\n\
- ldr r0, [r2]\n\
- ldr r1, _08019644 @ =0xf7ffffff\n\
- ands r0, r1\n\
- str r0, [r2]\n\
- ldr r0, _08019648 @ =gBattleTextBuff1\n\
- ldr r1, _0801964C @ =gStatusConditionString_SleepJpn\n\
- bl StringCopy\n\
- movs r0, 0x1\n\
- mov r9, r0\n\
- b _080196DC\n\
- .align 2, 0\n\
+ movs r0, 0x58\n\
+ mov r3, r10\n\
+ muls r3, r0\n\
+ adds r0, r2, 0\n\
+ adds r0, 0x4C\n\
+ adds r0, r3, r0\n\
+ ldr r0, [r0]\n\
+ movs r1, 0x7\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _080196D6\n\
+ adds r2, 0x50\n\
+ adds r2, r3, r2\n\
+ ldr r0, [r2]\n\
+ ldr r1, _08019644 @ =0xf7ffffff\n\
+ ands r0, r1\n\
+ str r0, [r2]\n\
+ ldr r0, _08019648 @ =gBattleTextBuff1\n\
+ ldr r1, _0801964C @ =gStatusConditionString_SleepJpn\n\
+ bl StringCopy\n\
+ movs r0, 0x1\n\
+ mov r9, r0\n\
+ b _080196DC\n\
+ .align 2, 0\n\
_08019644: .4byte 0xf7ffffff\n\
_08019648: .4byte gBattleTextBuff1\n\
_0801964C: .4byte gStatusConditionString_SleepJpn\n\
_08019650:\n\
- movs r0, 0x58\n\
- mov r1, r10\n\
- muls r1, r0\n\
- adds r0, r1, 0\n\
- adds r1, r2, 0\n\
- adds r1, 0x4C\n\
- adds r0, r1\n\
- ldr r0, [r0]\n\
- movs r1, 0x10\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080196D6\n\
- ldr r0, _08019678 @ =gBattleTextBuff1\n\
- ldr r1, _0801967C @ =gStatusConditionString_BurnJpn\n\
- bl StringCopy\n\
- movs r2, 0x1\n\
- mov r9, r2\n\
- b _080196DC\n\
- .align 2, 0\n\
+ movs r0, 0x58\n\
+ mov r1, r10\n\
+ muls r1, r0\n\
+ adds r0, r1, 0\n\
+ adds r1, r2, 0\n\
+ adds r1, 0x4C\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ movs r1, 0x10\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _080196D6\n\
+ ldr r0, _08019678 @ =gBattleTextBuff1\n\
+ ldr r1, _0801967C @ =gStatusConditionString_BurnJpn\n\
+ bl StringCopy\n\
+ movs r2, 0x1\n\
+ mov r9, r2\n\
+ b _080196DC\n\
+ .align 2, 0\n\
_08019678: .4byte gBattleTextBuff1\n\
_0801967C: .4byte gStatusConditionString_BurnJpn\n\
_08019680:\n\
- movs r0, 0x58\n\
- mov r3, r10\n\
- muls r3, r0\n\
- adds r0, r3, 0\n\
- adds r1, r2, 0\n\
- adds r1, 0x4C\n\
- adds r0, r1\n\
- ldr r0, [r0]\n\
- movs r1, 0x20\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080196D6\n\
- ldr r0, _080196A8 @ =gBattleTextBuff1\n\
- ldr r1, _080196AC @ =gStatusConditionString_IceJpn\n\
+ movs r0, 0x58\n\
+ mov r3, r10\n\
+ muls r3, r0\n\
+ adds r0, r3, 0\n\
+ adds r1, r2, 0\n\
+ adds r1, 0x4C\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ movs r1, 0x20\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _080196D6\n\
+ ldr r0, _080196A8 @ =gBattleTextBuff1\n\
+ ldr r1, _080196AC @ =gStatusConditionString_IceJpn\n\
_0801969C:\n\
- bl StringCopy\n\
- movs r5, 0x1\n\
- mov r9, r5\n\
- b _080196DC\n\
- .align 2, 0\n\
+ bl StringCopy\n\
+ movs r5, 0x1\n\
+ mov r9, r5\n\
+ b _080196DC\n\
+ .align 2, 0\n\
_080196A8: .4byte gBattleTextBuff1\n\
_080196AC: .4byte gStatusConditionString_IceJpn\n\
_080196B0:\n\
- movs r0, 0x58\n\
- mov r1, r10\n\
- muls r1, r0\n\
- adds r0, r1, 0\n\
- adds r1, r2, 0\n\
- adds r1, 0x50\n\
- adds r0, r1\n\
- ldr r0, [r0]\n\
- movs r1, 0xF0\n\
- lsls r1, 12\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080196D6\n\
- ldr r0, _080196EC @ =gBattleTextBuff1\n\
- ldr r1, _080196F0 @ =gStatusConditionString_LoveJpn\n\
- bl StringCopy\n\
- movs r2, 0x3\n\
- mov r9, r2\n\
+ movs r0, 0x58\n\
+ mov r1, r10\n\
+ muls r1, r0\n\
+ adds r0, r1, 0\n\
+ adds r1, r2, 0\n\
+ adds r1, 0x50\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ movs r1, 0xF0\n\
+ lsls r1, 12\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _080196D6\n\
+ ldr r0, _080196EC @ =gBattleTextBuff1\n\
+ ldr r1, _080196F0 @ =gStatusConditionString_LoveJpn\n\
+ bl StringCopy\n\
+ movs r2, 0x3\n\
+ mov r9, r2\n\
_080196D6:\n\
- mov r3, r9\n\
- cmp r3, 0\n\
- beq _08019798\n\
+ mov r3, r9\n\
+ cmp r3, 0\n\
+ beq _08019798\n\
_080196DC:\n\
- mov r5, r9\n\
- cmp r5, 0x2\n\
- beq _08019710\n\
- cmp r5, 0x2\n\
- bgt _080196F4\n\
- cmp r5, 0x1\n\
- beq _080196FC\n\
- b _0801973C\n\
- .align 2, 0\n\
+ mov r5, r9\n\
+ cmp r5, 0x2\n\
+ beq _08019710\n\
+ cmp r5, 0x2\n\
+ bgt _080196F4\n\
+ cmp r5, 0x1\n\
+ beq _080196FC\n\
+ b _0801973C\n\
+ .align 2, 0\n\
_080196EC: .4byte gBattleTextBuff1\n\
_080196F0: .4byte gStatusConditionString_LoveJpn\n\
_080196F4:\n\
- mov r0, r9\n\
- cmp r0, 0x3\n\
- beq _08019728\n\
- b _0801973C\n\
+ mov r0, r9\n\
+ cmp r0, 0x3\n\
+ beq _08019728\n\
+ b _0801973C\n\
_080196FC:\n\
- ldr r1, _0801970C @ =gBattleMons\n\
- movs r0, 0x58\n\
- mov r2, r10\n\
- muls r2, r0\n\
- adds r1, 0x4C\n\
- adds r2, r1\n\
- movs r0, 0\n\
- b _0801973A\n\
- .align 2, 0\n\
+ ldr r1, _0801970C @ =gBattleMons\n\
+ movs r0, 0x58\n\
+ mov r2, r10\n\
+ muls r2, r0\n\
+ adds r1, 0x4C\n\
+ adds r2, r1\n\
+ movs r0, 0\n\
+ b _0801973A\n\
+ .align 2, 0\n\
_0801970C: .4byte gBattleMons\n\
_08019710:\n\
- ldr r1, _08019724 @ =gBattleMons\n\
- movs r0, 0x58\n\
- mov r2, r10\n\
- muls r2, r0\n\
- adds r1, 0x50\n\
- adds r2, r1\n\
- ldr r0, [r2]\n\
- movs r1, 0x8\n\
- negs r1, r1\n\
- b _08019738\n\
- .align 2, 0\n\
+ ldr r1, _08019724 @ =gBattleMons\n\
+ movs r0, 0x58\n\
+ mov r2, r10\n\
+ muls r2, r0\n\
+ adds r1, 0x50\n\
+ adds r2, r1\n\
+ ldr r0, [r2]\n\
+ movs r1, 0x8\n\
+ negs r1, r1\n\
+ b _08019738\n\
+ .align 2, 0\n\
_08019724: .4byte gBattleMons\n\
_08019728:\n\
- ldr r1, _08019778 @ =gBattleMons\n\
- movs r0, 0x58\n\
- mov r2, r10\n\
- muls r2, r0\n\
- adds r1, 0x50\n\
- adds r2, r1\n\
- ldr r0, [r2]\n\
- ldr r1, _0801977C @ =0xfff0ffff\n\
+ ldr r1, _08019778 @ =gBattleMons\n\
+ movs r0, 0x58\n\
+ mov r2, r10\n\
+ muls r2, r0\n\
+ adds r1, 0x50\n\
+ adds r2, r1\n\
+ ldr r0, [r2]\n\
+ ldr r1, _0801977C @ =0xfff0ffff\n\
_08019738:\n\
- ands r0, r1\n\
+ ands r0, r1\n\
_0801973A:\n\
- str r0, [r2]\n\
+ str r0, [r2]\n\
_0801973C:\n\
- bl b_movescr_stack_push_cursor\n\
- ldr r1, _08019780 @ =gBattlescriptCurrInstr\n\
- ldr r0, _08019784 @ =gUnknown_081D9956\n\
- str r0, [r1]\n\
- ldr r0, _08019788 @ =0x02000000\n\
- ldr r1, _0801978C @ =0x00016003\n\
- adds r0, r1\n\
- mov r2, r10\n\
- strb r2, [r0]\n\
- ldr r4, _08019790 @ =gActiveBank\n\
- strb r2, [r4]\n\
- ldrb r1, [r4]\n\
- movs r0, 0x58\n\
- muls r0, r1\n\
- ldr r1, _08019794 @ =gUnknown_02024ACC\n\
- adds r0, r1\n\
- str r0, [sp]\n\
- movs r0, 0\n\
- movs r1, 0x28\n\
- movs r2, 0\n\
- movs r3, 0x4\n\
- bl EmitSetAttributes\n\
- ldrb r0, [r4]\n\
- bl MarkBufferBankForExecution\n\
- bl _08019F92\n\
- .align 2, 0\n\
+ bl b_movescr_stack_push_cursor\n\
+ ldr r1, _08019780 @ =gBattlescriptCurrInstr\n\
+ ldr r0, _08019784 @ =gUnknown_081D9956\n\
+ str r0, [r1]\n\
+ ldr r0, _08019788 @ =0x02000000\n\
+ ldr r1, _0801978C @ =0x00016003\n\
+ adds r0, r1\n\
+ mov r2, r10\n\
+ strb r2, [r0]\n\
+ ldr r4, _08019790 @ =gActiveBank\n\
+ strb r2, [r4]\n\
+ ldrb r1, [r4]\n\
+ movs r0, 0x58\n\
+ muls r0, r1\n\
+ ldr r1, _08019794 @ =gUnknown_02024ACC\n\
+ adds r0, r1\n\
+ str r0, [sp]\n\
+ movs r0, 0\n\
+ movs r1, 0x28\n\
+ movs r2, 0\n\
+ movs r3, 0x4\n\
+ bl EmitSetAttributes\n\
+ ldrb r0, [r4]\n\
+ bl MarkBufferBankForExecution\n\
+ bl _08019F92\n\
+ .align 2, 0\n\
_08019778: .4byte gBattleMons\n\
_0801977C: .4byte 0xfff0ffff\n\
_08019780: .4byte gBattlescriptCurrInstr\n\
@@ -4586,112 +4586,112 @@ _0801978C: .4byte 0x00016003\n\
_08019790: .4byte gActiveBank\n\
_08019794: .4byte gUnknown_02024ACC\n\
_08019798:\n\
- mov r0, r10\n\
- adds r0, 0x1\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r10, r0\n\
- ldr r0, _080197B0 @ =gNoOfAllBanks\n\
- ldrb r0, [r0]\n\
- cmp r10, r0\n\
- bcs _080197AC\n\
- b _08019458\n\
+ mov r0, r10\n\
+ adds r0, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r10, r0\n\
+ ldr r0, _080197B0 @ =gNoOfAllBanks\n\
+ ldrb r0, [r0]\n\
+ cmp r10, r0\n\
+ bcs _080197AC\n\
+ b _08019458\n\
_080197AC:\n\
- bl _08019F76\n\
- .align 2, 0\n\
+ bl _08019F76\n\
+ .align 2, 0\n\
_080197B0: .4byte gNoOfAllBanks\n\
_080197B4:\n\
- movs r3, 0\n\
- mov r10, r3\n\
- ldr r0, _080197FC @ =gNoOfAllBanks\n\
- ldrb r0, [r0]\n\
- cmp r10, r0\n\
- bcc _080197C2\n\
- b _08019F76\n\
+ movs r3, 0\n\
+ mov r10, r3\n\
+ ldr r0, _080197FC @ =gNoOfAllBanks\n\
+ ldrb r0, [r0]\n\
+ cmp r10, r0\n\
+ bcc _080197C2\n\
+ b _08019F76\n\
_080197C2:\n\
- ldr r4, _08019800 @ =gBattleMons\n\
+ ldr r4, _08019800 @ =gBattleMons\n\
_080197C4:\n\
- movs r0, 0x58\n\
- mov r5, r10\n\
- muls r5, r0\n\
- adds r0, r5, 0\n\
- adds r0, r4\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- cmp r0, 0x3B\n\
- bne _080197E8\n\
- mov r0, r10\n\
- bl CastformDataTypeChange\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r9, r0\n\
- cmp r0, 0\n\
- beq _080197E8\n\
- b _08019E40\n\
+ movs r0, 0x58\n\
+ mov r5, r10\n\
+ muls r5, r0\n\
+ adds r0, r5, 0\n\
+ adds r0, r4\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0x3B\n\
+ bne _080197E8\n\
+ mov r0, r10\n\
+ bl CastformDataTypeChange\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r9, r0\n\
+ cmp r0, 0\n\
+ beq _080197E8\n\
+ b _08019E40\n\
_080197E8:\n\
- mov r0, r10\n\
- adds r0, 0x1\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r10, r0\n\
- ldr r0, _080197FC @ =gNoOfAllBanks\n\
- ldrb r0, [r0]\n\
- cmp r10, r0\n\
- bcc _080197C4\n\
- b _08019F76\n\
- .align 2, 0\n\
+ mov r0, r10\n\
+ adds r0, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r10, r0\n\
+ ldr r0, _080197FC @ =gNoOfAllBanks\n\
+ ldrb r0, [r0]\n\
+ cmp r10, r0\n\
+ bcc _080197C4\n\
+ b _08019F76\n\
+ .align 2, 0\n\
_080197FC: .4byte gNoOfAllBanks\n\
_08019800: .4byte gBattleMons\n\
_08019804:\n\
- mov r1, r8\n\
- ldrb r0, [r1]\n\
- cmp r0, 0x1C\n\
- beq _0801980E\n\
- b _08019F76\n\
+ mov r1, r8\n\
+ ldrb r0, [r1]\n\
+ cmp r0, 0x1C\n\
+ beq _0801980E\n\
+ b _08019F76\n\
_0801980E:\n\
- ldr r4, _08019860 @ =gHitMarker\n\
- ldr r1, [r4]\n\
- movs r0, 0x80\n\
- lsls r0, 7\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _0801981E\n\
- b _08019F76\n\
+ ldr r4, _08019860 @ =gHitMarker\n\
+ ldr r1, [r4]\n\
+ movs r0, 0x80\n\
+ lsls r0, 7\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _0801981E\n\
+ b _08019F76\n\
_0801981E:\n\
- ldr r0, _08019864 @ =0xffffbfff\n\
- ands r1, r0\n\
- str r1, [r4]\n\
- ldr r3, _08019868 @ =0x000160ca\n\
- adds r2, r7, r3\n\
- ldrb r1, [r2]\n\
- movs r0, 0x3F\n\
- ands r0, r1\n\
- strb r0, [r2]\n\
- cmp r0, 0x6\n\
- bne _08019838\n\
- movs r0, 0x2\n\
- strb r0, [r2]\n\
+ ldr r0, _08019864 @ =0xffffbfff\n\
+ ands r1, r0\n\
+ str r1, [r4]\n\
+ ldr r3, _08019868 @ =0x000160ca\n\
+ adds r2, r7, r3\n\
+ ldrb r1, [r2]\n\
+ movs r0, 0x3F\n\
+ ands r0, r1\n\
+ strb r0, [r2]\n\
+ cmp r0, 0x6\n\
+ bne _08019838\n\
+ movs r0, 0x2\n\
+ strb r0, [r2]\n\
_08019838:\n\
- ldr r1, _0801986C @ =gBattleCommunication\n\
- ldrb r0, [r2]\n\
- adds r0, 0x40\n\
- strb r0, [r1, 0x3]\n\
- ldr r0, _08019870 @ =gBankTarget\n\
- ldrb r1, [r0]\n\
- ldr r5, _08019874 @ =0x00016003\n\
- adds r0, r7, r5\n\
- strb r1, [r0]\n\
- bl b_movescr_stack_push_cursor\n\
- ldr r1, _08019878 @ =gBattlescriptCurrInstr\n\
- ldr r0, _0801987C @ =BattleScript_SynchronizeActivates\n\
- str r0, [r1]\n\
- ldr r0, [r4]\n\
- movs r1, 0x80\n\
- lsls r1, 6\n\
- orrs r0, r1\n\
- str r0, [r4]\n\
- b _08019F22\n\
- .align 2, 0\n\
+ ldr r1, _0801986C @ =gBattleCommunication\n\
+ ldrb r0, [r2]\n\
+ adds r0, 0x40\n\
+ strb r0, [r1, 0x3]\n\
+ ldr r0, _08019870 @ =gBankTarget\n\
+ ldrb r1, [r0]\n\
+ ldr r5, _08019874 @ =0x00016003\n\
+ adds r0, r7, r5\n\
+ strb r1, [r0]\n\
+ bl b_movescr_stack_push_cursor\n\
+ ldr r1, _08019878 @ =gBattlescriptCurrInstr\n\
+ ldr r0, _0801987C @ =BattleScript_SynchronizeActivates\n\
+ str r0, [r1]\n\
+ ldr r0, [r4]\n\
+ movs r1, 0x80\n\
+ lsls r1, 6\n\
+ orrs r0, r1\n\
+ str r0, [r4]\n\
+ b _08019F22\n\
+ .align 2, 0\n\
_08019860: .4byte gHitMarker\n\
_08019864: .4byte 0xffffbfff\n\
_08019868: .4byte 0x000160ca\n\
@@ -4701,54 +4701,54 @@ _08019874: .4byte 0x00016003\n\
_08019878: .4byte gBattlescriptCurrInstr\n\
_0801987C: .4byte BattleScript_SynchronizeActivates\n\
_08019880:\n\
- mov r1, r8\n\
- ldrb r0, [r1]\n\
- cmp r0, 0x1C\n\
- beq _0801988A\n\
- b _08019F76\n\
+ mov r1, r8\n\
+ ldrb r0, [r1]\n\
+ cmp r0, 0x1C\n\
+ beq _0801988A\n\
+ b _08019F76\n\
_0801988A:\n\
- ldr r4, _080198DC @ =gHitMarker\n\
- ldr r1, [r4]\n\
- movs r0, 0x80\n\
- lsls r0, 7\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _0801989A\n\
- b _08019F76\n\
+ ldr r4, _080198DC @ =gHitMarker\n\
+ ldr r1, [r4]\n\
+ movs r0, 0x80\n\
+ lsls r0, 7\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _0801989A\n\
+ b _08019F76\n\
_0801989A:\n\
- ldr r0, _080198E0 @ =0xffffbfff\n\
- ands r1, r0\n\
- str r1, [r4]\n\
- ldr r3, _080198E4 @ =0x000160ca\n\
- adds r2, r7, r3\n\
- ldrb r1, [r2]\n\
- movs r0, 0x3F\n\
- ands r0, r1\n\
- strb r0, [r2]\n\
- cmp r0, 0x6\n\
- bne _080198B4\n\
- movs r0, 0x2\n\
- strb r0, [r2]\n\
+ ldr r0, _080198E0 @ =0xffffbfff\n\
+ ands r1, r0\n\
+ str r1, [r4]\n\
+ ldr r3, _080198E4 @ =0x000160ca\n\
+ adds r2, r7, r3\n\
+ ldrb r1, [r2]\n\
+ movs r0, 0x3F\n\
+ ands r0, r1\n\
+ strb r0, [r2]\n\
+ cmp r0, 0x6\n\
+ bne _080198B4\n\
+ movs r0, 0x2\n\
+ strb r0, [r2]\n\
_080198B4:\n\
- ldr r1, _080198E8 @ =gBattleCommunication\n\
- ldrb r0, [r2]\n\
- strb r0, [r1, 0x3]\n\
- ldr r0, _080198EC @ =gBankAttacker\n\
- ldrb r1, [r0]\n\
- ldr r5, _080198F0 @ =0x00016003\n\
- adds r0, r7, r5\n\
- strb r1, [r0]\n\
- bl b_movescr_stack_push_cursor\n\
- ldr r1, _080198F4 @ =gBattlescriptCurrInstr\n\
- ldr r0, _080198F8 @ =BattleScript_SynchronizeActivates\n\
- str r0, [r1]\n\
- ldr r0, [r4]\n\
- movs r1, 0x80\n\
- lsls r1, 6\n\
- orrs r0, r1\n\
- str r0, [r4]\n\
- b _08019F22\n\
- .align 2, 0\n\
+ ldr r1, _080198E8 @ =gBattleCommunication\n\
+ ldrb r0, [r2]\n\
+ strb r0, [r1, 0x3]\n\
+ ldr r0, _080198EC @ =gBankAttacker\n\
+ ldrb r1, [r0]\n\
+ ldr r5, _080198F0 @ =0x00016003\n\
+ adds r0, r7, r5\n\
+ strb r1, [r0]\n\
+ bl b_movescr_stack_push_cursor\n\
+ ldr r1, _080198F4 @ =gBattlescriptCurrInstr\n\
+ ldr r0, _080198F8 @ =BattleScript_SynchronizeActivates\n\
+ str r0, [r1]\n\
+ ldr r0, [r4]\n\
+ movs r1, 0x80\n\
+ lsls r1, 6\n\
+ orrs r0, r1\n\
+ str r0, [r4]\n\
+ b _08019F22\n\
+ .align 2, 0\n\
_080198DC: .4byte gHitMarker\n\
_080198E0: .4byte 0xffffbfff\n\
_080198E4: .4byte 0x000160ca\n\
@@ -4758,152 +4758,152 @@ _080198F0: .4byte 0x00016003\n\
_080198F4: .4byte gBattlescriptCurrInstr\n\
_080198F8: .4byte BattleScript_SynchronizeActivates\n\
_080198FC:\n\
- movs r4, 0\n\
- ldr r0, _08019934 @ =gNoOfAllBanks\n\
- ldrb r1, [r0]\n\
- cmp r4, r1\n\
- blt _08019908\n\
- b _08019F76\n\
+ movs r4, 0\n\
+ ldr r0, _08019934 @ =gNoOfAllBanks\n\
+ ldrb r1, [r0]\n\
+ cmp r4, r1\n\
+ blt _08019908\n\
+ b _08019F76\n\
_08019908:\n\
- ldr r0, _08019938 @ =gBattleMons\n\
- adds r5, r1, 0\n\
- ldr r2, _0801993C @ =gStatuses3\n\
- adds r3, r0, 0\n\
- adds r3, 0x20\n\
- movs r6, 0x80\n\
- lsls r6, 12\n\
+ ldr r0, _08019938 @ =gBattleMons\n\
+ adds r5, r1, 0\n\
+ ldr r2, _0801993C @ =gStatuses3\n\
+ adds r3, r0, 0\n\
+ adds r3, 0x20\n\
+ movs r6, 0x80\n\
+ lsls r6, 12\n\
_08019916:\n\
- ldrb r1, [r3]\n\
- cmp r1, 0x16\n\
- bne _08019926\n\
- ldr r0, [r2]\n\
- ands r0, r6\n\
- cmp r0, 0\n\
- beq _08019926\n\
- b _08019E6C\n\
+ ldrb r1, [r3]\n\
+ cmp r1, 0x16\n\
+ bne _08019926\n\
+ ldr r0, [r2]\n\
+ ands r0, r6\n\
+ cmp r0, 0\n\
+ beq _08019926\n\
+ b _08019E6C\n\
_08019926:\n\
- adds r2, 0x4\n\
- adds r3, 0x58\n\
- adds r4, 0x1\n\
- cmp r4, r5\n\
- blt _08019916\n\
- b _08019F76\n\
- .align 2, 0\n\
+ adds r2, 0x4\n\
+ adds r3, 0x58\n\
+ adds r4, 0x1\n\
+ cmp r4, r5\n\
+ blt _08019916\n\
+ b _08019F76\n\
+ .align 2, 0\n\
_08019934: .4byte gNoOfAllBanks\n\
_08019938: .4byte gBattleMons\n\
_0801993C: .4byte gStatuses3\n\
_08019940:\n\
- movs r4, 0\n\
- ldr r0, _08019A1C @ =gNoOfAllBanks\n\
- ldrb r0, [r0]\n\
- cmp r4, r0\n\
- blt _0801994C\n\
- b _08019F76\n\
+ movs r4, 0\n\
+ ldr r0, _08019A1C @ =gNoOfAllBanks\n\
+ ldrb r0, [r0]\n\
+ cmp r4, r0\n\
+ blt _0801994C\n\
+ b _08019F76\n\
_0801994C:\n\
- ldr r0, _08019A20 @ =gActiveBank\n\
- mov r8, r0\n\
- ldr r1, _08019A24 @ =gBattleMons\n\
- adds r1, 0x20\n\
- str r1, [sp, 0x1C]\n\
- movs r2, 0\n\
- str r2, [sp, 0x20]\n\
+ ldr r0, _08019A20 @ =gActiveBank\n\
+ mov r8, r0\n\
+ ldr r1, _08019A24 @ =gBattleMons\n\
+ adds r1, 0x20\n\
+ str r1, [sp, 0x1C]\n\
+ movs r2, 0\n\
+ str r2, [sp, 0x20]\n\
_0801995A:\n\
- ldr r3, [sp, 0x1C]\n\
- ldrb r0, [r3]\n\
- cmp r0, 0x24\n\
- beq _08019964\n\
- b _08019AF6\n\
+ ldr r3, [sp, 0x1C]\n\
+ ldrb r0, [r3]\n\
+ cmp r0, 0x24\n\
+ beq _08019964\n\
+ b _08019AF6\n\
_08019964:\n\
- ldr r0, _08019A28 @ =gStatuses3\n\
- ldr r5, [sp, 0x20]\n\
- adds r0, r5, r0\n\
- ldr r1, [r0]\n\
- movs r0, 0x80\n\
- lsls r0, 13\n\
- ands r1, r0\n\
- str r5, [sp, 0x18]\n\
- cmp r1, 0\n\
- bne _0801997A\n\
- b _08019AF6\n\
+ ldr r0, _08019A28 @ =gStatuses3\n\
+ ldr r5, [sp, 0x20]\n\
+ adds r0, r5, r0\n\
+ ldr r1, [r0]\n\
+ movs r0, 0x80\n\
+ lsls r0, 13\n\
+ ands r1, r0\n\
+ str r5, [sp, 0x18]\n\
+ cmp r1, 0\n\
+ bne _0801997A\n\
+ b _08019AF6\n\
_0801997A:\n\
- lsls r0, r4, 24\n\
- lsrs r0, 24\n\
- bl GetBankIdentity\n\
- movs r1, 0x1\n\
- adds r5, r0, 0\n\
- eors r5, r1\n\
- ands r5, r1\n\
- adds r0, r5, 0\n\
- bl GetBankByPlayerAI\n\
- lsls r0, 24\n\
- lsrs r6, r0, 24\n\
- adds r0, r5, 0x2\n\
- bl GetBankByPlayerAI\n\
- lsls r0, 24\n\
- lsrs r7, r0, 24\n\
- ldr r0, _08019A2C @ =gBattleTypeFlags\n\
- ldrh r1, [r0]\n\
- movs r2, 0x1\n\
- adds r0, r2, 0\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _080199AE\n\
- b _08019ABC\n\
+ lsls r0, r4, 24\n\
+ lsrs r0, 24\n\
+ bl GetBankIdentity\n\
+ movs r1, 0x1\n\
+ adds r5, r0, 0\n\
+ eors r5, r1\n\
+ ands r5, r1\n\
+ adds r0, r5, 0\n\
+ bl GetBankByPlayerAI\n\
+ lsls r0, 24\n\
+ lsrs r6, r0, 24\n\
+ adds r0, r5, 0x2\n\
+ bl GetBankByPlayerAI\n\
+ lsls r0, 24\n\
+ lsrs r7, r0, 24\n\
+ ldr r0, _08019A2C @ =gBattleTypeFlags\n\
+ ldrh r1, [r0]\n\
+ movs r2, 0x1\n\
+ adds r0, r2, 0\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _080199AE\n\
+ b _08019ABC\n\
_080199AE:\n\
- movs r1, 0x58\n\
- adds r0, r6, 0\n\
- muls r0, r1\n\
- ldr r3, _08019A24 @ =gBattleMons\n\
- adds r1, r0, r3\n\
- adds r0, r1, 0\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- cmp r0, 0\n\
- beq _08019A78\n\
- ldrh r0, [r1, 0x28]\n\
- cmp r0, 0\n\
- beq _08019A34\n\
- movs r1, 0x58\n\
- adds r0, r7, 0\n\
- muls r0, r1\n\
- adds r1, r0, r3\n\
- adds r0, r1, 0\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- cmp r0, 0\n\
- beq _08019A34\n\
- ldrh r0, [r1, 0x28]\n\
- cmp r0, 0\n\
- beq _08019A34\n\
- str r2, [sp, 0x24]\n\
- bl Random\n\
- ldr r2, [sp, 0x24]\n\
- adds r1, r2, 0\n\
- ands r1, r0\n\
- lsls r1, 1\n\
- orrs r5, r1\n\
- adds r0, r5, 0\n\
- bl GetBankByPlayerAI\n\
- mov r2, r8\n\
- strb r0, [r2]\n\
- ldrb r0, [r2]\n\
- movs r3, 0x58\n\
- muls r0, r3\n\
- ldr r5, _08019A24 @ =gBattleMons\n\
- adds r0, r5\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- ldr r1, [sp, 0x1C]\n\
- strb r0, [r1]\n\
- ldrb r0, [r2]\n\
- muls r0, r3\n\
- adds r0, r5\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- ldr r2, _08019A30 @ =gLastUsedAbility\n\
- strb r0, [r2]\n\
- b _08019AE4\n\
- .align 2, 0\n\
+ movs r1, 0x58\n\
+ adds r0, r6, 0\n\
+ muls r0, r1\n\
+ ldr r3, _08019A24 @ =gBattleMons\n\
+ adds r1, r0, r3\n\
+ adds r0, r1, 0\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0\n\
+ beq _08019A78\n\
+ ldrh r0, [r1, 0x28]\n\
+ cmp r0, 0\n\
+ beq _08019A34\n\
+ movs r1, 0x58\n\
+ adds r0, r7, 0\n\
+ muls r0, r1\n\
+ adds r1, r0, r3\n\
+ adds r0, r1, 0\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0\n\
+ beq _08019A34\n\
+ ldrh r0, [r1, 0x28]\n\
+ cmp r0, 0\n\
+ beq _08019A34\n\
+ str r2, [sp, 0x24]\n\
+ bl Random\n\
+ ldr r2, [sp, 0x24]\n\
+ adds r1, r2, 0\n\
+ ands r1, r0\n\
+ lsls r1, 1\n\
+ orrs r5, r1\n\
+ adds r0, r5, 0\n\
+ bl GetBankByPlayerAI\n\
+ mov r2, r8\n\
+ strb r0, [r2]\n\
+ ldrb r0, [r2]\n\
+ movs r3, 0x58\n\
+ muls r0, r3\n\
+ ldr r5, _08019A24 @ =gBattleMons\n\
+ adds r0, r5\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ ldr r1, [sp, 0x1C]\n\
+ strb r0, [r1]\n\
+ ldrb r0, [r2]\n\
+ muls r0, r3\n\
+ adds r0, r5\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ ldr r2, _08019A30 @ =gLastUsedAbility\n\
+ strb r0, [r2]\n\
+ b _08019AE4\n\
+ .align 2, 0\n\
_08019A1C: .4byte gNoOfAllBanks\n\
_08019A20: .4byte gActiveBank\n\
_08019A24: .4byte gBattleMons\n\
@@ -4911,609 +4911,609 @@ _08019A28: .4byte gStatuses3\n\
_08019A2C: .4byte gBattleTypeFlags\n\
_08019A30: .4byte gLastUsedAbility\n\
_08019A34:\n\
- ldr r3, _08019A74 @ =gBattleMons\n\
- movs r2, 0x58\n\
- adds r0, r6, 0\n\
- muls r0, r2\n\
- adds r1, r0, r3\n\
- adds r0, r1, 0\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- cmp r0, 0\n\
- beq _08019A78\n\
- ldrh r0, [r1, 0x28]\n\
- cmp r0, 0\n\
- beq _08019A78\n\
- mov r5, r8\n\
- strb r6, [r5]\n\
- adds r1, r4, 0\n\
- muls r1, r2\n\
- adds r1, r3\n\
- ldrb r0, [r5]\n\
- muls r0, r2\n\
- adds r0, r3\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- adds r1, 0x20\n\
- strb r0, [r1]\n\
- ldrb r0, [r5]\n\
- muls r0, r2\n\
- adds r0, r3\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- b _08019AE0\n\
- .align 2, 0\n\
+ ldr r3, _08019A74 @ =gBattleMons\n\
+ movs r2, 0x58\n\
+ adds r0, r6, 0\n\
+ muls r0, r2\n\
+ adds r1, r0, r3\n\
+ adds r0, r1, 0\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0\n\
+ beq _08019A78\n\
+ ldrh r0, [r1, 0x28]\n\
+ cmp r0, 0\n\
+ beq _08019A78\n\
+ mov r5, r8\n\
+ strb r6, [r5]\n\
+ adds r1, r4, 0\n\
+ muls r1, r2\n\
+ adds r1, r3\n\
+ ldrb r0, [r5]\n\
+ muls r0, r2\n\
+ adds r0, r3\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ adds r1, 0x20\n\
+ strb r0, [r1]\n\
+ ldrb r0, [r5]\n\
+ muls r0, r2\n\
+ adds r0, r3\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ b _08019AE0\n\
+ .align 2, 0\n\
_08019A74: .4byte gBattleMons\n\
_08019A78:\n\
- ldr r3, _08019AB8 @ =gBattleMons\n\
- movs r2, 0x58\n\
- adds r0, r7, 0\n\
- muls r0, r2\n\
- adds r1, r0, r3\n\
- adds r0, r1, 0\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- cmp r0, 0\n\
- beq _08019AEE\n\
- ldrh r0, [r1, 0x28]\n\
- cmp r0, 0\n\
- beq _08019AEE\n\
- mov r5, r8\n\
- strb r7, [r5]\n\
- adds r1, r4, 0\n\
- muls r1, r2\n\
- adds r1, r3\n\
- ldrb r0, [r5]\n\
- muls r0, r2\n\
- adds r0, r3\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- adds r1, 0x20\n\
- strb r0, [r1]\n\
- ldrb r0, [r5]\n\
- muls r0, r2\n\
- adds r0, r3\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- b _08019AE0\n\
- .align 2, 0\n\
+ ldr r3, _08019AB8 @ =gBattleMons\n\
+ movs r2, 0x58\n\
+ adds r0, r7, 0\n\
+ muls r0, r2\n\
+ adds r1, r0, r3\n\
+ adds r0, r1, 0\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0\n\
+ beq _08019AEE\n\
+ ldrh r0, [r1, 0x28]\n\
+ cmp r0, 0\n\
+ beq _08019AEE\n\
+ mov r5, r8\n\
+ strb r7, [r5]\n\
+ adds r1, r4, 0\n\
+ muls r1, r2\n\
+ adds r1, r3\n\
+ ldrb r0, [r5]\n\
+ muls r0, r2\n\
+ adds r0, r3\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ adds r1, 0x20\n\
+ strb r0, [r1]\n\
+ ldrb r0, [r5]\n\
+ muls r0, r2\n\
+ adds r0, r3\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ b _08019AE0\n\
+ .align 2, 0\n\
_08019AB8: .4byte gBattleMons\n\
_08019ABC:\n\
- mov r2, r8\n\
- strb r6, [r2]\n\
- movs r3, 0x58\n\
- adds r0, r6, 0\n\
- muls r0, r3\n\
- ldr r5, _08019B10 @ =gBattleMons\n\
- adds r0, r5\n\
- adds r2, r0, 0\n\
- adds r2, 0x20\n\
- ldrb r1, [r2]\n\
- cmp r1, 0\n\
- beq _08019AEE\n\
- ldrh r0, [r0, 0x28]\n\
- cmp r0, 0\n\
- beq _08019AEE\n\
- ldr r0, [sp, 0x1C]\n\
- strb r1, [r0]\n\
- ldrb r0, [r2]\n\
+ mov r2, r8\n\
+ strb r6, [r2]\n\
+ movs r3, 0x58\n\
+ adds r0, r6, 0\n\
+ muls r0, r3\n\
+ ldr r5, _08019B10 @ =gBattleMons\n\
+ adds r0, r5\n\
+ adds r2, r0, 0\n\
+ adds r2, 0x20\n\
+ ldrb r1, [r2]\n\
+ cmp r1, 0\n\
+ beq _08019AEE\n\
+ ldrh r0, [r0, 0x28]\n\
+ cmp r0, 0\n\
+ beq _08019AEE\n\
+ ldr r0, [sp, 0x1C]\n\
+ strb r1, [r0]\n\
+ ldrb r0, [r2]\n\
_08019AE0:\n\
- ldr r1, _08019B14 @ =gLastUsedAbility\n\
- strb r0, [r1]\n\
+ ldr r1, _08019B14 @ =gLastUsedAbility\n\
+ strb r0, [r1]\n\
_08019AE4:\n\
- mov r0, r9\n\
- adds r0, 0x1\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r9, r0\n\
+ mov r0, r9\n\
+ adds r0, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r9, r0\n\
_08019AEE:\n\
- mov r2, r9\n\
- cmp r2, 0\n\
- beq _08019AF6\n\
- b _08019E88\n\
+ mov r2, r9\n\
+ cmp r2, 0\n\
+ beq _08019AF6\n\
+ b _08019E88\n\
_08019AF6:\n\
- ldr r3, [sp, 0x1C]\n\
- adds r3, 0x58\n\
- str r3, [sp, 0x1C]\n\
- ldr r5, [sp, 0x20]\n\
- adds r5, 0x4\n\
- str r5, [sp, 0x20]\n\
- adds r4, 0x1\n\
- ldr r0, _08019B18 @ =gNoOfAllBanks\n\
- ldrb r0, [r0]\n\
- cmp r4, r0\n\
- bge _08019B0E\n\
- b _0801995A\n\
+ ldr r3, [sp, 0x1C]\n\
+ adds r3, 0x58\n\
+ str r3, [sp, 0x1C]\n\
+ ldr r5, [sp, 0x20]\n\
+ adds r5, 0x4\n\
+ str r5, [sp, 0x20]\n\
+ adds r4, 0x1\n\
+ ldr r0, _08019B18 @ =gNoOfAllBanks\n\
+ ldrb r0, [r0]\n\
+ cmp r4, r0\n\
+ bge _08019B0E\n\
+ b _0801995A\n\
_08019B0E:\n\
- b _08019F76\n\
- .align 2, 0\n\
+ b _08019F76\n\
+ .align 2, 0\n\
_08019B10: .4byte gBattleMons\n\
_08019B14: .4byte gLastUsedAbility\n\
_08019B18: .4byte gNoOfAllBanks\n\
_08019B1C:\n\
- movs r4, 0\n\
- ldr r0, _08019B54 @ =gNoOfAllBanks\n\
- ldrb r1, [r0]\n\
- cmp r4, r1\n\
- blt _08019B28\n\
- b _08019F76\n\
+ movs r4, 0\n\
+ ldr r0, _08019B54 @ =gNoOfAllBanks\n\
+ ldrb r1, [r0]\n\
+ cmp r4, r1\n\
+ blt _08019B28\n\
+ b _08019F76\n\
_08019B28:\n\
- ldr r0, _08019B58 @ =gBattleMons\n\
- adds r5, r1, 0\n\
- ldr r2, _08019B5C @ =gStatuses3\n\
- adds r3, r0, 0\n\
- adds r3, 0x20\n\
- movs r6, 0x80\n\
- lsls r6, 12\n\
+ ldr r0, _08019B58 @ =gBattleMons\n\
+ adds r5, r1, 0\n\
+ ldr r2, _08019B5C @ =gStatuses3\n\
+ adds r3, r0, 0\n\
+ adds r3, 0x20\n\
+ movs r6, 0x80\n\
+ lsls r6, 12\n\
_08019B36:\n\
- ldrb r1, [r3]\n\
- cmp r1, 0x16\n\
- bne _08019B46\n\
- ldr r0, [r2]\n\
- ands r0, r6\n\
- cmp r0, 0\n\
- beq _08019B46\n\
- b _08019F04\n\
+ ldrb r1, [r3]\n\
+ cmp r1, 0x16\n\
+ bne _08019B46\n\
+ ldr r0, [r2]\n\
+ ands r0, r6\n\
+ cmp r0, 0\n\
+ beq _08019B46\n\
+ b _08019F04\n\
_08019B46:\n\
- adds r2, 0x4\n\
- adds r3, 0x58\n\
- adds r4, 0x1\n\
- cmp r4, r5\n\
- blt _08019B36\n\
- b _08019F76\n\
- .align 2, 0\n\
+ adds r2, 0x4\n\
+ adds r3, 0x58\n\
+ adds r4, 0x1\n\
+ cmp r4, r5\n\
+ blt _08019B36\n\
+ b _08019F76\n\
+ .align 2, 0\n\
_08019B54: .4byte gNoOfAllBanks\n\
_08019B58: .4byte gBattleMons\n\
_08019B5C: .4byte gStatuses3\n\
_08019B60:\n\
- mov r0, r10\n\
- bl GetBankSide\n\
- lsls r0, 24\n\
- lsrs r5, r0, 24\n\
- movs r4, 0\n\
- ldr r0, _08019BB0 @ =gNoOfAllBanks\n\
- ldrb r0, [r0]\n\
- cmp r4, r0\n\
- blt _08019B76\n\
- b _08019F76\n\
+ mov r0, r10\n\
+ bl GetBankSide\n\
+ lsls r0, 24\n\
+ lsrs r5, r0, 24\n\
+ movs r4, 0\n\
+ ldr r0, _08019BB0 @ =gNoOfAllBanks\n\
+ ldrb r0, [r0]\n\
+ cmp r4, r0\n\
+ blt _08019B76\n\
+ b _08019F76\n\
_08019B76:\n\
- ldr r7, _08019BB4 @ =gBattleMons\n\
+ ldr r7, _08019BB4 @ =gBattleMons\n\
_08019B78:\n\
- lsls r0, r4, 24\n\
- lsrs r0, 24\n\
- bl GetBankSide\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- adds r3, r4, 0x1\n\
- cmp r0, r5\n\
- beq _08019BA2\n\
- movs r0, 0x58\n\
- muls r0, r4\n\
- adds r0, r7\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- cmp r0, r6\n\
- bne _08019BA2\n\
- ldr r0, _08019BB8 @ =gLastUsedAbility\n\
- strb r6, [r0]\n\
- lsls r0, r3, 24\n\
- lsrs r0, 24\n\
- mov r9, r0\n\
+ lsls r0, r4, 24\n\
+ lsrs r0, 24\n\
+ bl GetBankSide\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ adds r3, r4, 0x1\n\
+ cmp r0, r5\n\
+ beq _08019BA2\n\
+ movs r0, 0x58\n\
+ muls r0, r4\n\
+ adds r0, r7\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ cmp r0, r6\n\
+ bne _08019BA2\n\
+ ldr r0, _08019BB8 @ =gLastUsedAbility\n\
+ strb r6, [r0]\n\
+ lsls r0, r3, 24\n\
+ lsrs r0, 24\n\
+ mov r9, r0\n\
_08019BA2:\n\
- adds r4, r3, 0\n\
- ldr r0, _08019BB0 @ =gNoOfAllBanks\n\
- ldrb r0, [r0]\n\
- cmp r4, r0\n\
- blt _08019B78\n\
- b _08019F76\n\
- .align 2, 0\n\
+ adds r4, r3, 0\n\
+ ldr r0, _08019BB0 @ =gNoOfAllBanks\n\
+ ldrb r0, [r0]\n\
+ cmp r4, r0\n\
+ blt _08019B78\n\
+ b _08019F76\n\
+ .align 2, 0\n\
_08019BB0: .4byte gNoOfAllBanks\n\
_08019BB4: .4byte gBattleMons\n\
_08019BB8: .4byte gLastUsedAbility\n\
_08019BBC:\n\
- mov r0, r10\n\
- bl GetBankSide\n\
- lsls r0, 24\n\
- lsrs r5, r0, 24\n\
- movs r4, 0\n\
- ldr r0, _08019C0C @ =gNoOfAllBanks\n\
- ldrb r0, [r0]\n\
- cmp r4, r0\n\
- blt _08019BD2\n\
- b _08019F76\n\
+ mov r0, r10\n\
+ bl GetBankSide\n\
+ lsls r0, 24\n\
+ lsrs r5, r0, 24\n\
+ movs r4, 0\n\
+ ldr r0, _08019C0C @ =gNoOfAllBanks\n\
+ ldrb r0, [r0]\n\
+ cmp r4, r0\n\
+ blt _08019BD2\n\
+ b _08019F76\n\
_08019BD2:\n\
- ldr r7, _08019C10 @ =gBattleMons\n\
+ ldr r7, _08019C10 @ =gBattleMons\n\
_08019BD4:\n\
- lsls r0, r4, 24\n\
- lsrs r0, 24\n\
- bl GetBankSide\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- adds r3, r4, 0x1\n\
- cmp r0, r5\n\
- bne _08019BFE\n\
- movs r0, 0x58\n\
- muls r0, r4\n\
- adds r0, r7\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- cmp r0, r6\n\
- bne _08019BFE\n\
- ldr r0, _08019C14 @ =gLastUsedAbility\n\
- strb r6, [r0]\n\
- lsls r0, r3, 24\n\
- lsrs r0, 24\n\
- mov r9, r0\n\
+ lsls r0, r4, 24\n\
+ lsrs r0, 24\n\
+ bl GetBankSide\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ adds r3, r4, 0x1\n\
+ cmp r0, r5\n\
+ bne _08019BFE\n\
+ movs r0, 0x58\n\
+ muls r0, r4\n\
+ adds r0, r7\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ cmp r0, r6\n\
+ bne _08019BFE\n\
+ ldr r0, _08019C14 @ =gLastUsedAbility\n\
+ strb r6, [r0]\n\
+ lsls r0, r3, 24\n\
+ lsrs r0, 24\n\
+ mov r9, r0\n\
_08019BFE:\n\
- adds r4, r3, 0\n\
- ldr r0, _08019C0C @ =gNoOfAllBanks\n\
- ldrb r0, [r0]\n\
- cmp r4, r0\n\
- blt _08019BD4\n\
- b _08019F76\n\
- .align 2, 0\n\
+ adds r4, r3, 0\n\
+ ldr r0, _08019C0C @ =gNoOfAllBanks\n\
+ ldrb r0, [r0]\n\
+ cmp r4, r0\n\
+ blt _08019BD4\n\
+ b _08019F76\n\
+ .align 2, 0\n\
_08019C0C: .4byte gNoOfAllBanks\n\
_08019C10: .4byte gBattleMons\n\
_08019C14: .4byte gLastUsedAbility\n\
_08019C18:\n\
- mov r1, r8\n\
- ldrb r0, [r1]\n\
- cmp r0, 0xFD\n\
- beq _08019C40\n\
- cmp r0, 0xFE\n\
- beq _08019C78\n\
- movs r4, 0\n\
- ldr r0, _08019C38 @ =gNoOfAllBanks\n\
- adds r5, r0, 0\n\
- ldrb r2, [r5]\n\
- cmp r4, r2\n\
- blt _08019C32\n\
- b _08019F76\n\
+ mov r1, r8\n\
+ ldrb r0, [r1]\n\
+ cmp r0, 0xFD\n\
+ beq _08019C40\n\
+ cmp r0, 0xFE\n\
+ beq _08019C78\n\
+ movs r4, 0\n\
+ ldr r0, _08019C38 @ =gNoOfAllBanks\n\
+ adds r5, r0, 0\n\
+ ldrb r2, [r5]\n\
+ cmp r4, r2\n\
+ blt _08019C32\n\
+ b _08019F76\n\
_08019C32:\n\
- ldr r2, _08019C3C @ =gBattleMons\n\
- b _08019CB0\n\
- .align 2, 0\n\
+ ldr r2, _08019C3C @ =gBattleMons\n\
+ b _08019CB0\n\
+ .align 2, 0\n\
_08019C38: .4byte gNoOfAllBanks\n\
_08019C3C: .4byte gBattleMons\n\
_08019C40:\n\
- movs r4, 0\n\
- ldr r0, _08019C70 @ =gNoOfAllBanks\n\
- ldrb r0, [r0]\n\
- cmp r4, r0\n\
- blt _08019C4C\n\
- b _08019F76\n\
+ movs r4, 0\n\
+ ldr r0, _08019C70 @ =gNoOfAllBanks\n\
+ ldrb r0, [r0]\n\
+ cmp r4, r0\n\
+ blt _08019C4C\n\
+ b _08019F76\n\
_08019C4C:\n\
- ldr r5, _08019C74 @ =gStatuses3\n\
- movs r2, 0x80\n\
- lsls r2, 9\n\
- adds r1, r0, 0\n\
+ ldr r5, _08019C74 @ =gStatuses3\n\
+ movs r2, 0x80\n\
+ lsls r2, 9\n\
+ adds r1, r0, 0\n\
_08019C54:\n\
- lsls r0, r4, 2\n\
- adds r0, r5\n\
- ldr r0, [r0]\n\
- ands r0, r2\n\
- adds r3, r4, 0x1\n\
- cmp r0, 0\n\
- beq _08019C68\n\
- lsls r0, r3, 24\n\
- lsrs r0, 24\n\
- mov r9, r0\n\
+ lsls r0, r4, 2\n\
+ adds r0, r5\n\
+ ldr r0, [r0]\n\
+ ands r0, r2\n\
+ adds r3, r4, 0x1\n\
+ cmp r0, 0\n\
+ beq _08019C68\n\
+ lsls r0, r3, 24\n\
+ lsrs r0, 24\n\
+ mov r9, r0\n\
_08019C68:\n\
- adds r4, r3, 0\n\
- cmp r4, r1\n\
- blt _08019C54\n\
- b _08019F76\n\
- .align 2, 0\n\
+ adds r4, r3, 0\n\
+ cmp r4, r1\n\
+ blt _08019C54\n\
+ b _08019F76\n\
+ .align 2, 0\n\
_08019C70: .4byte gNoOfAllBanks\n\
_08019C74: .4byte gStatuses3\n\
_08019C78:\n\
- movs r4, 0\n\
- ldr r0, _08019CA8 @ =gNoOfAllBanks\n\
- ldrb r0, [r0]\n\
- cmp r4, r0\n\
- blt _08019C84\n\
- b _08019F76\n\
+ movs r4, 0\n\
+ ldr r0, _08019CA8 @ =gNoOfAllBanks\n\
+ ldrb r0, [r0]\n\
+ cmp r4, r0\n\
+ blt _08019C84\n\
+ b _08019F76\n\
_08019C84:\n\
- ldr r5, _08019CAC @ =gStatuses3\n\
- movs r2, 0x80\n\
- lsls r2, 10\n\
- adds r1, r0, 0\n\
+ ldr r5, _08019CAC @ =gStatuses3\n\
+ movs r2, 0x80\n\
+ lsls r2, 10\n\
+ adds r1, r0, 0\n\
_08019C8C:\n\
- lsls r0, r4, 2\n\
- adds r0, r5\n\
- ldr r0, [r0]\n\
- ands r0, r2\n\
- adds r3, r4, 0x1\n\
- cmp r0, 0\n\
- beq _08019CA0\n\
- lsls r0, r3, 24\n\
- lsrs r0, 24\n\
- mov r9, r0\n\
+ lsls r0, r4, 2\n\
+ adds r0, r5\n\
+ ldr r0, [r0]\n\
+ ands r0, r2\n\
+ adds r3, r4, 0x1\n\
+ cmp r0, 0\n\
+ beq _08019CA0\n\
+ lsls r0, r3, 24\n\
+ lsrs r0, 24\n\
+ mov r9, r0\n\
_08019CA0:\n\
- adds r4, r3, 0\n\
- cmp r4, r1\n\
- blt _08019C8C\n\
- b _08019F76\n\
- .align 2, 0\n\
+ adds r4, r3, 0\n\
+ cmp r4, r1\n\
+ blt _08019C8C\n\
+ b _08019F76\n\
+ .align 2, 0\n\
_08019CA8: .4byte gNoOfAllBanks\n\
_08019CAC: .4byte gStatuses3\n\
_08019CB0:\n\
- movs r0, 0x58\n\
- muls r0, r4\n\
- adds r0, r2\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- adds r3, r4, 0x1\n\
- cmp r0, r6\n\
- bne _08019CCA\n\
- mov r0, r8\n\
- strb r6, [r0]\n\
- lsls r0, r3, 24\n\
- lsrs r0, 24\n\
- mov r9, r0\n\
+ movs r0, 0x58\n\
+ muls r0, r4\n\
+ adds r0, r2\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ adds r3, r4, 0x1\n\
+ cmp r0, r6\n\
+ bne _08019CCA\n\
+ mov r0, r8\n\
+ strb r6, [r0]\n\
+ lsls r0, r3, 24\n\
+ lsrs r0, 24\n\
+ mov r9, r0\n\
_08019CCA:\n\
- adds r4, r3, 0\n\
- ldrb r1, [r5]\n\
- cmp r4, r1\n\
- blt _08019CB0\n\
- b _08019F76\n\
+ adds r4, r3, 0\n\
+ ldrb r1, [r5]\n\
+ cmp r4, r1\n\
+ blt _08019CB0\n\
+ b _08019F76\n\
_08019CD4:\n\
- movs r4, 0\n\
- ldr r0, _08019D10 @ =gNoOfAllBanks\n\
- ldrb r0, [r0]\n\
- cmp r4, r0\n\
- blt _08019CE0\n\
- b _08019F76\n\
+ movs r4, 0\n\
+ ldr r0, _08019D10 @ =gNoOfAllBanks\n\
+ ldrb r0, [r0]\n\
+ cmp r4, r0\n\
+ blt _08019CE0\n\
+ b _08019F76\n\
_08019CE0:\n\
- ldr r7, _08019D14 @ =gBattleMons\n\
- adds r2, r0, 0\n\
- movs r5, 0x58\n\
+ ldr r7, _08019D14 @ =gBattleMons\n\
+ adds r2, r0, 0\n\
+ movs r5, 0x58\n\
_08019CE6:\n\
- adds r0, r4, 0\n\
- muls r0, r5\n\
- adds r1, r0, r7\n\
- adds r0, r1, 0\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- adds r3, r4, 0x1\n\
- cmp r0, r6\n\
- bne _08019D08\n\
- ldrh r0, [r1, 0x28]\n\
- cmp r0, 0\n\
- beq _08019D08\n\
- mov r0, r8\n\
- strb r6, [r0]\n\
- lsls r0, r3, 24\n\
- lsrs r0, 24\n\
- mov r9, r0\n\
+ adds r0, r4, 0\n\
+ muls r0, r5\n\
+ adds r1, r0, r7\n\
+ adds r0, r1, 0\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ adds r3, r4, 0x1\n\
+ cmp r0, r6\n\
+ bne _08019D08\n\
+ ldrh r0, [r1, 0x28]\n\
+ cmp r0, 0\n\
+ beq _08019D08\n\
+ mov r0, r8\n\
+ strb r6, [r0]\n\
+ lsls r0, r3, 24\n\
+ lsrs r0, 24\n\
+ mov r9, r0\n\
_08019D08:\n\
- adds r4, r3, 0\n\
- cmp r4, r2\n\
- blt _08019CE6\n\
- b _08019F76\n\
- .align 2, 0\n\
+ adds r4, r3, 0\n\
+ cmp r4, r2\n\
+ blt _08019CE6\n\
+ b _08019F76\n\
+ .align 2, 0\n\
_08019D10: .4byte gNoOfAllBanks\n\
_08019D14: .4byte gBattleMons\n\
_08019D18:\n\
- movs r4, 0\n\
- ldr r0, _08019D50 @ =gNoOfAllBanks\n\
- ldrb r0, [r0]\n\
- cmp r4, r0\n\
- blt _08019D24\n\
- b _08019F76\n\
+ movs r4, 0\n\
+ ldr r0, _08019D50 @ =gNoOfAllBanks\n\
+ ldrb r0, [r0]\n\
+ cmp r4, r0\n\
+ blt _08019D24\n\
+ b _08019F76\n\
_08019D24:\n\
- ldr r7, _08019D54 @ =gBattleMons\n\
- adds r1, r0, 0\n\
- movs r5, 0x58\n\
- ldr r2, _08019D58 @ =gLastUsedAbility\n\
+ ldr r7, _08019D54 @ =gBattleMons\n\
+ adds r1, r0, 0\n\
+ movs r5, 0x58\n\
+ ldr r2, _08019D58 @ =gLastUsedAbility\n\
_08019D2C:\n\
- adds r0, r4, 0\n\
- muls r0, r5\n\
- adds r0, r7\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- adds r3, r4, 0x1\n\
- cmp r0, r6\n\
- bne _08019D48\n\
- cmp r4, r10\n\
- beq _08019D48\n\
- strb r6, [r2]\n\
- lsls r0, r3, 24\n\
- lsrs r0, 24\n\
- mov r9, r0\n\
+ adds r0, r4, 0\n\
+ muls r0, r5\n\
+ adds r0, r7\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ adds r3, r4, 0x1\n\
+ cmp r0, r6\n\
+ bne _08019D48\n\
+ cmp r4, r10\n\
+ beq _08019D48\n\
+ strb r6, [r2]\n\
+ lsls r0, r3, 24\n\
+ lsrs r0, 24\n\
+ mov r9, r0\n\
_08019D48:\n\
- adds r4, r3, 0\n\
- cmp r4, r1\n\
- blt _08019D2C\n\
- b _08019F76\n\
- .align 2, 0\n\
+ adds r4, r3, 0\n\
+ cmp r4, r1\n\
+ blt _08019D2C\n\
+ b _08019F76\n\
+ .align 2, 0\n\
_08019D50: .4byte gNoOfAllBanks\n\
_08019D54: .4byte gBattleMons\n\
_08019D58: .4byte gLastUsedAbility\n\
_08019D5C:\n\
- mov r0, r10\n\
- bl GetBankSide\n\
- lsls r0, 24\n\
- lsrs r5, r0, 24\n\
- movs r4, 0\n\
- ldr r0, _08019DAC @ =gNoOfAllBanks\n\
- ldrb r0, [r0]\n\
- cmp r4, r0\n\
- blt _08019D72\n\
- b _08019F76\n\
+ mov r0, r10\n\
+ bl GetBankSide\n\
+ lsls r0, 24\n\
+ lsrs r5, r0, 24\n\
+ movs r4, 0\n\
+ ldr r0, _08019DAC @ =gNoOfAllBanks\n\
+ ldrb r0, [r0]\n\
+ cmp r4, r0\n\
+ blt _08019D72\n\
+ b _08019F76\n\
_08019D72:\n\
- ldr r7, _08019DB0 @ =gBattleMons\n\
+ ldr r7, _08019DB0 @ =gBattleMons\n\
_08019D74:\n\
- lsls r0, r4, 24\n\
- lsrs r0, 24\n\
- bl GetBankSide\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- cmp r0, r5\n\
- beq _08019DA0\n\
- movs r0, 0x58\n\
- muls r0, r4\n\
- adds r0, r7\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- cmp r0, r6\n\
- bne _08019DA0\n\
- ldr r0, _08019DB4 @ =gLastUsedAbility\n\
- strb r6, [r0]\n\
- mov r0, r9\n\
- adds r0, 0x1\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r9, r0\n\
+ lsls r0, r4, 24\n\
+ lsrs r0, 24\n\
+ bl GetBankSide\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, r5\n\
+ beq _08019DA0\n\
+ movs r0, 0x58\n\
+ muls r0, r4\n\
+ adds r0, r7\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ cmp r0, r6\n\
+ bne _08019DA0\n\
+ ldr r0, _08019DB4 @ =gLastUsedAbility\n\
+ strb r6, [r0]\n\
+ mov r0, r9\n\
+ adds r0, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r9, r0\n\
_08019DA0:\n\
- adds r4, 0x1\n\
- ldr r0, _08019DAC @ =gNoOfAllBanks\n\
- ldrb r0, [r0]\n\
- cmp r4, r0\n\
- blt _08019D74\n\
- b _08019F76\n\
- .align 2, 0\n\
+ adds r4, 0x1\n\
+ ldr r0, _08019DAC @ =gNoOfAllBanks\n\
+ ldrb r0, [r0]\n\
+ cmp r4, r0\n\
+ blt _08019D74\n\
+ b _08019F76\n\
+ .align 2, 0\n\
_08019DAC: .4byte gNoOfAllBanks\n\
_08019DB0: .4byte gBattleMons\n\
_08019DB4: .4byte gLastUsedAbility\n\
_08019DB8:\n\
- mov r0, r10\n\
- bl GetBankSide\n\
- lsls r0, 24\n\
- lsrs r5, r0, 24\n\
- movs r4, 0\n\
- ldr r0, _08019E08 @ =gNoOfAllBanks\n\
- ldrb r0, [r0]\n\
- cmp r4, r0\n\
- blt _08019DCE\n\
- b _08019F76\n\
+ mov r0, r10\n\
+ bl GetBankSide\n\
+ lsls r0, 24\n\
+ lsrs r5, r0, 24\n\
+ movs r4, 0\n\
+ ldr r0, _08019E08 @ =gNoOfAllBanks\n\
+ ldrb r0, [r0]\n\
+ cmp r4, r0\n\
+ blt _08019DCE\n\
+ b _08019F76\n\
_08019DCE:\n\
- ldr r7, _08019E0C @ =gBattleMons\n\
+ ldr r7, _08019E0C @ =gBattleMons\n\
_08019DD0:\n\
- lsls r0, r4, 24\n\
- lsrs r0, 24\n\
- bl GetBankSide\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- cmp r0, r5\n\
- bne _08019DFC\n\
- movs r0, 0x58\n\
- muls r0, r4\n\
- adds r0, r7\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- cmp r0, r6\n\
- bne _08019DFC\n\
- ldr r0, _08019E10 @ =gLastUsedAbility\n\
- strb r6, [r0]\n\
- mov r0, r9\n\
- adds r0, 0x1\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r9, r0\n\
+ lsls r0, r4, 24\n\
+ lsrs r0, 24\n\
+ bl GetBankSide\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, r5\n\
+ bne _08019DFC\n\
+ movs r0, 0x58\n\
+ muls r0, r4\n\
+ adds r0, r7\n\
+ adds r0, 0x20\n\
+ ldrb r0, [r0]\n\
+ cmp r0, r6\n\
+ bne _08019DFC\n\
+ ldr r0, _08019E10 @ =gLastUsedAbility\n\
+ strb r6, [r0]\n\
+ mov r0, r9\n\
+ adds r0, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r9, r0\n\
_08019DFC:\n\
- adds r4, 0x1\n\
- ldr r0, _08019E08 @ =gNoOfAllBanks\n\
- ldrb r0, [r0]\n\
- cmp r4, r0\n\
- blt _08019DD0\n\
- b _08019F76\n\
- .align 2, 0\n\
+ adds r4, 0x1\n\
+ ldr r0, _08019E08 @ =gNoOfAllBanks\n\
+ ldrb r0, [r0]\n\
+ cmp r4, r0\n\
+ blt _08019DD0\n\
+ b _08019F76\n\
+ .align 2, 0\n\
_08019E08: .4byte gNoOfAllBanks\n\
_08019E0C: .4byte gBattleMons\n\
_08019E10: .4byte gLastUsedAbility\n\
_08019E14:\n\
- ldr r0, _08019E30 @ =BattleScript_CastformChange\n\
- bl b_push_move_exec\n\
- ldr r0, _08019E34 @ =0x02000000\n\
- ldr r2, _08019E38 @ =0x00016003\n\
- adds r1, r0, r2\n\
- strb r6, [r1]\n\
- mov r1, r9\n\
- subs r1, 0x1\n\
- ldr r3, _08019E3C @ =0x0001609b\n\
- adds r0, r3\n\
- strb r1, [r0]\n\
- b _08019F76\n\
- .align 2, 0\n\
+ ldr r0, _08019E30 @ =BattleScript_CastformChange\n\
+ bl b_push_move_exec\n\
+ ldr r0, _08019E34 @ =0x02000000\n\
+ ldr r2, _08019E38 @ =0x00016003\n\
+ adds r1, r0, r2\n\
+ strb r6, [r1]\n\
+ mov r1, r9\n\
+ subs r1, 0x1\n\
+ ldr r3, _08019E3C @ =0x0001609b\n\
+ adds r0, r3\n\
+ strb r1, [r0]\n\
+ b _08019F76\n\
+ .align 2, 0\n\
_08019E30: .4byte BattleScript_CastformChange\n\
_08019E34: .4byte 0x02000000\n\
_08019E38: .4byte 0x00016003\n\
_08019E3C: .4byte 0x0001609b\n\
_08019E40:\n\
- ldr r0, _08019E5C @ =BattleScript_CastformChange\n\
- bl b_push_move_exec\n\
- ldr r0, _08019E60 @ =0x02000000\n\
- ldr r5, _08019E64 @ =0x00016003\n\
- adds r1, r0, r5\n\
- mov r2, r10\n\
- strb r2, [r1]\n\
- mov r1, r9\n\
- subs r1, 0x1\n\
- ldr r3, _08019E68 @ =0x0001609b\n\
- adds r0, r3\n\
- strb r1, [r0]\n\
- b _08019F92\n\
- .align 2, 0\n\
+ ldr r0, _08019E5C @ =BattleScript_CastformChange\n\
+ bl b_push_move_exec\n\
+ ldr r0, _08019E60 @ =0x02000000\n\
+ ldr r5, _08019E64 @ =0x00016003\n\
+ adds r1, r0, r5\n\
+ mov r2, r10\n\
+ strb r2, [r1]\n\
+ mov r1, r9\n\
+ subs r1, 0x1\n\
+ ldr r3, _08019E68 @ =0x0001609b\n\
+ adds r0, r3\n\
+ strb r1, [r0]\n\
+ b _08019F92\n\
+ .align 2, 0\n\
_08019E5C: .4byte BattleScript_CastformChange\n\
_08019E60: .4byte 0x02000000\n\
_08019E64: .4byte 0x00016003\n\
_08019E68: .4byte 0x0001609b\n\
_08019E6C:\n\
- mov r5, r8\n\
- strb r1, [r5]\n\
- ldr r0, [r2]\n\
- ldr r1, _08019E80 @ =0xfff7ffff\n\
- ands r0, r1\n\
- str r0, [r2]\n\
- ldr r0, _08019E84 @ =gUnknown_081D978C\n\
- bl b_push_move_exec\n\
- b _08019F1A\n\
- .align 2, 0\n\
+ mov r5, r8\n\
+ strb r1, [r5]\n\
+ ldr r0, [r2]\n\
+ ldr r1, _08019E80 @ =0xfff7ffff\n\
+ ands r0, r1\n\
+ str r0, [r2]\n\
+ ldr r0, _08019E84 @ =gUnknown_081D978C\n\
+ bl b_push_move_exec\n\
+ b _08019F1A\n\
+ .align 2, 0\n\
_08019E80: .4byte 0xfff7ffff\n\
_08019E84: .4byte gUnknown_081D978C\n\
_08019E88:\n\
- ldr r0, _08019EDC @ =BattleScript_TraceActivates\n\
- bl b_push_move_exec\n\
- ldr r1, _08019EE0 @ =gStatuses3\n\
- ldr r2, [sp, 0x18]\n\
- adds r1, r2, r1\n\
- ldr r0, [r1]\n\
- ldr r2, _08019EE4 @ =0xffefffff\n\
- ands r0, r2\n\
- str r0, [r1]\n\
- ldr r0, _08019EE8 @ =0x02000000\n\
- ldr r3, _08019EEC @ =0x00016003\n\
- adds r0, r3\n\
- strb r4, [r0]\n\
- ldr r1, _08019EF0 @ =gBattleTextBuff1\n\
- movs r4, 0xFD\n\
- strb r4, [r1]\n\
- movs r0, 0x4\n\
- strb r0, [r1, 0x1]\n\
- ldr r2, _08019EF4 @ =gActiveBank\n\
- ldrb r0, [r2]\n\
- strb r0, [r1, 0x2]\n\
- ldr r3, _08019EF8 @ =gBattlePartyID\n\
- ldrb r0, [r2]\n\
- lsls r0, 1\n\
- adds r0, r3\n\
- ldrh r0, [r0]\n\
- strb r0, [r1, 0x3]\n\
- movs r0, 0xFF\n\
- strb r0, [r1, 0x4]\n\
- ldr r1, _08019EFC @ =gBattleTextBuff2\n\
- strb r4, [r1]\n\
- movs r0, 0x9\n\
- strb r0, [r1, 0x1]\n\
- ldr r0, _08019F00 @ =gLastUsedAbility\n\
- ldrb r0, [r0]\n\
- strb r0, [r1, 0x2]\n\
- movs r0, 0x1\n\
- negs r0, r0\n\
- strb r0, [r1, 0x3]\n\
- b _08019F76\n\
- .align 2, 0\n\
+ ldr r0, _08019EDC @ =BattleScript_TraceActivates\n\
+ bl b_push_move_exec\n\
+ ldr r1, _08019EE0 @ =gStatuses3\n\
+ ldr r2, [sp, 0x18]\n\
+ adds r1, r2, r1\n\
+ ldr r0, [r1]\n\
+ ldr r2, _08019EE4 @ =0xffefffff\n\
+ ands r0, r2\n\
+ str r0, [r1]\n\
+ ldr r0, _08019EE8 @ =0x02000000\n\
+ ldr r3, _08019EEC @ =0x00016003\n\
+ adds r0, r3\n\
+ strb r4, [r0]\n\
+ ldr r1, _08019EF0 @ =gBattleTextBuff1\n\
+ movs r4, 0xFD\n\
+ strb r4, [r1]\n\
+ movs r0, 0x4\n\
+ strb r0, [r1, 0x1]\n\
+ ldr r2, _08019EF4 @ =gActiveBank\n\
+ ldrb r0, [r2]\n\
+ strb r0, [r1, 0x2]\n\
+ ldr r3, _08019EF8 @ =gBattlePartyID\n\
+ ldrb r0, [r2]\n\
+ lsls r0, 1\n\
+ adds r0, r3\n\
+ ldrh r0, [r0]\n\
+ strb r0, [r1, 0x3]\n\
+ movs r0, 0xFF\n\
+ strb r0, [r1, 0x4]\n\
+ ldr r1, _08019EFC @ =gBattleTextBuff2\n\
+ strb r4, [r1]\n\
+ movs r0, 0x9\n\
+ strb r0, [r1, 0x1]\n\
+ ldr r0, _08019F00 @ =gLastUsedAbility\n\
+ ldrb r0, [r0]\n\
+ strb r0, [r1, 0x2]\n\
+ movs r0, 0x1\n\
+ negs r0, r0\n\
+ strb r0, [r1, 0x3]\n\
+ b _08019F76\n\
+ .align 2, 0\n\
_08019EDC: .4byte BattleScript_TraceActivates\n\
_08019EE0: .4byte gStatuses3\n\
_08019EE4: .4byte 0xffefffff\n\
@@ -5525,88 +5525,88 @@ _08019EF8: .4byte gBattlePartyID\n\
_08019EFC: .4byte gBattleTextBuff2\n\
_08019F00: .4byte gLastUsedAbility\n\
_08019F04:\n\
- mov r5, r8\n\
- strb r1, [r5]\n\
- ldr r0, [r2]\n\
- ldr r1, _08019F30 @ =0xfff7ffff\n\
- ands r0, r1\n\
- str r0, [r2]\n\
- bl b_movescr_stack_push_cursor\n\
- ldr r1, _08019F34 @ =gBattlescriptCurrInstr\n\
- ldr r0, _08019F38 @ =gUnknown_081D9795\n\
- str r0, [r1]\n\
+ mov r5, r8\n\
+ strb r1, [r5]\n\
+ ldr r0, [r2]\n\
+ ldr r1, _08019F30 @ =0xfff7ffff\n\
+ ands r0, r1\n\
+ str r0, [r2]\n\
+ bl b_movescr_stack_push_cursor\n\
+ ldr r1, _08019F34 @ =gBattlescriptCurrInstr\n\
+ ldr r0, _08019F38 @ =gUnknown_081D9795\n\
+ str r0, [r1]\n\
_08019F1A:\n\
- ldr r0, _08019F3C @ =0x02000000\n\
- ldr r1, _08019F40 @ =0x000160dd\n\
- adds r0, r1\n\
- strb r4, [r0]\n\
+ ldr r0, _08019F3C @ =0x02000000\n\
+ ldr r1, _08019F40 @ =0x000160dd\n\
+ adds r0, r1\n\
+ strb r4, [r0]\n\
_08019F22:\n\
- mov r0, r9\n\
- adds r0, 0x1\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r9, r0\n\
- b _08019F76\n\
- .align 2, 0\n\
+ mov r0, r9\n\
+ adds r0, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r9, r0\n\
+ b _08019F76\n\
+ .align 2, 0\n\
_08019F30: .4byte 0xfff7ffff\n\
_08019F34: .4byte gBattlescriptCurrInstr\n\
_08019F38: .4byte gUnknown_081D9795\n\
_08019F3C: .4byte 0x02000000\n\
_08019F40: .4byte 0x000160dd\n\
_08019F44:\n\
- movs r4, 0\n\
- ldr r0, _08019FA4 @ =gNoOfAllBanks\n\
- ldrb r1, [r0]\n\
- cmp r4, r1\n\
- bge _08019F76\n\
- ldr r0, _08019FA8 @ =gBattleMons\n\
- adds r2, r1, 0\n\
- adds r1, r0, 0\n\
- adds r1, 0x20\n\
- ldr r3, _08019FAC @ =gLastUsedAbility\n\
+ movs r4, 0\n\
+ ldr r0, _08019FA4 @ =gNoOfAllBanks\n\
+ ldrb r1, [r0]\n\
+ cmp r4, r1\n\
+ bge _08019F76\n\
+ ldr r0, _08019FA8 @ =gBattleMons\n\
+ adds r2, r1, 0\n\
+ adds r1, r0, 0\n\
+ adds r1, 0x20\n\
+ ldr r3, _08019FAC @ =gLastUsedAbility\n\
_08019F58:\n\
- ldrb r0, [r1]\n\
- cmp r0, r6\n\
- bne _08019F6E\n\
- cmp r4, r10\n\
- beq _08019F6E\n\
- strb r6, [r3]\n\
- mov r0, r9\n\
- adds r0, 0x1\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r9, r0\n\
+ ldrb r0, [r1]\n\
+ cmp r0, r6\n\
+ bne _08019F6E\n\
+ cmp r4, r10\n\
+ beq _08019F6E\n\
+ strb r6, [r3]\n\
+ mov r0, r9\n\
+ adds r0, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r9, r0\n\
_08019F6E:\n\
- adds r1, 0x58\n\
- adds r4, 0x1\n\
- cmp r4, r2\n\
- blt _08019F58\n\
+ adds r1, 0x58\n\
+ adds r4, 0x1\n\
+ cmp r4, r2\n\
+ blt _08019F58\n\
_08019F76:\n\
- mov r2, r9\n\
- cmp r2, 0\n\
- beq _08019F92\n\
+ mov r2, r9\n\
+ cmp r2, 0\n\
+ beq _08019F92\n\
_08019F7C:\n\
- ldr r3, [sp, 0x4]\n\
- cmp r3, 0xB\n\
- bhi _08019F92\n\
- ldr r1, _08019FAC @ =gLastUsedAbility\n\
- ldrb r0, [r1]\n\
- cmp r0, 0xFF\n\
- beq _08019F92\n\
- adds r1, r0, 0\n\
- mov r0, r10\n\
- bl RecordAbilityBattle\n\
+ ldr r3, [sp, 0x4]\n\
+ cmp r3, 0xB\n\
+ bhi _08019F92\n\
+ ldr r1, _08019FAC @ =gLastUsedAbility\n\
+ ldrb r0, [r1]\n\
+ cmp r0, 0xFF\n\
+ beq _08019F92\n\
+ adds r1, r0, 0\n\
+ mov r0, r10\n\
+ bl RecordAbilityBattle\n\
_08019F92:\n\
- mov r0, r9\n\
- add sp, 0x28\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\
- .align 2, 0\n\
+ mov r0, r9\n\
+ add sp, 0x28\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\
+ .align 2, 0\n\
_08019FA4: .4byte gNoOfAllBanks\n\
_08019FA8: .4byte gBattleMons\n\
_08019FAC: .4byte gLastUsedAbility\n\
diff --git a/src/battle_4.c b/src/battle_4.c
index 7464f0535..e4a4895b5 100644
--- a/src/battle_4.c
+++ b/src/battle_4.c
@@ -82,7 +82,7 @@ extern void (*gBattleMainFunc)(void);
extern struct Window gUnknown_03004210;
extern const u8 gUnknown_08400D7A[];
extern u8 gPlayerPartyCount;
-extern u16 word_2024E82; //move to learn
+extern u16 gMoveToLearn; //move to learn
extern const u8 gTrainerMoney[];
extern u16 gRandomMove;
extern u8* gBattleScriptsEffectsTable[];
@@ -93,6 +93,7 @@ extern u16 gUnknown_02024C2C[4]; //last used moves 2, used by sketch
extern u16 gUnknown_030041B0;
extern u16 gUnknown_02024C4C[4]; //last used moves by banks, another one
extern u8 gCurrentMoveTurn;
+extern u16 gTrappingMoves[];
//extern functions
u8 AtkCanceller_UnableToUseMove(void);
@@ -129,7 +130,7 @@ u16 sub_803FBFC(u8 a);
u8 GetBankByPlayerAI(u8 ID);
void sub_8012258(u8);
void sub_80157C4(u8 bank); //update sent pokes in battle
-//sub_803B7C8 teach poke a move
+//MonTryLearningNewMove teach poke a move
u16 GiveMoveToBattleMon(struct BattlePokemon *mon, u16 move);
void IncrementGameStat(u8 index);
u8 GetScaledHPFraction(s16 hp, s16 maxhp, u8 scale);
@@ -144,7 +145,7 @@ void sub_802BBD4(u8 r0, u8 r1, u8 r2, u8 r3, u8 sp0);
void nullsub_6(void);
void ReshowBattleScreenAfterMenu(void);
void sub_800F808(void);
-void sub_80B79B8(u32* moneySaveblock, u32 to_give);
+void AddMoney(u32* moneySaveblock, u32 to_give);
void sub_80156DC(void); //set sentpokes value
bool8 sub_8014AB8(u8 bank); //can run from battle
u8 CountAliveMons(u8 caseID);
@@ -154,7 +155,7 @@ u8 GetMoveTarget(u16 move, u8 targetbyte); //get target of move
void sub_80153D0(u8 atk); //pressure perish song pp decrement
u8 CastformDataTypeChange(u8 bank);
void b_push_move_exec(u8* bs_ptr);
-u8 sav1_map_get_light_level(void);
+u8 Overworld_GetMapTypeOfSaveblockLocation(void);
u8 CalculatePlayerPartyCount(void);
u16 Sqrt(u32 num);
u8 sub_809070C(u16 nationalNum, u32 TiD, u32 PiD); //task prepare poke dex display
@@ -199,6 +200,9 @@ extern u8 BattleScript_TrainerBallBlock[];
extern u8 BattleScript_WallyBallThrow[];
extern u8 BattleScript_SuccessBallThrow[];
extern u8 BattleScript_ShakeBallThrow[];
+extern u8 BattleScript_AllStatsUp[];
+extern u8 BattleScript_AtkDefDown[];
+extern u8 BattleScript_SAtkDown2[];
extern u8 gUnknown_081D919F[]; //spikes1
extern u8 gUnknown_081D9171[]; //spikes2
@@ -211,6 +215,11 @@ extern u8 BattleScript_CastformChange[];
extern u8 gUnknown_081D9834[];
extern u8 gUnknown_081D90FC[]; //bs random switchout
extern u8 gUnknown_081D95DB[]; //bs payday money give
+extern u8 gUnknown_081D8C58[];
+extern u8 gUnknown_081D8C65[];
+extern u8 gUnknown_081D9156[];
+extern u8 gUnknown_081D9468[];
+
//useful macros
//read via orr
@@ -408,6 +417,7 @@ static void atk85_stockpile(void);
static void atk86_stockpiletobasedamage(void);
static void atk87_stockpiletohpheal(void);
static void atk88_negativedamage(void);
+static u8 ChangeStatBuffs(s8, u8, u8, u8*);
static void atk89_statbuffchange(void);
static void atk8A_normalisebuffs(void);
static void atk8B_setbide(void);
@@ -862,19 +872,19 @@ static const u32 gStatusFlagsForMoveEffects[] =
0x00000000
};
-extern const u8 BattleScript_1D963E[];
-extern const u8 BattleScript_1D965A[];
-extern const u8 BattleScript_1D9669[];
-extern const u8 BattleScript_1D9678[];
-extern const u8 BattleScript_1D9687[];
-extern const u8 BattleScript_1D969D[];
-extern const u8 BattleScript_1D96BA[];
-extern const u8 BattleScript_1D9696[];
-extern const u8 BattleScript_1D96B1[];
-extern const u8 BattleScript_1D96AA[];
-extern const u8 BattleScript_1D96C8[];
+extern u8 BattleScript_1D963E[];
+extern u8 BattleScript_1D965A[];
+extern u8 BattleScript_1D9669[];
+extern u8 BattleScript_1D9678[];
+extern u8 BattleScript_1D9687[];
+extern u8 BattleScript_1D969D[];
+extern u8 BattleScript_1D96BA[];
+extern u8 BattleScript_1D9696[];
+extern u8 BattleScript_1D96B1[];
+extern u8 BattleScript_1D96AA[];
+extern u8 BattleScript_1D96C8[];
-const u8* const gMoveEffectBS_Ptrs[] =
+u8* const gMoveEffectBS_Ptrs[] =
{
BattleScript_1D963E,
BattleScript_1D963E,
@@ -947,7 +957,7 @@ static const u16 sUnknown_081FACFE[] = //banned moves to copy
0xFFFF
};
-static const u8 sUnknown_081FAD26[] =
+static const u8 sUnknown_081FAD26[] = //reversal+flail HP thresholds to power
{
1, 200,
4, 150,
@@ -1445,73 +1455,71 @@ static void atk06_typecalc(void)
{
int i = 0;
u8 move_type;
- if (gCurrentMove == MOVE_STRUGGLE) {goto END;}
-
- if (BATTLE_STRUCT->dynamicMoveType)
- move_type = BATTLE_STRUCT->dynamicMoveType & 0x3F;
- else
- move_type = gBattleMoves[gCurrentMove].type;
-
- //check stab
- if (gBattleMons[gBankAttacker].type1 == move_type || gBattleMons[gBankAttacker].type2 == move_type)
+ if (gCurrentMove != MOVE_STRUGGLE)
{
- gBattleMoveDamage = gBattleMoveDamage * 15;
- gBattleMoveDamage = gBattleMoveDamage / 10;
- }
+ if (BATTLE_STRUCT->dynamicMoveType)
+ move_type = BATTLE_STRUCT->dynamicMoveType & 0x3F;
+ else
+ move_type = gBattleMoves[gCurrentMove].type;
- if (gBattleMons[gBankTarget].ability == ABILITY_LEVITATE && move_type == TYPE_GROUND)
- {
- gLastUsedAbility = gBattleMons[gBankTarget].ability;
- gBattleMoveFlags |= (MOVESTATUS_MISSED | MOVESTATUS_NOTAFFECTED);
- gMoveHitWith[gBankTarget] = 0;
- gUnknown_02024C44[gBankTarget] = 0;
- gBattleCommunication[6] = move_type;
- RecordAbilityBattle(gBankTarget, gLastUsedAbility);
- }
- else
- {
- while (gTypeEffectiveness[i]!= TYPE_ENDTABLE)
+ //check stab
+ if (gBattleMons[gBankAttacker].type1 == move_type || gBattleMons[gBankAttacker].type2 == move_type)
{
- if (gTypeEffectiveness[i] == TYPE_FORESIGHT)
- {
- if (gBattleMons[gBankTarget].status2 & STATUS2_FORESIGHT)
- break;
- i += 3;
- continue;
- }
+ gBattleMoveDamage = gBattleMoveDamage * 15;
+ gBattleMoveDamage = gBattleMoveDamage / 10;
+ }
- else if (gTypeEffectiveness[i] == move_type)
+ if (gBattleMons[gBankTarget].ability == ABILITY_LEVITATE && move_type == TYPE_GROUND)
+ {
+ gLastUsedAbility = gBattleMons[gBankTarget].ability;
+ gBattleMoveFlags |= (MOVESTATUS_MISSED | MOVESTATUS_NOTAFFECTED);
+ gMoveHitWith[gBankTarget] = 0;
+ gUnknown_02024C44[gBankTarget] = 0;
+ gBattleCommunication[6] = move_type;
+ RecordAbilityBattle(gBankTarget, gLastUsedAbility);
+ }
+ else
+ {
+ while (gTypeEffectiveness[i]!= TYPE_ENDTABLE)
{
- //check type1
- if (gTypeEffectiveness[i + 1] == gBattleMons[gBankTarget].type1)
- ModulateDmgByType(gTypeEffectiveness[i + 2]);
- //check type2
- if (gTypeEffectiveness[i + 1] == gBattleMons[gBankTarget].type2 &&
- gBattleMons[gBankTarget].type1 != gBattleMons[gBankTarget].type2)
- ModulateDmgByType(gTypeEffectiveness[i + 2]);
+ if (gTypeEffectiveness[i] == TYPE_FORESIGHT)
+ {
+ if (gBattleMons[gBankTarget].status2 & STATUS2_FORESIGHT)
+ break;
+ i += 3;
+ continue;
+ }
+
+ else if (gTypeEffectiveness[i] == move_type)
+ {
+ //check type1
+ if (gTypeEffectiveness[i + 1] == gBattleMons[gBankTarget].type1)
+ ModulateDmgByType(gTypeEffectiveness[i + 2]);
+ //check type2
+ if (gTypeEffectiveness[i + 1] == gBattleMons[gBankTarget].type2 &&
+ gBattleMons[gBankTarget].type1 != gBattleMons[gBankTarget].type2)
+ ModulateDmgByType(gTypeEffectiveness[i + 2]);
+ }
+ i += 3;
}
- i += 3;
}
- }
- if (gBattleMons[gBankTarget].ability == ABILITY_WONDER_GUARD && AttacksThisTurn(gBankAttacker, gCurrentMove) == 2
- && (!(gBattleMoveFlags & MOVESTATUS_SUPEREFFECTIVE) || ((gBattleMoveFlags & (MOVESTATUS_SUPEREFFECTIVE | MOVESTATUS_NOTVERYEFFECTIVE)) == (MOVESTATUS_SUPEREFFECTIVE | MOVESTATUS_NOTVERYEFFECTIVE)))
- && gBattleMoves[gCurrentMove].power)
- {
- gLastUsedAbility = ABILITY_WONDER_GUARD;
- gBattleMoveFlags |= MOVESTATUS_MISSED;
- gMoveHitWith[gBankTarget] = 0;
- gUnknown_02024C44[gBankTarget] = 0;
- gBattleCommunication[6] = 3;
- RecordAbilityBattle(gBankTarget, gLastUsedAbility);
+ if (gBattleMons[gBankTarget].ability == ABILITY_WONDER_GUARD && AttacksThisTurn(gBankAttacker, gCurrentMove) == 2
+ && (!(gBattleMoveFlags & MOVESTATUS_SUPEREFFECTIVE) || ((gBattleMoveFlags & (MOVESTATUS_SUPEREFFECTIVE | MOVESTATUS_NOTVERYEFFECTIVE)) == (MOVESTATUS_SUPEREFFECTIVE | MOVESTATUS_NOTVERYEFFECTIVE)))
+ && gBattleMoves[gCurrentMove].power)
+ {
+ gLastUsedAbility = ABILITY_WONDER_GUARD;
+ gBattleMoveFlags |= MOVESTATUS_MISSED;
+ gMoveHitWith[gBankTarget] = 0;
+ gUnknown_02024C44[gBankTarget] = 0;
+ gBattleCommunication[6] = 3;
+ RecordAbilityBattle(gBankTarget, gLastUsedAbility);
+ }
+ if (gBattleMoveFlags & MOVESTATUS_NOTAFFECTED)
+ gProtectStructs[gBankAttacker].notEffective = 1;
}
- if (gBattleMoveFlags & MOVESTATUS_NOTAFFECTED)
- gProtectStructs[gBankAttacker].notEffective = 1;
-
- END:
- gBattlescriptCurrInstr++;
+ gBattlescriptCurrInstr++;
}
-
static void b_wonderguard_and_levitate(void)
{
u8 flags = 0;
@@ -1620,7 +1628,6 @@ static void ModulateDmgByType2(u8 multiplier, u16 move, u8* flags) //a literal c
}
}
-#ifdef NONMATCHING
u8 TypeCalc(u16 move, u8 bank_atk, u8 bank_def)
{
int i = 0;
@@ -1662,7 +1669,7 @@ u8 TypeCalc(u16 move, u8 bank_atk, u8 bank_def)
ModulateDmgByType2(gTypeEffectiveness[i + 2], move, &flags);
//check type2
if (gTypeEffectiveness[i + 1] == gBattleMons[bank_def].type2 &&
- gBattleMons[bank_def].type1 != gBattleMons[bank_def].type2)
+ gBattleMons[gBankTarget /* what the christ */].type1 != gBattleMons[bank_def].type2)
ModulateDmgByType2(gTypeEffectiveness[i + 2], move, &flags);
}
i += 3;
@@ -1678,254 +1685,6 @@ u8 TypeCalc(u16 move, u8 bank_atk, u8 bank_def)
}
return flags;
}
-#else
-__attribute__((naked))
-u8 TypeCalc(u16 move, u8 bank_atk, u8 bank_def)
-{
- 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, 0x14\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- mov r10, r0\n\
- lsls r1, 24\n\
- lsrs r1, 24\n\
- str r1, [sp, 0x4]\n\
- lsls r2, 24\n\
- lsrs r2, 24\n\
- mov r9, r2\n\
- movs r7, 0\n\
- mov r0, sp\n\
- strb r7, [r0]\n\
- mov r0, r10\n\
- cmp r0, 0xA5\n\
- bne _0801D2AE\n\
- movs r0, 0\n\
- b _0801D43A\n\
- _0801D2AE:\n\
- ldr r1, _0801D31C @ =gBattleMoves\n\
- mov r3, r10\n\
- lsls r2, r3, 1\n\
- adds r0, r2, r3\n\
- lsls r0, 2\n\
- adds r0, r1\n\
- ldrb r0, [r0, 0x2]\n\
- str r0, [sp, 0x8]\n\
- ldr r1, _0801D320 @ =gBattleMons\n\
- movs r0, 0x58\n\
- ldr r3, [sp, 0x4]\n\
- muls r0, r3\n\
- adds r3, r0, r1\n\
- adds r0, r3, 0\n\
- adds r0, 0x21\n\
- ldrb r0, [r0]\n\
- str r2, [sp, 0xC]\n\
- adds r5, r1, 0\n\
- ldr r1, [sp, 0x8]\n\
- cmp r0, r1\n\
- beq _0801D2E2\n\
- adds r0, r3, 0\n\
- adds r0, 0x22\n\
- ldrb r0, [r0]\n\
- cmp r0, r1\n\
- bne _0801D2F4\n\
- _0801D2E2:\n\
- ldr r4, _0801D324 @ =gBattleMoveDamage\n\
- ldr r1, [r4]\n\
- lsls r0, r1, 4\n\
- subs r0, r1\n\
- str r0, [r4]\n\
- movs r1, 0xA\n\
- bl __divsi3\n\
- str r0, [r4]\n\
- _0801D2F4:\n\
- movs r0, 0x58\n\
- mov r2, r9\n\
- muls r2, r0\n\
- adds r0, r2, 0\n\
- adds r0, r5\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- cmp r0, 0x1A\n\
- bne _0801D328\n\
- ldr r3, [sp, 0x8]\n\
- cmp r3, 0x4\n\
- bne _0801D328\n\
- movs r1, 0x9\n\
- mov r0, sp\n\
- ldrb r0, [r0]\n\
- orrs r0, r1\n\
- mov r1, sp\n\
- strb r0, [r1]\n\
- b _0801D3DC\n\
- .align 2, 0\n\
- _0801D31C: .4byte gBattleMoves\n\
- _0801D320: .4byte gBattleMons\n\
- _0801D324: .4byte gBattleMoveDamage\n\
- _0801D328:\n\
- ldr r1, _0801D344 @ =gTypeEffectiveness\n\
- adds r0, r7, r1\n\
- ldrb r0, [r0]\n\
- adds r2, r1, 0\n\
- cmp r0, 0xFF\n\
- beq _0801D3DC\n\
- cmp r0, 0xFE\n\
- bne _0801D34C\n\
- movs r0, 0x58\n\
- mov r1, r9\n\
- muls r1, r0\n\
- adds r0, r1, 0\n\
- b _0801D3CA\n\
- .align 2, 0\n\
- _0801D344: .4byte gTypeEffectiveness\n\
- _0801D348:\n\
- adds r7, 0x3\n\
- b _0801D3B6\n\
- _0801D34C:\n\
- ldr r6, _0801D44C @ =gTypeEffectiveness\n\
- adds r0, r7, r6\n\
- ldrb r0, [r0]\n\
- ldr r2, [sp, 0x8]\n\
- cmp r0, r2\n\
- bne _0801D3B0\n\
- adds r1, r7, 0x1\n\
- adds r1, r6\n\
- ldr r3, _0801D450 @ =gBattleMons\n\
- mov r8, r3\n\
- movs r3, 0x58\n\
- mov r0, r9\n\
- muls r0, r3\n\
- mov r2, r8\n\
- adds r5, r0, r2\n\
- adds r0, r5, 0\n\
- adds r0, 0x21\n\
- ldrb r4, [r1]\n\
- ldrb r0, [r0]\n\
- cmp r4, r0\n\
- bne _0801D388\n\
- adds r0, r7, 0x2\n\
- adds r0, r6\n\
- ldrb r0, [r0]\n\
- mov r1, r10\n\
- mov r2, sp\n\
- str r3, [sp, 0x10]\n\
- bl ModulateDmgByType2\n\
- ldr r3, [sp, 0x10]\n\
- _0801D388:\n\
- adds r0, r5, 0\n\
- adds r0, 0x22\n\
- ldrb r0, [r0]\n\
- cmp r4, r0\n\
- bne _0801D3B0\n\
- ldr r0, _0801D454 @ =gBankTarget\n\
- ldrb r0, [r0]\n\
- muls r0, r3\n\
- add r0, r8\n\
- adds r0, 0x21\n\
- ldrb r0, [r0]\n\
- cmp r0, r4\n\
- beq _0801D3B0\n\
- adds r0, r7, 0x2\n\
- adds r0, r6\n\
- ldrb r0, [r0]\n\
- mov r1, r10\n\
- mov r2, sp\n\
- bl ModulateDmgByType2\n\
- _0801D3B0:\n\
- adds r7, 0x3\n\
- ldr r5, _0801D450 @ =gBattleMons\n\
- ldr r2, _0801D44C @ =gTypeEffectiveness\n\
- _0801D3B6:\n\
- adds r0, r7, r2\n\
- ldrb r0, [r0]\n\
- cmp r0, 0xFF\n\
- beq _0801D3DC\n\
- cmp r0, 0xFE\n\
- bne _0801D34C\n\
- movs r0, 0x58\n\
- mov r3, r9\n\
- muls r3, r0\n\
- adds r0, r3, 0\n\
- _0801D3CA:\n\
- adds r1, r5, 0\n\
- adds r1, 0x50\n\
- adds r0, r1\n\
- ldr r0, [r0]\n\
- movs r1, 0x80\n\
- lsls r1, 22\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0801D348\n\
- _0801D3DC:\n\
- movs r0, 0x58\n\
- mov r1, r9\n\
- muls r1, r0\n\
- adds r0, r1, 0\n\
- adds r0, r5\n\
- adds r0, 0x20\n\
- ldrb r0, [r0]\n\
- cmp r0, 0x19\n\
- bne _0801D436\n\
- mov r0, sp\n\
- ldrb r1, [r0]\n\
- movs r0, 0x1\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _0801D436\n\
- ldr r0, [sp, 0x4]\n\
- mov r1, r10\n\
- bl AttacksThisTurn\n\
- lsls r0, 24\n\
- lsrs r1, r0, 24\n\
- cmp r1, 0x2\n\
- bne _0801D436\n\
- mov r0, sp\n\
- ldrb r3, [r0]\n\
- adds r0, r1, 0\n\
- ands r0, r3\n\
- cmp r0, 0\n\
- beq _0801D41E\n\
- movs r0, 0x6\n\
- ands r0, r3\n\
- cmp r0, 0x6\n\
- bne _0801D436\n\
- _0801D41E:\n\
- ldr r0, _0801D458 @ =gBattleMoves\n\
- ldr r1, [sp, 0xC]\n\
- add r1, r10\n\
- lsls r1, 2\n\
- adds r1, r0\n\
- ldrb r0, [r1, 0x1]\n\
- cmp r0, 0\n\
- beq _0801D436\n\
- mov r0, sp\n\
- movs r1, 0x1\n\
- orrs r1, r3\n\
- strb r1, [r0]\n\
- _0801D436:\n\
- mov r0, sp\n\
- ldrb r0, [r0]\n\
- _0801D43A:\n\
- add sp, 0x14\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\
- .align 2, 0\n\
- _0801D44C: .4byte gTypeEffectiveness\n\
- _0801D450: .4byte gBattleMons\n\
- _0801D454: .4byte gBankTarget\n\
- _0801D458: .4byte gBattleMoves\n\
- .syntax divided\n");
-}
-#endif // NONMATCHING
u8 AI_TypeCalc(u16 move, u16 species, u8 ability)
{
@@ -2510,7 +2269,7 @@ void SetMoveEffect(bool8 primary, u8 certainArg)
#define EffectAffectsUser 0x40
register u8 certain asm("r5") = certainArg;
register bool32 StatusChanged asm("r10") = 0;
- register int AffectsUser asm("r6") = 0; //0x40 otherwise
+ register int AffectsUser asm("r6") = 0; //0x40 otherwise
bool32 NoSunCanFreeze = 1;
if (gBattleCommunication[MOVE_EFFECT_BYTE] & EffectAffectsUser)
@@ -2526,16 +2285,16 @@ void SetMoveEffect(bool8 primary, u8 certainArg)
BATTLE_STRUCT->scriptingActive = gBankAttacker;
}
- if (gBattleMons[gEffectBank].ability_id == ABILITY_SHIELD_DUST && !(gHitMarker & HITMARKER_IGNORE_SAFEGUARD) &&
+ if (gBattleMons[gEffectBank].ability == ABILITY_SHIELD_DUST && !(gHitMarker & HITMARKER_IGNORE_SAFEGUARD) &&
!primary && gBattleCommunication[MOVE_EFFECT_BYTE] <= 9)
{gBattlescriptCurrInstr++; return;}
- if (gSideAffecting[get_bank_identity(gEffectBank) & 1] & SIDE_STATUS_SAFEGUARD && !(gHitMarker & HITMARKER_IGNORE_SAFEGUARD) &&
+ if (gSideAffecting[GetBankIdentity(gEffectBank) & 1] & SIDE_STATUS_SAFEGUARD && !(gHitMarker & HITMARKER_IGNORE_SAFEGUARD) &&
!primary && gBattleCommunication[MOVE_EFFECT_BYTE] <= 7)
{gBattlescriptCurrInstr++; return;}
//make sure at least ONE HP except payday and thief
- if (gBattleMons[gEffectBank].current_hp == 0 && gBattleCommunication[MOVE_EFFECT_BYTE] != 0xB && gBattleCommunication[MOVE_EFFECT_BYTE] != 0x1F)
+ if (gBattleMons[gEffectBank].hp == 0 && gBattleCommunication[MOVE_EFFECT_BYTE] != 0xB && gBattleCommunication[MOVE_EFFECT_BYTE] != 0x1F)
{gBattlescriptCurrInstr++; return;}
if (gBattleMons[gEffectBank].status2 & STATUS2_SUBSTITUTE && AffectsUser != EffectAffectsUser)
@@ -2547,81 +2306,82 @@ void SetMoveEffect(bool8 primary, u8 certainArg)
{
case STATUS_SLEEP:
//check active uproar
- if (gBattleMons[gEffectBank].ability_id != ABILITY_SOUNDPROOF)
+ if (gBattleMons[gEffectBank].ability != ABILITY_SOUNDPROOF)
{
for (gActiveBank = 0; gActiveBank < gNoOfAllBanks && !(gBattleMons[gActiveBank].status2 & STATUS2_UPROAR); gActiveBank++) {}
}
else
gActiveBank = gNoOfAllBanks;
- if (gBattleMons[gEffectBank].status) {break;}
+ if (gBattleMons[gEffectBank].status1) {break;}
if (gActiveBank != gNoOfAllBanks) {break;} //nice way of checking uproar...
- if (gBattleMons[gEffectBank].ability_id == ABILITY_VITAL_SPIRIT) {break;}
- if (gBattleMons[gEffectBank].ability_id == ABILITY_INSOMNIA) {break;}
+ if (gBattleMons[gEffectBank].ability == ABILITY_VITAL_SPIRIT) {break;}
+ if (gBattleMons[gEffectBank].ability == ABILITY_INSOMNIA) {break;}
- b_cancel_multi_turn_move_maybe(gEffectBank);
+ CancelMultiTurnMoves(gEffectBank);
StatusChanged = 1;
break;
case STATUS_POISON:
- if (gBattleMons[gEffectBank].ability_id == ABILITY_IMMUNITY && (primary == 1 || certain == 0x80))
+ if (gBattleMons[gEffectBank].ability == ABILITY_IMMUNITY && (primary == 1 || certain == 0x80))
{
gLastUsedAbility = ABILITY_IMMUNITY;
- RecordAbility(gEffectBank, ABILITY_IMMUNITY);
+ RecordAbilityBattle(gEffectBank, ABILITY_IMMUNITY);
b_movescr_stack_push(gBattlescriptCurrInstr + 1);
//_0801E664:
- gBattlescriptCurrInstr = BS_PSN_PREVENTION;
+ gBattlescriptCurrInstr = BattleScript_PSNPrevention;
if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD)
{
- gBattleCommunication.multistring_chooser = 1;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
gHitMarker &= ~(HITMARKER_IGNORE_SAFEGUARD);
return;
}
else
- {gBattleCommunication.multistring_chooser = 0; return;}
+ {gBattleCommunication[MULTISTRING_CHOOSER] = 0; return;}
}
if ((gBattleMons[gEffectBank].type1 == TYPE_POISON || gBattleMons[gEffectBank].type2 == TYPE_POISON || gBattleMons[gEffectBank].type1 == TYPE_STEEL || gBattleMons[gEffectBank].type2 == TYPE_STEEL)
&& !(gHitMarker & HITMARKER_IGNORE_SAFEGUARD) && (primary == 1 || certain == 0x80))
{
b_movescr_stack_push(gBattlescriptCurrInstr + 1);
- gBattlescriptCurrInstr = BS_PSN_PREVENTION;
- gBattleCommunication.multistring_chooser = 2;
+ gBattlescriptCurrInstr = BattleScript_PSNPrevention;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 2;
return;
}
if (gBattleMons[gEffectBank].type1 == TYPE_POISON) {break;}
if (gBattleMons[gEffectBank].type2 == TYPE_POISON) {break;}
if (gBattleMons[gEffectBank].type1 == TYPE_STEEL) {break;}
if (gBattleMons[gEffectBank].type2 == TYPE_STEEL) {break;}
- if (gBattleMons[gEffectBank].status) {break;}
- if (gBattleMons[gEffectBank].ability_id == ABILITY_IMMUNITY) {break;}
+ if (gBattleMons[gEffectBank].status1) {break;}
+ if (gBattleMons[gEffectBank].ability == ABILITY_IMMUNITY) {break;}
+
StatusChanged = 1;
break;
case STATUS_BURN:
- if (gBattleMons[gEffectBank].ability_id == ABILITY_WATER_VEIL && (primary == 1 || certain == 0x80))
+ if (gBattleMons[gEffectBank].ability == ABILITY_WATER_VEIL && (primary == 1 || certain == 0x80))
{
gLastUsedAbility = ABILITY_WATER_VEIL;
- RecordAbility(gEffectBank, ABILITY_WATER_VEIL);
+ RecordAbilityBattle(gEffectBank, ABILITY_WATER_VEIL);
b_movescr_stack_push(gBattlescriptCurrInstr + 1);
//_0801E664:
- gBattlescriptCurrInstr = BS_BRN_PREVENTION;
+ gBattlescriptCurrInstr = BattleScript_BRNPrevention;
if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD)
{
- gBattleCommunication.multistring_chooser = 1;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
gHitMarker &= ~(HITMARKER_IGNORE_SAFEGUARD);
return;
}
else
- {gBattleCommunication.multistring_chooser = 0; return;}
+ {gBattleCommunication[MULTISTRING_CHOOSER] = 0; return;}
}
if ((gBattleMons[gEffectBank].type1 == TYPE_FIRE || gBattleMons[gEffectBank].type2 == TYPE_FIRE)
&& !(gHitMarker & HITMARKER_IGNORE_SAFEGUARD) && (primary == 1 || certain == 0x80))
{
b_movescr_stack_push(gBattlescriptCurrInstr + 1);
- gBattlescriptCurrInstr = BS_BRN_PREVENTION;
- gBattleCommunication.multistring_chooser = 2;
+ gBattlescriptCurrInstr = BattleScript_BRNPrevention;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 2;
return;
}
if (gBattleMons[gEffectBank].type1 == TYPE_FIRE) {break;}
if (gBattleMons[gEffectBank].type2 == TYPE_FIRE) {break;}
- if (gBattleMons[gEffectBank].ability_id == ABILITY_WATER_VEIL) {break;}
+ if (gBattleMons[gEffectBank].ability == ABILITY_WATER_VEIL) {break;}
if (gBattleMons[gEffectBank].status1 == 0) {break;}
StatusChanged = 1;
break;
@@ -2629,70 +2389,70 @@ void SetMoveEffect(bool8 primary, u8 certainArg)
if (WEATHER_HAS_EFFECT && gBattleWeather & WEATHER_SUN_ANY) {NoSunCanFreeze = 0;}
if (gBattleMons[gEffectBank].type1 == TYPE_ICE) {break;}
if (gBattleMons[gEffectBank].type2 == TYPE_ICE) {break;}
- if (gBattleMons[gEffectBank].status) {break;}
+ if (gBattleMons[gEffectBank].status1) {break;}
if (NoSunCanFreeze == 0) {break;}
- if (gBattleMons[gEffectBank].ability_id == ABILITY_MAGMA_ARMOR) {break;}
+ if (gBattleMons[gEffectBank].ability == ABILITY_MAGMA_ARMOR) {break;}
- b_cancel_multi_turn_move_maybe(gEffectBank);
+ CancelMultiTurnMoves(gEffectBank);
StatusChanged = 1;
break;
case STATUS_PARALYSIS:
- if (gBattleMons[gEffectBank].ability_id == ABILITY_LIMBER)
+ if (gBattleMons[gEffectBank].ability == ABILITY_LIMBER)
{
if ((primary == 1 || certain == 0x80))
{
gLastUsedAbility = ABILITY_LIMBER;
- RecordAbility(gEffectBank, ABILITY_LIMBER);
+ RecordAbilityBattle(gEffectBank, ABILITY_LIMBER);
b_movescr_stack_push(gBattlescriptCurrInstr + 1);
//_0801E664:
- gBattlescriptCurrInstr = BS_PRLZ_PREVENTION;
+ gBattlescriptCurrInstr = BattleScript_PRLZPrevention;
if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD)
{
- gBattleCommunication.multistring_chooser = 1;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
gHitMarker &= ~(HITMARKER_IGNORE_SAFEGUARD);
return;
}
else
- {gBattleCommunication.multistring_chooser = 0; return;}
+ {gBattleCommunication[MULTISTRING_CHOOSER] = 0; return;}
}
else {break;}
}
- if (gBattleMons[gEffectBank].status) {break;}
+ if (gBattleMons[gEffectBank].status1) {break;}
StatusChanged = 1;
break;
case STATUS_TOXIC_POISON:
- if (gBattleMons[gEffectBank].ability_id == ABILITY_IMMUNITY && (primary == 1 || certain == 0x80))
+ if (gBattleMons[gEffectBank].ability == ABILITY_IMMUNITY && (primary == 1 || certain == 0x80))
{
gLastUsedAbility = ABILITY_IMMUNITY;
- RecordAbility(gEffectBank, ABILITY_IMMUNITY);
+ RecordAbilityBattle(gEffectBank, ABILITY_IMMUNITY);
b_movescr_stack_push(gBattlescriptCurrInstr + 1);
//_0801E664:
- gBattlescriptCurrInstr = BS_PSN_PREVENTION;
+ gBattlescriptCurrInstr = BattleScript_PSNPrevention;
if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD)
{
- gBattleCommunication.multistring_chooser = 1;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
gHitMarker &= ~(HITMARKER_IGNORE_SAFEGUARD);
return;
}
else
- {gBattleCommunication.multistring_chooser = 0; return;}
+ {gBattleCommunication[MULTISTRING_CHOOSER] = 0; return;}
}
if ((gBattleMons[gEffectBank].type1 == TYPE_POISON || gBattleMons[gEffectBank].type2 == TYPE_POISON || gBattleMons[gEffectBank].type1 == TYPE_STEEL || gBattleMons[gEffectBank].type2 == TYPE_STEEL)
&& !(gHitMarker & HITMARKER_IGNORE_SAFEGUARD) && (primary == 1 || certain == 0x80))
{
b_movescr_stack_push(gBattlescriptCurrInstr + 1);
- gBattlescriptCurrInstr = BS_PSN_PREVENTION;
- gBattleCommunication.multistring_chooser = 2;
+ gBattlescriptCurrInstr = BattleScript_PSNPrevention;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 2;
return;
}
- if (gBattleMons[gEffectBank].status) {break;}
+ if (gBattleMons[gEffectBank].status1) {break;}
if (gBattleMons[gEffectBank].type1 != TYPE_POISON &&
gBattleMons[gEffectBank].type2 != TYPE_POISON &&
gBattleMons[gEffectBank].type1 != TYPE_STEEL &&
gBattleMons[gEffectBank].type2 != TYPE_STEEL)
{
- if (gBattleMons[gEffectBank].ability_id == ABILITY_IMMUNITY) {break;}
- gBattleMons[gEffectBank].status1 |= ~(STATUS_POISON); //TODO: fix OR to AND
+ if (gBattleMons[gEffectBank].ability == ABILITY_IMMUNITY) {break;}
+ gBattleMons[gEffectBank].status1 &= ~(0x9); //This gets (correctly) optimized out...
StatusChanged = 1;
break;
}
@@ -2707,20 +2467,20 @@ void SetMoveEffect(bool8 primary, u8 certainArg)
gBattleMons[gEffectBank].status1 |= ((Random() & 3) + 2);
else
gBattleMons[gEffectBank].status1 |= gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]];
- gBattlescriptCurrInstr = MoveEffectBS_ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
+ gBattlescriptCurrInstr = gMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
gActiveBank = gEffectBank;
- bb2_setattributes_in_battle(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gEffectBank].status);
- mark_buffer_bank_for_execution(gActiveBank);
+ EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gEffectBank].status1);
+ MarkBufferBankForExecution(gActiveBank);
if (gHitMarker & HITMARKER_IGNORE_SAFEGUARD)
{
- gBattleCommunication.multistring_chooser = 1;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 1;
gHitMarker &= ~(HITMARKER_IGNORE_SAFEGUARD);
}
else
- gBattleCommunication.multistring_chooser = 0;
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
if (gBattleCommunication[MOVE_EFFECT_BYTE] == 2 || gBattleCommunication[MOVE_EFFECT_BYTE] == 6 || gBattleCommunication[MOVE_EFFECT_BYTE] == 5 || gBattleCommunication[MOVE_EFFECT_BYTE] == 3)
{
- BATTLE_STRUCT->SynchroniseEffect = gBattleCommunication[MOVE_EFFECT_BYTE];
+ BATTLE_STRUCT->synchroniseEffect = gBattleCommunication[MOVE_EFFECT_BYTE];
gHitMarker |= HITMARKER_SYNCHRONISE_EFFECT;
}
return;
@@ -2738,22 +2498,22 @@ void SetMoveEffect(bool8 primary, u8 certainArg)
switch (gStatusFlagsForMoveEffects[gBattleCommunication[MOVE_EFFECT_BYTE]])
{
case 7: //confusion
- if (gBattleMons[gEffectBank].ability_id == ABILITY_OWN_TEMPO)
+ if (gBattleMons[gEffectBank].ability == ABILITY_OWN_TEMPO)
{gBattlescriptCurrInstr++; return;}
if (gBattleMons[gEffectBank].status2 & STATUS2_CONFUSION)
{gBattlescriptCurrInstr++; return;}
gBattleMons[gEffectBank].status2 |= (((Random()) % 0x4)) + 2;
b_movescr_stack_push(gBattlescriptCurrInstr + 1);
- gBattlescriptCurrInstr = MoveEffectBS_ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
+ gBattlescriptCurrInstr = gMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
break;
case 8: //flinch
- if (gBattleMons[gEffectBank].ability_id == ABILITY_INNER_FOCUS)
+ if (gBattleMons[gEffectBank].ability == ABILITY_INNER_FOCUS)
{
if (primary == 1 || certain == 0x80)
{
gLastUsedAbility = ABILITY_INNER_FOCUS;
- RecordAbility(gEffectBank, ABILITY_INNER_FOCUS);
- gBattlescriptCurrInstr = BS_FLINCH_PREVENTION;
+ RecordAbilityBattle(gEffectBank, ABILITY_INNER_FOCUS);
+ gBattlescriptCurrInstr = BattleScript_FlinchPrevention;
return;
}
else
@@ -2773,21 +2533,21 @@ void SetMoveEffect(bool8 primary, u8 certainArg)
gLockedMove[gEffectBank] = gCurrentMove;
gBattleMons[gEffectBank].status2 |= ((Random() & 3) + 2) << 4;
b_movescr_stack_push(gBattlescriptCurrInstr + 1);
- gBattlescriptCurrInstr = MoveEffectBS_ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
+ gBattlescriptCurrInstr = gMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
break;
case 11: //pay day
- if (!(get_bank_identity(gEffectBank) & 1))
+ if (!(GetBankIdentity(gBankAttacker) & 1))
{
u16 PayDay = gPaydayMoney;
- gPaydayMoney += (gBattleMons[gEffectBank].level * 5);
+ gPaydayMoney += (gBattleMons[gBankAttacker].level * 5);
if (PayDay > gPaydayMoney)
gPaydayMoney = 0xFFFF;
}
b_movescr_stack_push(gBattlescriptCurrInstr + 1);
- gBattlescriptCurrInstr = MoveEffectBS_ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
+ gBattlescriptCurrInstr = gMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
break;
case 9: //tri attack
- if (gBattleMons[gEffectBank].status)
+ if (gBattleMons[gEffectBank].status1)
{gBattlescriptCurrInstr++; return;}
gBattleCommunication[MOVE_EFFECT_BYTE] = Random() % 3 + 3;
SetMoveEffect(0, 0);
@@ -2795,73 +2555,73 @@ void SetMoveEffect(bool8 primary, u8 certainArg)
case 12: //charging move
gBattleMons[gEffectBank].status2 |= STATUS2_MULTIPLETURNS;
gLockedMove[gEffectBank] = gCurrentMove;
- gProtectStructs[gEffectBank].flag1_chargingturn = 1;
+ gProtectStructs[gEffectBank].chargingTurn = 1;
gBattlescriptCurrInstr++;
break;
case 13: //wrap
if (gBattleMons[gEffectBank].status2 & STATUS2_WRAPPED)
{gBattlescriptCurrInstr++; return;}
gBattleMons[gEffectBank].status2 |= ((Random() & 3) + 2) << 0xD;
- BATTLE_STRUCT->WrappedMove1[gEffectBank] = gCurrentMove;
- BATTLE_STRUCT->WrappedMove2[gEffectBank] = gCurrentMove >> 8;
- BATTLE_STRUCT->WrappedBy[gEffectBank] = gBankAttacker;
+ BATTLE_STRUCT->wrappedMove[gEffectBank*2] = (u8)gCurrentMove;
+ (1 + BATTLE_STRUCT->wrappedMove)[gEffectBank*2] = gCurrentMove >> 8; //don't ask.
+ BATTLE_STRUCT->wrappedBy[gEffectBank] = gBankAttacker;
b_movescr_stack_push(gBattlescriptCurrInstr + 1);
- gBattlescriptCurrInstr = MoveEffectBS_ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
- gBattleCommunication.multistring_chooser = 0;
- while (gBattleCommunication.multistring_chooser <= 4
- && gCurrentMove != gTrappingMoves[gBattleCommunication.multistring_chooser])
- gBattleCommunication.multistring_chooser++;
+ gBattlescriptCurrInstr = gMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
+ gBattleCommunication[MULTISTRING_CHOOSER] = 0;
+ while (gBattleCommunication[MULTISTRING_CHOOSER] <= 4
+ && gCurrentMove != gTrappingMoves[gBattleCommunication[MULTISTRING_CHOOSER]])
+ gBattleCommunication[MULTISTRING_CHOOSER]++;
break;
- case 14: //recoil
+ case 14: //25% recoil
gBattleMoveDamage = (gHP_dealt) / 4;
if (gBattleMoveDamage == 0)
gBattleMoveDamage = 1;
b_movescr_stack_push(gBattlescriptCurrInstr + 1);
- gBattlescriptCurrInstr = MoveEffectBS_ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
+ gBattlescriptCurrInstr = gMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
break;
case 15 ... 21: //stat + 1
- if (ChangeStats(0x10, gBattleCommunication[MOVE_EFFECT_BYTE] + 0xF2, certain, 0)) {gBattlescriptCurrInstr++;}
+ if (ChangeStatBuffs(0x10, gBattleCommunication[MOVE_EFFECT_BYTE] + 0xF2, certain, 0)) {gBattlescriptCurrInstr++;}
else
{
BATTLE_STRUCT->animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & 0x3F; //TODO: the arg ptr is wrong by one
BATTLE_STRUCT->animArg2 = 0;
b_movescr_stack_push(gBattlescriptCurrInstr + 1);
- gBattlescriptCurrInstr = BS_STAT_UP;
+ gBattlescriptCurrInstr = BattleScript_StatUp;
}
break;
case 22 ... 28: //stat - 1
- if (ChangeStats(~(0x6f), gBattleCommunication[MOVE_EFFECT_BYTE] + 0xEB, certain, 0)) {gBattlescriptCurrInstr++;} //TODO: negation doesnt work correctly
+ if (ChangeStatBuffs(~(0x6f), gBattleCommunication[MOVE_EFFECT_BYTE] + 0xEB, certain, 0)) {gBattlescriptCurrInstr++;} //TODO: negation doesnt work correctly
else
{
BATTLE_STRUCT->animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & 0x3F;
BATTLE_STRUCT->animArg2 = 0;
b_movescr_stack_push(gBattlescriptCurrInstr + 1);
- gBattlescriptCurrInstr = BS_STAT_DOWN;
+ gBattlescriptCurrInstr = BattleScript_StatDown;
}
break;
case 39 ... 45: //stat + 2
- if (ChangeStats(0x20, gBattleCommunication[MOVE_EFFECT_BYTE] + 0xDA, certain, 0)) {gBattlescriptCurrInstr++;}
+ if (ChangeStatBuffs(0x20, gBattleCommunication[MOVE_EFFECT_BYTE] + 0xDA, certain, 0)) {gBattlescriptCurrInstr++;}
else
{
BATTLE_STRUCT->animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & 0x3F;
BATTLE_STRUCT->animArg2 = 0;
b_movescr_stack_push(gBattlescriptCurrInstr + 1);
- gBattlescriptCurrInstr = BS_STAT_UP;
+ gBattlescriptCurrInstr = BattleScript_StatUp;
}
break;
case 46 ... 52: //stat - 2
- if (ChangeStats(~(0x5f), gBattleCommunication[MOVE_EFFECT_BYTE] + 0xD3, certain, 0)) {gBattlescriptCurrInstr++;}
+ if (ChangeStatBuffs(~(0x5f), gBattleCommunication[MOVE_EFFECT_BYTE] + 0xD3, certain, 0)) {gBattlescriptCurrInstr++;}
else
{
BATTLE_STRUCT->animArg1 = gBattleCommunication[MOVE_EFFECT_BYTE] & 0x3F;
BATTLE_STRUCT->animArg2 = 0;
b_movescr_stack_push(gBattlescriptCurrInstr + 1);
- gBattlescriptCurrInstr = BS_STAT_DOWN;
+ gBattlescriptCurrInstr = BattleScript_StatDown;
}
break;
case 29: //recharge
gBattleMons[gEffectBank].status2 |= STATUS2_RECHARGE;
- gDisableStructs[gEffectBank].recharge_counter = 2;
+ gDisableStructs[gEffectBank].rechargeCounter = 2;
gLockedMove[gEffectBank] = gCurrentMove;
gBattlescriptCurrInstr++;
break;
@@ -2871,83 +2631,85 @@ void SetMoveEffect(bool8 primary, u8 certainArg)
break;
case 31: //item steal
{
- u8 side = battle_side_get_owner(gBankAttacker);
- if (battle_side_get_owner(gBankAttacker) == 1 && !(gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_LINK)) && gTrainerBattleOpponent != 0x400)
+ u8 side = GetBankSide(gBankAttacker);
+ if (GetBankSide(gBankAttacker) == 1 && !(gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_LINK)) && gTrainerBattleOpponent != 0x400)
{gBattlescriptCurrInstr++; return;}
- if (!(gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_LINK)) && gTrainerBattleOpponent != 0x400 && (gWishFutureKnock.KnockedOff[side] & gBitTable[gBattlePartyID[gBankAttacker]]))
+ if (!(gBattleTypeFlags & (BATTLE_TYPE_EREADER_TRAINER | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_LINK)) && gTrainerBattleOpponent != 0x400 && (gWishFutureKnock.knockedOffPokes[side] & gBitTable[gBattlePartyID[gBankAttacker]]))
{gBattlescriptCurrInstr++; return;}
- if (gBattleMons[gBankTarget].held_item && gBattleMons[gBankTarget].ability_id == ABILITY_STICKY_HOLD)
+ if (gBattleMons[gBankTarget].item && gBattleMons[gBankTarget].ability == ABILITY_STICKY_HOLD)
{
b_movescr_stack_push_cursor();
- gBattlescriptCurrInstr = BS_NO_ITEMSTEAL;
- gLastUsedAbility = gBattleMons[gBankTarget].ability_id;
- RecordAbility(gBankTarget, gLastUsedAbility);
+ gBattlescriptCurrInstr = BattleScript_NoItemSteal;
+ gLastUsedAbility = gBattleMons[gBankTarget].ability;
+ RecordAbilityBattle(gBankTarget, gLastUsedAbility);
return;
}
- if (gBattleMons[gBankAttacker].held_item)
+ if (gBattleMons[gBankAttacker].item)
{gBattlescriptCurrInstr++; return;}
- if (gBattleMons[gBankTarget].held_item == ITEM_ENIGMA_BERRY)
+ if (gBattleMons[gBankTarget].item == ITEM_ENIGMA_BERRY)
{gBattlescriptCurrInstr++; return;}
- if (gBattleMons[gBankTarget].held_item == 0)
+ if (gBattleMons[gBankTarget].item == 0)
{gBattlescriptCurrInstr++; return;}
- CHANGED_HELDITEMS[gBankAttacker] = gLastUsedItem = gBattleMons[gBankTarget].held_item;
- gBattleMons[gBankTarget].held_item = 0;
+ gLastUsedItem = gBattleMons[gBankTarget].item;
+ unk_2000000[gBankAttacker * 2 + 0x160cc] = gLastUsedItem;
+ gBattleMons[gBankTarget].item = 0;
gActiveBank = gBankAttacker;
- bb2_setattributes_in_battle(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gLastUsedItem);
- mark_buffer_bank_for_execution(gBankAttacker);
+ EmitSetAttributes(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gLastUsedItem);
+ MarkBufferBankForExecution(gBankAttacker);
gActiveBank = gBankTarget;
- bb2_setattributes_in_battle(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gBattleMons[gBankTarget].held_item);
- mark_buffer_bank_for_execution(gBankTarget);
+ EmitSetAttributes(0, REQUEST_HELDITEM_BATTLE, 0, 2, &gBattleMons[gBankTarget].item);
+ MarkBufferBankForExecution(gBankTarget);
b_movescr_stack_push(gBattlescriptCurrInstr + 1);
- gBattlescriptCurrInstr = BS_ITEMSTEAL;
+ gBattlescriptCurrInstr = BattleScript_ItemSteal;
- STORE_CHOICEMOVE(gBankTarget, 0);
+ ewram[gBankTarget * 2 + 0x160e8] = 0;
+ //STORE_CHOICEMOVE(gBankTarget, 0);
}
break;
case 32: //escape prevention
gBattleMons[gBankTarget].status2 |= STATUS2_RECHARGE;
- gDisableStructs[gBankTarget].BankPreventingEscape = gBankAttacker;
+ gDisableStructs[gBankTarget].bankPreventingEscape = gBankAttacker;
gBattlescriptCurrInstr++;
break;
case 33: //nightmare
gBattleMons[gBankTarget].status2 |= STATUS2_NIGHTMARE;
gBattlescriptCurrInstr++;
break;
- case 34:
+ case 34: //ancientpower
b_movescr_stack_push(gBattlescriptCurrInstr + 1);
- gBattlescriptCurrInstr = gUnknown_081D9224;
+ gBattlescriptCurrInstr = BattleScript_AllStatsUp;
return;
case 35: //break free rapidspin
b_movescr_stack_push(gBattlescriptCurrInstr + 1);
- gBattlescriptCurrInstr = BS_RAPIDSPINAWAY;
+ gBattlescriptCurrInstr = BattleScript_RapidSpinAway;
return;
case 36: //paralysis removal
if (gBattleMons[gBankTarget].status1 & STATUS_PARALYSIS)
{
gBattleMons[gBankTarget].status1 &= ~(STATUS_PARALYSIS);
gActiveBank = gBankTarget;
- bb2_setattributes_in_battle(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gBankTarget].status);
- mark_buffer_bank_for_execution(gActiveBank);
+ EmitSetAttributes(0, REQUEST_STATUS_BATTLE, 0, 4, &gBattleMons[gBankTarget].status1);
+ MarkBufferBankForExecution(gActiveBank);
b_movescr_stack_push(gBattlescriptCurrInstr + 1);
- gBattlescriptCurrInstr = BS_PARALYSISHEALED;
+ gBattlescriptCurrInstr = BattleScript_TargetPRLZHeal;
}
else
{gBattlescriptCurrInstr++; return;}
break;
- case 37: //
+ case 37: //superpower
b_movescr_stack_push(gBattlescriptCurrInstr + 1);
- gBattlescriptCurrInstr = gUnknown_081D93FA;
+ gBattlescriptCurrInstr = BattleScript_AtkDefDown;
return;
- case 38: //recoil plus paralysis
+ case 38: //33% recoil
gBattleMoveDamage = gHP_dealt / 3;
if (gBattleMoveDamage == 0)
gBattleMoveDamage = 1;
b_movescr_stack_push(gBattlescriptCurrInstr + 1);
- gBattlescriptCurrInstr = MoveEffectBS_ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
+ gBattlescriptCurrInstr = gMoveEffectBS_Ptrs[gBattleCommunication[MOVE_EFFECT_BYTE]];
break;
case 53: //thrash
if (!(gBattleMons[gEffectBank].status2 & STATUS2_LOCK_CONFUSE))
@@ -2960,32 +2722,33 @@ void SetMoveEffect(bool8 primary, u8 certainArg)
{gBattlescriptCurrInstr++; return;}
break;
case 54: //knock off
- if (gBattleMons[gEffectBank].ability_id == ABILITY_STICKY_HOLD)
+ if (gBattleMons[gEffectBank].ability == ABILITY_STICKY_HOLD)
{
- if (gBattleMons[gEffectBank].held_item == 0)
+ if (gBattleMons[gEffectBank].item == 0)
{gBattlescriptCurrInstr++; return;}
gLastUsedAbility = ABILITY_STICKY_HOLD;
- gBattlescriptCurrInstr = BS_STICKYHOLD_ACTIVATES;
- RecordAbility(gEffectBank, ABILITY_STICKY_HOLD);
+ gBattlescriptCurrInstr = BattleScript_NoItemSteal;
+ RecordAbilityBattle(gEffectBank, ABILITY_STICKY_HOLD);
return;
}
- if (gBattleMons[gEffectBank].held_item == 0)
+ if (gBattleMons[gEffectBank].item == 0)
{gBattlescriptCurrInstr++; return;}
else
{
- u8 side = battle_side_get_owner(gEffectBank);
- gLastUsedItem = gBattleMons[gEffectBank].held_item;
- gBattleMons[gEffectBank].held_item = 0;
- gWishFutureKnock.KnockedOff[side] |= gBitTable[gBattlePartyID[gEffectBank]];
+ u8 side = GetBankSide(gEffectBank);
+ gLastUsedItem = gBattleMons[gEffectBank].item;
+ gBattleMons[gEffectBank].item = 0;
+ gWishFutureKnock.knockedOffPokes[side] |= gBitTable[gBattlePartyID[gEffectBank]];
b_movescr_stack_push(gBattlescriptCurrInstr + 1);
- gBattlescriptCurrInstr = BS_KNOCKEDOFF;
+ gBattlescriptCurrInstr = BattleScript_KnockedOff;
- STORE_CHOICEMOVE(gEffectBank, 0);
+ ewram[gEffectBank * 2 + 0x160e8] = 0;
+ //STORE_CHOICEMOVE(gEffectBank, 0);
}
break;
- case 59: //overheat I guess, dont remember
+ case 59: //overheat
b_movescr_stack_push(gBattlescriptCurrInstr + 1);
- gBattlescriptCurrInstr = gUnknown_081D94B0;
+ gBattlescriptCurrInstr = BattleScript_SAtkDown2;
return;
}
}
@@ -4888,11 +4651,11 @@ _0801F3BC:\n\
ldr r0, [r4]\n\
adds r0, 0x1\n\
bl b_movescr_stack_push\n\
- ldr r0, _0801F3D0 @ =gUnknown_081D9224\n\
+ ldr r0, _0801F3D0 @ =BattleScript_AllStatsUp\n\
b _0801F5F8\n\
.align 2, 0\n\
_0801F3CC: .4byte gBattlescriptCurrInstr\n\
-_0801F3D0: .4byte gUnknown_081D9224\n\
+_0801F3D0: .4byte BattleScript_AllStatsUp\n\
_0801F3D4:\n\
ldr r4, _0801F3E4 @ =gBattlescriptCurrInstr\n\
ldr r0, [r4]\n\
@@ -4952,11 +4715,11 @@ _0801F44C:\n\
ldr r0, [r4]\n\
adds r0, 0x1\n\
bl b_movescr_stack_push\n\
- ldr r0, _0801F460 @ =gUnknown_081D93FA\n\
+ ldr r0, _0801F460 @ =BattleScript_AtkDefDown\n\
b _0801F5F8\n\
.align 2, 0\n\
_0801F45C: .4byte gBattlescriptCurrInstr\n\
-_0801F460: .4byte gUnknown_081D93FA\n\
+_0801F460: .4byte BattleScript_AtkDefDown\n\
_0801F464:\n\
ldr r4, _0801F494 @ =gBattleMoveDamage\n\
ldr r0, _0801F498 @ =gHP_dealt\n\
@@ -5141,7 +4904,7 @@ _0801F5EC:\n\
ldr r0, [r4]\n\
adds r0, 0x1\n\
bl b_movescr_stack_push\n\
- ldr r0, _0801F610 @ =gUnknown_081D94B0\n\
+ ldr r0, _0801F610 @ =BattleScript_SAtkDown2\n\
_0801F5F8:\n\
str r0, [r4]\n\
_0801F5FA:\n\
@@ -5155,11 +4918,12 @@ _0801F5FA:\n\
bx r0\n\
.align 2, 0\n\
_0801F60C: .4byte gBattlescriptCurrInstr\n\
-_0801F610: .4byte gUnknown_081D94B0\n\
+_0801F610: .4byte BattleScript_SAtkDown2\n\
.syntax divided\n");
}
#endif // NONMATCHING
+
static void atk15_seteffectwithchancetarget(void)
{
u32 PercentChance;
@@ -5208,425 +4972,107 @@ static void atk18_status_effect_clear(void)
BATTLE_STRUCT->unk16112 = 0;
}
-//Fuck this, Maybe later
-__attribute__((naked))
static void atk19_faint_pokemon(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\
- sub sp, 0x4\n\
- ldr r0, _0801F81C @ =gBattlescriptCurrInstr\n\
- ldr r2, [r0]\n\
- ldrb r1, [r2, 0x2]\n\
- adds r6, r0, 0\n\
- cmp r1, 0\n\
- beq _0801F834\n\
- ldrb r0, [r2, 0x1]\n\
- bl GetBattleBank\n\
- ldr r5, _0801F820 @ =gActiveBank\n\
- strb r0, [r5]\n\
- ldr r2, _0801F824 @ =gHitMarker\n\
- ldr r1, _0801F828 @ =gBitTable\n\
- ldrb r0, [r5]\n\
- lsls r0, 2\n\
- adds r0, r1\n\
- ldr r1, [r0]\n\
- lsls r1, 28\n\
- ldr r0, [r2]\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _0801F7E6\n\
- b _0801FB1C\n\
-_0801F7E6:\n\
- ldr r1, [r6]\n\
- ldrb r4, [r1, 0x3]\n\
- ldrb r0, [r1, 0x4]\n\
- lsls r0, 8\n\
- orrs r4, r0\n\
- ldrb r0, [r1, 0x5]\n\
- lsls r0, 16\n\
- orrs r4, r0\n\
- ldrb r0, [r1, 0x6]\n\
- lsls r0, 24\n\
- orrs r4, r0\n\
- bl b_movescr_stack_pop_cursor\n\
- str r4, [r6]\n\
- ldrb r0, [r5]\n\
- bl GetBankSide\n\
- ldr r1, _0801F82C @ =gSideAffecting\n\
- lsls r0, 24\n\
- lsrs r0, 23\n\
- adds r0, r1\n\
- ldrh r2, [r0]\n\
- ldr r1, _0801F830 @ =0x0000fdff\n\
- ands r1, r2\n\
- strh r1, [r0]\n\
- b _0801FB22\n\
- .align 2, 0\n\
-_0801F81C: .4byte gBattlescriptCurrInstr\n\
-_0801F820: .4byte gActiveBank\n\
-_0801F824: .4byte gHitMarker\n\
-_0801F828: .4byte gBitTable\n\
-_0801F82C: .4byte gSideAffecting\n\
-_0801F830: .4byte 0x0000fdff\n\
-_0801F834:\n\
- ldrb r0, [r2, 0x1]\n\
- cmp r0, 0x1\n\
- bne _0801F85C\n\
- ldr r1, _0801F84C @ =gActiveBank\n\
- ldr r0, _0801F850 @ =gBankAttacker\n\
- ldrb r0, [r0]\n\
- strb r0, [r1]\n\
- ldr r0, _0801F854 @ =gBankTarget\n\
- ldrb r7, [r0]\n\
- ldr r4, _0801F858 @ =gUnknown_081D8C58\n\
- b _0801F86A\n\
- .align 2, 0\n\
-_0801F84C: .4byte gActiveBank\n\
-_0801F850: .4byte gBankAttacker\n\
-_0801F854: .4byte gBankTarget\n\
-_0801F858: .4byte gUnknown_081D8C58\n\
-_0801F85C:\n\
- ldr r1, _0801F954 @ =gActiveBank\n\
- ldr r0, _0801F958 @ =gBankTarget\n\
- ldrb r0, [r0]\n\
- strb r0, [r1]\n\
- ldr r0, _0801F95C @ =gBankAttacker\n\
- ldrb r7, [r0]\n\
- ldr r4, _0801F960 @ =gUnknown_081D8C65\n\
-_0801F86A:\n\
- ldr r0, _0801F964 @ =gAbsentBankFlags\n\
- ldrb r1, [r0]\n\
- ldr r0, _0801F968 @ =gBitTable\n\
- mov r12, r0\n\
- ldr r2, _0801F954 @ =gActiveBank\n\
- mov r8, r2\n\
- ldrb r2, [r2]\n\
- lsls r0, r2, 2\n\
- add r0, r12\n\
- ldr r0, [r0]\n\
- ands r1, r0\n\
- cmp r1, 0\n\
- beq _0801F886\n\
- b _0801FB1C\n\
-_0801F886:\n\
- ldr r3, _0801F96C @ =gBattleMons\n\
- mov r10, r3\n\
- movs r5, 0x58\n\
- mov r9, r5\n\
- mov r0, r9\n\
- muls r0, r2\n\
- add r0, r10\n\
- ldrh r3, [r0, 0x28]\n\
- cmp r3, 0\n\
- beq _0801F89C\n\
- b _0801FB1C\n\
-_0801F89C:\n\
- ldr r2, _0801F970 @ =0x02000000\n\
- lsls r1, r7, 1\n\
- ldr r5, _0801F974 @ =0x000160ac\n\
- adds r0, r1, r5\n\
- adds r0, r2\n\
- strb r3, [r0]\n\
- ldr r0, _0801F978 @ =0x000160ad\n\
- adds r1, r0\n\
- adds r1, r2\n\
- strb r3, [r1]\n\
- lsls r1, r7, 2\n\
- adds r5, 0x54\n\
- adds r0, r1, r5\n\
- adds r0, r2\n\
- strb r3, [r0]\n\
- adds r5, 0x1\n\
- adds r0, r1, r5\n\
- adds r0, r2\n\
- strb r3, [r0]\n\
- adds r5, 0x1\n\
- adds r0, r1, r5\n\
- adds r0, r2\n\
- strb r3, [r0]\n\
- ldr r0, _0801F97C @ =0x00016103\n\
- adds r1, r0\n\
- adds r1, r2\n\
- strb r3, [r1]\n\
- ldr r5, _0801F980 @ =gHitMarker\n\
- mov r1, r8\n\
- ldrb r0, [r1]\n\
- lsls r0, 2\n\
- add r0, r12\n\
- ldr r1, [r0]\n\
- lsls r1, 28\n\
- ldr r0, [r5]\n\
- orrs r0, r1\n\
- str r0, [r5]\n\
- ldr r0, [r6]\n\
- adds r0, 0x7\n\
- bl b_movescr_stack_push\n\
- str r4, [r6]\n\
- mov r2, r8\n\
- ldrb r0, [r2]\n\
- bl GetBankSide\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- bne _0801F9B0\n\
- ldr r0, [r5]\n\
- movs r1, 0x80\n\
- lsls r1, 15\n\
- orrs r0, r1\n\
- str r0, [r5]\n\
- ldr r1, _0801F984 @ =gBattleResults\n\
- ldrb r0, [r1]\n\
- cmp r0, 0xFE\n\
- bhi _0801F914\n\
- adds r0, 0x1\n\
- strb r0, [r1]\n\
-_0801F914:\n\
- mov r0, r9\n\
- muls r0, r7\n\
- add r0, r10\n\
- adds r3, r0, 0\n\
- adds r3, 0x2A\n\
- mov r4, r8\n\
- ldrb r2, [r4]\n\
- mov r0, r9\n\
- muls r0, r2\n\
- add r0, r10\n\
- adds r1, r0, 0\n\
- adds r1, 0x2A\n\
- ldrb r0, [r3]\n\
- ldrb r5, [r1]\n\
- cmp r0, r5\n\
- bls _0801F9CC\n\
- ldrb r1, [r1]\n\
- subs r0, r1\n\
- cmp r0, 0x1D\n\
- ble _0801F990\n\
- ldr r1, _0801F988 @ =gBattlePartyID\n\
- lsls r0, r2, 1\n\
- adds r0, r1\n\
- ldrh r1, [r0]\n\
- movs r0, 0x64\n\
- muls r0, r1\n\
- ldr r1, _0801F98C @ =gPlayerParty\n\
- adds r0, r1\n\
- movs r1, 0x8\n\
- bl AdjustFriendship\n\
- b _0801F9CC\n\
- .align 2, 0\n\
-_0801F954: .4byte gActiveBank\n\
-_0801F958: .4byte gBankTarget\n\
-_0801F95C: .4byte gBankAttacker\n\
-_0801F960: .4byte gUnknown_081D8C65\n\
-_0801F964: .4byte gAbsentBankFlags\n\
-_0801F968: .4byte gBitTable\n\
-_0801F96C: .4byte gBattleMons\n\
-_0801F970: .4byte 0x02000000\n\
-_0801F974: .4byte 0x000160ac\n\
-_0801F978: .4byte 0x000160ad\n\
-_0801F97C: .4byte 0x00016103\n\
-_0801F980: .4byte gHitMarker\n\
-_0801F984: .4byte gBattleResults\n\
-_0801F988: .4byte gBattlePartyID\n\
-_0801F98C: .4byte gPlayerParty\n\
-_0801F990:\n\
- ldr r1, _0801F9A8 @ =gBattlePartyID\n\
- lsls r0, r2, 1\n\
- adds r0, r1\n\
- ldrh r1, [r0]\n\
- movs r0, 0x64\n\
- muls r0, r1\n\
- ldr r1, _0801F9AC @ =gPlayerParty\n\
- adds r0, r1\n\
- movs r1, 0x6\n\
- bl AdjustFriendship\n\
- b _0801F9CC\n\
- .align 2, 0\n\
-_0801F9A8: .4byte gBattlePartyID\n\
-_0801F9AC: .4byte gPlayerParty\n\
-_0801F9B0:\n\
- ldr r1, _0801FAE0 @ =gBattleResults\n\
- ldrb r0, [r1, 0x1]\n\
- cmp r0, 0xFE\n\
- bhi _0801F9BC\n\
- adds r0, 0x1\n\
- strb r0, [r1, 0x1]\n\
-_0801F9BC:\n\
- ldr r2, _0801FAE4 @ =gActiveBank\n\
- ldrb r0, [r2]\n\
- mov r3, r9\n\
- muls r3, r0\n\
- adds r0, r3, 0\n\
- add r0, r10\n\
- ldrh r0, [r0]\n\
- strh r0, [r1, 0x20]\n\
-_0801F9CC:\n\
- ldr r0, _0801FAE8 @ =gHitMarker\n\
- ldr r0, [r0]\n\
- movs r1, 0x40\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0801FA02\n\
- ldr r6, _0801FAEC @ =gBattleMons\n\
- ldr r0, _0801FAF0 @ =gBankAttacker\n\
- ldrb r0, [r0]\n\
- movs r5, 0x58\n\
- muls r0, r5\n\
- adds r0, r6\n\
- ldrh r0, [r0, 0x28]\n\
- cmp r0, 0\n\
- beq _0801FA02\n\
- ldr r4, _0801FAF4 @ =gBattlescriptCurrInstr\n\
- ldr r0, [r4]\n\
- bl b_movescr_stack_push\n\
- ldr r1, _0801FAF8 @ =gBattleMoveDamage\n\
- adds r0, r7, 0\n\
- muls r0, r5\n\
- adds r0, r6\n\
- ldrh r0, [r0, 0x28]\n\
- str r0, [r1]\n\
- ldr r0, _0801FAFC @ =gUnknown_081D9156\n\
- str r0, [r4]\n\
-_0801FA02:\n\
- ldr r1, _0801FB00 @ =gStatuses3\n\
- ldr r6, _0801FB04 @ =gBankTarget\n\
- ldrb r0, [r6]\n\
- lsls r0, 2\n\
- adds r0, r1\n\
- ldr r0, [r0]\n\
- movs r1, 0x80\n\
- lsls r1, 7\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _0801FA1A\n\
- b _0801FB22\n\
-_0801FA1A:\n\
- ldr r0, _0801FAE8 @ =gHitMarker\n\
- ldr r5, [r0]\n\
- movs r0, 0x80\n\
- lsls r0, 17\n\
- ands r5, r0\n\
- cmp r5, 0\n\
- bne _0801FB22\n\
- ldr r4, _0801FAF0 @ =gBankAttacker\n\
- mov r8, r4\n\
- ldrb r0, [r4]\n\
- bl GetBankSide\n\
- adds r4, r0, 0\n\
- ldrb r0, [r6]\n\
- bl GetBankSide\n\
- lsls r4, 24\n\
- lsls r0, 24\n\
- cmp r4, r0\n\
- beq _0801FB22\n\
- ldr r0, _0801FAEC @ =gBattleMons\n\
- mov r9, r0\n\
- mov r1, r8\n\
- ldrb r2, [r1]\n\
- movs r7, 0x58\n\
- adds r3, r2, 0\n\
- muls r3, r7\n\
- adds r0, r3, r0\n\
- ldrh r0, [r0, 0x28]\n\
- cmp r0, 0\n\
- beq _0801FB22\n\
- ldr r0, _0801FB08 @ =gCurrentMove\n\
- ldrh r0, [r0]\n\
- cmp r0, 0xA5\n\
- beq _0801FB22\n\
- ldr r1, _0801FB0C @ =0x02000000\n\
- ldr r4, _0801FB10 @ =0x0001608c\n\
- adds r0, r2, r4\n\
- adds r0, r1\n\
- ldrb r4, [r0]\n\
- adds r0, r4, r3\n\
- mov r6, r9\n\
- adds r6, 0x24\n\
- adds r0, r6\n\
- strb r5, [r0]\n\
- ldr r5, _0801FAF4 @ =gBattlescriptCurrInstr\n\
- ldr r0, [r5]\n\
- bl b_movescr_stack_push\n\
- ldr r0, _0801FB14 @ =gUnknown_081D9468\n\
- str r0, [r5]\n\
- ldr r5, _0801FAE4 @ =gActiveBank\n\
- mov r1, r8\n\
- ldrb r0, [r1]\n\
- strb r0, [r5]\n\
- adds r1, r4, 0\n\
- adds r1, 0x9\n\
- lsls r1, 24\n\
- lsrs r1, 24\n\
- ldrb r0, [r5]\n\
- muls r0, r7\n\
- adds r0, r6\n\
- adds r0, r4\n\
- str r0, [sp]\n\
- movs r0, 0\n\
- movs r2, 0\n\
- movs r3, 0x1\n\
- bl EmitSetAttributes\n\
- ldrb r0, [r5]\n\
- bl MarkBufferBankForExecution\n\
- ldr r1, _0801FB18 @ =gBattleTextBuff1\n\
- movs r0, 0xFD\n\
- strb r0, [r1]\n\
- movs r0, 0x2\n\
- strb r0, [r1, 0x1]\n\
- lsls r4, 1\n\
- mov r2, r8\n\
- ldrb r0, [r2]\n\
- muls r0, r7\n\
- adds r0, r4, r0\n\
- mov r2, r9\n\
- adds r2, 0xC\n\
- adds r0, r2\n\
- ldrh r0, [r0]\n\
- strb r0, [r1, 0x2]\n\
- mov r3, r8\n\
- ldrb r0, [r3]\n\
- muls r0, r7\n\
- adds r4, r0\n\
- adds r4, r2\n\
- ldrh r0, [r4]\n\
- lsrs r0, 8\n\
- strb r0, [r1, 0x3]\n\
- movs r0, 0xFF\n\
- strb r0, [r1, 0x4]\n\
- b _0801FB22\n\
- .align 2, 0\n\
-_0801FAE0: .4byte gBattleResults\n\
-_0801FAE4: .4byte gActiveBank\n\
-_0801FAE8: .4byte gHitMarker\n\
-_0801FAEC: .4byte gBattleMons\n\
-_0801FAF0: .4byte gBankAttacker\n\
-_0801FAF4: .4byte gBattlescriptCurrInstr\n\
-_0801FAF8: .4byte gBattleMoveDamage\n\
-_0801FAFC: .4byte gUnknown_081D9156\n\
-_0801FB00: .4byte gStatuses3\n\
-_0801FB04: .4byte gBankTarget\n\
-_0801FB08: .4byte gCurrentMove\n\
-_0801FB0C: .4byte 0x02000000\n\
-_0801FB10: .4byte 0x0001608c\n\
-_0801FB14: .4byte gUnknown_081D9468\n\
-_0801FB18: .4byte gBattleTextBuff1\n\
-_0801FB1C:\n\
- ldr r0, [r6]\n\
- adds r0, 0x7\n\
- str r0, [r6]\n\
-_0801FB22:\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\n");
+ u8 *r4;
+
+ if (gBattlescriptCurrInstr[2] != 0)
+ {
+ gActiveBank = GetBattleBank(gBattlescriptCurrInstr[1]);
+ if (gHitMarker & HITMARKER_FAINTED(gActiveBank))
+ {
+ r4 = BSScriptReadPtr(gBattlescriptCurrInstr + 3);
+
+ b_movescr_stack_pop_cursor();
+ gBattlescriptCurrInstr = r4;
+ gSideAffecting[GetBankSide(gActiveBank)] &= ~SIDE_STATUS_SPIKES_DAMAGED;
+ }
+ else
+ {
+ gBattlescriptCurrInstr += 7;
+ }
+ }
+ else
+ {
+ u8 bank;
+
+ if (gBattlescriptCurrInstr[1] == 1)
+ {
+ gActiveBank = gBankAttacker;
+ bank = gBankTarget;
+ r4 = gUnknown_081D8C58;
+ }
+ else
+ {
+ gActiveBank = gBankTarget;
+ bank = gBankAttacker;
+ r4 = gUnknown_081D8C65;
+ }
+ if (!(gAbsentBankFlags & gBitTable[gActiveBank])
+ && gBattleMons[gActiveBank].hp == 0)
+ {
+ ewram[0x160AC + bank * 2 + 0] = 0;
+ ewram[0x160AC + bank * 2 + 1] = 0;
+ ewram[0x16100 + bank * 4 + 0] = 0;
+ ewram[0x16100 + bank * 4 + 1] = 0;
+ ewram[0x16100 + bank * 4 + 2] = 0;
+ ewram[0x16100 + bank * 4 + 3] = 0;
+
+ gHitMarker |= HITMARKER_FAINTED(gActiveBank);
+ b_movescr_stack_push(gBattlescriptCurrInstr + 7);
+ gBattlescriptCurrInstr = r4;
+ if (GetBankSide(gActiveBank) == 0)
+ {
+ gHitMarker |= HITMARKER_x400000;
+ if (gBattleResults.playerFaintCounter < 0xFF)
+ gBattleResults.playerFaintCounter++;
+ if (gBattleMons[bank].level > gBattleMons[gActiveBank].level)
+ {
+ if (gBattleMons[bank].level - gBattleMons[gActiveBank].level > 0x1D)
+ AdjustFriendship(&gPlayerParty[gBattlePartyID[gActiveBank]], 8);
+ else
+ AdjustFriendship(&gPlayerParty[gBattlePartyID[gActiveBank]], 6);
+ }
+ }
+ else
+ {
+ if (gBattleResults.opponentFaintCounter < 0xFF)
+ gBattleResults.opponentFaintCounter++;
+ gBattleResults.lastOpponentSpecies = gBattleMons[gActiveBank].species;
+ }
+ if ((gHitMarker & HITMARKER_DESTINYBOND) && gBattleMons[gBankAttacker].hp != 0)
+ {
+ b_movescr_stack_push(gBattlescriptCurrInstr);
+ gBattleMoveDamage = gBattleMons[bank].hp;
+ gBattlescriptCurrInstr = gUnknown_081D9156;
+ }
+ if ((gStatuses3[gBankTarget] & STATUS3_GRUDGE)
+ && !(gHitMarker & HITMARKER_GRUDGE)
+ && GetBankSide(gBankAttacker) != GetBankSide(gBankTarget)
+ && gBattleMons[gBankAttacker].hp != 0
+ && gCurrentMove != MOVE_STRUGGLE)
+ {
+ u8 moveIndex = ewram[0x1608C + gBankAttacker];
+
+ gBattleMons[gBankAttacker].pp[moveIndex] = 0;
+ b_movescr_stack_push(gBattlescriptCurrInstr);
+ gBattlescriptCurrInstr = gUnknown_081D9468;
+ gActiveBank = gBankAttacker;
+ EmitSetAttributes(0, moveIndex + 9, 0, 1, &gBattleMons[gActiveBank].pp[moveIndex]);
+ MarkBufferBankForExecution(gActiveBank);
+
+ gBattleTextBuff1[0] = 0xFD;
+ gBattleTextBuff1[1] = 2;
+ gBattleTextBuff1[2] = gBattleMons[gBankAttacker].moves[moveIndex];
+ gBattleTextBuff1[3] = gBattleMons[gBankAttacker].moves[moveIndex] >> 8;
+ gBattleTextBuff1[4] = EOS;
+ }
+ }
+ else
+ {
+ gBattlescriptCurrInstr += 7;
+ }
+ }
}
static void atk1A_faint_animation(void)
@@ -5634,7 +5080,7 @@ static void atk1A_faint_animation(void)
if (gBattleExecBuffer == 0)
{
gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1));
- EmitFaintAnimation(0);
+ Emitcmd10(0);
MarkBufferBankForExecution(gActiveBank);
gBattlescriptCurrInstr += 2;
}
@@ -5832,13 +5278,14 @@ static void atk23_getexp(void)
else
{
BATTLE_STRUCT->atk23StateTracker++;
- unk_2000000[0x16113] |= gBitTable[gBattlePartyID[gBank1]];
+ ((u8*)ewram)[0x16113] |= gBitTable[gBattlePartyID[gBank1]];
}
break;
case 1: //calculate experience points to redistribute
{
- int via_sent_in = 0, i;
+ int via_sent_in = 0;
u16 calculatedExp;
+ int i;
for (i = 0; i < 6; i++)
{
u16 item;
@@ -5894,15 +5341,14 @@ static void atk23_getexp(void)
BATTLE_STRUCT->sentInPokes >>= 1;
tracker = &BATTLE_STRUCT->atk23StateTracker;
zero = 0;
- goto LABEL;
+ *tracker = 5; //increment looper
+ gBattleMoveDamage = zero; //used for exp
}
else if (GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_LEVEL) == 100)
{
-
BATTLE_STRUCT->sentInPokes >>= 1;
tracker = &BATTLE_STRUCT->atk23StateTracker;
zero = 0;
- LABEL:
*tracker = 5; //increment looper
gBattleMoveDamage = zero; //used for exp
}
@@ -5937,7 +5383,9 @@ static void atk23_getexp(void)
stringID = 0x14A;
}
else
- stringID = 0x149;
+ {
+ stringID = 0x149;
+ }
//get exp getter bank
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
@@ -5962,12 +5410,13 @@ static void atk23_getexp(void)
gBattleTextBuff1[3] = BATTLE_STRUCT->expGetterID;
gBattleTextBuff1[4] = 0xFF;
- //buffer 'gained' or 'gained a boosted'
- gBattleTextBuff2[0] = 0xFD;
- gBattleTextBuff2[1] = 0;
- gBattleTextBuff2[2] = sBYTE0_32(stringID);
- gBattleTextBuff2[3] = sBYTE1_32(stringID);
- gBattleTextBuff2[4] = 0xFF;
+ //buffer 'gained' or 'gained a boosted'
+ gBattleTextBuff2[0] = 0xFD;
+ gBattleTextBuff2[1] = 0;
+ gBattleTextBuff2[2] = stringID;
+ stringID = (stringID >> 8) & (0xFF); //this does not want to cooperate
+ gBattleTextBuff2[3] = stringID;
+ gBattleTextBuff2[4] = 0xFF;
//buffer exp number
gBattleTextBuff3[0] = 0xFD;
@@ -5994,7 +5443,8 @@ static void atk23_getexp(void)
gBattleBufferB[BATTLE_STRUCT->expGetterBank][0] = 0;
if (GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_HP) && GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_LEVEL) != 100)
{
- BATTLE_STRUCT->beforeLvlUp[0] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_MAX_HP); //doesnt match
+ // Doesn't match.
+ BATTLE_STRUCT->beforeLvlUp[0] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_MAX_HP);
BATTLE_STRUCT->beforeLvlUp[1] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_ATK);
BATTLE_STRUCT->beforeLvlUp[2] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_DEF);
BATTLE_STRUCT->beforeLvlUp[3] = GetMonData(&gPlayerParty[BATTLE_STRUCT->expGetterID], MON_DATA_SPD);
@@ -8022,9 +7472,39 @@ _080214AE:\n\
#ifdef NONMATCHING
static void atk46_playanimation2(void)
{
-
+ u8 arg1;
+ u8* arg2;
+ u16* arg3;
+ u32 something;
+
+ arg1 = BSScriptRead8(gBattlescriptCurrInstr + 1);
+ gActiveBank = GetBattleBank(arg1);
+ arg2 = BS2ScriptReadPtr(gBattlescriptCurrInstr + 2);
+ arg3 = BS2ScriptReadPtr(gBattlescriptCurrInstr + 6);
+
+ if (*arg2 == 1 || *arg2 == 0x11 || *arg2 == 2)
+ {
+ EmitBattleAnimation(0, *arg2, *arg3);
+ MarkBufferBankForExecution(gActiveBank);
+ gBattlescriptCurrInstr += 10;
+ return;
+ }
+ if ((gHitMarker & 0x80))
+ {
+ something = (u32)(gBattlescriptCurrInstr + 10);
+ }
+ else
+ {
+ u8 yeah = *arg2 - 10;
+ if (yeah < 4 || (gStatuses3[gActiveBank] & 0x000400C0) == 0)
+ {
+ EmitBattleAnimation(0, *arg2, *arg3);
+ MarkBufferBankForExecution(gActiveBank);
+ }
+ something = (u32)(gBattlescriptCurrInstr + 10);
+ }
+ gBattlescriptCurrInstr = (u8*)something;
}
-
#else
__attribute__((naked))
static void atk46_playanimation2(void)
@@ -10125,7 +9605,7 @@ static void atk4E_switchin_anim(void)
GetSetPokedexFlag(SpeciesToNationalPokedexNum(gBattleMons[gActiveBank].species), 2);
}
gAbsentBankFlags &= ~(gBitTable[gActiveBank]);
- EmitSwitchInAnim(0, gBattlePartyID[gActiveBank], BSScriptRead8(gBattlescriptCurrInstr + 2));
+ EmitSendOutPoke(0, gBattlePartyID[gActiveBank], BSScriptRead8(gBattlescriptCurrInstr + 2));
MarkBufferBankForExecution(gActiveBank);
gBattlescriptCurrInstr += 3;
}
@@ -10446,7 +9926,7 @@ _08022BC4:\n\
bics r0, r1\n\
str r0, [r2]\n\
movs r0, 0\n\
- bl dp01_build_cmdbuf_x2A_2A_2A_2A\n\
+ bl Emitcmd42\n\
ldrb r0, [r4]\n\
bl MarkBufferBankForExecution\n\
b _08022C7E\n\
@@ -10531,7 +10011,7 @@ _08022C7E:\n\
bics r0, r1\n\
str r0, [r2]\n\
movs r0, 0\n\
- bl dp01_build_cmdbuf_x2A_2A_2A_2A\n\
+ bl Emitcmd42\n\
ldrb r0, [r4]\n\
bl MarkBufferBankForExecution\n\
b _08022D40\n\
@@ -10615,7 +10095,7 @@ _08022D40:\n\
bics r0, r1\n\
str r0, [r2]\n\
movs r0, 0\n\
- bl dp01_build_cmdbuf_x2A_2A_2A_2A\n\
+ bl Emitcmd42\n\
ldrb r0, [r4]\n\
bl MarkBufferBankForExecution\n\
b _08022DF6\n\
@@ -10702,7 +10182,7 @@ _08022DF6:\n\
bics r0, r1\n\
str r0, [r2]\n\
movs r0, 0\n\
- bl dp01_build_cmdbuf_x2A_2A_2A_2A\n\
+ bl Emitcmd42\n\
ldrb r0, [r4]\n\
bl MarkBufferBankForExecution\n\
b _08022EB8\n\
@@ -10900,7 +10380,7 @@ _08022F92:\n\
bics r0, r1\n\
str r0, [r7]\n\
movs r0, 0\n\
- bl dp01_build_cmdbuf_x2A_2A_2A_2A\n\
+ bl Emitcmd42\n\
ldrb r0, [r6]\n\
bl MarkBufferBankForExecution\n\
b _0802303A\n\
@@ -10977,7 +10457,7 @@ _0802303A:\n\
bics r0, r1\n\
str r0, [r2]\n\
movs r0, 0\n\
- bl dp01_build_cmdbuf_x2A_2A_2A_2A\n\
+ bl Emitcmd42\n\
ldrb r0, [r5]\n\
bl MarkBufferBankForExecution\n\
b _080230EE\n\
@@ -11426,7 +10906,7 @@ static void atk54_effectiveness_sound(void)
static void atk55_play_sound(void)
{
gActiveBank = gBankAttacker;
- EmitPlaySound(0, BS2ScriptRead16(gBattlescriptCurrInstr + 1));
+ Emitcmd44(0, BS2ScriptRead16(gBattlescriptCurrInstr + 1));
MarkBufferBankForExecution(gActiveBank);
gBattlescriptCurrInstr += 3;
}
@@ -11442,7 +10922,7 @@ static void atk56_fainting_cry(void)
static void atk57(void)
{
gActiveBank = GetBankByPlayerAI(0);
- dp01_build_cmdbuf_x37_a(0, gBattleOutcome);
+ Emitcmd55(0, gBattleOutcome);
MarkBufferBankForExecution(gActiveBank);
gBattlescriptCurrInstr += 1;
}
@@ -11460,9 +10940,9 @@ void atk59_learnmove_inbattle(void)
u8* loc1 = BSScriptReadPtr(gBattlescriptCurrInstr + 1);
u8* loc2 = BSScriptReadPtr(gBattlescriptCurrInstr + 5);
- u16 ret = sub_803B7C8(&gPlayerParty[BATTLE_STRUCT->expGetterID], BSScriptRead8(gBattlescriptCurrInstr + 9));
+ u16 ret = MonTryLearningNewMove(&gPlayerParty[BATTLE_STRUCT->expGetterID], BSScriptRead8(gBattlescriptCurrInstr + 9));
while (ret == 0xFFFE)
- ret = sub_803B7C8(&gPlayerParty[BATTLE_STRUCT->expGetterID], 0);
+ ret = MonTryLearningNewMove(&gPlayerParty[BATTLE_STRUCT->expGetterID], 0);
if (ret == 0)
{
@@ -11549,7 +11029,7 @@ static void atk5A(void)
case 2:
if (!gPaletteFade.active)
{
- sub_809D9F0(gPlayerParty, BATTLE_STRUCT->expGetterID, gPlayerPartyCount - 1, ReshowBattleScreenAfterMenu, word_2024E82);
+ sub_809D9F0(gPlayerParty, BATTLE_STRUCT->expGetterID, gPlayerPartyCount - 1, ReshowBattleScreenAfterMenu, gMoveToLearn);
BATTLE_STRUCT->atk5A_StateTracker++;
}
break;
@@ -11584,18 +11064,18 @@ static void atk5A(void)
}
ptr[0] = 0xFF;
RemoveMonPPBonus(&gPlayerParty[BATTLE_STRUCT->expGetterID], move_pos);
- SetMonMoveSlot(&gPlayerParty[BATTLE_STRUCT->expGetterID], word_2024E82, move_pos);
+ SetMonMoveSlot(&gPlayerParty[BATTLE_STRUCT->expGetterID], gMoveToLearn, move_pos);
if (gBattlePartyID[0] == BATTLE_STRUCT->expGetterID && !(gBattleMons[0].status2 & STATUS2_TRANSFORMED)
&& !(gDisableStructs[0].unk18_b & gBitTable[move_pos]))
{
RemoveBattleMonPPBonus(&gBattleMons[0], move_pos);
- SetBattleMonMoveSlot(&gBattleMons[0], word_2024E82, move_pos);
+ SetBattleMonMoveSlot(&gBattleMons[0], gMoveToLearn, move_pos);
}
if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE && gBattlePartyID[2] == BATTLE_STRUCT->expGetterID && !(gBattleMons[2].status2 & STATUS2_TRANSFORMED)
&& !(gDisableStructs[2].unk18_b & gBitTable[move_pos]))
{
RemoveBattleMonPPBonus(&gBattleMons[2], move_pos);
- SetBattleMonMoveSlot(&gBattleMons[2], word_2024E82, move_pos);
+ SetBattleMonMoveSlot(&gBattleMons[2], gMoveToLearn, move_pos);
}
}
}
@@ -11717,7 +11197,7 @@ static void atk5D_getmoneyreward(void)
money_to_give = 1 * gTrainerMoney[i * 4 + 1] * money_to_give;
}
- sub_80B79B8(&gSaveBlock1.money, money_to_give);
+ AddMoney(&gSaveBlock1.money, money_to_give);
gBattleTextBuff1[0] = 0xFD;
gBattleTextBuff1[1] = 1;
gBattleTextBuff1[2] = 4;
@@ -11889,7 +11369,7 @@ _0802413C:\n\
_08024140:\n\
mov r0, r8\n\
adds r1, r4, 0\n\
- bl sub_80B79B8\n\
+ bl AddMoney\n\
ldr r1, _0802418C @ =gBattleTextBuff1\n\
movs r0, 0xFD\n\
strb r0, [r1]\n\
@@ -12011,7 +11491,7 @@ static void atk61_8025BA4(void)
hpStatus[i].status = GetMonData(&party[i], MON_DATA_STATUS);
}
}
- dp01_build_cmdbuf_x30_TODO(0, (u8*)(hpStatus), 1);
+ Emitcmd48(0, (u8*)(hpStatus), 1);
MarkBufferBankForExecution(gActiveBank);
gBattlescriptCurrInstr += 2;
}
@@ -12019,7 +11499,7 @@ static void atk61_8025BA4(void)
static void atk62_08025C6C(void)
{
gActiveBank = GetBattleBank(BSScriptRead8(gBattlescriptCurrInstr + 1));
- dp01_build_cmdbuf_x31_31_31_31(0);
+ Emitcmd49(0);
MarkBufferBankForExecution(gActiveBank);
gBattlescriptCurrInstr += 2;
}
@@ -12653,8 +12133,8 @@ void sub_8024CEC(void)
{
gBattleTextBuff2[0] = 0xFD;
gBattleTextBuff2[1] = 2;
- gBattleTextBuff2[2] = (word_2024E82);
- gBattleTextBuff2[3] = uBYTE1_16(word_2024E82);
+ gBattleTextBuff2[2] = (gMoveToLearn);
+ gBattleTextBuff2[3] = uBYTE1_16(gMoveToLearn);
gBattleTextBuff2[4] = 0xFF;
}
@@ -14186,7 +13666,7 @@ static void atk91_givepaydaymoney(void)
{
if (!(gBattleTypeFlags & BATTLE_TYPE_LINK) && gPaydayMoney)
{
- sub_80B79B8(&gSaveBlock1.money, gPaydayMoney * BATTLE_STRUCT->moneyMultiplier);
+ AddMoney(&gSaveBlock1.money, gPaydayMoney * BATTLE_STRUCT->moneyMultiplier);
gBattleTextBuff1[0] = 0xFD;
gBattleTextBuff1[1] = 1;
gBattleTextBuff1[2] = 2;
@@ -17570,28 +17050,28 @@ static void atkE4_getsecretpowereffect(void)
{
switch (gBattleTerrain)
{
- case 0:
+ case BATTLE_TERRAIN_GRASS:
gBattleCommunication[MOVE_EFFECT_BYTE] = 2;
break;
- case 1:
+ case BATTLE_TERRAIN_LONG_GRASS:
gBattleCommunication[MOVE_EFFECT_BYTE] = 1;
break;
- case 2:
+ case BATTLE_TERRAIN_SAND:
gBattleCommunication[MOVE_EFFECT_BYTE] = 27;
break;
- case 3:
+ case BATTLE_TERRAIN_UNDERWATER:
gBattleCommunication[MOVE_EFFECT_BYTE] = 23;
break;
- case 4:
+ case BATTLE_TERRAIN_WATER:
gBattleCommunication[MOVE_EFFECT_BYTE] = 22;
break;
- case 5:
+ case BATTLE_TERRAIN_POND:
gBattleCommunication[MOVE_EFFECT_BYTE] = 24;
break;
- case 6:
+ case BATTLE_TERRAIN_MOUNTAIN:
gBattleCommunication[MOVE_EFFECT_BYTE] = 7;
break;
- case 7:
+ case BATTLE_TERRAIN_CAVE:
gBattleCommunication[MOVE_EFFECT_BYTE] = 8;
break;
default:
@@ -17789,13 +17269,13 @@ void atkEF_pokeball_catch_calculation(void)
gBankTarget = gBankAttacker ^ 1;
if (gBattleTypeFlags & BATTLE_TYPE_TRAINER)
{
- EmitBallThrowAnim(0, 5);
+ EmitBallThrow(0, 5);
MarkBufferBankForExecution(gActiveBank);
gBattlescriptCurrInstr = BattleScript_TrainerBallBlock;
}
else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL)
{
- EmitBallThrowAnim(0, 4);
+ EmitBallThrow(0, 4);
MarkBufferBankForExecution(gActiveBank);
gBattlescriptCurrInstr = BattleScript_WallyBallThrow;
}
@@ -17818,7 +17298,7 @@ void atkEF_pokeball_catch_calculation(void)
ball_multiplier = 10;
break;
case ITEM_DIVE_BALL:
- if (sav1_map_get_light_level() == 5)
+ if (Overworld_GetMapTypeOfSaveblockLocation() == 5)
ball_multiplier = 35;
else
ball_multiplier = 10;
@@ -17873,7 +17353,7 @@ void atkEF_pokeball_catch_calculation(void)
}
if (odds > 254) //poke caught
{
- EmitBallThrowAnim(0, 4);
+ EmitBallThrow(0, 4);
MarkBufferBankForExecution(gActiveBank);
gBattlescriptCurrInstr = BattleScript_SuccessBallThrow;
SetMonData(&gEnemyParty[gBattlePartyID[gBankTarget]], MON_DATA_POKEBALL, (const void*) &gLastUsedItem);
@@ -17890,7 +17370,7 @@ void atkEF_pokeball_catch_calculation(void)
for (shakes = 0; shakes < 4 && Random() < odds; shakes++) {}
if (gLastUsedItem == ITEM_MASTER_BALL)
shakes = 4; //why calculate the shakes before that check?
- EmitBallThrowAnim(0, shakes);
+ EmitBallThrow(0, shakes);
MarkBufferBankForExecution(gActiveBank);
if (shakes == 4) //poke caught, copy of the code above
{
diff --git a/src/battle_6.c b/src/battle_6.c
deleted file mode 100644
index 66b08f82e..000000000
--- a/src/battle_6.c
+++ /dev/null
@@ -1,1507 +0,0 @@
-#include "global.h"
-#include "battle.h"
-#include "battle_interface.h"
-#include "battle_message.h"
-#include "data2.h"
-#include "menu_cursor.h"
-#include "palette.h"
-#include "pokemon.h"
-#include "rom3.h"
-#include "songs.h"
-#include "sound.h"
-#include "sprite.h"
-#include "string_util.h"
-#include "task.h"
-#include "text.h"
-#include "util.h"
-
-//Possibly PokemonSubstruct1
-struct UnknownStruct3
-{
- u16 moves[4];
- u8 pp[4];
- u8 ppBonuses;
-};
-
-extern u16 gUnknown_030042A4;
-extern u16 gUnknown_030042A0;
-
-extern struct Window gUnknown_03004210;
-
-extern void (*gBattleBankFunc[])(void);
-
-extern u8 gActiveBank;
-extern u8 gActionSelectionCursor[];
-extern u8 gDisplayedStringBattle[];
-extern u8 gMoveSelectionCursor[];
-extern u8 gBattleBufferA[][0x200];
-extern u8 gBankInMenu;
-extern u16 gBattlePartyID[];
-extern u8 gHealthboxIDs[];
-extern u8 gDoingBattleAnim;
-extern u8 gObjectBankIDs[];
-extern u16 gBattleTypeFlags;
-extern u8 gBattleOutcome;
-extern void (*gAnimScriptCallback)(void);
-extern bool8 gAnimScriptActive;
-extern u16 gMovePowerMoveAnim;
-extern u32 gMoveDmgMoveAnim;
-extern u8 gHappinessMoveAnim;
-extern u16 gWeatherMoveAnim;
-extern u32 *gDisableStructMoveAnim;
-extern u32 gPID_perBank[];
-extern u8 gBattleMonForms[];
-extern u16 gUnknown_02024DE8;
-extern u8 gUnknown_02024E68[];
-extern struct SpriteTemplate gUnknown_02024E8C;
-extern u8 gUnknown_0202F7C4;
-extern u8 gUnknown_02038470[];
-extern u16 gUnknown_030041B0;
-extern u16 gUnknown_030041B4;
-extern u16 gUnknown_030041B8;
-extern u16 gUnknown_03004280;
-extern u16 gUnknown_03004288;
-extern u16 gUnknown_030042A4;
-extern u16 gUnknown_030042C0;
-extern u8 gUnknown_03004344;
-extern u8 gUnknown_0300434C[];
-
-extern const u8 gUnknown_08400CA8[];
-extern const u8 gUnknown_08400CF3[];
-extern const u8 gUnknown_08400D38[];
-
-#if ENGLISH
-#define SUB_803037C_TILE_DATA_OFFSET 440
-#elif GERMAN
-#define SUB_803037C_TILE_DATA_OFFSET 444
-#endif
-
-extern void sub_802C68C(void);
-extern void sub_802E1B0(void);
-extern void sub_802E3B4();
-extern void sub_802E220();
-extern void sub_802E2D4();
-extern void sub_802E004(void);
-extern void sub_802DF30(void);
-extern void BattleMusicStop(void);
-extern void PlayerBufferExecCompleted(void);
-extern void bx_t1_healthbar_update(void);
-extern void nullsub_91(void);
-extern void sub_802D924(u8);
-extern void sub_802E434(void);
-extern bool8 mplay_80342A4(u8);
-extern void move_anim_start_t2_for_situation();
-extern void bx_blink_t1(void);
-extern void sub_8047858();
-extern u8 GetBankSide(u8);
-extern void sub_80E43C0();
-extern void oamt_add_pos2_onto_pos1();
-extern void sub_8078B34(struct Sprite *);
-extern void StoreSpriteCallbackInData6();
-extern void sub_80318FC();
-extern bool8 IsDoubleBattle(void);
-extern void sub_802D500(void);
-extern void dp11b_obj_free();
-extern bool8 AnimBankSpriteExists(u8);
-extern bool8 move_anim_start_t3();
-extern void sub_802E460(void);
-extern void b_link_standby_message(void);
-extern void sub_802D18C(void);
-extern void sub_802DF18(void);
-extern void BufferStringBattle();
-extern void sub_80326EC();
-extern void ExecuteMoveAnim();
-extern void sub_8031F24(void);
-extern void sub_80324BC();
-extern u8 sub_8031720();
-extern void bx_wait_t1(void);
-extern u8 GetBankByPlayerAI(u8);
-extern void sub_802DE10(void);
-extern void sub_80105EC(struct Sprite *);
-extern void sub_802D274(void);
-extern void sub_802D23C(void);
-extern u8 GetBankIdentity(u8);
-extern void sub_8031AF4();
-extern void sub_80313A0(struct Sprite *);
-extern void sub_802D204(void);
-extern u8 sub_8079E90();
-extern void sub_802DEAC(void);
-extern void sub_80312F0(struct Sprite *);
-extern u8 sub_8077ABC();
-extern u8 sub_8077F68();
-extern u8 sub_8046400();
-extern void sub_802D798(void);
-extern void bx_0802E404(void);
-
-u32 dp01_getattr_by_ch1_for_player_pokemon_(u8, u8 *);
-void dp01_setattr_by_ch1_for_player_pokemon(u8);
-void sub_802F934(u8, u8);
-void sub_802FB2C(void);
-void sub_8030190(void);
-void sub_80304A8(void);
-void sub_8030E38(struct Sprite *);
-void task05_08033660(u8);
-void sub_8031064(void);
-
-void PlayerHandleGetAttributes(void)
-{
- u8 unkData[0x100];
- u32 offset = 0;
- u8 r4;
- s32 i;
-
- if (gBattleBufferA[gActiveBank][2] == 0)
- {
- offset += dp01_getattr_by_ch1_for_player_pokemon_(gBattlePartyID[gActiveBank], unkData);
- }
- else
- {
- r4 = gBattleBufferA[gActiveBank][2];
- for (i = 0; i < 6; i++)
- {
- if (r4 & 1)
- offset += dp01_getattr_by_ch1_for_player_pokemon_(i, unkData + offset);
- r4 >>= 1;
- }
- }
- dp01_build_cmdbuf_x1D_1D_numargs_varargs(1, offset, unkData);
- PlayerBufferExecCompleted();
-}
-
-// Duplicate of dp01_getattr_by_ch1_for_player_pokemon
-u32 dp01_getattr_by_ch1_for_player_pokemon_(u8 a, u8 *buffer)
-{
- struct BattlePokemon battlePokemon;
- struct UnknownStruct3 moveData;
- u8 nickname[20];
- u8 *src;
- s16 data16;
- u32 data32;
- s32 size = 0;
-
- switch (gBattleBufferA[gActiveBank][1])
- {
- case 0:
- battlePokemon.species = GetMonData(&gPlayerParty[a], MON_DATA_SPECIES);
- battlePokemon.item = GetMonData(&gPlayerParty[a], MON_DATA_HELD_ITEM);
- for (size = 0; size < 4; size++)
- {
- battlePokemon.moves[size] = GetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + size);
- battlePokemon.pp[size] = GetMonData(&gPlayerParty[a], MON_DATA_PP1 + size);
- }
- battlePokemon.ppBonuses = GetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES);
- battlePokemon.friendship = GetMonData(&gPlayerParty[a], MON_DATA_FRIENDSHIP);
- battlePokemon.experience = GetMonData(&gPlayerParty[a], MON_DATA_EXP);
- battlePokemon.hpIV = GetMonData(&gPlayerParty[a], MON_DATA_HP_IV);
- battlePokemon.attackIV = GetMonData(&gPlayerParty[a], MON_DATA_ATK_IV);
- battlePokemon.defenseIV = GetMonData(&gPlayerParty[a], MON_DATA_DEF_IV);
- battlePokemon.speedIV = GetMonData(&gPlayerParty[a], MON_DATA_SPD_IV);
- battlePokemon.spAttackIV = GetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV);
- battlePokemon.spDefenseIV = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV);
- battlePokemon.personality = GetMonData(&gPlayerParty[a], MON_DATA_PERSONALITY);
- battlePokemon.status1 = GetMonData(&gPlayerParty[a], MON_DATA_STATUS);
- battlePokemon.level = GetMonData(&gPlayerParty[a], MON_DATA_LEVEL);
- battlePokemon.hp = GetMonData(&gPlayerParty[a], MON_DATA_HP);
- battlePokemon.maxHP = GetMonData(&gPlayerParty[a], MON_DATA_MAX_HP);
- battlePokemon.attack = GetMonData(&gPlayerParty[a], MON_DATA_ATK);
- battlePokemon.defense = GetMonData(&gPlayerParty[a], MON_DATA_DEF);
- battlePokemon.speed = GetMonData(&gPlayerParty[a], MON_DATA_SPD);
- battlePokemon.spAttack = GetMonData(&gPlayerParty[a], MON_DATA_SPATK);
- battlePokemon.spDefense = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF);
- battlePokemon.isEgg = GetMonData(&gPlayerParty[a], MON_DATA_IS_EGG);
- battlePokemon.altAbility = GetMonData(&gPlayerParty[a], MON_DATA_ALT_ABILITY);
- battlePokemon.otId = GetMonData(&gPlayerParty[a], MON_DATA_OT_ID);
- GetMonData(&gPlayerParty[a], MON_DATA_NICKNAME, nickname);
- StringCopy10(battlePokemon.nickname, nickname);
- GetMonData(&gPlayerParty[a], MON_DATA_OT_NAME, battlePokemon.otName);
- src = (u8 *)&battlePokemon;
- for (size = 0; size < sizeof(battlePokemon); size++)
- buffer[size] = src[size];
- break;
- case 1:
- data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPECIES);
- buffer[0] = data16;
- buffer[1] = data16 >> 8;
- size = 2;
- break;
- case 2:
- data16 = GetMonData(&gPlayerParty[a], MON_DATA_HELD_ITEM);
- buffer[0] = data16;
- buffer[1] = data16 >> 8;
- size = 2;
- break;
- case 3:
- for (size = 0; size < 4; size++)
- {
- moveData.moves[size] = GetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + size);
- moveData.pp[size] = GetMonData(&gPlayerParty[a], MON_DATA_PP1 + size);
- }
- moveData.ppBonuses = GetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES);
- src = (u8 *)&moveData;
- for (size = 0; size < sizeof(moveData); size++)
- buffer[size] = src[size];
- break;
- case 4:
- case 5:
- case 6:
- case 7:
- data16 = GetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + gBattleBufferA[gActiveBank][1] - 4);
- buffer[0] = data16;
- buffer[1] = data16 >> 8;
- size = 2;
- break;
- case 8:
- for (size = 0; size < 4; size++)
- buffer[size] = GetMonData(&gPlayerParty[a], MON_DATA_PP1 + size);
- buffer[size] = GetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES);
- size++;
- break;
- case 9:
- case 10:
- case 11:
- case 12:
- buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_PP1 + gBattleBufferA[gActiveBank][1] - 9);
- size = 1;
- break;
- case 17:
- data32 = GetMonData(&gPlayerParty[a], MON_DATA_OT_ID);
- buffer[0] = (data32 & 0x000000FF);
- buffer[1] = (data32 & 0x0000FF00) >> 8;
- buffer[2] = (data32 & 0x00FF0000) >> 16;
- size = 3;
- break;
- case 18:
- data32 = GetMonData(&gPlayerParty[a], MON_DATA_EXP);
- buffer[0] = (data32 & 0x000000FF);
- buffer[1] = (data32 & 0x0000FF00) >> 8;
- buffer[2] = (data32 & 0x00FF0000) >> 16;
- size = 3;
- break;
- case 19:
- buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_HP_EV);
- size = 1;
- break;
- case 20:
- buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_ATK_EV);
- size = 1;
- break;
- case 21:
- buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_DEF_EV);
- size = 1;
- break;
- case 22:
- buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPD_EV);
- size = 1;
- break;
- case 23:
- buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPATK_EV);
- size = 1;
- break;
- case 24:
- buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF_EV);
- size = 1;
- break;
- case 25:
- buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_FRIENDSHIP);
- size = 1;
- break;
- case 26:
- buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_POKERUS);
- size = 1;
- break;
- case 27:
- buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_MET_LOCATION);
- size = 1;
- break;
- case 28:
- buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_MET_LEVEL);
- size = 1;
- break;
- case 29:
- buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_MET_GAME);
- size = 1;
- break;
- case 30:
- buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_POKEBALL);
- size = 1;
- break;
- case 31:
- buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_HP_IV);
- buffer[1] = GetMonData(&gPlayerParty[a], MON_DATA_ATK_IV);
- buffer[2] = GetMonData(&gPlayerParty[a], MON_DATA_DEF_IV);
- buffer[3] = GetMonData(&gPlayerParty[a], MON_DATA_SPD_IV);
- buffer[4] = GetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV);
- buffer[5] = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV);
- size = 6;
- break;
- case 32:
- buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_HP_IV);
- size = 1;
- break;
- case 33:
- buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_ATK_IV);
- size = 1;
- break;
- case 34:
- buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_DEF_IV);
- size = 1;
- break;
- case 35:
- buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPD_IV);
- size = 1;
- break;
- case 36:
- buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV);
- size = 1;
- break;
- case 37:
- buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV);
- size = 1;
- break;
- case 38:
- data32 = GetMonData(&gPlayerParty[a], MON_DATA_PERSONALITY);
- buffer[0] = (data32 & 0x000000FF);
- buffer[1] = (data32 & 0x0000FF00) >> 8;
- buffer[2] = (data32 & 0x00FF0000) >> 16;
- buffer[3] = (data32 & 0xFF000000) >> 24;
- size = 4;
- break;
- case 39:
- data16 = GetMonData(&gPlayerParty[a], MON_DATA_CHECKSUM);
- buffer[0] = data16;
- buffer[1] = data16 >> 8;
- size = 2;
- break;
- case 40:
- data32 = GetMonData(&gPlayerParty[a], MON_DATA_STATUS);
- buffer[0] = (data32 & 0x000000FF);
- buffer[1] = (data32 & 0x0000FF00) >> 8;
- buffer[2] = (data32 & 0x00FF0000) >> 16;
- buffer[3] = (data32 & 0xFF000000) >> 24;
- size = 4;
- break;
- case 41:
- buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_LEVEL);
- size = 1;
- break;
- case 42:
- data16 = GetMonData(&gPlayerParty[a], MON_DATA_HP);
- buffer[0] = data16;
- buffer[1] = data16 >> 8;
- size = 2;
- break;
- case 43:
- data16 = GetMonData(&gPlayerParty[a], MON_DATA_MAX_HP);
- buffer[0] = data16;
- buffer[1] = data16 >> 8;
- size = 2;
- break;
- case 44:
- data16 = GetMonData(&gPlayerParty[a], MON_DATA_ATK);
- buffer[0] = data16;
- buffer[1] = data16 >> 8;
- size = 2;
- break;
- case 45:
- data16 = GetMonData(&gPlayerParty[a], MON_DATA_DEF);
- buffer[0] = data16;
- buffer[1] = data16 >> 8;
- size = 2;
- break;
- case 46:
- data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPD);
- buffer[0] = data16;
- buffer[1] = data16 >> 8;
- size = 2;
- break;
- case 47:
- data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPATK);
- buffer[0] = data16;
- buffer[1] = data16 >> 8;
- size = 2;
- break;
- case 48:
- data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF);
- buffer[0] = data16;
- buffer[1] = data16 >> 8;
- size = 2;
- break;
- case 49:
- buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_COOL);
- size = 1;
- break;
- case 50:
- buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_BEAUTY);
- size = 1;
- break;
- case 51:
- buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_CUTE);
- size = 1;
- break;
- case 52:
- buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SMART);
- size = 1;
- break;
- case 53:
- buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_TOUGH);
- size = 1;
- break;
- case 54:
- buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SHEEN);
- size = 1;
- break;
- case 55:
- buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_COOL_RIBBON);
- size = 1;
- break;
- case 56:
- buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_BEAUTY_RIBBON);
- size = 1;
- break;
- case 57:
- buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_CUTE_RIBBON);
- size = 1;
- break;
- case 58:
- buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SMART_RIBBON);
- size = 1;
- break;
- case 59:
- buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_TOUGH_RIBBON);
- size = 1;
- break;
- }
- return size;
-}
-
-void sub_802ECF0(void)
-{
- struct BattlePokemon battleMon; // I think this is a BattlePokemon
- u8 *src = (u8 *)&gPlayerParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1];
- u8 *dst = (u8 *)&battleMon + gBattleBufferA[gActiveBank][1];
- u8 i;
-
- for (i = 0; i < gBattleBufferA[gActiveBank][2]; i++)
- dst[i] = src[i];
- dp01_build_cmdbuf_x1D_1D_numargs_varargs(1, gBattleBufferA[gActiveBank][2], dst);
- PlayerBufferExecCompleted();
-}
-
-void PlayerHandleSetAttributes(void)
-{
- u8 r4;
- u8 i;
-
- if (gBattleBufferA[gActiveBank][2] == 0)
- {
- dp01_setattr_by_ch1_for_player_pokemon(gBattlePartyID[gActiveBank]);
- }
- else
- {
- r4 = gBattleBufferA[gActiveBank][2];
- for (i = 0; i < 6; i++)
- {
- if (r4 & 1)
- dp01_setattr_by_ch1_for_player_pokemon(i);
- r4 >>= 1;
- }
- }
- PlayerBufferExecCompleted();
-}
-
-// Duplicate of sub_811EC68
-void dp01_setattr_by_ch1_for_player_pokemon(u8 a)
-{
- struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleBufferA[gActiveBank][3];
- struct UnknownStruct3 *moveData = (struct UnknownStruct3 *)&gBattleBufferA[gActiveBank][3];
- s32 i;
-
- switch (gBattleBufferA[gActiveBank][1])
- {
- case 0:
- {
- u8 iv;
-
- SetMonData(&gPlayerParty[a], MON_DATA_SPECIES, (u8 *)&battlePokemon->species);
- SetMonData(&gPlayerParty[a], MON_DATA_HELD_ITEM, (u8 *)&battlePokemon->item);
- for (i = 0; i < 4; i++)
- {
- SetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + i, (u8 *)&battlePokemon->moves[i]);
- SetMonData(&gPlayerParty[a], MON_DATA_PP1 + i, (u8 *)&battlePokemon->pp[i]);
- }
- SetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES, (u8 *)&battlePokemon->ppBonuses);
- SetMonData(&gPlayerParty[a], MON_DATA_FRIENDSHIP, (u8 *)&battlePokemon->friendship);
- SetMonData(&gPlayerParty[a], MON_DATA_EXP, (u8 *)&battlePokemon->experience);
- iv = battlePokemon->hpIV;
- SetMonData(&gPlayerParty[a], MON_DATA_HP_IV, (u8 *)&iv);
- iv = battlePokemon->attackIV;
- SetMonData(&gPlayerParty[a], MON_DATA_ATK_IV, (u8 *)&iv);
- iv = battlePokemon->defenseIV;
- SetMonData(&gPlayerParty[a], MON_DATA_DEF_IV, (u8 *)&iv);
- iv = battlePokemon->speedIV;
- SetMonData(&gPlayerParty[a], MON_DATA_SPD_IV, (u8 *)&iv);
- iv = battlePokemon->spAttackIV;
- SetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV, (u8 *)&iv);
- iv = battlePokemon->spDefenseIV;
- SetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV, (u8 *)&iv);
- SetMonData(&gPlayerParty[a], MON_DATA_PERSONALITY, (u8 *)&battlePokemon->personality);
- SetMonData(&gPlayerParty[a], MON_DATA_STATUS, (u8 *)&battlePokemon->status1);
- SetMonData(&gPlayerParty[a], MON_DATA_LEVEL, (u8 *)&battlePokemon->level);
- SetMonData(&gPlayerParty[a], MON_DATA_HP, (u8 *)&battlePokemon->hp);
- SetMonData(&gPlayerParty[a], MON_DATA_MAX_HP, (u8 *)&battlePokemon->maxHP);
- SetMonData(&gPlayerParty[a], MON_DATA_ATK, (u8 *)&battlePokemon->attack);
- SetMonData(&gPlayerParty[a], MON_DATA_DEF, (u8 *)&battlePokemon->defense);
- SetMonData(&gPlayerParty[a], MON_DATA_SPD, (u8 *)&battlePokemon->speed);
- SetMonData(&gPlayerParty[a], MON_DATA_SPATK, (u8 *)&battlePokemon->spAttack);
- SetMonData(&gPlayerParty[a], MON_DATA_SPDEF, (u8 *)&battlePokemon->spDefense);
- }
- break;
- case 1:
- SetMonData(&gPlayerParty[a], MON_DATA_SPECIES, &gBattleBufferA[gActiveBank][3]);
- break;
- case 2:
- SetMonData(&gPlayerParty[a], MON_DATA_HELD_ITEM, &gBattleBufferA[gActiveBank][3]);
- break;
- case 3:
- for (i = 0; i < 4; i++)
- {
- SetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + i, (u8 *)&moveData->moves[i]);
- SetMonData(&gPlayerParty[a], MON_DATA_PP1 + i, (u8 *)&moveData->pp[i]);
- }
- SetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES, &moveData->ppBonuses);
- break;
- case 4:
- case 5:
- case 6:
- case 7:
- SetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + gBattleBufferA[gActiveBank][1] - 4, &gBattleBufferA[gActiveBank][3]);
- break;
- case 8:
- SetMonData(&gPlayerParty[a], MON_DATA_PP1, &gBattleBufferA[gActiveBank][3]);
- SetMonData(&gPlayerParty[a], MON_DATA_PP2, &gBattleBufferA[gActiveBank][4]);
- SetMonData(&gPlayerParty[a], MON_DATA_PP3, &gBattleBufferA[gActiveBank][5]);
- SetMonData(&gPlayerParty[a], MON_DATA_PP4, &gBattleBufferA[gActiveBank][6]);
- SetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES, &gBattleBufferA[gActiveBank][7]);
- break;
- case 9:
- case 10:
- case 11:
- case 12:
- SetMonData(&gPlayerParty[a], MON_DATA_PP1 + gBattleBufferA[gActiveBank][1] - 9, &gBattleBufferA[gActiveBank][3]);
- break;
- case 17:
- SetMonData(&gPlayerParty[a], MON_DATA_OT_ID, &gBattleBufferA[gActiveBank][3]);
- break;
- case 18:
- SetMonData(&gPlayerParty[a], MON_DATA_EXP, &gBattleBufferA[gActiveBank][3]);
- break;
- case 19:
- SetMonData(&gPlayerParty[a], MON_DATA_HP_EV, &gBattleBufferA[gActiveBank][3]);
- break;
- case 20:
- SetMonData(&gPlayerParty[a], MON_DATA_ATK_EV, &gBattleBufferA[gActiveBank][3]);
- break;
- case 21:
- SetMonData(&gPlayerParty[a], MON_DATA_DEF_EV, &gBattleBufferA[gActiveBank][3]);
- break;
- case 22:
- SetMonData(&gPlayerParty[a], MON_DATA_SPD_EV, &gBattleBufferA[gActiveBank][3]);
- break;
- case 23:
- SetMonData(&gPlayerParty[a], MON_DATA_SPATK_EV, &gBattleBufferA[gActiveBank][3]);
- break;
- case 24:
- SetMonData(&gPlayerParty[a], MON_DATA_SPDEF_EV, &gBattleBufferA[gActiveBank][3]);
- break;
- case 25:
- SetMonData(&gPlayerParty[a], MON_DATA_FRIENDSHIP, &gBattleBufferA[gActiveBank][3]);
- break;
- case 26:
- SetMonData(&gPlayerParty[a], MON_DATA_POKERUS, &gBattleBufferA[gActiveBank][3]);
- break;
- case 27:
- SetMonData(&gPlayerParty[a], MON_DATA_MET_LOCATION, &gBattleBufferA[gActiveBank][3]);
- break;
- case 28:
- SetMonData(&gPlayerParty[a], MON_DATA_MET_LEVEL, &gBattleBufferA[gActiveBank][3]);
- break;
- case 29:
- SetMonData(&gPlayerParty[a], MON_DATA_MET_GAME, &gBattleBufferA[gActiveBank][3]);
- break;
- case 30:
- SetMonData(&gPlayerParty[a], MON_DATA_POKEBALL, &gBattleBufferA[gActiveBank][3]);
- break;
- case 31:
- SetMonData(&gPlayerParty[a], MON_DATA_HP_IV, &gBattleBufferA[gActiveBank][3]);
- SetMonData(&gPlayerParty[a], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBank][4]);
- SetMonData(&gPlayerParty[a], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBank][5]);
- SetMonData(&gPlayerParty[a], MON_DATA_SPD_IV, &gBattleBufferA[gActiveBank][6]);
- SetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBank][7]);
- SetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBank][8]);
- break;
- case 32:
- SetMonData(&gPlayerParty[a], MON_DATA_HP_IV, &gBattleBufferA[gActiveBank][3]);
- break;
- case 33:
- SetMonData(&gPlayerParty[a], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBank][3]);
- break;
- case 34:
- SetMonData(&gPlayerParty[a], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBank][3]);
- break;
- case 35:
- SetMonData(&gPlayerParty[a], MON_DATA_SPD_IV, &gBattleBufferA[gActiveBank][3]);
- break;
- case 36:
- SetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBank][3]);
- break;
- case 37:
- SetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBank][3]);
- break;
- case 38:
- SetMonData(&gPlayerParty[a], MON_DATA_PERSONALITY, &gBattleBufferA[gActiveBank][3]);
- break;
- case 39:
- SetMonData(&gPlayerParty[a], MON_DATA_CHECKSUM, &gBattleBufferA[gActiveBank][3]);
- break;
- case 40:
- SetMonData(&gPlayerParty[a], MON_DATA_STATUS, &gBattleBufferA[gActiveBank][3]);
- break;
- case 41:
- SetMonData(&gPlayerParty[a], MON_DATA_LEVEL, &gBattleBufferA[gActiveBank][3]);
- break;
- case 42:
- SetMonData(&gPlayerParty[a], MON_DATA_HP, &gBattleBufferA[gActiveBank][3]);
- break;
- case 43:
- SetMonData(&gPlayerParty[a], MON_DATA_MAX_HP, &gBattleBufferA[gActiveBank][3]);
- break;
- case 44:
- SetMonData(&gPlayerParty[a], MON_DATA_ATK, &gBattleBufferA[gActiveBank][3]);
- break;
- case 45:
- SetMonData(&gPlayerParty[a], MON_DATA_DEF, &gBattleBufferA[gActiveBank][3]);
- break;
- case 46:
- SetMonData(&gPlayerParty[a], MON_DATA_SPD, &gBattleBufferA[gActiveBank][3]);
- break;
- case 47:
- SetMonData(&gPlayerParty[a], MON_DATA_SPATK, &gBattleBufferA[gActiveBank][3]);
- break;
- case 48:
- SetMonData(&gPlayerParty[a], MON_DATA_SPDEF, &gBattleBufferA[gActiveBank][3]);
- break;
- case 49:
- SetMonData(&gPlayerParty[a], MON_DATA_COOL, &gBattleBufferA[gActiveBank][3]);
- break;
- case 50:
- SetMonData(&gPlayerParty[a], MON_DATA_BEAUTY, &gBattleBufferA[gActiveBank][3]);
- break;
- case 51:
- SetMonData(&gPlayerParty[a], MON_DATA_CUTE, &gBattleBufferA[gActiveBank][3]);
- break;
- case 52:
- SetMonData(&gPlayerParty[a], MON_DATA_SMART, &gBattleBufferA[gActiveBank][3]);
- break;
- case 53:
- SetMonData(&gPlayerParty[a], MON_DATA_TOUGH, &gBattleBufferA[gActiveBank][3]);
- break;
- case 54:
- SetMonData(&gPlayerParty[a], MON_DATA_SHEEN, &gBattleBufferA[gActiveBank][3]);
- break;
- case 55:
- SetMonData(&gPlayerParty[a], MON_DATA_COOL_RIBBON, &gBattleBufferA[gActiveBank][3]);
- break;
- case 56:
- SetMonData(&gPlayerParty[a], MON_DATA_BEAUTY_RIBBON, &gBattleBufferA[gActiveBank][3]);
- break;
- case 57:
- SetMonData(&gPlayerParty[a], MON_DATA_CUTE_RIBBON, &gBattleBufferA[gActiveBank][3]);
- break;
- case 58:
- SetMonData(&gPlayerParty[a], MON_DATA_SMART_RIBBON, &gBattleBufferA[gActiveBank][3]);
- break;
- case 59:
- SetMonData(&gPlayerParty[a], MON_DATA_TOUGH_RIBBON, &gBattleBufferA[gActiveBank][3]);
- break;
- }
- sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
-}
-
-void sub_802F7CC(void)
-{
- u8 *dst = (u8 *)&gPlayerParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1];
- u8 i;
-
- for (i = 0; i < gBattleBufferA[gActiveBank][2]; i++)
- dst[i] = gBattleBufferA[gActiveBank][3 + i];
- PlayerBufferExecCompleted();
-}
-
-void PlayerHandleLoadPokeSprite(void)
-{
- sub_80318FC(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
- gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = gActiveBank;
- gBattleBankFunc[gActiveBank] = bx_0802E404;
-}
-
-void PlayerHandleSendOutPoke(void)
-{
- sub_8032AA8(gActiveBank, gBattleBufferA[gActiveBank][2]);
- gBattlePartyID[gActiveBank] = gBattleBufferA[gActiveBank][1];
- sub_80318FC(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
- gActionSelectionCursor[gActiveBank] = 0;
- gMoveSelectionCursor[gActiveBank] = 0;
- sub_802F934(gActiveBank, gBattleBufferA[gActiveBank][2]);
- gBattleBankFunc[gActiveBank] = sub_802D798;
-}
-
-void sub_802F934(u8 bank, u8 b)
-{
- u16 species;
-
- sub_8032AA8(bank, b);
- gBattlePartyID[bank] = gBattleBufferA[bank][1];
- species = GetMonData(&gPlayerParty[gBattlePartyID[bank]], MON_DATA_SPECIES);
- gUnknown_0300434C[bank] = CreateInvisibleSpriteWithCallback(sub_80312F0);
- GetMonSpriteTemplate_803C56C(species, GetBankIdentity(bank));
- gObjectBankIDs[bank] = CreateSprite(
- &gUnknown_02024E8C,
- sub_8077ABC(bank, 2),
- sub_8077F68(bank),
- sub_8079E90(bank));
- gSprites[gUnknown_0300434C[bank]].data1 = gObjectBankIDs[bank];
- gSprites[gObjectBankIDs[bank]].data0 = bank;
- gSprites[gObjectBankIDs[bank]].data2 = species;
- gSprites[gObjectBankIDs[bank]].oam.paletteNum = bank;
- StartSpriteAnim(&gSprites[gObjectBankIDs[bank]], gBattleMonForms[bank]);
- gSprites[gObjectBankIDs[bank]].invisible = TRUE;
- gSprites[gObjectBankIDs[bank]].callback = SpriteCallbackDummy;
- gSprites[gUnknown_0300434C[bank]].data0 = sub_8046400(0, 0xFF);
-}
-
-void PlayerHandleReturnPokeToBall(void)
-{
- if (gBattleBufferA[gActiveBank][1] == 0)
- {
- ewram17810[gActiveBank].unk4 = 0;
- gBattleBankFunc[gActiveBank] = sub_802FB2C;
- }
- else
- {
- FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]);
- DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]);
- sub_8043DB0(gHealthboxIDs[gActiveBank]);
- PlayerBufferExecCompleted();
- }
-}
-
-void sub_802FB2C(void)
-{
- switch (ewram17810[gActiveBank].unk4)
- {
- case 0:
- if (ewram17800[gActiveBank].unk0_2)
- move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5);
- ewram17810[gActiveBank].unk4 = 1;
- break;
- case 1:
- if (!ewram17810[gActiveBank].unk0_6)
- {
- ewram17810[gActiveBank].unk4 = 0;
- move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 1);
- gBattleBankFunc[gActiveBank] = sub_802DEAC;
- }
- }
-}
-
-void PlayerHandleTrainerThrow(void)
-{
- s16 r7;
-
- if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
- {
- if (GetBankIdentity(gActiveBank) & 2)
- r7 = 16;
- else
- r7 = -16;
- }
- else
- {
- r7 = 0;
- }
- sub_8031AF4(gSaveBlock2.playerGender, gActiveBank);
- GetMonSpriteTemplate_803C5A0(gSaveBlock2.playerGender, GetBankIdentity(gActiveBank));
- gObjectBankIDs[gActiveBank] = CreateSprite(
- &gUnknown_02024E8C,
- r7 + 80,
- (8 - gTrainerBackPicCoords[gSaveBlock2.playerGender].coords) * 4 + 80,
- sub_8079E90(gActiveBank));
- gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = gActiveBank;
- gSprites[gObjectBankIDs[gActiveBank]].pos2.x = 240;
- gSprites[gObjectBankIDs[gActiveBank]].data0 = -2;
- gSprites[gObjectBankIDs[gActiveBank]].callback = sub_80313A0;
- gBattleBankFunc[gActiveBank] = sub_802D204;
-}
-
-void PlayerHandleTrainerSlide(void)
-{
- sub_8031AF4(gSaveBlock2.playerGender, gActiveBank);
- GetMonSpriteTemplate_803C5A0(gSaveBlock2.playerGender, GetBankIdentity(gActiveBank));
- gObjectBankIDs[gActiveBank] = CreateSprite(
- &gUnknown_02024E8C,
- 80,
- (8 - gTrainerBackPicCoords[gSaveBlock2.playerGender].coords) * 4 + 80,
- 30);
- gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = gActiveBank;
- gSprites[gObjectBankIDs[gActiveBank]].pos2.x = -96;
- gSprites[gObjectBankIDs[gActiveBank]].data0 = 2;
- gSprites[gObjectBankIDs[gActiveBank]].callback = sub_80313A0;
- gBattleBankFunc[gActiveBank] = sub_802D23C;
-}
-
-void PlayerHandleTrainerSlideBack(void)
-{
- oamt_add_pos2_onto_pos1(&gSprites[gObjectBankIDs[gActiveBank]]);
- gSprites[gObjectBankIDs[gActiveBank]].data0 = 50;
- gSprites[gObjectBankIDs[gActiveBank]].data2 = -40;
- gSprites[gObjectBankIDs[gActiveBank]].data4 = gSprites[gObjectBankIDs[gActiveBank]].pos1.y;
- gSprites[gObjectBankIDs[gActiveBank]].callback = sub_8078B34;
- StoreSpriteCallbackInData6(&gSprites[gObjectBankIDs[gActiveBank]], SpriteCallbackDummy);
- StartSpriteAnim(&gSprites[gObjectBankIDs[gActiveBank]], 1);
- gBattleBankFunc[gActiveBank] = sub_802D274;
-}
-
-void sub_802FE7C(void)
-{
- if (ewram17810[gActiveBank].unk4 == 0)
- {
- if (ewram17800[gActiveBank].unk0_2)
- move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5);
- ewram17810[gActiveBank].unk4++;
- }
- else
- {
- if (ewram17810[gActiveBank].unk0_6 == 0)
- {
- ewram17810[gActiveBank].unk4 = 0;
- sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
- PlaySE12WithPanning(SE_POKE_DEAD, -64);
- gSprites[gObjectBankIDs[gActiveBank]].data1 = 0;
- gSprites[gObjectBankIDs[gActiveBank]].data2 = 5;
- gSprites[gObjectBankIDs[gActiveBank]].callback = sub_80105EC;
- gBattleBankFunc[gActiveBank] = sub_802DE10;
- }
- }
-}
-
-void sub_802FF60(void)
-{
- BeginNormalPaletteFade(0xFFFFFFFF, 2, 0, 16, 0);
- PlayerBufferExecCompleted();
-}
-
-void sub_802FF80(void)
-{
- ewram17840.unk8 = 4;
- gDoingBattleAnim = 1;
- move_anim_start_t4(gActiveBank, gActiveBank, GetBankByPlayerAI(1), 3);
- gBattleBankFunc[gActiveBank] = bx_wait_t1;
-}
-
-void PlayerHandleBallThrow(void)
-{
- u8 var = gBattleBufferA[gActiveBank][1];
-
- ewram17840.unk8 = var;
- gDoingBattleAnim = 1;
- move_anim_start_t4(gActiveBank, gActiveBank, GetBankByPlayerAI(1), 3);
- gBattleBankFunc[gActiveBank] = bx_wait_t1;
-}
-
-void PlayerHandlePuase(void)
-{
- u8 var = gBattleBufferA[gActiveBank][1];
-
- // WTF is this??
- while (var != 0)
- var--;
-
- PlayerBufferExecCompleted();
-}
-
-void PlayerHandleMoveAnimation(void)
-{
- if (!mplay_80342A4(gActiveBank))
- {
- u16 r0 = gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8);
-
- gUnknown_0202F7C4 = gBattleBufferA[gActiveBank][3];
- gMovePowerMoveAnim = gBattleBufferA[gActiveBank][4] | (gBattleBufferA[gActiveBank][5] << 8);
- gMoveDmgMoveAnim = gBattleBufferA[gActiveBank][6] | (gBattleBufferA[gActiveBank][7] << 8) | (gBattleBufferA[gActiveBank][8] << 16) | (gBattleBufferA[gActiveBank][9] << 24);
- gHappinessMoveAnim = gBattleBufferA[gActiveBank][10];
- gWeatherMoveAnim = gBattleBufferA[gActiveBank][12] | (gBattleBufferA[gActiveBank][13] << 8);
- gDisableStructMoveAnim = (u32 *)&gBattleBufferA[gActiveBank][16];
- gPID_perBank[gActiveBank] = *gDisableStructMoveAnim;
- if (sub_8031720(r0, gUnknown_0202F7C4) != 0)
- {
- // Dead code. sub_8031720 always returns 0.
- PlayerBufferExecCompleted();
- }
- else
- {
- ewram17810[gActiveBank].unk4 = 0;
- gBattleBankFunc[gActiveBank] = sub_8030190;
- }
- }
-}
-
-void sub_8030190(void)
-{
- u16 r4 = gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8);
- u8 r7 = gBattleBufferA[gActiveBank][11];
-
- switch (ewram17810[gActiveBank].unk4)
- {
- case 0:
- if (ewram17800[gActiveBank].unk0_2 == 1 && ewram17800[gActiveBank].unk0_3 == 0)
- {
- ewram17800[gActiveBank].unk0_3 = 1;
- move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5);
- }
- ewram17810[gActiveBank].unk4 = 1;
- break;
- case 1:
- if (ewram17810[gActiveBank].unk0_6 == 0)
- {
- sub_80326EC(0);
- ExecuteMoveAnim(r4);
- ewram17810[gActiveBank].unk4 = 2;
- }
- break;
- case 2:
- gAnimScriptCallback();
- if (!gAnimScriptActive)
- {
- sub_80326EC(1);
- if (ewram17800[gActiveBank].unk0_2 == 1 && r7 < 2)
- {
- move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6);
- ewram17800[gActiveBank].unk0_3 = 0;
- }
- ewram17810[gActiveBank].unk4 = 3;
- }
- break;
- case 3:
- if (ewram17810[gActiveBank].unk0_6 == 0)
- {
- sub_8031F24();
- sub_80324BC(gActiveBank, gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
- ewram17810[gActiveBank].unk4 = 0;
- PlayerBufferExecCompleted();
- }
- break;
- }
-}
-
-void PlayerHandlePrintString(void)
-{
- gUnknown_030042A4 = 0;
- gUnknown_030042A0 = 0;
- BufferStringBattle(*(u16 *)&gBattleBufferA[gActiveBank][2]);
- sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 0x90, 2, 15);
- gBattleBankFunc[gActiveBank] = sub_802DF18;
-}
-
-void PlayerHandlePrintStringPlayerOnly(void)
-{
- if (GetBankSide(gActiveBank) == 0)
- PlayerHandlePrintString();
- else
- PlayerBufferExecCompleted();
-}
-
-void sub_803037C(void)
-{
- int r4;
-
- gUnknown_030042A4 = 0;
- gUnknown_030042A0 = 160;
- FillWindowRect(&gUnknown_03004210, 10, 2, 15, 27, 18);
- FillWindowRect(&gUnknown_03004210, 10, 2, 35, 16, 38);
-
- gBattleBankFunc[gActiveBank] = sub_802C098;
-
- InitWindow(&gUnknown_03004210, gUnknown_08400CF3, 400, 18, 35);
- sub_8002F44(&gUnknown_03004210);
- sub_814A5C0(0, 0xFFFF, 12, 11679, 0);
-
- for (r4 = 0; r4 < 4; r4++)
- nullsub_8(r4);
-
- sub_802E3E4(gActionSelectionCursor[gActiveBank], 0);
-
- StrCpyDecodeToDisplayedStringBattle((u8 *) gUnknown_08400CA8);
- InitWindow(&gUnknown_03004210, gDisplayedStringBattle, SUB_803037C_TILE_DATA_OFFSET, 2, 35);
- sub_8002F44(&gUnknown_03004210);
-}
-
-void nullsub_42()
-{
-}
-
-void sub_8030468(void)
-{
- sub_814A5C0(0, 0xFFFF, 12, 0x2D9F, 0);
- sub_80304A8();
- gBattleBankFunc[gActiveBank] = sub_802C68C;
-}
-
-void sub_80304A8(void)
-{
- gUnknown_030042A4 = 0;
- gUnknown_030042A0 = 320;
- sub_802E1B0();
- gUnknown_03004344 = 0xFF;
- sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0);
- if (gBattleBufferA[gActiveBank][2] != 1)
- {
- InitWindow(&gUnknown_03004210, gUnknown_08400D38, 656, 23, 55);
- sub_8002F44(&gUnknown_03004210);
- }
- sub_802E220();
- sub_802E2D4();
-}
-
-void PlayerHandleOpenBag(void)
-{
- s32 i;
-
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
- gBattleBankFunc[gActiveBank] = sub_802E004;
- gBankInMenu = gActiveBank;
- for (i = 0; i < 3; i++)
- gUnknown_02038470[i] = gBattleBufferA[gActiveBank][1 + i];
-}
-
-void sub_8030594(void)
-{
- s32 i;
-
- gUnknown_0300434C[gActiveBank] = CreateTask(TaskDummy, 0xFF);
- gTasks[gUnknown_0300434C[gActiveBank]].data[0] = gBattleBufferA[gActiveBank][1] & 0xF;
- ewram[0x16054] = gBattleBufferA[gActiveBank][1] >> 4;
- ewram[0x1609D] = gBattleBufferA[gActiveBank][2];
- ewram[0x160C0] = gBattleBufferA[gActiveBank][3];
- for (i = 0; i < 3; i++)
- gUnknown_02038470[i] = gBattleBufferA[gActiveBank][4 + i];
- BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
- gBattleBankFunc[gActiveBank] = sub_802DF30;
- gBankInMenu = gActiveBank;
-}
-
-void sub_8030674(void)
-{
- BattleMusicStop();
- BeginNormalPaletteFade(0xFFFFFFFF, 2, 0, 16, 0);
- PlayerBufferExecCompleted();
-}
-
-void PlayerHandleHealthBarUpdate(void)
-{
- s16 r7;
-
- load_gfxc_health_bar(0);
- r7 = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8);
- if (r7 != 0x7FFF)
- {
- u32 maxHP = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MAX_HP);
- u32 curHP = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_HP);
-
- sub_8043D84(gActiveBank, gHealthboxIDs[gActiveBank], maxHP, curHP, r7);
- }
- else
- {
- u32 maxHP = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MAX_HP);
-
- sub_8043D84(gActiveBank, gHealthboxIDs[gActiveBank], maxHP, 0, r7);
- sub_80440EC(gHealthboxIDs[gActiveBank], 0, 0);
- }
- gBattleBankFunc[gActiveBank] = bx_t1_healthbar_update;
-}
-
-void PlayerHandleExpBarUpdate(void)
-{
- u8 r7 = gBattleBufferA[gActiveBank][1];
-
- if (GetMonData(&gPlayerParty[r7], MON_DATA_LEVEL) >= 100)
- {
- PlayerBufferExecCompleted();
- }
- else
- {
- u16 r4;
- u8 taskId;
-
- load_gfxc_health_bar(1);
- GetMonData(&gPlayerParty[r7], MON_DATA_SPECIES); // unused return value
- r4 = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8);
- taskId = CreateTask(sub_802D924, 10);
- gTasks[taskId].data[0] = r7;
- gTasks[taskId].data[1] = r4;
- gTasks[taskId].data[2] = gActiveBank;
- gBattleBankFunc[gActiveBank] = nullsub_91;
- }
-}
-
-void PlayerHandleStatusIconUpdate(void)
-{
- if (!mplay_80342A4(gActiveBank))
- {
- sub_8045A5C(gHealthboxIDs[gActiveBank], &gPlayerParty[gBattlePartyID[gActiveBank]], 9);
- ewram17810[gActiveBank].unk0_4 = 0;
- gBattleBankFunc[gActiveBank] = sub_802E434;
- }
-}
-
-void PlayerHandleStatusAnimation(void)
-{
- if (!mplay_80342A4(gActiveBank))
- {
- move_anim_start_t2_for_situation(
- gBattleBufferA[gActiveBank][1],
- gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8) | (gBattleBufferA[gActiveBank][4] << 16) | (gBattleBufferA[gActiveBank][5] << 24));
- gBattleBankFunc[gActiveBank] = sub_802E434;
- }
-}
-
-void PlayerHandleStatusXor(void)
-{
- u8 val = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_STATUS) ^ gBattleBufferA[gActiveBank][1];
-
- SetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_STATUS, &val);
- PlayerBufferExecCompleted();
-}
-
-void sub_803097C(void)
-{
- PlayerBufferExecCompleted();
-}
-
-void PlayerHandleDMATransfer(void)
-{
- u32 val1 = gBattleBufferA[gActiveBank][1]
- | (gBattleBufferA[gActiveBank][2] << 8)
- | (gBattleBufferA[gActiveBank][3] << 16)
- | (gBattleBufferA[gActiveBank][4] << 24);
- u16 val2 = gBattleBufferA[gActiveBank][5] | (gBattleBufferA[gActiveBank][6] << 8);
-
- const u8 *src = &gBattleBufferA[gActiveBank][7];
- u8 *dst = (u8 *)val1;
- u32 size = val2;
-
- while (1)
- {
- if (size <= 0x1000)
- {
- DmaCopy16(3, src, dst, size);
- break;
- }
- DmaCopy16(3, src, dst, 0x1000);
- src += 0x1000;
- dst += 0x1000;
- size -= 0x1000;
- }
- PlayerBufferExecCompleted();
-}
-
-void sub_8030A3C(void)
-{
- PlayBGM(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
- PlayerBufferExecCompleted();
-}
-
-void sub_8030A6C(void)
-{
- PlayerBufferExecCompleted();
-}
-
-void sub_8030A78(void)
-{
- dp01_build_cmdbuf_x21_a_bb(1, 0, 0);
- PlayerBufferExecCompleted();
-}
-
-void sub_8030A8C(void)
-{
- dp01_build_cmdbuf_x22_a_three_bytes(1, 0, 0);
- PlayerBufferExecCompleted();
-}
-
-void sub_8030AA0(void)
-{
- dp01_build_cmdbuf_x23_aa_0(1, 0);
- PlayerBufferExecCompleted();
-}
-
-void sub_8030AB4(void)
-{
- dp01_build_cmdbuf_x24_aa_0(1, 0);
- PlayerBufferExecCompleted();
-}
-
-void sub_8030AC8(void)
-{
- gUnknown_020238C8.unk0_0 = 0;
- PlayerBufferExecCompleted();
-}
-
-void sub_8030AE4(void)
-{
- gUnknown_020238C8.unk0_0 = gBattleBufferA[gActiveBank][1];
- PlayerBufferExecCompleted();
-}
-
-void sub_8030B1C(void)
-{
- gUnknown_020238C8.unk0_7 = 0;
- PlayerBufferExecCompleted();
-}
-
-void sub_8030B34(void)
-{
- gUnknown_020238C8.unk0_7 ^= 1;
- PlayerBufferExecCompleted();
-}
-
-void PlayerHandleHitAnimation(void)
-{
- if (gSprites[gObjectBankIDs[gActiveBank]].invisible == TRUE)
- {
- PlayerBufferExecCompleted();
- }
- else
- {
- gDoingBattleAnim = 1;
- gSprites[gObjectBankIDs[gActiveBank]].data1 = 0;
- sub_8047858(gActiveBank);
- gBattleBankFunc[gActiveBank] = bx_blink_t1;
- }
-}
-
-void sub_8030BCC(void)
-{
- PlayerBufferExecCompleted();
-}
-
-void PlayerHandleEffectivenessSound(void)
-{
- s8 pan;
-
- if (GetBankSide(gActiveBank) == 0)
- pan = -64;
- else
- pan = 63;
- PlaySE12WithPanning(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8), pan);
- PlayerBufferExecCompleted();
-}
-
-void sub_8030C1C(void)
-{
- PlayFanfare(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
- PlayerBufferExecCompleted();
-}
-
-void PlayerHandleFaintingCry(void)
-{
- u16 species = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES);
-
- PlayCry3(species, -25, 5);
- PlayerBufferExecCompleted();
-}
-
-void PlayerHandleIntroSlide(void)
-{
- sub_80E43C0(gBattleBufferA[gActiveBank][1]);
- gUnknown_02024DE8 |= 1;
- PlayerBufferExecCompleted();
-}
-
-void PlayerHandleTrainerBallThrow(void)
-{
- u8 paletteNum;
- u8 taskId;
-
- oamt_add_pos2_onto_pos1(&gSprites[gObjectBankIDs[gActiveBank]]);
- gSprites[gObjectBankIDs[gActiveBank]].data0 = 50;
- gSprites[gObjectBankIDs[gActiveBank]].data2 = -40;
- gSprites[gObjectBankIDs[gActiveBank]].data4 = gSprites[gObjectBankIDs[gActiveBank]].pos1.y;
- gSprites[gObjectBankIDs[gActiveBank]].callback = sub_8078B34;
- gSprites[gObjectBankIDs[gActiveBank]].data5 = gActiveBank;
- StoreSpriteCallbackInData6(&gSprites[gObjectBankIDs[gActiveBank]], sub_8030E38);
- StartSpriteAnim(&gSprites[gObjectBankIDs[gActiveBank]], 1);
- paletteNum = AllocSpritePalette(0xD6F8);
- LoadCompressedPalette(gTrainerBackPicPaletteTable[gSaveBlock2.playerGender].data, 0x100 + paletteNum * 16, 32);
- gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = paletteNum;
- taskId = CreateTask(task05_08033660, 5);
- gTasks[taskId].data[0] = gActiveBank;
- if (ewram17810[gActiveBank].unk0_0)
- gTasks[gUnknown_02024E68[gActiveBank]].func = sub_8044CA0;
- ewram17810[4].unk9 |= 1;
- gBattleBankFunc[gActiveBank] = nullsub_91;
-}
-
-void sub_8030E38(struct Sprite *sprite)
-{
- u8 r4 = sprite->data5;
-
- FreeSpriteOamMatrix(sprite);
- FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(sprite->oam.paletteNum));
- DestroySprite(sprite);
- sub_80318FC(&gPlayerParty[gBattlePartyID[r4]], r4);
- StartSpriteAnim(&gSprites[gObjectBankIDs[r4]], 0);
-}
-
-void task05_08033660(u8 taskId)
-{
- if (gTasks[taskId].data[1] < 31)
- {
- gTasks[taskId].data[1]++;
- }
- else
- {
- u8 savedActiveBank = gActiveBank;
-
- gActiveBank = gTasks[taskId].data[0];
- if (!IsDoubleBattle() || (gBattleTypeFlags & 0x40))
- {
- gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank];
- sub_802F934(gActiveBank, 0);
- }
- else
- {
- gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank];
- sub_802F934(gActiveBank, 0);
- gActiveBank ^= 2;
- gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank];
- sub_80318FC(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
- sub_802F934(gActiveBank, 0);
- gActiveBank ^= 2;
- }
- gBattleBankFunc[gActiveBank] = sub_802D500;
- gActiveBank = savedActiveBank;
- DestroyTask(taskId);
- }
-}
-
-void sub_8030FAC(void)
-{
- if (gBattleBufferA[gActiveBank][1] != 0 && GetBankSide(gActiveBank) == 0)
- {
- PlayerBufferExecCompleted();
- }
- else
- {
- ewram17810[gActiveBank].unk0_0 = 1;
- gUnknown_02024E68[gActiveBank] = sub_8044804(gActiveBank, (struct BattleInterfaceStruct2 *)&gBattleBufferA[gActiveBank][4], gBattleBufferA[gActiveBank][1], gBattleBufferA[gActiveBank][2]);
- ewram17810[gActiveBank].unk5 = 0;
- if (gBattleBufferA[gActiveBank][2] != 0)
- ewram17810[gActiveBank].unk5 = 0x5D;
- gBattleBankFunc[gActiveBank] = sub_8031064;
- }
-}
-
-void sub_8031064(void)
-{
- if (ewram17810[gActiveBank].unk5++ > 0x5C)
- {
- ewram17810[gActiveBank].unk5 = 0;
- PlayerBufferExecCompleted();
- }
-}
-
-void sub_80310A4(void)
-{
- if (ewram17810[gActiveBank].unk0_0)
- gTasks[gUnknown_02024E68[gActiveBank]].func = sub_8044CA0;
- PlayerBufferExecCompleted();
-}
-
-void sub_80310F0(void)
-{
- dp11b_obj_free(gActiveBank, 1);
- dp11b_obj_free(gActiveBank, 0);
- PlayerBufferExecCompleted();
-}
-
-void PlayerHandleSpriteInvisibility(void)
-{
- if (AnimBankSpriteExists(gActiveBank))
- {
- gSprites[gObjectBankIDs[gActiveBank]].invisible = gBattleBufferA[gActiveBank][1];
- sub_8031F88(gActiveBank);
- }
- PlayerBufferExecCompleted();
-}
-
-void PlayerHandleBattleAnimation(void)
-{
- if (!mplay_80342A4(gActiveBank))
- {
- u8 val2 = gBattleBufferA[gActiveBank][1];
- u16 val = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8);
-
- if (move_anim_start_t3(gActiveBank, gActiveBank, gActiveBank, val2, val))
- PlayerBufferExecCompleted();
- else
- gBattleBankFunc[gActiveBank] = sub_802E460;
- }
-}
-
-void PlayerHandleLinkStandbyMsg(void)
-{
- switch (gBattleBufferA[gActiveBank][1])
- {
- case 0:
- b_link_standby_message();
- // fall through
- case 1:
- dp11b_obj_free(gActiveBank, 1);
- dp11b_obj_free(gActiveBank, 0);
- break;
- case 2:
- b_link_standby_message();
- break;
- }
- PlayerBufferExecCompleted();
-}
-
-void PlayerHandleResetActionMoveSelection(void)
-{
- switch (gBattleBufferA[gActiveBank][1])
- {
- case 0:
- gActionSelectionCursor[gActiveBank] = 0;
- gMoveSelectionCursor[gActiveBank] = 0;
- break;
- case 1:
- gActionSelectionCursor[gActiveBank] = 0;
- break;
- case 2:
- gMoveSelectionCursor[gActiveBank] = 0;
- break;
- }
- PlayerBufferExecCompleted();
-}
-
-void sub_80312A0(void)
-{
- gBattleOutcome = gBattleBufferA[gActiveBank][1];
- FadeOutMapMusic(5);
- BeginFastPaletteFade(3);
- PlayerBufferExecCompleted();
- gBattleBankFunc[gActiveBank] = sub_802D18C;
-}
-
-void nullsub_43(void)
-{
-}
diff --git a/src/battle_7.c b/src/battle_7.c
index f81025409..ad96510cf 100644
--- a/src/battle_7.c
+++ b/src/battle_7.c
@@ -31,7 +31,6 @@ struct Struct2019348
extern u8 gBattleBufferA[][0x200];
extern u8 gActiveBank;
-extern u32 gBattleExecBuffer;
extern u8 gNoOfAllBanks;
extern u16 gBattlePartyID[];
extern u8 gBanksBySide[];
@@ -63,7 +62,6 @@ extern const u8 gSubstituteDollGfx[];
extern const u8 gSubstituteDollPal[];
extern const struct CompressedSpriteSheet gUnknown_081FAF24;
extern const struct SpriteTemplate gSpriteTemplate_81FAF34;
-extern void (*const gOpponentBufferCommands[])(void);
extern const struct CompressedSpriteSheet gUnknown_0820A47C;
extern const struct CompressedSpriteSheet gUnknown_0820A484;
extern const struct CompressedSpriteSheet gUnknown_0820A48C[];
@@ -96,9 +94,6 @@ void sub_80324E0(u8 a);
void sub_80327CC(void);
void sub_8032978(struct Sprite *);
void sub_80328A4(struct Sprite *);
-void OpponentBufferRunCommand(void);
-void sub_80332D0(void);
-void OpponentBufferExecCompleted(void);
void sub_80312F0(struct Sprite *sprite)
{
@@ -182,9 +177,9 @@ bool8 move_anim_start_t3(u8 a, u8 b, u8 c, u8 d, u16 e)
gBattleMonForms[a] = e & 0x7F;
return TRUE;
}
- if (ewram17800[a].unk0_2 && sub_803163C(d) == 0)
+ if (ewram17800[a].substituteSprite && sub_803163C(d) == 0)
return TRUE;
- if (ewram17800[a].unk0_2 && d == 2 && gSprites[gObjectBankIDs[a]].invisible)
+ if (ewram17800[a].substituteSprite && d == 2 && gSprites[gObjectBankIDs[a]].invisible)
{
refresh_graphics_maybe(a, 1, gObjectBankIDs[a]);
sub_80324E0(a);
@@ -273,7 +268,7 @@ bool8 mplay_80342A4(u8 a)
return TRUE;
}
-void sub_8031794(struct Pokemon *pkmn, u8 b)
+void BattleLoadOpponentMonSprite(struct Pokemon *pkmn, u8 b)
{
u32 personalityValue;
u16 species;
@@ -284,14 +279,14 @@ void sub_8031794(struct Pokemon *pkmn, u8 b)
const u8 *lzPaletteData;
personalityValue = GetMonData(pkmn, MON_DATA_PERSONALITY);
- if (ewram17800[b].unk2 == 0)
+ if (ewram17800[b].transformedSpecies == 0)
{
species = GetMonData(pkmn, MON_DATA_SPECIES);
r7 = personalityValue;
}
else
{
- species = ewram17800[b].unk2;
+ species = ewram17800[b].transformedSpecies;
r7 = gPID_perBank[b];
}
otId = GetMonData(pkmn, MON_DATA_OT_ID);
@@ -305,7 +300,7 @@ void sub_8031794(struct Pokemon *pkmn, u8 b)
species,
r7);
paletteOffset = 0x100 + b * 16;
- if (ewram17800[b].unk2 == 0)
+ if (ewram17800[b].transformedSpecies == 0)
lzPaletteData = GetMonSpritePal(pkmn);
else
lzPaletteData = GetMonSpritePalFromOtIdPersonality(species, otId, personalityValue);
@@ -318,14 +313,14 @@ void sub_8031794(struct Pokemon *pkmn, u8 b)
LZDecompressWram(lzPaletteData, ewram + 0x16400);
LoadPalette(ewram + 0x16400 + gBattleMonForms[b] * 32, paletteOffset, 0x20);
}
- if (ewram17800[b].unk2 != 0)
+ if (ewram17800[b].transformedSpecies != 0)
{
BlendPalette(paletteOffset, 16, 6, 0x7FFF);
CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32);
}
}
-void sub_80318FC(struct Pokemon *pkmn, u8 b)
+void BattleLoadPlayerMonSprite(struct Pokemon *pkmn, u8 b)
{
u32 personalityValue;
u16 species;
@@ -336,14 +331,14 @@ void sub_80318FC(struct Pokemon *pkmn, u8 b)
const u8 *lzPaletteData;
personalityValue = GetMonData(pkmn, MON_DATA_PERSONALITY);
- if (ewram17800[b].unk2 == 0)
+ if (ewram17800[b].transformedSpecies == 0)
{
species = GetMonData(pkmn, MON_DATA_SPECIES);
r7 = personalityValue;
}
else
{
- species = ewram17800[b].unk2;
+ species = ewram17800[b].transformedSpecies;
r7 = gPID_perBank[b];
}
otId = GetMonData(pkmn, MON_DATA_OT_ID);
@@ -357,7 +352,7 @@ void sub_80318FC(struct Pokemon *pkmn, u8 b)
species,
r7);
paletteOffset = 0x100 + b * 16;
- if (ewram17800[b].unk2 == 0)
+ if (ewram17800[b].transformedSpecies == 0)
lzPaletteData = GetMonSpritePal(pkmn);
else
lzPaletteData = GetMonSpritePalFromOtIdPersonality(species, otId, personalityValue);
@@ -370,7 +365,7 @@ void sub_80318FC(struct Pokemon *pkmn, u8 b)
LZDecompressWram(lzPaletteData, ewram + 0x16400);
LoadPalette(ewram + 0x16400 + gBattleMonForms[b] * 32, paletteOffset, 0x20);
}
- if (ewram17800[b].unk2 != 0)
+ if (ewram17800[b].transformedSpecies != 0)
{
BlendPalette(paletteOffset, 16, 6, 0x7FFF);
CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32);
@@ -405,7 +400,7 @@ void sub_8031A6C(u16 a, u8 b)
LoadCompressedObjectPalette(&gTrainerFrontPicPaletteTable[a]);
}
-void sub_8031AF4(u16 a, u8 b)
+void LoadPlayerTrainerBankSprite(u16 a, u8 b)
{
u8 status;
@@ -607,12 +602,12 @@ void sub_8031F24(void)
s32 i;
for (i = 0; i < gNoOfAllBanks; i++)
- ewram17800[i].unk0_0 = gSprites[gObjectBankIDs[i]].invisible;
+ ewram17800[i].invisible = gSprites[gObjectBankIDs[i]].invisible;
}
void sub_8031F88(u8 a)
{
- ewram17800[a].unk0_0 = gSprites[gObjectBankIDs[a]].invisible;
+ ewram17800[a].invisible = gSprites[gObjectBankIDs[a]].invisible;
}
void sub_8031FC4(u8 a, u8 b, bool8 c)
@@ -630,7 +625,7 @@ void sub_8031FC4(u8 a, u8 b, bool8 c)
paletteOffset = 0x100 + a * 16;
LoadPalette(ewram + 0x16400 + ewram17840.unk0 * 32, paletteOffset, 32);
gBattleMonForms[a] = ewram17840.unk0;
- if (ewram17800[a].unk2 != 0)
+ if (ewram17800[a].transformedSpecies != 0)
{
BlendPalette(paletteOffset, 16, 6, 0x7FFF);
CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32);
@@ -709,7 +704,7 @@ void sub_8031FC4(u8 a, u8 b, bool8 c)
CpuCopy32(gPlttBufferFaded + paletteOffset, gPlttBufferUnfaded + paletteOffset, 32);
if (!IsContest())
{
- ewram17800[a].unk2 = species;
+ ewram17800[a].transformedSpecies = species;
gBattleMonForms[a] = gBattleMonForms[b];
}
gSprites[gObjectBankIDs[a]].pos1.y = sub_8077F68(a);
@@ -717,7 +712,7 @@ void sub_8031FC4(u8 a, u8 b, bool8 c)
}
}
-void sub_8032350(u8 a, u8 b)
+void BattleLoadSubstituteSprite(u8 a, u8 b)
{
u8 r4;
u16 foo;
@@ -750,16 +745,16 @@ void sub_8032350(u8 a, u8 b)
if (!IsContest())
{
if (GetBankSide(a) != 0)
- sub_8031794(&gEnemyParty[gBattlePartyID[a]], a);
+ BattleLoadOpponentMonSprite(&gEnemyParty[gBattlePartyID[a]], a);
else
- sub_80318FC(&gPlayerParty[gBattlePartyID[a]], a);
+ BattleLoadPlayerMonSprite(&gPlayerParty[gBattlePartyID[a]], a);
}
}
}
void refresh_graphics_maybe(u8 a, u8 b, u8 spriteId)
{
- sub_8032350(a, b);
+ BattleLoadSubstituteSprite(a, b);
StartSpriteAnim(&gSprites[spriteId], gBattleMonForms[a]);
if (b == 0)
gSprites[spriteId].pos1.y = sub_8077F7C(a);
@@ -770,12 +765,12 @@ void refresh_graphics_maybe(u8 a, u8 b, u8 spriteId)
void sub_80324BC(u8 a, u16 b)
{
if (b == 0xA4)
- ewram17800[a].unk0_2 = 1;
+ ewram17800[a].substituteSprite = 1;
}
void sub_80324E0(u8 a)
{
- ewram17800[a].unk0_2 = 0;
+ ewram17800[a].substituteSprite = 0;
}
void sub_80324F8(struct Pokemon *pkmn, u8 b)
@@ -896,9 +891,9 @@ void sub_80328A4(struct Sprite *sprite)
}
if (gAnimScriptActive || r7->invisible)
invisible = TRUE;
- else if (ewram17800[r4].unk2 != 0 && gEnemyMonElevation[ewram17800[r4].unk2] == 0)
+ else if (ewram17800[r4].transformedSpecies != 0 && gEnemyMonElevation[ewram17800[r4].transformedSpecies] == 0)
invisible = TRUE;
- if (ewram17800[r4].unk0_2)
+ if (ewram17800[r4].substituteSprite)
invisible = TRUE;
sprite->pos1.x = r7->pos1.x;
sprite->pos2.x = r7->pos2.x;
@@ -914,8 +909,8 @@ void sub_8032984(u8 a, u16 b)
{
if (GetBankSide(a) != 0)
{
- if (ewram17800[a].unk2 != 0)
- b = ewram17800[a].unk2;
+ if (ewram17800[a].transformedSpecies != 0)
+ b = ewram17800[a].transformedSpecies;
if (gEnemyMonElevation[b] != 0)
gSprites[ewram17810[a].unk7].callback = sub_80328A4;
else
@@ -953,283 +948,8 @@ void sub_8032A38(void)
void sub_8032AA8(u8 a, u8 b)
{
- ewram17800[a].unk2 = 0;
+ ewram17800[a].transformedSpecies = 0;
gBattleMonForms[a] = 0;
if (b == 0)
sub_80324E0(a);
}
-
-void nullsub_45(void)
-{
-}
-
-void SetBankFuncToOpponentBufferRunCommand(void)
-{
- gBattleBankFunc[gActiveBank] = OpponentBufferRunCommand;
-}
-
-void OpponentBufferRunCommand(void)
-{
- if (gBattleExecBuffer & gBitTable[gActiveBank])
- {
- if (gBattleBufferA[gActiveBank][0] <= 0x38)
- gOpponentBufferCommands[gBattleBufferA[gActiveBank][0]]();
- else
- OpponentBufferExecCompleted();
- }
-}
-
-void sub_8032B4C(void)
-{
- if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy)
- OpponentBufferExecCompleted();
-}
-
-// Duplicate of sub_8032B4C
-void sub_8032B84(void)
-{
- if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy)
- OpponentBufferExecCompleted();
-}
-
-void sub_8032BBC(void)
-{
- if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy)
- {
- sub_8031B74(gSprites[gObjectBankIDs[gActiveBank]].oam.affineParam);
- gSprites[gObjectBankIDs[gActiveBank]].oam.tileNum = gSprites[gObjectBankIDs[gActiveBank]].data5;
- FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]);
- DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]);
- OpponentBufferExecCompleted();
- }
-}
-
-void sub_8032C4C(void)
-{
- if ((--ewram17810[gActiveBank].unk9) == 0xFF)
- {
- ewram17810[gActiveBank].unk9 = 0;
- OpponentBufferExecCompleted();
- }
-}
-
-void sub_8032C88(void)
-{
- bool8 r6 = FALSE;
-
- if (!IsDoubleBattle() || (IsDoubleBattle() && (gBattleTypeFlags & BATTLE_TYPE_MULTI)))
- {
- if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy)
- r6 = TRUE;
- }
- else
- {
- if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy
- && gSprites[gHealthboxIDs[gActiveBank ^ 2]].callback == SpriteCallbackDummy)
- r6 = TRUE;
- }
- if (IsCryPlayingOrClearCrySongs())
- r6 = FALSE;
-
- if (r6 && ewram17810[gActiveBank].unk1_0 && ewram17810[gActiveBank ^ 2].unk1_0)
- {
- ewram17810[gActiveBank].unk0_7 = 0;
- ewram17810[gActiveBank].unk1_0 = 0;
- ewram17810[gActiveBank ^ 2].unk0_7 = 0;
- ewram17810[gActiveBank ^ 2].unk1_0 = 0;
- FreeSpriteTilesByTag(0x27F9);
- FreeSpritePaletteByTag(0x27F9);
- if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
- m4aMPlayContinue(&gMPlay_BGM);
- else
- m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 256);
- ewram17810[gActiveBank].unk9 = 3;
- gBattleBankFunc[gActiveBank] = sub_8032C4C;
- }
-}
-
-void sub_8032E2C(void)
-{
- if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank].unk0_7)
- sub_8141828(gActiveBank, &gEnemyParty[gBattlePartyID[gActiveBank]]);
- if (!ewram17810[gActiveBank ^ 2].unk0_3 && !ewram17810[gActiveBank ^ 2].unk0_7)
- sub_8141828(gActiveBank ^ 2, &gEnemyParty[gBattlePartyID[gActiveBank ^ 2]]);
- if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank ^ 2].unk0_3)
- {
- if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI))
- {
- DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank ^ 2]]);
- sub_8045A5C(
- gHealthboxIDs[gActiveBank ^ 2],
- &gEnemyParty[gBattlePartyID[gActiveBank ^ 2]],
- 0);
- sub_804777C(gActiveBank ^ 2);
- sub_8043DFC(gHealthboxIDs[gActiveBank ^ 2]);
- sub_8032984(
- gActiveBank ^ 2,
- GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank ^ 2]], MON_DATA_SPECIES));
- }
- DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank]]);
- sub_8045A5C(
- gHealthboxIDs[gActiveBank],
- &gEnemyParty[gBattlePartyID[gActiveBank]],
- 0);
- sub_804777C(gActiveBank);
- sub_8043DFC(gHealthboxIDs[gActiveBank]);
- sub_8032984(
- gActiveBank,
- GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES));
-
- ewram17840.unk9_0 = 0;
- gBattleBankFunc[gActiveBank] = sub_8032C88;
- }
-}
-
-void sub_8033018(void)
-{
- if (gSprites[gObjectBankIDs[gActiveBank]].animEnded == TRUE
- && gSprites[gObjectBankIDs[gActiveBank]].pos2.x == 0)
- {
- if (!ewram17810[gActiveBank].unk0_7)
- {
- sub_8141828(gActiveBank, &gEnemyParty[gBattlePartyID[gActiveBank]]);
- return;
- }
- if (ewram17810[gActiveBank].unk1_0)
- {
- ewram17810[gActiveBank].unk0_7 = 0;
- ewram17810[gActiveBank].unk1_0 = 0;
- FreeSpriteTilesByTag(0x27F9);
- FreeSpritePaletteByTag(0x27F9);
- OpponentBufferExecCompleted();
- return;
- }
- }
-}
-
-void sub_80330C8(void)
-{
- s16 r4 = sub_8045C78(gActiveBank, gHealthboxIDs[gActiveBank], 0, 0);
-
- sub_8043DFC(gHealthboxIDs[gActiveBank]);
- if (r4 != -1)
- sub_80440EC(gHealthboxIDs[gActiveBank], r4, 0);
- else
- OpponentBufferExecCompleted();
-}
-
-void sub_803311C(void)
-{
- if (!gSprites[gObjectBankIDs[gActiveBank]].inUse)
- {
- sub_8043DB0(gHealthboxIDs[gActiveBank]);
- OpponentBufferExecCompleted();
- }
-}
-
-void sub_8033160(void)
-{
- if (!ewram17810[gActiveBank].unk0_6)
- {
- FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]);
- DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]);
- sub_8032A08(gActiveBank);
- sub_8043DB0(gHealthboxIDs[gActiveBank]);
- OpponentBufferExecCompleted();
- }
-}
-
-void sub_80331D0(void)
-{
- if (gUnknown_03004210.state == 0)
- OpponentBufferExecCompleted();
-}
-
-void bx_blink_t7(void)
-{
- u8 spriteId = gObjectBankIDs[gActiveBank];
-
- if (gSprites[spriteId].data1 == 32)
- {
- gSprites[spriteId].data1 = 0;
- gSprites[spriteId].invisible = FALSE;
- gDoingBattleAnim = 0;
- OpponentBufferExecCompleted();
- }
- else
- {
- if (((u16)gSprites[spriteId].data1 % 4) == 0)
- gSprites[spriteId].invisible ^= 1;
- gSprites[spriteId].data1++;
- }
-}
-
-void sub_8033264(void)
-{
- if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy)
- {
- if (ewram17800[gActiveBank].unk0_2)
- move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6);
- gBattleBankFunc[gActiveBank] = sub_80332D0;
- }
-}
-
-void sub_80332D0(void)
-{
- if (!ewram17810[gActiveBank].unk0_6)
- {
- CreateTask(c3_0802FDF4, 10);
- OpponentBufferExecCompleted();
- }
-}
-
-void sub_8033308(void)
-{
- if (ewram17810[gActiveBank].unk1_0)
- {
- ewram17810[gActiveBank].unk0_7 = 0;
- ewram17810[gActiveBank].unk1_0 = 0;
- FreeSpriteTilesByTag(0x27F9);
- FreeSpritePaletteByTag(0x27F9);
- StartSpriteAnim(&gSprites[gObjectBankIDs[gActiveBank]], 0);
- sub_8045A5C(
- gHealthboxIDs[gActiveBank],
- &gEnemyParty[gBattlePartyID[gActiveBank]],
- 0);
- sub_804777C(gActiveBank);
- sub_8043DFC(gHealthboxIDs[gActiveBank]);
- sub_8031F88(gActiveBank);
- gBattleBankFunc[gActiveBank] = sub_8033264;
- }
-}
-
-void sub_80333D4(void)
-{
- if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank].unk0_7)
- sub_8141828(gActiveBank, &gEnemyParty[gBattlePartyID[gActiveBank]]);
- if (gSprites[gUnknown_0300434C[gActiveBank]].callback == SpriteCallbackDummy
- && !ewram17810[gActiveBank].unk0_3)
- {
- DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank]]);
- sub_8032984(gActiveBank, GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES));
- gBattleBankFunc[gActiveBank] = sub_8033308;
- }
-}
-
-void sub_8033494(void)
-{
- if (!ewram17810[gActiveBank].unk0_4)
- OpponentBufferExecCompleted();
-}
-
-void sub_80334C0(void)
-{
- if (!ewram17810[gActiveBank].unk0_5)
- OpponentBufferExecCompleted();
-}
-
-void OpponentBufferExecCompleted(void)
-{
- gBattleBankFunc[gActiveBank] = OpponentBufferRunCommand;
- gBattleExecBuffer &= ~gBitTable[gActiveBank];
-}
diff --git a/src/battle_anim_80CA710.c b/src/battle_anim_80CA710.c
new file mode 100644
index 000000000..65ccd7c21
--- /dev/null
+++ b/src/battle_anim_80CA710.c
@@ -0,0 +1,18 @@
+
+// Includes
+#include "global.h"
+
+// Static type declarations
+
+// Static RAM declarations
+
+IWRAM_DATA u32 filler_03000724;
+IWRAM_DATA u16 gUnknown_03000728[4];
+IWRAM_DATA u16 gUnknown_03000730[6];
+IWRAM_DATA u32 filler_0300073c;
+
+// Static ROM declarations
+
+// .rodata
+
+// .text
diff --git a/src/battle_anim_81258BC.c b/src/battle_anim_81258BC.c
deleted file mode 100644
index 5bdbb4946..000000000
--- a/src/battle_anim_81258BC.c
+++ /dev/null
@@ -1,50 +0,0 @@
-#include "global.h"
-#include "battle_anim_81258BC.h"
-#include "battle.h"
-#include "battle_message.h"
-#include "menu_cursor.h"
-#include "text.h"
-
-extern struct Window gUnknown_03004210;
-extern u8 gDisplayedStringBattle[];
-extern u8 gActionSelectionCursor[];
-
-extern const u8 gUnknown_08400CBB[];
-extern u8 gActiveBank;
-extern const u8 gUnknown_08400D15[];
-
-extern void *gBattleBankFunc[];
-extern u16 gUnknown_030042A0;
-extern u16 gUnknown_030042A4;
-
-#if ENGLISH
-#define SUB_812BB10_TILE_DATA_OFFSET 440
-#elif GERMAN
-#define SUB_812BB10_TILE_DATA_OFFSET 444
-#endif
-
-void sub_812BB10(void) {
- int i;
-
- gUnknown_030042A4 = 0;
- gUnknown_030042A0 = 160;
- gUnknown_03004210.paletteNum = 0;
- FillWindowRect_DefaultPalette(&gUnknown_03004210, 10, 2, 15, 27, 18);
- FillWindowRect_DefaultPalette(&gUnknown_03004210, 10, 2, 35, 16, 36);
- gBattleBankFunc[gActiveBank] = bx_battle_menu_t6_2;
-
- InitWindow(&gUnknown_03004210, gUnknown_08400D15, 400, 18, 35);
- sub_8002F44(&gUnknown_03004210);
- sub_814A5C0(0, 0xFFFF, 12, 11679, 0);
-
- for (i = 0; i < 4; i++)
- {
- nullsub_8(i);
- }
-
- sub_802E3E4(gActionSelectionCursor[gActiveBank], 0);
- StrCpyDecodeToDisplayedStringBattle((u8 *) gUnknown_08400CBB);
-
- InitWindow(&gUnknown_03004210, gDisplayedStringBattle, SUB_812BB10_TILE_DATA_OFFSET, 2, 35);
- sub_8002F44(&gUnknown_03004210);
-} \ No newline at end of file
diff --git a/src/battle_10.c b/src/battle_controller_linkopponent.c
index 81991f976..0b6c3b6a1 100644
--- a/src/battle_10.c
+++ b/src/battle_controller_linkopponent.c
@@ -3,6 +3,8 @@
#include "battle_interface.h"
#include "data2.h"
#include "link.h"
+#include "m4a.h"
+#include "main.h"
#include "palette.h"
#include "rom_8077ABC.h"
#include "rom3.h"
@@ -48,11 +50,14 @@ extern struct Window gUnknown_03004210;
extern u16 gUnknown_030042A0;
extern u16 gUnknown_030042A4;
extern u8 gUnknown_0300434C[];
+extern u32 gBattleExecBuffer;
+extern MainCallback gPreBattleCallback1;
+extern struct MusicPlayerInfo gMPlay_BGM;
extern u8 sub_8077F68();
extern u8 sub_8079E90();
extern u8 GetBankIdentity(u8);
-extern void sub_8031794(struct Pokemon *, u8);
+extern void BattleLoadOpponentMonSprite(struct Pokemon *, u8);
extern void sub_8037A74(void);
extern void sub_8032984(u8, u16);
extern void sub_8037E30(void);
@@ -98,9 +103,15 @@ extern u8 AnimBankSpriteExists();
extern u8 move_anim_start_t3();
extern void sub_8037FD8(void);
extern void sub_8037F34(void);
-extern void dp01_tbl4_exec_completed(void);
+extern void LinkOpponentBufferExecCompleted(void);
+extern void sub_8141828();
+extern void sub_804777C();
+
+// this file's functions
u32 dp01_getattr_by_ch1_for_player_pokemon__(u8, u8 *);
+void sub_803752C(void);
+void sub_8037D2C(void);
void sub_8038900(u8);
void sub_8039430(u8, u8);
void sub_8039648(void);
@@ -108,6 +119,454 @@ void sub_8039B64(void);
void sub_803A2C4(u8);
void sub_803A4E0(void);
+void LinkOpponentHandleGetAttributes(void);
+void LinkOpponentHandlecmd1(void);
+void LinkOpponentHandleSetAttributes(void);
+void LinkOpponentHandlecmd3(void);
+void LinkOpponentHandleLoadPokeSprite(void);
+void LinkOpponentHandleSendOutPoke(void);
+void LinkOpponentHandleReturnPokeToBall(void);
+void LinkOpponentHandleTrainerThrow(void);
+void LinkOpponentHandleTrainerSlide(void);
+void LinkOpponentHandleTrainerSlideBack(void);
+void LinkOpponentHandlecmd10(void);
+void LinkOpponentHandlecmd11(void);
+void LinkOpponentHandlecmd12(void);
+void LinkOpponentHandleBallThrow(void);
+void LinkOpponentHandlePuase(void);
+void LinkOpponentHandleMoveAnimation(void);
+void LinkOpponentHandlePrintString(void);
+void LinkOpponentHandlePrintStringPlayerOnly(void);
+void LinkOpponentHandlecmd18(void);
+void LinkOpponentHandlecmd19(void);
+void LinkOpponentHandlecmd20(void);
+void LinkOpponentHandleOpenBag(void);
+void LinkOpponentHandlecmd22(void);
+void LinkOpponentHandlecmd23(void);
+void LinkOpponentHandleHealthBarUpdate(void);
+void LinkOpponentHandleExpBarUpdate(void);
+void LinkOpponentHandleStatusIconUpdate(void);
+void LinkOpponentHandleStatusAnimation(void);
+void LinkOpponentHandleStatusXor(void);
+void LinkOpponentHandlecmd29(void);
+void LinkOpponentHandleDMATransfer(void);
+void LinkOpponentHandlecmd31(void);
+void LinkOpponentHandlecmd32(void);
+void LinkOpponentHandlecmd33(void);
+void LinkOpponentHandlecmd34(void);
+void LinkOpponentHandlecmd35(void);
+void LinkOpponentHandlecmd36(void);
+void LinkOpponentHandlecmd37(void);
+void LinkOpponentHandlecmd38(void);
+void LinkOpponentHandlecmd39(void);
+void LinkOpponentHandlecmd40(void);
+void LinkOpponentHandleHitAnimation(void);
+void LinkOpponentHandlecmd42(void);
+void LinkOpponentHandleEffectivenessSound(void);
+void LinkOpponentHandlecmd44(void);
+void LinkOpponentHandleFaintingCry(void);
+void LinkOpponentHandleIntroSlide(void);
+void LinkOpponentHandleTrainerBallThrow(void);
+void LinkOpponentHandlecmd48(void);
+void LinkOpponentHandlecmd49(void);
+void LinkOpponentHandlecmd50(void);
+void LinkOpponentHandleSpriteInvisibility(void);
+void LinkOpponentHandleBattleAnimation(void);
+void LinkOpponentHandleLinkStandbyMsg(void);
+void LinkOpponentHandleResetActionMoveSelection(void);
+void LinkOpponentHandlecmd55(void);
+void LinkOpponentHandlecmd56(void);
+
+// const data
+
+typedef void (*BattleBufferCmd) (void);
+const BattleBufferCmd gLinkOpponentBufferCommands[] =
+{
+ LinkOpponentHandleGetAttributes,
+ LinkOpponentHandlecmd1,
+ LinkOpponentHandleSetAttributes,
+ LinkOpponentHandlecmd3,
+ LinkOpponentHandleLoadPokeSprite,
+ LinkOpponentHandleSendOutPoke,
+ LinkOpponentHandleReturnPokeToBall,
+ LinkOpponentHandleTrainerThrow,
+ LinkOpponentHandleTrainerSlide,
+ LinkOpponentHandleTrainerSlideBack,
+ LinkOpponentHandlecmd10,
+ LinkOpponentHandlecmd11,
+ LinkOpponentHandlecmd12,
+ LinkOpponentHandleBallThrow,
+ LinkOpponentHandlePuase,
+ LinkOpponentHandleMoveAnimation,
+ LinkOpponentHandlePrintString,
+ LinkOpponentHandlePrintStringPlayerOnly,
+ LinkOpponentHandlecmd18,
+ LinkOpponentHandlecmd19,
+ LinkOpponentHandlecmd20,
+ LinkOpponentHandleOpenBag,
+ LinkOpponentHandlecmd22,
+ LinkOpponentHandlecmd23,
+ LinkOpponentHandleHealthBarUpdate,
+ LinkOpponentHandleExpBarUpdate,
+ LinkOpponentHandleStatusIconUpdate,
+ LinkOpponentHandleStatusAnimation,
+ LinkOpponentHandleStatusXor,
+ LinkOpponentHandlecmd29,
+ LinkOpponentHandleDMATransfer,
+ LinkOpponentHandlecmd31,
+ LinkOpponentHandlecmd32,
+ LinkOpponentHandlecmd33,
+ LinkOpponentHandlecmd34,
+ LinkOpponentHandlecmd35,
+ LinkOpponentHandlecmd36,
+ LinkOpponentHandlecmd37,
+ LinkOpponentHandlecmd38,
+ LinkOpponentHandlecmd39,
+ LinkOpponentHandlecmd40,
+ LinkOpponentHandleHitAnimation,
+ LinkOpponentHandlecmd42,
+ LinkOpponentHandleEffectivenessSound,
+ LinkOpponentHandlecmd44,
+ LinkOpponentHandleFaintingCry,
+ LinkOpponentHandleIntroSlide,
+ LinkOpponentHandleTrainerBallThrow,
+ LinkOpponentHandlecmd48,
+ LinkOpponentHandlecmd49,
+ LinkOpponentHandlecmd50,
+ LinkOpponentHandleSpriteInvisibility,
+ LinkOpponentHandleBattleAnimation,
+ LinkOpponentHandleLinkStandbyMsg,
+ LinkOpponentHandleResetActionMoveSelection,
+ LinkOpponentHandlecmd55,
+ LinkOpponentHandlecmd56
+};
+
+// code
+
+void nullsub_47(void)
+{
+}
+
+void SetBankFuncToLinkOpponentBufferRunCommand(void)
+{
+ gBattleBankFunc[gActiveBank] = sub_803752C;
+}
+
+void sub_803752C(void)
+{
+ if (gBattleExecBuffer & gBitTable[gActiveBank])
+ {
+ if (gBattleBufferA[gActiveBank][0] <= 0x38)
+ gLinkOpponentBufferCommands[gBattleBufferA[gActiveBank][0]]();
+ else
+ LinkOpponentBufferExecCompleted();
+ }
+}
+
+void sub_803757C(void)
+{
+ if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy)
+ LinkOpponentBufferExecCompleted();
+}
+
+void sub_80375B4(void)
+{
+ if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy)
+ {
+ sub_8031B74(gSprites[gObjectBankIDs[gActiveBank]].oam.affineParam);
+ gSprites[gObjectBankIDs[gActiveBank]].oam.tileNum = gSprites[gObjectBankIDs[gActiveBank]].data5;
+ FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]);
+ DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]);
+ LinkOpponentBufferExecCompleted();
+ }
+}
+
+void sub_8037644(void)
+{
+ if ((--ewram17810[gActiveBank].unk9) == 0xFF)
+ {
+ ewram17810[gActiveBank].unk9 = 0;
+ LinkOpponentBufferExecCompleted();
+ }
+}
+
+void sub_8037680(void)
+{
+ bool8 r6 = FALSE;
+
+ if (!IsDoubleBattle() || (IsDoubleBattle() && (gBattleTypeFlags & BATTLE_TYPE_MULTI)))
+ {
+ if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy)
+ r6 = TRUE;
+ }
+ else
+ {
+ if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy
+ && gSprites[gHealthboxIDs[gActiveBank ^ 2]].callback == SpriteCallbackDummy)
+ r6 = TRUE;
+ }
+ if (IsCryPlayingOrClearCrySongs())
+ r6 = FALSE;
+
+ if (r6)
+ {
+ if (GetBankIdentity(gActiveBank) == 1)
+ {
+ if (!ewram17810[gActiveBank].unk1_0 || !ewram17810[gActiveBank ^ 2].unk1_0)
+ return;
+ ewram17810[gActiveBank].unk0_7 = 0;
+ ewram17810[gActiveBank].unk1_0 = 0;
+ ewram17810[gActiveBank ^ 2].unk0_7 = 0;
+ ewram17810[gActiveBank ^ 2].unk1_0 = 0;
+ FreeSpriteTilesByTag(0x27F9);
+ FreeSpritePaletteByTag(0x27F9);
+ }
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ {
+ if (GetBankIdentity(gActiveBank) == 1)
+ m4aMPlayContinue(&gMPlay_BGM);
+ }
+ else
+ {
+ m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 256);
+ }
+ ewram17810[gActiveBank].unk9 = 3;
+ gBattleBankFunc[gActiveBank] = sub_8037644;
+ }
+}
+
+void sub_8037840(void)
+{
+ if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank].unk0_7)
+ sub_8141828(gActiveBank, &gEnemyParty[gBattlePartyID[gActiveBank]]);
+ if (!ewram17810[gActiveBank ^ 2].unk0_3 && !ewram17810[gActiveBank ^ 2].unk0_7)
+ sub_8141828(gActiveBank ^ 2, &gEnemyParty[gBattlePartyID[gActiveBank ^ 2]]);
+ if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank ^ 2].unk0_3)
+ {
+ if ((gBattleTypeFlags & BATTLE_TYPE_MULTI) && GetBankIdentity(gActiveBank) == 3)
+ {
+ if (++ewram17810[gActiveBank].unk9 == 1)
+ return;
+ ewram17810[gActiveBank].unk9 = 0;
+ }
+ if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI))
+ {
+ DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank ^ 2]]);
+ sub_8045A5C(
+ gHealthboxIDs[gActiveBank ^ 2],
+ &gEnemyParty[gBattlePartyID[gActiveBank ^ 2]],
+ 0);
+ sub_804777C(gActiveBank ^ 2);
+ sub_8043DFC(gHealthboxIDs[gActiveBank ^ 2]);
+ sub_8032984(
+ gActiveBank ^ 2,
+ GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank ^ 2]], MON_DATA_SPECIES));
+ }
+ DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank]]);
+ sub_8045A5C(
+ gHealthboxIDs[gActiveBank],
+ &gEnemyParty[gBattlePartyID[gActiveBank]],
+ 0);
+ sub_804777C(gActiveBank);
+ sub_8043DFC(gHealthboxIDs[gActiveBank]);
+ sub_8032984(
+ gActiveBank,
+ GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES));
+
+ ewram17840.unk9_0 = 0;
+ gBattleBankFunc[gActiveBank] = sub_8037680;
+ }
+}
+
+void sub_8037A74(void)
+{
+ if (gSprites[gObjectBankIDs[gActiveBank]].animEnded == TRUE
+ && gSprites[gObjectBankIDs[gActiveBank]].pos2.x == 0)
+ {
+ if (!ewram17810[gActiveBank].unk0_7)
+ {
+ sub_8141828(gActiveBank, &gEnemyParty[gBattlePartyID[gActiveBank]]);
+ return;
+ }
+ if (ewram17810[gActiveBank].unk1_0)
+ {
+ ewram17810[gActiveBank].unk0_7 = 0;
+ ewram17810[gActiveBank].unk1_0 = 0;
+ FreeSpriteTilesByTag(0x27F9);
+ FreeSpritePaletteByTag(0x27F9);
+ LinkOpponentBufferExecCompleted();
+ return;
+ }
+ }
+}
+
+void sub_8037B24(void)
+{
+ s16 r4 = sub_8045C78(gActiveBank, gHealthboxIDs[gActiveBank], 0, 0);
+
+ sub_8043DFC(gHealthboxIDs[gActiveBank]);
+ if (r4 != -1)
+ sub_80440EC(gHealthboxIDs[gActiveBank], r4, 0);
+ else
+ LinkOpponentBufferExecCompleted();
+}
+
+void sub_8037B78(void)
+{
+ if (!gSprites[gObjectBankIDs[gActiveBank]].inUse)
+ {
+ sub_8043DB0(gHealthboxIDs[gActiveBank]);
+ LinkOpponentBufferExecCompleted();
+ }
+}
+
+void sub_8037BBC(void)
+{
+ if (!ewram17810[gActiveBank].unk0_6)
+ {
+ FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]);
+ DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]);
+ sub_8032A08(gActiveBank);
+ sub_8043DB0(gHealthboxIDs[gActiveBank]);
+ LinkOpponentBufferExecCompleted();
+ }
+}
+
+void sub_8037C2C(void)
+{
+ if (gUnknown_03004210.state == 0)
+ LinkOpponentBufferExecCompleted();
+}
+
+void dp01t_0F_4_move_anim(void)
+{
+ u8 spriteId = gObjectBankIDs[gActiveBank];
+
+ if (gSprites[spriteId].data1 == 32)
+ {
+ gSprites[spriteId].data1 = 0;
+ gSprites[spriteId].invisible = FALSE;
+ gDoingBattleAnim = 0;
+ LinkOpponentBufferExecCompleted();
+ }
+ else
+ {
+ if (((u16)gSprites[spriteId].data1 % 4) == 0)
+ gSprites[spriteId].invisible ^= 1;
+ gSprites[spriteId].data1++;
+ }
+}
+
+void sub_8037CC0(void)
+{
+ if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy)
+ {
+ if (ewram17800[gActiveBank].substituteSprite)
+ move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6);
+ gBattleBankFunc[gActiveBank] = sub_8037D2C;
+ }
+}
+
+void sub_8037D2C(void)
+{
+ if (!ewram17810[gActiveBank].unk0_6)
+ {
+ CreateTask(c3_0802FDF4, 10);
+ LinkOpponentBufferExecCompleted();
+ }
+}
+
+void sub_8037D64(void)
+{
+ if (ewram17810[gActiveBank].unk1_0)
+ {
+ ewram17810[gActiveBank].unk0_7 = 0;
+ ewram17810[gActiveBank].unk1_0 = 0;
+ FreeSpriteTilesByTag(0x27F9);
+ FreeSpritePaletteByTag(0x27F9);
+ StartSpriteAnim(&gSprites[gObjectBankIDs[gActiveBank]], 0);
+ sub_8045A5C(
+ gHealthboxIDs[gActiveBank],
+ &gEnemyParty[gBattlePartyID[gActiveBank]],
+ 0);
+ sub_804777C(gActiveBank);
+ sub_8043DFC(gHealthboxIDs[gActiveBank]);
+ sub_8031F88(gActiveBank);
+ gBattleBankFunc[gActiveBank] = sub_8037CC0;
+ }
+}
+
+void sub_8037E30(void)
+{
+ if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank].unk0_7)
+ sub_8141828(gActiveBank, &gEnemyParty[gBattlePartyID[gActiveBank]]);
+ if (gSprites[gUnknown_0300434C[gActiveBank]].callback == SpriteCallbackDummy
+ && !ewram17810[gActiveBank].unk0_3)
+ {
+ DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank]]);
+ sub_8032984(gActiveBank, GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES));
+ gBattleBankFunc[gActiveBank] = sub_8037D64;
+ }
+}
+
+void sub_8037EF0(void)
+{
+ if (gReceivedRemoteLinkPlayers == 0)
+ {
+ m4aSongNumStop(SE_HINSI);
+ gMain.inBattle = FALSE;
+ gMain.callback1 = gPreBattleCallback1;
+ SetMainCallback2(c2_8011A1C);
+ }
+}
+
+void sub_8037F34(void)
+{
+ if (!gPaletteFade.active)
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ sub_800832C();
+ gBattleBankFunc[gActiveBank] = sub_8037EF0;
+ }
+ else
+ {
+ m4aSongNumStop(SE_HINSI);
+ gMain.inBattle = FALSE;
+ gMain.callback1 = gPreBattleCallback1;
+ SetMainCallback2(gMain.savedCallback);
+ }
+ }
+}
+
+void sub_8037FAC(void)
+{
+ if (!ewram17810[gActiveBank].unk0_4)
+ LinkOpponentBufferExecCompleted();
+}
+
+void sub_8037FD8(void)
+{
+ if (!ewram17810[gActiveBank].unk0_5)
+ LinkOpponentBufferExecCompleted();
+}
+
+void LinkOpponentBufferExecCompleted(void)
+{
+ gBattleBankFunc[gActiveBank] = sub_803752C;
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ u8 playerId = GetMultiplayerId();
+
+ PrepareBufferDataTransferLink(2, 4, &playerId);
+ gBattleBufferA[gActiveBank][0] = 0x38;
+ }
+ else
+ {
+ gBattleExecBuffer &= ~gBitTable[gActiveBank];
+ }
+}
+
void LinkOpponentHandleGetAttributes(void)
{
u8 buffer[0x100];
@@ -129,8 +588,8 @@ void LinkOpponentHandleGetAttributes(void)
r4 >>= 1;
}
}
- dp01_build_cmdbuf_x1D_1D_numargs_varargs(1, r6, buffer);
- dp01_tbl4_exec_completed();
+ Emitcmd29(1, r6, buffer);
+ LinkOpponentBufferExecCompleted();
}
u32 dp01_getattr_by_ch1_for_player_pokemon__(u8 a, u8 *buffer)
@@ -438,12 +897,12 @@ u32 dp01_getattr_by_ch1_for_player_pokemon__(u8 a, u8 *buffer)
return size;
}
-void sub_803889C(void)
+void LinkOpponentHandlecmd1(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_80388A8(void)
+void LinkOpponentHandleSetAttributes(void)
{
u8 i;
u8 r4;
@@ -462,7 +921,7 @@ void sub_80388A8(void)
r4 >>= 1;
}
}
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
void sub_8038900(u8 a)
@@ -681,7 +1140,7 @@ void sub_8038900(u8 a)
}
}
-void sub_8039220(void)
+void LinkOpponentHandlecmd3(void)
{
u8 *dst;
u8 i;
@@ -689,14 +1148,14 @@ void sub_8039220(void)
dst = (u8 *)&gEnemyParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1];
for (i = 0; i < gBattleBufferA[gActiveBank][2]; i++)
dst[i] = gBattleBufferA[gActiveBank][3 + i];
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039294(void)
+void LinkOpponentHandleLoadPokeSprite(void)
{
u16 species = GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES);
- sub_8031794(&gEnemyParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ BattleLoadOpponentMonSprite(&gEnemyParty[gBattlePartyID[gActiveBank]], gActiveBank);
GetMonSpriteTemplate_803C56C(species, GetBankIdentity(gActiveBank));
gObjectBankIDs[gActiveBank] = CreateSprite(
&gUnknown_02024E8C,
@@ -711,7 +1170,7 @@ void sub_8039294(void)
gBattleBankFunc[gActiveBank] = sub_8037A74;
}
-void sub_80393E4(void)
+void LinkOpponentHandleSendOutPoke(void)
{
gBattlePartyID[gActiveBank] = gBattleBufferA[gActiveBank][1];
sub_8039430(gActiveBank, gBattleBufferA[gActiveBank][2]);
@@ -726,7 +1185,7 @@ void sub_8039430(u8 a, u8 b)
gBattlePartyID[a] = gBattleBufferA[a][1];
species = GetMonData(&gEnemyParty[gBattlePartyID[a]], MON_DATA_SPECIES);
gUnknown_0300434C[a] = CreateInvisibleSpriteWithCallback(sub_80312F0);
- sub_8031794(&gEnemyParty[gBattlePartyID[a]], a);
+ BattleLoadOpponentMonSprite(&gEnemyParty[gBattlePartyID[a]], a);
GetMonSpriteTemplate_803C56C(species, GetBankIdentity(a));
gObjectBankIDs[a] = CreateSprite(
&gUnknown_02024E8C,
@@ -743,7 +1202,7 @@ void sub_8039430(u8 a, u8 b)
gSprites[gUnknown_0300434C[a]].data0 = sub_8046400(0, 0xFE);
}
-void sub_80395B4(void)
+void LinkOpponentHandleReturnPokeToBall(void)
{
if (gBattleBufferA[gActiveBank][1] == 0)
{
@@ -756,7 +1215,7 @@ void sub_80395B4(void)
DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]);
sub_8032A08(gActiveBank);
sub_8043DB0(gHealthboxIDs[gActiveBank]);
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
}
@@ -765,7 +1224,7 @@ void sub_8039648(void)
switch (ewram17810[gActiveBank].unk4)
{
case 0:
- if (ewram17800[gActiveBank].unk0_2)
+ if (ewram17800[gActiveBank].substituteSprite)
move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5);
ewram17810[gActiveBank].unk4 = 1;
break;
@@ -780,7 +1239,7 @@ void sub_8039648(void)
}
}
-void sub_80396D0(void)
+void LinkOpponentHandleTrainerThrow(void)
{
s16 xOffset;
u32 gender;
@@ -814,12 +1273,12 @@ void sub_80396D0(void)
gBattleBankFunc[gActiveBank] = sub_803757C;
}
-void sub_80398A4(void)
+void LinkOpponentHandleTrainerSlide(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_80398B0(void)
+void LinkOpponentHandleTrainerSlideBack(void)
{
oamt_add_pos2_onto_pos1(&gSprites[gObjectBankIDs[gActiveBank]]);
gSprites[gObjectBankIDs[gActiveBank]].data0 = 35;
@@ -830,11 +1289,11 @@ void sub_80398B0(void)
gBattleBankFunc[gActiveBank] = sub_80375B4;
}
-void sub_803995C(void)
+void LinkOpponentHandlecmd10(void)
{
if (ewram17810[gActiveBank].unk4 == 0)
{
- if (ewram17800[gActiveBank].unk0_2)
+ if (ewram17800[gActiveBank].substituteSprite)
move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5);
ewram17810[gActiveBank].unk4++;
}
@@ -847,27 +1306,27 @@ void sub_803995C(void)
}
}
-void sub_8039A00(void)
+void LinkOpponentHandlecmd11(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039A0C(void)
+void LinkOpponentHandlecmd12(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039A18(void)
+void LinkOpponentHandleBallThrow(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039A24(void)
+void LinkOpponentHandlePuase(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039A30(void)
+void LinkOpponentHandleMoveAnimation(void)
{
if (!mplay_80342A4(gActiveBank))
{
@@ -890,7 +1349,7 @@ void sub_8039A30(void)
// Dead code. sub_8031720 always returns 0.
if (sub_8031720(r0, gUnknown_0202F7C4) != 0)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
else
{
@@ -909,7 +1368,7 @@ void sub_8039B64(void)
switch (ewram17810[gActiveBank].unk4)
{
case 0:
- if (ewram17800[gActiveBank].unk0_2 && !ewram17800[gActiveBank].unk0_3)
+ if (ewram17800[gActiveBank].substituteSprite && !ewram17800[gActiveBank].unk0_3)
{
ewram17800[gActiveBank].unk0_3 = 1;
move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5);
@@ -929,7 +1388,7 @@ void sub_8039B64(void)
if (!gAnimScriptActive)
{
sub_80326EC(1);
- if ((ewram17800[gActiveBank].unk0_2) && r7 <= 1)
+ if ((ewram17800[gActiveBank].substituteSprite) && r7 <= 1)
{
move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6);
ewram17800[gActiveBank].unk0_3 = 0;
@@ -945,13 +1404,13 @@ void sub_8039B64(void)
gActiveBank,
gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
ewram17810[gActiveBank].unk4 = 0;
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
break;
}
}
-void sub_8039CC8(void)
+void LinkOpponentHandlePrintString(void)
{
gUnknown_030042A4 = 0;
gUnknown_030042A0 = 0;
@@ -960,42 +1419,42 @@ void sub_8039CC8(void)
gBattleBankFunc[gActiveBank] = sub_8037C2C;
}
-void sub_8039D2C(void)
+void LinkOpponentHandlePrintStringPlayerOnly(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039D38(void)
+void LinkOpponentHandlecmd18(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039D44(void)
+void LinkOpponentHandlecmd19(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039D50(void)
+void LinkOpponentHandlecmd20(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039D5C(void)
+void LinkOpponentHandleOpenBag(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039D68(void)
+void LinkOpponentHandlecmd22(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039D74(void)
+void LinkOpponentHandlecmd23(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039D80(void)
+void LinkOpponentHandleHealthBarUpdate(void)
{
s16 r7;
@@ -1017,12 +1476,12 @@ void sub_8039D80(void)
gBattleBankFunc[gActiveBank] = sub_8037B24;
}
-void sub_8039E70(void)
+void LinkOpponentHandleExpBarUpdate(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039E7C(void)
+void LinkOpponentHandleStatusIconUpdate(void)
{
if (mplay_80342A4(gActiveBank) == 0)
{
@@ -1032,7 +1491,7 @@ void sub_8039E7C(void)
}
}
-void sub_8039EF0(void)
+void LinkOpponentHandleStatusAnimation(void)
{
if (mplay_80342A4(gActiveBank) == 0)
{
@@ -1046,80 +1505,80 @@ void sub_8039EF0(void)
}
}
-void sub_8039F58(void)
+void LinkOpponentHandleStatusXor(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039F64(void)
+void LinkOpponentHandlecmd29(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039F70(void)
+void LinkOpponentHandleDMATransfer(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039F7C(void)
+void LinkOpponentHandlecmd31(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039F88(void)
+void LinkOpponentHandlecmd32(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039F94(void)
+void LinkOpponentHandlecmd33(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039FA0(void)
+void LinkOpponentHandlecmd34(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039FAC(void)
+void LinkOpponentHandlecmd35(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039FB8(void)
+void LinkOpponentHandlecmd36(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039FC4(void)
+void LinkOpponentHandlecmd37(void)
{
gUnknown_020238C8.unk0_0 = 0;
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_8039FE0(void)
+void LinkOpponentHandlecmd38(void)
{
gUnknown_020238C8.unk0_0 = gBattleBufferA[gActiveBank][1];
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_803A018(void)
+void LinkOpponentHandlecmd39(void)
{
gUnknown_020238C8.unk0_7 = 0;
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_803A030(void)
+void LinkOpponentHandlecmd40(void)
{
gUnknown_020238C8.unk0_7 ^= 1;
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void dp01t_29_4_blink(void)
+void LinkOpponentHandleHitAnimation(void)
{
if (gSprites[gObjectBankIDs[gActiveBank]].invisible == TRUE)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
else
{
@@ -1130,12 +1589,12 @@ void dp01t_29_4_blink(void)
}
}
-void sub_803A0C8(void)
+void LinkOpponentHandlecmd42(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_803A0D4(void)
+void LinkOpponentHandleEffectivenessSound(void)
{
s8 pan;
@@ -1144,31 +1603,31 @@ void sub_803A0D4(void)
else
pan = 63;
PlaySE12WithPanning(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8), pan);
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_803A118(void)
+void LinkOpponentHandlecmd44(void)
{
PlayFanfare(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_803A148(void)
+void LinkOpponentHandleFaintingCry(void)
{
PlayCry3(
GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES),
25, 5);
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void dp01t_2E_4_battle_intro(void)
+void LinkOpponentHandleIntroSlide(void)
{
sub_80E43C0(gBattleBufferA[gActiveBank][1]);
gUnknown_02024DE8 |= 1;
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_803A1B8(void)
+void LinkOpponentHandleTrainerBallThrow(void)
{
u8 taskId;
@@ -1219,11 +1678,11 @@ void sub_803A3A8(struct Sprite *sprite)
DestroySprite(sprite);
}
-void sub_803A3DC(void)
+void LinkOpponentHandlecmd48(void)
{
if (gBattleBufferA[gActiveBank][1] != 0 && GetBankSide(gActiveBank) == 0)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
return;
}
@@ -1256,33 +1715,33 @@ void sub_803A4E0(void)
if (ewram17810[gActiveBank].unk5++ >= 93)
{
ewram17810[gActiveBank].unk5 = 0;
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
}
-void sub_803A520(void)
+void LinkOpponentHandlecmd49(void)
{
if (ewram17810[gActiveBank].unk0_0)
gTasks[gUnknown_02024E68[gActiveBank]].func = sub_8044CA0;
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_803A56C(void)
+void LinkOpponentHandlecmd50(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_803A578(void)
+void LinkOpponentHandleSpriteInvisibility(void)
{
if (AnimBankSpriteExists(gActiveBank) != 0)
{
gSprites[gObjectBankIDs[gActiveBank]].invisible = gBattleBufferA[gActiveBank][1];
sub_8031F88(gActiveBank);
}
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void bx_exec_buffer_A_ch0_tbl4(void)
+void LinkOpponentHandleBattleAnimation(void)
{
if (mplay_80342A4(gActiveBank) == 0)
{
@@ -1290,23 +1749,23 @@ void bx_exec_buffer_A_ch0_tbl4(void)
u16 r4 = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8);
if (move_anim_start_t3(gActiveBank, gActiveBank, gActiveBank, r3, r4) != 0)
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
else
gBattleBankFunc[gActiveBank] = sub_8037FD8;
}
}
-void sub_803A640(void)
+void LinkOpponentHandleLinkStandbyMsg(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_803A64C(void)
+void LinkOpponentHandleResetActionMoveSelection(void)
{
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
}
-void sub_803A658(void)
+void LinkOpponentHandlecmd55(void)
{
if (gBattleBufferA[gActiveBank][1] == 3)
gBattleOutcome = gBattleBufferA[gActiveBank][1];
@@ -1314,10 +1773,10 @@ void sub_803A658(void)
gBattleOutcome = gBattleBufferA[gActiveBank][1] ^ 3;
FadeOutMapMusic(5);
BeginFastPaletteFade(3);
- dp01_tbl4_exec_completed();
+ LinkOpponentBufferExecCompleted();
gBattleBankFunc[gActiveBank] = sub_8037F34;
}
-void nullsub_48(void)
+void LinkOpponentHandlecmd56(void)
{
}
diff --git a/src/battle_811DA74.c b/src/battle_controller_linkpartner.c
index dc3a76eec..3e34b2e25 100644
--- a/src/battle_811DA74.c
+++ b/src/battle_controller_linkpartner.c
@@ -64,7 +64,6 @@ extern u8 gUnknown_0300434C[];
extern u8 gBattleMonForms[];
extern u8 gAnimScriptActive;
extern void (*gAnimScriptCallback)(void);
-extern void (*const gLinkPartnerBufferCommands[])(void);
extern u8 move_anim_start_t3();
extern u8 AnimBankSpriteExists();
@@ -87,12 +86,12 @@ extern void StoreSpriteCallbackInData6();
extern void sub_8078B34(struct Sprite *);
extern void sub_80105EC(struct Sprite *);
extern s32 sub_803FC34(u16);
-extern void sub_8031AF4();
+extern void LoadPlayerTrainerBankSprite();
extern void sub_80313A0(struct Sprite *);
extern u8 sub_8046400();
extern void sub_80312F0(struct Sprite *);
extern u8 CreateInvisibleSpriteWithCallback();
-extern void sub_80318FC();
+extern void BattleLoadPlayerMonSprite();
extern u8 sub_8077ABC();
extern u8 sub_8077F68();
extern u8 sub_8079E90();
@@ -111,6 +110,8 @@ extern void sub_8031F88();
extern void sub_8141828();
extern void c2_8011A1C(void);
+// this file's functions
+
void LinkPartnerBufferRunCommand(void);
void sub_811E0A0(void);
void LinkPartnerBufferExecCompleted(void);
@@ -122,6 +123,127 @@ void sub_811FF30(void);
void sub_812071C(u8);
void sub_81208E0(void);
+void LinkPartnerHandleGetAttributes(void);
+void LinkPartnerHandlecmd1(void);
+void LinkPartnerHandleSetAttributes(void);
+void LinkPartnerHandlecmd3(void);
+void LinkPartnerHandleLoadPokeSprite(void);
+void LinkPartnerHandleSendOutPoke(void);
+void LinkPartnerHandleReturnPokeToBall(void);
+void LinkPartnerHandleTrainerThrow(void);
+void LinkPartnerHandleTrainerSlide(void);
+void LinkPartnerHandleTrainerSlideBack(void);
+void LinkPartnerHandlecmd10(void);
+void LinkPartnerHandlecmd11(void);
+void LinkPartnerHandlecmd12(void);
+void LinkPartnerHandleBallThrow(void);
+void LinkPartnerHandlePuase(void);
+void LinkPartnerHandleMoveAnimation(void);
+void LinkPartnerHandlePrintString(void);
+void LinkPartnerHandlePrintStringPlayerOnly(void);
+void LinkPartnerHandlecmd18(void);
+void LinkPartnerHandlecmd19(void);
+void LinkPartnerHandlecmd20(void);
+void LinkPartnerHandleOpenBag(void);
+void LinkPartnerHandlecmd22(void);
+void LinkPartnerHandlecmd23(void);
+void LinkPartnerHandleHealthBarUpdate(void);
+void LinkPartnerHandleExpBarUpdate(void);
+void LinkPartnerHandleStatusIconUpdate(void);
+void LinkPartnerHandleStatusAnimation(void);
+void LinkPartnerHandleStatusXor(void);
+void LinkPartnerHandlecmd29(void);
+void LinkPartnerHandleDMATransfer(void);
+void LinkPartnerHandlecmd31(void);
+void LinkPartnerHandlecmd32(void);
+void LinkPartnerHandlecmd33(void);
+void LinkPartnerHandlecmd34(void);
+void LinkPartnerHandlecmd35(void);
+void LinkPartnerHandlecmd36(void);
+void LinkPartnerHandlecmd37(void);
+void LinkPartnerHandlecmd38(void);
+void LinkPartnerHandlecmd39(void);
+void LinkPartnerHandlecmd40(void);
+void LinkPartnerHandleHitAnimation(void);
+void LinkPartnerHandlecmd42(void);
+void LinkPartnerHandleEffectivenessSound(void);
+void LinkPartnerHandlecmd44(void);
+void LinkPartnerHandleFaintingCry(void);
+void LinkPartnerHandleIntroSlide(void);
+void LinkPartnerHandleTrainerBallThrow(void);
+void LinkPartnerHandlecmd48(void);
+void LinkPartnerHandlecmd49(void);
+void LinkPartnerHandlecmd50(void);
+void LinkPartnerHandleSpriteInvisibility(void);
+void LinkPartnerHandleBattleAnimation(void);
+void LinkPartnerHandleLinkStandbyMsg(void);
+void LinkPartnerHandleResetActionMoveSelection(void);
+void LinkPartnerHandlecmd55(void);
+void LinkPartnerHandlecmd56(void);
+
+// const data
+typedef void (*BattleBufferCmd) (void);
+static const BattleBufferCmd gLinkPartnerBufferCommands[] =
+{
+ LinkPartnerHandleGetAttributes,
+ LinkPartnerHandlecmd1,
+ LinkPartnerHandleSetAttributes,
+ LinkPartnerHandlecmd3,
+ LinkPartnerHandleLoadPokeSprite,
+ LinkPartnerHandleSendOutPoke,
+ LinkPartnerHandleReturnPokeToBall,
+ LinkPartnerHandleTrainerThrow,
+ LinkPartnerHandleTrainerSlide,
+ LinkPartnerHandleTrainerSlideBack,
+ LinkPartnerHandlecmd10,
+ LinkPartnerHandlecmd11,
+ LinkPartnerHandlecmd12,
+ LinkPartnerHandleBallThrow,
+ LinkPartnerHandlePuase,
+ LinkPartnerHandleMoveAnimation,
+ LinkPartnerHandlePrintString,
+ LinkPartnerHandlePrintStringPlayerOnly,
+ LinkPartnerHandlecmd18,
+ LinkPartnerHandlecmd19,
+ LinkPartnerHandlecmd20,
+ LinkPartnerHandleOpenBag,
+ LinkPartnerHandlecmd22,
+ LinkPartnerHandlecmd23,
+ LinkPartnerHandleHealthBarUpdate,
+ LinkPartnerHandleExpBarUpdate,
+ LinkPartnerHandleStatusIconUpdate,
+ LinkPartnerHandleStatusAnimation,
+ LinkPartnerHandleStatusXor,
+ LinkPartnerHandlecmd29,
+ LinkPartnerHandleDMATransfer,
+ LinkPartnerHandlecmd31,
+ LinkPartnerHandlecmd32,
+ LinkPartnerHandlecmd33,
+ LinkPartnerHandlecmd34,
+ LinkPartnerHandlecmd35,
+ LinkPartnerHandlecmd36,
+ LinkPartnerHandlecmd37,
+ LinkPartnerHandlecmd38,
+ LinkPartnerHandlecmd39,
+ LinkPartnerHandlecmd40,
+ LinkPartnerHandleHitAnimation,
+ LinkPartnerHandlecmd42,
+ LinkPartnerHandleEffectivenessSound,
+ LinkPartnerHandlecmd44,
+ LinkPartnerHandleFaintingCry,
+ LinkPartnerHandleIntroSlide,
+ LinkPartnerHandleTrainerBallThrow,
+ LinkPartnerHandlecmd48,
+ LinkPartnerHandlecmd49,
+ LinkPartnerHandlecmd50,
+ LinkPartnerHandleSpriteInvisibility,
+ LinkPartnerHandleBattleAnimation,
+ LinkPartnerHandleLinkStandbyMsg,
+ LinkPartnerHandleResetActionMoveSelection,
+ LinkPartnerHandlecmd55,
+ LinkPartnerHandlecmd56,
+};
+// code starts here
void nullsub_74(void)
{
@@ -298,7 +420,7 @@ void sub_811E034(void)
{
if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy)
{
- if (ewram17800[gActiveBank].unk0_2)
+ if (ewram17800[gActiveBank].substituteSprite)
move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6);
gBattleBankFunc[gActiveBank] = sub_811E0A0;
}
@@ -379,7 +501,7 @@ void LinkPartnerBufferExecCompleted(void)
if (gBattleTypeFlags & 2)
{
multiplayerId = GetMultiplayerId();
- dp01_prepare_buffer_wireless_probably(2, 4, &multiplayerId);
+ PrepareBufferDataTransferLink(2, 4, &multiplayerId);
gBattleBufferA[gActiveBank][0] = 0x38;
}
else
@@ -421,7 +543,7 @@ void LinkPartnerHandleGetAttributes(void)
r4 >>= 1;
}
}
- dp01_build_cmdbuf_x1D_1D_numargs_varargs(1, r6, unk);
+ Emitcmd29(1, r6, unk);
LinkPartnerBufferExecCompleted();
}
@@ -731,7 +853,7 @@ u32 dp01_getattr_by_ch1_for_player_pokemon(u8 a, u8 *buffer)
return size;
}
-void sub_811EC04(void)
+void LinkPartnerHandlecmd1(void)
{
LinkPartnerBufferExecCompleted();
}
@@ -976,7 +1098,7 @@ void sub_811EC68(u8 a)
sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
}
-void sub_811F664(void)
+void LinkPartnerHandlecmd3(void)
{
u8 *dst;
u8 i;
@@ -987,9 +1109,9 @@ void sub_811F664(void)
LinkPartnerBufferExecCompleted();
}
-void sub_811F6D8(void)
+void LinkPartnerHandleLoadPokeSprite(void)
{
- sub_80318FC(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ BattleLoadPlayerMonSprite(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
GetMonSpriteTemplate_803C56C(
GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES),
GetBankIdentity(gActiveBank));
@@ -1005,11 +1127,11 @@ void sub_811F6D8(void)
gBattleBankFunc[gActiveBank] = sub_811DDE8;
}
-void sub_811F7F4(void)
+void LinkPartnerHandleSendOutPoke(void)
{
sub_8032AA8(gActiveBank, gBattleBufferA[gActiveBank][2]);
gBattlePartyID[gActiveBank] = gBattleBufferA[gActiveBank][1];
- sub_80318FC(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ BattleLoadPlayerMonSprite(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
sub_811F864(gActiveBank, gBattleBufferA[gActiveBank][2]);
gBattleBankFunc[gActiveBank] = sub_811E1BC;
}
@@ -1038,7 +1160,7 @@ void sub_811F864(u8 a, u8 b)
gSprites[gUnknown_0300434C[a]].data0 = sub_8046400(0, 0xFF);
}
-void sub_811F9D0(void)
+void LinkPartnerHandleReturnPokeToBall(void)
{
if (gBattleBufferA[gActiveBank][1] == 0)
{
@@ -1059,7 +1181,7 @@ void sub_811FA5C(void)
switch (ewram17810[gActiveBank].unk4)
{
case 0:
- if (ewram17800[gActiveBank].unk0_2)
+ if (ewram17800[gActiveBank].substituteSprite)
move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5);
ewram17810[gActiveBank].unk4 = 1;
break;
@@ -1074,7 +1196,7 @@ void sub_811FA5C(void)
}
}
-void sub_811FAE4(void)
+void LinkPartnerHandleTrainerThrow(void)
{
s16 xOffset;
u32 gender;
@@ -1092,7 +1214,7 @@ void sub_811FAE4(void)
xOffset = 0;
gender = gLinkPlayers[GetMultiplayerId() ^ 1].gender;
}
- sub_8031AF4(gender, gActiveBank);
+ LoadPlayerTrainerBankSprite(gender, gActiveBank);
GetMonSpriteTemplate_803C5A0(gender, GetBankIdentity(gActiveBank));
gObjectBankIDs[gActiveBank] = CreateSprite(
&gUnknown_02024E8C,
@@ -1105,12 +1227,12 @@ void sub_811FAE4(void)
gBattleBankFunc[gActiveBank] = sub_811DAE4;
}
-void sub_811FC30(void)
+void LinkPartnerHandleTrainerSlide(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_811FC3C(void)
+void LinkPartnerHandleTrainerSlideBack(void)
{
oamt_add_pos2_onto_pos1(&gSprites[gObjectBankIDs[gActiveBank]]);
gSprites[gObjectBankIDs[gActiveBank]].data0 = 35;
@@ -1121,11 +1243,11 @@ void sub_811FC3C(void)
gBattleBankFunc[gActiveBank] = sub_811DB1C;
}
-void sub_811FCE8(void)
+void LinkPartnerHandlecmd10(void)
{
if (ewram17810[gActiveBank].unk4 == 0)
{
- if (ewram17800[gActiveBank].unk0_2)
+ if (ewram17800[gActiveBank].substituteSprite)
move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5);
ewram17810[gActiveBank].unk4++;
}
@@ -1141,27 +1263,27 @@ void sub_811FCE8(void)
}
}
-void sub_811FDCC(void)
+void LinkPartnerHandlecmd11(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_811FDD8(void)
+void LinkPartnerHandlecmd12(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_811FDE4(void)
+void LinkPartnerHandleBallThrow(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_811FDF0(void)
+void LinkPartnerHandlePuase(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_811FDFC(void)
+void LinkPartnerHandleMoveAnimation(void)
{
if (!mplay_80342A4(gActiveBank))
{
@@ -1200,7 +1322,7 @@ void sub_811FF30(void)
switch (ewram17810[gActiveBank].unk4)
{
case 0:
- if (ewram17800[gActiveBank].unk0_2 && !ewram17800[gActiveBank].unk0_3)
+ if (ewram17800[gActiveBank].substituteSprite && !ewram17800[gActiveBank].unk0_3)
{
ewram17800[gActiveBank].unk0_3 = 1;
move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5);
@@ -1220,7 +1342,7 @@ void sub_811FF30(void)
if (!gAnimScriptActive)
{
sub_80326EC(1);
- if ((ewram17800[gActiveBank].unk0_2) && r7 <= 1)
+ if ((ewram17800[gActiveBank].substituteSprite) && r7 <= 1)
{
move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6);
ewram17800[gActiveBank].unk0_3 = 0;
@@ -1242,7 +1364,7 @@ void sub_811FF30(void)
}
}
-void sub_8120094(void)
+void LinkPartnerHandlePrintString(void)
{
gUnknown_030042A4 = 0;
gUnknown_030042A0 = 0;
@@ -1251,37 +1373,37 @@ void sub_8120094(void)
gBattleBankFunc[gActiveBank] = sub_811DFA0;
}
-void sub_81200F8(void)
+void LinkPartnerHandlePrintStringPlayerOnly(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_8120104(void)
+void LinkPartnerHandlecmd18(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_8120110(void)
+void LinkPartnerHandlecmd19(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_812011C(void)
+void LinkPartnerHandlecmd20(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_8120128(void)
+void LinkPartnerHandleOpenBag(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_8120134(void)
+void LinkPartnerHandlecmd22(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_8120140(void)
+void LinkPartnerHandlecmd23(void)
{
LinkPartnerBufferExecCompleted();
}
@@ -1337,70 +1459,70 @@ void LinkPartnerHandleStatusAnimation(void)
}
}
-void sub_8120324(void)
+void LinkPartnerHandleStatusXor(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_8120330(void)
+void LinkPartnerHandlecmd29(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_812033C(void)
+void LinkPartnerHandleDMATransfer(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_8120348(void)
+void LinkPartnerHandlecmd31(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_8120354(void)
+void LinkPartnerHandlecmd32(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_8120360(void)
+void LinkPartnerHandlecmd33(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_812036C(void)
+void LinkPartnerHandlecmd34(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_8120378(void)
+void LinkPartnerHandlecmd35(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_8120384(void)
+void LinkPartnerHandlecmd36(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_8120390(void)
+void LinkPartnerHandlecmd37(void)
{
gUnknown_020238C8.unk0_0 = 0;
LinkPartnerBufferExecCompleted();
}
-void sub_81203AC(void)
+void LinkPartnerHandlecmd38(void)
{
gUnknown_020238C8.unk0_0 = gBattleBufferA[gActiveBank][1];
LinkPartnerBufferExecCompleted();
}
-void sub_81203E4(void)
+void LinkPartnerHandlecmd39(void)
{
gUnknown_020238C8.unk0_7 = 0;
LinkPartnerBufferExecCompleted();
}
-void sub_81203FC(void)
+void LinkPartnerHandlecmd40(void)
{
gUnknown_020238C8.unk0_7 ^= 1;
LinkPartnerBufferExecCompleted();
@@ -1421,7 +1543,7 @@ void LinkPartnerHandleHitAnimation(void)
}
}
-void sub_8120494(void)
+void LinkPartnerHandlecmd42(void)
{
LinkPartnerBufferExecCompleted();
}
@@ -1438,7 +1560,7 @@ void LinkPartnerHandleEffectivenessSound(void)
LinkPartnerBufferExecCompleted();
}
-void sub_81204E4(void)
+void LinkPartnerHandlecmd44(void)
{
PlayFanfare(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
LinkPartnerBufferExecCompleted();
@@ -1452,14 +1574,14 @@ void LinkPartnerHandleFaintingCry(void)
LinkPartnerBufferExecCompleted();
}
-void dp01t_2E_3_battle_intro(void)
+void LinkPartnerHandleIntroSlide(void)
{
sub_80E43C0(gBattleBufferA[gActiveBank][1]);
gUnknown_02024DE8 |= 1;
LinkPartnerBufferExecCompleted();
}
-void sub_8120588(void)
+void LinkPartnerHandleTrainerBallThrow(void)
{
u8 r4;
u8 taskId;
@@ -1508,7 +1630,7 @@ void sub_812071C(u8 taskId)
sub_811F864(gActiveBank, 0);
gActiveBank ^= 2;
gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank];
- sub_80318FC(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ BattleLoadPlayerMonSprite(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
sub_811F864(gActiveBank, 0);
gActiveBank ^= 2;
}
@@ -1517,7 +1639,7 @@ void sub_812071C(u8 taskId)
DestroyTask(taskId);
}
-void dp01t_30_3_80EB11C(void)
+void LinkPartnerHandlecmd48(void)
{
if (gBattleBufferA[gActiveBank][1] != 0 && GetBankSide(gActiveBank) == 0)
{
@@ -1546,19 +1668,19 @@ void sub_81208E0(void)
}
}
-void sub_8120920(void)
+void LinkPartnerHandlecmd49(void)
{
if (ewram17810[gActiveBank].unk0_0)
gTasks[gUnknown_02024E68[gActiveBank]].func = sub_8044CA0;
LinkPartnerBufferExecCompleted();
}
-void sub_812096C(void)
+void LinkPartnerHandlecmd50(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_8120978(void)
+void LinkPartnerHandleSpriteInvisibility(void)
{
if (AnimBankSpriteExists(gActiveBank) != 0)
{
@@ -1568,7 +1690,7 @@ void sub_8120978(void)
LinkPartnerBufferExecCompleted();
}
-void sub_81209D8(void)
+void LinkPartnerHandleBattleAnimation(void)
{
if (mplay_80342A4(gActiveBank) == 0)
{
@@ -1582,17 +1704,17 @@ void sub_81209D8(void)
}
}
-void sub_8120A40(void)
+void LinkPartnerHandleLinkStandbyMsg(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_8120A4C(void)
+void LinkPartnerHandleResetActionMoveSelection(void)
{
LinkPartnerBufferExecCompleted();
}
-void sub_8120A58(void)
+void LinkPartnerHandlecmd55(void)
{
gBattleOutcome = gBattleBufferA[gActiveBank][1];
FadeOutMapMusic(5);
@@ -1601,6 +1723,6 @@ void sub_8120A58(void)
gBattleBankFunc[gActiveBank] = sub_811E29C;
}
-void nullsub_75(void)
+void LinkPartnerHandlecmd56(void)
{
}
diff --git a/src/battle_8.c b/src/battle_controller_opponent.c
index d9a61c3d7..72b56b962 100644
--- a/src/battle_8.c
+++ b/src/battle_controller_opponent.c
@@ -1,15 +1,19 @@
#include "global.h"
#include "battle.h"
-#include "battle_ai.h"
#include "battle_interface.h"
#include "data2.h"
-#include "graphics.h"
+#include "battle_811DA74.h"
+#include "battle_anim_813F0F4.h"
+#include "link.h"
+#include "m4a.h"
#include "main.h"
+#include "palette.h"
+#include "pokeball.h"
#include "pokemon.h"
-#include "rng.h"
#include "rom3.h"
-#include "songs.h"
+#include "rom_8077ABC.h"
#include "sound.h"
+#include "songs.h"
#include "sprite.h"
#include "string_util.h"
#include "task.h"
@@ -53,12 +57,17 @@ extern bool8 gDoingBattleAnim;
extern u16 gUnknown_02024DE8;
extern u8 gUnknown_02024E68[];
extern MainCallback gPreBattleCallback1;
+extern void (*const gOpponentBufferCommands[])(void);
+extern struct MusicPlayerInfo gMPlay_SE1;
+extern struct MusicPlayerInfo gMPlay_SE2;
+extern struct MusicPlayerInfo gMPlay_BGM;
+extern u32 gBattleExecBuffer;
extern u8 sub_8077ABC();
extern u8 sub_8077F68();
extern u8 sub_8079E90();
extern void sub_8033018(void);
-extern void sub_8031794();
+extern void BattleLoadOpponentMonSprite();
extern u8 GetBankIdentity(u8);
extern void sub_8032984(u8, u16);
extern void sub_80333D4(void);
@@ -107,8 +116,11 @@ extern void sub_8032E2C(void);
extern u8 AnimBankSpriteExists();
extern u8 move_anim_start_t3();
extern void sub_80334C0(void);
-extern void OpponentBufferExecCompleted(void);
+// this file's functions
+
+void OpponentBufferExecCompleted(void);
+void OpponentBufferRunCommand(void);
u32 sub_8033598(u8, u8 *);
void sub_8033E24(u8);
void sub_803495C(u8, u8);
@@ -117,6 +129,407 @@ void sub_8035238(void);
void sub_8035C10(struct Sprite *);
void sub_8035C44(u8);
void sub_8035E2C(void);
+void sub_80332D0(void);
+
+void OpponentHandleGetAttributes(void);
+void OpponentHandlecmd1(void);
+void OpponentHandleSetAttributes(void);
+void OpponentHandlecmd3(void);
+void OpponentHandleLoadPokeSprite(void);
+void OpponentHandleSendOutPoke(void);
+void OpponentHandleReturnPokeToBall(void);
+void OpponentHandleTrainerThrow(void);
+void OpponentHandleTrainerSlide(void);
+void OpponentHandleTrainerSlideBack(void);
+void OpponentHandlecmd10(void);
+void OpponentHandlecmd11(void);
+void OpponentHandlecmd12(void);
+void OpponentHandleBallThrow(void);
+void OpponentHandlePuase(void);
+void OpponentHandleMoveAnimation(void);
+void OpponentHandlePrintString(void);
+void OpponentHandlePrintStringPlayerOnly(void);
+void OpponentHandlecmd18(void);
+void OpponentHandlecmd19(void);
+void OpponentHandlecmd20(void);
+void OpponentHandleOpenBag(void);
+void OpponentHandlecmd22(void);
+void OpponentHandlecmd23(void);
+void OpponentHandleHealthBarUpdate(void);
+void OpponentHandleExpBarUpdate(void);
+void OpponentHandleStatusIconUpdate(void);
+void OpponentHandleStatusAnimation(void);
+void OpponentHandleStatusXor(void);
+void OpponentHandlecmd29(void);
+void OpponentHandleDMATransfer(void);
+void OpponentHandlecmd31(void);
+void OpponentHandlecmd32(void);
+void OpponentHandlecmd33(void);
+void OpponentHandlecmd34(void);
+void OpponentHandlecmd35(void);
+void OpponentHandlecmd36(void);
+void OpponentHandlecmd37(void);
+void OpponentHandlecmd38(void);
+void OpponentHandlecmd39(void);
+void OpponentHandlecmd40(void);
+void OpponentHandleHitAnimation(void);
+void OpponentHandlecmd42(void);
+void OpponentHandleEffectivenessSound(void);
+void OpponentHandlecmd44(void);
+void OpponentHandleFaintingCry(void);
+void OpponentHandleIntroSlide(void);
+void OpponentHandleTrainerBallThrow(void);
+void OpponentHandlecmd48(void);
+void OpponentHandlecmd49(void);
+void OpponentHandlecmd50(void);
+void OpponentHandleSpriteInvisibility(void);
+void OpponentHandleBattleAnimation(void);
+void OpponentHandleLinkStandbyMsg(void);
+void OpponentHandleResetActionMoveSelection(void);
+void OpponentHandlecmd55(void);
+void OpponentHandlecmd56(void);
+
+// const data
+typedef void (*BattleBufferCmd) (void);
+static const BattleBufferCmd gOpponentBufferCommands[] =
+{
+ OpponentHandleGetAttributes,
+ OpponentHandlecmd1,
+ OpponentHandleSetAttributes,
+ OpponentHandlecmd3,
+ OpponentHandleLoadPokeSprite,
+ OpponentHandleSendOutPoke,
+ OpponentHandleReturnPokeToBall,
+ OpponentHandleTrainerThrow,
+ OpponentHandleTrainerSlide,
+ OpponentHandleTrainerSlideBack,
+ OpponentHandlecmd10,
+ OpponentHandlecmd11,
+ OpponentHandlecmd12,
+ OpponentHandleBallThrow,
+ OpponentHandlePuase,
+ OpponentHandleMoveAnimation,
+ OpponentHandlePrintString,
+ OpponentHandlePrintStringPlayerOnly,
+ OpponentHandlecmd18,
+ OpponentHandlecmd19,
+ OpponentHandlecmd20,
+ OpponentHandleOpenBag,
+ OpponentHandlecmd22,
+ OpponentHandlecmd23,
+ OpponentHandleHealthBarUpdate,
+ OpponentHandleExpBarUpdate,
+ OpponentHandleStatusIconUpdate,
+ OpponentHandleStatusAnimation,
+ OpponentHandleStatusXor,
+ OpponentHandlecmd29,
+ OpponentHandleDMATransfer,
+ OpponentHandlecmd31,
+ OpponentHandlecmd32,
+ OpponentHandlecmd33,
+ OpponentHandlecmd34,
+ OpponentHandlecmd35,
+ OpponentHandlecmd36,
+ OpponentHandlecmd37,
+ OpponentHandlecmd38,
+ OpponentHandlecmd39,
+ OpponentHandlecmd40,
+ OpponentHandleHitAnimation,
+ OpponentHandlecmd42,
+ OpponentHandleEffectivenessSound,
+ OpponentHandlecmd44,
+ OpponentHandleFaintingCry,
+ OpponentHandleIntroSlide,
+ OpponentHandleTrainerBallThrow,
+ OpponentHandlecmd48,
+ OpponentHandlecmd49,
+ OpponentHandlecmd50,
+ OpponentHandleSpriteInvisibility,
+ OpponentHandleBattleAnimation,
+ OpponentHandleLinkStandbyMsg,
+ OpponentHandleResetActionMoveSelection,
+ OpponentHandlecmd55,
+ OpponentHandlecmd56,
+};
+
+static const u8 sUnknownBytes[] = {0xB0, 0xB0, 0xC8, 0x98, 0x28, 0x28, 0x28, 0x20};
+
+// code
+
+void nullsub_45(void)
+{
+}
+
+void SetBankFuncToOpponentBufferRunCommand(void)
+{
+ gBattleBankFunc[gActiveBank] = OpponentBufferRunCommand;
+}
+
+void OpponentBufferRunCommand(void)
+{
+ if (gBattleExecBuffer & gBitTable[gActiveBank])
+ {
+ if (gBattleBufferA[gActiveBank][0] <= 0x38)
+ gOpponentBufferCommands[gBattleBufferA[gActiveBank][0]]();
+ else
+ OpponentBufferExecCompleted();
+ }
+}
+
+void sub_8032B4C(void)
+{
+ if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy)
+ OpponentBufferExecCompleted();
+}
+
+// Duplicate of sub_8032B4C
+void sub_8032B84(void)
+{
+ if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy)
+ OpponentBufferExecCompleted();
+}
+
+void sub_8032BBC(void)
+{
+ if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy)
+ {
+ sub_8031B74(gSprites[gObjectBankIDs[gActiveBank]].oam.affineParam);
+ gSprites[gObjectBankIDs[gActiveBank]].oam.tileNum = gSprites[gObjectBankIDs[gActiveBank]].data5;
+ FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]);
+ DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]);
+ OpponentBufferExecCompleted();
+ }
+}
+
+void sub_8032C4C(void)
+{
+ if ((--ewram17810[gActiveBank].unk9) == 0xFF)
+ {
+ ewram17810[gActiveBank].unk9 = 0;
+ OpponentBufferExecCompleted();
+ }
+}
+
+void sub_8032C88(void)
+{
+ bool8 r6 = FALSE;
+
+ if (!IsDoubleBattle() || (IsDoubleBattle() && (gBattleTypeFlags & BATTLE_TYPE_MULTI)))
+ {
+ if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy)
+ r6 = TRUE;
+ }
+ else
+ {
+ if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy
+ && gSprites[gHealthboxIDs[gActiveBank ^ 2]].callback == SpriteCallbackDummy)
+ r6 = TRUE;
+ }
+ if (IsCryPlayingOrClearCrySongs())
+ r6 = FALSE;
+
+ if (r6 && ewram17810[gActiveBank].unk1_0 && ewram17810[gActiveBank ^ 2].unk1_0)
+ {
+ ewram17810[gActiveBank].unk0_7 = 0;
+ ewram17810[gActiveBank].unk1_0 = 0;
+ ewram17810[gActiveBank ^ 2].unk0_7 = 0;
+ ewram17810[gActiveBank ^ 2].unk1_0 = 0;
+ FreeSpriteTilesByTag(0x27F9);
+ FreeSpritePaletteByTag(0x27F9);
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ m4aMPlayContinue(&gMPlay_BGM);
+ else
+ m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 256);
+ ewram17810[gActiveBank].unk9 = 3;
+ gBattleBankFunc[gActiveBank] = sub_8032C4C;
+ }
+}
+
+void sub_8032E2C(void)
+{
+ if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank].unk0_7)
+ sub_8141828(gActiveBank, &gEnemyParty[gBattlePartyID[gActiveBank]]);
+ if (!ewram17810[gActiveBank ^ 2].unk0_3 && !ewram17810[gActiveBank ^ 2].unk0_7)
+ sub_8141828(gActiveBank ^ 2, &gEnemyParty[gBattlePartyID[gActiveBank ^ 2]]);
+ if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank ^ 2].unk0_3)
+ {
+ if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI))
+ {
+ DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank ^ 2]]);
+ sub_8045A5C(
+ gHealthboxIDs[gActiveBank ^ 2],
+ &gEnemyParty[gBattlePartyID[gActiveBank ^ 2]],
+ 0);
+ sub_804777C(gActiveBank ^ 2);
+ sub_8043DFC(gHealthboxIDs[gActiveBank ^ 2]);
+ sub_8032984(
+ gActiveBank ^ 2,
+ GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank ^ 2]], MON_DATA_SPECIES));
+ }
+ DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank]]);
+ sub_8045A5C(
+ gHealthboxIDs[gActiveBank],
+ &gEnemyParty[gBattlePartyID[gActiveBank]],
+ 0);
+ sub_804777C(gActiveBank);
+ sub_8043DFC(gHealthboxIDs[gActiveBank]);
+ sub_8032984(
+ gActiveBank,
+ GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES));
+
+ ewram17840.unk9_0 = 0;
+ gBattleBankFunc[gActiveBank] = sub_8032C88;
+ }
+}
+
+void sub_8033018(void)
+{
+ if (gSprites[gObjectBankIDs[gActiveBank]].animEnded == TRUE
+ && gSprites[gObjectBankIDs[gActiveBank]].pos2.x == 0)
+ {
+ if (!ewram17810[gActiveBank].unk0_7)
+ {
+ sub_8141828(gActiveBank, &gEnemyParty[gBattlePartyID[gActiveBank]]);
+ return;
+ }
+ if (ewram17810[gActiveBank].unk1_0)
+ {
+ ewram17810[gActiveBank].unk0_7 = 0;
+ ewram17810[gActiveBank].unk1_0 = 0;
+ FreeSpriteTilesByTag(0x27F9);
+ FreeSpritePaletteByTag(0x27F9);
+ OpponentBufferExecCompleted();
+ return;
+ }
+ }
+}
+
+void sub_80330C8(void)
+{
+ s16 r4 = sub_8045C78(gActiveBank, gHealthboxIDs[gActiveBank], 0, 0);
+
+ sub_8043DFC(gHealthboxIDs[gActiveBank]);
+ if (r4 != -1)
+ sub_80440EC(gHealthboxIDs[gActiveBank], r4, 0);
+ else
+ OpponentBufferExecCompleted();
+}
+
+void sub_803311C(void)
+{
+ if (!gSprites[gObjectBankIDs[gActiveBank]].inUse)
+ {
+ sub_8043DB0(gHealthboxIDs[gActiveBank]);
+ OpponentBufferExecCompleted();
+ }
+}
+
+void sub_8033160(void)
+{
+ if (!ewram17810[gActiveBank].unk0_6)
+ {
+ FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]);
+ DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]);
+ sub_8032A08(gActiveBank);
+ sub_8043DB0(gHealthboxIDs[gActiveBank]);
+ OpponentBufferExecCompleted();
+ }
+}
+
+void sub_80331D0(void)
+{
+ if (gUnknown_03004210.state == 0)
+ OpponentBufferExecCompleted();
+}
+
+void bx_blink_t7(void)
+{
+ u8 spriteId = gObjectBankIDs[gActiveBank];
+
+ if (gSprites[spriteId].data1 == 32)
+ {
+ gSprites[spriteId].data1 = 0;
+ gSprites[spriteId].invisible = FALSE;
+ gDoingBattleAnim = 0;
+ OpponentBufferExecCompleted();
+ }
+ else
+ {
+ if (((u16)gSprites[spriteId].data1 % 4) == 0)
+ gSprites[spriteId].invisible ^= 1;
+ gSprites[spriteId].data1++;
+ }
+}
+
+void sub_8033264(void)
+{
+ if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy)
+ {
+ if (ewram17800[gActiveBank].substituteSprite)
+ move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6);
+ gBattleBankFunc[gActiveBank] = sub_80332D0;
+ }
+}
+
+void sub_80332D0(void)
+{
+ if (!ewram17810[gActiveBank].unk0_6)
+ {
+ CreateTask(c3_0802FDF4, 10);
+ OpponentBufferExecCompleted();
+ }
+}
+
+void sub_8033308(void)
+{
+ if (ewram17810[gActiveBank].unk1_0)
+ {
+ ewram17810[gActiveBank].unk0_7 = 0;
+ ewram17810[gActiveBank].unk1_0 = 0;
+ FreeSpriteTilesByTag(0x27F9);
+ FreeSpritePaletteByTag(0x27F9);
+ StartSpriteAnim(&gSprites[gObjectBankIDs[gActiveBank]], 0);
+ sub_8045A5C(
+ gHealthboxIDs[gActiveBank],
+ &gEnemyParty[gBattlePartyID[gActiveBank]],
+ 0);
+ sub_804777C(gActiveBank);
+ sub_8043DFC(gHealthboxIDs[gActiveBank]);
+ sub_8031F88(gActiveBank);
+ gBattleBankFunc[gActiveBank] = sub_8033264;
+ }
+}
+
+void sub_80333D4(void)
+{
+ if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank].unk0_7)
+ sub_8141828(gActiveBank, &gEnemyParty[gBattlePartyID[gActiveBank]]);
+ if (gSprites[gUnknown_0300434C[gActiveBank]].callback == SpriteCallbackDummy
+ && !ewram17810[gActiveBank].unk0_3)
+ {
+ DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank]]);
+ sub_8032984(gActiveBank, GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES));
+ gBattleBankFunc[gActiveBank] = sub_8033308;
+ }
+}
+
+void sub_8033494(void)
+{
+ if (!ewram17810[gActiveBank].unk0_4)
+ OpponentBufferExecCompleted();
+}
+
+void sub_80334C0(void)
+{
+ if (!ewram17810[gActiveBank].unk0_5)
+ OpponentBufferExecCompleted();
+}
+
+void OpponentBufferExecCompleted(void)
+{
+ gBattleBankFunc[gActiveBank] = OpponentBufferRunCommand;
+ gBattleExecBuffer &= ~gBitTable[gActiveBank];
+}
void OpponentHandleGetAttributes(void)
{
@@ -139,7 +552,7 @@ void OpponentHandleGetAttributes(void)
r4 >>= 1;
}
}
- dp01_build_cmdbuf_x1D_1D_numargs_varargs(1, r6, buffer);
+ Emitcmd29(1, r6, buffer);
OpponentBufferExecCompleted();
}
@@ -448,7 +861,7 @@ u32 sub_8033598(u8 a, u8 *buffer)
return size;
}
-void dp01t_01_2_read_pokmon_data_slice(void)
+void OpponentHandlecmd1(void)
{
struct BattlePokemon buffer;
u8 *src = (u8 *)&gEnemyParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1];
@@ -457,7 +870,7 @@ void dp01t_01_2_read_pokmon_data_slice(void)
for (i = 0; i < gBattleBufferA[gActiveBank][2]; i++)
dst[i] = src[i];
- dp01_build_cmdbuf_x1D_1D_numargs_varargs(1, gBattleBufferA[gActiveBank][2], dst);
+ Emitcmd29(1, gBattleBufferA[gActiveBank][2], dst);
OpponentBufferExecCompleted();
}
@@ -699,7 +1112,7 @@ void sub_8033E24(u8 a)
}
}
-void sub_8034744(void)
+void OpponentHandlecmd3(void)
{
u8 *dst;
u8 i;
@@ -714,7 +1127,7 @@ void OpponentHandleLoadPokeSprite(void)
{
u16 species = GetMonData(&gEnemyParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES);
- sub_8031794(&gEnemyParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ BattleLoadOpponentMonSprite(&gEnemyParty[gBattlePartyID[gActiveBank]], gActiveBank);
GetMonSpriteTemplate_803C56C(species, GetBankIdentity(gActiveBank));
gObjectBankIDs[gActiveBank] = CreateSprite(
&gUnknown_02024E8C,
@@ -746,7 +1159,7 @@ void sub_803495C(u8 a, u8 b)
gBattlePartyID[a] = gBattleBufferA[a][1];
species = GetMonData(&gEnemyParty[gBattlePartyID[a]], MON_DATA_SPECIES);
gUnknown_0300434C[a] = CreateInvisibleSpriteWithCallback(sub_80312F0);
- sub_8031794(&gEnemyParty[gBattlePartyID[a]], a);
+ BattleLoadOpponentMonSprite(&gEnemyParty[gBattlePartyID[a]], a);
GetMonSpriteTemplate_803C56C(species, GetBankIdentity(a));
gObjectBankIDs[a] = CreateSprite(
&gUnknown_02024E8C,
@@ -785,7 +1198,7 @@ void sub_8034B74(void)
switch (ewram17810[gActiveBank].unk4)
{
case 0:
- if (ewram17800[gActiveBank].unk0_2)
+ if (ewram17800[gActiveBank].substituteSprite)
move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5);
ewram17810[gActiveBank].unk4 = 1;
break;
@@ -872,11 +1285,11 @@ void OpponentHandleTrainerSlideBack(void)
gBattleBankFunc[gActiveBank] = sub_8032BBC;
}
-void sub_8035030(void)
+void OpponentHandlecmd10(void)
{
if (ewram17810[gActiveBank].unk4 == 0)
{
- if (ewram17800[gActiveBank].unk0_2)
+ if (ewram17800[gActiveBank].substituteSprite)
move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5);
ewram17810[gActiveBank].unk4++;
}
@@ -889,12 +1302,12 @@ void sub_8035030(void)
}
}
-void sub_80350D4(void)
+void OpponentHandlecmd11(void)
{
OpponentBufferExecCompleted();
}
-void sub_80350E0(void)
+void OpponentHandlecmd12(void)
{
OpponentBufferExecCompleted();
}
@@ -904,7 +1317,7 @@ void OpponentHandleBallThrow(void)
OpponentBufferExecCompleted();
}
-void OpponentHandlePause(void)
+void OpponentHandlePuase(void)
{
OpponentBufferExecCompleted();
}
@@ -951,7 +1364,7 @@ void sub_8035238(void)
switch (ewram17810[gActiveBank].unk4)
{
case 0:
- if (ewram17800[gActiveBank].unk0_2 && !ewram17800[gActiveBank].unk0_3)
+ if (ewram17800[gActiveBank].substituteSprite && !ewram17800[gActiveBank].unk0_3)
{
ewram17800[gActiveBank].unk0_3 = 1;
move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5);
@@ -971,7 +1384,7 @@ void sub_8035238(void)
if (!gAnimScriptActive)
{
sub_80326EC(1);
- if ((ewram17800[gActiveBank].unk0_2) && r7 <= 1)
+ if ((ewram17800[gActiveBank].substituteSprite) && r7 <= 1)
{
move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6);
ewram17800[gActiveBank].unk0_3 = 0;
@@ -1007,19 +1420,19 @@ void OpponentHandlePrintStringPlayerOnly(void)
OpponentBufferExecCompleted();
}
-void sub_803540C(void)
+void OpponentHandlecmd18(void)
{
sub_8036B0C();
OpponentBufferExecCompleted();
}
-void sub_803541C(void)
+void OpponentHandlecmd19(void)
{
OpponentBufferExecCompleted();
}
#ifdef NONMATCHING
-void sub_8035428(void)
+void OpponentHandlecmd20(void)
{
u16 r4;
// Needed to match closer
@@ -1032,10 +1445,10 @@ void sub_8035428(void)
switch (r4)
{
case 5:
- dp01_build_cmdbuf_x21_a_bb(1, 4, 0);
+ Emitcmd33(1, 4, 0);
break;
case 4:
- dp01_build_cmdbuf_x21_a_bb(1, 3, 0);
+ Emitcmd33(1, 3, 0);
break;
default:
if (gBattleMoves[r5->moves[r4]].target & 0x12)
@@ -1047,7 +1460,7 @@ void sub_8035428(void)
gBankTarget = GetBankByPlayerAI(2);
}
r4 |= gBankTarget << 8;
- dp01_build_cmdbuf_x21_a_bb(1, 10, r4);
+ Emitcmd33(1, 10, r4);
break;
}
OpponentBufferExecCompleted();
@@ -1066,26 +1479,26 @@ void sub_8035428(void)
if (gBattleMoves[r2].target & 0x12)
{
r4 |= gActiveBank << 8;
- dp01_build_cmdbuf_x21_a_bb(1, 10, r4);
+ Emitcmd33(1, 10, r4);
}
else if (gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
{
u16 r2 = GetBankByPlayerAI(Random() & 2) << 8;
- dp01_build_cmdbuf_x21_a_bb(1, 10, r4 | r2);
+ Emitcmd33(1, 10, r4 | r2);
}
else
{
u16 r2 = GetBankByPlayerAI(0) << 8;
- dp01_build_cmdbuf_x21_a_bb(1, 10, r4 | r2);
+ Emitcmd33(1, 10, r4 | r2);
}
OpponentBufferExecCompleted();
}
}
#else
__attribute__((naked))
-void sub_8035428(void)
+void OpponentHandlecmd20(void)
{
asm(".syntax unified\n\
push {r4-r6,lr}\n\
@@ -1121,7 +1534,7 @@ _08035468:\n\
movs r1, 0x3\n\
_0803546C:\n\
movs r2, 0\n\
- bl dp01_build_cmdbuf_x21_a_bb\n\
+ bl Emitcmd33\n\
b _080354E0\n\
_08035474:\n\
ldr r3, _080354E8 @ =gBattleMoves\n\
@@ -1176,7 +1589,7 @@ _080354CE:\n\
movs r0, 0x1\n\
movs r1, 0xA\n\
adds r2, r4, 0\n\
- bl dp01_build_cmdbuf_x21_a_bb\n\
+ bl Emitcmd33\n\
_080354E0:\n\
bl OpponentBufferExecCompleted\n\
b _0803558A\n\
@@ -1213,7 +1626,7 @@ _080354FA:\n\
movs r0, 0x1\n\
movs r1, 0xA\n\
adds r2, r4, 0\n\
- bl dp01_build_cmdbuf_x21_a_bb\n\
+ bl Emitcmd33\n\
b _08035586\n\
.align 2, 0\n\
_08035534: .4byte gBattleMoves\n\
@@ -1238,7 +1651,7 @@ _0803553C:\n\
orrs r2, r4\n\
movs r0, 0x1\n\
movs r1, 0xA\n\
- bl dp01_build_cmdbuf_x21_a_bb\n\
+ bl Emitcmd33\n\
b _08035586\n\
.align 2, 0\n\
_0803556C: .4byte gBattleTypeFlags\n\
@@ -1251,7 +1664,7 @@ _08035570:\n\
orrs r2, r4\n\
movs r0, 0x1\n\
movs r1, 0xA\n\
- bl dp01_build_cmdbuf_x21_a_bb\n\
+ bl Emitcmd33\n\
_08035586:\n\
bl OpponentBufferExecCompleted\n\
_0803558A:\n\
@@ -1262,14 +1675,14 @@ _0803558A:\n\
}
#endif
-void sub_8035590(void)
+void OpponentHandleOpenBag(void)
{
// What is this?
- dp01_build_cmdbuf_x23_aa_0(1, ewram[0x160D4 + gActiveBank / 2 * 2]);
+ Emitcmd35(1, ewram[0x160D4 + gActiveBank / 2 * 2]);
OpponentBufferExecCompleted();
}
-void sub_80355C0(void)
+void OpponentHandlecmd22(void)
{
s32 r4;
@@ -1306,11 +1719,11 @@ void sub_80355C0(void)
ewram[0x160C8 + GetBankIdentity(gActiveBank) / 2] = 6;
}
ewram[0x16068 + gActiveBank] = r4;
- dp01_build_cmdbuf_x22_a_three_bytes(1, r4, 0);
+ Emitcmd34(1, r4, 0);
OpponentBufferExecCompleted();
}
-void sub_80356C0(void)
+void OpponentHandlecmd23(void)
{
OpponentBufferExecCompleted();
}
@@ -1371,7 +1784,7 @@ void OpponentHandleStatusXor(void)
OpponentBufferExecCompleted();
}
-void sub_80358B0(void)
+void OpponentHandlecmd29(void)
{
OpponentBufferExecCompleted();
}
@@ -1381,55 +1794,55 @@ void OpponentHandleDMATransfer(void)
OpponentBufferExecCompleted();
}
-void sub_80358C8(void)
+void OpponentHandlecmd31(void)
{
OpponentBufferExecCompleted();
}
-void sub_80358D4(void)
+void OpponentHandlecmd32(void)
{
OpponentBufferExecCompleted();
}
-void sub_80358E0(void)
+void OpponentHandlecmd33(void)
{
OpponentBufferExecCompleted();
}
-void sub_80358EC(void)
+void OpponentHandlecmd34(void)
{
OpponentBufferExecCompleted();
}
-void sub_80358F8(void)
+void OpponentHandlecmd35(void)
{
OpponentBufferExecCompleted();
}
-void sub_8035904(void)
+void OpponentHandlecmd36(void)
{
OpponentBufferExecCompleted();
}
-void sub_8035910(void)
+void OpponentHandlecmd37(void)
{
gUnknown_020238C8.unk0_0 = 0;
OpponentBufferExecCompleted();
}
-void sub_803592C(void)
+void OpponentHandlecmd38(void)
{
gUnknown_020238C8.unk0_0 = gBattleBufferA[gActiveBank][1];
OpponentBufferExecCompleted();
}
-void sub_8035964(void)
+void OpponentHandlecmd39(void)
{
gUnknown_020238C8.unk0_7 = 0;
OpponentBufferExecCompleted();
}
-void sub_803597C(void)
+void OpponentHandlecmd40(void)
{
gUnknown_020238C8.unk0_7 ^= 1;
OpponentBufferExecCompleted();
@@ -1450,7 +1863,7 @@ void OpponentHandleHitAnimation(void)
}
}
-void sub_8035A14(void)
+void OpponentHandlecmd42(void)
{
OpponentBufferExecCompleted();
}
@@ -1467,7 +1880,7 @@ void OpponentHandleEffectivenessSound(void)
OpponentBufferExecCompleted();
}
-void sub_8035A64(void)
+void OpponentHandlecmd44(void)
{
PlayFanfare(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
OpponentBufferExecCompleted();
@@ -1481,14 +1894,14 @@ void OpponentHandleFaintingCry(void)
OpponentBufferExecCompleted();
}
-void dp01t_2E_7_battle_intro(void)
+void OpponentHandleIntroSlide(void)
{
sub_80E43C0(gBattleBufferA[gActiveBank][1]);
gUnknown_02024DE8 |= 1;
OpponentBufferExecCompleted();
}
-void sub_8035B04(void)
+void OpponentHandleTrainerBallThrow(void)
{
u8 taskId;
@@ -1539,7 +1952,7 @@ void sub_8035C44(u8 taskId)
DestroyTask(taskId);
}
-void dp01t_30_7_0803D67C(void)
+void OpponentHandlecmd48(void)
{
if (gBattleBufferA[gActiveBank][1] != 0 && GetBankSide(gActiveBank) == 0)
{
@@ -1580,14 +1993,14 @@ void sub_8035E2C(void)
}
}
-void sub_8035E6C(void)
+void OpponentHandlecmd49(void)
{
if (ewram17810[gActiveBank].unk0_0)
gTasks[gUnknown_02024E68[gActiveBank]].func = sub_8044CA0;
OpponentBufferExecCompleted();
}
-void sub_8035EB8(void)
+void OpponentHandlecmd50(void)
{
OpponentBufferExecCompleted();
}
@@ -1626,7 +2039,7 @@ void OpponentHandleResetActionMoveSelection(void)
OpponentBufferExecCompleted();
}
-void sub_8035FA4(void)
+void OpponentHandlecmd55(void)
{
if ((gBattleTypeFlags & BATTLE_TYPE_LINK) && !(gBattleTypeFlags & BATTLE_TYPE_WILD))
{
@@ -1637,6 +2050,6 @@ void sub_8035FA4(void)
OpponentBufferExecCompleted();
}
-void nullsub_46(void)
+void OpponentHandlecmd56(void)
{
}
diff --git a/src/battle_controller_player.c b/src/battle_controller_player.c
new file mode 100644
index 000000000..53b596c5e
--- /dev/null
+++ b/src/battle_controller_player.c
@@ -0,0 +1,3066 @@
+#include "global.h"
+#include "data2.h"
+#include "battle.h"
+#include "battle_interface.h"
+#include "battle_message.h"
+#include "item.h"
+#include "items.h"
+#include "link.h"
+#include "m4a.h"
+#include "main.h"
+#include "menu_cursor.h"
+#include "moves.h"
+#include "palette.h"
+#include "pokemon.h"
+#include "rom3.h"
+#include "songs.h"
+#include "sound.h"
+#include "string_util.h"
+#include "task.h"
+#include "text.h"
+#include "util.h"
+
+//Possibly PokemonSubstruct1
+struct UnknownStruct3
+{
+ u16 moves[4];
+ u8 pp[4];
+ u8 ppBonuses;
+};
+
+#if ENGLISH
+#define SUB_803037C_TILE_DATA_OFFSET 440
+#elif GERMAN
+#define SUB_803037C_TILE_DATA_OFFSET 444
+#endif
+
+extern u16 gUnknown_030042A4;
+extern u16 gUnknown_030042A0;
+
+extern struct Window gUnknown_03004210;
+
+extern void (*gBattleBankFunc[])(void);
+
+extern u8 gActiveBank;
+extern u8 gActionSelectionCursor[];
+extern u8 gDisplayedStringBattle[];
+extern u8 gMoveSelectionCursor[];
+extern u8 gBattleBufferA[][0x200];
+extern u8 gBankInMenu;
+extern u16 gBattlePartyID[];
+extern u8 gHealthboxIDs[];
+extern u8 gDoingBattleAnim;
+extern u8 gObjectBankIDs[];
+extern u16 gBattleTypeFlags;
+extern u8 gBattleOutcome;
+extern void (*gAnimScriptCallback)(void);
+extern bool8 gAnimScriptActive;
+extern u16 gMovePowerMoveAnim;
+extern u32 gMoveDmgMoveAnim;
+extern u8 gHappinessMoveAnim;
+extern u16 gWeatherMoveAnim;
+extern u32 *gDisableStructMoveAnim;
+extern u32 gPID_perBank[];
+extern u8 gBattleMonForms[];
+extern u16 gUnknown_02024DE8;
+extern u8 gUnknown_02024E68[];
+extern struct SpriteTemplate gUnknown_02024E8C;
+extern u8 gUnknown_0202F7C4;
+extern u8 gUnknown_02038470[];
+extern u16 gUnknown_030041B0;
+extern u16 gUnknown_030041B4;
+extern u16 gUnknown_030041B8;
+extern u16 gUnknown_03004280;
+extern u16 gUnknown_03004288;
+extern u16 gUnknown_030042A4;
+extern u16 gUnknown_030042C0;
+extern u8 gUnknown_03004344;
+extern u8 gUnknown_0300434C[];
+
+extern const u8 gUnknown_08400CA8[];
+extern const u8 gUnknown_08400CF3[];
+extern const u8 gUnknown_08400D38[];
+
+extern void sub_802C68C(void);
+extern void sub_802E1B0(void);
+extern void sub_802E220();
+extern void sub_802E2D4();
+extern void sub_802E004(void);
+extern void sub_802DF30(void);
+extern void BattleMusicStop(void);
+extern void PlayerBufferExecCompleted(void);
+extern void bx_t1_healthbar_update(void);
+extern void nullsub_91(void);
+extern void sub_802D924(u8);
+extern void sub_802E434(void);
+extern bool8 mplay_80342A4(u8);
+extern void move_anim_start_t2_for_situation();
+extern void bx_blink_t1(void);
+extern void sub_8047858();
+extern u8 GetBankSide(u8);
+extern void sub_80E43C0();
+extern void oamt_add_pos2_onto_pos1();
+extern void sub_8078B34(struct Sprite *);
+extern void StoreSpriteCallbackInData6();
+extern void BattleLoadPlayerMonSprite();
+extern bool8 IsDoubleBattle(void);
+extern void sub_802D500(void);
+extern bool8 AnimBankSpriteExists(u8);
+extern bool8 move_anim_start_t3();
+extern void sub_802E460(void);
+extern void b_link_standby_message(void);
+extern void sub_802D18C(void);
+extern void sub_802DF18(void);
+extern void BufferStringBattle();
+extern void sub_80326EC();
+extern void ExecuteMoveAnim();
+extern void sub_8031F24(void);
+extern void sub_80324BC();
+extern u8 sub_8031720();
+extern void bx_wait_t1(void);
+extern u8 GetBankByPlayerAI(u8);
+extern void sub_802DE10(void);
+extern void sub_80105EC(struct Sprite *);
+extern void sub_802D274(void);
+extern void sub_802D23C(void);
+extern u8 GetBankIdentity(u8);
+extern void LoadPlayerTrainerBankSprite();
+extern void sub_80313A0(struct Sprite *);
+extern void sub_802D204(void);
+extern u8 sub_8079E90();
+extern void sub_802DEAC(void);
+extern void sub_80312F0(struct Sprite *);
+extern u8 sub_8077ABC();
+extern u8 sub_8077F68();
+extern u8 sub_8046400();
+extern void sub_802D798(void);
+extern void bx_0802E404(void);
+extern u8 gActiveBank;
+extern void (*gBattleBankFunc[])(void);
+extern bool8 gDoingBattleAnim;
+extern u16 gBattleTypeFlags;
+extern u32 gBattleExecBuffer;
+extern u8 gBattleBufferA[][0x200];
+extern u8 gObjectBankIDs[];
+extern u8 gActionSelectionCursor[];
+extern u8 gMoveSelectionCursor[];
+extern u8 gAbsentBankFlags;
+extern u8 gUnknown_03004344;
+extern u8 gNoOfAllBanks;
+extern u16 gBattlePartyID[];
+extern u16 gUnknown_030042A0;
+extern u16 gUnknown_030042A4;
+extern struct Window gUnknown_03004210;
+extern const u8 gUnknown_08400D89[];
+extern u8 gUnknown_03004348;
+extern struct BattlePokemon gBattleMons[];
+extern MainCallback gPreBattleCallback1;
+extern u8 gHealthboxIDs[];
+extern struct MusicPlayerInfo gMPlay_BGM;
+extern u8 gUnknown_0300434C[];
+extern u8 gUnknown_0202E8F4;
+extern u8 gUnknown_0202E8F5;
+extern u8 gUnknown_02038470[];
+extern u16 gScriptItemId;
+extern u8 gDisplayedStringBattle[];
+extern const u8 gUnknown_08400CE0[];
+
+extern void dp11b_obj_instanciate(u8, u8, s8, s8);
+extern u8 GetBankIdentity(u8);
+extern u8 GetBankByPlayerAI(u8);
+extern void dp11b_obj_free(u8, u8);
+extern void sub_8010520(struct Sprite *);
+extern void sub_8010574(struct Sprite *);
+extern bool8 IsDoubleBattle();
+extern void sub_804777C();
+extern void sub_8141828();
+extern void sub_8094E20(u8);
+extern void nullsub_14(void);
+extern void sub_80A6DCC(void);
+extern void ReshowBattleScreenAfterMenu(void);
+
+void PlayerHandleGetAttributes(void);
+void PlayerHandlecmd1(void);
+void PlayerHandleSetAttributes(void);
+void PlayerHandlecmd3(void);
+void PlayerHandleLoadPokeSprite(void);
+void PlayerHandleSendOutPoke(void);
+void PlayerHandleReturnPokeToBall(void);
+void PlayerHandleTrainerThrow(void);
+void PlayerHandleTrainerSlide(void);
+void PlayerHandleTrainerSlideBack(void);
+void PlayerHandlecmd10(void);
+void PlayerHandlecmd11(void);
+void PlayerHandlecmd12(void);
+void PlayerHandleBallThrow(void);
+void PlayerHandlePuase(void);
+void PlayerHandleMoveAnimation(void);
+void PlayerHandlePrintString(void);
+void PlayerHandlePrintStringPlayerOnly(void);
+void PlayerHandlecmd18(void);
+void PlayerHandlecmd19(void);
+void PlayerHandlecmd20(void);
+void PlayerHandleOpenBag(void);
+void PlayerHandlecmd22(void);
+void PlayerHandlecmd23(void);
+void PlayerHandleHealthBarUpdate(void);
+void PlayerHandleExpBarUpdate(void);
+void PlayerHandleStatusIconUpdate(void);
+void PlayerHandleStatusAnimation(void);
+void PlayerHandleStatusXor(void);
+void PlayerHandlecmd29(void);
+void PlayerHandleDMATransfer(void);
+void PlayerHandlecmd31(void);
+void PlayerHandlecmd32(void);
+void PlayerHandlecmd33(void);
+void PlayerHandlecmd34(void);
+void PlayerHandlecmd35(void);
+void PlayerHandlecmd36(void);
+void PlayerHandlecmd37(void);
+void PlayerHandlecmd38(void);
+void PlayerHandlecmd39(void);
+void PlayerHandlecmd40(void);
+void PlayerHandleHitAnimation(void);
+void PlayerHandlecmd42(void);
+void PlayerHandleEffectivenessSound(void);
+void PlayerHandlecmd44(void);
+void PlayerHandleFaintingCry(void);
+void PlayerHandleIntroSlide(void);
+void PlayerHandleTrainerBallThrow(void);
+void PlayerHandlecmd48(void);
+void PlayerHandlecmd49(void);
+void PlayerHandlecmd50(void);
+void PlayerHandleSpriteInvisibility(void);
+void PlayerHandleBattleAnimation(void);
+void PlayerHandleLinkStandbyMsg(void);
+void PlayerHandleResetActionMoveSelection(void);
+void PlayerHandlecmd55(void);
+void PlayerHandlecmd56(void);
+
+const u8 gString_TurnJP[] = _("ターン");
+
+void (*const gPlayerBufferCommands[])(void) =
+{
+ PlayerHandleGetAttributes,
+ PlayerHandlecmd1,
+ PlayerHandleSetAttributes,
+ PlayerHandlecmd3,
+ PlayerHandleLoadPokeSprite,
+ PlayerHandleSendOutPoke,
+ PlayerHandleReturnPokeToBall,
+ PlayerHandleTrainerThrow,
+ PlayerHandleTrainerSlide,
+ PlayerHandleTrainerSlideBack,
+ PlayerHandlecmd10,
+ PlayerHandlecmd11,
+ PlayerHandlecmd12,
+ PlayerHandleBallThrow,
+ PlayerHandlePuase,
+ PlayerHandleMoveAnimation,
+ PlayerHandlePrintString,
+ PlayerHandlePrintStringPlayerOnly,
+ PlayerHandlecmd18,
+ PlayerHandlecmd19,
+ PlayerHandlecmd20,
+ PlayerHandleOpenBag,
+ PlayerHandlecmd22,
+ PlayerHandlecmd23,
+ PlayerHandleHealthBarUpdate,
+ PlayerHandleExpBarUpdate,
+ PlayerHandleStatusIconUpdate,
+ PlayerHandleStatusAnimation,
+ PlayerHandleStatusXor,
+ PlayerHandlecmd29,
+ PlayerHandleDMATransfer,
+ PlayerHandlecmd31,
+ PlayerHandlecmd32,
+ PlayerHandlecmd33,
+ PlayerHandlecmd34,
+ PlayerHandlecmd35,
+ PlayerHandlecmd36,
+ PlayerHandlecmd37,
+ PlayerHandlecmd38,
+ PlayerHandlecmd39,
+ PlayerHandlecmd40,
+ PlayerHandleHitAnimation,
+ PlayerHandlecmd42,
+ PlayerHandleEffectivenessSound,
+ PlayerHandlecmd44,
+ PlayerHandleFaintingCry,
+ PlayerHandleIntroSlide,
+ PlayerHandleTrainerBallThrow,
+ PlayerHandlecmd48,
+ PlayerHandlecmd49,
+ PlayerHandlecmd50,
+ PlayerHandleSpriteInvisibility,
+ PlayerHandleBattleAnimation,
+ PlayerHandleLinkStandbyMsg,
+ PlayerHandleResetActionMoveSelection,
+ PlayerHandlecmd55,
+ PlayerHandlecmd56,
+};
+
+void PlayerBufferRunCommand(void);
+void sub_802C2EC(void);
+void sub_802C68C(void);
+void sub_802CA60(void);
+void sub_802D730(void);
+void sub_802DA9C(u8);
+void sub_802DB6C(u8);
+void sub_802DCB0(u8);
+void sub_802DD10(u8);
+void sub_802DDC4(u8);
+void sub_802DF88(void);
+void sub_802E03C(void);
+void sub_802E12C(s32, const u8 *);
+void sub_802E1B0(void);
+void sub_802E220(void);
+void sub_802E2D4(void);
+void sub_802E3B4(u8, int);
+void nullsub_7(u8);
+void b_link_standby_message(void);
+u32 dp01_getattr_by_ch1_for_player_pokemon_(u8, u8 *);
+void dp01_setattr_by_ch1_for_player_pokemon(u8);
+void sub_802F934(u8, u8);
+void sub_802FB2C(void);
+void sub_8030190(void);
+void sub_80304A8(void);
+void sub_8030E38(struct Sprite *);
+void task05_08033660(u8);
+void sub_8031064(void);
+
+void nullsub_91(void)
+{
+}
+
+void SetBankFuncToPlayerBufferRunCommand(void)
+{
+ gBattleBankFunc[gActiveBank] = PlayerBufferRunCommand;
+ gDoingBattleAnim = FALSE;
+}
+
+void PlayerBufferExecCompleted(void)
+{
+ gBattleBankFunc[gActiveBank] = PlayerBufferRunCommand;
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ u8 playerId = GetMultiplayerId();
+
+ PrepareBufferDataTransferLink(2, 4, &playerId);
+ gBattleBufferA[gActiveBank][0] = 0x38;
+ }
+ else
+ {
+ gBattleExecBuffer &= ~gBitTable[gActiveBank];
+ }
+}
+
+void PlayerBufferRunCommand(void)
+{
+ if (gBattleExecBuffer & gBitTable[gActiveBank])
+ {
+ if (gBattleBufferA[gActiveBank][0] < 0x39)
+ gPlayerBufferCommands[gBattleBufferA[gActiveBank][0]]();
+ else
+ PlayerBufferExecCompleted();
+ }
+}
+
+void bx_0802E404(void)
+{
+ if (gSprites[gObjectBankIDs[gActiveBank]].pos2.x == 0)
+ PlayerBufferExecCompleted();
+}
+
+void sub_802C098(void)
+{
+ u16 itemId = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8);
+
+ dp11b_obj_instanciate(gActiveBank, 1, 7, 1);
+ dp11b_obj_instanciate(gActiveBank, 0, 7, 1);
+ if (gMain.newKeys & A_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ DestroyMenuCursor();
+
+ // Useless switch statement.
+ switch (gActionSelectionCursor[gActiveBank])
+ {
+ case 0:
+ Emitcmd33(1, 0, 0);
+ break;
+ case 1:
+ Emitcmd33(1, 1, 0);
+ break;
+ case 2:
+ Emitcmd33(1, 2, 0);
+ break;
+ case 3:
+ Emitcmd33(1, 3, 0);
+ break;
+ }
+ PlayerBufferExecCompleted();
+ }
+ else if (gMain.newKeys & DPAD_LEFT)
+ {
+ if (gActionSelectionCursor[gActiveBank] & 1)
+ {
+ PlaySE(SE_SELECT);
+ nullsub_8(gActionSelectionCursor[gActiveBank]);
+ gActionSelectionCursor[gActiveBank] ^= 1;
+ sub_802E3E4(gActionSelectionCursor[gActiveBank], 0);
+ }
+ }
+ else if (gMain.newKeys & DPAD_RIGHT)
+ {
+ if (!(gActionSelectionCursor[gActiveBank] & 1))
+ {
+ PlaySE(SE_SELECT);
+ nullsub_8(gActionSelectionCursor[gActiveBank]);
+ gActionSelectionCursor[gActiveBank] ^= 1;
+ sub_802E3E4(gActionSelectionCursor[gActiveBank], 0);
+ }
+ }
+ else if (gMain.newKeys & DPAD_UP)
+ {
+ if (gActionSelectionCursor[gActiveBank] & 2)
+ {
+ PlaySE(SE_SELECT);
+ nullsub_8(gActionSelectionCursor[gActiveBank]);
+ gActionSelectionCursor[gActiveBank] ^= 2;
+ sub_802E3E4(gActionSelectionCursor[gActiveBank], 0);
+ }
+ }
+ else if (gMain.newKeys & DPAD_DOWN)
+ {
+ if (!(gActionSelectionCursor[gActiveBank] & 2))
+ {
+ PlaySE(SE_SELECT);
+ nullsub_8(gActionSelectionCursor[gActiveBank]);
+ gActionSelectionCursor[gActiveBank] ^= 2;
+ sub_802E3E4(gActionSelectionCursor[gActiveBank], 0);
+ }
+ }
+ else if (gMain.newKeys & B_BUTTON)
+ {
+ if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE)
+ && GetBankIdentity(gActiveBank) == 2
+ && !(gAbsentBankFlags & gBitTable[GetBankByPlayerAI(0)])
+ && !(gBattleTypeFlags & BATTLE_TYPE_MULTI))
+ {
+ if (gBattleBufferA[gActiveBank][1] == 1)
+ {
+ // Add item to bag if it is a ball
+ if (itemId <= ITEM_PREMIER_BALL)
+ AddBagItem(itemId, 1);
+ else
+ return;
+ }
+ PlaySE(SE_SELECT);
+ Emitcmd33(1, 12, 0);
+ PlayerBufferExecCompleted();
+ DestroyMenuCursor();
+ }
+ }
+ else if (gMain.newKeys & START_BUTTON)
+ {
+ sub_804454C();
+ }
+}
+
+void unref_sub_802C2B8(void)
+{
+ dp11b_obj_free(gActiveBank, 1);
+ dp11b_obj_free(gActiveBank, 0);
+ gBattleBankFunc[gActiveBank] = sub_802C2EC;
+}
+
+// TODO: fix this function
+void sub_802C2EC(void)
+{
+ u8 arr[4] = {0, 2, 3, 1};
+ s32 i;
+
+ dp11b_obj_instanciate(gUnknown_03004344, 1, 15, 1);
+ i = 0;
+ if (gNoOfAllBanks != 0)
+ {
+ do
+ {
+ if (i != gUnknown_03004344)
+ dp11b_obj_free(i, 1);
+ i++;
+ } while (i < gNoOfAllBanks);
+ }
+ if (gMain.newKeys & A_BUTTON)
+ {
+ DestroyMenuCursor();
+ PlaySE(SE_SELECT);
+ gSprites[gObjectBankIDs[gUnknown_03004344]].callback = sub_8010574;
+ Emitcmd33(1, 10, gMoveSelectionCursor[gActiveBank] | (gUnknown_03004344 << 8));
+ dp11b_obj_free(gUnknown_03004344, 1);
+ PlayerBufferExecCompleted();
+ }
+ //_0802C3A8
+ else if (gMain.newKeys & B_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ gSprites[gObjectBankIDs[gUnknown_03004344]].callback = sub_8010574;
+ gBattleBankFunc[gActiveBank] = sub_802C68C;
+ dp11b_obj_instanciate(gActiveBank, 1, 7, 1);
+ dp11b_obj_instanciate(gActiveBank, 0, 7, 1);
+ dp11b_obj_free(gUnknown_03004344, 1);
+ }
+ else if (gMain.newKeys & 0x60)
+ {
+ PlaySE(SE_SELECT);
+ gSprites[gObjectBankIDs[gUnknown_03004344]].callback = sub_8010574;
+ do
+ {
+ u8 var = GetBankIdentity(gUnknown_03004344);
+
+ for (i = 0; i < 4; i++)
+ {
+ if (var == arr[i])
+ break;
+ }
+ do
+ {
+ i--;
+ if (i < 0)
+ i = 3;
+ gUnknown_03004344 = GetBankByPlayerAI(arr[i]);
+ } while(gUnknown_03004344 == gNoOfAllBanks);
+ i = 0;
+ switch (GetBankIdentity(gUnknown_03004344))
+ {
+ case 0:
+ case 2:
+ if (gActiveBank == gUnknown_03004344)
+ {
+ u32 moveId;
+
+ asm("":::"memory");
+ moveId = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MOVE1 + gMoveSelectionCursor[gActiveBank]);
+ if (!(gBattleMoves[moveId].target & 2))
+ break;
+ }
+ i++;
+ break;
+ case 1:
+ case 3:
+ i++;
+ }
+ //_0802C500
+ if (gAbsentBankFlags & gBitTable[gUnknown_03004344])
+ i = 0;
+ } while (i == 0);
+ gSprites[gObjectBankIDs[gUnknown_03004344]].callback = sub_8010520;
+ }
+ //_0802C540
+ else if (gMain.newKeys & 0x90)
+ {
+ PlaySE(SE_SELECT);
+ gSprites[gObjectBankIDs[gUnknown_03004344]].callback = sub_8010574;
+ do
+ {
+ u8 var = GetBankIdentity(gUnknown_03004344);
+
+ for (i = 0; i < 4; i++)
+ {
+ if (var == arr[i])
+ break;
+ }
+ do
+ {
+ i++;
+ if (i > 3)
+ i = 0;
+ gUnknown_03004344 = GetBankByPlayerAI(arr[i]);
+ } while (gUnknown_03004344 == gNoOfAllBanks);
+ i = 0;
+ switch (GetBankIdentity(gUnknown_03004344))
+ {
+ case 0:
+ case 2:
+ if (gActiveBank == gUnknown_03004344)
+ {
+ u32 moveId;
+
+ asm("":::"memory");
+ moveId = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MOVE1 + gMoveSelectionCursor[gActiveBank]);
+ if (!(gBattleMoves[moveId].target & 2))
+ break;
+ }
+ i++;
+ break;
+ case 1:
+ case 3:
+ i++;
+ }
+ if (gAbsentBankFlags & gBitTable[gUnknown_03004344])
+ i = 0;
+ } while (i == 0);
+ gSprites[gObjectBankIDs[gUnknown_03004344]].callback = sub_8010520;
+ }
+}
+
+struct UnknownStruct1
+{
+ u16 moves[4];
+ u8 pp[4];
+ u8 unkC[0x12-0xC];
+ u8 unk12;
+ u8 unk13;
+ u8 filler14[0x20-0x14];
+};
+
+const u8 gUnknown_081FAE80[] = _("{PALETTE 5}{COLOR_HIGHLIGHT_SHADOW WHITE LIGHT_BLUE WHITE2}");
+
+void sub_802C68C(void)
+{
+ u32 r8 = 0;
+ struct UnknownStruct1 *r6 = (struct UnknownStruct1 *)(gBattleBufferA[gActiveBank] + 4);
+
+ if (gMain.newKeys & A_BUTTON)
+ {
+ u32 r4;
+
+ PlaySE(SE_SELECT);
+
+ if (r6->moves[gMoveSelectionCursor[gActiveBank]] == MOVE_CURSE)
+ r4 = (r6->unk12 != TYPE_GHOST && (r6->unk13 ^ 7)) ? 0x10 : 0;
+ else
+ r4 = gBattleMoves[r6->moves[gMoveSelectionCursor[gActiveBank]]].target;
+
+ if (r4 & 0x10)
+ gUnknown_03004344 = gActiveBank;
+ else
+ gUnknown_03004344 = GetBankByPlayerAI((GetBankIdentity(gActiveBank) & 1) ^ 1);
+
+ if (gBattleBufferA[gActiveBank][1] == 0)
+ {
+ if ((r4 & 2) && gBattleBufferA[gActiveBank][2] == 0)
+ r8++;
+ }
+ else
+ {
+ if (!(r4 & 0x7D))
+ r8++;
+ if (r6->pp[gMoveSelectionCursor[gActiveBank]] == 0)
+ {
+ r8 = 0;
+ }
+ else if (!(r4 & 0x12) && CountAliveMons(0) <= 1)
+ {
+ gUnknown_03004344 = sub_803C434(gActiveBank);
+ r8 = 0;
+ }
+ }
+ if (r8 == 0)
+ {
+ DestroyMenuCursor();
+ Emitcmd33(1, 10, gMoveSelectionCursor[gActiveBank] | (gUnknown_03004344 << 8));
+ PlayerBufferExecCompleted();
+ }
+ else
+ {
+ gBattleBankFunc[gActiveBank] = sub_802C2EC;
+ if (r4 & 0x12)
+ gUnknown_03004344 = gActiveBank;
+ else if (gAbsentBankFlags & gBitTable[GetBankByPlayerAI(1)])
+ gUnknown_03004344 = GetBankByPlayerAI(3);
+ else
+ gUnknown_03004344 = GetBankByPlayerAI(1);
+ gSprites[gObjectBankIDs[gUnknown_03004344]].callback = sub_8010520;
+ }
+ }
+ else if (gMain.newKeys & B_BUTTON)
+ {
+ DestroyMenuCursor();
+ PlaySE(SE_SELECT);
+ gUnknown_030042A4 = 0;
+ gUnknown_030042A0 = 320;
+ Emitcmd33(1, 10, 0xFFFF);
+ PlayerBufferExecCompleted();
+ }
+ else if (gMain.newKeys & DPAD_LEFT)
+ {
+ if (gMoveSelectionCursor[gActiveBank] & 1)
+ {
+ nullsub_7(gMoveSelectionCursor[gActiveBank]);
+ gMoveSelectionCursor[gActiveBank] ^= 1;
+ PlaySE(SE_SELECT);
+ sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0);
+ sub_802E220();
+ sub_802E2D4();
+ }
+ }
+ else if (gMain.newKeys & DPAD_RIGHT)
+ {
+ if (!(gMoveSelectionCursor[gActiveBank] & 1)
+ && (gMoveSelectionCursor[gActiveBank] ^ 1) < gUnknown_03004348)
+ {
+ nullsub_7(gMoveSelectionCursor[gActiveBank]);
+ gMoveSelectionCursor[gActiveBank] ^= 1;
+ PlaySE(SE_SELECT);
+ sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0);
+ sub_802E220();
+ sub_802E2D4();
+ }
+ }
+ else if (gMain.newKeys & DPAD_UP)
+ {
+ if (gMoveSelectionCursor[gActiveBank] & 2)
+ {
+ nullsub_7(gMoveSelectionCursor[gActiveBank]);
+ gMoveSelectionCursor[gActiveBank] ^= 2;
+ PlaySE(SE_SELECT);
+ sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0);
+ sub_802E220();
+ sub_802E2D4();
+ }
+ }
+ else if (gMain.newKeys & DPAD_DOWN)
+ {
+ if (!(gMoveSelectionCursor[gActiveBank] & 2)
+ && (gMoveSelectionCursor[gActiveBank] ^ 2) < gUnknown_03004348)
+ {
+ nullsub_7(gMoveSelectionCursor[gActiveBank]);
+ gMoveSelectionCursor[gActiveBank] ^= 2;
+ PlaySE(SE_SELECT);
+ sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0);
+ sub_802E220();
+ sub_802E2D4();
+ }
+ }
+ else if (gMain.newKeys & SELECT_BUTTON)
+ {
+ if (gUnknown_03004348 > 1 && !(gBattleTypeFlags & BATTLE_TYPE_LINK))
+ {
+ sub_802E12C(gMoveSelectionCursor[gActiveBank], gUnknown_081FAE80);
+ if (gMoveSelectionCursor[gActiveBank] != 0)
+ gUnknown_03004344 = 0;
+ else
+ gUnknown_03004344 = gMoveSelectionCursor[gActiveBank] + 1;
+ sub_802E3B4(gUnknown_03004344, 27);
+ FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x37, 0x1C, 0x3A);
+ InitWindow(&gUnknown_03004210, gUnknown_08400D89, 0x290, 0x17, 0x37);
+ sub_8002F44(&gUnknown_03004210);
+ gBattleBankFunc[gActiveBank] = sub_802CA60;
+ }
+ }
+}
+
+extern const u8 gUnknown_08400D49[];
+extern const u8 gUnknown_08400D38[];
+
+void sub_802CA60(void)
+{
+ u8 perMovePPBonuses[4];
+ struct
+ {
+ u16 moves[4];
+ u8 pp[4];
+ u8 filler18[8]; // what is this?
+ } sp0;
+ //struct UnknownStruct1 sp0;
+ u8 totalPPBonuses;
+
+ if (gMain.newKeys & (A_BUTTON | SELECT_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ if (gMoveSelectionCursor[gActiveBank] != gUnknown_03004344)
+ {
+ struct UnknownStruct1 *r9 = (struct UnknownStruct1 *)&gBattleBufferA[gActiveBank][4];
+ s32 i;
+
+ i = r9->moves[gMoveSelectionCursor[gActiveBank]];
+ r9->moves[gMoveSelectionCursor[gActiveBank]] = r9->moves[gUnknown_03004344];
+ r9->moves[gUnknown_03004344] = i;
+
+ i = r9->pp[gMoveSelectionCursor[gActiveBank]];
+ r9->pp[gMoveSelectionCursor[gActiveBank]] = r9->pp[gUnknown_03004344];
+ r9->pp[gUnknown_03004344] = i;
+
+ i = r9->unkC[gMoveSelectionCursor[gActiveBank]];
+ r9->unkC[gMoveSelectionCursor[gActiveBank]] = r9->unkC[gUnknown_03004344];
+ r9->unkC[gUnknown_03004344] = i;
+
+ if (gDisableStructs[gActiveBank].unk18_b & gBitTable[gMoveSelectionCursor[gActiveBank]])
+ {
+ gDisableStructs[gActiveBank].unk18_b &= ~gBitTable[gMoveSelectionCursor[gActiveBank]];
+ gDisableStructs[gActiveBank].unk18_b |= gBitTable[gUnknown_03004344];
+ }
+
+ sub_802E1B0();
+
+ for (i = 0; i < 4; i++)
+ perMovePPBonuses[i] = (gBattleMons[gActiveBank].ppBonuses & (3 << (i * 2))) >> (i * 2);
+ totalPPBonuses = perMovePPBonuses[gMoveSelectionCursor[gActiveBank]];
+ perMovePPBonuses[gMoveSelectionCursor[gActiveBank]] = perMovePPBonuses[gUnknown_03004344];
+ perMovePPBonuses[gUnknown_03004344] = totalPPBonuses;
+
+ totalPPBonuses = 0;
+ for (i = 0; i < 4; i++)
+ totalPPBonuses |= perMovePPBonuses[i] << (i * 2);
+ gBattleMons[gActiveBank].ppBonuses = totalPPBonuses;
+
+ for (i = 0; i < 4; i++)
+ {
+ gBattleMons[gActiveBank].moves[i] = r9->moves[i];
+ gBattleMons[gActiveBank].pp[i] = r9->pp[i];
+ }
+ if (!(gBattleMons[gActiveBank].status2 & 0x200000))
+ {
+ for (i = 0; i < 4; i++)
+ {
+ sp0.moves[i] = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MOVE1 + i);
+ sp0.pp[i] = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_PP1 + i);
+ }
+
+ totalPPBonuses = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_PP_BONUSES);
+ for (i = 0; i < 4; i++)
+ perMovePPBonuses[i] = (totalPPBonuses & (3 << (i * 2))) >> (i * 2);
+
+ i = sp0.moves[gMoveSelectionCursor[gActiveBank]];
+ sp0.moves[gMoveSelectionCursor[gActiveBank]] = sp0.moves[gUnknown_03004344];
+ sp0.moves[gUnknown_03004344] = i;
+
+ i = sp0.pp[gMoveSelectionCursor[gActiveBank]];
+ sp0.pp[gMoveSelectionCursor[gActiveBank]] = sp0.pp[gUnknown_03004344];
+ sp0.pp[gUnknown_03004344] = i;
+
+ totalPPBonuses = perMovePPBonuses[gMoveSelectionCursor[gActiveBank]];
+ perMovePPBonuses[gMoveSelectionCursor[gActiveBank]] = perMovePPBonuses[gUnknown_03004344];
+ perMovePPBonuses[gUnknown_03004344] = totalPPBonuses;
+
+ totalPPBonuses = 0;
+ for (i = 0; i < 4; i++)
+ totalPPBonuses |= perMovePPBonuses[i] << (i * 2);
+
+ for (i = 0; i < 4; i++)
+ {
+ SetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MOVE1 + i, (u8 *)&sp0.moves[i]);
+ SetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_PP1 + i, &sp0.pp[i]);
+ }
+ SetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_PP_BONUSES, &totalPPBonuses);
+ }
+ }
+ else
+ {
+ sub_802E12C(gUnknown_03004344, gUnknown_08400D49);
+ }
+ gBattleBankFunc[gActiveBank] = sub_802C68C;
+ gMoveSelectionCursor[gActiveBank] = gUnknown_03004344;
+ sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0);
+ FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x37, 0x1C, 0x3A);
+ InitWindow(&gUnknown_03004210, gUnknown_08400D38, 0x290, 0x17, 0x37);
+ sub_8002F44(&gUnknown_03004210);
+ sub_802E220();
+ sub_802E2D4();
+ }
+ if (gMain.newKeys & (B_BUTTON | SELECT_BUTTON))
+ {
+ PlaySE(SE_SELECT);
+ nullsub_7(gUnknown_03004344);
+ sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0);
+ sub_802E12C(gMoveSelectionCursor[gActiveBank], gUnknown_08400D49);
+ gBattleBankFunc[gActiveBank] = sub_802C68C;
+ FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x37, 0x1C, 0x3A);
+ InitWindow(&gUnknown_03004210, gUnknown_08400D38, 0x290, 0x17, 0x37);
+ sub_8002F44(&gUnknown_03004210);
+ sub_802E220();
+ sub_802E2D4();
+ }
+ if ((gMain.newKeys & DPAD_LEFT) && (gUnknown_03004344 & 1))
+ {
+ if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank])
+ sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0x1D);
+ else
+ nullsub_7(gUnknown_03004344);
+ gUnknown_03004344 ^= 1;
+ PlaySE(SE_SELECT);
+ if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank])
+ sub_802E3B4(gUnknown_03004344, 0);
+ else
+ sub_802E3B4(gUnknown_03004344, 0x1B);
+ }
+ if ((gMain.newKeys & DPAD_RIGHT) && !(gUnknown_03004344 & 1) && (gUnknown_03004344 ^ 1) < gUnknown_03004348)
+ {
+ if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank])
+ sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0x1D);
+ else
+ nullsub_7(gUnknown_03004344);
+ gUnknown_03004344 ^= 1;
+ PlaySE(SE_SELECT);
+ if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank])
+ sub_802E3B4(gUnknown_03004344, 0);
+ else
+ sub_802E3B4(gUnknown_03004344, 0x1B);
+ }
+ if ((gMain.newKeys & DPAD_UP) && (gUnknown_03004344 & 2))
+ {
+ if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank])
+ sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0x1D);
+ else
+ nullsub_7(gUnknown_03004344);
+ gUnknown_03004344 ^= 2;
+ PlaySE(SE_SELECT);
+ if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank])
+ sub_802E3B4(gUnknown_03004344, 0);
+ else
+ sub_802E3B4(gUnknown_03004344, 0x1B);
+ }
+ if ((gMain.newKeys & DPAD_DOWN) && !(gUnknown_03004344 & 2) && (gUnknown_03004344 ^ 2) < gUnknown_03004348)
+ {
+ if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank])
+ sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0x1D);
+ else
+ nullsub_7(gUnknown_03004344);
+ gUnknown_03004344 ^= 2;
+ PlaySE(SE_SELECT);
+ if (gUnknown_03004344 == gMoveSelectionCursor[gActiveBank])
+ sub_802E3B4(gUnknown_03004344, 0);
+ else
+ sub_802E3B4(gUnknown_03004344, 0x1B);
+ }
+}
+
+void sub_802D148(void)
+{
+ if (gReceivedRemoteLinkPlayers == 0)
+ {
+ m4aSongNumStop(SE_HINSI);
+ gMain.inBattle = FALSE;
+ gMain.callback1 = gPreBattleCallback1;
+ SetMainCallback2(c2_8011A1C);
+ }
+}
+
+void sub_802D18C(void)
+{
+ if (!gPaletteFade.active)
+ {
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ sub_800832C();
+ gBattleBankFunc[gActiveBank] = sub_802D148;
+ }
+ else
+ {
+ m4aSongNumStop(SE_HINSI);
+ gMain.inBattle = FALSE;
+ gMain.callback1 = gPreBattleCallback1;
+ SetMainCallback2(gMain.savedCallback);
+ }
+ }
+}
+
+void sub_802D204(void)
+{
+ if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy)
+ PlayerBufferExecCompleted();
+}
+
+// duplicate of sub_802D204
+void sub_802D23C(void)
+{
+ if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy)
+ PlayerBufferExecCompleted();
+}
+
+void sub_802D274(void)
+{
+ if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy)
+ {
+ nullsub_10(gSaveBlock2.playerGender);
+ FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]);
+ DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]);
+ PlayerBufferExecCompleted();
+ }
+}
+
+void sub_802D2E0(void)
+{
+ if (--ewram17810[gActiveBank].unk9 == 0xFF)
+ {
+ ewram17810[gActiveBank].unk9 = 0;
+ PlayerBufferExecCompleted();
+ }
+}
+
+void sub_802D31C(void)
+{
+ bool8 r6 = FALSE;
+
+ if (!IsDoubleBattle() || (IsDoubleBattle() && (gBattleTypeFlags & BATTLE_TYPE_MULTI)))
+ {
+ if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy)
+ r6 = TRUE;
+ }
+ else
+ {
+ if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy
+ && gSprites[gHealthboxIDs[gActiveBank ^ 2]].callback == SpriteCallbackDummy)
+ r6 = TRUE;
+ }
+ if (IsCryPlayingOrClearCrySongs())
+ r6 = FALSE;
+
+ if (r6 && ewram17810[gActiveBank].unk1_0 && ewram17810[gActiveBank ^ 2].unk1_0)
+ {
+ ewram17810[gActiveBank].unk0_7 = 0;
+ ewram17810[gActiveBank].unk1_0 = 0;
+ ewram17810[gActiveBank ^ 2].unk0_7 = 0;
+ ewram17810[gActiveBank ^ 2].unk1_0 = 0;
+ FreeSpriteTilesByTag(0x27F9);
+ FreeSpritePaletteByTag(0x27F9);
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ m4aMPlayContinue(&gMPlay_BGM);
+ else
+ m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 256);
+ sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ if (IsDoubleBattle())
+ sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank ^ 2]], gActiveBank ^ 2);
+ ewram17810[gActiveBank].unk9 = 3;
+ gBattleBankFunc[gActiveBank] = sub_802D2E0;
+ }
+}
+
+void sub_802D500(void)
+{
+ if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank].unk0_7)
+ sub_8141828(gActiveBank, &gPlayerParty[gBattlePartyID[gActiveBank]]);
+ if (!ewram17810[gActiveBank ^ 2].unk0_3 && !ewram17810[gActiveBank ^ 2].unk0_7)
+ sub_8141828(gActiveBank ^ 2, &gPlayerParty[gBattlePartyID[gActiveBank ^ 2]]);
+ if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank ^ 2].unk0_3)
+ {
+ if (IsDoubleBattle() && !(gBattleTypeFlags & BATTLE_TYPE_MULTI))
+ {
+ DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank ^ 2]]);
+ sub_8045A5C(
+ gHealthboxIDs[gActiveBank ^ 2],
+ &gPlayerParty[gBattlePartyID[gActiveBank ^ 2]],
+ 0);
+ sub_804777C(gActiveBank ^ 2);
+ sub_8043DFC(gHealthboxIDs[gActiveBank ^ 2]);
+ }
+ DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank]]);
+ sub_8045A5C(
+ gHealthboxIDs[gActiveBank],
+ &gPlayerParty[gBattlePartyID[gActiveBank]],
+ 0);
+ sub_804777C(gActiveBank);
+ sub_8043DFC(gHealthboxIDs[gActiveBank]);
+ ewram17840.unk9_0 = 0;
+ gBattleBankFunc[gActiveBank] = sub_802D31C;
+ }
+}
+
+void sub_802D680(void)
+{
+ if (gSprites[gHealthboxIDs[gActiveBank]].callback == SpriteCallbackDummy
+ && ewram17810[gActiveBank].unk1_0)
+ {
+ ewram17810[gActiveBank].unk0_7 = 0;
+ ewram17810[gActiveBank].unk1_0 = 0;
+ FreeSpriteTilesByTag(0x27F9);
+ FreeSpritePaletteByTag(0x27F9);
+ if (ewram17800[gActiveBank].substituteSprite)
+ move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6);
+ gBattleBankFunc[gActiveBank] = sub_802D730;
+ }
+}
+
+void sub_802D730(void)
+{
+ if (!ewram17810[gActiveBank].unk0_6 && !IsCryPlayingOrClearCrySongs())
+ {
+ m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x100);
+ sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ PlayerBufferExecCompleted();
+ }
+}
+
+void sub_802D798(void)
+{
+ if (!ewram17810[gActiveBank].unk0_3 && !ewram17810[gActiveBank].unk0_7)
+ sub_8141828(gActiveBank, &gPlayerParty[gBattlePartyID[gActiveBank]]);
+ if (gSprites[gUnknown_0300434C[gActiveBank]].callback == SpriteCallbackDummy
+ && !ewram17810[gActiveBank].unk0_3)
+ {
+ DestroySprite(&gSprites[gUnknown_0300434C[gActiveBank]]);
+ sub_8045A5C(gHealthboxIDs[gActiveBank], &gPlayerParty[gBattlePartyID[gActiveBank]], 0);
+ sub_804777C(gActiveBank);
+ sub_8043DFC(gHealthboxIDs[gActiveBank]);
+ sub_8031F88(gActiveBank);
+ gBattleBankFunc[gActiveBank] = sub_802D680;
+ }
+}
+
+void c3_0802FDF4(u8 taskId)
+{
+ if (!IsCryPlayingOrClearCrySongs())
+ {
+ m4aMPlayVolumeControl(&gMPlay_BGM, 0xFFFF, 0x100);
+ DestroyTask(taskId);
+ }
+}
+
+void bx_t1_healthbar_update(void)
+{
+ s16 r4 = sub_8045C78(gActiveBank, gHealthboxIDs[gActiveBank], 0, 0);
+
+ sub_8043DFC(gHealthboxIDs[gActiveBank]);
+ if (r4 != -1)
+ {
+ sub_80440EC(gHealthboxIDs[gActiveBank], r4, 0);
+ }
+ else
+ {
+ sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ PlayerBufferExecCompleted();
+ }
+}
+
+void sub_802D90C(void)
+{
+ if (gUnknown_03004210.state == 0)
+ PlayerBufferExecCompleted();
+}
+
+// Rare Candy usage, maybe?
+void sub_802D924(u8 taskId)
+{
+ u32 pkmnIndex = (u8)gTasks[taskId].data[0];
+ u8 bank = gTasks[taskId].data[2];
+ s16 gainedExp = gTasks[taskId].data[1];
+
+ if (IsDoubleBattle() == TRUE || pkmnIndex != gBattlePartyID[bank])
+ {
+ struct Pokemon *pkmn = &gPlayerParty[pkmnIndex];
+ u16 species = GetMonData(pkmn, MON_DATA_SPECIES);
+ u8 level = GetMonData(pkmn, MON_DATA_LEVEL);
+ u32 currExp = GetMonData(pkmn, MON_DATA_EXP);
+ u32 nextLvlExp = gExperienceTables[gBaseStats[species].growthRate][level + 1];
+
+ if (currExp + gainedExp >= nextLvlExp)
+ {
+ u8 savedActiveBank;
+
+ SetMonData(pkmn, MON_DATA_EXP, (u8 *)&nextLvlExp);
+ CalculateMonStats(pkmn);
+ gainedExp -= nextLvlExp - currExp;
+ savedActiveBank = gActiveBank;
+ gActiveBank = bank;
+ Emitcmd33(1, 11, gainedExp);
+ gActiveBank = savedActiveBank;
+
+ if (IsDoubleBattle() == TRUE
+ && ((u16)pkmnIndex == gBattlePartyID[bank] || (u16)pkmnIndex == gBattlePartyID[bank ^ 2]))
+ gTasks[taskId].func = sub_802DCB0;
+ else
+ gTasks[taskId].func = sub_802DDC4;
+ }
+ else
+ {
+ currExp += gainedExp;
+ SetMonData(pkmn, MON_DATA_EXP, (u8 *)&currExp);
+ gBattleBankFunc[bank] = sub_802D90C;
+ DestroyTask(taskId);
+ }
+ }
+ else
+ {
+ gTasks[taskId].func = sub_802DA9C;
+ }
+}
+
+void sub_802DA9C(u8 taskId)
+{
+ u8 pkmnIndex = gTasks[taskId].data[0];
+ s32 r9 = gTasks[taskId].data[1];
+ u8 bank = gTasks[taskId].data[2];
+ struct Pokemon *pkmn = &gPlayerParty[pkmnIndex];
+ u8 level = GetMonData(pkmn, MON_DATA_LEVEL);
+ u16 species = GetMonData(pkmn, MON_DATA_SPECIES);
+ u32 exp = GetMonData(pkmn, MON_DATA_EXP);
+ u32 currLvlExp = gExperienceTables[gBaseStats[species].growthRate][level];
+ u32 expToNextLvl;
+
+ exp -= currLvlExp;
+ expToNextLvl = gExperienceTables[gBaseStats[species].growthRate][level + 1] - currLvlExp;
+ sub_8043D84(bank, gHealthboxIDs[bank], expToNextLvl, exp, -r9);
+ PlaySE(SE_EXP);
+ gTasks[taskId].func = sub_802DB6C;
+}
+
+#ifdef NONMATCHING
+void sub_802DB6C(u8 taskId)
+{
+ if (gTasks[taskId].data[10] < 13)
+ {
+ gTasks[taskId].data[10]++;
+ }
+ else
+ {
+ u8 r9 = gTasks[taskId].data[0];
+ s32 r10 = gTasks[taskId].data[1]; //s16?
+ u8 r7 = gTasks[taskId].data[2];
+ s16 r4;
+
+ r4 = sub_8045C78(r7, gHealthboxIDs[r7], 1, 0);
+ sub_8043DFC(gHealthboxIDs[r7]);
+ if (r4 == -1)
+ {
+ struct Pokemon *pkmn;
+ u8 r4;
+ u32 sp4;
+ u16 r0;
+ u32 sp0;
+
+ m4aSongNumStop(SE_EXP);
+ pkmn = &gPlayerParty[r9];
+ r4 = GetMonData(pkmn, MON_DATA_LEVEL);
+ sp4 = GetMonData(pkmn, MON_DATA_EXP);
+ r0 = GetMonData(pkmn, MON_DATA_SPECIES);
+ sp0 = gExperienceTables[gBaseStats[r0].growthRate][r4 + 1];
+ if (sp4 + r10 >= sp0)
+ {
+ u8 r5;
+ u32 asdf;
+
+ SetMonData(pkmn, MON_DATA_EXP, (u8 *)&sp0);
+ CalculateMonStats(pkmn);
+ //r10 -= sp0 - sp4;
+ asdf = sp0 - sp4;
+ //asdf = r10 - (sp0 - sp4);
+ r10 -= asdf;
+ r5 = gActiveBank;
+ gActiveBank = r7;
+ Emitcmd33(1, 11, r10);
+ gActiveBank = r5;
+ gTasks[taskId].func = sub_802DCB0;
+ }
+ else
+ {
+ //u32 asdf = sp4 + r10;
+ sp4 += r10;
+ SetMonData(pkmn, MON_DATA_EXP, (u8 *)&sp4);
+ gBattleBankFunc[r7] = sub_802D90C;
+ DestroyTask(taskId);
+ }
+ }
+ }
+}
+#else
+__attribute__((naked))
+void sub_802DB6C(u8 taskId)
+{
+ 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, 0x8\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ mov r8, r0\n\
+ ldr r1, _0802DB98 @ =gTasks\n\
+ lsls r0, 2\n\
+ add r0, r8\n\
+ lsls r0, 3\n\
+ adds r6, r0, r1\n\
+ ldrh r1, [r6, 0x1C]\n\
+ movs r2, 0x1C\n\
+ ldrsh r0, [r6, r2]\n\
+ cmp r0, 0xC\n\
+ bgt _0802DB9C\n\
+ adds r0, r1, 0x1\n\
+ strh r0, [r6, 0x1C]\n\
+ b _0802DC98\n\
+ .align 2, 0\n\
+_0802DB98: .4byte gTasks\n\
+_0802DB9C:\n\
+ ldrb r0, [r6, 0x8]\n\
+ mov r9, r0\n\
+ ldrh r2, [r6, 0xA]\n\
+ mov r10, r2\n\
+ ldrb r7, [r6, 0xC]\n\
+ ldr r5, _0802DC64 @ =gHealthboxIDs\n\
+ adds r5, r7, r5\n\
+ ldrb r1, [r5]\n\
+ adds r0, r7, 0\n\
+ movs r2, 0x1\n\
+ movs r3, 0\n\
+ bl sub_8045C78\n\
+ adds r4, r0, 0\n\
+ lsls r4, 16\n\
+ lsrs r4, 16\n\
+ ldrb r0, [r5]\n\
+ bl sub_8043DFC\n\
+ lsls r4, 16\n\
+ asrs r4, 16\n\
+ movs r0, 0x1\n\
+ negs r0, r0\n\
+ cmp r4, r0\n\
+ bne _0802DC98\n\
+ movs r0, 0x21\n\
+ bl m4aSongNumStop\n\
+ movs r0, 0x64\n\
+ mov r1, r9\n\
+ muls r1, r0\n\
+ ldr r0, _0802DC68 @ =gPlayerParty\n\
+ adds r5, r1, r0\n\
+ adds r0, r5, 0\n\
+ movs r1, 0x38\n\
+ bl GetMonData\n\
+ adds r4, r0, 0\n\
+ lsls r4, 24\n\
+ lsrs r4, 24\n\
+ adds r0, r5, 0\n\
+ movs r1, 0x19\n\
+ bl GetMonData\n\
+ str r0, [sp, 0x4]\n\
+ adds r0, r5, 0\n\
+ movs r1, 0xB\n\
+ bl GetMonData\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ ldr r3, _0802DC6C @ =gExperienceTables\n\
+ adds r4, 0x1\n\
+ lsls r4, 2\n\
+ ldr r2, _0802DC70 @ =gBaseStats\n\
+ lsls r1, r0, 3\n\
+ subs r1, r0\n\
+ lsls r1, 2\n\
+ adds r1, r2\n\
+ ldrb r1, [r1, 0x13]\n\
+ movs r0, 0xCA\n\
+ lsls r0, 1\n\
+ muls r0, r1\n\
+ adds r4, r0\n\
+ adds r4, r3\n\
+ ldr r1, [r4]\n\
+ str r1, [sp]\n\
+ mov r2, r10\n\
+ lsls r0, r2, 16\n\
+ asrs r4, r0, 16\n\
+ ldr r0, [sp, 0x4]\n\
+ adds r0, r4\n\
+ cmp r0, r1\n\
+ blt _0802DC7C\n\
+ adds r0, r5, 0\n\
+ movs r1, 0x19\n\
+ mov r2, sp\n\
+ bl SetMonData\n\
+ adds r0, r5, 0\n\
+ bl CalculateMonStats\n\
+ ldr r2, [sp]\n\
+ add r0, sp, 0x4\n\
+ ldrh r0, [r0]\n\
+ subs r2, r0\n\
+ subs r2, r4, r2\n\
+ ldr r4, _0802DC74 @ =gActiveBank\n\
+ ldrb r5, [r4]\n\
+ strb r7, [r4]\n\
+ lsls r2, 16\n\
+ lsrs r2, 16\n\
+ movs r0, 0x1\n\
+ movs r1, 0xB\n\
+ bl Emitcmd33\n\
+ strb r5, [r4]\n\
+ ldr r0, _0802DC78 @ =sub_802DCB0\n\
+ str r0, [r6]\n\
+ b _0802DC98\n\
+ .align 2, 0\n\
+_0802DC64: .4byte gHealthboxIDs\n\
+_0802DC68: .4byte gPlayerParty\n\
+_0802DC6C: .4byte gExperienceTables\n\
+_0802DC70: .4byte gBaseStats\n\
+_0802DC74: .4byte gActiveBank\n\
+_0802DC78: .4byte sub_802DCB0\n\
+_0802DC7C:\n\
+ str r0, [sp, 0x4]\n\
+ add r2, sp, 0x4\n\
+ adds r0, r5, 0\n\
+ movs r1, 0x19\n\
+ bl SetMonData\n\
+ ldr r1, _0802DCA8 @ =gBattleBankFunc\n\
+ lsls r0, r7, 2\n\
+ adds r0, r1\n\
+ ldr r1, _0802DCAC @ =sub_802D90C\n\
+ str r1, [r0]\n\
+ mov r0, r8\n\
+ bl DestroyTask\n\
+_0802DC98:\n\
+ add sp, 0x8\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\
+ .align 2, 0\n\
+_0802DCA8: .4byte gBattleBankFunc\n\
+_0802DCAC: .4byte sub_802D90C\n");
+}
+#endif
+
+void sub_802DCB0(u8 taskId)
+{
+ u8 bank = gTasks[taskId].data[2];
+ u8 pkmnIndex = gTasks[taskId].data[0];
+
+ if (IsDoubleBattle() == TRUE && pkmnIndex == gBattlePartyID[bank ^ 2])
+ bank ^= 2;
+ move_anim_start_t4(bank, bank, bank, 0);
+ gTasks[taskId].func = sub_802DD10;
+}
+
+void sub_802DD10(u8 taskId)
+{
+ u8 bank = gTasks[taskId].data[2];
+
+ if (!ewram17810[bank].unk0_6)
+ {
+ u8 pkmnIndex = gTasks[taskId].data[0];
+
+ GetMonData(&gPlayerParty[pkmnIndex], MON_DATA_LEVEL); // Unused return value
+ if (IsDoubleBattle() == TRUE && pkmnIndex == gBattlePartyID[bank ^ 2])
+ sub_8045A5C(gHealthboxIDs[bank ^ 2], &gPlayerParty[pkmnIndex], 0);
+ else
+ sub_8045A5C(gHealthboxIDs[bank], &gPlayerParty[pkmnIndex], 0);
+ gTasks[taskId].func = sub_802DDC4;
+ }
+}
+
+void sub_802DDC4(u8 taskId)
+{
+ u8 pkmnIndex;
+ u8 bank;
+
+ pkmnIndex = gTasks[taskId].data[0];
+ GetMonData(&gPlayerParty[pkmnIndex], MON_DATA_LEVEL); // Unused return value
+ bank = gTasks[taskId].data[2];
+ gBattleBankFunc[bank] = sub_802D90C;
+ DestroyTask(taskId);
+}
+
+void sub_802DE10(void)
+{
+ if (gSprites[gObjectBankIDs[gActiveBank]].pos1.y + gSprites[gObjectBankIDs[gActiveBank]].pos2.y > DISPLAY_HEIGHT)
+ {
+ u16 species = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES);
+
+ nullsub_9(species);
+ FreeOamMatrix(gSprites[gObjectBankIDs[gActiveBank]].oam.matrixNum);
+ DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]);
+ sub_8043DB0(gHealthboxIDs[gActiveBank]);
+ PlayerBufferExecCompleted();
+ }
+}
+
+void sub_802DEAC(void)
+{
+ if (!ewram17810[gActiveBank].unk0_6)
+ {
+ FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]);
+ DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]);
+ sub_8043DB0(gHealthboxIDs[gActiveBank]);
+ PlayerBufferExecCompleted();
+ }
+}
+
+// Duplicate of sub_802D90C
+void sub_802DF18(void)
+{
+ if (gUnknown_03004210.state == 0)
+ PlayerBufferExecCompleted();
+}
+
+void sub_802DF30(void)
+{
+ if (!gPaletteFade.active)
+ {
+ u8 r4;
+
+ gBattleBankFunc[gActiveBank] = sub_802DF88;
+ r4 = gTasks[gUnknown_0300434C[gActiveBank]].data[0];
+ DestroyTask(gUnknown_0300434C[gActiveBank]);
+ sub_8094E20(r4);
+ }
+}
+
+void sub_802DF88(void)
+{
+ if (gMain.callback2 == sub_800F808 && !gPaletteFade.active)
+ {
+ if (gUnknown_0202E8F4 == 1)
+ Emitcmd34(1, gUnknown_0202E8F5, gUnknown_02038470);
+ else
+ Emitcmd34(1, 6, NULL);
+ if ((gBattleBufferA[gActiveBank][1] & 0xF) == 1)
+ b_link_standby_message();
+ PlayerBufferExecCompleted();
+ }
+}
+
+void sub_802E004(void)
+{
+ if (!gPaletteFade.active)
+ {
+ gBattleBankFunc[gActiveBank] = sub_802E03C;
+ nullsub_14();
+ sub_80A6DCC();
+ }
+}
+
+void sub_802E03C(void)
+{
+ if (gMain.callback2 == sub_800F808 && !gPaletteFade.active)
+ {
+ Emitcmd35(1, gScriptItemId);
+ PlayerBufferExecCompleted();
+ }
+}
+
+void bx_wait_t1(void)
+{
+ if (!gDoingBattleAnim || !ewram17810[gActiveBank].unk0_6)
+ PlayerBufferExecCompleted();
+}
+
+void bx_blink_t1(void)
+{
+ u8 spriteId = gObjectBankIDs[gActiveBank];
+
+ if (gSprites[spriteId].data1 == 32)
+ {
+ gSprites[spriteId].data1 = 0;
+ gSprites[spriteId].invisible = FALSE;
+ gDoingBattleAnim = 0;
+ PlayerBufferExecCompleted();
+ }
+ else
+ {
+ if (((u16)gSprites[spriteId].data1 % 4) == 0)
+ gSprites[spriteId].invisible ^= 1;
+ gSprites[spriteId].data1++;
+ }
+}
+
+void sub_802E12C(s32 a, const u8 *b)
+{
+ struct UnknownStruct1 *r4 = (struct UnknownStruct1 *)&gBattleBufferA[gActiveBank][4];
+
+ StringCopy(gDisplayedStringBattle, b);
+ StringAppend(gDisplayedStringBattle, gMoveNames[r4->moves[a]]);
+ InitWindow(
+ &gUnknown_03004210,
+ gDisplayedStringBattle,
+ 0x300 + a * 20,
+ (a & 1) ? 11 : 1,
+ (a < 2) ? 0x37 : 0x39);
+ sub_8002F44(&gUnknown_03004210);
+}
+
+void sub_802E1B0(void)
+{
+ struct UnknownStruct1 *r4 = (struct UnknownStruct1 *)&gBattleBufferA[gActiveBank][4];
+ s32 i;
+
+ gUnknown_03004348 = 0;
+ FillWindowRect(&gUnknown_03004210, 0x1016, 1, 0x37, 0x14, 0x3A);
+ for (i = 0; i < 4; i++)
+ {
+ nullsub_7(i);
+ sub_802E12C(i, gUnknown_08400D49);
+ if (r4->moves[i] != 0)
+ gUnknown_03004348++;
+ }
+}
+
+void sub_802E220(void)
+{
+ if (gBattleBufferA[gActiveBank][2] != 1)
+ {
+ struct UnknownStruct1 *r4 = (struct UnknownStruct1 *)&gBattleBufferA[gActiveBank][4];
+ u8 *str = gDisplayedStringBattle;
+
+ str = StringCopy(str, gUnknown_08400D49);
+ str[0] = EXT_CTRL_CODE_BEGIN;
+ str[1] = 0x11;
+ str[2] = 2;
+ str += 3;
+ str[0] = EXT_CTRL_CODE_BEGIN;
+ str[1] = 0x14;
+ str[2] = 6;
+ str += 3;
+ str = ConvertIntToDecimalStringN(str, r4->pp[gMoveSelectionCursor[gActiveBank]], 1, 2);
+ *str++ = CHAR_SLASH;
+ ConvertIntToDecimalStringN(str, r4->unkC[gMoveSelectionCursor[gActiveBank]], 1, 2);
+ InitWindow(&gUnknown_03004210, gDisplayedStringBattle, 0x2A2, 0x19, 0x37);
+ sub_8002F44(&gUnknown_03004210);
+ }
+}
+
+extern const u8 gUnknown_08400D52[];
+extern const u8 gTypeNames[][7];
+
+void sub_802E2D4(void)
+{
+ if (gBattleBufferA[gActiveBank][2] == 1)
+ {
+ FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x37, 0x1C, 0x3A);
+ InitWindow(&gUnknown_03004210, gUnknown_08400D52, 0x290, 0x13, 0x37);
+ }
+ else
+ {
+ struct UnknownStruct1 *r4 = (struct UnknownStruct1 *)&gBattleBufferA[gActiveBank][4];
+ u8 *str = gDisplayedStringBattle;
+
+ str = StringCopy(str, gUnknown_08400D49);
+ StringCopy(str, gTypeNames[gBattleMoves[r4->moves[gMoveSelectionCursor[gActiveBank]]].type]);
+ FillWindowRect(&gUnknown_03004210, 0x1016, 0x17, 0x39, 0x1C, 0x3A);
+ InitWindow(&gUnknown_03004210, gDisplayedStringBattle, 0x2C0, 0x17, 0x39);
+ }
+ sub_8002F44(&gUnknown_03004210);
+}
+
+const u8 gUnknown_081FAE89[][2] =
+{
+ { 8, 120},
+ {88, 120},
+ { 8, 136},
+ {88, 136},
+};
+
+const u8 gUnknown_081FAE91[][2] =
+{
+ {144, 120},
+ {190, 120},
+ {144, 136},
+ {190, 136},
+ { 72, 72},
+ { 32, 90},
+ { 80, 80},
+ { 80, 88},
+};
+
+void sub_802E3B4(u8 a, int unused)
+{
+ sub_814A958(0x48);
+ sub_814A880(gUnknown_081FAE89[a][0], gUnknown_081FAE89[a][1]);
+}
+
+void nullsub_7(u8 a)
+{
+}
+
+void sub_802E3E4(u8 a, int unused)
+{
+ sub_814A958(0x2A);
+ sub_814A880(gUnknown_081FAE91[a][0], gUnknown_081FAE91[a][1]);
+}
+
+void nullsub_8(u8 a)
+{
+}
+
+void sub_802E414(void)
+{
+ SetMainCallback2(ReshowBattleScreenAfterMenu);
+}
+
+void sub_802E424(void)
+{
+ SetMainCallback2(ReshowBattleScreenAfterMenu);
+}
+
+void sub_802E434(void)
+{
+ if (!ewram17810[gActiveBank].unk0_4)
+ PlayerBufferExecCompleted();
+}
+
+void sub_802E460(void)
+{
+ if (!ewram17810[gActiveBank].unk0_5)
+ PlayerBufferExecCompleted();
+}
+
+void b_link_standby_message(void)
+{
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ gUnknown_030042A4 = 0;
+ gUnknown_030042A0 = 0;
+ sub_8002EB0(&gUnknown_03004210, gUnknown_08400CE0, 0x90, 2, 15);
+ }
+}
+
+void PlayerHandleGetAttributes(void)
+{
+ u8 unkData[0x100];
+ u32 offset = 0;
+ u8 r4;
+ s32 i;
+
+ if (gBattleBufferA[gActiveBank][2] == 0)
+ {
+ offset += dp01_getattr_by_ch1_for_player_pokemon_(gBattlePartyID[gActiveBank], unkData);
+ }
+ else
+ {
+ r4 = gBattleBufferA[gActiveBank][2];
+ for (i = 0; i < 6; i++)
+ {
+ if (r4 & 1)
+ offset += dp01_getattr_by_ch1_for_player_pokemon_(i, unkData + offset);
+ r4 >>= 1;
+ }
+ }
+ Emitcmd29(1, offset, unkData);
+ PlayerBufferExecCompleted();
+}
+
+// Duplicate of dp01_getattr_by_ch1_for_player_pokemon
+u32 dp01_getattr_by_ch1_for_player_pokemon_(u8 a, u8 *buffer)
+{
+ struct BattlePokemon battlePokemon;
+ struct UnknownStruct3 moveData;
+ u8 nickname[20];
+ u8 *src;
+ s16 data16;
+ u32 data32;
+ s32 size = 0;
+
+ switch (gBattleBufferA[gActiveBank][1])
+ {
+ case 0:
+ battlePokemon.species = GetMonData(&gPlayerParty[a], MON_DATA_SPECIES);
+ battlePokemon.item = GetMonData(&gPlayerParty[a], MON_DATA_HELD_ITEM);
+ for (size = 0; size < 4; size++)
+ {
+ battlePokemon.moves[size] = GetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + size);
+ battlePokemon.pp[size] = GetMonData(&gPlayerParty[a], MON_DATA_PP1 + size);
+ }
+ battlePokemon.ppBonuses = GetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES);
+ battlePokemon.friendship = GetMonData(&gPlayerParty[a], MON_DATA_FRIENDSHIP);
+ battlePokemon.experience = GetMonData(&gPlayerParty[a], MON_DATA_EXP);
+ battlePokemon.hpIV = GetMonData(&gPlayerParty[a], MON_DATA_HP_IV);
+ battlePokemon.attackIV = GetMonData(&gPlayerParty[a], MON_DATA_ATK_IV);
+ battlePokemon.defenseIV = GetMonData(&gPlayerParty[a], MON_DATA_DEF_IV);
+ battlePokemon.speedIV = GetMonData(&gPlayerParty[a], MON_DATA_SPD_IV);
+ battlePokemon.spAttackIV = GetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV);
+ battlePokemon.spDefenseIV = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV);
+ battlePokemon.personality = GetMonData(&gPlayerParty[a], MON_DATA_PERSONALITY);
+ battlePokemon.status1 = GetMonData(&gPlayerParty[a], MON_DATA_STATUS);
+ battlePokemon.level = GetMonData(&gPlayerParty[a], MON_DATA_LEVEL);
+ battlePokemon.hp = GetMonData(&gPlayerParty[a], MON_DATA_HP);
+ battlePokemon.maxHP = GetMonData(&gPlayerParty[a], MON_DATA_MAX_HP);
+ battlePokemon.attack = GetMonData(&gPlayerParty[a], MON_DATA_ATK);
+ battlePokemon.defense = GetMonData(&gPlayerParty[a], MON_DATA_DEF);
+ battlePokemon.speed = GetMonData(&gPlayerParty[a], MON_DATA_SPD);
+ battlePokemon.spAttack = GetMonData(&gPlayerParty[a], MON_DATA_SPATK);
+ battlePokemon.spDefense = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF);
+ battlePokemon.isEgg = GetMonData(&gPlayerParty[a], MON_DATA_IS_EGG);
+ battlePokemon.altAbility = GetMonData(&gPlayerParty[a], MON_DATA_ALT_ABILITY);
+ battlePokemon.otId = GetMonData(&gPlayerParty[a], MON_DATA_OT_ID);
+ GetMonData(&gPlayerParty[a], MON_DATA_NICKNAME, nickname);
+ StringCopy10(battlePokemon.nickname, nickname);
+ GetMonData(&gPlayerParty[a], MON_DATA_OT_NAME, battlePokemon.otName);
+ src = (u8 *)&battlePokemon;
+ for (size = 0; size < sizeof(battlePokemon); size++)
+ buffer[size] = src[size];
+ break;
+ case 1:
+ data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPECIES);
+ buffer[0] = data16;
+ buffer[1] = data16 >> 8;
+ size = 2;
+ break;
+ case 2:
+ data16 = GetMonData(&gPlayerParty[a], MON_DATA_HELD_ITEM);
+ buffer[0] = data16;
+ buffer[1] = data16 >> 8;
+ size = 2;
+ break;
+ case 3:
+ for (size = 0; size < 4; size++)
+ {
+ moveData.moves[size] = GetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + size);
+ moveData.pp[size] = GetMonData(&gPlayerParty[a], MON_DATA_PP1 + size);
+ }
+ moveData.ppBonuses = GetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES);
+ src = (u8 *)&moveData;
+ for (size = 0; size < sizeof(moveData); size++)
+ buffer[size] = src[size];
+ break;
+ case 4:
+ case 5:
+ case 6:
+ case 7:
+ data16 = GetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + gBattleBufferA[gActiveBank][1] - 4);
+ buffer[0] = data16;
+ buffer[1] = data16 >> 8;
+ size = 2;
+ break;
+ case 8:
+ for (size = 0; size < 4; size++)
+ buffer[size] = GetMonData(&gPlayerParty[a], MON_DATA_PP1 + size);
+ buffer[size] = GetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES);
+ size++;
+ break;
+ case 9:
+ case 10:
+ case 11:
+ case 12:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_PP1 + gBattleBufferA[gActiveBank][1] - 9);
+ size = 1;
+ break;
+ case 17:
+ data32 = GetMonData(&gPlayerParty[a], MON_DATA_OT_ID);
+ buffer[0] = (data32 & 0x000000FF);
+ buffer[1] = (data32 & 0x0000FF00) >> 8;
+ buffer[2] = (data32 & 0x00FF0000) >> 16;
+ size = 3;
+ break;
+ case 18:
+ data32 = GetMonData(&gPlayerParty[a], MON_DATA_EXP);
+ buffer[0] = (data32 & 0x000000FF);
+ buffer[1] = (data32 & 0x0000FF00) >> 8;
+ buffer[2] = (data32 & 0x00FF0000) >> 16;
+ size = 3;
+ break;
+ case 19:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_HP_EV);
+ size = 1;
+ break;
+ case 20:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_ATK_EV);
+ size = 1;
+ break;
+ case 21:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_DEF_EV);
+ size = 1;
+ break;
+ case 22:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPD_EV);
+ size = 1;
+ break;
+ case 23:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPATK_EV);
+ size = 1;
+ break;
+ case 24:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF_EV);
+ size = 1;
+ break;
+ case 25:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_FRIENDSHIP);
+ size = 1;
+ break;
+ case 26:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_POKERUS);
+ size = 1;
+ break;
+ case 27:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_MET_LOCATION);
+ size = 1;
+ break;
+ case 28:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_MET_LEVEL);
+ size = 1;
+ break;
+ case 29:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_MET_GAME);
+ size = 1;
+ break;
+ case 30:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_POKEBALL);
+ size = 1;
+ break;
+ case 31:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_HP_IV);
+ buffer[1] = GetMonData(&gPlayerParty[a], MON_DATA_ATK_IV);
+ buffer[2] = GetMonData(&gPlayerParty[a], MON_DATA_DEF_IV);
+ buffer[3] = GetMonData(&gPlayerParty[a], MON_DATA_SPD_IV);
+ buffer[4] = GetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV);
+ buffer[5] = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV);
+ size = 6;
+ break;
+ case 32:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_HP_IV);
+ size = 1;
+ break;
+ case 33:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_ATK_IV);
+ size = 1;
+ break;
+ case 34:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_DEF_IV);
+ size = 1;
+ break;
+ case 35:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPD_IV);
+ size = 1;
+ break;
+ case 36:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV);
+ size = 1;
+ break;
+ case 37:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV);
+ size = 1;
+ break;
+ case 38:
+ data32 = GetMonData(&gPlayerParty[a], MON_DATA_PERSONALITY);
+ buffer[0] = (data32 & 0x000000FF);
+ buffer[1] = (data32 & 0x0000FF00) >> 8;
+ buffer[2] = (data32 & 0x00FF0000) >> 16;
+ buffer[3] = (data32 & 0xFF000000) >> 24;
+ size = 4;
+ break;
+ case 39:
+ data16 = GetMonData(&gPlayerParty[a], MON_DATA_CHECKSUM);
+ buffer[0] = data16;
+ buffer[1] = data16 >> 8;
+ size = 2;
+ break;
+ case 40:
+ data32 = GetMonData(&gPlayerParty[a], MON_DATA_STATUS);
+ buffer[0] = (data32 & 0x000000FF);
+ buffer[1] = (data32 & 0x0000FF00) >> 8;
+ buffer[2] = (data32 & 0x00FF0000) >> 16;
+ buffer[3] = (data32 & 0xFF000000) >> 24;
+ size = 4;
+ break;
+ case 41:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_LEVEL);
+ size = 1;
+ break;
+ case 42:
+ data16 = GetMonData(&gPlayerParty[a], MON_DATA_HP);
+ buffer[0] = data16;
+ buffer[1] = data16 >> 8;
+ size = 2;
+ break;
+ case 43:
+ data16 = GetMonData(&gPlayerParty[a], MON_DATA_MAX_HP);
+ buffer[0] = data16;
+ buffer[1] = data16 >> 8;
+ size = 2;
+ break;
+ case 44:
+ data16 = GetMonData(&gPlayerParty[a], MON_DATA_ATK);
+ buffer[0] = data16;
+ buffer[1] = data16 >> 8;
+ size = 2;
+ break;
+ case 45:
+ data16 = GetMonData(&gPlayerParty[a], MON_DATA_DEF);
+ buffer[0] = data16;
+ buffer[1] = data16 >> 8;
+ size = 2;
+ break;
+ case 46:
+ data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPD);
+ buffer[0] = data16;
+ buffer[1] = data16 >> 8;
+ size = 2;
+ break;
+ case 47:
+ data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPATK);
+ buffer[0] = data16;
+ buffer[1] = data16 >> 8;
+ size = 2;
+ break;
+ case 48:
+ data16 = GetMonData(&gPlayerParty[a], MON_DATA_SPDEF);
+ buffer[0] = data16;
+ buffer[1] = data16 >> 8;
+ size = 2;
+ break;
+ case 49:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_COOL);
+ size = 1;
+ break;
+ case 50:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_BEAUTY);
+ size = 1;
+ break;
+ case 51:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_CUTE);
+ size = 1;
+ break;
+ case 52:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SMART);
+ size = 1;
+ break;
+ case 53:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_TOUGH);
+ size = 1;
+ break;
+ case 54:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SHEEN);
+ size = 1;
+ break;
+ case 55:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_COOL_RIBBON);
+ size = 1;
+ break;
+ case 56:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_BEAUTY_RIBBON);
+ size = 1;
+ break;
+ case 57:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_CUTE_RIBBON);
+ size = 1;
+ break;
+ case 58:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_SMART_RIBBON);
+ size = 1;
+ break;
+ case 59:
+ buffer[0] = GetMonData(&gPlayerParty[a], MON_DATA_TOUGH_RIBBON);
+ size = 1;
+ break;
+ }
+ return size;
+}
+
+void PlayerHandlecmd1(void)
+{
+ struct BattlePokemon battleMon; // I think this is a BattlePokemon
+ u8 *src = (u8 *)&gPlayerParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1];
+ u8 *dst = (u8 *)&battleMon + gBattleBufferA[gActiveBank][1];
+ u8 i;
+
+ for (i = 0; i < gBattleBufferA[gActiveBank][2]; i++)
+ dst[i] = src[i];
+ Emitcmd29(1, gBattleBufferA[gActiveBank][2], dst);
+ PlayerBufferExecCompleted();
+}
+
+void PlayerHandleSetAttributes(void)
+{
+ u8 r4;
+ u8 i;
+
+ if (gBattleBufferA[gActiveBank][2] == 0)
+ {
+ dp01_setattr_by_ch1_for_player_pokemon(gBattlePartyID[gActiveBank]);
+ }
+ else
+ {
+ r4 = gBattleBufferA[gActiveBank][2];
+ for (i = 0; i < 6; i++)
+ {
+ if (r4 & 1)
+ dp01_setattr_by_ch1_for_player_pokemon(i);
+ r4 >>= 1;
+ }
+ }
+ PlayerBufferExecCompleted();
+}
+
+// Duplicate of sub_811EC68
+void dp01_setattr_by_ch1_for_player_pokemon(u8 a)
+{
+ struct BattlePokemon *battlePokemon = (struct BattlePokemon *)&gBattleBufferA[gActiveBank][3];
+ struct UnknownStruct3 *moveData = (struct UnknownStruct3 *)&gBattleBufferA[gActiveBank][3];
+ s32 i;
+
+ switch (gBattleBufferA[gActiveBank][1])
+ {
+ case 0:
+ {
+ u8 iv;
+
+ SetMonData(&gPlayerParty[a], MON_DATA_SPECIES, (u8 *)&battlePokemon->species);
+ SetMonData(&gPlayerParty[a], MON_DATA_HELD_ITEM, (u8 *)&battlePokemon->item);
+ for (i = 0; i < 4; i++)
+ {
+ SetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + i, (u8 *)&battlePokemon->moves[i]);
+ SetMonData(&gPlayerParty[a], MON_DATA_PP1 + i, (u8 *)&battlePokemon->pp[i]);
+ }
+ SetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES, (u8 *)&battlePokemon->ppBonuses);
+ SetMonData(&gPlayerParty[a], MON_DATA_FRIENDSHIP, (u8 *)&battlePokemon->friendship);
+ SetMonData(&gPlayerParty[a], MON_DATA_EXP, (u8 *)&battlePokemon->experience);
+ iv = battlePokemon->hpIV;
+ SetMonData(&gPlayerParty[a], MON_DATA_HP_IV, (u8 *)&iv);
+ iv = battlePokemon->attackIV;
+ SetMonData(&gPlayerParty[a], MON_DATA_ATK_IV, (u8 *)&iv);
+ iv = battlePokemon->defenseIV;
+ SetMonData(&gPlayerParty[a], MON_DATA_DEF_IV, (u8 *)&iv);
+ iv = battlePokemon->speedIV;
+ SetMonData(&gPlayerParty[a], MON_DATA_SPD_IV, (u8 *)&iv);
+ iv = battlePokemon->spAttackIV;
+ SetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV, (u8 *)&iv);
+ iv = battlePokemon->spDefenseIV;
+ SetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV, (u8 *)&iv);
+ SetMonData(&gPlayerParty[a], MON_DATA_PERSONALITY, (u8 *)&battlePokemon->personality);
+ SetMonData(&gPlayerParty[a], MON_DATA_STATUS, (u8 *)&battlePokemon->status1);
+ SetMonData(&gPlayerParty[a], MON_DATA_LEVEL, (u8 *)&battlePokemon->level);
+ SetMonData(&gPlayerParty[a], MON_DATA_HP, (u8 *)&battlePokemon->hp);
+ SetMonData(&gPlayerParty[a], MON_DATA_MAX_HP, (u8 *)&battlePokemon->maxHP);
+ SetMonData(&gPlayerParty[a], MON_DATA_ATK, (u8 *)&battlePokemon->attack);
+ SetMonData(&gPlayerParty[a], MON_DATA_DEF, (u8 *)&battlePokemon->defense);
+ SetMonData(&gPlayerParty[a], MON_DATA_SPD, (u8 *)&battlePokemon->speed);
+ SetMonData(&gPlayerParty[a], MON_DATA_SPATK, (u8 *)&battlePokemon->spAttack);
+ SetMonData(&gPlayerParty[a], MON_DATA_SPDEF, (u8 *)&battlePokemon->spDefense);
+ }
+ break;
+ case 1:
+ SetMonData(&gPlayerParty[a], MON_DATA_SPECIES, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 2:
+ SetMonData(&gPlayerParty[a], MON_DATA_HELD_ITEM, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 3:
+ for (i = 0; i < 4; i++)
+ {
+ SetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + i, (u8 *)&moveData->moves[i]);
+ SetMonData(&gPlayerParty[a], MON_DATA_PP1 + i, (u8 *)&moveData->pp[i]);
+ }
+ SetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES, &moveData->ppBonuses);
+ break;
+ case 4:
+ case 5:
+ case 6:
+ case 7:
+ SetMonData(&gPlayerParty[a], MON_DATA_MOVE1 + gBattleBufferA[gActiveBank][1] - 4, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 8:
+ SetMonData(&gPlayerParty[a], MON_DATA_PP1, &gBattleBufferA[gActiveBank][3]);
+ SetMonData(&gPlayerParty[a], MON_DATA_PP2, &gBattleBufferA[gActiveBank][4]);
+ SetMonData(&gPlayerParty[a], MON_DATA_PP3, &gBattleBufferA[gActiveBank][5]);
+ SetMonData(&gPlayerParty[a], MON_DATA_PP4, &gBattleBufferA[gActiveBank][6]);
+ SetMonData(&gPlayerParty[a], MON_DATA_PP_BONUSES, &gBattleBufferA[gActiveBank][7]);
+ break;
+ case 9:
+ case 10:
+ case 11:
+ case 12:
+ SetMonData(&gPlayerParty[a], MON_DATA_PP1 + gBattleBufferA[gActiveBank][1] - 9, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 17:
+ SetMonData(&gPlayerParty[a], MON_DATA_OT_ID, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 18:
+ SetMonData(&gPlayerParty[a], MON_DATA_EXP, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 19:
+ SetMonData(&gPlayerParty[a], MON_DATA_HP_EV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 20:
+ SetMonData(&gPlayerParty[a], MON_DATA_ATK_EV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 21:
+ SetMonData(&gPlayerParty[a], MON_DATA_DEF_EV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 22:
+ SetMonData(&gPlayerParty[a], MON_DATA_SPD_EV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 23:
+ SetMonData(&gPlayerParty[a], MON_DATA_SPATK_EV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 24:
+ SetMonData(&gPlayerParty[a], MON_DATA_SPDEF_EV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 25:
+ SetMonData(&gPlayerParty[a], MON_DATA_FRIENDSHIP, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 26:
+ SetMonData(&gPlayerParty[a], MON_DATA_POKERUS, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 27:
+ SetMonData(&gPlayerParty[a], MON_DATA_MET_LOCATION, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 28:
+ SetMonData(&gPlayerParty[a], MON_DATA_MET_LEVEL, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 29:
+ SetMonData(&gPlayerParty[a], MON_DATA_MET_GAME, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 30:
+ SetMonData(&gPlayerParty[a], MON_DATA_POKEBALL, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 31:
+ SetMonData(&gPlayerParty[a], MON_DATA_HP_IV, &gBattleBufferA[gActiveBank][3]);
+ SetMonData(&gPlayerParty[a], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBank][4]);
+ SetMonData(&gPlayerParty[a], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBank][5]);
+ SetMonData(&gPlayerParty[a], MON_DATA_SPD_IV, &gBattleBufferA[gActiveBank][6]);
+ SetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBank][7]);
+ SetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBank][8]);
+ break;
+ case 32:
+ SetMonData(&gPlayerParty[a], MON_DATA_HP_IV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 33:
+ SetMonData(&gPlayerParty[a], MON_DATA_ATK_IV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 34:
+ SetMonData(&gPlayerParty[a], MON_DATA_DEF_IV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 35:
+ SetMonData(&gPlayerParty[a], MON_DATA_SPD_IV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 36:
+ SetMonData(&gPlayerParty[a], MON_DATA_SPATK_IV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 37:
+ SetMonData(&gPlayerParty[a], MON_DATA_SPDEF_IV, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 38:
+ SetMonData(&gPlayerParty[a], MON_DATA_PERSONALITY, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 39:
+ SetMonData(&gPlayerParty[a], MON_DATA_CHECKSUM, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 40:
+ SetMonData(&gPlayerParty[a], MON_DATA_STATUS, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 41:
+ SetMonData(&gPlayerParty[a], MON_DATA_LEVEL, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 42:
+ SetMonData(&gPlayerParty[a], MON_DATA_HP, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 43:
+ SetMonData(&gPlayerParty[a], MON_DATA_MAX_HP, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 44:
+ SetMonData(&gPlayerParty[a], MON_DATA_ATK, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 45:
+ SetMonData(&gPlayerParty[a], MON_DATA_DEF, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 46:
+ SetMonData(&gPlayerParty[a], MON_DATA_SPD, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 47:
+ SetMonData(&gPlayerParty[a], MON_DATA_SPATK, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 48:
+ SetMonData(&gPlayerParty[a], MON_DATA_SPDEF, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 49:
+ SetMonData(&gPlayerParty[a], MON_DATA_COOL, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 50:
+ SetMonData(&gPlayerParty[a], MON_DATA_BEAUTY, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 51:
+ SetMonData(&gPlayerParty[a], MON_DATA_CUTE, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 52:
+ SetMonData(&gPlayerParty[a], MON_DATA_SMART, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 53:
+ SetMonData(&gPlayerParty[a], MON_DATA_TOUGH, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 54:
+ SetMonData(&gPlayerParty[a], MON_DATA_SHEEN, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 55:
+ SetMonData(&gPlayerParty[a], MON_DATA_COOL_RIBBON, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 56:
+ SetMonData(&gPlayerParty[a], MON_DATA_BEAUTY_RIBBON, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 57:
+ SetMonData(&gPlayerParty[a], MON_DATA_CUTE_RIBBON, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 58:
+ SetMonData(&gPlayerParty[a], MON_DATA_SMART_RIBBON, &gBattleBufferA[gActiveBank][3]);
+ break;
+ case 59:
+ SetMonData(&gPlayerParty[a], MON_DATA_TOUGH_RIBBON, &gBattleBufferA[gActiveBank][3]);
+ break;
+ }
+ sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+}
+
+void PlayerHandlecmd3(void)
+{
+ u8 *dst = (u8 *)&gPlayerParty[gBattlePartyID[gActiveBank]] + gBattleBufferA[gActiveBank][1];
+ u8 i;
+
+ for (i = 0; i < gBattleBufferA[gActiveBank][2]; i++)
+ dst[i] = gBattleBufferA[gActiveBank][3 + i];
+ PlayerBufferExecCompleted();
+}
+
+void PlayerHandleLoadPokeSprite(void)
+{
+ BattleLoadPlayerMonSprite(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = gActiveBank;
+ gBattleBankFunc[gActiveBank] = bx_0802E404;
+}
+
+void PlayerHandleSendOutPoke(void)
+{
+ sub_8032AA8(gActiveBank, gBattleBufferA[gActiveBank][2]);
+ gBattlePartyID[gActiveBank] = gBattleBufferA[gActiveBank][1];
+ BattleLoadPlayerMonSprite(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ gActionSelectionCursor[gActiveBank] = 0;
+ gMoveSelectionCursor[gActiveBank] = 0;
+ sub_802F934(gActiveBank, gBattleBufferA[gActiveBank][2]);
+ gBattleBankFunc[gActiveBank] = sub_802D798;
+}
+
+void sub_802F934(u8 bank, u8 b)
+{
+ u16 species;
+
+ sub_8032AA8(bank, b);
+ gBattlePartyID[bank] = gBattleBufferA[bank][1];
+ species = GetMonData(&gPlayerParty[gBattlePartyID[bank]], MON_DATA_SPECIES);
+ gUnknown_0300434C[bank] = CreateInvisibleSpriteWithCallback(sub_80312F0);
+ GetMonSpriteTemplate_803C56C(species, GetBankIdentity(bank));
+ gObjectBankIDs[bank] = CreateSprite(
+ &gUnknown_02024E8C,
+ sub_8077ABC(bank, 2),
+ sub_8077F68(bank),
+ sub_8079E90(bank));
+ gSprites[gUnknown_0300434C[bank]].data1 = gObjectBankIDs[bank];
+ gSprites[gObjectBankIDs[bank]].data0 = bank;
+ gSprites[gObjectBankIDs[bank]].data2 = species;
+ gSprites[gObjectBankIDs[bank]].oam.paletteNum = bank;
+ StartSpriteAnim(&gSprites[gObjectBankIDs[bank]], gBattleMonForms[bank]);
+ gSprites[gObjectBankIDs[bank]].invisible = TRUE;
+ gSprites[gObjectBankIDs[bank]].callback = SpriteCallbackDummy;
+ gSprites[gUnknown_0300434C[bank]].data0 = sub_8046400(0, 0xFF);
+}
+
+void PlayerHandleReturnPokeToBall(void)
+{
+ if (gBattleBufferA[gActiveBank][1] == 0)
+ {
+ ewram17810[gActiveBank].unk4 = 0;
+ gBattleBankFunc[gActiveBank] = sub_802FB2C;
+ }
+ else
+ {
+ FreeSpriteOamMatrix(&gSprites[gObjectBankIDs[gActiveBank]]);
+ DestroySprite(&gSprites[gObjectBankIDs[gActiveBank]]);
+ sub_8043DB0(gHealthboxIDs[gActiveBank]);
+ PlayerBufferExecCompleted();
+ }
+}
+
+void sub_802FB2C(void)
+{
+ switch (ewram17810[gActiveBank].unk4)
+ {
+ case 0:
+ if (ewram17800[gActiveBank].substituteSprite)
+ move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5);
+ ewram17810[gActiveBank].unk4 = 1;
+ break;
+ case 1:
+ if (!ewram17810[gActiveBank].unk0_6)
+ {
+ ewram17810[gActiveBank].unk4 = 0;
+ move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 1);
+ gBattleBankFunc[gActiveBank] = sub_802DEAC;
+ }
+ }
+}
+
+void PlayerHandleTrainerThrow(void)
+{
+ s16 r7;
+
+ if (gBattleTypeFlags & BATTLE_TYPE_MULTI)
+ {
+ if (GetBankIdentity(gActiveBank) & 2)
+ r7 = 16;
+ else
+ r7 = -16;
+ }
+ else
+ {
+ r7 = 0;
+ }
+ LoadPlayerTrainerBankSprite(gSaveBlock2.playerGender, gActiveBank);
+ GetMonSpriteTemplate_803C5A0(gSaveBlock2.playerGender, GetBankIdentity(gActiveBank));
+ gObjectBankIDs[gActiveBank] = CreateSprite(
+ &gUnknown_02024E8C,
+ r7 + 80,
+ (8 - gTrainerBackPicCoords[gSaveBlock2.playerGender].coords) * 4 + 80,
+ sub_8079E90(gActiveBank));
+ gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = gActiveBank;
+ gSprites[gObjectBankIDs[gActiveBank]].pos2.x = 240;
+ gSprites[gObjectBankIDs[gActiveBank]].data0 = -2;
+ gSprites[gObjectBankIDs[gActiveBank]].callback = sub_80313A0;
+ gBattleBankFunc[gActiveBank] = sub_802D204;
+}
+
+void PlayerHandleTrainerSlide(void)
+{
+ LoadPlayerTrainerBankSprite(gSaveBlock2.playerGender, gActiveBank);
+ GetMonSpriteTemplate_803C5A0(gSaveBlock2.playerGender, GetBankIdentity(gActiveBank));
+ gObjectBankIDs[gActiveBank] = CreateSprite(
+ &gUnknown_02024E8C,
+ 80,
+ (8 - gTrainerBackPicCoords[gSaveBlock2.playerGender].coords) * 4 + 80,
+ 30);
+ gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = gActiveBank;
+ gSprites[gObjectBankIDs[gActiveBank]].pos2.x = -96;
+ gSprites[gObjectBankIDs[gActiveBank]].data0 = 2;
+ gSprites[gObjectBankIDs[gActiveBank]].callback = sub_80313A0;
+ gBattleBankFunc[gActiveBank] = sub_802D23C;
+}
+
+void PlayerHandleTrainerSlideBack(void)
+{
+ oamt_add_pos2_onto_pos1(&gSprites[gObjectBankIDs[gActiveBank]]);
+ gSprites[gObjectBankIDs[gActiveBank]].data0 = 50;
+ gSprites[gObjectBankIDs[gActiveBank]].data2 = -40;
+ gSprites[gObjectBankIDs[gActiveBank]].data4 = gSprites[gObjectBankIDs[gActiveBank]].pos1.y;
+ gSprites[gObjectBankIDs[gActiveBank]].callback = sub_8078B34;
+ StoreSpriteCallbackInData6(&gSprites[gObjectBankIDs[gActiveBank]], SpriteCallbackDummy);
+ StartSpriteAnim(&gSprites[gObjectBankIDs[gActiveBank]], 1);
+ gBattleBankFunc[gActiveBank] = sub_802D274;
+}
+
+void PlayerHandlecmd10(void)
+{
+ if (ewram17810[gActiveBank].unk4 == 0)
+ {
+ if (ewram17800[gActiveBank].substituteSprite)
+ move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5);
+ ewram17810[gActiveBank].unk4++;
+ }
+ else
+ {
+ if (ewram17810[gActiveBank].unk0_6 == 0)
+ {
+ ewram17810[gActiveBank].unk4 = 0;
+ sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ PlaySE12WithPanning(SE_POKE_DEAD, -64);
+ gSprites[gObjectBankIDs[gActiveBank]].data1 = 0;
+ gSprites[gObjectBankIDs[gActiveBank]].data2 = 5;
+ gSprites[gObjectBankIDs[gActiveBank]].callback = sub_80105EC;
+ gBattleBankFunc[gActiveBank] = sub_802DE10;
+ }
+ }
+}
+
+void PlayerHandlecmd11(void)
+{
+ BeginNormalPaletteFade(0xFFFFFFFF, 2, 0, 16, 0);
+ PlayerBufferExecCompleted();
+}
+
+void PlayerHandlecmd12(void)
+{
+ ewram17840.unk8 = 4;
+ gDoingBattleAnim = 1;
+ move_anim_start_t4(gActiveBank, gActiveBank, GetBankByPlayerAI(1), 3);
+ gBattleBankFunc[gActiveBank] = bx_wait_t1;
+}
+
+void PlayerHandleBallThrow(void)
+{
+ u8 var = gBattleBufferA[gActiveBank][1];
+
+ ewram17840.unk8 = var;
+ gDoingBattleAnim = 1;
+ move_anim_start_t4(gActiveBank, gActiveBank, GetBankByPlayerAI(1), 3);
+ gBattleBankFunc[gActiveBank] = bx_wait_t1;
+}
+
+void PlayerHandlePuase(void)
+{
+ u8 var = gBattleBufferA[gActiveBank][1];
+
+ // WTF is this??
+ while (var != 0)
+ var--;
+
+ PlayerBufferExecCompleted();
+}
+
+void PlayerHandleMoveAnimation(void)
+{
+ if (!mplay_80342A4(gActiveBank))
+ {
+ u16 r0 = gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8);
+
+ gUnknown_0202F7C4 = gBattleBufferA[gActiveBank][3];
+ gMovePowerMoveAnim = gBattleBufferA[gActiveBank][4] | (gBattleBufferA[gActiveBank][5] << 8);
+ gMoveDmgMoveAnim = gBattleBufferA[gActiveBank][6] | (gBattleBufferA[gActiveBank][7] << 8) | (gBattleBufferA[gActiveBank][8] << 16) | (gBattleBufferA[gActiveBank][9] << 24);
+ gHappinessMoveAnim = gBattleBufferA[gActiveBank][10];
+ gWeatherMoveAnim = gBattleBufferA[gActiveBank][12] | (gBattleBufferA[gActiveBank][13] << 8);
+ gDisableStructMoveAnim = (u32 *)&gBattleBufferA[gActiveBank][16];
+ gPID_perBank[gActiveBank] = *gDisableStructMoveAnim;
+ if (sub_8031720(r0, gUnknown_0202F7C4) != 0)
+ {
+ // Dead code. sub_8031720 always returns 0.
+ PlayerBufferExecCompleted();
+ }
+ else
+ {
+ ewram17810[gActiveBank].unk4 = 0;
+ gBattleBankFunc[gActiveBank] = sub_8030190;
+ }
+ }
+}
+
+void sub_8030190(void)
+{
+ u16 r4 = gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8);
+ u8 r7 = gBattleBufferA[gActiveBank][11];
+
+ switch (ewram17810[gActiveBank].unk4)
+ {
+ case 0:
+ if (ewram17800[gActiveBank].substituteSprite == 1 && ewram17800[gActiveBank].unk0_3 == 0)
+ {
+ ewram17800[gActiveBank].unk0_3 = 1;
+ move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5);
+ }
+ ewram17810[gActiveBank].unk4 = 1;
+ break;
+ case 1:
+ if (ewram17810[gActiveBank].unk0_6 == 0)
+ {
+ sub_80326EC(0);
+ ExecuteMoveAnim(r4);
+ ewram17810[gActiveBank].unk4 = 2;
+ }
+ break;
+ case 2:
+ gAnimScriptCallback();
+ if (!gAnimScriptActive)
+ {
+ sub_80326EC(1);
+ if (ewram17800[gActiveBank].substituteSprite == 1 && r7 < 2)
+ {
+ move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6);
+ ewram17800[gActiveBank].unk0_3 = 0;
+ }
+ ewram17810[gActiveBank].unk4 = 3;
+ }
+ break;
+ case 3:
+ if (ewram17810[gActiveBank].unk0_6 == 0)
+ {
+ sub_8031F24();
+ sub_80324BC(gActiveBank, gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
+ ewram17810[gActiveBank].unk4 = 0;
+ PlayerBufferExecCompleted();
+ }
+ break;
+ }
+}
+
+void PlayerHandlePrintString(void)
+{
+ gUnknown_030042A4 = 0;
+ gUnknown_030042A0 = 0;
+ BufferStringBattle(*(u16 *)&gBattleBufferA[gActiveBank][2]);
+ sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 0x90, 2, 15);
+ gBattleBankFunc[gActiveBank] = sub_802DF18;
+}
+
+void PlayerHandlePrintStringPlayerOnly(void)
+{
+ if (GetBankSide(gActiveBank) == 0)
+ PlayerHandlePrintString();
+ else
+ PlayerBufferExecCompleted();
+}
+
+void PlayerHandlecmd18(void)
+{
+ int r4;
+
+ gUnknown_030042A4 = 0;
+ gUnknown_030042A0 = 160;
+ FillWindowRect(&gUnknown_03004210, 10, 2, 15, 27, 18);
+ FillWindowRect(&gUnknown_03004210, 10, 2, 35, 16, 38);
+
+ gBattleBankFunc[gActiveBank] = sub_802C098;
+
+ InitWindow(&gUnknown_03004210, gUnknown_08400CF3, 400, 18, 35);
+ sub_8002F44(&gUnknown_03004210);
+ sub_814A5C0(0, 0xFFFF, 12, 11679, 0);
+
+ for (r4 = 0; r4 < 4; r4++)
+ nullsub_8(r4);
+
+ sub_802E3E4(gActionSelectionCursor[gActiveBank], 0);
+
+ StrCpyDecodeToDisplayedStringBattle((u8 *) gUnknown_08400CA8);
+ InitWindow(&gUnknown_03004210, gDisplayedStringBattle, SUB_803037C_TILE_DATA_OFFSET, 2, 35);
+ sub_8002F44(&gUnknown_03004210);
+}
+
+void PlayerHandlecmd19()
+{
+}
+
+void PlayerHandlecmd20(void)
+{
+ sub_814A5C0(0, 0xFFFF, 12, 0x2D9F, 0);
+ sub_80304A8();
+ gBattleBankFunc[gActiveBank] = sub_802C68C;
+}
+
+void sub_80304A8(void)
+{
+ gUnknown_030042A4 = 0;
+ gUnknown_030042A0 = 320;
+ sub_802E1B0();
+ gUnknown_03004344 = 0xFF;
+ sub_802E3B4(gMoveSelectionCursor[gActiveBank], 0);
+ if (gBattleBufferA[gActiveBank][2] != 1)
+ {
+ InitWindow(&gUnknown_03004210, gUnknown_08400D38, 656, 23, 55);
+ sub_8002F44(&gUnknown_03004210);
+ }
+ sub_802E220();
+ sub_802E2D4();
+}
+
+void PlayerHandleOpenBag(void)
+{
+ s32 i;
+
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
+ gBattleBankFunc[gActiveBank] = sub_802E004;
+ gBankInMenu = gActiveBank;
+ for (i = 0; i < 3; i++)
+ gUnknown_02038470[i] = gBattleBufferA[gActiveBank][1 + i];
+}
+
+void PlayerHandlecmd22(void)
+{
+ s32 i;
+
+ gUnknown_0300434C[gActiveBank] = CreateTask(TaskDummy, 0xFF);
+ gTasks[gUnknown_0300434C[gActiveBank]].data[0] = gBattleBufferA[gActiveBank][1] & 0xF;
+ ewram[0x16054] = gBattleBufferA[gActiveBank][1] >> 4;
+ ewram[0x1609D] = gBattleBufferA[gActiveBank][2];
+ ewram[0x160C0] = gBattleBufferA[gActiveBank][3];
+ for (i = 0; i < 3; i++)
+ gUnknown_02038470[i] = gBattleBufferA[gActiveBank][4 + i];
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
+ gBattleBankFunc[gActiveBank] = sub_802DF30;
+ gBankInMenu = gActiveBank;
+}
+
+void PlayerHandlecmd23(void)
+{
+ BattleMusicStop();
+ BeginNormalPaletteFade(0xFFFFFFFF, 2, 0, 16, 0);
+ PlayerBufferExecCompleted();
+}
+
+void PlayerHandleHealthBarUpdate(void)
+{
+ s16 r7;
+
+ load_gfxc_health_bar(0);
+ r7 = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8);
+ if (r7 != 0x7FFF)
+ {
+ u32 maxHP = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MAX_HP);
+ u32 curHP = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_HP);
+
+ sub_8043D84(gActiveBank, gHealthboxIDs[gActiveBank], maxHP, curHP, r7);
+ }
+ else
+ {
+ u32 maxHP = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_MAX_HP);
+
+ sub_8043D84(gActiveBank, gHealthboxIDs[gActiveBank], maxHP, 0, r7);
+ sub_80440EC(gHealthboxIDs[gActiveBank], 0, 0);
+ }
+ gBattleBankFunc[gActiveBank] = bx_t1_healthbar_update;
+}
+
+void PlayerHandleExpBarUpdate(void)
+{
+ u8 r7 = gBattleBufferA[gActiveBank][1];
+
+ if (GetMonData(&gPlayerParty[r7], MON_DATA_LEVEL) >= 100)
+ {
+ PlayerBufferExecCompleted();
+ }
+ else
+ {
+ u16 r4;
+ u8 taskId;
+
+ load_gfxc_health_bar(1);
+ GetMonData(&gPlayerParty[r7], MON_DATA_SPECIES); // unused return value
+ r4 = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8);
+ taskId = CreateTask(sub_802D924, 10);
+ gTasks[taskId].data[0] = r7;
+ gTasks[taskId].data[1] = r4;
+ gTasks[taskId].data[2] = gActiveBank;
+ gBattleBankFunc[gActiveBank] = nullsub_91;
+ }
+}
+
+void PlayerHandleStatusIconUpdate(void)
+{
+ if (!mplay_80342A4(gActiveBank))
+ {
+ sub_8045A5C(gHealthboxIDs[gActiveBank], &gPlayerParty[gBattlePartyID[gActiveBank]], 9);
+ ewram17810[gActiveBank].unk0_4 = 0;
+ gBattleBankFunc[gActiveBank] = sub_802E434;
+ }
+}
+
+void PlayerHandleStatusAnimation(void)
+{
+ if (!mplay_80342A4(gActiveBank))
+ {
+ move_anim_start_t2_for_situation(
+ gBattleBufferA[gActiveBank][1],
+ gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8) | (gBattleBufferA[gActiveBank][4] << 16) | (gBattleBufferA[gActiveBank][5] << 24));
+ gBattleBankFunc[gActiveBank] = sub_802E434;
+ }
+}
+
+void PlayerHandleStatusXor(void)
+{
+ u8 val = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_STATUS) ^ gBattleBufferA[gActiveBank][1];
+
+ SetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_STATUS, &val);
+ PlayerBufferExecCompleted();
+}
+
+void PlayerHandlecmd29(void)
+{
+ PlayerBufferExecCompleted();
+}
+
+void PlayerHandleDMATransfer(void)
+{
+ u32 val1 = gBattleBufferA[gActiveBank][1]
+ | (gBattleBufferA[gActiveBank][2] << 8)
+ | (gBattleBufferA[gActiveBank][3] << 16)
+ | (gBattleBufferA[gActiveBank][4] << 24);
+ u16 val2 = gBattleBufferA[gActiveBank][5] | (gBattleBufferA[gActiveBank][6] << 8);
+
+ const u8 *src = &gBattleBufferA[gActiveBank][7];
+ u8 *dst = (u8 *)val1;
+ u32 size = val2;
+
+ while (1)
+ {
+ if (size <= 0x1000)
+ {
+ DmaCopy16(3, src, dst, size);
+ break;
+ }
+ DmaCopy16(3, src, dst, 0x1000);
+ src += 0x1000;
+ dst += 0x1000;
+ size -= 0x1000;
+ }
+ PlayerBufferExecCompleted();
+}
+
+void PlayerHandlecmd31(void)
+{
+ PlayBGM(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
+ PlayerBufferExecCompleted();
+}
+
+void PlayerHandlecmd32(void)
+{
+ PlayerBufferExecCompleted();
+}
+
+void PlayerHandlecmd33(void)
+{
+ Emitcmd33(1, 0, 0);
+ PlayerBufferExecCompleted();
+}
+
+void PlayerHandlecmd34(void)
+{
+ Emitcmd34(1, 0, 0);
+ PlayerBufferExecCompleted();
+}
+
+void PlayerHandlecmd35(void)
+{
+ Emitcmd35(1, 0);
+ PlayerBufferExecCompleted();
+}
+
+void PlayerHandlecmd36(void)
+{
+ Emitcmd36(1, 0);
+ PlayerBufferExecCompleted();
+}
+
+void PlayerHandlecmd37(void)
+{
+ gUnknown_020238C8.unk0_0 = 0;
+ PlayerBufferExecCompleted();
+}
+
+void PlayerHandlecmd38(void)
+{
+ gUnknown_020238C8.unk0_0 = gBattleBufferA[gActiveBank][1];
+ PlayerBufferExecCompleted();
+}
+
+void PlayerHandlecmd39(void)
+{
+ gUnknown_020238C8.unk0_7 = 0;
+ PlayerBufferExecCompleted();
+}
+
+void PlayerHandlecmd40(void)
+{
+ gUnknown_020238C8.unk0_7 ^= 1;
+ PlayerBufferExecCompleted();
+}
+
+void PlayerHandleHitAnimation(void)
+{
+ if (gSprites[gObjectBankIDs[gActiveBank]].invisible == TRUE)
+ {
+ PlayerBufferExecCompleted();
+ }
+ else
+ {
+ gDoingBattleAnim = 1;
+ gSprites[gObjectBankIDs[gActiveBank]].data1 = 0;
+ sub_8047858(gActiveBank);
+ gBattleBankFunc[gActiveBank] = bx_blink_t1;
+ }
+}
+
+void PlayerHandlecmd42(void)
+{
+ PlayerBufferExecCompleted();
+}
+
+void PlayerHandleEffectivenessSound(void)
+{
+ s8 pan;
+
+ if (GetBankSide(gActiveBank) == 0)
+ pan = -64;
+ else
+ pan = 63;
+ PlaySE12WithPanning(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8), pan);
+ PlayerBufferExecCompleted();
+}
+
+void PlayerHandlecmd44(void)
+{
+ PlayFanfare(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
+ PlayerBufferExecCompleted();
+}
+
+void PlayerHandleFaintingCry(void)
+{
+ u16 species = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES);
+
+ PlayCry3(species, -25, 5);
+ PlayerBufferExecCompleted();
+}
+
+void PlayerHandleIntroSlide(void)
+{
+ sub_80E43C0(gBattleBufferA[gActiveBank][1]);
+ gUnknown_02024DE8 |= 1;
+ PlayerBufferExecCompleted();
+}
+
+void PlayerHandleTrainerBallThrow(void)
+{
+ u8 paletteNum;
+ u8 taskId;
+
+ oamt_add_pos2_onto_pos1(&gSprites[gObjectBankIDs[gActiveBank]]);
+ gSprites[gObjectBankIDs[gActiveBank]].data0 = 50;
+ gSprites[gObjectBankIDs[gActiveBank]].data2 = -40;
+ gSprites[gObjectBankIDs[gActiveBank]].data4 = gSprites[gObjectBankIDs[gActiveBank]].pos1.y;
+ gSprites[gObjectBankIDs[gActiveBank]].callback = sub_8078B34;
+ gSprites[gObjectBankIDs[gActiveBank]].data5 = gActiveBank;
+ StoreSpriteCallbackInData6(&gSprites[gObjectBankIDs[gActiveBank]], sub_8030E38);
+ StartSpriteAnim(&gSprites[gObjectBankIDs[gActiveBank]], 1);
+ paletteNum = AllocSpritePalette(0xD6F8);
+ LoadCompressedPalette(gTrainerBackPicPaletteTable[gSaveBlock2.playerGender].data, 0x100 + paletteNum * 16, 32);
+ gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = paletteNum;
+ taskId = CreateTask(task05_08033660, 5);
+ gTasks[taskId].data[0] = gActiveBank;
+ if (ewram17810[gActiveBank].unk0_0)
+ gTasks[gUnknown_02024E68[gActiveBank]].func = sub_8044CA0;
+ ewram17810[4].unk9 |= 1;
+ gBattleBankFunc[gActiveBank] = nullsub_91;
+}
+
+void sub_8030E38(struct Sprite *sprite)
+{
+ u8 r4 = sprite->data5;
+
+ FreeSpriteOamMatrix(sprite);
+ FreeSpritePaletteByTag(GetSpritePaletteTagByPaletteNum(sprite->oam.paletteNum));
+ DestroySprite(sprite);
+ BattleLoadPlayerMonSprite(&gPlayerParty[gBattlePartyID[r4]], r4);
+ StartSpriteAnim(&gSprites[gObjectBankIDs[r4]], 0);
+}
+
+void task05_08033660(u8 taskId)
+{
+ if (gTasks[taskId].data[1] < 31)
+ {
+ gTasks[taskId].data[1]++;
+ }
+ else
+ {
+ u8 savedActiveBank = gActiveBank;
+
+ gActiveBank = gTasks[taskId].data[0];
+ if (!IsDoubleBattle() || (gBattleTypeFlags & 0x40))
+ {
+ gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank];
+ sub_802F934(gActiveBank, 0);
+ }
+ else
+ {
+ gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank];
+ sub_802F934(gActiveBank, 0);
+ gActiveBank ^= 2;
+ gBattleBufferA[gActiveBank][1] = gBattlePartyID[gActiveBank];
+ BattleLoadPlayerMonSprite(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
+ sub_802F934(gActiveBank, 0);
+ gActiveBank ^= 2;
+ }
+ gBattleBankFunc[gActiveBank] = sub_802D500;
+ gActiveBank = savedActiveBank;
+ DestroyTask(taskId);
+ }
+}
+
+void PlayerHandlecmd48(void)
+{
+ if (gBattleBufferA[gActiveBank][1] != 0 && GetBankSide(gActiveBank) == 0)
+ {
+ PlayerBufferExecCompleted();
+ }
+ else
+ {
+ ewram17810[gActiveBank].unk0_0 = 1;
+ gUnknown_02024E68[gActiveBank] = sub_8044804(gActiveBank, (struct BattleInterfaceStruct2 *)&gBattleBufferA[gActiveBank][4], gBattleBufferA[gActiveBank][1], gBattleBufferA[gActiveBank][2]);
+ ewram17810[gActiveBank].unk5 = 0;
+ if (gBattleBufferA[gActiveBank][2] != 0)
+ ewram17810[gActiveBank].unk5 = 0x5D;
+ gBattleBankFunc[gActiveBank] = sub_8031064;
+ }
+}
+
+void sub_8031064(void)
+{
+ if (ewram17810[gActiveBank].unk5++ > 0x5C)
+ {
+ ewram17810[gActiveBank].unk5 = 0;
+ PlayerBufferExecCompleted();
+ }
+}
+
+void PlayerHandlecmd49(void)
+{
+ if (ewram17810[gActiveBank].unk0_0)
+ gTasks[gUnknown_02024E68[gActiveBank]].func = sub_8044CA0;
+ PlayerBufferExecCompleted();
+}
+
+void PlayerHandlecmd50(void)
+{
+ dp11b_obj_free(gActiveBank, 1);
+ dp11b_obj_free(gActiveBank, 0);
+ PlayerBufferExecCompleted();
+}
+
+void PlayerHandleSpriteInvisibility(void)
+{
+ if (AnimBankSpriteExists(gActiveBank))
+ {
+ gSprites[gObjectBankIDs[gActiveBank]].invisible = gBattleBufferA[gActiveBank][1];
+ sub_8031F88(gActiveBank);
+ }
+ PlayerBufferExecCompleted();
+}
+
+void PlayerHandleBattleAnimation(void)
+{
+ if (!mplay_80342A4(gActiveBank))
+ {
+ u8 val2 = gBattleBufferA[gActiveBank][1];
+ u16 val = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8);
+
+ if (move_anim_start_t3(gActiveBank, gActiveBank, gActiveBank, val2, val))
+ PlayerBufferExecCompleted();
+ else
+ gBattleBankFunc[gActiveBank] = sub_802E460;
+ }
+}
+
+void PlayerHandleLinkStandbyMsg(void)
+{
+ switch (gBattleBufferA[gActiveBank][1])
+ {
+ case 0:
+ b_link_standby_message();
+ // fall through
+ case 1:
+ dp11b_obj_free(gActiveBank, 1);
+ dp11b_obj_free(gActiveBank, 0);
+ break;
+ case 2:
+ b_link_standby_message();
+ break;
+ }
+ PlayerBufferExecCompleted();
+}
+
+void PlayerHandleResetActionMoveSelection(void)
+{
+ switch (gBattleBufferA[gActiveBank][1])
+ {
+ case 0:
+ gActionSelectionCursor[gActiveBank] = 0;
+ gMoveSelectionCursor[gActiveBank] = 0;
+ break;
+ case 1:
+ gActionSelectionCursor[gActiveBank] = 0;
+ break;
+ case 2:
+ gMoveSelectionCursor[gActiveBank] = 0;
+ break;
+ }
+ PlayerBufferExecCompleted();
+}
+
+void PlayerHandlecmd55(void)
+{
+ gBattleOutcome = gBattleBufferA[gActiveBank][1];
+ FadeOutMapMusic(5);
+ BeginFastPaletteFade(3);
+ PlayerBufferExecCompleted();
+ gBattleBankFunc[gActiveBank] = sub_802D18C;
+}
+
+void PlayerHandlecmd56(void)
+{
+}
diff --git a/src/battle_controller_safari.c b/src/battle_controller_safari.c
new file mode 100644
index 000000000..e05578c31
--- /dev/null
+++ b/src/battle_controller_safari.c
@@ -0,0 +1,709 @@
+#include "global.h"
+#include "battle_anim_81258BC.h"
+#include "battle.h"
+#include "battle_message.h"
+#include "data2.h"
+#include "link.h"
+#include "main.h"
+#include "menu_cursor.h"
+#include "palette.h"
+#include "rom3.h"
+#include "songs.h"
+#include "sound.h"
+#include "text.h"
+#include "util.h"
+
+extern struct Window gUnknown_03004210;
+extern u8 gDisplayedStringBattle[];
+extern u8 gActionSelectionCursor[];
+
+extern const u8 gUnknown_08400CBB[];
+extern u8 gActiveBank;
+extern const u8 gUnknown_08400D15[];
+
+extern void *gBattleBankFunc[];
+extern u16 gUnknown_030042A0;
+extern u16 gUnknown_030042A4;
+extern u8 gBattleBufferA[][0x200];
+extern bool8 gDoingBattleAnim;
+extern u8 gObjectBankIDs[];
+extern struct SpriteTemplate gUnknown_02024E8C;
+extern u16 gBattleTypeFlags;
+extern u32 gBattleExecBuffer;
+extern u16 gScriptItemId;
+extern MainCallback gPreBattleCallback1;
+extern u8 gBankInMenu;
+extern u8 gHealthboxIDs[];
+extern u16 gBattlePartyID[];
+extern u16 gUnknown_02024DE8;
+extern u8 gBattleOutcome;
+
+extern u8 GetBankSide(u8);
+extern u8 GetBankByPlayerAI(u8);
+extern u8 GetBankIdentity(u8);
+extern void LoadPlayerTrainerBankSprite();
+extern u8 sub_8079E90();
+extern void sub_80313A0(struct Sprite *);
+extern void sub_810BADC(void);
+extern void sub_8045A5C();
+extern void sub_80E43C0();
+extern void sub_804777C();
+extern void sub_8043DFC();
+extern bool8 move_anim_start_t3();
+
+#if ENGLISH
+#define SUB_812BB10_TILE_DATA_OFFSET 440
+#elif GERMAN
+#define SUB_812BB10_TILE_DATA_OFFSET 444
+#endif
+
+// this file's functions
+void SafariHandleGetAttributes(void);
+void SafariHandlecmd1(void);
+void SafariHandleSetAttributes(void);
+void SafariHandlecmd3(void);
+void SafariHandleLoadPokeSprite(void);
+void SafariHandleSendOutPoke(void);
+void SafariHandleReturnPokeToBall(void);
+void SafariHandleTrainerThrow(void);
+void SafariHandleTrainerSlide(void);
+void SafariHandleTrainerSlideBack(void);
+void SafariHandlecmd10(void);
+void SafariHandlecmd11(void);
+void SafariHandlecmd12(void);
+void SafariHandleBallThrow(void);
+void SafariHandlePuase(void);
+void SafariHandleMoveAnimation(void);
+void SafariHandlePrintString(void);
+void SafariHandlePrintStringPlayerOnly(void);
+void SafariHandlecmd18(void);
+void SafariHandlecmd19(void);
+void SafariHandlecmd20(void);
+void SafariHandleOpenBag(void);
+void SafariHandlecmd22(void);
+void SafariHandlecmd23(void);
+void SafariHandleHealthBarUpdate(void);
+void SafariHandleExpBarUpdate(void);
+void SafariHandleStatusIconUpdate(void);
+void SafariHandleStatusAnimation(void);
+void SafariHandleStatusXor(void);
+void SafariHandlecmd29(void);
+void SafariHandleDMATransfer(void);
+void SafariHandlecmd31(void);
+void SafariHandlecmd32(void);
+void SafariHandlecmd33(void);
+void SafariHandlecmd34(void);
+void SafariHandlecmd35(void);
+void SafariHandlecmd36(void);
+void SafariHandlecmd37(void);
+void SafariHandlecmd38(void);
+void SafariHandlecmd39(void);
+void SafariHandlecmd40(void);
+void SafariHandleHitAnimation(void);
+void SafariHandlecmd42(void);
+void SafariHandleEffectivenessSound(void);
+void SafariHandlecmd44(void);
+void SafariHandleFaintingCry(void);
+void SafariHandleIntroSlide(void);
+void SafariHandleTrainerBallThrow(void);
+void SafariHandlecmd48(void);
+void SafariHandlecmd49(void);
+void SafariHandlecmd50(void);
+void SafariHandleSpriteInvisibility(void);
+void SafariHandleBattleAnimation(void);
+void SafariHandleLinkStandbyMsg(void);
+void SafariHandleResetActionMoveSelection(void);
+void SafariHandlecmd55(void);
+void SafariHandlecmd56(void);
+
+// const data
+typedef void (*BattleBufferCmd) (void);
+const BattleBufferCmd gSafariBufferCommands[] =
+{
+ SafariHandleGetAttributes,
+ SafariHandlecmd1,
+ SafariHandleSetAttributes,
+ SafariHandlecmd3,
+ SafariHandleLoadPokeSprite,
+ SafariHandleSendOutPoke,
+ SafariHandleReturnPokeToBall,
+ SafariHandleTrainerThrow,
+ SafariHandleTrainerSlide,
+ SafariHandleTrainerSlideBack,
+ SafariHandlecmd10,
+ SafariHandlecmd11,
+ SafariHandlecmd12,
+ SafariHandleBallThrow,
+ SafariHandlePuase,
+ SafariHandleMoveAnimation,
+ SafariHandlePrintString,
+ SafariHandlePrintStringPlayerOnly,
+ SafariHandlecmd18,
+ SafariHandlecmd19,
+ SafariHandlecmd20,
+ SafariHandleOpenBag,
+ SafariHandlecmd22,
+ SafariHandlecmd23,
+ SafariHandleHealthBarUpdate,
+ SafariHandleExpBarUpdate,
+ SafariHandleStatusIconUpdate,
+ SafariHandleStatusAnimation,
+ SafariHandleStatusXor,
+ SafariHandlecmd29,
+ SafariHandleDMATransfer,
+ SafariHandlecmd31,
+ SafariHandlecmd32,
+ SafariHandlecmd33,
+ SafariHandlecmd34,
+ SafariHandlecmd35,
+ SafariHandlecmd36,
+ SafariHandlecmd37,
+ SafariHandlecmd38,
+ SafariHandlecmd39,
+ SafariHandlecmd40,
+ SafariHandleHitAnimation,
+ SafariHandlecmd42,
+ SafariHandleEffectivenessSound,
+ SafariHandlecmd44,
+ SafariHandleFaintingCry,
+ SafariHandleIntroSlide,
+ SafariHandleTrainerBallThrow,
+ SafariHandlecmd48,
+ SafariHandlecmd49,
+ SafariHandlecmd50,
+ SafariHandleSpriteInvisibility,
+ SafariHandleBattleAnimation,
+ SafariHandleLinkStandbyMsg,
+ SafariHandleResetActionMoveSelection,
+ SafariHandlecmd55,
+ SafariHandlecmd56,
+};
+// code
+
+void SafariBufferExecCompleted(void);
+void bx_wait_t6(void);
+void sub_812B65C(void);
+void SafariBufferRunCommand(void);
+void sub_812B758(void);
+
+void unref_sub_812B464(void)
+{
+}
+
+void SetBankFuncToSafariBufferRunCommand(void)
+{
+ gBattleBankFunc[gActiveBank] = SafariBufferRunCommand;
+}
+
+void SafariBufferRunCommand(void)
+{
+ if (gBattleExecBuffer & gBitTable[gActiveBank])
+ {
+ if (gBattleBufferA[gActiveBank][0] < 0x39)
+ gSafariBufferCommands[gBattleBufferA[gActiveBank][0]]();
+ else
+ SafariBufferExecCompleted();
+ }
+}
+
+void bx_battle_menu_t6_2(void)
+{
+ if (gMain.newKeys & A_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ DestroyMenuCursor();
+
+ // Useless switch statement.
+ switch (gActionSelectionCursor[gActiveBank])
+ {
+ case 0:
+ Emitcmd33(1, 5, 0);
+ break;
+ case 1:
+ Emitcmd33(1, 6, 0);
+ break;
+ case 2:
+ Emitcmd33(1, 7, 0);
+ break;
+ case 3:
+ Emitcmd33(1, 8, 0);
+ break;
+ }
+ SafariBufferExecCompleted();
+ }
+ else if (gMain.newKeys & DPAD_LEFT)
+ {
+ if (gActionSelectionCursor[gActiveBank] & 1)
+ {
+ PlaySE(SE_SELECT);
+ nullsub_8(gActionSelectionCursor[gActiveBank]);
+ gActionSelectionCursor[gActiveBank] ^= 1;
+ sub_802E3E4(gActionSelectionCursor[gActiveBank], 0);
+ }
+ }
+ else if (gMain.newKeys & DPAD_RIGHT)
+ {
+ if (!(gActionSelectionCursor[gActiveBank] & 1))
+ {
+ PlaySE(SE_SELECT);
+ nullsub_8(gActionSelectionCursor[gActiveBank]);
+ gActionSelectionCursor[gActiveBank] ^= 1;
+ sub_802E3E4(gActionSelectionCursor[gActiveBank], 0);
+ }
+ }
+ else if (gMain.newKeys & DPAD_UP)
+ {
+ if (gActionSelectionCursor[gActiveBank] & 2)
+ {
+ PlaySE(SE_SELECT);
+ nullsub_8(gActionSelectionCursor[gActiveBank]);
+ gActionSelectionCursor[gActiveBank] ^= 2;
+ sub_802E3E4(gActionSelectionCursor[gActiveBank], 0);
+ }
+ }
+ else if (gMain.newKeys & DPAD_DOWN)
+ {
+ if (!(gActionSelectionCursor[gActiveBank] & 2))
+ {
+ PlaySE(SE_SELECT);
+ nullsub_8(gActionSelectionCursor[gActiveBank]);
+ gActionSelectionCursor[gActiveBank] ^= 2;
+ sub_802E3E4(gActionSelectionCursor[gActiveBank], 0);
+ }
+ }
+}
+
+void sub_812B65C(void)
+{
+ if (gSprites[gObjectBankIDs[gActiveBank]].callback == SpriteCallbackDummy)
+ SafariBufferExecCompleted();
+}
+
+void sub_812B694(void)
+{
+ if (gUnknown_03004210.state == 0)
+ SafariBufferExecCompleted();
+}
+
+void sub_812B6AC(void)
+{
+ if (!gPaletteFade.active)
+ {
+ gMain.inBattle = FALSE;
+ gMain.callback1 = gPreBattleCallback1;
+ SetMainCallback2(gMain.savedCallback);
+ }
+}
+
+void bx_wait_t6(void)
+{
+ if (!gDoingBattleAnim || !ewram17810[gActiveBank].unk0_6)
+ SafariBufferExecCompleted();
+}
+
+void sub_812B724(void)
+{
+ if (!gPaletteFade.active)
+ {
+ gBattleBankFunc[gActiveBank] = sub_812B758;
+ sub_810BADC();
+ }
+}
+
+void sub_812B758(void)
+{
+ if (gMain.callback2 == sub_800F808 && !gPaletteFade.active)
+ {
+ Emitcmd35(1, gScriptItemId);
+ SafariBufferExecCompleted();
+ }
+}
+
+void sub_812B794(void)
+{
+ if (!ewram17810[gActiveBank].unk0_5)
+ SafariBufferExecCompleted();
+}
+
+void SafariBufferExecCompleted(void)
+{
+ gBattleBankFunc[gActiveBank] = SafariBufferRunCommand;
+ if (gBattleTypeFlags & BATTLE_TYPE_LINK)
+ {
+ u8 playerId = GetMultiplayerId();
+
+ PrepareBufferDataTransferLink(2, 4, &playerId);
+ gBattleBufferA[gActiveBank][0] = 0x38;
+ }
+ else
+ {
+ gBattleExecBuffer &= ~gBitTable[gActiveBank];
+ }
+}
+
+void unref_sub_812B838(void)
+{
+ if (!ewram17810[gActiveBank].unk0_4)
+ SafariBufferExecCompleted();
+}
+
+void SafariHandleGetAttributes(void)
+{
+ SafariBufferExecCompleted();
+}
+
+void SafariHandlecmd1(void)
+{
+ SafariBufferExecCompleted();
+}
+
+void SafariHandleSetAttributes(void)
+{
+ SafariBufferExecCompleted();
+}
+
+void SafariHandlecmd3(void)
+{
+ SafariBufferExecCompleted();
+}
+
+void SafariHandleLoadPokeSprite(void)
+{
+ SafariBufferExecCompleted();
+}
+
+void SafariHandleSendOutPoke(void)
+{
+ SafariBufferExecCompleted();
+}
+
+void SafariHandleReturnPokeToBall(void)
+{
+ SafariBufferExecCompleted();
+}
+
+void SafariHandleTrainerThrow(void)
+{
+ LoadPlayerTrainerBankSprite(gSaveBlock2.playerGender, gActiveBank);
+ GetMonSpriteTemplate_803C5A0(gSaveBlock2.playerGender, GetBankIdentity(gActiveBank));
+ gObjectBankIDs[gActiveBank] = CreateSprite(
+ &gUnknown_02024E8C,
+ 80,
+ (8 - gTrainerBackPicCoords[gSaveBlock2.playerGender].coords) * 4 + 80,
+ 30);
+ gSprites[gObjectBankIDs[gActiveBank]].oam.paletteNum = gActiveBank;
+ gSprites[gObjectBankIDs[gActiveBank]].pos2.x = 240;
+ gSprites[gObjectBankIDs[gActiveBank]].data0 = -2;
+ gSprites[gObjectBankIDs[gActiveBank]].callback = sub_80313A0;
+ gBattleBankFunc[gActiveBank] = sub_812B65C;
+}
+
+void SafariHandleTrainerSlide(void)
+{
+ SafariBufferExecCompleted();
+}
+
+void SafariHandleTrainerSlideBack(void)
+{
+ SafariBufferExecCompleted();
+}
+
+void SafariHandlecmd10(void)
+{
+ SafariBufferExecCompleted();
+}
+
+void SafariHandlecmd11(void)
+{
+ SafariBufferExecCompleted();
+}
+
+void SafariHandlecmd12(void)
+{
+ ewram17840.unk8 = 4;
+ gDoingBattleAnim = 1;
+ move_anim_start_t4(gActiveBank, gActiveBank, GetBankByPlayerAI(1), 4);
+ gBattleBankFunc[gActiveBank] = bx_wait_t6;
+}
+
+void SafariHandleBallThrow(void)
+{
+ u8 var = gBattleBufferA[gActiveBank][1];
+
+ ewram17840.unk8 = var;
+ gDoingBattleAnim = 1;
+ move_anim_start_t4(gActiveBank, gActiveBank, GetBankByPlayerAI(1), 4);
+ gBattleBankFunc[gActiveBank] = bx_wait_t6;
+}
+
+// TODO: spell Pause correctly
+void SafariHandlePuase(void)
+{
+ SafariBufferExecCompleted();
+}
+
+void SafariHandleMoveAnimation(void)
+{
+ SafariBufferExecCompleted();
+}
+
+void SafariHandlePrintString(void)
+{
+ gUnknown_030042A4 = 0;
+ gUnknown_030042A0 = 0;
+ BufferStringBattle(*(u16 *)&gBattleBufferA[gActiveBank][2]);
+ sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15);
+ gBattleBankFunc[gActiveBank] = sub_812B694;
+}
+
+void SafariHandlePrintStringPlayerOnly(void)
+{
+ if (GetBankSide(gActiveBank) == 0)
+ SafariHandlePrintString();
+ else
+ SafariBufferExecCompleted();
+}
+
+void SafariHandlecmd18(void)
+{
+ int i;
+
+ gUnknown_030042A4 = 0;
+ gUnknown_030042A0 = 160;
+ gUnknown_03004210.paletteNum = 0;
+ FillWindowRect_DefaultPalette(&gUnknown_03004210, 10, 2, 15, 27, 18);
+ FillWindowRect_DefaultPalette(&gUnknown_03004210, 10, 2, 35, 16, 36);
+ gBattleBankFunc[gActiveBank] = bx_battle_menu_t6_2;
+
+ InitWindow(&gUnknown_03004210, gUnknown_08400D15, 400, 18, 35);
+ sub_8002F44(&gUnknown_03004210);
+ sub_814A5C0(0, 0xFFFF, 12, 11679, 0);
+
+ for (i = 0; i < 4; i++)
+ nullsub_8(i);
+
+ sub_802E3E4(gActionSelectionCursor[gActiveBank], 0);
+ StrCpyDecodeToDisplayedStringBattle((u8 *) gUnknown_08400CBB);
+
+ InitWindow(&gUnknown_03004210, gDisplayedStringBattle, SUB_812BB10_TILE_DATA_OFFSET, 2, 35);
+ sub_8002F44(&gUnknown_03004210);
+}
+
+void SafariHandlecmd19(void)
+{
+ SafariBufferExecCompleted();
+}
+
+void SafariHandlecmd20(void)
+{
+ SafariBufferExecCompleted();
+}
+
+void SafariHandleOpenBag(void)
+{
+ BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
+ gBattleBankFunc[gActiveBank] = sub_812B724;
+ gBankInMenu = gActiveBank;
+}
+
+void SafariHandlecmd22(void)
+{
+ SafariBufferExecCompleted();
+}
+
+void SafariHandlecmd23(void)
+{
+ SafariBufferExecCompleted();
+}
+
+void SafariHandleHealthBarUpdate(void)
+{
+ SafariBufferExecCompleted();
+}
+
+void SafariHandleExpBarUpdate(void)
+{
+ SafariBufferExecCompleted();
+}
+
+void SafariHandleStatusIconUpdate(void)
+{
+ sub_8045A5C(gHealthboxIDs[gActiveBank], &gPlayerParty[gBattlePartyID[gActiveBank]], 11);
+ SafariBufferExecCompleted();
+}
+
+void SafariHandleStatusAnimation(void)
+{
+ SafariBufferExecCompleted();
+}
+
+void SafariHandleStatusXor(void)
+{
+ SafariBufferExecCompleted();
+}
+
+void SafariHandlecmd29(void)
+{
+ SafariBufferExecCompleted();
+}
+
+void SafariHandleDMATransfer(void)
+{
+ SafariBufferExecCompleted();
+}
+
+void SafariHandlecmd31(void)
+{
+ SafariBufferExecCompleted();
+}
+
+void SafariHandlecmd32(void)
+{
+ SafariBufferExecCompleted();
+}
+
+void SafariHandlecmd33(void)
+{
+ SafariBufferExecCompleted();
+}
+
+void SafariHandlecmd34(void)
+{
+ SafariBufferExecCompleted();
+}
+
+void SafariHandlecmd35(void)
+{
+ SafariBufferExecCompleted();
+}
+
+void SafariHandlecmd36(void)
+{
+ SafariBufferExecCompleted();
+}
+
+void SafariHandlecmd37(void)
+{
+ SafariBufferExecCompleted();
+}
+
+void SafariHandlecmd38(void)
+{
+ SafariBufferExecCompleted();
+}
+
+void SafariHandlecmd39(void)
+{
+ SafariBufferExecCompleted();
+}
+
+void SafariHandlecmd40(void)
+{
+ SafariBufferExecCompleted();
+}
+
+void SafariHandleHitAnimation(void)
+{
+ SafariBufferExecCompleted();
+}
+
+void SafariHandlecmd42(void)
+{
+ SafariBufferExecCompleted();
+}
+
+void SafariHandleEffectivenessSound(void)
+{
+ s8 pan;
+
+ if (GetBankSide(gActiveBank) == 0)
+ pan = -64;
+ else
+ pan = 63;
+ PlaySE12WithPanning(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8), pan);
+ SafariBufferExecCompleted();
+}
+
+void SafariHandlecmd44(void)
+{
+ PlayFanfare(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
+ SafariBufferExecCompleted();
+}
+
+void SafariHandleFaintingCry(void)
+{
+ u16 species = GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES);
+
+ PlayCry1(species, 25);
+ SafariBufferExecCompleted();
+}
+
+void SafariHandleIntroSlide(void)
+{
+ sub_80E43C0(gBattleBufferA[gActiveBank][1]);
+ gUnknown_02024DE8 |= 1;
+ SafariBufferExecCompleted();
+}
+
+void SafariHandleTrainerBallThrow(void)
+{
+ sub_8045A5C(gHealthboxIDs[gActiveBank], &gPlayerParty[gBattlePartyID[gActiveBank]], 10);
+ sub_804777C(gActiveBank);
+ sub_8043DFC(gHealthboxIDs[gActiveBank]);
+ SafariBufferExecCompleted();
+}
+
+void SafariHandlecmd48(void)
+{
+ SafariBufferExecCompleted();
+}
+
+void SafariHandlecmd49(void)
+{
+ SafariBufferExecCompleted();
+}
+
+void SafariHandlecmd50(void)
+{
+ SafariBufferExecCompleted();
+}
+
+void SafariHandleSpriteInvisibility(void)
+{
+ SafariBufferExecCompleted();
+}
+
+void SafariHandleBattleAnimation(void)
+{
+ u8 r3 = gBattleBufferA[gActiveBank][1];
+ u16 r4 = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8);
+
+ if (move_anim_start_t3(gActiveBank, gActiveBank, gActiveBank, r3, r4) != 0)
+ SafariBufferExecCompleted();
+ else
+ gBattleBankFunc[gActiveBank] = sub_812B794;
+}
+
+void SafariHandleLinkStandbyMsg(void)
+{
+ SafariBufferExecCompleted();
+}
+
+void SafariHandleResetActionMoveSelection(void)
+{
+ SafariBufferExecCompleted();
+}
+
+void SafariHandlecmd55(void)
+{
+ gBattleOutcome = gBattleBufferA[gActiveBank][1];
+ FadeOutMapMusic(5);
+ BeginFastPaletteFade(3);
+ SafariBufferExecCompleted();
+ if ((gBattleTypeFlags & BATTLE_TYPE_LINK) && !(gBattleTypeFlags & BATTLE_TYPE_WILD))
+ gBattleBankFunc[gActiveBank] = sub_812B6AC;
+}
+
+void SafariHandlecmd56(void)
+{
+}
diff --git a/src/battle_anim_8137220.c b/src/battle_controller_wally.c
index ebb3d8ae8..bf6ef0892 100644
--- a/src/battle_anim_8137220.c
+++ b/src/battle_controller_wally.c
@@ -29,7 +29,6 @@ struct UnknownStruct3
extern u8 gActiveBank;
extern void (*gBattleBankFunc[])(void);
extern u32 gBattleExecBuffer;
-extern void (*gWallyBufferCommands[])(void);
extern u8 gBattleBufferA[][0x200];
extern u8 gObjectBankIDs[];
extern MainCallback gPreBattleCallback1;
@@ -61,8 +60,8 @@ extern const u8 gUnknown_08400CCC[];
extern const u8 gUnknown_08400CF3[];
// TODO: include rom3.h when my other PR gets merged
-extern void dp01_build_cmdbuf_x21_a_bb(u8, u8, u16);
-extern void dp01_build_cmdbuf_x23_aa_0(u8, u16);
+extern void Emitcmd33(u8, u8, u16);
+extern void Emitcmd35(u8, u16);
extern void nullsub_14(void);
extern void PrepareBagForWallyTutorial(void);
@@ -72,8 +71,8 @@ extern void sub_804777C();
extern void sub_8043DFC();
extern bool8 IsDoubleBattle(void);
extern void c3_0802FDF4(u8);
-extern void sub_802ECF0(void);
-extern void sub_8031AF4();
+extern void PlayerHandlecmd1(void);
+extern void LoadPlayerTrainerBankSprite();
extern u8 GetBankIdentity(u8);
extern void sub_80313A0(struct Sprite *);
extern u8 GetBankByPlayerAI(u8);
@@ -98,6 +97,8 @@ extern u8 sub_8079E90();
extern void sub_80312F0(struct Sprite *);
extern bool8 move_anim_start_t3();
+// this file's functions
+
void WallyBufferRunCommand(void);
void sub_81374FC(void);
void sub_81376B8(void);
@@ -107,6 +108,130 @@ void sub_8138294(u8);
void sub_81390D0(void);
void sub_8139A2C(u8);
+void WallyHandleGetAttributes(void);
+void WallyHandlecmd1(void);
+void WallyHandleSetAttributes(void);
+void WallyHandlecmd3(void);
+void WallyHandleLoadPokeSprite(void);
+void WallyHandleSendOutPoke(void);
+void WallyHandleReturnPokeToBall(void);
+void WallyHandleTrainerThrow(void);
+void WallyHandleTrainerSlide(void);
+void WallyHandleTrainerSlideBack(void);
+void WallyHandlecmd10(void);
+void WallyHandlecmd11(void);
+void WallyHandlecmd12(void);
+void WallyHandleBallThrow(void);
+void WallyHandlePuase(void);
+void WallyHandleMoveAnimation(void);
+void WallyHandlePrintString(void);
+void WallyHandlePrintStringPlayerOnly(void);
+void WallyHandlecmd18(void);
+void WallyHandlecmd19(void);
+void WallyHandlecmd20(void);
+void WallyHandleOpenBag(void);
+void WallyHandlecmd22(void);
+void WallyHandlecmd23(void);
+void WallyHandleHealthBarUpdate(void);
+void WallyHandleExpBarUpdate(void);
+void WallyHandleStatusIconUpdate(void);
+void WallyHandleStatusAnimation(void);
+void WallyHandleStatusXor(void);
+void WallyHandlecmd29(void);
+void WallyHandleDMATransfer(void);
+void WallyHandlecmd31(void);
+void WallyHandlecmd32(void);
+void WallyHandlecmd33(void);
+void WallyHandlecmd34(void);
+void WallyHandlecmd35(void);
+void WallyHandlecmd36(void);
+void WallyHandlecmd37(void);
+void WallyHandlecmd38(void);
+void WallyHandlecmd39(void);
+void WallyHandlecmd40(void);
+void WallyHandleHitAnimation(void);
+void WallyHandlecmd42(void);
+void WallyHandleEffectivenessSound(void);
+void WallyHandlecmd44(void);
+void WallyHandleFaintingCry(void);
+void WallyHandleIntroSlide(void);
+void WallyHandleTrainerBallThrow(void);
+void WallyHandlecmd48(void);
+void WallyHandlecmd49(void);
+void WallyHandlecmd50(void);
+void WallyHandleSpriteInvisibility(void);
+void WallyHandleBattleAnimation(void);
+void WallyHandleLinkStandbyMsg(void);
+void WallyHandleResetActionMoveSelection(void);
+void WallyHandlecmd55(void);
+void WallyHandlecmd56(void);
+
+// const data
+
+typedef void (*BattleBufferCmd) (void);
+static const BattleBufferCmd gWallyBufferCommands[] =
+{
+ WallyHandleGetAttributes,
+ WallyHandlecmd1,
+ WallyHandleSetAttributes,
+ WallyHandlecmd3,
+ WallyHandleLoadPokeSprite,
+ WallyHandleSendOutPoke,
+ WallyHandleReturnPokeToBall,
+ WallyHandleTrainerThrow,
+ WallyHandleTrainerSlide,
+ WallyHandleTrainerSlideBack,
+ WallyHandlecmd10,
+ WallyHandlecmd11,
+ WallyHandlecmd12,
+ WallyHandleBallThrow,
+ WallyHandlePuase,
+ WallyHandleMoveAnimation,
+ WallyHandlePrintString,
+ WallyHandlePrintStringPlayerOnly,
+ WallyHandlecmd18,
+ WallyHandlecmd19,
+ WallyHandlecmd20,
+ WallyHandleOpenBag,
+ WallyHandlecmd22,
+ WallyHandlecmd23,
+ WallyHandleHealthBarUpdate,
+ WallyHandleExpBarUpdate,
+ WallyHandleStatusIconUpdate,
+ WallyHandleStatusAnimation,
+ WallyHandleStatusXor,
+ WallyHandlecmd29,
+ WallyHandleDMATransfer,
+ WallyHandlecmd31,
+ WallyHandlecmd32,
+ WallyHandlecmd33,
+ WallyHandlecmd34,
+ WallyHandlecmd35,
+ WallyHandlecmd36,
+ WallyHandlecmd37,
+ WallyHandlecmd38,
+ WallyHandlecmd39,
+ WallyHandlecmd40,
+ WallyHandleHitAnimation,
+ WallyHandlecmd42,
+ WallyHandleEffectivenessSound,
+ WallyHandlecmd44,
+ WallyHandleFaintingCry,
+ WallyHandleIntroSlide,
+ WallyHandleTrainerBallThrow,
+ WallyHandlecmd48,
+ WallyHandlecmd49,
+ WallyHandlecmd50,
+ WallyHandleSpriteInvisibility,
+ WallyHandleBattleAnimation,
+ WallyHandleLinkStandbyMsg,
+ WallyHandleResetActionMoveSelection,
+ WallyHandlecmd55,
+ WallyHandlecmd56,
+};
+
+// code
+
void unref_sub_8137220(void)
{
}
@@ -146,7 +271,7 @@ void sub_81372BC(void)
if (r4 == 0)
{
PlaySE(SE_SELECT);
- dp01_build_cmdbuf_x21_a_bb(1, 0, 0);
+ Emitcmd33(1, 0, 0);
WallyBufferExecCompleted();
ewram[0x160A8]++;
ewram[0x160A9] = r4;
@@ -158,7 +283,7 @@ void sub_81372BC(void)
if (r4 == 0)
{
PlaySE(SE_SELECT);
- dp01_build_cmdbuf_x21_a_bb(1, 0, 0);
+ Emitcmd33(1, 0, 0);
WallyBufferExecCompleted();
ewram[0x160A8]++;
ewram[0x160A9] = r4;
@@ -169,7 +294,7 @@ void sub_81372BC(void)
r4 = --ewram[0x160AA];
if (r4 == 0)
{
- dp01_build_cmdbuf_x21_a_bb(1, 9, 0);
+ Emitcmd33(1, 9, 0);
WallyBufferExecCompleted();
ewram[0x160A8]++;
ewram[0x160A9] = r4;
@@ -191,7 +316,7 @@ void sub_81372BC(void)
{
PlaySE(SE_SELECT);
DestroyMenuCursor();
- dp01_build_cmdbuf_x21_a_bb(1, 1, 0);
+ Emitcmd33(1, 1, 0);
WallyBufferExecCompleted();
}
break;
@@ -241,7 +366,7 @@ void sub_81374FC(void)
if (gMain.callback2 == sub_800F808
&& !gPaletteFade.active)
{
- dp01_build_cmdbuf_x23_aa_0(1, gScriptItemId);
+ Emitcmd35(1, gScriptItemId);
WallyBufferExecCompleted();
}
}
@@ -359,7 +484,7 @@ void WallyBufferExecCompleted(void)
{
u8 multiplayerId = GetMultiplayerId();
- dp01_prepare_buffer_wireless_probably(2, 4, &multiplayerId);
+ PrepareBufferDataTransferLink(2, 4, &multiplayerId);
gBattleBufferA[gActiveBank][0] = 0x38;
}
else
@@ -374,7 +499,7 @@ void unref_sub_81379E4(void)
WallyBufferExecCompleted();
}
-void dp01t_00_5_getattr(void)
+void WallyHandleGetAttributes(void)
{
u8 arr[0x100];
u32 r6 = 0;
@@ -395,7 +520,7 @@ void dp01t_00_5_getattr(void)
r4 >>= 1;
}
}
- dp01_build_cmdbuf_x1D_1D_numargs_varargs(1, r6, arr);
+ Emitcmd29(1, r6, arr);
WallyBufferExecCompleted();
}
@@ -704,12 +829,12 @@ u32 sub_8137A84(u8 a, u8 *buffer)
return size;
}
-void sub_8138230(void)
+void WallyHandlecmd1(void)
{
- sub_802ECF0();
+ PlayerHandlecmd1();
}
-void sub_813823C(void)
+void WallyHandleSetAttributes(void)
{
u8 r4;
u8 i;
@@ -948,22 +1073,22 @@ void sub_8138294(u8 a)
sub_80324F8(&gPlayerParty[gBattlePartyID[gActiveBank]], gActiveBank);
}
-void sub_8138C90(void)
+void WallyHandlecmd3(void)
{
WallyBufferExecCompleted();
}
-void sub_8138C9C(void)
+void WallyHandleLoadPokeSprite(void)
{
WallyBufferExecCompleted();
}
-void sub_8138CA8(void)
+void WallyHandleSendOutPoke(void)
{
WallyBufferExecCompleted();
}
-void sub_8138CB4(void)
+void WallyHandleReturnPokeToBall(void)
{
if (gBattleBufferA[gActiveBank][1] == 0)
{
@@ -979,9 +1104,9 @@ void sub_8138CB4(void)
}
}
-void sub_8138D38(void)
+void WallyHandleTrainerThrow(void)
{
- sub_8031AF4(2, gActiveBank);
+ LoadPlayerTrainerBankSprite(2, gActiveBank);
GetMonSpriteTemplate_803C5A0(2, GetBankIdentity(gActiveBank));
gObjectBankIDs[gActiveBank] = CreateSprite(
&gUnknown_02024E8C,
@@ -994,9 +1119,9 @@ void sub_8138D38(void)
gBattleBankFunc[gActiveBank] = sub_813741C;
}
-void sub_8138E04(void)
+void WallyHandleTrainerSlide(void)
{
- sub_8031AF4(2, gActiveBank);
+ LoadPlayerTrainerBankSprite(2, gActiveBank);
GetMonSpriteTemplate_803C5A0(2, GetBankIdentity(gActiveBank));
gObjectBankIDs[gActiveBank] = CreateSprite(
&gUnknown_02024E8C,
@@ -1009,22 +1134,22 @@ void sub_8138E04(void)
gBattleBankFunc[gActiveBank] = sub_8137908;
}
-void sub_8138ED0(void)
+void WallyHandleTrainerSlideBack(void)
{
WallyBufferExecCompleted();
}
-void sub_8138EDC(void)
+void WallyHandlecmd10(void)
{
WallyBufferExecCompleted();
}
-void sub_8138EE8(void)
+void WallyHandlecmd11(void)
{
WallyBufferExecCompleted();
}
-void sub_8138EF4(void)
+void WallyHandlecmd12(void)
{
ewram17840.unk8 = 4;
gDoingBattleAnim = TRUE;
@@ -1032,7 +1157,7 @@ void sub_8138EF4(void)
gBattleBankFunc[gActiveBank] = bx_wait_t5;
}
-void sub_8138F44(void)
+void WallyHandleBallThrow(void)
{
u8 val = gBattleBufferA[gActiveBank][1];
@@ -1042,12 +1167,12 @@ void sub_8138F44(void)
gBattleBankFunc[gActiveBank] = bx_wait_t5;
}
-void sub_8138FA0(void)
+void WallyHandlePuase(void)
{
WallyBufferExecCompleted();
}
-void sub_8138FAC(void)
+void WallyHandleMoveAnimation(void)
{
u16 r0 = gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8);
@@ -1081,7 +1206,7 @@ void sub_81390D0(void)
switch (ewram17810[gActiveBank].unk4)
{
case 0:
- if (ewram17800[gActiveBank].unk0_2 == 1)
+ if (ewram17800[gActiveBank].substituteSprite == 1)
move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 5);
ewram17810[gActiveBank].unk4 = 1;
break;
@@ -1098,7 +1223,7 @@ void sub_81390D0(void)
if (!gAnimScriptActive)
{
sub_80326EC(1);
- if (ewram17800[gActiveBank].unk0_2 == 1)
+ if (ewram17800[gActiveBank].substituteSprite == 1)
move_anim_start_t4(gActiveBank, gActiveBank, gActiveBank, 6);
ewram17810[gActiveBank].unk4 = 3;
}
@@ -1115,7 +1240,7 @@ void sub_81390D0(void)
}
}
-void sub_8139208(void)
+void WallyHandlePrintString(void)
{
u16 *ptr;
@@ -1129,15 +1254,15 @@ void sub_8139208(void)
gBattleBankFunc[gActiveBank] = sub_8137454;
}
-void dp01t_11_5_message_for_player_only(void)
+void WallyHandlePrintStringPlayerOnly(void)
{
if (GetBankSide(gActiveBank) == 0)
- sub_8139208();
+ WallyHandlePrintString();
else
WallyBufferExecCompleted();
}
-void sub_8139298(void)
+void WallyHandlecmd18(void)
{
s32 i;
@@ -1162,12 +1287,12 @@ void sub_8139298(void)
sub_8002F44(&gUnknown_03004210);
}
-void sub_8139378(void)
+void WallyHandlecmd19(void)
{
WallyBufferExecCompleted();
}
-void sub_8139384(void)
+void WallyHandlecmd20(void)
{
switch (ewram[0x160A9])
{
@@ -1182,31 +1307,31 @@ void sub_8139384(void)
{
DestroyMenuCursor();
PlaySE(SE_SELECT);
- dp01_build_cmdbuf_x21_a_bb(1, 10, 256);
+ Emitcmd33(1, 10, 256);
WallyBufferExecCompleted();
}
break;
}
}
-void sub_81393EC(void)
+void WallyHandleOpenBag(void)
{
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0, 16, 0);
gBattleBankFunc[gActiveBank] = sub_81374C4;
gBankInMenu = gActiveBank;
}
-void sub_813942C(void)
+void WallyHandlecmd22(void)
{
WallyBufferExecCompleted();
}
-void sub_8139438(void)
+void WallyHandlecmd23(void)
{
WallyBufferExecCompleted();
}
-void sub_8139444(void)
+void WallyHandleHealthBarUpdate(void)
{
s16 r7;
@@ -1229,87 +1354,87 @@ void sub_8139444(void)
gBattleBankFunc[gActiveBank] = sub_81377B0;
}
-void sub_8139544(void)
+void WallyHandleExpBarUpdate(void)
{
WallyBufferExecCompleted();
}
-void sub_8139550(void)
+void WallyHandleStatusIconUpdate(void)
{
WallyBufferExecCompleted();
}
-void sub_813955C(void)
+void WallyHandleStatusAnimation(void)
{
WallyBufferExecCompleted();
}
-void sub_8139568(void)
+void WallyHandleStatusXor(void)
{
WallyBufferExecCompleted();
}
-void sub_8139574(void)
+void WallyHandlecmd29(void)
{
WallyBufferExecCompleted();
}
-void sub_8139580(void)
+void WallyHandleDMATransfer(void)
{
WallyBufferExecCompleted();
}
-void sub_813958C(void)
+void WallyHandlecmd31(void)
{
WallyBufferExecCompleted();
}
-void sub_8139598(void)
+void WallyHandlecmd32(void)
{
WallyBufferExecCompleted();
}
-void sub_81395A4(void)
+void WallyHandlecmd33(void)
{
WallyBufferExecCompleted();
}
-void sub_81395B0(void)
+void WallyHandlecmd34(void)
{
WallyBufferExecCompleted();
}
-void sub_81395BC(void)
+void WallyHandlecmd35(void)
{
WallyBufferExecCompleted();
}
-void sub_81395C8(void)
+void WallyHandlecmd36(void)
{
WallyBufferExecCompleted();
}
-void sub_81395D4(void)
+void WallyHandlecmd37(void)
{
WallyBufferExecCompleted();
}
-void sub_81395E0(void)
+void WallyHandlecmd38(void)
{
WallyBufferExecCompleted();
}
-void sub_81395EC(void)
+void WallyHandlecmd39(void)
{
WallyBufferExecCompleted();
}
-void sub_81395F8(void)
+void WallyHandlecmd40(void)
{
WallyBufferExecCompleted();
}
-void sub_8139604(void)
+void WallyHandleHitAnimation(void)
{
if (gSprites[gObjectBankIDs[gActiveBank]].invisible == TRUE)
{
@@ -1324,37 +1449,37 @@ void sub_8139604(void)
}
}
-void sub_8139674(void)
+void WallyHandlecmd42(void)
{
WallyBufferExecCompleted();
}
-void sub_8139680(void)
+void WallyHandleEffectivenessSound(void)
{
PlaySE(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
WallyBufferExecCompleted();
}
-void sub_81396B0(void)
+void WallyHandlecmd44(void)
{
PlayFanfare(gBattleBufferA[gActiveBank][1] | (gBattleBufferA[gActiveBank][2] << 8));
WallyBufferExecCompleted();
}
-void sub_81396E0(void)
+void WallyHandleFaintingCry(void)
{
PlayCry1(GetMonData(&gPlayerParty[gBattlePartyID[gActiveBank]], MON_DATA_SPECIES), 25);
WallyBufferExecCompleted();
}
-void dp01t_2E_5_battle_intro(void)
+void WallyHandleIntroSlide(void)
{
sub_80E43C0(gBattleBufferA[gActiveBank][1]);
gUnknown_02024DE8 |= 1;
WallyBufferExecCompleted();
}
-void sub_8139750(void)
+void WallyHandleTrainerBallThrow(void)
{
u8 paletteNum;
u8 taskId;
@@ -1382,7 +1507,7 @@ void sub_81398BC(u8 bank)
{
u16 species;
- ewram17800[bank].unk2 = 0;
+ ewram17800[bank].transformedSpecies = 0;
gBattlePartyID[bank] = gBattleBufferA[bank][1];
species = GetMonData(&gPlayerParty[gBattlePartyID[bank]], MON_DATA_SPECIES);
gUnknown_0300434C[bank] = CreateInvisibleSpriteWithCallback(sub_80312F0);
@@ -1421,7 +1546,7 @@ void sub_8139A2C(u8 taskId)
}
}
-void sub_8139AA0(void)
+void WallyHandlecmd48(void)
{
if (gBattleBufferA[gActiveBank][1] != 0 && GetBankSide(gActiveBank) == 0)
{
@@ -1435,22 +1560,22 @@ void sub_8139AA0(void)
}
}
-void sub_8139B20(void)
+void WallyHandlecmd49(void)
{
WallyBufferExecCompleted();
}
-void sub_8139B2C(void)
+void WallyHandlecmd50(void)
{
WallyBufferExecCompleted();
}
-void sub_8139B38(void)
+void WallyHandleSpriteInvisibility(void)
{
WallyBufferExecCompleted();
}
-void sub_8139B44(void)
+void WallyHandleBattleAnimation(void)
{
u8 val2 = gBattleBufferA[gActiveBank][1];
u16 val = gBattleBufferA[gActiveBank][2] | (gBattleBufferA[gActiveBank][3] << 8);
@@ -1461,17 +1586,17 @@ void sub_8139B44(void)
gBattleBankFunc[gActiveBank] = sub_8137940;
}
-void sub_8139BA0(void)
+void WallyHandleLinkStandbyMsg(void)
{
WallyBufferExecCompleted();
}
-void sub_8139BAC(void)
+void WallyHandleResetActionMoveSelection(void)
{
WallyBufferExecCompleted();
}
-void sub_8139BB8(void)
+void WallyHandlecmd55(void)
{
gBattleOutcome = gBattleBufferA[gActiveBank][1];
FadeOutMapMusic(5);
@@ -1481,6 +1606,6 @@ void sub_8139BB8(void)
gBattleBankFunc[gActiveBank] = sub_813746C;
}
-void nullsub_80(void)
+void WallyHandlecmd56(void)
{
}
diff --git a/src/battle_message.c b/src/battle_message.c
index 37ec14459..a3cc320ad 100644
--- a/src/battle_message.c
+++ b/src/battle_message.c
@@ -116,22 +116,7 @@ struct StatusFlagString
extern const struct StatusFlagString gUnknown_081FA6D4[7]; // status flag/text
extern const u8 gUnknown_084017A8[8]; // empty flags
-struct StringInfo
-{
- u16 currentMove;
- u16 lastMove;
- u16 lastItem;
- u8 lastAbility;
- u8 scrActive;
- u8 unk1605E;
- u8 hpScale;
- u8 StringBank;
- u8 moveType;
- u8 abilities[4];
- u8 textBuffs[3][0x10];
-};
-
-extern struct StringInfo* gSelectedOrderFromParty;
+extern struct StringInfoBattle* gSelectedOrderFromParty;
#define gStringInfo gSelectedOrderFromParty
void sub_8121D1C(u8* textBuff);
@@ -156,7 +141,7 @@ void BufferStringBattle(u16 stringID)
int i;
const u8* stringPtr = NULL;
- gStringInfo = (struct StringInfo*)(&gBattleBufferA[gActiveBank][4]);
+ gStringInfo = (struct StringInfoBattle*)(&gBattleBufferA[gActiveBank][4]);
gLastUsedItem = gStringInfo->lastItem;
gLastUsedAbility = gStringInfo->lastAbility;
BATTLE_STRUCT->scriptingActive = gStringInfo->scrActive;
diff --git a/src/battle_party_menu.c b/src/battle_party_menu.c
index 73b847713..49e0b8432 100644
--- a/src/battle_party_menu.c
+++ b/src/battle_party_menu.c
@@ -35,23 +35,16 @@ extern void PartyMenuDrawHPBars(void);
extern u8 sub_806B58C(u8);
extern u8 GetItemEffectType();
extern void sub_806E750(u8, const struct PartyPopupMenu *, const struct PartyMenuItem *, int);
-extern u16 sub_806BD80();
-extern u8 sub_806CA38();
extern void sub_806D5A4(void);
extern void sub_802E414(void);
extern void sub_80A6DCC(void);
extern void sub_806AF4C();
-extern u8 sub_80F9344(void);
-extern u8 sub_806B124(void);
-extern void sub_806C994();
-extern void sub_806BF74();
extern void sub_806AEDC(void);
extern TaskFunc PartyMenuGetPopupMenuFunc(u8, const struct PartyPopupMenu *, const struct PartyMenuItem *, u8);
extern void sub_806E7D0(u8, const struct PartyPopupMenu *);
extern u8 *sub_8040D08();
extern void sub_8040B8C(void);
extern void sub_806E6F0();
-extern void sub_806D538();
extern void nullsub_14();
extern void OpenPartyMenu();
extern u8 sub_803FBBC(void);
@@ -586,7 +579,7 @@ static void Task_809538C(void)
{
do
{
- if (sub_806B124() == 1)
+ if (sub_806B124() == TRUE)
{
sub_806C994(EWRAM_1B000.unk260, gUnknown_020384F0);
sub_806BF74(EWRAM_1B000.unk260, 0);
diff --git a/src/battle_records.c b/src/battle_records.c
index 61dc09792..d848a10b8 100644
--- a/src/battle_records.c
+++ b/src/battle_records.c
@@ -3,7 +3,7 @@
#include "game_stat.h"
#include "link.h"
#include "menu.h"
-#include "rom4.h"
+#include "overworld.h"
#include "string_util.h"
#include "strings2.h"
#include "trainer_card.h"
diff --git a/src/battle_setup.c b/src/battle_setup.c
index 04674e739..59e17e9eb 100644
--- a/src/battle_setup.c
+++ b/src/battle_setup.c
@@ -18,7 +18,7 @@
#include "opponent_constants.h"
#include "palette.h"
#include "rng.h"
-#include "rom4.h"
+#include "overworld.h"
#include "safari_zone.h"
#include "script.h"
#include "script_pokemon_80C4.h"
@@ -37,15 +37,15 @@ extern u16 gScriptResult;
extern void (*gFieldCallback)(void);
-EWRAM_DATA u16 gTrainerBattleMode = 0;
+EWRAM_DATA static u16 sTrainerBattleMode = 0;
EWRAM_DATA u16 gTrainerBattleOpponent = 0;
-EWRAM_DATA u16 gTrainerMapObjectLocalId = 0;
-EWRAM_DATA u8 *gTrainerIntroSpeech = NULL;
-EWRAM_DATA u8 *gTrainerDefeatSpeech = NULL;
-EWRAM_DATA u8 *gTrainerVictorySpeech = NULL;
-EWRAM_DATA u8 *gTrainerCannotBattleSpeech = NULL;
-EWRAM_DATA u8 *gTrainerBattleScriptReturnAddress = NULL;
-EWRAM_DATA u8 *gTrainerBattleEndScript = NULL;
+EWRAM_DATA static u16 sTrainerMapObjectLocalId = 0;
+EWRAM_DATA static u8 *sTrainerIntroSpeech = NULL;
+EWRAM_DATA static u8 *sTrainerDefeatSpeech = NULL;
+EWRAM_DATA static u8 *sTrainerVictorySpeech = NULL;
+EWRAM_DATA static u8 *sTrainerCannotBattleSpeech = NULL;
+EWRAM_DATA static u8 *sTrainerBattleScriptRetAddr = NULL;
+EWRAM_DATA static u8 *sTrainerBattleEndScript = NULL;
extern u16 gBattleTypeFlags;
extern u16 gScriptLastTalked;
@@ -62,80 +62,99 @@ extern u8 gUnknown_0819F8AE[];
extern u8 gUnknown_0819F80B[];
extern u8 gUnknown_081C6C02[];
-
+// The first transition is used if the enemy pokemon are lower level than our pokemon.
+// Otherwise, the second transition is used.
static const u8 gBattleTransitionTable_Wild[][2] =
{
- {8, 9},
- {5, 10},
- {0, 10},
- {7, 6},
+ {B_TRANSITION_SLICE, B_TRANSITION_WHITEFADE}, // Normal
+ {B_TRANSITION_CLOCKWISE_BLACKFADE, B_TRANSITION_GRID_SQUARES}, // Cave
+ {B_TRANSITION_BLUR, B_TRANSITION_GRID_SQUARES}, // Cave with flash used
+ {B_TRANSITION_WAVE, B_TRANSITION_RIPPLE}, // Water
};
static const u8 gBattleTransitionTable_Trainer[][2] =
{
- {4, 11},
- {2, 3},
- {0, 10},
- {1, 6},
+ {B_TRANSITION_POKEBALLS_TRAIL, B_TRANSITION_SHARDS}, // Normal
+ {B_TRANSITION_SHUFFLE, B_TRANSITION_BIG_POKEBALL}, // Cave
+ {B_TRANSITION_BLUR, B_TRANSITION_GRID_SQUARES}, // Cave with flash used
+ {B_TRANSITION_SWIRL, B_TRANSITION_RIPPLE}, // Water
+};
+
+enum
+{
+ TRAINER_PARAM_LOAD_VAL_8BIT,
+ TRAINER_PARAM_LOAD_VAL_16BIT,
+ TRAINER_PARAM_LOAD_VAL_32BIT,
+ TRAINER_PARAM_CLEAR_VAL_8BIT,
+ TRAINER_PARAM_CLEAR_VAL_16BIT,
+ TRAINER_PARAM_CLEAR_VAL_32BIT,
+ TRAINER_PARAM_LOAD_SCRIPT_RET_ADDR,
+};
+
+struct TrainerBattleParameter
+{
+ void *varPtr;
+ u8 ptrType;
};
-static const struct TrainerBattleSpec gTrainerBattleSpecs_0[] =
-{
- {&gTrainerBattleMode, 0},
- {&gTrainerBattleOpponent, 1},
- {&gTrainerMapObjectLocalId, 1},
- {&gTrainerIntroSpeech, 2},
- {&gTrainerDefeatSpeech, 2},
- {&gTrainerVictorySpeech, 5},
- {&gTrainerCannotBattleSpeech, 5},
- {&gTrainerBattleEndScript, 5},
- {&gTrainerBattleScriptReturnAddress, 6},
+
+static const struct TrainerBattleParameter gTrainerBattleSpecs_0[] =
+{
+ {&sTrainerBattleMode, TRAINER_PARAM_LOAD_VAL_8BIT},
+ {&gTrainerBattleOpponent, TRAINER_PARAM_LOAD_VAL_16BIT},
+ {&sTrainerMapObjectLocalId, TRAINER_PARAM_LOAD_VAL_16BIT},
+ {&sTrainerIntroSpeech, TRAINER_PARAM_LOAD_VAL_32BIT},
+ {&sTrainerDefeatSpeech, TRAINER_PARAM_LOAD_VAL_32BIT},
+ {&sTrainerVictorySpeech, TRAINER_PARAM_CLEAR_VAL_32BIT},
+ {&sTrainerCannotBattleSpeech, TRAINER_PARAM_CLEAR_VAL_32BIT},
+ {&sTrainerBattleEndScript, TRAINER_PARAM_CLEAR_VAL_32BIT},
+ {&sTrainerBattleScriptRetAddr, TRAINER_PARAM_LOAD_SCRIPT_RET_ADDR},
};
-static const struct TrainerBattleSpec gTrainerBattleSpecs_1[] =
-{
- {&gTrainerBattleMode, 0},
- {&gTrainerBattleOpponent, 1},
- {&gTrainerMapObjectLocalId, 1},
- {&gTrainerIntroSpeech, 2},
- {&gTrainerDefeatSpeech, 2},
- {&gTrainerVictorySpeech, 5},
- {&gTrainerCannotBattleSpeech, 5},
- {&gTrainerBattleEndScript, 2},
- {&gTrainerBattleScriptReturnAddress, 6},
+static const struct TrainerBattleParameter gTrainerBattleSpecs_1[] =
+{
+ {&sTrainerBattleMode, TRAINER_PARAM_LOAD_VAL_8BIT},
+ {&gTrainerBattleOpponent, TRAINER_PARAM_LOAD_VAL_16BIT},
+ {&sTrainerMapObjectLocalId, TRAINER_PARAM_LOAD_VAL_16BIT},
+ {&sTrainerIntroSpeech, TRAINER_PARAM_LOAD_VAL_32BIT},
+ {&sTrainerDefeatSpeech, TRAINER_PARAM_LOAD_VAL_32BIT},
+ {&sTrainerVictorySpeech, TRAINER_PARAM_CLEAR_VAL_32BIT},
+ {&sTrainerCannotBattleSpeech, TRAINER_PARAM_CLEAR_VAL_32BIT},
+ {&sTrainerBattleEndScript, TRAINER_PARAM_LOAD_VAL_32BIT},
+ {&sTrainerBattleScriptRetAddr, TRAINER_PARAM_LOAD_SCRIPT_RET_ADDR},
};
-static const struct TrainerBattleSpec gTrainerBattleSpecs_2[] =
-{
- {&gTrainerBattleMode, 0},
- {&gTrainerBattleOpponent, 1},
- {&gTrainerMapObjectLocalId, 1},
- {&gTrainerIntroSpeech, 2},
- {&gTrainerDefeatSpeech, 2},
- {&gTrainerVictorySpeech, 5},
- {&gTrainerCannotBattleSpeech, 2},
- {&gTrainerBattleEndScript, 5},
- {&gTrainerBattleScriptReturnAddress, 6},
+static const struct TrainerBattleParameter gTrainerBattleSpecs_2[] =
+{
+ {&sTrainerBattleMode, TRAINER_PARAM_LOAD_VAL_8BIT},
+ {&gTrainerBattleOpponent, TRAINER_PARAM_LOAD_VAL_16BIT},
+ {&sTrainerMapObjectLocalId, TRAINER_PARAM_LOAD_VAL_16BIT},
+ {&sTrainerIntroSpeech, TRAINER_PARAM_LOAD_VAL_32BIT},
+ {&sTrainerDefeatSpeech, TRAINER_PARAM_LOAD_VAL_32BIT},
+ {&sTrainerVictorySpeech, TRAINER_PARAM_CLEAR_VAL_32BIT},
+ {&sTrainerCannotBattleSpeech, TRAINER_PARAM_LOAD_VAL_32BIT},
+ {&sTrainerBattleEndScript, TRAINER_PARAM_CLEAR_VAL_32BIT},
+ {&sTrainerBattleScriptRetAddr, TRAINER_PARAM_LOAD_SCRIPT_RET_ADDR},
};
-static const struct TrainerBattleSpec gTrainerBattleSpecs_3[] =
-{
- {&gTrainerBattleMode, 0},
- {&gTrainerBattleOpponent, 1},
- {&gTrainerMapObjectLocalId, 1},
- {&gTrainerIntroSpeech, 5},
- {&gTrainerDefeatSpeech, 2},
- {&gTrainerVictorySpeech, 5},
- {&gTrainerCannotBattleSpeech, 5},
- {&gTrainerBattleEndScript, 5},
- {&gTrainerBattleScriptReturnAddress, 6},
+static const struct TrainerBattleParameter gTrainerBattleSpecs_3[] =
+{
+ {&sTrainerBattleMode, TRAINER_PARAM_LOAD_VAL_8BIT},
+ {&gTrainerBattleOpponent, TRAINER_PARAM_LOAD_VAL_16BIT},
+ {&sTrainerMapObjectLocalId, TRAINER_PARAM_LOAD_VAL_16BIT},
+ {&sTrainerIntroSpeech, TRAINER_PARAM_CLEAR_VAL_32BIT},
+ {&sTrainerDefeatSpeech, TRAINER_PARAM_LOAD_VAL_32BIT},
+ {&sTrainerVictorySpeech, TRAINER_PARAM_CLEAR_VAL_32BIT},
+ {&sTrainerCannotBattleSpeech, TRAINER_PARAM_CLEAR_VAL_32BIT},
+ {&sTrainerBattleEndScript, TRAINER_PARAM_CLEAR_VAL_32BIT},
+ {&sTrainerBattleScriptRetAddr, TRAINER_PARAM_LOAD_SCRIPT_RET_ADDR},
};
-static const struct TrainerBattleSpec gTrainerBattleSpecs_4[] =
-{
- {&gTrainerBattleMode, 0},
- {&gTrainerBattleOpponent, 1},
- {&gTrainerMapObjectLocalId, 1},
- {&gTrainerIntroSpeech, 2},
- {&gTrainerDefeatSpeech, 2},
- {&gTrainerVictorySpeech, 5},
- {&gTrainerCannotBattleSpeech, 2},
- {&gTrainerBattleEndScript, 2},
- {&gTrainerBattleScriptReturnAddress, 6},
+static const struct TrainerBattleParameter gTrainerBattleSpecs_4[] =
+{
+ {&sTrainerBattleMode, TRAINER_PARAM_LOAD_VAL_8BIT},
+ {&gTrainerBattleOpponent, TRAINER_PARAM_LOAD_VAL_16BIT},
+ {&sTrainerMapObjectLocalId, TRAINER_PARAM_LOAD_VAL_16BIT},
+ {&sTrainerIntroSpeech, TRAINER_PARAM_LOAD_VAL_32BIT},
+ {&sTrainerDefeatSpeech, TRAINER_PARAM_LOAD_VAL_32BIT},
+ {&sTrainerVictorySpeech, TRAINER_PARAM_CLEAR_VAL_32BIT},
+ {&sTrainerCannotBattleSpeech, TRAINER_PARAM_LOAD_VAL_32BIT},
+ {&sTrainerBattleEndScript, TRAINER_PARAM_LOAD_VAL_32BIT},
+ {&sTrainerBattleScriptRetAddr, TRAINER_PARAM_LOAD_SCRIPT_RET_ADDR},
};
const struct TrainerEyeTrainer gTrainerEyeTrainers[] =
@@ -424,21 +443,36 @@ const struct TrainerEyeTrainer gTrainerEyeTrainers[] =
static const u16 sBadgeFlags[] = {BADGE01_GET, BADGE02_GET, BADGE03_GET, BADGE04_GET, BADGE05_GET, BADGE06_GET, BADGE07_GET, BADGE08_GET};
-void task01_battle_start(u8 taskId)
+static void DoStandardWildBattle(void);
+static void DoSafariBattle(void);
+static void SetTrainerFlagsAfterTrainerEyeRematch(void);
+static void CB2_EndWildBattle(void);
+static void CB2_EndScriptedWildBattle(void);
+static u8 GetWildBattleTransition(void);
+static u8 GetTrainerBattleTransition(void);
+static void CB2_GiveStarter(void);
+static void CB2_StartFirstBattle(void);
+static void CB2_EndFirstBattle(void);
+static bool32 IsPlayerDefeated(u32 a1);
+
+#define tState data[0]
+#define tTransition data[1]
+
+static void Task_BattleStart(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- switch (data[0])
+ switch (tState)
{
case 0:
if (!FieldPoisonEffectIsRunning()) // is poison not active?
{
- sub_811AABC(data[1]);
- data[0]++; // go to case 1.
+ BattleTransition_StartOnField(tTransition);
+ tState++; // go to case 1.
}
break;
case 1:
- if (sub_811AAE8() == TRUE)
+ if (IsBattleTransitionDone() == TRUE)
{
SetMainCallback2(sub_800E7C4);
prev_quest_postbuffer_cursor_backup_reset();
@@ -449,132 +483,135 @@ void task01_battle_start(u8 taskId)
}
}
-void task_add_01_battle_start(u8 transition, u16 song)
+static void CreateBattleStartTask(u8 transition, u16 song)
{
- u8 taskId = CreateTask(task01_battle_start, 1);
+ u8 taskId = CreateTask(Task_BattleStart, 1);
- gTasks[taskId].data[1] = transition;
+ gTasks[taskId].tTransition = transition;
current_map_music_set__default_for_battle(song);
}
-void CheckForSafariZoneAndProceed(void)
+#undef tState
+#undef tTransition
+
+void BattleSetup_StartWildBattle(void)
{
if (GetSafariZoneFlag())
- StartBattle_Safari();
+ DoSafariBattle();
else
- StartBattle_StandardWild();
+ DoStandardWildBattle();
}
-void StartBattle_StandardWild(void)
+static void DoStandardWildBattle(void)
{
ScriptContext2_Enable();
FreezeMapObjects();
sub_80597F4();
- gMain.savedCallback = HandleWildBattleEnd;
+ gMain.savedCallback = CB2_EndWildBattle;
gBattleTypeFlags = 0;
- task_add_01_battle_start(GetWildBattleTransition(), 0);
+ CreateBattleStartTask(GetWildBattleTransition(), 0);
IncrementGameStat(7);
IncrementGameStat(8);
}
-void StartBattle_Roamer(void)
+void BattleSetup_StartRoamerBattle(void)
{
ScriptContext2_Enable();
FreezeMapObjects();
sub_80597F4();
- gMain.savedCallback = HandleWildBattleEnd;
+ gMain.savedCallback = CB2_EndWildBattle;
gBattleTypeFlags = BATTLE_TYPE_ROAMER;
- task_add_01_battle_start(GetWildBattleTransition(), 0);
+ CreateBattleStartTask(GetWildBattleTransition(), 0);
IncrementGameStat(7);
IncrementGameStat(8);
}
-void StartBattle_Safari(void)
+static void DoSafariBattle(void)
{
ScriptContext2_Enable();
FreezeMapObjects();
sub_80597F4();
gMain.savedCallback = sub_80C824C;
gBattleTypeFlags = BATTLE_TYPE_SAFARI;
- task_add_01_battle_start(GetWildBattleTransition(), 0);
+ CreateBattleStartTask(GetWildBattleTransition(), 0);
}
-void task_add_01_battle_start_with_music_and_stats(void)
+static void StartTheBattle(void)
{
- task_add_01_battle_start(GetTrainerBattleTransition(), 0);
+ CreateBattleStartTask(GetTrainerBattleTransition(), 0);
IncrementGameStat(7);
IncrementGameStat(9);
}
//Initiates battle where Wally catches Ralts
-void StartBattle_WallyTutorial(void)
+void ScrSpecial_StartWallyTutorialBattle(void)
{
CreateMaleMon(&gEnemyParty[0], SPECIES_RALTS, 5);
ScriptContext2_Enable();
gMain.savedCallback = c2_exit_to_overworld_1_continue_scripts_restart_music;
gBattleTypeFlags = BATTLE_TYPE_WALLY_TUTORIAL;
- task_add_01_battle_start(8, 0);
+ CreateBattleStartTask(B_TRANSITION_SLICE, 0);
}
-void StartBattle_ScriptedWild(void)
+void BattleSetup_StartScriptedWildBattle(void)
{
ScriptContext2_Enable();
- gMain.savedCallback = HandleScriptedWildBattleEnd;
+ gMain.savedCallback = CB2_EndScriptedWildBattle;
gBattleTypeFlags = 0;
- task_add_01_battle_start(GetWildBattleTransition(), 0);
+ CreateBattleStartTask(GetWildBattleTransition(), 0);
IncrementGameStat(7);
IncrementGameStat(8);
}
-void StartBattle_SouthernIsland(void)
+void ScrSpecial_StartSouthernIslandBattle(void)
{
ScriptContext2_Enable();
- gMain.savedCallback = HandleScriptedWildBattleEnd;
+ gMain.savedCallback = CB2_EndScriptedWildBattle;
gBattleTypeFlags = BATTLE_TYPE_LEGENDARY;
- task_add_01_battle_start(GetWildBattleTransition(), 0);
+ CreateBattleStartTask(GetWildBattleTransition(), 0);
IncrementGameStat(7);
IncrementGameStat(8);
}
-void StartBattle_Rayquaza(void)
+void ScrSpecial_StartRayquazaBattle(void)
{
ScriptContext2_Enable();
- gMain.savedCallback = HandleScriptedWildBattleEnd;
+ gMain.savedCallback = CB2_EndScriptedWildBattle;
gBattleTypeFlags = BATTLE_TYPE_LEGENDARY;
- task_add_01_battle_start(0, BGM_BATTLE34);
+ CreateBattleStartTask(B_TRANSITION_BLUR, BGM_BATTLE34);
IncrementGameStat(7);
IncrementGameStat(8);
}
-void StartBattle_GroudonKyogre(void)
+void ScrSpecial_StartGroudonKyogreBattle(void)
{
ScriptContext2_Enable();
- gMain.savedCallback = HandleScriptedWildBattleEnd;
+ gMain.savedCallback = CB2_EndScriptedWildBattle;
gBattleTypeFlags = BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_KYOGRE_GROUDON;
- if (gGameVersion == 2)
- task_add_01_battle_start(0xB, BGM_BATTLE34); // KYOGRE
+ if (gGameVersion == VERSION_RUBY)
+ CreateBattleStartTask(B_TRANSITION_SHARDS, BGM_BATTLE34); // GROUDON
else
- task_add_01_battle_start(0x6, BGM_BATTLE34); // GROUDON
+ CreateBattleStartTask(B_TRANSITION_RIPPLE, BGM_BATTLE34); // KYOGRE
IncrementGameStat(7);
IncrementGameStat(8);
}
-void StartBattle_Regi(void)
+void ScrSpecial_StartRegiBattle(void)
{
ScriptContext2_Enable();
- gMain.savedCallback = HandleScriptedWildBattleEnd;
+ gMain.savedCallback = CB2_EndScriptedWildBattle;
gBattleTypeFlags = BATTLE_TYPE_LEGENDARY | BATTLE_TYPE_REGI;
- task_add_01_battle_start(0xA, BGM_BATTLE36);
+ CreateBattleStartTask(B_TRANSITION_GRID_SQUARES, BGM_BATTLE36);
IncrementGameStat(7);
IncrementGameStat(8);
}
-void HandleWildBattleEnd(void)
+static void CB2_EndWildBattle(void)
{
CpuFill16(0, (void *)BG_PLTT, BG_PLTT_SIZE);
ResetOamRange(0, 128);
- if (battle_exit_is_player_defeat(gBattleOutcome) == TRUE)
+ if (IsPlayerDefeated(gBattleOutcome) == TRUE)
{
SetMainCallback2(CB2_WhiteOut);
}
@@ -585,18 +622,18 @@ void HandleWildBattleEnd(void)
}
}
-void HandleScriptedWildBattleEnd(void)
+void CB2_EndScriptedWildBattle(void)
{
CpuFill16(0, (void *)BG_PLTT, BG_PLTT_SIZE);
ResetOamRange(0, 128);
- if (battle_exit_is_player_defeat(gBattleOutcome) == TRUE)
+ if (IsPlayerDefeated(gBattleOutcome) == TRUE)
SetMainCallback2(CB2_WhiteOut);
else
SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music);
}
-s8 GetBattleTerrain(void)
+s8 BattleSetup_GetTerrain(void)
{
u16 tileBehavior;
s16 x, y;
@@ -605,11 +642,11 @@ s8 GetBattleTerrain(void)
tileBehavior = MapGridGetMetatileBehaviorAt(x, y);
if (MetatileBehavior_IsTallGrass(tileBehavior))
- return 0;
+ return BATTLE_TERRAIN_GRASS;
if (MetatileBehavior_IsLongGrass(tileBehavior))
- return 1;
+ return BATTLE_TERRAIN_LONG_GRASS;
if (MetatileBehavior_IsSandOrDeepSand(tileBehavior))
- return 2;
+ return BATTLE_TERRAIN_SAND;
switch (gMapHeader.mapType)
{
case MAP_TYPE_TOWN:
@@ -618,54 +655,49 @@ s8 GetBattleTerrain(void)
break;
case MAP_TYPE_UNDERGROUND:
if (sub_80574C4(tileBehavior))
- return 8;
+ return BATTLE_TERRAIN_BUILDING;
if (MetatileBehavior_IsSurfableWaterOrUnderwater(tileBehavior))
- return 5;
- return 7;
+ return BATTLE_TERRAIN_POND;
+ return BATTLE_TERRAIN_CAVE;
case MAP_TYPE_INDOOR:
case MAP_TYPE_SECRET_BASE:
- return 8;
+ return BATTLE_TERRAIN_BUILDING;
case MAP_TYPE_UNDERWATER:
- return 3;
+ return BATTLE_TERRAIN_UNDERWATER;
case MAP_TYPE_6:
if (MetatileBehavior_IsSurfableWaterOrUnderwater(tileBehavior))
- return 4;
- return 9;
+ return BATTLE_TERRAIN_WATER;
+ return BATTLE_TERRAIN_PLAIN;
}
if (sub_8057568(tileBehavior))
- return 4;
+ return BATTLE_TERRAIN_WATER;
if (MetatileBehavior_IsSurfableWaterOrUnderwater(tileBehavior))
- return 5;
+ return BATTLE_TERRAIN_POND;
if (sub_80574D8(tileBehavior))
- return 6;
+ return BATTLE_TERRAIN_MOUNTAIN;
if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING))
{
if (sub_8057450(tileBehavior))
- return 5;
+ return BATTLE_TERRAIN_POND;
if (MetatileBehavior_IsBridge(tileBehavior) == TRUE)
- return 4;
+ return BATTLE_TERRAIN_WATER;
}
- if (gSaveBlock1.location.mapGroup == 0 && gSaveBlock1.location.mapNum == 28)
- return 2;
+ if (gSaveBlock1.location.mapGroup == MAP_GROUP_ROUTE113 && gSaveBlock1.location.mapNum == MAP_ID_ROUTE113)
+ return BATTLE_TERRAIN_SAND;
if (GetSav1Weather() == 8)
- return 2;
- return 9;
+ return BATTLE_TERRAIN_SAND;
+ return BATTLE_TERRAIN_PLAIN;
}
-s8 GetBattleTransitionTypeByMap(void)
+static s8 GetBattleTransitionTypeByMap(void)
{
- u8 flashUsed;
u16 tileBehavior;
s16 x, y;
PlayerGetDestCoords(&x, &y);
tileBehavior = MapGridGetMetatileBehaviorAt(x, y);
-
- flashUsed = sav1_get_flash_used_on_map();
-
- if (flashUsed)
+ if (Overworld_GetFlashLevel())
return 2;
-
if (!MetatileBehavior_IsSurfableWaterOrUnderwater(tileBehavior))
{
switch (gMapHeader.mapType)
@@ -681,7 +713,7 @@ s8 GetBattleTransitionTypeByMap(void)
return 3;
}
-u16 GetSumOfPartyMonLevel(u8 numMons)
+static u16 GetSumOfPlayerPartyLevel(u8 numMons)
{
u8 sum = 0;
int i;
@@ -701,37 +733,37 @@ u16 GetSumOfPartyMonLevel(u8 numMons)
return sum;
}
-u8 GetSumOfEnemyPartyLevel(u16 trainerNum, u8 numMons)
+static u8 GetSumOfEnemyPartyLevel(u16 opponentId, u8 numMons)
{
u8 i;
u8 sum;
u32 count = numMons;
void *party;
- if (gTrainers[trainerNum].partySize < count)
- count = gTrainers[trainerNum].partySize;
+ if (gTrainers[opponentId].partySize < count)
+ count = gTrainers[opponentId].partySize;
sum = 0;
- switch (gTrainers[trainerNum].partyFlags)
+ switch (gTrainers[opponentId].partyFlags)
{
case 0:
- party = gTrainers[trainerNum].party;
+ party = gTrainers[opponentId].party;
for (i = 0; i < count; i++)
sum += ((struct TrainerPartyMember0 *)party)[i].level;
break;
case 1:
- party = gTrainers[trainerNum].party;
+ party = gTrainers[opponentId].party;
for (i = 0; i < count; i++)
sum += ((struct TrainerPartyMember1 *)party)[i].level;
break;
case 2:
- party = gTrainers[trainerNum].party;
+ party = gTrainers[opponentId].party;
for (i = 0; i < count; i++)
sum += ((struct TrainerPartyMember2 *)party)[i].level;
break;
case 3:
- party = gTrainers[trainerNum].party;
+ party = gTrainers[opponentId].party;
for (i = 0; i < count; i++)
sum += ((struct TrainerPartyMember3 *)party)[i].level;
break;
@@ -740,76 +772,79 @@ u8 GetSumOfEnemyPartyLevel(u16 trainerNum, u8 numMons)
return sum;
}
-u8 GetWildBattleTransition(void)
+static u8 GetWildBattleTransition(void)
{
- u8 flashVar = GetBattleTransitionTypeByMap();
- u8 level = GetMonData(&gEnemyParty[0], MON_DATA_LEVEL);
+ u8 transitionType = GetBattleTransitionTypeByMap();
+ u8 enemyLevel = GetMonData(&gEnemyParty[0], MON_DATA_LEVEL);
+ u8 playerLevel = GetSumOfPlayerPartyLevel(1);
- if (level < (u8)GetSumOfPartyMonLevel(1)) // is wild mon level than the player's mon level?
- return gBattleTransitionTable_Wild[flashVar][0];
+ if (enemyLevel < playerLevel)
+ return gBattleTransitionTable_Wild[transitionType][0];
else
- return gBattleTransitionTable_Wild[flashVar][1]; // use a white fade in instead of normal transition.
+ return gBattleTransitionTable_Wild[transitionType][1];
}
-u8 GetTrainerBattleTransition(void)
+static u8 GetTrainerBattleTransition(void)
{
const struct Trainer *trainer;
u8 minPartyCount;
- u8 flashVar;
- u8 level;
+ u8 transitionType;
+ u8 enemyLevel;
+ u8 playerLevel;
if (gTrainerBattleOpponent == 1024) // link battle?
- return 16;
+ return B_TRANSITION_STEVEN;
trainer = gTrainers;
if (trainer[gTrainerBattleOpponent].trainerClass == 24) // league?
{
if (gTrainerBattleOpponent == 261)
- return 12;
+ return B_TRANSITION_SYDNEY;
if (gTrainerBattleOpponent == 262)
- return 13;
+ return B_TRANSITION_PHOEBE;
if (gTrainerBattleOpponent == 263)
- return 14;
+ return B_TRANSITION_GLACIA;
if (gTrainerBattleOpponent == 264)
- return 15;
- return 16;
+ return B_TRANSITION_DRAKE;
+ return B_TRANSITION_STEVEN;
}
if (trainer[gTrainerBattleOpponent].trainerClass == 32) // team leader?
- return 16;
+ return B_TRANSITION_STEVEN;
if (trainer[gTrainerBattleOpponent].doubleBattle == TRUE)
minPartyCount = 2; // double battles always at least have 2 pokemon.
else
minPartyCount = 1;
- flashVar = GetBattleTransitionTypeByMap();
- level = GetSumOfEnemyPartyLevel(gTrainerBattleOpponent, minPartyCount);
-
- if (level < (u8)GetSumOfPartyMonLevel(minPartyCount)) // is wild mon level than the player's mon level?
- return gBattleTransitionTable_Trainer[flashVar][0];
+ transitionType = GetBattleTransitionTypeByMap();
+ enemyLevel = GetSumOfEnemyPartyLevel(gTrainerBattleOpponent, minPartyCount);
+ playerLevel = GetSumOfPlayerPartyLevel(minPartyCount);
+ if (enemyLevel < playerLevel) // is wild mon level than the player's mon level?
+ return gBattleTransitionTable_Trainer[transitionType][0];
else
- return gBattleTransitionTable_Trainer[flashVar][1];
+ return gBattleTransitionTable_Trainer[transitionType][1];
}
-u8 GetBattleTowerBattleTransition(void)
+u8 BattleSetup_GetBattleTowerBattleTransition(void)
{
- u8 monData = GetMonData(&gEnemyParty[0], MON_DATA_LEVEL);
+ u8 enemyLevel = GetMonData(&gEnemyParty[0], MON_DATA_LEVEL);
+ u8 playerLevel = GetSumOfPlayerPartyLevel(1);
- if (monData < (u8)GetSumOfPartyMonLevel(1))
- return 4;
+ if (enemyLevel < playerLevel)
+ return B_TRANSITION_POKEBALLS_TRAIL;
else
- return 3;
+ return B_TRANSITION_BIG_POKEBALL;
}
-void ChooseStarter(void)
+void ScrSpecial_ChooseStarter(void)
{
SetMainCallback2(CB2_ChooseStarter);
gMain.savedCallback = CB2_GiveStarter;
}
-void CB2_GiveStarter(void)
+static void CB2_GiveStarter(void)
{
u16 starterPoke;
@@ -819,18 +854,18 @@ void CB2_GiveStarter(void)
ResetTasks();
sub_80408BC();
SetMainCallback2(CB2_StartFirstBattle);
- sub_811AAD8(0);
+ BattleTransition_Start(0);
}
-void CB2_StartFirstBattle(void)
+static void CB2_StartFirstBattle(void)
{
UpdatePaletteFade();
RunTasks();
- if (sub_811AAE8() == TRUE)
+ if (IsBattleTransitionDone() == TRUE)
{
gBattleTypeFlags = BATTLE_TYPE_FIRST_BATTLE;
- gMain.savedCallback = HandleFirstBattleEnd;
+ gMain.savedCallback = CB2_EndFirstBattle;
SetMainCallback2(sub_800E7C4);
prev_quest_postbuffer_cursor_backup_reset();
overworld_poison_timer_set();
@@ -839,35 +874,35 @@ void CB2_StartFirstBattle(void)
}
}
-void HandleFirstBattleEnd(void)
+static void CB2_EndFirstBattle(void)
{
sav1_reset_battle_music_maybe();
SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music);
}
-u32 TrainerBattleLoadArg32(const u8 *ptr)
+static u32 TrainerBattleLoadArg32(const u8 *ptr)
{
return ptr[0] | (ptr[1] << 8) | (ptr[2] << 16) | (ptr[3] << 24);
}
-u16 TrainerBattleLoadArg16(const u8 *ptr)
+static u16 TrainerBattleLoadArg16(const u8 *ptr)
{
return ptr[0] | (ptr[1] << 8);
}
-u8 TrainerBattleLoadArg8(const u8 *ptr)
+static u8 TrainerBattleLoadArg8(const u8 *ptr)
{
return ptr[0];
}
-u16 trainerflag_opponent(void)
+static u16 CurrentOpponentTrainerFlag(void)
{
return TRAINER_FLAG_START + gTrainerBattleOpponent;
}
-bool32 battle_exit_is_player_defeat(u32 a1)
+static bool32 IsPlayerDefeated(u32 battleOutcome)
{
- switch (a1)
+ switch (battleOutcome)
{
case 2:
case 3:
@@ -882,69 +917,69 @@ bool32 battle_exit_is_player_defeat(u32 a1)
return FALSE;
}
-void sub_80822BC(void)
+static void sub_80822BC(void)
{
- gTrainerBattleMode = 0;
+ sTrainerBattleMode = 0;
gTrainerBattleOpponent = 0;
- gTrainerMapObjectLocalId = 0;
- gTrainerIntroSpeech = 0;
- gTrainerDefeatSpeech = 0;
- gTrainerVictorySpeech = 0;
- gTrainerCannotBattleSpeech = 0;
- gTrainerBattleScriptReturnAddress = 0;
- gTrainerBattleEndScript = 0;
+ sTrainerMapObjectLocalId = 0;
+ sTrainerIntroSpeech = 0;
+ sTrainerDefeatSpeech = 0;
+ sTrainerVictorySpeech = 0;
+ sTrainerCannotBattleSpeech = 0;
+ sTrainerBattleScriptRetAddr = 0;
+ sTrainerBattleEndScript = 0;
}
-void TrainerBattleLoadArgs(const struct TrainerBattleSpec *specs, const u8 *data)
+static void TrainerBattleLoadArgs(const struct TrainerBattleParameter *specs, const u8 *data)
{
while (1)
{
switch (specs->ptrType)
{
- case 0:
- *(u8 *)specs->ptr = TrainerBattleLoadArg8(data);
- data++;
+ case TRAINER_PARAM_LOAD_VAL_8BIT:
+ *(u8 *)specs->varPtr = TrainerBattleLoadArg8(data);
+ data += 1;
break;
- case 1:
- *(u16 *)specs->ptr = TrainerBattleLoadArg16(data);
+ case TRAINER_PARAM_LOAD_VAL_16BIT:
+ *(u16 *)specs->varPtr = TrainerBattleLoadArg16(data);
data += 2;
break;
- case 2:
- *(u32 *)specs->ptr = TrainerBattleLoadArg32(data);
+ case TRAINER_PARAM_LOAD_VAL_32BIT:
+ *(u32 *)specs->varPtr = TrainerBattleLoadArg32(data);
data += 4;
break;
- case 3:
- *(u8 *)specs->ptr = 0;
+ case TRAINER_PARAM_CLEAR_VAL_8BIT:
+ *(u8 *)specs->varPtr = 0;
break;
- case 4:
- *(u16 *)specs->ptr = 0;
+ case TRAINER_PARAM_CLEAR_VAL_16BIT:
+ *(u16 *)specs->varPtr = 0;
break;
- case 5:
- *(u32 *)specs->ptr = 0;
+ case TRAINER_PARAM_CLEAR_VAL_32BIT:
+ *(u32 *)specs->varPtr = 0;
break;
- case 6:
- *(const u8 **)specs->ptr = data;
+ case TRAINER_PARAM_LOAD_SCRIPT_RET_ADDR:
+ *(const u8 **)specs->varPtr = data;
return;
}
specs++;
}
}
-void battle_80801F0(void)
+static void battle_80801F0(void)
{
- if (gTrainerMapObjectLocalId)
+ if (sTrainerMapObjectLocalId)
{
- gScriptLastTalked = gTrainerMapObjectLocalId;
- gSelectedMapObject = GetFieldObjectIdByLocalIdAndMap(gTrainerMapObjectLocalId, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup);
+ gScriptLastTalked = sTrainerMapObjectLocalId;
+ gSelectedMapObject = GetFieldObjectIdByLocalIdAndMap(sTrainerMapObjectLocalId, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup);
}
}
-u8 *TrainerBattleConfigure(const u8 *data)
+u8 *BattleSetup_ConfigureTrainerBattle(const u8 *data)
{
sub_80822BC();
- gTrainerBattleMode = TrainerBattleLoadArg8(data);
+ sTrainerBattleMode = TrainerBattleLoadArg8(data);
- switch (gTrainerBattleMode)
+ switch (sTrainerBattleMode)
{
case 3:
TrainerBattleLoadArgs(gTrainerBattleSpecs_3, data);
@@ -984,7 +1019,7 @@ void TrainerWantsBattle(u8 trainerMapObjId, u8 *trainerScript)
{
gSelectedMapObject = trainerMapObjId;
gScriptLastTalked = gMapObjects[trainerMapObjId].localId;
- TrainerBattleConfigure(trainerScript + 1);
+ BattleSetup_ConfigureTrainerBattle(trainerScript + 1);
ScriptContext1_SetupScript(gUnknown_0819F80B);
ScriptContext2_Enable();
}
@@ -1002,27 +1037,27 @@ void sub_8082524(void)
npc_set_running_behaviour_etc(mapObject, npc_running_behaviour_by_direction(mapObject->mapobj_unk_18));
}
-u8 sub_8082558(void)
+u8 ScrSpecial_GetTrainerBattleMode(void)
{
- return gTrainerBattleMode;
+ return sTrainerBattleMode;
}
-u8 sub_8082564(void)
+u8 ScrSpecial_HasTrainerBeenFought(void)
{
- return FlagGet(trainerflag_opponent());
+ return FlagGet(CurrentOpponentTrainerFlag());
}
-void sub_808257C(void)
+void SetCurrentTrainerBattledFlag(void)
{
- FlagSet(trainerflag_opponent());
+ FlagSet(CurrentOpponentTrainerFlag());
}
void unref_sub_8082590(void)
{
- FlagSet(trainerflag_opponent()); // duplicate function
+ FlagSet(CurrentOpponentTrainerFlag()); // duplicate function
}
-u8 trainer_flag_check(u16 flag)
+u8 HasTrainerAlreadyBeenFought(u16 flag)
{
return FlagGet(TRAINER_FLAG_START + flag);
}
@@ -1034,14 +1069,14 @@ void trainer_flag_set(u16 flag)
void trainer_flag_clear(u16 flag)
{
- FlagReset(TRAINER_FLAG_START + flag);
+ FlagClear(TRAINER_FLAG_START + flag);
}
-void sub_80825E4(void)
+void BattleSetup_StartTrainerBattle(void)
{
gBattleTypeFlags = BATTLE_TYPE_TRAINER;
gMain.savedCallback = sub_808260C;
- task_add_01_battle_start_with_music_and_stats();
+ StartTheBattle();
ScriptContext1_Stop();
}
@@ -1051,74 +1086,77 @@ void sub_808260C(void)
{
SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); // link battle?
}
- else if (battle_exit_is_player_defeat(gBattleOutcome) == TRUE)
+ else if (IsPlayerDefeated(gBattleOutcome) == TRUE)
{
SetMainCallback2(CB2_WhiteOut);
}
else
{
SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music);
- sub_808257C();
+ SetCurrentTrainerBattledFlag();
}
}
-void do_choose_name_or_words_screen(void)
+void CB2_EndTrainerEyeRematchBattle(void)
{
if (gTrainerBattleOpponent == 1024)
{
SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music); // link battle?
}
- else if (battle_exit_is_player_defeat(gBattleOutcome) == TRUE)
+ else if (IsPlayerDefeated(gBattleOutcome) == TRUE)
{
SetMainCallback2(CB2_WhiteOut);
}
else
{
SetMainCallback2(c2_exit_to_overworld_1_continue_scripts_restart_music);
- sub_808257C();
- sub_8082CB8();
+ SetCurrentTrainerBattledFlag();
+ SetTrainerFlagsAfterTrainerEyeRematch();
}
}
-void sub_80826B0(void)
+void ScrSpecial_StartTrainerEyeRematch(void)
{
gBattleTypeFlags = BATTLE_TYPE_TRAINER;
- gMain.savedCallback = do_choose_name_or_words_screen;
- task_add_01_battle_start_with_music_and_stats();
+ gMain.savedCallback = CB2_EndTrainerEyeRematchBattle;
+ StartTheBattle();
ScriptContext1_Stop();
}
-void sub_80826D8(void)
+static u8 *GetTrainerIntroSpeech(void);
+static u8 *GetTrainerNonBattlingSpeech(void);
+
+void ScrSpecial_ShowTrainerIntroSpeech(void)
{
- ShowFieldMessage(sub_808281C());
+ ShowFieldMessage(GetTrainerIntroSpeech());
}
-u8 *sub_80826E8(void)
+u8 *BattleSetup_GetScriptAddrAfterBattle(void)
{
- if (gTrainerBattleScriptReturnAddress)
- return gTrainerBattleScriptReturnAddress;
+ if (sTrainerBattleScriptRetAddr)
+ return sTrainerBattleScriptRetAddr;
else
return gUnknown_081C6C02;
}
-u8 *sub_8082700(void)
+u8 *BattleSetup_GetTrainerPostBattleScript(void)
{
- if (gTrainerBattleEndScript)
- return gTrainerBattleEndScript;
+ if (sTrainerBattleEndScript)
+ return sTrainerBattleEndScript;
else
return gUnknown_081C6C02;
}
-void sub_8082718(void)
+void ScrSpecial_ShowTrainerNonBattlingSpeech(void)
{
- ShowFieldMessage(sub_8082880());
+ ShowFieldMessage(GetTrainerNonBattlingSpeech());
}
void PlayTrainerEncounterMusic(void)
{
u16 music;
- if (gTrainerBattleMode != 1 && gTrainerBattleMode != 8)
+ if (sTrainerBattleMode != 1 && sTrainerBattleMode != 8)
{
switch (sub_803FC58(gTrainerBattleOpponent))
{
@@ -1169,7 +1207,7 @@ void PlayTrainerEncounterMusic(void)
}
//Returns an empty string if a null pointer was passed, otherwise returns str
-u8 *SanitizeString(const u8 *str)
+static u8 *SanitizeString(const u8 *str)
{
if (str)
return (u8 *) str;
@@ -1177,9 +1215,9 @@ u8 *SanitizeString(const u8 *str)
return (u8 *) gOtherText_CancelWithTerminator;
}
-u8 *sub_808281C(void)
+static u8 *GetTrainerIntroSpeech(void)
{
- return SanitizeString(gTrainerIntroSpeech);
+ return SanitizeString(sTrainerIntroSpeech);
}
u8 *sub_8082830(void)
@@ -1189,7 +1227,7 @@ u8 *sub_8082830(void)
if (gTrainerBattleOpponent == 1024)
str = sub_80BCCE8();
else
- str = gTrainerDefeatSpeech;
+ str = sTrainerDefeatSpeech;
StringExpandPlaceholders(gStringVar4, SanitizeString(str));
return gStringVar4;
@@ -1197,43 +1235,43 @@ u8 *sub_8082830(void)
u8 *unref_sub_808286C(void)
{
- return SanitizeString(gTrainerVictorySpeech);
+ return SanitizeString(sTrainerVictorySpeech);
}
-u8 *sub_8082880(void)
+static u8 *GetTrainerNonBattlingSpeech(void)
{
- return SanitizeString(gTrainerCannotBattleSpeech);
+ return SanitizeString(sTrainerCannotBattleSpeech);
}
-s32 sub_8082894(const struct TrainerEyeTrainer *trainers, u16 trainerNum)
+s32 sub_8082894(const struct TrainerEyeTrainer *trainers, u16 opponentId)
{
s32 i;
for (i = 0; i < NUM_TRAINER_EYE_TRAINERS; i++)
{
- if (trainers[i].trainerNums[0] == trainerNum)
+ if (trainers[i].opponentIDs[0] == opponentId)
return i;
}
return -1;
}
-s32 sub_80828B8(const struct TrainerEyeTrainer *trainers, u16 trainerNum)
+s32 sub_80828B8(const struct TrainerEyeTrainer *trainers, u16 opponentId)
{
s32 i;
s32 j;
for (i = 0; i < NUM_TRAINER_EYE_TRAINERS; i++)
{
- for (j = 0; j < 5 && trainers[i].trainerNums[j] != 0; j++)
+ for (j = 0; j < 5 && trainers[i].opponentIDs[j] != 0; j++)
{
- if (trainers[i].trainerNums[j] == trainerNum)
+ if (trainers[i].opponentIDs[j] == opponentId)
return i;
}
}
return -1;
}
-bool32 sub_80828FC(const struct TrainerEyeTrainer *trainers, u16 mapGroup, u16 mapNum)
+bool32 UpdateRandomTrainerEyeRematches(const struct TrainerEyeTrainer *trainers, u16 mapGroup, u16 mapNum)
{
int i;
bool32 ret = FALSE;
@@ -1243,14 +1281,19 @@ bool32 sub_80828FC(const struct TrainerEyeTrainer *trainers, u16 mapGroup, u16 m
if (trainers[i].mapGroup == mapGroup && trainers[i].mapNum == mapNum)
{
if (gSaveBlock1.trainerRematches[i] != 0)
+ {
+ // Trainer already wants rematch. Don't bother updating it
ret = TRUE;
- else if (trainer_flag_check(trainers[i].trainerNums[0]) == TRUE && (Random() % 100) <= 30)
+ }
+ else if (HasTrainerAlreadyBeenFought(trainers[i].opponentIDs[0]) == TRUE
+ && (Random() % 100) <= 30) // 31% chance of getting a rematch
{
- int j = 1;
+ int rematches = 1;
- while (j < 5 && trainers[i].trainerNums[j] != 0 && trainer_flag_check(trainers[i].trainerNums[j]))
- j++;
- gSaveBlock1.trainerRematches[i] = j;
+ while (rematches < 5 && trainers[i].opponentIDs[rematches] != 0
+ && HasTrainerAlreadyBeenFought(trainers[i].opponentIDs[rematches]))
+ rematches++;
+ gSaveBlock1.trainerRematches[i] = rematches;
ret = TRUE;
}
}
@@ -1282,9 +1325,9 @@ s32 sub_80829E8(const struct TrainerEyeTrainer *trainers, u16 mapGroup, u16 mapN
return 0;
}
-bool8 sub_8082A18(const struct TrainerEyeTrainer *trainers, u16 trainerNum)
+bool8 sub_8082A18(const struct TrainerEyeTrainer *trainers, u16 opponentId)
{
- s32 trainerEyeIndex = sub_8082894(trainers, trainerNum);
+ s32 trainerEyeIndex = sub_8082894(trainers, opponentId);
if (trainerEyeIndex != -1 && trainerEyeIndex < 100 && gSaveBlock1.trainerRematches[trainerEyeIndex])
return TRUE;
@@ -1292,9 +1335,9 @@ bool8 sub_8082A18(const struct TrainerEyeTrainer *trainers, u16 trainerNum)
return FALSE;
}
-bool8 sub_8082A54(const struct TrainerEyeTrainer *trainers, u16 trainerNum)
+bool8 GetTrainerEyeRematchFlag(const struct TrainerEyeTrainer *trainers, u16 opponentId)
{
- s32 trainerEyeIndex = sub_80828B8(trainers, trainerNum);
+ s32 trainerEyeIndex = sub_80828B8(trainers, opponentId);
if (trainerEyeIndex != -1 && trainerEyeIndex < 100 && gSaveBlock1.trainerRematches[trainerEyeIndex])
return TRUE;
@@ -1302,38 +1345,38 @@ bool8 sub_8082A54(const struct TrainerEyeTrainer *trainers, u16 trainerNum)
return FALSE;
}
-u16 sub_8082A90(const struct TrainerEyeTrainer *trainers, u16 trainerNum)
+u16 sub_8082A90(const struct TrainerEyeTrainer *trainers, u16 opponentId)
{
int i;
const struct TrainerEyeTrainer *trainer;
- s32 trainerEyeIndex = sub_8082894(trainers, trainerNum);
+ s32 trainerEyeIndex = sub_8082894(trainers, opponentId);
if (trainerEyeIndex == -1)
return 0;
trainer = &trainers[trainerEyeIndex];
for (i = 1; i < 5; i++)
{
- if (!trainer->trainerNums[i])
- return trainer->trainerNums[i - 1];
- if (!trainer_flag_check(trainer->trainerNums[i]))
- return trainer->trainerNums[i];
+ if (!trainer->opponentIDs[i])
+ return trainer->opponentIDs[i - 1];
+ if (!HasTrainerAlreadyBeenFought(trainer->opponentIDs[i]))
+ return trainer->opponentIDs[i];
}
- return trainer->trainerNums[4];
+ return trainer->opponentIDs[4];
}
-void sub_8082AE4(const struct TrainerEyeTrainer *trainers, u16 trainerNum)
+void ClearTrainerEyeRematchFlag(const struct TrainerEyeTrainer *trainers, u16 opponentId)
{
- s32 trainerEyeIndex = sub_80828B8(trainers, trainerNum);
+ s32 trainerEyeIndex = sub_80828B8(trainers, opponentId);
if (trainerEyeIndex != -1)
gSaveBlock1.trainerRematches[trainerEyeIndex] = 0;
}
-bool8 sub_8082B10(const struct TrainerEyeTrainer *trainers, u16 trainerNum)
+bool8 sub_8082B10(const struct TrainerEyeTrainer *trainers, u16 opponentId)
{
- s32 trainerEyeIndex = sub_8082894(trainers, trainerNum);
+ s32 trainerEyeIndex = sub_8082894(trainers, opponentId);
- if (trainerEyeIndex != -1 && trainer_flag_check(trainers[trainerEyeIndex].trainerNums[1]))
+ if (trainerEyeIndex != -1 && HasTrainerAlreadyBeenFought(trainers[trainerEyeIndex].opponentIDs[1]))
return TRUE;
else
return FALSE;
@@ -1377,7 +1420,7 @@ bool32 sub_8082BA4(void)
void sub_8082BD0(u16 mapGroup, u16 mapNum)
{
- if (sub_8082BA4() && sub_80828FC(gTrainerEyeTrainers, mapGroup, mapNum) == TRUE)
+ if (sub_8082BA4() && UpdateRandomTrainerEyeRematches(gTrainerEyeTrainers, mapGroup, mapNum) == TRUE)
gSaveBlock1.trainerRematchStepCounter = 0;
}
@@ -1391,9 +1434,9 @@ s32 unref_sub_8082C2C(u16 mapGroup, u16 mapNum)
return sub_80829E8(gTrainerEyeTrainers, mapGroup, mapNum);
}
-u16 sub_8082C4C(u16 trainerNum)
+u16 sub_8082C4C(u16 opponentId)
{
- return sub_8082A90(gTrainerEyeTrainers, trainerNum);
+ return sub_8082A90(gTrainerEyeTrainers, opponentId);
}
s32 sub_8082C68(void)
@@ -1404,13 +1447,13 @@ s32 sub_8082C68(void)
return sub_8082B10(gTrainerEyeTrainers, gTrainerBattleOpponent);
}
-u8 sub_8082C9C(void)
+u8 ScrSpecial_GetTrainerEyeRematchFlag(void)
{
- return sub_8082A54(gTrainerEyeTrainers, gTrainerBattleOpponent);
+ return GetTrainerEyeRematchFlag(gTrainerEyeTrainers, gTrainerBattleOpponent);
}
-void sub_8082CB8(void)
+void SetTrainerFlagsAfterTrainerEyeRematch(void)
{
- sub_8082AE4(gTrainerEyeTrainers, gTrainerBattleOpponent);
- sub_808257C();
+ ClearTrainerEyeRematchFlag(gTrainerEyeTrainers, gTrainerBattleOpponent);
+ SetCurrentTrainerBattledFlag();
}
diff --git a/src/battle_transition.c b/src/battle_transition.c
new file mode 100644
index 000000000..53d32d03a
--- /dev/null
+++ b/src/battle_transition.c
@@ -0,0 +1,2513 @@
+#include "global.h"
+#include "battle_transition.h"
+#include "main.h"
+#include "overworld.h"
+#include "task.h"
+#include "palette.h"
+#include "trig.h"
+#include "field_effect.h"
+#include "rng.h"
+#include "sprite.h"
+#include "sound.h"
+#include "songs.h"
+#include "trainer.h"
+#include "field_camera.h"
+
+void sub_807DE10(void);
+void dp12_8087EA4(void);
+
+extern u8 ewram[];
+extern u16 gUnknown_03005560[];
+extern u16 gUnknown_03004DE0[][0x3C0];
+
+extern const struct OamData gFieldOamData_32x32;
+
+struct TransitionData
+{
+ vs8 VBlank_DMA;
+ u16 WININ;
+ u16 WINOUT;
+ u16 field_6;
+ u16 WIN0V;
+ u16 field_A;
+ u16 field_C;
+ u16 BLDCNT;
+ u16 BLDALPHA;
+ u16 BLDY;
+ s16 field_14;
+ s16 field_16;
+ s16 field_18;
+ s16 field_1A;
+ s16 field_1C;
+ s16 field_1E; // unused
+ s16 field_20;
+ s16 field_22; // unused
+ s16 data[11];
+};
+
+#define TRANSITION_STRUCT (*(struct TransitionData *) (ewram + 0xC000))
+typedef bool8 (*TransitionState)(struct Task* task);
+typedef bool8 (*TransitionSpriteCallback)(struct Sprite* sprite);
+
+// this file's functions
+static void LaunchBattleTransitionTask(u8 transitionID);
+static void Task_BattleTransitionMain(u8 taskID);
+static void Phase1Task_TransitionAll(u8 taskID);
+static void Phase2Task_Transition_Blur(u8 taskID);
+static void Phase2Task_Transition_Swirl(u8 taskID);
+static void Phase2Task_Transition_Shuffle(u8 taskID);
+static void Phase2Task_Transition_BigPokeball(u8 taskID);
+static void Phase2Task_Transition_PokeballsTrail(u8 taskID);
+static void Phase2Task_Transition_Clockwise_BlackFade(u8 taskID);
+static void Phase2Task_Transition_Ripple(u8 taskID);
+static void Phase2Task_Transition_Wave(u8 taskID);
+static void Phase2Task_Transition_Slice(u8 taskID);
+static void Phase2Task_Transition_WhiteFade(u8 taskID);
+static void Phase2Task_Transition_GridSquares(u8 taskID);
+static void Phase2Task_Transition_Shards(u8 taskID);
+static void Phase2Task_Transition_Sydney(u8 taskID);
+static void Phase2Task_Transition_Phoebe(u8 taskID);
+static void Phase2Task_Transition_Glacia(u8 taskID);
+static void Phase2Task_Transition_Drake(u8 taskID);
+static void Phase2Task_Transition_Steven(u8 taskID);
+static bool8 Transition_Phase1(struct Task* task);
+static bool8 Transition_WaitForPhase1(struct Task* task);
+static bool8 Transition_Phase2(struct Task* task);
+static bool8 Transition_WaitForPhase2(struct Task* task);
+static void VBlankCB_Phase2_Transition_Swirl(void);
+static void HBlankCB_Phase2_Transition_Swirl(void);
+static void VBlankCB_Phase2_Transition_Shuffle(void);
+static void HBlankCB_Phase2_Transition_Shuffle(void);
+static void VBlankCB0_Phase2_Transition_BigPokeball(void);
+static void VBlankCB1_Phase2_Transition_BigPokeball(void);
+static void VBlankCB_Phase2_Transition_Clockwise_BlackFade(void);
+static void VBlankCB_Phase2_Transition_Ripple(void);
+static void HBlankCB_Phase2_Transition_Ripple(void);
+static void VBlankCB_Phase2_Transition_Wave(void);
+static void VBlankCB_Phase2_Transition_Slice(void);
+static void HBlankCB_Phase2_Transition_Slice(void);
+static void VBlankCB0_Phase2_Transition_WhiteFade(void);
+static void VBlankCB1_Phase2_Transition_WhiteFade(void);
+static void HBlankCB_Phase2_Transition_WhiteFade(void);
+static void VBlankCB0_Phase2_Mugshots(void);
+static void VBlankCB1_Phase2_Mugshots(void);
+static void HBlankCB_Phase2_Mugshots(void);
+static void VBlankCB_Phase2_Transition_Shards(void);
+static bool8 Phase2_Transition_Blur_Func1(struct Task* task);
+static bool8 Phase2_Transition_Blur_Func2(struct Task* task);
+static bool8 Phase2_Transition_Blur_Func3(struct Task* task);
+static bool8 Phase2_Transition_Swirl_Func1(struct Task* task);
+static bool8 Phase2_Transition_Swirl_Func2(struct Task* task);
+static bool8 Phase2_Transition_Shuffle_Func1(struct Task* task);
+static bool8 Phase2_Transition_Shuffle_Func2(struct Task* task);
+static bool8 Phase2_Transition_BigPokeball_Func1(struct Task* task);
+static bool8 Phase2_Transition_BigPokeball_Func2(struct Task* task);
+static bool8 Phase2_Transition_BigPokeball_Func3(struct Task* task);
+static bool8 Phase2_Transition_BigPokeball_Func4(struct Task* task);
+static bool8 Phase2_Transition_BigPokeball_Func5(struct Task* task);
+static bool8 Phase2_Transition_BigPokeball_Func6(struct Task* task);
+static bool8 Phase2_Transition_PokeballsTrail_Func1(struct Task* task);
+static bool8 Phase2_Transition_PokeballsTrail_Func2(struct Task* task);
+static bool8 Phase2_Transition_PokeballsTrail_Func3(struct Task* task);
+static bool8 Phase2_Transition_Clockwise_BlackFade_Func1(struct Task* task);
+static bool8 Phase2_Transition_Clockwise_BlackFade_Func2(struct Task* task);
+static bool8 Phase2_Transition_Clockwise_BlackFade_Func3(struct Task* task);
+static bool8 Phase2_Transition_Clockwise_BlackFade_Func4(struct Task* task);
+static bool8 Phase2_Transition_Clockwise_BlackFade_Func5(struct Task* task);
+static bool8 Phase2_Transition_Clockwise_BlackFade_Func6(struct Task* task);
+static bool8 Phase2_Transition_Clockwise_BlackFade_Func7(struct Task* task);
+static bool8 Phase2_Transition_Ripple_Func1(struct Task* task);
+static bool8 Phase2_Transition_Ripple_Func2(struct Task* task);
+static bool8 Phase2_Transition_Wave_Func1(struct Task* task);
+static bool8 Phase2_Transition_Wave_Func2(struct Task* task);
+static bool8 Phase2_Transition_Wave_Func3(struct Task* task);
+static bool8 Phase2_Transition_Slice_Func1(struct Task* task);
+static bool8 Phase2_Transition_Slice_Func2(struct Task* task);
+static bool8 Phase2_Transition_Slice_Func3(struct Task* task);
+static bool8 Phase2_Transition_WhiteFade_Func1(struct Task* task);
+static bool8 Phase2_Transition_WhiteFade_Func2(struct Task* task);
+static bool8 Phase2_Transition_WhiteFade_Func3(struct Task* task);
+static bool8 Phase2_Transition_WhiteFade_Func4(struct Task* task);
+static bool8 Phase2_Transition_WhiteFade_Func5(struct Task* task);
+static bool8 Phase2_Transition_GridSquares_Func1(struct Task* task);
+static bool8 Phase2_Transition_GridSquares_Func2(struct Task* task);
+static bool8 Phase2_Transition_GridSquares_Func3(struct Task* task);
+static bool8 Phase2_Transition_Shards_Func1(struct Task* task);
+static bool8 Phase2_Transition_Shards_Func2(struct Task* task);
+static bool8 Phase2_Transition_Shards_Func3(struct Task* task);
+static bool8 Phase2_Transition_Shards_Func4(struct Task* task);
+static bool8 Phase2_Transition_Shards_Func5(struct Task* task);
+static bool8 Phase2_Mugshot_Func1(struct Task* task);
+static bool8 Phase2_Mugshot_Func2(struct Task* task);
+static bool8 Phase2_Mugshot_Func3(struct Task* task);
+static bool8 Phase2_Mugshot_Func4(struct Task* task);
+static bool8 Phase2_Mugshot_Func5(struct Task* task);
+static bool8 Phase2_Mugshot_Func6(struct Task* task);
+static bool8 Phase2_Mugshot_Func7(struct Task* task);
+static bool8 Phase2_Mugshot_Func8(struct Task* task);
+static bool8 Phase2_Mugshot_Func9(struct Task* task);
+static bool8 Phase2_Mugshot_Func10(struct Task* task);
+static void Phase2Task_MugShotTransition(u8 taskID);
+static void Mugshots_CreateOpponentPlayerSprites(struct Task* task);
+static void sub_811CA10(s16 spriteID, s16 value);
+static void sub_811CA28(s16 spriteID);
+static s16 sub_811CA44(s16 spriteID);
+static bool8 sub_811C934(struct Sprite* sprite);
+static bool8 sub_811C938(struct Sprite* sprite);
+static bool8 sub_811C984(struct Sprite* sprite);
+static bool8 sub_811C9B8(struct Sprite* sprite);
+static bool8 sub_811C9E4(struct Sprite* sprite);
+static void CreatePhase1Task(s16 a0, s16 a1, s16 a2, s16 a3, s16 a4);
+static bool8 sub_811D52C(void);
+static void Phase1_Task_RunFuncs(u8 taskID);
+static bool8 Phase1_TransitionAll_Func1(struct Task* task);
+static bool8 Phase1_TransitionAll_Func2(struct Task* task);
+static void sub_811D658(void);
+static void VBlankCB_BattleTransition(void);
+static void sub_811D6A8(u16** a0, u16** a1);
+static void sub_811D690(u16** a0);
+static void sub_811D6D4(void);
+static void sub_811D6E8(s16* array, s16 sinAdd, s16 index, s16 indexIncrementer, s16 amplitude, s16 arrSize);
+static void sub_811D764(u16* a0, s16 a1, s16 a2, s16 a3);
+static void sub_811D8FC(s16* a0, s16 a1, s16 a2, s16 a3, s16 a4, s16 a5, s16 a6);
+static bool8 sub_811D978(s16* a0, bool8 a1, bool8 a2);
+static void sub_811CFD0(struct Sprite* sprite);
+static void sub_811B720(struct Sprite* sprite);
+static void sub_811C90C(struct Sprite* sprite);
+
+// const data
+
+static const u32 sBigPokeball_Tileset[] = INCBIN_U32("graphics/battle_transitions/big_pokeball.4bpp");
+static const u32 sPokeballTrail_Tileset[] = INCBIN_U32("graphics/battle_transitions/pokeball_trail.4bpp");
+static const u8 sSpriteImage_83FC148[] = INCBIN_U8("graphics/battle_transitions/pokeball.4bpp");
+static const u32 sUnknown_083FC348[] = INCBIN_U32("graphics/battle_transitions/elite_four_bg.4bpp");
+static const u8 sSpriteImage_83FC528[] = INCBIN_U8("graphics/battle_transitions/unused_brendan.4bpp");
+static const u8 sSpriteImage_83FCD28[] = INCBIN_U8("graphics/battle_transitions/unused_lass.4bpp");
+static const u32 sShrinkingBoxTileset[] = INCBIN_U32("graphics/battle_transitions/shrinking_box.4bpp");
+
+static struct TransitionData * const sTransitionStructPtr = &TRANSITION_STRUCT;
+
+static const TaskFunc sPhase1_Tasks[TRANSITIONS_NO] =
+{
+ [0 ... TRANSITIONS_NO - 1] = &Phase1Task_TransitionAll
+};
+
+static const TaskFunc sPhase2_Tasks[TRANSITIONS_NO] =
+{
+ Phase2Task_Transition_Blur, // 0
+ Phase2Task_Transition_Swirl, // 1
+ Phase2Task_Transition_Shuffle, // 2
+ Phase2Task_Transition_BigPokeball, // 3
+ Phase2Task_Transition_PokeballsTrail, // 4
+ Phase2Task_Transition_Clockwise_BlackFade, // 5
+ Phase2Task_Transition_Ripple, // 6
+ Phase2Task_Transition_Wave, // 7
+ Phase2Task_Transition_Slice, // 8
+ Phase2Task_Transition_WhiteFade, // 9
+ Phase2Task_Transition_GridSquares, // 10
+ Phase2Task_Transition_Shards, // 11
+ Phase2Task_Transition_Sydney, // 12
+ Phase2Task_Transition_Phoebe, // 13
+ Phase2Task_Transition_Glacia, // 14
+ Phase2Task_Transition_Drake, // 15
+ Phase2Task_Transition_Steven, // 16
+};
+
+static const TransitionState sMainTransitionPhases[] =
+{
+ &Transition_Phase1,
+ &Transition_WaitForPhase1,
+ &Transition_Phase2,
+ &Transition_WaitForPhase2
+};
+
+static const TransitionState sPhase2_Transition_Blur_Funcs[] =
+{
+ Phase2_Transition_Blur_Func1,
+ Phase2_Transition_Blur_Func2,
+ Phase2_Transition_Blur_Func3
+};
+
+static const TransitionState sPhase2_Transition_Swirl_Funcs[] =
+{
+ Phase2_Transition_Swirl_Func1,
+ Phase2_Transition_Swirl_Func2,
+};
+
+static const TransitionState sPhase2_Transition_Shuffle_Funcs[] =
+{
+ Phase2_Transition_Shuffle_Func1,
+ Phase2_Transition_Shuffle_Func2,
+};
+
+static const TransitionState sPhase2_Transition_BigPokeball_Funcs[] =
+{
+ Phase2_Transition_BigPokeball_Func1,
+ Phase2_Transition_BigPokeball_Func2,
+ Phase2_Transition_BigPokeball_Func3,
+ Phase2_Transition_BigPokeball_Func4,
+ Phase2_Transition_BigPokeball_Func5,
+ Phase2_Transition_BigPokeball_Func6
+};
+
+static const TransitionState sPhase2_Transition_PokeballsTrail_Funcs[] =
+{
+ Phase2_Transition_PokeballsTrail_Func1,
+ Phase2_Transition_PokeballsTrail_Func2,
+ Phase2_Transition_PokeballsTrail_Func3
+};
+
+static const s16 sUnknown_083FD7E4[2] = {-16, 256};
+static const s16 sUnknown_083FD7E8[5] = {0, 32, 64, 18, 48};
+static const s16 sUnknown_083FD7F2[2] = {8, -8};
+
+static const TransitionState sPhase2_Transition_Clockwise_BlackFade_Funcs[] =
+{
+ Phase2_Transition_Clockwise_BlackFade_Func1,
+ Phase2_Transition_Clockwise_BlackFade_Func2,
+ Phase2_Transition_Clockwise_BlackFade_Func3,
+ Phase2_Transition_Clockwise_BlackFade_Func4,
+ Phase2_Transition_Clockwise_BlackFade_Func5,
+ Phase2_Transition_Clockwise_BlackFade_Func6,
+ Phase2_Transition_Clockwise_BlackFade_Func7
+};
+
+static const TransitionState sPhase2_Transition_Ripple_Funcs[] =
+{
+ Phase2_Transition_Ripple_Func1,
+ Phase2_Transition_Ripple_Func2
+};
+
+static const TransitionState sPhase2_Transition_Wave_Funcs[] =
+{
+ Phase2_Transition_Wave_Func1,
+ Phase2_Transition_Wave_Func2,
+ Phase2_Transition_Wave_Func3
+};
+
+static const TransitionState sPhase2_Mugshot_Transition_Funcs[] =
+{
+ Phase2_Mugshot_Func1,
+ Phase2_Mugshot_Func2,
+ Phase2_Mugshot_Func3,
+ Phase2_Mugshot_Func4,
+ Phase2_Mugshot_Func5,
+ Phase2_Mugshot_Func6,
+ Phase2_Mugshot_Func7,
+ Phase2_Mugshot_Func8,
+ Phase2_Mugshot_Func9,
+ Phase2_Mugshot_Func10
+};
+
+static const u8 sMugshotsTrainerPicIDsTable[MUGSHOTS_NO] = {TRAINER_PIC_SIDNEY, TRAINER_PIC_PHOEBE, TRAINER_PIC_GLACIA, TRAINER_PIC_DRAKE, TRAINER_PIC_STEVEN};
+static const s16 sMugshotsOpponentRotationScales[MUGSHOTS_NO][2] =
+{
+ {0x200, 0x200},
+ {0x200, 0x200},
+ {0x1B0, 0x1B0},
+ {0x1A0, 0x1A0},
+ {0x188, 0x188},
+};
+static const s16 sMugshotsOpponentCoords[MUGSHOTS_NO][2] =
+{
+ {0, 0},
+ {0, 0},
+ {-4, 4},
+ {0, 5},
+ {0, 7},
+};
+
+static const TransitionSpriteCallback sUnknown_083FD880[] =
+{
+ sub_811C934,
+ sub_811C938,
+ sub_811C984,
+ sub_811C9B8,
+ sub_811C934,
+ sub_811C9E4,
+ sub_811C934
+};
+
+static const s16 sUnknown_083FD89C[2] = {12, -12};
+static const s16 sUnknown_083FD8A0[2] = {-1, 1};
+
+static const TransitionState sPhase2_Transition_Slice_Funcs[] =
+{
+ Phase2_Transition_Slice_Func1,
+ Phase2_Transition_Slice_Func2,
+ Phase2_Transition_Slice_Func3
+};
+
+static const TransitionState sPhase2_Transition_WhiteFade_Funcs[] =
+{
+ Phase2_Transition_WhiteFade_Func1,
+ Phase2_Transition_WhiteFade_Func2,
+ Phase2_Transition_WhiteFade_Func3,
+ Phase2_Transition_WhiteFade_Func4,
+ Phase2_Transition_WhiteFade_Func5
+};
+
+static const s16 sUnknown_083FD8C4[8] = {0, 20, 15, 40, 10, 25, 35, 5};
+
+static const TransitionState sPhase2_Transition_GridSquares_Funcs[] =
+{
+ Phase2_Transition_GridSquares_Func1,
+ Phase2_Transition_GridSquares_Func2,
+ Phase2_Transition_GridSquares_Func3
+};
+
+static const TransitionState sPhase2_Transition_Shards_Funcs[] =
+{
+ Phase2_Transition_Shards_Func1,
+ Phase2_Transition_Shards_Func2,
+ Phase2_Transition_Shards_Func3,
+ Phase2_Transition_Shards_Func4,
+ Phase2_Transition_Shards_Func5
+};
+
+static const s16 sUnknown_083FD8F4[][5] =
+{
+ {56, 0, 0, 160, 0},
+ {104, 160, 240, 88, 1},
+ {240, 72, 56, 0, 1},
+ {0, 32, 144, 160, 0},
+ {144, 160, 184, 0, 1},
+ {56, 0, 168, 160, 0},
+ {168, 160, 48, 0, 1},
+};
+
+static const s16 sUnknown_083FD93A[] = {8, 4, 2, 1, 1, 1, 0};
+
+static const TransitionState sPhase1_TransitionAll_Funcs[] =
+{
+ Phase1_TransitionAll_Func1,
+ Phase1_TransitionAll_Func2
+};
+
+static const struct SpriteFrameImage sSpriteImageTable_83FD950[] =
+{
+ sSpriteImage_83FC148, 0x200
+};
+
+static const union AnimCmd sSpriteAnim_83FD958[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const sSpriteAnimTable_83FD960[] =
+{
+ sSpriteAnim_83FD958
+};
+
+static const union AffineAnimCmd sSpriteAffineAnim_83FD964[] =
+{
+ AFFINEANIMCMD_FRAME(0, 0, -4, 1),
+ AFFINEANIMCMD_JUMP(0)
+};
+
+static const union AffineAnimCmd sSpriteAffineAnim_83FD974[] =
+{
+ AFFINEANIMCMD_FRAME(0, 0, 4, 1),
+ AFFINEANIMCMD_JUMP(0)
+};
+
+static const union AffineAnimCmd *const sSpriteAffineAnimTable_83FD984[] =
+{
+ sSpriteAffineAnim_83FD964,
+ sSpriteAffineAnim_83FD974
+};
+
+static const struct SpriteTemplate sSpriteTemplate_83FD98C =
+{
+ .tileTag = 0xFFFF,
+ .paletteTag = 4105,
+ .oam = &gFieldOamData_32x32,
+ .anims = sSpriteAnimTable_83FD960,
+ .images = sSpriteImageTable_83FD950,
+ .affineAnims = sSpriteAffineAnimTable_83FD984,
+ .callback = sub_811B720
+};
+
+static const struct OamData gOamData_83FD9A4 =
+{
+ .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 SpriteFrameImage sSpriteImageTable_83FD9AC[] =
+{
+ sSpriteImage_83FC528, 0x800
+};
+
+static const struct SpriteFrameImage sSpriteImageTable_83FD9B4[] =
+{
+ sSpriteImage_83FCD28, 0x800
+};
+
+static const union AnimCmd sSpriteAnim_83FD9BC[] =
+{
+ ANIMCMD_FRAME(0, 1),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const sSpriteAnimTable_83FD9C4[] =
+{
+ sSpriteAnim_83FD9BC
+};
+
+static const struct SpriteTemplate sSpriteTemplate_83FD9C8 =
+{
+ .tileTag = 0xFFFF,
+ .paletteTag = 4106,
+ .oam = &gOamData_83FD9A4,
+ .anims = sSpriteAnimTable_83FD9C4,
+ .images = sSpriteImageTable_83FD9AC,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_811C90C
+};
+
+static const struct SpriteTemplate sSpriteTemplate_83FD9E0 =
+{
+ .tileTag = 0xFFFF,
+ .paletteTag = 4106,
+ .oam = &gOamData_83FD9A4,
+ .anims = sSpriteAnimTable_83FD9C4,
+ .images = sSpriteImageTable_83FD9B4,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = sub_811C90C
+};
+
+static const u16 gFieldEffectObjectPalette10[] = INCBIN_U16("graphics/field_effect_objects/palettes/10.gbapal");
+
+const struct SpritePalette gFieldEffectObjectPaletteInfo10 =
+{
+ gFieldEffectObjectPalette10, 0x1009
+};
+
+static const u16 sMugshotPal_Sydney[] = INCBIN_U16("graphics/battle_transitions/sidney_bg.gbapal");
+static const u16 sMugshotPal_Phoebe[] = INCBIN_U16("graphics/battle_transitions/phoebe_bg.gbapal");
+static const u16 sMugshotPal_Glacia[] = INCBIN_U16("graphics/battle_transitions/glacia_bg.gbapal");
+static const u16 sMugshotPal_Drake[] = INCBIN_U16("graphics/battle_transitions/drake_bg.gbapal");
+static const u16 sMugshotPal_Steven[] = INCBIN_U16("graphics/battle_transitions/steven_bg.gbapal");
+static const u16 sMugshotPal_Brendan[] = INCBIN_U16("graphics/battle_transitions/brendan_bg.gbapal");
+static const u16 sMugshotPal_May[] = INCBIN_U16("graphics/battle_transitions/may_bg.gbapal");
+
+static const u16 * const sOpponentMugshotsPals[MUGSHOTS_NO] =
+{
+ sMugshotPal_Sydney,
+ sMugshotPal_Phoebe,
+ sMugshotPal_Glacia,
+ sMugshotPal_Drake,
+ sMugshotPal_Steven
+};
+
+static const u16 * const sPlayerMugshotsPals[2] =
+{
+ sMugshotPal_Brendan,
+ sMugshotPal_May
+};
+
+static const u16 sUnusedTrainerPalette[] = INCBIN_U16("graphics/battle_transitions/unused_trainer.gbapal");
+static const struct SpritePalette sSpritePalette_UnusedTrainer =
+{
+ sUnusedTrainerPalette, 0x100A
+};
+
+static const u16 sBigPokeball_Tilemap[] = INCBIN_U16("graphics/battle_transitions/big_pokeball_map.bin");
+static const u16 sMugshotsTilemap[] = INCBIN_U16("graphics/battle_transitions/elite_four_bg_map.bin");
+
+// actual code starts here
+
+void BattleTransition_StartOnField(u8 transitionID)
+{
+ gMain.callback2 = CB2_OverworldBasic;
+ LaunchBattleTransitionTask(transitionID);
+}
+
+void BattleTransition_Start(u8 transitionID)
+{
+ LaunchBattleTransitionTask(transitionID);
+}
+
+#define tState data[0]
+#define tTransitionID data[1]
+#define tTransitionDone data[15]
+
+bool8 IsBattleTransitionDone(void)
+{
+ u8 taskID = FindTaskIdByFunc(Task_BattleTransitionMain);
+ if (gTasks[taskID].tTransitionDone)
+ {
+ DestroyTask(taskID);
+ return TRUE;
+ }
+ else
+ return FALSE;
+}
+
+static void LaunchBattleTransitionTask(u8 transitionID)
+{
+ u8 taskID = CreateTask(Task_BattleTransitionMain, 2);
+ gTasks[taskID].tTransitionID = transitionID;
+}
+
+static void Task_BattleTransitionMain(u8 taskID)
+{
+ while (sMainTransitionPhases[gTasks[taskID].tState](&gTasks[taskID]));
+}
+
+static bool8 Transition_Phase1(struct Task* task)
+{
+ sub_807DE10();
+ CpuCopy32(gPlttBufferFaded, gPlttBufferUnfaded, 0x400);
+ if (sPhase1_Tasks[task->tTransitionID] != NULL)
+ {
+ CreateTask(sPhase1_Tasks[task->tTransitionID], 4);
+ task->tState++;
+ return FALSE;
+ }
+ else
+ {
+ task->tState = 2;
+ return TRUE;
+ }
+}
+
+static bool8 Transition_WaitForPhase1(struct Task* task)
+{
+ if (FindTaskIdByFunc(sPhase1_Tasks[task->tTransitionID]) == 0xFF)
+ {
+ task->tState++;
+ return TRUE;
+ }
+ else
+ return FALSE;
+}
+
+static bool8 Transition_Phase2(struct Task* task)
+{
+ CreateTask(sPhase2_Tasks[task->tTransitionID], 0);
+ task->tState++;
+ return FALSE;
+}
+
+static bool8 Transition_WaitForPhase2(struct Task* task)
+{
+ task->tTransitionDone = 0;
+ if (FindTaskIdByFunc(sPhase2_Tasks[task->tTransitionID]) == 0xFF)
+ task->tTransitionDone = 1;
+ return FALSE;
+}
+
+static void Phase1Task_TransitionAll(u8 taskID)
+{
+ if (gTasks[taskID].tState == 0)
+ {
+ gTasks[taskID].tState++;
+ CreatePhase1Task(0, 0, 3, 2, 2);
+ }
+ else if (sub_811D52C())
+ DestroyTask(taskID);
+}
+
+static void Phase2Task_Transition_Blur(u8 taskID)
+{
+ while (sPhase2_Transition_Blur_Funcs[gTasks[taskID].tState](&gTasks[taskID]));
+}
+
+static bool8 Phase2_Transition_Blur_Func1(struct Task* task)
+{
+ REG_MOSAIC = 0;
+ REG_BG1CNT |= BGCNT_MOSAIC;
+ REG_BG2CNT |= BGCNT_MOSAIC;
+ REG_BG3CNT |= BGCNT_MOSAIC;
+ task->tState++;
+ return TRUE;
+}
+
+static bool8 Phase2_Transition_Blur_Func2(struct Task* task)
+{
+ if (task->data[1] != 0)
+ task->data[1]--;
+ else
+ {
+ task->data[1] = 4;
+ if (++task->data[2] == 10)
+ BeginNormalPaletteFade(-1, -1, 0, 0x10, 0);
+ REG_MOSAIC = (task->data[2] & 15) * 17;
+ if (task->data[2] > 14)
+ task->tState++;
+ }
+ return FALSE;
+}
+
+static bool8 Phase2_Transition_Blur_Func3(struct Task* task)
+{
+ if (!gPaletteFade.active)
+ {
+ u8 taskID = FindTaskIdByFunc(Phase2Task_Transition_Blur);
+ DestroyTask(taskID);
+ }
+ return FALSE;
+}
+
+static void Phase2Task_Transition_Swirl(u8 taskID)
+{
+ while (sPhase2_Transition_Swirl_Funcs[gTasks[taskID].tState](&gTasks[taskID]));
+}
+
+static bool8 Phase2_Transition_Swirl_Func1(struct Task* task)
+{
+ u16 savedIME;
+
+ sub_811D658();
+ dp12_8087EA4();
+ BeginNormalPaletteFade(-1, 4, 0, 0x10, 0);
+ sub_811D6E8(gUnknown_03005560, TRANSITION_STRUCT.field_14, 0, 2, 0, 160);
+
+ SetVBlankCallback(VBlankCB_Phase2_Transition_Swirl);
+ SetHBlankCallback(HBlankCB_Phase2_Transition_Swirl);
+
+ savedIME = REG_IME;
+ REG_IME = 0;
+ REG_IE |= (INTR_FLAG_VBLANK | INTR_FLAG_HBLANK);
+ REG_IME = savedIME;
+ REG_DISPSTAT |= (DISPSTAT_VBLANK_INTR | DISPSTAT_HBLANK_INTR);
+
+ task->tState++;
+ return FALSE;
+}
+
+static bool8 Phase2_Transition_Swirl_Func2(struct Task* task)
+{
+ TRANSITION_STRUCT.VBlank_DMA = 0;
+ task->data[1] += 4;
+ task->data[2] += 8;
+
+ sub_811D6E8(gUnknown_03004DE0[0], TRANSITION_STRUCT.field_14, task->data[1], 2, task->data[2], 160);
+
+ if (!gPaletteFade.active)
+ {
+ u8 taskID = FindTaskIdByFunc(Phase2Task_Transition_Swirl);
+ DestroyTask(taskID);
+ }
+
+ TRANSITION_STRUCT.VBlank_DMA++;
+ return FALSE;
+}
+
+static void VBlankCB_Phase2_Transition_Swirl(void)
+{
+ VBlankCB_BattleTransition();
+ if (TRANSITION_STRUCT.VBlank_DMA)
+ DmaCopy16(3, gUnknown_03004DE0[0], gUnknown_03004DE0[1], 320);
+}
+
+static void HBlankCB_Phase2_Transition_Swirl(void)
+{
+ u16 var = gUnknown_03004DE0[1][REG_VCOUNT];
+ REG_BG1HOFS = var;
+ REG_BG2HOFS = var;
+ REG_BG3HOFS = var;
+}
+
+static void Phase2Task_Transition_Shuffle(u8 taskID)
+{
+ while (sPhase2_Transition_Shuffle_Funcs[gTasks[taskID].tState](&gTasks[taskID]));
+}
+
+static bool8 Phase2_Transition_Shuffle_Func1(struct Task* task)
+{
+ u16 savedIME;
+
+ sub_811D658();
+ dp12_8087EA4();
+
+ BeginNormalPaletteFade(-1, 4, 0, 0x10, 0);
+ memset(gUnknown_03005560, TRANSITION_STRUCT.field_16, 0x140);
+
+ SetVBlankCallback(VBlankCB_Phase2_Transition_Shuffle);
+ SetHBlankCallback(HBlankCB_Phase2_Transition_Shuffle);
+
+ savedIME = REG_IME;
+ REG_IME = 0;
+ REG_IE |= (INTR_FLAG_VBLANK | INTR_FLAG_HBLANK);
+ REG_IME = savedIME;
+ REG_DISPSTAT |= (DISPSTAT_VBLANK_INTR | DISPSTAT_HBLANK_INTR);
+
+ task->tState++;
+ return FALSE;
+}
+
+static bool8 Phase2_Transition_Shuffle_Func2(struct Task* task)
+{
+ u8 i;
+ u16 r3, r4;
+
+ TRANSITION_STRUCT.VBlank_DMA = 0;
+ r4 = task->data[1];
+ r3 = task->data[2] >> 8;
+ task->data[1] += 4224;
+ task->data[2] += 384;
+
+ for (i = 0; i < 160; i++, r4 += 4224)
+ {
+ u16 var = r4 / 256;
+ gUnknown_03004DE0[0][i] = TRANSITION_STRUCT.field_16 + Sin(var, r3);
+ }
+
+ if (!gPaletteFade.active)
+ DestroyTask(FindTaskIdByFunc(Phase2Task_Transition_Shuffle));
+
+ TRANSITION_STRUCT.VBlank_DMA++;
+ return FALSE;
+}
+
+static void VBlankCB_Phase2_Transition_Shuffle(void)
+{
+ VBlankCB_BattleTransition();
+ if (TRANSITION_STRUCT.VBlank_DMA)
+ DmaCopy16(3, gUnknown_03004DE0[0], gUnknown_03004DE0[1], 320);
+}
+
+static void HBlankCB_Phase2_Transition_Shuffle(void)
+{
+ u16 var = gUnknown_03004DE0[1][REG_VCOUNT];
+ REG_BG1VOFS = var;
+ REG_BG2VOFS = var;
+ REG_BG3VOFS = var;
+}
+
+static void Phase2Task_Transition_BigPokeball(u8 taskID)
+{
+ while (sPhase2_Transition_BigPokeball_Funcs[gTasks[taskID].tState](&gTasks[taskID]));
+}
+
+static bool8 Phase2_Transition_BigPokeball_Func1(struct Task* task)
+{
+ u16 i;
+ u16 *dst1, *dst2;
+
+ sub_811D658();
+ dp12_8087EA4();
+
+ task->data[1] = 16;
+ task->data[2] = 0;
+ task->data[4] = 0;
+ task->data[5] = 0x4000;
+ TRANSITION_STRUCT.WININ = 63;
+ TRANSITION_STRUCT.WINOUT = 0;
+ TRANSITION_STRUCT.field_6 = 240;
+ TRANSITION_STRUCT.WIN0V = 160;
+ TRANSITION_STRUCT.BLDCNT = 0x3F41;
+ TRANSITION_STRUCT.BLDALPHA = task->data[1] * 256; // 16 * 256 = 0x1000
+
+ for (i = 0; i < 160; i++)
+ {
+ gUnknown_03005560[i] = 240;
+ }
+
+ SetVBlankCallback(VBlankCB0_Phase2_Transition_BigPokeball);
+
+ sub_811D6A8(&dst1, & dst2);
+ CpuFill16(0, dst1, 0x800);
+ CpuSet(sBigPokeball_Tileset, dst2, 0x2C0);
+ LoadPalette(gFieldEffectObjectPalette10, 240, 32);
+
+ task->tState++;
+ return FALSE;
+}
+
+static bool8 Phase2_Transition_BigPokeball_Func2(struct Task* task)
+{
+ s16 i, j;
+ u16 *dst1, *dst2;
+ const u16* BigPokeballMap;
+
+ BigPokeballMap = sBigPokeball_Tilemap;
+ sub_811D6A8(&dst1, &dst2);
+ for (i = 0; i < 20; i++)
+ {
+ for (j = 0; j < 30; j++, BigPokeballMap++)
+ {
+ dst1[i * 32 + j] = *BigPokeballMap | 0xF000;
+ }
+ }
+ sub_811D6E8(gUnknown_03004DE0[0], 0, task->data[4], 132, task->data[5], 160);
+
+ task->tState++;
+ return TRUE;
+}
+
+static bool8 Phase2_Transition_BigPokeball_Func3(struct Task* task)
+{
+ TRANSITION_STRUCT.VBlank_DMA = 0;
+ if (task->data[3] == 0 || --task->data[3] == 0)
+ {
+ task->data[2]++;
+ task->data[3] = 2;
+ }
+ TRANSITION_STRUCT.BLDALPHA = (task->data[1] << 8) | task->data[2];
+ if (task->data[2] > 15)
+ task->tState++;
+ task->data[4] += 8;
+ task->data[5] -= 256;
+
+ sub_811D6E8(gUnknown_03004DE0[0], 0, task->data[4], 132, task->data[5] >> 8, 160);
+
+ TRANSITION_STRUCT.VBlank_DMA++;
+ return FALSE;
+}
+
+static bool8 Phase2_Transition_BigPokeball_Func4(struct Task* task)
+{
+ TRANSITION_STRUCT.VBlank_DMA = 0;
+ if (task->data[3] == 0 || --task->data[3] == 0)
+ {
+ task->data[1]--;
+ task->data[3] = 2;
+ }
+ TRANSITION_STRUCT.BLDALPHA = (task->data[1] << 8) | task->data[2];
+ if (task->data[1] == 0)
+ task->tState++;
+ task->data[4] += 8;
+ task->data[5] -= 256;
+
+ sub_811D6E8(gUnknown_03004DE0[0], 0, task->data[4], 132, task->data[5] >> 8, 160);
+
+ TRANSITION_STRUCT.VBlank_DMA++;
+ return FALSE;
+}
+
+static bool8 Phase2_Transition_BigPokeball_Func5(struct Task* task)
+{
+ TRANSITION_STRUCT.VBlank_DMA = 0;
+ task->data[4] += 8;
+ task->data[5] -= 256;
+
+ sub_811D6E8(gUnknown_03004DE0[0], 0, task->data[4], 132, task->data[5] >> 8, 160);
+
+ if (task->data[5] <= 0)
+ {
+ task->tState++;
+ task->data[1] = 160;
+ task->data[2] = 256;
+ task->data[3] = 0;
+ }
+
+ TRANSITION_STRUCT.VBlank_DMA++;
+ return FALSE;
+}
+
+static bool8 Phase2_Transition_BigPokeball_Func6(struct Task* task)
+{
+ TRANSITION_STRUCT.VBlank_DMA = 0;
+ if (task->data[2] < 1024)
+ task->data[2] += 128;
+ if (task->data[1] != 0)
+ {
+ task->data[1] -= (task->data[2] >> 8);
+ if (task->data[1] < 0)
+ task->data[1] = 0;
+ }
+ sub_811D764(gUnknown_03004DE0[0], 120, 80, task->data[1]);
+ if (task->data[1] == 0)
+ {
+ DmaStop(0);
+ sub_811D6D4();
+ DestroyTask(FindTaskIdByFunc(Phase2Task_Transition_BigPokeball));
+ }
+ if (task->data[3] == 0)
+ {
+ task->data[3]++;
+ SetVBlankCallback(VBlankCB1_Phase2_Transition_BigPokeball);
+ }
+
+ TRANSITION_STRUCT.VBlank_DMA++;
+ return FALSE;
+}
+
+static void Transition_BigPokeball_Vblank(void)
+{
+ DmaStop(0);
+ VBlankCB_BattleTransition();
+ if (TRANSITION_STRUCT.VBlank_DMA)
+ DmaCopy16(3, gUnknown_03004DE0[0], gUnknown_03004DE0[1], 320);
+ REG_WININ = TRANSITION_STRUCT.WININ;
+ REG_WINOUT = TRANSITION_STRUCT.WINOUT;
+ REG_WIN0V = TRANSITION_STRUCT.WIN0V;
+ REG_BLDCNT = TRANSITION_STRUCT.BLDCNT;
+ REG_BLDALPHA = TRANSITION_STRUCT.BLDALPHA;
+}
+
+static void VBlankCB0_Phase2_Transition_BigPokeball(void)
+{
+ Transition_BigPokeball_Vblank();
+ DmaSet(0, gUnknown_03005560, &REG_BG0HOFS, 0xA2400001);
+}
+
+static void VBlankCB1_Phase2_Transition_BigPokeball(void)
+{
+ Transition_BigPokeball_Vblank();
+ DmaSet(0, gUnknown_03005560, &REG_WIN0H, 0xA2400001);
+}
+
+static void Phase2Task_Transition_PokeballsTrail(u8 taskID)
+{
+ while (sPhase2_Transition_PokeballsTrail_Funcs[gTasks[taskID].tState](&gTasks[taskID]));
+}
+
+static bool8 Phase2_Transition_PokeballsTrail_Func1(struct Task* task)
+{
+ u16 *dst1, *dst2;
+
+ sub_811D6A8(&dst1, &dst2);
+ CpuSet(sPokeballTrail_Tileset, dst2, 0x20);
+ CpuFill32(0, dst1, 0x800);
+ LoadPalette(gFieldEffectObjectPalette10, 0xF0, 0x20);
+
+ task->tState++;
+ return FALSE;
+}
+
+static bool8 Phase2_Transition_PokeballsTrail_Func2(struct Task* task)
+{
+ s16 i;
+ s16 rand;
+ s16 arr0[2];
+ s16 arr1[5];
+
+ memcpy(arr0, sUnknown_083FD7E4, sizeof(sUnknown_083FD7E4));
+ memcpy(arr1, sUnknown_083FD7E8, sizeof(sUnknown_083FD7E8));
+ rand = Random() & 1;
+ for (i = 0; i <= 4; i++, rand ^= 1)
+ {
+ gFieldEffectArguments[0] = arr0[rand]; // x
+ gFieldEffectArguments[1] = (i * 32) + 16; // y
+ gFieldEffectArguments[2] = rand;
+ gFieldEffectArguments[3] = arr1[i];
+ FieldEffectStart(FLDEFF_POKEBALL);
+ }
+
+ task->tState++;
+ return FALSE;
+}
+
+static bool8 Phase2_Transition_PokeballsTrail_Func3(struct Task* task)
+{
+ if (!FieldEffectActiveListContains(FLDEFF_POKEBALL))
+ {
+ sub_811D6D4();
+ DestroyTask(FindTaskIdByFunc(Phase2Task_Transition_PokeballsTrail));
+ }
+ return FALSE;
+}
+
+bool8 FldEff_Pokeball(void)
+{
+ u8 spriteID = CreateSpriteAtEnd(&sSpriteTemplate_83FD98C, gFieldEffectArguments[0], gFieldEffectArguments[1], 0);
+ gSprites[spriteID].oam.priority = 0;
+ gSprites[spriteID].oam.affineMode = 1;
+ gSprites[spriteID].data0 = gFieldEffectArguments[2];
+ gSprites[spriteID].data1 = gFieldEffectArguments[3];
+ gSprites[spriteID].data2 = -1;
+ InitSpriteAffineAnim(&gSprites[spriteID]);
+ StartSpriteAffineAnim(&gSprites[spriteID], gFieldEffectArguments[2]);
+ return FALSE;
+}
+
+#define SOME_VRAM_STORE(ptr, posY, posX, toStore) \
+{ \
+ u32 index = (posY) * 32 + posX; \
+ ptr[index] = toStore; \
+}
+
+static void sub_811B720(struct Sprite* sprite)
+{
+ s16 arr0[2];
+
+ memcpy(arr0, sUnknown_083FD7F2, sizeof(sUnknown_083FD7F2));
+ if (sprite->data1 != 0)
+ sprite->data1--;
+ else
+ {
+ if (sprite->pos1.x >= 0 && sprite->pos1.x <= 240)
+ {
+ s16 posX = sprite->pos1.x >> 3;
+ s16 posY = sprite->pos1.y >> 3;
+
+ if (posX != sprite->data2)
+ {
+ u32 var;
+ u16 *ptr;
+
+ sprite->data2 = posX;
+ var = (((REG_BG0CNT >> 8) & 0x1F) << 11); // r2
+ ptr = (u16 *)(VRAM + var);
+
+ SOME_VRAM_STORE(ptr, posY - 2, posX, 0xF001);
+ SOME_VRAM_STORE(ptr, posY - 1, posX, 0xF001);
+ SOME_VRAM_STORE(ptr, posY - 0, posX, 0xF001);
+ SOME_VRAM_STORE(ptr, posY + 1, posX, 0xF001);
+ }
+ }
+ sprite->pos1.x += arr0[sprite->data0];
+ if (sprite->pos1.x < -15 || sprite->pos1.x > 255)
+ FieldEffectStop(sprite, FLDEFF_POKEBALL);
+ }
+}
+
+static void Phase2Task_Transition_Clockwise_BlackFade(u8 taskID)
+{
+ while (sPhase2_Transition_Clockwise_BlackFade_Funcs[gTasks[taskID].tState](&gTasks[taskID]));
+}
+
+static bool8 Phase2_Transition_Clockwise_BlackFade_Func1(struct Task* task)
+{
+ u16 i;
+
+ sub_811D658();
+ dp12_8087EA4();
+
+ TRANSITION_STRUCT.WININ = 0;
+ TRANSITION_STRUCT.WINOUT = 63;
+ TRANSITION_STRUCT.field_6 = -3855;
+ TRANSITION_STRUCT.WIN0V = 160;
+
+ for (i = 0; i < 160; i++)
+ {
+ gUnknown_03005560[i] = 0xF3F4;
+ }
+
+ SetVBlankCallback(VBlankCB_Phase2_Transition_Clockwise_BlackFade);
+ TRANSITION_STRUCT.data[4] = 120;
+
+ task->tState++;
+ return TRUE;
+}
+
+static bool8 Phase2_Transition_Clockwise_BlackFade_Func2(struct Task* task)
+{
+ TRANSITION_STRUCT.VBlank_DMA = 0;
+
+ sub_811D8FC(TRANSITION_STRUCT.data, 120, 80, TRANSITION_STRUCT.data[4], -1, 1, 1);
+ do
+ {
+ gUnknown_03004DE0[0][TRANSITION_STRUCT.data[3]] = (TRANSITION_STRUCT.data[2] + 1) | 0x7800;
+ } while (!sub_811D978(TRANSITION_STRUCT.data, 1, 1));
+
+ TRANSITION_STRUCT.data[4] += 16;
+ if (TRANSITION_STRUCT.data[4] >= 240)
+ {
+ TRANSITION_STRUCT.data[5] = 0;
+ task->tState++;
+ }
+
+ TRANSITION_STRUCT.VBlank_DMA++;
+ return FALSE;
+}
+
+static bool8 Phase2_Transition_Clockwise_BlackFade_Func3(struct Task* task)
+{
+ s16 r1, r3;
+ vu8 var = 0;
+
+ TRANSITION_STRUCT.VBlank_DMA = 0;
+
+ sub_811D8FC(TRANSITION_STRUCT.data, 120, 80, 240, TRANSITION_STRUCT.data[5], 1, 1);
+
+ while (1)
+ {
+ r1 = 120, r3 = TRANSITION_STRUCT.data[2] + 1;
+ if (TRANSITION_STRUCT.data[5] >= 80)
+ r1 = TRANSITION_STRUCT.data[2], r3 = 240;
+ gUnknown_03004DE0[0][TRANSITION_STRUCT.data[3]] = (r3) | (r1 << 8);
+ if (var != 0)
+ break;
+ var = sub_811D978(TRANSITION_STRUCT.data, 1, 1);
+ }
+
+ TRANSITION_STRUCT.data[5] += 8;
+ if (TRANSITION_STRUCT.data[5] >= 160)
+ {
+ TRANSITION_STRUCT.data[4] = 240;
+ task->tState++;
+ }
+ else
+ {
+ while (TRANSITION_STRUCT.data[3] < TRANSITION_STRUCT.data[5])
+ {
+ gUnknown_03004DE0[0][++TRANSITION_STRUCT.data[3]] = (r3) | (r1 << 8);
+ }
+ }
+
+ TRANSITION_STRUCT.VBlank_DMA++;
+ return FALSE;
+}
+
+static bool8 Phase2_Transition_Clockwise_BlackFade_Func4(struct Task* task)
+{
+ TRANSITION_STRUCT.VBlank_DMA = 0;
+
+ sub_811D8FC(TRANSITION_STRUCT.data, 120, 80, TRANSITION_STRUCT.data[4], 160, 1, 1);
+ do
+ {
+ gUnknown_03004DE0[0][TRANSITION_STRUCT.data[3]] = (TRANSITION_STRUCT.data[2] << 8) | 0xF0;
+ } while (!sub_811D978(TRANSITION_STRUCT.data, 1, 1));
+
+ TRANSITION_STRUCT.data[4] -= 16;
+ if (TRANSITION_STRUCT.data[4] <= 0)
+ {
+ TRANSITION_STRUCT.data[5] = 160;
+ task->tState++;
+ }
+
+ TRANSITION_STRUCT.VBlank_DMA++;
+ return FALSE;
+}
+
+static bool8 Phase2_Transition_Clockwise_BlackFade_Func5(struct Task* task)
+{
+ s16 r1, r2, r3;
+ vu8 var = 0;
+
+ TRANSITION_STRUCT.VBlank_DMA = 0;
+
+ sub_811D8FC(TRANSITION_STRUCT.data, 120, 80, 0, TRANSITION_STRUCT.data[5], 1, 1);
+
+ while (1)
+ {
+ r1 = gUnknown_03004DE0[0][TRANSITION_STRUCT.data[3]] & 0xFF, r2 = TRANSITION_STRUCT.data[2];
+ if (TRANSITION_STRUCT.data[5] <= 80)
+ r2 = 120, r1 = TRANSITION_STRUCT.data[2];
+ gUnknown_03004DE0[0][TRANSITION_STRUCT.data[3]] = (r1) | (r2 << 8);
+ r3 = 0;
+ if (var != 0)
+ break;
+ var = sub_811D978(TRANSITION_STRUCT.data, 1, 1);
+ }
+
+ TRANSITION_STRUCT.data[5] -= 8;
+ if (TRANSITION_STRUCT.data[5] <= 0)
+ {
+ TRANSITION_STRUCT.data[4] = r3;
+ task->tState++;
+ }
+ else
+ {
+ while (TRANSITION_STRUCT.data[3] > TRANSITION_STRUCT.data[5])
+ {
+ gUnknown_03004DE0[0][--TRANSITION_STRUCT.data[3]] = (r1) | (r2 << 8);
+ }
+ }
+
+ TRANSITION_STRUCT.VBlank_DMA++;
+ return FALSE;
+}
+
+static bool8 Phase2_Transition_Clockwise_BlackFade_Func6(struct Task* task)
+{
+ TRANSITION_STRUCT.VBlank_DMA = 0;
+
+ sub_811D8FC(TRANSITION_STRUCT.data, 120, 80, TRANSITION_STRUCT.data[4], 0, 1, 1);
+ do
+ {
+ s16 r2, r3;
+
+ r2 = 120, r3 = TRANSITION_STRUCT.data[2];
+ if (TRANSITION_STRUCT.data[2] >= 120)
+ r2 = 0, r3 = 240;
+ gUnknown_03004DE0[0][TRANSITION_STRUCT.data[3]] = (r3) | (r2 << 8);
+
+ } while (!sub_811D978(TRANSITION_STRUCT.data, 1, 1));
+
+ TRANSITION_STRUCT.data[4] += 16;
+ if (TRANSITION_STRUCT.data[2] > 120)
+ task->tState++;
+
+ TRANSITION_STRUCT.VBlank_DMA++;
+ return FALSE;
+}
+
+static bool8 Phase2_Transition_Clockwise_BlackFade_Func7(struct Task* task)
+{
+ DmaStop(0);
+ sub_811D6D4();
+ DestroyTask(FindTaskIdByFunc(Phase2Task_Transition_Clockwise_BlackFade));
+ return FALSE;
+}
+
+static void VBlankCB_Phase2_Transition_Clockwise_BlackFade(void)
+{
+ DmaStop(0);
+ VBlankCB_BattleTransition();
+ if (TRANSITION_STRUCT.VBlank_DMA != 0)
+ DmaCopy16(3, gUnknown_03004DE0[0], gUnknown_03004DE0[1], 320);
+ REG_WININ = TRANSITION_STRUCT.WININ;
+ REG_WINOUT = TRANSITION_STRUCT.WINOUT;
+ REG_WIN0V = TRANSITION_STRUCT.WIN0V;
+ REG_WIN0H = gUnknown_03004DE0[1][0];
+ DmaSet(0, gUnknown_03004DE0[1], &REG_WIN0H, 0xA2400001);
+}
+
+static void Phase2Task_Transition_Ripple(u8 taskID)
+{
+ while (sPhase2_Transition_Ripple_Funcs[gTasks[taskID].tState](&gTasks[taskID]));
+}
+
+static bool8 Phase2_Transition_Ripple_Func1(struct Task* task)
+{
+ u8 i;
+
+ sub_811D658();
+ dp12_8087EA4();
+
+ for (i = 0; i < 160; i++)
+ {
+ gUnknown_03005560[i] = TRANSITION_STRUCT.field_16;
+ }
+
+ SetVBlankCallback(VBlankCB_Phase2_Transition_Ripple);
+ SetHBlankCallback(HBlankCB_Phase2_Transition_Ripple);
+
+ REG_IE |= INTR_FLAG_HBLANK;
+ REG_DISPSTAT |= DISPSTAT_HBLANK_INTR;
+
+ task->tState++;
+ return TRUE;
+}
+
+static bool8 Phase2_Transition_Ripple_Func2(struct Task* task)
+{
+ u8 i;
+ s16 r3;
+ u16 r4, r8;
+
+ TRANSITION_STRUCT.VBlank_DMA = 0;
+
+ r3 = task->data[2] >> 8;
+ r4 = task->data[1];
+ r8 = 384;
+ task->data[1] += 0x400;
+ if (task->data[2] <= 0x1FFF)
+ task->data[2] += 0x180;
+
+ for (i = 0; i < 160; i++, r4 += r8)
+ {
+ // todo: fix the asm
+ s16 var = r4 >> 8;
+ asm("");
+ gUnknown_03004DE0[0][i] = TRANSITION_STRUCT.field_16 + Sin(var, r3);
+ asm("");
+ }
+
+ if (++task->data[3] == 81)
+ {
+ task->data[4]++;
+ BeginNormalPaletteFade(-1, -2, 0, 0x10, 0);
+ }
+
+ if (task->data[4] != 0 && !gPaletteFade.active)
+ DestroyTask(FindTaskIdByFunc(Phase2Task_Transition_Ripple));
+
+ TRANSITION_STRUCT.VBlank_DMA++;
+ return FALSE;
+}
+
+static void VBlankCB_Phase2_Transition_Ripple(void)
+{
+ VBlankCB_BattleTransition();
+ if (TRANSITION_STRUCT.VBlank_DMA)
+ DmaCopy16(3, gUnknown_03004DE0[0], gUnknown_03004DE0[1], 320);
+}
+
+static void HBlankCB_Phase2_Transition_Ripple(void)
+{
+ u16 var = gUnknown_03004DE0[1][REG_VCOUNT];
+ REG_BG1VOFS = var;
+ REG_BG2VOFS = var;
+ REG_BG3VOFS = var;
+}
+
+static void Phase2Task_Transition_Wave(u8 taskID)
+{
+ while (sPhase2_Transition_Wave_Funcs[gTasks[taskID].tState](&gTasks[taskID]));
+}
+
+static bool8 Phase2_Transition_Wave_Func1(struct Task* task)
+{
+ u8 i;
+
+ sub_811D658();
+ dp12_8087EA4();
+
+ TRANSITION_STRUCT.WININ = 63;
+ TRANSITION_STRUCT.WINOUT = 0;
+ TRANSITION_STRUCT.field_6 = 240;
+ TRANSITION_STRUCT.WIN0V = 160;
+
+ for (i = 0; i < 160; i++)
+ {
+ gUnknown_03004DE0[1][i] = 242;
+ }
+
+ SetVBlankCallback(VBlankCB_Phase2_Transition_Wave);
+
+ task->tState++;
+ return TRUE;
+}
+
+static bool8 Phase2_Transition_Wave_Func2(struct Task* task)
+{
+ u8 i, r5;
+ u16* toStore;
+ bool8 nextFunc;
+
+ TRANSITION_STRUCT.VBlank_DMA = 0;
+ toStore = gUnknown_03004DE0[0];
+ r5 = task->data[2];
+ task->data[2] += 16;
+ task->data[1] += 8;
+
+ for (i = 0, nextFunc = TRUE; i < 160; i++, r5 += 4, toStore++)
+ {
+ s16 value = task->data[1] + Sin(r5, 40);
+ if (value < 0)
+ value = 0;
+ if (value > 240)
+ value = 240;
+ *toStore = (value << 8) | (0xF1);
+ if (value < 240)
+ nextFunc = FALSE;
+ }
+ if (nextFunc)
+ task->tState++;
+
+ TRANSITION_STRUCT.VBlank_DMA++;
+ return FALSE;
+}
+
+static bool8 Phase2_Transition_Wave_Func3(struct Task* task)
+{
+ DmaStop(0);
+ sub_811D6D4();
+ DestroyTask(FindTaskIdByFunc(Phase2Task_Transition_Wave));
+ return FALSE;
+}
+
+static void VBlankCB_Phase2_Transition_Wave(void)
+{
+ DmaStop(0);
+ VBlankCB_BattleTransition();
+ if (TRANSITION_STRUCT.VBlank_DMA != 0)
+ DmaCopy16(3, gUnknown_03004DE0[0], gUnknown_03004DE0[1], 320);
+ REG_WININ = TRANSITION_STRUCT.WININ;
+ REG_WINOUT = TRANSITION_STRUCT.WINOUT;
+ REG_WIN0V = TRANSITION_STRUCT.WIN0V;
+ DmaSet(0, gUnknown_03004DE0[1], &REG_WIN0H, 0xA2400001);
+}
+
+#define tMugshotOpponentID data[13]
+#define tMugshotPlayerID data[14]
+#define tMugshotID data[15]
+
+static void Phase2Task_Transition_Sydney(u8 taskID)
+{
+ gTasks[taskID].tMugshotID = MUGSHOT_SYDNEY;
+ Phase2Task_MugShotTransition(taskID);
+}
+
+static void Phase2Task_Transition_Phoebe(u8 taskID)
+{
+ gTasks[taskID].tMugshotID = MUGSHOT_PHOEBE;
+ Phase2Task_MugShotTransition(taskID);
+}
+
+static void Phase2Task_Transition_Glacia(u8 taskID)
+{
+ gTasks[taskID].tMugshotID = MUGSHOT_GLACIA;
+ Phase2Task_MugShotTransition(taskID);
+}
+
+static void Phase2Task_Transition_Drake(u8 taskID)
+{
+ gTasks[taskID].tMugshotID = MUGSHOT_DRAKE;
+ Phase2Task_MugShotTransition(taskID);
+}
+
+static void Phase2Task_Transition_Steven(u8 taskID)
+{
+ gTasks[taskID].tMugshotID = MUGSHOT_STEVEN;
+ Phase2Task_MugShotTransition(taskID);
+}
+
+static void Phase2Task_MugShotTransition(u8 taskID)
+{
+ while (sPhase2_Mugshot_Transition_Funcs[gTasks[taskID].tState](&gTasks[taskID]));
+}
+
+static bool8 Phase2_Mugshot_Func1(struct Task* task)
+{
+ u8 i;
+
+ sub_811D658();
+ dp12_8087EA4();
+ Mugshots_CreateOpponentPlayerSprites(task);
+
+ task->data[1] = 0;
+ task->data[2] = 1;
+ task->data[3] = 239;
+ TRANSITION_STRUCT.WININ = 63;
+ TRANSITION_STRUCT.WINOUT = 62;
+ TRANSITION_STRUCT.WIN0V = 160;
+
+ for (i = 0; i < 160; i++)
+ {
+ gUnknown_03004DE0[1][i] = 0xF0F1;
+ }
+
+ SetVBlankCallback(VBlankCB0_Phase2_Mugshots);
+
+ task->tState++;
+ return FALSE;
+}
+
+static bool8 Phase2_Mugshot_Func2(struct Task* task)
+{
+ s16 i, j;
+ u16 *dst1, *dst2;
+ const u16* MugshotsMap;
+
+ MugshotsMap = sMugshotsTilemap;
+ sub_811D6A8(&dst1, &dst2);
+ CpuSet(sUnknown_083FC348, dst2, 0xF0);
+ LoadPalette(sOpponentMugshotsPals[task->tMugshotID], 0xF0, 0x20);
+ LoadPalette(sPlayerMugshotsPals[gSaveBlock2.playerGender], 0xFA, 0xC);
+
+ for (i = 0; i < 20; i++)
+ {
+ for (j = 0; j < 32; j++, MugshotsMap++)
+ {
+ dst1[i * 32 + j] = *MugshotsMap | 0xF000;
+ }
+ }
+
+ REG_IE |= INTR_FLAG_HBLANK;
+ REG_DISPSTAT |= DISPSTAT_HBLANK_INTR;
+ SetHBlankCallback(HBlankCB_Phase2_Mugshots);
+ task->tState++;
+ return FALSE;
+}
+
+static bool8 Phase2_Mugshot_Func3(struct Task* task)
+{
+ u8 i, r5;
+ u16* toStore;
+ s16 value;
+ s32 mergedValue;
+
+ TRANSITION_STRUCT.VBlank_DMA = 0;
+
+ toStore = gUnknown_03004DE0[0];
+ r5 = task->data[1];
+ task->data[1] += 0x10;
+
+ for (i = 0; i < 80; i++, toStore++, r5 += 0x10)
+ {
+ value = task->data[2] + Sin(r5, 0x10);
+ if (value < 0)
+ value = 1;
+ if (value > 0xF0)
+ value = 0xF0;
+ *toStore = value;
+ }
+ for (; i < 160; i++, toStore++, r5 += 0x10)
+ {
+ value = task->data[3] - Sin(r5, 0x10);
+ if (value < 0)
+ value = 0;
+ if (value > 0xEF)
+ value = 0xEF;
+ *toStore = (value << 8) | (0xF0);
+ }
+
+ task->data[2] += 8;
+ task->data[3] -= 8;
+ if (task->data[2] > 0xF0)
+ task->data[2] = 0xF0;
+ if (task->data[3] < 0)
+ task->data[3] = 0;
+ mergedValue = *(s32*)(&task->data[2]);
+ if (mergedValue == 0xF0)
+ task->tState++;
+
+ TRANSITION_STRUCT.field_18 -= 8;
+ TRANSITION_STRUCT.field_1A += 8;
+ TRANSITION_STRUCT.VBlank_DMA++;
+ return FALSE;
+}
+
+static bool8 Phase2_Mugshot_Func4(struct Task* task)
+{
+ u8 i;
+ u16* toStore;
+
+ TRANSITION_STRUCT.VBlank_DMA = 0;
+
+ for (i = 0, toStore = gUnknown_03004DE0[0]; i < 160; i++, toStore++)
+ {
+ *toStore = 0xF0;
+ }
+
+ task->tState++;
+ task->data[1] = 0;
+ task->data[2] = 0;
+ task->data[3] = 0;
+ TRANSITION_STRUCT.field_18 -= 8;
+ TRANSITION_STRUCT.field_1A += 8;
+
+ sub_811CA10(task->tMugshotOpponentID, 0);
+ sub_811CA10(task->tMugshotPlayerID, 1);
+ sub_811CA28(task->tMugshotOpponentID);
+
+ PlaySE(SE_BT_START);
+
+ TRANSITION_STRUCT.VBlank_DMA++;
+ return FALSE;
+}
+
+static bool8 Phase2_Mugshot_Func5(struct Task* task)
+{
+ TRANSITION_STRUCT.field_18 -= 8;
+ TRANSITION_STRUCT.field_1A += 8;
+ if (sub_811CA44(task->tMugshotOpponentID))
+ {
+ task->tState++;
+ sub_811CA28(task->tMugshotPlayerID);
+ }
+ return FALSE;
+}
+
+static bool8 Phase2_Mugshot_Func6(struct Task* task)
+{
+ TRANSITION_STRUCT.field_18 -= 8;
+ TRANSITION_STRUCT.field_1A += 8;
+ if (sub_811CA44(task->tMugshotPlayerID))
+ {
+ TRANSITION_STRUCT.VBlank_DMA = 0;
+ SetVBlankCallback(NULL);
+ DmaStop(0);
+ memset(gUnknown_03004DE0[0], 0, 0x140);
+ memset(gUnknown_03004DE0[1], 0, 0x140);
+ REG_WIN0H = 0xF0;
+ REG_BLDY = 0;
+ task->tState++;
+ task->data[3] = 0;
+ task->data[4] = 0;
+ TRANSITION_STRUCT.BLDCNT = 0xBF;
+ SetVBlankCallback(VBlankCB1_Phase2_Mugshots);
+ }
+ return FALSE;
+}
+
+static bool8 Phase2_Mugshot_Func7(struct Task* task)
+{
+ bool32 r6;
+
+ TRANSITION_STRUCT.VBlank_DMA = 0;
+ r6 = TRUE;
+ TRANSITION_STRUCT.field_18 -= 8;
+ TRANSITION_STRUCT.field_1A += 8;
+
+ if (task->data[4] < 0x50)
+ task->data[4] += 2;
+ if (task->data[4] > 0x50)
+ task->data[4] = 0x50;
+
+ if (++task->data[3] & 1)
+ {
+ s16 i;
+ for (i = 0, r6 = FALSE; i <= task->data[4]; i++)
+ {
+ s16 index1 = 0x50 - i;
+ s16 index2 = 0x50 + i;
+ if (gUnknown_03004DE0[0][index1] <= 15)
+ {
+ r6 = TRUE;
+ gUnknown_03004DE0[0][index1]++;
+ }
+ if (gUnknown_03004DE0[0][index2] <= 15)
+ {
+ r6 = TRUE;
+ gUnknown_03004DE0[0][index2]++;
+ }
+ }
+ }
+
+ if (task->data[4] == 0x50 && !r6)
+ task->tState++;
+
+ TRANSITION_STRUCT.VBlank_DMA++;
+ return FALSE;
+}
+
+static bool8 Phase2_Mugshot_Func8(struct Task* task)
+{
+ TRANSITION_STRUCT.VBlank_DMA = 0;
+ BlendPalettes(-1, 0x10, 0x7FFF);
+ TRANSITION_STRUCT.BLDCNT = 0xFF;
+ task->data[3] = 0;
+
+ task->tState++;
+ return TRUE;
+}
+
+static bool8 Phase2_Mugshot_Func9(struct Task* task)
+{
+ TRANSITION_STRUCT.VBlank_DMA = 0;
+
+ task->data[3]++;
+ memset(gUnknown_03004DE0[0], task->data[3], 0x140);
+ if (task->data[3] > 15)
+ task->tState++;
+
+ TRANSITION_STRUCT.VBlank_DMA++;
+ return FALSE;
+}
+
+static bool8 Phase2_Mugshot_Func10(struct Task* task)
+{
+ DmaStop(0);
+ sub_811D6D4();
+ DestroyTask(FindTaskIdByFunc(task->func));
+ return FALSE;
+}
+
+static void VBlankCB0_Phase2_Mugshots(void)
+{
+ DmaStop(0);
+ VBlankCB_BattleTransition();
+ if (TRANSITION_STRUCT.VBlank_DMA != 0)
+ DmaCopy16(3, gUnknown_03004DE0[0], gUnknown_03004DE0[1], 320);
+ REG_BG0VOFS = TRANSITION_STRUCT.field_1C;
+ REG_WININ = TRANSITION_STRUCT.WININ;
+ REG_WINOUT = TRANSITION_STRUCT.WINOUT;
+ REG_WIN0V = TRANSITION_STRUCT.WIN0V;
+ DmaSet(0, gUnknown_03004DE0[1], &REG_WIN0H, 0xA2400001);
+}
+
+static void VBlankCB1_Phase2_Mugshots(void)
+{
+ DmaStop(0);
+ VBlankCB_BattleTransition();
+ if (TRANSITION_STRUCT.VBlank_DMA != 0)
+ DmaCopy16(3, gUnknown_03004DE0[0], gUnknown_03004DE0[1], 320);
+ REG_BLDCNT = TRANSITION_STRUCT.BLDCNT;
+ DmaSet(0, gUnknown_03004DE0[1], &REG_BLDY, 0xA2400001);
+}
+
+static void HBlankCB_Phase2_Mugshots(void)
+{
+ if (REG_VCOUNT < 80)
+ REG_BG0HOFS = TRANSITION_STRUCT.field_18;
+ else
+ REG_BG0HOFS = TRANSITION_STRUCT.field_1A;
+}
+
+static void Mugshots_CreateOpponentPlayerSprites(struct Task* task)
+{
+ struct Sprite *opponentSprite, *playerSprite;
+
+ s16 mugshotID = task->tMugshotID;
+ task->tMugshotOpponentID = CreateTrainerSprite(sMugshotsTrainerPicIDsTable[mugshotID],
+ sMugshotsOpponentCoords[mugshotID][0] - 32,
+ sMugshotsOpponentCoords[mugshotID][1] + 42,
+ 0, &ewram[0xC03C]);
+ task->tMugshotPlayerID = CreateTrainerSprite(gSaveBlock2.playerGender, 272, 106, 0, &ewram[0xC03C]);
+
+ opponentSprite = &gSprites[task->tMugshotOpponentID];
+ playerSprite = &gSprites[task->tMugshotPlayerID];
+
+ opponentSprite->callback = sub_811C90C;
+ playerSprite->callback = sub_811C90C;
+
+ opponentSprite->oam.affineMode = 3;
+ playerSprite->oam.affineMode = 3;
+
+ opponentSprite->oam.matrixNum = AllocOamMatrix();
+ playerSprite->oam.matrixNum = AllocOamMatrix();
+
+ opponentSprite->oam.shape = 1;
+ playerSprite->oam.shape = 1;
+
+ opponentSprite->oam.size = 3;
+ playerSprite->oam.size = 3;
+
+ CalcCenterToCornerVec(opponentSprite, 1, 3, 3);
+ CalcCenterToCornerVec(playerSprite, 1, 3, 3);
+
+ SetOamMatrixRotationScaling(opponentSprite->oam.matrixNum, sMugshotsOpponentRotationScales[mugshotID][0], sMugshotsOpponentRotationScales[mugshotID][1], 0);
+ SetOamMatrixRotationScaling(playerSprite->oam.matrixNum, -512, 0x200, 0);
+}
+
+static void sub_811C90C(struct Sprite* sprite)
+{
+ while (sUnknown_083FD880[sprite->data0](sprite));
+}
+
+static bool8 sub_811C934(struct Sprite* sprite)
+{
+ return FALSE;
+}
+
+static bool8 sub_811C938(struct Sprite* sprite)
+{
+ s16 arr0[2];
+ s16 arr1[2];
+
+ memcpy(arr0, sUnknown_083FD89C, sizeof(sUnknown_083FD89C));
+ memcpy(arr1, sUnknown_083FD8A0, sizeof(sUnknown_083FD8A0));
+
+ sprite->data0++;
+ sprite->data1 = arr0[sprite->data7];
+ sprite->data2 = arr1[sprite->data7];
+ return TRUE;
+}
+
+static bool8 sub_811C984(struct Sprite* sprite)
+{
+ sprite->pos1.x += sprite->data1;
+ if (sprite->data7 && sprite->pos1.x < 133)
+ sprite->data0++;
+ else if (!sprite->data7 && sprite->pos1.x > 103)
+ sprite->data0++;
+ return FALSE;
+}
+
+static bool8 sub_811C9B8(struct Sprite* sprite)
+{
+ sprite->data1 += sprite->data2;
+ sprite->pos1.x += sprite->data1;
+ if (sprite->data1 == 0)
+ {
+ sprite->data0++;
+ sprite->data2 = -sprite->data2;
+ sprite->data6 = 1;
+ }
+ return FALSE;
+}
+
+static bool8 sub_811C9E4(struct Sprite* sprite)
+{
+ sprite->data1 += sprite->data2;
+ sprite->pos1.x += sprite->data1;
+ if (sprite->pos1.x < -31 || sprite->pos1.x > 271)
+ sprite->data0++;
+ return FALSE;
+}
+
+static void sub_811CA10(s16 spriteID, s16 value)
+{
+ gSprites[spriteID].data7 = value;
+}
+
+static void sub_811CA28(s16 spriteID)
+{
+ gSprites[spriteID].data0++;
+}
+
+static s16 sub_811CA44(s16 spriteID)
+{
+ return gSprites[spriteID].data6;
+}
+
+#undef tMugshotOpponentID
+#undef tMugshotPlayerID
+#undef tMugshotID
+
+static void Phase2Task_Transition_Slice(u8 taskID)
+{
+ while (sPhase2_Transition_Slice_Funcs[gTasks[taskID].tState](&gTasks[taskID]));
+}
+
+static bool8 Phase2_Transition_Slice_Func1(struct Task* task)
+{
+ u16 i;
+
+ sub_811D658();
+ dp12_8087EA4();
+
+ task->data[2] = 256;
+ task->data[3] = 1;
+ TRANSITION_STRUCT.WININ = 63;
+ TRANSITION_STRUCT.WINOUT = 0;
+ TRANSITION_STRUCT.WIN0V = 160;
+
+ for (i = 0; i < 160; i++)
+ {
+ gUnknown_03004DE0[1][i] = TRANSITION_STRUCT.field_14;
+ gUnknown_03004DE0[1][160 + i] = 0xF0;
+ }
+
+ REG_IE |= INTR_FLAG_HBLANK;
+ REG_DISPSTAT |= DISPSTAT_HBLANK_INTR;
+
+ SetVBlankCallback(VBlankCB_Phase2_Transition_Slice);
+ SetHBlankCallback(HBlankCB_Phase2_Transition_Slice);
+
+ task->tState++;
+ return TRUE;
+}
+
+static bool8 Phase2_Transition_Slice_Func2(struct Task* task)
+{
+ u16 i;
+
+ TRANSITION_STRUCT.VBlank_DMA = 0;
+
+ task->data[1] += (task->data[2] >> 8);
+ if (task->data[1] > 0xF0)
+ task->data[1] = 0xF0;
+ if (task->data[2] <= 0xFFF)
+ task->data[2] += task->data[3];
+ if (task->data[3] < 128)
+ task->data[3] <<= 1; // multiplying by two
+
+ for (i = 0; i < 160; i++)
+ {
+ u16* storeLoc1 = &gUnknown_03004DE0[0][i];
+ u16* storeLoc2 = &gUnknown_03004DE0[0][i + 160];
+ if (1 & i)
+ {
+ *storeLoc1 = TRANSITION_STRUCT.field_14 + task->data[1];
+ *storeLoc2 = 0xF0 - task->data[1];
+ }
+ else
+ {
+ *storeLoc1 = TRANSITION_STRUCT.field_14 - task->data[1];
+ *storeLoc2 = (task->data[1] << 8) | (0xF1);
+ }
+ }
+
+ if (task->data[1] > 0xEF)
+ task->tState++;
+
+ TRANSITION_STRUCT.VBlank_DMA++;
+ return FALSE;
+}
+
+static bool8 Phase2_Transition_Slice_Func3(struct Task* task)
+{
+ DmaStop(0);
+ sub_811D6D4();
+ DestroyTask(FindTaskIdByFunc(Phase2Task_Transition_Slice));
+ return FALSE;
+}
+
+static void VBlankCB_Phase2_Transition_Slice(void)
+{
+ DmaStop(0);
+ VBlankCB_BattleTransition();
+ REG_WININ = TRANSITION_STRUCT.WININ;
+ REG_WINOUT = TRANSITION_STRUCT.WINOUT;
+ REG_WIN0V = TRANSITION_STRUCT.WIN0V;
+ if (TRANSITION_STRUCT.VBlank_DMA)
+ DmaCopy16(3, gUnknown_03004DE0[0], gUnknown_03004DE0[1], 640);
+ DmaSet(0, &gUnknown_03004DE0[1][160], &REG_WIN0H, 0xA2400001);
+}
+
+static void HBlankCB_Phase2_Transition_Slice(void)
+{
+ u16 var = gUnknown_03004DE0[1][REG_VCOUNT];
+ REG_BG1HOFS = var;
+ REG_BG2HOFS = var;
+ REG_BG3HOFS = var;
+}
+
+static void Phase2Task_Transition_WhiteFade(u8 taskID)
+{
+ while (sPhase2_Transition_WhiteFade_Funcs[gTasks[taskID].tState](&gTasks[taskID]));
+}
+
+static bool8 Phase2_Transition_WhiteFade_Func1(struct Task* task)
+{
+ u16 i;
+
+ sub_811D658();
+ dp12_8087EA4();
+
+ TRANSITION_STRUCT.BLDCNT = 0xBF;
+ TRANSITION_STRUCT.BLDY = 0;
+ TRANSITION_STRUCT.WININ = 0x1E;
+ TRANSITION_STRUCT.WINOUT = 0x3F;
+ TRANSITION_STRUCT.WIN0V = 0xA0;
+
+ for (i = 0; i < 160; i++)
+ {
+ gUnknown_03004DE0[1][i] = 0;
+ gUnknown_03004DE0[1][i + 160] = 0xF0;
+ }
+
+ REG_IE |= INTR_FLAG_HBLANK;
+ REG_DISPSTAT |= DISPSTAT_HBLANK_INTR;
+
+ SetHBlankCallback(HBlankCB_Phase2_Transition_WhiteFade);
+ SetVBlankCallback(VBlankCB0_Phase2_Transition_WhiteFade);
+
+ task->tState++;
+ return FALSE;
+}
+
+static bool8 Phase2_Transition_WhiteFade_Func2(struct Task* task)
+{
+ s16 i, posY;
+ s16 arr1[8];
+ struct Sprite* sprite;
+
+ memcpy(arr1, sUnknown_083FD8C4, sizeof(sUnknown_083FD8C4));
+ for (i = 0, posY = 0; i < 8; i++, posY += 0x14)
+ {
+ sprite = &gSprites[CreateInvisibleSprite(sub_811CFD0)];
+ sprite->pos1.x = 0xF0;
+ sprite->pos1.y = posY;
+ sprite->data5 = arr1[i];
+ }
+ sprite->data6++;
+
+ task->tState++;
+ return FALSE;
+}
+
+static bool8 Phase2_Transition_WhiteFade_Func3(struct Task* task)
+{
+ TRANSITION_STRUCT.VBlank_DMA = 0;
+ if (TRANSITION_STRUCT.field_20 > 7)
+ {
+ BlendPalettes(-1, 0x10, 0x7FFF);
+ task->tState++;
+ }
+ return FALSE;
+}
+
+static bool8 Phase2_Transition_WhiteFade_Func4(struct Task* task)
+{
+ TRANSITION_STRUCT.VBlank_DMA = 0;
+
+ DmaStop(0);
+ SetVBlankCallback(0);
+ SetHBlankCallback(0);
+
+ TRANSITION_STRUCT.field_6 = 0xF0;
+ TRANSITION_STRUCT.BLDY = 0;
+ TRANSITION_STRUCT.BLDCNT = 0xFF;
+ TRANSITION_STRUCT.WININ = 0x3F;
+
+ SetVBlankCallback(VBlankCB1_Phase2_Transition_WhiteFade);
+
+ task->tState++;
+ return FALSE;
+}
+
+static bool8 Phase2_Transition_WhiteFade_Func5(struct Task* task)
+{
+ if (++TRANSITION_STRUCT.BLDY > 16)
+ {
+ sub_811D6D4();
+ DestroyTask(FindTaskIdByFunc(Phase2Task_Transition_WhiteFade));
+ }
+ return FALSE;
+}
+
+static void VBlankCB0_Phase2_Transition_WhiteFade(void)
+{
+ DmaStop(0);
+ VBlankCB_BattleTransition();
+ REG_BLDCNT = TRANSITION_STRUCT.BLDCNT;
+ REG_WININ = TRANSITION_STRUCT.WININ;
+ REG_WINOUT = TRANSITION_STRUCT.WINOUT;
+ REG_WIN0V = TRANSITION_STRUCT.field_6;
+ if (TRANSITION_STRUCT.VBlank_DMA)
+ DmaCopy16(3, gUnknown_03004DE0[0], gUnknown_03004DE0[1], 640);
+ DmaSet(0, &gUnknown_03004DE0[1][160], &REG_WIN0H, 0xA2400001);
+}
+
+static void VBlankCB1_Phase2_Transition_WhiteFade(void)
+{
+ VBlankCB_BattleTransition();
+ REG_BLDY = TRANSITION_STRUCT.BLDY;
+ REG_BLDCNT = TRANSITION_STRUCT.BLDCNT;
+ REG_WININ = TRANSITION_STRUCT.WININ;
+ REG_WINOUT = TRANSITION_STRUCT.WINOUT;
+ REG_WIN0H = TRANSITION_STRUCT.field_6;
+ REG_WIN0V = TRANSITION_STRUCT.WIN0V;
+}
+
+static void HBlankCB_Phase2_Transition_WhiteFade(void)
+{
+ REG_BLDY = gUnknown_03004DE0[1][REG_VCOUNT];
+}
+
+static void sub_811CFD0(struct Sprite* sprite)
+{
+ if (sprite->data5)
+ {
+ sprite->data5--;
+ if (sprite->data6)
+ TRANSITION_STRUCT.VBlank_DMA = 1;
+ }
+ else
+ {
+ u16 i;
+ u16* ptr1 = &gUnknown_03004DE0[0][sprite->pos1.y];
+ u16* ptr2 = &gUnknown_03004DE0[0][sprite->pos1.y + 160];
+ for (i = 0; i < 20; i++)
+ {
+ ptr1[i] = sprite->data0 >> 8;
+ ptr2[i] = (u8)(sprite->pos1.x);
+ }
+ if (sprite->pos1.x == 0 && sprite->data0 == 0x1000)
+ sprite->data1 = 1;
+
+ sprite->pos1.x -= 16;
+ sprite->data0 += 0x80;
+
+ if (sprite->pos1.x < 0)
+ sprite->pos1.x = 0;
+ if (sprite->data0 > 0x1000)
+ sprite->data0 = 0x1000;
+
+ if (sprite->data6)
+ TRANSITION_STRUCT.VBlank_DMA = 1;
+
+ if (sprite->data1)
+ {
+ if (sprite->data6 == 0 || (TRANSITION_STRUCT.field_20 > 6 && sprite->data2++ > 7))
+ {
+ TRANSITION_STRUCT.field_20++;
+ DestroySprite(sprite);
+ }
+ }
+ }
+}
+
+static void Phase2Task_Transition_GridSquares(u8 taskID)
+{
+ while (sPhase2_Transition_GridSquares_Funcs[gTasks[taskID].tState](&gTasks[taskID]));
+}
+
+static bool8 Phase2_Transition_GridSquares_Func1(struct Task* task)
+{
+ u16 *dst1, *dst2;
+
+ sub_811D6A8(&dst1, &dst2);
+ CpuSet(sShrinkingBoxTileset, dst2, 0x10);
+ CpuFill16(0xF000, dst1, 0x800);
+ LoadPalette(gFieldEffectObjectPalette10, 0xF0, 0x20);
+
+ task->tState++;
+ return FALSE;
+}
+
+static bool8 Phase2_Transition_GridSquares_Func2(struct Task* task)
+{
+ u16* dst1;
+
+ if (task->data[1] == 0)
+ {
+ sub_811D690(&dst1);
+ task->data[1] = 3;
+ task->data[2]++;
+ CpuSet(sShrinkingBoxTileset + (task->data[2] * 8), dst1, 0x10);
+ if (task->data[2] > 0xD)
+ {
+ task->tState++;
+ task->data[1] = 16;
+ }
+ }
+
+ task->data[1]--;
+ return FALSE;
+}
+
+static bool8 Phase2_Transition_GridSquares_Func3(struct Task* task)
+{
+ if (--task->data[1] == 0)
+ {
+ sub_811D6D4();
+ DestroyTask(FindTaskIdByFunc(Phase2Task_Transition_GridSquares));
+ }
+ return FALSE;
+}
+
+static void Phase2Task_Transition_Shards(u8 taskID)
+{
+ while (sPhase2_Transition_Shards_Funcs[gTasks[taskID].tState](&gTasks[taskID]));
+}
+
+static bool8 Phase2_Transition_Shards_Func1(struct Task* task)
+{
+ u16 i;
+
+ sub_811D658();
+ dp12_8087EA4();
+
+ TRANSITION_STRUCT.WININ = 0x3F;
+ TRANSITION_STRUCT.WINOUT = 0;
+ TRANSITION_STRUCT.WIN0V = 0xA0;
+
+ for (i = 0; i < 160; i++)
+ {
+ gUnknown_03004DE0[0][i] = 0xF0;
+ }
+
+ CpuSet(gUnknown_03004DE0[0], gUnknown_03004DE0[1], 0xA0);
+ SetVBlankCallback(VBlankCB_Phase2_Transition_Shards);
+
+ task->tState++;
+ return TRUE;
+}
+
+static bool8 Phase2_Transition_Shards_Func2(struct Task* task)
+{
+ sub_811D8FC(TRANSITION_STRUCT.data,
+ sUnknown_083FD8F4[task->data[1]][0],
+ sUnknown_083FD8F4[task->data[1]][1],
+ sUnknown_083FD8F4[task->data[1]][2],
+ sUnknown_083FD8F4[task->data[1]][3],
+ 1, 1);
+ task->data[2] = sUnknown_083FD8F4[task->data[1]][4];
+ task->tState++;
+ return TRUE;
+}
+
+static bool8 Phase2_Transition_Shards_Func3(struct Task* task)
+{
+ s16 i;
+ bool8 nextFunc;
+
+ TRANSITION_STRUCT.VBlank_DMA = 0;
+
+ for (i = 0, nextFunc = FALSE; i < 16; i++)
+ {
+ s16 r3 = gUnknown_03004DE0[0][TRANSITION_STRUCT.data[3]] >> 8;
+ s16 r4 = gUnknown_03004DE0[0][TRANSITION_STRUCT.data[3]] & 0xFF;
+ if (task->data[2] == 0)
+ {
+ if (r3 < TRANSITION_STRUCT.data[2])
+ r3 = TRANSITION_STRUCT.data[2];
+ if (r3 > r4)
+ r3 = r4;
+ }
+ else
+ {
+ if (r4 > TRANSITION_STRUCT.data[2])
+ r4 = TRANSITION_STRUCT.data[2];
+ if (r4 <= r3)
+ r4 = r3;
+ }
+ gUnknown_03004DE0[0][TRANSITION_STRUCT.data[3]] = (r4) | (r3 << 8);
+ if (nextFunc)
+ {
+ task->tState++;
+ break;
+ }
+ else
+ nextFunc = sub_811D978(TRANSITION_STRUCT.data, 1, 1);
+ }
+
+ TRANSITION_STRUCT.VBlank_DMA++;
+ return FALSE;
+}
+
+static bool8 Phase2_Transition_Shards_Func4(struct Task* task)
+{
+ if (++task->data[1] < 7)
+ {
+ task->tState++;
+ task->data[3] = sUnknown_083FD93A[task->data[1] - 1];
+ return TRUE;
+ }
+ else
+ {
+ DmaStop(0);
+ sub_811D6D4();
+ DestroyTask(FindTaskIdByFunc(Phase2Task_Transition_Shards));
+ return FALSE;
+ }
+}
+
+static bool8 Phase2_Transition_Shards_Func5(struct Task* task)
+{
+ if (--task->data[3] == 0)
+ {
+ task->tState = 1;
+ return TRUE;
+ }
+ else
+ return FALSE;
+}
+
+static void VBlankCB_Phase2_Transition_Shards(void)
+{
+ DmaStop(0);
+ VBlankCB_BattleTransition();
+ if (TRANSITION_STRUCT.VBlank_DMA)
+ DmaCopy16(3, gUnknown_03004DE0[0], gUnknown_03004DE0[1], 320);
+ REG_WININ = TRANSITION_STRUCT.WININ;
+ REG_WINOUT = TRANSITION_STRUCT.WINOUT;
+ REG_WIN0V = TRANSITION_STRUCT.WIN0V;
+ REG_WIN0H = gUnknown_03004DE0[1][0];
+ DmaSet(0, gUnknown_03004DE0[1], &REG_WIN0H, 0xA2400001);
+}
+
+static void CreatePhase1Task(s16 a0, s16 a1, s16 a2, s16 a3, s16 a4)
+{
+ u8 taskID = CreateTask(Phase1_Task_RunFuncs, 3);
+ gTasks[taskID].data[1] = a0;
+ gTasks[taskID].data[2] = a1;
+ gTasks[taskID].data[3] = a2;
+ gTasks[taskID].data[4] = a3;
+ gTasks[taskID].data[5] = a4;
+ gTasks[taskID].data[6] = a0;
+}
+
+static bool8 sub_811D52C(void)
+{
+ if (FindTaskIdByFunc(Phase1_Task_RunFuncs) == 0xFF)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+static void Phase1_Task_RunFuncs(u8 taskID)
+{
+ while (sPhase1_TransitionAll_Funcs[gTasks[taskID].tState](&gTasks[taskID]));
+}
+
+static bool8 Phase1_TransitionAll_Func1(struct Task* task)
+{
+ if (task->data[6] == 0 || --task->data[6] == 0)
+ {
+ task->data[6] = task->data[1];
+ task->data[7] += task->data[4];
+ if (task->data[7] > 16)
+ task->data[7] = 16;
+ BlendPalettes(-1, task->data[7], 0x2D6B);
+ }
+ if (task->data[7] > 15)
+ {
+ task->tState++;
+ task->data[6] = task->data[2];
+ }
+ return FALSE;
+}
+
+static bool8 Phase1_TransitionAll_Func2(struct Task* task)
+{
+ if (task->data[6] == 0 || --task->data[6] == 0)
+ {
+ task->data[6] = task->data[2];
+ task->data[7] -= task->data[5];
+ if (task->data[7] < 0)
+ task->data[7] = 0;
+ BlendPalettes(-1, task->data[7], 0x2D6B);
+ }
+ if (task->data[7] == 0)
+ {
+ if (--task->data[3] == 0)
+ DestroyTask(FindTaskIdByFunc(Phase1_Task_RunFuncs));
+ else
+ {
+ task->data[6] = task->data[1];
+ task->tState = 0;
+ }
+ }
+ return FALSE;
+}
+
+static void sub_811D658(void)
+{
+ struct TransitionData* const* dummy = &sTransitionStructPtr;
+ memset(*dummy, 0, sizeof(struct TransitionData));
+ sub_8057B14(&TRANSITION_STRUCT.field_14, &TRANSITION_STRUCT.field_16);
+}
+
+static void VBlankCB_BattleTransition(void)
+{
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+}
+
+static void sub_811D690(u16** a0)
+{
+ u16 reg, *vram;
+
+ reg = REG_BG0CNT >> 2;
+ reg <<= 0xE;
+ vram = (u16*)(VRAM + reg);
+
+ *a0 = vram;
+}
+
+static void sub_811D6A8(u16** a0, u16** a1)
+{
+ u16 reg0, reg1, *vram0, *vram1;
+
+ reg0 = REG_BG0CNT >> 8;
+ reg1 = REG_BG0CNT >> 2;
+
+ reg0 <<= 0xB;
+ reg1 <<= 0xE;
+
+ vram0 = (u16*)(VRAM + reg0);
+ *a0 = vram0;
+
+ vram1 = (u16*)(VRAM + reg1);
+ *a1 = vram1;
+}
+
+static void sub_811D6D4(void)
+{
+ BlendPalettes(-1, 0x10, 0);
+}
+
+static void sub_811D6E8(s16* array, s16 sinAdd, s16 index, s16 indexIncrementer, s16 amplitude, s16 arrSize)
+{
+ u8 i;
+ for (i = 0; arrSize > 0; arrSize--, i++, index += indexIncrementer)
+ {
+ array[i] = sinAdd + Sin(0xFF & index, amplitude);
+ }
+}
+
+static void sub_811D764(u16* array, s16 a1, s16 a2, s16 a3)
+{
+ s16 i;
+
+ memset(array, 0xA, 160 * sizeof(s16));
+ for (i = 0; i < 64; i++)
+ {
+ s16 sinResult, cosResult;
+ s16 toStoreOrr, r2, r3, toStore, r7, r8;
+
+ sinResult = Sin(i, a3);
+ cosResult = Cos(i, a3);
+
+ toStoreOrr = a1 - sinResult;
+ toStore = a1 + sinResult;
+ r7 = a2 - cosResult;
+ r8 = a2 + cosResult;
+
+ if (toStoreOrr < 0)
+ toStoreOrr = 0;
+ if (toStore > 0xF0)
+ toStore = 0xF0;
+ if (r7 < 0)
+ r7 = 0;
+ if (r8 > 0x9F)
+ r8 = 0x9F;
+
+ toStore |= (toStoreOrr << 8);
+ array[r7] = toStore;
+ array[r8] = toStore;
+
+ cosResult = Cos(i + 1, a3);
+ r3 = a2 - cosResult;
+ r2 = a2 + cosResult;
+
+ if (r3 < 0)
+ r3 = 0;
+ if (r2 > 0x9F)
+ r2 = 0x9F;
+
+ while (r7 > r3)
+ array[--r7] = toStore;
+ while (r7 < r3)
+ array[++r7] = toStore;
+
+ while (r8 > r2)
+ array[--r8] = toStore;
+ while (r8 < r2)
+ array[++r8] = toStore;
+ }
+}
+
+static void sub_811D8FC(s16* data, s16 a1, s16 a2, s16 a3, s16 a4, s16 a5, s16 a6)
+{
+ data[0] = a1;
+ data[1] = a2;
+ data[2] = a1;
+ data[3] = a2;
+ data[4] = a3;
+ data[5] = a4;
+ data[6] = a5;
+ data[7] = a6;
+ data[8] = a3 - a1;
+ if (data[8] < 0)
+ {
+ data[8] = -data[8];
+ data[6] = -a5;
+ }
+ data[9] = a4 - a2;
+ if (data[9] < 0)
+ {
+ data[9] = -data[9];
+ data[7] = -a6;
+ }
+ data[10] = 0;
+}
+
+static bool8 sub_811D978(s16* data, bool8 a1, bool8 a2)
+{
+ u8 var;
+ if (data[8] > data[9])
+ {
+ data[2] += data[6];
+ data[10] += data[9];
+ if (data[10] > data[8])
+ {
+ data[3] += data[7];
+ data[10] -= data[8];
+ }
+ }
+ else
+ {
+ data[3] += data[7];
+ data[10] += data[8];
+ if (data[10] > data[9])
+ {
+ data[2] += data[6];
+ data[10] -= data[9];
+ }
+ }
+ var = 0;
+ if ((data[6] > 0 && data[2] >= data[4]) || (data[6] < 0 && data[2] <= data[4]))
+ {
+ var++;
+ if (a1)
+ data[2] = data[4];
+ }
+ if ((data[7] > 0 && data[3] >= data[5]) || (data[7] < 0 && data[3] <= data[5]))
+ {
+ var++;
+ if (a2)
+ data[3] = data[5];
+ }
+ if (var == 2)
+ return TRUE;
+ else
+ return FALSE;
+}
diff --git a/src/berry.c b/src/berry.c
index fa15672e7..d82eab2a6 100644
--- a/src/berry.c
+++ b/src/berry.c
@@ -974,7 +974,7 @@ const struct Berry gBerries[] =
const struct BerryTree gBlankBerryTree = {0};
-extern u8 BerryTreeScript;
+extern u8 S_BerryTree[];
extern u16 gScriptLastTalked;
extern u16 gSpecialVar_0x8004;
extern u16 gSpecialVar_0x8005;
@@ -1078,7 +1078,7 @@ bool32 FieldObjectInteractionWaterBerryTree(void)
bool8 IsPlayerFacingPlantedBerryTree(void)
{
- if (GetFieldObjectScriptPointerForComparison() == &BerryTreeScript
+ if (GetFieldObjectScriptPointerForComparison() == S_BerryTree
&& GetStageByBerryTreeId(FieldObjectGetBerryTreeId(gSelectedMapObject)) == 0)
return TRUE;
else
@@ -1087,7 +1087,7 @@ bool8 IsPlayerFacingPlantedBerryTree(void)
bool8 TryToWaterBerryTree(void)
{
- if (GetFieldObjectScriptPointerForComparison() != &BerryTreeScript)
+ if (GetFieldObjectScriptPointerForComparison() != S_BerryTree)
return FALSE;
else
return FieldObjectInteractionWaterBerryTree();
diff --git a/src/berry_blender.c b/src/berry_blender.c
index d9753c52a..7ffcc5185 100644
--- a/src/berry_blender.c
+++ b/src/berry_blender.c
@@ -12,7 +12,7 @@
#include "string_util.h"
#include "link.h"
#include "task.h"
-#include "rom4.h"
+#include "overworld.h"
#include "item.h"
#include "items.h"
#include "rng.h"
@@ -2156,223 +2156,223 @@ __attribute__((naked))
static void Blender_CalculatePokeblock(struct BlenderBerry* berries, struct Pokeblock* pokeblock, u8 a2, u8* flavours, u16 a4)
{
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, 0x10\n\
- str r0, [sp]\n\
- mov r8, r1\n\
- str r3, [sp, 0x4]\n\
- ldr r0, [sp, 0x30]\n\
- lsls r2, 24\n\
- lsrs r2, 24\n\
- mov r9, r2\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- str r0, [sp, 0x8]\n\
- ldr r7, _080505DC @ =gUnknown_03000510\n\
- adds r2, r7, 0\n\
- movs r1, 0\n\
- adds r0, r7, 0\n\
- adds r0, 0xA\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\
+ str r0, [sp]\n\
+ mov r8, r1\n\
+ str r3, [sp, 0x4]\n\
+ ldr r0, [sp, 0x30]\n\
+ lsls r2, 24\n\
+ lsrs r2, 24\n\
+ mov r9, r2\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ str r0, [sp, 0x8]\n\
+ ldr r7, _080505DC @ =gUnknown_03000510\n\
+ adds r2, r7, 0\n\
+ movs r1, 0\n\
+ adds r0, r7, 0\n\
+ adds r0, 0xA\n\
_0805054A:\n\
- strh r1, [r0]\n\
- subs r0, 0x2\n\
- cmp r0, r2\n\
- bge _0805054A\n\
- movs r6, 0\n\
- cmp r6, r9\n\
- bge _08050580\n\
- ldr r0, _080505DC @ =gUnknown_03000510\n\
- mov r12, r0\n\
- ldr r5, [sp]\n\
- adds r5, 0x9\n\
+ strh r1, [r0]\n\
+ subs r0, 0x2\n\
+ cmp r0, r2\n\
+ bge _0805054A\n\
+ movs r6, 0\n\
+ cmp r6, r9\n\
+ bge _08050580\n\
+ ldr r0, _080505DC @ =gUnknown_03000510\n\
+ mov r12, r0\n\
+ ldr r5, [sp]\n\
+ adds r5, 0x9\n\
_08050560:\n\
- movs r3, 0\n\
- adds r4, r5, 0\n\
- mov r2, r12\n\
+ movs r3, 0\n\
+ adds r4, r5, 0\n\
+ mov r2, r12\n\
_08050566:\n\
- adds r1, r4, r3\n\
- ldrh r0, [r2]\n\
- ldrb r1, [r1]\n\
- adds r0, r1\n\
- strh r0, [r2]\n\
- adds r2, 0x2\n\
- adds r3, 0x1\n\
- cmp r3, 0x5\n\
- ble _08050566\n\
- adds r5, 0x10\n\
- adds r6, 0x1\n\
- cmp r6, r9\n\
- blt _08050560\n\
+ adds r1, r4, r3\n\
+ ldrh r0, [r2]\n\
+ ldrb r1, [r1]\n\
+ adds r0, r1\n\
+ strh r0, [r2]\n\
+ adds r2, 0x2\n\
+ adds r3, 0x1\n\
+ cmp r3, 0x5\n\
+ ble _08050566\n\
+ adds r5, 0x10\n\
+ adds r6, 0x1\n\
+ cmp r6, r9\n\
+ blt _08050560\n\
_08050580:\n\
- movs r1, 0\n\
- ldrsh r3, [r7, r1]\n\
- ldrh r0, [r7]\n\
- ldrh r1, [r7, 0x2]\n\
- subs r0, r1\n\
- strh r0, [r7]\n\
- ldrh r0, [r7, 0x4]\n\
- subs r1, r0\n\
- strh r1, [r7, 0x2]\n\
- ldrh r1, [r7, 0x6]\n\
- subs r0, r1\n\
- strh r0, [r7, 0x4]\n\
- ldrh r0, [r7, 0x8]\n\
- subs r1, r0\n\
- strh r1, [r7, 0x6]\n\
- subs r0, r3\n\
- strh r0, [r7, 0x8]\n\
- movs r3, 0\n\
- movs r2, 0\n\
- adds r1, r7, 0\n\
- movs r6, 0x4\n\
+ movs r1, 0\n\
+ ldrsh r3, [r7, r1]\n\
+ ldrh r0, [r7]\n\
+ ldrh r1, [r7, 0x2]\n\
+ subs r0, r1\n\
+ strh r0, [r7]\n\
+ ldrh r0, [r7, 0x4]\n\
+ subs r1, r0\n\
+ strh r1, [r7, 0x2]\n\
+ ldrh r1, [r7, 0x6]\n\
+ subs r0, r1\n\
+ strh r0, [r7, 0x4]\n\
+ ldrh r0, [r7, 0x8]\n\
+ subs r1, r0\n\
+ strh r1, [r7, 0x6]\n\
+ subs r0, r3\n\
+ strh r0, [r7, 0x8]\n\
+ movs r3, 0\n\
+ movs r2, 0\n\
+ adds r1, r7, 0\n\
+ movs r6, 0x4\n\
_080505AA:\n\
- movs r4, 0\n\
- ldrsh r0, [r1, r4]\n\
- cmp r0, 0\n\
- bge _080505B6\n\
- strh r2, [r1]\n\
- adds r3, 0x1\n\
+ movs r4, 0\n\
+ ldrsh r0, [r1, r4]\n\
+ cmp r0, 0\n\
+ bge _080505B6\n\
+ strh r2, [r1]\n\
+ adds r3, 0x1\n\
_080505B6:\n\
- adds r1, 0x2\n\
- subs r6, 0x1\n\
- cmp r6, 0\n\
- bge _080505AA\n\
- lsls r0, r3, 24\n\
- lsrs r0, 24\n\
- mov r10, r0\n\
- movs r4, 0\n\
- ldr r1, _080505DC @ =gUnknown_03000510\n\
- movs r6, 0x4\n\
+ adds r1, 0x2\n\
+ subs r6, 0x1\n\
+ cmp r6, 0\n\
+ bge _080505AA\n\
+ lsls r0, r3, 24\n\
+ lsrs r0, 24\n\
+ mov r10, r0\n\
+ movs r4, 0\n\
+ ldr r1, _080505DC @ =gUnknown_03000510\n\
+ movs r6, 0x4\n\
_080505CA:\n\
- ldrh r2, [r1]\n\
- movs r5, 0\n\
- ldrsh r0, [r1, r5]\n\
- cmp r0, 0\n\
- ble _080505E4\n\
- cmp r0, r3\n\
- bge _080505E0\n\
- strh r4, [r1]\n\
- b _080505E4\n\
- .align 2, 0\n\
+ ldrh r2, [r1]\n\
+ movs r5, 0\n\
+ ldrsh r0, [r1, r5]\n\
+ cmp r0, 0\n\
+ ble _080505E4\n\
+ cmp r0, r3\n\
+ bge _080505E0\n\
+ strh r4, [r1]\n\
+ b _080505E4\n\
+ .align 2, 0\n\
_080505DC: .4byte gUnknown_03000510\n\
_080505E0:\n\
- subs r0, r2, r3\n\
- strh r0, [r1]\n\
+ subs r0, r2, r3\n\
+ strh r0, [r1]\n\
_080505E4:\n\
- adds r1, 0x2\n\
- subs r6, 0x1\n\
- cmp r6, 0\n\
- bge _080505CA\n\
- ldr r1, _080506C4 @ =gUnknown_03000510\n\
- ldr r2, _080506C8 @ =gUnknown_03000530\n\
- movs r6, 0x4\n\
+ adds r1, 0x2\n\
+ subs r6, 0x1\n\
+ cmp r6, 0\n\
+ bge _080505CA\n\
+ ldr r1, _080506C4 @ =gUnknown_03000510\n\
+ ldr r2, _080506C8 @ =gUnknown_03000530\n\
+ movs r6, 0x4\n\
_080505F2:\n\
- movs r3, 0\n\
- ldrsh r0, [r1, r3]\n\
- stm r2!, {r0}\n\
- adds r1, 0x2\n\
- subs r6, 0x1\n\
- cmp r6, 0\n\
- bge _080505F2\n\
- ldr r1, _080506CC @ =0x0000014d\n\
- ldr r0, [sp, 0x8]\n\
- bl __udivsi3\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- adds r3, r0, 0\n\
- adds r3, 0x64\n\
- ldr r4, _080506D0 @ =gUnknown_0300055C\n\
- str r3, [r4]\n\
- movs r6, 0x4\n\
+ movs r3, 0\n\
+ ldrsh r0, [r1, r3]\n\
+ stm r2!, {r0}\n\
+ adds r1, 0x2\n\
+ subs r6, 0x1\n\
+ cmp r6, 0\n\
+ bge _080505F2\n\
+ ldr r1, _080506CC @ =0x0000014d\n\
+ ldr r0, [sp, 0x8]\n\
+ bl __udivsi3\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ adds r3, r0, 0\n\
+ adds r3, 0x64\n\
+ ldr r4, _080506D0 @ =gUnknown_0300055C\n\
+ str r3, [r4]\n\
+ movs r6, 0x4\n\
_08050616:\n\
- movs r0, 0\n\
- ldrsh r5, [r7, r0]\n\
- adds r0, r5, 0\n\
- muls r0, r3\n\
- movs r1, 0xA\n\
- str r3, [sp, 0xC]\n\
- bl __divsi3\n\
- adds r5, r0, 0\n\
- movs r1, 0xA\n\
- bl __modsi3\n\
- adds r4, r0, 0\n\
- adds r0, r5, 0\n\
- movs r1, 0xA\n\
- bl __divsi3\n\
- adds r5, r0, 0\n\
- ldr r3, [sp, 0xC]\n\
- cmp r4, 0x4\n\
- ble _08050642\n\
- adds r5, 0x1\n\
+ movs r0, 0\n\
+ ldrsh r5, [r7, r0]\n\
+ adds r0, r5, 0\n\
+ muls r0, r3\n\
+ movs r1, 0xA\n\
+ str r3, [sp, 0xC]\n\
+ bl __divsi3\n\
+ adds r5, r0, 0\n\
+ movs r1, 0xA\n\
+ bl __modsi3\n\
+ adds r4, r0, 0\n\
+ adds r0, r5, 0\n\
+ movs r1, 0xA\n\
+ bl __divsi3\n\
+ adds r5, r0, 0\n\
+ ldr r3, [sp, 0xC]\n\
+ cmp r4, 0x4\n\
+ ble _08050642\n\
+ adds r5, 0x1\n\
_08050642:\n\
- strh r5, [r7]\n\
- adds r7, 0x2\n\
- subs r6, 0x1\n\
- cmp r6, 0\n\
- bge _08050616\n\
- ldr r1, _080506C4 @ =gUnknown_03000510\n\
- ldr r2, _080506D4 @ =gUnknown_03000548\n\
- movs r6, 0x4\n\
+ strh r5, [r7]\n\
+ adds r7, 0x2\n\
+ subs r6, 0x1\n\
+ cmp r6, 0\n\
+ bge _08050616\n\
+ ldr r1, _080506C4 @ =gUnknown_03000510\n\
+ ldr r2, _080506D4 @ =gUnknown_03000548\n\
+ movs r6, 0x4\n\
_08050652:\n\
- movs r3, 0\n\
- ldrsh r0, [r1, r3]\n\
- stm r2!, {r0}\n\
- adds r1, 0x2\n\
- subs r6, 0x1\n\
- cmp r6, 0\n\
- bge _08050652\n\
- ldr r4, _080506C4 @ =gUnknown_03000510\n\
- ldr r0, [sp]\n\
- adds r1, r4, 0\n\
- mov r2, r9\n\
- mov r3, r10\n\
- bl Blender_GetPokeblockColor\n\
- mov r5, r8\n\
- strb r0, [r5]\n\
- movs r1, 0xA\n\
- ldrsh r0, [r4, r1]\n\
- mov r1, r9\n\
- bl __divsi3\n\
- mov r3, r9\n\
- subs r0, r3\n\
- strh r0, [r4, 0xA]\n\
- lsls r0, 16\n\
- cmp r0, 0\n\
- bge _0805068C\n\
- movs r0, 0\n\
- strh r0, [r4, 0xA]\n\
+ movs r3, 0\n\
+ ldrsh r0, [r1, r3]\n\
+ stm r2!, {r0}\n\
+ adds r1, 0x2\n\
+ subs r6, 0x1\n\
+ cmp r6, 0\n\
+ bge _08050652\n\
+ ldr r4, _080506C4 @ =gUnknown_03000510\n\
+ ldr r0, [sp]\n\
+ adds r1, r4, 0\n\
+ mov r2, r9\n\
+ mov r3, r10\n\
+ bl Blender_GetPokeblockColor\n\
+ mov r5, r8\n\
+ strb r0, [r5]\n\
+ movs r1, 0xA\n\
+ ldrsh r0, [r4, r1]\n\
+ mov r1, r9\n\
+ bl __divsi3\n\
+ mov r3, r9\n\
+ subs r0, r3\n\
+ strh r0, [r4, 0xA]\n\
+ lsls r0, 16\n\
+ cmp r0, 0\n\
+ bge _0805068C\n\
+ movs r0, 0\n\
+ strh r0, [r4, 0xA]\n\
_0805068C:\n\
- mov r5, r8\n\
- ldrb r0, [r5]\n\
- cmp r0, 0xC\n\
- bne _080506E6\n\
- bl Random\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- movs r1, 0xA\n\
- bl __umodsi3\n\
- lsls r0, 16\n\
- lsrs r3, r0, 16\n\
- movs r6, 0\n\
- ldr r0, _080506D8 @ =gUnknown_082165DF\n\
- adds r0, r3, r0\n\
- ldrb r0, [r0]\n\
- adds r1, r4, 0\n\
- movs r4, 0x1\n\
- movs r3, 0x2\n\
+ mov r5, r8\n\
+ ldrb r0, [r5]\n\
+ cmp r0, 0xC\n\
+ bne _080506E6\n\
+ bl Random\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ movs r1, 0xA\n\
+ bl __umodsi3\n\
+ lsls r0, 16\n\
+ lsrs r3, r0, 16\n\
+ movs r6, 0\n\
+ ldr r0, _080506D8 @ =gUnknown_082165DF\n\
+ adds r0, r3, r0\n\
+ ldrb r0, [r0]\n\
+ adds r1, r4, 0\n\
+ movs r4, 0x1\n\
+ movs r3, 0x2\n\
_080506B4:\n\
- adds r2, r0, 0\n\
- asrs r2, r6\n\
- ands r2, r4\n\
- cmp r2, 0\n\
- beq _080506DC\n\
- strh r3, [r1]\n\
- b _080506DE\n\
- .align 2, 0\n\
+ adds r2, r0, 0\n\
+ asrs r2, r6\n\
+ ands r2, r4\n\
+ cmp r2, 0\n\
+ beq _080506DC\n\
+ strh r3, [r1]\n\
+ b _080506DE\n\
+ .align 2, 0\n\
_080506C4: .4byte gUnknown_03000510\n\
_080506C8: .4byte gUnknown_03000530\n\
_080506CC: .4byte 0x0000014d\n\
@@ -2380,61 +2380,61 @@ _080506D0: .4byte gUnknown_0300055C\n\
_080506D4: .4byte gUnknown_03000548\n\
_080506D8: .4byte gUnknown_082165DF\n\
_080506DC:\n\
- strh r2, [r1]\n\
+ strh r2, [r1]\n\
_080506DE:\n\
- adds r1, 0x2\n\
- adds r6, 0x1\n\
- cmp r6, 0x4\n\
- ble _080506B4\n\
+ adds r1, 0x2\n\
+ adds r6, 0x1\n\
+ cmp r6, 0x4\n\
+ ble _080506B4\n\
_080506E6:\n\
- ldr r7, _08050740 @ =gUnknown_03000510\n\
- movs r2, 0xFF\n\
- adds r1, r7, 0\n\
- movs r6, 0x5\n\
+ ldr r7, _08050740 @ =gUnknown_03000510\n\
+ movs r2, 0xFF\n\
+ adds r1, r7, 0\n\
+ movs r6, 0x5\n\
_080506EE:\n\
- movs r3, 0\n\
- ldrsh r0, [r1, r3]\n\
- cmp r0, 0xFF\n\
- ble _080506F8\n\
- strh r2, [r1]\n\
+ movs r3, 0\n\
+ ldrsh r0, [r1, r3]\n\
+ cmp r0, 0xFF\n\
+ ble _080506F8\n\
+ strh r2, [r1]\n\
_080506F8:\n\
- adds r1, 0x2\n\
- subs r6, 0x1\n\
- cmp r6, 0\n\
- bge _080506EE\n\
- ldrh r0, [r7]\n\
- mov r4, r8\n\
- strb r0, [r4, 0x1]\n\
- ldrh r0, [r7, 0x2]\n\
- strb r0, [r4, 0x2]\n\
- ldrh r0, [r7, 0x4]\n\
- strb r0, [r4, 0x3]\n\
- ldrh r0, [r7, 0x6]\n\
- strb r0, [r4, 0x4]\n\
- ldrh r0, [r7, 0x8]\n\
- strb r0, [r4, 0x5]\n\
- ldrh r0, [r7, 0xA]\n\
- strb r0, [r4, 0x6]\n\
- movs r6, 0\n\
- adds r2, r7, 0\n\
+ adds r1, 0x2\n\
+ subs r6, 0x1\n\
+ cmp r6, 0\n\
+ bge _080506EE\n\
+ ldrh r0, [r7]\n\
+ mov r4, r8\n\
+ strb r0, [r4, 0x1]\n\
+ ldrh r0, [r7, 0x2]\n\
+ strb r0, [r4, 0x2]\n\
+ ldrh r0, [r7, 0x4]\n\
+ strb r0, [r4, 0x3]\n\
+ ldrh r0, [r7, 0x6]\n\
+ strb r0, [r4, 0x4]\n\
+ ldrh r0, [r7, 0x8]\n\
+ strb r0, [r4, 0x5]\n\
+ ldrh r0, [r7, 0xA]\n\
+ strb r0, [r4, 0x6]\n\
+ movs r6, 0\n\
+ adds r2, r7, 0\n\
_0805071E:\n\
- ldr r5, [sp, 0x4]\n\
- adds r1, r5, r6\n\
- ldrh r0, [r2]\n\
- strb r0, [r1]\n\
- adds r2, 0x2\n\
- adds r6, 0x1\n\
- cmp r6, 0x5\n\
- ble _0805071E\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\
- .align 2, 0\n\
+ ldr r5, [sp, 0x4]\n\
+ adds r1, r5, r6\n\
+ ldrh r0, [r2]\n\
+ strb r0, [r1]\n\
+ adds r2, 0x2\n\
+ adds r6, 0x1\n\
+ cmp r6, 0x5\n\
+ ble _0805071E\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\
+ .align 2, 0\n\
_08050740: .4byte gUnknown_03000510\n\
.syntax divided");
}
diff --git a/src/berry_tag_screen.c b/src/berry_tag_screen.c
index 50db5388c..1413a02ca 100644
--- a/src/berry_tag_screen.c
+++ b/src/berry_tag_screen.c
@@ -10,7 +10,7 @@
#include "menu.h"
#include "menu_helpers.h"
#include "palette.h"
-#include "rom4.h"
+#include "overworld.h"
#include "songs.h"
#include "sound.h"
#include "sprite.h"
@@ -363,30 +363,30 @@ static void sub_81466A0(void)
static void sub_81466E8(u8 taskId, s8 direction)
{
- u8 berryPocket = 3;
- s16 *data = gTasks[taskId].data;
-
- if (gBagPocketScrollStates[berryPocket].scrollTop + gBagPocketScrollStates[berryPocket].cursorPos == 0
- && direction < 0)
- return;
- if (gBagPocketScrollStates[berryPocket].scrollTop + gBagPocketScrollStates[berryPocket].cursorPos + 1 == gBagPocketScrollStates[berryPocket].numSlots
- && direction > 0)
- return;
-
- PlaySE(SE_SELECT);
- if (gBagPocketScrollStates[berryPocket].scrollTop + gBagPocketScrollStates[berryPocket].cursorPos + direction < 0)
- data[1] = -(gBagPocketScrollStates[berryPocket].scrollTop + gBagPocketScrollStates[berryPocket].cursorPos);
- else if (gBagPocketScrollStates[berryPocket].scrollTop + gBagPocketScrollStates[berryPocket].cursorPos + direction >= gBagPocketScrollStates[berryPocket].numSlots)
- data[1] = gBagPocketScrollStates[berryPocket].numSlots - gBagPocketScrollStates[berryPocket].scrollTop - gBagPocketScrollStates[berryPocket].cursorPos - 1;
- else
- data[1] = direction;
-
- gTasks[taskId].func = sub_8146798;
-
- if (direction < 0)
- data[0] = -16;
- else
- data[0] = 16;
+ u8 berryPocket = 3;
+ s16 *data = gTasks[taskId].data;
+
+ if (gBagPocketScrollStates[berryPocket].scrollTop + gBagPocketScrollStates[berryPocket].cursorPos == 0
+ && direction < 0)
+ return;
+ if (gBagPocketScrollStates[berryPocket].scrollTop + gBagPocketScrollStates[berryPocket].cursorPos + 1 == gBagPocketScrollStates[berryPocket].numSlots
+ && direction > 0)
+ return;
+
+ PlaySE(SE_SELECT);
+ if (gBagPocketScrollStates[berryPocket].scrollTop + gBagPocketScrollStates[berryPocket].cursorPos + direction < 0)
+ data[1] = -(gBagPocketScrollStates[berryPocket].scrollTop + gBagPocketScrollStates[berryPocket].cursorPos);
+ else if (gBagPocketScrollStates[berryPocket].scrollTop + gBagPocketScrollStates[berryPocket].cursorPos + direction >= gBagPocketScrollStates[berryPocket].numSlots)
+ data[1] = gBagPocketScrollStates[berryPocket].numSlots - gBagPocketScrollStates[berryPocket].scrollTop - gBagPocketScrollStates[berryPocket].cursorPos - 1;
+ else
+ data[1] = direction;
+
+ gTasks[taskId].func = sub_8146798;
+
+ if (direction < 0)
+ data[0] = -16;
+ else
+ data[0] = 16;
}
@@ -411,36 +411,36 @@ static void sub_8146798(u8 taskId)
static void sub_8146810(s8 berry)
{
- u8 berryPocket = 3;
-
- if (berry > 0)
- {
- if (gBagPocketScrollStates[berryPocket].cursorPos + berry > 7)
- {
- gBagPocketScrollStates[berryPocket].scrollTop += gBagPocketScrollStates[berryPocket].cursorPos - 7 + berry;
- gBagPocketScrollStates[berryPocket].cursorPos = 7;
- }
- else
- {
- gBagPocketScrollStates[berryPocket].cursorPos += berry;
- }
- }
- else
- {
- if (gBagPocketScrollStates[berryPocket].cursorPos + berry < 0)
- {
- gBagPocketScrollStates[berryPocket].scrollTop += gBagPocketScrollStates[berryPocket].cursorPos + berry;
- gBagPocketScrollStates[berryPocket].cursorPos = 0;
- }
- else
- {
- gBagPocketScrollStates[berryPocket].cursorPos += berry;
- }
- }
- gScriptItemId = gCurrentBagPocketItemSlots[gBagPocketScrollStates[berryPocket].scrollTop + gBagPocketScrollStates[berryPocket].cursorPos].itemId;
- DestroySprite(&gSprites[gUnknown_0203932C]);
- sub_81466A0();
- sub_80A7DD4();
+ u8 berryPocket = 3;
+
+ if (berry > 0)
+ {
+ if (gBagPocketScrollStates[berryPocket].cursorPos + berry > 7)
+ {
+ gBagPocketScrollStates[berryPocket].scrollTop += gBagPocketScrollStates[berryPocket].cursorPos - 7 + berry;
+ gBagPocketScrollStates[berryPocket].cursorPos = 7;
+ }
+ else
+ {
+ gBagPocketScrollStates[berryPocket].cursorPos += berry;
+ }
+ }
+ else
+ {
+ if (gBagPocketScrollStates[berryPocket].cursorPos + berry < 0)
+ {
+ gBagPocketScrollStates[berryPocket].scrollTop += gBagPocketScrollStates[berryPocket].cursorPos + berry;
+ gBagPocketScrollStates[berryPocket].cursorPos = 0;
+ }
+ else
+ {
+ gBagPocketScrollStates[berryPocket].cursorPos += berry;
+ }
+ }
+ gScriptItemId = gCurrentBagPocketItemSlots[gBagPocketScrollStates[berryPocket].scrollTop + gBagPocketScrollStates[berryPocket].cursorPos].itemId;
+ DestroySprite(&gSprites[gUnknown_0203932C]);
+ sub_81466A0();
+ sub_80A7DD4();
}
static void sub_81468BC(void)
diff --git a/src/bike.c b/src/bike.c
index 58a4f38f4..dae86bd88 100644
--- a/src/bike.c
+++ b/src/bike.c
@@ -6,12 +6,10 @@
#include "flags.h"
#include "global.fieldmap.h"
#include "metatile_behavior.h"
-#include "rom4.h"
+#include "overworld.h"
#include "songs.h"
#include "sound.h"
-extern u8 sub_80608A4(u8);
-
extern u8 gUnknown_02039250;
extern u8 gUnknown_02039251;
extern u8 gUnknown_0202E854;
@@ -944,7 +942,7 @@ void GetOnOffBike(u8 var)
{
SetPlayerAvatarTransitionFlags(var);
sav1_set_battle_music_maybe(BGM_CYCLING);
- sub_8053FB0(BGM_CYCLING);
+ Overworld_ChangeMusicTo(BGM_CYCLING);
}
}
diff --git a/src/braille_puzzles.c b/src/braille_puzzles.c
index b8d7cd386..b11b1ff3a 100644
--- a/src/braille_puzzles.c
+++ b/src/braille_puzzles.c
@@ -6,6 +6,7 @@
#include "fieldmap.h"
#include "flags.h"
#include "main.h"
+#include "map_constants.h"
#include "map_obj_lock.h"
#include "menu.h"
#include "rom6.h"
@@ -19,11 +20,13 @@
extern u8 gPlayerPartyCount;
extern u8 gLastFieldPokeMenuOpened;
-extern u8 gIslandCave_EventScript_OpenRegiiceChamber[]; // regiice event script
+extern u8 S_OpenRegiceChamber[]; // regiice event script
bool8 ShouldDoBrailleDigEffect(void)
{
- if (!FlagGet(SYS_BRAILLE_DIG) && (gSaveBlock1.location.mapGroup == 0x18 && gSaveBlock1.location.mapNum == 0x47))
+ if (!FlagGet(SYS_BRAILLE_DIG)
+ && (gSaveBlock1.location.mapGroup == MAP_GROUP_SEALED_CHAMBER_OUTER_ROOM
+ && gSaveBlock1.location.mapNum == MAP_ID_SEALED_CHAMBER_OUTER_ROOM))
{
if (gSaveBlock1.pos.x == 10 && gSaveBlock1.pos.y == 3)
return TRUE;
@@ -52,10 +55,11 @@ void DoBrailleDigEffect(void)
bool8 CheckRelicanthWailord(void)
{
+ // First comes Relicanth.
if (GetMonData(&gPlayerParty, MON_DATA_SPECIES2, 0) == SPECIES_RELICANTH)
{
CalculatePlayerPartyCount();
-
+ // Last comes Wailord
if (GetMonData(&gPlayerParty[gPlayerPartyCount - 1], MON_DATA_SPECIES2, 0) == SPECIES_WAILORD)
return TRUE;
}
@@ -64,7 +68,7 @@ bool8 CheckRelicanthWailord(void)
bool8 ShouldDoBrailleStrengthEffect(void)
{
- if (!FlagGet(SYS_BRAILLE_STRENGTH) && (gSaveBlock1.location.mapGroup == 0x18 && gSaveBlock1.location.mapNum == 0x6))
+ if (!FlagGet(SYS_BRAILLE_STRENGTH) && (gSaveBlock1.location.mapGroup == MAP_GROUP_DESERT_RUINS && gSaveBlock1.location.mapNum == MAP_ID_DESERT_RUINS))
{
if (gSaveBlock1.pos.x == 10 && gSaveBlock1.pos.y == 23)
return TRUE;
@@ -94,7 +98,7 @@ void DoBrailleStrengthEffect(void)
bool8 ShouldDoBrailleFlyEffect(void)
{
- if (!FlagGet(SYS_BRAILLE_FLY) && (gSaveBlock1.location.mapGroup == 0x18 && gSaveBlock1.location.mapNum == 0x44))
+ if (!FlagGet(SYS_BRAILLE_FLY) && (gSaveBlock1.location.mapGroup == MAP_GROUP_ANCIENT_TOMB && gSaveBlock1.location.mapNum == MAP_ID_ANCIENT_TOMB))
{
if (gSaveBlock1.pos.x == 8 && gSaveBlock1.pos.y == 25)
return TRUE;
@@ -105,8 +109,8 @@ bool8 ShouldDoBrailleFlyEffect(void)
void DoBrailleFlyEffect(void)
{
- gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened;
- FieldEffectStart(0x3C);
+ gFieldEffectArguments[0] = gLastFieldPokeMenuOpened;
+ FieldEffectStart(FLDEFF_USE_FLY_ANCIENT_TOMB);
}
bool8 FldEff_UseFlyAncientTomb(void)
@@ -120,7 +124,7 @@ bool8 FldEff_UseFlyAncientTomb(void)
void UseFlyAncientTomb_Callback(void)
{
- FieldEffectActiveListRemove(0x3C);
+ FieldEffectActiveListRemove(FLDEFF_USE_FLY_ANCIENT_TOMB);
UseFlyAncientTomb_Finish();
}
@@ -158,7 +162,7 @@ void Task_BrailleWait(u8 taskId)
if (BrailleWait_CheckButtonPress() != FALSE)
{
MenuZeroFillScreen();
- PlaySE(5);
+ PlaySE(SE_SELECT);
data[0] = 2;
}
else
@@ -191,7 +195,7 @@ void Task_BrailleWait(u8 taskId)
break;
case 4:
sub_8064E2C();
- ScriptContext1_SetupScript(gIslandCave_EventScript_OpenRegiiceChamber);
+ ScriptContext1_SetupScript(S_OpenRegiceChamber);
DestroyTask(taskId);
break;
}
@@ -199,14 +203,14 @@ void Task_BrailleWait(u8 taskId)
bool32 BrailleWait_CheckButtonPress(void)
{
- u16 var = 0xFF;
+ u16 keyMask = A_BUTTON | B_BUTTON | START_BUTTON | SELECT_BUTTON | DPAD_ANY;
- if (gSaveBlock2.optionsButtonMode == 1)
- var |= 0x300;
- if (gSaveBlock2.optionsButtonMode == 2)
- var |= 0x200;
+ if (gSaveBlock2.optionsButtonMode == OPTIONS_BUTTON_MODE_LR)
+ keyMask |= L_BUTTON | R_BUTTON;
+ if (gSaveBlock2.optionsButtonMode == OPTIONS_BUTTON_MODE_L_EQUALS_A)
+ keyMask |= L_BUTTON;
- if ((var & gMain.newKeys) != FALSE)
+ if (gMain.newKeys & keyMask)
return TRUE;
else
return FALSE;
diff --git a/src/cable_club.c b/src/cable_club.c
index 20b087f4e..7a85f2b6c 100644
--- a/src/cable_club.c
+++ b/src/cable_club.c
@@ -1,229 +1,350 @@
#include "global.h"
+#include "battle.h"
+#include "battle_records.h"
#include "cable_club.h"
#include "field_message_box.h"
+#include "field_weather.h"
#include "link.h"
+#include "load_save.h"
+#include "m4a.h"
#include "main.h"
+#include "menu.h"
+#include "palette.h"
+#include "record_mixing.h"
+#include "overworld.h"
#include "script.h"
+#include "script_pokemon_80C4.h"
#include "songs.h"
#include "sound.h"
+#include "start_menu.h"
#include "string_util.h"
+#include "strings2.h"
#include "task.h"
#include "text.h"
#include "trainer_card.h"
extern u16 gScriptResult;
extern struct TrainerCard gTrainerCards[4];
-
extern u8 gUnknown_03004860;
extern u8 gFieldLinkPlayerCount;
-
-extern u8 gUnknown_081A4932[];
+extern u16 gSpecialVar_0x8004;
+extern u16 gSpecialVar_0x8005;
+extern u16 gSpecialVar_0x8006;
+extern u16 gBattleTypeFlags;
+extern const u8 gUnknown_081A4932[];
extern const u8 gUnknown_081A4975[];
-
+extern const u8 gUnknown_081A49B6[];
+extern const u8 gUnknown_081A490C[];
+extern const u8* const gTrainerCardColorNames[];
+extern struct
+{
+ u8 field0;
+ u8 field1;
+} gUnknown_020297D8;
+
+static void sub_8082F20(u8 taskId);
+static void sub_8082F68(u8 taskId);
+static void sub_8082FEC(u8 taskId);
+static void sub_808303C(u8 taskId);
static void sub_80830E4(u8 taskId);
+static void sub_8083188(u8 taskId);
static void sub_8083288(u8 taskId);
static void sub_8083314(u8 taskId);
+static void sub_80833C4(u8 taskId);
+static void sub_80833EC(u8 taskId);
+static void sub_8083418(u8 taskId);
+static bool8 sub_8083444(u8 taskId);
+static void sub_808353C(u8 taskId);
+static void sub_8083710(u8 taskId);
+static void sub_8083760(u8 taskId);
+static void sub_80837B4(u8 taskId);
+static void sub_80837EC(u8 taskId);
+static void sub_808382C(u8 taskId);
+static void sub_8083958(void);
+static void sub_80839DC(u8 taskId);
+static void sub_8083AAC(u8 taskId);
+static void sub_8083B44(u8 taskId);
+static void sub_8083B6C(void);
+static void sub_8083CA4(u8 taskId);
+
+extern void sub_80831F8(u8 taskId);
+extern void call_map_music_set_to_zero(void);
+extern void sub_810FEFC(void);
+extern void sub_8047CD8(void);
+extern void sub_805559C(void);
+extern void sub_8055574(void);
+extern s32 sub_80554F8(void);
+extern void sub_805465C(void);
+
+static void sub_8082CD4(u8 arg0, u8 arg1)
+{
+ if (FindTaskIdByFunc(sub_8082F20) == 0xFF)
+ {
+ u8 taskId = CreateTask(sub_8082F20, 80);
+
+ gTasks[taskId].data[1] = arg0;
+ gTasks[taskId].data[2] = arg1;
+ }
+}
+
+static void sub_8082D18(u32 value)
+{
+ ConvertIntToDecimalStringN(gStringVar1, value, STR_CONV_MODE_LEFT_ALIGN, 1);
+ MenuDrawTextWindow(18, 10, 28, 13);
+ sub_8072BD8(gOtherText_PLink, 19, 11, 72);
+}
+
+static void sub_8082D4C()
+{
+ MenuZeroFillWindowRect(18, 10, 28, 13);
+}
+
+static void sub_8082D60(u8 taskId, u8 arg1)
+{
+ s16 *data = &gTasks[taskId].data[3];
+
+ if (arg1 != *data)
+ {
+ if (arg1 <= 1)
+ sub_8082D4C();
+ else
+ sub_8082D18(arg1);
+ *data = arg1;
+ }
+}
+
+static u32 sub_8082D9C(u8 minPlayers, u8 maxPlayers)
+{
+ int playerCount;
+
+ switch (GetLinkPlayerDataExchangeStatusTimed())
+ {
+ case EXCHANGE_COMPLETE:
+ playerCount = GetLinkPlayerCount_2();
+ if (minPlayers <= playerCount && playerCount <= maxPlayers)
+ return 1;
+ ConvertIntToDecimalStringN(gStringVar1, playerCount, STR_CONV_MODE_LEFT_ALIGN, 1);
+ return 4;
+ case EXCHANGE_TIMED_OUT:
+ return 0;
+ case EXCHANGE_IN_PROGRESS:
+ return 3;
+ default:
+ return 0;
+ }
+}
+
+static bool32 sub_8082DF4(u8 taskId)
+{
+ if (HasLinkErrorOccurred() == TRUE)
+ {
+ gTasks[taskId].func = sub_8083418;
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static bool32 sub_8082E28(u8 taskId)
+{
+ if ((gMain.newKeys & B_BUTTON)
+ && IsLinkConnectionEstablished() == FALSE)
+ {
+ gTasks[taskId].func = sub_80833EC;
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static bool32 sub_8082E6C(u8 taskId)
+{
+ if (IsLinkConnectionEstablished())
+ SetSuppressLinkErrorMessage(TRUE);
+
+ if (gMain.newKeys & B_BUTTON)
+ {
+ gTasks[taskId].func = sub_80833EC;
+ return TRUE;
+ }
+ return FALSE;
+}
-void sub_808303C(u8 taskId) {
- s32 linkPlayerCount;
- s16 *taskData;
+static bool32 sub_8082EB8(u8 taskId)
+{
+ if (GetSioMultiSI() == 1)
+ {
+ gTasks[taskId].func = sub_8083418;
+ return TRUE;
+ }
+ return FALSE;
+}
+
+void unref_sub_8082EEC(u8 taskId)
+{
+ gTasks[taskId].data[0]++;
+ if (gTasks[taskId].data[0] == 10)
+ {
+ sub_8007E9C(2);
+ DestroyTask(taskId);
+ }
+}
+
+static void sub_8082F20(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ if (data[0] == 0)
+ {
+ OpenLinkTimed();
+ sub_80082EC();
+ ResetLinkPlayers();
+ }
+ else if (data[0] > 9)
+ {
+ gTasks[taskId].func = sub_8082F68;
+ }
+ data[0]++;
+}
- taskData = gTasks[taskId].data;
+static void sub_8082F68(u8 taskId)
+{
+ u32 playerCount = GetLinkPlayerCount_2();
- linkPlayerCount = GetLinkPlayerCount_2();
+ if (sub_8082E28(taskId) == TRUE
+ || sub_8082E6C(taskId) == TRUE
+ || playerCount < 2)
+ return;
- if (sub_8082E28(taskId) == 1 ||
- sub_8082EB8(taskId) == 1 ||
- sub_8082DF4(taskId) == 1)
+ SetSuppressLinkErrorMessage(TRUE);
+ gTasks[taskId].data[3] = 0;
+ if (IsLinkMaster() == TRUE)
{
+ PlaySE(SE_PIN);
+ ShowFieldAutoScrollMessage(gUnknown_081A4932);
+ gTasks[taskId].func = sub_8082FEC;
+ }
+ else
+ {
+ PlaySE(SE_BOO);
+ ShowFieldAutoScrollMessage(gUnknown_081A49B6);
+ gTasks[taskId].func = sub_80831F8;
+ }
+}
+
+static void sub_8082FEC(u8 taskId)
+{
+ if (sub_8082E28(taskId) == TRUE
+ || sub_8082EB8(taskId) == TRUE
+ || sub_8082DF4(taskId) == TRUE)
return;
+
+ if (GetFieldMessageBoxMode() == FIELD_MESSAGE_BOX_HIDDEN)
+ {
+ gTasks[taskId].data[3] = 0;
+ gTasks[taskId].func = sub_808303C;
}
+}
+
+static void sub_808303C(u8 taskId)
+{
+ s16 *taskData = gTasks[taskId].data;
+ s32 linkPlayerCount = GetLinkPlayerCount_2();
+
+ if (sub_8082E28(taskId) == TRUE
+ || sub_8082EB8(taskId) == TRUE
+ || sub_8082DF4(taskId) == TRUE)
+ return;
sub_8082D60(taskId, linkPlayerCount);
if (!(gMain.newKeys & A_BUTTON))
- {
return;
- }
#if ENGLISH
if (linkPlayerCount < taskData[1])
- {
return;
- }
sub_80081C8(linkPlayerCount);
sub_8082D4C();
- ConvertIntToDecimalStringN(gStringVar1, linkPlayerCount, STR_CONV_MODE_LEFT_ALIGN, 1); // r5
- ShowFieldAutoScrollMessage((u8 *) gUnknown_081A4975);
+ ConvertIntToDecimalStringN(gStringVar1, linkPlayerCount, STR_CONV_MODE_LEFT_ALIGN, 1);
+ ShowFieldAutoScrollMessage((u8 *)gUnknown_081A4975);
gTasks[taskId].func = sub_80830E4;
#elif GERMAN
- if ((gLinkType == 0x2255 && (u32) linkPlayerCount > 1) ||
- (gLinkType != 0x2255 && taskData[1] <= linkPlayerCount))
+ if ((gLinkType == 0x2255 && (u32)linkPlayerCount > 1)
+ || (gLinkType != 0x2255 && taskData[1] <= linkPlayerCount))
{
sub_80081C8(linkPlayerCount);
sub_8082D4C();
- ConvertIntToDecimalStringN(gStringVar1, linkPlayerCount, STR_CONV_MODE_LEFT_ALIGN, 1); // r5
- ShowFieldAutoScrollMessage((u8 *) gUnknown_081A4975);
+ ConvertIntToDecimalStringN(gStringVar1, linkPlayerCount, STR_CONV_MODE_LEFT_ALIGN, 1);
+ ShowFieldAutoScrollMessage((u8 *)gUnknown_081A4975);
gTasks[taskId].func = sub_80830E4;
}
#endif
}
-#ifdef NONMATCHING
-static void sub_80830E4(u8 taskId) {
- if (sub_8082E28(taskId) == 1 ||
- sub_8082EB8(taskId) == 1 ||
- sub_8082DF4(taskId) == 1 ||
- GetFieldMessageBoxMode())
- {
+static void sub_80830E4(u8 taskId)
+{
+ if (sub_8082E28(taskId) == TRUE
+ || sub_8082EB8(taskId) == TRUE
+ || sub_8082DF4(taskId) == TRUE)
return;
- }
- if (sub_800820C() == GetLinkPlayerCount_2() &&
- !(gMain.heldKeys & B_BUTTON))
+ if (GetFieldMessageBoxMode() == FIELD_MESSAGE_BOX_HIDDEN)
{
- ShowFieldAutoScrollMessage(gUnknown_081A4932);
- gTasks[taskId].func = sub_8082FEC;
- return;
+ if (sub_800820C() != GetLinkPlayerCount_2())
+ {
+ ShowFieldAutoScrollMessage(gUnknown_081A4932);
+ gTasks[taskId].func = sub_8082FEC;
+ }
+ else if (gMain.heldKeys & B_BUTTON)
+ {
+ ShowFieldAutoScrollMessage(gUnknown_081A4932);
+ gTasks[taskId].func = sub_8082FEC;
+ }
+ else if (gMain.heldKeys & A_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ sub_8007F4C();
+ gTasks[taskId].func = sub_8083188;
+ }
}
-
- if (gMain.heldKeys & A_BUTTON)
- {
- PlaySE(SE_SELECT);
- sub_8007F4C();
- gTasks[(u32) taskId].func = sub_8083188;
- }
-}
-#else
-__attribute__((naked))
-static void sub_80830E4(u8 taskId) {
- asm(".syntax unified\n\
- push {r4-r6,lr}\n\
- lsls r0, 24\n\
- lsrs r5, r0, 24\n\
- adds r6, r5, 0\n\
- adds r0, r5, 0\n\
- bl sub_8082E28\n\
- cmp r0, 0x1\n\
- beq _08083178\n\
- adds r0, r5, 0\n\
- bl sub_8082EB8\n\
- cmp r0, 0x1\n\
- beq _08083178\n\
- adds r0, r5, 0\n\
- bl sub_8082DF4\n\
- cmp r0, 0x1\n\
- beq _08083178\n\
- bl GetFieldMessageBoxMode\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- bne _08083178\n\
- bl sub_800820C\n\
- adds r4, r0, 0\n\
- bl GetLinkPlayerCount_2\n\
- lsls r4, 24\n\
- lsls r0, 24\n\
- cmp r4, r0\n\
- bne _08083132\n\
- ldr r0, _08083148 @ =gMain\n\
- ldrh r1, [r0, 0x2C]\n\
- movs r0, 0x2\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _08083158\n\
-_08083132:\n\
- ldr r0, _0808314C @ =gUnknown_081A4932\n\
- bl ShowFieldAutoScrollMessage\n\
- ldr r1, _08083150 @ =gTasks\n\
- lsls r0, r5, 2\n\
- adds r0, r5\n\
- lsls r0, 3\n\
- adds r0, r1\n\
- ldr r1, _08083154 @ =sub_8082FEC\n\
- str r1, [r0]\n\
- b _08083178\n\
- .align 2, 0\n\
-_08083148: .4byte gMain\n\
-_0808314C: .4byte gUnknown_081A4932\n\
-_08083150: .4byte gTasks\n\
-_08083154: .4byte sub_8082FEC\n\
-_08083158:\n\
- movs r0, 0x1\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _08083178\n\
- movs r0, 0x5\n\
- bl PlaySE\n\
- bl sub_8007F4C\n\
- ldr r0, _08083180 @ =gTasks\n\
- lsls r1, r6, 2\n\
- adds r1, r6\n\
- lsls r1, 3\n\
- adds r1, r0\n\
- ldr r0, _08083184 @ =sub_8083188\n\
- str r0, [r1]\n\
-_08083178:\n\
- pop {r4-r6}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_08083180: .4byte gTasks\n\
-_08083184: .4byte sub_8083188\n\
- .syntax divided\n");
}
-#endif
-
-void sub_8083188(u8 taskId) {
- u8 local1, local2;
- u16 *result;
- local1 = gTasks[taskId].data[1];
- local2 = gTasks[taskId].data[2];
+static void sub_8083188(u8 taskId)
+{
+ u8 local1 = gTasks[taskId].data[1];
+ u8 local2 = gTasks[taskId].data[2];
-
- if (sub_8082DF4(taskId) == 1 ||
- sub_8083444(taskId) == 1)
- {
+ if (sub_8082DF4(taskId) == TRUE
+ || sub_8083444(taskId) == TRUE)
return;
- }
if (GetLinkPlayerCount_2() != sub_800820C())
{
gTasks[taskId].func = sub_8083418;
- return;
}
-
- result = &gScriptResult;
- *result = sub_8082D9C(local1, local2);
- if (*result)
+ else
{
- gTasks[taskId].func = sub_8083288;
+ gScriptResult = sub_8082D9C(local1, local2);
+ if (gScriptResult != 0)
+ gTasks[taskId].func = sub_8083288;
}
}
-void sub_80831F8(u8 taskId) {
+void sub_80831F8(u8 taskId)
+{
u8 local1, local2;
- u16 *result;
local1 = gTasks[taskId].data[1];
local2 = gTasks[taskId].data[2];
- if (sub_8082E28(taskId) == 1 ||
- sub_8082DF4(taskId) == 1)
- {
+ if (sub_8082E28(taskId) == TRUE
+ || sub_8082DF4(taskId) == TRUE)
return;
- }
- result = &gScriptResult;
- *result = sub_8082D9C(local1, local2);
- if (*result == 0)
- {
+ gScriptResult = sub_8082D9C(local1, local2);
+ if (gScriptResult == 0)
return;
- }
-
-
- if (*result == 3)
+ if (gScriptResult == 3)
{
sub_800832C();
HideFieldMessageBox();
@@ -234,16 +355,15 @@ void sub_80831F8(u8 taskId) {
gFieldLinkPlayerCount = GetLinkPlayerCount_2();
gUnknown_03004860 = GetMultiplayerId();
sub_80081C8(gFieldLinkPlayerCount);
- sub_8093390((struct TrainerCard *) gBlockSendBuffer);
+ sub_8093390((struct TrainerCard *)gBlockSendBuffer);
gTasks[taskId].func = sub_8083314;
}
}
-static void sub_8083288(u8 taskId) {
- if (sub_8082DF4(taskId) == 1)
- {
+static void sub_8083288(u8 taskId)
+{
+ if (sub_8082DF4(taskId) == TRUE)
return;
- }
if (gScriptResult == 3)
{
@@ -256,26 +376,22 @@ static void sub_8083288(u8 taskId) {
gFieldLinkPlayerCount = GetLinkPlayerCount_2();
gUnknown_03004860 = GetMultiplayerId();
sub_80081C8(gFieldLinkPlayerCount);
- sub_8093390((struct TrainerCard *) gBlockSendBuffer);
+ sub_8093390((struct TrainerCard *)gBlockSendBuffer);
gTasks[taskId].func = sub_8083314;
sub_8007E9C(2);
}
}
-static void sub_8083314(u8 taskId) {
+static void sub_8083314(u8 taskId)
+{
u8 index;
-
struct TrainerCard *trainerCards;
- if (sub_8082DF4(taskId) == 1)
- {
+ if (sub_8082DF4(taskId) == TRUE)
return;
- }
if (GetBlockReceivedStatus() != sub_8008198())
- {
return;
- }
index = 0;
trainerCards = gTrainerCards;
@@ -296,14 +412,12 @@ static void sub_8083314(u8 taskId) {
u16 linkType;
linkType = gLinkType;
// FIXME: sub_8082D4C doesn't take any arguments
- sub_8082D4C(0x00004411, linkType);
+ sub_8082D4C(0x4411, linkType);
#elif GERMAN
if (gLinkType != 0x4411)
{
if (gLinkType == 0x6601)
- {
deUnkValue2 = 1;
- }
}
sub_8082D4C();
#endif
@@ -315,3 +429,477 @@ static void sub_8083314(u8 taskId) {
sub_800832C();
gTasks[taskId].func = sub_80833C4;
}
+
+static void sub_80833C4(u8 taskId)
+{
+ if (gReceivedRemoteLinkPlayers == FALSE)
+ {
+ sub_8082D4C();
+ EnableBothScriptContexts();
+ DestroyTask(taskId);
+ }
+}
+
+static void sub_80833EC(u8 taskId)
+{
+ gScriptResult = 5;
+ sub_8082D4C();
+ HideFieldMessageBox();
+ EnableBothScriptContexts();
+ DestroyTask(taskId);
+}
+
+static void sub_8083418(u8 taskId)
+{
+ gScriptResult = 6;
+ sub_8082D4C();
+ HideFieldMessageBox();
+ EnableBothScriptContexts();
+ DestroyTask(taskId);
+}
+
+static bool8 sub_8083444(u8 taskId)
+{
+ gTasks[taskId].data[4]++;
+ if (gTasks[taskId].data[4] > 600)
+ {
+ gTasks[taskId].func = sub_8083418;
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+void sub_808347C(u8 arg0)
+{
+ u32 r3 = 2;
+ u32 r2 = 2;
+
+ switch (gSpecialVar_0x8004)
+ {
+ case 1:
+ r3 = 2;
+ gLinkType = 0x2233;
+ break;
+ case 2:
+ r3 = 2;
+ gLinkType = 0x2244;
+ break;
+ case 5:
+ r3 = 4;
+ r2 = 4;
+ gLinkType = 0x2255;
+ break;
+ }
+
+ sub_8082CD4(r3, r2);
+}
+
+void sub_80834E4(void)
+{
+ gLinkType = 0x1133;
+ gBattleTypeFlags = 0;
+ sub_8082CD4(2, 2);
+}
+
+void sub_808350C(void)
+{
+ gScriptResult = 0;
+ gLinkType = 0x3311;
+ gBattleTypeFlags = 0;
+ sub_8082CD4(2, 4);
+}
+
+static void sub_808353C(u8 taskId)
+{
+ int playerCount;
+ int i;
+
+ switch (gTasks[taskId].data[0])
+ {
+ case 0:
+ if (gScriptResult == 1)
+ {
+ playerCount = GetLinkPlayerCount();
+ for (i = 0; i < playerCount; i++)
+ {
+ if (gLinkPlayers[i].language == LANGUAGE_JAPANESE)
+ {
+ gScriptResult = 7;
+ sub_8008480();
+ gTasks[taskId].data[0] = 1;
+ return;
+ }
+ }
+ }
+ EnableBothScriptContexts();
+ DestroyTask(taskId);
+ break;
+ case 1:
+ if (gReceivedRemoteLinkPlayers == FALSE)
+ {
+ EnableBothScriptContexts();
+ DestroyTask(taskId);
+ }
+ break;
+ }
+}
+
+void sub_80835D8(void)
+{
+ int taskId = FindTaskIdByFunc(sub_808353C);
+
+ if (taskId == 0xFF)
+ {
+ taskId = CreateTask(sub_808353C, 80);
+ gTasks[taskId].data[0] = 0;
+ }
+}
+
+void sub_8083614(void)
+{
+ gLinkType = 0x4411;
+ gBattleTypeFlags = 0;
+ sub_8082CD4(2, 4);
+}
+
+void sub_808363C(void)
+{
+ gLinkType = 0x6601;
+ gBattleTypeFlags = 0;
+ sub_8082CD4(4, 4);
+}
+
+u8 sub_8083664(void)
+{
+ if (FuncIsActiveTask(sub_8083710) != FALSE)
+ return 0xFF;
+
+ switch (gSpecialVar_0x8004)
+ {
+ case 1:
+ gLinkType = 0x2233;
+ break;
+ case 2:
+ gLinkType = 0x2244;
+ break;
+ case 5:
+ gLinkType = 0x2255;
+ break;
+ case 3:
+ gLinkType = 0x1111;
+ break;
+ case 4:
+ gLinkType = 0x3322;
+ break;
+ }
+
+ return CreateTask(sub_8083710, 80);
+}
+
+static void sub_8083710(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ if (data[0] == 0)
+ {
+ OpenLink();
+ ResetLinkPlayers();
+ CreateTask(sub_8083C50, 80);
+ }
+ else if (data[0] >= 10)
+ {
+ gTasks[taskId].func = sub_8083760;
+ }
+ data[0]++;
+}
+
+static void sub_8083760(u8 taskId)
+{
+ if (GetLinkPlayerCount_2() >= 2)
+ {
+ if (IsLinkMaster() == TRUE)
+ gTasks[taskId].func = sub_80837B4;
+ else
+ gTasks[taskId].func = sub_80837EC;
+ }
+}
+
+static void sub_80837B4(u8 taskId)
+{
+ if (sub_800820C() == GetLinkPlayerCount_2())
+ {
+ sub_8007F4C();
+ gTasks[taskId].func = sub_80837EC;
+ }
+}
+
+static void sub_80837EC(u8 taskId)
+{
+ if (gReceivedRemoteLinkPlayers == TRUE
+ && IsLinkPlayerDataExchangeComplete() == TRUE)
+ {
+ sub_800826C();
+ sub_8007B14();
+ DestroyTask(taskId);
+ }
+}
+
+void sub_8083820(void)
+{
+ ScrSpecial_DoSaveDialog();
+}
+
+static void sub_808382C(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+
+ switch (task->data[0])
+ {
+ case 0:
+ fade_screen(1, 0);
+ gLinkType = 0x2211;
+ ClearLinkCallback_2();
+ task->data[0]++;
+ break;
+ case 1:
+ if (!gPaletteFade.active)
+ task->data[0]++;
+ break;
+ case 2:
+ task->data[1]++;
+ if (task->data[1] > 20)
+ task->data[0]++;
+ break;
+ case 3:
+ sub_800832C();
+ task->data[0]++;
+ break;
+ case 4:
+ if (!gReceivedRemoteLinkPlayers)
+ task->data[0]++;
+ break;
+ case 5:
+ if (gLinkPlayers[0].trainerId & 1)
+ current_map_music_set__default_for_battle(BGM_BATTLE32);
+ else
+ current_map_music_set__default_for_battle(BGM_BATTLE20);
+
+ switch (gSpecialVar_0x8004)
+ {
+ case 1:
+ gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_LINK;
+ break;
+ case 2:
+ gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_LINK | BATTLE_TYPE_DOUBLE;
+ break;
+ case 5:
+ ReducePlayerPartyToThree();
+ gBattleTypeFlags = BATTLE_TYPE_TRAINER | BATTLE_TYPE_LINK | BATTLE_TYPE_DOUBLE | BATTLE_TYPE_MULTI;
+ break;
+ }
+
+ SetMainCallback2(sub_800E7C4);
+ gMain.savedCallback = sub_8083958;
+ DestroyTask(taskId);
+ break;
+ }
+}
+
+static void sub_8083958(void)
+{
+ call_map_music_set_to_zero();
+ LoadPlayerParty();
+ SavePlayerBag();
+ sub_810FEFC();
+
+ if (gSpecialVar_0x8004 != 5)
+ UpdateLinkBattleRecords(gUnknown_03004860 ^ 1);
+
+ gMain.savedCallback = sub_805465C;
+ SetMainCallback2(sub_8071B28);
+}
+
+void sub_80839A4(void)
+{
+ if (gSpecialVar_0x8004 == 1 || gSpecialVar_0x8004 == 2 || gSpecialVar_0x8004 == 5)
+ {
+ LoadPlayerParty();
+ SavePlayerBag();
+ }
+ copy_saved_warp2_bank_and_enter_x_to_warp1(0x7F);
+}
+
+void sub_80839D0(void)
+{
+ sub_805559C();
+}
+
+static void sub_80839DC(u8 taskId)
+{
+ struct Task* task = &gTasks[taskId];
+
+ switch (task->data[0])
+ {
+ case 0:
+ ShowFieldMessage(gUnknown_081A490C);
+ task->data[0] = 1;
+ break;
+ case 1:
+ if (IsFieldMessageBoxHidden())
+ {
+ sub_8055574();
+ sub_8007270(gSpecialVar_0x8005);
+ task->data[0] = 2;
+ }
+ break;
+ case 2:
+ switch (sub_80554F8())
+ {
+ case 0:
+ break;
+ case 1:
+ HideFieldMessageBox();
+ task->data[0] = 0;
+ SwitchTaskToFollowupFunc(taskId);
+ break;
+ case 2:
+ task->data[0] = 3;
+ break;
+ }
+ break;
+ case 3:
+ sub_8055588();
+ HideFieldMessageBox();
+ MenuZeroFillScreen();
+ DestroyTask(taskId);
+ EnableBothScriptContexts();
+ break;
+ }
+}
+
+void sub_8083A84(TaskFunc followupFunc)
+{
+ u8 taskId = CreateTask(sub_80839DC, 80);
+ SetTaskFuncWithFollowupFunc(taskId, sub_80839DC, followupFunc);
+ ScriptContext1_Stop();
+}
+
+static void sub_8083AAC(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ switch (task->data[0])
+ {
+ case 0:
+ ScriptContext2_Enable();
+ fade_screen(1, 0);
+ ClearLinkCallback_2();
+ task->data[0]++;
+ break;
+ case 1:
+ if (!gPaletteFade.active)
+ task->data[0]++;
+ break;
+ case 2:
+ gUnknown_020297D8.field0 = 0;
+ gUnknown_020297D8.field1 = 0;
+ m4aMPlayAllStop();
+ sub_800832C();
+ task->data[0]++;
+ break;
+ case 3:
+ if (!gReceivedRemoteLinkPlayers)
+ {
+ SetMainCallback2(sub_8047CD8);
+ DestroyTask(taskId);
+ }
+ break;
+ }
+}
+
+static void sub_8083B44(u8 taskId)
+{
+ sub_8083B6C();
+ DestroyTask(taskId);
+}
+
+void sub_8083B5C(void)
+{
+ sub_8083A84(sub_8083B44);
+}
+
+static void sub_8083B6C(void)
+{
+ CreateTask(sub_8083AAC, 80);
+}
+
+void sub_8083B80(void)
+{
+ sub_8083B6C();
+ ScriptContext1_Stop();
+}
+
+void sub_8083B90(void)
+{
+ gLinkType = 0x2211;
+ sub_8083A84(sub_808382C);
+}
+
+void unref_sub_8083BB0(void)
+{
+ u8 taskId = CreateTask(sub_80839DC, 80);
+ SetTaskFuncWithFollowupFunc(taskId, sub_80839DC, Task_RecordMixing_Main);
+ ScriptContext1_Stop();
+}
+
+void sub_8083BDC(void)
+{
+ sub_8093130(gSpecialVar_0x8006, c2_exit_to_overworld_1_continue_scripts_restart_music);
+}
+
+bool32 sub_8083BF4(u8 linkPlayerIndex)
+{
+ u32 trainerCardColorIndex;
+
+ gSpecialVar_0x8006 = linkPlayerIndex;
+ StringCopy(gStringVar1, gLinkPlayers[linkPlayerIndex].name);
+
+ trainerCardColorIndex = sub_80934C4(linkPlayerIndex);
+ if (trainerCardColorIndex == 0)
+ return FALSE;
+
+ StringCopy(gStringVar2, gTrainerCardColorNames[trainerCardColorIndex - 1]);
+ return TRUE;
+}
+
+void sub_8083C50(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+
+ task->data[0]++;
+ if (task->data[0] > 300)
+ {
+ CloseLink();
+ SetMainCallback2(CB2_LinkError);
+ DestroyTask(taskId);
+ }
+
+ if (gReceivedRemoteLinkPlayers)
+ DestroyTask(taskId);
+}
+
+static void sub_8083CA4(u8 taskId)
+{
+ if (!gReceivedRemoteLinkPlayers)
+ {
+ EnableBothScriptContexts();
+ DestroyTask(taskId);
+ }
+}
+
+void unref_sub_8083CC8(u8 taskId)
+{
+ sub_800832C();
+ gTasks[taskId].func = sub_8083CA4;
+} \ No newline at end of file
diff --git a/src/calculate_base_damage.c b/src/calculate_base_damage.c
index 0f2605e5b..f5c679876 100644
--- a/src/calculate_base_damage.c
+++ b/src/calculate_base_damage.c
@@ -7,52 +7,37 @@
#include "hold_effects.h"
#include "item.h"
#include "items.h"
-#include "main.h"
#include "pokemon.h"
#include "species.h"
-#include "sprite.h"
-#include "string_util.h"
-#include "strings2.h"
-#include "text.h"
+#include "moves.h"
+#include "battle_move_effects.h"
-extern u8 gPlayerPartyCount;
-extern u8 gEnemyPartyCount;
-
-extern u16 unk_20160BC[];
-extern struct SecretBaseRecord gSecretBaseRecord;
extern u32 dword_2017100[];
extern u16 gBattleTypeFlags;
extern struct BattlePokemon gBattleMons[4];
extern u16 gCurrentMove;
-extern u8 gLastUsedAbility;
extern u8 gCritMultiplier;
extern u16 gBattleWeather;
extern struct BattleEnigmaBerry gEnigmaBerries[];
extern u16 gBattleMovePower;
-extern struct SpriteTemplate gUnknown_02024E8C;
extern u16 gTrainerBattleOpponent;
-extern struct PokemonStorage gPokemonStorage;
-extern u8 gBadEggNickname[];
-extern struct SpriteTemplate gSpriteTemplate_8208288[];
-extern u8 gTrainerClassToPicIndex[];
-extern u8 gTrainerClassToNameIndex[];
-extern u8 gUnknown_08208238[];
-extern u8 gUnknown_0820823C[];
-extern u8 gStatStageRatios[];
-extern u8 gHoldEffectToType[][2];
+extern const u8 gHoldEffectToType[][2];
+extern const u8 gStatStageRatios[][2];
+
+u8 GetBankSide(u8 bank);
-#define APPLY_STAT_MOD(var, mon, stat, statIndex) \
-{ \
- (var) = (stat) * (gStatStageRatios)[(mon)->statStages[(statIndex)] * 2]; \
- (var) /= (gStatStageRatios + 1)[(mon)->statStages[(statIndex)] * 2]; \
+#define APPLY_STAT_MOD(var, mon, stat, statIndex) \
+{ \
+ (var) = (stat) * (gStatStageRatios)[(mon)->statStages[(statIndex)]][0]; \
+ (var) /= (gStatStageRatios)[(mon)->statStages[(statIndex)]][1]; \
}
-#ifdef NONMATCHING
-s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *defender, u32 move, u16 a4, u16 powerOverride, u8 typeOverride, u8 a7, u8 a8)
+s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *defender, u32 move, u16 sideStatus, u16 powerOverride, u8 typeOverride, u8 bankAtk, u8 bankDef)
{
- s32 i;
+ u32 i;
s32 damage = 0;
+ s32 damageHelper;
u8 type;
u16 attack, defense;
u16 spAttack, spDefense;
@@ -60,7 +45,6 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de
u8 defenderHoldEffectParam;
u8 attackerHoldEffect;
u8 attackerHoldEffectParam;
- s32 a, b;
if (!powerOverride)
gBattleMovePower = gBattleMoves[move].power;
@@ -79,8 +63,8 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de
if (attacker->item == ITEM_ENIGMA_BERRY)
{
- attackerHoldEffect = gEnigmaBerries[a7].holdEffect;
- attackerHoldEffectParam = gEnigmaBerries[a7].holdEffectParam;
+ attackerHoldEffect = gEnigmaBerries[bankAtk].holdEffect;
+ attackerHoldEffectParam = gEnigmaBerries[bankAtk].holdEffectParam;
}
else
{
@@ -90,8 +74,8 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de
if (defender->item == ITEM_ENIGMA_BERRY)
{
- defenderHoldEffect = gEnigmaBerries[a8].holdEffect;
- defenderHoldEffectParam = gEnigmaBerries[a8].holdEffectParam;
+ defenderHoldEffect = gEnigmaBerries[bankDef].holdEffect;
+ defenderHoldEffectParam = gEnigmaBerries[bankDef].holdEffectParam;
}
else
{
@@ -107,35 +91,32 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de
if ((gBattleTypeFlags & BATTLE_TYPE_TRAINER)
&& gTrainerBattleOpponent != 1024
&& FlagGet(BADGE01_GET)
- && !GetBankSide(a7))
+ && !GetBankSide(bankAtk))
attack = (110 * attack) / 100;
-
- if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_EREADER_TRAINER)))
- {
- if ((gBattleTypeFlags & BATTLE_TYPE_TRAINER)
- && gTrainerBattleOpponent != 1024
- && FlagGet(BADGE05_GET)
- && !GetBankSide(a8))
- defense = (110 * defense) / 100;
-
- if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_EREADER_TRAINER)))
- {
- if ((gBattleTypeFlags & BATTLE_TYPE_TRAINER)
- && gTrainerBattleOpponent != 1024
- && FlagGet(BADGE07_GET)
- && !GetBankSide(a7))
- spAttack = (110 * spAttack) / 100;
-
- if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_EREADER_TRAINER)))
- {
- if ((gBattleTypeFlags & BATTLE_TYPE_TRAINER)
- && gTrainerBattleOpponent != 1024
- && FlagGet(BADGE07_GET)
- && !GetBankSide(a8))
- spDefense = (110 * spDefense) / 100;
- }
- }
- }
+ }
+ if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_EREADER_TRAINER)))
+ {
+ if ((gBattleTypeFlags & BATTLE_TYPE_TRAINER)
+ && gTrainerBattleOpponent != 1024
+ && FlagGet(BADGE05_GET)
+ && !GetBankSide(bankDef))
+ defense = (110 * defense) / 100;
+ }
+ if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_EREADER_TRAINER)))
+ {
+ if ((gBattleTypeFlags & BATTLE_TYPE_TRAINER)
+ && gTrainerBattleOpponent != 1024
+ && FlagGet(BADGE07_GET)
+ && !GetBankSide(bankAtk))
+ spAttack = (110 * spAttack) / 100;
+ }
+ if (!(gBattleTypeFlags & (BATTLE_TYPE_LINK | BATTLE_TYPE_BATTLE_TOWER | BATTLE_TYPE_EREADER_TRAINER)))
+ {
+ if ((gBattleTypeFlags & BATTLE_TYPE_TRAINER)
+ && gTrainerBattleOpponent != 1024
+ && FlagGet(BADGE07_GET)
+ && !GetBankSide(bankDef))
+ spDefense = (110 * spDefense) / 100;
}
for (i = 0; i < 17; i++)
@@ -171,17 +152,17 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de
spAttack /= 2;
if (attacker->ability == ABILITY_HUSTLE)
attack = (150 * attack) / 100;
- if (attacker->ability == ABILITY_PLUS && AbilityBattleEffects(0xE, 0, ABILITY_MINUS, 0, 0))
+ if (attacker->ability == ABILITY_PLUS && AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, ABILITY_MINUS, 0, 0))
spAttack = (150 * spAttack) / 100;
- if (attacker->ability == ABILITY_MINUS && AbilityBattleEffects(0xE, 0, ABILITY_PLUS, 0, 0))
+ 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(0xE, 0, 0, 0xFD, 0))
+ if (type == TYPE_ELECTRIC && AbilityBattleEffects(ABILITYEFFECT_FIELD_SPORT, 0, 0, 0xFD, 0))
gBattleMovePower /= 2;
- if (type == TYPE_FIRE && AbilityBattleEffects(0xE, 0, 0, 0xFE, 0))
+ 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;
@@ -191,39 +172,41 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de
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 == 7)
+ if (gBattleMoves[gCurrentMove].effect == EFFECT_EXPLOSION)
defense /= 2;
- if (type < TYPE_MYSTERY) // is physical?
+ if (type < TYPE_MYSTERY) // is physical
{
if (gCritMultiplier == 2)
{
- if (attacker->statStages[1] > 6)
- APPLY_STAT_MOD(a, attacker, attack, 1)
+ if (attacker->statStages[STAT_STAGE_ATK] > 6)
+ APPLY_STAT_MOD(damage, attacker, attack, STAT_STAGE_ATK)
else
- a = attack;
+ damage = attack;
}
else
- APPLY_STAT_MOD(a, attacker, attack, 1)
+ APPLY_STAT_MOD(damage, attacker, attack, STAT_STAGE_ATK)
- a = a * gBattleMovePower * (2 * attacker->level / 5 + 2);
+ damage = damage * gBattleMovePower;
+ damage *= (2 * attacker->level / 5 + 2);
if (gCritMultiplier == 2)
{
- if (defender->statStages[2] < 6)
- APPLY_STAT_MOD(b, defender, defense, 2)
+ if (defender->statStages[STAT_STAGE_DEF] < 6)
+ APPLY_STAT_MOD(damageHelper, defender, defense, STAT_STAGE_DEF)
else
- b = defense;
+ damageHelper = defense;
}
else
- APPLY_STAT_MOD(b, defender, defense, 2)
+ APPLY_STAT_MOD(damageHelper, defender, defense, STAT_STAGE_DEF)
- damage = (a / b) / 50;
+ damage = damage / damageHelper;
+ damage /= 50;
- if ((attacker->status1 & 0x10) && attacker->ability != ABILITY_GUTS)
+ if ((attacker->status1 & STATUS_BURN) && attacker->ability != ABILITY_GUTS)
damage /= 2;
- if ((a4 & 1) && gCritMultiplier == 1)
+ if ((sideStatus & SIDE_STATUS_REFLECT) && gCritMultiplier == 1)
{
if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && CountAliveMons(2) == 2)
damage = 2 * (damage / 3);
@@ -246,29 +229,31 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de
{
if (gCritMultiplier == 2)
{
- if (attacker->statStages[4] > 6)
- APPLY_STAT_MOD(a, attacker, spAttack, 4)
+ if (attacker->statStages[STAT_STAGE_SPATK] > 6)
+ APPLY_STAT_MOD(damage, attacker, spAttack, STAT_STAGE_SPATK)
else
- a = spAttack;
+ damage = spAttack;
}
else
- APPLY_STAT_MOD(a, attacker, spAttack, 4)
+ APPLY_STAT_MOD(damage, attacker, spAttack, STAT_STAGE_SPATK)
- a = a * gBattleMovePower * (2 * attacker->level / 5 + 2);
+ damage = damage * gBattleMovePower;
+ damage *= (2 * attacker->level / 5 + 2);
if (gCritMultiplier == 2)
{
- if (defender->statStages[5] < 6)
- APPLY_STAT_MOD(b, defender, spDefense, 5)
+ if (defender->statStages[STAT_STAGE_SPDEF] < 6)
+ APPLY_STAT_MOD(damageHelper, defender, spDefense, STAT_STAGE_SPDEF)
else
- b = spDefense;
+ damageHelper = spDefense;
}
else
- APPLY_STAT_MOD(b, defender, spDefense, 5)
+ APPLY_STAT_MOD(damageHelper, defender, spDefense, STAT_STAGE_SPDEF)
- damage = (a / b) / 50;
+ damage = (damage / damageHelper);
+ damage /= 50;
- if ((a4 & 2) && gCritMultiplier == 1)
+ if ((sideStatus & SIDE_STATUS_LIGHTSCREEN) && gCritMultiplier == 1)
{
if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && CountAliveMons(2) == 2)
damage = 2 * (damage / 3);
@@ -279,1196 +264,46 @@ s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *de
if ((gBattleTypeFlags & BATTLE_TYPE_DOUBLE) && gBattleMoves[move].target == 8 && CountAliveMons(2) == 2)
damage /= 2;
- // are effects of weather negated with cloud nine or air lock?
- if (!AbilityBattleEffects(0xE, 0, ABILITY_CLOUD_NINE, 0, 0) && !AbilityBattleEffects(0xE, 0, ABILITY_AIR_LOCK, 0, 0))
+ // 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))
{
- // rain?
- if (gBattleWeather & 1)
+ if (gBattleWeather & WEATHER_RAIN_TEMPORARY)
{
- if (type == TYPE_FIRE)
+ switch (type)
+ {
+ case TYPE_FIRE:
damage /= 2;
- else if (type == TYPE_WATER)
+ break;
+ case TYPE_WATER:
damage = (15 * damage) / 10;
+ break;
+ }
}
- // does lack of sun half solar beam damage?
- if ((gBattleWeather & 0x9F) && gCurrentMove == 76)
+ // 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 & 0x60)
+ // sunny
+ if (gBattleWeather & WEATHER_SUN_ANY)
{
- if (type == TYPE_FIRE)
+ switch (type)
+ {
+ case TYPE_FIRE:
damage = (15 * damage) / 10;
- else if (type == TYPE_WATER)
+ break;
+ case TYPE_WATER:
damage /= 2;
+ break;
+ }
}
}
- // flash fire triggered?
- if ((dword_2017100[a7] & 1) && type == TYPE_FIRE)
+ // flash fire triggered
+ if ((dword_2017100[bankAtk] & 1) && type == TYPE_FIRE)
damage = (15 * damage) / 10;
}
return damage + 2;
}
-#else
-__attribute__((naked))
-s32 CalculateBaseDamage(struct BattlePokemon *attacker, struct BattlePokemon *defender, u32 move, u16 a4, u16 powerOverride, u8 typeOverride, u8 a7, u8 a8)
-{
- 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, 0x2C\n\
- adds r7, r0, 0\n\
- str r1, [sp, 0x4]\n\
- str r2, [sp, 0x8]\n\
- ldr r0, [sp, 0x4C]\n\
- ldr r1, [sp, 0x50]\n\
- ldr r2, [sp, 0x54]\n\
- ldr r4, [sp, 0x58]\n\
- lsls r3, 16\n\
- lsrs r3, 16\n\
- str r3, [sp, 0xC]\n\
- lsls r0, 16\n\
- lsrs r3, r0, 16\n\
- lsls r1, 24\n\
- lsrs r6, r1, 24\n\
- lsls r2, 24\n\
- lsrs r2, 24\n\
- str r2, [sp, 0x10]\n\
- lsls r4, 24\n\
- lsrs r4, 24\n\
- movs r5, 0\n\
- cmp r3, 0\n\
- bne _0803BA80\n\
- ldr r2, _0803BA78 @ =gBattleMovePower\n\
- ldr r1, _0803BA7C @ =gBattleMoves\n\
- ldr r3, [sp, 0x8]\n\
- lsls r0, r3, 1\n\
- adds r0, r3\n\
- lsls r0, 2\n\
- adds r0, r1\n\
- ldrb r0, [r0, 0x1]\n\
- strh r0, [r2]\n\
- b _0803BA84\n\
- .align 2, 0\n\
-_0803BA78: .4byte gBattleMovePower\n\
-_0803BA7C: .4byte gBattleMoves\n\
-_0803BA80:\n\
- ldr r0, _0803BA9C @ =gBattleMovePower\n\
- strh r3, [r0]\n\
-_0803BA84:\n\
- cmp r6, 0\n\
- bne _0803BAA4\n\
- ldr r1, _0803BAA0 @ =gBattleMoves\n\
- ldr r6, [sp, 0x8]\n\
- lsls r0, r6, 1\n\
- adds r0, r6\n\
- lsls r0, 2\n\
- adds r0, r1\n\
- ldrb r0, [r0, 0x2]\n\
- mov r9, r0\n\
- b _0803BAAE\n\
- .align 2, 0\n\
-_0803BA9C: .4byte gBattleMovePower\n\
-_0803BAA0: .4byte gBattleMoves\n\
-_0803BAA4:\n\
- movs r0, 0x3F\n\
- mov r9, r0\n\
- mov r1, r9\n\
- ands r1, r6\n\
- mov r9, r1\n\
-_0803BAAE:\n\
- ldrh r6, [r7, 0x2]\n\
- ldr r2, [sp, 0x4]\n\
- ldrh r2, [r2, 0x4]\n\
- str r2, [sp, 0x14]\n\
- ldrh r3, [r7, 0x8]\n\
- mov r8, r3\n\
- ldr r0, [sp, 0x4]\n\
- ldrh r0, [r0, 0xA]\n\
- str r0, [sp, 0x18]\n\
- ldrh r0, [r7, 0x2E]\n\
- cmp r0, 0xAF\n\
- bne _0803BAE0\n\
- ldr r1, _0803BADC @ =gEnigmaBerries\n\
- ldr r2, [sp, 0x10]\n\
- lsls r0, r2, 3\n\
- subs r0, r2\n\
- lsls r0, 2\n\
- adds r0, r1\n\
- ldrb r3, [r0, 0x7]\n\
- mov r10, r3\n\
- ldrb r0, [r0, 0x1A]\n\
- b _0803BAF6\n\
- .align 2, 0\n\
-_0803BADC: .4byte gEnigmaBerries\n\
-_0803BAE0:\n\
- ldrh r0, [r7, 0x2E]\n\
- bl ItemId_GetHoldEffect\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r10, r0\n\
- ldrh r0, [r7, 0x2E]\n\
- bl ItemId_GetHoldEffectParam\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
-_0803BAF6:\n\
- str r0, [sp, 0x20]\n\
- ldr r1, [sp, 0x4]\n\
- ldrh r0, [r1, 0x2E]\n\
- cmp r0, 0xAF\n\
- bne _0803BB26\n\
- ldr r1, _0803BB10 @ =gEnigmaBerries\n\
- lsls r0, r4, 3\n\
- subs r0, r4\n\
- lsls r0, 2\n\
- adds r0, r1\n\
- ldrb r0, [r0, 0x7]\n\
- str r0, [sp, 0x1C]\n\
- b _0803BB3C\n\
- .align 2, 0\n\
-_0803BB10: .4byte gEnigmaBerries\n\
-_0803BB14:\n\
- ldr r0, [sp, 0x20]\n\
- adds r0, 0x64\n\
- muls r0, r6\n\
- movs r1, 0x64\n\
- bl __divsi3\n\
- lsls r0, 16\n\
- lsrs r6, r0, 16\n\
- b _0803BCDC\n\
-_0803BB26:\n\
- ldr r2, [sp, 0x4]\n\
- ldrh r0, [r2, 0x2E]\n\
- bl ItemId_GetHoldEffect\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- str r0, [sp, 0x1C]\n\
- ldr r3, [sp, 0x4]\n\
- ldrh r0, [r3, 0x2E]\n\
- bl ItemId_GetHoldEffectParam\n\
-_0803BB3C:\n\
- adds r0, r7, 0\n\
- adds r0, 0x20\n\
- ldrb r1, [r0]\n\
- str r0, [sp, 0x24]\n\
- cmp r1, 0x25\n\
- beq _0803BB4C\n\
- cmp r1, 0x4A\n\
- bne _0803BB50\n\
-_0803BB4C:\n\
- lsls r0, r6, 17\n\
- lsrs r6, r0, 16\n\
-_0803BB50:\n\
- ldr r0, _0803BCB8 @ =gBattleTypeFlags\n\
- ldrh r1, [r0]\n\
- ldr r0, _0803BCBC @ =0x00000902\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0803BB5E\n\
- b _0803BC78\n\
-_0803BB5E:\n\
- movs r0, 0x8\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0803BB98\n\
- ldr r0, _0803BCC0 @ =gTrainerBattleOpponent\n\
- ldrh r1, [r0]\n\
- movs r0, 0x80\n\
- lsls r0, 3\n\
- cmp r1, r0\n\
- beq _0803BB98\n\
- ldr r0, _0803BCC4 @ =0x00000807\n\
- bl FlagGet\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- beq _0803BB98\n\
- ldr r0, [sp, 0x10]\n\
- bl GetBankSide\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- bne _0803BB98\n\
- movs r0, 0x6E\n\
- muls r0, r6\n\
- movs r1, 0x64\n\
- bl __divsi3\n\
- lsls r0, 16\n\
- lsrs r6, r0, 16\n\
-_0803BB98:\n\
- ldr r0, _0803BCB8 @ =gBattleTypeFlags\n\
- ldrh r1, [r0]\n\
- ldr r0, _0803BCBC @ =0x00000902\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _0803BC78\n\
- movs r0, 0x8\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0803BBE2\n\
- ldr r0, _0803BCC0 @ =gTrainerBattleOpponent\n\
- ldrh r1, [r0]\n\
- movs r0, 0x80\n\
- lsls r0, 3\n\
- cmp r1, r0\n\
- beq _0803BBE2\n\
- ldr r0, _0803BCC8 @ =0x0000080b\n\
- bl FlagGet\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- beq _0803BBE2\n\
- adds r0, r4, 0\n\
- bl GetBankSide\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- bne _0803BBE2\n\
- movs r0, 0x6E\n\
- ldr r1, [sp, 0x14]\n\
- muls r0, r1\n\
- movs r1, 0x64\n\
- bl __divsi3\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- str r0, [sp, 0x14]\n\
-_0803BBE2:\n\
- ldr r0, _0803BCB8 @ =gBattleTypeFlags\n\
- ldrh r1, [r0]\n\
- ldr r0, _0803BCBC @ =0x00000902\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _0803BC78\n\
- movs r0, 0x8\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0803BC2E\n\
- ldr r0, _0803BCC0 @ =gTrainerBattleOpponent\n\
- ldrh r1, [r0]\n\
- movs r0, 0x80\n\
- lsls r0, 3\n\
- cmp r1, r0\n\
- beq _0803BC2E\n\
- ldr r0, _0803BCCC @ =0x0000080d\n\
- bl FlagGet\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- beq _0803BC2E\n\
- ldr r0, [sp, 0x10]\n\
- bl GetBankSide\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- bne _0803BC2E\n\
- movs r0, 0x6E\n\
- mov r2, r8\n\
- muls r2, r0\n\
- adds r0, r2, 0\n\
- movs r1, 0x64\n\
- bl __divsi3\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- mov r8, r0\n\
-_0803BC2E:\n\
- ldr r0, _0803BCB8 @ =gBattleTypeFlags\n\
- ldrh r1, [r0]\n\
- ldr r0, _0803BCBC @ =0x00000902\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _0803BC78\n\
- movs r0, 0x8\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0803BC78\n\
- ldr r0, _0803BCC0 @ =gTrainerBattleOpponent\n\
- ldrh r1, [r0]\n\
- movs r0, 0x80\n\
- lsls r0, 3\n\
- cmp r1, r0\n\
- beq _0803BC78\n\
- ldr r0, _0803BCCC @ =0x0000080d\n\
- bl FlagGet\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- beq _0803BC78\n\
- adds r0, r4, 0\n\
- bl GetBankSide\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- bne _0803BC78\n\
- movs r0, 0x6E\n\
- ldr r3, [sp, 0x18]\n\
- muls r0, r3\n\
- movs r1, 0x64\n\
- bl __divsi3\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- str r0, [sp, 0x18]\n\
-_0803BC78:\n\
- movs r2, 0\n\
- ldr r4, _0803BCD0 @ =gHoldEffectToType\n\
- ldr r0, [sp, 0x4]\n\
- adds r0, 0x20\n\
- str r0, [sp, 0x28]\n\
- adds r3, r4, 0\n\
-_0803BC84:\n\
- lsls r1, r2, 1\n\
- ldrb r0, [r3]\n\
- cmp r10, r0\n\
- bne _0803BCD4\n\
- adds r0, r4, 0x1\n\
- adds r0, r1, r0\n\
- ldrb r0, [r0]\n\
- cmp r9, r0\n\
- bne _0803BCD4\n\
- mov r1, r9\n\
- cmp r1, 0x8\n\
- bhi _0803BC9E\n\
- b _0803BB14\n\
-_0803BC9E:\n\
- ldr r0, [sp, 0x20]\n\
- adds r0, 0x64\n\
- mov r2, r8\n\
- muls r2, r0\n\
- adds r0, r2, 0\n\
- movs r1, 0x64\n\
- bl __divsi3\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- mov r8, r0\n\
- b _0803BCDC\n\
- .align 2, 0\n\
-_0803BCB8: .4byte gBattleTypeFlags\n\
-_0803BCBC: .4byte 0x00000902\n\
-_0803BCC0: .4byte gTrainerBattleOpponent\n\
-_0803BCC4: .4byte 0x00000807\n\
-_0803BCC8: .4byte 0x0000080b\n\
-_0803BCCC: .4byte 0x0000080d\n\
-_0803BCD0: .4byte gHoldEffectToType\n\
-_0803BCD4:\n\
- adds r3, 0x2\n\
- adds r2, 0x1\n\
- cmp r2, 0x10\n\
- bls _0803BC84\n\
-_0803BCDC:\n\
- mov r3, r10\n\
- cmp r3, 0x1D\n\
- bne _0803BCF0\n\
- movs r0, 0x96\n\
- muls r0, r6\n\
- movs r1, 0x64\n\
- bl __divsi3\n\
- lsls r0, 16\n\
- lsrs r6, r0, 16\n\
-_0803BCF0:\n\
- mov r0, r10\n\
- cmp r0, 0x22\n\
- bne _0803BD28\n\
- ldr r0, _0803BFDC @ =gBattleTypeFlags\n\
- ldrh r1, [r0]\n\
- movs r0, 0x80\n\
- lsls r0, 1\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _0803BD28\n\
- ldr r1, _0803BFE0 @ =0xfffffe69\n\
- adds r0, r1, 0\n\
- ldrh r2, [r7]\n\
- adds r0, r2\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- cmp r0, 0x1\n\
- bhi _0803BD28\n\
- movs r0, 0x96\n\
- mov r3, r8\n\
- muls r3, r0\n\
- adds r0, r3, 0\n\
- movs r1, 0x64\n\
- bl __divsi3\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- mov r8, r0\n\
-_0803BD28:\n\
- ldr r0, [sp, 0x1C]\n\
- cmp r0, 0x22\n\
- bne _0803BD60\n\
- ldr r0, _0803BFDC @ =gBattleTypeFlags\n\
- ldrh r1, [r0]\n\
- movs r0, 0x80\n\
- lsls r0, 1\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _0803BD60\n\
- ldr r1, _0803BFE0 @ =0xfffffe69\n\
- adds r0, r1, 0\n\
- ldr r2, [sp, 0x4]\n\
- ldrh r2, [r2]\n\
- adds r0, r2\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- cmp r0, 0x1\n\
- bhi _0803BD60\n\
- movs r0, 0x96\n\
- ldr r3, [sp, 0x18]\n\
- muls r0, r3\n\
- movs r1, 0x64\n\
- bl __divsi3\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- str r0, [sp, 0x18]\n\
-_0803BD60:\n\
- mov r0, r10\n\
- cmp r0, 0x23\n\
- bne _0803BD76\n\
- ldrh r1, [r7]\n\
- ldr r0, _0803BFE4 @ =0x00000175\n\
- cmp r1, r0\n\
- bne _0803BD76\n\
- mov r1, r8\n\
- lsls r0, r1, 17\n\
- lsrs r0, 16\n\
- mov r8, r0\n\
-_0803BD76:\n\
- ldr r2, [sp, 0x1C]\n\
- cmp r2, 0x24\n\
- bne _0803BD8E\n\
- ldr r3, [sp, 0x4]\n\
- ldrh r1, [r3]\n\
- ldr r0, _0803BFE4 @ =0x00000175\n\
- cmp r1, r0\n\
- bne _0803BD8E\n\
- ldr r1, [sp, 0x18]\n\
- lsls r0, r1, 17\n\
- lsrs r0, 16\n\
- str r0, [sp, 0x18]\n\
-_0803BD8E:\n\
- mov r2, r10\n\
- cmp r2, 0x2D\n\
- bne _0803BDA2\n\
- ldrh r0, [r7]\n\
- cmp r0, 0x19\n\
- bne _0803BDA2\n\
- mov r3, r8\n\
- lsls r0, r3, 17\n\
- lsrs r0, 16\n\
- mov r8, r0\n\
-_0803BDA2:\n\
- ldr r0, [sp, 0x1C]\n\
- cmp r0, 0x40\n\
- bne _0803BDB8\n\
- ldr r1, [sp, 0x4]\n\
- ldrh r0, [r1]\n\
- cmp r0, 0x84\n\
- bne _0803BDB8\n\
- ldr r2, [sp, 0x14]\n\
- lsls r0, r2, 17\n\
- lsrs r0, 16\n\
- str r0, [sp, 0x14]\n\
-_0803BDB8:\n\
- mov r3, r10\n\
- cmp r3, 0x41\n\
- bne _0803BDCE\n\
- ldrh r0, [r7]\n\
- subs r0, 0x68\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- cmp r0, 0x1\n\
- bhi _0803BDCE\n\
- lsls r0, r6, 17\n\
- lsrs r6, r0, 16\n\
-_0803BDCE:\n\
- ldr r1, [sp, 0x28]\n\
- ldrb r0, [r1]\n\
- cmp r0, 0x2F\n\
- bne _0803BDE6\n\
- mov r2, r9\n\
- cmp r2, 0xA\n\
- beq _0803BDE0\n\
- cmp r2, 0xF\n\
- bne _0803BDE6\n\
-_0803BDE0:\n\
- mov r3, r8\n\
- lsrs r3, 1\n\
- mov r8, r3\n\
-_0803BDE6:\n\
- ldr r0, [sp, 0x24]\n\
- ldrb r4, [r0]\n\
- cmp r4, 0x37\n\
- bne _0803BDFC\n\
- movs r0, 0x96\n\
- muls r0, r6\n\
- movs r1, 0x64\n\
- bl __divsi3\n\
- lsls r0, 16\n\
- lsrs r6, r0, 16\n\
-_0803BDFC:\n\
- cmp r4, 0x39\n\
- bne _0803BE2A\n\
- movs r0, 0\n\
- str r0, [sp]\n\
- movs r0, 0xE\n\
- movs r1, 0\n\
- movs r2, 0x3A\n\
- movs r3, 0\n\
- bl AbilityBattleEffects\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- beq _0803BE2A\n\
- movs r0, 0x96\n\
- mov r1, r8\n\
- muls r1, r0\n\
- adds r0, r1, 0\n\
- movs r1, 0x64\n\
- bl __divsi3\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- mov r8, r0\n\
-_0803BE2A:\n\
- ldr r2, [sp, 0x24]\n\
- ldrb r0, [r2]\n\
- cmp r0, 0x3A\n\
- bne _0803BE5C\n\
- movs r0, 0\n\
- str r0, [sp]\n\
- movs r0, 0xE\n\
- movs r1, 0\n\
- movs r2, 0x39\n\
- movs r3, 0\n\
- bl AbilityBattleEffects\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- beq _0803BE5C\n\
- movs r0, 0x96\n\
- mov r3, r8\n\
- muls r3, r0\n\
- adds r0, r3, 0\n\
- movs r1, 0x64\n\
- bl __divsi3\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- mov r8, r0\n\
-_0803BE5C:\n\
- ldr r1, [sp, 0x24]\n\
- ldrb r0, [r1]\n\
- cmp r0, 0x3E\n\
- bne _0803BE78\n\
- ldr r0, [r7, 0x4C]\n\
- cmp r0, 0\n\
- beq _0803BE78\n\
- movs r0, 0x96\n\
- muls r0, r6\n\
- movs r1, 0x64\n\
- bl __divsi3\n\
- lsls r0, 16\n\
- lsrs r6, r0, 16\n\
-_0803BE78:\n\
- ldr r2, [sp, 0x28]\n\
- ldrb r0, [r2]\n\
- cmp r0, 0x3F\n\
- bne _0803BE9A\n\
- ldr r3, [sp, 0x4]\n\
- ldr r0, [r3, 0x4C]\n\
- cmp r0, 0\n\
- beq _0803BE9A\n\
- movs r0, 0x96\n\
- ldr r1, [sp, 0x14]\n\
- muls r0, r1\n\
- movs r1, 0x64\n\
- bl __divsi3\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- str r0, [sp, 0x14]\n\
-_0803BE9A:\n\
- mov r2, r9\n\
- cmp r2, 0xD\n\
- bne _0803BEBE\n\
- movs r0, 0\n\
- str r0, [sp]\n\
- movs r0, 0xE\n\
- movs r1, 0\n\
- movs r2, 0\n\
- movs r3, 0xFD\n\
- bl AbilityBattleEffects\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- beq _0803BEBE\n\
- ldr r1, _0803BFE8 @ =gBattleMovePower\n\
- ldrh r0, [r1]\n\
- lsrs r0, 1\n\
- strh r0, [r1]\n\
-_0803BEBE:\n\
- mov r3, r9\n\
- cmp r3, 0xA\n\
- bne _0803BEE2\n\
- movs r0, 0\n\
- str r0, [sp]\n\
- movs r0, 0xE\n\
- movs r1, 0\n\
- movs r2, 0\n\
- movs r3, 0xFE\n\
- bl AbilityBattleEffects\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- beq _0803BEE2\n\
- ldr r1, _0803BFE8 @ =gBattleMovePower\n\
- ldrh r0, [r1]\n\
- lsrs r0, 1\n\
- strh r0, [r1]\n\
-_0803BEE2:\n\
- mov r0, r9\n\
- cmp r0, 0xC\n\
- bne _0803BF12\n\
- ldr r1, [sp, 0x24]\n\
- ldrb r0, [r1]\n\
- cmp r0, 0x41\n\
- bne _0803BF12\n\
- ldrh r0, [r7, 0x2C]\n\
- movs r1, 0x3\n\
- bl __udivsi3\n\
- ldrh r1, [r7, 0x28]\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- cmp r1, r0\n\
- bhi _0803BF12\n\
- ldr r4, _0803BFE8 @ =gBattleMovePower\n\
- ldrh r1, [r4]\n\
- movs r0, 0x96\n\
- muls r0, r1\n\
- movs r1, 0x64\n\
- bl __divsi3\n\
- strh r0, [r4]\n\
-_0803BF12:\n\
- mov r2, r9\n\
- cmp r2, 0xA\n\
- bne _0803BF42\n\
- ldr r3, [sp, 0x24]\n\
- ldrb r0, [r3]\n\
- cmp r0, 0x42\n\
- bne _0803BF42\n\
- ldrh r0, [r7, 0x2C]\n\
- movs r1, 0x3\n\
- bl __udivsi3\n\
- ldrh r1, [r7, 0x28]\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- cmp r1, r0\n\
- bhi _0803BF42\n\
- ldr r4, _0803BFE8 @ =gBattleMovePower\n\
- ldrh r1, [r4]\n\
- movs r0, 0x96\n\
- muls r0, r1\n\
- movs r1, 0x64\n\
- bl __divsi3\n\
- strh r0, [r4]\n\
-_0803BF42:\n\
- mov r0, r9\n\
- cmp r0, 0xB\n\
- bne _0803BF72\n\
- ldr r1, [sp, 0x24]\n\
- ldrb r0, [r1]\n\
- cmp r0, 0x43\n\
- bne _0803BF72\n\
- ldrh r0, [r7, 0x2C]\n\
- movs r1, 0x3\n\
- bl __udivsi3\n\
- ldrh r1, [r7, 0x28]\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- cmp r1, r0\n\
- bhi _0803BF72\n\
- ldr r4, _0803BFE8 @ =gBattleMovePower\n\
- ldrh r1, [r4]\n\
- movs r0, 0x96\n\
- muls r0, r1\n\
- movs r1, 0x64\n\
- bl __divsi3\n\
- strh r0, [r4]\n\
-_0803BF72:\n\
- mov r2, r9\n\
- cmp r2, 0x6\n\
- bne _0803BFA2\n\
- ldr r3, [sp, 0x24]\n\
- ldrb r0, [r3]\n\
- cmp r0, 0x44\n\
- bne _0803BFA2\n\
- ldrh r0, [r7, 0x2C]\n\
- movs r1, 0x3\n\
- bl __udivsi3\n\
- ldrh r1, [r7, 0x28]\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- cmp r1, r0\n\
- bhi _0803BFA2\n\
- ldr r4, _0803BFE8 @ =gBattleMovePower\n\
- ldrh r1, [r4]\n\
- movs r0, 0x96\n\
- muls r0, r1\n\
- movs r1, 0x64\n\
- bl __divsi3\n\
- strh r0, [r4]\n\
-_0803BFA2:\n\
- ldr r2, _0803BFEC @ =gBattleMoves\n\
- ldr r0, _0803BFF0 @ =gCurrentMove\n\
- ldrh r1, [r0]\n\
- lsls r0, r1, 1\n\
- adds r0, r1\n\
- lsls r0, 2\n\
- adds r0, r2\n\
- ldrb r0, [r0]\n\
- cmp r0, 0x7\n\
- bne _0803BFBC\n\
- ldr r0, [sp, 0x14]\n\
- lsrs r0, 1\n\
- str r0, [sp, 0x14]\n\
-_0803BFBC:\n\
- mov r1, r9\n\
- cmp r1, 0x8\n\
- bls _0803BFC4\n\
- b _0803C122\n\
-_0803BFC4:\n\
- ldr r0, _0803BFF4 @ =gCritMultiplier\n\
- ldrb r1, [r0]\n\
- adds r4, r0, 0\n\
- cmp r1, 0x2\n\
- bne _0803C000\n\
- movs r0, 0x19\n\
- ldrsb r0, [r7, r0]\n\
- cmp r0, 0x6\n\
- ble _0803BFFC\n\
- ldr r2, _0803BFF8 @ =gStatStageRatios\n\
- b _0803C006\n\
- .align 2, 0\n\
-_0803BFDC: .4byte gBattleTypeFlags\n\
-_0803BFE0: .4byte 0xfffffe69\n\
-_0803BFE4: .4byte 0x00000175\n\
-_0803BFE8: .4byte gBattleMovePower\n\
-_0803BFEC: .4byte gBattleMoves\n\
-_0803BFF0: .4byte gCurrentMove\n\
-_0803BFF4: .4byte gCritMultiplier\n\
-_0803BFF8: .4byte gStatStageRatios\n\
-_0803BFFC:\n\
- adds r5, r6, 0\n\
- b _0803C01E\n\
-_0803C000:\n\
- ldr r2, _0803C050 @ =gStatStageRatios\n\
- movs r0, 0x19\n\
- ldrsb r0, [r7, r0]\n\
-_0803C006:\n\
- lsls r0, 1\n\
- adds r1, r0, r2\n\
- ldrb r1, [r1]\n\
- adds r5, r6, 0\n\
- muls r5, r1\n\
- adds r2, 0x1\n\
- adds r0, r2\n\
- ldrb r1, [r0]\n\
- adds r0, r5, 0\n\
- bl __divsi3\n\
- adds r5, r0, 0\n\
-_0803C01E:\n\
- ldr r0, _0803C054 @ =gBattleMovePower\n\
- ldrh r0, [r0]\n\
- muls r5, r0\n\
- adds r0, r7, 0\n\
- adds r0, 0x2A\n\
- ldrb r0, [r0]\n\
- lsls r0, 1\n\
- movs r1, 0x5\n\
- bl __divsi3\n\
- adds r0, 0x2\n\
- muls r5, r0\n\
- ldrb r0, [r4]\n\
- cmp r0, 0x2\n\
- bne _0803C05C\n\
- ldr r2, [sp, 0x4]\n\
- movs r0, 0x1A\n\
- ldrsb r0, [r2, r0]\n\
- cmp r0, 0x5\n\
- bgt _0803C058\n\
- ldr r2, _0803C050 @ =gStatStageRatios\n\
- ldr r3, [sp, 0x4]\n\
- movs r0, 0x1A\n\
- ldrsb r0, [r3, r0]\n\
- b _0803C064\n\
- .align 2, 0\n\
-_0803C050: .4byte gStatStageRatios\n\
-_0803C054: .4byte gBattleMovePower\n\
-_0803C058:\n\
- ldr r3, [sp, 0x14]\n\
- b _0803C07E\n\
-_0803C05C:\n\
- ldr r2, _0803C0DC @ =gStatStageRatios\n\
- ldr r1, [sp, 0x4]\n\
- movs r0, 0x1A\n\
- ldrsb r0, [r1, r0]\n\
-_0803C064:\n\
- lsls r0, 1\n\
- adds r1, r0, r2\n\
- ldrb r1, [r1]\n\
- ldr r6, [sp, 0x14]\n\
- adds r3, r6, 0\n\
- muls r3, r1\n\
- adds r2, 0x1\n\
- adds r0, r2\n\
- ldrb r1, [r0]\n\
- adds r0, r3, 0\n\
- bl __divsi3\n\
- adds r3, r0, 0\n\
-_0803C07E:\n\
- adds r0, r5, 0\n\
- adds r1, r3, 0\n\
- bl __divsi3\n\
- adds r5, r0, 0\n\
- movs r1, 0x32\n\
- bl __divsi3\n\
- adds r5, r0, 0\n\
- ldr r0, [r7, 0x4C]\n\
- movs r1, 0x10\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0803C0A8\n\
- ldr r1, [sp, 0x24]\n\
- ldrb r0, [r1]\n\
- cmp r0, 0x3E\n\
- beq _0803C0A8\n\
- lsrs r0, r5, 31\n\
- adds r0, r5, r0\n\
- asrs r5, r0, 1\n\
-_0803C0A8:\n\
- movs r0, 0x1\n\
- ldr r2, [sp, 0xC]\n\
- ands r0, r2\n\
- cmp r0, 0\n\
- beq _0803C0EA\n\
- ldrb r1, [r4]\n\
- cmp r1, 0x1\n\
- bne _0803C0EA\n\
- ldr r0, _0803C0E0 @ =gBattleTypeFlags\n\
- ldrh r0, [r0]\n\
- ands r1, r0\n\
- cmp r1, 0\n\
- beq _0803C0E4\n\
- movs r0, 0x2\n\
- bl CountAliveMons\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- cmp r0, 0x2\n\
- bne _0803C0E4\n\
- adds r0, r5, 0\n\
- movs r1, 0x3\n\
- bl __divsi3\n\
- lsls r5, r0, 1\n\
- b _0803C0EA\n\
- .align 2, 0\n\
-_0803C0DC: .4byte gStatStageRatios\n\
-_0803C0E0: .4byte gBattleTypeFlags\n\
-_0803C0E4:\n\
- lsrs r0, r5, 31\n\
- adds r0, r5, r0\n\
- asrs r5, r0, 1\n\
-_0803C0EA:\n\
- ldr r0, _0803C148 @ =gBattleTypeFlags\n\
- ldrh r1, [r0]\n\
- movs r0, 0x1\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0803C11C\n\
- ldr r0, _0803C14C @ =gBattleMoves\n\
- ldr r3, [sp, 0x8]\n\
- lsls r1, r3, 1\n\
- adds r1, r3\n\
- lsls r1, 2\n\
- adds r1, r0\n\
- ldrb r0, [r1, 0x6]\n\
- cmp r0, 0x8\n\
- bne _0803C11C\n\
- movs r0, 0x2\n\
- bl CountAliveMons\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- cmp r0, 0x2\n\
- bne _0803C11C\n\
- lsrs r0, r5, 31\n\
- adds r0, r5, r0\n\
- asrs r5, r0, 1\n\
-_0803C11C:\n\
- cmp r5, 0\n\
- bne _0803C122\n\
- movs r5, 0x1\n\
-_0803C122:\n\
- mov r6, r9\n\
- cmp r6, 0x9\n\
- bne _0803C12A\n\
- movs r5, 0\n\
-_0803C12A:\n\
- mov r0, r9\n\
- cmp r0, 0x9\n\
- bhi _0803C132\n\
- b _0803C330\n\
-_0803C132:\n\
- ldr r0, _0803C150 @ =gCritMultiplier\n\
- ldrb r1, [r0]\n\
- adds r4, r0, 0\n\
- cmp r1, 0x2\n\
- bne _0803C15C\n\
- movs r0, 0x1C\n\
- ldrsb r0, [r7, r0]\n\
- cmp r0, 0x6\n\
- ble _0803C158\n\
- ldr r2, _0803C154 @ =gStatStageRatios\n\
- b _0803C162\n\
- .align 2, 0\n\
-_0803C148: .4byte gBattleTypeFlags\n\
-_0803C14C: .4byte gBattleMoves\n\
-_0803C150: .4byte gCritMultiplier\n\
-_0803C154: .4byte gStatStageRatios\n\
-_0803C158:\n\
- mov r5, r8\n\
- b _0803C17A\n\
-_0803C15C:\n\
- ldr r2, _0803C1A8 @ =gStatStageRatios\n\
- movs r0, 0x1C\n\
- ldrsb r0, [r7, r0]\n\
-_0803C162:\n\
- lsls r0, 1\n\
- adds r1, r0, r2\n\
- ldrb r1, [r1]\n\
- mov r5, r8\n\
- muls r5, r1\n\
- adds r2, 0x1\n\
- adds r0, r2\n\
- ldrb r1, [r0]\n\
- adds r0, r5, 0\n\
- bl __divsi3\n\
- adds r5, r0, 0\n\
-_0803C17A:\n\
- ldr r0, _0803C1AC @ =gBattleMovePower\n\
- ldrh r0, [r0]\n\
- muls r5, r0\n\
- adds r0, r7, 0\n\
- adds r0, 0x2A\n\
- ldrb r0, [r0]\n\
- lsls r0, 1\n\
- movs r1, 0x5\n\
- bl __divsi3\n\
- adds r0, 0x2\n\
- muls r5, r0\n\
- ldrb r0, [r4]\n\
- cmp r0, 0x2\n\
- bne _0803C1B4\n\
- ldr r1, [sp, 0x4]\n\
- movs r0, 0x1D\n\
- ldrsb r0, [r1, r0]\n\
- cmp r0, 0x5\n\
- bgt _0803C1B0\n\
- ldr r2, _0803C1A8 @ =gStatStageRatios\n\
- b _0803C1BC\n\
- .align 2, 0\n\
-_0803C1A8: .4byte gStatStageRatios\n\
-_0803C1AC: .4byte gBattleMovePower\n\
-_0803C1B0:\n\
- ldr r3, [sp, 0x18]\n\
- b _0803C1D6\n\
-_0803C1B4:\n\
- ldr r2, _0803C21C @ =gStatStageRatios\n\
- ldr r1, [sp, 0x4]\n\
- movs r0, 0x1D\n\
- ldrsb r0, [r1, r0]\n\
-_0803C1BC:\n\
- lsls r0, 1\n\
- adds r1, r0, r2\n\
- ldrb r1, [r1]\n\
- ldr r6, [sp, 0x18]\n\
- adds r3, r6, 0\n\
- muls r3, r1\n\
- adds r2, 0x1\n\
- adds r0, r2\n\
- ldrb r1, [r0]\n\
- adds r0, r3, 0\n\
- bl __divsi3\n\
- adds r3, r0, 0\n\
-_0803C1D6:\n\
- adds r0, r5, 0\n\
- adds r1, r3, 0\n\
- bl __divsi3\n\
- adds r5, r0, 0\n\
- movs r1, 0x32\n\
- bl __divsi3\n\
- adds r5, r0, 0\n\
- movs r0, 0x2\n\
- ldr r1, [sp, 0xC]\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0803C22A\n\
- ldrb r1, [r4]\n\
- cmp r1, 0x1\n\
- bne _0803C22A\n\
- ldr r0, _0803C220 @ =gBattleTypeFlags\n\
- ldrh r0, [r0]\n\
- ands r1, r0\n\
- cmp r1, 0\n\
- beq _0803C224\n\
- movs r0, 0x2\n\
- bl CountAliveMons\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- cmp r0, 0x2\n\
- bne _0803C224\n\
- adds r0, r5, 0\n\
- movs r1, 0x3\n\
- bl __divsi3\n\
- lsls r5, r0, 1\n\
- b _0803C22A\n\
- .align 2, 0\n\
-_0803C21C: .4byte gStatStageRatios\n\
-_0803C220: .4byte gBattleTypeFlags\n\
-_0803C224:\n\
- lsrs r0, r5, 31\n\
- adds r0, r5, r0\n\
- asrs r5, r0, 1\n\
-_0803C22A:\n\
- ldr r0, _0803C2A4 @ =gBattleTypeFlags\n\
- ldrh r1, [r0]\n\
- movs r0, 0x1\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0803C25C\n\
- ldr r0, _0803C2A8 @ =gBattleMoves\n\
- ldr r2, [sp, 0x8]\n\
- lsls r1, r2, 1\n\
- adds r1, r2\n\
- lsls r1, 2\n\
- adds r1, r0\n\
- ldrb r0, [r1, 0x6]\n\
- cmp r0, 0x8\n\
- bne _0803C25C\n\
- movs r0, 0x2\n\
- bl CountAliveMons\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- cmp r0, 0x2\n\
- bne _0803C25C\n\
- lsrs r0, r5, 31\n\
- adds r0, r5, r0\n\
- asrs r5, r0, 1\n\
-_0803C25C:\n\
- movs r0, 0\n\
- str r0, [sp]\n\
- movs r0, 0xE\n\
- movs r1, 0\n\
- movs r2, 0xD\n\
- movs r3, 0\n\
- bl AbilityBattleEffects\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- cmp r0, 0\n\
- bne _0803C30C\n\
- str r0, [sp]\n\
- movs r0, 0xE\n\
- movs r1, 0\n\
- movs r2, 0x4D\n\
- movs r3, 0\n\
- bl AbilityBattleEffects\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- bne _0803C30C\n\
- ldr r2, _0803C2AC @ =gBattleWeather\n\
- ldrh r1, [r2]\n\
- movs r0, 0x1\n\
- ands r0, r1\n\
- adds r4, r2, 0\n\
- cmp r0, 0\n\
- beq _0803C2C4\n\
- mov r3, r9\n\
- cmp r3, 0xA\n\
- beq _0803C2B0\n\
- cmp r3, 0xB\n\
- beq _0803C2B8\n\
- b _0803C2C4\n\
- .align 2, 0\n\
-_0803C2A4: .4byte gBattleTypeFlags\n\
-_0803C2A8: .4byte gBattleMoves\n\
-_0803C2AC: .4byte gBattleWeather\n\
-_0803C2B0:\n\
- lsrs r0, r5, 31\n\
- adds r0, r5, r0\n\
- asrs r5, r0, 1\n\
- b _0803C2C4\n\
-_0803C2B8:\n\
- lsls r0, r5, 4\n\
- subs r0, r5\n\
- movs r1, 0xA\n\
- bl __divsi3\n\
- adds r5, r0, 0\n\
-_0803C2C4:\n\
- ldrh r1, [r4]\n\
- movs r0, 0x9F\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0803C2DC\n\
- ldr r0, _0803C2F4 @ =gCurrentMove\n\
- ldrh r0, [r0]\n\
- cmp r0, 0x4C\n\
- bne _0803C2DC\n\
- lsrs r0, r5, 31\n\
- adds r0, r5, r0\n\
- asrs r5, r0, 1\n\
-_0803C2DC:\n\
- ldrh r1, [r4]\n\
- movs r0, 0x60\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0803C30C\n\
- mov r6, r9\n\
- cmp r6, 0xA\n\
- beq _0803C2F8\n\
- cmp r6, 0xB\n\
- beq _0803C306\n\
- b _0803C30C\n\
- .align 2, 0\n\
-_0803C2F4: .4byte gCurrentMove\n\
-_0803C2F8:\n\
- lsls r0, r5, 4\n\
- subs r0, r5\n\
- movs r1, 0xA\n\
- bl __divsi3\n\
- adds r5, r0, 0\n\
- b _0803C30C\n\
-_0803C306:\n\
- lsrs r0, r5, 31\n\
- adds r0, r5, r0\n\
- asrs r5, r0, 1\n\
-_0803C30C:\n\
- ldr r1, _0803C344 @ =0x02017100\n\
- ldr r2, [sp, 0x10]\n\
- lsls r0, r2, 2\n\
- adds r0, r1\n\
- ldr r0, [r0]\n\
- movs r1, 0x1\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _0803C330\n\
- mov r3, r9\n\
- cmp r3, 0xA\n\
- bne _0803C330\n\
- lsls r0, r5, 4\n\
- subs r0, r5\n\
- movs r1, 0xA\n\
- bl __divsi3\n\
- adds r5, r0, 0\n\
-_0803C330:\n\
- adds r0, r5, 0x2\n\
- add sp, 0x2C\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\
- .align 2, 0\n\
-_0803C344: .4byte 0x02017100\n\
- .syntax divided");
-}
-#endif
diff --git a/src/choose_party.c b/src/choose_party.c
index 7b2c833e1..9cdf63fc8 100644
--- a/src/choose_party.c
+++ b/src/choose_party.c
@@ -6,9 +6,10 @@
#include "name_string_util.h"
#include "palette.h"
#include "party_menu.h"
+#include "pokemon_menu.h"
#include "pokemon.h"
#include "pokemon_summary_screen.h"
-#include "rom4.h"
+#include "overworld.h"
#include "script.h"
#include "songs.h"
#include "sound.h"
@@ -50,10 +51,8 @@ extern void PartyMenuPrintMonsLevelOrStatus(void);
extern void PrintPartyMenuMonNicknames(void);
extern void sub_806BC3C(u8, u8);
extern u8 sub_806B58C(u8);
-extern void sub_806D538();
extern u16 sub_806BE38();
extern u8 sub_806CA38();
-extern void sub_808B5B4();
extern TaskFunc PartyMenuGetPopupMenuFunc(u8, const struct PartyPopupMenu *, const struct PartyMenuItem *, u8);
extern u8 sub_806B124();
extern void sub_806C994();
@@ -84,8 +83,6 @@ extern void PartyMenuDoPutNicknameTilemap(u16, u8, u8, u8, const u8 *);
extern void box_print(u8, int, const u8 *);
extern void sub_806BCE8(void);
extern void sub_806E750(u8, const struct PartyPopupMenu *, const struct PartyMenuItem *, int);
-extern u16 sub_806BD80();
-extern void sub_806BF74();
static void ClearPartySelection(void);
static bool8 IsMonAllowedInBattleTower(struct Pokemon *);
diff --git a/src/clock.c b/src/clock.c
index 1f2aac9fd..9635514d2 100644
--- a/src/clock.c
+++ b/src/clock.c
@@ -7,7 +7,7 @@
#include "field_weather.h"
#include "lottery_corner.h"
#include "main.h"
-#include "rom4.h"
+#include "overworld.h"
#include "rtc.h"
#include "time_events.h"
#include "tv.h"
diff --git a/src/cute_sketch.c b/src/cute_sketch.c
new file mode 100644
index 000000000..5317bc334
--- /dev/null
+++ b/src/cute_sketch.c
@@ -0,0 +1,164 @@
+#include "global.h"
+#include "cute_sketch.h"
+#include "contest_painting.h"
+
+extern u16 (*gUnknown_03005DEC)[][32];
+extern u8 gUnknown_03005E00;
+extern u8 gUnknown_03005DFC;
+extern u8 gUnknown_03005DF8;
+extern u8 gUnknown_03005DF0;
+extern u8 gUnknown_03005E04;
+extern u8 gUnknown_03005DF4;
+
+extern u8 gUnknown_03005DE8;
+
+// this file's functions
+void sub_80FCAA4(void);
+void sub_80FCB5C(void);
+void sub_80FCD54(void);
+void sub_80FCEA4(void);
+void sub_80FCCBC(void);
+void sub_80FD06C(void);
+void sub_80FD114(void);
+void sub_80FCF3C(void);
+void sub_80FCAC4(void);
+void sub_80FCC18(u8);
+void sub_80FC92C(u8);
+void sub_80FC9E4(u8);
+void sub_80FD1C8(u16);
+u16 sub_80FD39C(u16*);
+u16 sub_80FD68C(u16*, u16*, u16*);
+
+void sub_80FC7A0(struct Unk03005E20* info)
+{
+ gUnknown_03005DEC = info->var_4;
+ gUnknown_03005E00 = info->var_1F;
+ gUnknown_03005DE8 = info->var_19;
+ gUnknown_03005DFC = info->var_1A;
+ gUnknown_03005DF8 = info->var_1B;
+ gUnknown_03005DF0 = info->var_1C;
+ gUnknown_03005E04 = info->var_1D;
+ gUnknown_03005DF4 = info->var_1E;
+ switch (info->var_0)
+ {
+ case 2:
+ sub_80FCAA4();
+ break;
+ case 8:
+ sub_80FCB5C();
+ break;
+ case 9:
+ sub_80FCD54();
+ sub_80FCC18(gUnknown_03005E00);
+ break;
+ case 10:
+ sub_80FCD54();
+ sub_80FCEA4();
+ sub_80FCCBC();
+ case 31:
+ sub_80FCEA4();
+ break;
+ case 11:
+ sub_80FCD54();
+ sub_80FD06C();
+ sub_80FD06C();
+ sub_80FD114();
+ sub_80FCCBC();
+ break;
+ case 13:
+ sub_80FCF3C();
+ break;
+ case 30:
+ sub_80FCD54();
+ break;
+ case 32:
+ sub_80FD06C();
+ break;
+ case 33:
+ sub_80FD114();
+ break;
+ case 6:
+ sub_80FCAC4();
+ sub_80FC92C(3);
+ break;
+ case 36:
+ sub_80FCD54();
+ sub_80FD06C();
+ sub_80FD114();
+ sub_80FCCBC();
+ sub_80FCB5C();
+ sub_80FCB5C();
+ sub_80FC92C(2);
+ sub_80FC9E4(4);
+ break;
+ }
+}
+
+#define RGB2(r, g, b) (((b) << 10) | ((g) << 5) | (r))
+
+void sub_80FC92C(u8 a0) // it changes palette someway somehow... .__.
+{
+ u8 i, j;
+ for (i = 0; i < gUnknown_03005DF0; i++)
+ {
+ u16* var2 = &(*gUnknown_03005DEC)[0][(gUnknown_03005DFC + i) * gUnknown_03005E04];
+ u16* pal = &var2[gUnknown_03005DE8];
+ for (j = 0; j < gUnknown_03005DF8; j++, pal++)
+ {
+ if (!(0x8000 & *pal))
+ {
+ u8 val = (31 & *pal);
+ val += a0;
+ if (val > 31)
+ val = 31;
+
+ *pal = RGB2(val, val, val);
+ }
+ }
+ }
+}
+
+void sub_80FC9E4(u8 a0)
+{
+ u8 i, j;
+ for (i = 0; i < gUnknown_03005DF0; i++)
+ {
+ u16* var2 = &(*gUnknown_03005DEC)[0][(gUnknown_03005DFC + i) * gUnknown_03005E04];
+ u16* pal = &var2[gUnknown_03005DE8];
+ for (j = 0; j < gUnknown_03005DF8; j++, pal++)
+ {
+ if (!(0x8000 & *pal))
+ {
+ u8 val = (31 & *pal);
+ if (val > 31 - a0)
+ val = 31 - (a0 >> 1);
+
+ *pal = RGB2(val, val, val);
+ }
+ }
+ }
+}
+
+void sub_80FCAA4(void)
+{
+ u32 i;
+ for (i = 0; i < 3200; i++)
+ sub_80FD1C8(i);
+}
+
+void sub_80FCAC4(void)
+{
+ u8 i, j;
+ for (i = 0; i < gUnknown_03005DF0; i++)
+ {
+ u16* var2 = &(*gUnknown_03005DEC)[0][(gUnknown_03005DFC + i) * gUnknown_03005E04];
+ u16* pal = &var2[gUnknown_03005DE8];
+ for (j = 0; j < gUnknown_03005DF8; j++, pal++)
+ {
+ if (!(0x8000 & *pal))
+ {
+ *pal = sub_80FD39C(pal);
+ }
+ }
+ }
+}
diff --git a/src/daycare.c b/src/daycare.c
index cded18207..591b5b188 100644
--- a/src/daycare.c
+++ b/src/daycare.c
@@ -1,11 +1,46 @@
#include "global.h"
#include "daycare.h"
#include "pokemon.h"
+#include "event_data.h"
#include "species.h"
#include "items.h"
+#include "text.h"
#include "string_util.h"
+#include "mail_data.h"
+#include "name_string_util.h"
+#include "pokemon_storage_system.h"
+#include "rng.h"
+#include "moves.h"
+#include "trade.h"
+#include "strings2.h"
+#include "data/pokemon/egg_moves.h"
+#include "party_menu.h"
+#include "field_effect.h"
+#include "main.h"
+#include "menu.h"
+#include "sound.h"
+#include "songs.h"
+#include "script.h"
+#include "overworld.h"
-extern u8 gLastFieldPokeMenuOpened;
+IWRAM_DATA u16 gUnknown_03000470[52];
+IWRAM_DATA u16 gUnknown_030004D8[4];
+IWRAM_DATA u16 gUnknown_030004E0[4];
+IWRAM_DATA u16 gUnknown_030004E8[12];
+IWRAM_DATA u16 gUnknown_03000500[4];
+
+static void sub_80417F4(struct DayCareMail *);
+static void sub_80420FC(struct Pokemon *, u16, struct DayCareData *);
+static u8 daycare_relationship_score(struct DayCareData *);
+
+const u8 *const gUnknown_08209AC4[] = {
+ DaycareText_GetAlongVeryWell,
+ DaycareText_GetAlong,
+ DaycareText_DontLikeOther,
+ DaycareText_PlayOther
+};
+
+const u8 gUnknown_08209AD4[] = _("タマゴ");
u8 *GetMonNick(struct Pokemon *mon, u8 *dest)
{
@@ -23,19 +58,19 @@ u8 *GetBoxMonNick(struct BoxPokemon *mon, u8 *dest)
return StringCopy10(dest, nickname);
}
-u8 Daycare_CountPokemon(struct BoxPokemon *daycare_data)
+u8 Daycare_CountPokemon(struct DayCareData *daycare_data)
{
u8 i, count;
count = 0;
for(i = 0;i <= 1;i++)
- if(GetBoxMonData(daycare_data + i, MON_DATA_SPECIES) != 0)
+ if(GetBoxMonData(&daycare_data->mons[i], MON_DATA_SPECIES) != 0)
count++;
return count;
}
-void sub_8041324(struct BoxPokemon * box_pokemon, struct RecordMixing_UnknownStruct * void_pointer)
+void sub_8041324(struct BoxPokemon * box_pokemon, struct RecordMixingDayCareMail * daycareMailEtc)
{
u8 i;
u8 specCount;
@@ -47,20 +82,20 @@ void sub_8041324(struct BoxPokemon * box_pokemon, struct RecordMixing_UnknownStr
specCount ++;
if (GetBoxMonData(&box_pokemon[i], MON_DATA_HELD_ITEM) == ITEM_NONE)
{
- void_pointer->unk74[i] = 0;
+ daycareMailEtc->unk74[i] = 0;
} else
{
- void_pointer->unk74[i] = 1;
+ daycareMailEtc->unk74[i] = 1;
}
} else
{
- void_pointer->unk74[i] = 1;
+ daycareMailEtc->unk74[i] = 1;
}
}
- void_pointer->unk70 = specCount;
+ daycareMailEtc->unk70 = specCount;
}
-s8 Daycare_FindEmptySpot(struct BoxPokemon * daycare_data)
+static s8 Daycare_FindEmptySpot(struct BoxPokemon * daycare_data)
{
u8 i;
@@ -71,275 +106,108 @@ s8 Daycare_FindEmptySpot(struct BoxPokemon * daycare_data)
return -1;
}
-/*void Daycare_SendPokemon(struct Pokemon * mon, struct BoxPokemon * daycare_data){ // unfinished
+static void Daycare_SendPokemon(struct Pokemon * mon, struct DayCareData * daycare_data)
+{
s8 empty_slot;
+ u8 mail;
+ u8 *names;
- empty_slot = Daycare_FindEmptySpot(daycare_data);
- if(MonHasMail(mon) != 0){ // if the mon holds a mail?
- u8 empty_slot_times_56 = empty_slot * 56;
- u8 * something2 = ((u8 *) (daycare_data + 2)) + empty_slot_times_56 + 36;
- StringCopy(something2, gSaveBlock2.playerName);
- PadNameString(something2, 0xFC);
- something2 += 8;
- GetMonNick(mon, something2);
- u8 pokerus = GetMonData(mon, MON_DATA_64);
- something1 += (u8 * daycare_data)
-}*/
-
-__attribute__((naked))
-void Daycare_SendPokemon()
-{
- // strange stack usage - happens because THUMB ARM only allows R0-R7 to be pushed/popped:
- // all registers in reglist must be Lo registers, except that PUSH can include the LR, and POP can include the PC
- // the ldm/stm section probably copies some struct, but I'm not sure how the code would look
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r9\n\
- mov r6, r8\n\
- push {r6,r7}\n\
- adds r7, r0, 0\n\
- mov r8, r1\n\
- mov r0, r8\n\
- bl Daycare_FindEmptySpot\n\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
- mov r9, r4\n\
- adds r0, r7, 0\n\
- bl MonHasMail\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- beq _0804144A\n\
- lsls r0, r4, 24\n\
- asrs r0, 24\n\
- lsls r4, r0, 3\n\
- subs r4, r0\n\
- lsls r4, 3\n\
- adds r5, r4, 0\n\
- adds r5, 0xA0\n\
- add r5, r8\n\
- adds r6, r5, 0\n\
- adds r6, 0x24\n\
- ldr r1, _08041490 @ =gSaveBlock2\n\
- adds r0, r6, 0\n\
- bl StringCopy\n\
- adds r0, r6, 0\n\
- movs r1, 0xFC\n\
- bl PadNameString\n\
- adds r6, 0x8\n\
- adds r0, r7, 0\n\
- adds r1, r6, 0\n\
- bl GetMonNick\n\
- adds r0, r7, 0\n\
- movs r1, 0x40\n\
- bl GetMonData\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- add r4, r8\n\
- ldr r2, _08041494 @ =gSaveBlock1\n\
- lsls r1, r0, 3\n\
- adds r1, r0\n\
- lsls r1, 2\n\
- adds r1, r2\n\
- adds r4, 0xA0\n\
- ldr r0, _08041498 @ =0x00002b4c\n\
- adds r1, r0\n\
- ldm r1!, {r0,r2,r3}\n\
- stm r4!, {r0,r2,r3}\n\
- ldm r1!, {r0,r2,r3}\n\
- stm r4!, {r0,r2,r3}\n\
- ldm r1!, {r0,r2,r3}\n\
- stm r4!, {r0,r2,r3}\n\
- adds r0, r7, 0\n\
- bl TakeMailFromMon\n\
-_0804144A:\n\
- mov r2, r9\n\
- lsls r4, r2, 24\n\
- asrs r4, 24\n\
- lsls r5, r4, 2\n\
- adds r4, r5, r4\n\
- lsls r4, 4\n\
- add r4, r8\n\
- adds r0, r4, 0\n\
- adds r1, r7, 0\n\
- movs r2, 0x50\n\
- bl memcpy\n\
- adds r0, r4, 0\n\
- bl BoxMonRestorePP\n\
- movs r0, 0x88\n\
- lsls r0, 1\n\
- add r0, r8\n\
- adds r0, r5\n\
- movs r1, 0\n\
- str r1, [r0]\n\
- adds r0, r7, 0\n\
- bl ZeroMonData\n\
- bl party_compaction\n\
- bl CalculatePlayerPartyCount\n\
- pop {r3,r4}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
-_08041490: .4byte gSaveBlock2\n\
-_08041494: .4byte gSaveBlock1\n\
-_08041498: .4byte 0x00002b4c\n\
- .syntax divided\n");
+ empty_slot = Daycare_FindEmptySpot(daycare_data->mons);
+ if(MonHasMail(mon)) {
+ StringCopy((names = daycare_data->misc.mail[empty_slot].names), gSaveBlock2.playerName);
+ PadNameString(names, 0xFC);
+ names += 8;
+ GetMonNick(mon, names);
+ mail = GetMonData(mon, MON_DATA_MAIL);
+ daycare_data->misc.mail[empty_slot].message = gSaveBlock1.mail[mail];
+ TakeMailFromMon(mon);
+ }
+ daycare_data->mons[empty_slot] = mon->box;
+ BoxMonRestorePP(&daycare_data->mons[empty_slot]);
+ daycare_data->misc.countersEtc.steps[empty_slot] = 0;
+ ZeroMonData(mon);
+ party_compaction();
+ CalculatePlayerPartyCount();
}
void Daycare_SendPokemon_Special()
{
- Daycare_SendPokemon(gPlayerParty + gLastFieldPokeMenuOpened, gSaveBlock1.daycareData);
+ Daycare_SendPokemon(gPlayerParty + gLastFieldPokeMenuOpened, &gSaveBlock1.daycareData);
}
-void sub_80417F4(u8 *);
-
-void sub_80414C0(struct BoxPokemon * daycare_data)
+static void sub_80414C0(struct DayCareData * daycare_data)
{
- u32 second_species;
- if((GetBoxMonData(&daycare_data[1], MON_DATA_SPECIES) != 0) && ((second_species = GetBoxMonData(&daycare_data[0], MON_DATA_SPECIES)) == 0)){
- daycare_data[0] = daycare_data[1];
- ZeroBoxMonData(&daycare_data[1]);
- memcpy(daycare_data + 2, (u8 *) (daycare_data + 1) + 0x88, 0x38);
- *((u32 *)(daycare_data) + 68) = *((u32 *)(daycare_data) + 69);
- *((u32 *)(daycare_data) + 69) = second_species;
- sub_80417F4((u8 *) (daycare_data + 1) + 0x88);
+ if((GetBoxMonData(&daycare_data->mons[1], MON_DATA_SPECIES) != 0) && GetBoxMonData(&daycare_data->mons[0], MON_DATA_SPECIES) == 0)
+ {
+ daycare_data->mons[0] = daycare_data->mons[1];
+ ZeroBoxMonData(&daycare_data->mons[1]);
+ daycare_data->misc.mail[0] = daycare_data->misc.mail[1];
+ daycare_data->misc.countersEtc.steps[0] = daycare_data->misc.countersEtc.steps[1];
+ daycare_data->misc.countersEtc.steps[1] = 0;
+ sub_80417F4(&daycare_data->misc.mail[1]);
}
}
u8 TryIncrementMonLevel(struct Pokemon *);
-extern u16 word_2024E82;
+extern u16 gMoveToLearn;
-void sub_804151C(struct Pokemon * mon)
+static void DayCare_LevelUpMoves(struct Pokemon * mon)
{
s32 i;
u8 r6;
u16 temp;
- for(i = 0; i < 100; i++){
- if(TryIncrementMonLevel(mon) == FALSE) goto end;
-
- r6 = 1;
- while((temp = sub_803B7C8(mon, r6)) != 0){
- r6 = 0;
- if(temp == 0xffff){
- DeleteFirstMoveAndGiveMoveToMon(mon, word_2024E82);
+ for (i = 0; i < MAX_LEVEL; i++)
+ {
+ if (TryIncrementMonLevel(mon))
+ {
+ r6 = 1;
+ while ((temp = MonTryLearningNewMove(mon, r6)) != 0)
+ {
+ r6 = 0;
+ if (temp == 0xffff)
+ DeleteFirstMoveAndGiveMoveToMon(mon, gMoveToLearn);
}
}
+ else
+ break;
}
- end:
-
CalculateMonStats(mon);
}
-__attribute__((naked))
-u16 sub_8041570(struct BoxPokemon * daycare_data, u8 a2){
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- mov r7, r9\n\
- mov r6, r8\n\
- push {r6,r7}\n\
- sub sp, 0x68\n\
- adds r5, r0, 0\n\
- lsls r1, 24\n\
- lsrs r4, r1, 24\n\
- lsls r7, r4, 2\n\
- adds r0, r7, r4\n\
- lsls r0, 4\n\
- adds r6, r5, r0\n\
- ldr r1, _08041640 @ =gStringVar1\n\
- adds r0, r6, 0\n\
- bl GetBoxMonNick\n\
- adds r0, r6, 0\n\
- movs r1, 0xB\n\
- bl GetBoxMonData\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- mov r9, r0\n\
- adds r0, r6, 0\n\
- mov r1, sp\n\
- bl sub_803B4B4\n\
- mov r0, sp\n\
- movs r1, 0x38\n\
- bl GetMonData\n\
- cmp r0, 0x64\n\
- beq _080415D8\n\
- mov r0, sp\n\
- movs r1, 0x19\n\
- bl GetMonData\n\
- movs r2, 0x88\n\
- lsls r2, 1\n\
- adds r1, r5, r2\n\
- adds r1, r7\n\
- ldr r1, [r1]\n\
- adds r0, r1\n\
- str r0, [sp, 0x64]\n\
- add r2, sp, 0x64\n\
- mov r0, sp\n\
- movs r1, 0x19\n\
- bl SetMonData\n\
- mov r0, sp\n\
- bl sub_804151C\n\
-_080415D8:\n\
- ldr r0, _08041644 @ =gPlayerParty\n\
- movs r1, 0xFA\n\
- lsls r1, 1\n\
- adds r1, r0\n\
- mov r8, r1\n\
- mov r0, r8\n\
- mov r1, sp\n\
- movs r2, 0x64\n\
- bl memcpy\n\
- lsls r0, r4, 3\n\
- subs r0, r4\n\
- lsls r1, r0, 3\n\
- adds r0, r5, r1\n\
- adds r0, 0xC0\n\
- ldrh r0, [r0]\n\
- cmp r0, 0\n\
- beq _08041610\n\
- adds r4, r1, 0\n\
- adds r4, 0xA0\n\
- adds r4, r5, r4\n\
- mov r0, r8\n\
- adds r1, r4, 0\n\
- bl GiveMailToMon2\n\
- adds r0, r4, 0\n\
- bl sub_80417F4\n\
-_08041610:\n\
- bl party_compaction\n\
- adds r0, r6, 0\n\
- bl ZeroBoxMonData\n\
- movs r2, 0x88\n\
- lsls r2, 1\n\
- adds r0, r5, r2\n\
- adds r0, r7\n\
- movs r1, 0\n\
- str r1, [r0]\n\
- adds r0, r5, 0\n\
- bl sub_80414C0\n\
- bl CalculatePlayerPartyCount\n\
- mov r0, r9\n\
- add sp, 0x68\n\
- pop {r3,r4}\n\
- mov r8, r3\n\
- mov r9, r4\n\
- pop {r4-r7}\n\
- pop {r1}\n\
- bx r1\n\
- .align 2, 0\n\
-_08041640: .4byte gStringVar1\n\
-_08041644: .4byte gPlayerParty\n\
- .syntax divided");
-}
-
-extern u8 gSpecialVar_0x8004;
+static u16 sub_8041570(struct DayCareData * daycare_data, u8 slot)
+{
+ u16 species;
+ u32 experience;
+ struct Pokemon pokemon;
+
+ GetBoxMonNick(&daycare_data->mons[slot], gStringVar1);
+ species = GetBoxMonData(&daycare_data->mons[slot], MON_DATA_SPECIES);
+ sub_803B4B4(&daycare_data->mons[slot], &pokemon);
+ if (GetMonData(&pokemon, MON_DATA_LEVEL) != MAX_LEVEL)
+ {
+ experience = GetMonData(&pokemon, MON_DATA_EXP) + daycare_data->misc.countersEtc.steps[slot];
+ SetMonData(&pokemon, MON_DATA_EXP, (u8 *)&experience);
+ DayCare_LevelUpMoves(&pokemon);
+ }
+ gPlayerParty[PARTY_SIZE - 1] = pokemon;
+ if (daycare_data->misc.mail[slot].message.itemId)
+ {
+ GiveMailToMon2(&gPlayerParty[PARTY_SIZE - 1], &daycare_data->misc.mail[slot].message);
+ sub_80417F4(&daycare_data->misc.mail[slot]);
+ }
+ party_compaction();
+ ZeroBoxMonData(&daycare_data->mons[slot]);
+ daycare_data->misc.countersEtc.steps[slot] = 0;
+ sub_80414C0(daycare_data);
+ CalculatePlayerPartyCount();
+ return species;
+}
u16 sub_8041648()
{
- return sub_8041570(gSaveBlock1.daycareData, gSpecialVar_0x8004);
+ return sub_8041570(&gSaveBlock1.daycareData, gSpecialVar_0x8004);
}
u8 Daycare_GetLevelAfterSteps(struct BoxPokemon * mon, u32 steps){
@@ -348,3 +216,1475 @@ u8 Daycare_GetLevelAfterSteps(struct BoxPokemon * mon, u32 steps){
SetBoxMonData(&temp, MON_DATA_EXP, (u8 *) &new_exp);
return GetLevelFromBoxMonExp(&temp);
}
+
+static u8 sub_80416A0(struct DayCareData *daycareData, u8 slot)
+{
+ u8 levelBefore;
+ u8 levelAfter;
+
+ levelBefore = GetLevelFromBoxMonExp(&daycareData->mons[slot]);
+ levelAfter = Daycare_GetLevelAfterSteps(&daycareData->mons[slot], daycareData->misc.countersEtc.steps[slot]);
+ return levelAfter - levelBefore;
+}
+
+static u8 sub_80416E8(struct DayCareData *dayCareData, u8 slot)
+{
+ u8 levelDelta = sub_80416A0(dayCareData, slot);
+ GetBoxMonNick(&dayCareData->mons[slot], gStringVar1);
+ ConvertIntToDecimalStringN(gStringVar2, levelDelta, STR_CONV_MODE_LEFT_ALIGN, 2);
+ return levelDelta;
+}
+
+static u16 sub_8041728(struct DayCareData *dayCareData, u8 slot)
+{
+ u16 cost;
+
+ u8 levelDelta = sub_80416A0(dayCareData, slot);
+ GetBoxMonNick(&dayCareData->mons[slot], gStringVar1);
+ cost = 100 + 100 * levelDelta;
+ ConvertIntToDecimalStringN(gStringVar2, cost, STR_CONV_MODE_LEFT_ALIGN, 5);
+ return cost;
+}
+
+void sub_8041770(void)
+{
+ gSpecialVar_0x8005 = sub_8041728(&gSaveBlock1.daycareData, gSpecialVar_0x8004);
+}
+
+void sub_8041790(u16 i)
+{
+ gSaveBlock1.daycareData.misc.countersEtc.steps[0] += i;
+ gSaveBlock1.daycareData.misc.countersEtc.steps[1] += i;
+}
+
+u8 sub_80417B8(void)
+{
+ if (GetBoxMonData(&gSaveBlock1.daycareData.mons[gSpecialVar_0x8004], MON_DATA_SPECIES) != 0)
+ return sub_80416E8(&gSaveBlock1.daycareData, gSpecialVar_0x8004);
+ return 0;
+}
+
+static void sub_80417F4(struct DayCareMail *mail)
+{
+ u8 zero;
+ u8 *names;
+ u8 *names2;
+ int i;
+ zero = 0;
+ for (i = 7, names = mail->names + 7; i >= 0; i --)
+ *names-- = zero;
+ names2 = mail->names + 8;
+ zero = 0;
+ names = mail->names + 18;
+ do *names-- = zero; while ((int)names >= (int)names2);
+ ClearMailStruct(&mail->message);
+}
+
+void unref_sub_8041824(struct DayCareData *dayCareData)
+{
+ u8 slot;
+ for (slot = 0; slot < ARRAY_COUNT(dayCareData->mons); slot ++)
+ {
+ ZeroBoxMonData(&dayCareData->mons[slot]);
+ dayCareData->misc.countersEtc.steps[slot] = 0;
+ sub_80417F4(&dayCareData->misc.mail[slot]);
+ }
+ dayCareData->misc.countersEtc.personalityLo = 0;
+ dayCareData->misc.countersEtc.unk_11a = 0;
+}
+
+u16 sub_8041870(u16 species)
+{
+ int i, j, k;
+ bool8 found;
+ for (i = 0; i < 5; i ++)
+ {
+ found = FALSE;
+ for (j = 1; j < NUM_SPECIES; j ++)
+ {
+ for (k = 0; k < 5; k ++)
+ {
+ if (gEvolutionTable[j].evolutions[k].targetSpecies == species)
+ {
+ species = j;
+ found = TRUE;
+ break;
+ }
+ }
+ if (found)
+ break;
+ }
+ if (j == 412)
+ break;
+ }
+ return species;
+}
+
+static void sub_80418F0(struct DayCareData *dayCareData)
+{
+ dayCareData->misc.countersEtc.personalityLo = (Random() % 0xfffe) + 1;
+ FlagSet(0x86);
+}
+
+static void sub_804191C(struct DayCareData *dayCareData)
+{
+ dayCareData->misc.countersEtc.personalityLo = Random() | 0x8000;
+ FlagSet(0x86);
+}
+
+void sub_8041940(void)
+{
+ sub_80418F0(&gSaveBlock1.daycareData);
+}
+
+void sub_8041950(void)
+{
+ sub_804191C(&gSaveBlock1.daycareData);
+}
+
+static void sub_8041960(u8 *data, u8 idx)
+{
+ int i, j;
+ u8 temp[6];
+ data[idx] = 0xff;
+ for (i = 0; i < 6; i ++)
+ temp[i] = data[i];
+ j = 0;
+ for (i = 0; i < 6; i ++)
+ if (temp[i] != 0xff)
+ data[j++] = temp[i];
+}
+
+static void InheritIVs(struct Pokemon *egg, struct DayCareData *dayCareData)
+{
+ u8 i;
+ u8 selectedIvs[3];
+ u8 allIvs[6];
+ u8 whichParent[3];
+ u8 iv;
+ for (i = 0; i < 6; i ++)
+ allIvs[i] = i;
+ for (i = 0; i < 3; i ++)
+ {
+ selectedIvs[i] = allIvs[Random() % (6 - i)];
+ sub_8041960(allIvs, selectedIvs[i]);
+ }
+ for (i = 0; i < 3; i ++)
+ whichParent[i] = Random() % 2;
+ for (i = 0; i < 3; i ++)
+ {
+ switch (selectedIvs[i])
+ {
+ case 0:
+ iv = GetBoxMonData(&dayCareData->mons[whichParent[i]], MON_DATA_HP_IV);
+ SetMonData(egg, MON_DATA_HP_IV, &iv);
+ break;
+ case 1:
+ iv = GetBoxMonData(&dayCareData->mons[whichParent[i]], MON_DATA_ATK_IV);
+ SetMonData(egg, MON_DATA_ATK_IV, &iv);
+ break;
+ case 2:
+ iv = GetBoxMonData(&dayCareData->mons[whichParent[i]], MON_DATA_DEF_IV);
+ SetMonData(egg, MON_DATA_DEF_IV, &iv);
+ break;
+ case 3:
+ iv = GetBoxMonData(&dayCareData->mons[whichParent[i]], MON_DATA_SPD_IV);
+ SetMonData(egg, MON_DATA_SPD_IV, &iv);
+ break;
+ case 4:
+ iv = GetBoxMonData(&dayCareData->mons[whichParent[i]], MON_DATA_SPATK_IV);
+ SetMonData(egg, MON_DATA_SPATK_IV, &iv);
+ break;
+ case 5:
+ iv = GetBoxMonData(&dayCareData->mons[whichParent[i]], MON_DATA_SPDEF_IV);
+ SetMonData(egg, MON_DATA_SPDEF_IV, &iv);
+ break;
+ }
+ }
+}
+
+#ifdef NONMATCHING
+static
+#endif
+u8 pokemon_get_eggmoves(struct Pokemon *pokemon, u16 *eggMoves)
+{
+ u16 eggMoveIdx;
+ u16 numMovesFound;
+ u16 species;
+ u16 i;
+
+ numMovesFound = 0;
+ eggMoveIdx = 0;
+ species = GetMonData(pokemon, MON_DATA_SPECIES);
+ for (i = 0; i < ARRAY_COUNT(gEggMoves) - 1; i ++)
+ {
+ if (gEggMoves[i] == species + EGG_MOVES_SPECIES_OFFSET)
+ {
+ eggMoveIdx = i + 1;
+ break;
+ }
+ }
+ for (i = 0; i < 10; i ++)
+ {
+ if (gEggMoves[eggMoveIdx + i] > EGG_MOVES_SPECIES_OFFSET)
+ {
+ break;
+ }
+ eggMoves[i] = gEggMoves[eggMoveIdx + i];
+ numMovesFound++;
+ }
+ return numMovesFound;
+}
+
+#ifdef NONMATCHING
+
+void daycare_build_child_moveset(struct Pokemon *egg, struct BoxPokemon *dad, struct BoxPokemon *mom)
+{
+ u16 numSharedParentMoves;
+ u8 numLevelUpMoves;
+ u8 numEggMoves;
+ u16 i, j;
+
+ numSharedParentMoves = 0;
+ for (i = 0; i < 4; i ++)
+ {
+ gUnknown_03000500[i] = 0;
+ gUnknown_030004D8[i] = 0;
+ gUnknown_030004E0[i] = 0;
+ }
+ for (i = 0; i < 10; i ++)
+ gUnknown_030004E8[i] = 0;
+ for (i = 0; i < 50; i ++)
+ gUnknown_03000470[i] = 0;
+
+ numLevelUpMoves = GetLevelUpMovesBySpecies(GetMonData(egg, MON_DATA_SPECIES), gUnknown_03000470);
+ for (i = 0; i < 4; i ++)
+ {
+ gUnknown_030004D8[i] = GetBoxMonData(dad, MON_DATA_MOVE1 + i);
+ gUnknown_03000500[i] = GetBoxMonData(mom, MON_DATA_MOVE1 + i);
+ }
+ numEggMoves = pokemon_get_eggmoves(egg, gUnknown_030004E8);
+
+ for (i = 0; i < 4; i ++)
+ {
+ if (gUnknown_030004D8[i] != MOVE_NONE)
+ {
+ for (j = 0; j < numEggMoves; j ++)
+ {
+ if (gUnknown_030004D8[i] == gUnknown_030004E8[j])
+ {
+ if (GiveMoveToMon(egg, gUnknown_030004D8[i]) == 0xffff)
+ DeleteFirstMoveAndGiveMoveToMon(egg, gUnknown_030004D8[i]);
+ break;
+ }
+ }
+ }
+ else
+ break;
+ }
+ for (i = 0; i < 4; i ++)
+ {
+ if (gUnknown_030004D8[i] != MOVE_NONE)
+ {
+ for (j = 0; j < 50 + 8; j ++)
+ {
+ if (gUnknown_030004D8[i] == ItemIdToBattleMoveId(ITEM_TM01 + j) && CanMonLearnTMHM(egg, j))
+ {
+ if (GiveMoveToMon(egg, gUnknown_030004D8[i]) == 0xffff)
+ DeleteFirstMoveAndGiveMoveToMon(egg, gUnknown_030004D8[i]);
+ }
+ }
+ }
+ }
+ for (i = 0; i < 4; i ++)
+ {
+ if (gUnknown_030004D8[i] == MOVE_NONE)
+ break;
+ for (j = 0; j < 4; j ++)
+ {
+ if (gUnknown_030004D8[i] == gUnknown_03000500[j] && gUnknown_030004D8[i] != MOVE_NONE)
+ gUnknown_030004E0[numSharedParentMoves++] = gUnknown_030004D8[i];
+ }
+ }
+ for (i = 0; i < 4; i ++)
+ {
+ if (gUnknown_030004E0[i] == MOVE_NONE)
+ break;
+ for (j = 0; j < numLevelUpMoves; j ++)
+ {
+ if (gUnknown_03000470[j] != MOVE_NONE && gUnknown_030004E0[i] == gUnknown_03000470[j])
+ {
+ if (GiveMoveToMon(egg, gUnknown_030004E0[i]) == 0xffff)
+ DeleteFirstMoveAndGiveMoveToMon(egg, gUnknown_030004E0[i]);
+ break;
+ }
+ }
+ }
+}
+#else
+__attribute__((naked))
+void daycare_build_child_moveset(struct Pokemon *egg, struct BoxPokemon *dad, struct BoxPokemon *mom)
+{
+ 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, 0xC\n"
+ "\tadds r7, r0, 0\n"
+ "\tmov r10, r1\n"
+ "\tmov r9, r2\n"
+ "\tmovs r0, 0\n"
+ "\tstr r0, [sp]\n"
+ "\tmovs r6, 0\n"
+ "\tldr r5, _08041CC8 @ =gUnknown_03000500\n"
+ "\tmovs r2, 0\n"
+ "\tldr r4, _08041CCC @ =gUnknown_030004D8\n"
+ "\tldr r3, _08041CD0 @ =gUnknown_030004E0\n"
+ "_08041BE4:\n"
+ "\tlsls r1, r6, 1\n"
+ "\tadds r0, r1, r5\n"
+ "\tstrh r2, [r0]\n"
+ "\tadds r0, r1, r4\n"
+ "\tstrh r2, [r0]\n"
+ "\tadds r1, r3\n"
+ "\tstrh r2, [r1]\n"
+ "\tadds r0, r6, 0x1\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r6, r0, 16\n"
+ "\tcmp r6, 0x3\n"
+ "\tbls _08041BE4\n"
+ "\tmovs r6, 0\n"
+ "\tldr r2, _08041CD4 @ =gUnknown_030004E8\n"
+ "\tmovs r1, 0\n"
+ "_08041C02:\n"
+ "\tlsls r0, r6, 1\n"
+ "\tadds r0, r2\n"
+ "\tstrh r1, [r0]\n"
+ "\tadds r0, r6, 0x1\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r6, r0, 16\n"
+ "\tcmp r6, 0x9\n"
+ "\tbls _08041C02\n"
+ "\tmovs r6, 0\n"
+ "\tldr r2, _08041CD8 @ =gUnknown_03000470\n"
+ "\tmovs r1, 0\n"
+ "_08041C18:\n"
+ "\tlsls r0, r6, 1\n"
+ "\tadds r0, r2\n"
+ "\tstrh r1, [r0]\n"
+ "\tadds r0, r6, 0x1\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r6, r0, 16\n"
+ "\tcmp r6, 0x31\n"
+ "\tbls _08041C18\n"
+ "\tadds r0, r7, 0\n"
+ "\tmovs r1, 0xB\n"
+ "\tbl GetMonData\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r0, 16\n"
+ "\tldr r1, _08041CD8 @ =gUnknown_03000470\n"
+ "\tbl GetLevelUpMovesBySpecies\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r0, 24\n"
+ "\tstr r0, [sp, 0x4]\n"
+ "\tmovs r6, 0\n"
+ "\tldr r1, _08041CCC @ =gUnknown_030004D8\n"
+ "\tmov r8, r1\n"
+ "_08041C46:\n"
+ "\tadds r5, r6, 0\n"
+ "\tadds r5, 0xD\n"
+ "\tmov r0, r10\n"
+ "\tadds r1, r5, 0\n"
+ "\tbl GetBoxMonData\n"
+ "\tlsls r4, r6, 1\n"
+ "\tmov r2, r8\n"
+ "\tadds r1, r4, r2\n"
+ "\tstrh r0, [r1]\n"
+ "\tmov r0, r9\n"
+ "\tadds r1, r5, 0\n"
+ "\tbl GetBoxMonData\n"
+ "\tldr r1, _08041CC8 @ =gUnknown_03000500\n"
+ "\tadds r4, r1\n"
+ "\tstrh r0, [r4]\n"
+ "\tadds r0, r6, 0x1\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r6, r0, 16\n"
+ "\tcmp r6, 0x3\n"
+ "\tbls _08041C46\n"
+ "\tldr r1, _08041CD4 @ =gUnknown_030004E8\n"
+ "\tadds r0, r7, 0\n"
+ "\tbl pokemon_get_eggmoves\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r0, 24\n"
+ "\tmov r8, r0\n"
+ "\tmovs r6, 0\n"
+ "_08041C82:\n"
+ "\tldr r0, _08041CCC @ =gUnknown_030004D8\n"
+ "\tlsls r1, r6, 1\n"
+ "\tadds r2, r1, r0\n"
+ "\tldrh r1, [r2]\n"
+ "\tmov r9, r0\n"
+ "\tcmp r1, 0\n"
+ "\tbeq _08041CF8\n"
+ "\tmovs r5, 0\n"
+ "\tcmp r5, r8\n"
+ "\tbcs _08041CEA\n"
+ "\tadds r4, r2, 0\n"
+ "\tldr r2, _08041CDC @ =0x0000ffff\n"
+ "_08041C9A:\n"
+ "\tldr r0, _08041CD4 @ =gUnknown_030004E8\n"
+ "\tlsls r1, r5, 1\n"
+ "\tadds r1, r0\n"
+ "\tldrh r0, [r4]\n"
+ "\tldrh r1, [r1]\n"
+ "\tcmp r0, r1\n"
+ "\tbne _08041CE0\n"
+ "\tadds r1, r0, 0\n"
+ "\tadds r0, r7, 0\n"
+ "\tstr r2, [sp, 0x8]\n"
+ "\tbl GiveMoveToMon\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r0, 16\n"
+ "\tldr r2, [sp, 0x8]\n"
+ "\tcmp r0, r2\n"
+ "\tbne _08041CEA\n"
+ "\tldrh r1, [r4]\n"
+ "\tadds r0, r7, 0\n"
+ "\tbl DeleteFirstMoveAndGiveMoveToMon\n"
+ "\tb _08041CEA\n"
+ "\t.align 2, 0\n"
+ "_08041CC8: .4byte gUnknown_03000500\n"
+ "_08041CCC: .4byte gUnknown_030004D8\n"
+ "_08041CD0: .4byte gUnknown_030004E0\n"
+ "_08041CD4: .4byte gUnknown_030004E8\n"
+ "_08041CD8: .4byte gUnknown_03000470\n"
+ "_08041CDC: .4byte 0x0000ffff\n"
+ "_08041CE0:\n"
+ "\tadds r0, r5, 0x1\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r5, r0, 16\n"
+ "\tcmp r5, r8\n"
+ "\tbcc _08041C9A\n"
+ "_08041CEA:\n"
+ "\tadds r0, r6, 0x1\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r6, r0, 16\n"
+ "\tldr r3, _08041E14 @ =gUnknown_030004D8\n"
+ "\tmov r9, r3\n"
+ "\tcmp r6, 0x3\n"
+ "\tbls _08041C82\n"
+ "_08041CF8:\n"
+ "\tmovs r6, 0\n"
+ "_08041CFA:\n"
+ "\tlsls r0, r6, 1\n"
+ "\tmov r2, r9\n"
+ "\tadds r1, r0, r2\n"
+ "\tldrh r1, [r1]\n"
+ "\tadds r2, r0, 0\n"
+ "\tadds r6, 0x1\n"
+ "\tmov r8, r6\n"
+ "\tcmp r1, 0\n"
+ "\tbeq _08041D5C\n"
+ "\tmovs r5, 0\n"
+ "\tldr r0, _08041E14 @ =gUnknown_030004D8\n"
+ "\tadds r4, r2, r0\n"
+ "\tldr r6, _08041E18 @ =0x0000ffff\n"
+ "\tmov r9, r0\n"
+ "_08041D16:\n"
+ "\tldr r3, _08041E1C @ =0x00000121\n"
+ "\tadds r0, r5, r3\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r0, 16\n"
+ "\tbl ItemIdToBattleMoveId\n"
+ "\tldrh r1, [r4]\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r0, 16\n"
+ "\tcmp r1, r0\n"
+ "\tbne _08041D52\n"
+ "\tlsls r1, r5, 24\n"
+ "\tlsrs r1, 24\n"
+ "\tadds r0, r7, 0\n"
+ "\tbl CanMonLearnTMHM\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _08041D52\n"
+ "\tldrh r1, [r4]\n"
+ "\tadds r0, r7, 0\n"
+ "\tbl GiveMoveToMon\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r0, 16\n"
+ "\tcmp r0, r6\n"
+ "\tbne _08041D52\n"
+ "\tldrh r1, [r4]\n"
+ "\tadds r0, r7, 0\n"
+ "\tbl DeleteFirstMoveAndGiveMoveToMon\n"
+ "_08041D52:\n"
+ "\tadds r0, r5, 0x1\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r5, r0, 16\n"
+ "\tcmp r5, 0x39\n"
+ "\tbls _08041D16\n"
+ "_08041D5C:\n"
+ "\tmov r1, r8\n"
+ "\tlsls r0, r1, 16\n"
+ "\tlsrs r6, r0, 16\n"
+ "\tcmp r6, 0x3\n"
+ "\tbls _08041CFA\n"
+ "\tmovs r6, 0\n"
+ "\tmov r2, r9\n"
+ "\tldrh r0, [r2]\n"
+ "\tldr r3, _08041E20 @ =gUnknown_030004E0\n"
+ "\tmov r10, r3\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _08041DC6\n"
+ "\tmov r4, r9\n"
+ "\tldr r0, _08041E24 @ =gUnknown_03000500\n"
+ "\tmov r9, r0\n"
+ "\tmov r12, r10\n"
+ "_08041D7C:\n"
+ "\tmovs r5, 0\n"
+ "\tlsls r2, r6, 1\n"
+ "\tadds r6, 0x1\n"
+ "\tmov r8, r6\n"
+ "\tadds r3, r2, r4\n"
+ "_08041D86:\n"
+ "\tlsls r0, r5, 1\n"
+ "\tadd r0, r9\n"
+ "\tldrh r2, [r3]\n"
+ "\tadds r1, r2, 0\n"
+ "\tldrh r0, [r0]\n"
+ "\tcmp r1, r0\n"
+ "\tbne _08041DA8\n"
+ "\tcmp r1, 0\n"
+ "\tbeq _08041DA8\n"
+ "\tldr r1, [sp]\n"
+ "\tadds r0, r1, 0x1\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r0, 16\n"
+ "\tstr r0, [sp]\n"
+ "\tlsls r1, 1\n"
+ "\tadd r1, r12\n"
+ "\tstrh r2, [r1]\n"
+ "_08041DA8:\n"
+ "\tadds r0, r5, 0x1\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r5, r0, 16\n"
+ "\tcmp r5, 0x3\n"
+ "\tbls _08041D86\n"
+ "\tmov r1, r8\n"
+ "\tlsls r0, r1, 16\n"
+ "\tlsrs r6, r0, 16\n"
+ "\tcmp r6, 0x3\n"
+ "\tbhi _08041DC6\n"
+ "\tlsls r0, r6, 1\n"
+ "\tadds r0, r4\n"
+ "\tldrh r0, [r0]\n"
+ "\tcmp r0, 0\n"
+ "\tbne _08041D7C\n"
+ "_08041DC6:\n"
+ "\tmovs r6, 0\n"
+ "\tmov r2, r10\n"
+ "\tldrh r0, [r2]\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _08041E50\n"
+ "_08041DD0:\n"
+ "\tmovs r5, 0\n"
+ "\tadds r3, r6, 0x1\n"
+ "\tmov r8, r3\n"
+ "\tldr r0, [sp, 0x4]\n"
+ "\tcmp r5, r0\n"
+ "\tbcs _08041E38\n"
+ "\tldr r2, _08041E18 @ =0x0000ffff\n"
+ "_08041DDE:\n"
+ "\tldr r1, _08041E28 @ =gUnknown_03000470\n"
+ "\tlsls r0, r5, 1\n"
+ "\tadds r0, r1\n"
+ "\tldrh r1, [r0]\n"
+ "\tcmp r1, 0\n"
+ "\tbeq _08041E2C\n"
+ "\tlsls r0, r6, 1\n"
+ "\tmov r3, r10\n"
+ "\tadds r4, r0, r3\n"
+ "\tldrh r0, [r4]\n"
+ "\tcmp r0, r1\n"
+ "\tbne _08041E2C\n"
+ "\tadds r1, r0, 0\n"
+ "\tadds r0, r7, 0\n"
+ "\tstr r2, [sp, 0x8]\n"
+ "\tbl GiveMoveToMon\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r0, 16\n"
+ "\tldr r2, [sp, 0x8]\n"
+ "\tcmp r0, r2\n"
+ "\tbne _08041E38\n"
+ "\tldrh r1, [r4]\n"
+ "\tadds r0, r7, 0\n"
+ "\tbl DeleteFirstMoveAndGiveMoveToMon\n"
+ "\tb _08041E38\n"
+ "\t.align 2, 0\n"
+ "_08041E14: .4byte gUnknown_030004D8\n"
+ "_08041E18: .4byte 0x0000ffff\n"
+ "_08041E1C: .4byte 0x00000121\n"
+ "_08041E20: .4byte gUnknown_030004E0\n"
+ "_08041E24: .4byte gUnknown_03000500\n"
+ "_08041E28: .4byte gUnknown_03000470\n"
+ "_08041E2C:\n"
+ "\tadds r0, r5, 0x1\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r5, r0, 16\n"
+ "\tldr r0, [sp, 0x4]\n"
+ "\tcmp r5, r0\n"
+ "\tbcc _08041DDE\n"
+ "_08041E38:\n"
+ "\tmov r1, r8\n"
+ "\tlsls r0, r1, 16\n"
+ "\tlsrs r6, r0, 16\n"
+ "\tcmp r6, 0x3\n"
+ "\tbhi _08041E50\n"
+ "\tldr r0, _08041E60 @ =gUnknown_030004E0\n"
+ "\tlsls r1, r6, 1\n"
+ "\tadds r1, r0\n"
+ "\tldrh r1, [r1]\n"
+ "\tmov r10, r0\n"
+ "\tcmp r1, 0\n"
+ "\tbne _08041DD0\n"
+ "_08041E50:\n"
+ "\tadd sp, 0xC\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.align 2, 0\n"
+ "_08041E60: .4byte gUnknown_030004E0");
+}
+#endif
+
+static void RemoveEggFromDayCare(struct DayCareData *dayCareData)
+{
+ dayCareData->misc.countersEtc.personalityLo = 0;
+ dayCareData->misc.countersEtc.unk_11a = 0;
+}
+
+void sub_8041E7C(void)
+{
+ RemoveEggFromDayCare(&gSaveBlock1.daycareData);
+}
+
+static void incense_effects(u16 *species, struct DayCareData *dayCareData)
+{
+ u16 momItem, dadItem;
+ if (*species == SPECIES_WYNAUT || *species == SPECIES_AZURILL)
+ {
+ momItem = GetBoxMonData(&dayCareData->mons[0], MON_DATA_HELD_ITEM);
+ dadItem = GetBoxMonData(&dayCareData->mons[1], MON_DATA_HELD_ITEM);
+ if (*species == SPECIES_WYNAUT && momItem != ITEM_LAX_INCENSE && dadItem != ITEM_LAX_INCENSE)
+ {
+ *species = SPECIES_WOBBUFFET;
+ }
+ if (*species == SPECIES_AZURILL && momItem != ITEM_SEA_INCENSE && dadItem != ITEM_SEA_INCENSE)
+ {
+ *species = SPECIES_MARILL;
+ }
+ }
+}
+
+static u16 sub_8041EEC(struct DayCareData *dayCareData, u8 *a1) // inherit_species_from_mom
+{
+ u16 i;
+ u16 species[2];
+ u16 eggSpecies;
+ u8 buffer;
+ for (i=0; i<2; i++)
+ {
+ species[i] = GetBoxMonData(&dayCareData->mons[i], MON_DATA_SPECIES);
+ if (species[i] == SPECIES_DITTO)
+ {
+ a1[0] = i ^ 1;
+ a1[1] = i;
+ }
+ else if (GetBoxMonGender(&dayCareData->mons[i]) == MON_FEMALE)
+ {
+ a1[0] = i;
+ a1[1] = i ^ 1;
+ }
+ }
+ eggSpecies = sub_8041870(species[a1[0]]);
+ if (eggSpecies == SPECIES_NIDORAN_F && dayCareData->misc.countersEtc.personalityLo & 0x8000)
+ {
+ eggSpecies = SPECIES_NIDORAN_M;
+ }
+ if (eggSpecies == SPECIES_ILLUMISE && dayCareData->misc.countersEtc.personalityLo & 0x8000)
+ {
+ eggSpecies = SPECIES_VOLBEAT;
+ }
+ if (species[a1[1]] == SPECIES_DITTO && GetBoxMonGender(&dayCareData->mons[a1[0]]) != MON_FEMALE)
+ {
+ buffer = a1[1];
+ a1[1] = a1[0];
+ a1[0] = buffer;
+ }
+ return eggSpecies;
+}
+
+static void sub_8041FC4(struct DayCareData *dayCareData) // give_egg
+{
+ struct Pokemon egg;
+ u16 species;
+ u8 parents[2];
+ u8 isEgg;
+ species = sub_8041EEC(dayCareData, parents);
+ incense_effects(&species, dayCareData);
+ sub_80420FC(&egg, species, dayCareData);
+ InheritIVs(&egg, dayCareData);
+ daycare_build_child_moveset(&egg, &dayCareData->mons[parents[1]], &dayCareData->mons[parents[0]]);
+ isEgg = TRUE;
+ SetMonData(&egg, MON_DATA_IS_EGG, &isEgg);
+ gPlayerParty[5] = egg;
+ party_compaction();
+ CalculatePlayerPartyCount();
+ RemoveEggFromDayCare(dayCareData);
+}
+
+
+void sub_8042044(struct Pokemon *mon, u16 species, u8 overwriteMetLocation) // scr_create_egg
+{
+ u8 metLevel;
+ u16 ball;
+ u8 language;
+ u8 metLocation;
+ u8 isEgg;
+ CreateMon(mon, species, 5, 0x20, FALSE, 0, FALSE, 0);
+ metLevel = 0;
+ ball = ITEM_POKE_BALL;
+ language = LANGUAGE_JAPANESE;
+ SetMonData(mon, MON_DATA_POKEBALL, (u8 *)&ball);
+ SetMonData(mon, MON_DATA_NICKNAME, gUnknown_08209AD4);
+ SetMonData(mon, MON_DATA_FRIENDSHIP, &gBaseStats[species].eggCycles);
+ SetMonData(mon, MON_DATA_MET_LEVEL, &metLevel);
+ SetMonData(mon, MON_DATA_LANGUAGE, &language);
+ if (overwriteMetLocation)
+ {
+ metLocation = 0xfd;
+ SetMonData(mon, MON_DATA_MET_LOCATION, &metLocation);
+ }
+ isEgg = TRUE;
+ SetMonData(mon, MON_DATA_IS_EGG, &isEgg);
+}
+
+static void sub_80420FC(struct Pokemon *mon, u16 species, struct DayCareData *dayCareData)
+{
+ u32 personality;
+ u16 ball;
+ u8 metLevel;
+ u8 language;
+ personality = dayCareData->misc.countersEtc.personalityLo | (Random() << 16);
+ CreateMon(mon, species, 5, 0x20, TRUE, personality, FALSE, 0);
+ metLevel = 0;
+ ball = ITEM_POKE_BALL;
+ language = LANGUAGE_JAPANESE;
+ SetMonData(mon, MON_DATA_POKEBALL, (u8 *)&ball);
+ SetMonData(mon, MON_DATA_NICKNAME, gUnknown_08209AD4);
+ SetMonData(mon, MON_DATA_FRIENDSHIP, &gBaseStats[species].eggCycles);
+ SetMonData(mon, MON_DATA_MET_LEVEL, &metLevel);
+ SetMonData(mon, MON_DATA_LANGUAGE, &language);
+}
+
+void sp0B8_daycare(void)
+{
+ sub_8041FC4(&gSaveBlock1.daycareData);
+}
+
+#ifdef NONMATCHING
+static bool8 sub_80421B0(struct DayCareData *dayCareData)
+{
+ struct BoxPokemon *parent;
+ u32 i;
+ int v0;
+ int steps;
+ v0 = 0;
+ for (i=0, parent=&dayCareData->mons[0]; i<2; parent++, i++)
+ {
+ if (GetBoxMonData(parent, MON_DATA_SANITY_BIT2, v0))
+ {
+ dayCareData->misc.countersEtc.steps[i]++;
+ v0++;
+ }
+ }
+ if (dayCareData->misc.countersEtc.personalityLo == 0 && v0 == 2 && dayCareData->misc.extra.misc[4] == 0xff && daycare_relationship_score(dayCareData) > (u32)((u32)(Random() * 100) / 0xffff))
+ {
+ sub_8041940();
+ }
+ if ((++dayCareData->misc.countersEtc.unk_11a) == 0xff)
+ {
+ for (i=0; i<gPlayerPartyCount; i++)
+ {
+ if (GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG))
+ {
+ steps = GetMonData(&gPlayerParty[i], MON_DATA_FRIENDSHIP);
+ if (steps == 0)
+ {
+ gSpecialVar_0x8004 = i;
+ return TRUE;
+ }
+ steps--;
+ SetMonData(&gPlayerParty[i], MON_DATA_FRIENDSHIP, (u8 *)&steps);
+ }
+ }
+ }
+ return FALSE;
+}
+#else
+__attribute__((naked))
+static bool8 sub_80421B0(struct DayCareData *dayCareData)
+{
+ asm_unified("\tpush {r4-r7,lr}\n"
+ "\tsub sp, 0x8\n"
+ "\tadds r7, r0, 0\n"
+ "\tmovs r2, 0\n"
+ "\tmovs r6, 0\n"
+ "\tadds r5, r7, 0\n"
+ "_080421BC:\n"
+ "\tlsls r4, r6, 2\n"
+ "\tadds r0, r5, 0\n"
+ "\tmovs r1, 0x5\n"
+ "\tstr r2, [sp, 0x4]\n"
+ "\tbl GetBoxMonData\n"
+ "\tldr r2, [sp, 0x4]\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _080421DE\n"
+ "\tmovs r0, 0x88\n"
+ "\tlsls r0, 1\n"
+ "\tadds r1, r7, r0\n"
+ "\tadds r1, r4\n"
+ "\tldr r0, [r1]\n"
+ "\tadds r0, 0x1\n"
+ "\tstr r0, [r1]\n"
+ "\tadds r2, 0x1\n"
+ "_080421DE:\n"
+ "\tadds r5, 0x50\n"
+ "\tadds r6, 0x1\n"
+ "\tcmp r6, 0x1\n"
+ "\tbls _080421BC\n"
+ "\tmovs r1, 0x8C\n"
+ "\tlsls r1, 1\n"
+ "\tadds r0, r7, r1\n"
+ "\tldrh r0, [r0]\n"
+ "\tcmp r0, 0\n"
+ "\tbne _08042226\n"
+ "\tcmp r2, 0x2\n"
+ "\tbne _08042226\n"
+ "\tsubs r1, 0x4\n"
+ "\tadds r0, r7, r1\n"
+ "\tldrb r0, [r0]\n"
+ "\tcmp r0, 0xFF\n"
+ "\tbne _08042226\n"
+ "\tadds r0, r7, 0\n"
+ "\tbl daycare_relationship_score\n"
+ "\tadds r4, r0, 0\n"
+ "\tlsls r4, 24\n"
+ "\tlsrs r4, 24\n"
+ "\tbl Random\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r0, 16\n"
+ "\tmovs r1, 0x64\n"
+ "\tmuls r0, r1\n"
+ "\tldr r1, _08042240 @ =0x0000ffff\n"
+ "\tbl __udivsi3\n"
+ "\tcmp r4, r0\n"
+ "\tbls _08042226\n"
+ "\tbl sub_8041940\n"
+ "_08042226:\n"
+ "\tmovs r0, 0x8D\n"
+ "\tlsls r0, 1\n"
+ "\tadds r1, r7, r0\n"
+ "\tldrb r0, [r1]\n"
+ "\tadds r0, 0x1\n"
+ "\tstrb r0, [r1]\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r0, 24\n"
+ "\tcmp r0, 0xFF\n"
+ "\tbne _08042290\n"
+ "\tmovs r6, 0\n"
+ "\tb _08042288\n"
+ "\t.align 2, 0\n"
+ "_08042240: .4byte 0x0000ffff\n"
+ "_08042244:\n"
+ "\tmovs r0, 0x64\n"
+ "\tadds r1, r6, 0\n"
+ "\tmuls r1, r0\n"
+ "\tldr r0, _08042270 @ =gPlayerParty\n"
+ "\tadds r4, r1, r0\n"
+ "\tadds r0, r4, 0\n"
+ "\tmovs r1, 0x2D\n"
+ "\tbl GetMonData\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _08042286\n"
+ "\tadds r0, r4, 0\n"
+ "\tmovs r1, 0x20\n"
+ "\tbl GetMonData\n"
+ "\tstr r0, [sp]\n"
+ "\tcmp r0, 0\n"
+ "\tbne _08042278\n"
+ "\tldr r0, _08042274 @ =gSpecialVar_0x8004\n"
+ "\tstrh r6, [r0]\n"
+ "\tmovs r0, 0x1\n"
+ "\tb _08042292\n"
+ "\t.align 2, 0\n"
+ "_08042270: .4byte gPlayerParty\n"
+ "_08042274: .4byte gSpecialVar_0x8004\n"
+ "_08042278:\n"
+ "\tsubs r0, 0x1\n"
+ "\tstr r0, [sp]\n"
+ "\tadds r0, r4, 0\n"
+ "\tmovs r1, 0x20\n"
+ "\tmov r2, sp\n"
+ "\tbl SetMonData\n"
+ "_08042286:\n"
+ "\tadds r6, 0x1\n"
+ "_08042288:\n"
+ "\tldr r0, _0804229C @ =gPlayerPartyCount\n"
+ "\tldrb r0, [r0]\n"
+ "\tcmp r6, r0\n"
+ "\tbcc _08042244\n"
+ "_08042290:\n"
+ "\tmovs r0, 0\n"
+ "_08042292:\n"
+ "\tadd sp, 0x8\n"
+ "\tpop {r4-r7}\n"
+ "\tpop {r1}\n"
+ "\tbx r1\n"
+ "\t.align 2, 0\n"
+ "_0804229C: .4byte gPlayerPartyCount");
+}
+#endif
+
+bool8 sub_80422A0(void)
+{
+ return sub_80421B0(&gSaveBlock1.daycareData);
+}
+
+static bool8 sub_80422B4(struct DayCareData *dayCareData)
+{
+ return (u32)((-dayCareData->misc.countersEtc.personalityLo) | dayCareData->misc.countersEtc.personalityLo) >> 31;
+}
+
+static void sub_80422C4(struct DayCareData *dayCareData)
+{
+ u8 language;
+ if (GetBoxMonData(&dayCareData->mons[0], MON_DATA_SPECIES) != 0)
+ {
+ GetBoxMonNick(&dayCareData->mons[0], gStringVar1);
+ language = GetBoxMonData(&dayCareData->mons[0], MON_DATA_LANGUAGE);
+ GetBoxMonData(&dayCareData->mons[0], MON_DATA_OT_NAME, gStringVar3);
+ ConvertInternationalString(gStringVar3, language);
+ }
+ if (GetBoxMonData(&dayCareData->mons[1], MON_DATA_SPECIES) != 0)
+ {
+ GetBoxMonNick(&dayCareData->mons[1], gStringVar2);
+ }
+}
+
+u16 sub_8042328(void)
+{
+ GetBoxMonNick(&gPlayerParty[gLastFieldPokeMenuOpened].box, gStringVar1);
+ return GetBoxMonData(&gPlayerParty[gLastFieldPokeMenuOpened].box, MON_DATA_SPECIES);
+}
+
+void sp0B5_daycare(void)
+{
+ sub_80422C4(&gSaveBlock1.daycareData);
+}
+
+u8 sp0B6_daycare(void)
+{
+ u8 monCount;
+ if (sub_80422B4(&gSaveBlock1.daycareData))
+ {
+ return 1;
+ }
+ monCount = Daycare_CountPokemon(&gSaveBlock1.daycareData);
+ if (monCount != 0)
+ {
+ return monCount + 1;
+ }
+ return 0;
+}
+
+#ifdef NONMATCHING
+static
+#endif
+bool8 sub_80423A8(u16 *a, u16 *b)
+{
+ int i, j;
+ u16 *v0, *v1, v2;
+ for (i=0, v0=a; i<2; v0++, i++)
+ {
+ for (j=0, v2=*v0, v1=b; j<2; v1++, j++)
+ {
+ if (v2 == *v1)
+ {
+ return TRUE;
+ }
+ }
+ }
+ return FALSE;
+}
+
+#ifdef NONMATCHING
+static u8 daycare_relationship_score(struct DayCareData *dayCareData)
+{
+ u16 species[2];
+ u32 otIds[2];
+ u32 genders[2];
+ u16 eggGroups[2][2];
+ int i;
+ u16 *spc;
+ u32 *ids;
+ u32 *gnd;
+ u16 *egg1;
+ u16 *egg2;
+ struct BoxPokemon *parent;
+ for (i=0, parent=&dayCareData->mons[0], spc=species, ids=otIds, gnd=genders, egg1=&eggGroups[0][0], egg2=&eggGroups[0][1]; i<2; spc++, egg1+=2, egg2+=2, parent++, i++)
+ {
+ *spc = GetBoxMonData(parent, MON_DATA_SPECIES);
+ *ids++ = GetBoxMonData(parent, MON_DATA_OT_ID);
+ *gnd++ = GetGenderFromSpeciesAndPersonality(*spc, GetBoxMonData(parent, MON_DATA_PERSONALITY));
+ *egg1 = gBaseStats[*spc].eggGroup1;
+ *egg2 = gBaseStats[*spc].eggGroup2;
+ }
+ if (eggGroups[0][0] == 0xf)
+ {
+ return 0;
+ }
+ if (eggGroups[1][0] == 0xf)
+ {
+ return 0;
+ }
+ if (eggGroups[0][0] == 0xd && eggGroups[1][0] == 0xd)
+ {
+ return 0;
+ }
+ else if (eggGroups[0][0] == 0xd || eggGroups[1][0] == 0xd)
+ {
+ if (otIds[0] == otIds[1])
+ {
+ return 20;
+ }
+ return 50;
+ }
+ if (genders[0] == genders[1] || genders[0] == MON_GENDERLESS || genders[1] == MON_GENDERLESS)
+ {
+ return 0;
+ }
+ if (!sub_80423A8(eggGroups[0], eggGroups[1]))
+ {
+ return 0;
+ }
+ if (species[0] == species[1])
+ {
+ if (otIds[0] == otIds[1])
+ {
+ return 50;
+ }
+ return 70;
+ }
+ else
+ {
+ if (otIds[0] != otIds[1])
+ {
+ return 50;
+ }
+ return 20;
+ }
+}
+#else
+__attribute__((naked))
+static u8 daycare_relationship_score(struct DayCareData *dayCareData)
+{
+ 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, 0x2C\n"
+ "\tmovs r1, 0\n"
+ "\tmov r8, r1\n"
+ "\tmov r2, sp\n"
+ "\tadds r2, 0x8\n"
+ "\tstr r2, [sp, 0x1C]\n"
+ "\tadd r1, sp, 0xC\n"
+ "\tmov r10, r1\n"
+ "\tadds r2, 0xC\n"
+ "\tstr r2, [sp, 0x20]\n"
+ "\tmov r1, sp\n"
+ "\tadds r1, 0x2\n"
+ "\tldr r2, _08042488 @ =gBaseStats\n"
+ "\tmov r9, r2\n"
+ "\tldr r5, [sp, 0x1C]\n"
+ "\tadds r7, r1, 0\n"
+ "\tmov r6, sp\n"
+ "\tldr r1, [sp, 0x20]\n"
+ "\tstr r1, [sp, 0x24]\n"
+ "\tmov r2, r10\n"
+ "\tstr r2, [sp, 0x28]\n"
+ "\tadds r4, r0, 0\n"
+ "_0804240E:\n"
+ "\tadds r0, r4, 0\n"
+ "\tmovs r1, 0xB\n"
+ "\tbl GetBoxMonData\n"
+ "\tstrh r0, [r5]\n"
+ "\tadds r0, r4, 0\n"
+ "\tmovs r1, 0x1\n"
+ "\tbl GetBoxMonData\n"
+ "\tldr r1, [sp, 0x28]\n"
+ "\tstm r1!, {r0}\n"
+ "\tstr r1, [sp, 0x28]\n"
+ "\tadds r0, r4, 0\n"
+ "\tmovs r1, 0\n"
+ "\tbl GetBoxMonData\n"
+ "\tadds r1, r0, 0\n"
+ "\tldrh r0, [r5]\n"
+ "\tbl GetGenderFromSpeciesAndPersonality\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r0, 24\n"
+ "\tldr r2, [sp, 0x24]\n"
+ "\tstm r2!, {r0}\n"
+ "\tstr r2, [sp, 0x24]\n"
+ "\tldrh r1, [r5]\n"
+ "\tlsls r0, r1, 3\n"
+ "\tsubs r0, r1\n"
+ "\tlsls r0, 2\n"
+ "\tadd r0, r9\n"
+ "\tldrb r0, [r0, 0x14]\n"
+ "\tstrh r0, [r6]\n"
+ "\tldrh r1, [r5]\n"
+ "\tlsls r0, r1, 3\n"
+ "\tsubs r0, r1\n"
+ "\tlsls r0, 2\n"
+ "\tadd r0, r9\n"
+ "\tldrb r0, [r0, 0x15]\n"
+ "\tstrh r0, [r7]\n"
+ "\tadds r5, 0x2\n"
+ "\tadds r7, 0x4\n"
+ "\tadds r6, 0x4\n"
+ "\tadds r4, 0x50\n"
+ "\tmovs r0, 0x1\n"
+ "\tadd r8, r0\n"
+ "\tmov r1, r8\n"
+ "\tcmp r1, 0x1\n"
+ "\tbls _0804240E\n"
+ "\tmov r0, sp\n"
+ "\tldrh r1, [r0]\n"
+ "\tcmp r1, 0xF\n"
+ "\tbeq _08042484\n"
+ "\tldrh r0, [r0, 0x4]\n"
+ "\tcmp r0, 0xF\n"
+ "\tbeq _08042484\n"
+ "\tcmp r1, 0xD\n"
+ "\tbne _0804248C\n"
+ "\tcmp r0, 0xD\n"
+ "\tbne _08042490\n"
+ "_08042484:\n"
+ "\tmovs r0, 0\n"
+ "\tb _080424E4\n"
+ "\t.align 2, 0\n"
+ "_08042488: .4byte gBaseStats\n"
+ "_0804248C:\n"
+ "\tcmp r0, 0xD\n"
+ "\tbne _0804249C\n"
+ "_08042490:\n"
+ "\tldr r1, [sp, 0xC]\n"
+ "\tmov r2, r10\n"
+ "\tldr r0, [r2, 0x4]\n"
+ "\tcmp r1, r0\n"
+ "\tbeq _080424DE\n"
+ "\tb _080424E2\n"
+ "_0804249C:\n"
+ "\tldr r0, [sp, 0x14]\n"
+ "\tldr r2, [sp, 0x20]\n"
+ "\tldr r1, [r2, 0x4]\n"
+ "\tcmp r0, r1\n"
+ "\tbeq _08042484\n"
+ "\tcmp r0, 0xFF\n"
+ "\tbeq _08042484\n"
+ "\tcmp r1, 0xFF\n"
+ "\tbeq _08042484\n"
+ "\tadd r1, sp, 0x4\n"
+ "\tmov r0, sp\n"
+ "\tbl sub_80423A8\n"
+ "\tlsls r0, 24\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _08042484\n"
+ "\tldr r0, [sp, 0x1C]\n"
+ "\tldrh r1, [r0, 0x2]\n"
+ "\tldrh r0, [r0]\n"
+ "\tcmp r0, r1\n"
+ "\tbne _080424D4\n"
+ "\tldr r1, [sp, 0xC]\n"
+ "\tmov r2, r10\n"
+ "\tldr r0, [r2, 0x4]\n"
+ "\tcmp r1, r0\n"
+ "\tbeq _080424E2\n"
+ "\tmovs r0, 0x46\n"
+ "\tb _080424E4\n"
+ "_080424D4:\n"
+ "\tldr r1, [sp, 0xC]\n"
+ "\tmov r2, r10\n"
+ "\tldr r0, [r2, 0x4]\n"
+ "\tcmp r1, r0\n"
+ "\tbne _080424E2\n"
+ "_080424DE:\n"
+ "\tmovs r0, 0x14\n"
+ "\tb _080424E4\n"
+ "_080424E2:\n"
+ "\tmovs r0, 0x32\n"
+ "_080424E4:\n"
+ "\tadd sp, 0x2C\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");
+}
+#endif
+
+u8 daycare_relationship_score_from_savegame(void)
+{
+ return daycare_relationship_score(&gSaveBlock1.daycareData);
+}
+
+void sp0B9_daycare_relationship_comment(void)
+{
+ u8 whichString;
+ u8 relationshipScore;
+
+ relationshipScore = daycare_relationship_score_from_savegame();
+ whichString = 0;
+ if (relationshipScore == 0)
+ whichString = 3;
+ if (relationshipScore == 20)
+ whichString = 2;
+ if (relationshipScore == 50)
+ whichString = 1;
+ if (relationshipScore == 70)
+ whichString = 0;
+ StringCopy(gStringVar4, gUnknown_08209AC4[whichString]);
+}
+
+#ifdef NONMATCHING
+bool8 NameHasGenderSymbol(const u8 *name, u8 genderRatio)
+{
+ u8 i;
+ u8 flags[2];
+
+ // This portion is nonmatching
+ flags[1] = 0;
+ flags[0] = 0;
+ for (i = 0; name[i] != EOS; i ++)
+ // End nonmatching portion
+
+ {
+ if (name[i] == CHAR_MALE) flags[0] ++;
+ if (name[i] == CHAR_FEMALE) flags[1] ++;
+ }
+ if (genderRatio == MON_MALE && flags[0] && !flags[1]) return TRUE;
+ if (genderRatio == MON_FEMALE && flags[1] && !flags[0]) return TRUE;
+ return FALSE;
+}
+#else
+__attribute__((naked))
+bool8 NameHasGenderSymbol(const u8 *name, u8 genderRatio)
+{
+ asm_unified("\n"
+ "\tpush {r4,r5,lr}\n"
+ "\tsub sp, 0x4\n"
+ "\tadds r4, r0, 0\n"
+ "\tlsls r1, 24\n"
+ "\tlsrs r5, r1, 24\n"
+ "\tmov r2, sp\n"
+ "\tmov r1, sp\n"
+ "\tmovs r0, 0\n"
+ "\tstrb r0, [r1, 0x1]\n"
+ "\tstrb r0, [r2]\n"
+ "\tmovs r3, 0\n"
+ "\tldrb r0, [r4]\n"
+ "\tcmp r0, 0xFF\n"
+ "\tbeq _0804258C\n"
+ "_08042564:\n"
+ "\tadds r1, r4, r3\n"
+ "\tldrb r0, [r1]\n"
+ "\tcmp r0, 0xB5\n"
+ "\tbne _08042572\n"
+ "\tldrb r0, [r2]\n"
+ "\tadds r0, 0x1\n"
+ "\tstrb r0, [r2]\n"
+ "_08042572:\n"
+ "\tldrb r0, [r1]\n"
+ "\tcmp r0, 0xB6\n"
+ "\tbne _0804257E\n"
+ "\tldrb r0, [r2, 0x1]\n"
+ "\tadds r0, 0x1\n"
+ "\tstrb r0, [r2, 0x1]\n"
+ "_0804257E:\n"
+ "\tadds r0, r3, 0x1\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r3, r0, 24\n"
+ "\tadds r0, r4, r3\n"
+ "\tldrb r0, [r0]\n"
+ "\tcmp r0, 0xFF\n"
+ "\tbne _08042564\n"
+ "_0804258C:\n"
+ "\tcmp r5, 0\n"
+ "\tbne _080425A0\n"
+ "\tmov r0, sp\n"
+ "\tldrb r0, [r0]\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _080425A0\n"
+ "\tmov r0, sp\n"
+ "\tldrb r0, [r0, 0x1]\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _080425B4\n"
+ "_080425A0:\n"
+ "\tcmp r5, 0xFE\n"
+ "\tbne _080425B8\n"
+ "\tmov r0, sp\n"
+ "\tldrb r0, [r0, 0x1]\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _080425B8\n"
+ "\tmov r0, sp\n"
+ "\tldrb r0, [r0]\n"
+ "\tcmp r0, 0\n"
+ "\tbne _080425B8\n"
+ "_080425B4:\n"
+ "\tmovs r0, 0x1\n"
+ "\tb _080425BA\n"
+ "_080425B8:\n"
+ "\tmovs r0, 0\n"
+ "_080425BA:\n"
+ "\tadd sp, 0x4\n"
+ "\tpop {r4,r5}\n"
+ "\tpop {r1}\n"
+ "\tbx r1");
+}
+#endif
+
+static u8 *AppendGenderSymbol(u8 *name, u8 gender)
+{
+ if (gender == MON_MALE)
+ {
+ if (!NameHasGenderSymbol(name, MON_MALE))
+ return StringAppend(name, gOtherText_MaleSymbol3);
+ }
+
+ else if (gender == MON_FEMALE)
+ {
+ if (!NameHasGenderSymbol(name, MON_FEMALE))
+ return StringAppend(name, gOtherText_FemaleSymbol3);
+ }
+ return StringAppend(name, gOtherText_GenderlessSymbol);
+}
+
+static u8 *MonAppendGenderSymbol(u8 *name, struct BoxPokemon *boxMon)
+{
+ return AppendGenderSymbol(name, GetBoxMonGender(boxMon));
+}
+
+static void DaycareLevelMenuGetText(struct DayCareData *dayCareData, u8 *dest)
+{
+ u8 buffers[2][20];
+ u8 i;
+ *dest = EOS;
+ for (i = 0; i < 2; i ++)
+ {
+ GetBoxMonNick(&dayCareData->mons[i], buffers[i]);
+ MonAppendGenderSymbol(buffers[i], &dayCareData->mons[i]);
+ }
+ StringCopy(dest, buffers[0]);
+ StringAppend(dest, gOtherText_NewLine2);
+ StringAppend(dest, buffers[1]);
+ StringAppend(dest, gOtherText_NewLine2);
+ StringAppend(dest, gOtherText_CancelAndLv);
+}
+
+static void DaycareLevelMenuGetLevelText(struct DayCareData *dayCareData, u8 *dest)
+{
+ u8 i;
+ u8 level;
+ *dest = EOS;
+ for (i = 0; i < 2; i ++)
+ {
+ level = Daycare_GetLevelAfterSteps(&dayCareData->mons[i], dayCareData->misc.countersEtc.steps[i]);
+ dest[0] = 0x34;
+ dest[1] = 0xFC;
+ dest[2] = 0x14;
+ dest[3] = 0x06;
+ dest = ConvertIntToDecimalStringN(dest + 4, level, STR_CONV_MODE_RIGHT_ALIGN, 3);
+ dest[0] = 0xFC;
+ dest[1] = 0x14;
+ dest[2] = 0x00;
+ dest = StringCopy(dest + 3, gOtherText_NewLine2);
+ }
+ *dest = EOS;
+}
+
+static void DaycareLevelMenuProcessKeyInput(u8 taskId)
+{
+ if (gMain.newKeys & DPAD_UP)
+ {
+ if (gTasks[taskId].data[0] != 0)
+ {
+ gTasks[taskId].data[0] --;
+ MoveMenuCursor(-1);
+ PlaySE(SE_SELECT);
+ }
+ }
+ else if (gMain.newKeys & DPAD_DOWN)
+ {
+ if (gTasks[taskId].data[0] != 2)
+ {
+ gTasks[taskId].data[0] ++;
+ MoveMenuCursor(+1);
+ PlaySE(SE_SELECT);
+ }
+ }
+ else if (gMain.newKeys & A_BUTTON)
+ {
+ HandleDestroyMenuCursors();
+ PlaySE(SE_SELECT);
+ gLastFieldPokeMenuOpened = gScriptResult = gTasks[taskId].data[0];
+ DestroyTask(taskId);
+ MenuZeroFillWindowRect(15, 6, 29, 13);
+ EnableBothScriptContexts();
+ }
+ else if (gMain.newKeys & B_BUTTON)
+ {
+ HandleDestroyMenuCursors();
+ gLastFieldPokeMenuOpened = gScriptResult = 2;
+ DestroyTask(taskId);
+ MenuZeroFillWindowRect(15, 6, 29, 13);
+ EnableBothScriptContexts();
+ }
+}
+
+void ShowDaycareLevelMenu(void)
+{
+ u8 buffer[100];
+ MenuDrawTextWindow(15, 6, 29, 13);
+ DaycareLevelMenuGetText(&gSaveBlock1.daycareData, buffer);
+ MenuPrint(buffer, 16, 7);
+ DaycareLevelMenuGetLevelText(&gSaveBlock1.daycareData, buffer);
+ MenuPrint_PixelCoords(buffer, 0xce, 0x38, TRUE);
+ InitMenu(0, 16, 7, 3, 0, 13);
+ CreateTask(DaycareLevelMenuProcessKeyInput, 3);
+}
+
+void ChooseSendDaycareMon(void)
+{
+ OpenPartyMenu(6, 0);
+ gMain.savedCallback = c2_exit_to_overworld_2_switch;
+}
diff --git a/src/de_rom_8040FE0.c b/src/de_rom_8040FE0.c
index c618ebdb2..eebcc1437 100644
--- a/src/de_rom_8040FE0.c
+++ b/src/de_rom_8040FE0.c
@@ -142,124 +142,124 @@ u8 *de_sub_8041024(s32 arg0, u32 arg1) {
__attribute__((naked))
void de_sub_8041024(void) {
asm(".syntax unified\n\
- push {r4-r6,lr}\n\
- adds r2, r0, 0\n\
- adds r6, r1, 0\n\
- movs r0, 0x80\n\
- lsls r0, 3\n\
- cmp r2, r0\n\
- beq _0804104A\n\
- cmp r2, r0\n\
- bgt _08041040\n\
- movs r0, 0x80\n\
- lsls r0, 1\n\
- cmp r2, r0\n\
- beq _08041064\n\
- b _0804109C\n\
+ push {r4-r6,lr}\n\
+ adds r2, r0, 0\n\
+ adds r6, r1, 0\n\
+ movs r0, 0x80\n\
+ lsls r0, 3\n\
+ cmp r2, r0\n\
+ beq _0804104A\n\
+ cmp r2, r0\n\
+ bgt _08041040\n\
+ movs r0, 0x80\n\
+ lsls r0, 1\n\
+ cmp r2, r0\n\
+ beq _08041064\n\
+ b _0804109C\n\
_08041040:\n\
- movs r0, 0x80\n\
- lsls r0, 4\n\
- cmp r2, r0\n\
- beq _08041086\n\
- b _0804109C\n\
+ movs r0, 0x80\n\
+ lsls r0, 4\n\
+ cmp r2, r0\n\
+ beq _08041086\n\
+ b _0804109C\n\
_0804104A:\n\
- bl GetSecretBaseTrainerNameIndex\n\
- lsls r0, 24\n\
- lsrs r5, r0, 24\n\
- ldr r0, _08041060 @ =0x02017000\n\
- ldrb r0, [r0, 0x1]\n\
- lsls r0, 27\n\
- lsrs r2, r0, 31\n\
- cmp r5, 0x1A\n\
- beq _080410B8\n\
- b _080410F8\n\
- .align 2, 0\n\
+ bl GetSecretBaseTrainerNameIndex\n\
+ lsls r0, 24\n\
+ lsrs r5, r0, 24\n\
+ ldr r0, _08041060 @ =0x02017000\n\
+ ldrb r0, [r0, 0x1]\n\
+ lsls r0, 27\n\
+ lsrs r2, r0, 31\n\
+ cmp r5, 0x1A\n\
+ beq _080410B8\n\
+ b _080410F8\n\
+ .align 2, 0\n\
_08041060: .4byte 0x02017000\n\
_08041064:\n\
- bl de_sub_81364AC\n\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
- bl get_trainer_class_name_index\n\
+ bl de_sub_81364AC\n\
+ lsls r0, 24\n\
+ lsrs r4, r0, 24\n\
+ bl get_trainer_class_name_index\n\
_08041070:\n\
- lsls r0, 24\n\
- lsrs r5, r0, 24\n\
- cmp r4, 0x1E\n\
- beq _08041094\n\
- adds r0, r4, 0\n\
- subs r0, 0x3D\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- cmp r0, 0x2\n\
- bls _080410CC\n\
- b _080410F8\n\
+ lsls r0, 24\n\
+ lsrs r5, r0, 24\n\
+ cmp r4, 0x1E\n\
+ beq _08041094\n\
+ adds r0, r4, 0\n\
+ subs r0, 0x3D\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ cmp r0, 0x2\n\
+ bls _080410CC\n\
+ b _080410F8\n\
_08041086:\n\
- bl de_sub_81364F8\n\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
- bl sub_8135FD8\n\
- b _08041070\n\
+ bl de_sub_81364F8\n\
+ lsls r0, 24\n\
+ lsrs r4, r0, 24\n\
+ bl sub_8135FD8\n\
+ b _08041070\n\
_08041094:\n\
- movs r0, 0x1\n\
- bl de_sub_8040FE0\n\
- b _08041102\n\
+ movs r0, 0x1\n\
+ bl de_sub_8040FE0\n\
+ b _08041102\n\
_0804109C:\n\
- ldr r1, _080410C0 @ =gTrainers\n\
- lsls r4, r6, 2\n\
- adds r0, r4, r6\n\
- lsls r0, 3\n\
- adds r0, r1\n\
- ldrb r5, [r0, 0x1]\n\
- lsls r0, r6, 16\n\
- lsrs r0, 16\n\
- bl sub_803FC58\n\
- lsls r0, 24\n\
- lsrs r2, r0, 24\n\
- cmp r5, 0x1A\n\
- bne _080410C4\n\
+ ldr r1, _080410C0 @ =gTrainers\n\
+ lsls r4, r6, 2\n\
+ adds r0, r4, r6\n\
+ lsls r0, 3\n\
+ adds r0, r1\n\
+ ldrb r5, [r0, 0x1]\n\
+ lsls r0, r6, 16\n\
+ lsrs r0, 16\n\
+ bl sub_803FC58\n\
+ lsls r0, 24\n\
+ lsrs r2, r0, 24\n\
+ cmp r5, 0x1A\n\
+ bne _080410C4\n\
_080410B8:\n\
- adds r0, r2, 0\n\
- bl de_sub_8040FE0\n\
- b _08041102\n\
- .align 2, 0\n\
+ adds r0, r2, 0\n\
+ bl de_sub_8040FE0\n\
+ b _08041102\n\
+ .align 2, 0\n\
_080410C0: .4byte gTrainers\n\
_080410C4:\n\
- cmp r5, 0x2E\n\
- bne _080410D4\n\
- cmp r2, 0x1\n\
- bne _080410D4\n\
+ cmp r5, 0x2E\n\
+ bne _080410D4\n\
+ cmp r2, 0x1\n\
+ bne _080410D4\n\
_080410CC:\n\
- movs r0, 0x1\n\
- bl de_sub_8040FF4\n\
- b _08041102\n\
+ movs r0, 0x1\n\
+ bl de_sub_8040FF4\n\
+ b _08041102\n\
_080410D4:\n\
- cmp r5, 0x19\n\
- bne _080410F8\n\
- ldr r0, _080410F4 @ =gTrainers\n\
- adds r1, r4, r6\n\
- lsls r1, 3\n\
- adds r1, r0\n\
- ldrb r0, [r1, 0x18]\n\
- movs r2, 0\n\
- cmp r0, 0x1\n\
- bne _080410EA\n\
- movs r2, 0x1\n\
+ cmp r5, 0x19\n\
+ bne _080410F8\n\
+ ldr r0, _080410F4 @ =gTrainers\n\
+ adds r1, r4, r6\n\
+ lsls r1, 3\n\
+ adds r1, r0\n\
+ ldrb r0, [r1, 0x18]\n\
+ movs r2, 0\n\
+ cmp r0, 0x1\n\
+ bne _080410EA\n\
+ movs r2, 0x1\n\
_080410EA:\n\
- adds r0, r2, 0\n\
- bl de_sub_804100C\n\
- b _08041102\n\
- .align 2, 0\n\
+ adds r0, r2, 0\n\
+ bl de_sub_804100C\n\
+ b _08041102\n\
+ .align 2, 0\n\
_080410F4: .4byte gTrainers\n\
_080410F8:\n\
- movs r0, 0xD\n\
- adds r1, r5, 0\n\
- muls r1, r0\n\
- ldr r0, _08041108 @ =gTrainerClassNames\n\
- adds r0, r1, r0\n\
+ movs r0, 0xD\n\
+ adds r1, r5, 0\n\
+ muls r1, r0\n\
+ ldr r0, _08041108 @ =gTrainerClassNames\n\
+ adds r0, r1, r0\n\
_08041102:\n\
- pop {r4-r6}\n\
- pop {r1}\n\
- bx r1\n\
- .align 2, 0\n\
+ pop {r4-r6}\n\
+ pop {r1}\n\
+ bx r1\n\
+ .align 2, 0\n\
_08041108: .4byte gTrainerClassNames\n\
.syntax divided\n");
}
diff --git a/src/decoration.c b/src/decoration.c
index da33b3ab7..1d48692c1 100644
--- a/src/decoration.c
+++ b/src/decoration.c
@@ -1,7 +1,7 @@
#include "global.h"
#include "main.h"
#include "map_object_constants.h"
-#include "rom4.h"
+#include "overworld.h"
#include "sound.h"
#include "songs.h"
#include "string_util.h"
@@ -2322,7 +2322,7 @@ void sub_80FF474(void)
{
if (FlagGet(i + 0xae) == 1)
{
- FlagReset(i + 0xae);
+ FlagClear(i + 0xae);
for (j=0; j<gMapHeader.events->mapObjectCount; j++)
{
if (gMapHeader.events->mapObjects[j].flagId == i + 0xae)
diff --git a/src/decoration_inventory.c b/src/decoration_inventory.c
index 35ba7e228..083cb260c 100644
--- a/src/decoration_inventory.c
+++ b/src/decoration_inventory.c
@@ -1,5 +1,5 @@
//
-// Created by Scott Norton on 6/5/17.
+
//
#include "global.h"
diff --git a/src/diploma.c b/src/diploma.c
index ba7de58aa..27601404c 100644
--- a/src/diploma.c
+++ b/src/diploma.c
@@ -4,7 +4,7 @@
#include "menu.h"
#include "palette.h"
#include "pokedex.h"
-#include "rom4.h"
+#include "overworld.h"
#include "sprite.h"
#include "string_util.h"
#include "strings2.h"
@@ -35,7 +35,7 @@ static void VBlankCB(void)
TransferPlttBuffer();
}
-void sub_8145D88(void)
+void CB2_ShowDiploma(void)
{
u32 savedIme;
diff --git a/src/easy_chat.c b/src/easy_chat.c
index f46084e50..6014b3d14 100644
--- a/src/easy_chat.c
+++ b/src/easy_chat.c
@@ -19,8 +19,10 @@ extern const u8 gEasyChatGroupSizes[];
extern u16 gSpecialVar_0x8004;
+IWRAM_DATA u8 gUnknown_03000740;
-u8 *sub_80EB3FC(u8 *dst, u16 word)
+// returns the end of the destination buffer text
+u8 *EasyChat_GetWordText(u8 *dst, u16 word)
{
u16 group;
u16 wordIndex;
@@ -32,13 +34,13 @@ u8 *sub_80EB3FC(u8 *dst, u16 word)
if (word == 0xFFFF)
{
- dst[0] = EOS;
+ *dst = EOS;
return dst;
}
else
{
- group = word >> 9;
- wordIndex = word & 0x1FF;
+ group = EC_GROUP(word);
+ wordIndex = EC_INDEX(word);
switch (group)
{
case EC_GROUP_POKEMON: // 0
@@ -59,7 +61,7 @@ u8 *sub_80EB3FC(u8 *dst, u16 word)
dst = StringCopy(dst, src);
break;
}
- dst[0] = EOS;
+ *dst = EOS;
return dst;
}
}
@@ -77,7 +79,7 @@ u8 *ConvertEasyChatWordsToString(u8 *dst, u16 *words, u16 arg2, u16 arg3)
for (n = 0; n < i1; n++)
{
- dst = sub_80EB3FC(dst, words[0]);
+ dst = EasyChat_GetWordText(dst, words[0]);
if (words[0] != 0xFFFF)
{
@@ -90,7 +92,7 @@ u8 *ConvertEasyChatWordsToString(u8 *dst, u16 *words, u16 arg2, u16 arg3)
word = words[0];
words++;
- dst = sub_80EB3FC(dst, word);
+ dst = EasyChat_GetWordText(dst, word);
dst[0] = CHAR_NEWLINE;
dst++;
@@ -115,7 +117,7 @@ u8 *sub_80EB544(u8 *dst, u16 *words, u16 arg2, u16 arg3)
for (n = 0; n < i1; n++)
{
- dst = sub_80EB3FC(dst, words[0]);
+ dst = EasyChat_GetWordText(dst, words[0]);
if (words[0] != 0xFFFF)
{
@@ -128,7 +130,7 @@ u8 *sub_80EB544(u8 *dst, u16 *words, u16 arg2, u16 arg3)
word = words[0];
words++;
- dst = sub_80EB3FC(dst, word);
+ dst = EasyChat_GetWordText(dst, word);
// Only difference with ConvertEasyChatWordsToString
dst[0] = (i == 0) ? CHAR_NEWLINE : CHAR_PROMPT_SCROLL;
@@ -144,7 +146,7 @@ u8 *sub_80EB544(u8 *dst, u16 *words, u16 arg2, u16 arg3)
u16 unref_sub_80EB5E0(u16 arg0)
{
- u8 *chars;
+ const u8 *chars;
u16 i;
u16 length;
int group, word;
@@ -153,8 +155,8 @@ u16 unref_sub_80EB5E0(u16 arg0)
if (arg0 == 0xFFFF)
return 0;
- group = arg0 >> 9;
- word = arg0 & 0x1FF;
+ group = EC_GROUP(arg0);
+ word = EC_INDEX(arg0);
switch (group)
{
case EC_GROUP_POKEMON: // 0
@@ -321,7 +323,7 @@ void sub_80EB83C(void)
group = EC_GROUP_LIFESTYLE;
local2 = sub_80EB784(group);
- sub_80EB3FC(gStringVar2, local2);
+ EasyChat_GetWordText(gStringVar2, local2);
}
u8 sub_80EB868(u8 arg0)
diff --git a/src/egg_hatch.c b/src/egg_hatch.c
index b7fbfa5a8..f77c477ae 100644
--- a/src/egg_hatch.c
+++ b/src/egg_hatch.c
@@ -6,7 +6,7 @@
#include "task.h"
#include "script.h"
#include "palette.h"
-#include "rom4.h"
+#include "overworld.h"
#include "main.h"
#include "event_data.h"
#include "sound.h"
@@ -323,69 +323,69 @@ __attribute__((naked))
static bool8 sub_8042ABC(void* a, u8 b)
{
asm(".syntax unified\n\
- push {r4-r6,lr}\n\
- sub sp, 0x20\n\
- adds r5, r0, 0\n\
- lsls r4, r1, 24\n\
- lsrs r4, 24\n\
- lsls r0, r4, 2\n\
- adds r0, r4\n\
- lsls r0, 4\n\
- adds r0, r5, r0\n\
- mov r1, sp\n\
- bl GetBoxMonNick\n\
- lsls r0, r4, 3\n\
- subs r0, r4\n\
- lsls r1, r0, 3\n\
- adds r0, r5, r1\n\
- adds r0, 0xC0\n\
- ldrh r0, [r0]\n\
- cmp r0, 0\n\
- beq _08042B40\n\
- adds r0, r1, 0\n\
- adds r0, 0xA0\n\
- adds r5, r0\n\
- adds r6, r5, 0\n\
- adds r6, 0x2C\n\
- mov r0, sp\n\
- adds r1, r6, 0\n\
- bl StringCompareWithoutExtCtrlCodes\n\
- cmp r0, 0\n\
- bne _08042B08\n\
- ldr r0, _08042B30 @ =gSaveBlock2\n\
- adds r1, r5, 0\n\
- adds r1, 0x24\n\
- bl StringCompareWithoutExtCtrlCodes\n\
- cmp r0, 0\n\
- beq _08042B40\n\
+ push {r4-r6,lr}\n\
+ sub sp, 0x20\n\
+ adds r5, r0, 0\n\
+ lsls r4, r1, 24\n\
+ lsrs r4, 24\n\
+ lsls r0, r4, 2\n\
+ adds r0, r4\n\
+ lsls r0, 4\n\
+ adds r0, r5, r0\n\
+ mov r1, sp\n\
+ bl GetBoxMonNick\n\
+ lsls r0, r4, 3\n\
+ subs r0, r4\n\
+ lsls r1, r0, 3\n\
+ adds r0, r5, r1\n\
+ adds r0, 0xC0\n\
+ ldrh r0, [r0]\n\
+ cmp r0, 0\n\
+ beq _08042B40\n\
+ adds r0, r1, 0\n\
+ adds r0, 0xA0\n\
+ adds r5, r0\n\
+ adds r6, r5, 0\n\
+ adds r6, 0x2C\n\
+ mov r0, sp\n\
+ adds r1, r6, 0\n\
+ bl StringCompareWithoutExtCtrlCodes\n\
+ cmp r0, 0\n\
+ bne _08042B08\n\
+ ldr r0, _08042B30 @ =gSaveBlock2\n\
+ adds r1, r5, 0\n\
+ adds r1, 0x24\n\
+ bl StringCompareWithoutExtCtrlCodes\n\
+ cmp r0, 0\n\
+ beq _08042B40\n\
_08042B08:\n\
- ldr r0, _08042B34 @ =gStringVar1\n\
- mov r1, sp\n\
- bl StringCopy\n\
- ldr r4, _08042B38 @ =gStringVar2\n\
- adds r1, r5, 0\n\
- adds r1, 0x24\n\
- adds r0, r4, 0\n\
- bl StringCopy\n\
- ldr r0, _08042B3C @ =gStringVar3\n\
- adds r1, r6, 0\n\
- bl StringCopy\n\
- adds r0, r4, 0\n\
- bl SanitizeNameString\n\
- movs r0, 0x1\n\
- b _08042B42\n\
- .align 2, 0\n\
+ ldr r0, _08042B34 @ =gStringVar1\n\
+ mov r1, sp\n\
+ bl StringCopy\n\
+ ldr r4, _08042B38 @ =gStringVar2\n\
+ adds r1, r5, 0\n\
+ adds r1, 0x24\n\
+ adds r0, r4, 0\n\
+ bl StringCopy\n\
+ ldr r0, _08042B3C @ =gStringVar3\n\
+ adds r1, r6, 0\n\
+ bl StringCopy\n\
+ adds r0, r4, 0\n\
+ bl SanitizeNameString\n\
+ movs r0, 0x1\n\
+ b _08042B42\n\
+ .align 2, 0\n\
_08042B30: .4byte gSaveBlock2\n\
_08042B34: .4byte gStringVar1\n\
_08042B38: .4byte gStringVar2\n\
_08042B3C: .4byte gStringVar3\n\
_08042B40:\n\
- movs r0, 0\n\
+ movs r0, 0\n\
_08042B42:\n\
- add sp, 0x20\n\
- pop {r4-r6}\n\
- pop {r1}\n\
- bx r1\n\
+ add sp, 0x20\n\
+ pop {r4-r6}\n\
+ pop {r1}\n\
+ bx r1\n\
.syntax divided");
}
diff --git a/src/event_data.c b/src/event_data.c
index 0484bae02..ee475343f 100644
--- a/src/event_data.c
+++ b/src/event_data.c
@@ -36,10 +36,10 @@ void ClearTempFieldEventData(void)
{
memset(gSaveBlock1.flags, 0, TEMP_FLAGS_SIZE);
memset(gSaveBlock1.vars, 0, TEMP_VARS_SIZE);
- FlagReset(SYS_ENC_UP_ITEM);
- FlagReset(SYS_ENC_DOWN_ITEM);
- FlagReset(SYS_USE_STRENGTH);
- FlagReset(SYS_CTRL_OBJ_DELETE);
+ FlagClear(SYS_ENC_UP_ITEM);
+ FlagClear(SYS_ENC_DOWN_ITEM);
+ FlagClear(SYS_USE_STRENGTH);
+ FlagClear(SYS_CTRL_OBJ_DELETE);
}
// probably had different flag splits at one point.
@@ -53,7 +53,7 @@ void DisableNationalPokedex(void)
u16 *nationalDexVar = GetVarPointer(VAR_NATIONAL_DEX);
gSaveBlock2.pokedex.nationalMagic = 0;
*nationalDexVar = 0;
- FlagReset(SYS_NATIONAL_DEX);
+ FlagClear(SYS_NATIONAL_DEX);
}
void EnableNationalPokedex(void)
@@ -77,7 +77,7 @@ bool32 IsNationalPokedexEnabled(void)
void DisableMysteryGift(void)
{
- FlagReset(SYS_EXDATA_ENABLE);
+ FlagClear(SYS_EXDATA_ENABLE);
}
void EnableMysteryGift(void)
@@ -93,7 +93,7 @@ bool32 IsMysteryGiftEnabled(void)
void DisableResetRTC(void)
{
VarSet(VAR_RESET_RTC_ENABLE, 0);
- FlagReset(SYS_RESET_RTC_ENABLE);
+ FlagClear(SYS_RESET_RTC_ENABLE);
}
void EnableResetRTC(void)
@@ -162,7 +162,7 @@ u8 FlagSet(u16 id)
return 0;
}
-u8 FlagReset(u16 id)
+u8 FlagClear(u16 id)
{
u8 *ptr = GetFlagPointer(id);
if (ptr)
diff --git a/src/evolution_graphics.c b/src/evolution_graphics.c
new file mode 100644
index 000000000..1fd5bf8fa
--- /dev/null
+++ b/src/evolution_graphics.c
@@ -0,0 +1,614 @@
+#include "global.h"
+#include "evolution_graphics.h"
+#include "sprite.h"
+#include "trig.h"
+#include "rng.h"
+#include "decompress.h"
+#include "task.h"
+#include "sound.h"
+#include "songs.h"
+#include "palette.h"
+
+// this file's functions
+static void EvoSparkle_DummySpriteCb(struct Sprite* sprite);
+static void EvoTask_BeginPreSet1_FadeAndPlaySE(u8 taskID);
+static void EvoTask_CreatePreEvoSparkleSet1(u8 taskID);
+static void EvoTask_WaitForPre1SparklesToGoUp(u8 taskID);
+static void EvoTask_BeginPreSparklesSet2(u8 taskID);
+static void EvoTask_CreatePreEvoSparklesSet2(u8 taskID);
+static void EvoTask_DestroyPreSet2Task(u8 taskID);
+static void EvoTask_BeginPostSparklesSet1(u8 taskID);
+static void EvoTask_CreatePostEvoSparklesSet1(u8 taskID);
+static void EvoTask_DestroyPostSet1Task(u8 taskID);
+static void EvoTask_BeginPostSparklesSet2_AndFlash(u8 taskID);
+static void EvoTask_CreatePostEvoSparklesSet2_AndFlash(u8 taskID);
+static void EvoTask_BeginPostSparklesSet2_AndFlash_Trade(u8 taskID);
+static void EvoTask_CreatePostEvoSparklesSet2_AndFlash_Trade(u8 taskID);
+static void EvoTask_DestroyPostSet2AndFlashTask(u8 taskID);
+
+static void sub_8149FC8(u8 taskID);
+static void sub_8149FEC(u8 taskID);
+static void PreEvoVisible_PostEvoInvisible_KillTask(u8 taskID);
+static void PreEvoInVisible_PostEvoVisible_KillTask(u8 taskID);
+static void sub_814A03C(u8 taskID);
+
+// const data
+static const u16 sEvoSparklePalette[] = INCBIN_U16("graphics/misc/evo_sparkle.gbapal");
+static const u8 sEvoSparkleTiles[] = INCBIN_U8("graphics/misc/evo_sparkle.4bpp.lz");
+
+static const struct CompressedSpriteSheet sEvoSparkleSpriteSheets[] =
+{
+ {sEvoSparkleTiles, 0x20, 1001},
+ {NULL, 0, 0}
+};
+static const struct SpritePalette sEvoSparkleSpritePals[] =
+{
+ {sEvoSparklePalette, 1001},
+ {NULL, 0}
+};
+
+static const struct OamData sOamData_EvoSparkle =
+{
+ .y = 160,
+ .affineMode = 0,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 0,
+ .tileNum = 0,
+ .priority = 1,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+static const union AnimCmd sSpriteAnim_EvoSparkle[] =
+{
+ ANIMCMD_FRAME(0, 8),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const sSpriteAnimTable_EvoSparkle[] =
+{
+ sSpriteAnim_EvoSparkle,
+};
+
+static const struct SpriteTemplate sEvoSparkleSpriteTemplate =
+{
+ .tileTag = 1001,
+ .paletteTag = 1001,
+ .oam = &sOamData_EvoSparkle,
+ .anims = sSpriteAnimTable_EvoSparkle,
+ .images = NULL,
+ .affineAnims = gDummySpriteAffineAnimTable,
+ .callback = EvoSparkle_DummySpriteCb
+};
+
+static const s16 sEvoSparkleMatricies[] =
+{
+ 0x3C0, 0x380, 0x340, 0x300, 0x2C0, 0x280, 0x240, 0x200, 0x1C0,
+ 0x180, 0x140, 0x100, -4, 0x10, -3, 0x30, -2, 0x50,
+ -1, 0x70, 0x1, 0x70, 0x2, 0x50, 0x3, 0x30, 0x4, 0x10
+};
+
+// code
+
+static void EvoSparkle_DummySpriteCb(struct Sprite* sprite)
+{
+
+}
+
+static void SetEvoSparklesMatrices(void)
+{
+ u16 i;
+ for (i = 0; i < 12; i++)
+ {
+ SetOamMatrix(20 + i, sEvoSparkleMatricies[i], 0, 0, sEvoSparkleMatricies[i]);
+ }
+}
+
+static void SpriteCB_PreEvoSparkleSet1(struct Sprite* sprite)
+{
+ if (sprite->pos1.y > 8)
+ {
+ u8 matrixNum;
+
+ sprite->pos1.y = 88 - (sprite->data7 * sprite->data7) / 80;
+ sprite->pos2.y = Sin((u8)(sprite->data6), sprite->data5) / 4;
+ sprite->pos2.x = Cos((u8)(sprite->data6), sprite->data5);
+ sprite->data6 += 4;
+ if (sprite->data7 & 1)
+ sprite->data5--;
+ sprite->data7++;
+ if (sprite->pos2.y > 0)
+ sprite->subpriority = 1;
+ else
+ sprite->subpriority = 20;
+ matrixNum = sprite->data5 / 4 + 20;
+ if (matrixNum > 31)
+ matrixNum = 31;
+ sprite->oam.matrixNum = matrixNum;
+ }
+ else
+ DestroySprite(sprite);
+}
+
+static void CreatePreEvoSparkleSet1(u8 arg0)
+{
+ u8 spriteID = CreateSprite(&sEvoSparkleSpriteTemplate, 120, 88, 0);
+ if (spriteID != MAX_SPRITES)
+ {
+ gSprites[spriteID].data5 = 48;
+ gSprites[spriteID].data6 = arg0;
+ gSprites[spriteID].data7 = 0;
+ gSprites[spriteID].oam.affineMode = 1;
+ gSprites[spriteID].oam.matrixNum = 31;
+ gSprites[spriteID].callback = SpriteCB_PreEvoSparkleSet1;
+ }
+}
+
+static void SpriteCB_PreEvoSparkleSet2(struct Sprite* sprite)
+{
+ if (sprite->pos1.y < 88)
+ {
+ sprite->pos1.y = 8 + (sprite->data7 * sprite->data7) / 5;
+ sprite->pos2.y = Sin((u8)(sprite->data6), sprite->data5) / 4;
+ sprite->pos2.x = Cos((u8)(sprite->data6), sprite->data5);
+ sprite->data5 = 8 + Sin((u8)(sprite->data7 * 4), 40);
+ sprite->data7++;
+ }
+ else
+ DestroySprite(sprite);
+}
+
+static void CreatePreEvoSparkleSet2(u8 arg0)
+{
+ u8 spriteID = CreateSprite(&sEvoSparkleSpriteTemplate, 120, 8, 0);
+ if (spriteID != MAX_SPRITES)
+ {
+ gSprites[spriteID].data5 = 8;
+ gSprites[spriteID].data6 = arg0;
+ gSprites[spriteID].data7 = 0;
+ gSprites[spriteID].oam.affineMode = 1;
+ gSprites[spriteID].oam.matrixNum = 25;
+ gSprites[spriteID].subpriority = 1;
+ gSprites[spriteID].callback = SpriteCB_PreEvoSparkleSet2;
+ }
+}
+
+static void SpriteCB_PostEvoSparkleSet1(struct Sprite* sprite)
+{
+ if (sprite->data5 > 8)
+ {
+ sprite->pos2.y = Sin((u8)(sprite->data6), sprite->data5);
+ sprite->pos2.x = Cos((u8)(sprite->data6), sprite->data5);
+ sprite->data5 -= sprite->data3;
+ sprite->data6 += 4;
+ }
+ else
+ DestroySprite(sprite);
+}
+
+static void CreatePostEvoSparkleSet1(u8 arg0, u8 arg1)
+{
+ u8 spriteID = CreateSprite(&sEvoSparkleSpriteTemplate, 120, 56, 0);
+ if (spriteID != MAX_SPRITES)
+ {
+ gSprites[spriteID].data3 = arg1;
+ gSprites[spriteID].data5 = 120;
+ gSprites[spriteID].data6 = arg0;
+ gSprites[spriteID].data7 = 0;
+ gSprites[spriteID].oam.affineMode = 1;
+ gSprites[spriteID].oam.matrixNum = 31;
+ gSprites[spriteID].subpriority = 1;
+ gSprites[spriteID].callback = SpriteCB_PostEvoSparkleSet1;
+ }
+}
+
+static void SpriteCB_PostEvoSparkleSet2(struct Sprite* sprite)
+{
+ if (!(sprite->data7 & 3))
+ sprite->pos1.y++;
+ if (sprite->data6 < 128)
+ {
+ u8 matrixNum;
+
+ sprite->pos2.y = -Sin((u8)(sprite->data6), sprite->data5);
+ sprite->pos1.x = 120 + (sprite->data3 * sprite->data7) / 3;
+ sprite->data6++;
+ matrixNum = 31 - (sprite->data6 * 12 / 128);
+ if (sprite->data6 > 64)
+ sprite->subpriority = 1;
+ else
+ {
+ sprite->invisible = 0;
+ sprite->subpriority = 20;
+ if (sprite->data6 > 112 && sprite->data6 & 1)
+ sprite->invisible = 1;
+ }
+ if (matrixNum < 20)
+ matrixNum = 20;
+ sprite->oam.matrixNum = matrixNum;
+ sprite->data7++;
+ }
+ else
+ DestroySprite(sprite);
+}
+
+static void CreatePostEvoSparkleSet2(u8 arg0)
+{
+ u8 spriteID = CreateSprite(&sEvoSparkleSpriteTemplate, 120, 56, 0);
+ if (spriteID != MAX_SPRITES)
+ {
+ gSprites[spriteID].data3 = 3 - (Random() % 7);
+ gSprites[spriteID].data5 = 48 + (Random() & 0x3F);
+ gSprites[spriteID].data7 = 0;
+ gSprites[spriteID].oam.affineMode = 1;
+ gSprites[spriteID].oam.matrixNum = 31;
+ gSprites[spriteID].subpriority = 20;
+ gSprites[spriteID].callback = SpriteCB_PostEvoSparkleSet2;
+ }
+}
+
+void LoadEvoSparkleSpriteAndPal(void)
+{
+ LoadCompressedObjectPic(&sEvoSparkleSpriteSheets[0]);
+ LoadSpritePalettes(sEvoSparkleSpritePals);
+}
+
+#define tFrameCounter data[15]
+
+u8 LaunchTask_PreEvoSparklesSet1(u16 arg0)
+{
+ u8 taskID = CreateTask(EvoTask_BeginPreSet1_FadeAndPlaySE, 0);
+ gTasks[taskID].data[1] = arg0;
+ return taskID;
+}
+
+static void EvoTask_BeginPreSet1_FadeAndPlaySE(u8 taskID)
+{
+ SetEvoSparklesMatrices();
+ gTasks[taskID].tFrameCounter = 0;
+ BeginNormalPaletteFade(3 << gTasks[taskID].data[1], 0xA, 0, 0x10, 0x7FFF);
+ gTasks[taskID].func = EvoTask_CreatePreEvoSparkleSet1;
+ PlaySE(SE_W025);
+}
+
+static void EvoTask_CreatePreEvoSparkleSet1(u8 taskID)
+{
+ if (gTasks[taskID].tFrameCounter < 64)
+ {
+ if (!(gTasks[taskID].tFrameCounter & 7))
+ {
+ u8 i;
+ for (i = 0; i < 4; i++)
+ CreatePreEvoSparkleSet1((0x78 & gTasks[taskID].tFrameCounter) * 2 + i * 64);
+ }
+ gTasks[taskID].tFrameCounter++;
+ }
+ else
+ {
+ gTasks[taskID].tFrameCounter = 96;
+ gTasks[taskID].func = EvoTask_WaitForPre1SparklesToGoUp;
+ }
+}
+
+static void EvoTask_WaitForPre1SparklesToGoUp(u8 taskID)
+{
+ if (gTasks[taskID].tFrameCounter != 0)
+ gTasks[taskID].tFrameCounter--;
+ else
+ DestroyTask(taskID);
+}
+
+u8 LaunchTask_PreEvoSparklesSet2(void)
+{
+ return CreateTask(EvoTask_BeginPreSparklesSet2, 0);
+}
+
+static void EvoTask_BeginPreSparklesSet2(u8 taskID)
+{
+ SetEvoSparklesMatrices();
+ gTasks[taskID].tFrameCounter = 0;
+ gTasks[taskID].func = EvoTask_CreatePreEvoSparklesSet2;
+ PlaySE(SE_W062B);
+}
+
+static void EvoTask_CreatePreEvoSparklesSet2(u8 taskID)
+{
+ if (gTasks[taskID].tFrameCounter < 96)
+ {
+ if (gTasks[taskID].tFrameCounter < 6)
+ {
+ u8 i;
+ for (i = 0; i < 9; i++)
+ CreatePreEvoSparkleSet2(i * 16);
+ }
+ gTasks[taskID].tFrameCounter++;
+ }
+ else
+ gTasks[taskID].func = EvoTask_DestroyPreSet2Task;
+}
+
+static void EvoTask_DestroyPreSet2Task(u8 taskID)
+{
+ DestroyTask(taskID);
+}
+
+u8 LaunchTask_PostEvoSparklesSet1(void)
+{
+ return CreateTask(EvoTask_BeginPostSparklesSet1, 0);
+}
+
+static void EvoTask_BeginPostSparklesSet1(u8 taskID)
+{
+ SetEvoSparklesMatrices();
+ gTasks[taskID].tFrameCounter = 0;
+ gTasks[taskID].func = EvoTask_CreatePostEvoSparklesSet1;
+ PlaySE(SE_REAPOKE);
+}
+
+static void EvoTask_CreatePostEvoSparklesSet1(u8 taskID)
+{
+ if (gTasks[taskID].tFrameCounter < 48)
+ {
+ if (gTasks[taskID].tFrameCounter == 0)
+ {
+ u8 i;
+ for (i = 0; i < 16; i++)
+ CreatePostEvoSparkleSet1(i * 16, 4);
+ }
+ if (gTasks[taskID].tFrameCounter == 32)
+ {
+ u8 i;
+ for (i = 0; i < 16; i++)
+ CreatePostEvoSparkleSet1(i * 16, 8);
+ }
+ gTasks[taskID].tFrameCounter++;
+ }
+ else
+ gTasks[taskID].func = EvoTask_DestroyPostSet1Task;
+}
+
+static void EvoTask_DestroyPostSet1Task(u8 taskID)
+{
+ DestroyTask(taskID);
+}
+
+u8 LaunchTask_PostEvoSparklesSet2AndFlash(u16 species)
+{
+ u8 taskID = CreateTask(EvoTask_BeginPostSparklesSet2_AndFlash, 0);
+ gTasks[taskID].data[2] = species;
+ return taskID;
+}
+
+static void EvoTask_BeginPostSparklesSet2_AndFlash(u8 taskID)
+{
+ SetEvoSparklesMatrices();
+ gTasks[taskID].tFrameCounter = 0;
+ CpuSet(&gPlttBufferFaded[0x20], &gPlttBufferUnfaded[0x20], 0x30);
+ BeginNormalPaletteFade(0xFFF9001C, 0, 0, 0x10, 0x7FFF);
+ gTasks[taskID].func = EvoTask_CreatePostEvoSparklesSet2_AndFlash;
+ PlaySE(SE_W080);
+}
+
+static void EvoTask_CreatePostEvoSparklesSet2_AndFlash(u8 taskID)
+{
+ if (gTasks[taskID].tFrameCounter < 128)
+ {
+ u8 i;
+ switch (gTasks[taskID].tFrameCounter)
+ {
+ default:
+ if (gTasks[taskID].tFrameCounter < 50)
+ CreatePostEvoSparkleSet2(Random() & 7);
+ break;
+ case 0:
+ for (i = 0; i < 8; i++)
+ CreatePostEvoSparkleSet2(i);
+ break;
+ case 32:
+ BeginNormalPaletteFade(0xFFFF001C, 0x10, 0x10, 0, 0x7FFF);
+ break;
+ }
+ gTasks[taskID].tFrameCounter++;
+ }
+ else
+ gTasks[taskID].func = EvoTask_DestroyPostSet2AndFlashTask;
+}
+
+static void EvoTask_DestroyPostSet2AndFlashTask(u8 taskID)
+{
+ if (!gPaletteFade.active)
+ DestroyTask(taskID);
+}
+
+u8 LaunchTask_PostEvoSparklesSet2AndFlash_Trade(u16 species)
+{
+ u8 taskID = CreateTask(EvoTask_BeginPostSparklesSet2_AndFlash_Trade, 0);
+ gTasks[taskID].data[2] = species;
+ return taskID;
+}
+
+static void EvoTask_BeginPostSparklesSet2_AndFlash_Trade(u8 taskID)
+{
+ SetEvoSparklesMatrices();
+ gTasks[taskID].tFrameCounter = 0;
+ CpuSet(&gPlttBufferFaded[0x20], &gPlttBufferUnfaded[0x20], 0x30);
+ BeginNormalPaletteFade(0xFFF90001, 0, 0, 0x10, 0x7FFF);
+ gTasks[taskID].func = EvoTask_CreatePostEvoSparklesSet2_AndFlash_Trade;
+ PlaySE(SE_W080);
+}
+
+static void EvoTask_CreatePostEvoSparklesSet2_AndFlash_Trade(u8 taskID)
+{
+ if (gTasks[taskID].tFrameCounter < 128)
+ {
+ u8 i;
+ switch (gTasks[taskID].tFrameCounter)
+ {
+ default:
+ if (gTasks[taskID].tFrameCounter < 50)
+ CreatePostEvoSparkleSet2(Random() & 7);
+ break;
+ case 0:
+ for (i = 0; i < 8; i++)
+ CreatePostEvoSparkleSet2(i);
+ break;
+ case 32:
+ BeginNormalPaletteFade(0xFFFF0001, 0x10, 0x10, 0, 0x7FFF);
+ break;
+ }
+ gTasks[taskID].tFrameCounter++;
+ }
+ else
+ gTasks[taskID].func = EvoTask_DestroyPostSet2AndFlashTask;
+}
+
+#undef tFrameCounter
+
+static void PokeEvoSprite_DummySpriteCB(struct Sprite* sprite)
+{
+
+}
+
+#define tPreEvoSpriteID data[1]
+#define tPostEvoSpriteID data[2]
+#define tEvoStopped data[8]
+
+u8 sub_8149E7C(u8 preEvoSpriteID, u8 postEvoSpriteID)
+{
+ u16 i;
+ u16 stack[16];
+ u8 taskID;
+ s32 toDiv;
+
+ for (i = 0; i < 16; i++)
+ stack[i] = 0x7FFF;
+
+ taskID = CreateTask(sub_8149FC8, 0);
+ gTasks[taskID].tPreEvoSpriteID = preEvoSpriteID;
+ gTasks[taskID].tPostEvoSpriteID = postEvoSpriteID;
+ gTasks[taskID].data[3] = 256;
+ gTasks[taskID].data[4] = 16;
+
+ toDiv = 65536;
+ SetOamMatrix(30, 256, 0, 0, 256);
+ SetOamMatrix(31, toDiv / gTasks[taskID].data[4], 0, 0, toDiv / gTasks[taskID].data[4]);
+
+ gSprites[preEvoSpriteID].callback = PokeEvoSprite_DummySpriteCB;
+ gSprites[preEvoSpriteID].oam.affineMode = 1;
+ gSprites[preEvoSpriteID].oam.matrixNum = 30;
+ gSprites[preEvoSpriteID].invisible = 0;
+ CpuSet(stack, &gPlttBufferFaded[0x100 + (gSprites[preEvoSpriteID].oam.paletteNum * 16)], 16);
+
+ gSprites[postEvoSpriteID].callback = PokeEvoSprite_DummySpriteCB;
+ gSprites[postEvoSpriteID].oam.affineMode = 1;
+ gSprites[postEvoSpriteID].oam.matrixNum = 31;
+ gSprites[postEvoSpriteID].invisible = 0;
+ CpuSet(stack, &gPlttBufferFaded[0x100 + (gSprites[postEvoSpriteID].oam.paletteNum * 16)], 16);
+
+ gTasks[taskID].tEvoStopped = FALSE;
+ return taskID;
+}
+
+static void sub_8149FC8(u8 taskID)
+{
+ gTasks[taskID].data[5] = 0;
+ gTasks[taskID].data[6] = 8;
+ gTasks[taskID].func = sub_8149FEC;
+}
+
+static void sub_8149FEC(u8 taskID)
+{
+ if (gTasks[taskID].tEvoStopped)
+ PreEvoVisible_PostEvoInvisible_KillTask(taskID);
+ else if (gTasks[taskID].data[6] == 128)
+ PreEvoInVisible_PostEvoVisible_KillTask(taskID);
+ else
+ {
+ gTasks[taskID].data[6] += 2;
+ gTasks[taskID].data[5] ^= 1;
+ gTasks[taskID].func = sub_814A03C;
+ }
+}
+
+static void sub_814A03C(u8 taskID)
+{
+ if (gTasks[taskID].tEvoStopped)
+ gTasks[taskID].func = PreEvoVisible_PostEvoInvisible_KillTask;
+ else
+ {
+ u16 oamMatrixArg;
+ u8 r6 = 0;
+ if (gTasks[taskID].data[5] == 0)
+ {
+ if (gTasks[taskID].data[3] < 256 - gTasks[taskID].data[6])
+ gTasks[taskID].data[3] += gTasks[taskID].data[6];
+ else
+ {
+ gTasks[taskID].data[3] = 256;
+ r6++;
+ }
+ if (gTasks[taskID].data[4] > 16 + gTasks[taskID].data[6])
+ gTasks[taskID].data[4] -= gTasks[taskID].data[6];
+ else
+ {
+ gTasks[taskID].data[4] = 16;
+ r6++;
+ }
+ }
+ else
+ {
+ if (gTasks[taskID].data[4] < 256 - gTasks[taskID].data[6])
+ gTasks[taskID].data[4] += gTasks[taskID].data[6];
+ else
+ {
+ gTasks[taskID].data[4] = 256;
+ r6++;
+ }
+ if (gTasks[taskID].data[3] > 16 + gTasks[taskID].data[6])
+ gTasks[taskID].data[3] -= gTasks[taskID].data[6];
+ else
+ {
+ gTasks[taskID].data[3] = 16;
+ r6++;
+ }
+ }
+ oamMatrixArg = 65536 / gTasks[taskID].data[3];
+ SetOamMatrix(30, oamMatrixArg, 0, 0, oamMatrixArg);
+
+ oamMatrixArg = 65536 / gTasks[taskID].data[4];
+ SetOamMatrix(31, oamMatrixArg, 0, 0, oamMatrixArg);
+ if (r6 == 2)
+ gTasks[taskID].func = sub_8149FEC;
+ }
+}
+
+static void PreEvoInVisible_PostEvoVisible_KillTask(u8 taskID)
+{
+ gSprites[gTasks[taskID].tPreEvoSpriteID].oam.affineMode = 0;
+ gSprites[gTasks[taskID].tPreEvoSpriteID].oam.matrixNum = 0;
+ gSprites[gTasks[taskID].tPreEvoSpriteID].invisible = 1;
+
+ gSprites[gTasks[taskID].tPostEvoSpriteID].oam.affineMode = 0;
+ gSprites[gTasks[taskID].tPostEvoSpriteID].oam.matrixNum = 0;
+ gSprites[gTasks[taskID].tPostEvoSpriteID].invisible = 0;
+
+ DestroyTask(taskID);
+}
+
+static void PreEvoVisible_PostEvoInvisible_KillTask(u8 taskID)
+{
+ gSprites[gTasks[taskID].tPreEvoSpriteID].oam.affineMode = 0;
+ gSprites[gTasks[taskID].tPreEvoSpriteID].oam.matrixNum = 0;
+ gSprites[gTasks[taskID].tPreEvoSpriteID].invisible = 0;
+
+ gSprites[gTasks[taskID].tPostEvoSpriteID].oam.affineMode = 0;
+ gSprites[gTasks[taskID].tPostEvoSpriteID].oam.matrixNum = 0;
+ gSprites[gTasks[taskID].tPostEvoSpriteID].invisible = 1;
+
+ DestroyTask(taskID);
+}
diff --git a/src/evolution_scene.c b/src/evolution_scene.c
new file mode 100644
index 000000000..88f3e23a8
--- /dev/null
+++ b/src/evolution_scene.c
@@ -0,0 +1,3966 @@
+#include "global.h"
+#include "task.h"
+#include "evolution_scene.h"
+#include "evolution_graphics.h"
+#include "palette.h"
+#include "main.h"
+#include "text.h"
+#include "text_window.h"
+#include "pokemon.h"
+#include "string_util.h"
+#include "battle.h"
+#include "unknown_task.h"
+#include "data2.h"
+#include "decompress.h"
+#include "m4a.h"
+#include "trade.h"
+#include "menu.h"
+#include "pokedex.h"
+#include "species.h"
+#include "sound.h"
+#include "songs.h"
+#include "overworld.h"
+#include "battle_message.h"
+#include "pokemon_summary_screen.h"
+#include "menu_cursor.h"
+#include "strings2.h"
+
+struct EvoInfo
+{
+ u8 preEvoSpriteID;
+ u8 postEvoSpriteID;
+ u8 evoTaskID;
+ u8 field_3;
+
+ u8 unk4[0x40];
+ u8 unk44[0x40];
+ u8 unk84[0x40];
+
+ u8 unkC4[0x40][0x20]; // 0x20148C4
+ u8 unk8C4[0x40][0x20]; // 0x20150C4
+ u8 unk10C4[0x40][0x20]; // 0x20158C4
+ u8 unk18C4[0x40][0x20]; // 0x20160C4
+ u8 unk20C4[0x40][0x20]; // 0x20168C4
+ u8 unk28C4[0x40][0x20]; // 0x20170C4
+ u8 unk30C4[0x40][0x20]; // 0x20178C4
+ u8 unk38C4[0x40][0x20]; // 0x20180C4
+
+ u8 *unk40C4[0x40][0x20]; // 0x20188C4
+
+ u16 unk60C4[0x40][0x20]; // 0x201A8C4
+ u16 unk70C4[0x40][0x20]; // 0x201B8C4
+ u16 unk80C4[0x40][0x20]; // 0x201C8C4
+ u16 unk90C4[0x40][0x20]; // 0x201D8C4
+
+ u8 unkA0C4; // 0x201E8C4
+};
+
+#define sEvoInfo ((*(struct EvoInfo*)(ewram + 0x14800)))
+
+void EvolutionRenameMon(struct Pokemon *mon, u16 oldSpecies, u16 newSpecies);
+void sub_8024CEC(void);
+void sub_8023A80(void);
+void sub_802BC6C(void);
+void sub_8023AD8(void);
+void nullsub_6(void);
+bool32 IsHMMove2(u16 move);
+
+extern struct Window gUnknown_03004210;
+extern u16 gUnknown_030042A4;
+extern u16 gUnknown_030042A0;
+extern u16 gUnknown_030042C0;
+extern u16 gUnknown_030041B4;
+extern u16 gUnknown_03004288;
+extern u16 gUnknown_03004280;
+extern u16 gUnknown_030041B0;
+extern u16 gUnknown_030041B8;
+extern u8 gBattleTerrain;
+extern u8 gReservedSpritePaletteCount;
+extern u16 gMoveToLearn;
+extern struct SpriteTemplate gUnknown_02024E8C;
+extern u8 gUnk_2009000[]; // won't match if I 'ewram' it
+extern bool8 gAffineAnimsDisabled;
+extern u8 gDisplayedStringBattle[];
+extern u8 gBattleTextBuff2[];
+
+extern u8 gBattleCommunication[];
+#define sEvoCursorPos gBattleCommunication[1] // when learning a new move
+#define sEvoGraphicsTaskID gBattleCommunication[2]
+
+extern const u8 gUnknown_08400C4A[];
+extern const u8 gUnknown_08400C60[];
+extern const u8 gUnknown_08400C8D[];
+extern void * const gUnknown_081FAF4C[];
+extern const u8* const gBattleStringsTable[];
+
+// this file's functions
+static void Task_EvolutionScene(u8 taskID);
+static void Task_TradeEvolutionScene(u8 taskID);
+static void CB2_EvolutionSceneUpdate(void);
+static void CB2_TradeEvolutionSceneUpdate(void);
+static void EvoDummyFunc(void);
+static void EvoDummyFunc2(void);
+static void VBlankCB_EvolutionScene(void);
+static void VBlankCB_TradeEvolutionScene(void);
+static void sub_81150D8(void);
+
+// iwram common
+MainCallback gCB2_AfterEvolution;
+
+// const data
+static const u8 sUnknownShedinjaJpnString[] = _("ヌケニン");
+static const u8 sUnusedString0[] = _("{COLOR DARK_GREY}{HIGHLIGHT WHITE2}{SHADOW LIGHT_GREY}");
+static const u8 sUnusedString1[] = _("▶\n ");
+static const u8 sUnusedString2[] = _(" \n▶");
+static const u8 sUnusedString3[] = _(" \n ");
+static const u8 sPadding[9] = {0};
+
+// code
+
+static void CB2_BeginEvolutionScene(void)
+{
+ UpdatePaletteFade();
+ RunTasks();
+}
+
+#define tState data[0]
+#define tMonPtrHI data[1]
+#define tMonPtrLO data[2]
+#define tPreEvoSpecies data[3]
+#define tPostEvoSpecies data[4]
+#define tCanStop data[5] // in first fast data[5] only checks that
+#define tBits data[5] // in the second task, it works as a bitfield
+#define tLearnsFirstMove data[6]
+#define tLearnMoveState data[8]
+#define tData9 data[9]
+#define tData10 data[10]
+#define tEvoWasStopped data[11]
+#define tPartyID data[12]
+
+#define TASK_BIT_CAN_STOP 0x1
+#define TASK_BIT_LEARN_MOVE 0x80
+
+static void Task_BeginEvolutionScene(u8 taskID)
+{
+ struct Pokemon* mon = NULL;
+ switch (gTasks[taskID].tState)
+ {
+ case 0:
+ BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
+ gTasks[taskID].tState++;
+ break;
+ case 1:
+ if (!gPaletteFade.active)
+ {
+ u16 speciesToEvolve;
+ bool8 canStopEvo;
+ u8 partyID;
+
+ mon = (struct Pokemon*)(gTasks[taskID].tMonPtrHI | (gTasks[taskID].tMonPtrLO << 0x10));
+ speciesToEvolve = gTasks[taskID].tPostEvoSpecies;
+ canStopEvo = gTasks[taskID].tCanStop;
+ partyID = gTasks[taskID].tPartyID;
+
+ DestroyTask(taskID);
+ EvolutionScene(mon, speciesToEvolve, canStopEvo, partyID);
+ }
+ break;
+ }
+}
+
+void BeginEvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStopEvo, u8 partyID)
+{
+ u8 taskID = CreateTask(Task_BeginEvolutionScene, 0);
+ gTasks[taskID].tState = 0;
+ gTasks[taskID].tMonPtrHI = (u32)(mon);
+ gTasks[taskID].tMonPtrLO = (u32)(mon) >> 0x10;
+ gTasks[taskID].tPostEvoSpecies = speciesToEvolve;
+ gTasks[taskID].tCanStop = canStopEvo;
+ gTasks[taskID].tPartyID = partyID;
+ SetMainCallback2(CB2_BeginEvolutionScene);
+}
+
+void EvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, bool8 canStopEvo, u8 partyID)
+{
+ u8 name[20];
+ u16 currSpecies;
+ u32 TiD, PiD;
+ const struct CompressedSpritePalette** pokePal;
+ u8 ID;
+ SetHBlankCallback(NULL);
+ SetVBlankCallback(NULL);
+ CpuFill32(0, (void*)(VRAM), VRAM_SIZE);
+
+ REG_MOSAIC = 0;
+ REG_WIN0H = 0;
+ REG_WIN0V = 0;
+ REG_WIN1H = 0;
+ REG_WIN1V = 0;
+ REG_WININ = 0;
+ REG_WINOUT = 0;
+
+ SetUpWindowConfig(&gWindowConfig_81E6C58);
+ ResetPaletteFade();
+
+ gUnknown_030042A4 = 0;
+ gUnknown_030042A0 = 0;
+ gUnknown_030042C0 = 0;
+ gUnknown_030041B4 = 0;
+ gUnknown_03004288 = 0;
+ gUnknown_03004280 = 0;
+ gUnknown_030041B0 = 256;
+ gUnknown_030041B8 = 0;
+
+ InitWindowFromConfig(&gUnknown_03004210, &gWindowConfig_81E6C58);
+ gBattleTerrain = BATTLE_TERRAIN_PLAIN;
+
+ sub_800D6D4();
+ sub_800DAB8();
+ ResetSpriteData();
+ remove_some_task();
+ ResetTasks();
+ FreeAllSpritePalettes();
+
+ gReservedSpritePaletteCount = 4;
+
+ GetMonData(mon, MON_DATA_NICKNAME, name);
+ StringCopy10(gStringVar1, name);
+ StringCopy(gStringVar2, gSpeciesNames[speciesToEvolve]);
+
+ // preEvo sprite
+ currSpecies = GetMonData(mon, MON_DATA_SPECIES);
+ TiD = GetMonData(mon, MON_DATA_OT_ID);
+ PiD = GetMonData(mon, MON_DATA_PERSONALITY);
+ DecompressPicFromTable_2(&gMonFrontPicTable[currSpecies],
+ gMonFrontPicCoords[currSpecies].coords,
+ gMonFrontPicCoords[currSpecies].y_offset,
+ (void*)(0x2000000),
+ gUnknown_081FAF4C[1], currSpecies);
+ pokePal = (void*) GetMonSpritePalStructFromOtIdPersonality(currSpecies, TiD, PiD);
+ LoadCompressedPalette(*pokePal, 0x110, 0x20);
+
+ GetMonSpriteTemplate_803C56C(currSpecies, 1);
+ gUnknown_02024E8C.affineAnims = gDummySpriteAffineAnimTable;
+ sEvoInfo.preEvoSpriteID = ID = CreateSprite(&gUnknown_02024E8C, 120, 64, 30);
+
+ gSprites[ID].callback = nullsub_37;
+ gSprites[ID].oam.paletteNum = 1;
+ gSprites[ID].invisible = 1;
+
+ // postEvo sprite
+ DecompressPicFromTable_2(&gMonFrontPicTable[speciesToEvolve],
+ gMonFrontPicCoords[speciesToEvolve].coords,
+ gMonFrontPicCoords[speciesToEvolve].y_offset,
+ (void*)(0x2000000),
+ gUnknown_081FAF4C[3], speciesToEvolve);
+ pokePal = (void*) GetMonSpritePalStructFromOtIdPersonality(speciesToEvolve, TiD, PiD);
+ LoadCompressedPalette(*pokePal, 0x120, 0x20);
+
+ GetMonSpriteTemplate_803C56C(speciesToEvolve, 3);
+ gUnknown_02024E8C.affineAnims = gDummySpriteAffineAnimTable;
+ sEvoInfo.postEvoSpriteID = ID = CreateSprite(&gUnknown_02024E8C, 120, 64, 30);
+ gSprites[ID].callback = nullsub_37;
+ gSprites[ID].oam.paletteNum = 2;
+ gSprites[ID].invisible = 1;
+
+ LoadEvoSparkleSpriteAndPal();
+
+ sEvoInfo.evoTaskID = ID = CreateTask(Task_EvolutionScene, 0);
+ gTasks[ID].tState = 0;
+ gTasks[ID].tPreEvoSpecies = currSpecies;
+ gTasks[ID].tPostEvoSpecies = speciesToEvolve;
+ gTasks[ID].tMonPtrHI = (u32)(mon);
+ gTasks[ID].tMonPtrLO = (u32)(mon) >> 0x10;
+ gTasks[ID].tCanStop = canStopEvo;
+ gTasks[ID].tLearnsFirstMove = TRUE;
+ gTasks[ID].tEvoWasStopped = FALSE;
+ gTasks[ID].tPartyID = partyID;
+
+ memcpy(gUnk_2009000, &gPlttBufferUnfaded[0x20], 0x60);
+
+ REG_DISPCNT = DISPCNT_OBJ_ON | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_1D_MAP;
+ SetHBlankCallback(EvoDummyFunc);
+ SetVBlankCallback(VBlankCB_EvolutionScene);
+ m4aMPlayAllStop();
+ SetMainCallback2(CB2_EvolutionSceneUpdate);
+}
+
+static void CB2_EvolutionSceneLoadGraphics(void)
+{
+ u8 ID;
+ const struct CompressedSpritePalette** pokePal;
+ u16 postEvoSpecies;
+ u32 TiD, PiD;
+ struct Pokemon* Mon = &gPlayerParty[gTasks[sEvoInfo.evoTaskID].tPartyID];
+
+ postEvoSpecies = gTasks[sEvoInfo.evoTaskID].tPostEvoSpecies;
+ TiD = GetMonData(Mon, MON_DATA_OT_ID);
+ PiD = GetMonData(Mon, MON_DATA_PERSONALITY);
+
+ SetHBlankCallback(NULL);
+ SetVBlankCallback(NULL);
+ CpuFill32(0, (void*)(VRAM), VRAM_SIZE);
+
+ REG_MOSAIC = 0;
+ REG_WIN0H = 0;
+ REG_WIN0V = 0;
+ REG_WIN1H = 0;
+ REG_WIN1V = 0;
+ REG_WININ = 0;
+ REG_WINOUT = 0;
+ SetUpWindowConfig(&gWindowConfig_81E6C58);
+ ResetPaletteFade();
+ gUnknown_030042A4 = 0;
+ gUnknown_030042A0 = 0;
+ gUnknown_030042C0 = 0;
+ gUnknown_030041B4 = 0;
+ gUnknown_03004288 = 0;
+ gUnknown_03004280 = 0;
+ gUnknown_030041B0 = 256;
+ gUnknown_030041B8 = 0;
+
+ InitWindowFromConfig(&gUnknown_03004210, &gWindowConfig_81E6C58);
+ gBattleTerrain = BATTLE_TERRAIN_PLAIN;
+
+ sub_800D6D4();
+ sub_800DAB8();
+ ResetSpriteData();
+ FreeAllSpritePalettes();
+ gReservedSpritePaletteCount = 4;
+
+ DecompressPicFromTable_2(&gMonFrontPicTable[postEvoSpecies],
+ gMonFrontPicCoords[postEvoSpecies].coords,
+ gMonFrontPicCoords[postEvoSpecies].y_offset,
+ (void*)(0x2000000),
+ gUnknown_081FAF4C[3], postEvoSpecies);
+ pokePal = (void*) GetMonSpritePalStructFromOtIdPersonality(postEvoSpecies, TiD, PiD);
+ LoadCompressedPalette(*pokePal, 0x120, 0x20);
+
+ GetMonSpriteTemplate_803C56C(postEvoSpecies, 3);
+ gUnknown_02024E8C.affineAnims = gDummySpriteAffineAnimTable;
+ sEvoInfo.postEvoSpriteID = ID = CreateSprite(&gUnknown_02024E8C, 120, 64, 30);
+
+ gSprites[ID].callback = nullsub_37;
+ gSprites[ID].oam.paletteNum = 2;
+
+ REG_DISPCNT = DISPCNT_OBJ_ON | DISPCNT_BG_ALL_ON | DISPCNT_OBJ_1D_MAP;
+ SetHBlankCallback(EvoDummyFunc);
+ SetVBlankCallback(VBlankCB_EvolutionScene);
+ SetMainCallback2(CB2_EvolutionSceneUpdate);
+ BeginNormalPaletteFade(-1, 0, 0x10, 0, 0);
+}
+
+static void CB2_TradeEvolutionSceneLoadGraphics(void)
+{
+ struct Pokemon* Mon = &gPlayerParty[gTasks[sEvoInfo.evoTaskID].tPartyID];
+ u16 postEvoSpecies = gTasks[sEvoInfo.evoTaskID].tPostEvoSpecies;
+
+ switch (gMain.state)
+ {
+ case 0:
+ REG_DISPCNT = 0;
+ SetHBlankCallback(NULL);
+ SetVBlankCallback(NULL);
+ ResetSpriteData();
+ FreeAllSpritePalettes();
+ gReservedSpritePaletteCount = 4;
+ gUnknown_030042A4 = 0;
+ gUnknown_030042A0 = 0;
+ gUnknown_030042C0 = 0;
+ gUnknown_030041B4 = 0;
+ gUnknown_03004288 = 0;
+ gUnknown_03004280 = 0;
+ gUnknown_030041B0 = 256;
+ gUnknown_030041B8 = 0;
+ gMain.state++;
+ break;
+ case 1:
+ SetUpWindowConfig(&gWindowConfig_81E6F84);
+ InitWindowFromConfig(&gUnknown_03004828->field_4, &gWindowConfig_81E6F84);
+ gMain.state++;
+ break;
+ case 2:
+ LoadTextWindowGraphics(&gUnknown_03004828->field_4);
+ gUnknown_03004828->field_34 = SetTextWindowBaseTileNum(2);
+ LoadTextWindowGraphics(&gUnknown_03004828->field_4);
+ MenuZeroFillScreen();
+ ResetPaletteFade();
+ gMain.state++;
+ SetHBlankCallback(EvoDummyFunc);
+ SetVBlankCallback(VBlankCB_TradeEvolutionScene);
+ break;
+ case 3:
+ sub_804E22C();
+ gMain.state++;
+ break;
+ case 4:
+ {
+ const struct CompressedSpritePalette** pokePal;
+ u32 TiD = GetMonData(Mon, MON_DATA_OT_ID);
+ u32 PiD = GetMonData(Mon, MON_DATA_PERSONALITY);
+ DecompressPicFromTable_2(&gMonFrontPicTable[postEvoSpecies],
+ gMonFrontPicCoords[postEvoSpecies].coords,
+ gMonFrontPicCoords[postEvoSpecies].y_offset,
+ (void*)(0x2000000),
+ gUnknown_081FAF4C[3], postEvoSpecies);
+ pokePal = (void*) GetMonSpritePalStructFromOtIdPersonality(postEvoSpecies, TiD, PiD);
+ LoadCompressedPalette(*pokePal, 0x120, 0x20);
+ gMain.state++;
+ }
+ break;
+ case 5:
+ {
+ u8 ID;
+
+ GetMonSpriteTemplate_803C56C(postEvoSpecies, 3);
+ gUnknown_02024E8C.affineAnims = gDummySpriteAffineAnimTable;
+ sEvoInfo.postEvoSpriteID = ID = CreateSprite(&gUnknown_02024E8C, 120, 64, 30);
+
+ gSprites[ID].callback = nullsub_37;
+ gSprites[ID].oam.paletteNum = 2;
+ gMain.state++;
+ }
+ break;
+ case 6:
+ BeginNormalPaletteFade(-1, 0, 0x10, 0, 0);
+ SetMainCallback2(CB2_TradeEvolutionSceneUpdate);
+ REG_DISPCNT = DISPCNT_OBJ_ON | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_OBJ_1D_MAP;
+ break;
+ }
+}
+
+void TradeEvolutionScene(struct Pokemon* mon, u16 speciesToEvolve, u8 preEvoSpriteID, u8 partyID)
+{
+ u8 name[20];
+ u16 currSpecies;
+ u32 TiD, PiD;
+ const struct CompressedSpritePalette** pokePal;
+ u8 ID;
+
+ GetMonData(mon, MON_DATA_NICKNAME, name);
+ StringCopy10(gStringVar1, name);
+ StringCopy(gStringVar2, gSpeciesNames[speciesToEvolve]);
+
+ gAffineAnimsDisabled = TRUE;
+
+ // preEvo sprite
+ currSpecies = GetMonData(mon, MON_DATA_SPECIES);
+ PiD = GetMonData(mon, MON_DATA_PERSONALITY);
+ TiD = GetMonData(mon, MON_DATA_OT_ID);
+ sEvoInfo.preEvoSpriteID = preEvoSpriteID;
+ DecompressPicFromTable_2(&gMonFrontPicTable[speciesToEvolve],
+ gMonFrontPicCoords[speciesToEvolve].coords,
+ gMonFrontPicCoords[speciesToEvolve].y_offset,
+ (void*)(0x2000000),
+ gUnknown_081FAF4C[1], speciesToEvolve);
+ pokePal = (void*) GetMonSpritePalStructFromOtIdPersonality(speciesToEvolve, TiD, PiD);
+ LoadCompressedPalette(*pokePal, 0x120, 0x20);
+
+ GetMonSpriteTemplate_803C56C(speciesToEvolve, 1);
+ gUnknown_02024E8C.affineAnims = gDummySpriteAffineAnimTable;
+ sEvoInfo.postEvoSpriteID = ID = CreateSprite(&gUnknown_02024E8C, 120, 64, 30);
+
+ gSprites[ID].callback = nullsub_37;
+ gSprites[ID].oam.paletteNum = 2;
+ gSprites[ID].invisible = 1;
+
+ LoadEvoSparkleSpriteAndPal();
+
+ sEvoInfo.evoTaskID = ID = CreateTask(Task_TradeEvolutionScene, 0);
+ gTasks[ID].tState = 0;
+ gTasks[ID].tPreEvoSpecies = currSpecies;
+ gTasks[ID].tPostEvoSpecies = speciesToEvolve;
+ gTasks[ID].tMonPtrHI = (u32)(mon);
+ gTasks[ID].tMonPtrLO = (u32)(mon) >> 0x10;
+ gTasks[ID].tLearnsFirstMove = TRUE;
+ gTasks[ID].tEvoWasStopped = FALSE;
+ gTasks[ID].tPartyID = partyID;
+
+ SetMainCallback2(CB2_TradeEvolutionSceneUpdate);
+}
+
+static void CB2_EvolutionSceneUpdate(void)
+{
+ AnimateSprites();
+ BuildOamBuffer();
+ sub_800374C(&gUnknown_03004210);
+ UpdatePaletteFade();
+ RunTasks();
+}
+
+static void CB2_TradeEvolutionSceneUpdate(void)
+{
+ AnimateSprites();
+ BuildOamBuffer();
+ sub_80035AC(&gUnknown_03004828->field_4);
+ UpdatePaletteFade();
+ RunTasks();
+}
+
+static void CreateShedinja(u16 preEvoSpecies, struct Pokemon* mon)
+{
+ u32 data = 0;
+ if (gEvolutionTable[preEvoSpecies].evolutions[0].method == EVO_LEVEL_NINJASK && gPlayerPartyCount < 6)
+ {
+ s32 i;
+ struct Pokemon* Shedinja = &gPlayerParty[gPlayerPartyCount];
+ const struct EvolutionData* EvoTable;
+ const struct EvolutionData* Evos;
+
+ CopyMon(Shedinja, mon, sizeof(struct Pokemon));
+ SetMonData(Shedinja, MON_DATA_SPECIES, (void*)(&gEvolutionTable[preEvoSpecies].evolutions[1].targetSpecies));
+ SetMonData(Shedinja, MON_DATA_NICKNAME, (void*)(gSpeciesNames[gEvolutionTable[preEvoSpecies].evolutions[1].targetSpecies]));
+ SetMonData(Shedinja, MON_DATA_HELD_ITEM, (void*)(&data));
+ SetMonData(Shedinja, MON_DATA_MARKINGS, (void*)(&data));
+ SetMonData(Shedinja, MON_DATA_10, (void*)(&data));
+ for (i = MON_DATA_COOL_RIBBON; i < MON_DATA_COOL_RIBBON + 5; i++)
+ SetMonData(Shedinja, i, (void*)(&data));
+ for (i = MON_DATA_CHAMPION_RIBBON; i <= MON_DATA_FATEFUL_ENCOUNTER; i++)
+ SetMonData(Shedinja, i, (void*)(&data));
+ SetMonData(Shedinja, MON_DATA_STATUS, (void*)(&data));
+ data = 0xFF;
+ SetMonData(Shedinja, MON_DATA_MAIL, (void*)(&data));
+
+ CalculateMonStats(Shedinja);
+ CalculatePlayerPartyCount();
+
+ // can't match it otherwise, ehh
+ EvoTable = gEvolutionTable;
+ Evos = EvoTable + preEvoSpecies;
+ GetSetPokedexFlag(SpeciesToNationalPokedexNum(Evos->evolutions[1].targetSpecies), 2);
+ GetSetPokedexFlag(SpeciesToNationalPokedexNum(Evos->evolutions[1].targetSpecies), 3);
+
+ if (GetMonData(Shedinja, MON_DATA_SPECIES) == SPECIES_SHEDINJA
+ && GetMonData(Shedinja, MON_DATA_LANGUAGE) == LANGUAGE_JAPANESE
+ && GetMonData(mon, MON_DATA_SPECIES) == SPECIES_NINJASK)
+ SetMonData(Shedinja, MON_DATA_NICKNAME, sUnknownShedinjaJpnString);
+ }
+}
+
+static void Task_EvolutionScene(u8 taskID)
+{
+ u32 var;
+ struct Pokemon* mon = (struct Pokemon*)(gTasks[taskID].tMonPtrHI | (gTasks[taskID].tMonPtrLO << 0x10));
+
+ // check if B Button was held, so the evolution gets stopped
+ if (gMain.heldKeys == B_BUTTON && gTasks[taskID].tState == 8 && gTasks[taskID].tBits & TASK_BIT_CAN_STOP)
+ {
+ gTasks[taskID].tState = 16;
+ if (gTasks[sEvoGraphicsTaskID].isActive)
+ gTasks[sEvoGraphicsTaskID].EvoGraphicsTaskEvoStop = TRUE;
+ }
+ switch (gTasks[taskID].tState)
+ {
+ case 0:
+ BeginNormalPaletteFade(-1, 0, 0x10, 0, 0);
+ gSprites[sEvoInfo.preEvoSpriteID].invisible = 0;
+ gTasks[taskID].tState++;
+ break;
+ case 1: // print 'whoa, poke is evolving!!!' msg
+ if (!gPaletteFade.active)
+ {
+ StringExpandPlaceholders(gStringVar4, gUnknown_08400C4A);
+ sub_8002EB0(&gUnknown_03004210, gStringVar4, 144, 2, 15);
+ gTasks[taskID].tState++;
+ }
+ break;
+ case 2: // wait for string, play cry
+ if (gUnknown_03004210.state == 0)
+ {
+ PlayCry1(gTasks[taskID].tPreEvoSpecies, 0);
+ gTasks[taskID].tState++;
+ }
+ break;
+ case 3: // wait for cry, play tu du SE
+ if (IsCryFinished())
+ {
+ PlaySE(BGM_ME_SHINKA);
+ gTasks[taskID].tState++;
+ }
+ break;
+ case 4: // play evolution music and fade screen black
+ if (!IsSEPlaying())
+ {
+ PlayNewMapMusic(BGM_SHINKA);
+ gTasks[taskID].tState++;
+ BeginNormalPaletteFade(0x1C, 4, 0, 0x10, 0);
+ }
+ break;
+ case 5: // after screen fade, preapre evo sparkles
+ if (!gPaletteFade.active)
+ {
+ sEvoGraphicsTaskID = LaunchTask_PreEvoSparklesSet1(17);
+ gTasks[taskID].tState++;
+ }
+ break;
+ case 6: // another set of evo sparkles
+ if (!gTasks[sEvoGraphicsTaskID].isActive)
+ {
+ gTasks[taskID].tState++;
+ sEvoInfo.field_3 = 1;
+ sEvoGraphicsTaskID = LaunchTask_PreEvoSparklesSet2();
+ }
+ break;
+ case 7: // launch task that flashes pre evo with post evo sprites
+ if (!gTasks[sEvoGraphicsTaskID].isActive)
+ {
+ sEvoGraphicsTaskID = sub_8149E7C(sEvoInfo.preEvoSpriteID, sEvoInfo.postEvoSpriteID);
+ gTasks[taskID].tState++;
+ }
+ break;
+ case 8: // wait for the above task to finish
+ if (--sEvoInfo.field_3 == 0)
+ {
+ sEvoInfo.field_3 = 3;
+ if (!gTasks[sEvoGraphicsTaskID].isActive)
+ gTasks[taskID].tState++;
+ }
+ break;
+ case 9: // post evo sparkles
+ sEvoGraphicsTaskID = LaunchTask_PostEvoSparklesSet1();
+ gTasks[taskID].tState++;
+ break;
+ case 10:
+ if (!gTasks[sEvoGraphicsTaskID].isActive)
+ {
+ sEvoGraphicsTaskID = LaunchTask_PostEvoSparklesSet2AndFlash(gTasks[taskID].tPostEvoSpecies);
+ gTasks[taskID].tState++;
+ }
+ break;
+ case 11: // play tu du sound after evolution
+ if (!gTasks[sEvoGraphicsTaskID].isActive)
+ {
+ PlaySE(SE_EXP);
+ gTasks[taskID].tState++;
+ }
+ break;
+ case 12: // play poke cry after evolution and return screed to pre-fade state
+ if (IsSEPlaying())
+ {
+ m4aMPlayAllStop();
+ PlayCry1(gTasks[taskID].tPostEvoSpecies, 0);
+ memcpy(&gPlttBufferUnfaded[0x20], gUnk_2009000, 0x60);
+ BeginNormalPaletteFade(0x1C, 0, 0x10, 0, 0);
+ gTasks[taskID].tState++;
+ }
+ break;
+ case 13: // congratulations string and rename prompt
+ if (IsCryFinished() && !gPaletteFade.active)
+ {
+ StringExpandPlaceholders(gStringVar4, gUnknown_08400C60);
+ sub_8002EB0(&gUnknown_03004210, gStringVar4, 144, 2, 15);
+ PlayBGM(BGM_FANFA5);
+ gTasks[taskID].tState++;
+ SetMonData(mon, MON_DATA_SPECIES, (void*)(&gTasks[taskID].tPostEvoSpecies));
+ CalculateMonStats(mon);
+ EvolutionRenameMon(mon, gTasks[taskID].tPreEvoSpecies, gTasks[taskID].tPostEvoSpecies);
+ GetSetPokedexFlag(SpeciesToNationalPokedexNum(gTasks[taskID].tPostEvoSpecies), 2);
+ GetSetPokedexFlag(SpeciesToNationalPokedexNum(gTasks[taskID].tPostEvoSpecies), 3);
+ IncrementGameStat(14);
+ }
+ break;
+ case 14: // check if it wants to learn a new move
+ if (gUnknown_03004210.state == 0)
+ {
+ var = MonTryLearningNewMove(mon, gTasks[taskID].tLearnsFirstMove);
+ if (var != 0 && !gTasks[taskID].tEvoWasStopped)
+ {
+ u8 text[20];
+
+ sub_8053E90();
+ gTasks[taskID].tBits |= TASK_BIT_LEARN_MOVE;
+ gTasks[taskID].tLearnsFirstMove = FALSE;
+ gTasks[taskID].tLearnMoveState = 0;
+ GetMonData(mon, MON_DATA_NICKNAME, text);
+ StringCopy10(gBattleTextBuff1, text);
+ if (var == 0xFFFF) // no place to learn it
+ gTasks[taskID].tState = 21;
+ else if (var == 0xFFFE) // it already knows that move
+ break;
+ else
+ gTasks[taskID].tState = 19; // has less than 4 moves, so it's been learned
+ }
+ else // no move to learn
+ {
+ BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
+ gTasks[taskID].tState++;
+ }
+ }
+ break;
+ case 15: // task has finished, return
+ if (!gPaletteFade.active)
+ {
+ if (!(gTasks[taskID].tBits & TASK_BIT_LEARN_MOVE))
+ sub_8053E90();
+ if (!gTasks[taskID].tEvoWasStopped)
+ CreateShedinja(gTasks[taskID].tPreEvoSpecies, mon);
+ DestroyTask(taskID);
+ SetMainCallback2(gCB2_AfterEvolution);
+ }
+ break;
+ case 16: // evolution has been canceled, stop music and re-fade palette
+ if (!gTasks[sEvoGraphicsTaskID].isActive)
+ {
+ m4aMPlayAllStop();
+ BeginNormalPaletteFade(0x6001C, 0, 0x10, 0, 0x7FFF);
+ gTasks[taskID].tState++;
+ }
+ break;
+ case 17: // play cry of the pokemon trying to evolve again, evolution has been stopped
+ if (!gPaletteFade.active)
+ {
+ PlayCry1(gTasks[taskID].tPreEvoSpecies, 0);
+ gTasks[taskID].tState++;
+ }
+ break;
+ case 18: // after the cry, print the string 'WHOA IT DID NOT EVOLVE!!!'
+ if (IsCryFinished())
+ {
+ StringExpandPlaceholders(gStringVar4, gUnknown_08400C8D);
+ sub_8002EB0(&gUnknown_03004210, gStringVar4, 144, 2, 15);
+ gTasks[taskID].tEvoWasStopped = TRUE;
+ gTasks[taskID].tState = 14;
+ }
+ break;
+ case 19: // pokemon learned a new move, print string and play a fanfare
+ if (gUnknown_03004210.state == 0 && !IsSEPlaying())
+ {
+ sub_8024CEC();
+ PlayFanfare(BGM_FANFA1);
+ StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[3]);
+ sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15);
+ gTasks[taskID].tLearnsFirstMove = 0x40; // re-used as a counter
+ gTasks[taskID].tState++;
+ }
+ break;
+ case 20: // wait a bit and check if can learn another move
+ if (gUnknown_03004210.state == 0 && !IsSEPlaying() && --gTasks[taskID].tLearnsFirstMove == 0)
+ gTasks[taskID].tState = 14;
+ break;
+ case 21: // try to learn a new move
+ switch (gTasks[taskID].tLearnMoveState)
+ {
+ case 0:
+ if (gUnknown_03004210.state == 0 && !IsSEPlaying())
+ {
+ sub_8024CEC();
+ StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[4]);
+ sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15);
+ gTasks[taskID].tLearnMoveState++;
+ }
+ break;
+ case 1:
+ if (gUnknown_03004210.state == 0 && !IsSEPlaying())
+ {
+ StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[5]);
+ sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15);
+ gTasks[taskID].tLearnMoveState++;
+ }
+ break;
+ case 2:
+ if (gUnknown_03004210.state != 0)
+ break;
+ if (!IsSEPlaying())
+ {
+ StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[6]);
+ sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15);
+ gTasks[taskID].tData9 = 5;
+ gTasks[taskID].tData10 = 9;
+ gTasks[taskID].tLearnMoveState++;
+ }
+ case 3:
+ if (gUnknown_03004210.state == 0 && !IsSEPlaying())
+ {
+ sub_8023A80();
+ gTasks[taskID].tLearnMoveState++;
+ sEvoCursorPos = 0;
+ sub_802BC6C();
+ }
+ break;
+ case 4:
+ if (gMain.newKeys & DPAD_UP && sEvoCursorPos != 0)
+ {
+ PlaySE(SE_SELECT);
+ nullsub_6();
+ sEvoCursorPos = 0;
+ sub_802BC6C();
+ }
+ if (gMain.newKeys & DPAD_DOWN && sEvoCursorPos == 0)
+ {
+ PlaySE(SE_SELECT);
+ nullsub_6();
+ sEvoCursorPos = 1;
+ sub_802BC6C();
+ }
+ if (gMain.newKeys & A_BUTTON)
+ {
+ sub_8023AD8();
+ StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[292]);
+ sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15);
+ PlaySE(SE_SELECT);
+ if (sEvoCursorPos != 0)
+ gTasks[taskID].tLearnMoveState = gTasks[taskID].tData10;
+ else
+ {
+ gTasks[taskID].tLearnMoveState = gTasks[taskID].tData9;
+ if (gTasks[taskID].tLearnMoveState == 5)
+ BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
+ }
+ }
+ if (gMain.newKeys & B_BUTTON)
+ {
+ sub_8023AD8();
+ StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[292]);
+ sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15);
+ PlaySE(SE_SELECT);
+ gTasks[taskID].tLearnMoveState = gTasks[taskID].tData10;
+ }
+ break;
+ case 5:
+ if (!gPaletteFade.active)
+ {
+ sub_809D9F0(gPlayerParty, gTasks[taskID].tPartyID,
+ gPlayerPartyCount - 1, CB2_EvolutionSceneLoadGraphics,
+ gMoveToLearn);
+ gTasks[taskID].tLearnMoveState++;
+ }
+ break;
+ case 6:
+ if (!gPaletteFade.active && gMain.callback2 == CB2_EvolutionSceneUpdate)
+ {
+ var = sub_809FA30(); // moveID
+ if (var == 4)
+ gTasks[taskID].tLearnMoveState = 9;
+ else
+ {
+ u16 move = GetMonData(mon, var + MON_DATA_MOVE1);
+ if (IsHMMove2(move))
+ {
+ StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[307]);
+ sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15);
+ gTasks[taskID].tLearnMoveState = 11;
+ }
+ else
+ {
+ gBattleTextBuff2[0] = 0xFD;
+ gBattleTextBuff2[1] = 2;
+ gBattleTextBuff2[2] = move;
+ gBattleTextBuff2[3] = (move & 0xFF00) >> 8;
+ gBattleTextBuff2[4] = EOS;
+ RemoveMonPPBonus(mon, var);
+ SetMonMoveSlot(mon, gMoveToLearn, var);
+ StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[207]);
+ sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15);
+ gTasks[taskID].tLearnMoveState++;
+ }
+ }
+ }
+ break;
+ case 7:
+ if (gUnknown_03004210.state == 0 && !IsSEPlaying())
+ {
+ StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[7]);
+ sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15);
+ gTasks[taskID].tLearnMoveState++;
+ }
+ break;
+ case 8:
+ if (gUnknown_03004210.state == 0 && !IsSEPlaying())
+ {
+ StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[208]);
+ sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15);
+ gTasks[taskID].tState = 19;
+ }
+ break;
+ case 9:
+ StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[8]);
+ sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15);
+ gTasks[taskID].tData9 = 10;
+ gTasks[taskID].tData10 = 0;
+ gTasks[taskID].tLearnMoveState = 3;
+ break;
+ case 10:
+ StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[9]);
+ sub_8002EB0(&gUnknown_03004210, gDisplayedStringBattle, 144, 2, 15);
+ gTasks[taskID].tState = 14;
+ break;
+ case 11:
+ if (gUnknown_03004210.state == 0 && !IsSEPlaying())
+ gTasks[taskID].tLearnMoveState = 5;
+ break;
+ }
+ break;
+ }
+}
+
+static void Task_TradeEvolutionScene(u8 taskID)
+{
+ u32 var;
+ struct Pokemon* mon = (struct Pokemon*)(gTasks[taskID].tMonPtrHI | (gTasks[taskID].tMonPtrLO << 0x10));
+
+ switch (gTasks[taskID].tState)
+ {
+ case 0:
+ StringExpandPlaceholders(gStringVar4, gUnknown_08400C4A);
+ sub_8002EB0(&gUnknown_03004828->field_4, gStringVar4, gUnknown_03004828->field_34, 2, 15);
+ gTasks[taskID].tState++;
+ break;
+ case 1:
+ if (gUnknown_03004828->field_4.state == 0)
+ {
+ PlayCry1(gTasks[taskID].tPreEvoSpecies, 0);
+ gTasks[taskID].tState++;
+ }
+ break;
+ case 2:
+ if (IsCryFinished())
+ {
+ m4aSongNumStop(BGM_SHINKA);
+ PlaySE(BGM_ME_SHINKA);
+ gTasks[taskID].tState++;
+ }
+ break;
+ case 3:
+ if (!IsSEPlaying())
+ {
+ PlayBGM(BGM_SHINKA);
+ gTasks[taskID].tState++;
+ BeginNormalPaletteFade(0x1C, 4, 0, 0x10, 0);
+ }
+ break;
+ case 4:
+ if (!gPaletteFade.active)
+ {
+ REG_DISPCNT = DISPCNT_OBJ_ON | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_OBJ_1D_MAP;
+ sEvoGraphicsTaskID = LaunchTask_PreEvoSparklesSet1(17);
+ gTasks[taskID].tState++;
+ }
+ break;
+ case 5:
+ if (!gTasks[sEvoGraphicsTaskID].isActive)
+ {
+ gTasks[taskID].tState++;
+ sEvoInfo.field_3 = 1;
+ sEvoGraphicsTaskID = LaunchTask_PreEvoSparklesSet2();
+ }
+ break;
+ case 6:
+ if (!gTasks[sEvoGraphicsTaskID].isActive)
+ {
+ sEvoGraphicsTaskID = sub_8149E7C(sEvoInfo.preEvoSpriteID, sEvoInfo.postEvoSpriteID);
+ gTasks[taskID].tState++;
+ }
+ break;
+ case 7:
+ if (--sEvoInfo.field_3 == 0)
+ {
+ sEvoInfo.field_3 = 3;
+ if (!gTasks[sEvoGraphicsTaskID].isActive)
+ gTasks[taskID].tState++;
+ }
+ break;
+ case 8:
+ sEvoGraphicsTaskID = LaunchTask_PostEvoSparklesSet1();
+ gTasks[taskID].tState++;
+ break;
+ case 9:
+ if (!gTasks[sEvoGraphicsTaskID].isActive)
+ {
+ sEvoGraphicsTaskID = LaunchTask_PostEvoSparklesSet2AndFlash_Trade(gTasks[taskID].tPostEvoSpecies);
+ gTasks[taskID].tState++;
+ }
+ break;
+ case 10:
+ if (!gTasks[sEvoGraphicsTaskID].isActive)
+ {
+ PlaySE(SE_EXP);
+ gTasks[taskID].tState++;
+ }
+ break;
+ case 11:
+ if (IsSEPlaying())
+ {
+ PlayCry1(gTasks[taskID].tPostEvoSpecies, 0);
+ memcpy(&gPlttBufferUnfaded[0x20], gUnk_2009000, 0x60);
+ BeginNormalPaletteFade(1, 0, 0x10, 0, 0);
+ gTasks[taskID].tState++;
+ }
+ break;
+ case 12:
+ if (IsCryFinished() && !gPaletteFade.active)
+ {
+ StringExpandPlaceholders(gStringVar4, gUnknown_08400C60);
+ sub_8002EB0(&gUnknown_03004828->field_4, gStringVar4, gUnknown_03004828->field_34, 2, 15);
+ PlayFanfare(BGM_FANFA5);
+ gTasks[taskID].tState++;
+ SetMonData(mon, MON_DATA_SPECIES, (void*)(&gTasks[taskID].tPostEvoSpecies));
+ CalculateMonStats(mon);
+ EvolutionRenameMon(mon, gTasks[taskID].tPreEvoSpecies, gTasks[taskID].tPostEvoSpecies);
+ GetSetPokedexFlag(SpeciesToNationalPokedexNum(gTasks[taskID].tPostEvoSpecies), 2);
+ GetSetPokedexFlag(SpeciesToNationalPokedexNum(gTasks[taskID].tPostEvoSpecies), 3);
+ IncrementGameStat(14);
+ }
+ break;
+ case 13:
+ if (gUnknown_03004828->field_4.state == 0 && IsFanfareTaskInactive() == TRUE)
+ {
+ var = MonTryLearningNewMove(mon, gTasks[taskID].tLearnsFirstMove);
+ if (var != 0 && !gTasks[taskID].tEvoWasStopped)
+ {
+ u8 text[20];
+
+ gTasks[taskID].tBits |= TASK_BIT_LEARN_MOVE;
+ gTasks[taskID].tLearnsFirstMove = FALSE;
+ gTasks[taskID].tLearnMoveState = 0;
+ GetMonData(mon, MON_DATA_NICKNAME, text);
+ StringCopy10(gBattleTextBuff1, text);
+ if (var == 0xFFFF)
+ gTasks[taskID].tState = 17;
+ else if (var == 0xFFFE)
+ break;
+ else
+ gTasks[taskID].tState = 15;
+ }
+ else
+ {
+ PlayBGM(BGM_SHINKA);
+ sub_8002EB0(&gUnknown_03004828->field_4, gOtherText_LinkStandby2, gUnknown_03004828->field_34, 2, 15);
+ gTasks[taskID].tState++;
+ }
+ }
+ break;
+ case 14:
+ if (gUnknown_03004828->field_4.state == 0)
+ {
+ DestroyTask(taskID);
+ SetMainCallback2(gCB2_AfterEvolution);
+ }
+ break;
+ case 15:
+ if (gUnknown_03004828->field_4.state == 0 && !IsSEPlaying())
+ {
+ sub_8024CEC();
+ PlayFanfare(BGM_FANFA1);
+ StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[3]);
+ sub_8002EB0(&gUnknown_03004828->field_4, gDisplayedStringBattle, gUnknown_03004828->field_34, 2, 15);
+ gTasks[taskID].tLearnsFirstMove = 0x40; // re-used as a counter
+ gTasks[taskID].tState++;
+ }
+ break;
+ case 16:
+ if (gUnknown_03004828->field_4.state == 0 && IsFanfareTaskInactive() == TRUE && --gTasks[taskID].tLearnsFirstMove == 0)
+ gTasks[taskID].tState = 13;
+ break;
+ case 17:
+ switch (gTasks[taskID].tLearnMoveState)
+ {
+ case 0:
+ if (gUnknown_03004828->field_4.state == 0 && !IsSEPlaying())
+ {
+ sub_8024CEC();
+ StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[4]);
+ sub_8002EB0(&gUnknown_03004828->field_4, gDisplayedStringBattle, gUnknown_03004828->field_34, 2, 15);
+ gTasks[taskID].tLearnMoveState++;
+ }
+ break;
+ case 1:
+ if (gUnknown_03004828->field_4.state == 0 && !IsSEPlaying())
+ {
+ StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[5]);
+ sub_8002EB0(&gUnknown_03004828->field_4, gDisplayedStringBattle, gUnknown_03004828->field_34, 2, 15);
+ gTasks[taskID].tLearnMoveState++;
+ }
+ break;
+ case 2:
+ if (gUnknown_03004828->field_4.state != 0)
+ break;
+ if (!IsSEPlaying())
+ {
+ StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[6]);
+ sub_8002EB0(&gUnknown_03004828->field_4, gDisplayedStringBattle, gUnknown_03004828->field_34, 2, 15);
+ gTasks[taskID].tData9 = 5;
+ gTasks[taskID].tData10 = 9;
+ gTasks[taskID].tLearnMoveState++;
+ }
+ case 3:
+ if (gUnknown_03004828->field_4.state == 0 && !IsSEPlaying())
+ {
+ DrawTextWindow(&gUnknown_03004828->field_4, 24, 8, 29, 13);
+ sEvoCursorPos = 0;
+ InitWindow(&gUnknown_03004828->field_4, gOtherText_YesNoAndPlayer, gUnknown_03004828->field_34 + 128, 25, 9);
+ sub_8002F44(&gUnknown_03004828->field_4);
+ sub_814A5C0(0, 0xFFFF, 0xC, 0x2D9F, 0x20);
+ sub_81150D8();
+ gTasks[taskID].tLearnMoveState++;
+ sEvoCursorPos = 0;
+ }
+ break;
+ case 4:
+ if (gMain.newKeys & DPAD_UP && sEvoCursorPos != 0)
+ {
+ PlaySE(SE_SELECT);
+ EvoDummyFunc2();
+ sEvoCursorPos = 0;
+ sub_81150D8();
+ }
+ if (gMain.newKeys & DPAD_DOWN && sEvoCursorPos == 0)
+ {
+ PlaySE(SE_SELECT);
+ EvoDummyFunc2();
+ sEvoCursorPos = 1;
+ sub_81150D8();
+ }
+ if (gMain.newKeys & A_BUTTON)
+ {
+ ZeroFillWindowRect(&gUnknown_03004828->field_4, 0x18, 8, 0x1D, 0xD);
+ DestroyMenuCursor();
+ StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[292]);
+ sub_8002EB0(&gUnknown_03004828->field_4, gDisplayedStringBattle, gUnknown_03004828->field_34, 2, 15);
+ PlaySE(SE_SELECT);
+ if (sEvoCursorPos != 0)
+ gTasks[taskID].tLearnMoveState = gTasks[taskID].tData10;
+ else
+ {
+ gTasks[taskID].tLearnMoveState = gTasks[taskID].tData9;
+ if (gTasks[taskID].tLearnMoveState == 5)
+ BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
+ }
+ }
+ if (gMain.newKeys & B_BUTTON)
+ {
+ ZeroFillWindowRect(&gUnknown_03004828->field_4, 0x18, 8, 0x1D, 0xD);
+ DestroyMenuCursor();
+ StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[292]);
+ sub_8002EB0(&gUnknown_03004828->field_4, gDisplayedStringBattle, gUnknown_03004828->field_34, 2, 15);
+ PlaySE(SE_SELECT);
+ gTasks[taskID].tLearnMoveState = gTasks[taskID].tData10;
+ }
+ break;
+ case 5:
+ if (!gPaletteFade.active)
+ {
+ sub_809D9F0(gPlayerParty, gTasks[taskID].tPartyID,
+ gPlayerPartyCount - 1, CB2_TradeEvolutionSceneLoadGraphics,
+ gMoveToLearn);
+ gTasks[taskID].tLearnMoveState++;
+ }
+ break;
+ case 6:
+ if (!gPaletteFade.active && gMain.callback2 == CB2_TradeEvolutionSceneUpdate)
+ {
+ var = sub_809FA30(); // moveID
+ if (var == 4)
+ gTasks[taskID].tLearnMoveState = 9;
+ else
+ {
+ u16 move = GetMonData(mon, var + MON_DATA_MOVE1);
+ if (IsHMMove2(move))
+ {
+ StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[307]);
+ sub_8002EB0(&gUnknown_03004828->field_4, gDisplayedStringBattle, gUnknown_03004828->field_34, 2, 15);
+ gTasks[taskID].tLearnMoveState = 11;
+ }
+ else
+ {
+ gBattleTextBuff2[0] = 0xFD;
+ gBattleTextBuff2[1] = 2;
+ gBattleTextBuff2[2] = move;
+ gBattleTextBuff2[3] = (move & 0xFF00) >> 8;
+ gBattleTextBuff2[4] = EOS;
+ RemoveMonPPBonus(mon, var);
+ SetMonMoveSlot(mon, gMoveToLearn, var);
+ StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[207]);
+ sub_8002EB0(&gUnknown_03004828->field_4, gDisplayedStringBattle, gUnknown_03004828->field_34, 2, 15);
+ gTasks[taskID].tLearnMoveState++;
+ }
+ }
+ }
+ break;
+ case 7:
+ if (gUnknown_03004828->field_4.state == 0 && !IsSEPlaying())
+ {
+ StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[7]);
+ sub_8002EB0(&gUnknown_03004828->field_4, gDisplayedStringBattle, gUnknown_03004828->field_34, 2, 15);
+ gTasks[taskID].tLearnMoveState++;
+ }
+ break;
+ case 8:
+ if (gUnknown_03004828->field_4.state == 0 && !IsSEPlaying())
+ {
+ StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[208]);
+ sub_8002EB0(&gUnknown_03004828->field_4, gDisplayedStringBattle, gUnknown_03004828->field_34, 2, 15);
+ gTasks[taskID].tState = 15;
+ }
+ break;
+ case 9:
+ StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[8]);
+ sub_8002EB0(&gUnknown_03004828->field_4, gDisplayedStringBattle, gUnknown_03004828->field_34, 2, 15);
+ gTasks[taskID].tData9 = 10;
+ gTasks[taskID].tData10 = 0;
+ gTasks[taskID].tLearnMoveState = 3;
+ break;
+ case 10:
+ StrCpyDecodeToDisplayedStringBattle(gBattleStringsTable[9]);
+ sub_8002EB0(&gUnknown_03004828->field_4, gDisplayedStringBattle, gUnknown_03004828->field_34, 2, 15);
+ gTasks[taskID].tState = 13;
+ break;
+ case 11:
+ if (gUnknown_03004828->field_4.state == 0 && !IsSEPlaying())
+ gTasks[taskID].tLearnMoveState = 5;
+ break;
+ }
+ break;
+ }
+}
+
+/*
+DizzyEgg, 27.08.2017
+NOTE:
+ Functions below are all unused.
+ What's more, they do NOT exist in Emerald.
+ That's why I think there is no reason to decompile those,
+ as they probably were prototypes for the evolution
+ functions.
+*/
+
+/*
+void unref_sub_8113B50(u8 *a, u8 *b)
+{
+ //u8 *sp0 = a;
+ //u8 *sp4 = b;
+#define sp0 a
+#define sp4 b
+ s32 sp8;
+ s32 spC = 0;
+ u32 sp10 = 0;
+ s32 sp14;
+ s32 r6;
+ u32 r8;
+
+ for (sp8 = 0; sp8 < 64; sp8++)
+ {
+ sEvoInfo.unk84[sp8] = 0;
+ sEvoInfo.unk4[sp8] = 0;
+ sEvoInfo.unk44[sp8] = 0;
+ for (r6 = 0; r6 < 32; r6++)
+ {
+ sEvoInfo.unk10C4[sp8][r6] = 0;
+ sEvoInfo.unk18C4[sp8][r6] = 0;
+ sEvoInfo.unk20C4[sp8][r6] = 0;
+ sEvoInfo.unk28C4[sp8][r6] = 0;
+ sEvoInfo.unkC4[sp8][r6] = 0;
+ sEvoInfo.unk8C4[sp8][r6] = 0;
+ sEvoInfo.unk30C4[sp8][r6] = 0;
+ sEvoInfo.unk38C4[sp8][r6] = 0;
+
+ sEvoInfo.unk60C4[sp8][r6] = 0;
+ sEvoInfo.unk70C4[sp8][r6] = 0;
+ sEvoInfo.unk80C4[sp8][r6] = 0;
+ sEvoInfo.unk90C4[sp8][r6] = 0;
+ }
+ }
+
+ sEvoInfo.unkA0C4 = 64;
+ r8 = 0;
+ for (sp8 = 0; sp8 < 64; sp8++)
+ {
+ //_08113C32
+ u32 r3 = 0;
+ u8 *r2 = sp0 + r8;
+
+ for (r6 = 0; r6 < 64; r6++)
+ {
+ sEvoInfo.unk40C4[sp8][r6 >> 1] = r2;
+ switch (r3)
+ {
+ case 0:
+ switch (r6 & 1)
+ {
+ case 0:
+ if (*r2 & 0xF)
+ {
+ sEvoInfo.unk10C4[sp8][sEvoInfo.unk4[sp8]] = r6;
+ r3 = 1;
+ }
+ break;
+ case 1:
+ if (*r2 & 0xF0)
+ {
+ sEvoInfo.unk10C4[sp8][sEvoInfo.unk4[sp8]] = r6;
+ r3 = 1;
+ }
+ break;
+ }
+ break;
+ case 1:
+ switch (r6 & r3)
+ {
+ case 0:
+ if (*r2 & 0xF)
+ {
+ sEvoInfo.unk18C4[sp8][sEvoInfo.unk4[sp8]] = r6 - 1;
+ sEvoInfo.unk4[sp8]++;
+ r3 = 0;
+ }
+ break;
+ case 1:
+ if (*r2 & 0xF0)
+ {
+ sEvoInfo.unk18C4[sp8][sEvoInfo.unk4[sp8]] = r6 - 1;
+ sEvoInfo.unk4[sp8]++;
+ r3 = 0;
+ }
+ break;
+ }
+ }
+ //if (!((r6 + 1) & 7))
+ if ((r6 + 1) % 8 == 0)
+ r2 += 0x1D;
+ else if (r6 & 1)
+ r2 += 1;
+ }
+ if (r3)
+ {
+ sEvoInfo.unk18C4[sp8][sEvoInfo.unk4[sp8]] = r6;
+ sEvoInfo.unk4[sp8]++;
+ }
+ //_08113D26
+ if (!((sp8 + 1) & 7))
+ r8 += 0xE4;
+ else
+ r8 += 4;
+ }
+ //_08113D4A
+ r8 = 0;
+ for (sp8 = 0; sp8 < 64; sp8++)
+ {
+ //_08113D6A
+ u32 r3 = 0;
+ u8 *r2 = sp4 + r8;
+
+ for (r6 = 0; r6 < 64; r6++)
+ {
+ switch (r3)
+ {
+ case 0:
+ switch (r6 & 1)
+ {
+ case 0:
+ if (*r2 & 0xF)
+ {
+ sEvoInfo.unk20C4[sp8][sEvoInfo.unk44[sp8]] = r6;
+ r3 = 1;
+ }
+ break;
+ case 1:
+ if (*r2 & 0xF0)
+ {
+ sEvoInfo.unk20C4[sp8][sEvoInfo.unk44[sp8]] = r6;
+ r3 = 1;
+ }
+ break;
+ }
+ break;
+ case 1:
+ switch (r6 & r3)
+ {
+ case 0:
+ if (*r2 & 0xF)
+ {
+ sEvoInfo.unk28C4[sp8][sEvoInfo.unk44[sp8]] = r6 - 1;
+ sEvoInfo.unk44[sp8]++;
+ r3 = 0;
+ }
+ break;
+ case 1:
+ if (*r2 & 0xF0)
+ {
+ sEvoInfo.unk28C4[sp8][sEvoInfo.unk44[sp8]] = r6 - 1;
+ sEvoInfo.unk44[sp8]++;
+ r3 = 0;
+ }
+ break;
+ }
+ }
+ //_08113DE4
+ if (!((r6 + 1) & 7))
+ r2 += 0x1D;
+ else if (r6 & 1)
+ r2 += 1;
+
+ }
+ if (r3)
+ {
+ sEvoInfo.unk28C4[sp8][sEvoInfo.unk44[sp8]] = r6;
+ sEvoInfo.unk44[sp8]++;
+ }
+ //if (!((sp8 + 1) & 7))
+ if ((sp8 + 1) % 8 == 0)
+ r8 += 0xE4;
+ else
+ r8 += 4;
+ }
+
+ for (sp8 = 0; sp8 < 0x40; sp8++) //_08113E3A
+ {
+ if (sEvoInfo.unk4[sp8] < sEvoInfo.unk44[sp8])
+ {
+ for (spC = 0; spC < sEvoInfo.unk4[sp8]; spC++)
+ {
+ sp14 = 0x100;
+
+ for (r6 = 0; r6 < sEvoInfo.unk44[sp8]; r6++)
+ {
+ s32 r3;
+
+ //_08113EA4
+ if (sEvoInfo.unk10C4[sp8][spC] > sEvoInfo.unk20C4[sp8][r6])
+ r3 = sEvoInfo.unk10C4[sp8][spC] - sEvoInfo.unk20C4[sp8][r6];
+ else
+ r3 = sEvoInfo.unk20C4[sp8][r6] - sEvoInfo.unk10C4[sp8][spC];
+
+ if (sEvoInfo.unk18C4[sp8][spC] > sEvoInfo.unk28C4[sp8][spC])
+ r3 += sEvoInfo.unk18C4[sp8][spC] - sEvoInfo.unk28C4[sp8][spC];
+ else
+ r3 += sEvoInfo.unk28C4[sp8][spC] - sEvoInfo.unk18C4[sp8][spC];
+
+ if (sp14 >= r3 && sEvoInfo.unkC4[sp8][r6] == 0 && sEvoInfo.unk8C4[sp8][r6] == 0)
+ {
+ sp10 = r6;
+ sp14 = r3;
+ }
+ }
+ //_08113F3E
+ sub_81141F0(spC, sp10, sp8);
+ }
+ //_08113F54
+
+ for (r6 = 0; r6 < sEvoInfo.unk44[sp8]; r6++)
+ {
+ if (sEvoInfo.unkC4[sp8][r6] == 0 && sEvoInfo.unk8C4[sp8][r6] == 0)
+ sub_811430C(r6, sp8);
+ }
+ }
+ //_08113F9E
+ if (sEvoInfo.unk4[sp8] == sEvoInfo.unk44[sp8])
+ {
+ for (r6 = 0; r6 < sEvoInfo.unk4[sp8]; r6++)
+ sub_81141F0(r6, r6, sp8);
+ }
+ //_08113FCC
+ if (sEvoInfo.unk4[sp8] > sEvoInfo.unk44[sp8])
+ {
+ for (sp10 = 0; sp10 < sEvoInfo.unk44[sp8]; sp10++)
+ {
+ sp14 = 0x100;
+
+ for (r6 = 0; r6 < sEvoInfo.unk4[sp8]; r6++)
+ {
+ s32 r3;
+
+ if (sEvoInfo.unk10C4[sp8][r6] > sEvoInfo.unk20C4[sp8][sp10])
+ r3 = sEvoInfo.unk10C4[sp8][r6] - sEvoInfo.unk20C4[sp8][sp10];
+ else
+ r3 = sEvoInfo.unk20C4[sp8][sp10] - sEvoInfo.unk10C4[sp8][r6];
+
+ if (sEvoInfo.unk18C4[sp8][r6] > sEvoInfo.unk28C4[sp8][sp10])
+ r3 += sEvoInfo.unk18C4[sp8][r6] - sEvoInfo.unk28C4[sp8][sp10];
+ else
+ r3 += sEvoInfo.unk28C4[sp8][sp10] - sEvoInfo.unk18C4[sp8][r6];
+
+ //r3 = abs(sEvoInfo.unk10C4[sp8][r6] - sEvoInfo.unk20C4[sp8][sp10]);
+ //r3 += abs(sEvoInfo.unk18C4[sp8][r6] - sEvoInfo.unk28C4[sp8][sp10]);
+
+ if (sp14 > r3 && sEvoInfo.unkC4[sp8][r6] == 0)
+ {
+ spC = r6;
+ sp14 = r3;
+ }
+ }
+ //_081140C4
+ sEvoInfo.unk30C4[sp8][spC] = sEvoInfo.unk20C4[sp8][sp10];
+ sEvoInfo.unk38C4[sp8][spC] = sEvoInfo.unk28C4[sp8][sp10];
+ sEvoInfo.unkC4[sp8][spC] = 1;
+ }
+ //_08114104
+ for (r6 = 0; r6 < sEvoInfo.unk4[sp8]; r6++)
+ {
+ sEvoInfo.unk20C4[sp8][r6] = sEvoInfo.unk30C4[sp8][r6];
+ sEvoInfo.unk28C4[sp8][r6] = sEvoInfo.unk38C4[sp8][r6];
+ if (sEvoInfo.unkC4[sp8][r6] != 0)
+ {
+ sEvoInfo.unkC4[sp8][r6] = 0;
+ sub_81141F0(r6, r6, sp8);
+ }
+ else
+ {
+ // Ugh, can't get this part right
+ //u8 *ptr1 = &sEvoInfo.unk10C4[sp8][r6];
+ //u8 *ptr2 = &sEvoInfo.unk18C4[sp8][r6];
+ //s32 r2 = *ptr1 + (*ptr2 - *ptr1) / 2;
+
+ //u8 r0_ = sEvoInfo.unk10C4[sp8][r6];
+ //u8 r2_ = sEvoInfo.unk18C4[sp8][r6];
+ //s32 r2 = (r0_ - r2_) / 2;
+
+ s32 r2 = (sEvoInfo.unk18C4[sp8][r6] - sEvoInfo.unk10C4[sp8][r6]);
+ s32 r2_ = sEvoInfo.unk10C4[sp8][r6];
+
+ sEvoInfo.unk20C4[sp8][r6] = sEvoInfo.unk28C4[sp8][r6] = r2_ + r2 / 2;
+ sEvoInfo.unk28C4[sp8][r6]++;
+ sub_81141F0(r6, r6, sp8);
+ }
+ }
+ }
+ //_081141C4
+ }
+#undef sp0
+#undef sp4
+}
+*/
+__attribute__((naked))
+void unref_sub_8113B50()
+{
+ 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, 0x3C\n\
+ str r0, [sp]\n\
+ str r1, [sp, 0x4]\n\
+ movs r0, 0\n\
+ str r0, [sp, 0xC]\n\
+ movs r1, 0\n\
+ str r1, [sp, 0x10]\n\
+ movs r2, 0\n\
+ str r2, [sp, 0x8]\n\
+ ldr r3, _08113C60 @ =0x02014800\n\
+ mov r12, r3\n\
+ ldr r4, _08113C64 @ =0x000018c4\n\
+ add r4, r12\n\
+ mov r10, r4\n\
+ ldr r5, _08113C68 @ =0x000020c4\n\
+ add r5, r12\n\
+ mov r8, r5\n\
+_08113B7C:\n\
+ adds r0, r3, 0\n\
+ adds r0, 0x84\n\
+ ldr r1, [sp, 0x8]\n\
+ adds r0, r1, r0\n\
+ strb r2, [r0]\n\
+ adds r0, r3, 0x4\n\
+ adds r0, r1, r0\n\
+ strb r2, [r0]\n\
+ ldr r4, _08113C6C @ =0x02014844\n\
+ adds r0, r1, r4\n\
+ strb r2, [r0]\n\
+ movs r6, 0\n\
+ lsls r1, 5\n\
+ mov r9, r1\n\
+ ldr r5, [sp, 0x8]\n\
+ lsls r4, r5, 6\n\
+_08113B9C:\n\
+ mov r0, r9\n\
+ adds r1, r6, r0\n\
+ ldr r5, _08113C70 @ =0x020158c4\n\
+ adds r0, r1, r5\n\
+ strb r2, [r0]\n\
+ mov r5, r10\n\
+ adds r0, r1, r5\n\
+ strb r2, [r0]\n\
+ mov r5, r8\n\
+ adds r0, r1, r5\n\
+ strb r2, [r0]\n\
+ ldr r5, _08113C74 @ =0x020170c4\n\
+ adds r0, r1, r5\n\
+ strb r2, [r0]\n\
+ adds r7, r3, 0\n\
+ adds r7, 0xC4\n\
+ adds r0, r1, r7\n\
+ strb r2, [r0]\n\
+ ldr r5, _08113C78 @ =0x000008c4\n\
+ adds r0, r3, r5\n\
+ adds r0, r1, r0\n\
+ strb r2, [r0]\n\
+ ldr r5, _08113C7C @ =0x000030c4\n\
+ adds r0, r3, r5\n\
+ adds r0, r1, r0\n\
+ strb r2, [r0]\n\
+ ldr r5, _08113C80 @ =0x000038c4\n\
+ adds r0, r3, r5\n\
+ adds r1, r0\n\
+ strb r2, [r1]\n\
+ lsls r1, r6, 1\n\
+ adds r1, r4\n\
+ ldr r5, _08113C84 @ =0x000060c4\n\
+ adds r0, r3, r5\n\
+ adds r0, r1, r0\n\
+ strh r2, [r0]\n\
+ ldr r5, _08113C88 @ =0x000070c4\n\
+ adds r0, r3, r5\n\
+ adds r0, r1, r0\n\
+ strh r2, [r0]\n\
+ ldr r5, _08113C8C @ =0x000080c4\n\
+ adds r0, r3, r5\n\
+ adds r0, r1, r0\n\
+ strh r2, [r0]\n\
+ ldr r5, _08113C90 @ =0x000090c4\n\
+ adds r0, r3, r5\n\
+ adds r1, r0\n\
+ strh r2, [r1]\n\
+ adds r6, 0x1\n\
+ cmp r6, 0x1F\n\
+ ble _08113B9C\n\
+ ldr r0, [sp, 0x8]\n\
+ adds r0, 0x1\n\
+ str r0, [sp, 0x8]\n\
+ cmp r0, 0x3F\n\
+ ble _08113B7C\n\
+ ldr r1, _08113C94 @ =0x0000a0c4\n\
+ add r1, r12\n\
+ movs r0, 0x40\n\
+ strb r0, [r1]\n\
+ movs r1, 0\n\
+ mov r8, r1\n\
+ movs r2, 0\n\
+ str r2, [sp, 0x8]\n\
+ movs r3, 0x80\n\
+ lsls r3, 5\n\
+ adds r3, r7\n\
+ mov r12, r3\n\
+ movs r4, 0xC0\n\
+ lsls r4, 5\n\
+ adds r4, r7\n\
+ mov r9, r4\n\
+ movs r5, 0\n\
+ adds r4, r7, 0\n\
+ subs r4, 0xC0\n\
+_08113C32:\n\
+ movs r3, 0\n\
+ ldr r2, [sp]\n\
+ add r2, r8\n\
+ movs r6, 0\n\
+ ldr r0, [sp, 0x8]\n\
+ adds r0, 0x1\n\
+ str r0, [sp, 0x30]\n\
+ ldr r1, [sp, 0x8]\n\
+ lsls r1, 7\n\
+ mov r10, r1\n\
+ movs r7, 0x1\n\
+ negs r7, r7\n\
+_08113C4A:\n\
+ asrs r0, r6, 1\n\
+ lsls r0, 2\n\
+ add r0, r10\n\
+ ldr r1, _08113C98 @ =0x020188c4\n\
+ adds r0, r1\n\
+ str r2, [r0]\n\
+ cmp r3, 0\n\
+ beq _08113C9C\n\
+ cmp r3, 0x1\n\
+ beq _08113CC6\n\
+ b _08113CF4\n\
+ .align 2, 0\n\
+_08113C60: .4byte 0x02014800\n\
+_08113C64: .4byte 0x000018c4\n\
+_08113C68: .4byte 0x000020c4\n\
+_08113C6C: .4byte 0x02014844\n\
+_08113C70: .4byte 0x020158c4\n\
+_08113C74: .4byte 0x020170c4\n\
+_08113C78: .4byte 0x000008c4\n\
+_08113C7C: .4byte 0x000030c4\n\
+_08113C80: .4byte 0x000038c4\n\
+_08113C84: .4byte 0x000060c4\n\
+_08113C88: .4byte 0x000070c4\n\
+_08113C8C: .4byte 0x000080c4\n\
+_08113C90: .4byte 0x000090c4\n\
+_08113C94: .4byte 0x0000a0c4\n\
+_08113C98: .4byte 0x020188c4\n\
+_08113C9C:\n\
+ movs r0, 0x1\n\
+ ands r0, r6\n\
+ cmp r0, 0\n\
+ beq _08113CAA\n\
+ cmp r0, 0x1\n\
+ beq _08113CB0\n\
+ b _08113CF4\n\
+_08113CAA:\n\
+ ldrb r1, [r2]\n\
+ movs r0, 0xF\n\
+ b _08113CB4\n\
+_08113CB0:\n\
+ ldrb r1, [r2]\n\
+ movs r0, 0xF0\n\
+_08113CB4:\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _08113CF4\n\
+ ldrb r0, [r4]\n\
+ adds r0, r5\n\
+ add r0, r12\n\
+ strb r6, [r0]\n\
+ movs r3, 0x1\n\
+ b _08113CF4\n\
+_08113CC6:\n\
+ adds r0, r6, 0\n\
+ ands r0, r3\n\
+ cmp r0, 0\n\
+ beq _08113CD4\n\
+ cmp r0, 0x1\n\
+ beq _08113CDA\n\
+ b _08113CF4\n\
+_08113CD4:\n\
+ ldrb r1, [r2]\n\
+ movs r0, 0xF\n\
+ b _08113CDE\n\
+_08113CDA:\n\
+ ldrb r1, [r2]\n\
+ movs r0, 0xF0\n\
+_08113CDE:\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _08113CF4\n\
+ ldrb r0, [r4]\n\
+ adds r0, r5\n\
+ add r0, r9\n\
+ strb r7, [r0]\n\
+ ldrb r0, [r4]\n\
+ adds r0, 0x1\n\
+ strb r0, [r4]\n\
+ movs r3, 0\n\
+_08113CF4:\n\
+ adds r0, r6, 0x1\n\
+ movs r1, 0x7\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _08113D02\n\
+ adds r2, 0x1D\n\
+ b _08113D0C\n\
+_08113D02:\n\
+ movs r0, 0x1\n\
+ ands r0, r6\n\
+ cmp r0, 0\n\
+ beq _08113D0C\n\
+ adds r2, 0x1\n\
+_08113D0C:\n\
+ adds r7, 0x1\n\
+ adds r6, 0x1\n\
+ cmp r6, 0x3F\n\
+ ble _08113C4A\n\
+ cmp r3, 0\n\
+ beq _08113D26\n\
+ ldrb r0, [r4]\n\
+ adds r0, r5\n\
+ add r0, r9\n\
+ strb r6, [r0]\n\
+ ldrb r0, [r4]\n\
+ adds r0, 0x1\n\
+ strb r0, [r4]\n\
+_08113D26:\n\
+ movs r0, 0x7\n\
+ ldr r2, [sp, 0x30]\n\
+ ands r2, r0\n\
+ cmp r2, 0\n\
+ bne _08113D36\n\
+ movs r3, 0xE4\n\
+ add r8, r3\n\
+ b _08113D3A\n\
+_08113D36:\n\
+ movs r0, 0x4\n\
+ add r8, r0\n\
+_08113D3A:\n\
+ adds r5, 0x20\n\
+ adds r4, 0x1\n\
+ ldr r1, [sp, 0x8]\n\
+ adds r1, 0x1\n\
+ str r1, [sp, 0x8]\n\
+ cmp r1, 0x3F\n\
+ bgt _08113D4A\n\
+ b _08113C32\n\
+_08113D4A:\n\
+ movs r2, 0\n\
+ mov r8, r2\n\
+ movs r3, 0\n\
+ str r3, [sp, 0x8]\n\
+ ldr r0, _08113D84 @ =0x02014844\n\
+ movs r4, 0x82\n\
+ lsls r4, 6\n\
+ adds r4, r0\n\
+ mov r10, r4\n\
+ movs r5, 0xA2\n\
+ lsls r5, 6\n\
+ adds r7, r0, r5\n\
+ movs r5, 0\n\
+ adds r4, r0, 0\n\
+ movs r0, 0x1\n\
+ mov r9, r0\n\
+_08113D6A:\n\
+ movs r3, 0\n\
+ ldr r2, [sp, 0x4]\n\
+ add r2, r8\n\
+ movs r6, 0\n\
+ ldr r1, [sp, 0x8]\n\
+ adds r1, 0x1\n\
+ str r1, [sp, 0x30]\n\
+_08113D78:\n\
+ cmp r3, 0\n\
+ beq _08113D88\n\
+ cmp r3, 0x1\n\
+ beq _08113DB4\n\
+ b _08113DE4\n\
+ .align 2, 0\n\
+_08113D84: .4byte 0x02014844\n\
+_08113D88:\n\
+ adds r0, r6, 0\n\
+ mov r1, r9\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _08113D98\n\
+ cmp r0, 0x1\n\
+ beq _08113D9E\n\
+ b _08113DE4\n\
+_08113D98:\n\
+ ldrb r1, [r2]\n\
+ movs r0, 0xF\n\
+ b _08113DA2\n\
+_08113D9E:\n\
+ ldrb r1, [r2]\n\
+ movs r0, 0xF0\n\
+_08113DA2:\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _08113DE4\n\
+ ldrb r0, [r4]\n\
+ adds r0, r5\n\
+ add r0, r10\n\
+ strb r6, [r0]\n\
+ movs r3, 0x1\n\
+ b _08113DE4\n\
+_08113DB4:\n\
+ adds r0, r6, 0\n\
+ ands r0, r3\n\
+ cmp r0, 0\n\
+ beq _08113DC2\n\
+ cmp r0, 0x1\n\
+ beq _08113DC8\n\
+ b _08113DE4\n\
+_08113DC2:\n\
+ ldrb r1, [r2]\n\
+ movs r0, 0xF\n\
+ b _08113DCC\n\
+_08113DC8:\n\
+ ldrb r1, [r2]\n\
+ movs r0, 0xF0\n\
+_08113DCC:\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _08113DE4\n\
+ ldrb r0, [r4]\n\
+ adds r0, r5\n\
+ adds r0, r7\n\
+ subs r1, r6, 0x1\n\
+ strb r1, [r0]\n\
+ ldrb r0, [r4]\n\
+ adds r0, 0x1\n\
+ strb r0, [r4]\n\
+ movs r3, 0\n\
+_08113DE4:\n\
+ adds r1, r6, 0x1\n\
+ movs r0, 0x7\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _08113DF2\n\
+ adds r2, 0x1D\n\
+ b _08113DFC\n\
+_08113DF2:\n\
+ mov r0, r9\n\
+ ands r6, r0\n\
+ cmp r6, 0\n\
+ beq _08113DFC\n\
+ adds r2, 0x1\n\
+_08113DFC:\n\
+ adds r6, r1, 0\n\
+ cmp r6, 0x3F\n\
+ ble _08113D78\n\
+ cmp r3, 0\n\
+ beq _08113E14\n\
+ ldrb r0, [r4]\n\
+ adds r0, r5\n\
+ adds r0, r7\n\
+ strb r6, [r0]\n\
+ ldrb r0, [r4]\n\
+ adds r0, 0x1\n\
+ strb r0, [r4]\n\
+_08113E14:\n\
+ movs r0, 0x7\n\
+ ldr r1, [sp, 0x30]\n\
+ ands r1, r0\n\
+ cmp r1, 0\n\
+ bne _08113E24\n\
+ movs r2, 0xE4\n\
+ add r8, r2\n\
+ b _08113E28\n\
+_08113E24:\n\
+ movs r3, 0x4\n\
+ add r8, r3\n\
+_08113E28:\n\
+ adds r5, 0x20\n\
+ adds r4, 0x1\n\
+ ldr r0, [sp, 0x8]\n\
+ adds r0, 0x1\n\
+ str r0, [sp, 0x8]\n\
+ cmp r0, 0x3F\n\
+ ble _08113D6A\n\
+ movs r1, 0\n\
+ str r1, [sp, 0x8]\n\
+_08113E3A:\n\
+ ldr r3, [sp, 0x8]\n\
+ ldr r4, _08113EBC @ =0x02014804\n\
+ adds r2, r3, r4\n\
+ ldr r5, _08113EC0 @ =0x02014844\n\
+ adds r1, r3, r5\n\
+ ldrb r0, [r2]\n\
+ adds r3, 0x1\n\
+ str r3, [sp, 0x30]\n\
+ ldrb r1, [r1]\n\
+ cmp r0, r1\n\
+ bcc _08113E52\n\
+ b _08113F9E\n\
+_08113E52:\n\
+ movs r0, 0\n\
+ str r0, [sp, 0xC]\n\
+ ldrb r2, [r2]\n\
+ cmp r0, r2\n\
+ bge _08113F54\n\
+ ldr r0, _08113EC4 @ =0x02014800\n\
+ adds r0, 0x4\n\
+ ldr r1, [sp, 0x8]\n\
+ adds r0, r1, r0\n\
+ str r0, [sp, 0x18]\n\
+_08113E66:\n\
+ movs r2, 0x80\n\
+ lsls r2, 1\n\
+ str r2, [sp, 0x14]\n\
+ movs r6, 0\n\
+ ldr r3, [sp, 0x8]\n\
+ ldr r4, _08113EC0 @ =0x02014844\n\
+ adds r0, r3, r4\n\
+ ldr r5, [sp, 0xC]\n\
+ adds r5, 0x1\n\
+ str r5, [sp, 0x34]\n\
+ ldrb r0, [r0]\n\
+ cmp r6, r0\n\
+ bge _08113F3E\n\
+ ldr r0, _08113EC4 @ =0x02014800\n\
+ mov r10, r0\n\
+ lsls r0, r3, 5\n\
+ ldr r2, [sp, 0xC]\n\
+ adds r1, r2, r0\n\
+ mov r9, r0\n\
+ ldr r0, _08113EC4 @ =0x02014800\n\
+ adds r0, 0xC4\n\
+ mov r3, r9\n\
+ adds r7, r3, r0\n\
+ mov r5, r9\n\
+ ldr r4, _08113EC4 @ =0x02014800\n\
+ ldr r2, _08113EC8 @ =0x000010c4\n\
+ adds r0, r4, r2\n\
+ adds r1, r0\n\
+ mov r8, r1\n\
+ ldrb r3, [r1]\n\
+ str r3, [sp, 0x1C]\n\
+_08113EA4:\n\
+ ldr r0, _08113ECC @ =0x000020c4\n\
+ add r0, r10\n\
+ adds r0, r5, r0\n\
+ ldr r4, [sp, 0x1C]\n\
+ ldrb r1, [r0]\n\
+ cmp r4, r1\n\
+ bls _08113ED0\n\
+ mov r2, r8\n\
+ ldrb r1, [r2]\n\
+ ldrb r0, [r0]\n\
+ b _08113ED6\n\
+ .align 2, 0\n\
+_08113EBC: .4byte 0x02014804\n\
+_08113EC0: .4byte 0x02014844\n\
+_08113EC4: .4byte 0x02014800\n\
+_08113EC8: .4byte 0x000010c4\n\
+_08113ECC: .4byte 0x000020c4\n\
+_08113ED0:\n\
+ ldrb r1, [r0]\n\
+ mov r3, r8\n\
+ ldrb r0, [r3]\n\
+_08113ED6:\n\
+ subs r3, r1, r0\n\
+ ldr r1, [sp, 0xC]\n\
+ add r1, r9\n\
+ ldr r0, _08113EFC @ =0x000018c4\n\
+ add r0, r10\n\
+ adds r4, r1, r0\n\
+ ldr r0, _08113F00 @ =0x000028c4\n\
+ add r0, r10\n\
+ adds r2, r5, r0\n\
+ ldrb r0, [r4]\n\
+ ldr r1, _08113F04 @ =0x02014800\n\
+ mov r12, r1\n\
+ ldrb r1, [r2]\n\
+ cmp r0, r1\n\
+ bls _08113F08\n\
+ adds r1, r0, 0\n\
+ ldrb r0, [r2]\n\
+ b _08113F0C\n\
+ .align 2, 0\n\
+_08113EFC: .4byte 0x000018c4\n\
+_08113F00: .4byte 0x000028c4\n\
+_08113F04: .4byte 0x02014800\n\
+_08113F08:\n\
+ ldrb r1, [r2]\n\
+ ldrb r0, [r4]\n\
+_08113F0C:\n\
+ subs r1, r0\n\
+ adds r3, r1\n\
+ ldr r2, [sp, 0x14]\n\
+ cmp r2, r3\n\
+ ble _08113F2C\n\
+ ldrb r0, [r7]\n\
+ cmp r0, 0\n\
+ bne _08113F2C\n\
+ ldr r0, _08114050 @ =0x000008c4\n\
+ add r0, r12\n\
+ adds r0, r5, r0\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0\n\
+ bne _08113F2C\n\
+ str r6, [sp, 0x10]\n\
+ str r3, [sp, 0x14]\n\
+_08113F2C:\n\
+ adds r7, 0x1\n\
+ adds r5, 0x1\n\
+ adds r6, 0x1\n\
+ ldr r3, [sp, 0x8]\n\
+ ldr r4, _08114054 @ =0x02014844\n\
+ adds r0, r3, r4\n\
+ ldrb r0, [r0]\n\
+ cmp r6, r0\n\
+ blt _08113EA4\n\
+_08113F3E:\n\
+ ldr r0, [sp, 0xC]\n\
+ ldr r1, [sp, 0x10]\n\
+ ldr r2, [sp, 0x8]\n\
+ bl sub_81141F0\n\
+ ldr r5, [sp, 0x34]\n\
+ str r5, [sp, 0xC]\n\
+ ldr r0, [sp, 0x18]\n\
+ ldrb r0, [r0]\n\
+ cmp r5, r0\n\
+ blt _08113E66\n\
+_08113F54:\n\
+ movs r6, 0\n\
+ ldr r2, _08114058 @ =0x02014800\n\
+ ldr r1, [sp, 0x8]\n\
+ ldr r3, _08114054 @ =0x02014844\n\
+ adds r0, r1, r3\n\
+ adds r4, r2, 0\n\
+ mov r12, r4\n\
+ ldrb r0, [r0]\n\
+ cmp r6, r0\n\
+ bge _08113F9E\n\
+ mov r0, r12\n\
+ adds r0, 0x44\n\
+ adds r4, r1, r0\n\
+_08113F6E:\n\
+ ldr r5, [sp, 0x8]\n\
+ lsls r0, r5, 5\n\
+ adds r1, r6, r0\n\
+ adds r0, r2, 0\n\
+ adds r0, 0xC4\n\
+ adds r0, r1, r0\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0\n\
+ bne _08113F94\n\
+ ldr r3, _08114050 @ =0x000008c4\n\
+ adds r0, r2, r3\n\
+ adds r0, r1, r0\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0\n\
+ bne _08113F94\n\
+ adds r0, r6, 0\n\
+ adds r1, r5, 0\n\
+ bl sub_811430C\n\
+_08113F94:\n\
+ adds r6, 0x1\n\
+ ldr r2, _08114058 @ =0x02014800\n\
+ ldrb r5, [r4]\n\
+ cmp r6, r5\n\
+ blt _08113F6E\n\
+_08113F9E:\n\
+ ldr r0, [sp, 0x8]\n\
+ ldr r1, _0811405C @ =0x02014804\n\
+ adds r2, r0, r1\n\
+ ldr r3, _08114054 @ =0x02014844\n\
+ adds r1, r0, r3\n\
+ ldrb r0, [r2]\n\
+ ldrb r1, [r1]\n\
+ cmp r0, r1\n\
+ bne _08113FCC\n\
+ movs r6, 0\n\
+ ldrb r4, [r2]\n\
+ cmp r6, r4\n\
+ bge _08113FCC\n\
+ adds r4, r2, 0\n\
+_08113FBA:\n\
+ adds r0, r6, 0\n\
+ adds r1, r6, 0\n\
+ ldr r2, [sp, 0x8]\n\
+ bl sub_81141F0\n\
+ adds r6, 0x1\n\
+ ldrb r5, [r4]\n\
+ cmp r6, r5\n\
+ blt _08113FBA\n\
+_08113FCC:\n\
+ ldr r0, [sp, 0x8]\n\
+ ldr r1, _0811405C @ =0x02014804\n\
+ adds r2, r0, r1\n\
+ ldr r3, _08114054 @ =0x02014844\n\
+ adds r1, r0, r3\n\
+ ldrb r0, [r2]\n\
+ ldr r4, _08114058 @ =0x02014800\n\
+ ldrb r5, [r1]\n\
+ cmp r0, r5\n\
+ bhi _08113FE2\n\
+ b _081141C4\n\
+_08113FE2:\n\
+ movs r0, 0\n\
+ str r0, [sp, 0x10]\n\
+ ldrb r1, [r1]\n\
+ cmp r0, r1\n\
+ blt _08113FEE\n\
+ b _08114104\n\
+_08113FEE:\n\
+ str r2, [sp, 0x2C]\n\
+ ldr r1, [sp, 0x8]\n\
+ lsls r1, 5\n\
+ mov r9, r1\n\
+ adds r0, r4, 0\n\
+ adds r0, 0x44\n\
+ ldr r2, [sp, 0x8]\n\
+ adds r0, r2, r0\n\
+ str r0, [sp, 0x20]\n\
+ mov r3, r9\n\
+ str r3, [sp, 0x24]\n\
+_08114004:\n\
+ movs r4, 0x80\n\
+ lsls r4, 1\n\
+ str r4, [sp, 0x14]\n\
+ movs r6, 0\n\
+ ldr r5, [sp, 0x10]\n\
+ adds r5, 0x1\n\
+ str r5, [sp, 0x38]\n\
+ ldr r0, [sp, 0x2C]\n\
+ ldrb r0, [r0]\n\
+ cmp r6, r0\n\
+ bge _081140C4\n\
+ ldr r1, [sp, 0x10]\n\
+ ldr r2, [sp, 0x24]\n\
+ adds r1, r2\n\
+ mov r10, r1\n\
+ ldr r0, _08114058 @ =0x02014800\n\
+ adds r0, 0xC4\n\
+ adds r2, r0\n\
+ mov r8, r2\n\
+ ldr r7, [sp, 0x24]\n\
+ ldr r3, _08114058 @ =0x02014800\n\
+ ldr r4, _08114060 @ =0x000010c4\n\
+ adds r0, r3, r4\n\
+ adds r5, r7, r0\n\
+ ldr r0, _08114064 @ =0x020168c4\n\
+ add r0, r10\n\
+ mov r12, r0\n\
+ ldrb r1, [r0]\n\
+ str r1, [sp, 0x28]\n\
+_0811403E:\n\
+ ldrb r0, [r5]\n\
+ ldr r2, [sp, 0x28]\n\
+ cmp r0, r2\n\
+ bls _08114068\n\
+ adds r1, r0, 0\n\
+ mov r3, r12\n\
+ ldrb r0, [r3]\n\
+ b _0811406E\n\
+ .align 2, 0\n\
+_08114050: .4byte 0x000008c4\n\
+_08114054: .4byte 0x02014844\n\
+_08114058: .4byte 0x02014800\n\
+_0811405C: .4byte 0x02014804\n\
+_08114060: .4byte 0x000010c4\n\
+_08114064: .4byte 0x020168c4\n\
+_08114068:\n\
+ mov r4, r12\n\
+ ldrb r1, [r4]\n\
+ ldrb r0, [r5]\n\
+_0811406E:\n\
+ subs r3, r1, r0\n\
+ ldr r1, _0811408C @ =0x02014800\n\
+ ldr r2, _08114090 @ =0x000018c4\n\
+ adds r0, r1, r2\n\
+ adds r4, r7, r0\n\
+ ldr r2, _08114094 @ =0x020170c4\n\
+ add r2, r10\n\
+ ldrb r0, [r4]\n\
+ ldrb r1, [r2]\n\
+ cmp r0, r1\n\
+ bls _08114098\n\
+ adds r1, r0, 0\n\
+ ldrb r0, [r2]\n\
+ b _0811409C\n\
+ .align 2, 0\n\
+_0811408C: .4byte 0x02014800\n\
+_08114090: .4byte 0x000018c4\n\
+_08114094: .4byte 0x020170c4\n\
+_08114098:\n\
+ ldrb r1, [r2]\n\
+ ldrb r0, [r4]\n\
+_0811409C:\n\
+ subs r1, r0\n\
+ adds r3, r1\n\
+ ldr r2, [sp, 0x14]\n\
+ cmp r2, r3\n\
+ ble _081140B2\n\
+ mov r4, r8\n\
+ ldrb r0, [r4]\n\
+ cmp r0, 0\n\
+ bne _081140B2\n\
+ str r6, [sp, 0xC]\n\
+ str r3, [sp, 0x14]\n\
+_081140B2:\n\
+ movs r0, 0x1\n\
+ add r8, r0\n\
+ adds r7, 0x1\n\
+ adds r5, 0x1\n\
+ adds r6, 0x1\n\
+ ldr r1, [sp, 0x2C]\n\
+ ldrb r1, [r1]\n\
+ cmp r6, r1\n\
+ blt _0811403E\n\
+_081140C4:\n\
+ ldr r3, [sp, 0xC]\n\
+ add r3, r9\n\
+ ldr r2, _08114164 @ =0x02014800\n\
+ ldr r4, _08114168 @ =0x000030c4\n\
+ adds r1, r2, r4\n\
+ adds r1, r3, r1\n\
+ ldr r2, [sp, 0x10]\n\
+ add r2, r9\n\
+ ldr r5, _0811416C @ =0x020168c4\n\
+ adds r0, r2, r5\n\
+ ldrb r0, [r0]\n\
+ strb r0, [r1]\n\
+ ldr r0, _08114164 @ =0x02014800\n\
+ ldr r4, _08114170 @ =0x000038c4\n\
+ adds r1, r0, r4\n\
+ adds r1, r3, r1\n\
+ ldr r5, _08114174 @ =0x020170c4\n\
+ adds r2, r5\n\
+ ldrb r0, [r2]\n\
+ strb r0, [r1]\n\
+ ldr r0, _08114164 @ =0x02014800\n\
+ adds r0, 0xC4\n\
+ adds r3, r0\n\
+ movs r0, 0x1\n\
+ strb r0, [r3]\n\
+ ldr r0, [sp, 0x38]\n\
+ str r0, [sp, 0x10]\n\
+ ldr r1, [sp, 0x20]\n\
+ ldrb r1, [r1]\n\
+ cmp r0, r1\n\
+ bge _08114104\n\
+ b _08114004\n\
+_08114104:\n\
+ movs r6, 0\n\
+ ldr r4, _08114164 @ =0x02014800\n\
+ ldr r2, [sp, 0x8]\n\
+ ldr r3, _08114178 @ =0x02014804\n\
+ adds r0, r2, r3\n\
+ ldrb r0, [r0]\n\
+ cmp r6, r0\n\
+ bge _081141C4\n\
+ adds r7, r4, 0\n\
+ mov r9, r6\n\
+ movs r5, 0xC4\n\
+ adds r5, r7\n\
+ mov r8, r5\n\
+_0811411E:\n\
+ ldr r1, [sp, 0x8]\n\
+ lsls r0, r1, 5\n\
+ adds r2, r6, r0\n\
+ ldr r3, _0811417C @ =0x000020c4\n\
+ adds r0, r7, r3\n\
+ adds r0, r2\n\
+ mov r10, r0\n\
+ ldr r5, _08114168 @ =0x000030c4\n\
+ adds r0, r7, r5\n\
+ adds r0, r2, r0\n\
+ ldrb r0, [r0]\n\
+ mov r1, r10\n\
+ strb r0, [r1]\n\
+ ldr r3, _08114180 @ =0x000028c4\n\
+ adds r0, r7, r3\n\
+ adds r3, r2, r0\n\
+ ldr r5, _08114170 @ =0x000038c4\n\
+ adds r0, r7, r5\n\
+ adds r0, r2, r0\n\
+ ldrb r0, [r0]\n\
+ strb r0, [r3]\n\
+ mov r0, r8\n\
+ adds r1, r2, r0\n\
+ ldrb r0, [r1]\n\
+ cmp r0, 0\n\
+ beq _08114184\n\
+ mov r2, r9\n\
+ strb r2, [r1]\n\
+ adds r0, r6, 0\n\
+ adds r1, r6, 0\n\
+ ldr r2, [sp, 0x8]\n\
+ bl sub_81141F0\n\
+ b _081141B4\n\
+ .align 2, 0\n\
+_08114164: .4byte 0x02014800\n\
+_08114168: .4byte 0x000030c4\n\
+_0811416C: .4byte 0x020168c4\n\
+_08114170: .4byte 0x000038c4\n\
+_08114174: .4byte 0x020170c4\n\
+_08114178: .4byte 0x02014804\n\
+_0811417C: .4byte 0x000020c4\n\
+_08114180: .4byte 0x000028c4\n\
+_08114184:\n\
+ ldr r5, _081141E0 @ =0x000010c4\n\
+ adds r1, r4, r5\n\
+ adds r1, r2, r1\n\
+ ldr r5, _081141E4 @ =0x000018c4\n\
+ adds r0, r4, r5\n\
+ adds r0, r2, r0\n\
+ ldrb r0, [r0]\n\
+ ldrb r2, [r1]\n\
+ subs r0, r2\n\
+ lsrs r1, r0, 31\n\
+ adds r0, r1\n\
+ asrs r0, 1\n\
+ adds r2, r0\n\
+ strb r2, [r3]\n\
+ mov r0, r10\n\
+ strb r2, [r0]\n\
+ ldrb r0, [r3]\n\
+ subs r0, 0x1\n\
+ strb r0, [r3]\n\
+ adds r0, r6, 0\n\
+ adds r1, r6, 0\n\
+ ldr r2, [sp, 0x8]\n\
+ bl sub_81141F0\n\
+_081141B4:\n\
+ adds r6, 0x1\n\
+ ldr r4, _081141E8 @ =0x02014800\n\
+ ldr r1, [sp, 0x8]\n\
+ ldr r2, _081141EC @ =0x02014804\n\
+ adds r0, r1, r2\n\
+ ldrb r0, [r0]\n\
+ cmp r6, r0\n\
+ blt _0811411E\n\
+_081141C4:\n\
+ ldr r3, [sp, 0x30]\n\
+ str r3, [sp, 0x8]\n\
+ cmp r3, 0x3F\n\
+ bgt _081141CE\n\
+ b _08113E3A\n\
+_081141CE:\n\
+ add sp, 0x3C\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\
+ .align 2, 0\n\
+_081141E0: .4byte 0x000010c4\n\
+_081141E4: .4byte 0x000018c4\n\
+_081141E8: .4byte 0x02014800\n\
+_081141EC: .4byte 0x02014804\n\
+ .syntax divided");
+}
+
+void sub_81141F0(s32 a, s32 b, s32 c)
+{
+ u32 r7;
+
+ sEvoInfo.unk30C4[c][b] = sEvoInfo.unk10C4[c][a];
+ sEvoInfo.unk38C4[c][b] = sEvoInfo.unk18C4[c][a];
+
+ r7 = 0;
+ if (sEvoInfo.unk10C4[c][a] < sEvoInfo.unk20C4[c][b])
+ {
+ sEvoInfo.unkC4[c][b] = 4;
+ r7 = sEvoInfo.unk20C4[c][b] - sEvoInfo.unk10C4[c][a];
+ }
+ else if (sEvoInfo.unk10C4[c][a] > sEvoInfo.unk20C4[c][b])
+ {
+ sEvoInfo.unkC4[c][b] = 1;
+ r7 = sEvoInfo.unk10C4[c][a] - sEvoInfo.unk20C4[c][b];
+ }
+ sEvoInfo.unk80C4[c][b] = r7 * 16;
+
+ r7 = 0;
+ if (sEvoInfo.unk18C4[c][a] < sEvoInfo.unk28C4[c][b])
+ {
+ sEvoInfo.unk8C4[c][b] = 3;
+ r7 = sEvoInfo.unk28C4[c][b] - sEvoInfo.unk18C4[c][a];
+ }
+ else if (sEvoInfo.unk18C4[c][a] > sEvoInfo.unk28C4[c][b])
+ {
+ sEvoInfo.unk8C4[c][b] = 2;
+ r7 = sEvoInfo.unk18C4[c][a] - sEvoInfo.unk28C4[c][b];
+ }
+ sEvoInfo.unk90C4[c][b] = r7 * 16;
+
+ sEvoInfo.unk84[c]++;
+}
+
+void sub_811430C(u32 a, u32 b)
+{
+ u8 r2 = sEvoInfo.unk28C4[b][a];
+ u8 r3 = sEvoInfo.unk20C4[b][a];
+ s32 r7 = r2 - r3;
+
+ sEvoInfo.unk30C4[b][a] = sEvoInfo.unk38C4[b][a] = r3 + r7 / 2;
+ sEvoInfo.unkC4[b][a] = 5;
+ sEvoInfo.unk8C4[b][a] = 7;
+ sEvoInfo.unk84[b]++;
+ r7 = sEvoInfo.unk30C4[b][a] - sEvoInfo.unk20C4[b][a];
+ sEvoInfo.unk80C4[b][a] = r7 * 16;
+ r7 = sEvoInfo.unk28C4[b][a] - sEvoInfo.unk38C4[b][a];
+ sEvoInfo.unk90C4[b][a] = r7 * 16;
+}
+
+__attribute__((naked))
+void unref_sub_81143CC()
+{
+ 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, 0x14\n\
+ movs r0, 0x1\n\
+ str r0, [sp, 0x4]\n\
+ ldr r0, _08114408 @ =0x02014800\n\
+ ldr r2, _0811440C @ =0x0000a0c4\n\
+ adds r1, r0, r2\n\
+ ldrb r3, [r1]\n\
+ adds r4, r0, 0\n\
+ cmp r3, 0\n\
+ beq _081143EE\n\
+ subs r0, r3, 0x1\n\
+ strb r0, [r1]\n\
+_081143EE:\n\
+ movs r5, 0\n\
+ str r5, [sp]\n\
+_081143F2:\n\
+ movs r3, 0\n\
+ adds r2, r4, 0\n\
+ adds r0, r4, 0\n\
+ adds r0, 0x84\n\
+ ldr r1, [sp]\n\
+ adds r0, r1, r0\n\
+ adds r1, 0x1\n\
+ str r1, [sp, 0x8]\n\
+ bl _08114D84\n\
+ .align 2, 0\n\
+_08114408: .4byte 0x02014800\n\
+_0811440C: .4byte 0x0000a0c4\n\
+_08114410:\n\
+ ldr r5, [sp]\n\
+ lsls r0, r5, 5\n\
+ adds r1, r3, r0\n\
+ adds r2, 0xC4\n\
+ adds r1, r2\n\
+ ldrb r2, [r1]\n\
+ mov r8, r0\n\
+ adds r0, r3, 0x1\n\
+ mov r10, r0\n\
+ cmp r2, 0xC\n\
+ bls _08114428\n\
+ b _081148D2\n\
+_08114428:\n\
+ lsls r0, r2, 2\n\
+ ldr r1, _08114434 @ =_08114438\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ mov pc, r0\n\
+ .align 2, 0\n\
+_08114434: .4byte _08114438\n\
+ .align 2, 0\n\
+_08114438:\n\
+ .4byte _081148D2\n\
+ .4byte _0811446C\n\
+ .4byte _081144F0\n\
+ .4byte _0811457C\n\
+ .4byte _08114600\n\
+ .4byte _0811468C\n\
+ .4byte _081146C8\n\
+ .4byte _08114704\n\
+ .4byte _08114740\n\
+ .4byte _0811477C\n\
+ .4byte _081147D0\n\
+ .4byte _08114810\n\
+ .4byte _08114858\n\
+_0811446C:\n\
+ movs r1, 0\n\
+ str r1, [sp, 0x4]\n\
+ lsls r0, r3, 1\n\
+ ldr r2, [sp]\n\
+ lsls r1, r2, 6\n\
+ adds r0, r1\n\
+ ldr r5, _081144E0 @ =0x000060c4\n\
+ adds r2, r4, r5\n\
+ adds r2, r0, r2\n\
+ ldr r5, _081144E4 @ =0x000080c4\n\
+ adds r1, r4, r5\n\
+ adds r0, r1\n\
+ ldrh r1, [r0]\n\
+ ldrh r0, [r2]\n\
+ adds r1, r0\n\
+ movs r0, 0xFF\n\
+ lsls r0, 8\n\
+ ands r0, r1\n\
+ lsrs r5, r0, 8\n\
+ movs r0, 0xFF\n\
+ ands r1, r0\n\
+ strh r1, [r2]\n\
+ movs r6, 0\n\
+ adds r1, r3, 0x1\n\
+ mov r10, r1\n\
+ ldr r2, [sp, 0x4]\n\
+ cmp r2, r5\n\
+ blt _081144A6\n\
+ b _081148D2\n\
+_081144A6:\n\
+ mov r9, r4\n\
+ mov r4, r8\n\
+ adds r7, r3, r4\n\
+ ldr r0, _081144E8 @ =0x000030c4\n\
+ add r0, r9\n\
+ adds r4, r7, r0\n\
+ ldr r0, _081144EC @ =0x000020c4\n\
+ add r0, r9\n\
+ adds r2, r7, r0\n\
+_081144B8:\n\
+ ldrb r0, [r4]\n\
+ subs r0, 0x1\n\
+ strb r0, [r4]\n\
+ ldrb r1, [r4]\n\
+ ldr r0, [sp]\n\
+ str r2, [sp, 0xC]\n\
+ str r3, [sp, 0x10]\n\
+ bl sub_8114DB4\n\
+ ldrb r0, [r4]\n\
+ ldr r2, [sp, 0xC]\n\
+ ldr r3, [sp, 0x10]\n\
+ ldrb r1, [r2]\n\
+ cmp r0, r1\n\
+ bne _081144D8\n\
+ b _081148A0\n\
+_081144D8:\n\
+ adds r6, 0x1\n\
+ cmp r6, r5\n\
+ blt _081144B8\n\
+ b _081148D2\n\
+ .align 2, 0\n\
+_081144E0: .4byte 0x000060c4\n\
+_081144E4: .4byte 0x000080c4\n\
+_081144E8: .4byte 0x000030c4\n\
+_081144EC: .4byte 0x000020c4\n\
+_081144F0:\n\
+ movs r2, 0\n\
+ str r2, [sp, 0x4]\n\
+ ldr r4, _08114568 @ =0x02014800\n\
+ lsls r0, r3, 1\n\
+ ldr r5, [sp]\n\
+ lsls r1, r5, 6\n\
+ adds r0, r1\n\
+ ldr r1, _0811456C @ =0x000060c4\n\
+ adds r2, r4, r1\n\
+ adds r2, r0, r2\n\
+ ldr r5, _08114570 @ =0x000080c4\n\
+ adds r1, r4, r5\n\
+ adds r0, r1\n\
+ ldrh r1, [r0]\n\
+ ldrh r0, [r2]\n\
+ adds r1, r0\n\
+ movs r0, 0xFF\n\
+ lsls r0, 8\n\
+ ands r0, r1\n\
+ lsrs r5, r0, 8\n\
+ movs r0, 0xFF\n\
+ ands r1, r0\n\
+ strh r1, [r2]\n\
+ movs r6, 0\n\
+ adds r1, r3, 0x1\n\
+ mov r10, r1\n\
+ ldr r2, [sp, 0x4]\n\
+ cmp r2, r5\n\
+ blt _0811452C\n\
+ b _081148D2\n\
+_0811452C:\n\
+ mov r9, r4\n\
+ mov r4, r8\n\
+ adds r7, r3, r4\n\
+ ldr r0, _08114574 @ =0x000030c4\n\
+ add r0, r9\n\
+ adds r4, r7, r0\n\
+ ldr r0, _08114578 @ =0x000020c4\n\
+ add r0, r9\n\
+ adds r2, r7, r0\n\
+_0811453E:\n\
+ ldrb r0, [r4]\n\
+ ldrb r1, [r2]\n\
+ cmp r0, r1\n\
+ bne _08114548\n\
+ b _081148B8\n\
+_08114548:\n\
+ adds r1, r0, 0\n\
+ ldr r0, [sp]\n\
+ str r2, [sp, 0xC]\n\
+ str r3, [sp, 0x10]\n\
+ bl sub_8114DF0\n\
+ ldrb r0, [r4]\n\
+ subs r0, 0x1\n\
+ strb r0, [r4]\n\
+ adds r6, 0x1\n\
+ ldr r2, [sp, 0xC]\n\
+ ldr r3, [sp, 0x10]\n\
+ cmp r6, r5\n\
+ blt _0811453E\n\
+ b _081148D2\n\
+ .align 2, 0\n\
+_08114568: .4byte 0x02014800\n\
+_0811456C: .4byte 0x000060c4\n\
+_08114570: .4byte 0x000080c4\n\
+_08114574: .4byte 0x000030c4\n\
+_08114578: .4byte 0x000020c4\n\
+_0811457C:\n\
+ movs r2, 0\n\
+ str r2, [sp, 0x4]\n\
+ lsls r0, r3, 1\n\
+ ldr r5, [sp]\n\
+ lsls r1, r5, 6\n\
+ adds r0, r1\n\
+ ldr r1, _081145F0 @ =0x000060c4\n\
+ adds r2, r4, r1\n\
+ adds r2, r0, r2\n\
+ ldr r5, _081145F4 @ =0x000080c4\n\
+ adds r1, r4, r5\n\
+ adds r0, r1\n\
+ ldrh r1, [r0]\n\
+ ldrh r0, [r2]\n\
+ adds r1, r0\n\
+ movs r0, 0xFF\n\
+ lsls r0, 8\n\
+ ands r0, r1\n\
+ lsrs r5, r0, 8\n\
+ movs r0, 0xFF\n\
+ ands r1, r0\n\
+ strh r1, [r2]\n\
+ movs r6, 0\n\
+ adds r1, r3, 0x1\n\
+ mov r10, r1\n\
+ ldr r2, [sp, 0x4]\n\
+ cmp r2, r5\n\
+ blt _081145B6\n\
+ b _081148D2\n\
+_081145B6:\n\
+ mov r9, r4\n\
+ mov r4, r8\n\
+ adds r7, r3, r4\n\
+ ldr r0, _081145F8 @ =0x000030c4\n\
+ add r0, r9\n\
+ adds r4, r7, r0\n\
+ ldr r0, _081145FC @ =0x000020c4\n\
+ add r0, r9\n\
+ adds r2, r7, r0\n\
+_081145C8:\n\
+ ldrb r0, [r4]\n\
+ adds r0, 0x1\n\
+ strb r0, [r4]\n\
+ ldrb r1, [r4]\n\
+ ldr r0, [sp]\n\
+ str r2, [sp, 0xC]\n\
+ str r3, [sp, 0x10]\n\
+ bl sub_8114DB4\n\
+ ldrb r0, [r4]\n\
+ ldr r2, [sp, 0xC]\n\
+ ldr r3, [sp, 0x10]\n\
+ ldrb r1, [r2]\n\
+ cmp r0, r1\n\
+ bne _081145E8\n\
+ b _081148AC\n\
+_081145E8:\n\
+ adds r6, 0x1\n\
+ cmp r6, r5\n\
+ blt _081145C8\n\
+ b _081148D2\n\
+ .align 2, 0\n\
+_081145F0: .4byte 0x000060c4\n\
+_081145F4: .4byte 0x000080c4\n\
+_081145F8: .4byte 0x000030c4\n\
+_081145FC: .4byte 0x000020c4\n\
+_08114600:\n\
+ movs r2, 0\n\
+ str r2, [sp, 0x4]\n\
+ ldr r4, _08114678 @ =0x02014800\n\
+ lsls r0, r3, 1\n\
+ ldr r5, [sp]\n\
+ lsls r1, r5, 6\n\
+ adds r0, r1\n\
+ ldr r1, _0811467C @ =0x000060c4\n\
+ adds r2, r4, r1\n\
+ adds r2, r0, r2\n\
+ ldr r5, _08114680 @ =0x000080c4\n\
+ adds r1, r4, r5\n\
+ adds r0, r1\n\
+ ldrh r1, [r0]\n\
+ ldrh r0, [r2]\n\
+ adds r1, r0\n\
+ movs r0, 0xFF\n\
+ lsls r0, 8\n\
+ ands r0, r1\n\
+ lsrs r5, r0, 8\n\
+ movs r0, 0xFF\n\
+ ands r1, r0\n\
+ strh r1, [r2]\n\
+ movs r6, 0\n\
+ adds r1, r3, 0x1\n\
+ mov r10, r1\n\
+ ldr r2, [sp, 0x4]\n\
+ cmp r2, r5\n\
+ blt _0811463C\n\
+ b _081148D2\n\
+_0811463C:\n\
+ mov r9, r4\n\
+ mov r4, r8\n\
+ adds r7, r3, r4\n\
+ ldr r0, _08114684 @ =0x000030c4\n\
+ add r0, r9\n\
+ adds r4, r7, r0\n\
+ ldr r0, _08114688 @ =0x000020c4\n\
+ add r0, r9\n\
+ adds r2, r7, r0\n\
+_0811464E:\n\
+ ldrb r0, [r4]\n\
+ ldrb r1, [r2]\n\
+ cmp r0, r1\n\
+ bne _08114658\n\
+ b _081148B8\n\
+_08114658:\n\
+ adds r1, r0, 0\n\
+ ldr r0, [sp]\n\
+ str r2, [sp, 0xC]\n\
+ str r3, [sp, 0x10]\n\
+ bl sub_8114DF0\n\
+ ldrb r0, [r4]\n\
+ adds r0, 0x1\n\
+ strb r0, [r4]\n\
+ adds r6, 0x1\n\
+ ldr r2, [sp, 0xC]\n\
+ ldr r3, [sp, 0x10]\n\
+ cmp r6, r5\n\
+ blt _0811464E\n\
+ b _081148D2\n\
+ .align 2, 0\n\
+_08114678: .4byte 0x02014800\n\
+_0811467C: .4byte 0x000060c4\n\
+_08114680: .4byte 0x000080c4\n\
+_08114684: .4byte 0x000030c4\n\
+_08114688: .4byte 0x000020c4\n\
+_0811468C:\n\
+ movs r2, 0\n\
+ str r2, [sp, 0x4]\n\
+ ldr r5, _081146C0 @ =0x02014800\n\
+ mov r0, r8\n\
+ adds r4, r3, r0\n\
+ ldr r1, _081146C4 @ =0x000030c4\n\
+ adds r0, r5, r1\n\
+ adds r0, r4, r0\n\
+ ldrb r1, [r0]\n\
+ ldr r0, [sp]\n\
+ str r3, [sp, 0x10]\n\
+ bl sub_8114E48\n\
+ lsls r0, 24\n\
+ ldr r3, [sp, 0x10]\n\
+ adds r2, r3, 0x1\n\
+ mov r10, r2\n\
+ cmp r0, 0\n\
+ bne _081146B4\n\
+ b _081148D2\n\
+_081146B4:\n\
+ adds r0, r5, 0\n\
+ adds r0, 0xC4\n\
+ adds r0, r4, r0\n\
+ movs r1, 0x9\n\
+ strb r1, [r0]\n\
+ b _081148D2\n\
+ .align 2, 0\n\
+_081146C0: .4byte 0x02014800\n\
+_081146C4: .4byte 0x000030c4\n\
+_081146C8:\n\
+ movs r4, 0\n\
+ str r4, [sp, 0x4]\n\
+ ldr r5, _081146FC @ =0x02014800\n\
+ mov r0, r8\n\
+ adds r4, r3, r0\n\
+ ldr r1, _08114700 @ =0x000030c4\n\
+ adds r0, r5, r1\n\
+ adds r0, r4, r0\n\
+ ldrb r1, [r0]\n\
+ ldr r0, [sp]\n\
+ str r3, [sp, 0x10]\n\
+ bl sub_8114E48\n\
+ lsls r0, 24\n\
+ ldr r3, [sp, 0x10]\n\
+ adds r2, r3, 0x1\n\
+ mov r10, r2\n\
+ cmp r0, 0\n\
+ bne _081146F0\n\
+ b _081148D2\n\
+_081146F0:\n\
+ adds r0, r5, 0\n\
+ adds r0, 0xC4\n\
+ adds r0, r4, r0\n\
+ movs r1, 0xA\n\
+ strb r1, [r0]\n\
+ b _081148D2\n\
+ .align 2, 0\n\
+_081146FC: .4byte 0x02014800\n\
+_08114700: .4byte 0x000030c4\n\
+_08114704:\n\
+ movs r4, 0\n\
+ str r4, [sp, 0x4]\n\
+ ldr r5, _08114738 @ =0x02014800\n\
+ mov r0, r8\n\
+ adds r4, r3, r0\n\
+ ldr r1, _0811473C @ =0x000030c4\n\
+ adds r0, r5, r1\n\
+ adds r0, r4, r0\n\
+ ldrb r1, [r0]\n\
+ ldr r0, [sp]\n\
+ str r3, [sp, 0x10]\n\
+ bl sub_8114E48\n\
+ lsls r0, 24\n\
+ ldr r3, [sp, 0x10]\n\
+ adds r2, r3, 0x1\n\
+ mov r10, r2\n\
+ cmp r0, 0\n\
+ bne _0811472C\n\
+ b _081148D2\n\
+_0811472C:\n\
+ adds r0, r5, 0\n\
+ adds r0, 0xC4\n\
+ adds r0, r4, r0\n\
+ movs r1, 0xB\n\
+ strb r1, [r0]\n\
+ b _081148D2\n\
+ .align 2, 0\n\
+_08114738: .4byte 0x02014800\n\
+_0811473C: .4byte 0x000030c4\n\
+_08114740:\n\
+ movs r4, 0\n\
+ str r4, [sp, 0x4]\n\
+ ldr r5, _08114774 @ =0x02014800\n\
+ mov r0, r8\n\
+ adds r4, r3, r0\n\
+ ldr r1, _08114778 @ =0x000030c4\n\
+ adds r0, r5, r1\n\
+ adds r0, r4, r0\n\
+ ldrb r1, [r0]\n\
+ ldr r0, [sp]\n\
+ str r3, [sp, 0x10]\n\
+ bl sub_8114E48\n\
+ lsls r0, 24\n\
+ ldr r3, [sp, 0x10]\n\
+ adds r2, r3, 0x1\n\
+ mov r10, r2\n\
+ cmp r0, 0\n\
+ bne _08114768\n\
+ b _081148D2\n\
+_08114768:\n\
+ adds r0, r5, 0\n\
+ adds r0, 0xC4\n\
+ adds r0, r4, r0\n\
+ movs r1, 0xC\n\
+ strb r1, [r0]\n\
+ b _081148D2\n\
+ .align 2, 0\n\
+_08114774: .4byte 0x02014800\n\
+_08114778: .4byte 0x000030c4\n\
+_0811477C:\n\
+ movs r4, 0\n\
+ str r4, [sp, 0x4]\n\
+ ldr r6, _081147B4 @ =0x02014800\n\
+ mov r0, r8\n\
+ adds r5, r3, r0\n\
+ ldr r1, _081147B8 @ =0x000030c4\n\
+ adds r4, r6, r1\n\
+ adds r4, r5, r4\n\
+ ldrb r1, [r4]\n\
+ ldr r0, [sp]\n\
+ str r3, [sp, 0x10]\n\
+ bl sub_8114DB4\n\
+ ldr r2, _081147BC @ =0x000020c4\n\
+ adds r0, r6, r2\n\
+ adds r0, r5, r0\n\
+ ldrb r1, [r4]\n\
+ ldr r3, [sp, 0x10]\n\
+ ldrb r0, [r0]\n\
+ cmp r1, r0\n\
+ bne _081147C0\n\
+ adds r0, r6, 0\n\
+ adds r0, 0xC4\n\
+ adds r0, r5, r0\n\
+ mov r4, sp\n\
+ ldrb r4, [r4, 0x4]\n\
+ strb r4, [r0]\n\
+ b _08114844\n\
+ .align 2, 0\n\
+_081147B4: .4byte 0x02014800\n\
+_081147B8: .4byte 0x000030c4\n\
+_081147BC: .4byte 0x000020c4\n\
+_081147C0:\n\
+ adds r0, r6, 0\n\
+ adds r0, 0xC4\n\
+ adds r0, r5, r0\n\
+ movs r1, 0x1\n\
+ strb r1, [r0]\n\
+ adds r0, r3, 0x1\n\
+ mov r10, r0\n\
+ b _081148D2\n\
+_081147D0:\n\
+ movs r1, 0\n\
+ str r1, [sp, 0x4]\n\
+ ldr r6, _08114804 @ =0x02014800\n\
+ mov r2, r8\n\
+ adds r5, r3, r2\n\
+ ldr r0, _08114808 @ =0x000030c4\n\
+ adds r4, r6, r0\n\
+ adds r4, r5, r4\n\
+ ldrb r1, [r4]\n\
+ ldr r0, [sp]\n\
+ str r3, [sp, 0x10]\n\
+ bl sub_8114DF0\n\
+ ldr r1, _0811480C @ =0x000020c4\n\
+ adds r0, r6, r1\n\
+ adds r0, r5, r0\n\
+ ldrb r1, [r4]\n\
+ ldr r3, [sp, 0x10]\n\
+ ldrb r0, [r0]\n\
+ cmp r1, r0\n\
+ beq _08114882\n\
+ adds r0, r6, 0\n\
+ adds r0, 0xC4\n\
+ adds r0, r5, r0\n\
+ movs r1, 0x2\n\
+ b _08114842\n\
+ .align 2, 0\n\
+_08114804: .4byte 0x02014800\n\
+_08114808: .4byte 0x000030c4\n\
+_0811480C: .4byte 0x000020c4\n\
+_08114810:\n\
+ movs r0, 0\n\
+ str r0, [sp, 0x4]\n\
+ ldr r6, _0811484C @ =0x02014800\n\
+ mov r1, r8\n\
+ adds r5, r3, r1\n\
+ ldr r2, _08114850 @ =0x000030c4\n\
+ adds r4, r6, r2\n\
+ adds r4, r5, r4\n\
+ ldrb r1, [r4]\n\
+ ldr r0, [sp]\n\
+ str r3, [sp, 0x10]\n\
+ bl sub_8114DB4\n\
+ ldr r1, _08114854 @ =0x000020c4\n\
+ adds r0, r6, r1\n\
+ adds r0, r5, r0\n\
+ ldrb r1, [r4]\n\
+ ldr r3, [sp, 0x10]\n\
+ ldrb r0, [r0]\n\
+ cmp r1, r0\n\
+ beq _08114882\n\
+ adds r0, r6, 0\n\
+ adds r0, 0xC4\n\
+ adds r0, r5, r0\n\
+ movs r1, 0x3\n\
+_08114842:\n\
+ strb r1, [r0]\n\
+_08114844:\n\
+ adds r5, r3, 0x1\n\
+ mov r10, r5\n\
+ b _081148D2\n\
+ .align 2, 0\n\
+_0811484C: .4byte 0x02014800\n\
+_08114850: .4byte 0x000030c4\n\
+_08114854: .4byte 0x000020c4\n\
+_08114858:\n\
+ movs r0, 0\n\
+ str r0, [sp, 0x4]\n\
+ ldr r6, _08114894 @ =0x02014800\n\
+ mov r1, r8\n\
+ adds r5, r3, r1\n\
+ ldr r2, _08114898 @ =0x000030c4\n\
+ adds r4, r6, r2\n\
+ adds r4, r5, r4\n\
+ ldrb r1, [r4]\n\
+ ldr r0, [sp]\n\
+ str r3, [sp, 0x10]\n\
+ bl sub_8114DF0\n\
+ ldr r1, _0811489C @ =0x000020c4\n\
+ adds r0, r6, r1\n\
+ adds r0, r5, r0\n\
+ ldrb r1, [r4]\n\
+ ldr r3, [sp, 0x10]\n\
+ ldrb r0, [r0]\n\
+ cmp r1, r0\n\
+ bne _081148C4\n\
+_08114882:\n\
+ adds r0, r6, 0\n\
+ adds r0, 0xC4\n\
+ adds r0, r5, r0\n\
+ mov r2, sp\n\
+ ldrb r2, [r2, 0x4]\n\
+ strb r2, [r0]\n\
+ adds r4, r3, 0x1\n\
+ mov r10, r4\n\
+ b _081148D2\n\
+ .align 2, 0\n\
+_08114894: .4byte 0x02014800\n\
+_08114898: .4byte 0x000030c4\n\
+_0811489C: .4byte 0x000020c4\n\
+_081148A0:\n\
+ mov r0, r9\n\
+ adds r0, 0xC4\n\
+ adds r0, r7, r0\n\
+ movs r5, 0\n\
+ strb r5, [r0]\n\
+ b _081148D2\n\
+_081148AC:\n\
+ mov r0, r9\n\
+ adds r0, 0xC4\n\
+ adds r0, r7, r0\n\
+ movs r1, 0\n\
+ strb r1, [r0]\n\
+ b _081148D2\n\
+_081148B8:\n\
+ mov r0, r9\n\
+ adds r0, 0xC4\n\
+ adds r0, r7, r0\n\
+ movs r1, 0\n\
+ strb r1, [r0]\n\
+ b _081148D2\n\
+_081148C4:\n\
+ adds r0, r6, 0\n\
+ adds r0, 0xC4\n\
+ adds r0, r5, r0\n\
+ movs r1, 0x4\n\
+ strb r1, [r0]\n\
+ adds r2, r3, 0x1\n\
+ mov r10, r2\n\
+_081148D2:\n\
+ ldr r0, _081148F4 @ =0x02014800\n\
+ mov r4, r8\n\
+ adds r1, r3, r4\n\
+ ldr r5, _081148F8 @ =0x000008c4\n\
+ adds r2, r0, r5\n\
+ adds r1, r2\n\
+ ldrb r1, [r1]\n\
+ adds r4, r0, 0\n\
+ cmp r1, 0xC\n\
+ bls _081148E8\n\
+ b _08114D76\n\
+_081148E8:\n\
+ lsls r0, r1, 2\n\
+ ldr r1, _081148FC @ =_08114900\n\
+ adds r0, r1\n\
+ ldr r0, [r0]\n\
+ mov pc, r0\n\
+ .align 2, 0\n\
+_081148F4: .4byte 0x02014800\n\
+_081148F8: .4byte 0x000008c4\n\
+_081148FC: .4byte _08114900\n\
+ .align 2, 0\n\
+_08114900:\n\
+ .4byte _08114D76\n\
+ .4byte _08114934\n\
+ .4byte _081149B8\n\
+ .4byte _08114A3C\n\
+ .4byte _08114AC0\n\
+ .4byte _08114B44\n\
+ .4byte _08114B7C\n\
+ .4byte _08114BB4\n\
+ .4byte _08114BEC\n\
+ .4byte _08114C24\n\
+ .4byte _08114C78\n\
+ .4byte _08114CB8\n\
+ .4byte _08114CF8\n\
+_08114934:\n\
+ movs r0, 0\n\
+ str r0, [sp, 0x4]\n\
+ lsls r0, r3, 1\n\
+ ldr r2, [sp]\n\
+ lsls r1, r2, 6\n\
+ adds r0, r1\n\
+ ldr r5, _081149A8 @ =0x000070c4\n\
+ adds r2, r4, r5\n\
+ adds r2, r0, r2\n\
+ ldr r5, _081149AC @ =0x000090c4\n\
+ adds r1, r4, r5\n\
+ adds r0, r1\n\
+ ldrh r1, [r0]\n\
+ ldrh r0, [r2]\n\
+ adds r1, r0\n\
+ movs r0, 0xFF\n\
+ lsls r0, 8\n\
+ ands r0, r1\n\
+ lsrs r5, r0, 8\n\
+ movs r0, 0xFF\n\
+ ands r1, r0\n\
+ strh r1, [r2]\n\
+ movs r6, 0\n\
+ ldr r1, [sp, 0x4]\n\
+ cmp r1, r5\n\
+ blt _0811496A\n\
+ b _08114D76\n\
+_0811496A:\n\
+ mov r9, r4\n\
+ mov r2, r8\n\
+ adds r7, r3, r2\n\
+ ldr r0, _081149B0 @ =0x000038c4\n\
+ add r0, r9\n\
+ adds r4, r7, r0\n\
+ movs r3, 0\n\
+ ldr r0, _081149B4 @ =0x000028c4\n\
+ add r0, r9\n\
+ adds r2, r7, r0\n\
+_0811497E:\n\
+ ldrb r0, [r4]\n\
+ subs r0, 0x1\n\
+ strb r0, [r4]\n\
+ ldrb r1, [r4]\n\
+ ldr r0, [sp]\n\
+ str r2, [sp, 0xC]\n\
+ str r3, [sp, 0x10]\n\
+ bl sub_8114DB4\n\
+ ldrb r0, [r4]\n\
+ ldr r2, [sp, 0xC]\n\
+ ldr r3, [sp, 0x10]\n\
+ ldrb r1, [r2]\n\
+ cmp r0, r1\n\
+ bne _0811499E\n\
+ b _08114D4C\n\
+_0811499E:\n\
+ adds r6, 0x1\n\
+ cmp r6, r5\n\
+ blt _0811497E\n\
+ b _08114D76\n\
+ .align 2, 0\n\
+_081149A8: .4byte 0x000070c4\n\
+_081149AC: .4byte 0x000090c4\n\
+_081149B0: .4byte 0x000038c4\n\
+_081149B4: .4byte 0x000028c4\n\
+_081149B8:\n\
+ movs r2, 0\n\
+ str r2, [sp, 0x4]\n\
+ ldr r4, _08114A28 @ =0x02014800\n\
+ lsls r0, r3, 1\n\
+ ldr r5, [sp]\n\
+ lsls r1, r5, 6\n\
+ adds r0, r1\n\
+ ldr r1, _08114A2C @ =0x000070c4\n\
+ adds r2, r4, r1\n\
+ adds r2, r0, r2\n\
+ ldr r5, _08114A30 @ =0x000090c4\n\
+ adds r1, r4, r5\n\
+ adds r0, r1\n\
+ ldrh r1, [r0]\n\
+ ldrh r0, [r2]\n\
+ adds r1, r0\n\
+ movs r0, 0xFF\n\
+ lsls r0, 8\n\
+ ands r0, r1\n\
+ lsrs r5, r0, 8\n\
+ movs r0, 0xFF\n\
+ ands r1, r0\n\
+ strh r1, [r2]\n\
+ movs r6, 0\n\
+ ldr r1, [sp, 0x4]\n\
+ cmp r1, r5\n\
+ blt _081149F0\n\
+ b _08114D76\n\
+_081149F0:\n\
+ mov r9, r4\n\
+ mov r2, r8\n\
+ adds r7, r3, r2\n\
+ ldr r0, _08114A34 @ =0x000038c4\n\
+ add r0, r9\n\
+ adds r4, r7, r0\n\
+ ldr r0, _08114A38 @ =0x000028c4\n\
+ add r0, r9\n\
+ adds r2, r7, r0\n\
+_08114A02:\n\
+ ldrb r0, [r4]\n\
+ ldrb r1, [r2]\n\
+ cmp r0, r1\n\
+ bne _08114A0C\n\
+ b _08114D3C\n\
+_08114A0C:\n\
+ adds r1, r0, 0\n\
+ ldr r0, [sp]\n\
+ str r2, [sp, 0xC]\n\
+ bl sub_8114DF0\n\
+ ldrb r0, [r4]\n\
+ subs r0, 0x1\n\
+ strb r0, [r4]\n\
+ adds r6, 0x1\n\
+ ldr r2, [sp, 0xC]\n\
+ cmp r6, r5\n\
+ blt _08114A02\n\
+ b _08114D76\n\
+ .align 2, 0\n\
+_08114A28: .4byte 0x02014800\n\
+_08114A2C: .4byte 0x000070c4\n\
+_08114A30: .4byte 0x000090c4\n\
+_08114A34: .4byte 0x000038c4\n\
+_08114A38: .4byte 0x000028c4\n\
+_08114A3C:\n\
+ movs r2, 0\n\
+ str r2, [sp, 0x4]\n\
+ lsls r0, r3, 1\n\
+ ldr r5, [sp]\n\
+ lsls r1, r5, 6\n\
+ adds r0, r1\n\
+ ldr r1, _08114AB0 @ =0x000070c4\n\
+ adds r2, r4, r1\n\
+ adds r2, r0, r2\n\
+ ldr r5, _08114AB4 @ =0x000090c4\n\
+ adds r1, r4, r5\n\
+ adds r0, r1\n\
+ ldrh r1, [r0]\n\
+ ldrh r0, [r2]\n\
+ adds r1, r0\n\
+ movs r0, 0xFF\n\
+ lsls r0, 8\n\
+ ands r0, r1\n\
+ lsrs r5, r0, 8\n\
+ movs r0, 0xFF\n\
+ ands r1, r0\n\
+ strh r1, [r2]\n\
+ movs r6, 0\n\
+ ldr r1, [sp, 0x4]\n\
+ cmp r1, r5\n\
+ blt _08114A72\n\
+ b _08114D76\n\
+_08114A72:\n\
+ mov r9, r4\n\
+ mov r2, r8\n\
+ adds r7, r3, r2\n\
+ ldr r0, _08114AB8 @ =0x000038c4\n\
+ add r0, r9\n\
+ adds r4, r7, r0\n\
+ movs r3, 0\n\
+ ldr r0, _08114ABC @ =0x000028c4\n\
+ add r0, r9\n\
+ adds r2, r7, r0\n\
+_08114A86:\n\
+ ldrb r0, [r4]\n\
+ adds r0, 0x1\n\
+ strb r0, [r4]\n\
+ ldrb r1, [r4]\n\
+ ldr r0, [sp]\n\
+ str r2, [sp, 0xC]\n\
+ str r3, [sp, 0x10]\n\
+ bl sub_8114DB4\n\
+ ldrb r0, [r4]\n\
+ ldr r2, [sp, 0xC]\n\
+ ldr r3, [sp, 0x10]\n\
+ ldrb r1, [r2]\n\
+ cmp r0, r1\n\
+ bne _08114AA6\n\
+ b _08114D4C\n\
+_08114AA6:\n\
+ adds r6, 0x1\n\
+ cmp r6, r5\n\
+ blt _08114A86\n\
+ b _08114D76\n\
+ .align 2, 0\n\
+_08114AB0: .4byte 0x000070c4\n\
+_08114AB4: .4byte 0x000090c4\n\
+_08114AB8: .4byte 0x000038c4\n\
+_08114ABC: .4byte 0x000028c4\n\
+_08114AC0:\n\
+ movs r2, 0\n\
+ str r2, [sp, 0x4]\n\
+ ldr r4, _08114B30 @ =0x02014800\n\
+ lsls r0, r3, 1\n\
+ ldr r5, [sp]\n\
+ lsls r1, r5, 6\n\
+ adds r0, r1\n\
+ ldr r1, _08114B34 @ =0x000070c4\n\
+ adds r2, r4, r1\n\
+ adds r2, r0, r2\n\
+ ldr r5, _08114B38 @ =0x000090c4\n\
+ adds r1, r4, r5\n\
+ adds r0, r1\n\
+ ldrh r1, [r0]\n\
+ ldrh r0, [r2]\n\
+ adds r1, r0\n\
+ movs r0, 0xFF\n\
+ lsls r0, 8\n\
+ ands r0, r1\n\
+ lsrs r5, r0, 8\n\
+ movs r0, 0xFF\n\
+ ands r1, r0\n\
+ strh r1, [r2]\n\
+ movs r6, 0\n\
+ ldr r1, [sp, 0x4]\n\
+ cmp r1, r5\n\
+ blt _08114AF8\n\
+ b _08114D76\n\
+_08114AF8:\n\
+ mov r9, r4\n\
+ mov r2, r8\n\
+ adds r7, r3, r2\n\
+ ldr r0, _08114B3C @ =0x000038c4\n\
+ add r0, r9\n\
+ adds r4, r7, r0\n\
+ ldr r0, _08114B40 @ =0x000028c4\n\
+ add r0, r9\n\
+ adds r2, r7, r0\n\
+_08114B0A:\n\
+ ldrb r0, [r4]\n\
+ ldrb r1, [r2]\n\
+ cmp r0, r1\n\
+ bne _08114B14\n\
+ b _08114D5C\n\
+_08114B14:\n\
+ adds r1, r0, 0\n\
+ ldr r0, [sp]\n\
+ str r2, [sp, 0xC]\n\
+ bl sub_8114DF0\n\
+ ldrb r0, [r4]\n\
+ adds r0, 0x1\n\
+ strb r0, [r4]\n\
+ adds r6, 0x1\n\
+ ldr r2, [sp, 0xC]\n\
+ cmp r6, r5\n\
+ blt _08114B0A\n\
+ b _08114D76\n\
+ .align 2, 0\n\
+_08114B30: .4byte 0x02014800\n\
+_08114B34: .4byte 0x000070c4\n\
+_08114B38: .4byte 0x000090c4\n\
+_08114B3C: .4byte 0x000038c4\n\
+_08114B40: .4byte 0x000028c4\n\
+_08114B44:\n\
+ movs r2, 0\n\
+ str r2, [sp, 0x4]\n\
+ ldr r5, _08114B70 @ =0x02014800\n\
+ mov r0, r8\n\
+ adds r4, r3, r0\n\
+ ldr r1, _08114B74 @ =0x000038c4\n\
+ adds r0, r5, r1\n\
+ adds r0, r4, r0\n\
+ ldrb r1, [r0]\n\
+ ldr r0, [sp]\n\
+ bl sub_8114E48\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ bne _08114B64\n\
+ b _08114D76\n\
+_08114B64:\n\
+ ldr r2, _08114B78 @ =0x000008c4\n\
+ adds r0, r5, r2\n\
+ adds r0, r4, r0\n\
+ movs r1, 0x9\n\
+ b _08114D74\n\
+ .align 2, 0\n\
+_08114B70: .4byte 0x02014800\n\
+_08114B74: .4byte 0x000038c4\n\
+_08114B78: .4byte 0x000008c4\n\
+_08114B7C:\n\
+ movs r4, 0\n\
+ str r4, [sp, 0x4]\n\
+ ldr r5, _08114BA8 @ =0x02014800\n\
+ mov r0, r8\n\
+ adds r4, r3, r0\n\
+ ldr r1, _08114BAC @ =0x000038c4\n\
+ adds r0, r5, r1\n\
+ adds r0, r4, r0\n\
+ ldrb r1, [r0]\n\
+ ldr r0, [sp]\n\
+ bl sub_8114E48\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ bne _08114B9C\n\
+ b _08114D76\n\
+_08114B9C:\n\
+ ldr r2, _08114BB0 @ =0x000008c4\n\
+ adds r0, r5, r2\n\
+ adds r0, r4, r0\n\
+ movs r1, 0xA\n\
+ b _08114D74\n\
+ .align 2, 0\n\
+_08114BA8: .4byte 0x02014800\n\
+_08114BAC: .4byte 0x000038c4\n\
+_08114BB0: .4byte 0x000008c4\n\
+_08114BB4:\n\
+ movs r4, 0\n\
+ str r4, [sp, 0x4]\n\
+ ldr r5, _08114BE0 @ =0x02014800\n\
+ mov r0, r8\n\
+ adds r4, r3, r0\n\
+ ldr r1, _08114BE4 @ =0x000038c4\n\
+ adds r0, r5, r1\n\
+ adds r0, r4, r0\n\
+ ldrb r1, [r0]\n\
+ ldr r0, [sp]\n\
+ bl sub_8114E48\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ bne _08114BD4\n\
+ b _08114D76\n\
+_08114BD4:\n\
+ ldr r2, _08114BE8 @ =0x000008c4\n\
+ adds r0, r5, r2\n\
+ adds r0, r4, r0\n\
+ movs r1, 0xB\n\
+ b _08114D74\n\
+ .align 2, 0\n\
+_08114BE0: .4byte 0x02014800\n\
+_08114BE4: .4byte 0x000038c4\n\
+_08114BE8: .4byte 0x000008c4\n\
+_08114BEC:\n\
+ movs r4, 0\n\
+ str r4, [sp, 0x4]\n\
+ ldr r5, _08114C18 @ =0x02014800\n\
+ mov r0, r8\n\
+ adds r4, r3, r0\n\
+ ldr r1, _08114C1C @ =0x000038c4\n\
+ adds r0, r5, r1\n\
+ adds r0, r4, r0\n\
+ ldrb r1, [r0]\n\
+ ldr r0, [sp]\n\
+ bl sub_8114E48\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ bne _08114C0C\n\
+ b _08114D76\n\
+_08114C0C:\n\
+ ldr r2, _08114C20 @ =0x000008c4\n\
+ adds r0, r5, r2\n\
+ adds r0, r4, r0\n\
+ movs r1, 0xC\n\
+ b _08114D74\n\
+ .align 2, 0\n\
+_08114C18: .4byte 0x02014800\n\
+_08114C1C: .4byte 0x000038c4\n\
+_08114C20: .4byte 0x000008c4\n\
+_08114C24:\n\
+ movs r4, 0\n\
+ str r4, [sp, 0x4]\n\
+ ldr r6, _08114C58 @ =0x02014800\n\
+ mov r0, r8\n\
+ adds r5, r3, r0\n\
+ ldr r1, _08114C5C @ =0x000038c4\n\
+ adds r4, r6, r1\n\
+ adds r4, r5, r4\n\
+ ldrb r1, [r4]\n\
+ ldr r0, [sp]\n\
+ bl sub_8114DB4\n\
+ ldr r2, _08114C60 @ =0x000028c4\n\
+ adds r0, r6, r2\n\
+ adds r0, r5, r0\n\
+ ldrb r1, [r4]\n\
+ ldrb r0, [r0]\n\
+ cmp r1, r0\n\
+ bne _08114C68\n\
+ ldr r4, _08114C64 @ =0x000008c4\n\
+ adds r0, r6, r4\n\
+ adds r0, r5, r0\n\
+ mov r5, sp\n\
+ ldrb r5, [r5, 0x4]\n\
+ strb r5, [r0]\n\
+ b _08114D76\n\
+ .align 2, 0\n\
+_08114C58: .4byte 0x02014800\n\
+_08114C5C: .4byte 0x000038c4\n\
+_08114C60: .4byte 0x000028c4\n\
+_08114C64: .4byte 0x000008c4\n\
+_08114C68:\n\
+ ldr r1, _08114C74 @ =0x000008c4\n\
+ adds r0, r6, r1\n\
+ adds r0, r5, r0\n\
+ movs r1, 0x1\n\
+ b _08114D74\n\
+ .align 2, 0\n\
+_08114C74: .4byte 0x000008c4\n\
+_08114C78:\n\
+ movs r2, 0\n\
+ str r2, [sp, 0x4]\n\
+ ldr r6, _08114CA8 @ =0x02014800\n\
+ mov r4, r8\n\
+ adds r5, r3, r4\n\
+ ldr r0, _08114CAC @ =0x000038c4\n\
+ adds r4, r6, r0\n\
+ adds r4, r5, r4\n\
+ ldrb r1, [r4]\n\
+ ldr r0, [sp]\n\
+ bl sub_8114DF0\n\
+ ldr r1, _08114CB0 @ =0x000028c4\n\
+ adds r0, r6, r1\n\
+ adds r0, r5, r0\n\
+ ldrb r1, [r4]\n\
+ ldrb r0, [r0]\n\
+ cmp r1, r0\n\
+ beq _08114D1E\n\
+ ldr r1, _08114CB4 @ =0x000008c4\n\
+ adds r0, r6, r1\n\
+ adds r0, r5, r0\n\
+ movs r1, 0x2\n\
+ b _08114D74\n\
+ .align 2, 0\n\
+_08114CA8: .4byte 0x02014800\n\
+_08114CAC: .4byte 0x000038c4\n\
+_08114CB0: .4byte 0x000028c4\n\
+_08114CB4: .4byte 0x000008c4\n\
+_08114CB8:\n\
+ movs r2, 0\n\
+ str r2, [sp, 0x4]\n\
+ ldr r6, _08114CE8 @ =0x02014800\n\
+ mov r4, r8\n\
+ adds r5, r3, r4\n\
+ ldr r0, _08114CEC @ =0x000038c4\n\
+ adds r4, r6, r0\n\
+ adds r4, r5, r4\n\
+ ldrb r1, [r4]\n\
+ ldr r0, [sp]\n\
+ bl sub_8114DB4\n\
+ ldr r1, _08114CF0 @ =0x000028c4\n\
+ adds r0, r6, r1\n\
+ adds r0, r5, r0\n\
+ ldrb r1, [r4]\n\
+ ldrb r0, [r0]\n\
+ cmp r1, r0\n\
+ beq _08114D1E\n\
+ ldr r1, _08114CF4 @ =0x000008c4\n\
+ adds r0, r6, r1\n\
+ adds r0, r5, r0\n\
+ movs r1, 0x3\n\
+ b _08114D74\n\
+ .align 2, 0\n\
+_08114CE8: .4byte 0x02014800\n\
+_08114CEC: .4byte 0x000038c4\n\
+_08114CF0: .4byte 0x000028c4\n\
+_08114CF4: .4byte 0x000008c4\n\
+_08114CF8:\n\
+ movs r2, 0\n\
+ str r2, [sp, 0x4]\n\
+ ldr r6, _08114D2C @ =0x02014800\n\
+ mov r4, r8\n\
+ adds r5, r3, r4\n\
+ ldr r0, _08114D30 @ =0x000038c4\n\
+ adds r4, r6, r0\n\
+ adds r4, r5, r4\n\
+ ldrb r1, [r4]\n\
+ ldr r0, [sp]\n\
+ bl sub_8114DF0\n\
+ ldr r1, _08114D34 @ =0x000028c4\n\
+ adds r0, r6, r1\n\
+ adds r0, r5, r0\n\
+ ldrb r1, [r4]\n\
+ ldrb r0, [r0]\n\
+ cmp r1, r0\n\
+ bne _08114D6C\n\
+_08114D1E:\n\
+ ldr r2, _08114D38 @ =0x000008c4\n\
+ adds r0, r6, r2\n\
+ adds r0, r5, r0\n\
+ mov r4, sp\n\
+ ldrb r4, [r4, 0x4]\n\
+ strb r4, [r0]\n\
+ b _08114D76\n\
+ .align 2, 0\n\
+_08114D2C: .4byte 0x02014800\n\
+_08114D30: .4byte 0x000038c4\n\
+_08114D34: .4byte 0x000028c4\n\
+_08114D38: .4byte 0x000008c4\n\
+_08114D3C:\n\
+ ldr r0, _08114D48 @ =0x000008c4\n\
+ add r0, r9\n\
+ adds r0, r7, r0\n\
+ movs r1, 0\n\
+ b _08114D74\n\
+ .align 2, 0\n\
+_08114D48: .4byte 0x000008c4\n\
+_08114D4C:\n\
+ ldr r0, _08114D58 @ =0x000008c4\n\
+ add r0, r9\n\
+ adds r0, r7, r0\n\
+ strb r3, [r0]\n\
+ b _08114D76\n\
+ .align 2, 0\n\
+_08114D58: .4byte 0x000008c4\n\
+_08114D5C:\n\
+ ldr r0, _08114D68 @ =0x000008c4\n\
+ add r0, r9\n\
+ adds r0, r7, r0\n\
+ movs r1, 0\n\
+ b _08114D74\n\
+ .align 2, 0\n\
+_08114D68: .4byte 0x000008c4\n\
+_08114D6C:\n\
+ ldr r1, _08114DAC @ =0x000008c4\n\
+ adds r0, r6, r1\n\
+ adds r0, r5, r0\n\
+ movs r1, 0x4\n\
+_08114D74:\n\
+ strb r1, [r0]\n\
+_08114D76:\n\
+ mov r3, r10\n\
+ ldr r2, _08114DB0 @ =0x02014800\n\
+ adds r0, r2, 0\n\
+ adds r0, 0x84\n\
+ ldr r4, [sp]\n\
+ adds r0, r4, r0\n\
+ adds r4, r2, 0\n\
+_08114D84:\n\
+ ldrb r0, [r0]\n\
+ cmp r3, r0\n\
+ bge _08114D8E\n\
+ bl _08114410\n\
+_08114D8E:\n\
+ ldr r5, [sp, 0x8]\n\
+ str r5, [sp]\n\
+ cmp r5, 0x3F\n\
+ bgt _08114D9A\n\
+ bl _081143F2\n\
+_08114D9A:\n\
+ ldr r0, [sp, 0x4]\n\
+ add sp, 0x14\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\
+ .align 2, 0\n\
+_08114DAC: .4byte 0x000008c4\n\
+_08114DB0: .4byte 0x02014800\n\
+ .syntax divided");
+}
+
+void sub_8114DB4(u32 a, u8 b)
+{
+ u8 *r2 = sEvoInfo.unk40C4[a][b / 2];
+
+ if (b % 2 != 0)
+ *r2 |= 0xF0;
+ else
+ *r2 |= 0x0F;
+}
+
+void sub_8114DF0(u32 a, u8 b)
+{
+ u8 *r2 = sEvoInfo.unk40C4[a][b / 2];
+ u8 *r1 = r2 + 0x6000;
+
+ if (b % 2 != 0)
+ {
+ if (!(*r1 & 0xF0))
+ *r2 &= 0x0F;
+ }
+ else
+ {
+ if (!(*r1 & 0x0F))
+ *r2 &= 0xF0;
+ }
+}
+
+__attribute__((naked))
+void sub_8114E48()
+{
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ adds r4, r0, 0\n\
+ lsls r1, 24\n\
+ lsrs r6, r1, 24\n\
+ ldr r1, _08114E6C @ =0x02014800\n\
+ ldr r2, _08114E70 @ =0x0000a0c4\n\
+ adds r0, r1, r2\n\
+ ldrb r0, [r0]\n\
+ adds r5, r1, 0\n\
+ cmp r0, 0\n\
+ bne _08114E60\n\
+ b _08114F5E\n\
+_08114E60:\n\
+ movs r1, 0\n\
+ movs r3, 0\n\
+ cmp r4, 0\n\
+ bne _08114E74\n\
+ movs r1, 0x1\n\
+ b _08114EA6\n\
+ .align 2, 0\n\
+_08114E6C: .4byte 0x02014800\n\
+_08114E70: .4byte 0x0000a0c4\n\
+_08114E74:\n\
+ subs r0, r4, 0x1\n\
+ lsls r0, 5\n\
+ adds r2, r3, r0\n\
+ adds r0, r5, 0\n\
+ adds r0, 0xC4\n\
+ adds r0, r2, r0\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0\n\
+ bne _08114EA6\n\
+ ldr r7, _08114EC4 @ =0x000008c4\n\
+ adds r0, r5, r7\n\
+ adds r0, r2, r0\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0\n\
+ bne _08114EA6\n\
+ adds r3, 0x1\n\
+ cmp r3, 0x1F\n\
+ bgt _08114EA6\n\
+ cmp r4, 0\n\
+ bne _08114E74\n\
+ lsls r0, r1, 24\n\
+ movs r1, 0x80\n\
+ lsls r1, 17\n\
+ adds r0, r1\n\
+ lsrs r1, r0, 24\n\
+_08114EA6:\n\
+ cmp r3, 0x20\n\
+ bne _08114EB4\n\
+ lsls r0, r1, 24\n\
+ movs r2, 0x80\n\
+ lsls r2, 17\n\
+ adds r0, r2\n\
+ lsrs r1, r0, 24\n\
+_08114EB4:\n\
+ movs r3, 0\n\
+ cmp r4, 0x3F\n\
+ bne _08114EC8\n\
+ lsls r0, r1, 24\n\
+ movs r7, 0x80\n\
+ lsls r7, 17\n\
+ adds r0, r7\n\
+ b _08114EF8\n\
+ .align 2, 0\n\
+_08114EC4: .4byte 0x000008c4\n\
+_08114EC8:\n\
+ adds r0, r4, 0x1\n\
+ lsls r0, 5\n\
+ adds r2, r3, r0\n\
+ adds r0, r5, 0\n\
+ adds r0, 0xC4\n\
+ adds r0, r2, r0\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0\n\
+ bne _08114EFA\n\
+ ldr r7, _08114F64 @ =0x000008c4\n\
+ adds r0, r5, r7\n\
+ adds r0, r2, r0\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0\n\
+ bne _08114EFA\n\
+ adds r3, 0x1\n\
+ cmp r3, 0x1F\n\
+ bgt _08114EFA\n\
+ cmp r4, 0x3F\n\
+ bne _08114EC8\n\
+ lsls r0, r1, 24\n\
+ movs r1, 0x80\n\
+ lsls r1, 17\n\
+ adds r0, r1\n\
+_08114EF8:\n\
+ lsrs r1, r0, 24\n\
+_08114EFA:\n\
+ cmp r3, 0x20\n\
+ bne _08114F08\n\
+ lsls r0, r1, 24\n\
+ movs r2, 0x80\n\
+ lsls r2, 17\n\
+ adds r0, r2\n\
+ lsrs r1, r0, 24\n\
+_08114F08:\n\
+ cmp r1, 0x2\n\
+ beq _08114F5E\n\
+ subs r0, r6, 0x2\n\
+ lsls r0, 24\n\
+ lsrs r1, r0, 24\n\
+ cmp r0, 0\n\
+ bge _08114F18\n\
+ movs r1, 0\n\
+_08114F18:\n\
+ adds r0, r6, 0x2\n\
+ lsls r0, 24\n\
+ lsrs r2, r0, 24\n\
+ asrs r0, 24\n\
+ cmp r0, 0x3F\n\
+ ble _08114F26\n\
+ movs r2, 0x3F\n\
+_08114F26:\n\
+ lsls r1, 24\n\
+ asrs r3, r1, 24\n\
+ lsls r0, r2, 24\n\
+ asrs r2, r0, 24\n\
+ adds r6, r1, 0\n\
+ adds r7, r0, 0\n\
+ cmp r3, r2\n\
+ bge _08114F7C\n\
+ cmp r4, 0\n\
+ beq _08114F7C\n\
+ subs r0, r4, 0x1\n\
+ lsls r5, r0, 7\n\
+ ldr r0, _08114F68 @ =0x020188c4\n\
+ mov r12, r0\n\
+_08114F42:\n\
+ asrs r0, r3, 1\n\
+ lsls r0, 2\n\
+ adds r0, r5\n\
+ add r0, r12\n\
+ ldr r1, [r0]\n\
+ movs r0, 0x1\n\
+ ands r0, r3\n\
+ cmp r0, 0\n\
+ beq _08114F6C\n\
+ ldrb r1, [r1]\n\
+ movs r0, 0xF0\n\
+_08114F58:\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _08114F72\n\
+_08114F5E:\n\
+ movs r0, 0x1\n\
+ b _08114FCA\n\
+ .align 2, 0\n\
+_08114F64: .4byte 0x000008c4\n\
+_08114F68: .4byte 0x020188c4\n\
+_08114F6C:\n\
+ ldrb r1, [r1]\n\
+ movs r0, 0xF\n\
+ b _08114F58\n\
+_08114F72:\n\
+ adds r3, 0x1\n\
+ cmp r3, r2\n\
+ bge _08114F7C\n\
+ cmp r4, 0\n\
+ bne _08114F42\n\
+_08114F7C:\n\
+ asrs r3, r6, 24\n\
+ asrs r1, r7, 24\n\
+ cmp r3, r1\n\
+ bge _08114FC8\n\
+ cmp r4, 0x3F\n\
+ beq _08114FC8\n\
+ adds r0, r4, 0x1\n\
+ lsls r5, r0, 7\n\
+ ldr r6, _08114FB0 @ =0x020188c4\n\
+ adds r2, r1, 0\n\
+_08114F90:\n\
+ asrs r0, r3, 1\n\
+ lsls r0, 2\n\
+ adds r0, r5\n\
+ adds r0, r6\n\
+ ldr r1, [r0]\n\
+ movs r0, 0x1\n\
+ ands r0, r3\n\
+ cmp r0, 0\n\
+ beq _08114FB4\n\
+ ldrb r1, [r1]\n\
+ movs r0, 0xF0\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _08114FBE\n\
+ b _08114F5E\n\
+ .align 2, 0\n\
+_08114FB0: .4byte 0x020188c4\n\
+_08114FB4:\n\
+ ldrb r1, [r1]\n\
+ movs r0, 0xF\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _08114F5E\n\
+_08114FBE:\n\
+ adds r3, 0x1\n\
+ cmp r3, r2\n\
+ bge _08114FC8\n\
+ cmp r4, 0x3F\n\
+ bne _08114F90\n\
+_08114FC8:\n\
+ movs r0, 0\n\
+_08114FCA:\n\
+ pop {r4-r7}\n\
+ pop {r1}\n\
+ bx r1\n\
+ .syntax divided");
+}
+
+// Functions below are vblank callbacks and are used
+
+static void EvoDummyFunc(void)
+{
+
+}
+
+static void VBlankCB_EvolutionScene(void)
+{
+ REG_BG0CNT = BGCNT_SCREENBASE(24) | BGCNT_16COLOR | BGCNT_TXT256x256 | BGCNT_AFF512x512 | BGCNT_PRIORITY(3); // 0x9803
+ REG_BG0HOFS = gUnknown_030042A4;
+ REG_BG0VOFS = gUnknown_030042A0;
+ REG_BG1HOFS = gUnknown_030042C0;
+ REG_BG1VOFS = gUnknown_030041B4;
+ REG_BG2HOFS = gUnknown_03004288;
+ REG_BG2VOFS = gUnknown_03004280;
+ REG_BG3HOFS = gUnknown_030041B0;
+ REG_BG3VOFS = gUnknown_030041B8;
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+ sub_8089668();
+}
+
+static void VBlankCB_TradeEvolutionScene(void)
+{
+ REG_BG0HOFS = gUnknown_030042A4;
+ REG_BG0VOFS = gUnknown_030042A0;
+ REG_BG1HOFS = gUnknown_030042C0;
+ REG_BG1VOFS = gUnknown_030041B4;
+ REG_BG2HOFS = gUnknown_03004288;
+ REG_BG2VOFS = gUnknown_03004280;
+ REG_BG3HOFS = gUnknown_030041B0;
+ REG_BG3VOFS = gUnknown_030041B8;
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+ sub_8089668();
+}
+
+static void sub_81150D8(void)
+{
+ sub_814A880(200, 72 + (sEvoCursorPos * 16));
+}
+
+static void EvoDummyFunc2(void)
+{
+
+}
diff --git a/src/field_control_avatar.c b/src/field_control_avatar.c
index a8f6b6b9b..ff8e8504c 100644
--- a/src/field_control_avatar.c
+++ b/src/field_control_avatar.c
@@ -13,7 +13,7 @@
#include "flags.h"
#include "item_menu.h"
#include "metatile_behavior.h"
-#include "rom4.h"
+#include "overworld.h"
#include "safari_zone.h"
#include "script.h"
#include "secret_base.h"
@@ -57,7 +57,7 @@ extern u8 gUnknown_081A4363[];
extern u8 gUnknown_081C346A[];
extern u8 gUnknown_081616E1[];
extern u8 Event_WorldMap[];
-extern u8 Event_RunningShoesManual[];
+extern u8 S_RunningShoesManual[];
extern u8 PictureBookShelfScript[];
extern u8 BookshelfScript[];
extern u8 PokemonCenterBookshelfScript[];
@@ -70,13 +70,13 @@ extern u8 gUnknown_0815F43A[];
extern u8 gUnknown_0815F523[];
extern u8 gUnknown_0815F528[];
extern u8 UseSurfScript[];
-extern u8 UseWaterfallScript[];
-extern u8 CannotUseWaterfallScript[];
+extern u8 S_UseWaterfall[];
+extern u8 S_CannotUseWaterfall[];
extern u8 UseDiveScript[];
-extern u8 UnderwaterUseDiveScript[];
-extern u8 GraniteCave_B1F_EventScript_1C6BC5[];
+extern u8 S_UseDiveUnderwater[];
+extern u8 S_FallDownHole[];
extern u8 gUnknown_081A14B8[];
-extern u8 Event_EggHatch[];
+extern u8 S_EggHatch[];
extern u8 gUnknown_0815FD0D[];
extern u8 gUnknown_081C6BDE[];
@@ -391,7 +391,7 @@ static u8 *sub_8068500(struct MapPosition *position, u8 b, u8 c)
if (MetatileBehavior_IsRegionMap(b) == TRUE)
return Event_WorldMap;
if (sub_805791C(b) == TRUE)
- return Event_RunningShoesManual;
+ return S_RunningShoesManual;
if (MetatileBehavior_IsPictureBookShelf(b) == TRUE)
return PictureBookShelfScript;
if (MetatileBehavior_IsBookShelf(b) == TRUE)
@@ -428,9 +428,9 @@ static u8 *TryGetFieldMoveScript(struct MapPosition *unused1, u8 b, u8 unused2)
if (MetatileBehavior_IsWaterfall(b) == TRUE)
{
if (FlagGet(BADGE08_GET) == TRUE && IsPlayerSurfingNorth() == TRUE)
- return UseWaterfallScript;
+ return S_UseWaterfall;
else
- return CannotUseWaterfallScript;
+ return S_CannotUseWaterfall;
}
return NULL;
}
@@ -447,9 +447,9 @@ static bool32 sub_8068770(void)
static bool32 sub_80687A4(void)
{
- if (FlagGet(BADGE07_GET) && gMapHeader.mapType == 5 && sub_8068F18() == 1)
+ if (FlagGet(BADGE07_GET) && gMapHeader.mapType == MAP_TYPE_UNDERWATER && sub_8068F18() == 1)
{
- ScriptContext1_SetupScript(UnderwaterUseDiveScript);
+ ScriptContext1_SetupScript(S_UseDiveUnderwater);
return TRUE;
}
return FALSE;
@@ -485,7 +485,7 @@ bool8 sub_8068870(u16 a)
{
if (MetatileBehavior_IsCrackedFloorHole(a))
{
- ScriptContext1_SetupScript(GraniteCave_B1F_EventScript_1C6BC5);
+ ScriptContext1_SetupScript(S_FallDownHole);
return TRUE;
}
return FALSE;
@@ -503,7 +503,7 @@ bool8 sub_8068894(void)
if (sub_80422A0())
{
IncrementGameStat(13);
- ScriptContext1_SetupScript(Event_EggHatch);
+ ScriptContext1_SetupScript(S_EggHatch);
return TRUE;
}
if (SafariZoneTakeStep() == TRUE)
@@ -549,14 +549,14 @@ static bool8 overworld_poison_step(void)
{
u16 *ptr;
- if (gMapHeader.mapType != 9)
+ if (gMapHeader.mapType != MAP_TYPE_SECRET_BASE)
{
ptr = GetVarPointer(VAR_POISON_STEP_COUNTER);
(*ptr)++;
(*ptr) %= 4;
if (*ptr == 0)
{
- switch (overworld_poison())
+ switch (DoPoisonFieldEffect())
{
case 0:
return FALSE;
@@ -698,7 +698,7 @@ static void sub_8068C30(struct MapHeader *unused, s8 b, struct MapPosition *posi
warp1_set_2(warpEvent->unk7, warpEvent->mapNum, warpEvent->mapGroup);
sub_80535C4(position->x, position->y);
- mapHeader = get_mapheader_by_bank_and_number(warpEvent->unk7, warpEvent->mapNum);
+ mapHeader = Overworld_GetMapHeaderByGroupAndId(warpEvent->unk7, warpEvent->mapNum);
if (mapHeader->events->warps[warpEvent->mapGroup].mapNum == 0x7F)
saved_warp2_set(mapHeader->events->warps[b].mapGroup, gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum, b);
}
@@ -730,7 +730,7 @@ static bool8 map_warp_consider_2_to_inside(struct MapPosition *position, u16 b,
return FALSE;
}
-static s8 map_warp_check(struct MapHeader *mapHeader, u16 b, u16 c, u8 d)
+static s8 map_warp_check(struct MapHeader *mapHeader, u16 x, u16 y, u8 warpId)
{
s32 i;
struct WarpEvent *warpEvent = mapHeader->events->warps;
@@ -738,9 +738,9 @@ static s8 map_warp_check(struct MapHeader *mapHeader, u16 b, u16 c, u8 d)
for (i = 0; i < warpCount; i++, warpEvent++)
{
- if ((u16)warpEvent->x == b && (u16)warpEvent->y == c)
+ if ((u16)warpEvent->x == x && (u16)warpEvent->y == y)
{
- if ((u8)warpEvent->warpId == d || (u8)warpEvent->warpId == 0)
+ if ((u8)warpEvent->warpId == warpId || (u8)warpEvent->warpId == 0)
return i;
}
}
@@ -767,7 +767,7 @@ static u8 *trigger_activate(struct CoordEvent *coordEvent)
return NULL;
}
-static u8 *mapheader_trigger_activate_at(struct MapHeader *mapHeader, u16 b, u16 c, u8 d)
+static u8 *mapheader_trigger_activate_at(struct MapHeader *mapHeader, u16 x, u16 y, u8 d)
{
s32 i;
struct CoordEvent *coordEvents = mapHeader->events->coordEvents;
@@ -776,7 +776,7 @@ static u8 *mapheader_trigger_activate_at(struct MapHeader *mapHeader, u16 b, u16
for (i = 0; i < coordEventCount; i++)
{
- if ((u16)coordEvents[i].x == b && (u16)coordEvents[i].y == c)
+ if ((u16)coordEvents[i].x == x && (u16)coordEvents[i].y == y)
{
if (coordEvents[i].unk4 == d || coordEvents[i].unk4 == 0)
{
@@ -813,7 +813,7 @@ static struct BgEvent *FindInvisibleMapObjectByPosition(struct MapHeader *mapHea
int dive_warp(struct MapPosition *position, u16 b)
{
- if (gMapHeader.mapType == 5 && sub_805750C(b) == 0)
+ if (gMapHeader.mapType == MAP_TYPE_UNDERWATER && sub_805750C(b) == 0)
{
if (sub_80538B0(position->x - 7, position->y - 7))
{
@@ -843,7 +843,7 @@ u8 sub_8068F18(void)
PlayerGetDestCoords(&x, &y);
r5 = MapGridGetMetatileBehaviorAt(x, y);
- if (gMapHeader.mapType == 5 && sub_805750C(r5) == 0)
+ if (gMapHeader.mapType == MAP_TYPE_UNDERWATER && sub_805750C(r5) == 0)
{
if (sub_80538B0(x - 7, y - 7) == TRUE)
return 1;
diff --git a/src/field_door.c b/src/field_door.c
index 791ed4c94..ab46f0696 100644
--- a/src/field_door.c
+++ b/src/field_door.c
@@ -3,6 +3,7 @@
#include "field_camera.h"
#include "fieldmap.h"
#include "metatile_behavior.h"
+#include "songs.h"
#include "task.h"
extern struct DoorAnimFrame gDoorOpenAnimFrames[];
@@ -212,10 +213,10 @@ bool8 FieldIsDoorAnimationRunning(void)
return FuncIsActiveTask(Task_AnimateDoor);
}
-u32 sub_8058790(u32 x, u32 y)
+u32 GetDoorSoundEffect(u32 x, u32 y)
{
if (cur_mapdata_get_door_x2_at(gDoorAnimGraphicsTable, x, y) == 0)
- return 8;
+ return SE_DOOR;
else
- return 18;
+ return SE_JIDO_DOA;
}
diff --git a/src/field_effect.c b/src/field_effect.c
index a5c088381..1bdf82991 100644
--- a/src/field_effect.c
+++ b/src/field_effect.c
@@ -9,7 +9,7 @@
#include "menu.h"
#include "palette.h"
#include "text.h"
-#include "rom4.h"
+#include "overworld.h"
#include "task.h"
#include "sound.h"
#include "songs.h"
@@ -28,7 +28,7 @@
#define subsprite_table(ptr) {.subsprites = ptr, .subspriteCount = (sizeof ptr) / (sizeof(struct Subsprite))}
-EWRAM_DATA u32 gUnknown_0202FF84[8] = {0};
+EWRAM_DATA u32 gFieldEffectArguments[8] = {0};
const u32 gSpriteImage_839DC14[] = INCBIN_U32("graphics/birch_speech/birch.4bpp");
const u16 gBirchPalette[16] = INCBIN_U16("graphics/birch_speech/birch.gbapal");
@@ -618,13 +618,13 @@ bool8 FieldEffectActiveListContains(u8 id)
return FALSE;
}
-u8 CreateTrainerSprite_BirchSpeech(u8 gender, s16 x, s16 y, u8 subpriority, u8 *buffer)
+u8 CreateTrainerSprite(u8 trainerSpriteID, s16 x, s16 y, u8 subpriority, u8 *buffer)
{
struct SpriteTemplate spriteTemplate;
- LoadCompressedObjectPaletteOverrideBuffer(&gTrainerFrontPicPaletteTable[gender], buffer);
- LoadCompressedObjectPicOverrideBuffer(&gTrainerFrontPicTable[gender], buffer);
- spriteTemplate.tileTag = gTrainerFrontPicTable[gender].tag;
- spriteTemplate.paletteTag = gTrainerFrontPicPaletteTable[gender].tag;
+ LoadCompressedObjectPaletteOverrideBuffer(&gTrainerFrontPicPaletteTable[trainerSpriteID], buffer);
+ LoadCompressedObjectPicOverrideBuffer(&gTrainerFrontPicTable[trainerSpriteID], buffer);
+ spriteTemplate.tileTag = gTrainerFrontPicTable[trainerSpriteID].tag;
+ spriteTemplate.paletteTag = gTrainerFrontPicPaletteTable[trainerSpriteID].tag;
spriteTemplate.oam = &gOamData_839F0F4;
spriteTemplate.anims = gDummySpriteAnimTable;
spriteTemplate.images = NULL;
@@ -1203,10 +1203,10 @@ void task00_8084310(u8 taskId)
{
return;
}
- gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened;
- if ((int)gUnknown_0202FF84[0] > 5)
+ gFieldEffectArguments[0] = gLastFieldPokeMenuOpened;
+ if ((int)gFieldEffectArguments[0] > 5)
{
- gUnknown_0202FF84[0] = 0;
+ gFieldEffectArguments[0] = 0;
}
FieldEffectStart(FLDEFF_USE_FLY);
task->data[0]++;
@@ -1665,7 +1665,7 @@ bool8 FldEff_UseWaterfall(void)
{
u8 taskId;
taskId = CreateTask(sub_8086F64, 0xff);
- gTasks[taskId].data[1] = gUnknown_0202FF84[0];
+ gTasks[taskId].data[1] = gFieldEffectArguments[0];
sub_8086F64(taskId);
return FALSE;
}
@@ -1689,7 +1689,7 @@ bool8 waterfall_1_do_anim_probably(struct Task *task, struct MapObject *mapObjec
if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(mapObject))
{
FieldObjectClearAnimIfSpecialAnimFinished(mapObject);
- gUnknown_0202FF84[0] = task->data[1];
+ gFieldEffectArguments[0] = task->data[1];
FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT);
task->data[0]++;
}
@@ -1738,8 +1738,8 @@ bool8 FldEff_UseDive(void)
{
u8 taskId;
taskId = CreateTask(Task_Dive, 0xff);
- gTasks[taskId].data[15] = gUnknown_0202FF84[0];
- gTasks[taskId].data[14] = gUnknown_0202FF84[1];
+ gTasks[taskId].data[15] = gFieldEffectArguments[0];
+ gTasks[taskId].data[14] = gFieldEffectArguments[1];
Task_Dive(taskId);
return FALSE;
}
@@ -1759,7 +1759,7 @@ bool8 sub_8087124(struct Task *task)
bool8 dive_2_unknown(struct Task *task)
{
ScriptContext2_Enable();
- gUnknown_0202FF84[0] = task->data[15];
+ gFieldEffectArguments[0] = task->data[15];
FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT);
task->data[0]++;
return FALSE;
@@ -1820,10 +1820,10 @@ bool8 sub_8087298(struct Task *task, struct MapObject *mapObject, struct Sprite
{
sprite->pos2.y = 0;
task->data[3] = 1;
- gUnknown_0202FF84[0] = mapObject->coords2.x;
- gUnknown_0202FF84[1] = mapObject->coords2.y;
- gUnknown_0202FF84[2] = sprite->subpriority - 1;
- gUnknown_0202FF84[3] = sprite->oam.priority;
+ 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]++;
@@ -1894,7 +1894,6 @@ bool8 sub_80873F4(struct Task *task, struct MapObject *mapObject, struct Sprite
}
void sub_8087470(u8);
-extern u8 sub_80608A4(u8);
void mapldr_080851BC(void)
{
@@ -1924,10 +1923,10 @@ bool8 sub_80874FC(struct Task *task, struct MapObject *mapObject, struct Sprite
{
if (sub_807D770())
{
- gUnknown_0202FF84[0] = mapObject->coords2.x;
- gUnknown_0202FF84[1] = mapObject->coords2.y;
- gUnknown_0202FF84[2] = sprite->subpriority - 1;
- gUnknown_0202FF84[3] = sprite->oam.priority;
+ 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]++;
}
@@ -1966,9 +1965,9 @@ extern const struct SpriteTemplate *const gFieldEffectObjectTemplatePointers[36]
u8 FldEff_LavaridgeGymWarp(void)
{
u8 spriteId;
- sub_8060470((s16 *)&gUnknown_0202FF84[0], (s16 *)&gUnknown_0202FF84[1], 8, 8);
- spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[33], gUnknown_0202FF84[0], gUnknown_0202FF84[1], gUnknown_0202FF84[2]);
- gSprites[spriteId].oam.priority = gUnknown_0202FF84[3];
+ sub_8060470((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;
}
@@ -2009,10 +2008,10 @@ bool8 sub_80876F8(struct Task *task, struct MapObject *mapObject, struct Sprite
{
if (task->data[1] > 3)
{
- gUnknown_0202FF84[0] = mapObject->coords2.x;
- gUnknown_0202FF84[1] = mapObject->coords2.y;
- gUnknown_0202FF84[2] = sprite->subpriority - 1;
- gUnknown_0202FF84[3] = sprite->oam.priority;
+ 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
@@ -2064,9 +2063,9 @@ bool8 sub_80877D4(struct Task *task, struct MapObject *mapObject, struct Sprite
u8 FldEff_PopOutOfAsh(void)
{
u8 spriteId;
- sub_8060470((s16 *)&gUnknown_0202FF84[0], (s16 *)&gUnknown_0202FF84[1], 8, 8);
- spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[32], gUnknown_0202FF84[0], gUnknown_0202FF84[1], gUnknown_0202FF84[2]);
- gSprites[spriteId].oam.priority = gUnknown_0202FF84[3];
+ sub_8060470((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;
}
@@ -2385,26 +2384,26 @@ void sub_8088890(struct Sprite *);
bool8 FldEff_FieldMoveShowMon(void)
{
u8 taskId;
- if (is_light_level_1_2_3_5_or_6(sav1_map_get_light_level()) == TRUE)
+ if (is_map_type_1_2_3_5_or_6(Overworld_GetMapTypeOfSaveblockLocation()) == TRUE)
{
taskId = CreateTask(sub_8088120, 0xff);
} else
{
taskId = CreateTask(sub_808847C, 0xff);
}
- gTasks[taskId].data[15] = sub_8088830(gUnknown_0202FF84[0], gUnknown_0202FF84[1], gUnknown_0202FF84[2]);
+ gTasks[taskId].data[15] = sub_8088830(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
return FALSE;
}
bool8 FldEff_FieldMoveShowMonInit(void)
{
struct Pokemon *pokemon;
- u32 flag = gUnknown_0202FF84[0] & 0x80000000;
- pokemon = &gPlayerParty[(u8)gUnknown_0202FF84[0]];
- gUnknown_0202FF84[0] = GetMonData(pokemon, MON_DATA_SPECIES);
- gUnknown_0202FF84[1] = GetMonData(pokemon, MON_DATA_OT_ID);
- gUnknown_0202FF84[2] = GetMonData(pokemon, MON_DATA_PERSONALITY);
- gUnknown_0202FF84[0] |= flag;
+ 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;
@@ -2879,9 +2878,9 @@ u8 FldEff_UseSurf(void)
{
u8 taskId;
taskId = CreateTask(sub_8088954, 0xff);
- gTasks[taskId].data[15] = gUnknown_0202FF84[0];
+ gTasks[taskId].data[15] = gFieldEffectArguments[0];
sav1_reset_battle_music_maybe();
- sub_8053FB0(0x016d);
+ Overworld_ChangeMusicTo(0x016d);
return FALSE;
}
@@ -2919,7 +2918,7 @@ void sub_8088A30(struct Task *task)
mapObject = &gMapObjects[gPlayerAvatar.mapObjectId];
if (FieldObjectCheckIfSpecialAnimFinishedOrInactive(mapObject))
{
- gUnknown_0202FF84[0] = task->data[15] | 0x80000000;
+ gFieldEffectArguments[0] = task->data[15] | 0x80000000;
FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT);
task->data[0]++;
}
@@ -2934,9 +2933,9 @@ void sub_8088A78(struct Task *task)
sub_805B980(mapObject, GetPlayerAvatarGraphicsIdByStateId(3));
FieldObjectClearAnimIfSpecialAnimFinished(mapObject);
FieldObjectSetSpecialAnim(mapObject, sub_80608D0(mapObject->placeholder18));
- gUnknown_0202FF84[0] = task->data[1];
- gUnknown_0202FF84[1] = task->data[2];
- gUnknown_0202FF84[2] = gPlayerAvatar.mapObjectId;
+ 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]++;
}
@@ -2970,7 +2969,7 @@ u8 FldEff_NPCFlyOut(void)
sprite->oam.paletteNum = 0;
sprite->oam.priority = 1;
sprite->callback = sub_8088BC4;
- sprite->data1 = gUnknown_0202FF84[0];
+ sprite->data1 = gFieldEffectArguments[0];
PlaySE(SE_W019);
return spriteId;
}
@@ -3009,7 +3008,7 @@ u8 FldEff_UseFly(void)
{
u8 taskId;
taskId = CreateTask(sub_8088C70, 0xfe);
- gTasks[taskId].data[1] = gUnknown_0202FF84[0];
+ gTasks[taskId].data[1] = gFieldEffectArguments[0];
return 0;
}
@@ -3040,7 +3039,7 @@ void sub_8088CF8(struct Task *task)
if (FieldObjectClearAnimIfSpecialAnimFinished(mapObject))
{
task->data[0]++;
- gUnknown_0202FF84[0] = task->data[1];
+ gFieldEffectArguments[0] = task->data[1];
FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT);
}
}
diff --git a/src/field_effect_helpers.c b/src/field_effect_helpers.c
new file mode 100644
index 000000000..2ad8bdce3
--- /dev/null
+++ b/src/field_effect_helpers.c
@@ -0,0 +1,1632 @@
+#include "global.h"
+#include "sprite.h"
+#include "fieldmap.h"
+#include "metatile_behavior.h"
+#include "songs.h"
+#include "sound.h"
+#include "field_map_obj.h"
+#include "field_camera.h"
+#include "field_map_obj_helpers.h"
+#include "field_weather.h"
+#include "field_effect.h"
+#include "field_ground_effect.h"
+#include "field_effect_helpers.h"
+
+static void sub_81269E0(struct Sprite *);
+static void npc_pal_op(struct MapObject *mapObject, struct Sprite *sprite);
+static void npc_pal_op_A(struct MapObject *, u8);
+static void npc_pal_op_B(struct MapObject *, u8);
+static void sub_81275A0(struct Sprite *);
+static void sub_81275C4(struct Sprite *);
+static void sub_8127DA0(struct Sprite *);
+static void sub_8127DD0(struct Sprite *);
+static void sub_8127E30(struct Sprite *);
+static void sub_812882C(struct Sprite *, u8, u8);
+static void sub_81278D8(struct Sprite *);
+static void sub_8127FD4(struct MapObject *, struct Sprite *);
+static void sub_812800C(struct MapObject *, struct Sprite *);
+static void sub_81280A0(struct MapObject *, struct Sprite *, struct Sprite *);
+static void sub_8128174(struct Sprite *);
+static u32 ShowDisguiseFieldEffect(u8, u8, u8);
+
+const u8 UnusedEggString_8401E28[] = _("タマゴ");
+
+const u16 gUnknown_08401E2C[] = {
+ 0x0c,
+ 0x1c,
+ 0x2c
+};
+
+const u8 gUnknown_08401E32[] = {
+ 0,
+ 1,
+ 2,
+ 3
+};
+
+const u16 gUnknown_08401E36[] = {
+ 4,
+ 4,
+ 4,
+ 16
+};
+
+void (*const gUnknown_08401E40[])(struct Sprite *) = {
+ sub_81275A0,
+ sub_81275C4
+};
+
+void (*const gUnknown_08401E48[])(struct Sprite *) = {
+ sub_8127DA0,
+ sub_8127DD0,
+ sub_8127E30
+};
+
+const u8 gUnknown_08401E54[] = {
+ 0,
+ 0,
+ 1,
+ 2,
+ 3
+};
+
+const u16 gUnknown_08401E5A[] = {
+ 3,
+ 7
+};
+
+void SetUpReflection(struct MapObject *mapObject, struct Sprite *sprite, bool8 flag)
+{
+ struct Sprite *newSprite;
+
+ newSprite = &gSprites[obj_unfreeze(sprite, sprite->pos1.x, sprite->pos1.y, 0x98)];
+ newSprite->callback = sub_81269E0;
+ newSprite->oam.priority = 3;
+ newSprite->oam.paletteNum = gUnknown_0830FD14[newSprite->oam.paletteNum];
+ newSprite->usingSheet = TRUE;
+ newSprite->anims = gDummySpriteAnimTable;
+ StartSpriteAnim(newSprite, 0);
+ newSprite->affineAnims = gDummySpriteAffineAnimTable;
+ newSprite->affineAnimBeginning = TRUE;
+ newSprite->subspriteMode = 0;
+ newSprite->data0 = sprite->data0;
+ newSprite->data1 = mapObject->localId;
+ newSprite->data7 = flag;
+ npc_pal_op(mapObject, newSprite);
+ if (!flag)
+ {
+ newSprite->oam.affineMode = 1;
+ }
+}
+
+static s16 sub_81268D0(struct MapObject *mapObject)
+{
+ return GetFieldObjectGraphicsInfo(mapObject->graphicsId)->height - 2;
+}
+
+static void npc_pal_op(struct MapObject *mapObject, struct Sprite *sprite)
+{
+ u8 whichElement;
+ u16 unk_8041e2c[ARRAY_COUNT(gUnknown_08401E2C)];
+
+ memcpy(unk_8041e2c, gUnknown_08401E2C, sizeof gUnknown_08401E2C);
+ sprite->data2 = 0;
+ if (!GetFieldObjectGraphicsInfo(mapObject->graphicsId)->disableReflectionPaletteLoad && ((whichElement = sub_8057450(mapObject->mapobj_unk_1F)) || (whichElement = sub_8057450(mapObject->mapobj_unk_1E))))
+ {
+ sprite->data2 = unk_8041e2c[whichElement - 1];
+ npc_pal_op_A(mapObject, sprite->oam.paletteNum);
+ }
+ else
+ {
+ npc_pal_op_B(mapObject, sprite->oam.paletteNum);
+ }
+}
+
+static void npc_pal_op_B(struct MapObject *mapObject, u8 paletteNum)
+{
+ const struct MapObjectGraphicsInfo *graphicsInfo;
+
+ graphicsInfo = GetFieldObjectGraphicsInfo(mapObject->graphicsId);
+ if (graphicsInfo->paletteTag2 != 0x11ff)
+ {
+ if (graphicsInfo->paletteSlot == 0)
+ {
+ npc_load_two_palettes__no_record(graphicsInfo->paletteTag1, paletteNum);
+ }
+ else if (graphicsInfo->paletteSlot == 10)
+ {
+ npc_load_two_palettes__and_record(graphicsInfo->paletteTag1, paletteNum);
+ }
+ else
+ {
+ pal_patch_for_npc(npc_paltag_by_palslot(paletteNum), paletteNum);
+ }
+ sub_807D78C(paletteNum);
+ }
+}
+
+static void npc_pal_op_A(struct MapObject *mapObject, u8 paletteNum)
+{
+ const struct MapObjectGraphicsInfo *graphicsInfo;
+
+ graphicsInfo = GetFieldObjectGraphicsInfo(mapObject->graphicsId);
+ if (graphicsInfo->paletteTag2 != 0x11ff)
+ {
+ pal_patch_for_npc(graphicsInfo->paletteTag2, paletteNum);
+ sub_807D78C(paletteNum);
+ }
+}
+
+static void sub_81269E0(struct Sprite *sprite)
+{
+ struct MapObject *mapObject;
+ struct Sprite *oldSprite;
+
+ mapObject = &gMapObjects[sprite->data0];
+ oldSprite = &gSprites[mapObject->spriteId];
+ if (!mapObject->active || !mapObject->mapobj_bit_17 || mapObject->localId != sprite->data1)
+ {
+ sprite->inUse = FALSE;
+ }
+ else
+ {
+ sprite->oam.paletteNum = gUnknown_0830FD14[oldSprite->oam.paletteNum];
+ sprite->oam.shape = oldSprite->oam.shape;
+ sprite->oam.size = oldSprite->oam.size;
+ sprite->oam.matrixNum = oldSprite->oam.matrixNum | 0x10;
+ sprite->oam.tileNum = oldSprite->oam.tileNum;
+ sprite->subspriteTables = oldSprite->subspriteTables;
+ sprite->subspriteTableNum = oldSprite->subspriteTableNum;
+ sprite->invisible = oldSprite->invisible;
+ sprite->pos1.x = oldSprite->pos1.x;
+ sprite->pos1.y = oldSprite->pos1.y + sub_81268D0(mapObject) + sprite->data2;
+ sprite->centerToCornerVecX = oldSprite->centerToCornerVecX;
+ sprite->centerToCornerVecY = oldSprite->centerToCornerVecY;
+ sprite->pos2.x = oldSprite->pos2.x;
+ sprite->pos2.y = -oldSprite->pos2.y;
+ sprite->coordOffsetEnabled = oldSprite->coordOffsetEnabled;
+ if (sprite->data7 == FALSE)
+ {
+ sprite->oam.matrixNum = 0;
+ if (oldSprite->oam.matrixNum & 0x8)
+ {
+ sprite->oam.matrixNum = 1;
+ }
+ }
+ }
+}
+
+u8 sub_8126B54(void)
+{
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[8] /*gFieldEffectSpriteTemplate_Arrow*/, 0, 0, 0x52);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->oam.priority = 1;
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->invisible = TRUE;
+ }
+ return spriteId;
+}
+
+void objid_set_invisible(u8 spriteId)
+{
+ gSprites[spriteId].invisible = TRUE;
+}
+
+void sub_8126BC4(u8 spriteId, u8 animNum, s16 x, s16 y)
+{
+ s16 x2;
+ s16 y2;
+ struct Sprite *sprite;
+
+ sprite = &gSprites[spriteId];
+ if (sprite->invisible || sprite->data0 != x || sprite->data1 != y)
+ {
+ sub_80603CC(x, y, &x2, &y2);
+ sprite = &gSprites[spriteId];
+ sprite->pos1.x = x2 + 8;
+ sprite->pos1.y = y2 + 8;
+ sprite->invisible = FALSE;
+ sprite->data0 = x;
+ sprite->data1 = y;
+ StartSpriteAnim(sprite, animNum - 1);
+ }
+}
+
+u32 FldEff_Shadow(void)
+{
+ u8 mapObjectId;
+ const struct MapObjectGraphicsInfo *graphicsInfo;
+ u8 spriteId;
+
+ mapObjectId = GetFieldObjectIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ graphicsInfo = GetFieldObjectGraphicsInfo(gMapObjects[mapObjectId].graphicsId);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[gUnknown_08401E32[graphicsInfo->shadowSize]], 0, 0, 0x94);
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].coordOffsetEnabled = TRUE;
+ gSprites[spriteId].data0 = gFieldEffectArguments[0];
+ gSprites[spriteId].data1 = gFieldEffectArguments[1];
+ gSprites[spriteId].data2 = gFieldEffectArguments[2];
+ gSprites[spriteId].data3 = (graphicsInfo->height >> 1) - gUnknown_08401E36[graphicsInfo->shadowSize];
+ }
+ return 0;
+}
+
+void oamc_shadow(struct Sprite *sprite)
+{
+ u8 mapObjectId;
+ struct MapObject *mapObject;
+ struct Sprite *linkedSprite;
+
+ if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data0, sprite->data1, sprite->data2, &mapObjectId))
+ {
+ FieldEffectStop(sprite, FLDEFF_SHADOW);
+ }
+ else
+ {
+ mapObject = &gMapObjects[mapObjectId];
+ linkedSprite = &gSprites[mapObject->spriteId];
+ sprite->oam.priority = linkedSprite->oam.priority;
+ sprite->pos1.x = linkedSprite->pos1.x;
+ sprite->pos1.y = linkedSprite->pos1.y + sprite->data3;
+ if (!mapObject->active || !mapObject->mapobj_bit_22 || MetatileBehavior_IsPokeGrass(mapObject->mapobj_unk_1E) || MetatileBehavior_IsSurfableWaterOrUnderwater(mapObject->mapobj_unk_1E) || MetatileBehavior_IsSurfableWaterOrUnderwater(mapObject->mapobj_unk_1F) || MetatileBehavior_IsReflective(mapObject->mapobj_unk_1E) || MetatileBehavior_IsReflective(mapObject->mapobj_unk_1F))
+ {
+ FieldEffectStop(sprite, FLDEFF_SHADOW);
+ }
+ }
+}
+
+u32 FldEff_TallGrass(void)
+{
+ s16 x;
+ s16 y;
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ x = gFieldEffectArguments[0];
+ y = gFieldEffectArguments[1];
+ sub_8060470(&x, &y, 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[4], x, y, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gFieldEffectArguments[3];
+ sprite->data0 = gFieldEffectArguments[2];
+ sprite->data1 = gFieldEffectArguments[0];
+ sprite->data2 = gFieldEffectArguments[1];
+ sprite->data3 = gFieldEffectArguments[4];
+ sprite->data4 = gFieldEffectArguments[5];
+ sprite->data5 = gFieldEffectArguments[6];
+ if (gFieldEffectArguments[7])
+ {
+ SeekSpriteAnim(sprite, 4);
+ }
+ }
+ return 0;
+}
+
+void unc_grass_normal(struct Sprite *sprite)
+{
+ u8 mapNum;
+ u8 mapGroup;
+ u8 metatileBehavior;
+ u8 localId;
+ u8 mapObjectId;
+ struct MapObject *mapObject;
+
+ mapNum = sprite->data5 >> 8;
+ mapGroup = sprite->data5;
+ if (gCamera.field_0 && (gSaveBlock1.location.mapNum != mapNum || gSaveBlock1.location.mapGroup != mapGroup))
+ {
+ sprite->data1 -= gCamera.x;
+ sprite->data2 -= gCamera.y;
+ sprite->data5 = ((u8)gSaveBlock1.location.mapNum << 8) | (u8)gSaveBlock1.location.mapGroup;
+ }
+ localId = sprite->data3 >> 8;
+ mapNum = sprite->data3;
+ mapGroup = sprite->data4;
+ metatileBehavior = MapGridGetMetatileBehaviorAt(sprite->data1, sprite->data2);
+ if (TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId) || !MetatileBehavior_IsTallGrass(metatileBehavior) || (sprite->data7 && sprite->animEnded))
+ {
+ FieldEffectStop(sprite, FLDEFF_TALL_GRASS);
+ }
+ else
+ {
+ mapObject = &gMapObjects[mapObjectId];
+ if ((mapObject->coords2.x != sprite->data1 || mapObject->coords2.y != sprite->data2) && (mapObject->coords3.x != sprite->data1 || mapObject->coords3.y != sprite->data2))
+ {
+ sprite->data7 = TRUE;
+ }
+ metatileBehavior = 0;
+ if (sprite->animCmdIndex == 0)
+ {
+ metatileBehavior = 4;
+ }
+ sub_806487C(sprite, 0);
+ sub_812882C(sprite, sprite->data0, metatileBehavior);
+ }
+}
+
+u32 FldEff_JumpTallGrass(void)
+{
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ sub_8060470((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 12);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[10], gFieldEffectArguments[0], gFieldEffectArguments[1], 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gFieldEffectArguments[3];
+ sprite->data0 = gFieldEffectArguments[2];
+ sprite->data1 = 12;
+ }
+ return 0;
+}
+
+u8 sub_8126FF0(u8 localId, u8 mapNum, u8 mapGroup, s16 x, s16 y)
+{
+ struct Sprite *sprite;
+ u8 i;
+
+ for (i = 0; i < MAX_SPRITES; i ++)
+ {
+ if (gSprites[i].inUse)
+ {
+ sprite = &gSprites[i];
+ if (sprite->callback == unc_grass_normal && (x == sprite->data1 && y == sprite->data2) && (localId == (u8)(sprite->data3 >> 8) && mapNum == (sprite->data3 & 0xFF) && mapGroup == sprite->data4))
+ {
+ return i;
+ }
+ }
+ }
+ return MAX_SPRITES;
+}
+
+u32 FldEff_LongGrass(void)
+{
+ s16 x;
+ s16 y;
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ x = gFieldEffectArguments[0];
+ y = gFieldEffectArguments[1];
+ sub_8060470(&x, &y, 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[15], x, y, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = ZCoordToPriority(gFieldEffectArguments[2]);
+ sprite->data0 = gFieldEffectArguments[2];
+ sprite->data1 = gFieldEffectArguments[0];
+ sprite->data2 = gFieldEffectArguments[1];
+ sprite->data3 = gFieldEffectArguments[4];
+ sprite->data4 = gFieldEffectArguments[5];
+ sprite->data5 = gFieldEffectArguments[6];
+ if (gFieldEffectArguments[7])
+ {
+ SeekSpriteAnim(sprite, 6);
+ }
+ }
+ return 0;
+}
+
+void unc_grass_tall(struct Sprite *sprite)
+{
+ u8 mapNum;
+ u8 mapGroup;
+ u8 metatileBehavior;
+ u8 localId;
+ u8 mapObjectId;
+ struct MapObject *mapObject;
+
+ mapNum = sprite->data5 >> 8;
+ mapGroup = sprite->data5;
+ if (gCamera.field_0 && (gSaveBlock1.location.mapNum != mapNum || gSaveBlock1.location.mapGroup != mapGroup))
+ {
+ sprite->data1 -= gCamera.x;
+ sprite->data2 -= gCamera.y;
+ sprite->data5 = ((u8)gSaveBlock1.location.mapNum << 8) | (u8)gSaveBlock1.location.mapGroup;
+ }
+ localId = sprite->data3 >> 8;
+ mapNum = sprite->data3;
+ mapGroup = sprite->data4;
+ metatileBehavior = MapGridGetMetatileBehaviorAt(sprite->data1, sprite->data2);
+ if (TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjectId) || !MetatileBehavior_IsLongGrass(metatileBehavior) || (sprite->data7 && sprite->animEnded))
+ {
+ FieldEffectStop(sprite, FLDEFF_LONG_GRASS);
+ }
+ else
+ {
+ mapObject = &gMapObjects[mapObjectId];
+ if ((mapObject->coords2.x != sprite->data1 || mapObject->coords2.y != sprite->data2) && (mapObject->coords3.x != sprite->data1 || mapObject->coords3.y != sprite->data2))
+ {
+ sprite->data7 = TRUE;
+ }
+ sub_806487C(sprite, 0);
+ sub_812882C(sprite, sprite->data0, 0);
+ }
+}
+
+u32 FldEff_JumpLongGrass(void)
+{
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ sub_8060470((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[16], gFieldEffectArguments[0], gFieldEffectArguments[1], 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gFieldEffectArguments[3];
+ sprite->data0 = gFieldEffectArguments[2];
+ sprite->data1 = 18;
+ }
+ return 0;
+}
+
+u32 FldEff_ShortGrass(void)
+{
+ u8 mapObjectId;
+ struct MapObject *mapObject;
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ mapObjectId = GetFieldObjectIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ mapObject = &gMapObjects[mapObjectId];
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[30], 0, 0, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &(gSprites[spriteId]);
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gSprites[mapObject->spriteId].oam.priority;
+ sprite->data0 = gFieldEffectArguments[0];
+ sprite->data1 = gFieldEffectArguments[1];
+ sprite->data2 = gFieldEffectArguments[2];
+ sprite->data3 = gSprites[mapObject->spriteId].pos1.x;
+ sprite->data4 = gSprites[mapObject->spriteId].pos1.y;
+ }
+ return 0;
+}
+
+void sub_8127334(struct Sprite *sprite)
+{
+ u8 mapObjectId;
+ s16 x;
+ s16 y;
+ const struct MapObjectGraphicsInfo *graphicsInfo;
+ struct Sprite *linkedSprite;
+
+ if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data0, sprite->data1, sprite->data2, &mapObjectId) || !gMapObjects[mapObjectId].mapobj_bit_18)
+ {
+ FieldEffectStop(sprite, FLDEFF_SHORT_GRASS);
+ }
+ else
+ {
+ graphicsInfo = GetFieldObjectGraphicsInfo(gMapObjects[mapObjectId].graphicsId);
+ linkedSprite = &gSprites[gMapObjects[mapObjectId].spriteId];
+ y = linkedSprite->pos1.y;
+ x = linkedSprite->pos1.x;
+ if (x != sprite->data3 || y != sprite->data4)
+ {
+ sprite->data3 = x;
+ sprite->data4 = y;
+ if (sprite->animEnded)
+ {
+ StartSpriteAnim(sprite, 0);
+ }
+ }
+ sprite->pos1.x = x;
+ sprite->pos1.y = y;
+ sprite->pos2.y = (graphicsInfo->height >> 1) - 8;
+ sprite->subpriority = linkedSprite->subpriority - 1;
+ sprite->oam.priority = linkedSprite->oam.priority;
+ sub_806487C(sprite, linkedSprite->invisible);
+ }
+}
+
+u32 FldEff_SandFootprints(void)
+{
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ sub_8060470((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[11], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gFieldEffectArguments[3];
+ sprite->data7 = FLDEFF_SAND_FOOTPRINTS;
+ StartSpriteAnim(sprite, gFieldEffectArguments[4]);
+ }
+ return 0;
+}
+
+u32 FldEff_DeepSandFootprints(void)
+{
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ sub_8060470((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[23], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gFieldEffectArguments[3];
+ sprite->data7 = FLDEFF_DEEP_SAND_FOOTPRINTS;
+ StartSpriteAnim(sprite, gFieldEffectArguments[4]);
+ }
+ return spriteId;
+}
+
+u32 FldEff_BikeTireTracks(void)
+{
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ sub_8060470((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[27], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gFieldEffectArguments[3];
+ sprite->data7 = FLDEFF_BIKE_TIRE_TRACKS;
+ StartSpriteAnim(sprite, gFieldEffectArguments[4]);
+ }
+ return spriteId;
+}
+
+void sub_8127584(struct Sprite *sprite)
+{
+ gUnknown_08401E40[sprite->data0](sprite);
+}
+
+static void sub_81275A0(struct Sprite *sprite)
+{
+ if (++sprite->data1 > 40)
+ {
+ sprite->data0 = 1;
+ }
+ sub_806487C(sprite, FALSE);
+}
+
+static void sub_81275C4(struct Sprite *sprite)
+{
+ sprite->invisible ^= 1;
+ sprite->data1 ++;
+ sub_806487C(sprite, sprite->invisible);
+ if (sprite->data1 > 56)
+ {
+ FieldEffectStop(sprite, sprite->data7);
+ }
+}
+
+u32 FldEff_Splash(void)
+{
+ u8 mapObjectId;
+ struct MapObject *mapObject;
+ u8 spriteId;
+ struct Sprite *sprite;
+ const struct MapObjectGraphicsInfo *graphicsInfo;
+ struct Sprite *linkedSprite;
+
+ mapObjectId = GetFieldObjectIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ mapObject = &gMapObjects[mapObjectId];
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[13], 0, 0, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ graphicsInfo = GetFieldObjectGraphicsInfo(mapObject->graphicsId);
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ linkedSprite = &gSprites[mapObject->spriteId];
+ sprite->oam.priority = linkedSprite->oam.priority;
+ sprite->data0 = gFieldEffectArguments[0];
+ sprite->data1 = gFieldEffectArguments[1];
+ sprite->data2 = gFieldEffectArguments[2];
+ sprite->pos2.y = (graphicsInfo->height >> 1) - 4;
+ PlaySE(SE_MIZU);
+ }
+ return 0;
+}
+
+void sub_81276B4(struct Sprite *sprite)
+{
+ u8 mapObjectId;
+
+ if (sprite->animEnded || TryGetFieldObjectIdByLocalIdAndMap(sprite->data0, sprite->data1, sprite->data2, &mapObjectId))
+ {
+ FieldEffectStop(sprite, FLDEFF_SPLASH);
+ }
+ else
+ {
+ sprite->pos1.x = gSprites[gMapObjects[mapObjectId].spriteId].pos1.x;
+ sprite->pos1.y = gSprites[gMapObjects[mapObjectId].spriteId].pos1.y;
+ sub_806487C(sprite, FALSE);
+ }
+}
+
+u32 FldEff_JumpSmallSplash(void)
+{
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ sub_8060470((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 12);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[14], gFieldEffectArguments[0], gFieldEffectArguments[1], 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gFieldEffectArguments[3];
+ sprite->data0 = gFieldEffectArguments[2];
+ sprite->data1 = FLDEFF_JUMP_SMALL_SPLASH;
+ }
+ return 0;
+}
+
+u32 FldEff_JumpBigSplash(void)
+{
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ sub_8060470((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[12], gFieldEffectArguments[0], gFieldEffectArguments[1], 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gFieldEffectArguments[3];
+ sprite->data0 = gFieldEffectArguments[2];
+ sprite->data1 = FLDEFF_JUMP_BIG_SPLASH;
+ }
+ return 0;
+}
+
+u32 FldEff_FeetInFlowingWater(void)
+{
+ u8 mapObjectId;
+ struct MapObject *mapObject;
+ u8 spriteId;
+ struct Sprite *sprite;
+ const struct MapObjectGraphicsInfo *graphicsInfo;
+
+ mapObjectId = GetFieldObjectIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ mapObject = &gMapObjects[mapObjectId];
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[13], 0, 0, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ graphicsInfo = GetFieldObjectGraphicsInfo(mapObject->graphicsId);
+ sprite = &gSprites[spriteId];
+ sprite->callback = sub_81278D8;
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gSprites[mapObject->spriteId].oam.priority;
+ sprite->data0 = gFieldEffectArguments[0];
+ sprite->data1 = gFieldEffectArguments[1];
+ sprite->data2 = gFieldEffectArguments[2];
+ sprite->data3 = -1;
+ sprite->data4 = -1;
+ sprite->pos2.y = (graphicsInfo->height >> 1) - 4;
+ StartSpriteAnim(sprite, 1);
+ }
+ return 0;
+}
+
+static void sub_81278D8(struct Sprite *sprite)
+{
+ u8 mapObjectId;
+ struct Sprite *linkedSprite;
+ struct MapObject *mapObject;
+
+ if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data0, sprite->data1, sprite->data2, &mapObjectId) || !gMapObjects[mapObjectId].mapobj_bit_19)
+ {
+ FieldEffectStop(sprite, FLDEFF_FEET_IN_FLOWING_WATER);
+ }
+ else
+ {
+ mapObject = &gMapObjects[mapObjectId];
+ linkedSprite = &gSprites[mapObject->spriteId];
+ sprite->pos1.x = linkedSprite->pos1.x;
+ sprite->pos1.y = linkedSprite->pos1.y;
+ sprite->subpriority = linkedSprite->subpriority;
+ sub_806487C(sprite, FALSE);
+ if (mapObject->coords2.x != sprite->data3 || mapObject->coords2.y != sprite->data4)
+ {
+ sprite->data3 = mapObject->coords2.x;
+ sprite->data4 = mapObject->coords2.y;
+ if (!sprite->invisible)
+ {
+ PlaySE(SE_MIZU);
+ }
+ }
+ }
+}
+
+u32 FldEff_Ripple(void)
+{
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[5], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gFieldEffectArguments[3];
+ sprite->data0 = FLDEFF_RIPPLE;
+ }
+ return 0;
+}
+
+u32 FldEff_HotSpringsWater(void)
+{
+ u8 mapObjectId;
+ struct MapObject *mapObject;
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ mapObjectId = GetFieldObjectIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ mapObject = &gMapObjects[mapObjectId];
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[31], 0, 0, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gSprites[mapObject->spriteId].oam.priority;
+ sprite->data0 = gFieldEffectArguments[0];
+ sprite->data1 = gFieldEffectArguments[1];
+ sprite->data2 = gFieldEffectArguments[2];
+ sprite->data3 = gSprites[mapObject->spriteId].pos1.x;
+ sprite->data4 = gSprites[mapObject->spriteId].pos1.y;
+ }
+ return 0;
+}
+
+void sub_8127A7C(struct Sprite *sprite)
+{
+ u8 mapObjectId;
+ const struct MapObjectGraphicsInfo *graphicsInfo;
+ struct Sprite *linkedSprite;
+
+ if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data0, sprite->data1, sprite->data2, &mapObjectId) || !gMapObjects[mapObjectId].mapobj_bit_21)
+ {
+ FieldEffectStop(sprite, FLDEFF_HOT_SPRINGS_WATER);
+ }
+ else
+ {
+ graphicsInfo = GetFieldObjectGraphicsInfo(gMapObjects[mapObjectId].graphicsId);
+ linkedSprite = &gSprites[gMapObjects[mapObjectId].spriteId];
+ sprite->pos1.x = linkedSprite->pos1.x;
+ sprite->pos1.y = (graphicsInfo->height >> 1) + linkedSprite->pos1.y - 8;
+ sprite->subpriority = linkedSprite->subpriority - 1;
+ sub_806487C(sprite, FALSE);
+ }
+}
+
+u32 FldEff_Unknown19(void)
+{
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ sub_8060470((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[17], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gFieldEffectArguments[3];
+ sprite->data0 = FLDEFF_UNKNOWN_19;
+ }
+ return 0;
+}
+
+u32 FldEff_Unknown20(void)
+{
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ sub_8060470((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[18], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gFieldEffectArguments[3];
+ sprite->data0 = FLDEFF_UNKNOWN_20;
+ }
+ return 0;
+}
+
+u32 FldEff_Unknown21(void)
+{
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ sub_8060470((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[19], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gFieldEffectArguments[3];
+ sprite->data0 = FLDEFF_UNKNOWN_21;
+ }
+ return 0;
+}
+
+u32 FldEff_Unknown22(void)
+{
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ sub_8060470((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[20], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gFieldEffectArguments[3];
+ sprite->data0 = FLDEFF_UNKNOWN_22;
+ }
+ return 0;
+}
+
+void ash(s16 x, s16 y, u16 c, s16 d)
+{
+ gFieldEffectArguments[0] = x;
+ gFieldEffectArguments[1] = y;
+ gFieldEffectArguments[2] = 0x52;
+ gFieldEffectArguments[3] = 1;
+ gFieldEffectArguments[4] = c;
+ gFieldEffectArguments[5] = d;
+ FieldEffectStart(FLDEFF_ASH);
+}
+
+u32 FldEff_Ash(void)
+{
+ s16 x;
+ s16 y;
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ x = gFieldEffectArguments[0];
+ y = gFieldEffectArguments[1];
+ sub_8060470(&x, &y, 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[6], x, y, gFieldEffectArguments[2]);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gFieldEffectArguments[3];
+ sprite->data1 = gFieldEffectArguments[0];
+ sprite->data2 = gFieldEffectArguments[1];
+ sprite->data3 = gFieldEffectArguments[4];
+ sprite->data4 = gFieldEffectArguments[5];
+ }
+ return 0;
+}
+
+void sub_8127D84(struct Sprite *sprite)
+{
+ gUnknown_08401E48[sprite->data0](sprite);
+}
+
+static void sub_8127DA0(struct Sprite *sprite)
+{
+ sprite->invisible = TRUE;
+ sprite->animPaused = TRUE;
+ if (--sprite->data4 == 0)
+ {
+ sprite->data0 = 1;
+ }
+}
+
+static void sub_8127DD0(struct Sprite *sprite)
+{
+ sprite->invisible = FALSE;
+ sprite->animPaused = FALSE;
+ MapGridSetMetatileIdAt(sprite->data1, sprite->data2, sprite->data3);
+ CurrentMapDrawMetatileAt(sprite->data1, sprite->data2);
+ gMapObjects[gPlayerAvatar.mapObjectId].mapobj_bit_2 = TRUE;
+ sprite->data0 = 2;
+}
+
+static void sub_8127E30(struct Sprite *sprite)
+{
+ sub_806487C(sprite, FALSE);
+ if (sprite->animEnded)
+ {
+ FieldEffectStop(sprite, FLDEFF_ASH);
+ }
+}
+
+u32 FldEff_SurfBlob(void)
+{
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ sub_8060470((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[7], gFieldEffectArguments[0], gFieldEffectArguments[1], 0x96);
+ if (spriteId !=MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.paletteNum = 0;
+ sprite->data2 = gFieldEffectArguments[2];
+ sprite->data3 = -1;
+ sprite->data6 = -1;
+ sprite->data7 = -1;
+ }
+ FieldEffectActiveListRemove(FLDEFF_SURF_BLOB);
+ return spriteId;
+}
+
+void sub_8127ED0(u8 spriteId, u8 value)
+{
+ gSprites[spriteId].data0 = (gSprites[spriteId].data0 & ~0xF) | (value & 0xF);
+}
+
+void sub_8127EFC(u8 spriteId, u8 value)
+{
+ gSprites[spriteId].data0 = (gSprites[spriteId].data0 & ~0xF0) | ((value & 0xF) << 4);
+}
+
+void sub_8127F28(u8 spriteId, u8 value, s16 data1)
+{
+ gSprites[spriteId].data0 = (gSprites[spriteId].data0 & ~0xF00) | ((value & 0xF) << 8);
+ gSprites[spriteId].data1 = data1;
+}
+
+static u8 sub_8127F5C(struct Sprite *sprite)
+{
+ return sprite->data0 & 0xF;
+}
+
+static u8 sub_8127F64(struct Sprite *sprite)
+{
+ return (sprite->data0 & 0xF0) >> 4;
+}
+
+static u8 sub_8127F70(struct Sprite *sprite)
+{
+ return (sprite->data0 & 0xF00) >> 8;
+}
+
+void sub_8127F7C(struct Sprite *sprite)
+{
+ struct MapObject *mapObject;
+ struct Sprite *linkedSprite;
+
+ mapObject = &gMapObjects[sprite->data2];
+ linkedSprite = &gSprites[mapObject->spriteId];
+ sub_8127FD4(mapObject, sprite);
+ sub_812800C(mapObject, sprite);
+ sub_81280A0(mapObject, linkedSprite, sprite);
+ sprite->oam.priority = linkedSprite->oam.priority;
+}
+
+static void sub_8127FD4(struct MapObject *mapObject, struct Sprite *sprite)
+{
+ u8 unk_8041E54[ARRAY_COUNT(gUnknown_08401E54)];
+
+ memcpy(unk_8041E54, gUnknown_08401E54, sizeof gUnknown_08401E54);
+ if (sub_8127F64(sprite) == 0)
+ {
+ StartSpriteAnimIfDifferent(sprite, unk_8041E54[mapObject->placeholder18]);
+ }
+}
+
+#ifdef NONMATCHING
+static void sub_812800C(struct MapObject *mapObject, struct Sprite *sprite)
+{
+ s16 x;
+ s16 y;
+ u8 i;
+
+ x = mapObject->coords2.x;
+ y = mapObject->coords2.y;
+ if (sprite->pos2.y == 0 && (x != sprite->data6 || y != sprite->data7))
+ {
+ sprite->data5 = sprite->pos2.y;
+ for (sprite->data6 = x, sprite->data7 = y, i = DIR_SOUTH; i <= DIR_EAST; i ++, x = sprite->data6, y = sprite->data7)
+ {
+ MoveCoords(i, &x, &y);
+ if (MapGridGetZCoordAt(x, y) == 3)
+ {
+ sprite->data5 ++;
+ break;
+ }
+ }
+ }
+}
+#else
+__attribute__((naked)) static void sub_812800C(struct MapObject *mapObject, struct Sprite *sprite)
+{
+ asm_unified("\tpush {r4-r7,lr}\n"
+ "\tmov r7, r8\n"
+ "\tpush {r7}\n"
+ "\tsub sp, 0x4\n"
+ "\tadds r4, r1, 0\n"
+ "\tldrh r2, [r0, 0x10]\n"
+ "\tmov r1, sp\n"
+ "\tstrh r2, [r1]\n"
+ "\tldrh r1, [r0, 0x12]\n"
+ "\tmov r0, sp\n"
+ "\tadds r0, 0x2\n"
+ "\tstrh r1, [r0]\n"
+ "\tmovs r2, 0x26\n"
+ "\tldrsh r3, [r4, r2]\n"
+ "\tmov r8, r0\n"
+ "\tcmp r3, 0\n"
+ "\tbne _08128094\n"
+ "\tmov r0, sp\n"
+ "\tmovs r5, 0\n"
+ "\tldrsh r2, [r0, r5]\n"
+ "\tmovs r5, 0x3A\n"
+ "\tldrsh r0, [r4, r5]\n"
+ "\tcmp r2, r0\n"
+ "\tbne _08128048\n"
+ "\tlsls r0, r1, 16\n"
+ "\tasrs r0, 16\n"
+ "\tmovs r5, 0x3C\n"
+ "\tldrsh r1, [r4, r5]\n"
+ "\tcmp r0, r1\n"
+ "\tbeq _08128094\n"
+ "_08128048:\n"
+ "\tstrh r3, [r4, 0x38]\n"
+ "\tstrh r2, [r4, 0x3A]\n"
+ "\tmov r1, r8\n"
+ "\tmovs r2, 0\n"
+ "\tldrsh r0, [r1, r2]\n"
+ "\tstrh r0, [r4, 0x3C]\n"
+ "\tmovs r5, 0x1\n"
+ "\tmov r7, r8\n"
+ "\tmov r6, sp\n"
+ "_0812805A:\n"
+ "\tadds r0, r5, 0\n"
+ "\tmov r1, sp\n"
+ "\tadds r2, r7, 0\n"
+ "\tbl MoveCoords\n"
+ "\tmovs r1, 0\n"
+ "\tldrsh r0, [r6, r1]\n"
+ "\tmovs r2, 0\n"
+ "\tldrsh r1, [r7, r2]\n"
+ "\tbl MapGridGetZCoordAt\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r0, 24\n"
+ "\tcmp r0, 0x3\n"
+ "\tbne _08128080\n"
+ "\tldrh r0, [r4, 0x38]\n"
+ "\tadds r0, 0x1\n"
+ "\tstrh r0, [r4, 0x38]\n"
+ "\tb _08128094\n"
+ "_08128080:\n"
+ "\tadds r0, r5, 0x1\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r5, r0, 24\n"
+ "\tldrh r0, [r4, 0x3A]\n"
+ "\tstrh r0, [r6]\n"
+ "\tldrh r0, [r4, 0x3C]\n"
+ "\tmov r1, r8\n"
+ "\tstrh r0, [r1]\n"
+ "\tcmp r5, 0x4\n"
+ "\tbls _0812805A\n"
+ "_08128094:\n"
+ "\tadd sp, 0x4\n"
+ "\tpop {r3}\n"
+ "\tmov r8, r3\n"
+ "\tpop {r4-r7}\n"
+ "\tpop {r0}\n"
+ "\tbx r0");
+}
+#endif
+
+static void sub_81280A0(struct MapObject *mapObject, struct Sprite *linkedSprite, struct Sprite *sprite)
+{
+ u16 unk_8401E5A[ARRAY_COUNT(gUnknown_08401E5A)];
+ u8 v0;
+
+ memcpy(unk_8401E5A, gUnknown_08401E5A, sizeof gUnknown_08401E5A);
+ v0 = sub_8127F5C(sprite);
+ if (v0 != 0)
+ {
+ if (((u16)(++ sprite->data4) & unk_8401E5A[sprite->data5]) == 0)
+ {
+ sprite->pos2.y += sprite->data3;
+ }
+ if ((sprite->data4 & 0x0F) == 0)
+ {
+ sprite->data3 = -sprite->data3;
+ }
+ if (v0 != 2)
+ {
+ if (sub_8127F70(sprite) == 0)
+ {
+ linkedSprite->pos2.y = sprite->pos2.y;
+ }
+ else
+ {
+ linkedSprite->pos2.y = sprite->data1 + sprite->pos2.y;
+ }
+ sprite->pos1.x = linkedSprite->pos1.x;
+ sprite->pos1.y = linkedSprite->pos1.y + 8;
+ }
+ }
+}
+
+u8 sub_8128124(u8 oldSpriteId)
+{
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ spriteId = CreateSpriteAtEnd(&gDummySpriteTemplate, 0, 0, -1);
+ sprite = &gSprites[spriteId];
+ sprite->callback = sub_8128174;
+ sprite->invisible = TRUE;
+ sprite->data0 = oldSpriteId;
+ sprite->data1 = 1;
+ return spriteId;
+}
+
+static void sub_8128174(struct Sprite *sprite)
+{
+ struct Sprite *oldSprite;
+
+ oldSprite = &gSprites[sprite->data0];
+ if (((sprite->data2++) & 0x03) == 0)
+ {
+ oldSprite->pos2.y += sprite->data1;
+ }
+ if ((sprite->data2 & 0x0F) == 0)
+ {
+ sprite->data1 = -sprite->data1;
+ }
+}
+
+u32 FldEff_Dust(void)
+{
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ sub_8060470((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 12);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[9], gFieldEffectArguments[0], gFieldEffectArguments[1], 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gFieldEffectArguments[3];
+ sprite->data0 = gFieldEffectArguments[2];
+ sprite->data1 = 10;
+ }
+ return 0;
+}
+
+u32 FldEff_SandPile(void)
+{
+ u8 mapObjectId;
+ struct MapObject *mapObject;
+ u8 spriteId;
+ struct Sprite *sprite;
+ const struct MapObjectGraphicsInfo *graphicsInfo;
+
+ mapObjectId = GetFieldObjectIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ mapObject = &gMapObjects[mapObjectId];
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[29], 0, 0, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ graphicsInfo = GetFieldObjectGraphicsInfo(mapObject->graphicsId);
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gSprites[mapObject->spriteId].oam.priority;
+ sprite->data0 = gFieldEffectArguments[0];
+ sprite->data1 = gFieldEffectArguments[1];
+ sprite->data2 = gFieldEffectArguments[2];
+ sprite->data3 = gSprites[mapObject->spriteId].pos1.x;
+ sprite->data4 = gSprites[mapObject->spriteId].pos1.y;
+ sprite->pos2.y = (graphicsInfo->height >> 1) - 2;
+ SeekSpriteAnim(sprite, 2);
+ }
+ return 0;
+}
+
+void sub_81282E0(struct Sprite *sprite)
+{
+ u8 mapObjectId;
+ s16 x;
+ s16 y;
+
+ if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data0, sprite->data1, sprite->data2, &mapObjectId) || !gMapObjects[mapObjectId].mapobj_bit_20)
+ {
+ FieldEffectStop(sprite, FLDEFF_SAND_PILE);
+ }
+ else
+ {
+ y = gSprites[gMapObjects[mapObjectId].spriteId].pos1.y;
+ x = gSprites[gMapObjects[mapObjectId].spriteId].pos1.x;
+ if (x != sprite->data3 || y != sprite->data4)
+ {
+ sprite->data3 = x;
+ sprite->data4 = y;
+ if (sprite->animEnded)
+ {
+ StartSpriteAnim(sprite, 0);
+ }
+ }
+ sprite->pos1.x = x;
+ sprite->pos1.y = y;
+ sprite->subpriority = gSprites[gMapObjects[mapObjectId].spriteId].subpriority;
+ sub_806487C(sprite, FALSE);
+ }
+}
+
+u32 FldEff_Bubbles(void)
+{
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ sub_8060470((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 0);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[34], gFieldEffectArguments[0], gFieldEffectArguments[1], 0x52);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = 1;
+ }
+ return 0;
+}
+
+void sub_8128410(struct Sprite *sprite)
+{
+ sprite->data0 += 0x80;
+ sprite->data0 &= 0x100;
+ sprite->pos1.y -= sprite->data0 >> 8;
+ sub_806487C(sprite, FALSE);
+ if (sprite->invisible || sprite->animEnded)
+ {
+ FieldEffectStop(sprite, FLDEFF_BUBBLES);
+ }
+}
+
+u32 FldEff_BerryTreeGrowthSparkle(void)
+{
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ sub_8060470((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 4);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[22], gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2]);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled = TRUE;
+ sprite->oam.priority = gFieldEffectArguments[3];
+ sprite->oam.paletteNum = 5;
+ sprite->data0 = FLDEFF_BERRY_TREE_GROWTH_SPARKLE;
+ }
+ return 0;
+}
+
+u32 FldEff_TreeDisguise(void)
+{
+ return ShowDisguiseFieldEffect(FLDEFF_TREE_DISGUISE, 0x18, 0x04);
+}
+
+
+u32 FldEff_MountainDisguise(void)
+{
+ return ShowDisguiseFieldEffect(FLDEFF_MOUNTAIN_DISGUISE, 0x19, 0x03);
+}
+
+
+u32 FldEff_SandDisguise(void)
+{
+ return ShowDisguiseFieldEffect(FLDEFF_SAND_DISGUISE, 0x1C, 0x02);
+}
+
+static u32 ShowDisguiseFieldEffect(u8 fldEff, u8 templateIdx, u8 paletteNum)
+{
+ u8 spriteId;
+ struct Sprite *sprite;
+
+ if (TryGetFieldObjectIdByLocalIdAndMap(gFieldEffectArguments[0], gFieldEffectArguments[1], gFieldEffectArguments[2], &spriteId))
+ {
+ FieldEffectActiveListRemove(fldEff);
+ return MAX_SPRITES;
+ }
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[templateIdx], 0, 0, 0);
+ if (spriteId != MAX_SPRITES)
+ {
+ sprite = &gSprites[spriteId];
+ sprite->coordOffsetEnabled ++;
+ sprite->oam.paletteNum = paletteNum;
+ sprite->data1 = fldEff;
+ sprite->data2 = gFieldEffectArguments[0];
+ sprite->data3 = gFieldEffectArguments[1];
+ sprite->data4 = gFieldEffectArguments[2];
+ }
+ return spriteId;
+}
+
+void sub_81285AC(struct Sprite *sprite)
+{
+ u8 mapObjectId;
+ const struct MapObjectGraphicsInfo *graphicsInfo;
+ struct Sprite *linkedSprite;
+
+ if (TryGetFieldObjectIdByLocalIdAndMap(sprite->data2, sprite->data3, sprite->data4, &mapObjectId))
+ {
+ FieldEffectStop(sprite, sprite->data1);
+ }
+ // else {
+ graphicsInfo = GetFieldObjectGraphicsInfo(gMapObjects[mapObjectId].graphicsId);
+ linkedSprite = &gSprites[gMapObjects[mapObjectId].spriteId];
+ sprite->invisible = linkedSprite->invisible;
+ sprite->pos1.x = linkedSprite->pos1.x;
+ sprite->pos1.y = (graphicsInfo->height >> 1) + linkedSprite->pos1.y - 16;
+ sprite->subpriority = linkedSprite->subpriority - 1;
+ if (sprite->data0 == 1)
+ {
+ sprite->data0 ++;
+ StartSpriteAnim(sprite, 1);
+ }
+ if (sprite->data0 == 2 && sprite->animEnded)
+ {
+ sprite->data7 = 1;
+ }
+ if (sprite->data0 == 3)
+ {
+ FieldEffectStop(sprite, sprite->data1);
+ }
+ // }
+}
+
+void sub_812869C(struct MapObject *mapObject)
+{
+ if (mapObject->mapobj_unk_21 == 1)
+ {
+ gSprites[mapObject->mapobj_unk_1A].data0 ++;
+ }
+}
+
+bool8 sub_81286C4(struct MapObject *mapObject)
+{
+ struct Sprite *sprite;
+
+ if (mapObject->mapobj_unk_21 == 2)
+ {
+ return TRUE;
+ }
+ if (mapObject->mapobj_unk_21 == 0)
+ {
+ return TRUE;
+ }
+ sprite = &gSprites[mapObject->mapobj_unk_1A];
+ if (sprite->data7)
+ {
+ mapObject->mapobj_unk_21 = 2;
+ sprite->data0 ++;
+ return TRUE;
+ }
+ return FALSE;
+}
+
+u32 FldEff_Sparkle(void)
+{
+ u8 spriteId;
+
+ gFieldEffectArguments[0] += 7;
+ gFieldEffectArguments[1] += 7;
+ sub_8060470((s16 *)&gFieldEffectArguments[0], (s16 *)&gFieldEffectArguments[1], 8, 8);
+ spriteId = CreateSpriteAtEnd(gFieldEffectObjectTemplatePointers[35], gFieldEffectArguments[0], gFieldEffectArguments[1], 0x52);
+ if (spriteId != MAX_SPRITES)
+ {
+ gSprites[spriteId].oam.priority = gFieldEffectArguments[2];
+ gSprites[spriteId].coordOffsetEnabled = TRUE;
+ }
+ return 0;
+}
+
+void sub_8128774(struct Sprite *sprite)
+{
+ if (sprite->data0 == 0)
+ {
+ if (sprite->animEnded)
+ {
+ sprite->invisible = TRUE;
+ sprite->data0 ++;
+ }
+ if (sprite->data0 == 0)
+ {
+ return;
+ }
+ }
+ if (++ sprite->data1 >= 35)
+ {
+ FieldEffectStop(sprite, FLDEFF_SPARKLE);
+ }
+}
+
+void sub_81287C4(struct Sprite *sprite)
+{
+ if (sprite->animEnded)
+ {
+ FieldEffectStop(sprite, sprite->data1);
+ }
+ else
+ {
+ sub_806487C(sprite, FALSE);
+ SetObjectSubpriorityByZCoord(sprite->data0, sprite, 0);
+ }
+}
+
+void sub_8128800(struct Sprite *sprite)
+{
+ if (sprite->animEnded)
+ {
+ FieldEffectStop(sprite, sprite->data0);
+ }
+ else
+ {
+ sub_806487C(sprite, FALSE);
+ }
+}
+
+#ifdef NONMATCHING
+static void sub_812882C(struct Sprite *sprite /*r6*/, u8 z, u8 offset)
+{
+ u8 i;
+ s16 xlo;
+ s16 xhi;
+ s16 lx;
+ s16 lyhi;
+ s16 ly;
+ s16 ylo;
+ s16 yhi;
+ struct MapObject *mapObject; // r4
+ const struct MapObjectGraphicsInfo *graphicsInfo; // destroyed
+ struct Sprite *linkedSprite; // r5
+
+ SetObjectSubpriorityByZCoord(z, sprite, offset);
+ for (i = 0; i < 16; i ++)
+ {
+ mapObject = &gMapObjects[i];
+ if (mapObject->active)
+ {
+ graphicsInfo = GetFieldObjectGraphicsInfo(mapObject->graphicsId);
+ linkedSprite = &gSprites[mapObject->spriteId];
+ xhi = sprite->pos1.x + sprite->centerToCornerVecX;
+ xlo = sprite->pos1.x - sprite->centerToCornerVecX;
+ lx = linkedSprite->pos1.x;
+ if (xhi < lx && xlo > lx)
+ {
+ lyhi = linkedSprite->pos1.y + linkedSprite->centerToCornerVecY;
+ ly = linkedSprite->pos1.y;
+ ylo = sprite->pos1.y - sprite->centerToCornerVecY;
+ yhi = ylo + linkedSprite->centerToCornerVecY;
+ if ((lyhi < yhi || lyhi < ylo) && ly > yhi)
+ {
+ if (sprite->subpriority <= linkedSprite->subpriority)
+ {
+ sprite->subpriority = linkedSprite->subpriority + 2;
+ break;
+ }
+ }
+ }
+ }
+ }
+}
+#else
+__attribute__((naked)) static void sub_812882C(struct Sprite *sprite /*r6*/, u8 z, u8 offset)
+{
+ asm_unified("\tpush {r4-r7,lr}\n"
+ "\tadds r6, r0, 0\n"
+ "\tadds r0, r1, 0\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r0, 24\n"
+ "\tlsls r2, 24\n"
+ "\tlsrs r2, 24\n"
+ "\tadds r1, r6, 0\n"
+ "\tbl SetObjectSubpriorityByZCoord\n"
+ "\tmovs r7, 0\n"
+ "_08128842:\n"
+ "\tlsls r0, r7, 3\n"
+ "\tadds r0, r7\n"
+ "\tlsls r0, 2\n"
+ "\tldr r1, _081288DC @ =gMapObjects\n"
+ "\tadds r4, r0, r1\n"
+ "\tldrb r0, [r4]\n"
+ "\tlsls r0, 31\n"
+ "\tcmp r0, 0\n"
+ "\tbeq _081288E4\n"
+ "\tldrb r0, [r4, 0x5]\n"
+ "\tbl GetFieldObjectGraphicsInfo\n"
+ "\tldrb r1, [r4, 0x4]\n"
+ "\tlsls r0, r1, 4\n"
+ "\tadds r0, r1\n"
+ "\tlsls r0, 2\n"
+ "\tldr r1, _081288E0 @ =gSprites\n"
+ "\tadds r5, r0, r1\n"
+ "\tadds r0, r6, 0\n"
+ "\tadds r0, 0x28\n"
+ "\tmovs r2, 0\n"
+ "\tldrsb r2, [r0, r2]\n"
+ "\tldrh r0, [r6, 0x20]\n"
+ "\tadds r1, r0, r2\n"
+ "\tsubs r0, r2\n"
+ "\tlsls r0, 16\n"
+ "\tlsrs r4, r0, 16\n"
+ "\tlsls r1, 16\n"
+ "\tasrs r1, 16\n"
+ "\tmovs r0, 0x20\n"
+ "\tldrsh r2, [r5, r0]\n"
+ "\tcmp r1, r2\n"
+ "\tbge _081288E4\n"
+ "\tlsls r0, r4, 16\n"
+ "\tasrs r0, 16\n"
+ "\tcmp r0, r2\n"
+ "\tble _081288E4\n"
+ "\tadds r0, r5, 0\n"
+ "\tadds r0, 0x29\n"
+ "\tmovs r3, 0\n"
+ "\tldrsb r3, [r0, r3]\n"
+ "\tldrh r2, [r5, 0x22]\n"
+ "\tadds r2, r3\n"
+ "\tldrh r4, [r5, 0x22]\n"
+ "\tadds r0, r6, 0\n"
+ "\tadds r0, 0x29\n"
+ "\tmovs r1, 0\n"
+ "\tldrsb r1, [r0, r1]\n"
+ "\tldrh r0, [r6, 0x22]\n"
+ "\tsubs r0, r1\n"
+ "\tlsls r0, 16\n"
+ "\tasrs r0, 16\n"
+ "\tadds r3, r0, r3\n"
+ "\tlsls r2, 16\n"
+ "\tasrs r2, 16\n"
+ "\tlsls r3, 16\n"
+ "\tasrs r3, 16\n"
+ "\tcmp r2, r3\n"
+ "\tblt _081288BC\n"
+ "\tcmp r2, r0\n"
+ "\tbge _081288E4\n"
+ "_081288BC:\n"
+ "\tlsls r0, r4, 16\n"
+ "\tasrs r0, 16\n"
+ "\tcmp r0, r3\n"
+ "\tble _081288E4\n"
+ "\tadds r2, r6, 0\n"
+ "\tadds r2, 0x43\n"
+ "\tadds r0, r5, 0\n"
+ "\tadds r0, 0x43\n"
+ "\tldrb r1, [r0]\n"
+ "\tldrb r0, [r2]\n"
+ "\tcmp r0, r1\n"
+ "\tbhi _081288E4\n"
+ "\tadds r0, r1, 0x2\n"
+ "\tstrb r0, [r2]\n"
+ "\tb _081288EE\n"
+ "\t.align 2, 0\n"
+ "_081288DC: .4byte gMapObjects\n"
+ "_081288E0: .4byte gSprites\n"
+ "_081288E4:\n"
+ "\tadds r0, r7, 0x1\n"
+ "\tlsls r0, 24\n"
+ "\tlsrs r7, r0, 24\n"
+ "\tcmp r7, 0xF\n"
+ "\tbls _08128842\n"
+ "_081288EE:\n"
+ "\tpop {r4-r7}\n"
+ "\tpop {r0}\n"
+ "\tbx r0");
+}
+#endif
diff --git a/src/field_fadetransition.c b/src/field_fadetransition.c
index e614d899a..d95177821 100644
--- a/src/field_fadetransition.c
+++ b/src/field_fadetransition.c
@@ -15,7 +15,7 @@
#include "map_obj_lock.h"
#include "metatile_behavior.h"
#include "palette.h"
-#include "rom4.h"
+#include "overworld.h"
#include "script.h"
#include "songs.h"
#include "sound.h"
@@ -40,8 +40,8 @@ void palette_bg_fill_black(void)
void pal_fill_for_map_transition(void)
{
- u8 map_light = get_map_light_from_warp0();
- switch (fade_type_for_given_maplight_pair(map_light, sav1_map_get_light_level()))
+ u8 map_light = get_map_type_from_warp0();
+ switch (fade_type_for_given_maplight_pair(map_light, Overworld_GetMapTypeOfSaveblockLocation()))
{
case 0:
fade_screen(0, 0);
@@ -61,7 +61,7 @@ void pal_fill_black(void)
void fade_8080918(void)
{
- u8 light_level = sav1_map_get_light_level();
+ u8 light_level = Overworld_GetMapTypeOfSaveblockLocation();
switch (sub_810CDB8(light_level, warp1_get_mapheader()->mapType))
{
case 0:
@@ -547,7 +547,7 @@ void sub_808115C(u8 taskId)
case 0:
FreezeMapObjects();
PlayerGetDestCoords(x, y);
- PlaySE(sub_8058790(*x, *y - 1));
+ PlaySE(GetDoorSoundEffect(*x, *y - 1));
task->data[1] = FieldAnimateDoorOpen(*x, *y - 1);
task->data[0] = 1;
break;
diff --git a/src/field_ground_effect.c b/src/field_ground_effect.c
index 42862d0ff..5af8ea3e3 100644
--- a/src/field_ground_effect.c
+++ b/src/field_ground_effect.c
@@ -1,11 +1,38 @@
#include "global.h"
#include "field_ground_effect.h"
+#include "field_effect.h"
+#include "field_effect_helpers.h"
+#include "field_map_obj_helpers.h"
#include "fieldmap.h"
#include "metatile_behavior.h"
-extern u32 gUnknown_08376008[];
+static void nullsub(struct MapObject *mapObj, struct Sprite *sprite, u8);
+static void DoTracksGroundEffect_Footprints(struct MapObject *mapObj, struct Sprite *sprite, u8);
+static void DoTracksGroundEffect_BikeTireTracks(
+ struct MapObject *mapObj, struct Sprite *sprite, u8);
+void GroundEffect_SpawnOnTallGrass(struct MapObject *mapObj, struct Sprite *sprite);
+void sub_8063E94(struct MapObject *mapObj, struct Sprite *sprite);
+void sub_8063EE0(struct MapObject *mapObj, struct Sprite *sprite);
+void sub_8063F2C(struct MapObject *mapObj, struct Sprite *sprite);
+void GroundEffect_WaterReflection(struct MapObject *mapObj, struct Sprite *sprite);
+void GroundEffect_IceReflection(struct MapObject *mapObj, struct Sprite *sprite);
+void GroundEffect_FlowingWater(struct MapObject *mapObj, struct Sprite *sprite);
+void sub_8063FA0(struct MapObject *mapObj, struct Sprite *sprite);
+void sub_8063FCC(struct MapObject *mapObj, struct Sprite *sprite);
+void GroundEffect_Ripple(struct MapObject *mapObj, struct Sprite *sprite);
+void GroundEffect_StepOnPuddle(struct MapObject *mapObj, struct Sprite *sprite);
+void GroundEffect_SandPile(struct MapObject *mapObj, struct Sprite *sprite);
+void GroundEffect_JumpOnTallGrass(struct MapObject *mapObj, struct Sprite *sprite);
+void GroundEffect_JumpOnLongGrass(struct MapObject *mapObj, struct Sprite *sprite);
+void GroundEffect_JumpOnShallowWater(struct MapObject *mapObj, struct Sprite *sprite);
+void GroundEffect_JumpOnWater(struct MapObject *mapObj, struct Sprite *sprite);
+void GroundEffect_JumpLandingDust(struct MapObject *mapObj, struct Sprite *sprite);
+void GroundEffect_ShortGrass(struct MapObject *mapObj, struct Sprite *sprite);
+void GroundEffect_HotSprings(struct MapObject *mapObj, struct Sprite *sprite);
+void GroundEffect_Seaweed(struct MapObject *mapObj, struct Sprite *sprite);
+u8 GetReflectionTypeByMetatileBehavior(u32 behavior);
-void GetAllGroundEffectFlags_OnSpawn(struct MapObject *mapObj, u32 *flags)
+static void GetAllGroundEffectFlags_OnSpawn(struct MapObject *mapObj, u32 *flags)
{
FieldObjectUpdateMetatileBehaviors(mapObj);
GetGroundEffectFlags_Reflection(mapObj, flags);
@@ -17,7 +44,7 @@ void GetAllGroundEffectFlags_OnSpawn(struct MapObject *mapObj, u32 *flags)
GetGroundEffectFlags_HotSprings(mapObj, flags);
}
-void GetAllGroundEffectFlags_OnBeginStep(struct MapObject *mapObj, u32 *flags)
+static void GetAllGroundEffectFlags_OnBeginStep(struct MapObject *mapObj, u32 *flags)
{
FieldObjectUpdateMetatileBehaviors(mapObj);
GetGroundEffectFlags_Reflection(mapObj, flags);
@@ -31,7 +58,7 @@ void GetAllGroundEffectFlags_OnBeginStep(struct MapObject *mapObj, u32 *flags)
GetGroundEffectFlags_HotSprings(mapObj, flags);
}
-void GetAllGroundEffectFlags_OnFinishStep(struct MapObject *mapObj, u32 *flags)
+static void GetAllGroundEffectFlags_OnFinishStep(struct MapObject *mapObj, u32 *flags)
{
FieldObjectUpdateMetatileBehaviors(mapObj);
GetGroundEffectFlags_ShallowFlowingWater(mapObj, flags);
@@ -101,7 +128,7 @@ void GetGroundEffectFlags_Tracks(struct MapObject *mapObj, u32 *flags)
*flags |= 0x100;
}
else if (MetatileBehavior_IsSandOrDeepSand(mapObj->mapobj_unk_1F)
- || MetatileBehavior_IsUnusedFootprintMetatile(mapObj->mapobj_unk_1F))
+ || MetatileBehavior_IsUnusedFootprintMetatile(mapObj->mapobj_unk_1F))
{
*flags |= 0x80;
}
@@ -110,7 +137,7 @@ void GetGroundEffectFlags_Tracks(struct MapObject *mapObj, u32 *flags)
void GetGroundEffectFlags_SandPile(struct MapObject *mapObj, u32 *flags)
{
if (MetatileBehavior_IsDeepSand(mapObj->mapobj_unk_1E)
- && MetatileBehavior_IsDeepSand(mapObj->mapobj_unk_1F))
+ && MetatileBehavior_IsDeepSand(mapObj->mapobj_unk_1F))
{
if (!mapObj->mapobj_bit_20)
{
@@ -127,8 +154,10 @@ void GetGroundEffectFlags_SandPile(struct MapObject *mapObj, u32 *flags)
void GetGroundEffectFlags_ShallowFlowingWater(struct MapObject *mapObj, u32 *flags)
{
- if ((MetatileBehavior_IsShallowFlowingWater(mapObj->mapobj_unk_1E) && MetatileBehavior_IsShallowFlowingWater(mapObj->mapobj_unk_1F))
- || (MetatileBehavior_IsPacifidlogLog(mapObj->mapobj_unk_1E) && MetatileBehavior_IsPacifidlogLog(mapObj->mapobj_unk_1F)))
+ if ((MetatileBehavior_IsShallowFlowingWater(mapObj->mapobj_unk_1E)
+ && MetatileBehavior_IsShallowFlowingWater(mapObj->mapobj_unk_1F))
+ || (MetatileBehavior_IsPacifidlogLog(mapObj->mapobj_unk_1E)
+ && MetatileBehavior_IsPacifidlogLog(mapObj->mapobj_unk_1F)))
{
if (!mapObj->mapobj_bit_19)
{
@@ -146,7 +175,7 @@ void GetGroundEffectFlags_ShallowFlowingWater(struct MapObject *mapObj, u32 *fla
void GetGroundEffectFlags_Puddle(struct MapObject *mapObj, u32 *flags)
{
if (MetatileBehavior_IsPuddle(mapObj->mapobj_unk_1E)
- && MetatileBehavior_IsPuddle(mapObj->mapobj_unk_1F))
+ && MetatileBehavior_IsPuddle(mapObj->mapobj_unk_1F))
{
*flags |= 0x400;
}
@@ -161,7 +190,7 @@ void GetGroundEffectFlags_Ripple(struct MapObject *mapObj, u32 *flags)
void GetGroundEffectFlags_ShortGrass(struct MapObject *mapObj, u32 *flags)
{
if (MetatileBehavior_IsShortGrass(mapObj->mapobj_unk_1E)
- && MetatileBehavior_IsShortGrass(mapObj->mapobj_unk_1F))
+ && MetatileBehavior_IsShortGrass(mapObj->mapobj_unk_1F))
{
if (!mapObj->mapobj_bit_18)
{
@@ -179,7 +208,7 @@ void GetGroundEffectFlags_ShortGrass(struct MapObject *mapObj, u32 *flags)
void GetGroundEffectFlags_HotSprings(struct MapObject *mapObj, u32 *flags)
{
if (MetatileBehavior_IsHotSprings(mapObj->mapobj_unk_1E)
- && MetatileBehavior_IsHotSprings(mapObj->mapobj_unk_1F))
+ && MetatileBehavior_IsHotSprings(mapObj->mapobj_unk_1F))
{
if (!mapObj->mapobj_bit_21)
{
@@ -204,8 +233,7 @@ void GetGroundEffectFlags_JumpLanding(struct MapObject *mapObj, u32 *flags)
{
typedef bool8 (*MetatileFunc)(u8);
- static const MetatileFunc metatileFuncs[] =
- {
+ static const MetatileFunc metatileFuncs[] = {
MetatileBehavior_IsTallGrass,
MetatileBehavior_IsLongGrass,
MetatileBehavior_IsPuddle,
@@ -214,14 +242,13 @@ void GetGroundEffectFlags_JumpLanding(struct MapObject *mapObj, u32 *flags)
MetatileBehavior_IsATile,
};
- static const u32 jumpLandingFlags[] =
- {
- 0x00001000, // Landing in tall grass
- 0x00002000, // Landing in long grass
- 0x00004000, // Landing on puddle
- 0x00008000, // Landing on surfable water or underwater
- 0x00004000, // Landing on shallow flowing water
- 0x00010000, // Landing on any other type of ground
+ static const u32 jumpLandingFlags[] = {
+ 0x00001000, // Landing in tall grass
+ 0x00002000, // Landing in long grass
+ 0x00004000, // Landing on puddle
+ 0x00008000, // Landing on surfable water or underwater
+ 0x00004000, // Landing on shallow flowing water
+ 0x00010000, // Landing on any other type of ground
};
if (mapObj->mapobj_bit_5 && !mapObj->mapobj_bit_25)
@@ -238,3 +265,532 @@ void GetGroundEffectFlags_JumpLanding(struct MapObject *mapObj, u32 *flags)
}
}
}
+
+u8 FieldObjectCheckForReflectiveSurface(struct MapObject *mapObj)
+{
+ const struct MapObjectGraphicsInfo *info = GetFieldObjectGraphicsInfo(mapObj->graphicsId);
+
+ // ceil div by tile width?
+ s16 width = (info->width + 8) >> 4;
+ s16 height = (info->height + 8) >> 4;
+ s16 i;
+ s16 j;
+ u8 result;
+ u8 b;
+ s16 one;
+
+#define RETURN_REFLECTION_TYPE_AT(x, y) \
+ b = MapGridGetMetatileBehaviorAt(x, y); \
+ result = GetReflectionTypeByMetatileBehavior(b); \
+ if (result != 0) \
+ return result;
+
+ for (i = 0, one = 1; i < height; i++)
+ {
+ RETURN_REFLECTION_TYPE_AT(mapObj->coords2.x, mapObj->coords2.y + one + i)
+ RETURN_REFLECTION_TYPE_AT(mapObj->coords3.x, mapObj->coords3.y + one + i)
+ for (j = 1; j < width; j++)
+ {
+ RETURN_REFLECTION_TYPE_AT(mapObj->coords2.x + j, mapObj->coords2.y + one + i)
+ RETURN_REFLECTION_TYPE_AT(mapObj->coords2.x - j, mapObj->coords2.y + one + i)
+ RETURN_REFLECTION_TYPE_AT(mapObj->coords3.x + j, mapObj->coords3.y + one + i)
+ RETURN_REFLECTION_TYPE_AT(mapObj->coords3.x - j, mapObj->coords3.y + one + i)
+ }
+ }
+ return 0;
+
+#undef RETURN_REFLECTION_TYPE_AT
+}
+
+u8 GetReflectionTypeByMetatileBehavior(u32 behavior)
+{
+ if (MetatileBehavior_IsIce(behavior))
+ return 1;
+ else if (MetatileBehavior_IsReflective(behavior))
+ return 2;
+ else
+ return 0;
+}
+
+u8 GetLedgeJumpDirection(s16 x, s16 y, u8 z)
+{
+ static bool8 (*const unknown_08376040[])(u8) = {
+ MetatileBehavior_IsJumpSouth,
+ MetatileBehavior_IsJumpNorth,
+ MetatileBehavior_IsJumpWest,
+ MetatileBehavior_IsJumpEast,
+ };
+
+ u8 b;
+ u8 index = z;
+
+ if (index == 0)
+ return 0;
+ else if (index > 4)
+ index -= 4;
+
+ index--;
+ b = MapGridGetMetatileBehaviorAt(x, y);
+
+ if (unknown_08376040[index](b) == 1)
+ return index + 1;
+
+ return 0;
+}
+
+void FieldObjectSetSpriteOamTableForLongGrass(struct MapObject *mapObj, struct Sprite *sprite)
+{
+ if (mapObj->mapobj_bit_4)
+ return;
+
+ if (!MetatileBehavior_IsLongGrass(mapObj->mapobj_unk_1E))
+ return;
+
+ if (!MetatileBehavior_IsLongGrass(mapObj->mapobj_unk_1F))
+ return;
+
+ sprite->subspriteTableNum = 4;
+
+ if (ZCoordToPriority(mapObj->elevation) == 1)
+ sprite->subspriteTableNum = 5;
+}
+
+bool8 IsZCoordMismatchAt(u8 z, s16 x, s16 y)
+{
+ u8 mapZ;
+
+ if (z == 0)
+ return FALSE;
+
+ mapZ = MapGridGetZCoordAt(x, y);
+
+ if (mapZ == 0 || mapZ == 0xF)
+ return FALSE;
+
+ if (mapZ != z)
+ return TRUE;
+
+ return FALSE;
+}
+
+static const u8 sUnknown_08376050[] = {
+ 0x73, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x73, 0x53, 0x00, 0x00, 0x73
+};
+
+// Each byte corresponds to a sprite priority for a field object.
+// This is directly the inverse of gFieldObjectPriorities_08376070.
+static const u8 sFieldObjectPriorities_08376060[] = {
+ 2, 2, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 0, 0, 2
+};
+
+// Each byte corresponds to a sprite priority for a field object.
+// This is the inverse of gFieldObjectPriorities_08376060.
+// 1 = Above player sprite
+// 2 = Below player sprite
+static const u8 sFieldObjectPriorities_08376070[] = {
+ 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 0, 0, 1,
+};
+
+void FieldObjectUpdateZCoordAndPriority(struct MapObject *mapObj, struct Sprite *sprite)
+{
+ if (mapObj->mapobj_bit_26)
+ return;
+
+ FieldObjectUpdateZCoord(mapObj);
+
+ sprite->subspriteTableNum = sFieldObjectPriorities_08376070[mapObj->elevation];
+ sprite->oam.priority = sFieldObjectPriorities_08376060[mapObj->elevation];
+}
+
+void InitObjectPriorityByZCoord(struct Sprite *sprite, u8 z)
+{
+ sprite->subspriteTableNum = sFieldObjectPriorities_08376070[z];
+ sprite->oam.priority = sFieldObjectPriorities_08376060[z];
+}
+
+u8 ZCoordToPriority(u8 z)
+{
+ return sFieldObjectPriorities_08376060[z];
+}
+
+void FieldObjectUpdateZCoord(struct MapObject *mapObj)
+{
+ u8 z = MapGridGetZCoordAt(mapObj->coords2.x, mapObj->coords2.y);
+ u8 z2 = MapGridGetZCoordAt(mapObj->coords3.x, mapObj->coords3.y);
+
+ if (z == 0xF || z2 == 0xF)
+ return;
+
+ mapObj->mapobj_unk_0B_0 = z;
+
+ if (z != 0 && z != 0xF)
+ mapObj->elevation = z;
+}
+
+void SetObjectSubpriorityByZCoord(u8 a, struct Sprite *sprite, u8 b)
+{
+ s32 tmp = sprite->centerToCornerVecY;
+ u32 tmpa = *(u16 *)&sprite->pos1.y;
+ u32 tmpb = *(u16 *)&gSpriteCoordOffsetY;
+ s32 tmp2 = (tmpa - tmp) + tmpb;
+ u16 tmp3 = (0x10 - ((((u32)tmp2 + 8) & 0xFF) >> 4)) * 2;
+ sprite->subpriority = tmp3 + sUnknown_08376050[a] + b;
+}
+
+void FieldObjectUpdateSubpriority(struct MapObject *mapObj, struct Sprite *sprite)
+{
+ if (mapObj->mapobj_bit_26)
+ return;
+
+ SetObjectSubpriorityByZCoord(mapObj->elevation, sprite, 1);
+}
+
+bool8 AreZCoordsCompatible(u8 a, u8 b)
+{
+ if (a == 0 || b == 0)
+ return TRUE;
+
+ if (a != b)
+ return FALSE;
+
+ return TRUE;
+}
+
+void GroundEffect_SpawnOnTallGrass(struct MapObject *mapObj, struct Sprite *sprite)
+{
+ u8 *ptr;
+
+ gFieldEffectArguments[0] = mapObj->coords2.x;
+ gFieldEffectArguments[1] = mapObj->coords2.y;
+ gFieldEffectArguments[2] = mapObj->elevation;
+ gFieldEffectArguments[3] = 2;
+ gFieldEffectArguments[4] = (mapObj->localId << 8) | mapObj->mapNum;
+ gFieldEffectArguments[5] = mapObj->mapGroup;
+
+ ptr = (u8 *)&gSaveBlock1;
+ gFieldEffectArguments[6] = ((u8)gSaveBlock1.location.mapNum << 8)
+ | (u8)gSaveBlock1.location.mapGroup;
+
+ gFieldEffectArguments[7] = 1;
+ FieldEffectStart(FLDEFF_TALL_GRASS);
+}
+
+void sub_8063E94(struct MapObject *mapObj, struct Sprite *sprite)
+{
+ u8 *ptr;
+
+ gFieldEffectArguments[0] = mapObj->coords2.x;
+ gFieldEffectArguments[1] = mapObj->coords2.y;
+ gFieldEffectArguments[2] = mapObj->elevation;
+ gFieldEffectArguments[3] = 2;
+ gFieldEffectArguments[4] = (mapObj->localId << 8) | mapObj->mapNum;
+ gFieldEffectArguments[5] = mapObj->mapGroup;
+
+ ptr = (u8 *)&gSaveBlock1;
+ gFieldEffectArguments[6] = ((u8)gSaveBlock1.location.mapNum << 8)
+ | (u8)gSaveBlock1.location.mapGroup;
+
+ gFieldEffectArguments[7] = 0;
+ FieldEffectStart(FLDEFF_TALL_GRASS);
+}
+
+void sub_8063EE0(struct MapObject *mapObj, struct Sprite *sprite)
+{
+ u8 *ptr;
+
+ gFieldEffectArguments[0] = mapObj->coords2.x;
+ gFieldEffectArguments[1] = mapObj->coords2.y;
+ gFieldEffectArguments[2] = mapObj->elevation;
+ gFieldEffectArguments[3] = 2;
+ gFieldEffectArguments[4] = (mapObj->localId << 8) | mapObj->mapNum;
+ gFieldEffectArguments[5] = mapObj->mapGroup;
+
+ ptr = (u8 *)&gSaveBlock1;
+ gFieldEffectArguments[6] = ((u8)gSaveBlock1.location.mapNum << 8)
+ | (u8)gSaveBlock1.location.mapGroup;
+
+ gFieldEffectArguments[7] = 1;
+ FieldEffectStart(FLDEFF_LONG_GRASS);
+}
+
+void sub_8063F2C(struct MapObject *mapObj, struct Sprite *sprite)
+{
+ u8 *ptr;
+
+ gFieldEffectArguments[0] = mapObj->coords2.x;
+ gFieldEffectArguments[1] = mapObj->coords2.y;
+ gFieldEffectArguments[2] = mapObj->elevation;
+ gFieldEffectArguments[3] = 2;
+ gFieldEffectArguments[4] = (mapObj->localId << 8) | mapObj->mapNum;
+ gFieldEffectArguments[5] = mapObj->mapGroup;
+
+ ptr = (u8 *)&gSaveBlock1;
+ gFieldEffectArguments[6] = ((u8)gSaveBlock1.location.mapNum << 8)
+ | (u8)gSaveBlock1.location.mapGroup;
+
+ gFieldEffectArguments[7] = 0;
+ FieldEffectStart(FLDEFF_LONG_GRASS);
+}
+
+void GroundEffect_WaterReflection(struct MapObject *mapObj, struct Sprite *sprite)
+{
+ SetUpReflection(mapObj, sprite, 0);
+}
+
+void GroundEffect_IceReflection(struct MapObject *mapObj, struct Sprite *sprite)
+{
+ SetUpReflection(mapObj, sprite, 1);
+}
+
+void GroundEffect_FlowingWater(struct MapObject *mapObj, struct Sprite *sprite)
+{
+ oe_exec_and_other_stuff(FLDEFF_FEET_IN_FLOWING_WATER, mapObj);
+}
+
+static void (*const gUnknown_08376080[])(struct MapObject *mapObj, struct Sprite *sprite, u8 a) = {
+ nullsub, DoTracksGroundEffect_Footprints, DoTracksGroundEffect_BikeTireTracks,
+};
+
+void sub_8063FA0(struct MapObject *mapObj, struct Sprite *sprite)
+{
+ const struct MapObjectGraphicsInfo *info = GetFieldObjectGraphicsInfo(mapObj->graphicsId);
+ gUnknown_08376080[info->tracks](mapObj, sprite, 0);
+}
+
+void sub_8063FCC(struct MapObject *mapObj, struct Sprite *sprite)
+{
+ const struct MapObjectGraphicsInfo *info = GetFieldObjectGraphicsInfo(mapObj->graphicsId);
+ gUnknown_08376080[info->tracks](mapObj, sprite, 1);
+}
+
+static void nullsub(struct MapObject *mapObj, struct Sprite *sprite, u8 a)
+{
+}
+
+static void DoTracksGroundEffect_Footprints(struct MapObject *mapObj, struct Sprite *sprite, u8 a)
+{
+ // First half-word is a Field Effect script id. (gFieldEffectScriptPointers)
+ u16 sandFootprints_FieldEffectData[2] = {
+ FLDEFF_SAND_FOOTPRINTS,
+ FLDEFF_DEEP_SAND_FOOTPRINTS
+ };
+
+ gFieldEffectArguments[0] = mapObj->coords3.x;
+ gFieldEffectArguments[1] = mapObj->coords3.y;
+ gFieldEffectArguments[2] = 149;
+ gFieldEffectArguments[3] = 2;
+ gFieldEffectArguments[4] = mapObj->mapobj_unk_18;
+ FieldEffectStart(sandFootprints_FieldEffectData[a]);
+}
+
+static void DoTracksGroundEffect_BikeTireTracks(
+ struct MapObject *mapObj, struct Sprite *sprite, u8 a)
+{
+ // Specifies which bike track shape to show next.
+ // For example, when the bike turns from up to right, it will show
+ // a track that curves to the right.
+ // Each 4-byte row corresponds to the initial direction of the bike, and
+ // each byte in that row is for the next direction of the bike in the order
+ // of down, up, left, right.
+ static const u8 bikeTireTracks_Transitions[4][4] = {
+ 1, 2, 7, 8,
+ 1, 2, 6, 5,
+ 5, 8, 3, 4,
+ 6, 7, 3, 4,
+ };
+
+ if (mapObj->coords2.x != mapObj->coords3.x || mapObj->coords2.y != mapObj->coords3.y)
+ {
+ gFieldEffectArguments[0] = mapObj->coords3.x;
+ gFieldEffectArguments[1] = mapObj->coords3.y;
+ gFieldEffectArguments[2] = 149;
+ gFieldEffectArguments[3] = 2;
+ gFieldEffectArguments[4] =
+ bikeTireTracks_Transitions[mapObj->mapobj_unk_20][mapObj->mapobj_unk_18 - 5];
+ FieldEffectStart(FLDEFF_BIKE_TIRE_TRACKS);
+ }
+}
+
+void GroundEffect_Ripple(struct MapObject *mapObj, struct Sprite *sprite)
+{
+ DoRippleFieldEffect(mapObj, sprite);
+}
+
+void GroundEffect_StepOnPuddle(struct MapObject *mapObj, struct Sprite *sprite)
+{
+ oe_exec_and_other_stuff(FLDEFF_SPLASH, mapObj);
+}
+
+void GroundEffect_SandPile(struct MapObject *mapObj, struct Sprite *sprite)
+{
+ oe_exec_and_other_stuff(FLDEFF_SAND_PILE, mapObj);
+}
+
+void GroundEffect_JumpOnTallGrass(struct MapObject *mapObj, struct Sprite *sprite)
+{
+ u8 spriteId;
+
+ gFieldEffectArguments[0] = mapObj->coords2.x;
+ gFieldEffectArguments[1] = mapObj->coords2.y;
+ gFieldEffectArguments[2] = mapObj->elevation;
+ gFieldEffectArguments[3] = 2;
+ FieldEffectStart(FLDEFF_JUMP_TALL_GRASS);
+
+ spriteId = sub_8126FF0(
+ mapObj->localId, mapObj->mapNum, mapObj->mapGroup, mapObj->coords2.x, mapObj->coords2.y);
+
+ if (spriteId == MAX_SPRITES)
+ GroundEffect_SpawnOnTallGrass(mapObj, sprite);
+}
+
+void GroundEffect_JumpOnLongGrass(struct MapObject *mapObj, struct Sprite *sprite)
+{
+ gFieldEffectArguments[0] = mapObj->coords2.x;
+ gFieldEffectArguments[1] = mapObj->coords2.y;
+ gFieldEffectArguments[2] = mapObj->elevation;
+ gFieldEffectArguments[3] = 2;
+ FieldEffectStart(FLDEFF_JUMP_LONG_GRASS);
+}
+
+void GroundEffect_JumpOnShallowWater(struct MapObject *mapObj, struct Sprite *sprite)
+{
+ gFieldEffectArguments[0] = mapObj->coords2.x;
+ gFieldEffectArguments[1] = mapObj->coords2.y;
+ gFieldEffectArguments[2] = mapObj->elevation;
+ gFieldEffectArguments[3] = sprite->oam.priority;
+ FieldEffectStart(FLDEFF_JUMP_SMALL_SPLASH);
+}
+
+void GroundEffect_JumpOnWater(struct MapObject *mapObj, struct Sprite *sprite)
+{
+ gFieldEffectArguments[0] = mapObj->coords2.x;
+ gFieldEffectArguments[1] = mapObj->coords2.y;
+ gFieldEffectArguments[2] = mapObj->elevation;
+ gFieldEffectArguments[3] = sprite->oam.priority;
+ FieldEffectStart(FLDEFF_JUMP_BIG_SPLASH);
+}
+
+void GroundEffect_JumpLandingDust(struct MapObject *mapObj, struct Sprite *sprite)
+{
+ gFieldEffectArguments[0] = mapObj->coords2.x;
+ gFieldEffectArguments[1] = mapObj->coords2.y;
+ gFieldEffectArguments[2] = mapObj->elevation;
+ gFieldEffectArguments[3] = sprite->oam.priority;
+ FieldEffectStart(FLDEFF_DUST);
+}
+
+void GroundEffect_ShortGrass(struct MapObject *mapObj, struct Sprite *sprite)
+{
+ oe_exec_and_other_stuff(FLDEFF_SHORT_GRASS, mapObj);
+}
+
+void GroundEffect_HotSprings(struct MapObject *mapObj, struct Sprite *sprite)
+{
+ oe_exec_and_other_stuff(FLDEFF_HOT_SPRINGS_WATER, mapObj);
+}
+
+void GroundEffect_Seaweed(struct MapObject *mapObj, struct Sprite *sprite)
+{
+ gFieldEffectArguments[0] = mapObj->coords2.x;
+ gFieldEffectArguments[1] = mapObj->coords2.y;
+ FieldEffectStart(FLDEFF_BUBBLES);
+}
+
+static void (*const gUnknown_083760A0[])(struct MapObject *mapObj, struct Sprite *sprite) = {
+ GroundEffect_SpawnOnTallGrass,
+ sub_8063E94,
+ sub_8063EE0,
+ sub_8063F2C,
+ GroundEffect_WaterReflection,
+ GroundEffect_IceReflection,
+ GroundEffect_FlowingWater,
+ sub_8063FA0,
+ sub_8063FCC,
+ GroundEffect_Ripple,
+ GroundEffect_StepOnPuddle,
+ GroundEffect_SandPile,
+ GroundEffect_JumpOnTallGrass,
+ GroundEffect_JumpOnLongGrass,
+ GroundEffect_JumpOnShallowWater,
+ GroundEffect_JumpOnWater,
+ GroundEffect_JumpLandingDust,
+ GroundEffect_ShortGrass,
+ GroundEffect_HotSprings,
+ GroundEffect_Seaweed
+};
+
+void sub_8064218(struct MapObject *mapObj, struct Sprite *sprite, u32 flags)
+{
+ u8 i;
+ for (i = 0; i < ARRAY_COUNT(gUnknown_083760A0); i++, flags >>= 1)
+ if (flags & 1)
+ gUnknown_083760A0[i](mapObj, sprite);
+}
+
+void filters_out_some_ground_effects(struct MapObject *mapObj, u32 *flags)
+{
+ if (mapObj->mapobj_bit_4)
+ {
+ mapObj->mapobj_bit_18 = 0;
+ mapObj->mapobj_bit_20 = 0;
+ mapObj->mapobj_bit_19 = 0;
+ mapObj->mapobj_bit_21 = 0;
+ *flags &= 0xFFF9F7BD;
+ }
+}
+
+void FilterOutStepOnPuddleGroundEffectIfJumping(struct MapObject *mapObj, u32 *flags)
+{
+ if (mapObj->mapobj_bit_5)
+ *flags &= 0xFFFFFBFF;
+}
+
+void DoGroundEffects_OnSpawn(struct MapObject *mapObj, struct Sprite *sprite)
+{
+ u32 flags;
+
+ if (mapObj->mapobj_bit_2)
+ {
+ flags = 0;
+ FieldObjectUpdateZCoordAndPriority(mapObj, sprite);
+ GetAllGroundEffectFlags_OnSpawn(mapObj, &flags);
+ FieldObjectSetSpriteOamTableForLongGrass(mapObj, sprite);
+ sub_8064218(mapObj, sprite, flags);
+ mapObj->mapobj_bit_2 = 0;
+ mapObj->mapobj_bit_4 = 0;
+ }
+}
+
+void DoGroundEffects_OnBeginStep(struct MapObject *mapObj, struct Sprite *sprite)
+{
+ u32 flags;
+
+ if (mapObj->mapobj_bit_2)
+ {
+ flags = 0;
+ FieldObjectUpdateZCoordAndPriority(mapObj, sprite);
+ GetAllGroundEffectFlags_OnBeginStep(mapObj, &flags);
+ FieldObjectSetSpriteOamTableForLongGrass(mapObj, sprite);
+ filters_out_some_ground_effects(mapObj, &flags);
+ sub_8064218(mapObj, sprite, flags);
+ mapObj->mapobj_bit_2 = 0;
+ mapObj->mapobj_bit_4 = 0;
+ }
+}
+
+void DoGroundEffects_OnFinishStep(struct MapObject *mapObj, struct Sprite *sprite)
+{
+ u32 flags;
+
+ if (mapObj->mapobj_bit_3)
+ {
+ flags = 0;
+ FieldObjectUpdateZCoordAndPriority(mapObj, sprite);
+ GetAllGroundEffectFlags_OnFinishStep(mapObj, &flags);
+ FieldObjectSetSpriteOamTableForLongGrass(mapObj, sprite);
+ FilterOutStepOnPuddleGroundEffectIfJumping(mapObj, &flags);
+ sub_8064218(mapObj, sprite, flags);
+ mapObj->mapobj_bit_3 = 0;
+ mapObj->mapobj_bit_5 = 0;
+ }
+}
diff --git a/src/field_map_obj.c b/src/field_map_obj.c
index f60b1b233..59319a16e 100644
--- a/src/field_map_obj.c
+++ b/src/field_map_obj.c
@@ -11,7 +11,7 @@
#include "fieldmap.h"
#include "palette.h"
#include "rng.h"
-#include "rom4.h"
+#include "overworld.h"
#include "sprite.h"
#include "metatile_behavior.h"
#include "map_constants.h"
@@ -1901,7 +1901,7 @@ extern void CameraObjectReset1(void);
extern struct LinkPlayerMapObject gLinkPlayerMapObjects[];
extern u8 gReservedSpritePaletteCount;
-extern struct Camera gUnknown_0202E844;
+extern struct Camera gCamera;
static u8 gUnknown_030005A4;
static u16 gUnknown_030005A6;
@@ -2986,24 +2986,21 @@ void UpdateFieldObjectCoordsForCameraUpdate(void)
s16 deltaX;
s16 deltaY;
-#ifndef NONMATCHING
- asm(""::"r"(i)); //makes the compiler store i in r3
-#endif
-
- if (gUnknown_0202E844.field_0)
+ if (gCamera.field_0)
{
- for (i = 0, deltaX = gUnknown_0202E844.x, deltaY = gUnknown_0202E844.y; i < 16; i++)
+ deltaX = gCamera.x;
+ deltaY = gCamera.y;
+ for (i = 0; i < 16; i++)
{
- struct MapObject *mapObject = &gMapObjects[i];
- if (mapObject->active)
+ if (gMapObjects[i].active)
{
- mapObject->coords1.x -= deltaX;
- mapObject->coords1.y -= deltaY;
- mapObject->coords2.x -= deltaX;
- mapObject->coords2.y -= deltaY;
- mapObject->coords3.x -= deltaX;
- mapObject->coords3.y -= deltaY;
+ gMapObjects[i].coords1.x -= deltaX;
+ gMapObjects[i].coords1.y -= deltaY;
+ gMapObjects[i].coords2.x -= deltaX;
+ gMapObjects[i].coords2.y -= deltaY;
+ gMapObjects[i].coords3.x -= deltaX;
+ gMapObjects[i].coords3.y -= deltaY;
}
}
}
@@ -3244,7 +3241,7 @@ struct MapObjectTemplate *GetFieldObjectTemplateByLocalIdAndMap(u8 localId, u8 m
return FindFieldObjectTemplateInArrayByLocalId(localId, gSaveBlock1.mapObjectTemplates, gMapHeader.events->mapObjectCount);
else
{
- struct MapHeader *mapHeader = get_mapheader_by_bank_and_number(mapGroup, mapNum);
+ struct MapHeader *mapHeader = Overworld_GetMapHeaderByGroupAndId(mapGroup, mapNum);
return FindFieldObjectTemplateInArrayByLocalId(localId, mapHeader->events->mapObjects, mapHeader->events->mapObjectCount);
}
@@ -3895,11 +3892,11 @@ u8 do_berry_tree_growth_sparkle_1(struct MapObject *mapObject, struct Sprite *sp
{
if (!(sprite->data7 & 4) && sprite->animNum == 4)
{
- gUnknown_0202FF84[0] = mapObject->coords2.x;
- gUnknown_0202FF84[1] = mapObject->coords2.y;
- gUnknown_0202FF84[2] = sprite->subpriority - 1;
- gUnknown_0202FF84[3] = sprite->oam.priority;
- FieldEffectStart(0x17);
+ gFieldEffectArguments[0] = mapObject->coords2.x;
+ gFieldEffectArguments[1] = mapObject->coords2.y;
+ gFieldEffectArguments[2] = sprite->subpriority - 1;
+ gFieldEffectArguments[3] = sprite->oam.priority;
+ FieldEffectStart(FLDEFF_BERRY_TREE_GROWTH_SPARKLE);
sprite->animNum = 0;
}
return 0;
@@ -3934,11 +3931,11 @@ u8 do_berry_tree_growth_sparkle_2(struct MapObject *mapObject, struct Sprite *sp
sprite->data1 = 3;
sprite->data2 = 0;
sprite->data7 |= 2;
- gUnknown_0202FF84[0] = mapObject->coords2.x;
- gUnknown_0202FF84[1] = mapObject->coords2.y;
- gUnknown_0202FF84[2] = sprite->subpriority - 1;
- gUnknown_0202FF84[3] = sprite->oam.priority;
- FieldEffectStart(0x17);
+ gFieldEffectArguments[0] = mapObject->coords2.x;
+ gFieldEffectArguments[1] = mapObject->coords2.y;
+ gFieldEffectArguments[2] = sprite->subpriority - 1;
+ gFieldEffectArguments[3] = sprite->oam.priority;
+ FieldEffectStart(FLDEFF_BERRY_TREE_GROWTH_SPARKLE);
return 1;
}
@@ -5030,32 +5027,30 @@ u8 sub_805F3C4(struct MapObject *mapObject, struct Sprite *sprite)
return 0;
}
-#ifdef NONMATCHING
-
-u8 sub_805F3EC(struct MapObject *mapObject, struct Sprite *sprite, u8 a2, u8 *a3(u8))
+bool8 sub_805F3EC(struct MapObject *mapObject, struct Sprite *sprite, u8 a2, bool8 a3(u8))
{
return 0;
}
-u8 sub_805F3F0(struct MapObject *mapObject, struct Sprite *sprite, u8 a2, u8 *a3(u8))
+bool8 sub_805F3F0(struct MapObject *mapObject, struct Sprite *sprite, u8 a2, bool8 a3(u8))
{
- int direction;
- direction = state_to_direction(gUnknown_0836DC09[mapObject->animPattern], mapObject->mapobj_unk_21, a2);
- FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(direction));
+ FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(state_to_direction(gUnknown_0836DC09[mapObject->animPattern], mapObject->mapobj_unk_21, a2)));
mapObject->mapobj_bit_1 = 1;
sprite->data1 = 2;
return 1;
}
-u8 sub_805F438(struct MapObject *mapObject, struct Sprite *sprite, u8 a2, u8 *a3(u8))
+bool8 sub_805F438(struct MapObject *mapObject, struct Sprite *sprite, u8 a2, bool8 a3(u8))
{
+ u32 direction;
s16 x;
s16 y;
- int direction;
- direction = state_to_direction(gUnknown_0836DC09[mapObject->animPattern], mapObject->mapobj_unk_21, a2);
+
+ direction = a2;
+ direction = state_to_direction(gUnknown_0836DC09[mapObject->animPattern], mapObject->mapobj_unk_21, direction);
FieldObjectMoveDestCoords(mapObject, direction, &x, &y);
FieldObjectSetRegularAnim(mapObject, sprite, GetGoSpeed0AnimId(direction));
- if (!npc_block_way(mapObject, x, y, direction) || (a3 != NULL && !a3(MapGridGetMetatileBehaviorAt(x, y))))
+ if (npc_block_way(mapObject, x, y, direction) || (a3 != NULL && !a3(MapGridGetMetatileBehaviorAt(x, y))))
{
FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(direction));
}
@@ -5063,9 +5058,115 @@ u8 sub_805F438(struct MapObject *mapObject, struct Sprite *sprite, u8 a2, u8 *a3
sprite->data1 = 2;
return 1;
}
-#endif
-asm(".section .text_fmocb2_c\n");
+bool8 sub_805F4F0(struct MapObject *mapObject, struct Sprite *sprite, u8 playerDirection, bool8 tileCB(u8))
+{
+ u32 direction;
+ s16 x;
+ s16 y;
+
+ direction = playerDirection;
+ direction = state_to_direction(gUnknown_0836DC09[mapObject->animPattern], mapObject->mapobj_unk_21, direction);
+ FieldObjectMoveDestCoords(mapObject, direction, &x, &y);
+ FieldObjectSetRegularAnim(mapObject, sprite, sub_8060744(direction));
+ if (npc_block_way(mapObject, x, y, direction) || (tileCB != NULL && !tileCB(MapGridGetMetatileBehaviorAt(x, y))))
+ {
+ FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(direction));
+ }
+ mapObject->mapobj_bit_1 = TRUE;
+ sprite->data1 = 2;
+ return TRUE;
+}
+
+bool8 sub_805F5A8(struct MapObject *mapObject, struct Sprite *sprite, u8 playerDirection, bool8 tileCB(u8))
+{
+ u32 direction;
+ s16 x;
+ s16 y;
+
+ direction = playerDirection;
+ direction = state_to_direction(gUnknown_0836DC09[mapObject->animPattern], mapObject->mapobj_unk_21, direction);
+ FieldObjectMoveDestCoords(mapObject, direction, &x, &y);
+ FieldObjectSetRegularAnim(mapObject, sprite, sub_806079C(direction));
+ if (npc_block_way(mapObject, x, y, direction) || (tileCB != NULL && !tileCB(MapGridGetMetatileBehaviorAt(x, y))))
+ {
+ FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(direction));
+ }
+ mapObject->mapobj_bit_1 = TRUE;
+ sprite->data1 = 2;
+ return TRUE;
+}
+
+bool8 sub_805F660(struct MapObject *mapObject, struct Sprite *sprite, u8 playerDirection, bool8 tileCB(u8))
+{
+ u32 direction;
+ s16 x;
+ s16 y;
+
+ direction = playerDirection;
+ direction = state_to_direction(gUnknown_0836DC09[mapObject->animPattern], mapObject->mapobj_unk_21, direction);
+ FieldObjectMoveDestCoords(mapObject, direction, &x, &y);
+ FieldObjectSetRegularAnim(mapObject, sprite, sub_80607C8(direction));
+ if (npc_block_way(mapObject, x, y, direction) || (tileCB != NULL && !tileCB(MapGridGetMetatileBehaviorAt(x, y))))
+ {
+ FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(direction));
+ }
+ mapObject->mapobj_bit_1 = TRUE;
+ sprite->data1 = 2;
+ return TRUE;
+}
+
+bool8 cph_IM_DIFFERENT(struct MapObject *mapObject, struct Sprite *sprite, u8 playerDirection, bool8 tileCB(u8))
+{
+ u32 direction;
+
+ direction = playerDirection;
+ direction = state_to_direction(gUnknown_0836DC09[mapObject->animPattern], mapObject->mapobj_unk_21, direction);
+ FieldObjectSetRegularAnim(mapObject, sprite, sub_806084C(direction));
+ mapObject->mapobj_bit_1 = TRUE;
+ sprite->data1 = 2;
+ return TRUE;
+}
+
+bool8 sub_805F760(struct MapObject *mapObject, struct Sprite *sprite, u8 playerDirection, bool8 tileCB(u8))
+{
+ u32 direction;
+ s16 x;
+ s16 y;
+
+ direction = playerDirection;
+ direction = state_to_direction(gUnknown_0836DC09[mapObject->animPattern], mapObject->mapobj_unk_21, direction);
+ FieldObjectMoveDestCoords(mapObject, direction, &x, &y);
+ FieldObjectSetRegularAnim(mapObject, sprite, sub_80608A4(direction));
+ if (npc_block_way(mapObject, x, y, direction) || (tileCB != NULL && !tileCB(MapGridGetMetatileBehaviorAt(x, y))))
+ {
+ FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(direction));
+ }
+ mapObject->mapobj_bit_1 = TRUE;
+ sprite->data1 = 2;
+ return TRUE;
+}
+
+bool8 oac_hopping(struct MapObject *mapObject, struct Sprite *sprite, u8 playerDirection, bool8 tileCB(u8))
+{
+ u32 direction;
+ s16 x;
+ s16 y;
+
+ direction = playerDirection;
+ direction = state_to_direction(gUnknown_0836DC09[mapObject->animPattern], mapObject->mapobj_unk_21, direction);
+ x = mapObject->coords2.x;
+ y = mapObject->coords2.y;
+ sub_8060320(direction, &x, &y, 2, 2);
+ FieldObjectSetRegularAnim(mapObject, sprite, GetJumpLedgeAnimId(direction));
+ if (npc_block_way(mapObject, x, y, direction) || (tileCB != NULL && !tileCB(MapGridGetMetatileBehaviorAt(x, y))))
+ {
+ FieldObjectSetRegularAnim(mapObject, sprite, GetFaceDirectionAnimId(direction));
+ }
+ mapObject->mapobj_bit_1 = TRUE;
+ sprite->data1 = 2;
+ return TRUE;
+}
fieldmap_object_cb(sub_805F8E0, sub_805F904, gUnknown_083755C0);
@@ -5086,8 +5187,8 @@ void FieldObjectCB_TreeDisguise(struct Sprite *sprite)
mapObject = &gMapObjects[sprite->data0];
if (mapObject->mapobj_unk_21 == 0 || (mapObject->mapobj_unk_21 == 1 && sprite->data7 == 0))
{
- FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gUnknown_0202FF84[0], (u8 *)&gUnknown_0202FF84[1], (u8 *)&gUnknown_0202FF84[2]);
- mapObject->mapobj_unk_1A = FieldEffectStart(0x1c);
+ FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gFieldEffectArguments[0], (u8 *)&gFieldEffectArguments[1], (u8 *)&gFieldEffectArguments[2]);
+ mapObject->mapobj_unk_1A = FieldEffectStart(FLDEFF_TREE_DISGUISE);
mapObject->mapobj_unk_21 = 1;
sprite->data7 ++;
}
@@ -5106,8 +5207,8 @@ void FieldObjectCB_MountainDisguise(struct Sprite *sprite)
mapObject = &gMapObjects[sprite->data0];
if (mapObject->mapobj_unk_21 == 0 || (mapObject->mapobj_unk_21 == 1 && sprite->data7 == 0))
{
- FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gUnknown_0202FF84[0], (u8 *)&gUnknown_0202FF84[1], (u8 *)&gUnknown_0202FF84[2]);
- mapObject->mapobj_unk_1A = FieldEffectStart(0x1d);
+ FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gFieldEffectArguments[0], (u8 *)&gFieldEffectArguments[1], (u8 *)&gFieldEffectArguments[2]);
+ mapObject->mapobj_unk_1A = FieldEffectStart(FLDEFF_MOUNTAIN_DISGUISE);
mapObject->mapobj_unk_21 = 1;
sprite->data7 ++;
}
@@ -5364,53 +5465,38 @@ u8 sub_805FF20(struct MapObject *mapObject, u8 direction)
}
bool8 IsCoordOutsideFieldObjectMovementRect(struct MapObject2 *mapObject, s16 x, s16 y);
-bool8 CheckForCollisionBetweenFieldObjects(struct MapObject *mapObject, s16 x, s16 y);
+static bool8 DoesObjectCollideWithObjectAt(struct MapObject *mapObject, s16 x, s16 y);
bool8 IsMetatileDirectionallyImpassable(struct MapObject *mapObject, s16 x, s16 y, u8 direction);
-u8 npc_block_way(struct MapObject *mapObject, s16 x, s16 y, u8 direction)
+u8 npc_block_way(struct MapObject *mapObject, s16 x, s16 y, u32 dirn)
{
+ u8 direction;
+ direction = dirn;
if (IsCoordOutsideFieldObjectMovementRect((struct MapObject2 *)mapObject, x, y))
- {
return 1;
- }
- if (MapGridIsImpassableAt(x, y) || GetMapBorderIdAt(x, y) == -1 || IsMetatileDirectionallyImpassable(mapObject, x, y, direction))
- {
+ else if (MapGridIsImpassableAt(x, y) || GetMapBorderIdAt(x, y) == -1 || IsMetatileDirectionallyImpassable(mapObject, x, y, direction))
return 2;
- } else if (mapObject->mapobj_bit_15 && !CanCameraMoveInDirection(direction))
- {
+ else if (mapObject->mapobj_bit_15 && !CanCameraMoveInDirection(direction))
return 2;
- }
- if (IsZCoordMismatchAt(mapObject->mapobj_unk_0B_0, x, y))
- {
+ else if (IsZCoordMismatchAt(mapObject->mapobj_unk_0B_0, x, y))
return 3;
- }
- if (CheckForCollisionBetweenFieldObjects(mapObject, x, y))
- {
+ else if (DoesObjectCollideWithObjectAt(mapObject, x, y))
return 4;
- }
return 0;
}
u8 sub_8060024(struct MapObject *mapObject, s16 x, s16 y, u8 direction)
{
- u8 flags;
- flags = 0;
+ u8 flags = 0;
+
if (IsCoordOutsideFieldObjectMovementRect((struct MapObject2 *)mapObject, x, y))
- {
flags |= 1;
- }
if (MapGridIsImpassableAt(x, y) || GetMapBorderIdAt(x, y) == -1 || IsMetatileDirectionallyImpassable(mapObject, x, y, direction) || (mapObject->mapobj_bit_15 && !CanCameraMoveInDirection(direction)))
- {
flags |= 2;
- }
if (IsZCoordMismatchAt(mapObject->mapobj_unk_0B_0, x, y))
- {
flags |= 4;
- }
- if (CheckForCollisionBetweenFieldObjects(mapObject, x, y))
- {
+ if (DoesObjectCollideWithObjectAt(mapObject, x, y))
flags |= 8;
- }
return flags;
}
@@ -5418,25 +5504,22 @@ bool8 IsCoordOutsideFieldObjectMovementRect(struct MapObject2 *mapObject, s16 x,
{
s16 minv;
s16 maxv;
+
if (mapObject->mapobj_unk_19 != 0)
{
minv = mapObject->coords1.x - (mapObject->mapobj_unk_19);
maxv = mapObject->coords1.x + (mapObject->mapobj_unk_19);
if (minv > x || maxv < x)
- {
- return 1;
- }
+ return TRUE;
}
if (mapObject->mapobj_unk_19b != 0)
{
minv = mapObject->coords1.y - (mapObject->mapobj_unk_19b);
maxv = mapObject->coords1.y + (mapObject->mapobj_unk_19b);
if (minv > y || maxv < y)
- {
- return 1;
- }
+ return TRUE;
}
- return 0;
+ return FALSE;
}
bool8 IsMetatileDirectionallyImpassable(struct MapObject *mapObject, s16 x, s16 y, u8 direction)
@@ -5448,23 +5531,19 @@ bool8 IsMetatileDirectionallyImpassable(struct MapObject *mapObject, s16 x, s16
return 0;
}
-bool8 CheckForCollisionBetweenFieldObjects(struct MapObject *mapObject, s16 x, s16 y)
+static bool8 DoesObjectCollideWithObjectAt(struct MapObject *mapObject, s16 x, s16 y)
{
- struct MapObject *mapObject2;
u8 i;
- for (i=0; i<16; i++)
+
+ for (i = 0; i < 16; i++)
{
- mapObject2 = &gMapObjects[i];
+ struct MapObject *mapObject2 = &gMapObjects[i];
+
if (mapObject2->active && mapObject2 != mapObject)
{
- if ((mapObject2->coords2.x != x || mapObject2->coords2.y != y) && (mapObject2->coords3.x != x || mapObject2->coords3.y != y))
- {
- continue;
- }
- if (AreZCoordsCompatible(mapObject->mapobj_unk_0B_0, mapObject2->mapobj_unk_0B_0))
- {
- return 1;
- }
+ if (((mapObject2->coords2.x == x && mapObject2->coords2.y == y) || (mapObject2->coords3.x == x && mapObject2->coords3.y == y))
+ && AreZCoordsCompatible(mapObject->mapobj_unk_0B_0, mapObject2->mapobj_unk_0B_0))
+ return TRUE;
}
}
return 0;
@@ -5504,23 +5583,26 @@ void unref_sub_80602F8(u8 direction, s16 *x, s16 *y)
*y += gDirectionToVector[direction].y << 4;
}
-void sub_8060320(u8 direction, s16 *x, s16 *y, s16 deltaX, s16 deltaY)
+void sub_8060320(u32 dirn, s16 *x, s16 *y, s16 deltaX, s16 deltaY)
{
+ u8 direction = dirn;
+ s16 dx2 = deltaX;
+ s16 dy2 = deltaY;
if (gDirectionToVector[direction].x > 0)
{
- *x += deltaX;
+ *x += dx2;
}
if (gDirectionToVector[direction].x < 0)
{
- *x -= deltaX;
+ *x -= dx2;
}
if (gDirectionToVector[direction].y > 0)
{
- *y += deltaY;
+ *y += dy2;
}
if (gDirectionToVector[direction].y < 0)
{
- *y -= deltaY;
+ *y -= dy2;
}
}
@@ -5587,11 +5669,12 @@ void GetFieldObjectMovingCameraOffset(s16 *x, s16 *y)
}
}
-void FieldObjectMoveDestCoords(struct MapObject *mapObject, u8 direction, s16 *x, s16 *y)
+void FieldObjectMoveDestCoords(struct MapObject *mapObject, u32 direction, s16 *x, s16 *y)
{
+ u8 newDirn = direction;
*x = mapObject->coords2.x;
*y = mapObject->coords2.y;
- MoveCoords(direction, x, y);
+ MoveCoords(newDirn, x, y);
}
bool8 FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(struct MapObject *mapObject)
@@ -5705,193 +5788,34 @@ void meta_step(struct MapObject *mapObject, struct Sprite *sprite, u8 (*callback
FieldObjectUpdateSubpriority(mapObject, sprite);
}
-
-u8 GetFaceDirectionAnimId(u8 index)
-{
- u8 directions[5];
- memcpy(directions, gUnknown_083756C8, 5);
- if (index >= 5)
- {
- index = 0;
- }
- return directions[index];
-}
-
-u8 GetSimpleGoAnimId(u8 index)
-{
- u8 directions[5];
- memcpy(directions, gUnknown_083756CD, 5);
- if (index >= 5)
- {
- index = 0;
- }
- return directions[index];
-}
-
-u8 GetGoSpeed0AnimId(u8 index)
-{
- u8 directions[5];
- memcpy(directions, gUnknown_083756D2, 5);
- if (index >= 5)
- {
- index = 0;
- }
- return directions[index];
-}
-
-u8 sub_8060744(u8 index)
-{
- u8 directions[5];
- memcpy(directions, gUnknown_083756D7, 5);
- if (index >= 5)
- {
- index = 0;
- }
- return directions[index];
-}
-
-u8 d2s_08064034(u8 index)
-{
- u8 directions[5];
- memcpy(directions, gUnknown_083756DC, 5);
- if (index >= 5)
- {
- index = 0;
- }
- return directions[index];
-}
-
-u8 sub_806079C(u8 index)
-{
- u8 directions[5];
- memcpy(directions, gUnknown_083756E1, 5);
- if (index >= 5)
- {
- index = 0;
- }
- return directions[index];
-}
-
-u8 sub_80607C8(u8 index)
-{
- u8 directions[5];
- memcpy(directions, gUnknown_083756E6, 5);
- if (index >= 5)
- {
- index = 0;
- }
- return directions[index];
-}
-
-u8 sub_80607F4(u8 index)
-{
- u8 directions[5];
- memcpy(directions, gUnknown_083756EB, 5);
- if (index >= 5)
- {
- index = 0;
- }
- return directions[index];
-}
-
-u8 GetJumpLedgeAnimId(u8 index)
-{
- u8 directions[5];
- memcpy(directions, gUnknown_083756F0, 5);
- if (index >= 5)
- {
- index = 0;
- }
- return directions[index];
-}
-
-u8 sub_806084C(u8 index)
-{
- u8 directions[5];
- memcpy(directions, gUnknown_083756F5, 5);
- if (index >= 5)
- {
- index = 0;
- }
- return directions[index];
-}
-
-u8 sub_8060878(u8 index)
-{
- u8 directions[5];
- memcpy(directions, gUnknown_083756FA, 5);
- if (index >= 5)
- {
- index = 0;
- }
- return directions[index];
-}
-
-u8 sub_80608A4(u8 index)
-{
- u8 directions[5];
- memcpy(directions, gUnknown_083756FF, 5);
- if (index >= 5)
- {
- index = 0;
- }
- return directions[index];
-}
-
-u8 sub_80608D0(u8 index)
-{
- u8 directions[5];
- memcpy(directions, gUnknown_08375704, 5);
- if (index >= 5)
- {
- index = 0;
- }
- return directions[index];
-}
-
-u8 GetStepInPlaceDelay32AnimId(u8 index)
-{
- u8 directions[5];
- memcpy(directions, gUnknown_08375709, 5);
- if (index >= 5)
- {
- index = 0;
- }
- return directions[index];
-}
-
-u8 GetStepInPlaceDelay16AnimId(u8 index)
-{
- u8 directions[5];
- memcpy(directions, gUnknown_0837570E, 5);
- if (index >= 5)
- {
- index = 0;
- }
- return directions[index];
-}
-
-u8 GetStepInPlaceDelay8AnimId(u8 index)
-{
- u8 directions[5];
- memcpy(directions, gUnknown_08375713, 5);
- if (index >= 5)
- {
- index = 0;
- }
- return directions[index];
-}
-
-u8 GetStepInPlaceDelay4AnimId(u8 index)
-{
- u8 directions[5];
- memcpy(directions, gUnknown_08375718, 5);
- if (index >= 5)
- {
- index = 0;
- }
- return directions[index];
-}
+#define dirn_to_anim(name, table)\
+u8 name(u32 idx)\
+{\
+ u8 direction;\
+ u8 animIds[sizeof(table)];\
+ direction = idx;\
+ memcpy(animIds, (table), sizeof(table));\
+ if (direction > DIR_EAST) direction = 0;\
+ return animIds[direction];\
+}
+
+dirn_to_anim(GetFaceDirectionAnimId, gUnknown_083756C8)
+dirn_to_anim(GetSimpleGoAnimId, gUnknown_083756CD)
+dirn_to_anim(GetGoSpeed0AnimId, gUnknown_083756D2)
+dirn_to_anim(sub_8060744, gUnknown_083756D7)
+dirn_to_anim(d2s_08064034, gUnknown_083756DC)
+dirn_to_anim(sub_806079C, gUnknown_083756E1)
+dirn_to_anim(sub_80607C8, gUnknown_083756E6)
+dirn_to_anim(sub_80607F4, gUnknown_083756EB)
+dirn_to_anim(GetJumpLedgeAnimId, gUnknown_083756F0)
+dirn_to_anim(sub_806084C, gUnknown_083756F5)
+dirn_to_anim(sub_8060878, gUnknown_083756FA)
+dirn_to_anim(sub_80608A4, gUnknown_083756FF)
+dirn_to_anim(sub_80608D0, gUnknown_08375704)
+dirn_to_anim(GetStepInPlaceDelay32AnimId, gUnknown_08375709)
+dirn_to_anim(GetStepInPlaceDelay16AnimId, gUnknown_0837570E)
+dirn_to_anim(GetStepInPlaceDelay8AnimId, gUnknown_08375713)
+dirn_to_anim(GetStepInPlaceDelay4AnimId, gUnknown_08375718)
u8 FieldObjectFaceOppositeDirection(struct MapObject *mapObject, u8 direction)
{
@@ -6019,65 +5943,23 @@ u8 GetOppositeDirection(u8 direction)
return directions[direction - 1];
}
-int zffu_offset_calc(u8 a0, u8 a1)
+u32 zffu_offset_calc(u8 a0, u8 a1)
{
return gUnknown_08375757[a0 - 1][a1 - 1];
}
-#ifdef NONMATCHING
-int state_to_direction(u8 a0, u8 a1, u8 a2)
+u32 state_to_direction(u8 a0, u32 a1, u32 a2)
{
- int zffuOffset;
- asm_comment("For some reason, r2 is being backed up to r3 and restored ahead of the zffu call.");
- if (a1 == 0 || a2 == 0 || a1 > 4 || a2 > 4)
+ u32 zffuOffset;
+ u8 a1_2 = a1;
+ u8 a2_2 = a2;
+ if (a1_2 == 0 || a2_2 == 0 || a1_2 > DIR_EAST || a2_2 > DIR_EAST)
{
return 0;
}
- zffuOffset = zffu_offset_calc(a1, a2);
+ zffuOffset = zffu_offset_calc(a1_2, a2);
return gUnknown_08375767[a0 - 1][zffuOffset - 1];
}
-#else
-__attribute__((naked))
-int state_to_direction(u8 a0, u8 a1, u8 a2)
-{
- asm(".syntax unified\n\
- push {r4,lr}\n\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
- lsls r1, 24\n\
- lsrs r1, 24\n\
- adds r0, r1, 0\n\
- lsls r2, 24\n\
- lsrs r2, 24\n\
- cmp r1, 0\n\
- beq _08060BFC\n\
- cmp r2, 0\n\
- beq _08060BFC\n\
- cmp r1, 0x4\n\
- bhi _08060BFC\n\
- cmp r2, 0x4\n\
- bls _08060C00\n\
-_08060BFC:\n\
- movs r0, 0\n\
- b _08060C12\n\
-_08060C00:\n\
- adds r1, r2, 0\n\
- bl zffu_offset_calc\n\
- ldr r2, _08060C18 @ =gUnknown_08375767\n\
- lsls r1, r4, 2\n\
- subs r1, 0x5\n\
- adds r0, r1\n\
- adds r0, r2\n\
- ldrb r0, [r0]\n\
-_08060C12:\n\
- pop {r4}\n\
- pop {r1}\n\
- bx r1\n\
- .align 2, 0\n\
-_08060C18: .4byte gUnknown_08375767\n\
-.syntax divided\n");
-}
-#endif
void FieldObjectExecSpecialAnim(struct MapObject *mapObject, struct Sprite *sprite)
{
@@ -7490,24 +7372,24 @@ bool8 sub_8062644(struct MapObject *mapObject, struct Sprite *sprite)
bool8 do_exclamation_mark_bubble_1(struct MapObject *mapObject, struct Sprite *sprite)
{
- FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gUnknown_0202FF84[0], (u8 *)&gUnknown_0202FF84[1], (u8 *)&gUnknown_0202FF84[2]);
- FieldEffectStart(0x0);
+ FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gFieldEffectArguments[0], (u8 *)&gFieldEffectArguments[1], (u8 *)&gFieldEffectArguments[2]);
+ FieldEffectStart(FLDEFF_EXCLAMATION_MARK_ICON_1);
sprite->data2 = 1;
return TRUE;
}
bool8 do_exclamation_mark_bubble_2(struct MapObject *mapObject, struct Sprite *sprite)
{
- FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gUnknown_0202FF84[0], (u8 *)&gUnknown_0202FF84[1], (u8 *)&gUnknown_0202FF84[2]);
- FieldEffectStart(0x21);
+ FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gFieldEffectArguments[0], (u8 *)&gFieldEffectArguments[1], (u8 *)&gFieldEffectArguments[2]);
+ FieldEffectStart(FLDEFF_EXCLAMATION_MARK_ICON_2);
sprite->data2 = 1;
return TRUE;
}
bool8 do_heart_bubble(struct MapObject *mapObject, struct Sprite *sprite)
{
- FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gUnknown_0202FF84[0], (u8 *)&gUnknown_0202FF84[1], (u8 *)&gUnknown_0202FF84[2]);
- FieldEffectStart(0x2e);
+ FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gFieldEffectArguments[0], (u8 *)&gFieldEffectArguments[1], (u8 *)&gFieldEffectArguments[2]);
+ FieldEffectStart(FLDEFF_HEART_ICON);
sprite->data2 = 1;
return TRUE;
}
@@ -8303,12 +8185,12 @@ void sub_80634A0(struct MapObject *mapObject, struct Sprite *sprite)
}
void sub_80634E8(struct MapObject *, struct Sprite *);
-void npc_update_obj_anim_flag(struct MapObject *, struct Sprite *);
+static void UpdateMapObjSpriteVisibility(struct MapObject *, struct Sprite *);
void sub_80634D0(struct MapObject *mapObject, struct Sprite *sprite)
{
sub_80634E8(mapObject, sprite);
- npc_update_obj_anim_flag(mapObject, sprite);
+ UpdateMapObjSpriteVisibility(mapObject, sprite);
}
#ifdef NONMATCHING
@@ -8464,7 +8346,7 @@ _080635C0:\n\
}
#endif
-void npc_update_obj_anim_flag(struct MapObject *mapObject, struct Sprite *sprite)
+void UpdateMapObjSpriteVisibility(struct MapObject *mapObject, struct Sprite *sprite)
{
sprite->invisible = 0;
if (mapObject->mapobj_bit_13 || mapObject->mapobj_bit_14)
diff --git a/src/field_map_obj_helpers.c b/src/field_map_obj_helpers.c
index 87be8e011..b453d3794 100644
--- a/src/field_map_obj_helpers.c
+++ b/src/field_map_obj_helpers.c
@@ -294,7 +294,7 @@ void sub_8064990(u8 a1, u8 dir)
u32 oe_exec_and_other_stuff(u8 fieldEffectId, struct MapObject *mapObject)
{
- FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gUnknown_0202FF84[0], (u8 *)&gUnknown_0202FF84[1], (u8 *)&gUnknown_0202FF84[2]);
+ FieldObjectGetLocalIdAndMap(mapObject, (u8 *)&gFieldEffectArguments[0], (u8 *)&gFieldEffectArguments[1], (u8 *)&gFieldEffectArguments[2]);
return FieldEffectStart(fieldEffectId);
}
@@ -303,16 +303,16 @@ void DoShadowFieldEffect(struct MapObject *mapObject)
if (!mapObject->mapobj_bit_22)
{
mapObject->mapobj_bit_22 = 1;
- oe_exec_and_other_stuff(3, mapObject);
+ oe_exec_and_other_stuff(FLDEFF_SHADOW, mapObject);
}
}
void DoRippleFieldEffect(struct MapObject *mapObject, struct Sprite *sprite)
{
const struct MapObjectGraphicsInfo *gfxInfo = GetFieldObjectGraphicsInfo(mapObject->graphicsId);
- gUnknown_0202FF84[0] = sprite->pos1.x;
- gUnknown_0202FF84[1] = sprite->pos1.y + (gfxInfo->height >> 1) - 2;
- gUnknown_0202FF84[2] = 151;
- gUnknown_0202FF84[3] = 3;
- FieldEffectStart(5);
+ gFieldEffectArguments[0] = sprite->pos1.x;
+ gFieldEffectArguments[1] = sprite->pos1.y + (gfxInfo->height >> 1) - 2;
+ gFieldEffectArguments[2] = 151;
+ gFieldEffectArguments[3] = 3;
+ FieldEffectStart(FLDEFF_RIPPLE);
}
diff --git a/src/field_player_avatar.c b/src/field_player_avatar.c
index 2a7b2f3e0..e7947b704 100644
--- a/src/field_player_avatar.c
+++ b/src/field_player_avatar.c
@@ -14,7 +14,7 @@
#include "metatile_behavior.h"
#include "party_menu.h"
#include "rng.h"
-#include "rom4.h"
+#include "overworld.h"
#include "rotating_gate.h"
#include "script.h"
#include "songs.h"
@@ -666,10 +666,10 @@ void PlayerAvatarTransition_Surfing(struct MapObject *a)
sub_805B980(a, GetPlayerAvatarGraphicsIdByStateId(3));
FieldObjectTurn(a, a->placeholder18);
SetPlayerAvatarStateMask(8);
- gUnknown_0202FF84[0] = a->coords2.x;
- gUnknown_0202FF84[1] = a->coords2.y;
- gUnknown_0202FF84[2] = gPlayerAvatar.mapObjectId;
- unk = FieldEffectStart(8);
+ gFieldEffectArguments[0] = a->coords2.x;
+ gFieldEffectArguments[1] = a->coords2.y;
+ gFieldEffectArguments[2] = gPlayerAvatar.mapObjectId;
+ unk = FieldEffectStart(FLDEFF_SURF_BLOB);
a->mapobj_unk_1A = unk;
sub_8127ED0(unk, 1);
}
@@ -1224,13 +1224,13 @@ u8 sub_8059EA4(struct Task *task, struct MapObject *b, struct MapObject *c)
{
FieldObjectClearAnimIfSpecialAnimFinished(b);
FieldObjectClearAnimIfSpecialAnimFinished(c);
- FieldObjectSetSpecialAnim(b, GetStepInPlaceDelay16AnimId(task->data[2]));
- FieldObjectSetSpecialAnim(c, GetSimpleGoAnimId(task->data[2]));
- gUnknown_0202FF84[0] = c->coords2.x;
- gUnknown_0202FF84[1] = c->coords2.y;
- gUnknown_0202FF84[2] = c->elevation;
- gUnknown_0202FF84[3] = gSprites[c->spriteId].oam.priority;
- FieldEffectStart(10);
+ FieldObjectSetSpecialAnim(b, GetStepInPlaceDelay16AnimId((u8)task->data[2]));
+ FieldObjectSetSpecialAnim(c, GetSimpleGoAnimId((u8)task->data[2]));
+ gFieldEffectArguments[0] = c->coords2.x;
+ gFieldEffectArguments[1] = c->coords2.y;
+ gFieldEffectArguments[2] = c->elevation;
+ gFieldEffectArguments[3] = gSprites[c->spriteId].oam.priority;
+ FieldEffectStart(FLDEFF_DUST);
PlaySE(SE_W070);
task->data[0]++;
}
@@ -1385,7 +1385,7 @@ static void taskFF_0805D1D4(u8 taskId)
return;
}
sub_8127ED0(playerMapObj->mapobj_unk_1A, 2);
- FieldObjectSetSpecialAnim(playerMapObj, sub_80608D0(gTasks[taskId].data[0]));
+ FieldObjectSetSpecialAnim(playerMapObj, sub_80608D0((u8)gTasks[taskId].data[0]));
gTasks[taskId].func = sub_805A2D0;
}
@@ -1406,7 +1406,7 @@ static void sub_805A2D0(u8 taskId)
/* Fishing */
-static u8 (*const gUnknown_0830FCB4[])(struct Task *) =
+static u8 (*const sFishingStateFuncs[])(struct Task *) =
{
Fishing1,
Fishing2,
@@ -1429,17 +1429,33 @@ static u8 (*const gUnknown_0830FCB4[])(struct Task *) =
static void Task_Fishing(u8 taskId);
static void sub_805A954(void);
-void StartFishing(u8 a)
+#define tStep data[0]
+#define tFrameCounter data[1]
+#define tNumDots data[2]
+#define tDotsRequired data[3]
+#define tRoundsPlayed data[12]
+#define tMinRoundsRequired data[13]
+#define tPlayerGfxId data[14]
+#define tFishingRod data[15]
+
+#define FISHING_START_ROUND 3
+#define FISHING_GOT_BITE 6
+#define FISHING_ON_HOOK 9
+#define FISHING_NO_BITE 11
+#define FISHING_GOT_AWAY 12
+#define FISHING_SHOW_RESULT 13
+
+void StartFishing(u8 rod)
{
u8 taskId = CreateTask(Task_Fishing, 0xFF);
- gTasks[taskId].data[15] = a;
+ gTasks[taskId].tFishingRod = rod;
Task_Fishing(taskId);
}
static void Task_Fishing(u8 taskId)
{
- while (gUnknown_0830FCB4[gTasks[taskId].data[0]](&gTasks[taskId]))
+ while (sFishingStateFuncs[gTasks[taskId].tStep](&gTasks[taskId]))
;
}
@@ -1447,7 +1463,7 @@ u8 Fishing1(struct Task *task)
{
ScriptContext2_Enable();
gPlayerAvatar.unk6 = 1;
- task->data[0]++;
+ task->tStep++;
return 0;
}
@@ -1457,23 +1473,25 @@ u8 Fishing2(struct Task *task)
const s16 arr1[] = {1, 1, 1};
const s16 arr2[] = {1, 3, 6};
- task->data[12] = 0;
- task->data[13] = arr1[task->data[15]] + (Random() % arr2[task->data[15]]);
- task->data[14] = gMapObjects[gPlayerAvatar.mapObjectId].graphicsId;
+ task->tRoundsPlayed = 0;
+ task->tMinRoundsRequired = arr1[task->tFishingRod] + (Random() % arr2[task->tFishingRod]);
+ task->tPlayerGfxId = gMapObjects[gPlayerAvatar.mapObjectId].graphicsId;
playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId];
FieldObjectClearAnimIfSpecialAnimActive(playerMapObj);
playerMapObj->mapobj_bit_11 = 1;
sub_8059C3C(playerMapObj->mapobj_unk_18);
- task->data[0]++;
+ task->tStep++;
return 0;
}
u8 Fishing3(struct Task *task)
{
sub_805A954();
- task->data[1]++;
- if (task->data[1] > 0x3B)
- task->data[0]++;
+
+ // Wait one second before starting dot game
+ task->tFrameCounter++;
+ if (task->tFrameCounter >= 60)
+ task->tStep++;
return 0;
}
@@ -1482,87 +1500,92 @@ u8 Fishing4(struct Task *task)
u32 randVal;
MenuDisplayMessageBox();
- task->data[0]++;
- task->data[1] = 0;
- task->data[2] = 0;
+ task->tStep++;
+ task->tFrameCounter = 0;
+ task->tNumDots = 0;
randVal = Random();
randVal %= 10;
- task->data[3] = randVal + 1;
- if (task->data[12] == 0)
- task->data[3] = randVal + 4;
- if (task->data[3] > 9)
- task->data[3] = 10;
+ task->tDotsRequired = randVal + 1;
+ if (task->tRoundsPlayed == 0)
+ task->tDotsRequired = randVal + 4;
+ if (task->tDotsRequired >= 10)
+ task->tDotsRequired = 10;
return 1;
}
+// Play a round of the dot game
u8 Fishing5(struct Task *task)
{
const u8 dot[] = _("·");
sub_805A954();
- task->data[1]++;
+ task->tFrameCounter++;
if (gMain.newKeys & A_BUTTON)
{
- task->data[0] = 11;
- if (task->data[12] != 0)
- task->data[0] = 12;
+ task->tStep = FISHING_NO_BITE;
+ if (task->tRoundsPlayed != 0)
+ task->tStep = FISHING_GOT_AWAY;
return 1;
}
else
{
- if (task->data[1] > 0x13)
+ if (task->tFrameCounter >= 20)
{
- task->data[1] = 0;
- if (task->data[2] >= task->data[3])
+ task->tFrameCounter = 0;
+ if (task->tNumDots >= task->tDotsRequired)
{
- task->data[0]++;
- if (task->data[12] != 0)
- task->data[0]++;
- task->data[12]++;
+ task->tStep++;
+ if (task->tRoundsPlayed != 0)
+ task->tStep++;
+ task->tRoundsPlayed++;
}
else
{
- MenuPrint(dot, task->data[2] + 4, 15);
- task->data[2]++;
+ MenuPrint(dot, task->tNumDots + 4, 15);
+ task->tNumDots++;
}
}
return 0;
}
}
+// Determine if fish bites
u8 Fishing6(struct Task *task)
{
sub_805A954();
- task->data[0]++;
- if (!GetFishingWildMonListHeader() || (Random() & 1))
- task->data[0] = 11;
+ task->tStep++;
+ if (!DoesCurrentMapHaveFishingMons() || (Random() & 1))
+ task->tStep = FISHING_NO_BITE;
else
StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], sub_805FE08(player_get_direction_lower_nybble()));
return 1;
}
+// Oh! A Bite!
u8 Fishing7(struct Task *task)
{
sub_805A954();
MenuPrint(gOtherText_OhABite, 4, 17);
- task->data[0]++;
- task->data[1] = 0;
+ task->tStep++;
+ task->tFrameCounter = 0;
return 0;
}
+// We have a bite. Now, wait for the player to press A, or the timer to expire.
u8 Fishing8(struct Task *task)
{
- const s16 arr[3] = {36, 33, 30};
+ const s16 reelTimeouts[3] = {36, 33, 30};
sub_805A954();
- task->data[1]++;
- if (task->data[1] >= arr[task->data[15]])
- task->data[0] = 12;
+ task->tFrameCounter++;
+ if (task->tFrameCounter >= reelTimeouts[task->tFishingRod])
+ task->tStep = FISHING_GOT_AWAY;
else if (gMain.newKeys & A_BUTTON)
- task->data[0]++;
+ task->tStep++;
return 0;
}
+// Determine if we're going to play the dot game again
u8 Fishing9(struct Task *task)
{
const s16 arr[][2] =
@@ -1573,17 +1596,18 @@ u8 Fishing9(struct Task *task)
};
sub_805A954();
- task->data[0]++;
- if (task->data[12] < task->data[13])
+ task->tStep++;
+ if (task->tRoundsPlayed < task->tMinRoundsRequired)
{
- task->data[0] = 3;
+ task->tStep = FISHING_START_ROUND;
}
- else if (task->data[12] < 2)
+ else if (task->tRoundsPlayed < 2)
{
- s16 randVal = Random() % 100;
+ // probability of having to play another round
+ s16 probability = Random() % 100;
- if (arr[task->data[15]][task->data[12]] > randVal)
- task->data[0] = 3;
+ if (arr[task->tFishingRod][task->tRoundsPlayed] > probability)
+ task->tStep = FISHING_START_ROUND;
}
return 0;
}
@@ -1591,72 +1615,73 @@ u8 Fishing9(struct Task *task)
u8 Fishing10(struct Task *task)
{
sub_805A954();
- sub_8072044(gOtherText_PokeOnHook);
+ MenuPrintMessageDefaultCoords(gOtherText_PokeOnHook);
MenuDisplayMessageBox();
- task->data[0]++;
- task->data[1] = 0;
+ task->tStep++;
+ task->tFrameCounter = 0;
return 0;
}
u8 Fishing11(struct Task *task)
{
- if (task->data[1] == 0)
- {
+ if (task->tFrameCounter == 0)
sub_805A954();
- if (task->data[1] == 0)
+
+ if (task->tFrameCounter == 0)
+ {
+ if (MenuUpdateWindowText())
{
- if (MenuUpdateWindowText())
- {
- struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId];
-
- sub_805B980(playerMapObj, task->data[14]);
- FieldObjectTurn(playerMapObj, playerMapObj->placeholder18);
- if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING)
- sub_8127F28(gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1A, 0, 0);
- gSprites[gPlayerAvatar.spriteId].pos2.x = 0;
- gSprites[gPlayerAvatar.spriteId].pos2.y = 0;
- MenuZeroFillScreen();
- task->data[1]++;
- return 0;
- }
- else
- {
- if (task->data[1] == 0)
- return 0;
- }
+ struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId];
+
+ sub_805B980(playerMapObj, task->tPlayerGfxId);
+ FieldObjectTurn(playerMapObj, playerMapObj->placeholder18);
+ if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING)
+ sub_8127F28(gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1A, 0, 0);
+ gSprites[gPlayerAvatar.spriteId].pos2.x = 0;
+ gSprites[gPlayerAvatar.spriteId].pos2.y = 0;
+ MenuZeroFillScreen();
+ task->tFrameCounter++;
+ return 0;
}
}
- gPlayerAvatar.unk6 = 0;
- ScriptContext2_Disable();
- FishingWildEncounter(task->data[15]);
- sub_80BE97C(1);
- DestroyTask(FindTaskIdByFunc(Task_Fishing));
+
+ if (task->tFrameCounter != 0)
+ {
+ gPlayerAvatar.unk6 = 0;
+ ScriptContext2_Disable();
+ FishingWildEncounter(task->tFishingRod);
+ sub_80BE97C(1);
+ DestroyTask(FindTaskIdByFunc(Task_Fishing));
+ }
return 0;
}
+// Not even a nibble
u8 Fishing12(struct Task *task)
{
sub_805A954();
StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], sub_805FDF8(player_get_direction_lower_nybble()));
- sub_8072044(gOtherText_NotEvenANibble);
- task->data[0] = 13;
+ MenuPrintMessageDefaultCoords(gOtherText_NotEvenANibble);
+ task->tStep = FISHING_SHOW_RESULT;
return 1;
}
+// It got away
u8 Fishing13(struct Task *task)
{
sub_805A954();
StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], sub_805FDF8(player_get_direction_lower_nybble()));
- sub_8072044(gOtherText_ItGotAway);
- task->data[0]++;
+ MenuPrintMessageDefaultCoords(gOtherText_ItGotAway);
+ task->tStep++;
return 1;
}
+// Display the message
u8 Fishing14(struct Task *task)
{
sub_805A954();
MenuDisplayMessageBox();
- task->data[0]++;
+ task->tStep++;
return 0;
}
@@ -1667,13 +1692,13 @@ u8 Fishing15(struct Task *task)
{
struct MapObject *playerMapObj = &gMapObjects[gPlayerAvatar.mapObjectId];
- sub_805B980(playerMapObj, task->data[14]);
+ sub_805B980(playerMapObj, task->tPlayerGfxId);
FieldObjectTurn(playerMapObj, playerMapObj->placeholder18);
if (gPlayerAvatar.flags & PLAYER_AVATAR_FLAG_SURFING)
sub_8127F28(gMapObjects[gPlayerAvatar.mapObjectId].mapobj_unk_1A, 0, 0);
gSprites[gPlayerAvatar.spriteId].pos2.x = 0;
gSprites[gPlayerAvatar.spriteId].pos2.y = 0;
- task->data[0]++;
+ task->tStep++;
}
return 0;
}
@@ -1692,6 +1717,10 @@ u8 Fishing16(struct Task *task)
return 0;
}
+#undef tStep
+#undef tFrameCounter
+#undef tFishingRod
+
static void sub_805A954(void)
{
struct Sprite *playerSprite = &gSprites[gPlayerAvatar.spriteId];
diff --git a/src/field_poison.c b/src/field_poison.c
index 8c9e029e1..1244b9c62 100644
--- a/src/field_poison.c
+++ b/src/field_poison.c
@@ -108,7 +108,7 @@ void ExecuteWhiteOut(void)
ScriptContext1_Stop();
}
-s32 overworld_poison(void)
+s32 DoPoisonFieldEffect(void)
{
struct Pokemon *pkmn = &gPlayerParty[0];
u32 numPoisoned = 0;
diff --git a/src/field_screen_effect.c b/src/field_screen_effect.c
index 79913e1c5..1464a99b1 100644
--- a/src/field_screen_effect.c
+++ b/src/field_screen_effect.c
@@ -3,7 +3,7 @@
#include "field_camera.h"
#include "menu.h"
#include "palette.h"
-#include "rom4.h"
+#include "overworld.h"
#include "script.h"
#include "task.h"
#include "text.h"
@@ -21,11 +21,11 @@ extern u16 gUnknown_03004DE0[][0x3C0];
const static u16 gUnknown_0839ACDC[] = { 0xC8, 0x48, 0x38, 0x28, 0x18, 0x0 };
-const s32 gUnknown_0839ACE8 = 4;
+const s32 gMaxFlashLevel = 4;
-const static u32 gUnknown_0839ACEC[3] =
+const static struct UnknownTaskStruct gUnknown_0839ACEC =
{
- REG_ADDR_WIN0H,
+ (void *)REG_ADDR_WIN0H,
((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_DEST_RELOAD) << 16) | 1,
1
};
@@ -137,11 +137,11 @@ static u8 sub_8081534(s32 a1, s32 a2, s32 a3, s32 a4, s32 a5, u8 a6)
void sub_8081594(u8 a1)
{
- u8 index = sav1_get_flash_used_on_map();
+ u8 flashLevel = Overworld_GetFlashLevel();
u8 value = 0;
if (!a1)
value = 1;
- sub_8081534(120, 80, gUnknown_0839ACDC[index], gUnknown_0839ACDC[a1], value, 1);
+ sub_8081534(120, 80, gUnknown_0839ACDC[flashLevel], gUnknown_0839ACDC[a1], value, 1);
sub_8081510();
ScriptContext2_Enable();
}
@@ -220,7 +220,8 @@ static void sub_80816A8(u8 taskId)
REG_WINOUT = 30;
sub_8081398(&gUnknown_03004DE0[0][0], data[2], data[3], 1);
CpuFastSet(&gUnknown_03004DE0[0], &gUnknown_03004DE0[1], 480);
- sub_80895F8(gUnknown_0839ACEC[0], gUnknown_0839ACEC[1], gUnknown_0839ACEC[2]);
+ //sub_80895F8(gUnknown_0839ACEC[0], gUnknown_0839ACEC[1], gUnknown_0839ACEC[2]);
+ sub_80895F8(gUnknown_0839ACEC);
data[0] = 1;
break;
case 1:
diff --git a/src/field_special_scene.c b/src/field_special_scene.c
index 82a7a13e3..38c076c51 100644
--- a/src/field_special_scene.c
+++ b/src/field_special_scene.c
@@ -8,7 +8,7 @@
#include "fieldmap.h"
#include "main.h"
#include "palette.h"
-#include "rom4.h"
+#include "overworld.h"
#include "script.h"
#include "script_movement.h"
#include "songs.h"
@@ -273,7 +273,7 @@ void Task_HandlePorthole(u8 taskId)
case IDLE_CHECK: // idle and move.
if (gMain.newKeys & A_BUTTON)
data[1] = 1;
- if (!sub_80A212C(0xFF, location->mapNum, location->mapGroup))
+ if (!ScriptMovement_IsObjectMovementFinished(0xFF, location->mapNum, location->mapGroup))
return;
if (CountSSTidalStep(1) == TRUE)
{
@@ -294,18 +294,18 @@ void Task_HandlePorthole(u8 taskId)
// run this once.
if (*var == 2) // which direction?
{
- exec_movement(0xFF, location->mapNum, location->mapGroup, gUnknown_083D295F);
+ ScriptMovement_StartObjectMovementScript(0xFF, location->mapNum, location->mapGroup, gUnknown_083D295F);
data[0] = IDLE_CHECK; // run case 1.
}
else
{
- exec_movement(0xFF, location->mapNum, location->mapGroup, gUnknown_083D2961);
+ ScriptMovement_StartObjectMovementScript(0xFF, location->mapNum, location->mapGroup, gUnknown_083D2961);
data[0] = IDLE_CHECK; // run case 1.
}
break;
case EXIT_PORTHOLE: // exit porthole.
- FlagReset(0x4001);
- FlagReset(0x4000);
+ FlagClear(0x4001);
+ FlagClear(0x4000);
copy_saved_warp2_bank_and_enter_x_to_warp1(0);
sp13E_warp_to_last_warp();
DestroyTask(taskId);
diff --git a/src/field_specials.c b/src/field_specials.c
index 454bd8d96..c23ea2ddc 100644
--- a/src/field_specials.c
+++ b/src/field_specials.c
@@ -12,7 +12,7 @@
#include "field_player_avatar.h"
#include "main.h"
#include "map_constants.h"
-#include "rom4.h"
+#include "overworld.h"
#include "script.h"
#include "songs.h"
#include "string_util.h"
@@ -61,44 +61,44 @@ static void RecordCyclingRoadResults(u32, u8);
static struct ElevatorMenu gUnknown_03000760[20];
-void sub_810D6A4(void) {
- SetMainCallback2(sub_8145D88);
+void ScrSpecial_ShowDiploma(void)
+{
+ SetMainCallback2(CB2_ShowDiploma);
ScriptContext2_Enable();
}
-void sub_810D6B8(void) {
+void ScrSpecial_ViewWallClock(void)
+{
gMain.savedCallback = c2_exit_to_overworld_2_switch;
SetMainCallback2(CB2_ViewWallClock);
ScriptContext2_Enable();
}
-void ResetCyclingRoadChallengeData(void) {
+void ResetCyclingRoadChallengeData(void)
+{
gUnknown_02039250 = 0;
gUnknown_02039251 = 0;
gUnknown_02039254 = 0;
}
-void BeginCyclingRoadChallenge(void) {
+void ScrSpecial_BeginCyclingRoadChallenge(void)
+{
gUnknown_02039250 = 1;
gUnknown_02039251 = 0;
gUnknown_02039254 = gMain.vblankCounter1;
}
-u16 GetPlayerAvatarBike(void) {
+u16 GetPlayerAvatarBike(void)
+{
if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_ACRO_BIKE))
- {
return 1;
- }
-
if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_MACH_BIKE))
- {
return 2;
- }
-
return 0;
}
-void DetermineCyclingRoadResults(u32 arg0, u8 arg1) {
+static void DetermineCyclingRoadResults(u32 arg0, u8 arg1)
+{
u8 result;
if (arg1 <= 99)
@@ -225,7 +225,7 @@ void SetSSTidalFlag(void)
void ResetSSTidalFlag(void)
{
- FlagReset(SYS_CRUISE_MODE);
+ FlagClear(SYS_CRUISE_MODE);
}
bool32 CountSSTidalStep(u16 delta)
@@ -1453,7 +1453,7 @@ void ResetTrickHouseEndRoomFlag(void)
u16 *specVar = &gSpecialVar_0x8004;
u16 flag = 0x259;
*specVar = flag;
- FlagReset(flag);
+ FlagClear(flag);
}
bool8 CheckLeadMonCool(void)
@@ -1868,7 +1868,7 @@ void GivLeadMonEffortRibbon(void)
SetMonData(&gPlayerParty[GetLeadMonIndex()], MON_DATA_EFFORT_RIBBON, &ribbonSet);
}
-bool8 GetLeadMonEVCount(void)
+bool8 ScrSpecial_AreLeadMonEVsMaxedOut(void)
{
if (GetMonEVCount(&gPlayerParty[GetLeadMonIndex()]) >= 510)
{
@@ -1919,7 +1919,7 @@ bool8 IsStarterInParty(void)
u8 i;
u16 starter = GetStarterPokemon(VarGet(VAR_FIRST_POKE));
u8 partyCount = CalculatePlayerPartyCount();
- for (i=0; i<partyCount; i++)
+ for (i = 0; i < partyCount; i++)
{
if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES2, NULL) == starter)
{
@@ -2005,7 +2005,7 @@ bool8 sub_810F828(void)
void SetRoute119Weather(void)
{
- if (is_light_level_1_2_3_5_or_6(get_map_light_from_warp0()) != TRUE)
+ if (is_map_type_1_2_3_5_or_6(get_map_type_from_warp0()) != TRUE)
{
SetSav1Weather(0x14);
}
@@ -2013,7 +2013,7 @@ void SetRoute119Weather(void)
void SetRoute123Weather(void)
{
- if (is_light_level_1_2_3_5_or_6(get_map_light_from_warp0()) != TRUE)
+ if (is_map_type_1_2_3_5_or_6(get_map_type_from_warp0()) != TRUE)
{
SetSav1Weather(0x15);
}
@@ -2140,10 +2140,10 @@ void sub_810FAA0(void)
sub_810FF48();
sub_810FD80();
gSaveBlock1.vars[0x42] = gSaveBlock2.playTimeHours;
- FlagReset(0x315);
- FlagReset(0x316);
- FlagReset(0x317);
- FlagReset(0x318);
+ FlagClear(0x315);
+ FlagClear(0x316);
+ FlagClear(0x317);
+ FlagClear(0x318);
VarSet(VAR_0x4095, 1);
}
}
diff --git a/src/field_tasks.c b/src/field_tasks.c
index caf2ce6b9..da6f162c2 100644
--- a/src/field_tasks.c
+++ b/src/field_tasks.c
@@ -1,5 +1,5 @@
//
-// Created by scott on 6/22/2017.
+
//
#include "global.h"
@@ -10,7 +10,7 @@
#include "item.h"
#include "items.h"
#include "event_data.h"
-#include "rom4.h"
+#include "overworld.h"
#include "clock.h"
#include "script.h"
#include "field_special_scene.h"
@@ -48,21 +48,25 @@ void Task_RunPerStepCallback(u8 taskId)
gUnknown_08376364[idx](taskId);
}
-static void RunTimeBasedEvents(s16 *taskData)
+#define tState data[0]
+#define tAmbientCryState data[1]
+#define tAmbientCryDelay data[2]
+
+static void RunTimeBasedEvents(s16 *data)
{
- switch (*taskData)
+ switch (tState)
{
case 0:
if (gMain.vblankCounter1 & 0x1000)
{
DoTimeBasedEvents();
- (*taskData)++;
+ tState++;
}
break;
case 1:
if (!(gMain.vblankCounter1 & 0x1000))
{
- (*taskData)--;
+ tState--;
}
break;
}
@@ -70,14 +74,19 @@ static void RunTimeBasedEvents(s16 *taskData)
void Task_RunTimeBasedEvents(u8 taskId)
{
- s16 *taskData = gTasks[taskId].data;
+ s16 *data = gTasks[taskId].data;
+
if (!ScriptContext2_IsEnabled())
{
- RunTimeBasedEvents(taskData);
- sub_80540D0(taskData + 1, taskData + 2);
+ RunTimeBasedEvents(data);
+ UpdateAmbientCry(&tAmbientCryState, &tAmbientCryDelay);
}
}
+#undef tState
+#undef tAmbientCryState
+#undef tAmbientCryDelay
+
void Task_MuddySlope(u8);
void SetUpFieldTasks(void)
@@ -836,11 +845,11 @@ void Task_MuddySlope(u8 taskId)
}
break;
}
- if (gUnknown_0202E844.field_0 && mapIndices != data[0])
+ if (gCamera.field_0 && mapIndices != data[0])
{
data[0] = mapIndices;
- x2 = gUnknown_0202E844.x;
- y2 = gUnknown_0202E844.y;
+ x2 = gCamera.x;
+ y2 = gCamera.y;
}
else
{
diff --git a/src/field_weather.c b/src/field_weather.c
index 5ff2eddf9..443a38357 100644
--- a/src/field_weather.c
+++ b/src/field_weather.c
@@ -55,7 +55,7 @@ extern struct Weather gWeather;
extern u8 *gUnknown_083970E8;
extern u8 (*gUnknown_08396FC8[][4])(void);
extern u8 (*gUnknown_083970B8[])(void);
-extern u8 *gUnknown_030006DC;
+IWRAM_DATA u8 *gUnknown_030006DC;
extern u8 gUnknown_083970C8;
extern u8 (*gUnknown_0202FC48)[32];
extern u8 gUnknown_0202F9E8[32];
diff --git a/src/fieldmap.c b/src/fieldmap.c
index 0e0ec246c..7a31ae720 100644
--- a/src/fieldmap.c
+++ b/src/fieldmap.c
@@ -1,7 +1,7 @@
#include "global.h"
#include "fieldmap.h"
#include "palette.h"
-#include "rom4.h"
+#include "overworld.h"
#include "script.h"
#include "secret_base.h"
#include "tv.h"
@@ -22,7 +22,7 @@ struct Coords32
EWRAM_DATA static u16 gUnknown_02029828[0x2800] = {0};
EWRAM_DATA struct MapHeader gMapHeader = {0};
-EWRAM_DATA struct Camera gUnknown_0202E844 = {0};
+EWRAM_DATA struct Camera gCamera = {0};
EWRAM_DATA static struct ConnectionFlags gUnknown_0202E850 = {0};
struct BackupMapData gUnknown_03004870;
@@ -31,7 +31,7 @@ static const struct ConnectionFlags sDummyConnectionFlags = {0};
struct MapHeader *mapconnection_get_mapheader(struct MapConnection *connection)
{
- return get_mapheader_by_bank_and_number(connection->mapGroup, connection->mapNum);
+ return Overworld_GetMapHeaderByGroupAndId(connection->mapGroup, connection->mapNum);
}
void not_trainer_hill_battle_pyramid(void)
@@ -713,7 +713,7 @@ bool8 CameraMove(int x, int y)
unsigned int direction;
struct MapConnection *connection;
int old_x, old_y;
- gUnknown_0202E844.field_0 = FALSE;
+ gCamera.field_0 = FALSE;
direction = GetPostCameraMoveMapBorderId(x, y);
if (direction + 1 <= 1)
{
@@ -728,14 +728,14 @@ bool8 CameraMove(int x, int y)
connection = sub_8056A64(direction, gSaveBlock1.pos.x, gSaveBlock1.pos.y);
sub_8056918(connection, direction, x, y);
sub_80538F0(connection->mapGroup, connection->mapNum);
- gUnknown_0202E844.field_0 = TRUE;
- gUnknown_0202E844.x = old_x - gSaveBlock1.pos.x;
- gUnknown_0202E844.y = old_y - gSaveBlock1.pos.y;
+ gCamera.field_0 = TRUE;
+ gCamera.x = old_x - gSaveBlock1.pos.x;
+ gCamera.y = old_y - gSaveBlock1.pos.y;
gSaveBlock1.pos.x += x;
gSaveBlock1.pos.y += y;
sub_80566F0(direction);
}
- return gUnknown_0202E844.field_0;
+ return gCamera.field_0;
}
struct MapConnection *sub_8056A64(u8 direction, int x, int y)
diff --git a/src/fldeff_cut.c b/src/fldeff_cut.c
index b394d1e4c..00643a979 100644
--- a/src/fldeff_cut.c
+++ b/src/fldeff_cut.c
@@ -8,7 +8,7 @@
#include "metatile_behavior.h"
#include "metatile_behaviors.h"
#include "pokemon_menu.h"
-#include "rom4.h"
+#include "overworld.h"
#include "rom6.h"
#include "script.h"
#include "songs.h"
@@ -28,7 +28,7 @@ extern struct MapPosition gUnknown_0203923C;
extern u8 gLastFieldPokeMenuOpened;
-extern u8 UseCutScript;
+extern u8 S_UseCut[];
bool8 SetUpFieldMove_Cut(void)
{
@@ -38,7 +38,7 @@ bool8 SetUpFieldMove_Cut(void)
if(npc_before_player_of_type(0x52) == TRUE) // is in front of tree?
{
- gFieldCallback = sub_808AB90;
+ gFieldCallback = FieldCallback_Teleport;
gUnknown_03005CE4 = sub_80A2634;
return TRUE;
}
@@ -57,7 +57,7 @@ bool8 SetUpFieldMove_Cut(void)
if(MetatileBehavior_IsPokeGrass(tileBehavior) == TRUE
|| MetatileBehavior_IsAshGrass(tileBehavior) == TRUE)
{
- gFieldCallback = sub_808AB90;
+ gFieldCallback = FieldCallback_Teleport;
gUnknown_03005CE4 = sub_80A25E8;
return TRUE;
}
@@ -70,8 +70,8 @@ bool8 SetUpFieldMove_Cut(void)
void sub_80A25E8(void)
{
- FieldEffectStart(1);
- gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened;
+ FieldEffectStart(FLDEFF_USE_CUT_ON_GRASS);
+ gFieldEffectArguments[0] = gLastFieldPokeMenuOpened;
}
bool8 FldEff_UseCutOnGrass(void)
@@ -86,8 +86,8 @@ bool8 FldEff_UseCutOnGrass(void)
void sub_80A2634(void)
{
- gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened;
- ScriptContext1_SetupScript(&UseCutScript);
+ gFieldEffectArguments[0] = gLastFieldPokeMenuOpened;
+ ScriptContext1_SetupScript(S_UseCut);
}
bool8 FldEff_UseCutOnTree(void)
@@ -102,8 +102,8 @@ bool8 FldEff_UseCutOnTree(void)
void sub_80A2684(void)
{
- FieldEffectActiveListRemove(1);
- FieldEffectStart(0x3A);
+ FieldEffectActiveListRemove(FLDEFF_USE_CUT_ON_GRASS);
+ FieldEffectStart(FLDEFF_CUT_GRASS);
}
bool8 FldEff_CutGrass(void)
@@ -272,19 +272,16 @@ void sub_80A2AB8(void)
{
u8 i;
- for(i = 1; i < 8; i++)
- {
+ for (i = 1; i < 8; i++)
DestroySprite(&gSprites[gCutGrassSpriteArray[i]]);
- }
-
- FieldEffectStop(&gSprites[gCutGrassSpriteArray[0]], 0x3A);
+ FieldEffectStop(&gSprites[gCutGrassSpriteArray[0]], FLDEFF_CUT_GRASS);
sub_8064E2C();
ScriptContext2_Disable();
}
void sub_80A2B00(void)
{
- PlaySE(0x80);
- FieldEffectActiveListRemove(2);
+ PlaySE(SE_W015);
+ FieldEffectActiveListRemove(FLDEFF_USE_CUT_ON_TREE);
EnableBothScriptContexts();
}
diff --git a/src/fldeff_flash.c b/src/fldeff_flash.c
index 6c2633567..1ee8a8f05 100644
--- a/src/fldeff_flash.c
+++ b/src/fldeff_flash.c
@@ -4,7 +4,7 @@
#include "main.h"
#include "palette.h"
#include "pokemon_menu.h"
-#include "rom4.h"
+#include "overworld.h"
#include "rom6.h"
#include "script.h"
#include "songs.h"
@@ -51,7 +51,7 @@ bool8 SetUpFieldMove_Flash(void)
{
if (gMapHeader.cave == TRUE && !FlagGet(SYS_USE_FLASH))
{
- gFieldCallback = sub_808AB90;
+ gFieldCallback = FieldCallback_Teleport;
gUnknown_03005CE4 = sub_810CBFC;
return TRUE;
}
@@ -62,7 +62,7 @@ bool8 SetUpFieldMove_Flash(void)
void sub_810CBFC(void)
{
u8 taskId = oei_task_add();
- gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened;
+ gFieldEffectArguments[0] = gLastFieldPokeMenuOpened;
gTasks[taskId].data[8] = (uintptr_t)sub_810CC34 >> 16;
gTasks[taskId].data[9] = (uintptr_t)sub_810CC34;
}
@@ -123,8 +123,8 @@ void sub_810CC80(void)
bool8 sub_810CD5C(void)
{
u8 i;
- u8 v0 = get_map_light_from_warp0();
- u8 v1 = sav1_map_get_light_level();
+ u8 v0 = get_map_type_from_warp0();
+ u8 v1 = Overworld_GetMapTypeOfSaveblockLocation();
for (i = 0; gUnknown_083F7FC4[i].unk0; i++)
{
diff --git a/src/fldeff_strength.c b/src/fldeff_strength.c
index 81f4f63c6..d9603d094 100644
--- a/src/fldeff_strength.c
+++ b/src/fldeff_strength.c
@@ -18,14 +18,14 @@ extern u16 gScriptResult;
extern void (*gFieldCallback)(void);
extern void (*gUnknown_03005CE4)(void);
-extern u8 UseStrengthScript[];
+extern u8 S_UseStrength[];
bool8 SetUpFieldMove_Strength(void)
{
if (ShouldDoBrailleStrengthEffect())
{
gScriptResult = gLastFieldPokeMenuOpened;
- gFieldCallback = sub_808AB90;
+ gFieldCallback = FieldCallback_Teleport;
gUnknown_03005CE4 = sub_811AA38;
}
else
@@ -33,7 +33,7 @@ bool8 SetUpFieldMove_Strength(void)
if (npc_before_player_of_type(87) != TRUE)
return 0;
gScriptResult = gLastFieldPokeMenuOpened;
- gFieldCallback = sub_808AB90;
+ gFieldCallback = FieldCallback_Teleport;
gUnknown_03005CE4 = sub_811AA18;
}
@@ -42,14 +42,14 @@ bool8 SetUpFieldMove_Strength(void)
static void sub_811AA18(void)
{
- gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened;
- ScriptContext1_SetupScript(UseStrengthScript);
+ gFieldEffectArguments[0] = gLastFieldPokeMenuOpened;
+ ScriptContext1_SetupScript(S_UseStrength);
}
static void sub_811AA38(void)
{
- gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened;
- FieldEffectStart(40);
+ gFieldEffectArguments[0] = gLastFieldPokeMenuOpened;
+ FieldEffectStart(FLDEFF_USE_STRENGTH);
}
bool8 FldEff_UseStrength(void)
@@ -58,7 +58,7 @@ bool8 FldEff_UseStrength(void)
gTasks[taskId].data[8] = (u32)sub_811AA9C >> 16;
gTasks[taskId].data[9] = (u32)sub_811AA9C;
- GetMonNickname(&gPlayerParty[gUnknown_0202FF84[0]], gStringVar1);
+ GetMonNickname(&gPlayerParty[gFieldEffectArguments[0]], gStringVar1);
return FALSE;
}
diff --git a/src/fldeff_sweetscent.c b/src/fldeff_sweetscent.c
index 4c3e6bf4a..b9dbf619d 100644
--- a/src/fldeff_sweetscent.c
+++ b/src/fldeff_sweetscent.c
@@ -23,15 +23,15 @@ extern u8 SweetScentNothingHereScript[];
bool8 SetUpFieldMove_SweetScent(void)
{
- gFieldCallback = sub_808AB90;
+ gFieldCallback = FieldCallback_Teleport;
gUnknown_03005CE4 = sub_812BFD4;
return TRUE;
}
static void sub_812BFD4(void)
{
- FieldEffectStart(51);
- gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened;
+ FieldEffectStart(FLDEFF_SWEET_SCENT);
+ gFieldEffectArguments[0] = gLastFieldPokeMenuOpened;
}
bool8 FldEff_SweetScent()
@@ -51,7 +51,7 @@ static void sub_812C01C(void)
BeginNormalPaletteFade(~(1 << (gSprites[GetPlayerAvatarObjectId()].oam.paletteNum + 16)), 4, 0, 8, 0x1F);
taskId = CreateTask(sub_812C084, 0);
gTasks[taskId].data[0] = 0;
- FieldEffectActiveListRemove(51);
+ FieldEffectActiveListRemove(FLDEFF_SWEET_SCENT);
}
static void sub_812C084(u8 taskId)
diff --git a/src/fldeff_teleport.c b/src/fldeff_teleport.c
index 74e68df06..af48fb414 100644
--- a/src/fldeff_teleport.c
+++ b/src/fldeff_teleport.c
@@ -3,7 +3,7 @@
#include "field_effect.h"
#include "field_player_avatar.h"
#include "pokemon_menu.h"
-#include "rom4.h"
+#include "overworld.h"
#include "rom6.h"
#include "task.h"
@@ -13,9 +13,9 @@ extern void (*gUnknown_03005CE4)(void);
bool8 SetUpFieldMove_Teleport(void)
{
- if (is_light_level_1_2_3_or_6(gMapHeader.mapType) == TRUE)
+ if (Overworld_MapTypeAllowsTeleportAndFly(gMapHeader.mapType) == TRUE)
{
- gFieldCallback = sub_808AB90;
+ gFieldCallback = FieldCallback_Teleport;
gUnknown_03005CE4 = hm_teleport_run_dp02scr;
return TRUE;
}
@@ -25,9 +25,9 @@ bool8 SetUpFieldMove_Teleport(void)
void hm_teleport_run_dp02scr(void)
{
- new_game();
- FieldEffectStart(63);
- gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened;
+ Overworld_ResetStateAfterTeleport();
+ FieldEffectStart(FLDEFF_USE_TELEPORT);
+ gFieldEffectArguments[0] = gLastFieldPokeMenuOpened;
}
bool8 FldEff_UseTeleport(void)
@@ -41,6 +41,6 @@ bool8 FldEff_UseTeleport(void)
void sub_814A404(void)
{
- FieldEffectActiveListRemove(63);
+ FieldEffectActiveListRemove(FLDEFF_USE_TELEPORT);
sub_8087BA8();
}
diff --git a/src/hall_of_fame.c b/src/hall_of_fame.c
index f940830f1..6f7df576b 100644
--- a/src/hall_of_fame.c
+++ b/src/hall_of_fame.c
@@ -11,7 +11,7 @@
#include "menu.h"
#include "save.h"
#include "species.h"
-#include "rom4.h"
+#include "overworld.h"
#include "m4a.h"
#include "data2.h"
#include "decompress.h"
@@ -224,12 +224,12 @@ static const struct SpriteFrameImage sSpriteImageTable_840B67C[] =
static const struct SpriteFrameImage* const sUnknown_0840B69C[7] =
{
sSpriteImageTable_840B5BC,
- sSpriteImageTable_840B5DC,
- sSpriteImageTable_840B5FC,
- sSpriteImageTable_840B61C,
- sSpriteImageTable_840B63C,
- sSpriteImageTable_840B65C,
- sSpriteImageTable_840B67C
+ sSpriteImageTable_840B5DC,
+ sSpriteImageTable_840B5FC,
+ sSpriteImageTable_840B61C,
+ sSpriteImageTable_840B63C,
+ sSpriteImageTable_840B65C,
+ sSpriteImageTable_840B67C
};
static const struct SpriteTemplate sUnknown_0840B6B8 =
@@ -365,22 +365,22 @@ static const union AnimCmd sSpriteAnim_840B758[] =
static const union AnimCmd* const sSpriteAnimTable_840B760[] =
{
sSpriteAnim_840B6D8,
- sSpriteAnim_840B6E0,
- sSpriteAnim_840B6E8,
- sSpriteAnim_840B6F0,
- sSpriteAnim_840B6F8,
- sSpriteAnim_840B700,
- sSpriteAnim_840B708,
- sSpriteAnim_840B710,
- sSpriteAnim_840B718,
- sSpriteAnim_840B720,
- sSpriteAnim_840B728,
- sSpriteAnim_840B730,
- sSpriteAnim_840B738,
- sSpriteAnim_840B740,
- sSpriteAnim_840B748,
- sSpriteAnim_840B750,
- sSpriteAnim_840B758
+ sSpriteAnim_840B6E0,
+ sSpriteAnim_840B6E8,
+ sSpriteAnim_840B6F0,
+ sSpriteAnim_840B6F8,
+ sSpriteAnim_840B700,
+ sSpriteAnim_840B708,
+ sSpriteAnim_840B710,
+ sSpriteAnim_840B718,
+ sSpriteAnim_840B720,
+ sSpriteAnim_840B728,
+ sSpriteAnim_840B730,
+ sSpriteAnim_840B738,
+ sSpriteAnim_840B740,
+ sSpriteAnim_840B748,
+ sSpriteAnim_840B750,
+ sSpriteAnim_840B758
};
static const struct SpriteTemplate sSpriteTemplate_840B7A4 =
diff --git a/src/hof_pc.c b/src/hof_pc.c
index 4646d171c..aeeb7fe17 100644
--- a/src/hof_pc.c
+++ b/src/hof_pc.c
@@ -2,7 +2,7 @@
#include "hall_of_fame.h"
#include "main.h"
#include "palette.h"
-#include "rom4.h"
+#include "overworld.h"
#include "script.h"
#include "script_menu.h"
#include "task.h"
@@ -30,8 +30,8 @@ static void ReshowPCMenuAfterHallOfFamePC(void)
ScriptContext2_Enable();
sub_8053E90();
BeginNormalPaletteFade(0xFFFFFFFF, 0, 0x10, 0, 0);
- TryCreatePCMenu();
- sub_80B5838();
+ ScrSpecial_CreatePCMenu();
+ ScriptMenu_DisplayPCStartupPrompt();
CreateTask(Task_WaitForPaletteFade, 10);
}
diff --git a/src/item_menu.c b/src/item_menu.c
index 8874bf151..7ff0e6174 100644
--- a/src/item_menu.c
+++ b/src/item_menu.c
@@ -23,7 +23,7 @@
#include "party_menu.h"
#include "player_pc.h"
#include "pokemon_menu.h"
-#include "rom4.h"
+#include "overworld.h"
#include "script.h"
#include "songs.h"
#include "sound.h"
@@ -2313,164 +2313,164 @@ __attribute__((naked))
static void sub_80A5600(u8 taskId)
{
asm(".syntax unified\n\
- push {r4,r5,lr}\n\
- lsls r0, 24\n\
- lsrs r4, r0, 24\n\
- movs r5, 0\n\
- ldr r2, _080A563C @ =gMain\n\
- ldrh r0, [r2, 0x30]\n\
- movs r1, 0xF0\n\
- ands r1, r0\n\
- cmp r1, 0x40\n\
- bne _080A5648\n\
- ldr r4, _080A5640 @ =sPopupMenuSelection\n\
- ldrb r0, [r4]\n\
- cmp r0, 0\n\
- bne _080A561E\n\
- b _080A5736\n\
+ push {r4,r5,lr}\n\
+ lsls r0, 24\n\
+ lsrs r4, r0, 24\n\
+ movs r5, 0\n\
+ ldr r2, _080A563C @ =gMain\n\
+ ldrh r0, [r2, 0x30]\n\
+ movs r1, 0xF0\n\
+ ands r1, r0\n\
+ cmp r1, 0x40\n\
+ bne _080A5648\n\
+ ldr r4, _080A5640 @ =sPopupMenuSelection\n\
+ ldrb r0, [r4]\n\
+ cmp r0, 0\n\
+ bne _080A561E\n\
+ b _080A5736\n\
_080A561E:\n\
- adds r1, r0, 0\n\
- ldr r0, _080A5644 @ =sPopupMenuActionList\n\
- ldr r0, [r0]\n\
- adds r1, r0\n\
- subs r1, 0x1\n\
- ldrb r0, [r1]\n\
- cmp r0, 0x8\n\
- bne _080A5630\n\
- b _080A5736\n\
+ adds r1, r0, 0\n\
+ ldr r0, _080A5644 @ =sPopupMenuActionList\n\
+ ldr r0, [r0]\n\
+ adds r1, r0\n\
+ subs r1, 0x1\n\
+ ldrb r0, [r1]\n\
+ cmp r0, 0x8\n\
+ bne _080A5630\n\
+ b _080A5736\n\
_080A5630:\n\
- movs r0, 0x5\n\
- bl PlaySE\n\
- movs r0, 0x1\n\
- negs r0, r0\n\
- b _080A56D2\n\
- .align 2, 0\n\
+ movs r0, 0x5\n\
+ bl PlaySE\n\
+ movs r0, 0x1\n\
+ negs r0, r0\n\
+ b _080A56D2\n\
+ .align 2, 0\n\
_080A563C: .4byte gMain\n\
_080A5640: .4byte sPopupMenuSelection\n\
_080A5644: .4byte sPopupMenuActionList\n\
_080A5648:\n\
- cmp r1, 0x80\n\
- bne _080A5680\n\
- ldr r4, _080A5674 @ =sPopupMenuSelection\n\
- ldrb r1, [r4]\n\
- ldr r0, _080A5678 @ =gUnknown_02038564\n\
- ldrb r0, [r0]\n\
- subs r0, 0x1\n\
- cmp r1, r0\n\
- beq _080A5736\n\
- cmp r1, 0x2\n\
- beq _080A5736\n\
- ldr r0, _080A567C @ =sPopupMenuActionList\n\
- ldr r0, [r0]\n\
- adds r0, r1, r0\n\
- ldrb r0, [r0, 0x1]\n\
- cmp r0, 0x8\n\
- beq _080A5736\n\
- movs r0, 0x5\n\
- bl PlaySE\n\
- movs r0, 0x1\n\
- b _080A56D2\n\
- .align 2, 0\n\
+ cmp r1, 0x80\n\
+ bne _080A5680\n\
+ ldr r4, _080A5674 @ =sPopupMenuSelection\n\
+ ldrb r1, [r4]\n\
+ ldr r0, _080A5678 @ =gUnknown_02038564\n\
+ ldrb r0, [r0]\n\
+ subs r0, 0x1\n\
+ cmp r1, r0\n\
+ beq _080A5736\n\
+ cmp r1, 0x2\n\
+ beq _080A5736\n\
+ ldr r0, _080A567C @ =sPopupMenuActionList\n\
+ ldr r0, [r0]\n\
+ adds r0, r1, r0\n\
+ ldrb r0, [r0, 0x1]\n\
+ cmp r0, 0x8\n\
+ beq _080A5736\n\
+ movs r0, 0x5\n\
+ bl PlaySE\n\
+ movs r0, 0x1\n\
+ b _080A56D2\n\
+ .align 2, 0\n\
_080A5674: .4byte sPopupMenuSelection\n\
_080A5678: .4byte gUnknown_02038564\n\
_080A567C: .4byte sPopupMenuActionList\n\
_080A5680:\n\
- cmp r1, 0x20\n\
- bne _080A56B0\n\
- ldr r4, _080A56A8 @ =sPopupMenuSelection\n\
- ldrb r0, [r4]\n\
- cmp r0, 0x2\n\
- bls _080A5736\n\
- adds r1, r0, 0\n\
- ldr r0, _080A56AC @ =sPopupMenuActionList\n\
- ldr r0, [r0]\n\
- adds r1, r0\n\
- subs r1, 0x3\n\
- ldrb r0, [r1]\n\
- cmp r0, 0x8\n\
- beq _080A5736\n\
- movs r0, 0x5\n\
- bl PlaySE\n\
- movs r0, 0x3\n\
- negs r0, r0\n\
- b _080A56D2\n\
- .align 2, 0\n\
+ cmp r1, 0x20\n\
+ bne _080A56B0\n\
+ ldr r4, _080A56A8 @ =sPopupMenuSelection\n\
+ ldrb r0, [r4]\n\
+ cmp r0, 0x2\n\
+ bls _080A5736\n\
+ adds r1, r0, 0\n\
+ ldr r0, _080A56AC @ =sPopupMenuActionList\n\
+ ldr r0, [r0]\n\
+ adds r1, r0\n\
+ subs r1, 0x3\n\
+ ldrb r0, [r1]\n\
+ cmp r0, 0x8\n\
+ beq _080A5736\n\
+ movs r0, 0x5\n\
+ bl PlaySE\n\
+ movs r0, 0x3\n\
+ negs r0, r0\n\
+ b _080A56D2\n\
+ .align 2, 0\n\
_080A56A8: .4byte sPopupMenuSelection\n\
_080A56AC: .4byte sPopupMenuActionList\n\
_080A56B0:\n\
- cmp r1, 0x10\n\
- bne _080A56E4\n\
- ldr r4, _080A56DC @ =sPopupMenuSelection\n\
- ldrb r0, [r4]\n\
- cmp r0, 0x2\n\
- bhi _080A5736\n\
- adds r1, r0, 0\n\
- ldr r0, _080A56E0 @ =sPopupMenuActionList\n\
- ldr r0, [r0]\n\
- adds r1, r0\n\
- ldrb r0, [r1, 0x3]\n\
- cmp r0, 0x8\n\
- beq _080A5736\n\
- movs r0, 0x5\n\
- bl PlaySE\n\
- movs r0, 0x3\n\
+ cmp r1, 0x10\n\
+ bne _080A56E4\n\
+ ldr r4, _080A56DC @ =sPopupMenuSelection\n\
+ ldrb r0, [r4]\n\
+ cmp r0, 0x2\n\
+ bhi _080A5736\n\
+ adds r1, r0, 0\n\
+ ldr r0, _080A56E0 @ =sPopupMenuActionList\n\
+ ldr r0, [r0]\n\
+ adds r1, r0\n\
+ ldrb r0, [r1, 0x3]\n\
+ cmp r0, 0x8\n\
+ beq _080A5736\n\
+ movs r0, 0x5\n\
+ bl PlaySE\n\
+ movs r0, 0x3\n\
_080A56D2:\n\
- bl MoveMenuCursor3\n\
- strb r0, [r4]\n\
- b _080A5736\n\
- .align 2, 0\n\
+ bl MoveMenuCursor3\n\
+ strb r0, [r4]\n\
+ b _080A5736\n\
+ .align 2, 0\n\
_080A56DC: .4byte sPopupMenuSelection\n\
_080A56E0: .4byte sPopupMenuActionList\n\
_080A56E4:\n\
- ldrh r1, [r2, 0x2E]\n\
- movs r0, 0x1\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _080A5768\n\
- movs r0, 0x2\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- beq _080A5736\n\
- ldr r1, _080A574C @ =gTasks\n\
- lsls r0, r4, 2\n\
- adds r0, r4\n\
- lsls r0, 3\n\
- adds r0, r1\n\
- strh r5, [r0, 0x1C]\n\
- ldr r1, _080A5750 @ =gBagPocketScrollStates\n\
- ldr r0, _080A5754 @ =sCurrentBagPocket\n\
- ldrb r0, [r0]\n\
- lsls r0, 24\n\
- asrs r0, 24\n\
- lsls r0, 2\n\
- adds r0, r1\n\
- ldrb r2, [r0]\n\
- adds r0, r4, 0\n\
- adds r1, r2, 0\n\
- bl sub_80A48E8\n\
- ldr r0, _080A5758 @ =gBGTilemapBuffers + 0x800\n\
- bl sub_80A4DA4\n\
- ldr r1, _080A575C @ =sItemPopupMenuActions\n\
- ldr r0, _080A5760 @ =sPopupMenuActionList\n\
- ldr r0, [r0]\n\
- ldrb r0, [r0, 0x5]\n\
- lsls r0, 3\n\
- adds r1, 0x4\n\
- adds r0, r1\n\
- ldr r5, [r0]\n\
- adds r0, r4, 0\n\
- bl _call_via_r5\n\
+ ldrh r1, [r2, 0x2E]\n\
+ movs r0, 0x1\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ bne _080A5768\n\
+ movs r0, 0x2\n\
+ ands r0, r1\n\
+ cmp r0, 0\n\
+ beq _080A5736\n\
+ ldr r1, _080A574C @ =gTasks\n\
+ lsls r0, r4, 2\n\
+ adds r0, r4\n\
+ lsls r0, 3\n\
+ adds r0, r1\n\
+ strh r5, [r0, 0x1C]\n\
+ ldr r1, _080A5750 @ =gBagPocketScrollStates\n\
+ ldr r0, _080A5754 @ =sCurrentBagPocket\n\
+ ldrb r0, [r0]\n\
+ lsls r0, 24\n\
+ asrs r0, 24\n\
+ lsls r0, 2\n\
+ adds r0, r1\n\
+ ldrb r2, [r0]\n\
+ adds r0, r4, 0\n\
+ adds r1, r2, 0\n\
+ bl sub_80A48E8\n\
+ ldr r0, _080A5758 @ =gBGTilemapBuffers + 0x800\n\
+ bl sub_80A4DA4\n\
+ ldr r1, _080A575C @ =sItemPopupMenuActions\n\
+ ldr r0, _080A5760 @ =sPopupMenuActionList\n\
+ ldr r0, [r0]\n\
+ ldrb r0, [r0, 0x5]\n\
+ lsls r0, 3\n\
+ adds r1, 0x4\n\
+ adds r0, r1\n\
+ ldr r5, [r0]\n\
+ adds r0, r4, 0\n\
+ bl _call_via_r5\n\
_080A5736:\n\
- cmp r5, 0\n\
- bne _080A57BE\n\
- ldr r0, _080A5764 @ =sPopupMenuSelection\n\
- ldrb r0, [r0]\n\
- cmp r0, 0\n\
- bne _080A57AC\n\
- movs r0, 0xC\n\
- bl sub_8072DDC\n\
- b _080A57BE\n\
- .align 2, 0\n\
+ cmp r5, 0\n\
+ bne _080A57BE\n\
+ ldr r0, _080A5764 @ =sPopupMenuSelection\n\
+ ldrb r0, [r0]\n\
+ cmp r0, 0\n\
+ bne _080A57AC\n\
+ movs r0, 0xC\n\
+ bl sub_8072DDC\n\
+ b _080A57BE\n\
+ .align 2, 0\n\
_080A574C: .4byte gTasks\n\
_080A5750: .4byte gBagPocketScrollStates\n\
_080A5754: .4byte sCurrentBagPocket\n\
@@ -2479,47 +2479,47 @@ _080A575C: .4byte sItemPopupMenuActions\n\
_080A5760: .4byte sPopupMenuActionList\n\
_080A5764: .4byte sPopupMenuSelection\n\
_080A5768:\n\
- ldr r1, _080A5798 @ =gTasks\n\
- lsls r0, r4, 2\n\
- adds r0, r4\n\
- lsls r0, 3\n\
- adds r0, r1\n\
- strh r5, [r0, 0x1C]\n\
- ldr r0, _080A579C @ =gBGTilemapBuffers + 0x800\n\
- bl sub_80A4DA4\n\
- ldr r1, _080A57A0 @ =sItemPopupMenuActions\n\
- ldr r0, _080A57A4 @ =sPopupMenuSelection\n\
- ldrb r2, [r0]\n\
- ldr r0, _080A57A8 @ =sPopupMenuActionList\n\
- ldr r0, [r0]\n\
- adds r0, r2\n\
- ldrb r0, [r0]\n\
- lsls r0, 3\n\
- adds r1, 0x4\n\
- adds r0, r1\n\
- ldr r5, [r0]\n\
- adds r0, r4, 0\n\
- bl _call_via_r5\n\
- b _080A5736\n\
- .align 2, 0\n\
+ ldr r1, _080A5798 @ =gTasks\n\
+ lsls r0, r4, 2\n\
+ adds r0, r4\n\
+ lsls r0, 3\n\
+ adds r0, r1\n\
+ strh r5, [r0, 0x1C]\n\
+ ldr r0, _080A579C @ =gBGTilemapBuffers + 0x800\n\
+ bl sub_80A4DA4\n\
+ ldr r1, _080A57A0 @ =sItemPopupMenuActions\n\
+ ldr r0, _080A57A4 @ =sPopupMenuSelection\n\
+ ldrb r2, [r0]\n\
+ ldr r0, _080A57A8 @ =sPopupMenuActionList\n\
+ ldr r0, [r0]\n\
+ adds r0, r2\n\
+ ldrb r0, [r0]\n\
+ lsls r0, 3\n\
+ adds r1, 0x4\n\
+ adds r0, r1\n\
+ ldr r5, [r0]\n\
+ adds r0, r4, 0\n\
+ bl _call_via_r5\n\
+ b _080A5736\n\
+ .align 2, 0\n\
_080A5798: .4byte gTasks\n\
_080A579C: .4byte gBGTilemapBuffers + 0x800\n\
_080A57A0: .4byte sItemPopupMenuActions\n\
_080A57A4: .4byte sPopupMenuSelection\n\
_080A57A8: .4byte sPopupMenuActionList\n\
_080A57AC:\n\
- cmp r0, 0x2\n\
- bhi _080A57B8\n\
- movs r0, 0x2F\n\
- bl sub_8072DCC\n\
- b _080A57BE\n\
+ cmp r0, 0x2\n\
+ bhi _080A57B8\n\
+ movs r0, 0x2F\n\
+ bl sub_8072DCC\n\
+ b _080A57BE\n\
_080A57B8:\n\
- movs r0, 0x30\n\
- bl sub_8072DCC\n\
+ movs r0, 0x30\n\
+ bl sub_8072DCC\n\
_080A57BE:\n\
- pop {r4,r5}\n\
- pop {r0}\n\
- bx r0\n\
+ pop {r4,r5}\n\
+ pop {r0}\n\
+ bx r0\n\
.syntax divided\n");
}
@@ -3115,7 +3115,7 @@ static void sub_80A6760(u8 taskId)
static void BuyMenuPrintItemQuantityAndPrice(u8 taskId)
{
sub_80A36B8(gBGTilemapBuffers[1], 0, 0, 31, 31);
- RemoveMoneyLabelObject(0, 0);
+ CloseMoneyWindow(0, 0);
MenuZeroFillWindowRect(0, 4, 13, 13);
MenuZeroFillWindowRect(0, 14, 29, 19);
gTasks[taskId].func = sub_80A6760;
@@ -3123,20 +3123,20 @@ static void BuyMenuPrintItemQuantityAndPrice(u8 taskId)
static void BuyMenuDisplayMessage(u16 itemId, u16 quantity)
{
- sub_80B7A94(ItemId_GetPrice(itemId) / 2 * quantity, 6, 6, 11);
+ PrintMoneyAmount(ItemId_GetPrice(itemId) / 2 * quantity, 6, 6, 11);
ConvertIntToDecimalStringN(gStringVar1, ItemId_GetPrice(itemId) / 2 * quantity, STR_CONV_MODE_LEFT_ALIGN, 6);
}
static void sub_80A683C(void)
{
- sub_80B7C14(gSaveBlock1.money, 0, 0);
+ OpenMoneyWindow(gSaveBlock1.money, 0, 0);
sub_80A4008(gBGTilemapBuffers[1], 1, 1, 12, 2);
}
static void sub_80A6870(u16 itemId, u8 quantity)
{
- sub_80B79B8(&gSaveBlock1.money, ItemId_GetPrice(itemId) / 2 * quantity);
- sub_80B7BEC(gSaveBlock1.money, 0, 0);
+ AddMoney(&gSaveBlock1.money, ItemId_GetPrice(itemId) / 2 * quantity);
+ UpdateMoneyWindow(gSaveBlock1.money, 0, 0);
}
static void sub_80A68A4(void)
diff --git a/src/item_use.c b/src/item_use.c
index 1750c1584..8bc83bdc6 100644
--- a/src/item_use.c
+++ b/src/item_use.c
@@ -26,7 +26,7 @@
#include "pokeblock.h"
#include "pokemon_item_effect.h"
#include "pokemon_menu.h"
-#include "rom4.h"
+#include "overworld.h"
#include "rom_8094928.h"
#include "script.h"
#include "songs.h"
@@ -36,10 +36,10 @@
#include "task.h"
#include "vars.h"
-extern void (* gUnknown_03005D00)(u8);
-extern void (* gFieldCallback)(void);
-extern void (* gUnknown_0300485C)(void);
-extern void (* gUnknown_03004AE4)(u8, u16, TaskFunc);
+extern void (*gUnknown_03005D00)(u8);
+extern void (*gFieldCallback)(void);
+extern void (*gUnknown_0300485C)(void);
+extern void (*gUnknown_03004AE4)(u8, u16, TaskFunc);
extern u8 gUnknown_02038561;
extern u8 gLastFieldPokeMenuOpened;
@@ -185,7 +185,7 @@ void ItemUseOutOfBattle_Bike(u8 taskId)
}
else
{
- if (IsBikingAllowedByMap() == TRUE && IsBikingDisallowedByPlayer() == FALSE)
+ if (Overworld_IsBikeAllowedOnCurrentMap() == TRUE && IsBikingDisallowedByPlayer() == FALSE)
{
gUnknown_03005D00 = (void *)ItemUseOnFieldCB_Bike;
SetUpItemUseOnFieldCallback(taskId);
@@ -342,7 +342,7 @@ bool8 ItemfinderCheckForHiddenItems(struct MapEvents *events, u8 taskId)
sub_80C9720(taskId);
// hidden item detected?
- if(gTasks[taskId].data[2] == TRUE)
+ if (gTasks[taskId].data[2] == TRUE)
return TRUE;
else
return FALSE;
@@ -354,11 +354,11 @@ bool8 HiddenItemAtPos(struct MapEvents *events, s16 x, s16 y)
struct BgEvent *bgEvent = events->bgEvents;
int i;
- for(i = 0; i < bgEventCount; i++)
+ for (i = 0; i < bgEventCount; i++)
{
- if(bgEvent[i].kind == 7 && x == (u16)bgEvent[i].x && y == (u16)bgEvent[i].y) // hidden item and coordinates matches x and y passed?
+ if (bgEvent[i].kind == 7 && x == (u16)bgEvent[i].x && y == (u16)bgEvent[i].y) // hidden item and coordinates matches x and y passed?
{
- if(!FlagGet(bgEvent[i].bgUnion.hiddenItem.hiddenItemId + 600))
+ if (!FlagGet(bgEvent[i].bgUnion.hiddenItem.hiddenItemId + 600))
return TRUE;
else
return FALSE;
@@ -376,7 +376,7 @@ bool8 sub_80C9688(struct MapConnection *connection, int x, int y)
mapHeader = mapconnection_get_mapheader(connection);
- switch(connection->direction)
+ switch (connection->direction)
{
// same weird temp variable behavior seen in HiddenItemAtPos
case 2:
@@ -592,7 +592,7 @@ void sub_80C9838(u8 taskId, s16 x, s16 y)
s16 *data = gTasks[taskId].data;
s16 var1, var2, var3, var4;
- if(data[2] == FALSE)
+ if (data[2] == FALSE)
{
data[0] = x;
data[1] = y;
@@ -602,34 +602,34 @@ void sub_80C9838(u8 taskId, s16 x, s16 y)
{
// data[0] and data[1] contain the player's coordinates.
// x and y contain the item's coordinates.
- if(data[0] < 0)
+ if (data[0] < 0)
var1 = data[0] * -1; // item is to the left
else
var1 = data[0]; // item is to the right
- if(data[1] < 0)
+ if (data[1] < 0)
var2 = data[1] * -1; // item is to the north
else
var2 = data[1]; // item is to the south
- if(x < 0)
+ if (x < 0)
var3 = x * -1;
else
var3 = x;
- if(y < 0)
+ if (y < 0)
var4 = y * -1;
else
var4 = y;
- if(var1 + var2 > var3 + var4)
+ if (var1 + var2 > var3 + var4)
{
data[0] = x;
data[1] = y;
}
else
{
- if(var1 + var2 == var3 + var4 && (var2 > var4 || (var2 == var4 && data[1] < y)))
+ if (var1 + var2 == var3 + var4 && (var2 > var4 || (var2 == var4 && data[1] < y)))
{
data[0] = x;
data[1] = y;
@@ -642,40 +642,40 @@ u8 GetPlayerDirectionTowardsHiddenItem(s16 itemX, s16 itemY)
{
s16 abX, abY;
- if(itemX == 0 && itemY == 0)
+ if (itemX == 0 && itemY == 0)
return DIR_NONE; // player is standing on the item.
// get absolute X distance.
- if(itemX < 0)
+ if (itemX < 0)
abX = itemX * -1;
else
abX = itemX;
// get absolute Y distance.
- if(itemY < 0)
+ if (itemY < 0)
abY = itemY * -1;
else
abY = itemY;
- if(abX > abY)
+ if (abX > abY)
{
- if(itemX < 0)
+ if (itemX < 0)
return DIR_EAST;
else
return DIR_NORTH;
}
else
{
- if(abX < abY)
+ if (abX < abY)
{
- if(itemY < 0)
+ if (itemY < 0)
return DIR_SOUTH;
else
return DIR_WEST;
}
- if(abX == abY)
+ if (abX == abY)
{
- if(itemY < 0)
+ if (itemY < 0)
return DIR_SOUTH;
else
return DIR_WEST;
@@ -694,7 +694,7 @@ void SetPlayerDirectionTowardsItem(u8 direction)
void DisplayItemRespondingMessageAndExitItemfinder(u8 taskId)
{
- if(FieldObjectCheckIfSpecialAnimFinishedOrInactive(&gMapObjects[GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0)]) == TRUE)
+ if (FieldObjectCheckIfSpecialAnimFinishedOrInactive(&gMapObjects[GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0)]) == TRUE)
DisplayItemMessageOnField(taskId, gOtherText_ItemfinderResponding, ExitItemfinder, 0);
}
@@ -702,7 +702,7 @@ void RotatePlayerAndExitItemfinder(u8 taskId)
{
s16 *data = gTasks[taskId].data;
- if(FieldObjectCheckIfSpecialAnimFinishedOrInactive(&gMapObjects[GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0)]) == TRUE
+ if (FieldObjectCheckIfSpecialAnimFinishedOrInactive(&gMapObjects[GetFieldObjectIdByLocalIdAndMap(0xFF, 0, 0)]) == TRUE
|| data[2] == FALSE)
{
SetPlayerDirectionTowardsItem(gItemFinderDirections[data[5]]);
@@ -710,18 +710,18 @@ void RotatePlayerAndExitItemfinder(u8 taskId)
data[5] = (data[5] + 1) & 3;
data[3]++;
- if(data[3] == 4)
+ if (data[3] == 4)
DisplayItemMessageOnField(taskId, gOtherText_ItemfinderItemUnderfoot, ExitItemfinder, 0);
}
}
void ItemUseOutOfBattle_PokeblockCase(u8 taskId)
{
- if(sub_80F9344() == TRUE)
+ if (sub_80F9344() == TRUE)
{
DisplayDadsAdviceCannotUseItemMessage(taskId, gTasks[taskId].data[2]);
}
- else if(gTasks[taskId].data[2] != TRUE)
+ else if (gTasks[taskId].data[2] != TRUE)
{
sub_810BA7C(0);
ItemMenu_ConfirmNormalFade(taskId);
@@ -739,7 +739,7 @@ void ItemUseOutOfBattle_CoinCase(u8 taskId)
ConvertIntToDecimalStringN(gStringVar1, GetCoins(), 0, 4);
StringExpandPlaceholders(gStringVar4, gOtherText_Coins3);
- if(!gTasks[taskId].data[2])
+ if (!gTasks[taskId].data[2])
{
MenuZeroFillWindowRect(0, 0xD, 0xD, 0x14);
DisplayItemMessageOnField(taskId, gStringVar4, CleanUpItemMenuMessage, 1);
@@ -752,20 +752,20 @@ void ItemUseOutOfBattle_CoinCase(u8 taskId)
void sub_80C9BB8(u8 var)
{
- if(gMain.newKeys & A_BUTTON)
+ if (gMain.newKeys & A_BUTTON)
CleanUpItemMenuMessage(var);
}
void sub_80C9BD8(u8 var)
{
- if(gMain.newKeys & A_BUTTON)
+ if (gMain.newKeys & A_BUTTON)
CleanUpOverworldMessage(var);
}
// unused
void ItemUseOutOfBattle_SSTicket(u8 taskId)
{
- if(gTasks[taskId].data[2] == 0)
+ if (gTasks[taskId].data[2] == 0)
{
MenuZeroFillWindowRect(0, 0xD, 0xD, 0x14);
DisplayItemMessageOnField(taskId, gUnknown_083D61DC[ItemId_GetSecondaryId(gScriptItemId)], sub_80C9BB8, 1);
@@ -778,7 +778,7 @@ void ItemUseOutOfBattle_SSTicket(u8 taskId)
void sub_80C9C7C(u8 taskId)
{
- if(IsPlayerFacingPlantedBerryTree() == TRUE)
+ if (IsPlayerFacingPlantedBerryTree() == TRUE)
{
gUnknown_03005D00 = sub_80C9D00;
gFieldCallback = ExecuteItemUseFromBlackPalette;
@@ -803,7 +803,7 @@ void sub_80C9D00(u8 taskId)
void ItemUseOutOfBattle_WailmerPail(u8 taskId)
{
- if(TryToWaterBerryTree() == TRUE)
+ if (TryToWaterBerryTree() == TRUE)
{
gUnknown_03005D00 = sub_80C9D74;
SetUpItemUseOnFieldCallback(taskId);
@@ -839,9 +839,9 @@ void ItemUseOutOfBattle_SacredAsh(u8 taskId)
gLastFieldPokeMenuOpened = 0;
- for(i = 0; i < 6; i++)
+ for (i = 0; i < 6; i++)
{
- if(GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) != 0 && GetMonData(&gPlayerParty[i], MON_DATA_HP) == 0)
+ if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES) != 0 && GetMonData(&gPlayerParty[i], MON_DATA_HP) == 0)
{
gLastFieldPokeMenuOpened = i;
break;
@@ -874,7 +874,7 @@ void ItemUseOutOfBattle_TMHM(u8 taskId)
{
MenuZeroFillWindowRect(0, 0xD, 0xD, 0x14);
- if(gScriptItemId >= ITEM_HM01)
+ if (gScriptItemId >= ITEM_HM01)
DisplayItemMessageOnField(taskId, gOtherText_BootedHM, sub_80C9EE4, 1); // HM
else
DisplayItemMessageOnField(taskId, gOtherText_BootedTM, sub_80C9EE4, 1); // TM
@@ -882,13 +882,13 @@ void ItemUseOutOfBattle_TMHM(u8 taskId)
void sub_80C9EE4(u8 taskId)
{
- PlaySE(2);
+ PlaySE(SE_PC_LOGON);
gTasks[taskId].func = sub_80C9F10;
}
void sub_80C9F10(u8 taskId)
{
- if(gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON)
+ if (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON)
{
StringCopy(gStringVar1, gMoveNames[ItemIdToBattleMoveId(gScriptItemId)]);
StringExpandPlaceholders(gStringVar4, gOtherText_ContainsMove);
@@ -919,7 +919,7 @@ void sub_80C9FDC(void)
void ItemUseOutOfBattle_Repel(u8 var)
{
- if(VarGet(VAR_REPEL_STEP_COUNT) == FALSE)
+ if (VarGet(VAR_REPEL_STEP_COUNT) == FALSE)
{
VarSet(VAR_REPEL_STEP_COUNT, ItemId_GetHoldEffectParam(gScriptItemId));
sub_80C9FDC();
@@ -941,26 +941,26 @@ void sub_80CA098(u8 taskId)
{
if(++gTasks[taskId].data[15] > 7)
{
- PlaySE(0x75);
+ PlaySE(SE_BIDORO);
DisplayItemMessageOnField(taskId, gStringVar4, CleanUpItemMenuMessage, 1);
}
}
void ItemUseOutOfBattle_BlackWhiteFlute(u8 taskId)
{
- if(gScriptItemId == 43)
+ if (gScriptItemId == ITEM_WHITE_FLUTE)
{
FlagSet(SYS_ENC_UP_ITEM);
- FlagReset(SYS_ENC_DOWN_ITEM);
+ FlagClear(SYS_ENC_DOWN_ITEM);
sub_80CA07C();
StringExpandPlaceholders(gStringVar4, gOtherText_UsedFlute);
gTasks[taskId].func = sub_80CA098;
gTasks[taskId].data[15] = 0;
}
- else if(gScriptItemId == 42)
+ else if (gScriptItemId == ITEM_BLACK_FLUTE)
{
FlagSet(SYS_ENC_DOWN_ITEM);
- FlagReset(SYS_ENC_UP_ITEM);
+ FlagClear(SYS_ENC_UP_ITEM);
sub_80CA07C();
StringExpandPlaceholders(gStringVar4, gOtherText_UsedRepel);
gTasks[taskId].func = sub_80CA098;
@@ -983,9 +983,9 @@ void sub_80CA18C(u8 taskId)
DisplayItemMessageOnField(taskId, gStringVar4, task08_080A1C44, 0);
}
-bool8 sub_80CA1C8(void)
+bool8 CanUseEscapeRopeOnCurrMap(void)
{
- if(gMapHeader.mapType == MAP_TYPE_UNDERGROUND)
+ if (gMapHeader.mapType == MAP_TYPE_UNDERGROUND)
return TRUE;
else
return FALSE;
@@ -993,7 +993,7 @@ bool8 sub_80CA1C8(void)
void ItemUseOutOfBattle_EscapeRope(u8 taskId)
{
- if(sub_80CA1C8() == TRUE) // is map type an area you can use escape rope?
+ if (CanUseEscapeRopeOnCurrMap() == TRUE)
{
gUnknown_03005D00 = sub_80CA18C;
SetUpItemUseOnFieldCallback(taskId);
@@ -1012,7 +1012,7 @@ void ItemUseOutOfBattle_EvolutionStone(u8 var)
void ItemUseInBattle_PokeBall(u8 var)
{
- if(PlayerPartyAndPokemonStorageFull() == FALSE) // have room for mon?
+ if (PlayerPartyAndPokemonStorageFull() == FALSE) // have room for mon?
{
RemoveBagItem(gScriptItemId, 1);
sub_80A7094(var);
@@ -1026,7 +1026,7 @@ void ItemUseInBattle_PokeBall(u8 var)
void sub_80CA294(u8 var)
{
- if(gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON)
+ if (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON)
sub_80A7094(var);
}
@@ -1034,7 +1034,7 @@ void sub_80CA2BC(u8 taskId)
{
if(++gTasks[taskId].data[15] > 7)
{
- PlaySE(1);
+ PlaySE(SE_KAIFUKU);
RemoveBagItem(gScriptItemId, 1);
DisplayItemMessageOnField(taskId, sub_803F378(gScriptItemId), sub_80CA294, 1);
}
@@ -1046,7 +1046,7 @@ void ItemUseInBattle_StatIncrease(u8 taskId)
MenuZeroFillWindowRect(0, 0xD, 0xD, 0x14);
- if(ExecuteTableBasedItemEffect_(&gPlayerParty[partyId], gScriptItemId, partyId, 0) != FALSE)
+ if (ExecuteTableBasedItemEffect_(&gPlayerParty[partyId], gScriptItemId, partyId, 0) != FALSE)
{
DisplayItemMessageOnField(taskId, gOtherText_WontHaveAnyEffect, CleanUpItemMenuMessage, 1);
}
@@ -1059,7 +1059,7 @@ void ItemUseInBattle_StatIncrease(u8 taskId)
void sub_80CA394(u8 taskId)
{
- if(!gPaletteFade.active)
+ if (!gPaletteFade.active)
{
sub_8094E4C();
gpu_pal_allocator_reset__manage_upper_four();
@@ -1095,7 +1095,7 @@ void unref_sub_80CA448(u8 var)
{
MenuZeroFillWindowRect(0, 0xD, 0xD, 0x14);
- if(ExecuteTableBasedItemEffect__(0, gScriptItemId, 0) == FALSE)
+ if (ExecuteTableBasedItemEffect__(0, gScriptItemId, 0) == FALSE)
{
RemoveBagItem(gScriptItemId, 1);
GetMonNickname(&gPlayerParty[0], gStringVar1);
@@ -1125,7 +1125,7 @@ void ItemUseInBattle_Escape(u8 taskId)
void ItemUseOutOfBattle_EnigmaBerry(u8 taskId)
{
- switch(GetItemEffectType(gScriptItemId) - 1)
+ switch (GetItemEffectType(gScriptItemId) - 1)
{
case 1:
case 2:
@@ -1168,7 +1168,7 @@ void ItemUseOutOfBattle_EnigmaBerry(u8 taskId)
void ItemUseInBattle_EnigmaBerry(u8 taskId)
{
- switch(GetItemEffectType(gScriptItemId))
+ switch (GetItemEffectType(gScriptItemId))
{
case 0:
ItemUseInBattle_StatIncrease(taskId);
diff --git a/src/learn_move.c b/src/learn_move.c
index 51de68171..33252c66b 100644
--- a/src/learn_move.c
+++ b/src/learn_move.c
@@ -6,7 +6,7 @@
#include "menu_cursor.h"
#include "palette.h"
#include "pokemon.h"
-#include "rom4.h"
+#include "overworld.h"
#include "script.h"
#include "songs.h"
#include "sound.h"
diff --git a/src/load_save.c b/src/load_save.c
index 730aea2b8..8424b1121 100644
--- a/src/load_save.c
+++ b/src/load_save.c
@@ -3,7 +3,7 @@
#include "load_save.h"
#include "main.h"
#include "pokemon.h"
-#include "rom4.h"
+#include "overworld.h"
extern u8 gPlayerPartyCount;
diff --git a/src/m4a_4.c b/src/m4a_4.c
index 99195ec00..2e1d140b4 100644
--- a/src/m4a_4.c
+++ b/src/m4a_4.c
@@ -45,7 +45,7 @@ void m4aMPlayVolumeControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u16
mplayInfo->ident = ID_NUMBER;
}
-void m4aMPlayPitchControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, u16 pitch)
+void m4aMPlayPitchControl(struct MusicPlayerInfo *mplayInfo, u16 trackBits, s16 pitch)
{
s32 i;
u32 bit;
diff --git a/src/mail.c b/src/mail.c
index 658d37976..c5dd119e3 100644
--- a/src/mail.c
+++ b/src/mail.c
@@ -8,7 +8,7 @@
#include "name_string_util.h"
#include "palette.h"
#include "pokemon_icon.h"
-#include "rom4.h"
+#include "overworld.h"
#include "sprite.h"
#include "string_util.h"
#include "strings2.h"
@@ -92,7 +92,7 @@ void HandleReadMail(struct MailStruct *arg0, MainCallback arg1, bool8 arg2)
ewram0.varFF = GAME_LANGUAGE;
ewram0.var100 = 1;
- ewram0.var104 = (MainCallback)sub_80EB3FC;
+ ewram0.var104 = (MainCallback)EasyChat_GetWordText;
ewram0.var108 = (MainCallback)ConvertEasyChatWordsToString;
mailDesign = arg0->itemId - ITEM_ORANGE_MAIL;
diff --git a/src/main.c b/src/main.c
index afaa0e77a..d7c11b6c8 100644
--- a/src/main.c
+++ b/src/main.c
@@ -9,7 +9,7 @@
#include "play_time.h"
#include "rng.h"
#include "rom3.h"
-#include "rom4.h"
+#include "overworld.h"
#include "rtc.h"
#include "siirtc.h"
#include "sound.h"
diff --git a/src/main_menu.c b/src/main_menu.c
index 09fd06d9e..e0af86f3d 100644
--- a/src/main_menu.c
+++ b/src/main_menu.c
@@ -10,7 +10,7 @@
#include "option_menu.h"
#include "palette.h"
#include "pokeball.h"
-#include "rom4.h"
+#include "overworld.h"
#include "rtc.h"
#include "save_menu_util.h"
#include "songs.h"
@@ -56,32 +56,14 @@ extern const union AffineAnimCmd *const gSpriteAffineAnimTable_81E79AC[];
extern u8 unk_2000000[];
-//Task data
-enum {
- TD_MENULAYOUT,
- TD_SELECTEDMENUITEM,
-};
-
//Menu layouts
-enum {
+enum
+{
HAS_NO_SAVED_GAME, //NEW GAME, OPTION
HAS_SAVED_GAME, //CONTINUE, NEW GAME, OPTION
HAS_MYSTERY_GIFT, //CONTINUE, NEW GAME, MYSTERY EVENTS, OPTION
};
-//Task data
-enum {
- TD_TRAINER_SPRITE_ID = 2, //Trainer sprite being displayed during gender menu
- TD_BGHOFS = 4, //Used to set REG_BG1HOFS and slide the platform around
- TD_SUBTASK_DONE, //Set to true if the spawned task has finished
- TD_GENDER_SELECTION,
- TD_COUNTER,
- TD_BIRCH_SPRITE_ID,
- TD_AZURILL_SPRITE_ID,
- TD_BRENDAN_SPRITE_ID,
- TD_MAY_SPRITE_ID
-};
-
static void CB2_MainMenu(void);
static void VBlankCB_MainMenu(void);
static void CB2_InitMainMenuFromOptions(void);
@@ -180,6 +162,9 @@ static void CB2_InitMainMenuFromOptions(void)
InitMainMenu(TRUE);
}
+#define tMenuLayout data[0]
+#define tMenuSelection data[1]
+
u32 InitMainMenu(u8 a1)
{
u16 savedIme;
@@ -239,7 +224,7 @@ u32 InitMainMenu(u8 a1)
| DISPCNT_WIN0_ON;
taskId = CreateTask(Task_MainMenuCheckSave, 0);
- gTasks[taskId].data[TD_SELECTEDMENUITEM] = 0;
+ gTasks[taskId].tMenuSelection = 0;
return 0;
}
@@ -261,9 +246,9 @@ void Task_MainMenuCheckSave(u8 taskId)
{
case 1:
if (IsMysteryGiftEnabled() == TRUE)
- gTasks[taskId].data[TD_MENULAYOUT] = HAS_MYSTERY_GIFT;
+ gTasks[taskId].tMenuLayout = HAS_MYSTERY_GIFT;
else
- gTasks[taskId].data[TD_MENULAYOUT] = HAS_SAVED_GAME;
+ gTasks[taskId].tMenuLayout = HAS_SAVED_GAME;
gTasks[taskId].func = Task_MainMenuCheckRtc;
break;
@@ -272,7 +257,7 @@ void Task_MainMenuCheckSave(u8 taskId)
MenuPrintMessage(gSaveFileDeletedMessage, 3, 15);
REG_WIN0H = WIN_RANGE(17, 223);
REG_WIN0V = WIN_RANGE(113, 159);
- gTasks[taskId].data[TD_MENULAYOUT] = HAS_NO_SAVED_GAME;
+ gTasks[taskId].tMenuLayout = HAS_NO_SAVED_GAME;
gTasks[taskId].func = Task_MainMenuWaitForSaveErrorAck;
break;
case 255:
@@ -280,17 +265,17 @@ void Task_MainMenuCheckSave(u8 taskId)
MenuPrintMessage(gSaveFileCorruptMessage, 3, 15);
REG_WIN0H = WIN_RANGE(17, 223);
REG_WIN0V = WIN_RANGE(113, 159);
- gTasks[taskId].data[TD_MENULAYOUT] = HAS_SAVED_GAME;
+ gTasks[taskId].tMenuLayout = HAS_SAVED_GAME;
gTasks[taskId].func = Task_MainMenuWaitForSaveErrorAck;
if (IsMysteryGiftEnabled() == TRUE)
- gTasks[taskId].data[TD_MENULAYOUT] = HAS_MYSTERY_GIFT;
+ gTasks[taskId].tMenuLayout = HAS_MYSTERY_GIFT;
else
- gTasks[taskId].data[TD_MENULAYOUT] = HAS_SAVED_GAME;
+ gTasks[taskId].tMenuLayout = HAS_SAVED_GAME;
break;
case 0:
default:
- gTasks[taskId].data[TD_MENULAYOUT] = HAS_NO_SAVED_GAME;
+ gTasks[taskId].tMenuLayout = HAS_NO_SAVED_GAME;
gTasks[taskId].func = Task_MainMenuCheckRtc;
break;
case 4:
@@ -298,7 +283,7 @@ void Task_MainMenuCheckSave(u8 taskId)
MenuPrintMessage(gBoardNotInstalledMessage, 3, 15);
REG_WIN0H = WIN_RANGE(17, 223);
REG_WIN0V = WIN_RANGE(113, 159);
- gTasks[taskId].data[TD_MENULAYOUT] = HAS_NO_SAVED_GAME;
+ gTasks[taskId].tMenuLayout = HAS_NO_SAVED_GAME;
gTasks[taskId].func = Task_MainMenuWaitForSaveErrorAck;
return;
}
@@ -383,7 +368,7 @@ void Task_MainMenuDraw(u8 taskId)
LoadPalette(&palette, 241, 2);
}
- switch (gTasks[taskId].data[TD_MENULAYOUT])
+ switch (gTasks[taskId].tMenuLayout)
{
case HAS_NO_SAVED_GAME:
default:
@@ -420,7 +405,7 @@ void Task_MainMenuDraw(u8 taskId)
void Task_MainMenuHighlight(u8 taskId)
{
- HighlightCurrentMenuItem(gTasks[taskId].data[TD_MENULAYOUT], gTasks[taskId].data[TD_SELECTEDMENUITEM]);
+ HighlightCurrentMenuItem(gTasks[taskId].tMenuLayout, gTasks[taskId].tMenuSelection);
gTasks[taskId].func = Task_MainMenuProcessKeyInput;
}
@@ -444,7 +429,7 @@ bool8 MainMenuProcessKeyInput(u8 taskId)
{
s32 menuItemCount;
- switch (gTasks[taskId].data[TD_MENULAYOUT])
+ switch (gTasks[taskId].tMenuLayout)
{
case HAS_NO_SAVED_GAME:
default:
@@ -460,17 +445,17 @@ bool8 MainMenuProcessKeyInput(u8 taskId)
if (gMain.newKeys & DPAD_UP)
{
- if (gTasks[taskId].data[TD_SELECTEDMENUITEM] > 0)
+ if (gTasks[taskId].tMenuSelection > 0)
{
- gTasks[taskId].data[TD_SELECTEDMENUITEM]--;
+ gTasks[taskId].tMenuSelection--;
return TRUE;
}
}
if (gMain.newKeys & DPAD_DOWN)
{
- if (gTasks[taskId].data[TD_SELECTEDMENUITEM] < menuItemCount - 1)
+ if (gTasks[taskId].tMenuSelection < menuItemCount - 1)
{
- gTasks[taskId].data[TD_SELECTEDMENUITEM]++;
+ gTasks[taskId].tMenuSelection++;
return TRUE;
}
}
@@ -499,11 +484,11 @@ void Task_MainMenuPressedA(u8 taskId)
if (gPaletteFade.active)
return;
- switch (gTasks[taskId].data[TD_MENULAYOUT])
+ switch (gTasks[taskId].tMenuLayout)
{
case HAS_NO_SAVED_GAME:
default:
- switch (gTasks[taskId].data[TD_SELECTEDMENUITEM])
+ switch (gTasks[taskId].tMenuSelection)
{
case 0:
default:
@@ -515,7 +500,7 @@ void Task_MainMenuPressedA(u8 taskId)
}
break;
case HAS_SAVED_GAME:
- switch (gTasks[taskId].data[TD_SELECTEDMENUITEM])
+ switch (gTasks[taskId].tMenuSelection)
{
case 0:
default:
@@ -530,7 +515,7 @@ void Task_MainMenuPressedA(u8 taskId)
}
break;
case HAS_MYSTERY_GIFT:
- switch (gTasks[taskId].data[TD_SELECTEDMENUITEM])
+ switch (gTasks[taskId].tMenuSelection)
{
case 0:
default:
@@ -584,6 +569,9 @@ void Task_MainMenuPressedB(u8 taskId)
}
}
+#undef tMenuLayout
+#undef tMenuSelection
+
void HighlightCurrentMenuItem(u8 layout, u8 menuItem)
{
REG_WIN0H = WIN_RANGE(9, 231);
@@ -710,6 +698,16 @@ void PrintBadgeCount(void)
MenuPrint_PixelCoords(buffer, 205, 40, 1);
}
+#define tTrainerSpriteId data[2]
+#define tBGhofs data[4]
+#define tSubtaskIsDone data[5]
+#define tGenderSelection data[6]
+#define tFrameCounter data[7]
+#define tBirchSpriteId data[8]
+#define tAzurillSpriteId data[9]
+#define tBrendanSpriteId data[10]
+#define tMaySpriteId data[11]
+
static void Task_NewGameSpeech1(u8 taskId)
{
SetUpWindowConfig(&gWindowConfig_81E6C3C);
@@ -732,25 +730,25 @@ static void Task_NewGameSpeech1(u8 taskId)
BeginNormalPaletteFade(-1, 0, 0x10, 0, 0);
REG_BG1CNT = BGCNT_PRIORITY(3) | BGCNT_CHARBASE(0) | BGCNT_SCREENBASE(7) | BGCNT_16COLOR | BGCNT_TXT256x256;
REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_BG0_ON | DISPCNT_BG1_ON | DISPCNT_OBJ_ON | DISPCNT_OBJ_1D_MAP;
- gTasks[taskId].data[TD_BGHOFS] = 0;
+ gTasks[taskId].tBGhofs = 0;
gTasks[taskId].func = Task_NewGameSpeech2;
- gTasks[taskId].data[TD_TRAINER_SPRITE_ID] = 0xFF;
+ gTasks[taskId].tTrainerSpriteId = 0xFF;
gTasks[taskId].data[3] = 0xFF;
- gTasks[taskId].data[TD_COUNTER] = 216; //Wait 3.6 seconds (216 frames) before starting speech
+ gTasks[taskId].tFrameCounter = 216; //Wait 3.6 seconds (216 frames) before starting speech
PlayBGM(BGM_DOORO_X4);
}
static void Task_NewGameSpeech2(u8 taskId)
{
- if (gTasks[taskId].data[TD_COUNTER] != 0)
+ if (gTasks[taskId].tFrameCounter != 0)
{
- gTasks[taskId].data[TD_COUNTER]--;
+ gTasks[taskId].tFrameCounter--;
}
else
{
//Initialize Birch sprite
- u8 spriteId = gTasks[taskId].data[TD_BIRCH_SPRITE_ID];
+ u8 spriteId = gTasks[taskId].tBirchSpriteId;
gSprites[spriteId].pos1.x = 136;
gSprites[spriteId].pos1.y = 60;
@@ -758,19 +756,19 @@ static void Task_NewGameSpeech2(u8 taskId)
gSprites[spriteId].oam.objMode = ST_OAM_OBJ_BLEND;
StartSpriteFadeIn(taskId, 10);
StartBackgroundFadeIn(taskId, 20);
- gTasks[taskId].data[TD_COUNTER] = 80;
+ gTasks[taskId].tFrameCounter = 80;
gTasks[taskId].func = Task_NewGameSpeech3;
}
}
static void Task_NewGameSpeech3(u8 taskId)
{
- if (gTasks[taskId].data[TD_SUBTASK_DONE] != FALSE)
+ if (gTasks[taskId].tSubtaskIsDone)
{
- gSprites[gTasks[taskId].data[TD_BIRCH_SPRITE_ID]].oam.objMode = ST_OAM_OBJ_NORMAL;
- if (gTasks[taskId].data[TD_COUNTER])
+ gSprites[gTasks[taskId].tBirchSpriteId].oam.objMode = ST_OAM_OBJ_NORMAL;
+ if (gTasks[taskId].tFrameCounter)
{
- gTasks[taskId].data[TD_COUNTER]--;
+ gTasks[taskId].tFrameCounter--;
}
else
{
@@ -801,7 +799,7 @@ static void Task_NewGameSpeech5(u8 taskId)
static void Task_NewGameSpeech6(u8 taskId)
{
- u8 spriteId = gTasks[taskId].data[TD_AZURILL_SPRITE_ID];
+ u8 spriteId = gTasks[taskId].tAzurillSpriteId;
gSprites[spriteId].pos1.x = 104;
gSprites[spriteId].pos1.y = 72;
@@ -809,7 +807,7 @@ static void Task_NewGameSpeech6(u8 taskId)
gSprites[spriteId].data0 = 0;
CreatePokeballSprite(spriteId, gSprites[spriteId].oam.paletteNum, 0x70, 0x3A, 0, 0, 0x20, 0x0000FFFF);
gTasks[taskId].func = Task_NewGameSpeech7;
- gTasks[taskId].data[TD_COUNTER] = 0;
+ gTasks[taskId].tFrameCounter = 0;
}
static void Task_NewGameSpeech7(u8 taskId)
@@ -817,18 +815,18 @@ static void Task_NewGameSpeech7(u8 taskId)
if (IsCryFinished())
{
//Go on to next sentence after frame 95
- if (gTasks[taskId].data[TD_COUNTER] > 95)
+ if (gTasks[taskId].tFrameCounter > 95)
{
MenuSetText(gSystemText_NewPara);
gTasks[taskId].func = Task_NewGameSpeech8;
}
}
- if (gTasks[taskId].data[TD_COUNTER] < 16384)
+ if (gTasks[taskId].tFrameCounter < 16384)
{
- gTasks[taskId].data[TD_COUNTER]++;
+ gTasks[taskId].tFrameCounter++;
//Play Azurill cry at frame 32
- if (gTasks[taskId].data[TD_COUNTER] == 32)
+ if (gTasks[taskId].tFrameCounter == 32)
PlayCry1(SPECIES_AZURILL, 0);
}
}
@@ -859,11 +857,11 @@ static void Task_NewGameSpeech10(u8 taskId)
{
if (BirchSpeechUpdateWindowText())
{
- gSprites[gTasks[taskId].data[TD_BIRCH_SPRITE_ID]].oam.objMode = ST_OAM_OBJ_BLEND;
- gSprites[gTasks[taskId].data[TD_AZURILL_SPRITE_ID]].oam.objMode = ST_OAM_OBJ_BLEND;
+ gSprites[gTasks[taskId].tBirchSpriteId].oam.objMode = ST_OAM_OBJ_BLEND;
+ gSprites[gTasks[taskId].tAzurillSpriteId].oam.objMode = ST_OAM_OBJ_BLEND;
StartSpriteFadeOut(taskId, 2);
StartBackgroundFadeOut(taskId, 1);
- gTasks[taskId].data[TD_COUNTER] = 64;
+ gTasks[taskId].tFrameCounter = 64;
gTasks[taskId].func = Task_NewGameSpeech11;
}
}
@@ -871,41 +869,41 @@ static void Task_NewGameSpeech10(u8 taskId)
//Slide platform away to the right
static void Task_NewGameSpeech11(u8 taskId)
{
- if (gTasks[taskId].data[TD_BGHOFS] != -60)
+ if (gTasks[taskId].tBGhofs != -60)
{
- gTasks[taskId].data[TD_BGHOFS] -= 2;
- REG_BG1HOFS = gTasks[taskId].data[TD_BGHOFS];
+ gTasks[taskId].tBGhofs -= 2;
+ REG_BG1HOFS = gTasks[taskId].tBGhofs;
}
else
{
- gTasks[taskId].data[TD_BGHOFS] = -60;
+ gTasks[taskId].tBGhofs = -60;
gTasks[taskId].func = Task_NewGameSpeech12;
}
}
static void Task_NewGameSpeech12(u8 taskId)
{
- if (gTasks[taskId].data[TD_SUBTASK_DONE])
+ if (gTasks[taskId].tSubtaskIsDone)
{
//Hide Birch and Azurill
- gSprites[gTasks[taskId].data[TD_BIRCH_SPRITE_ID]].invisible = TRUE;
- gSprites[gTasks[taskId].data[TD_AZURILL_SPRITE_ID]].invisible = TRUE;
+ gSprites[gTasks[taskId].tBirchSpriteId].invisible = TRUE;
+ gSprites[gTasks[taskId].tAzurillSpriteId].invisible = TRUE;
- if (gTasks[taskId].data[TD_COUNTER])
+ if (gTasks[taskId].tFrameCounter)
{
- gTasks[taskId].data[TD_COUNTER]--;
+ gTasks[taskId].tFrameCounter--;
}
else
{
//Initialize Brendan sprite
- u8 spriteId = gTasks[taskId].data[TD_BRENDAN_SPRITE_ID];
+ u8 spriteId = gTasks[taskId].tBrendanSpriteId;
gSprites[spriteId].pos1.x = 180;
gSprites[spriteId].pos1.y = 60;
gSprites[spriteId].invisible = FALSE;
gSprites[spriteId].oam.objMode = ST_OAM_OBJ_BLEND;
- gTasks[taskId].data[TD_TRAINER_SPRITE_ID] = spriteId;
- gTasks[taskId].data[TD_GENDER_SELECTION] = 0;
+ gTasks[taskId].tTrainerSpriteId = spriteId;
+ gTasks[taskId].tGenderSelection = 0;
StartSpriteFadeIn(taskId, 2);
StartBackgroundFadeIn(taskId, 1);
gTasks[taskId].func = Task_NewGameSpeech13;
@@ -915,9 +913,9 @@ static void Task_NewGameSpeech12(u8 taskId)
static void Task_NewGameSpeech13(u8 taskId)
{
- if (gTasks[taskId].data[TD_SUBTASK_DONE])
+ if (gTasks[taskId].tSubtaskIsDone)
{
- gSprites[gTasks[taskId].data[TD_TRAINER_SPRITE_ID]].oam.objMode = ST_OAM_OBJ_NORMAL;
+ gSprites[gTasks[taskId].tTrainerSpriteId].oam.objMode = ST_OAM_OBJ_NORMAL;
gTasks[taskId].func = Task_NewGameSpeech14;
}
}
@@ -964,11 +962,11 @@ static void Task_NewGameSpeech16(u8 taskId)
cursorPos = GetMenuCursorPos();
- if (cursorPos != gTasks[taskId].data[TD_GENDER_SELECTION])
+ if (cursorPos != gTasks[taskId].tGenderSelection)
{
//Menu selection changed. Slide Brendan or May out and slide the other in
- gTasks[taskId].data[TD_GENDER_SELECTION] = cursorPos;
- gSprites[gTasks[taskId].data[TD_TRAINER_SPRITE_ID]].oam.objMode = ST_OAM_OBJ_BLEND;
+ gTasks[taskId].tGenderSelection = cursorPos;
+ gSprites[gTasks[taskId].tTrainerSpriteId].oam.objMode = ST_OAM_OBJ_BLEND;
StartSpriteFadeOut(taskId, 0);
gTasks[taskId].func = Task_NewGameSpeech17;
}
@@ -977,9 +975,9 @@ static void Task_NewGameSpeech16(u8 taskId)
//Slide old trainer sprite off right of screen
static void Task_NewGameSpeech17(u8 taskId)
{
- u8 spriteId = gTasks[taskId].data[TD_TRAINER_SPRITE_ID];
+ u8 spriteId = gTasks[taskId].tTrainerSpriteId;
- if (gTasks[taskId].data[TD_SUBTASK_DONE] == FALSE)
+ if (gTasks[taskId].tSubtaskIsDone == FALSE)
{
gSprites[spriteId].pos1.x += 4; //Move sprite right
}
@@ -988,14 +986,14 @@ static void Task_NewGameSpeech17(u8 taskId)
gSprites[spriteId].invisible = TRUE;
//Set up new trainer sprite
- if (gTasks[taskId].data[TD_GENDER_SELECTION])
- spriteId = gTasks[taskId].data[TD_MAY_SPRITE_ID];
+ if (gTasks[taskId].tGenderSelection)
+ spriteId = gTasks[taskId].tMaySpriteId;
else
- spriteId = gTasks[taskId].data[TD_BRENDAN_SPRITE_ID];
+ spriteId = gTasks[taskId].tBrendanSpriteId;
gSprites[spriteId].pos1.x = 240;
gSprites[spriteId].pos1.y = 60;
gSprites[spriteId].invisible = FALSE;
- gTasks[taskId].data[TD_TRAINER_SPRITE_ID] = spriteId;
+ gTasks[taskId].tTrainerSpriteId = spriteId;
gSprites[spriteId].oam.objMode = ST_OAM_OBJ_BLEND;
StartSpriteFadeIn(taskId, 0);
gTasks[taskId].func = Task_NewGameSpeech18;
@@ -1005,7 +1003,7 @@ static void Task_NewGameSpeech17(u8 taskId)
//Slide new trainer sprite from right of screen
static void Task_NewGameSpeech18(u8 taskId)
{
- u8 spriteId = gTasks[taskId].data[TD_TRAINER_SPRITE_ID];
+ u8 spriteId = gTasks[taskId].tTrainerSpriteId;
if (gSprites[spriteId].pos1.x > 180)
{
@@ -1014,7 +1012,7 @@ static void Task_NewGameSpeech18(u8 taskId)
else
{
gSprites[spriteId].pos1.x = 180;
- if (gTasks[taskId].data[TD_SUBTASK_DONE])
+ if (gTasks[taskId].tSubtaskIsDone)
{
gSprites[spriteId].oam.objMode = ST_OAM_OBJ_NORMAL;
gTasks[taskId].func = Task_NewGameSpeech16; //Go back to gender menu
@@ -1106,7 +1104,7 @@ static void Task_NewGameSpeech25(u8 taskId)
case 0: //YES
PlaySE(SE_SELECT);
MenuZeroFillWindowRect(2, 1, 8, 7);
- gSprites[gTasks[taskId].data[TD_TRAINER_SPRITE_ID]].oam.objMode = ST_OAM_OBJ_BLEND;
+ gSprites[gTasks[taskId].tTrainerSpriteId].oam.objMode = ST_OAM_OBJ_BLEND;
StartSpriteFadeOut(taskId, 2);
StartBackgroundFadeOut(taskId, 1);
gTasks[taskId].func = Task_NewGameSpeech26; //Continue
@@ -1122,10 +1120,10 @@ static void Task_NewGameSpeech25(u8 taskId)
static void Task_NewGameSpeech26(u8 taskId)
{
- if (gTasks[taskId].data[TD_BGHOFS])
+ if (gTasks[taskId].tBGhofs)
{
- gTasks[taskId].data[TD_BGHOFS] += 2;
- REG_BG1HOFS = gTasks[taskId].data[TD_BGHOFS];
+ gTasks[taskId].tBGhofs += 2;
+ REG_BG1HOFS = gTasks[taskId].tBGhofs;
}
else
{
@@ -1135,23 +1133,23 @@ static void Task_NewGameSpeech26(u8 taskId)
static void Task_NewGameSpeech27(u8 taskId)
{
- if (gTasks[taskId].data[TD_SUBTASK_DONE])
+ if (gTasks[taskId].tSubtaskIsDone)
{
s16 spriteId;
//Hide Brendan and May sprites
- spriteId = gTasks[taskId].data[TD_BRENDAN_SPRITE_ID];
+ spriteId = gTasks[taskId].tBrendanSpriteId;
gSprites[spriteId].invisible = TRUE;
- spriteId = gTasks[taskId].data[TD_MAY_SPRITE_ID];
+ spriteId = gTasks[taskId].tMaySpriteId;
gSprites[spriteId].invisible = TRUE;
//Fade in Birch and Azurill
- spriteId = (u8)gTasks[taskId].data[TD_BIRCH_SPRITE_ID];
+ spriteId = (u8)gTasks[taskId].tBirchSpriteId;
gSprites[spriteId].pos1.x = 136;
gSprites[spriteId].pos1.y = 64;
gSprites[spriteId].invisible = FALSE;
gSprites[spriteId].oam.objMode = ST_OAM_OBJ_BLEND;
- spriteId = (u8)gTasks[taskId].data[TD_AZURILL_SPRITE_ID];
+ spriteId = (u8)gTasks[taskId].tAzurillSpriteId;
gSprites[spriteId].pos1.x = 104;
gSprites[spriteId].pos1.y = 72;
gSprites[spriteId].invisible = FALSE;
@@ -1170,27 +1168,27 @@ static void Task_NewGameSpeech27(u8 taskId)
static void Task_NewGameSpeech28(u8 taskId)
{
- if (gTasks[taskId].data[TD_SUBTASK_DONE])
+ if (gTasks[taskId].tSubtaskIsDone)
{
s16 spriteId;
- spriteId = gTasks[taskId].data[TD_BIRCH_SPRITE_ID];
+ spriteId = gTasks[taskId].tBirchSpriteId;
gSprites[spriteId].oam.objMode = ST_OAM_OBJ_NORMAL;
- spriteId = gTasks[taskId].data[TD_AZURILL_SPRITE_ID];
+ spriteId = gTasks[taskId].tAzurillSpriteId;
gSprites[spriteId].oam.objMode = ST_OAM_OBJ_NORMAL;
if (BirchSpeechUpdateWindowText())
{
//Fade out Birch and Azurill
- spriteId = gTasks[taskId].data[TD_BIRCH_SPRITE_ID];
+ spriteId = gTasks[taskId].tBirchSpriteId;
gSprites[spriteId].oam.objMode = ST_OAM_OBJ_BLEND;
- spriteId = gTasks[taskId].data[TD_AZURILL_SPRITE_ID];
+ spriteId = gTasks[taskId].tAzurillSpriteId;
gSprites[spriteId].oam.objMode = ST_OAM_OBJ_BLEND;
StartSpriteFadeOut(taskId, 2);
StartBackgroundFadeOut(taskId, 1);
- gTasks[taskId].data[TD_COUNTER] = 64;
+ gTasks[taskId].tFrameCounter = 64;
gTasks[taskId].func = Task_NewGameSpeech29;
}
}
@@ -1198,19 +1196,19 @@ static void Task_NewGameSpeech28(u8 taskId)
static void Task_NewGameSpeech29(u8 taskId)
{
- if (gTasks[taskId].data[TD_SUBTASK_DONE])
+ if (gTasks[taskId].tSubtaskIsDone)
{
s16 spriteId;
//Hide Birch and Azurill
- spriteId = gTasks[taskId].data[TD_BIRCH_SPRITE_ID];
+ spriteId = gTasks[taskId].tBirchSpriteId;
gSprites[spriteId].invisible = TRUE;
- spriteId = gTasks[taskId].data[TD_AZURILL_SPRITE_ID];
+ spriteId = gTasks[taskId].tAzurillSpriteId;
gSprites[spriteId].invisible = TRUE;
- if (gTasks[taskId].data[TD_COUNTER])
+ if (gTasks[taskId].tFrameCounter)
{
- gTasks[taskId].data[TD_COUNTER]--;
+ gTasks[taskId].tFrameCounter--;
}
else
{
@@ -1218,14 +1216,14 @@ static void Task_NewGameSpeech29(u8 taskId)
//Fade in trainer and background
if (gSaveBlock2.playerGender)
- spriteId = (u8)gTasks[taskId].data[TD_MAY_SPRITE_ID];
+ spriteId = (u8)gTasks[taskId].tMaySpriteId;
else
- spriteId = (u8)gTasks[taskId].data[TD_BRENDAN_SPRITE_ID];
+ spriteId = (u8)gTasks[taskId].tBrendanSpriteId;
gSprites[spriteId].pos1.x = 120;
gSprites[spriteId].pos1.y = 60;
gSprites[spriteId].invisible = FALSE;
gSprites[spriteId].oam.objMode = ST_OAM_OBJ_BLEND;
- gTasks[taskId].data[TD_TRAINER_SPRITE_ID] = spriteId;
+ gTasks[taskId].tTrainerSpriteId = spriteId;
StartSpriteFadeIn(taskId, 2);
StartBackgroundFadeIn(taskId, 1);
@@ -1238,18 +1236,18 @@ static void Task_NewGameSpeech29(u8 taskId)
static void Task_NewGameSpeech30(u8 taskId)
{
- if (gTasks[taskId].data[TD_SUBTASK_DONE])
+ if (gTasks[taskId].tSubtaskIsDone)
{
s16 spriteId;
- spriteId = gTasks[taskId].data[TD_TRAINER_SPRITE_ID];
+ spriteId = gTasks[taskId].tTrainerSpriteId;
gSprites[spriteId].oam.objMode = ST_OAM_OBJ_NORMAL;
if (BirchSpeechUpdateWindowText())
{
u8 spriteId;
- spriteId = gTasks[taskId].data[TD_TRAINER_SPRITE_ID];
+ spriteId = gTasks[taskId].tTrainerSpriteId;
gSprites[spriteId].oam.affineMode = 1;
gSprites[spriteId].affineAnims = gSpriteAffineAnimTable_81E79AC;
InitSpriteAffineAnim(&gSprites[spriteId]);
@@ -1264,7 +1262,7 @@ static void Task_NewGameSpeech30(u8 taskId)
static void Task_NewGameSpeech31(u8 taskId)
{
- u8 spriteId = gTasks[taskId].data[TD_TRAINER_SPRITE_ID];
+ u8 spriteId = gTasks[taskId].tTrainerSpriteId;
if (gSprites[spriteId].affineAnimEnded)
gTasks[taskId].func = Task_NewGameSpeech32;
@@ -1274,7 +1272,7 @@ static void Task_NewGameSpeech32(u8 taskId)
{
if (!gPaletteFade.active)
{
- u8 spriteId = gTasks[taskId].data[TD_TRAINER_SPRITE_ID];
+ u8 spriteId = gTasks[taskId].tTrainerSpriteId;
gSprites[spriteId].callback = nullsub_34;
REG_DISPCNT = DISPCNT_MODE_0 | DISPCNT_OBJ_1D_MAP | DISPCNT_OBJ_ON;
BeginNormalPaletteFade(0xFFFF0000, 0, 0, 0x10, 0xFFFF);
@@ -1328,7 +1326,7 @@ void CB_ContinueNewGameSpeechPart2()
taskId = CreateTask(Task_NewGameSpeech23, 0);
- gTasks[taskId].data[TD_BGHOFS] = -60;
+ gTasks[taskId].tBGhofs = -60;
remove_some_task();
ResetSpriteData();
@@ -1340,20 +1338,20 @@ void CB_ContinueNewGameSpeechPart2()
if (gSaveBlock2.playerGender != MALE)
{
- gTasks[taskId].data[TD_GENDER_SELECTION] = FEMALE;
- spriteId = gTasks[taskId].data[TD_MAY_SPRITE_ID];
+ gTasks[taskId].tGenderSelection = FEMALE;
+ spriteId = gTasks[taskId].tMaySpriteId;
}
else
{
- gTasks[taskId].data[TD_GENDER_SELECTION] = MALE;
- spriteId = gTasks[taskId].data[TD_BRENDAN_SPRITE_ID];
+ gTasks[taskId].tGenderSelection = MALE;
+ spriteId = gTasks[taskId].tBrendanSpriteId;
}
gSprites[spriteId].pos1.x = 180;
gSprites[spriteId].pos1.y = 60;
gSprites[spriteId].invisible = FALSE;
- gTasks[taskId].data[TD_TRAINER_SPRITE_ID] = spriteId;
+ gTasks[taskId].tTrainerSpriteId = spriteId;
REG_BG1HOFS = -60;
@@ -1412,56 +1410,67 @@ void AddBirchSpeechObjects(u8 taskId)
gSprites[spriteId].callback = nullsub_34;
gSprites[spriteId].oam.priority = 0;
gSprites[spriteId].invisible = 1;
- gTasks[taskId].data[TD_BIRCH_SPRITE_ID] = spriteId;
+ gTasks[taskId].tBirchSpriteId = spriteId;
spriteId = CreateAzurillSprite(0x68, 0x48);
gSprites[spriteId].callback = nullsub_34;
gSprites[spriteId].oam.priority = 0;
gSprites[spriteId].invisible = 1;
- gTasks[taskId].data[TD_AZURILL_SPRITE_ID] = spriteId;
+ gTasks[taskId].tAzurillSpriteId = spriteId;
//Create Brendan sprite
- spriteId = CreateTrainerSprite_BirchSpeech(0, 120, 60, 0, unk_2000000);
+ spriteId = CreateTrainerSprite(0, 120, 60, 0, unk_2000000);
gSprites[spriteId].callback = nullsub_34;
gSprites[spriteId].invisible = 1;
gSprites[spriteId].oam.priority = 0;
- gTasks[taskId].data[TD_BRENDAN_SPRITE_ID] = spriteId;
+ gTasks[taskId].tBrendanSpriteId = spriteId;
//Create May sprite
- spriteId = CreateTrainerSprite_BirchSpeech(1, 120, 60, 0, unk_2000000 + 0x800);
+ spriteId = CreateTrainerSprite(1, 120, 60, 0, unk_2000000 + 0x800);
gSprites[spriteId].callback = nullsub_34;
gSprites[spriteId].invisible = 1;
gSprites[spriteId].oam.priority = 0;
- gTasks[taskId].data[TD_MAY_SPRITE_ID] = spriteId;
+ gTasks[taskId].tMaySpriteId = spriteId;
}
-enum {
- TD_PARENT_TASK_ID,
- TD_EVA, //EVA coefficient of REG_BLDALPHA
- TD_EVB, //EVB coefficient of REG_BLDALPHA
- TD_INTERVAL,
- TD_FRAMECOUNTER
-};
+#undef tTrainerSpriteId
+#undef tBGhofs
+//#undef tSubtaskIsDone
+#undef tGenderSelection
+#undef tFrameCounter
+#undef tBirchSpriteId
+#undef tAzurillSpriteId
+#undef tBrendanSpriteId
+#undef tMaySpriteId
+
+
+// Sprite Fade task
+
+#define tMainTaskId data[0]
+#define tBlendEVA data[1]
+#define tBlendEVB data[2]
+#define tUpdateInterval data[3]
+#define tFrameCounter data[4]
static void Task_SpriteFadeOut(u8 taskId)
{
- if (gTasks[taskId].data[TD_EVA] == 0)
+ if (gTasks[taskId].tBlendEVA == 0)
{
- gTasks[gTasks[taskId].data[TD_PARENT_TASK_ID]].data[TD_SUBTASK_DONE] = TRUE;
+ gTasks[gTasks[taskId].tMainTaskId].tSubtaskIsDone = TRUE;
DestroyTask(taskId);
}
else
{
- if (gTasks[taskId].data[TD_FRAMECOUNTER])
+ if (gTasks[taskId].tFrameCounter)
{
- gTasks[taskId].data[TD_FRAMECOUNTER]--;
+ gTasks[taskId].tFrameCounter--;
}
else
{
- gTasks[taskId].data[TD_FRAMECOUNTER] = gTasks[taskId].data[TD_INTERVAL];
- gTasks[taskId].data[TD_EVA]--;
- gTasks[taskId].data[TD_EVB]++;
- REG_BLDALPHA = gTasks[taskId].data[TD_EVA] + (gTasks[taskId].data[TD_EVB] * 256);
+ gTasks[taskId].tFrameCounter = gTasks[taskId].tUpdateInterval;
+ gTasks[taskId].tBlendEVA--;
+ gTasks[taskId].tBlendEVB++;
+ REG_BLDALPHA = gTasks[taskId].tBlendEVA + (gTasks[taskId].tBlendEVB * 256);
}
}
}
@@ -1474,33 +1483,33 @@ static void StartSpriteFadeOut(u8 taskId, u8 interval)
REG_BLDCNT = 592;
REG_BLDALPHA = 16;
REG_BLDY = 0;
- gTasks[taskId].data[TD_SUBTASK_DONE] = FALSE;
+ gTasks[taskId].tSubtaskIsDone = FALSE;
newTaskId = CreateTask(Task_SpriteFadeOut, 0);
- gTasks[newTaskId].data[TD_PARENT_TASK_ID] = taskId;
- gTasks[newTaskId].data[TD_EVA] = 16;
- gTasks[newTaskId].data[TD_EVB] = 0;
- gTasks[newTaskId].data[TD_INTERVAL] = interval;
- gTasks[newTaskId].data[TD_FRAMECOUNTER] = interval;
+ gTasks[newTaskId].tMainTaskId = taskId;
+ gTasks[newTaskId].tBlendEVA = 16;
+ gTasks[newTaskId].tBlendEVB = 0;
+ gTasks[newTaskId].tUpdateInterval = interval;
+ gTasks[newTaskId].tFrameCounter = interval;
}
static void Task_SpriteFadeIn(u8 taskId)
{
- if (gTasks[taskId].data[TD_EVA] == 16)
+ if (gTasks[taskId].tBlendEVA == 16)
{
- gTasks[gTasks[taskId].data[TD_PARENT_TASK_ID]].data[TD_SUBTASK_DONE] = TRUE;
+ gTasks[gTasks[taskId].tMainTaskId].tSubtaskIsDone = TRUE;
DestroyTask(taskId);
}
- else if (gTasks[taskId].data[TD_FRAMECOUNTER])
+ else if (gTasks[taskId].tFrameCounter)
{
- gTasks[taskId].data[TD_FRAMECOUNTER]--;
+ gTasks[taskId].tFrameCounter--;
}
else
{
- gTasks[taskId].data[TD_FRAMECOUNTER] = gTasks[taskId].data[TD_INTERVAL];
- gTasks[taskId].data[TD_EVA]++;
- gTasks[taskId].data[TD_EVB]--;
- REG_BLDALPHA = gTasks[taskId].data[TD_EVA] + (gTasks[taskId].data[TD_EVB] * 256);
+ gTasks[taskId].tFrameCounter = gTasks[taskId].tUpdateInterval;
+ gTasks[taskId].tBlendEVA++;
+ gTasks[taskId].tBlendEVB--;
+ REG_BLDALPHA = gTasks[taskId].tBlendEVA + (gTasks[taskId].tBlendEVB * 256);
}
}
@@ -1512,36 +1521,49 @@ static void StartSpriteFadeIn(u8 taskId, u8 interval)
REG_BLDCNT = 592;
REG_BLDALPHA = 4096;
REG_BLDY = 0;
- gTasks[taskId].data[TD_SUBTASK_DONE] = FALSE;
+ gTasks[taskId].tSubtaskIsDone = FALSE;
newTaskId = CreateTask(Task_SpriteFadeIn, 0);
- gTasks[newTaskId].data[TD_PARENT_TASK_ID] = taskId;
- gTasks[newTaskId].data[TD_EVA] = 0;
- gTasks[newTaskId].data[TD_EVB] = 16;
- gTasks[newTaskId].data[TD_INTERVAL] = interval;
- gTasks[newTaskId].data[TD_FRAMECOUNTER] = interval;
+ gTasks[newTaskId].tMainTaskId = taskId;
+ gTasks[newTaskId].tBlendEVA = 0;
+ gTasks[newTaskId].tBlendEVB = 16;
+ gTasks[newTaskId].tUpdateInterval = interval;
+ gTasks[newTaskId].tFrameCounter = interval;
}
-enum {
- TD_FADELEVEL = 1,
- TD_DELAY,
-};
+#undef tMainTaskId
+#undef tBlendEVA
+#undef tBlendEVB
+#undef tUpdateInterval
+#undef tFrameCounter
+
+
+// Background fade task
+
+#define tMainTaskId data[0]
+#define tFadeLevel data[1]
+#define tDelay data[2]
+#define tUpdateInterval data[3]
+#define tFrameCounter data[4]
static void HandleFloorShadowFadeOut(u8 taskId)
{
- if (gTasks[taskId].data[TD_DELAY])
- gTasks[taskId].data[TD_DELAY]--;
+ if (gTasks[taskId].tDelay)
+ gTasks[taskId].tDelay--;
else
{
- if (gTasks[taskId].data[TD_FADELEVEL] == 8)
+ if (gTasks[taskId].tFadeLevel == 8)
DestroyTask(taskId);
- else if (gTasks[taskId].data[TD_FRAMECOUNTER])
- gTasks[taskId].data[TD_FRAMECOUNTER]--;
else
{
- gTasks[taskId].data[TD_FRAMECOUNTER] = gTasks[taskId].data[TD_INTERVAL];
- gTasks[taskId].data[TD_FADELEVEL]++;
- LoadPalette(&gUnknown_081E795C[gTasks[taskId].data[TD_FADELEVEL]], 1, 0x10);
+ if (gTasks[taskId].tFrameCounter)
+ gTasks[taskId].tFrameCounter--;
+ else
+ {
+ gTasks[taskId].tFrameCounter = gTasks[taskId].tUpdateInterval;
+ gTasks[taskId].tFadeLevel++;
+ LoadPalette(&gUnknown_081E795C[gTasks[taskId].tFadeLevel], 1, 0x10);
+ }
}
}
}
@@ -1550,30 +1572,30 @@ static void HandleFloorShadowFadeOut(u8 taskId)
static void StartBackgroundFadeOut(u8 taskId, u8 interval)
{
u8 newTaskId = CreateTask(HandleFloorShadowFadeOut, 0);
- gTasks[newTaskId].data[TD_PARENT_TASK_ID] = taskId;
- gTasks[newTaskId].data[TD_FADELEVEL] = 0;
- gTasks[newTaskId].data[TD_DELAY] = 8;
- gTasks[newTaskId].data[TD_INTERVAL] = interval;
- gTasks[newTaskId].data[TD_FRAMECOUNTER] = interval;
+ gTasks[newTaskId].tMainTaskId = taskId;
+ gTasks[newTaskId].tFadeLevel = 0;
+ gTasks[newTaskId].tDelay = 8;
+ gTasks[newTaskId].tUpdateInterval = interval;
+ gTasks[newTaskId].tFrameCounter = interval;
}
static void HandleFloorShadowFadeIn(u8 taskId)
{
- if (gTasks[taskId].data[TD_DELAY])
- gTasks[taskId].data[TD_DELAY]--;
+ if (gTasks[taskId].tDelay)
+ gTasks[taskId].tDelay--;
else
{
- if (gTasks[taskId].data[TD_FADELEVEL] == 0)
+ if (gTasks[taskId].tFadeLevel == 0)
DestroyTask(taskId);
else
{
- if (gTasks[taskId].data[TD_FRAMECOUNTER])
- gTasks[taskId].data[TD_FRAMECOUNTER]--;
+ if (gTasks[taskId].tFrameCounter)
+ gTasks[taskId].tFrameCounter--;
else
{
- gTasks[taskId].data[TD_FRAMECOUNTER] = gTasks[taskId].data[TD_INTERVAL];
- gTasks[taskId].data[TD_FADELEVEL]--;
- LoadPalette(&gUnknown_081E795C[gTasks[taskId].data[TD_FADELEVEL]], 1, 0x10);
+ gTasks[taskId].tFrameCounter = gTasks[taskId].tUpdateInterval;
+ gTasks[taskId].tFadeLevel--;
+ LoadPalette(&gUnknown_081E795C[gTasks[taskId].tFadeLevel], 1, 0x10);
}
}
}
@@ -1583,12 +1605,18 @@ static void HandleFloorShadowFadeIn(u8 taskId)
static void StartBackgroundFadeIn(u8 taskId, u8 interval)
{
u8 newTaskId = CreateTask(HandleFloorShadowFadeIn, 0);
- gTasks[newTaskId].data[TD_PARENT_TASK_ID] = taskId;
- gTasks[newTaskId].data[TD_FADELEVEL] = 8;
- gTasks[newTaskId].data[TD_DELAY] = 8;
- gTasks[newTaskId].data[TD_INTERVAL] = interval;
- gTasks[newTaskId].data[TD_FRAMECOUNTER] = interval;
-}
+ gTasks[newTaskId].tMainTaskId = taskId;
+ gTasks[newTaskId].tFadeLevel = 8;
+ gTasks[newTaskId].tDelay = 8;
+ gTasks[newTaskId].tUpdateInterval = interval;
+ gTasks[newTaskId].tFrameCounter = interval;
+}
+
+#undef tMainTaskId
+#undef tFadeLevel
+#undef tDelay
+#undef tUpdateInterval
+#undef tFrameCounter
static void CreateGenderMenu(u8 left, u8 top)
{
diff --git a/src/map_obj_lock.c b/src/map_obj_lock.c
index bd40bcacc..2856320b8 100644
--- a/src/map_obj_lock.c
+++ b/src/map_obj_lock.c
@@ -75,7 +75,7 @@ bool8 sub_8064DB4(void)
}
}
-void sub_8064DD8(void)
+void LockSelectedMapObject(void)
{
u8 taskId;
FreezeMapObjectsExceptOne(gSelectedMapObject);
diff --git a/src/matsuda_debug_menu.c b/src/matsuda_debug_menu.c
index 3665cabd8..c7d81f502 100644
--- a/src/matsuda_debug_menu.c
+++ b/src/matsuda_debug_menu.c
@@ -8,7 +8,7 @@
#include "main.h"
#include "menu.h"
#include "palette.h"
-#include "rom4.h"
+#include "overworld.h"
#include "sprite.h"
#include "start_menu.h"
#include "string_util.h"
diff --git a/src/mauville_man.c b/src/mauville_man.c
new file mode 100644
index 000000000..33bc39648
--- /dev/null
+++ b/src/mauville_man.c
@@ -0,0 +1,1311 @@
+#include "global.h"
+#include "bard_music.h"
+#include "mauville_man.h"
+#include "easy_chat.h"
+#include "event_data.h"
+#include "field_message_box.h"
+#include "m4a.h"
+#include "menu.h"
+#include "overworld.h"
+#include "rng.h"
+#include "script.h"
+#include "songs.h"
+#include "sound.h"
+#include "string_util.h"
+#include "strings.h"
+#include "task.h"
+#include "trader.h"
+
+#define MACRO1(a) (((a) % 4) + (((a) / 8) & 1))
+
+extern struct MusicPlayerInfo gMPlay_SE2;
+
+extern u16 gScriptResult;
+extern u16 gSpecialVar_0x8004;
+
+extern const u8 gTextStoryteller_Story1Title[];
+extern const u8 gTextStoryteller_Story1Action[];
+extern const u8 gTextStoryteller_Story1Text[];
+extern const u8 gTextStoryteller_Story2Title[];
+extern const u8 gTextStoryteller_Story2Action[];
+extern const u8 gTextStoryteller_Story2Text[];
+extern const u8 gTextStoryteller_Story3Title[];
+extern const u8 gTextStoryteller_Story3Action[];
+extern const u8 gTextStoryteller_Story3Text[];
+extern const u8 gTextStoryteller_Story4Title[];
+extern const u8 gTextStoryteller_Story4Action[];
+extern const u8 gTextStoryteller_Story4Text[];
+extern const u8 gTextStoryteller_Story5Title[];
+extern const u8 gTextStoryteller_Story5Action[];
+extern const u8 gTextStoryteller_Story5Text[];
+extern const u8 gTextStoryteller_Story6Title[];
+extern const u8 gTextStoryteller_Story6Action[];
+extern const u8 gTextStoryteller_Story6Text[];
+extern const u8 gTextStoryteller_Story7Title[];
+extern const u8 gTextStoryteller_Story7Action[];
+extern const u8 gTextStoryteller_Story7Text[];
+extern const u8 gTextStoryteller_Story8Title[];
+extern const u8 gTextStoryteller_Story8Action[];
+extern const u8 gTextStoryteller_Story8Text[];
+extern const u8 gTextStoryteller_Story9Title[];
+extern const u8 gTextStoryteller_Story9Action[];
+extern const u8 gTextStoryteller_Story9Text[];
+extern const u8 gTextStoryteller_Story10Title[];
+extern const u8 gTextStoryteller_Story10Action[];
+extern const u8 gTextStoryteller_Story10Text[];
+extern const u8 gTextStoryteller_Story11Title[];
+extern const u8 gTextStoryteller_Story11Action[];
+extern const u8 gTextStoryteller_Story11Text[];
+extern const u8 gTextStoryteller_Story12Title[];
+extern const u8 gTextStoryteller_Story12Action[];
+extern const u8 gTextStoryteller_Story12Text[];
+extern const u8 gTextStoryteller_Story13Title[];
+extern const u8 gTextStoryteller_Story13Action[];
+extern const u8 gTextStoryteller_Story13Text[];
+extern const u8 gTextStoryteller_Story14Title[];
+extern const u8 gTextStoryteller_Story14Action[];
+extern const u8 gTextStoryteller_Story14Text[];
+extern const u8 gTextStoryteller_Story15Title[];
+extern const u8 gTextStoryteller_Story15Action[];
+extern const u8 gTextStoryteller_Story15Text[];
+extern const u8 gTextStoryteller_Story16Title[];
+extern const u8 gTextStoryteller_Story16Action[];
+extern const u8 gTextStoryteller_Story16Text[];
+extern const u8 gTextStoryteller_Story17Title[];
+extern const u8 gTextStoryteller_Story17Action[];
+extern const u8 gTextStoryteller_Story17Text[];
+extern const u8 gTextStoryteller_Story18Title[];
+extern const u8 gTextStoryteller_Story18Action[];
+extern const u8 gTextStoryteller_Story18Text[];
+extern const u8 gTextStoryteller_Story19Title[];
+extern const u8 gTextStoryteller_Story19Action[];
+extern const u8 gTextStoryteller_Story19Text[];
+extern const u8 gTextStoryteller_Story20Title[];
+extern const u8 gTextStoryteller_Story20Action[];
+extern const u8 gTextStoryteller_Story20Text[];
+extern const u8 gTextStoryteller_Story21Title[];
+extern const u8 gTextStoryteller_Story21Action[];
+extern const u8 gTextStoryteller_Story21Text[];
+extern const u8 gTextStoryteller_Story22Title[];
+extern const u8 gTextStoryteller_Story22Action[];
+extern const u8 gTextStoryteller_Story22Text[];
+extern const u8 gTextStoryteller_Story23Title[];
+extern const u8 gTextStoryteller_Story23Action[];
+extern const u8 gTextStoryteller_Story23Text[];
+extern const u8 gTextStoryteller_Story24Title[];
+extern const u8 gTextStoryteller_Story24Action[];
+extern const u8 gTextStoryteller_Story24Text[];
+extern const u8 gTextStoryteller_Story25Title[];
+extern const u8 gTextStoryteller_Story25Action[];
+extern const u8 gTextStoryteller_Story25Text[];
+extern const u8 gTextStoryteller_Story26Title[];
+extern const u8 gTextStoryteller_Story26Action[];
+extern const u8 gTextStoryteller_Story26Text[];
+extern const u8 gTextStoryteller_Story27Title[];
+extern const u8 gTextStoryteller_Story27Action[];
+extern const u8 gTextStoryteller_Story27Text[];
+extern const u8 gTextStoryteller_Story28Title[];
+extern const u8 gTextStoryteller_Story28Action[];
+extern const u8 gTextStoryteller_Story28Text[];
+extern const u8 gTextStoryteller_Story29Title[];
+extern const u8 gTextStoryteller_Story29Action[];
+extern const u8 gTextStoryteller_Story29Text[];
+extern const u8 gTextStoryteller_Story30Title[];
+extern const u8 gTextStoryteller_Story30Action[];
+extern const u8 gTextStoryteller_Story30Text[];
+extern const u8 gTextStoryteller_Story31Title[];
+extern const u8 gTextStoryteller_Story31Action[];
+extern const u8 gTextStoryteller_Story31Text[];
+extern const u8 gTextStoryteller_Story32Title[];
+extern const u8 gTextStoryteller_Story32Action[];
+extern const u8 gTextStoryteller_Story32Text[];
+extern const u8 gTextStoryteller_Story33Title[];
+extern const u8 gTextStoryteller_Story33Action[];
+extern const u8 gTextStoryteller_Story33Text[];
+extern const u8 gTextStoryteller_Story34Title[];
+extern const u8 gTextStoryteller_Story34Action[];
+extern const u8 gTextStoryteller_Story34Text[];
+extern const u8 gTextStoryteller_Story35Title[];
+extern const u8 gTextStoryteller_Story35Action[];
+extern const u8 gTextStoryteller_Story35Text[];
+extern const u8 gTextStoryteller_Story36Title[];
+extern const u8 gTextStoryteller_Story36Action[];
+extern const u8 gTextStoryteller_Story36Text[];
+
+extern struct BardSong gUnknown_03005DA0;
+
+EWRAM_DATA static u16 gUnknown_020388BC = 0; // set but not used?
+
+static const u16 sDefaultBardSongLyrics[] =
+{
+#ifdef ENGLISH
+ EC_WORD_SISTER,
+ EC_WORD_EATS,
+ EC_WORD_SWEETS,
+ EC_WORD_VORACIOUS,
+ EC_WORD_AND,
+ EC_WORD_DROOLING,
+#else
+ EC_WORD_SISTER,
+ EC_WORD_MUST_BE,
+ EC_WORD_SWEETS,
+ EC_WORD_VORACIOUS,
+ EC_WORD_DROOLING,
+ EC_WORD_THICK,
+#endif
+};
+
+static const u8 *const sGiddyAdjectives[] =
+{
+ OtherText_SoPretty,
+ OtherText_SoDarling,
+ OtherText_SoRelaxed,
+ OtherText_SoSunny,
+ OtherText_SoDesirable,
+ OtherText_SoExciting,
+ OtherText_SoAmusing,
+ OtherText_SoMagical,
+};
+
+static const u8 *const sGiddyQuestions[] =
+{
+ OtherText_WantVacationNicePlace,
+ OtherText_BoughtCrayonsIsNice,
+ OtherText_IfWeCouldFloat,
+ OtherText_SandWashesAwayMakeSad,
+ OtherText_WhatsBottomSeaLike,
+ OtherText_SeeSettingSun,
+ OtherText_LyingInGreenGrass,
+ OtherText_SecretBasesWonderful,
+};
+
+static void sub_80F7DC0(void);
+static void Task_BardSong(u8);
+static void StartBardSong(u8);
+static void StorytellerSetup(void);
+static void sub_80F8428(void);
+
+static void SetupBard(void)
+{
+ u16 i;
+ struct MauvilleManBard *bard = &gSaveBlock1.mauvilleMan.bard;
+
+ bard->id = MAUVILLE_MAN_BARD;
+ bard->hasChangedSong = FALSE;
+ for (i = 0; i < 6; i++)
+ bard->songLyrics[i] = sDefaultBardSongLyrics[i];
+}
+
+static void SetupHipster(void)
+{
+ struct MauvilleManHipster *hipster = &gSaveBlock1.mauvilleMan.hipster;
+
+ hipster->id = MAUVILLE_MAN_HIPSTER;
+ hipster->alreadySpoken = FALSE;
+}
+
+static void SetupStoryteller(void)
+{
+ StorytellerSetup();
+}
+
+static void SetupGiddy(void)
+{
+ struct MauvilleManGiddy *giddy = &gSaveBlock1.mauvilleMan.giddy;
+
+ giddy->id = MAUVILLE_MAN_GIDDY;
+ giddy->taleCounter = 0;
+}
+
+static void SetupTrader(void)
+{
+ TraderSetup();
+}
+
+void SetupMauvilleOldMan(void)
+{
+ u16 trainerId = (gSaveBlock2.playerTrainerId[1] << 8) | gSaveBlock2.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;
+ }
+ sub_80F83D0();
+}
+
+static u8 GetCurrentMauvilleOldMan(void)
+{
+ struct MauvilleManCommon *common = &gSaveBlock1.mauvilleMan.common;
+
+ return common->id;
+}
+
+void ScrSpecial_GetCurrentMauvilleMan(void)
+{
+ gScriptResult = GetCurrentMauvilleOldMan();
+}
+
+void ScrSpecial_HasBardSongBeenChanged(void)
+{
+ u16 *scriptResult = &gScriptResult; // why??
+ struct MauvilleManBard *bard = &gSaveBlock1.mauvilleMan.bard;
+
+ *scriptResult = bard->hasChangedSong;
+}
+
+void ScrSpecial_SaveBardSongLyrics(void)
+{
+ u16 i;
+ struct MauvilleManBard *bard = &gSaveBlock1.mauvilleMan.bard;
+
+ StringCopy(bard->playerName, gSaveBlock2.playerName);
+
+ for (i = 0; i < 4; i++)
+ bard->playerTrainerId[i] = gSaveBlock2.playerTrainerId[i];
+
+ for (i = 0; i < 6; i++)
+ bard->songLyrics[i] = bard->temporaryLyrics[i];
+
+ bard->hasChangedSong = TRUE;
+}
+
+// Copies lyrics into gStringVar4
+void PrepareSongText(void)
+{
+ struct MauvilleManBard *bard = &gSaveBlock1.mauvilleMan.bard;
+ u16 specialVar = gSpecialVar_0x8004; // It's a bit odd to use this temp variable, but it seems needed to match.
+ u16 *lyrics;
+ u16 lineNum;
+ u8 *wordEnd;
+ u8 *str;
+
+ lyrics = bard->temporaryLyrics;
+ if (specialVar == 0)
+ lyrics = bard->songLyrics;
+ wordEnd = gStringVar4;
+ str = wordEnd;
+ // Put three words on each line
+ for (lineNum = 0; lineNum < 2; lineNum++)
+ {
+ wordEnd = EasyChat_GetWordText(wordEnd, *(lyrics++));
+ while (wordEnd != str)
+ {
+ if (*str == CHAR_SPACE)
+ *str = CHAR_SONG_WORD_SEPARATOR;
+ str++;
+ }
+
+ str++;
+ *(wordEnd++) = CHAR_SPACE;
+
+ wordEnd = EasyChat_GetWordText(wordEnd, *(lyrics++));
+ while (wordEnd != str)
+ {
+ if (*str == CHAR_SPACE)
+ *str = CHAR_SONG_WORD_SEPARATOR;
+ str++;
+ }
+
+ str++;
+ *(wordEnd++) = CHAR_NEWLINE;
+
+ wordEnd = EasyChat_GetWordText(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);
+ MenuDisplayMessageBox();
+ ScriptContext1_Stop();
+}
+
+void ScrSpecial_GetHipsterSpokenFlag(void)
+{
+ u16 *scriptResult = &gScriptResult; // again??
+ struct MauvilleManHipster *hipster = &gSaveBlock1.mauvilleMan.hipster;
+
+ *scriptResult = hipster->alreadySpoken;
+}
+
+void ScrSpecial_SetHipsterSpokenFlag(void)
+{
+ struct MauvilleManHipster *hipster = &gSaveBlock1.mauvilleMan.hipster;
+
+ hipster->alreadySpoken = TRUE;
+}
+
+void ScrSpecial_HipsterTeachWord(void)
+{
+ u16 var = sub_80EB8EC();
+
+ if (var == 0xFFFF)
+ {
+ gScriptResult = FALSE;
+ }
+ else
+ {
+ EasyChat_GetWordText(gStringVar1, var);
+ gScriptResult = TRUE;
+ }
+}
+
+void ScrSpecial_GiddyShouldTellAnotherTale(void)
+{
+ struct MauvilleManGiddy *giddy = &gSaveBlock1.mauvilleMan.giddy;
+
+ if (giddy->taleCounter == 10)
+ {
+ gScriptResult = FALSE;
+ giddy->taleCounter = 0;
+ }
+ else
+ {
+ gScriptResult = TRUE;
+ }
+}
+
+void ScrSpecial_GenerateGiddyLine(void)
+{
+ struct MauvilleManGiddy *giddy = &gSaveBlock1.mauvilleMan.giddy;
+
+ if (giddy->taleCounter == 0)
+ sub_80F7DC0();
+
+ if (giddy->randomWords[giddy->taleCounter] != 0xFFFF) // is not the last element of the array?
+ {
+ u8 *stringPtr;
+ u32 adjective = Random();
+
+ adjective %= 8;
+ stringPtr = EasyChat_GetWordText(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++;
+
+ gScriptResult = TRUE;
+}
+
+#ifdef NONMATCHING
+static void sub_80F7DC0(void)
+{
+ u16 arr[][2] =
+ {
+ { 0x0, 0},
+ { 0xC, 0},
+ { 0xD, 0},
+ {0x12, 0},
+ {0x13, 0},
+ {0x15, 0},
+ };
+ u16 i;
+ u16 r10;
+ u16 r7;
+
+ for (i = 0; i < 8; i++)
+ {
+ struct MauvilleManGiddy *giddy = &gSaveBlock1.mauvilleMan.giddy;
+
+ //gSaveBlock1.mauvilleMan.giddy.questionList[i] = i;
+ giddy->questionList[i] = i;
+ }
+
+ // Scramble questions
+ for (i = 0; i < 8; i++)
+ {
+ struct MauvilleManGiddy *giddy = &gSaveBlock1.mauvilleMan.giddy;
+
+ /*
+ u16 r1 = Random() % (i + 1);
+ u8 r7 = gSaveBlock1.mauvilleMan.giddy.questionList[i];
+ gSaveBlock1.mauvilleMan.giddy.questionList[i] = gSaveBlock1.mauvilleMan.giddy.questionList[r1];
+ gSaveBlock1.mauvilleMan.giddy.questionList[r1] = r7;
+ */
+ u16 r1 = Random() % (i + 1);
+ u8 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] = sub_80EAE88(arr[i][0]);
+ r10 += arr[i][1];
+ }
+
+ {
+ struct MauvilleManGiddy *giddy = &gSaveBlock1.mauvilleMan.giddy;
+ giddy->questionNum = 0;
+ }
+ //gSaveBlock1.mauvilleMan.giddy.questionNum = 0;
+
+ r7 = 0;
+ for (i = 0; i < 10; i++)
+ {
+ struct MauvilleManGiddy *giddy = &gSaveBlock1.mauvilleMan.giddy;
+
+ u16 var = Random() % 10;
+ if (var < 3 && r7 < 8)
+ {
+ //gSaveBlock1.mauvilleMan.giddy.randomWords[i] = 0xFFFF;
+ giddy->randomWords[i] = 0xFFFF;
+ r7++;
+ }
+ //_080F7E90
+ else
+ {
+ s16 r2 = Random() % r10;
+
+ u16 r1 = 0;
+
+ while (i < 6) // comparing the wrong variable
+ {
+ r2 = arr[r1][1] - r2;
+ if (r2 <= 0)
+ break;
+ r1++;
+ }
+
+ if (r1 == 6)
+ r1 = 0;
+ //gSaveBlock1.mauvilleMan.giddy.randomWords[i] = sub_80EB784(arr[r1][0]);
+ giddy->randomWords[i] = sub_80EB784(arr[r1][0]);
+ }
+ }
+}
+#else
+
+static const u16 gUnknown_083E53C8[][2] =
+{
+ { 0x0, 0},
+ { 0xC, 0},
+ { 0xD, 0},
+ {0x12, 0},
+ {0x13, 0},
+ {0x15, 0},
+};
+
+__attribute__((naked))
+static void sub_80F7DC0(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\
+ sub sp, 0x18\n\
+ ldr r1, _080F7E84 @ =gUnknown_083E53C8\n\
+ mov r0, sp\n\
+ movs r2, 0x18\n\
+ bl memcpy\n\
+ movs r5, 0\n\
+ movs r0, 0x2\n\
+ add r0, sp\n\
+ mov r8, r0\n\
+ ldr r1, _080F7E88 @ =gSaveBlock1 + 0x2D94\n\
+ adds r1, 0x18\n\
+ adds r3, r1, 0\n\
+_080F7DE4:\n\
+ adds r0, r3, r5\n\
+ strb r5, [r0]\n\
+ adds r0, r5, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r5, r0, 16\n\
+ cmp r5, 0x7\n\
+ bls _080F7DE4\n\
+ movs r5, 0\n\
+ ldr r2, _080F7E88 @ =gSaveBlock1 + 0x2D94\n\
+ adds r2, 0x4\n\
+ mov r9, r2\n\
+ adds r6, r1, 0\n\
+_080F7DFC:\n\
+ bl Random\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ adds r4, r5, 0x1\n\
+ adds r1, r4, 0\n\
+ bl __modsi3\n\
+ lsls r0, 16\n\
+ lsrs r1, r0, 16\n\
+ adds r2, r6, r5\n\
+ ldrb r7, [r2]\n\
+ adds r1, r6, r1\n\
+ ldrb r0, [r1]\n\
+ strb r0, [r2]\n\
+ strb r7, [r1]\n\
+ lsls r4, 16\n\
+ lsrs r5, r4, 16\n\
+ cmp r5, 0x7\n\
+ bls _080F7DFC\n\
+ movs r3, 0\n\
+ mov r10, r3\n\
+ movs r5, 0\n\
+_080F7E2A:\n\
+ lsls r4, r5, 2\n\
+ mov r1, sp\n\
+ adds r0, r1, r4\n\
+ ldrb r0, [r0]\n\
+ bl sub_80EAE88\n\
+ add r4, r8\n\
+ strh r0, [r4]\n\
+ add r0, r10\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ mov r10, r0\n\
+ adds r0, r5, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r5, r0, 16\n\
+ cmp r5, 0x5\n\
+ bls _080F7E2A\n\
+ movs r0, 0\n\
+ ldr r2, _080F7E88 @ =gSaveBlock1 + 0x2D94\n\
+ strb r0, [r2, 0x2]\n\
+ movs r7, 0\n\
+ movs r5, 0\n\
+_080F7E56:\n\
+ bl Random\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ movs r1, 0xA\n\
+ bl __umodsi3\n\
+ lsls r0, 16\n\
+ lsrs r1, r0, 16\n\
+ cmp r1, 0x2\n\
+ bhi _080F7E90\n\
+ cmp r7, 0x7\n\
+ bhi _080F7E90\n\
+ lsls r0, r5, 1\n\
+ add r0, r9\n\
+ ldr r1, _080F7E8C @ =0x0000ffff\n\
+ strh r1, [r0]\n\
+ adds r0, r7, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r7, r0, 16\n\
+ adds r4, r5, 0x1\n\
+ b _080F7EE2\n\
+ .align 2, 0\n\
+_080F7E84: .4byte gUnknown_083E53C8\n\
+_080F7E88: .4byte gSaveBlock1 + 0x2D94\n\
+_080F7E8C: .4byte 0x0000ffff\n\
+_080F7E90:\n\
+ bl Random\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ mov r1, r10\n\
+ bl __umodsi3\n\
+ lsls r0, 16\n\
+ lsrs r2, r0, 16\n\
+ movs r1, 0\n\
+ adds r4, r5, 0x1\n\
+ lsls r6, r5, 1\n\
+ cmp r5, 0x5\n\
+ bhi _080F7ECC\n\
+ mov r3, r8\n\
+ ldrh r0, [r3]\n\
+ b _080F7EC2\n\
+_080F7EB2:\n\
+ adds r0, r1, 0x1\n\
+ lsls r0, 16\n\
+ lsrs r1, r0, 16\n\
+ cmp r5, 0x5\n\
+ bhi _080F7ECC\n\
+ lsls r0, r1, 2\n\
+ adds r0, r3, r0\n\
+ ldrh r0, [r0]\n\
+_080F7EC2:\n\
+ subs r0, r2, r0\n\
+ lsls r0, 16\n\
+ lsrs r2, r0, 16\n\
+ cmp r0, 0\n\
+ bgt _080F7EB2\n\
+_080F7ECC:\n\
+ cmp r1, 0x6\n\
+ bne _080F7ED2\n\
+ movs r1, 0\n\
+_080F7ED2:\n\
+ lsls r0, r1, 2\n\
+ add r0, sp\n\
+ ldrh r0, [r0]\n\
+ bl sub_80EB784\n\
+ mov r2, r9\n\
+ adds r1, r2, r6\n\
+ strh r0, [r1]\n\
+_080F7EE2:\n\
+ lsls r0, r4, 16\n\
+ lsrs r5, r0, 16\n\
+ cmp r5, 0x9\n\
+ bls _080F7E56\n\
+ add sp, 0x18\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\n");
+}
+#endif
+
+static void sub_80F7EFC(void)
+{
+ struct MauvilleManBard *bard = &gSaveBlock1.mauvilleMan.bard;
+
+ bard->hasChangedSong = FALSE;
+}
+
+static void sub_80F7F0C(void)
+{
+ struct MauvilleManHipster *hipster = &gSaveBlock1.mauvilleMan.hipster;
+
+ hipster->alreadySpoken = FALSE;
+}
+
+static void sub_80F7F18(void)
+{
+ sub_8109A20();
+}
+
+static void sub_80F7F24(void)
+{
+ sub_80F8428();
+}
+
+void sub_80F7F30(void)
+{
+ switch (GetCurrentMauvilleOldMan())
+ {
+ case MAUVILLE_MAN_BARD:
+ sub_80F7EFC();
+ break;
+ case MAUVILLE_MAN_HIPSTER:
+ sub_80F7F0C();
+ break;
+ case MAUVILLE_MAN_STORYTELLER:
+ sub_80F7F24();
+ break;
+ case MAUVILLE_MAN_TRADER:
+ sub_80F7F18();
+ break;
+ case MAUVILLE_MAN_GIDDY:
+ break;
+ }
+ sub_80F83D0();
+}
+
+#define tState data[0]
+#define tCharIndex data[3]
+#define tCurrWord data[4]
+#define tUseTemporaryLyrics data[5]
+
+static void StartBardSong(bool8 useTemporaryLyrics)
+{
+ u8 taskId = CreateTask(Task_BardSong, 0x50);
+
+ gTasks[taskId].tUseTemporaryLyrics = useTemporaryLyrics;
+}
+
+static void BardSing(struct Task *task, struct BardSong *song)
+{
+ switch (task->tState)
+ {
+ case 0: // Initialize song
+ {
+ struct MauvilleManBard *bard = &gSaveBlock1.mauvilleMan.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];
+
+ // Clear phonemes
+ for (i = 0; i < 6; i++)
+ {
+ song->phonemes[i].sound = 0xFFFF;
+ song->phonemes[i].length = 0;
+ song->phonemes[i].pitch = 0;
+ song->phonemes[i].volume = 0;
+ }
+ song->currWord = 0;
+ song->currPhoneme = 0;
+ song->var04 = 0;
+ }
+ break;
+ case 1: // Wait for BGM to end
+ break;
+ case 2: // Initialize word
+ {
+ u16 word = song->lyrics[song->currWord];
+ const struct BardSound *sounds = GetWordSounds(EC_GROUP(word), EC_INDEX(word));
+
+ song->var04 = 0;
+ GetWordPhonemes(song, sounds, MACRO1(word));
+ }
+ break;
+ case 3:
+ case 4:
+ {
+ struct BardPhoneme *phoneme = &song->phonemes[song->currPhoneme];
+
+ switch (song->state)
+ {
+ case 0:
+ if (song->phonemeTimer == 0) // Timer has expired. Move to next phoneme
+ {
+ if (song->currPhoneme == 6 || phoneme->sound == 0xFF)
+ {
+ song->state = 0xFE;
+ break;
+ }
+ song->phonemeTimer = phoneme->length;
+ if (phoneme->sound <= 50)
+ {
+ u16 num = phoneme->sound / 3;
+
+ m4aSongNumStart(249 + num * 3);
+ }
+ song->state = 1;
+ }
+ else
+ {
+ if (song->voiceInflection > 10)
+ song->volume -= 2;
+ if (song->voiceInflection & 1)
+ song->pitch += 64;
+ else
+ song->pitch -= 64;
+ m4aMPlayVolumeControl(&gMPlay_SE2, 0xFFFF, song->volume);
+ m4aMPlayPitchControl(&gMPlay_SE2, 0xFFFF, song->pitch);
+ song->voiceInflection++;
+ }
+ song->phonemeTimer--;
+ break;
+ case 1:
+ song->currPhoneme++;
+ song->state = 0;
+ if (phoneme->sound <= 50)
+ {
+ song->volume = 0x100 + phoneme->volume * 16;
+ m4aMPlayVolumeControl(&gMPlay_SE2, 0xFFFF, song->volume);
+ song->pitch = 0x200 + phoneme->pitch;
+ m4aMPlayPitchControl(&gMPlay_SE2, 0xFFFF, song->pitch);
+ }
+ break;
+ case 0xFE:
+ m4aMPlayStop(&gMPlay_SE2);
+ song->state = 0xFF;
+ break;
+ }
+ }
+ break;
+ case 5:
+ break;
+ }
+}
+
+static void Task_BardSong(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId]; // r5
+
+ BardSing(task, &gUnknown_03005DA0);
+ switch (task->tState)
+ {
+ case 0: // Initialize song
+ PrepareSongText();
+ InitWindowFromConfig(gMenuWindowPtr, &gWindowConfig_81E6CE4);
+ sub_8002EB0(gMenuWindowPtr, gStringVar4, 2, 4, 15);
+ 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 = &gSaveBlock1.mauvilleMan.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)
+ gUnknown_020388BC = MACRO1(bard->songLyrics[task->tCurrWord]);
+ else
+ gUnknown_020388BC = MACRO1(bard->temporaryLyrics[task->tCurrWord]);
+ temp = gUnknown_03005DA0.var04 / wordLen;
+ zero = 0;
+ gUnknown_03005DA0.var04 = temp;
+ if (gUnknown_03005DA0.var04 <= 0)
+ gUnknown_03005DA0.var04 = 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)
+ {
+ FadeInNewBGM(BGM_POKECEN, 6);
+ m4aMPlayFadeOutTemporarily(&gMPlay_SE2, 2);
+ EnableBothScriptContexts();
+ DestroyTask(taskId);
+ }
+ else if (gStringVar4[task->tCharIndex] == CHAR_SPACE)
+ {
+ sub_8003418(gMenuWindowPtr);
+ 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_8003418(gMenuWindowPtr);
+ task->tCharIndex++;
+ task->data[2] = 0;
+ }
+ else
+ {
+ switch (task->data[1])
+ {
+ case 0:
+ sub_8003418(gMenuWindowPtr);
+ task->data[1]++;
+ break;
+ case 1:
+ task->data[1]++;
+ break;
+ case 2:
+ task->tCharIndex++;
+ task->data[1] = 0;
+ task->data[2] = gUnknown_03005DA0.var04;
+ task->tState = 4;
+ break;
+ }
+ }
+ break;
+ case 4:
+ task->data[2]--;
+ if (task->data[2] == 0)
+ task->tState = 3;
+ break;
+ }
+}
+
+void sub_80F83D0(void)
+{
+ VarSet(0x4010, 0x45 + GetCurrentMauvilleOldMan());
+}
+
+struct Story
+{
+ u8 stat;
+ u8 minVal;
+ const u8 *title;
+ const u8 *action;
+ const u8 *fullText;
+};
+
+static const struct Story sStorytellerStories[] =
+{
+ {0x32, 1, gTextStoryteller_Story1Title, gTextStoryteller_Story1Action, gTextStoryteller_Story1Text},
+ {0x02, 1, gTextStoryteller_Story2Title, gTextStoryteller_Story2Action, gTextStoryteller_Story2Text},
+ {0x03, 1, gTextStoryteller_Story3Title, gTextStoryteller_Story3Action, gTextStoryteller_Story3Text},
+ {0x04, 1, gTextStoryteller_Story4Title, gTextStoryteller_Story4Action, gTextStoryteller_Story4Text},
+ {0x06, 1, gTextStoryteller_Story5Title, gTextStoryteller_Story5Action, gTextStoryteller_Story5Text},
+ {0x09, 1, gTextStoryteller_Story6Title, gTextStoryteller_Story6Action, gTextStoryteller_Story6Text},
+ {0x0B, 1, gTextStoryteller_Story7Title, gTextStoryteller_Story7Action, gTextStoryteller_Story7Text},
+ {0x0C, 1, gTextStoryteller_Story8Title, gTextStoryteller_Story8Action, gTextStoryteller_Story8Text},
+ {0x0D, 1, gTextStoryteller_Story9Title, gTextStoryteller_Story9Action, gTextStoryteller_Story9Text},
+ {0x0E, 1, gTextStoryteller_Story10Title, gTextStoryteller_Story10Action, gTextStoryteller_Story10Text},
+ {0x0F, 1, gTextStoryteller_Story11Title, gTextStoryteller_Story11Action, gTextStoryteller_Story11Text},
+ {0x10, 1, gTextStoryteller_Story12Title, gTextStoryteller_Story12Action, gTextStoryteller_Story12Text},
+ {0x11, 1, gTextStoryteller_Story13Title, gTextStoryteller_Story13Action, gTextStoryteller_Story13Text},
+ {0x12, 1, gTextStoryteller_Story14Title, gTextStoryteller_Story14Action, gTextStoryteller_Story14Text},
+ {0x13, 1, gTextStoryteller_Story15Title, gTextStoryteller_Story15Action, gTextStoryteller_Story15Text},
+ {0x14, 1, gTextStoryteller_Story16Title, gTextStoryteller_Story16Action, gTextStoryteller_Story16Text},
+ {0x1A, 1, gTextStoryteller_Story17Title, gTextStoryteller_Story17Action, gTextStoryteller_Story17Text},
+ {0x1B, 1, gTextStoryteller_Story18Title, gTextStoryteller_Story18Action, gTextStoryteller_Story18Text},
+ {0x1C, 1, gTextStoryteller_Story19Title, gTextStoryteller_Story19Action, gTextStoryteller_Story19Text},
+ {0x1D, 2, gTextStoryteller_Story20Title, gTextStoryteller_Story20Action, gTextStoryteller_Story20Text},
+ {0x1E, 1, gTextStoryteller_Story21Title, gTextStoryteller_Story21Action, gTextStoryteller_Story21Text},
+ {0x21, 1, gTextStoryteller_Story22Title, gTextStoryteller_Story22Action, gTextStoryteller_Story22Text},
+ {0x24, 1, gTextStoryteller_Story23Title, gTextStoryteller_Story23Action, gTextStoryteller_Story23Text},
+ {0x25, 1, gTextStoryteller_Story24Title, gTextStoryteller_Story24Action, gTextStoryteller_Story24Text},
+ {0x26, 1, gTextStoryteller_Story25Title, gTextStoryteller_Story25Action, gTextStoryteller_Story25Text},
+ {0x27, 1, gTextStoryteller_Story26Title, gTextStoryteller_Story26Action, gTextStoryteller_Story26Text},
+ {0x28, 1, gTextStoryteller_Story27Title, gTextStoryteller_Story27Action, gTextStoryteller_Story27Text},
+ {0x29, 1, gTextStoryteller_Story28Title, gTextStoryteller_Story28Action, gTextStoryteller_Story28Text},
+ {0x2A, 1, gTextStoryteller_Story29Title, gTextStoryteller_Story29Action, gTextStoryteller_Story29Text},
+ {0x2B, 1, gTextStoryteller_Story30Title, gTextStoryteller_Story30Action, gTextStoryteller_Story30Text},
+ {0x2C, 1, gTextStoryteller_Story31Title, gTextStoryteller_Story31Action, gTextStoryteller_Story31Text},
+ {0x2D, 1, gTextStoryteller_Story32Title, gTextStoryteller_Story32Action, gTextStoryteller_Story32Text},
+ {0x2E, 1, gTextStoryteller_Story33Title, gTextStoryteller_Story33Action, gTextStoryteller_Story33Text},
+ {0x2F, 1, gTextStoryteller_Story34Title, gTextStoryteller_Story34Action, gTextStoryteller_Story34Text},
+ {0x30, 1, gTextStoryteller_Story35Title, gTextStoryteller_Story35Action, gTextStoryteller_Story35Text},
+ {0x31, 1, gTextStoryteller_Story36Title, gTextStoryteller_Story36Action, gTextStoryteller_Story36Text},
+};
+
+static void StorytellerSetup(void)
+{
+ struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller;
+ s32 i;
+
+ storyteller->id = MAUVILLE_MAN_STORYTELLER;
+ storyteller->alreadyRecorded = FALSE;
+ for (i = 0; i < 4; i++)
+ {
+ storyteller->gameStatIDs[i] = 0;
+ storyteller->trainerNames[0][i] = EOS; // Maybe they meant storyteller->trainerNames[i][0] instead?
+ }
+}
+
+static void sub_80F8428(void)
+{
+ struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller;
+
+ storyteller->id = MAUVILLE_MAN_STORYTELLER;
+ storyteller->alreadyRecorded = FALSE;
+}
+
+static u32 StorytellerGetGameStat(u8 stat)
+{
+ if (stat == NUM_GAME_STATS)
+ 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++)
+ {
+ struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller;
+
+ if (storyteller->gameStatIDs[i] == 0)
+ break;
+ }
+ return i;
+}
+
+static u32 StorytellerGetRecordedTrainerStat(u32 trainer)
+{
+ u8 *ptr = gSaveBlock1.mauvilleMan.storyteller.statValues[trainer];
+
+ return ptr[0] | (ptr[1] << 8) | (ptr[2] << 16) | (ptr[3] << 24);
+}
+
+static void StorytellerSetRecordedTrainerStat(u32 trainer, u32 val)
+{
+ u8 *ptr = gSaveBlock1.mauvilleMan.storyteller.statValues[trainer];
+
+ ptr[0] = val;
+ ptr[1] = val >> 8;
+ ptr[2] = val >> 16;
+ ptr[3] = val >> 24;
+}
+
+static bool32 HasTrainerStatIncreased(u32 trainer)
+{
+ struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller;
+
+ if (StorytellerGetGameStat(storyteller->gameStatIDs[trainer]) > StorytellerGetRecordedTrainerStat(trainer))
+ return TRUE;
+ else
+ return FALSE;
+}
+
+static void GetStoryByStattellerPlayerName(u32 player, void *dst)
+{
+ u8 *name = gSaveBlock1.mauvilleMan.storyteller.trainerNames[player];
+
+ memset(dst, EOS, 8);
+ memcpy(dst, name, 7);
+}
+
+static void StorytellerSetPlayerName(u32 player, const u8 *src)
+{
+ u8 *name = gSaveBlock1.mauvilleMan.storyteller.trainerNames[player];
+ u8 len = StringLength(src);
+
+ memset(name, EOS, 7);
+ StringCopyN(name, src, len);
+}
+
+static void StorytellerRecordNewStat(u32 player, u32 stat)
+{
+ struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller;
+
+ storyteller->gameStatIDs[player] = stat;
+ StorytellerSetPlayerName(player, gSaveBlock2.playerName);
+ StorytellerSetRecordedTrainerStat(player, StorytellerGetGameStat(stat));
+ ConvertIntToDecimalStringN(gStringVar1, StorytellerGetGameStat(stat), 0, 10);
+ StringCopy(gStringVar2, GetStoryActionByStat(stat));
+}
+
+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;
+ }
+}
+
+// What purpose does this struct even serve? Only the length field is used.
+static const struct {u32 length; struct MauvilleManStoryteller *unused1; u32 unused2;} sStorytellerStuff =
+{
+ 36,
+ &gSaveBlock1.mauvilleMan.storyteller, // unused
+ 12, // unused
+};
+
+static bool8 StorytellerInitializeRandomStat(void)
+{
+ u8 arr[sStorytellerStuff.length];
+ s32 i;
+ s32 j;
+
+ ScrambleStatList(arr, 36);
+ for (i = 0; i < 36; i++)
+ {
+ u8 stat = sStorytellerStories[arr[i]].stat;
+ u8 minVal = sStorytellerStories[arr[i]].minVal;
+ struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller;
+
+ for (j = 0; j < 4; j++)
+ {
+ if (gSaveBlock1.mauvilleMan.storyteller.gameStatIDs[j] == stat)
+ break;
+ }
+ if (j == 4 && StorytellerGetGameStat(stat) >= minVal)
+ {
+ storyteller->alreadyRecorded = TRUE;
+ StorytellerRecordNewStat(GetFreeStorySlot(), stat);
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+static void StorytellerDisplayStory(u32 player)
+{
+ struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller;
+ u8 stat = storyteller->gameStatIDs[player];
+
+ ConvertIntToDecimalStringN(gStringVar1, StorytellerGetRecordedTrainerStat(player), 0, 10);
+ StringCopy(gStringVar2, GetStoryActionByStat(stat));
+ GetStoryByStattellerPlayerName(player, gStringVar3);
+ ShowFieldMessage(GetStoryTextByStat(stat));
+}
+
+static void PrintStoryList(void)
+{
+ s32 i;
+
+ MenuDrawTextWindow(0, 0, 25, 4 + GetFreeStorySlot() * 2);
+ for (i = 0; i < 4; i++)
+ {
+ struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller;
+ u8 stat = storyteller->gameStatIDs[i];
+
+ if (stat == 0)
+ break;
+ MenuPrint(GetStoryTitleByStat(stat), 1, 2 + i * 2);
+ }
+ MenuPrint(gPCText_Cancel, 1, 2 + i * 2);
+}
+
+static u8 gUnknown_03000748;
+
+static void Task_StoryListMenu(u8 taskId)
+{
+ struct Task *task = &gTasks[taskId];
+ s32 selection;
+
+ switch (task->data[0])
+ {
+ case 0:
+ PrintStoryList();
+ InitMenu(0, 1, 2, GetFreeStorySlot() + 1, 0, 24);
+ task->data[0]++;
+ break;
+ case 1:
+ selection = ProcessMenuInput();
+ if (selection == -2)
+ break;
+ if (selection == -1 || selection == GetFreeStorySlot())
+ {
+ gScriptResult = 0;
+ }
+ else
+ {
+ gScriptResult = 1;
+ gUnknown_03000748 = selection;
+ }
+ HandleDestroyMenuCursors();
+ MenuZeroFillWindowRect(0, 0, 25, 12);
+ DestroyTask(taskId);
+ EnableBothScriptContexts();
+ break;
+ }
+}
+
+// Sets gScriptResult to TRUE if player selected a story
+void ScrSpecial_StorytellerStoryListMenu(void)
+{
+ CreateTask(Task_StoryListMenu, 0x50);
+}
+
+void ScrSpecial_StorytellerDisplayStory(void)
+{
+ StorytellerDisplayStory(gUnknown_03000748);
+}
+
+u8 ScrSpecial_StorytellerGetFreeStorySlot(void)
+{
+ return GetFreeStorySlot();
+}
+
+// Returns TRUE if stat has increased
+bool8 ScrSpecial_StorytellerUpdateStat(void)
+{
+ struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller;
+ u8 r4 = storyteller->gameStatIDs[gUnknown_03000748];
+
+ if (HasTrainerStatIncreased(gUnknown_03000748) == TRUE)
+ {
+ StorytellerRecordNewStat(gUnknown_03000748, r4);
+ return TRUE;
+ }
+ return FALSE;
+}
+
+bool8 ScrSpecial_HasStorytellerAlreadyRecorded(void)
+{
+ struct MauvilleManStoryteller *storyteller = &gSaveBlock1.mauvilleMan.storyteller;
+
+ if (storyteller->alreadyRecorded == FALSE)
+ return FALSE;
+ else
+ return TRUE;
+}
+
+bool8 ScrSpecial_StorytellerInitializeRandomStat(void)
+{
+ return StorytellerInitializeRandomStat();
+}
diff --git a/src/mauville_old_man.c b/src/mauville_old_man.c
deleted file mode 100644
index 93684fc60..000000000
--- a/src/mauville_old_man.c
+++ /dev/null
@@ -1,247 +0,0 @@
-#include "global.h"
-#include "mauville_old_man.h"
-#include "easy_chat.h"
-#include "menu.h"
-#include "rng.h"
-#include "script.h"
-#include "string_util.h"
-#include "strings.h"
-#include "trader.h"
-
-extern u16 gScriptResult;
-extern u16 gSpecialVar_0x8004;
-
-extern u32 gUnknown_083E5388[];
-extern u32 gUnknown_083E53A8[];
-
-extern u16 gUnknown_083E537C[];
-
-void sub_80F7A34(void)
-{
- u16 i;
- OldMan *oldMan = &gSaveBlock1.oldMan;
-
- oldMan->oldMan1.unk_2D94 = 0;
- oldMan->oldMan1.unk_2DBD = 0;
-
- for(i = 0; i < 6; i++)
- oldMan->oldMan1.mauvilleOldMan_ecArray[i] = gUnknown_083E537C[i];
-}
-
-void sub_80F7A6C(void)
-{
- struct UnkMauvilleOldManStruct *bard = &gSaveBlock1.oldMan.oldMan1;
-
- bard->unk_2D94 = 1;
- bard->unk_2D95 = 0;
-}
-
-void sub_80F7A7C(void)
-{
- sub_80F83F8();
-}
-
-void sub_80F7A88(void)
-{
- OldMan *oldMan = &gSaveBlock1.oldMan;
-
- oldMan->oldMan1.unk_2D94 = 4;
- oldMan->oldMan1.unk_2D95 = 0;
-}
-
-void sub_80F7A98(void)
-{
- sub_81099CC();
-}
-
-void SetMauvilleOldMan(void)
-{
- u32 var = ((u16)((gSaveBlock2.playerTrainerId[1] << 8 | gSaveBlock2.playerTrainerId[0])) % 10) / 2;
-
- switch(var)
- {
- case 0:
- sub_80F7A34();
- break;
- case 1:
- sub_80F7A6C();
- break;
- case 2:
- sub_80F7A98();
- break;
- case 3:
- sub_80F7A7C();
- break;
- case 4:
- sub_80F7A88();
- break;
- }
- sub_80F83D0();
-}
-
-u8 GetCurrentMauvilleOldMan(void)
-{
- OldMan *oldMan = &gSaveBlock1.oldMan;
-
- return oldMan->oldMan1.unk_2D94;
-}
-
-void sub_80F7B14(void)
-{
- gScriptResult = GetCurrentMauvilleOldMan();
-}
-
-void sub_80F7B2C(void)
-{
- u16 *scriptPtr = &gScriptResult; // why??
- OldMan *oldMan = &gSaveBlock1.oldMan;
-
- *scriptPtr = oldMan->oldMan1.unk_2DBD;
-}
-
-void sub_80F7B40(void)
-{
- u16 i;
- OldMan *oldMan = &gSaveBlock1.oldMan;
- //struct UnkMauvilleOldManStruct *oldManStruct = &gSaveBlock1.oldManStruct;
-
- StringCopy(oldMan->oldMan1.playerName, gSaveBlock2.playerName);
-
- for(i = 0; i < 4; i++)
- oldMan->oldMan1.playerTrainerId[i] = gSaveBlock2.playerTrainerId[i];
-
- for(i = 0; i < 6; i++)
- oldMan->oldMan1.mauvilleOldMan_ecArray[i] = oldMan->oldMan1.mauvilleOldMan_ecArray2[i];
-
- oldMan->oldMan1.unk_2DBD = 1;
-}
-
-void sub_80F7BA0(void)
-{
- struct UnkMauvilleOldManStruct *oldMan = &gSaveBlock1.oldMan.oldMan1;
- u16 specialVar = gSpecialVar_0x8004; // It's a bit odd to use this temp variable, but it seems needed to match.
- u16 *r5;
- u16 i;
- u8 *ptr;
- u8 *r4;
-
- r5 = oldMan->mauvilleOldMan_ecArray2;
- if (specialVar == 0)
- r5 = oldMan->mauvilleOldMan_ecArray;
- ptr = gStringVar4;
- r4 = ptr;
- for (i = 0; i < 2; i++)
- {
- ptr = sub_80EB3FC(ptr, *(r5++));
- while (ptr != r4)
- {
- if (*r4 == 0)
- *r4 = 0x37;
- r4++;
- }
- r4++;
- *(ptr++) = 0;
- ptr = sub_80EB3FC(ptr, *(r5++));
- while (ptr != r4)
- {
- if (*r4 == 0)
- *r4 = 0x37;
- r4++;
- }
- r4++;
- *(ptr++) = 0xFE;
- ptr = sub_80EB3FC(ptr, *(r5++));
- while (ptr != r4)
- {
- if (*r4 == 0)
- *r4 = 0x37;
- r4++;
- }
- //_080F7C2A
- if (i == 0)
- {
- *(ptr++) = EXT_CTRL_CODE_BEGIN;
- *(ptr++) = 0xF;
- }
- }
-}
-
-void sub_80F7C54(void)
-{
- sub_80F7F80(gSpecialVar_0x8004);
- MenuDisplayMessageBox();
- ScriptContext1_Stop();
-}
-
-void sub_80F7C70(void)
-{
- u16 *scriptPtr = &gScriptResult; // again??
- OldMan *oldMan = &gSaveBlock1.oldMan;
-
- *scriptPtr = oldMan->oldMan1.unk_2D95;
-}
-
-void sub_80F7C84(void)
-{
- OldMan *oldMan = &gSaveBlock1.oldMan;
-
- oldMan->oldMan1.unk_2D95 = 1;
-}
-
-void sub_80F7C90(void)
-{
- u16 var = sub_80EB8EC();
-
- if(var == 0xFFFF)
- {
- gScriptResult = FALSE;
- }
- else
- {
- sub_80EB3FC(gStringVar1, var);
- gScriptResult = TRUE;
- }
-}
-
-void sub_80F7CC8(void)
-{
- OldMan *oldMan = &gSaveBlock1.oldMan;
-
- if(oldMan->oldMan1.unk_2D95 == 10)
- {
- gScriptResult = FALSE;
- oldMan->oldMan1.unk_2D95 = 0;
- }
- else
- gScriptResult = TRUE;
-}
-
-void sub_80F7CF4(void)
-{
- struct UnkMauvilleOldManStruct2 *oldMan = &gSaveBlock1.oldMan.oldMan2;
-
- if(oldMan->unk1 == 0)
- sub_80F7DC0();
-
- if(oldMan->mauvilleOldMan_ecArray[oldMan->unk1] != 0xFFFF) // is not the last element of the array?
- {
- u8 *stringPtr;
- u32 random = Random();
-
- random %= 8;
- stringPtr = sub_80EB3FC(gStringVar4, oldMan->mauvilleOldMan_ecArray[oldMan->unk1]);
- stringPtr = StringCopy(stringPtr, gOtherText_Is);
- stringPtr = StringCopy(stringPtr, (u8 *)gUnknown_083E5388[random]);
- StringCopy(stringPtr, gOtherText_DontYouAgree);
- }
- else
- {
- StringCopy(gStringVar4, (u8 *)gUnknown_083E53A8[oldMan->mauvilleOldMan_ecArray2[oldMan->unk2++]]);
- }
- if(!(Random() % 10))
- oldMan->unk1 = 10;
- else
- oldMan->unk1++;
-
- gScriptResult = TRUE;
-}
diff --git a/src/menu.c b/src/menu.c
index ef458124b..a9c4aaa43 100644
--- a/src/menu.c
+++ b/src/menu.c
@@ -154,9 +154,9 @@ void MenuPrint(const u8 *str, u8 left, u8 top)
sub_8003460(gMenuWindowPtr, str, gMenuTextTileOffset, left, top);
}
-void MenuZeroFillWindowRect(u8 a1, u8 a2, u8 a3, u8 a4)
+void MenuZeroFillWindowRect(u8 left, u8 top, u8 right, u8 bottom)
{
- ZeroFillWindowRect(gMenuWindowPtr, a1, a2, a3, a4);
+ ZeroFillWindowRect(gMenuWindowPtr, left, top, right, bottom);
}
void MenuFillWindowRectWithBlankTile(u8 left, u8 top, u8 right, u8 bottom)
@@ -205,7 +205,7 @@ void MenuPrintMessage(const u8 *str, u8 left, u8 top)
sub_8002EB0(gMenuWindowPtr, str, gMenuTextTileOffset, left, top);
}
-void sub_8072044(const u8 *str)
+void MenuPrintMessageDefaultCoords(const u8 *str)
{
sub_8002EB0(gMenuWindowPtr, str, gMenuTextTileOffset, 2, 15);
}
@@ -571,7 +571,7 @@ void PrintMenuItems(u8 left, u8 top, u8 menuItemCount, const struct MenuAction m
MenuPrint(menuItems[i].text, left, top + 2 * i);
}
-void PrintMenuItemsReordered(u8 left, u8 top, u8 menuItemCount, const struct MenuAction menuItems[], const u8 *order)
+void PrintMenuItemsReordered(u8 left, u8 top, u8 menuItemCount, const struct MenuAction2 menuItems[], const u8 *order)
{
u8 i;
@@ -630,82 +630,82 @@ __attribute__((naked))
int sub_8072AB0(const u8 *str, u8 left, u16 top, u8 width, u8 height, u32 a6)
{
asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- sub sp, 0x10\n\
- mov r12, r0\n\
- ldr r0, [sp, 0x24]\n\
- ldr r4, [sp, 0x28]\n\
- str r4, [sp, 0xC]\n\
- lsls r1, 24\n\
- lsrs r5, r1, 24\n\
- lsls r2, 16\n\
- lsrs r4, r2, 16\n\
- lsls r3, 24\n\
- lsrs r6, r3, 24\n\
- lsls r0, 24\n\
- lsrs r7, r0, 24\n\
- ldr r0, _08072AF8 @ =gMenuWindowPtr\n\
- ldr r0, [r0]\n\
- ldr r1, _08072AFC @ =gMenuTextTileOffset\n\
- ldrh r3, [r1]\n\
- str r5, [sp]\n\
- str r4, [sp, 0x4]\n\
- str r6, [sp, 0x8]\n\
- movs r1, 0\n\
- mov r2, r12\n\
- bl sub_8004FD0\n\
- adds r1, r0, 0\n\
- lsls r1, 24\n\
- lsrs r2, r1, 24\n\
- movs r3, 0x7\n\
- ands r3, r5\n\
- cmp r3, 0\n\
- bne _08072B00\n\
- adds r1, r6, 0x7\n\
- asrs r1, 3\n\
- subs r1, 0x1\n\
- b _08072B0C\n\
- .align 2, 0\n\
+ push {r4-r7,lr}\n\
+ sub sp, 0x10\n\
+ mov r12, r0\n\
+ ldr r0, [sp, 0x24]\n\
+ ldr r4, [sp, 0x28]\n\
+ str r4, [sp, 0xC]\n\
+ lsls r1, 24\n\
+ lsrs r5, r1, 24\n\
+ lsls r2, 16\n\
+ lsrs r4, r2, 16\n\
+ lsls r3, 24\n\
+ lsrs r6, r3, 24\n\
+ lsls r0, 24\n\
+ lsrs r7, r0, 24\n\
+ ldr r0, _08072AF8 @ =gMenuWindowPtr\n\
+ ldr r0, [r0]\n\
+ ldr r1, _08072AFC @ =gMenuTextTileOffset\n\
+ ldrh r3, [r1]\n\
+ str r5, [sp]\n\
+ str r4, [sp, 0x4]\n\
+ str r6, [sp, 0x8]\n\
+ movs r1, 0\n\
+ mov r2, r12\n\
+ bl sub_8004FD0\n\
+ adds r1, r0, 0\n\
+ lsls r1, 24\n\
+ lsrs r2, r1, 24\n\
+ movs r3, 0x7\n\
+ ands r3, r5\n\
+ cmp r3, 0\n\
+ bne _08072B00\n\
+ adds r1, r6, 0x7\n\
+ asrs r1, 3\n\
+ subs r1, 0x1\n\
+ b _08072B0C\n\
+ .align 2, 0\n\
_08072AF8: .4byte gMenuWindowPtr\n\
_08072AFC: .4byte gMenuTextTileOffset\n\
_08072B00:\n\
- adds r3, r6, r3\n\
- subs r1, r3, 0x1\n\
- cmp r1, 0\n\
- bge _08072B0A\n\
- adds r1, r3, 0x6\n\
+ adds r3, r6, r3\n\
+ subs r1, r3, 0x1\n\
+ cmp r1, 0\n\
+ bge _08072B0A\n\
+ adds r1, r3, 0x6\n\
_08072B0A:\n\
- asrs r1, 3\n\
+ asrs r1, 3\n\
_08072B0C:\n\
- lsls r1, 24\n\
- lsrs r1, 24\n\
- adds r6, r1, 0\n\
- lsrs r5, 3\n\
- adds r1, r7, 0x7\n\
- asrs r1, 3\n\
- lsls r1, 24\n\
- lsrs r7, r1, 24\n\
- lsrs r4, 3\n\
- cmp r2, r7\n\
- bcs _08072B3E\n\
- lsls r1, r2, 1\n\
- adds r1, r4, r1\n\
- lsls r1, 24\n\
- lsrs r1, 24\n\
- adds r2, r5, r6\n\
- lsls r2, 24\n\
- lsrs r2, 24\n\
- adds r3, r7, r4\n\
- subs r3, 0x1\n\
- lsls r3, 24\n\
- lsrs r3, 24\n\
- adds r0, r5, 0\n\
- bl MenuFillWindowRectWithBlankTile\n\
+ lsls r1, 24\n\
+ lsrs r1, 24\n\
+ adds r6, r1, 0\n\
+ lsrs r5, 3\n\
+ adds r1, r7, 0x7\n\
+ asrs r1, 3\n\
+ lsls r1, 24\n\
+ lsrs r7, r1, 24\n\
+ lsrs r4, 3\n\
+ cmp r2, r7\n\
+ bcs _08072B3E\n\
+ lsls r1, r2, 1\n\
+ adds r1, r4, r1\n\
+ lsls r1, 24\n\
+ lsrs r1, 24\n\
+ adds r2, r5, r6\n\
+ lsls r2, 24\n\
+ lsrs r2, 24\n\
+ adds r3, r7, r4\n\
+ subs r3, 0x1\n\
+ lsls r3, 24\n\
+ lsrs r3, 24\n\
+ adds r0, r5, 0\n\
+ bl MenuFillWindowRectWithBlankTile\n\
_08072B3E:\n\
- add sp, 0x10\n\
- pop {r4-r7}\n\
- pop {r1}\n\
- bx r1\n\
+ add sp, 0x10\n\
+ pop {r4-r7}\n\
+ pop {r1}\n\
+ bx r1\n\
.syntax divided\n");
}
#endif
diff --git a/src/menu_cursor.c b/src/menu_cursor.c
index 64ab36573..d43be2a2f 100644
--- a/src/menu_cursor.c
+++ b/src/menu_cursor.c
@@ -186,73 +186,67 @@ void sub_814A904(void)
return;
}
+#if ENGLISH
#ifdef NONMATCHING
// Fix pls
-void sub_814A958(u8 a1)
+void sub_814A958(u8 a)
{
- struct Subsprite *cursub;
- u8 v2; // r7@1
- s16 v3; // r2@1
- s32 v5; // r0@1
- s32 v6; // r3@1
- s32 v7; // r5@3
- int v8; // r7@9
- s16 negone;
-
- cursub = &gMenuCursorSubsprites[0];
- negone = -1;
- cursub = (struct Subsprite){0,2};
- cursub->x = negone;
- cursub++;
-
- v2 = 1;
- v3 = 1;
- v5 = (a1 - 1) << 0x10;
- v6 = v5 >> 0x10;
- if ((v5 >> 0x10) > 7)
+ u8 r7;
+ struct Subsprite *r4 = &gMenuCursorSubsprites[0];
+ s16 r2 = -1;
+ s32 _a = a;
+ s16 r5;
+ s16 i;
+
+ *r4 = (struct Subsprite){.x = 0, .y = 0, .shape = 2, .size = 0, .tileOffset = 0, .priority = 0};
+ r4->x = r2;
+ r4++;
+ r7 = 1;
+ r2 = 1;
+ r5 = a;
+ i = r5;
+ while ((i -= r2) >= 8)
{
- do
+ if (i > 0x1F)
{
- if (v6 > 0x1F)
+ *r4 = gUnknown_0842F780;
+ r4->x = r2;
+ r2 += 32;
+ r5 = a;
+ }
+ //_0814A9D4
+ else
+ {
+ r5 = a;
+ if (_a > 0x27 && i > 8)
{
- *cursub = gUnknown_0842F780;
- cursub->x = v3;
- v3 = ((v3 << 16) + 0x200000) >> 16;
- v7 = a1 << 16;
+ *r4 = gUnknown_0842F780;
+ r4->x = (r2 - 32) + (i & ~7);
+ r2 += i & 0x18;
}
+ //_0814AA0A
else
{
- v7 = a1 << 16;
- if (a1 <= 0x27 || v6 <= 0x8)
- {
- *cursub = gUnknown_0842F788;
- cursub->x = v3;
- v3 = ((v3 << 16) + 0x80000) >> 16;
- }
- else
- {
- *cursub = gUnknown_0842F780;
- cursub->x = v3 - 0x20 + (v6 & 0xFFF8);
- v3 = (v3 + (v6 & 0x18)) & negone;
- }
+ *r4 = gUnknown_0842F788;
+ r4->x = r2;
+ r2 += 8;
}
-
- cursub++;
- v2 = v2 + 1;
- v6 = ((v7 >> 16) - v3) & 0xFFFF;
}
- while (v7 - v3 > 7);
+ //_0814AA20
+ r4++;
+ r7++;
+ i = r5;
}
- *cursub = gUnknown_0842F790;
- cursub->x = v6 + v3 - 7;
- v8 = v2 + 1;
- if (gUnknown_0203A3D0 != 0x40)
- SetSubspriteTables(&gSprites[gUnknown_0203A3D0], &gSubspriteTables_842F5C0[v8]);
- if (gUnknown_0203A3D1 != 0x40)
- SetSubspriteTables(&gSprites[gUnknown_0203A3D1], &gSubspriteTables_842F5C0[v8]);
- return;
+ //_0814AA3A
+ *r4 = gUnknown_0842F790;
+ r4->x = r2 - 7 + i;
+ r7++;
+ if (gUnknown_0203A3D0 != 64)
+ SetSubspriteTables(&gSprites[gUnknown_0203A3D0], gSubspriteTables_842F5C0 + r7);
+ if (gUnknown_0203A3D1 != 64)
+ SetSubspriteTables(&gSprites[gUnknown_0203A3D1], gSubspriteTables_842F5C0 + r7);
}
-#elif ENGLISH
+#else
__attribute__((naked))
void sub_814A958(u8 a1)
{
@@ -434,6 +428,7 @@ _0814AAB4: .4byte gSubspriteTables_842F5C0\n\
_0814AAB8: .4byte gUnknown_0203A3D1\n\
.syntax divided\n");
}
+#endif
#elif GERMAN
__attribute__((naked))
void sub_814A958(u8 a1)
diff --git a/src/menu_helpers.c b/src/menu_helpers.c
index 9915d67ac..14e823355 100644
--- a/src/menu_helpers.c
+++ b/src/menu_helpers.c
@@ -7,7 +7,7 @@
#include "map_constants.h"
#include "menu.h"
#include "menu_helpers.h"
-#include "rom4.h"
+#include "overworld.h"
#include "songs.h"
#include "sound.h"
#include "sprite.h"
@@ -140,7 +140,7 @@ static void PrintMessage(const u8 *str, u16 tile)
{
sub_80A3FA0(&gBGTilemapBuffers[1][0], 2, 15, 26, 4, tile);
}
- sub_8072044(str);
+ MenuPrintMessageDefaultCoords(str);
}
static void sub_80F9090(u8 taskId)
diff --git a/src/money.c b/src/money.c
index 5d9d0b689..5d0f0ae8d 100644
--- a/src/money.c
+++ b/src/money.c
@@ -25,7 +25,7 @@ bool8 IsEnoughMoney(u32 budget, u32 cost)
return FALSE;
}
-void sub_80B79B8(u32 *arg0, u32 arg1)
+void AddMoney(u32 *arg0, u32 arg1)
{
if (*arg0 > *arg0 + arg1)
{
@@ -40,7 +40,7 @@ void sub_80B79B8(u32 *arg0, u32 arg1)
}
}
-void sub_80B79E0(u32 *arg0, u32 arg1)
+void RemoveMoney(u32 *arg0, u32 arg1)
{
if (*arg0 < arg1)
{
@@ -52,39 +52,25 @@ void sub_80B79E0(u32 *arg0, u32 arg1)
}
}
-void sub_80B79F8(u8 *buffer, u32 arg1, u8 arg2)
+void GetMoneyAmountText(u8 *buffer, u32 amount, u8 arg2)
{
u8 width;
u8 i;
- if (arg1 > 999999)
- {
+ if (amount > 999999)
width = 7;
- }
- else if (arg1 > 99999)
- {
+ else if (amount > 99999)
width = 6;
- }
- else if (arg1 > 10000)
- {
+ else if (amount > 10000)
width = 5;
- }
- else if (arg1 > 999)
- {
+ else if (amount > 999)
width = 4;
- }
- else if (arg1 > 99)
- {
+ else if (amount > 99)
width = 3;
- }
- else if (arg1 > 9)
- {
+ else if (amount > 9)
width = 2;
- }
else
- {
width = 1;
- }
buffer[0] = EXT_CTRL_CODE_BEGIN;
buffer[1] = 0x14;
@@ -100,7 +86,7 @@ void sub_80B79F8(u8 *buffer, u32 arg1, u8 arg2)
buffer[0] = CHAR_CURRENCY;
buffer += 1;
- buffer = ConvertIntToDecimalString(buffer, arg1);
+ buffer = ConvertIntToDecimalString(buffer, amount);
buffer[0] = EXT_CTRL_CODE_BEGIN;
buffer[1] = 0x14;
@@ -108,16 +94,18 @@ void sub_80B79F8(u8 *buffer, u32 arg1, u8 arg2)
buffer[3] = EOS;
}
-void sub_80B7A94(u32 arg0, u8 size, u8 x, u8 y)
+void PrintMoneyAmount(u32 amount, u8 size, u8 x, u8 y)
{
u8 buffer[16];
u8 stringWidth;
- sub_80B79F8(buffer, arg0, size);
+ GetMoneyAmountText(buffer, amount, size);
stringWidth = sub_8072CA4(buffer);
if (stringWidth >= (size + 1) * 8)
+ {
MenuPrint(buffer, x, y);
+ }
else
{
int xPlusOne = x + 1;
@@ -148,7 +136,7 @@ void sub_80B7AEC(u32 arg0, u8 left, u8 top)
}
__attribute__((naked))
-void sub_80B7B34(void)
+void sub_80B7B34(u8 var1, u8 var2, int var3)
{
asm(".syntax unified\n\
push {r4-r7,lr}\n\
@@ -241,15 +229,15 @@ _080B7BE8: .4byte 0x0600f840\n\
.syntax divided\n");
}
-void sub_80B7BEC(u32 arg0, u8 x, u8 y)
+void UpdateMoneyWindow(u32 amount, u8 x, u8 y)
{
- sub_80B7A94(arg0, 6, x + 6, y + 1);
+ PrintMoneyAmount(amount, 6, x + 6, y + 1);
}
-void sub_80B7C14(u32 arg0, u8 x, u8 y)
+void OpenMoneyWindow(u32 amount, u8 x, u8 y)
{
MenuDrawTextWindow(x, y, x + 13, y + 3);
- sub_80B7BEC(arg0, x, y);
+ UpdateMoneyWindow(amount, x, y);
LoadCompressedObjectPic(&gUnknown_083CF584);
LoadCompressedObjectPalette(&gUnknown_083CF58C);
@@ -257,7 +245,7 @@ void sub_80B7C14(u32 arg0, u8 x, u8 y)
gUnknown_02038734 = CreateSprite(&gSpriteTemplate_83CF56C, x * 8 + 19, y * 8 + 11, 0);
}
-void RemoveMoneyLabelObject(u8 x, u8 y)
+void CloseMoneyWindow(u8 x, u8 y)
{
DestroySpriteAndFreeResources(&gSprites[gUnknown_02038734]);
FreeSpritePaletteByTag(SPRITE_TAG_MONEY);
@@ -271,5 +259,5 @@ bool8 sub_80B7CE8(void)
void sub_80B7D0C(void)
{
- sub_80B79E0(&gSaveBlock1.money, gSpecialVar_0x8005);
+ RemoveMoney(&gSaveBlock1.money, gSpecialVar_0x8005);
}
diff --git a/src/mori_debug_menu.c b/src/mori_debug_menu.c
index 273191192..1595ecd2e 100644
--- a/src/mori_debug_menu.c
+++ b/src/mori_debug_menu.c
@@ -52,7 +52,7 @@ u8 MoriDebugMenu_SearchChild(u8 a1, u8 a2, u8 *ptr)
u16 monData;
u16 var;
- monData = GetMonData(gPlayerParty, 11, ptr);
+ monData = GetMonData(gPlayerParty, MON_DATA_SPECIES, ptr);
var = sub_8041870(monData);
StringCopy(localPtr, gSpeciesNames[monData]);
StringAppend(localPtr, gUnknown_0839B24D);
@@ -67,7 +67,7 @@ u8 MoriDebugMenu_SearchChild(u8 a1, u8 a2, u8 *ptr)
s8 MoriDebugMenu_Egg(void)
{
- if ( Daycare_CountPokemon(gSaveBlock1.daycareData) == 2 && daycare_relationship_score_from_savegame() )
+ if ( Daycare_CountPokemon(&gSaveBlock1.daycareData) == 2 && daycare_relationship_score_from_savegame() )
sub_8041940();
CloseMenu();
@@ -76,7 +76,7 @@ s8 MoriDebugMenu_Egg(void)
s8 MoriDebugMenu_MaleEgg(void)
{
- if ( Daycare_CountPokemon(gSaveBlock1.daycareData) == 2 && daycare_relationship_score_from_savegame() )
+ if ( Daycare_CountPokemon(&gSaveBlock1.daycareData) == 2 && daycare_relationship_score_from_savegame() )
sub_8041950();
CloseMenu();
@@ -117,7 +117,7 @@ s8 MoriDebugMenu_BreedEgg(void)
SetMonData(&gPlayerParty[loopCounter], MON_DATA_FRIENDSHIP, &friendship);
}
}
- gSaveBlock1.filler_30B6 = -3;
+ gSaveBlock1.daycareData.misc.countersEtc.unk_11a = -3;
CloseMenu();
return 1;
}
@@ -134,7 +134,7 @@ s8 MoriDebugMenu_PokeblockCase(void)
s32 loopCounter;
for (loopCounter = 0; loopCounter <= 39; loopCounter++)
- sub_810CA6C(loopCounter);
+ PokeblockClearIfExists(loopCounter);
CloseMenu();
return 1;
diff --git a/src/mystery_event_menu.c b/src/mystery_event_menu.c
index 46b76fd88..0e48dc177 100644
--- a/src/mystery_event_menu.c
+++ b/src/mystery_event_menu.c
@@ -94,7 +94,7 @@ static void CB2_MysteryEventMenu(void)
case 1:
if (gPaletteFade.active)
break;
- sub_8072044(gSystemText_LinkStandby);
+ MenuPrintMessageDefaultCoords(gSystemText_LinkStandby);
gMain.state++;
break;
case 2:
@@ -109,7 +109,7 @@ static void CB2_MysteryEventMenu(void)
if ((gLinkStatus & 0x20) && (gLinkStatus & 0x1C) > 4)
{
PlaySE(SE_PIN);
- sub_8072044(gSystemText_LoadEventPressA);
+ MenuPrintMessageDefaultCoords(gSystemText_LoadEventPressA);
gMain.state++;
}
if (gMain.newKeys & B_BUTTON)
@@ -128,7 +128,7 @@ static void CB2_MysteryEventMenu(void)
if (GetLinkPlayerCount_2() != 2)
{
GetEventLoadMessage(gStringVar4, 1);
- sub_8072044(gStringVar4);
+ MenuPrintMessageDefaultCoords(gStringVar4);
gMain.state = 13;
break;
}
@@ -158,13 +158,13 @@ static void CB2_MysteryEventMenu(void)
sub_800832C();
MenuZeroFillWindowRect(6, 5, 23, 8);
GetEventLoadMessage(gStringVar4, 1);
- sub_8072044(gStringVar4);
+ MenuPrintMessageDefaultCoords(gStringVar4);
gMain.state = 13;
break;
}
else if (CheckLanguageMatch())
{
- sub_8072044(gSystemText_DontCutLink);
+ MenuPrintMessageDefaultCoords(gSystemText_DontCutLink);
gMain.state++;
break;
}
@@ -173,7 +173,7 @@ static void CB2_MysteryEventMenu(void)
CloseLink();
MenuZeroFillWindowRect(6, 5, 23, 8);
GetEventLoadMessage(gStringVar4, 1);
- sub_8072044(gStringVar4);
+ MenuPrintMessageDefaultCoords(gStringVar4);
gMain.state = 13;
break;
}
@@ -222,7 +222,7 @@ static void CB2_MysteryEventMenu(void)
sub_800832C();
MenuZeroFillWindowRect(6, 5, 23, 8);
GetEventLoadMessage(gStringVar4, 1);
- sub_8072044(gStringVar4);
+ MenuPrintMessageDefaultCoords(gStringVar4);
ptr = (u8 *)&gMain;
offset1 = offsetof(struct Main, state);
asm("" ::: "r1");
@@ -234,7 +234,7 @@ static void CB2_MysteryEventMenu(void)
register u8 *ptr2 asm("r1");
register int offset3 asm("r0");
register int dummy asm("r2");
- sub_8072044(gSystemText_DontCutLink);
+ MenuPrintMessageDefaultCoords(gSystemText_DontCutLink);
ptr2 = (u8 *)&gMain;
offset3 = offsetof(struct Main, state);
if (dummy)
@@ -249,7 +249,7 @@ static void CB2_MysteryEventMenu(void)
MenuZeroFillWindowRect(6, 5, 23, 8);
label:
GetEventLoadMessage(gStringVar4, 1);
- sub_8072044(gStringVar4);
+ MenuPrintMessageDefaultCoords(gStringVar4);
ptr = (u8 *)&gMain;
offset2 = offsetof(struct Main, state);
ptr += offset2;
@@ -294,7 +294,7 @@ static void CB2_MysteryEventMenu(void)
gMain.state++;
break;
case 12:
- sub_8072044(gStringVar4);
+ MenuPrintMessageDefaultCoords(gStringVar4);
gMain.state++;
break;
case 13:
@@ -329,7 +329,7 @@ static void CB2_MysteryEventMenu(void)
CloseLink();
MenuZeroFillWindowRect(6, 5, 23, 8);
GetEventLoadMessage(gStringVar4, 1);
- sub_8072044(gStringVar4);
+ MenuPrintMessageDefaultCoords(gStringVar4);
gMain.state = 13;
}
}
diff --git a/src/naming_screen.c b/src/naming_screen.c
index 6c107f022..3f8417e6d 100644
--- a/src/naming_screen.c
+++ b/src/naming_screen.c
@@ -1618,7 +1618,7 @@ static void DisplaySentToPCMessage(void)
StringExpandPlaceholders(gStringVar4, gOtherText_SentToPC);
BasicInitMenuWindow(&gWindowConfig_81E6E88);
MenuDisplayMessageBox();
- sub_8072044(gStringVar4);
+ MenuPrintMessageDefaultCoords(gStringVar4);
}
static void sub_80B753C(void)
diff --git a/src/new_game.c b/src/new_game.c
index 226ac9bb7..3f9e9f5a1 100644
--- a/src/new_game.c
+++ b/src/new_game.c
@@ -11,7 +11,7 @@
#include "item_menu.h"
#include "lottery_corner.h"
#include "mail_data.h"
-#include "mauville_old_man.h"
+#include "mauville_man.h"
#include "play_time.h"
#include "player_pc.h"
#include "pokeblock.h"
@@ -20,7 +20,7 @@
#include "pokemon_storage_system.h"
#include "rng.h"
#include "roamer.h"
-#include "rom4.h"
+#include "overworld.h"
#include "rtc.h"
#include "script.h"
#include "secret_base.h"
@@ -157,7 +157,7 @@ void NewGameInitData(void)
ClearPokeblocks();
ClearDecorationInventories();
InitEasyChatPhrases();
- SetMauvilleOldMan();
+ SetupMauvilleOldMan();
InitDewfordTrend();
ResetFanClub();
ResetLotteryCorner();
diff --git a/src/option_menu.c b/src/option_menu.c
index 7f8d76528..dfc49b035 100644
--- a/src/option_menu.c
+++ b/src/option_menu.c
@@ -486,61 +486,61 @@ __attribute__((naked))
static void FrameType_DrawChoices(u8 selection)
{
asm(".syntax unified\n\
- push {r4-r6,lr}\n\
- sub sp, 0x10\n\
- lsls r0, 24\n\
- movs r1, 0x80\n\
- lsls r1, 17\n\
- adds r0, r1\n\
- lsrs r5, r0, 24\n\
- ldr r1, _0808C368 @ =gSystemText_Type\n\
- mov r0, sp\n\
- bl StringCopy\n\
- ldr r1, _0808C36C @ =gSystemText_Terminator\n\
- mov r0, sp\n\
- bl StringAppend\n\
- adds r4, r0, 0\n\
- adds r0, r5, 0\n\
- movs r1, 0xA\n\
- bl __udivsi3\n\
- adds r1, r0, 0\n\
- lsls r0, r1, 24\n\
- lsrs r6, r0, 24\n\
- cmp r6, 0\n\
- beq _0808C370\n\
- adds r0, r1, 0\n\
- adds r0, 0xA1\n\
- strb r0, [r4]\n\
- adds r4, 0x1\n\
- adds r0, r5, 0\n\
- movs r1, 0xA\n\
- bl __umodsi3\n\
- adds r0, 0xA1\n\
- strb r0, [r4]\n\
- b _0808C380\n\
- .align 2, 0\n\
+ push {r4-r6,lr}\n\
+ sub sp, 0x10\n\
+ lsls r0, 24\n\
+ movs r1, 0x80\n\
+ lsls r1, 17\n\
+ adds r0, r1\n\
+ lsrs r5, r0, 24\n\
+ ldr r1, _0808C368 @ =gSystemText_Type\n\
+ mov r0, sp\n\
+ bl StringCopy\n\
+ ldr r1, _0808C36C @ =gSystemText_Terminator\n\
+ mov r0, sp\n\
+ bl StringAppend\n\
+ adds r4, r0, 0\n\
+ adds r0, r5, 0\n\
+ movs r1, 0xA\n\
+ bl __udivsi3\n\
+ adds r1, r0, 0\n\
+ lsls r0, r1, 24\n\
+ lsrs r6, r0, 24\n\
+ cmp r6, 0\n\
+ beq _0808C370\n\
+ adds r0, r1, 0\n\
+ adds r0, 0xA1\n\
+ strb r0, [r4]\n\
+ adds r4, 0x1\n\
+ adds r0, r5, 0\n\
+ movs r1, 0xA\n\
+ bl __umodsi3\n\
+ adds r0, 0xA1\n\
+ strb r0, [r4]\n\
+ b _0808C380\n\
+ .align 2, 0\n\
_0808C368: .4byte gSystemText_Type\n\
_0808C36C: .4byte gSystemText_Terminator\n\
_0808C370:\n\
- adds r0, r5, 0\n\
- movs r1, 0xA\n\
- bl __umodsi3\n\
- adds r0, 0xA1\n\
- strb r0, [r4]\n\
- adds r4, 0x1\n\
- strb r6, [r4]\n\
+ adds r0, r5, 0\n\
+ movs r1, 0xA\n\
+ bl __umodsi3\n\
+ adds r0, 0xA1\n\
+ strb r0, [r4]\n\
+ adds r4, 0x1\n\
+ strb r6, [r4]\n\
_0808C380:\n\
- adds r4, 0x1\n\
- movs r0, 0xFF\n\
- strb r0, [r4]\n\
- mov r0, sp\n\
- movs r1, 0xF\n\
- movs r2, 0xF\n\
- bl MenuPrint\n\
- add sp, 0x10\n\
- pop {r4-r6}\n\
- pop {r0}\n\
- bx r0\n\
+ adds r4, 0x1\n\
+ movs r0, 0xFF\n\
+ strb r0, [r4]\n\
+ mov r0, sp\n\
+ movs r1, 0xF\n\
+ movs r2, 0xF\n\
+ bl MenuPrint\n\
+ add sp, 0x10\n\
+ pop {r4-r6}\n\
+ pop {r0}\n\
+ bx r0\n\
.syntax divided\n");
}
#endif
diff --git a/src/rom4.c b/src/overworld.c
index f9006efba..9b41a262d 100644
--- a/src/rom4.c
+++ b/src/overworld.c
@@ -1,5 +1,5 @@
#include "global.h"
-#include "rom4.h"
+#include "overworld.h"
#include "battle_setup.h"
#include "berry.h"
#include "cable_club.h"
@@ -25,6 +25,7 @@
#include "link.h"
#include "load_save.h"
#include "main.h"
+#include "map_constants.h"
#include "map_name_popup.h"
#include "menu.h"
#include "metatile_behavior.h"
@@ -40,6 +41,7 @@
#include "secret_base.h"
#include "songs.h"
#include "sound.h"
+#include "species.h"
#include "start_menu.h"
#include "task.h"
#include "tileset_anim.h"
@@ -60,28 +62,10 @@ struct UnkTVStruct
u32 tv_field_4;
};
-EWRAM_DATA struct WarpData gUnknown_020297F0 = {0};
-EWRAM_DATA struct WarpData gUnknown_020297F8 = {0};
-EWRAM_DATA struct WarpData gUnknown_02029800 = {0};
-EWRAM_DATA struct WarpData gUnknown_02029808 = {0};
-EWRAM_DATA struct UnkPlayerStruct gUnknown_02029810 = {0};
-EWRAM_DATA u16 gUnknown_02029814 = 0;
-EWRAM_DATA bool8 gUnknown_02029816 = FALSE;
-EWRAM_DATA struct LinkPlayerMapObject gLinkPlayerMapObjects[4] = {0};
-
-static u8 gUnknown_03000580[4];
-static u16 (*gUnknown_03000584)(u32);
-static u8 gUnknown_03000588;
-
-u16 word_3004858;
-void (*gFieldCallback)(void);
-u8 gUnknown_03004860;
-u8 gFieldLinkPlayerCount;
-
extern u16 gUnknown_03004898;
extern u16 gUnknown_0300489C;
-extern u8 EventScript_LeagueWhiteOut[];
+extern u8 S_WhiteOut[];
extern u8 gUnknown_0819FC9F[];
extern u8 SingleBattleColosseum_EventScript_1A436F[];
extern u8 SingleBattleColosseum_EventScript_1A4379[];
@@ -102,21 +86,115 @@ extern u8 TradeRoom_PromptToCancelLink[];
extern u8 TradeRoom_TerminateLink[];
extern u8 gUnknown_081A4508[];
-extern u8 (*gUnknown_082166A0[])(struct LinkPlayerMapObject *, struct MapObject *, u8);
-extern u8 (*gUnknown_082166AC[])(struct LinkPlayerMapObject *, struct MapObject *, u8);
-extern void (*gUnknown_082166D8[])(struct LinkPlayerMapObject *, struct MapObject *);
-
extern struct MapData * const gMapAttributes[];
extern struct MapHeader * const * const gMapGroups[];
-extern const struct WarpData gDummyWarpData;
-extern s32 gUnknown_0839ACE8;
-extern u32 gUnknown_08216694[];
+extern s32 gMaxFlashLevel;
+
+EWRAM_DATA struct WarpData gUnknown_020297F0 = {0};
+EWRAM_DATA struct WarpData gUnknown_020297F8 = {0};
+EWRAM_DATA struct WarpData gUnknown_02029800 = {0};
+EWRAM_DATA struct WarpData gUnknown_02029808 = {0};
+EWRAM_DATA struct UnkPlayerStruct gUnknown_02029810 = {0};
+EWRAM_DATA static u16 sAmbientCrySpecies = 0;
+EWRAM_DATA static bool8 sIsAmbientCryWaterMon = FALSE;
+EWRAM_DATA struct LinkPlayerMapObject gLinkPlayerMapObjects[4] = {0};
+
+static u8 gUnknown_03000580[4];
+static u16 (*gUnknown_03000584)(u32);
+static u8 gUnknown_03000588;
+
+u16 word_3004858;
+void (*gFieldCallback)(void);
+u8 gUnknown_03004860;
+u8 gFieldLinkPlayerCount;
+
+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_0821664C[] =
+{
+ { 0, 0},
+ { 0, 1},
+ { 0, -1},
+ {-1, 0},
+ { 1, 0},
+ {-1, 1},
+ { 1, 1},
+ {-1, -1},
+ { 1, -1},
+};
+
+const struct UnknownTaskStruct gUnknown_08216694 =
+{
+ (void *)REG_ADDR_WIN0H,
+ ((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_DEST_RELOAD) << 16) | 1,
+ 1,
+ 0,
+};
+
+static u8 sub_8055C68(struct LinkPlayerMapObject *, struct MapObject *, u8);
+static u8 sub_8055C88(struct LinkPlayerMapObject *, struct MapObject *, u8);
+static u8 sub_8055C8C(struct LinkPlayerMapObject *, struct MapObject *, u8);
+
+static u8 (*const gUnknown_082166A0[])(struct LinkPlayerMapObject *, struct MapObject *, u8) =
+{
+ sub_8055C68,
+ sub_8055C88,
+ sub_8055C8C,
+};
+
+static u8 sub_8055CAC(struct LinkPlayerMapObject *, struct MapObject *, u8);
+static u8 sub_8055CB0(struct LinkPlayerMapObject *, struct MapObject *, u8);
+static u8 sub_8055D18(struct LinkPlayerMapObject *, struct MapObject *, u8);
+
+static u8 (*const gUnknown_082166AC[])(struct LinkPlayerMapObject *, struct MapObject *, u8) =
+{
+ sub_8055CAC,
+ sub_8055CB0,
+ sub_8055CB0,
+ sub_8055CB0,
+ sub_8055CB0,
+ sub_8055CAC,
+ sub_8055CAC,
+ sub_8055D18,
+ sub_8055D18,
+ sub_8055D18,
+ sub_8055D18,
+};
-void DoWhiteOut(void)
+static void sub_8055D30(struct LinkPlayerMapObject *, struct MapObject *);
+static void sub_8055D38(struct LinkPlayerMapObject *, struct MapObject *);
+
+static void (*const gUnknown_082166D8[])(struct LinkPlayerMapObject *, struct MapObject *) =
+{
+ sub_8055D30,
+ sub_8055D38,
+};
+
+
+static void DoWhiteOut(void)
{
- ScriptContext2_RunNewScript(EventScript_LeagueWhiteOut);
+ ScriptContext2_RunNewScript(S_WhiteOut);
gSaveBlock1.money /= 2;
- HealPlayerParty();
+ ScrSpecial_HealPlayerParty();
sub_8053050();
sub_8053570();
warp_in();
@@ -125,48 +203,48 @@ void DoWhiteOut(void)
void flag_var_implications_of_teleport_(void)
{
player_avatar_init_params_reset();
- FlagReset(SYS_CYCLING_ROAD);
- FlagReset(SYS_CRUISE_MODE);
- FlagReset(SYS_SAFARI_MODE);
- FlagReset(SYS_USE_STRENGTH);
- FlagReset(SYS_USE_FLASH);
+ FlagClear(SYS_CYCLING_ROAD);
+ FlagClear(SYS_CRUISE_MODE);
+ FlagClear(SYS_SAFARI_MODE);
+ FlagClear(SYS_USE_STRENGTH);
+ FlagClear(SYS_USE_FLASH);
}
-void new_game(void)
+void Overworld_ResetStateAfterTeleport(void)
{
player_avatar_init_params_reset();
- FlagReset(SYS_CYCLING_ROAD);
- FlagReset(SYS_CRUISE_MODE);
- FlagReset(SYS_SAFARI_MODE);
- FlagReset(SYS_USE_STRENGTH);
- FlagReset(SYS_USE_FLASH);
+ FlagClear(SYS_CYCLING_ROAD);
+ FlagClear(SYS_CRUISE_MODE);
+ FlagClear(SYS_SAFARI_MODE);
+ FlagClear(SYS_USE_STRENGTH);
+ FlagClear(SYS_USE_FLASH);
ScriptContext2_RunNewScript(gUnknown_0819FC9F);
}
void sub_8053014(void)
{
player_avatar_init_params_reset();
- FlagReset(SYS_CYCLING_ROAD);
- FlagReset(SYS_CRUISE_MODE);
- FlagReset(SYS_SAFARI_MODE);
- FlagReset(SYS_USE_STRENGTH);
- FlagReset(SYS_USE_FLASH);
+ FlagClear(SYS_CYCLING_ROAD);
+ FlagClear(SYS_CRUISE_MODE);
+ FlagClear(SYS_SAFARI_MODE);
+ FlagClear(SYS_USE_STRENGTH);
+ FlagClear(SYS_USE_FLASH);
}
void sub_8053050(void)
{
player_avatar_init_params_reset();
- FlagReset(SYS_CYCLING_ROAD);
- FlagReset(SYS_CRUISE_MODE);
- FlagReset(SYS_SAFARI_MODE);
- FlagReset(SYS_USE_STRENGTH);
- FlagReset(SYS_USE_FLASH);
+ FlagClear(SYS_CYCLING_ROAD);
+ FlagClear(SYS_CRUISE_MODE);
+ FlagClear(SYS_SAFARI_MODE);
+ FlagClear(SYS_USE_STRENGTH);
+ FlagClear(SYS_USE_FLASH);
}
void sub_805308C(void)
{
- FlagReset(SYS_SAFARI_MODE);
- sub_8054164();
+ FlagClear(SYS_SAFARI_MODE);
+ ChooseAmbientCrySpecies();
ResetCyclingRoadChallengeData();
UpdateLocationHistoryForRoamer();
RoamerMoveToOtherLocationSet();
@@ -213,15 +291,16 @@ void sub_8053154(void)
gMapHeader.events->mapObjectCount * sizeof(struct MapObjectTemplate));
}
-void sub_8053198(void)
+static void LoadSaveblockMapObjScripts(void)
{
struct MapObjectTemplate *mapObjectTemplates = gSaveBlock1.mapObjectTemplates;
s32 i;
+
for (i = 0; i < 64; i++)
mapObjectTemplates[i].script = gMapHeader.events->mapObjects[i].script;
}
-void update_saveblock1_field_object_coords(u8 localId, s16 x, s16 y)
+void Overworld_SaveMapObjCoords(u8 localId, s16 x, s16 y)
{
s32 i;
for (i = 0; i < 64; i++)
@@ -231,28 +310,26 @@ void update_saveblock1_field_object_coords(u8 localId, s16 x, s16 y)
{
mapObjectTemplate->x = x;
mapObjectTemplate->y = y;
- break;
+ return;
}
}
}
-void update_saveblock1_field_object_movement_behavior(u8 localId, u8 movementType)
+void Overworld_SaveMapObjMovementType(u8 localId, u8 movementType)
{
- s32 i = 0;
- struct MapObjectTemplate *mapObjectTemplate = gSaveBlock1.mapObjectTemplates;
- do
+ s32 i;
+ for (i = 0; i < 64; i++)
{
+ struct MapObjectTemplate *mapObjectTemplate = &gSaveBlock1.mapObjectTemplates[i];
if (mapObjectTemplate->localId == localId)
{
mapObjectTemplate->movementType = movementType;
- break;
+ return;
}
- mapObjectTemplate++;
- i++;
- } while (i < 64);
+ }
}
-void mapdata_load_assets_to_gpu_and_full_redraw(void)
+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);
@@ -261,7 +338,7 @@ void mapdata_load_assets_to_gpu_and_full_redraw(void)
cur_mapheader_run_tileset_funcs_after_some_cpuset();
}
-struct MapData *get_mapdata_header(void)
+static struct MapData *get_mapdata_header(void)
{
u16 mapDataId = gSaveBlock1.mapDataId;
if (mapDataId)
@@ -269,15 +346,15 @@ struct MapData *get_mapdata_header(void)
return NULL;
}
-void warp_shift(void)
+static void warp_shift(void)
{
gUnknown_020297F0 = gSaveBlock1.location;
gSaveBlock1.location = gUnknown_020297F8;
- gUnknown_02029800 = gDummyWarpData;
- gUnknown_02029808 = gDummyWarpData;
+ gUnknown_02029800 = sDummyWarpData;
+ gUnknown_02029808 = sDummyWarpData;
}
-void warp_set(struct WarpData *warp, s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
+static void warp_set(struct WarpData *warp, s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8 y)
{
warp->mapGroup = mapGroup;
warp->mapNum = mapNum;
@@ -286,7 +363,7 @@ void warp_set(struct WarpData *warp, s8 mapGroup, s8 mapNum, s8 warpId, s8 x, s8
warp->y = y;
}
-bool32 warp_data_is_not_neg_1(struct WarpData *warp)
+static bool32 warp_data_is_not_neg_1(struct WarpData *warp)
{
if (warp->mapGroup != -1)
return FALSE;
@@ -301,31 +378,27 @@ bool32 warp_data_is_not_neg_1(struct WarpData *warp)
return TRUE;
}
-struct MapHeader * const get_mapheader_by_bank_and_number(u16 mapGroup, u16 mapNum)
+struct MapHeader *const Overworld_GetMapHeaderByGroupAndId(u16 mapGroup, u16 mapNum)
{
return gMapGroups[mapGroup][mapNum];
}
-struct MapHeader * const warp1_get_mapheader(void)
+struct MapHeader *const warp1_get_mapheader(void)
{
- return get_mapheader_by_bank_and_number(gUnknown_020297F8.mapGroup, gUnknown_020297F8.mapNum);
+ return Overworld_GetMapHeaderByGroupAndId(gUnknown_020297F8.mapGroup, gUnknown_020297F8.mapNum);
}
-void set_current_map_header_from_sav1_save_old_name(void)
+static void set_current_map_header_from_sav1_save_old_name(void)
{
- struct MapHeader *dest = &gMapHeader;
- struct MapHeader *src = get_mapheader_by_bank_and_number(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum);
- *dest = *src;
- gSaveBlock1.mapDataId = dest->mapDataId;
- dest->mapData = get_mapdata_header();
+ gMapHeader = *Overworld_GetMapHeaderByGroupAndId(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum);
+ gSaveBlock1.mapDataId = gMapHeader.mapDataId;
+ gMapHeader.mapData = get_mapdata_header();
}
-void sub_805338C(void)
+static void LoadSaveblockMapHeader(void)
{
- struct MapHeader *dest = &gMapHeader;
- struct MapHeader *src = get_mapheader_by_bank_and_number(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum);
- *dest = *src;
- dest->mapData = get_mapdata_header();
+ gMapHeader = *Overworld_GetMapHeaderByGroupAndId(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum);
+ gMapHeader.mapData = get_mapdata_header();
}
void sub_80533CC(void)
@@ -382,6 +455,7 @@ void copy_saved_warp2_bank_and_enter_x_to_warp1(u8 unused)
void sub_8053538(u8 a1)
{
const struct HealLocation *warp = GetHealLocation(a1);
+
if (warp)
warp1_set(warp->group, warp->map, -1, warp->x, warp->y);
}
@@ -400,9 +474,9 @@ void sub_8053588(u8 a1)
void sub_80535C4(s16 a1, s16 a2)
{
- u8 v4 = sav1_map_get_light_level();
- u8 v5 = get_map_light_level_by_bank_and_number(gUnknown_020297F8.mapGroup, gUnknown_020297F8.mapNum);
- if (is_light_level_1_2_3_5_or_6(v4) && is_light_level_1_2_3_5_or_6(v5) != TRUE)
+ u8 v4 = Overworld_GetMapTypeOfSaveblockLocation();
+ u8 v5 = GetMapTypeByGroupAndId(gUnknown_020297F8.mapGroup, gUnknown_020297F8.mapNum);
+ if (is_map_type_1_2_3_5_or_6(v4) && is_map_type_1_2_3_5_or_6(v5) != TRUE)
sub_805363C(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum, -1, a1 - 7, a2 - 6);
}
@@ -484,7 +558,7 @@ struct MapConnection *sub_8053818(u8 dir)
bool8 sub_8053850(u8 dir, u16 x, u16 y)
{
struct MapConnection *connection = sub_8053818(dir);
- if (connection)
+ if (connection != NULL)
{
warp1_set(connection->mapGroup, connection->mapNum, -1, x, y);
}
@@ -523,8 +597,8 @@ void sub_80538F0(u8 mapGroup, u8 mapNum)
sub_8082BD0(mapGroup, mapNum);
DoTimeBasedEvents();
sub_80806E4();
- sub_8054164();
- sub_8053C98();
+ ChooseAmbientCrySpecies();
+ SetDefaultFlashLevel();
sav1_reset_battle_music_maybe();
mapheader_run_script_with_tag_x3();
not_trainer_hill_battle_pyramid();
@@ -550,8 +624,8 @@ void sub_8053994(u32 a1)
set_current_map_header_from_sav1_save_old_name();
sub_8053154();
- v2 = is_light_level_1_2_3_5_or_6(gMapHeader.mapType);
- v3 = is_light_level_8_or_9(gMapHeader.mapType);
+ v2 = is_map_type_1_2_3_5_or_6(gMapHeader.mapType);
+ v3 = Overworld_MapTypeIsIndoors(gMapHeader.mapType);
ClearTempFieldEventData();
ResetCyclingRoadChallengeData();
prev_quest_postbuffer_cursor_backup_reset();
@@ -559,10 +633,10 @@ void sub_8053994(u32 a1)
if (a1 != 1)
DoTimeBasedEvents();
sub_80806E4();
- sub_8054164();
+ ChooseAmbientCrySpecies();
if (v2)
- FlagReset(SYS_USE_FLASH);
- sub_8053C98();
+ FlagClear(SYS_USE_FLASH);
+ SetDefaultFlashLevel();
sav1_reset_battle_music_maybe();
mapheader_run_script_with_tag_x3();
UpdateLocationHistoryForRoamer();
@@ -600,11 +674,11 @@ void walkrun_find_lowest_active_bit_in_bitfield(void)
struct UnkPlayerStruct *sub_8053AA8(void)
{
struct UnkPlayerStruct playerStruct;
- u8 light = sav1_map_get_light_level();
+ u8 mapType = Overworld_GetMapTypeOfSaveblockLocation();
u16 v2 = cur_mapdata_block_role_at_screen_center_acc_to_sav1();
- u8 v4 = sub_8053B00(&gUnknown_02029810, v2, light);
+ u8 v4 = sub_8053B00(&gUnknown_02029810, v2, mapType);
playerStruct.player_field_0 = v4;
- playerStruct.player_field_1 = sub_8053B60(&gUnknown_02029810, v4, v2, light);
+ playerStruct.player_field_1 = sub_8053B60(&gUnknown_02029810, v4, v2, mapType);
gUnknown_02029810 = playerStruct;
return &gUnknown_02029810;
}
@@ -617,7 +691,7 @@ u8 sub_8053B00(struct UnkPlayerStruct *playerStruct, u16 a2, u8 a3)
return 16;
if (MetatileBehavior_IsSurfableWaterOrUnderwater(a2) == 1)
return 8;
- if (IsBikingAllowedByMap() != TRUE)
+ if (Overworld_IsBikeAllowedOnCurrentMap() != TRUE)
return 1;
if (playerStruct->player_field_0 == 2)
return 2;
@@ -655,10 +729,12 @@ u16 cur_mapdata_block_role_at_screen_center_acc_to_sav1(void)
return MapGridGetMetatileBehaviorAt(gSaveBlock1.pos.x + 7, gSaveBlock1.pos.y + 7);
}
-bool32 IsBikingAllowedByMap(void)
+bool32 Overworld_IsBikeAllowedOnCurrentMap(void)
{
// is player in cycling road entrance?
- if (gSaveBlock1.location.mapGroup == 29 && (gSaveBlock1.location.mapNum == 11 || gSaveBlock1.location.mapNum == 12))
+ if (gSaveBlock1.location.mapGroup == MAP_GROUP_ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE
+ && (gSaveBlock1.location.mapNum == MAP_ID_ROUTE110_SEASIDE_CYCLING_ROAD_SOUTH_ENTRANCE
+ || gSaveBlock1.location.mapNum == MAP_ID_ROUTE110_SEASIDE_CYCLING_ROAD_NORTH_ENTRANCE))
return TRUE;
// is player indoor, in a secret base, or underwater?
@@ -669,37 +745,37 @@ bool32 IsBikingAllowedByMap(void)
if (gMapHeader.mapType == MAP_TYPE_UNDERWATER)
return FALSE;
- // is player in SeafloorCavern_Room9?
- if (gSaveBlock1.location.mapGroup == 24 && gSaveBlock1.location.mapNum == 36)
+ // Thou shalt not bike on the sacred resting grounds of Kyogre/Groudon.
+ if (gSaveBlock1.location.mapGroup == MAP_GROUP_SEAFLOOR_CAVERN_ROOM9
+ && gSaveBlock1.location.mapNum == MAP_ID_SEAFLOOR_CAVERN_ROOM9)
return FALSE;
-
- // is player in CaveOfOrigin_B4F?
- if (gSaveBlock1.location.mapGroup == 24 && gSaveBlock1.location.mapNum == 42)
+ if (gSaveBlock1.location.mapGroup == MAP_GROUP_CAVE_OF_ORIGIN_B4F
+ && gSaveBlock1.location.mapNum == MAP_ID_CAVE_OF_ORIGIN_B4F)
return FALSE;
return TRUE;
}
-void sub_8053C98(void)
+void SetDefaultFlashLevel(void)
{
if (!gMapHeader.cave)
- gSaveBlock1.flashUsed = 0;
+ gSaveBlock1.flashLevel = 0;
else if (FlagGet(SYS_USE_FLASH))
- gSaveBlock1.flashUsed = 1;
+ gSaveBlock1.flashLevel = 1;
else
- gSaveBlock1.flashUsed = gUnknown_0839ACE8;
+ gSaveBlock1.flashLevel = gMaxFlashLevel;
}
-void sub_8053CE4(s32 a1)
+void Overworld_SetFlashLevel(s32 flashLevel)
{
- if (a1 < 0 || a1 > gUnknown_0839ACE8)
- a1 = 0;
- gSaveBlock1.flashUsed = a1;
+ if (flashLevel < 0 || flashLevel > gMaxFlashLevel)
+ flashLevel = 0;
+ gSaveBlock1.flashLevel = flashLevel;
}
-u8 sav1_get_flash_used_on_map(void)
+u8 Overworld_GetFlashLevel(void)
{
- return gSaveBlock1.flashUsed;
+ return gSaveBlock1.flashLevel;
}
void sub_8053D14(u16 mapDataId)
@@ -708,60 +784,62 @@ void sub_8053D14(u16 mapDataId)
gMapHeader.mapData = get_mapdata_header();
}
-bool16 sub_8053D30(struct WarpData *warp)
+static bool16 ShouldLegendaryMusicPlayAtLocation(struct WarpData *warp)
{
if (!FlagGet(SYS_WEATHER_CTRL))
return FALSE;
- if (warp->mapGroup != 0)
- return FALSE;
- switch (warp->mapNum)
+ if (warp->mapGroup == 0)
{
- case 5:
- case 6:
- case 7:
- case 8:
- return TRUE;
- case 39:
- case 40:
- case 41:
- case 42:
- case 43:
- return TRUE;
+ switch (warp->mapNum)
+ {
+ case MAP_ID_LILYCOVE_CITY:
+ case MAP_ID_MOSSDEEP_CITY:
+ case MAP_ID_SOOTOPOLIS_CITY:
+ case MAP_ID_EVER_GRANDE_CITY:
+ return TRUE;
+ case MAP_ID_ROUTE124:
+ case MAP_ID_ROUTE125:
+ case MAP_ID_ROUTE126:
+ case MAP_ID_ROUTE127:
+ case MAP_ID_ROUTE128:
+ return TRUE;
+ }
}
return FALSE;
}
-bool16 sub_8053D6C(struct WarpData *warp)
+static bool16 IsInfiltratedWeatherInstitute(struct WarpData *warp)
{
- if (VarGet(0x40B3))
+ if (VarGet(VAR_WEATHER_INSTITUTE_CLEARED))
return FALSE;
- if (warp->mapGroup != 32)
+ if (warp->mapGroup != MAP_GROUP_ROUTE119_WEATHER_INSTITUTE_1F)
return FALSE;
- if (warp->mapNum == 0 || warp->mapNum == 1)
+ if (warp->mapNum == MAP_ID_ROUTE119_WEATHER_INSTITUTE_1F
+ || warp->mapNum == MAP_ID_ROUTE119_WEATHER_INSTITUTE_2F)
return TRUE;
return FALSE;
}
-u16 sub_8053D9C(struct WarpData *warp)
+static u16 GetLocationMusic(struct WarpData *warp)
{
- if (sub_8053D30(warp) == TRUE)
+ if (ShouldLegendaryMusicPlayAtLocation(warp) == TRUE)
return LEGENDARY_MUSIC;
- else if (sub_8053D6C(warp) == TRUE)
+ else if (IsInfiltratedWeatherInstitute(warp) == TRUE)
return BGM_TOZAN;
else
- return get_mapheader_by_bank_and_number(warp->mapGroup, warp->mapNum)->music;
+ return Overworld_GetMapHeaderByGroupAndId(warp->mapGroup, warp->mapNum)->music;
}
u16 sav1_map_get_music(void)
{
u16 music;
- if (gSaveBlock1.location.mapGroup == 0
- && gSaveBlock1.location.mapNum == 26
+ if (gSaveBlock1.location.mapGroup == MAP_GROUP_ROUTE111
+ && gSaveBlock1.location.mapNum == MAP_ID_ROUTE111
&& GetSav1Weather() == 8)
return BGM_ASHROAD;
- music = sub_8053D9C(&gSaveBlock1.location);
+ music = GetLocationMusic(&gSaveBlock1.location);
if (music != 0x7FFF)
{
return music;
@@ -777,14 +855,15 @@ u16 sav1_map_get_music(void)
u16 warp1_target_get_music(void)
{
- u16 music = sub_8053D9C(&gUnknown_020297F8);
+ u16 music = GetLocationMusic(&gUnknown_020297F8);
if (music != 0x7FFF)
{
return music;
}
else
{
- if (gSaveBlock1.location.mapGroup == 0 && gSaveBlock1.location.mapNum == 2)
+ if (gSaveBlock1.location.mapGroup == MAP_GROUP_MAUVILLE_CITY
+ && gSaveBlock1.location.mapNum == MAP_ID_MAUVILLE_CITY)
return BGM_DOORO_X1;
else
return BGM_GRANROAD;
@@ -804,7 +883,7 @@ void sub_8053E90(void)
{
if (gSaveBlock1.battleMusic)
music = gSaveBlock1.battleMusic;
- else if (sav1_map_get_light_level() == 5)
+ else if (Overworld_GetMapTypeOfSaveblockLocation() == MAP_TYPE_UNDERWATER)
music = BGM_DEEPDEEP;
else if (TestPlayerAvatarFlags(PLAYER_AVATAR_FLAG_SURFING))
music = BGM_NAMINORI;
@@ -854,17 +933,17 @@ void sub_8053F84(void)
FadeOutAndPlayNewMapMusic(sav1_map_get_music(), 8);
}
-void sub_8053FB0(u16 music)
+void Overworld_ChangeMusicTo(u16 newMusic)
{
u16 currentMusic = GetCurrentMapMusic();
- if (currentMusic != music && currentMusic != LEGENDARY_MUSIC)
- FadeOutAndPlayNewMapMusic(music, 8);
+ if (currentMusic != newMusic && currentMusic != LEGENDARY_MUSIC)
+ FadeOutAndPlayNewMapMusic(newMusic, 8);
}
-u8 is_warp1_light_level_8_or_9(void)
+u8 GetMapMusicFadeoutSpeed(void)
{
struct MapHeader *mapHeader = warp1_get_mapheader();
- if (is_light_level_8_or_9(mapHeader->mapType) == TRUE)
+ if (Overworld_MapTypeIsIndoors(mapHeader->mapType) == TRUE)
return 2;
else
return 4;
@@ -875,7 +954,7 @@ void sub_8053FF8(void)
u16 music = warp1_target_get_music();
if (FlagGet(SPECIAL_FLAG_1) != TRUE && music != GetCurrentMapMusic())
{
- u8 speed = is_warp1_light_level_8_or_9();
+ u8 speed = GetMapMusicFadeoutSpeed();
FadeOutMapMusic(speed);
}
}
@@ -890,43 +969,43 @@ void sub_8054044(void)
FadeOutMapMusic(4);
}
-void sub_8054050(void)
+static void PlayAmbientCry(void)
{
s16 x, y;
- PlayerGetDestCoords((u16 *)&x, (u16 *)&y);
- if (gUnknown_02029816 != TRUE
+ PlayerGetDestCoords(&x, &y);
+ if (sIsAmbientCryWaterMon != TRUE
|| MetatileBehavior_IsSurfableWaterOrUnderwater(MapGridGetMetatileBehaviorAt(x, y)))
{
s8 pan = (Random() % 88) + 212;
s8 volume = (Random() % 30) + 50;
- PlayCry2(gUnknown_02029814, pan, volume, 1);
+ PlayCry2(sAmbientCrySpecies, pan, volume, 1);
}
}
-void sub_80540D0(s16 *a1, u16 *a2)
+void UpdateAmbientCry(s16 *state, u16 *delayCounter)
{
- switch (*a1)
+ switch (*state)
{
case 0:
- if (!gUnknown_02029814)
- *a1 = 4;
+ if (sAmbientCrySpecies == SPECIES_NONE)
+ *state = 4;
else
- *a1 = 1;
+ *state = 1;
break;
case 1:
- *a2 = (Random() % 2400) + 1200;
- *a1 = 3;
+ *delayCounter = (Random() % 2400) + 1200;
+ *state = 3;
break;
case 2:
- *a2 = (Random() % 1200) + 1200;
- *a1 = 3;
+ *delayCounter = (Random() % 1200) + 1200;
+ *state = 3;
break;
case 3:
- (*a2)--;
- if (*a2 == 0)
+ (*delayCounter)--;
+ if (*delayCounter == 0)
{
- sub_8054050();
- *a1 = 2;
+ PlayAmbientCry();
+ *state = 2;
}
break;
case 4:
@@ -934,58 +1013,70 @@ void sub_80540D0(s16 *a1, u16 *a2)
}
}
-void sub_8054164(void)
+void ChooseAmbientCrySpecies(void)
{
- if ((gSaveBlock1.location.mapGroup == 0 && gSaveBlock1.location.mapNum == 45) && !IsMirageIslandPresent())
+ if ((gSaveBlock1.location.mapGroup == MAP_GROUP_ROUTE130
+ && gSaveBlock1.location.mapNum == MAP_ID_ROUTE130)
+ && !IsMirageIslandPresent())
{
- gUnknown_02029816 = TRUE;
- gUnknown_02029814 = GetMirageIslandMon();
+ // Only play water pokemon cries on this route
+ // when Mirage Island is not present
+ sIsAmbientCryWaterMon = TRUE;
+ sAmbientCrySpecies = GetLocalWaterMon();
}
else
{
- gUnknown_02029814 = GetLocalWildMon(&gUnknown_02029816);
+ sAmbientCrySpecies = GetLocalWildMon(&sIsAmbientCryWaterMon);
}
}
-u8 get_map_light_level_by_bank_and_number(s8 mapGroup, s8 mapNum)
+u8 GetMapTypeByGroupAndId(s8 mapGroup, s8 mapNum)
{
- return get_mapheader_by_bank_and_number(mapGroup, mapNum)->mapType;
+ return Overworld_GetMapHeaderByGroupAndId(mapGroup, mapNum)->mapType;
}
-u8 get_map_light_level_from_warp(struct WarpData *warp)
+u8 GetMapTypeByWarpData(struct WarpData *warp)
{
- return get_map_light_level_by_bank_and_number(warp->mapGroup, warp->mapNum);
+ return GetMapTypeByGroupAndId(warp->mapGroup, warp->mapNum);
}
-u8 sav1_map_get_light_level(void)
+u8 Overworld_GetMapTypeOfSaveblockLocation(void)
{
- return get_map_light_level_from_warp(&gSaveBlock1.location);
+ return GetMapTypeByWarpData(&gSaveBlock1.location);
}
-u8 get_map_light_from_warp0(void)
+u8 get_map_type_from_warp0(void)
{
- return get_map_light_level_from_warp(&gUnknown_020297F0);
+ return GetMapTypeByWarpData(&gUnknown_020297F0);
}
-bool8 is_light_level_1_2_3_5_or_6(u8 a1)
+bool8 is_map_type_1_2_3_5_or_6(u8 mapType)
{
- if (a1 == 3 || a1 == 1 || a1 == 5 || a1 == 2 || a1 == 6)
+ 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 is_light_level_1_2_3_or_6(u8 a1)
+bool8 Overworld_MapTypeAllowsTeleportAndFly(u8 mapType)
{
- if (a1 == 3 || a1 == 1 || a1 == 6 || a1 == 2)
+ if (mapType == MAP_TYPE_ROUTE
+ || mapType == MAP_TYPE_TOWN
+ || mapType == MAP_TYPE_6
+ || mapType == MAP_TYPE_CITY)
return TRUE;
else
return FALSE;
}
-bool8 is_light_level_8_or_9(u8 a1)
+bool8 Overworld_MapTypeIsIndoors(u8 mapType)
{
- if (a1 == 8 || a1 == 9)
+ if (mapType == MAP_TYPE_INDOOR
+ || mapType == MAP_TYPE_SECRET_BASE)
return TRUE;
else
return FALSE;
@@ -993,17 +1084,17 @@ bool8 is_light_level_8_or_9(u8 a1)
u8 unref_sub_8054260(void)
{
- return get_mapheader_by_bank_and_number(gSaveBlock1.warp2.mapGroup, gSaveBlock1.warp2.mapNum)->regionMapSectionId;
+ return Overworld_GetMapHeaderByGroupAndId(gSaveBlock1.warp2.mapGroup, gSaveBlock1.warp2.mapNum)->regionMapSectionId;
}
u8 sav1_map_get_name(void)
{
- return get_mapheader_by_bank_and_number(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum)->regionMapSectionId;
+ return Overworld_GetMapHeaderByGroupAndId(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum)->regionMapSectionId;
}
u8 sav1_map_get_battletype(void)
{
- return get_mapheader_by_bank_and_number(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum)->battleType;
+ return Overworld_GetMapHeaderByGroupAndId(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum)->battleType;
}
void ResetSafariZoneFlag_(void)
@@ -1046,7 +1137,7 @@ void c1_overworld(void)
c1_overworld_normal(gMain.newKeys, gMain.heldKeys);
}
-void c2_overworld_basic(void)
+void OverworldBasic(void)
{
ScriptContext2_RunScript();
RunTasks();
@@ -1058,9 +1149,9 @@ void c2_overworld_basic(void)
sub_8072EDC();
}
-void sub_8054398(void)
+void CB2_OverworldBasic(void)
{
- c2_overworld_basic();
+ OverworldBasic();
}
void c2_overworld(void)
@@ -1068,7 +1159,7 @@ void c2_overworld(void)
int fading = (gPaletteFade.active != 0);
if (fading)
SetVBlankCallback(NULL);
- c2_overworld_basic();
+ OverworldBasic();
if (fading)
SetFieldVBlankCallback();
}
@@ -1265,8 +1356,8 @@ void CB2_ContinueSavedGame(void)
FieldClearVBlankHBlankCallbacks();
StopMapMusic();
ResetSafariZoneFlag_();
- sub_805338C();
- sub_8053198();
+ LoadSaveblockMapHeader();
+ LoadSaveblockMapObjScripts();
UnfreezeMapObjects();
DoTimeBasedEvents();
sub_805308C();
@@ -1317,11 +1408,11 @@ void VBlankCB_Field(void)
void sub_8054814(void)
{
- u8 val = sav1_get_flash_used_on_map();
+ u8 val = Overworld_GetFlashLevel();
if (val)
{
sub_80815E0(val);
- sub_80895F8(gUnknown_08216694[0], gUnknown_08216694[1], gUnknown_08216694[2]);
+ sub_80895F8(gUnknown_08216694);
}
}
@@ -2434,27 +2525,27 @@ void sub_8055BFC(u8 linkPlayerId, u8 a2)
}
}
-u8 sub_8055C68(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3)
+static u8 sub_8055C68(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3)
{
return gUnknown_082166AC[a3](linkPlayerMapObj, mapObj, a3);
}
-u8 sub_8055C88(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3)
+static u8 sub_8055C88(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3)
{
return 1;
}
-u8 sub_8055C8C(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3)
+static u8 sub_8055C8C(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3)
{
return gUnknown_082166AC[a3](linkPlayerMapObj, mapObj, a3);
}
-u8 sub_8055CAC(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3)
+static u8 sub_8055CAC(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3)
{
return 0;
}
-u8 sub_8055CB0(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3)
+static u8 sub_8055CB0(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3)
{
s16 x, y;
@@ -2474,18 +2565,18 @@ u8 sub_8055CB0(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *m
}
}
-u8 sub_8055D18(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3)
+static u8 sub_8055D18(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj, u8 a3)
{
mapObj->mapobj_unk_19 = npc_something3(a3, mapObj->mapobj_unk_19);
return 0;
}
-void sub_8055D30(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj)
+static void sub_8055D30(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj)
{
linkPlayerMapObj->mode = 0;
}
-void sub_8055D38(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj)
+static void sub_8055D38(struct LinkPlayerMapObject *linkPlayerMapObj, struct MapObject *mapObj)
{
mapObj->mapobj_unk_21--;
linkPlayerMapObj->mode = 1;
diff --git a/src/party_menu.c b/src/party_menu.c
index 1fcd2cdda..39477e293 100644
--- a/src/party_menu.c
+++ b/src/party_menu.c
@@ -33,15 +33,6 @@
#include "species.h"
#include "party_menu.h"
-#define DATA_COUNT (6)
-
-struct Unk2001000
-{
- u8 unk0;
- u8 unk1;
- u8 unk2;
-};
-
struct Unk201C000
{
/*0x00*/ struct Pokemon *pokemon;
@@ -68,8 +59,6 @@ struct UnknownStruct5
u16 *unk4;
};
-extern u8 ewram[];
-#define ewram01000 (*(struct Unk2001000 *)(ewram + 0x01000))
#define ewram1C000 (*(struct Unk201C000 *)(ewram + 0x1C000))
#define ewram1F000 (*(struct Unk201F000 *)(ewram + 0x1F000))
diff --git a/src/player_pc.c b/src/player_pc.c
index 6d52c560a..83e6dd221 100644
--- a/src/player_pc.c
+++ b/src/player_pc.c
@@ -18,7 +18,7 @@
#include "songs.h"
#include "name_string_util.h"
#include "mail.h"
-#include "rom4.h"
+#include "overworld.h"
#include "player_pc.h"
extern void DisplayItemMessageOnField(u8, const u8*, TaskFunc, u16);
@@ -106,7 +106,7 @@ static const u8 *const gPCText_OptionDescList[] =
gMenuText_GoBackToPrev
};
-static const struct MenuAction2 gPCText_PlayerPCOptionsText[] =
+static const struct MenuAction2 sPlayerPCMenuActions[] =
{
{ SecretBaseText_ItemStorage, PlayerPC_ItemStorage },
{ gPCText_Mailbox, PlayerPC_Mailbox },
@@ -226,7 +226,7 @@ void PlayerPC(void)
static void InitPlayerPCMenu(u8 taskId)
{
MenuDrawTextWindow(0, 0, 10, gPcItemMenuOptionsNum * 2 + 1);
- PrintMenuItemsReordered(1, 1, gPcItemMenuOptionsNum, (struct MenuAction *)gPCText_PlayerPCOptionsText, gPcItemMenuOptionOrder);
+ PrintMenuItemsReordered(1, 1, gPcItemMenuOptionsNum, sPlayerPCMenuActions, gPcItemMenuOptionOrder);
InitMenu(0, 1, 1, gPcItemMenuOptionsNum, 0, 9);
TASK.FUNC = PlayerPCProcessMenuInput;
}
@@ -247,13 +247,13 @@ static void PlayerPCProcessMenuInput(u8 taskId)
{
HandleDestroyMenuCursors();
PlaySE(SE_SELECT);
- gPCText_PlayerPCOptionsText[gPcItemMenuOptionOrder[GetMenuCursorPos()]].func(taskId);
+ sPlayerPCMenuActions[gPcItemMenuOptionOrder[GetMenuCursorPos()]].func(taskId);
}
else if (gMain.newKeys & B_BUTTON)
{
HandleDestroyMenuCursors();
PlaySE(SE_SELECT);
- gPCText_PlayerPCOptionsText[gPcItemMenuOptionsNum[gPcItemMenuOptionOrder - 1]].func(taskId); // run EXIT.
+ sPlayerPCMenuActions[gPcItemMenuOptionsNum[gPcItemMenuOptionOrder - 1]].func(taskId); // run EXIT.
}
}
diff --git a/src/pokeblock.c b/src/pokeblock.c
index 6b967d7fc..34f4ffa35 100644
--- a/src/pokeblock.c
+++ b/src/pokeblock.c
@@ -1,9 +1,9 @@
//
-// Created by scott on 6/27/2017.
+
//
#include "global.h"
-#include "rom4.h"
+#include "overworld.h"
#include "sprite.h"
#include "script.h"
#include "strings.h"
@@ -25,7 +25,6 @@
#include "sound.h"
#include "songs.h"
#include "safari_zone.h"
-#include "use_pokeblock.h"
#include "event_data.h"
#include "pokeblock.h"
@@ -582,7 +581,7 @@ static void sub_810BDAC(bool8 flag)
v0 = ((i % 3) << 6) + 0x1a1 + (i / 3) * 6;
if (gUnknown_02039248.unk0 + gUnknown_02039248.unk1 != gUnknown_02039248.unk2)
{
- if (sub_810CA9C(&gSaveBlock1.pokeblocks[gUnknown_02039248.unk0 + gUnknown_02039248.unk1], i + 1) > 0)
+ if (GetPokeblockData(&gSaveBlock1.pokeblocks[gUnknown_02039248.unk0 + gUnknown_02039248.unk1], i + 1) > 0)
{
gBGTilemapBuffers[2][v0] = (i << 12) + 23;
gBGTilemapBuffers[2][v0 + 32] = (i << 12) + 24;
@@ -817,7 +816,7 @@ static void sub_810C368(u8 taskId)
sub_80F98A4(1);
BasicInitMenuWindow(&gWindowConfig_81E6E50);
MenuDrawTextWindow(7, v0 + 4, 13, 11);
- PrintMenuItemsReordered(8, v0 + 5, gUnknown_0203924C, (const struct MenuAction *)gUnknown_083F7EF4, gUnknown_03000758);
+ PrintMenuItemsReordered(8, v0 + 5, gUnknown_0203924C, gUnknown_083F7EF4, gUnknown_03000758);
InitMenu(0, 8, v0 + 5, gUnknown_0203924C, 0, 5);
gScriptItemId = gUnknown_02039248.unk0 + gUnknown_02039248.unk1;
gTasks[taskId].func = sub_810C40C;
@@ -894,7 +893,7 @@ static void sub_810C5EC(u8 taskId)
static void sub_810C610(u8 taskId)
{
MenuZeroFillWindowRect(7, 6, 13, 11);
- sub_810CA6C((gUnknown_02039248.unk0 + gUnknown_02039248.unk1));
+ PokeblockClearIfExists((gUnknown_02039248.unk0 + gUnknown_02039248.unk1));
StringExpandPlaceholders(gStringVar4, gContestStatsText_WasThrownAway);
DisplayItemMessageOnField(taskId, gStringVar4, sub_810C704, 0);
sub_810BC98();
@@ -942,9 +941,9 @@ static void sub_810C748(u8 taskId)
static void sub_810C788(u8 taskId)
{
- s16 v0 = sub_810CAE4(GetNature(&gEnemyParty[0]), &gSaveBlock1.pokeblocks[gScriptItemId]);
+ s16 v0 = PokeblockGetGain(GetNature(&gEnemyParty[0]), &gSaveBlock1.pokeblocks[gScriptItemId]);
StringCopy(gBattleTextBuff1, gPokeblockNames[gSaveBlock1.pokeblocks[gScriptItemId].color]);
- sub_810CA6C(gScriptItemId);
+ PokeblockClearIfExists(gScriptItemId);
gScriptItemId = gSaveBlock1.pokeblocks[gScriptItemId].color << 8;
if (v0 == 0)
{
@@ -967,7 +966,7 @@ static void sub_810C854(u8 taskId)
SafariZoneActivatePokeblockFeeder(gScriptItemId);
StringCopy(gStringVar1, gPokeblockNames[gSaveBlock1.pokeblocks[gScriptItemId].color]);
gScriptResult = gScriptItemId;
- sub_810CA6C(gScriptItemId);
+ PokeblockClearIfExists(gScriptItemId);
BeginNormalPaletteFade(-1, 0, 0, 16, 0);
gTasks[taskId].func = sub_810C2C8;
}
@@ -1024,10 +1023,10 @@ u8 sub_810C9B0(struct Pokeblock *pokeblock)
{
u8 contestStat;
u8 maxRating;
- u8 rating = sub_810CA9C(pokeblock, 1);
+ u8 rating = GetPokeblockData(pokeblock, 1);
for (contestStat=1; contestStat<5; contestStat++)
{
- maxRating = sub_810CA9C(pokeblock, contestStat + 1);
+ maxRating = GetPokeblockData(pokeblock, contestStat + 1);
if (rating < maxRating)
{
rating = maxRating;
@@ -1038,7 +1037,7 @@ u8 sub_810C9B0(struct Pokeblock *pokeblock)
u8 sub_810C9E8(struct Pokeblock *pokeblock)
{
- u8 feel = sub_810CA9C(pokeblock, 6);
+ u8 feel = GetPokeblockData(pokeblock, 6);
if (feel > 99)
feel = 99;
return feel;
@@ -1068,7 +1067,7 @@ bool8 sub_810CA34(struct Pokeblock *pokeblock)
return TRUE;
}
-bool8 sub_810CA6C(u8 pokeblockIdx)
+bool8 PokeblockClearIfExists(u8 pokeblockIdx)
{
if (gSaveBlock1.pokeblocks[pokeblockIdx].color == 0)
{
@@ -1078,33 +1077,33 @@ bool8 sub_810CA6C(u8 pokeblockIdx)
return TRUE;
}
-s16 sub_810CA9C(const struct Pokeblock *pokeblock, u8 field)
+s16 GetPokeblockData(const struct Pokeblock *pokeblock, u8 field)
{
- if (field == 0)
+ if (field == PBLOCK_COLOR)
return pokeblock->color;
- if (field == 1)
+ if (field == PBLOCK_SPICY)
return pokeblock->spicy;
- if (field == 2)
+ if (field == PBLOCK_DRY)
return pokeblock->dry;
- if (field == 3)
+ if (field == PBLOCK_SWEET)
return pokeblock->sweet;
- if (field == 4)
+ if (field == PBLOCK_BITTER)
return pokeblock->bitter;
- if (field == 5)
+ if (field == PBLOCK_SOUR)
return pokeblock->sour;
- if (field == 6)
+ if (field == PBLOCK_FEEL)
return pokeblock->feel;
return 0;
}
-s16 sub_810CAE4(u8 nature, const struct Pokeblock *pokeblock)
+s16 PokeblockGetGain(u8 nature, const struct Pokeblock *pokeblock)
{
u8 flavor;
s16 curGain;
s16 totalGain = 0;
for (flavor=0; flavor<5; flavor++)
{
- curGain = sub_810CA9C(pokeblock, flavor + 1);
+ curGain = GetPokeblockData(pokeblock, flavor + 1);
if (curGain > 0)
{
totalGain += curGain * gPokeblockFlavorCompatibilityTable[5 * nature + flavor];
@@ -1113,9 +1112,9 @@ s16 sub_810CAE4(u8 nature, const struct Pokeblock *pokeblock)
return totalGain;
}
-void sub_810CB44(struct Pokeblock *pokeblock, u8 *dest)
+void PokeblockCopyName(struct Pokeblock *pokeblock, u8 *dest)
{
- u8 color = sub_810CA9C(pokeblock, 0);
+ u8 color = GetPokeblockData(pokeblock, PBLOCK_COLOR);
StringCopy(dest, gPokeblockNames[color]);
}
@@ -1124,7 +1123,7 @@ bool8 sub_810CB68(u8 nature, u8 *dest)
u8 flavor;
for (flavor=0; flavor<5; flavor++)
{
- if (sub_810CAE4(nature, &gUnknown_083F7F9C[flavor]) > 0)
+ if (PokeblockGetGain(nature, &gUnknown_083F7F9C[flavor]) > 0)
{
StringCopy(dest, gPokeblockNames[flavor + 1]);
return TRUE;
diff --git a/src/pokeblock_feed.c b/src/pokeblock_feed.c
new file mode 100644
index 000000000..5d6b215cd
--- /dev/null
+++ b/src/pokeblock_feed.c
@@ -0,0 +1,1015 @@
+#include "global.h"
+#include "task.h"
+#include "palette.h"
+#include "main.h"
+#include "menu_helpers.h"
+#include "text.h"
+#include "text_window.h"
+#include "menu.h"
+#include "overworld.h"
+#include "decompress.h"
+#include "data2.h"
+#include "sprite.h"
+#include "item_use.h"
+#include "pokeblock.h"
+#include "party_menu.h"
+#include "strings.h"
+#include "string_util.h"
+#include "m4a.h"
+#include "field_effect.h"
+#include "sound.h"
+#include "trig.h"
+
+extern u8 ewram[];
+extern struct MusicPlayerInfo gMPlay_BGM;
+extern u8 gPokeblockMonID;
+extern s16 gPokeblockGain;
+
+extern const u8 gPokeblockRed_Pal[];
+extern const u8 gPokeblockBlue_Pal[];
+extern const u8 gPokeblockPink_Pal[];
+extern const u8 gPokeblockGreen_Pal[];
+extern const u8 gPokeblockYellow_Pal[];
+extern const u8 gPokeblockPurple_Pal[];
+extern const u8 gPokeblockIndigo_Pal[];
+extern const u8 gPokeblockBrown_Pal[];
+extern const u8 gPokeblockLiteBlue_Pal[];
+extern const u8 gPokeblockOlive_Pal[];
+extern const u8 gPokeblockGray_Pal[];
+extern const u8 gPokeblockBlack_Pal[];
+extern const u8 gPokeblockWhite_Pal[];
+extern const u8 gPokeblockGold_Pal[];
+extern const u8 gPokeblock_Gfx[];
+extern const u8 gBattleTerrainTiles_Building[];
+extern const u8 gUnknown_08E782FC[];
+extern const u8 gBattleTerrainPalette_BattleTower[];
+extern const struct CompressedSpriteSheet gUnknown_083F7F74;
+extern const struct CompressedSpritePalette gUnknown_083F7F7C;
+
+bool8 IsPokeSpriteNotFlipped(u16 species);
+
+// this file's functions
+static void sub_8147B04(void);
+static void sub_81481DC(void);
+static void sub_814825C(void);
+static u8 sub_81480B4(void);
+static u8 CreatePokeblockSprite(void);
+static u8 PokeblockFeed_CreatePokeSprite(struct Pokemon* mon);
+static bool8 sub_8147B20(struct Pokemon* mon);
+static void LaunchPokeblockFeedTask(u8);
+static void sub_8148044(u8);
+static void sub_8148078(struct Sprite* sprite);
+static void Task_PrintAtePokeblockText(u8 taskID);
+static void Task_PaletteFadeToReturn(u8 taskID);
+static void SetPokeblockFeedSpritePal(u8);
+static void sub_8148108(u8, bool8);
+static bool8 sub_8148540(void);
+static bool8 sub_81485CC(void);
+static bool8 FreePokeSpriteMatrix(void);
+void sub_8148710(void);
+static void SpriteCB_ThrownPokeblock(struct Sprite* sprite);
+static void sub_814862C(void);
+
+// EWRAM
+EWRAM_DATA static struct CompressedSpritePalette sPokeblockFeedSpritePal = {0};
+
+// IWRAM common
+struct Sprite* gPokeblockFeedPokeSprite;
+u16 gPokeblockFeedMonSpecies;
+bool8 gPokeblockMonNotFlipped;
+u8 gPokeblockFeedMonSpriteID;
+u8 gPokeblockFeedMonNature;
+u16 gUnknown_03005F34;
+u8 gPokeblockFeedUnused0;
+u8 gUnknown_03005F3C;
+u8 gUnknown_03005F40;
+struct Sprite gPokeblockFeedPokeSpriteCopy;
+u16 gUnknown_03005F94;
+s16 gUnknown_03005FA0[24];
+
+// rodata
+
+static const u8 sNatureToMonPokeblockAnim[][2] =
+{
+ { 0, 0 }, // HARDY
+ { 3, 0 }, // LONELY
+ { 4, 1 }, // BRAVE
+ { 5, 0 }, // ADAMANT
+ { 10, 0 }, // NAUGHTY
+ { 13, 0 }, // BOLD
+ { 15, 0 }, // DOCILE
+ { 16, 2 }, // RELAXED
+ { 18, 0 }, // IMPISH
+ { 19, 0 }, // LAX
+ { 20, 0 }, // TIMID
+ { 25, 0 }, // HASTY
+ { 27, 3 }, // SERIOUS
+ { 28, 0 }, // JOLLY
+ { 29, 0 }, // NAIVE
+ { 33, 4 }, // MODEST
+ { 36, 0 }, // MILD
+ { 37, 0 }, // QUIET
+ { 39, 0 }, // BASHFUL
+ { 42, 0 }, // RASH
+ { 45, 0 }, // CALM
+ { 46, 5 }, // GENTLE
+ { 47, 6 }, // SASSY
+ { 48, 0 }, // CAREFUL
+ { 53, 0 }, // QUIRKY
+};
+
+static const s16 sMonPokeblockAnims[][10] =
+{
+ // HARDY
+ { 0, 4, 0, 8, 24, 0, 0, 0, 12, 0},
+ { 0, 4, 0, 16, 24, 0, 0, 0, 12, 0},
+ { 0, 4, 0, 32, 32, 0, 0, 0, 16, 1},
+
+ // LONELY
+ { 0, 3, 6, 0, 48, 0, 0, 0, 24, 1},
+
+ // BRAVE
+ { 64, 16, -24, 0, 32, 0, 0, 0, 0, 1},
+
+ // ADAMANT
+ { 0, 4, 8, 0, 16, 0, -8, 0, 0, 0},
+ { 0, 0, 0, 0, 16, 0, 0, 0, 0, 0},
+ { 0, 4, 8, 0, 16, 0, -8, 0, 0, 0},
+ { 0, 0, 0, 0, 16, 0, 0, 0, 0, 0},
+ { 0, 4, -16, 0, 4, 0, 16, 0, 0, 1},
+
+ // NAUGHTY
+ { 0, 3, 6, 0, 12, 0, 0, 0, 6, 0},
+ { 0, 3, -6, 0, 12, 0, 0, 0, 6, 0},
+ { 0, 16, 16, 0, 45, 1, 0, 0, 0, 1},
+
+ // BOLD
+ { 0, 16, 0, 24, 32, 0, 0, 0, 16, 0},
+ { 0, 16, 0, 23, 32, 0, 0, 0, 16, 1},
+
+ // DOCILE
+ { 0, 0, 0, 0, 80, 0, 0, 0, 0, 1},
+
+ // RELAXED
+ { 0, 2, 8, 0, 32, 0, 0, 0, 0, 0},
+ { 0, 2, -8, 0, 32, 0, 0, 0, 0, 1},
+
+ // IMPISH
+ { 0, 32, 2, 1, 48, 1, 0, 0, 24, 1},
+
+ // LAX
+ { 0, 2, 16, 16, 128, 0, 0, 0, 0, 1},
+
+ // TIMID
+ { 0, 2, -8, 0, 48, 0, -24, 0, 0, 0},
+ { 0, 0, 0, 0, 8, 0, 0, 0, 0, 0},
+ { 64, 32, 2, 0, 36, 0, 0, 0, 0, 0},
+ { 0, 0, 0, 0, 8, 0, 0, 0, 0, 0},
+ { 0, 2, 8, 0, 48, 0, 24, 0, 0, 1},
+
+ // HASTY
+ { 64, 24, 16, 0, 32, 0, 0, 0, 0, 0},
+ { 0, 28, 2, 1, 32, 1, 0, 0, 16, 1},
+
+ // SERIOUS
+ { 0, 0, 0, 0, 32, 0, 0, 0, 0, 1},
+
+ // JOLLY
+ { 64, 16, -16, 2, 48, 0, 0, 0, 32, 1},
+
+ // NAIVE
+ { 0, 12, -8, 4, 24, 0, 8, 0, 12, 0},
+ { 0, 12, 8, 8, 24, 0, -16, 0, 12, 0},
+ { 0, 12, -8, 16, 24, 0, 16, 0, 12, 0},
+ { 0, 12, 8, 28, 24, 0, -8, 0, 12, 1},
+
+ // MODEST
+ { 0, 0, 0, 0, 8, 0, 0, 0, 0, 0},
+ { 64, 16, -4, 0, 32, 0, 0, 0, 0, 0},
+ { 0, 0, 0, 0, 8, 0, 0, 0, 0, 1},
+
+ // MILD
+ { 128, 4, 0, 8, 64, 0, 0, 0, 0, 1},
+
+ // QUIET
+ { 0, 2, 16, 0, 48, 0, 0, 0, 0, 0},
+ { 128, 2, 16, 0, 48, 0, 0, 0, 0, 1},
+
+ // BASHFUL
+ { 0, 2, -4, 0, 48, 0, -48, 0, 0, 0},
+ { 0, 0, 0, 0, 80, 0, 0, 0, 0, 0},
+ { 0, 2, 8, 0, 24, 0, 48, 0, 0, 1},
+
+ // RASH
+ { 64, 4, 64, 58, 52, 0, -88, 0, 0, 0},
+ { 0, 0, 0, 0, 80, 0, 0, 0, 0, 0},
+ { 0, 24, 80, 0, 32, 0, 88, 0, 0, 1},
+
+ // CALM
+ { 0, 2, 16, 4, 64, 0, 0, 0, 0, 1},
+
+ // GENTLE
+ { 0, 0, 0, 0, 32, 0, 0, 0, 0, 1},
+
+ // SASSY
+ { 0, 0, 0, 0, 42, 0, 0, 0, 0, 1},
+
+ // CAREFUL
+ { 0, 4, 0, 8, 24, 0, 0, 0, 12, 0},
+ { 0, 0, 0, 0, 12, 0, 0, 0, 0, 0},
+ { 0, 4, 0, 12, 24, 0, 0, 0, 12, 0},
+ { 0, 0, 0, 0, 12, 0, 0, 0, 0, 0},
+ { 0, 4, 0, 4, 24, 0, 0, 0, 12, 1},
+
+ // QUIRKY
+ { 0, 4, 16, 12, 64, 0, 0, 0, 0, 0},
+ { 0, -4, 16, 12, 64, 0, 0, 0, 0, 1},
+};
+
+static const union AffineAnimCmd sSpriteAffineAnim_8411E90[] =
+{
+ AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_END
+};
+
+static const union AffineAnimCmd sSpriteAffineAnim_8411EA0[] =
+{
+ AFFINEANIMCMD_FRAME(0, 0, 12, 1),
+ AFFINEANIMCMD_FRAME(0, 0, 0, 30),
+ AFFINEANIMCMD_FRAME(0, 0, -12, 1),
+ AFFINEANIMCMD_END
+};
+
+static const union AffineAnimCmd sSpriteAffineAnim_8411EC0[] =
+{
+ AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0, 0, 12, 1),
+ AFFINEANIMCMD_FRAME(0, 0, 0, 28),
+ AFFINEANIMCMD_FRAME(0, 0, -4, 3),
+ AFFINEANIMCMD_END
+};
+
+static const union AffineAnimCmd sSpriteAffineAnim_8411EE8[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 16),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 32),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 16),
+ AFFINEANIMCMD_END
+};
+
+static const union AffineAnimCmd sSpriteAffineAnim_8411F08[] =
+{
+ AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 16),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 32),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 16),
+ AFFINEANIMCMD_END
+};
+
+static const union AffineAnimCmd sSpriteAffineAnim_8411F30[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 8),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 16),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 8),
+ AFFINEANIMCMD_END
+};
+
+static const union AffineAnimCmd sSpriteAffineAnim_8411F50[] =
+{
+ AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 8),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 16),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 8),
+ AFFINEANIMCMD_END
+};
+
+static const union AffineAnimCmd sSpriteAffineAnim_8411F78[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 8),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 32),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 8),
+ AFFINEANIMCMD_END
+};
+
+static const union AffineAnimCmd sSpriteAffineAnim_8411F98[] =
+{
+ AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 8),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 32),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 8),
+ AFFINEANIMCMD_END
+};
+
+static const union AffineAnimCmd sSpriteAffineAnim_8411FC0[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 4),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 24),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 4),
+ AFFINEANIMCMD_END
+};
+
+static const union AffineAnimCmd sSpriteAffineAnim_8411FE0[] =
+{
+ AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -1, 4),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 24),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 4),
+ AFFINEANIMCMD_END
+};
+
+static const union AffineAnimCmd sSpriteAffineAnim_8412008[] =
+{
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 24),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 16),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -12, 2),
+ AFFINEANIMCMD_END
+};
+
+static const union AffineAnimCmd sSpriteAffineAnim_8412028[] =
+{
+ AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 1, 24),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 16),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -12, 2),
+ AFFINEANIMCMD_END
+};
+
+static const union AffineAnimCmd *const sSpriteAffineAnimTable_8412050[] =
+{
+ sSpriteAffineAnim_8411E90,
+ sSpriteAffineAnim_8411EA0,
+ sSpriteAffineAnim_8411EE8,
+ sSpriteAffineAnim_8411F30,
+ sSpriteAffineAnim_8411F78,
+ sSpriteAffineAnim_8411FC0,
+ sSpriteAffineAnim_8412008,
+ sSpriteAffineAnim_8411E90,
+ sSpriteAffineAnim_8411E90,
+ sSpriteAffineAnim_8411E90,
+ sSpriteAffineAnim_8411E90,
+ sSpriteAffineAnim_8411EC0,
+ sSpriteAffineAnim_8411F08,
+ sSpriteAffineAnim_8411F50,
+ sSpriteAffineAnim_8411F98,
+ sSpriteAffineAnim_8411FE0,
+ sSpriteAffineAnim_8412028,
+ sSpriteAffineAnim_8411E90,
+ sSpriteAffineAnim_8411E90,
+ sSpriteAffineAnim_8411E90,
+ sSpriteAffineAnim_8411E90,
+};
+
+static const u8* const sPokeblocksPals[] =
+{
+ gPokeblockRed_Pal,
+ gPokeblockBlue_Pal,
+ gPokeblockPink_Pal,
+ gPokeblockGreen_Pal,
+ gPokeblockYellow_Pal,
+ gPokeblockPurple_Pal,
+ gPokeblockIndigo_Pal,
+ gPokeblockBrown_Pal,
+ gPokeblockLiteBlue_Pal,
+ gPokeblockOlive_Pal,
+ gPokeblockGray_Pal,
+ gPokeblockBlack_Pal,
+ gPokeblockWhite_Pal,
+ gPokeblockGold_Pal
+};
+
+static const union AffineAnimCmd sSpriteAffineAnim_84120DC[] =
+{
+ AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_END
+};
+
+static const union AffineAnimCmd *const sSpriteAffineAnimTable_84120EC[] =
+{
+ sSpriteAffineAnim_84120DC
+};
+
+static const union AffineAnimCmd sSpriteAffineAnim_84120F0[] =
+{
+ AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 1),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 1),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 1),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -8, 1),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 16, 1),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 16, 1),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 16, 1),
+ AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_END
+};
+
+static const union AffineAnimCmd sSpriteAffineAnim_8412148[] =
+{
+ AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 1),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 1),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 1),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 1),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 0, 8),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -16, 1),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -16, 1),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, -16, 1),
+ AFFINEANIMCMD_FRAME(-0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_END
+};
+
+static const union AffineAnimCmd *const sSpriteAffineAnimTable_84121A0[] =
+{
+ sSpriteAffineAnim_84120DC
+};
+
+static const union AffineAnimCmd *const sSpriteAffineAnimTable_84121A4[] =
+{
+ sSpriteAffineAnim_84120F0
+};
+
+static const union AffineAnimCmd *const sSpriteAffineAnimTable_84121A8[] =
+{
+ sSpriteAffineAnim_8412148
+};
+
+static const struct OamData sThrownPokeblockOamData =
+{
+ .y = 0,
+ .affineMode = 3,
+ .objMode = 0,
+ .mosaic = 0,
+ .bpp = 0,
+ .shape = 0,
+ .x = 0,
+ .matrixNum = 0,
+ .size = 0,
+ .tileNum = 0,
+ .priority = 1,
+ .paletteNum = 0,
+ .affineParam = 0,
+};
+
+static const union AnimCmd sThrownPokeblockSpriteAnim[] =
+{
+ ANIMCMD_FRAME(0, 0),
+ ANIMCMD_END
+};
+
+static const union AnimCmd *const sThrownPokeblockAnimTable[] =
+{
+ sThrownPokeblockSpriteAnim,
+};
+
+static const union AffineAnimCmd sSpriteAffineAnim_84121C0[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(-8, -8, 0, 1),
+ AFFINEANIMCMD_JUMP(1)
+};
+
+static const union AffineAnimCmd *const sThrownPokeblockAffineAnimTable[] =
+{
+ sSpriteAffineAnim_84121C0
+};
+
+static const struct CompressedSpriteSheet sUnknown_084121DC =
+{
+ gPokeblock_Gfx, 0x20, 14818
+};
+
+static const struct SpriteTemplate sThrownPokeblockSpriteTemplate =
+{
+ .tileTag = 14818,
+ .paletteTag = 14818,
+ .oam = &sThrownPokeblockOamData,
+ .anims = sThrownPokeblockAnimTable,
+ .images = NULL,
+ .affineAnims = sThrownPokeblockAffineAnimTable,
+ .callback = SpriteCB_ThrownPokeblock
+};
+
+// code
+
+static void CB2_PokeblockFeed(void)
+{
+ AnimateSprites();
+ BuildOamBuffer();
+ RunTasks();
+ UpdatePaletteFade();
+}
+
+static void VBlankCB_PokeblockFeed(void)
+{
+ LoadOam();
+ ProcessSpriteCopyRequests();
+ TransferPlttBuffer();
+}
+
+static bool8 TransitionToPokeblockFeedScene(void)
+{
+ switch (gMain.state)
+ {
+ case 0:
+ sub_80F9438();
+ sub_80F9368();
+ sub_8147B04();
+ gMain.state++;
+ break;
+ case 1:
+ ResetPaletteFade();
+ gPaletteFade.bufferTransferDisabled = 1;
+ gMain.state++;
+ break;
+ case 2:
+ ResetSpriteData();
+ gMain.state++;
+ break;
+ case 3:
+ FreeAllSpritePalettes();
+ gMain.state++;
+ break;
+ case 4:
+ SetUpWindowConfig(&gWindowConfig_81E6E50);
+ gMain.state++;
+ break;
+ case 5:
+ MultistepInitMenuWindowBegin(&gWindowConfig_81E6E50);
+ gMain.state++;
+ break;
+ case 6:
+ if (MultistepInitMenuWindowContinue())
+ {
+ ewram[0x1FFFF] = 0;
+ gMain.state++;
+ }
+ break;
+ case 7:
+ if (sub_8147B20(&gPlayerParty[gPokeblockMonID]))
+ {
+ gMain.state++;
+ }
+ break;
+ case 8:
+ ewram[0x1FFFD] = sub_81480B4();
+ gMain.state++;
+ break;
+ case 9:
+ ewram[0x1FFFE] = PokeblockFeed_CreatePokeSprite(&gPlayerParty[gPokeblockMonID]);
+ gMain.state++;
+ break;
+ case 10:
+ MenuDrawTextWindow(0, 14, 29, 19);
+ gMain.state++;
+ break;
+ case 11:
+ if (sub_8055870() != 1)
+ {
+ gMain.state++;
+ }
+ break;
+ case 12:
+ {
+ u16 savedIME = REG_IME;
+ REG_IME = 0;
+ REG_IE |= 1;
+ REG_IME = savedIME;
+ REG_DISPSTAT |= 8;
+ SetVBlankCallback(VBlankCB_PokeblockFeed);
+ gMain.state++;
+ }
+ case 13:
+ BeginNormalPaletteFade(-1, 0, 0x10, 0, 0);
+ gPaletteFade.bufferTransferDisabled = 0;
+ SetMainCallback2(CB2_PokeblockFeed);
+ return TRUE;
+ }
+ return FALSE;
+}
+
+void CB2_PreparePokeblockFeedScene(void)
+{
+ while (1)
+ {
+ if (TransitionToPokeblockFeedScene() == 1)
+ {
+ LaunchPokeblockFeedTask(1);
+ break;
+ }
+ if (sub_80F9344() == 1)
+ break;
+ }
+}
+
+static void sub_8147B04(void)
+{
+ REG_BG1CNT = 0x1D02l;
+ REG_DISPCNT = 0x1340;
+}
+
+static bool8 sub_8147B20(struct Pokemon* mon)
+{
+ u16 species;
+ u32 PiD, TiD;
+ switch (ewram[0x1FFFF])
+ {
+ case 0:
+ species = GetMonData(mon, MON_DATA_SPECIES2);
+ PiD = GetMonData(mon, MON_DATA_PERSONALITY);
+ HandleLoadSpecialPokePic(&gMonFrontPicTable[species], gMonFrontPicCoords[species].coords, gMonFrontPicCoords[species].y_offset, 0x2000000, gUnknown_081FAF4C[1], species, PiD);
+ ewram[0x1FFFF]++;
+ break;
+ case 1:
+ {
+ const struct CompressedSpritePalette* palette;
+
+ species = GetMonData(mon, MON_DATA_SPECIES2);
+ PiD = GetMonData(mon, MON_DATA_PERSONALITY);
+ TiD = GetMonData(mon, MON_DATA_OT_ID);
+ palette = GetMonSpritePalStructFromOtIdPersonality(species, TiD, PiD);
+ LoadCompressedObjectPalette(palette);
+ GetMonSpriteTemplate_803C56C(palette->tag, 1);
+ ewram[0x1FFFF]++;
+ }
+ break;
+ case 2:
+ LoadCompressedObjectPic(&gUnknown_083F7F74);
+ ewram[0x1FFFF]++;
+ break;
+ case 3:
+ LoadCompressedObjectPalette(&gUnknown_083F7F7C);
+ ewram[0x1FFFF]++;
+ break;
+ case 4:
+ LoadCompressedObjectPic(&sUnknown_084121DC);
+ ewram[0x1FFFF]++;
+ break;
+ case 5:
+ SetPokeblockFeedSpritePal(gScriptItemId);
+ LoadCompressedObjectPalette(&sPokeblockFeedSpritePal);
+ ewram[0x1FFFF]++;
+ break;
+ case 6:
+ LZDecompressVram(gBattleTerrainTiles_Building, (void*)(VRAM));
+ ewram[0x1FFFF]++;
+ break;
+ case 7:
+ LZDecompressVram(gUnknown_08E782FC, (void*)(VRAM + 0xE800));
+ ewram[0x1FFFF]++;
+ break;
+ case 8:
+ LoadCompressedPalette(gBattleTerrainPalette_BattleTower, 0x20, 0x60);
+ ewram[0x1FFFF] = 0;
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static void SetPokeblockFeedSpritePal(u8 pkbID)
+{
+ u8 color = GetPokeblockData(&gSaveBlock1.pokeblocks[pkbID], PBLOCK_COLOR);
+ sPokeblockFeedSpritePal.data = sPokeblocksPals[color - 1];
+ sPokeblockFeedSpritePal.tag = 0x39E2;
+}
+
+static void sub_8147CC8(u8 taskID)
+{
+ if (!gPaletteFade.active)
+ {
+ switch (gTasks[taskID].data[0])
+ {
+ case 0:
+ gUnknown_03005F3C = 0;
+ gUnknown_03005F94 = 0;
+ sub_81481DC();
+ break;
+ case 255:
+ sub_8148108(ewram[0x1FFFD], gTasks[taskID].data[1]);
+ break;
+ case 269:
+ ewram[0x1FFFC] = CreatePokeblockSprite();
+ break;
+ case 281:
+ sub_8148044(ewram[0x1FFFE]);
+ break;
+ case 297:
+ gTasks[taskID].func = Task_PrintAtePokeblockText;
+ return;
+ }
+ if (gUnknown_03005F94 < gUnknown_03005F34)
+ sub_814825C();
+ else if (gUnknown_03005F94 == gUnknown_03005F34)
+ gTasks[taskID].data[0] = 254;
+
+ gUnknown_03005F94++;
+ gTasks[taskID].data[0]++;
+ }
+}
+
+static void LaunchPokeblockFeedTask(u8 a0)
+{
+ u8 taskID = CreateTask(sub_8147CC8, 0);
+ gTasks[taskID].data[0] = 0;
+ gTasks[taskID].data[1] = a0;
+}
+
+static void Task_WaitForAtePokeblockText(u8 taskID)
+{
+ if (MenuUpdateWindowText() == 1)
+ gTasks[taskID].func = Task_PaletteFadeToReturn;
+}
+
+static void Task_PrintAtePokeblockText(u8 taskID)
+{
+ struct Pokemon* mon = &gPlayerParty[gPokeblockMonID];
+ struct Pokeblock* pokeblock = &gSaveBlock1.pokeblocks[gScriptItemId];
+
+ gPokeblockGain = PokeblockGetGain(GetNature(mon), pokeblock);
+ GetMonNickname(mon, gStringVar1);
+ PokeblockCopyName(pokeblock, gStringVar2);
+
+ if (gPokeblockGain == 0)
+ StringExpandPlaceholders(gStringVar4, gContestStatsText_NormallyAte);
+ else if (gPokeblockGain > 0)
+ StringExpandPlaceholders(gStringVar4, gContestStatsText_HappilyAte);
+ else
+ StringExpandPlaceholders(gStringVar4, gContestStatsText_DisdainfullyAte);
+
+ MenuPrintMessage(gStringVar4, 1, 15);
+ gTasks[taskID].func = Task_WaitForAtePokeblockText;
+}
+
+static void Task_ReturnAfterPaletteFade(u8 taskID)
+{
+ if (!gPaletteFade.active)
+ {
+ m4aMPlayVolumeControl(&gMPlay_BGM, -1, 256);
+ SetMainCallback2(gMain.savedCallback);
+ DestroyTask(taskID);
+ }
+}
+
+static void Task_PaletteFadeToReturn(u8 taskID)
+{
+ BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
+ gTasks[taskID].func = Task_ReturnAfterPaletteFade;
+}
+
+static u8 PokeblockFeed_CreatePokeSprite(struct Pokemon* mon)
+{
+ u16 species = GetMonData(mon, MON_DATA_SPECIES2);
+ u8 spriteID = CreateSprite(&gUnknown_02024E8C, 48, 80, 2);
+
+ gPokeblockFeedMonSpecies = species;
+ gPokeblockFeedMonSpriteID = spriteID;
+ gPokeblockFeedMonNature = GetNature(mon);
+ gSprites[spriteID].data2 = species;
+ gSprites[spriteID].callback = SpriteCallbackDummy;
+ gPokeblockMonNotFlipped = 1;
+ if (!IsPokeSpriteNotFlipped(species))
+ {
+ gSprites[spriteID].affineAnims = sSpriteAffineAnimTable_84120EC;
+ gSprites[spriteID].oam.affineMode = 3;
+ CalcCenterToCornerVec(&gSprites[spriteID], gSprites[spriteID].oam.shape, gSprites[spriteID].oam.size, gSprites[spriteID].oam.affineMode);
+ gPokeblockMonNotFlipped = 0;
+ }
+ return spriteID;
+}
+
+static void sub_8148044(u8 spriteID)
+{
+ gSprites[spriteID].pos1.x = 48;
+ gSprites[spriteID].pos1.y = 80;
+ gSprites[spriteID].data0 = -8;
+ gSprites[spriteID].data1 = 1;
+ gSprites[spriteID].callback = sub_8148078;
+}
+
+static void sub_8148078(struct Sprite* sprite)
+{
+ sprite->pos1.x += 4;
+ sprite->pos1.y += sprite->data0;
+ sprite->data0 += sprite->data1;
+ if (sprite->data0 == 0)
+ PlayCry1(sprite->data2, 0);
+ if (sprite->data0 == 9)
+ sprite->callback = SpriteCallbackDummy;
+}
+
+static u8 sub_81480B4(void)
+{
+ u8 spriteID = sub_810BA50(188, 100, 2);
+ gSprites[spriteID].oam.affineMode = 1;
+ gSprites[spriteID].affineAnims = sSpriteAffineAnimTable_84121A0;
+ gSprites[spriteID].callback = SpriteCallbackDummy;
+ InitSpriteAffineAnim(&gSprites[spriteID]);
+ return spriteID;
+}
+
+static void sub_8148108(u8 spriteID, bool8 a1)
+{
+ FreeOamMatrix(gSprites[spriteID].oam.matrixNum);
+ gSprites[spriteID].oam.affineMode = 3;
+ if (!a1)
+ gSprites[spriteID].affineAnims = sSpriteAffineAnimTable_84121A4;
+ else
+ gSprites[spriteID].affineAnims = sSpriteAffineAnimTable_84121A8;
+ InitSpriteAffineAnim(&gSprites[spriteID]);
+}
+
+static u8 CreatePokeblockSprite(void)
+{
+ u8 spriteID = CreateSprite(&sThrownPokeblockSpriteTemplate, 174, 84, 1);
+ gSprites[spriteID].data0 = -12;
+ gSprites[spriteID].data1 = 1;
+ return spriteID;
+}
+
+static void SpriteCB_ThrownPokeblock(struct Sprite* sprite)
+{
+ sprite->pos1.x -= 4;
+ sprite->pos1.y += sprite->data0;
+ sprite->data0 += sprite->data1;
+ if (sprite->data0 == 10)
+ DestroySprite(sprite);
+}
+
+static void sub_81481DC(void)
+{
+ u8 animID, i;
+
+ gUnknown_03005F34 = 1;
+ animID = sNatureToMonPokeblockAnim[gPokeblockFeedMonNature][0];
+ for (i = 0; i < 8; i++, animID++)
+ {
+ gUnknown_03005F34 += sMonPokeblockAnims[animID][4];
+ if (sMonPokeblockAnims[animID][9] == 1)
+ break;
+ }
+}
+
+static void sub_814825C(void)
+{
+ switch (gUnknown_03005F3C)
+ {
+ case 0:
+ gUnknown_03005F40 = sNatureToMonPokeblockAnim[gPokeblockFeedMonNature][0];
+ gPokeblockFeedPokeSprite = &gSprites[gPokeblockFeedMonSpriteID];
+ gPokeblockFeedPokeSpriteCopy = *gPokeblockFeedPokeSprite;
+ gUnknown_03005F3C = 10;
+ break;
+ case 1 ... 9:
+ break;
+ case 10:
+ sub_8148540();
+ if (sNatureToMonPokeblockAnim[gPokeblockFeedMonNature][1] != 0)
+ {
+ gPokeblockFeedPokeSprite->oam.affineMode = 3;
+ gPokeblockFeedPokeSprite->oam.matrixNum = 0;
+ gPokeblockFeedPokeSprite->affineAnims = sSpriteAffineAnimTable_8412050;
+ InitSpriteAffineAnim(gPokeblockFeedPokeSprite);
+ }
+ gUnknown_03005F3C = 50;
+ case 50:
+ if (sNatureToMonPokeblockAnim[gPokeblockFeedMonNature][1] != 0)
+ {
+ if (gPokeblockMonNotFlipped == 0)
+ StartSpriteAffineAnim(gPokeblockFeedPokeSprite, sNatureToMonPokeblockAnim[gPokeblockFeedMonNature][1] + 10);
+ else
+ StartSpriteAffineAnim(gPokeblockFeedPokeSprite, sNatureToMonPokeblockAnim[gPokeblockFeedMonNature][1]);
+ }
+ gUnknown_03005F3C = 60;
+ break;
+ case 60:
+ if (sub_81485CC() == 1)
+ {
+ if (gUnknown_03005FA0[9] == 0)
+ {
+ gUnknown_03005F40++;
+ sub_8148540();
+ gUnknown_03005F3C = 60;
+ }
+ else
+ {
+ FreeOamMatrix(gPokeblockFeedPokeSprite->oam.matrixNum);
+ gUnknown_03005F3C = 70;
+ }
+ }
+ break;
+ case 70:
+ FreePokeSpriteMatrix();
+ gUnknown_03005F40 = 0;
+ gUnknown_03005F3C = 0;
+ break;
+ case 71 ... 90:
+ break;
+ }
+}
+
+static bool8 sub_8148540(void)
+{
+ u8 i;
+ for (i = 0; i < 10; i++)
+ gUnknown_03005FA0[i] = sMonPokeblockAnims[gUnknown_03005F40][i];
+ if (gUnknown_03005FA0[4] == 0)
+ return TRUE;
+ else
+ {
+ gUnknown_03005FA0[10] = Sin(gUnknown_03005FA0[0], gUnknown_03005FA0[2]);
+ gUnknown_03005FA0[11] = Cos(gUnknown_03005FA0[0], gUnknown_03005FA0[3]);
+ gUnknown_03005FA0[12] = gUnknown_03005FA0[4];
+ gUnknown_03005FA0[13] = gPokeblockFeedPokeSprite->pos2.x;
+ gUnknown_03005FA0[14] = gPokeblockFeedPokeSprite->pos2.y;
+ sub_8148710();
+ gUnknown_03005FA0[4] = gUnknown_03005FA0[12];
+ sub_814862C();
+ gUnknown_03005FA0[4] = gUnknown_03005FA0[12];
+ return FALSE;
+ }
+}
+
+#define ewram1D000 ((u16 *)(ewram + 0x1D000))
+#define ewram1D400 ((u16 *)(ewram + 0x1D400))
+
+static bool8 sub_81485CC(void)
+{
+ u16 var = gUnknown_03005FA0[12] - gUnknown_03005FA0[4];
+
+ gPokeblockFeedPokeSprite->pos2.x = ewram1D000[var];
+ gPokeblockFeedPokeSprite->pos2.y = ewram1D400[var];
+
+ if (--gUnknown_03005FA0[4] == 0)
+ return TRUE;
+ else
+ return FALSE;
+}
+
+static bool8 FreePokeSpriteMatrix(void)
+{
+ FreeSpriteOamMatrix(gPokeblockFeedPokeSprite);
+ return FALSE;
+}
+
+static void sub_814862C(void)
+{
+ u16 i;
+ u16 r8 = gUnknown_03005FA0[8];
+ u16 r7 = gUnknown_03005FA0[12] - r8;
+ s16 var3 = gUnknown_03005FA0[13] + gUnknown_03005FA0[6];
+ s16 r9 = gUnknown_03005FA0[14] + gUnknown_03005FA0[7];
+
+ for (i = 0; i < r7 - 1; i++)
+ {
+ s16* r3 = &ewram1D000[r8 + i];
+ s16 r1 = *r3 - (var3);
+
+ s16* r5 = &ewram1D400[r8 + i];
+ s16 r4 = *r5 - r9;
+
+ *r3 -= r1 * (i + 1) / r7;
+ *r5 -= r4 * (i + 1) / r7;
+ }
+
+ ewram1D000[(r8 + r7) - 1] = var3;
+ ewram1D400[(r8 + r7) - 1] = r9;
+}
+
+void sub_8148710(void)
+{
+ bool8 var_24 = FALSE;
+ s16 r8 = gUnknown_03005FA0[13] - gUnknown_03005FA0[10];
+ s16 r7 = gUnknown_03005FA0[14] - gUnknown_03005FA0[11];
+ while (1)
+ {
+ u16 r5;
+ u16 r4;
+ u16 var;
+
+ var = abs(gUnknown_03005FA0[5]);
+ r5 = var + gUnknown_03005FA0[3];
+ gUnknown_03005FA0[3] = r5;
+
+ if (gUnknown_03005FA0[2] < 0)
+ var_24 = TRUE;
+
+ r4 = gUnknown_03005FA0[12] - gUnknown_03005FA0[4];
+
+ if (gUnknown_03005FA0[4] == 0)
+ break;
+
+ if (!var_24)
+ {
+ ewram1D000[r4] = Sin(gUnknown_03005FA0[0], gUnknown_03005FA0[2] + r5 / 256) + r8;
+ ewram1D400[r4] = Cos(gUnknown_03005FA0[0], gUnknown_03005FA0[3] + r5 / 256) + r7;
+ }
+ else
+ {
+ ewram1D000[r4] = Sin(gUnknown_03005FA0[0], gUnknown_03005FA0[2] - r5 / 256) + r8;
+ ewram1D400[r4] = Cos(gUnknown_03005FA0[0], gUnknown_03005FA0[3] - r5 / 256) + r7;
+ }
+
+ gUnknown_03005FA0[0] += gUnknown_03005FA0[1];
+ gUnknown_03005FA0[0] &= 0xFF;
+ gUnknown_03005FA0[4]--;
+ }
+}
diff --git a/src/pokedex.c b/src/pokedex.c
index d9659348d..894fb1a0a 100644
--- a/src/pokedex.c
+++ b/src/pokedex.c
@@ -15,7 +15,7 @@
#include "pokedex_cry_screen.h"
#include "pokemon.h"
#include "rng.h"
-#include "rom4.h"
+#include "overworld.h"
#include "songs.h"
#include "sound.h"
#include "species.h"
diff --git a/src/pokemon_1.c b/src/pokemon_1.c
index c65bfa185..1d597cb17 100644
--- a/src/pokemon_1.c
+++ b/src/pokemon_1.c
@@ -4,7 +4,7 @@
#include "main.h"
#include "pokemon.h"
#include "rng.h"
-#include "rom4.h"
+#include "overworld.h"
#include "species.h"
#include "sprite.h"
#include "string_util.h"
@@ -17,9 +17,9 @@
#define LOHALF(n) ((n) & 0xFFFF)
extern u8 unk_2000000[];
-extern u16 word_2024E82;
+extern u16 gMoveToLearn;
-static EWRAM_DATA u8 byte_2024E88 = 0;
+static EWRAM_DATA u8 sLearningMoveTableID = 0;
u8 gPlayerPartyCount;
struct Pokemon gPlayerParty[6];
@@ -69,6 +69,7 @@ void ZeroEnemyPartyMons(void)
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);
@@ -467,10 +468,10 @@ void CalculateMonStats(struct Pokemon *mon)
SetMonData(mon, MON_DATA_HP, (u8 *)&currentHP);
}
-void sub_803B4B4(struct Pokemon *src, struct Pokemon *dest)
+void sub_803B4B4(const struct BoxPokemon *src, struct Pokemon *dest)
{
u32 value = 0;
- memcpy(&dest->box, &src->box, sizeof(struct BoxPokemon));
+ dest->box = *src;
SetMonData(dest, MON_DATA_STATUS, (u8 *)&value);
SetMonData(dest, MON_DATA_HP, (u8 *)&value);
SetMonData(dest, MON_DATA_MAX_HP, (u8 *)&value);
@@ -583,29 +584,33 @@ void GiveBoxMonInitialMoveset(struct BoxPokemon *boxMon)
}
}
-u16 sub_803B7C8(struct Pokemon *mon, u8 a2)
+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);
- if (a2)
+ // 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)
{
- byte_2024E88 = retVal;
+ sLearningMoveTableID = 0;
- while ((gLevelUpLearnsets[species][byte_2024E88] & 0xFE00) != (level << 9))
+ while ((gLevelUpLearnsets[species][sLearningMoveTableID] & 0xFE00) != (level << 9))
{
- byte_2024E88++;
- if (gLevelUpLearnsets[species][byte_2024E88] == (u16)-1)
+ sLearningMoveTableID++;
+ if (gLevelUpLearnsets[species][sLearningMoveTableID] == 0xFFFF)
return 0;
}
}
- if ((gLevelUpLearnsets[species][byte_2024E88] & 0xFE00) == (level << 9))
+ if ((gLevelUpLearnsets[species][sLearningMoveTableID] & 0xFE00) == (level << 9))
{
- word_2024E82 = (gLevelUpLearnsets[species][byte_2024E88] & 0x1FF);
- byte_2024E88++;
- retVal = GiveMoveToMon(mon, word_2024E82);
+ gMoveToLearn = (gLevelUpLearnsets[species][sLearningMoveTableID] & 0x1FF);
+ sLearningMoveTableID++;
+ retVal = GiveMoveToMon(mon, gMoveToLearn);
}
return retVal;
diff --git a/src/pokemon_2.c b/src/pokemon_2.c
index a77edbdb2..f02ce6170 100644
--- a/src/pokemon_2.c
+++ b/src/pokemon_2.c
@@ -80,125 +80,31 @@ u8 CountAliveMons(u8 a1)
return retVal;
}
-#ifdef NONMATCHING
u8 sub_803C434(u8 a1)
{
- u32 status0 = GetBankIdentity(a1);
- register u8 status_ asm("r4");
- u8 status;
- register u32 mask1 asm("r1") = 1;
- register u32 mask2 asm("r6") = 1;
-
- status_ = mask2;
- status_ &= status0;
- status = status_ ^ mask1;
-
- {
- register u16 val_ asm("r1") = gBattleTypeFlags;
- u32 val = mask2;
- val &= val_;
- if (!val)
- {
- return GetBankByPlayerAI(status);
- }
- }
+ u8 status = GetBankIdentity(a1) & 1;
+ status ^= 1;
+ if (!(gBattleTypeFlags & BATTLE_TYPE_DOUBLE))
+ return GetBankByPlayerAI(status);
if (CountAliveMons(0) > 1)
{
- u16 r = Random();
- register u32 val asm("r1") = mask2;
- val &= r;
- if (!val)
- {
- u32 status2 = 2;
- status2 ^= status;
- return GetBankByPlayerAI(status2);
- }
+ u8 val;
+
+ if ((Random() & 1) == 0)
+ val = status ^ 2;
else
- {
- return GetBankByPlayerAI(status);
- }
+ val = status;
+ return GetBankByPlayerAI(val);
}
else
{
- if (gAbsentBankFlags & gBitTable[status])
+ if ((gAbsentBankFlags & gBitTable[status]))
return GetBankByPlayerAI(status ^ 2);
else
return GetBankByPlayerAI(status);
}
}
-#else
-__attribute__((naked))
-u8 sub_803C434(u8 a1)
-{
- asm(".syntax unified\n\
- push {r4-r6,lr}\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- bl GetBankIdentity\n\
- movs r1, 0x1\n\
- movs r6, 0x1\n\
- adds r4, r6, 0\n\
- ands r4, r0\n\
- eors r4, r1\n\
- adds r5, r4, 0\n\
- ldr r0, _0803C45C\n\
- ldrh r1, [r0]\n\
- adds r0, r6, 0\n\
- ands r0, r1\n\
- cmp r0, 0\n\
- bne _0803C460\n\
- adds r0, r4, 0\n\
- b _0803C4AA\n\
- .align 2, 0\n\
-_0803C45C: .4byte gBattleTypeFlags\n\
-_0803C460:\n\
- movs r0, 0\n\
- bl CountAliveMons\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- cmp r0, 0x1\n\
- bls _0803C484\n\
- bl Random\n\
- adds r1, r6, 0\n\
- ands r1, r0\n\
- cmp r1, 0\n\
- bne _0803C480\n\
- movs r0, 0x2\n\
- eors r0, r4\n\
- b _0803C4AA\n\
-_0803C480:\n\
- adds r0, r4, 0\n\
- b _0803C4AA\n\
-_0803C484:\n\
- ldr r0, _0803C49C\n\
- ldrb r1, [r0]\n\
- ldr r2, _0803C4A0\n\
- lsls r0, r4, 2\n\
- adds r0, r2\n\
- ldr r0, [r0]\n\
- ands r1, r0\n\
- cmp r1, 0\n\
- bne _0803C4A4\n\
- adds r0, r4, 0\n\
- b _0803C4AA\n\
- .align 2, 0\n\
-_0803C49C: .4byte gAbsentBankFlags\n\
-_0803C4A0: .4byte gBitTable\n\
-_0803C4A4:\n\
- movs r0, 0x2\n\
- eors r5, r0\n\
- adds r0, r5, 0\n\
-_0803C4AA:\n\
- bl GetBankByPlayerAI\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- pop {r4-r6}\n\
- pop {r1}\n\
- bx r1\n\
- .syntax divided\n");
-}
-#endif
u8 GetMonGender(struct Pokemon *mon)
{
diff --git a/src/pokemon_3.c b/src/pokemon_3.c
index 515d63c44..1eff9b83c 100644
--- a/src/pokemon_3.c
+++ b/src/pokemon_3.c
@@ -11,7 +11,7 @@
#include "main.h"
#include "pokemon.h"
#include "rng.h"
-#include "rom4.h"
+#include "overworld.h"
#include "rom_8077ABC.h"
#include "rom_8094928.h"
#include "rtc.h"
@@ -457,7 +457,7 @@ u16 HoennToNationalOrder(u16 hoennNum)
return gHoennToNationalOrder[hoennNum - 1];
}
-u32 SpeciesToCryId(u16 species)
+u16 SpeciesToCryId(u16 species)
{
if (species <= 250)
return species;
@@ -1197,7 +1197,7 @@ const struct CompressedSpritePalette *GetMonSpritePalStructFromOtIdPersonality(u
return &gMonPaletteTable[species];
}
-bool8 IsHMMove2(u16 move)
+bool32 IsHMMove2(u16 move)
{
int i = 0;
while (gHMMoves[i] != 0xFFFF)
diff --git a/src/pokemon_menu.c b/src/pokemon_menu.c
new file mode 100644
index 000000000..bc5150a16
--- /dev/null
+++ b/src/pokemon_menu.c
@@ -0,0 +1,1200 @@
+#include "global.h"
+#include "pokemon.h"
+#include "pokemon_menu.h"
+#include "party_menu.h"
+#include "palette.h"
+#include "menu.h"
+#include "mail_data.h"
+#include "songs.h"
+#include "sound.h"
+#include "main.h"
+#include "overworld.h"
+#include "menu_helpers.h"
+#include "pokemon_summary_screen.h"
+#include "moves.h"
+#include "data2.h"
+#include "strings.h"
+#include "item_use.h"
+#include "item.h"
+#include "event_data.h"
+#include "mail.h"
+#include "field_player_avatar.h"
+#include "fldeff_softboiled.h"
+#include "braille_puzzles.h"
+#include "field_fadetransition.h"
+#include "field_weather.h"
+#include "field_effect.h"
+#include "field_control_avatar.h"
+#include "metatile_behavior.h"
+#include "fieldmap.h"
+#include "item_menu.h"
+#include "player_pc.h"
+
+/*
+Pokemon menu:
+ The menu that appears when you
+ click on a pokemon in
+ overworld 'pokemon' menu
+*/
+
+struct PokeMenuFieldMoveFunc
+{
+ bool8 (*func)(void);
+ u8 field_1;
+};
+
+extern u8 gUnknown_020384F0;
+extern u8 gUnknown_0202E8F4;
+extern u8 gUnknown_0202E8F5;
+extern u8 gUnknown_0202E8F6;
+extern u8 gUnknown_02038561;
+extern u16 gUnknown_0202E8F8;
+extern u8 ewram[];
+extern void (*gUnknown_03004AE4)(u8 taskID, u16 itemID, TaskFunc func);
+extern TaskFunc gUnknown_03005CF0;
+
+void sub_80E62A0(u8 arg0, struct MailStruct* arg1, void* arg2, u8 arg3);
+void sub_808A520(void);
+void sub_80A61D0(void);
+void CB2_InitFlyRegionMap(void);
+u16 GetEvolutionTargetSpecies(struct Pokemon *mon, u8 type, u16 evolutionItem);
+bool8 SetUpFieldMove_Cut(void);
+bool8 SetUpFieldMove_Flash(void);
+bool8 SetUpFieldMove_RockSmash(void);
+bool8 SetUpFieldMove_Strength(void);
+bool8 SetUpFieldMove_Teleport(void);
+bool8 SetUpFieldMove_Dig(void);
+bool8 SetUpFieldMove_SecretPower(void);
+bool8 SetUpFieldMove_SoftBoiled(void);
+bool8 SetUpFieldMove_SoftBoiled(void);
+bool8 SetUpFieldMove_SweetScent(void);
+
+#define sFieldMovesTerminator 0xFF // note: should be changed to 0xFFFF, because currently it makes it impossible to add a field move with 0xFF index
+
+// this file's functions
+static void sub_808A8A8(void);
+static void sub_808B3EC(void);
+static void sub_8089D94(u8 taskID);
+static void sub_8089E4C(u8 taskID);
+static void sub_808A5BC(u8 taskID);
+static void sub_808A8D4(u8 taskID);
+static void sub_808A73C(u8 taskID);
+static void sub_808A848(u8 taskID);
+static void sub_808AAF0(u8 taskID);
+static void sub_808ABF4(u8 taskID);
+static void sub_808AB34(u8 taskID);
+static void sub_808ABA8(u8 taskID);
+static void sub_808B224(u8 taskID);
+static void sub_808B2EC(u8 taskID);
+static void sub_808B2B4(u8 taskID);
+static void sub_808B25C(u8 taskID);
+static void sub_808B1EC(u8 taskID);
+static void sub_808B338(u8 taskID);
+static void sub_808B4A4(u8 taskID);
+static void sub_808B4EC(u8 taskID);
+static void sub_808B5E4(u8 taskID);
+static void PokemonMenu_Summary(u8 taskID);
+static void PokemonMenu_Switch(u8 taskID);
+static void PokemonMenu_Item(u8 taskID);
+static void PokemonMenu_Cancel(u8 taskID);
+static void PokemonMenu_GiveItem(u8 taskID);
+static void PokemonMenu_TakeItem(u8 taskID);
+static void PokemonMenu_TakeMail(u8 taskID);
+static void PokemonMenu_Mail(u8 taskID);
+static void PokemonMenu_ReadMail(u8 taskID);
+static void PokemonMenu_CancelSubmenu(u8 taskID);
+static void PokemonMenu_FieldMove(u8 taskID);
+static bool8 SetUpFieldMove_Waterfall(void);
+static bool8 SetUpFieldMove_Surf(void);
+static bool8 SetUpFieldMove_Fly(void);
+static bool8 SetUpFieldMove_Dive(void);
+
+// ewram data
+
+EWRAM_DATA static u8 sPokeMenuCursorPos = 0;
+EWRAM_DATA static u8 sPokeMenuOptionsNo = 0;
+EWRAM_DATA static u8 sPokeMenuOptionsOrder[8] = {0}; // 4 possible field moves and 4 default options
+
+// iwram common
+u8 gLastFieldPokeMenuOpened;
+void (*gUnknown_03005CE4)(void);
+
+// const data
+
+static const struct MenuAction2 sPokemonMenuActions[] =
+{
+ {OtherText_Summary, PokemonMenu_Summary},
+ {OtherText_Switch2, PokemonMenu_Switch},
+ {OtherText_Item, PokemonMenu_Item},
+ {gOtherText_CancelNoTerminator, PokemonMenu_Cancel},
+ {OtherText_Give2, PokemonMenu_GiveItem},
+ {OtherText_Take2, PokemonMenu_TakeItem},
+ {OtherText_Take, PokemonMenu_TakeMail},
+ {OtherText_Mail, PokemonMenu_Mail},
+ {OtherText_Read2, PokemonMenu_ReadMail},
+ {gOtherText_CancelNoTerminator, PokemonMenu_CancelSubmenu},
+ {gMoveNames[MOVE_CUT], PokemonMenu_FieldMove},
+ {gMoveNames[MOVE_FLASH], PokemonMenu_FieldMove},
+ {gMoveNames[MOVE_ROCK_SMASH], PokemonMenu_FieldMove},
+ {gMoveNames[MOVE_STRENGTH], PokemonMenu_FieldMove},
+ {gMoveNames[MOVE_SURF], PokemonMenu_FieldMove},
+ {gMoveNames[MOVE_FLY], PokemonMenu_FieldMove},
+ {gMoveNames[MOVE_DIVE], PokemonMenu_FieldMove},
+ {gMoveNames[MOVE_WATERFALL], PokemonMenu_FieldMove},
+ {gMoveNames[MOVE_TELEPORT], PokemonMenu_FieldMove},
+ {gMoveNames[MOVE_DIG], PokemonMenu_FieldMove},
+ {gMoveNames[MOVE_SECRET_POWER], PokemonMenu_FieldMove},
+ {gMoveNames[MOVE_MILK_DRINK], PokemonMenu_FieldMove},
+ {gMoveNames[MOVE_SOFT_BOILED], PokemonMenu_FieldMove},
+ {gMoveNames[MOVE_SWEET_SCENT], PokemonMenu_FieldMove},
+};
+
+static const u16 sPokeMenuFieldMoves[] =
+{
+ MOVE_CUT, MOVE_FLASH, MOVE_ROCK_SMASH, MOVE_STRENGTH,
+ MOVE_SURF, MOVE_FLY, MOVE_DIVE, MOVE_WATERFALL,
+ MOVE_TELEPORT, MOVE_DIG, MOVE_SECRET_POWER, MOVE_MILK_DRINK,
+ MOVE_SOFT_BOILED, MOVE_SWEET_SCENT, sFieldMovesTerminator,
+};
+
+static const u8 sUnknown_39F572[] = {4, 5, 9, 0};
+static const struct PartyPopupMenu sUnknown_0839F578 = {3, 6, sUnknown_39F572};
+
+static const u8 sUnknown_39F580[] = {8, 6, 9, 0};
+static const struct PartyPopupMenu sUnknown_0839F584 = {3, 9, sUnknown_39F580};
+
+static const struct PokeMenuFieldMoveFunc sFieldMoveFuncs[] =
+{
+ {SetUpFieldMove_Cut, 0x6},
+ {SetUpFieldMove_Flash, 0x9},
+ {SetUpFieldMove_RockSmash, 0x9},
+ {SetUpFieldMove_Strength, 0x9},
+ {SetUpFieldMove_Surf, 0x7},
+ {SetUpFieldMove_Fly, 0x9},
+ {SetUpFieldMove_Dive, 0x9},
+ {SetUpFieldMove_Waterfall, 0x9},
+ {SetUpFieldMove_Teleport, 0x9},
+ {SetUpFieldMove_Dig, 0x9},
+ {SetUpFieldMove_SecretPower, 0x9},
+ {SetUpFieldMove_SoftBoiled, 0x10},
+ {SetUpFieldMove_SoftBoiled, 0x10},
+ {SetUpFieldMove_SweetScent, 0x9},
+};
+
+void sub_8089A70(void)
+{
+ gPaletteFade.bufferTransferDisabled = 1;
+ OpenPartyMenu(0, 0);
+}
+
+static void sub_8089A8C(void)
+{
+ sPokeMenuOptionsNo = 0;
+ // if checking pokemon is an egg, we can't give it an item and it doesn't know any move
+ if (GetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_IS_EGG))
+ {
+ AppendToList(sPokeMenuOptionsOrder, &sPokeMenuOptionsNo, POKEMENU_SUMMARY);
+ AppendToList(sPokeMenuOptionsOrder, &sPokeMenuOptionsNo, POKEMENU_SWITCH);
+ AppendToList(sPokeMenuOptionsOrder, &sPokeMenuOptionsNo, POKEMENU_CANCEL);
+ }
+ else
+ {
+ u16 moveID, tableID;
+ for (moveID = 0; moveID < 4; moveID++) // 4, max number of possible field moves
+ {
+ for (tableID = 0; sPokeMenuFieldMoves[tableID] != sFieldMovesTerminator; tableID++)
+ {
+ if (GetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_MOVE1 + moveID) == sPokeMenuFieldMoves[tableID])
+ {
+ u8 fieldID = tableID + POKEMENU_FIRST_FIELD_MOVE_ID;
+ AppendToList(sPokeMenuOptionsOrder, &sPokeMenuOptionsNo, fieldID);
+ break;
+ }
+ }
+ }
+ AppendToList(sPokeMenuOptionsOrder, &sPokeMenuOptionsNo, POKEMENU_SUMMARY);
+
+ // can't switch a pokemon if it's the only one in the party
+ if (GetMonData(&gPlayerParty[1], MON_DATA_SPECIES) != 0)
+ AppendToList(sPokeMenuOptionsOrder, &sPokeMenuOptionsNo, POKEMENU_SWITCH);
+
+ if (ItemIsMail(GetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_HELD_ITEM)))
+ AppendToList(sPokeMenuOptionsOrder, &sPokeMenuOptionsNo, POKEMENU_MAIL);
+ else
+ AppendToList(sPokeMenuOptionsOrder, &sPokeMenuOptionsNo, POKEMENU_ITEM);
+
+ AppendToList(sPokeMenuOptionsOrder, &sPokeMenuOptionsNo, POKEMENU_CANCEL);
+ }
+}
+
+static void sub_8089BDC(u8 arg0, u8 arg1, u8 arg2, u8 noOfOptions, const struct MenuAction2 *menuActions, const u8 *order, u8 arg6)
+{
+ sub_806D538(5, arg6);
+ MenuDrawTextWindow(arg0, arg1, arg0 + arg2, (noOfOptions * 2) + arg1 + 1);
+ PrintMenuItemsReordered(arg0 + 1, arg1 + 1, noOfOptions, menuActions, order);
+}
+
+void sub_8089C50(u8 arg0, u8 arg1, u8 arg2, u8 noOfOptions, const struct MenuAction2 *menuActions, const u8 *order)
+{
+ sub_8089BDC(arg0, arg1, arg2, noOfOptions, menuActions, order, 1);
+}
+
+static void sub_8089C7C(u8 arg0)
+{
+ u32 r4 = (u8)(18 - (sPokeMenuOptionsNo << 1));
+
+ sub_8089BDC(19, r4, 10, sPokeMenuOptionsNo, sPokemonMenuActions, sPokeMenuOptionsOrder, 3);
+ r4 |= 1;
+ InitMenu(0, 20, r4, sPokeMenuOptionsNo, arg0, 9);
+}
+
+void sub_8089CD4(u8 taskID)
+{
+ if (!gPaletteFade.active)
+ {
+ switch (sub_806BD80(taskID))
+ {
+ case 1:
+ PlaySE(SE_SELECT);
+ gLastFieldPokeMenuOpened = sub_806CA38(taskID);
+ GetMonNickname(&gPlayerParty[gLastFieldPokeMenuOpened], gStringVar1);
+ sub_8089A8C();
+ sPokeMenuCursorPos = 0;
+ sub_8089C7C(0);
+ gTasks[taskID].func = sub_8089D94;
+ sub_808B5B4(taskID);
+ break;
+ case 2:
+ PlaySE(SE_SELECT);
+ BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
+ gTasks[taskID].func = sub_8089E4C;
+ break;
+ }
+ }
+}
+
+static void sub_8089D94(u8 taskID)
+{
+ if (!gPaletteFade.active)
+ {
+ if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_UP)
+ {
+ PlaySE(SE_SELECT);
+ sPokeMenuCursorPos = MoveMenuCursor(-1);
+ sub_808B5B4(taskID);
+ }
+ else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_DOWN)
+ {
+ PlaySE(SE_SELECT);
+ sPokeMenuCursorPos = MoveMenuCursor(1);
+ sub_808B5B4(taskID);
+ }
+ else if (gMain.newKeys & A_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ sPokemonMenuActions[sPokeMenuOptionsOrder[sPokeMenuCursorPos]].func(taskID);
+ sub_808B5B4(taskID);
+ }
+ else if (gMain.newKeys & B_BUTTON)
+ {
+ PokemonMenu_Cancel(taskID);
+ sub_808B5B4(taskID);
+ }
+ }
+}
+
+static void sub_8089E4C(u8 taskID)
+{
+ if (!gPaletteFade.active)
+ {
+ gLastFieldPokeMenuOpened = 0;
+ SetMainCallback2(sub_805469C);
+ DestroyTask(taskID);
+ }
+}
+
+static void sub_8089E84(void)
+{
+ GetMonNickname(&gPlayerParty[gLastFieldPokeMenuOpened], gStringVar1);
+ sub_8089A8C();
+ sPokeMenuCursorPos = 0;
+ sub_8089C7C(0);
+}
+
+static void sub_8089EBC(void)
+{
+ do
+ {
+ if (sub_806B124() == TRUE)
+ {
+ sub_806C994(EWRAM_1B000.unk260, gUnknown_020384F0);
+ sub_806BF74(EWRAM_1B000.unk260, 0);
+ gLastFieldPokeMenuOpened = gUnknown_020384F0;
+ sub_8089E84();
+ SetMainCallback2(sub_806AEDC);
+ break;
+ }
+ } while (sub_80F9344() != TRUE);
+}
+
+static void sub_8089F14(void)
+{
+ gPaletteFade.bufferTransferDisabled = 1;
+ sub_806AF4C(0, 0xFF, sub_8089D94, 5);
+ SetMainCallback2(sub_8089EBC);
+}
+
+static void sub_8089F44(u8 taskID)
+{
+ if (!gPaletteFade.active)
+ {
+ u8 spriteID = gSprites[gTasks[taskID].data[3] >> 8].data0;
+ DestroyTask(taskID);
+ ewram1B000_alt.unk262 = 1;
+ ShowPokemonSummaryScreen(gPlayerParty, spriteID, gPlayerPartyCount - 1, sub_8089F14, 0);
+ }
+}
+
+static void PokemonMenu_Summary(u8 taskID)
+{
+ BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
+ gTasks[taskID].func = sub_8089F44;
+}
+
+void sub_808A004(u8 taskID)
+{
+ SetTaskFuncWithFollowupFunc(taskID, sub_806CA60, sub_8089CD4);
+ MenuZeroFillWindowRect(19, 0, 29, 19);
+}
+
+static void PokemonMenu_Switch(u8 taskID)
+{
+ HandleDestroyMenuCursors();
+ ewram01000.unkC = sub_806CD5C;
+ ewram01000.array[53553] = 1;
+ sub_808A004(taskID);
+}
+
+static void sub_808A060(u8 taskID)
+{
+ if (gMain.newKeys == DPAD_UP && sPokeMenuCursorPos != 0)
+ {
+ sPokeMenuCursorPos = MoveMenuCursor(-1);
+ PlaySE(SE_SELECT);
+ }
+ if (gMain.newKeys == DPAD_DOWN && sPokeMenuCursorPos != 2)
+ {
+ sPokeMenuCursorPos = MoveMenuCursor(1);
+ PlaySE(SE_SELECT);
+ }
+ if (gMain.newKeys & A_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ PartyMenuGetPopupMenuFunc(0, &sUnknown_0839F578, (void *)sPokemonMenuActions, sPokeMenuCursorPos)(taskID);
+ }
+ else if (gMain.newKeys & B_BUTTON)
+ {
+ sub_806E7D0(0, &sUnknown_0839F578);
+ PokemonMenu_CancelSubmenu(taskID);
+ }
+}
+
+static void sub_808A100(u8 taskID)
+{
+ sub_806E750(0, &sUnknown_0839F578, (void*)(sPokemonMenuActions), 0);
+ sub_806D538(0xD, 2);
+ gTasks[taskID].func = sub_808A060;
+}
+
+static void PokemonMenu_Item(u8 taskID)
+{
+ HandleDestroyMenuCursors();
+ sPokeMenuCursorPos = 0;
+ MenuZeroFillWindowRect(19, 0, 29, 19);
+ gTasks[taskID].func = sub_808A100;
+}
+
+static void sub_808A180(u8 taskID)
+{
+ if (!gPaletteFade.active)
+ {
+ u8 mailID = GetMonData(&gPlayerParty[sub_806CA38(taskID)], MON_DATA_MAIL);
+ DestroyTask(taskID);
+ sub_80E62A0(4, &gSaveBlock1.mail[mailID], sub_808A520, 3);
+ }
+}
+
+static void sub_808A1E0(u8 taskID)
+{
+ if (gUnknown_0202E8F6 != 1)
+ {
+ SetHeldItemIconVisibility(taskID, sub_806CA38(taskID));
+ sub_806D538(0, 0);
+ gTasks[taskID].func = sub_8089CD4;
+ }
+}
+
+static void sub_808A228(u8 taskID)
+{
+ if (ItemIsMail(gScriptItemId) && gUnknown_0202E8F4 != 0)
+ {
+ BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
+ gTasks[taskID].func = sub_808A180;
+ }
+ else
+ {
+ MenuZeroFillWindowRect(0, 0, 29, 19);
+ sub_806D538(0, 0);
+ gTasks[taskID].func = sub_8089CD4;
+ }
+}
+
+static void sub_808A2AC(u8 taskID)
+{
+ if (!gPaletteFade.active)
+ PartyMenuTryGiveMonHeldItem(taskID, gScriptItemId, sub_808A228);
+}
+
+static void sub_808A2DC(u8 taskID)
+{
+ u8 mailID = GetMonData(&gPlayerParty[sub_806CA38(taskID)], MON_DATA_MAIL);
+ DestroyTask(taskID);
+ sub_80E62A0(4, &gSaveBlock1.mail[mailID], sub_808A520, 3);
+}
+
+static void sub_808A330(u8 taskID)
+{
+ PartyMenuTryGiveMonHeldItem(taskID, gScriptItemId, sub_808A2DC);
+}
+
+static void sub_808A34C(void)
+{
+ RunTasks();
+}
+
+static void sub_808A358(void)
+{
+ while (1)
+ {
+ if (sub_806B124() == TRUE)
+ {
+ sub_806C994(EWRAM_1B000.unk260, gLastFieldPokeMenuOpened);
+ sub_806BF74(EWRAM_1B000.unk260, 0);
+ SetMainCallback2(sub_806AEDC);
+ break;
+ }
+ if (sub_80F9344() == TRUE)
+ break;
+ }
+}
+
+static void sub_808A3A4(void)
+{
+ while (1)
+ {
+ if (sub_806B124() == TRUE)
+ {
+ sub_806C994(EWRAM_1B000.unk260, gLastFieldPokeMenuOpened);
+ sub_806BF74(EWRAM_1B000.unk260, 0);
+ EWRAM_1B000.unk262 = 3;
+ sub_8089E84();
+ SetMainCallback2(sub_806AEDC);
+ break;
+ }
+ if (sub_80F9344() == TRUE)
+ break;
+ }
+}
+
+void sub_808A3F8(void)
+{
+ if (ItemIsMail(gScriptItemId))
+ {
+ u8 taskID = CreateTask(sub_808A330, 0);
+ gPaletteFade.bufferTransferDisabled = 1;
+ sub_806BD58(taskID, 0);
+ sub_806C994(taskID, gLastFieldPokeMenuOpened);
+ sub_806BF74(taskID, 0);
+ if (!(bool8)(GetMonData(&gPlayerParty[sub_806CA38(taskID)], MON_DATA_HELD_ITEM)))
+ {
+ SetMainCallback2(sub_808A34C);
+ return;
+ }
+ else
+ DestroyTask(taskID);
+ }
+ gPaletteFade.bufferTransferDisabled = 1;
+ if (gScriptItemId)
+ {
+ sub_806AF4C(0, 0xFF, sub_808A2AC, 0xFF);
+ SetMainCallback2(sub_808A358);
+ }
+ else
+ {
+ sub_806AF4C(0, 0xFF, sub_8089D94, 5);
+ SetMainCallback2(sub_808A3A4);
+ }
+}
+
+static void sub_808A4D4(void)
+{
+ while (1)
+ {
+ if (sub_806B124() == TRUE)
+ {
+ sub_806C994(EWRAM_1B000.unk260, gLastFieldPokeMenuOpened);
+ sub_806BF74(EWRAM_1B000.unk260, 0);
+ SetMainCallback2(sub_806AEDC);
+ break;
+ }
+ if (sub_80F9344() == TRUE)
+ break;
+ }
+}
+
+void sub_808A520(void)
+{
+ gPaletteFade.bufferTransferDisabled = 1;
+ if (gScriptResult == 0)
+ {
+ if (gUnknown_0202E8F8)
+ RemoveBagItem(gUnknown_0202E8F8, 1);
+ AddBagItem(GetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_HELD_ITEM), 1);
+ TakeMailFromMon(&gPlayerParty[gLastFieldPokeMenuOpened]);
+ SetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_HELD_ITEM, (void*) &gUnknown_0202E8F8);
+ sub_806AF4C(0, 0xFF, sub_8089CD4, 0);
+ }
+ else
+ sub_806AF4C(0, 0xFF, sub_808A5BC, 0xFF);
+ SetMainCallback2(sub_808A4D4);
+}
+
+static void sub_808A5BC(u8 taskID)
+{
+ if (!gPaletteFade.active)
+ {
+ DisplayGiveHeldItemMessage(gLastFieldPokeMenuOpened, gScriptItemId, 0);
+ gTasks[taskID].func = sub_808A1E0;
+ }
+}
+
+static void sub_808A604(u8 taskID)
+{
+ if (!gPaletteFade.active)
+ {
+ SetMainCallback2(sub_80A61D0);
+ DestroyTask(taskID);
+ }
+}
+
+static void PokemonMenu_GiveItem(u8 taskID)
+{
+ gUnknown_0202E8F5 = sub_806CA38(taskID);
+ BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
+ gTasks[taskID].func = sub_808A604;
+}
+
+static void sub_808A678(u8 taskID)
+{
+ sub_808A8D4(taskID);
+}
+
+static void PokemonMenu_TakeItem(u8 taskID)
+{
+ HandleDestroyMenuCursors();
+ MenuZeroFillWindowRect(19, 0, 29, 19);
+ sub_806D5A4();
+ PartyMenuTryGiveMonHeldItem_806ECE8(taskID, sub_808A678);
+}
+
+static void PokemonMenu_TakeMail(u8 taskID)
+{
+ HandleDestroyMenuCursors();
+ MenuZeroFillWindowRect(19, 0, 29, 19);
+ sub_806D5A4();
+ DoTakeMail(taskID, sub_808A678);
+}
+
+static void PokemonMenu_Mail(u8 taskID)
+{
+ HandleDestroyMenuCursors();
+ sPokeMenuCursorPos = 0;
+ MenuZeroFillWindowRect(19, 0, 29, 19);
+ sub_806E750(0, &sUnknown_0839F584, (void*) sPokemonMenuActions, 0);
+ gTasks[taskID].func = sub_808A73C;
+}
+
+static void sub_808A73C(u8 taskID)
+{
+ if (gMain.newAndRepeatedKeys == DPAD_UP)
+ {
+ PlaySE(SE_SELECT);
+ if (sPokeMenuCursorPos == 0)
+ sPokeMenuCursorPos = MoveMenuCursor(sUnknown_0839F584.unk0 - 1);
+ else
+ sPokeMenuCursorPos = MoveMenuCursor(-1);
+ }
+ if (gMain.newAndRepeatedKeys == DPAD_DOWN)
+ {
+ PlaySE(SE_SELECT);
+ if (sPokeMenuCursorPos == sUnknown_0839F584.unk0 - 1)
+ sPokeMenuCursorPos = MoveMenuCursor(1 - sUnknown_0839F584.unk0);
+ else
+ sPokeMenuCursorPos = MoveMenuCursor(1);
+ }
+ if (gMain.newKeys & A_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+ PartyMenuGetPopupMenuFunc(0, &sUnknown_0839F584, (void*) sPokemonMenuActions, sPokeMenuCursorPos)(taskID);
+ }
+ else if (gMain.newKeys & B_BUTTON)
+ {
+ sub_806E7D0(0, &sUnknown_0839F584);
+ PokemonMenu_Cancel(taskID);
+ }
+}
+
+static void PokemonMenu_ReadMail(u8 taskID)
+{
+ BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
+ gTasks[taskID].func = sub_808A848;
+}
+
+static void sub_808A848(u8 taskID)
+{
+ if (!gPaletteFade.active)
+ {
+ u8 mailID = GetMonData(&gPlayerParty[sub_806CA38(taskID)], MON_DATA_MAIL);
+ DestroyTask(taskID);
+ HandleReadMail(&gSaveBlock1.mail[mailID], sub_808A8A8, 1);
+ }
+}
+
+static void sub_808A8A8(void)
+{
+ gUnknown_020384F0 = gLastFieldPokeMenuOpened;
+ ewram1B000.unk262 = 4;
+ sub_8089F14();
+}
+
+static void sub_808A8D4(u8 taskID)
+{
+ sPokeMenuCursorPos = 0;
+ MenuZeroFillWindowRect(19, 0, 29, 19);
+ sub_806D538(0, 0);
+ gTasks[taskID].func = sub_8089CD4;
+}
+
+static void PokemonMenu_Cancel(u8 taskID)
+{
+ HandleDestroyMenuCursors();
+ PlaySE(SE_SELECT);
+ sub_808A8D4(taskID);
+}
+
+static void PokemonMenu_CancelSubmenu(u8 taskID)
+{
+ HandleDestroyMenuCursors();
+ PlaySE(SE_SELECT);
+ MenuZeroFillWindowRect(19, 0, 29, 19);
+ sub_806D5A4();
+ sub_8089C7C(sPokeMenuCursorPos);
+ gTasks[taskID].func = sub_8089D94;
+}
+
+#define IS_SOFTBOILED_MILKDRINK(ID)((ID == (POKEMENU_MILK_DRINK - POKEMENU_FIRST_FIELD_MOVE_ID) || ID == (POKEMENU_SOFT_BOILED - POKEMENU_FIRST_FIELD_MOVE_ID)))
+#define IS_SURF(ID)((ID == (POKEMENU_SURF - POKEMENU_FIRST_FIELD_MOVE_ID)))
+#define IS_FLY(ID)((ID == (POKEMENU_FLY - POKEMENU_FIRST_FIELD_MOVE_ID)))
+
+#define tFieldMoveId data[11]
+
+static void PokemonMenu_FieldMove(u8 taskID)
+{
+ s16* data = gTasks[taskID].data;
+
+ HandleDestroyMenuCursors();
+ tFieldMoveId = sPokeMenuOptionsOrder[sPokeMenuCursorPos] - POKEMENU_FIRST_FIELD_MOVE_ID;
+ if (sub_80F9344() == TRUE)
+ {
+ MenuZeroFillWindowRect(19, 0, 29, 19);
+ if (IS_SOFTBOILED_MILKDRINK(tFieldMoveId))
+ sub_806D538(9, 0);
+ else
+ sub_806D538(sFieldMoveFuncs[tFieldMoveId].field_1, 0);
+ gTasks[taskID].func = sub_808ABF4;
+ }
+ else if (tFieldMoveId <= 7 && FlagGet(BADGE01_GET + tFieldMoveId) != TRUE)
+ {
+ // can't use a field HM move without a proper badge
+ MenuZeroFillWindowRect(19, 0, 29, 19);
+ sub_806D5A4();
+ sub_806E834(gOtherText_CantBeUsedBadge, 1);
+ gTasks[taskID].func = sub_808AAF0;
+ }
+ else
+ {
+ if (sFieldMoveFuncs[tFieldMoveId].func() == TRUE)
+ {
+ sPokeMenuCursorPos = 0;
+ if (!IS_SOFTBOILED_MILKDRINK(tFieldMoveId))
+ {
+ gTasks[taskID].func = sub_808AB34;
+ BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
+ }
+ else
+ sub_8133D28(taskID);
+ }
+ else
+ {
+ MenuZeroFillWindowRect(19, 0, 29, 19);
+ if (IS_SURF(tFieldMoveId) && TestPlayerAvatarFlags(8))
+ sub_806D538(8, 0);
+ else
+ sub_806D538(sFieldMoveFuncs[tFieldMoveId].field_1, 0);
+ gTasks[taskID].func = sub_808ABF4;
+ }
+ }
+}
+
+static void sub_808AAF0(u8 taskID)
+{
+ if (gUnknown_0202E8F6 != 1 && (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON))
+ {
+ MenuZeroFillWindowRect(0, 14, 29, 19);
+ PokemonMenu_Cancel(taskID);
+ }
+}
+
+static void sub_808AB34(u8 taskID)
+{
+ if (!gPaletteFade.active)
+ {
+ if (!IS_FLY(gTasks[taskID].tFieldMoveId) || ShouldDoBrailleFlyEffect())
+ SetMainCallback2(c2_exit_to_overworld_2_switch);
+ else
+ SetMainCallback2(CB2_InitFlyRegionMap);
+ DestroyTask(taskID);
+ }
+}
+
+#undef tFieldMoveId
+
+void FieldCallback_Teleport(void)
+{
+ pal_fill_black();
+ CreateTask(sub_808ABA8, 8);
+}
+
+static void sub_808ABA8(u8 taskID)
+{
+ if (sub_807D770() == TRUE)
+ {
+ gFieldEffectArguments[0] = GetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_SPECIES);
+ gUnknown_03005CE4();
+ DestroyTask(taskID);
+ }
+}
+
+static void sub_808ABF4(u8 taskID)
+{
+ if (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON)
+ {
+ MenuZeroFillWindowRect(1, 17, 28, 18);
+ PokemonMenu_Cancel(taskID);
+ }
+}
+
+static void sub_808AC2C(void)
+{
+ gFieldEffectArguments[0] = gLastFieldPokeMenuOpened;
+ FieldEffectStart(FLDEFF_USE_SURF);
+}
+
+static bool8 SetUpFieldMove_Surf(void)
+{
+ if (PartyHasMonWithSurf() == TRUE && IsPlayerFacingSurfableFishableWater() == TRUE)
+ {
+ gFieldCallback = FieldCallback_Teleport;
+ gUnknown_03005CE4 = sub_808AC2C;
+ return TRUE;
+ }
+ else
+ return FALSE;
+}
+
+static void sub_808AC8C(void)
+{
+ gFieldEffectArguments[0] = gLastFieldPokeMenuOpened;
+ FieldEffectStart(FLDEFF_USE_FLY);
+}
+
+static bool8 SetUpFieldMove_Fly(void)
+{
+ if (ShouldDoBrailleFlyEffect())
+ {
+ gFieldCallback = FieldCallback_Teleport;
+ gUnknown_03005CE4 = DoBrailleFlyEffect;
+ return TRUE;
+ }
+ if (Overworld_MapTypeAllowsTeleportAndFly(gMapHeader.mapType) == TRUE)
+ {
+ gFieldCallback = FieldCallback_Teleport;
+ gUnknown_03005CE4 = sub_808AC8C;
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static void sub_808AD0C(void)
+{
+ while (1)
+ {
+ if (sub_806B124() == TRUE)
+ {
+ sub_806C994(EWRAM_1B000.unk260, gLastFieldPokeMenuOpened);
+ sub_806BF74(EWRAM_1B000.unk260, 0);
+ SetMainCallback2(sub_806AEDC);
+ break;
+ }
+ if (sub_80F9344() == TRUE)
+ break;
+ }
+}
+
+void sub_808AD58(void)
+{
+ gPaletteFade.bufferTransferDisabled = 1;
+ sub_806AF4C(0, 0xFF, sub_8089CD4, 0);
+ SetMainCallback2(sub_808AD0C);
+}
+
+u16 unref_sub_808AD88(void)
+{
+ return GetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_SPECIES);
+}
+
+static void sub_808ADAC(void)
+{
+ gFieldEffectArguments[0] = gLastFieldPokeMenuOpened;
+ FieldEffectStart(FLDEFF_USE_DIVE);
+}
+
+static bool8 SetUpFieldMove_Dive(void)
+{
+ gFieldEffectArguments[1] = sub_8068F18();
+ if (gFieldEffectArguments[1])
+ {
+ gFieldCallback = FieldCallback_Teleport;
+ gUnknown_03005CE4 = sub_808ADAC;
+ return TRUE;
+ }
+ else
+ return FALSE;
+}
+
+static void sub_808AE08(void)
+{
+ gFieldEffectArguments[0] = gLastFieldPokeMenuOpened;
+ FieldEffectStart(FLDEFF_USE_WATERFALL);
+}
+
+static bool8 SetUpFieldMove_Waterfall(void)
+{
+ s16 x, y;
+ GetXYCoordsOneStepInFrontOfPlayer(&x, &y);
+ if (MetatileBehavior_IsWaterfall(MapGridGetMetatileBehaviorAt(x, y)) == TRUE
+ && IsPlayerSurfingNorth() == TRUE)
+ {
+ gFieldCallback = FieldCallback_Teleport;
+ gUnknown_03005CE4 = sub_808AE08;
+ return TRUE;
+ }
+ else
+ return FALSE;
+}
+
+static void sub_808AE8C(void)
+{
+ u8 i;
+ u8 arg = gScriptItemId - 33;
+ for (i = 0; i < 6; i++)
+ {
+ if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES))
+ {
+ sub_806D668(i);
+ if (GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG) || !CanMonLearnTMHM(&gPlayerParty[i], arg))
+ sub_806BC3C(i, 0x9A);
+ else if (pokemon_has_move(&gPlayerParty[i], ItemIdToBattleMoveId(gScriptItemId)))
+ sub_806BC3C(i, 0xA8);
+ else
+ sub_806BC3C(i, 0x8C);
+ }
+ }
+}
+
+static void sub_808AF20(void)
+{
+ u8 i;
+ for (i = 0; i < 6; i++)
+ {
+ if (GetMonData(&gPlayerParty[i], MON_DATA_SPECIES))
+ {
+ if (GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG) || !GetEvolutionTargetSpecies(&gPlayerParty[i], 3, gScriptItemId))
+ {
+ sub_806D668(i);
+ sub_806BC3C(i, 0);
+ }
+ }
+ }
+}
+
+static void sub_808AF80(void)
+{
+ while (1)
+ {
+ if (sub_806B124() == TRUE)
+ {
+ if (gUnknown_02038561 == 0)
+ {
+ switch (CheckIfItemIsTMHMOrEvolutionStone(gScriptItemId))
+ {
+ case 1:
+ sub_808AE8C();
+ break;
+ case 2:
+ sub_808AF20();
+ break;
+ }
+ }
+ if (gLastFieldPokeMenuOpened > 5 || !GetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_SPECIES))
+ gLastFieldPokeMenuOpened = 0;
+ sub_806C994(ewram1B000.unk260, gLastFieldPokeMenuOpened);
+ sub_806BF74(ewram1B000.unk260, 0);
+ SetMainCallback2(sub_806AEDC);
+ break;
+ }
+ if (sub_80F9344() == TRUE)
+ break;
+ }
+}
+
+void sub_808B020(void)
+{
+ gPaletteFade.bufferTransferDisabled = 1;
+ switch (gUnknown_02038561)
+ {
+ case 0:
+ if (CheckIfItemIsTMHMOrEvolutionStone(gScriptItemId) == 1)
+ sub_806AF4C(0, 0, sub_808B0C0, 20);
+ else
+ sub_806AF4C(0, 0, sub_808B0C0, 3);
+ break;
+ case 4:
+ sub_806AF4C(0, 0, sub_808B1EC, 0xFF);
+ break;
+ case 1:
+ case 3:
+ sub_806AF4C(0, 0, sub_808B0C0, 4);
+ break;
+ }
+ SetMainCallback2(sub_808AF80);
+}
+
+void sub_808B0C0(u8 taskID)
+{
+ if (!gPaletteFade.active)
+ {
+ switch (sub_806BD80(taskID))
+ {
+ case 1:
+ gLastFieldPokeMenuOpened = sub_806CA38(taskID);
+ if (GetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_IS_EGG))
+ PlaySE(SE_HAZURE);
+ else
+ {
+ sub_806D5A4();
+ if (gUnknown_02038561 == 0)
+ gUnknown_03004AE4(taskID, gScriptItemId, sub_808B224);
+ if (gUnknown_02038561 == 1)
+ {
+ PlaySE(SE_SELECT);
+ PartyMenuTryGiveMonHeldItem(taskID, gScriptItemId, sub_808B2EC);
+ }
+ if (gUnknown_02038561 == 3)
+ {
+ PlaySE(SE_SELECT);
+ PartyMenuTryGiveMonMail(taskID, sub_808B2B4);
+ }
+ }
+ break;
+ case 2:
+ gLastFieldPokeMenuOpened = sub_806CA38(taskID);
+ PlaySE(SE_SELECT);
+ BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
+ if (gUnknown_02038561 == 0 || gUnknown_02038561 == 1)
+ gTasks[taskID].func = sub_808B25C;
+ if (gUnknown_02038561 == 3)
+ gTasks[taskID].func = sub_808B2B4;
+ break;
+ }
+ }
+}
+
+static void sub_808B1EC(u8 taskID)
+{
+ if (!gPaletteFade.active)
+ gUnknown_03004AE4(taskID, gScriptItemId, sub_808B224);
+}
+
+static void sub_808B224(u8 taskID)
+{
+ BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
+ gTasks[taskID].func = sub_808B25C;
+}
+
+static void sub_808B25C(u8 taskID)
+{
+ if (!gPaletteFade.active)
+ {
+ SetMainCallback2(sub_80A5B40);
+ DestroyTask(taskID);
+ }
+}
+
+static void sub_808B288(u8 taskID)
+{
+ if (!gPaletteFade.active)
+ {
+ SetMainCallback2(Mailbox_ReturnToMailListAfterDeposit);
+ DestroyTask(taskID);
+ }
+}
+
+static void sub_808B2B4(u8 taskID)
+{
+ BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
+ gTasks[taskID].func = sub_808B288;
+}
+
+static void sub_808B2EC(u8 taskID)
+{
+ if (gUnknown_0202E8F4 == 2)
+ {
+ BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
+ gTasks[taskID].func = sub_808B338;
+ }
+ else
+ sub_808B224(taskID);
+}
+
+static void sub_808B338(u8 taskID)
+{
+ if (!gPaletteFade.active)
+ {
+ u8 mailID;
+
+ gLastFieldPokeMenuOpened = sub_806CA38(taskID);
+ mailID = GetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_MAIL);
+ DestroyTask(taskID);
+ sub_80E62A0(4, &gSaveBlock1.mail[mailID], sub_808B3EC, 3);
+ }
+}
+
+static void sub_808B3A0(void)
+{
+ while (1)
+ {
+ if (sub_806B124() == TRUE)
+ {
+ sub_806C994(EWRAM_1B000.unk260, gLastFieldPokeMenuOpened);
+ sub_806BF74(EWRAM_1B000.unk260, 0);
+ SetMainCallback2(sub_806AEDC);
+ break;
+ }
+ if (sub_80F9344() == TRUE)
+ break;
+ }
+}
+
+static void sub_808B3EC(void)
+{
+ IntrCallback callback;
+
+ gPaletteFade.bufferTransferDisabled = 1;
+ if (gScriptResult == 0)
+ {
+ if (gUnknown_0202E8F8)
+ RemoveBagItem(gUnknown_0202E8F8, 1);
+ AddBagItem(GetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_HELD_ITEM), 1);
+ TakeMailFromMon(&gPlayerParty[gLastFieldPokeMenuOpened]);
+ SetMonData(&gPlayerParty[gLastFieldPokeMenuOpened], MON_DATA_HELD_ITEM, (void*) &gUnknown_0202E8F8);
+ CreateTask(sub_808B25C, 5);
+ gPaletteFade.bufferTransferDisabled = 0;
+ callback = sub_806AEDC;
+ }
+ else
+ {
+ sub_806AF4C(0, 0, sub_808B4A4, 0xFF);
+ callback = sub_808B3A0;
+ }
+ SetMainCallback2(callback);
+}
+
+static void sub_808B4A4(u8 taskID)
+{
+ if (!gPaletteFade.active)
+ {
+ DisplayGiveHeldItemMessage(gLastFieldPokeMenuOpened, gScriptItemId, 1);
+ gTasks[taskID].func = sub_808B4EC;
+ }
+}
+
+static void sub_808B4EC(u8 taskID)
+{
+ if (gUnknown_0202E8F6 != 1)
+ sub_808B224(taskID);
+}
+
+void sub_808B508(u8 taskID)
+{
+ sub_808B224(taskID);
+}
+
+static void sub_808B518(void)
+{
+ while (1)
+ {
+ if (sub_806B124() == TRUE)
+ {
+ sub_806C994(EWRAM_1B000.unk260, gUnknown_020384F0);
+ sub_806BF74(EWRAM_1B000.unk260, 0);
+ SetMainCallback2(sub_806AEDC);
+ break;
+ }
+ if (sub_80F9344() == TRUE)
+ break;
+ }
+}
+
+void sub_808B564(void)
+{
+ gPaletteFade.bufferTransferDisabled = 1;
+ if (sub_809FA30() != 4)
+ sub_806AF4C(0, 0, TaughtMove, 0xFF);
+ else
+ sub_806AF4C(0, 0, StopTryingToTeachMove_806F588, 0xFF);
+ SetMainCallback2(sub_808B518);
+}
+
+void sub_808B5B4(u32 taskID)
+{
+ gUnknown_03005CF0 = gTasks[taskID].func;
+ gTasks[taskID].func = sub_808B5E4;
+ sub_808B5E4(taskID);
+}
+
+static void sub_808B5E4(u8 taskID)
+{
+ if (sub_8055870() != TRUE)
+ gTasks[taskID].func = gUnknown_03005CF0;
+}
diff --git a/src/pokenav.c b/src/pokenav.c
index 84ed7b14b..21d7bb4e3 100644
--- a/src/pokenav.c
+++ b/src/pokenav.c
@@ -38,3 +38,5 @@ void sub_80F700C(u8 *arg0, u16 arg1) {
ptr[2] = 0x80;
ptr[3] = 0xFF;
}
+
+IWRAM_DATA MainCallback gUnknown_03000744;
diff --git a/src/post_battle_event_funcs.c b/src/post_battle_event_funcs.c
index 8d85705c8..27d7022fe 100644
--- a/src/post_battle_event_funcs.c
+++ b/src/post_battle_event_funcs.c
@@ -4,7 +4,7 @@
#include "load_save.h"
#include "main.h"
#include "pokemon.h"
-#include "rom4.h"
+#include "overworld.h"
#include "script_pokemon_80C4.h"
extern u8 gUnknown_02039324;
@@ -14,7 +14,7 @@ int GameClear(void)
int i;
bool32 ribbonGet;
- HealPlayerParty();
+ ScrSpecial_HealPlayerParty();
if (FlagGet(SYS_GAME_CLEAR) == TRUE)
{
diff --git a/src/record_mixing.c b/src/record_mixing.c
index d1083910c..8dff432c1 100644
--- a/src/record_mixing.c
+++ b/src/record_mixing.c
@@ -10,11 +10,11 @@
#include "items.h"
#include "load_save.h"
#include "link.h"
-#include "mauville_old_man.h"
+#include "mauville_man.h"
#include "menu.h"
#include "mystery_event_script.h"
#include "rng.h"
-#include "rom4.h"
+#include "overworld.h"
#include "save.h"
#include "script.h"
#include "secret_base.h"
@@ -29,7 +29,7 @@ extern u8 ewram[];
#define unk_2018000 (*(struct PlayerRecords *)(ewram + 0x18000))
#define unk_2008000 (*(struct PlayerRecords *)(ewram + 0x08000))
-extern struct RecordMixing_UnknownStruct gUnknown_02038738;
+extern struct RecordMixingDayCareMail gUnknown_02038738;
extern u16 gSpecialVar_0x8005;
u32 gUnknown_03005D2C;
@@ -40,9 +40,9 @@ static u8 gUnknown_0300071C[4];
void *recordMixingSecretBases = &gSaveBlock1.secretBases;
void *recordMixingTvShows = &gSaveBlock1.tvShows;
void *gUnknown_083D0274 = &gSaveBlock1.unknown_2ABC;
-void *gUnknown_083D0278 = &gSaveBlock1.oldMan;
+void *gUnknown_083D0278 = &gSaveBlock1.mauvilleMan;
void *recordMixingEasyChatPairs = &gSaveBlock1.easyChatPairs;
-struct RecordMixing_UnknownStruct *gUnknown_083D0280 = &gUnknown_02038738;
+struct RecordMixingDayCareMail *gUnknown_083D0280 = &gUnknown_02038738;
void *gUnknown_083D0284 = &gSaveBlock2.filler_A8;
#define BUFFER_CHUNK_SIZE 200
@@ -59,7 +59,7 @@ struct PlayerRecords
u8 filler1004[0x40];
u8 filler1044[0x40];
struct EasyChatPair easyChatPairs[5];
- struct RecordMixing_UnknownStruct filler10AC;
+ struct RecordMixingDayCareMail filler10AC;
u8 filler1124[0xA4];
u16 filler11C8[0x34];
};
@@ -74,10 +74,10 @@ void RecordMixing_PrepareExchangePacket(void)
memcpy(unk_2018000.filler1004, gUnknown_083D0274, sizeof(unk_2008000.filler1004));
memcpy(unk_2018000.filler1044, gUnknown_083D0278, sizeof(unk_2008000.filler1044));
memcpy(unk_2018000.easyChatPairs, recordMixingEasyChatPairs, sizeof(unk_2018000.easyChatPairs));
- gUnknown_02038738.data[0] = gSaveBlock1.filler_303C.data[0];
- gUnknown_02038738.data[1] = gSaveBlock1.filler_303C.data[1];
- sub_8041324(gSaveBlock1.daycareData, &gUnknown_02038738);
- memcpy(&unk_2018000.filler10AC, gUnknown_083D0280, sizeof(struct RecordMixing_UnknownStruct));
+ gUnknown_02038738.mail[0] = gSaveBlock1.daycareData.misc.mail[0];
+ gUnknown_02038738.mail[1] = gSaveBlock1.daycareData.misc.mail[1];
+ sub_8041324(gSaveBlock1.daycareData.mons, &gUnknown_02038738);
+ memcpy(&unk_2018000.filler10AC, gUnknown_083D0280, sizeof(struct RecordMixingDayCareMail));
memcpy(unk_2018000.filler1124, gUnknown_083D0284, sizeof(unk_2018000.filler1124));
if (GetMultiplayerId() == 0)
@@ -461,10 +461,10 @@ u8 sub_80B9BBC(u16 *a)
void sub_80B9BC4(u8 *a, size_t b, u8 c[][2], u8 d, u8 e)
{
- struct RecordMixing_UnknownStructSub *r6 = (struct RecordMixing_UnknownStructSub *)(a + b * c[d][0]);
- struct RecordMixing_UnknownStructSub *src = r6 + c[d][1];
- struct RecordMixing_UnknownStructSub sp0 = *src;
- struct RecordMixing_UnknownStructSub *r8 = (struct RecordMixing_UnknownStructSub *)(a + b * c[e][0]);
+ struct DayCareMail *r6 = (struct DayCareMail *)(a + b * c[d][0]);
+ struct DayCareMail *src = r6 + c[d][1];
+ struct DayCareMail sp0 = *src;
+ struct DayCareMail *r8 = (struct DayCareMail *)(a + b * c[e][0]);
r6 += c[d][1];
*r6 = *(r8 + c[e][1]);
@@ -511,7 +511,7 @@ void sub_80B9C6C(u8 *a, u32 b, u8 c, void *d)
u16 i; // r3
u16 r7;
u8 r1;
- struct RecordMixing_UnknownStruct *r6;
+ struct DayCareMisc *r6;
//asm("":::"r8");
SeedRng(gLinkPlayers[0].trainerId);
@@ -526,7 +526,7 @@ void sub_80B9C6C(u8 *a, u32 b, u8 c, void *d)
sp3C = 0;
for (i = 0; i < r8; i++)
{
- r6 = (struct RecordMixing_UnknownStruct *)(a + b * i);
+ r6 = (struct DayCareMisc *)(a + b * i);
if (r6->unk70 != 0)
{
for (r7 = 0; r7 < r6->unk70; r7++)
@@ -540,7 +540,7 @@ void sub_80B9C6C(u8 *a, u32 b, u8 c, void *d)
//_080B9D46
for (r7 = 0, i = 0; i < r8; i++)
{
- r6 = (struct RecordMixing_UnknownStruct *)(a + b * i);
+ r6 = (struct DayCareMisc *)(a + b * i);
if (sp1C[i][0] == 1 || sp1C[i][1] == 1)
sp3C++;
if (sp1C[i][0] == 1 && sp1C[i][1] == 0)
@@ -596,7 +596,7 @@ void sub_80B9C6C(u8 *a, u32 b, u8 c, void *d)
//_080B9E3E
for (i = 0; i < 4; i++)
{
- r6 = (struct RecordMixing_UnknownStruct *)a + b * c;
+ r6 = (struct DayCareMisc *)a + b * c;
spC[i] = r6;
}
r1 = sub_80B9C4C(d) % 3;
@@ -630,7 +630,7 @@ void sub_80B9C6C(u8 *a, u32 b, u8 c, void *d)
//_080B9EF0
//memcpy(&gSaveBlock1.filler_303C.data[0], a + b * c, 0x38);
//memcpy(&gSaveBlock1.filler_303C.data[1], a + b * c + 0x38, 0x38);
- r6 = (struct RecordMixing_UnknownStruct *)(a + b * c);
+ r6 = (struct DayCareMisc *)(a + b * c);
gSaveBlock1.filler_303C.data[0] = r6->data[0];
gSaveBlock1.filler_303C.data[1] = r6->data[1];
//memcpy(&gSaveBlock1.filler_303C.data[0], &r6->data[0], 0x38);
diff --git a/src/region_map.c b/src/region_map.c
index 076dfecec..900c9ad71 100644
--- a/src/region_map.c
+++ b/src/region_map.c
@@ -9,7 +9,7 @@
#include "palette.h"
#include "pokemon_menu.h"
#include "region_map.h"
-#include "rom4.h"
+#include "overworld.h"
#include "secret_base.h"
#include "songs.h"
#include "sprite.h"
@@ -714,7 +714,7 @@ static void InitializeCursorPosition(void)
return;
}
- switch (get_map_light_level_by_bank_and_number(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum) - 1)
+ switch (GetMapTypeByGroupAndId(gSaveBlock1.location.mapGroup, gSaveBlock1.location.mapNum) - 1)
{
default:
case 0:
@@ -733,7 +733,7 @@ static void InitializeCursorPosition(void)
break;
case 3:
case 6:
- mapHeader = get_mapheader_by_bank_and_number(gSaveBlock1.warp4.mapGroup, gSaveBlock1.warp4.mapNum);
+ mapHeader = Overworld_GetMapHeaderByGroupAndId(gSaveBlock1.warp4.mapGroup, gSaveBlock1.warp4.mapNum);
gRegionMap->mapSecId = mapHeader->regionMapSectionId;
gRegionMap->playerIsInCave = TRUE;
mapWidth = mapHeader->mapData->width;
@@ -742,7 +742,7 @@ static void InitializeCursorPosition(void)
y = gSaveBlock1.warp4.y;
break;
case 8:
- mapHeader = get_mapheader_by_bank_and_number(gSaveBlock1.warp2.mapGroup, gSaveBlock1.warp2.mapNum);
+ mapHeader = Overworld_GetMapHeaderByGroupAndId(gSaveBlock1.warp2.mapGroup, gSaveBlock1.warp2.mapNum);
gRegionMap->mapSecId = mapHeader->regionMapSectionId;
gRegionMap->playerIsInCave = TRUE;
mapWidth = mapHeader->mapData->width;
@@ -758,12 +758,12 @@ static void InitializeCursorPosition(void)
if (gRegionMap->mapSecId != MAPSEC_UNK_0x57)
{
r4 = &gSaveBlock1.warp4;
- mapHeader = get_mapheader_by_bank_and_number(r4->mapGroup, r4->mapNum);
+ mapHeader = Overworld_GetMapHeaderByGroupAndId(r4->mapGroup, r4->mapNum);
}
else
{
r4 = &gSaveBlock1.warp2;
- mapHeader = get_mapheader_by_bank_and_number(r4->mapGroup, r4->mapNum);
+ mapHeader = Overworld_GetMapHeaderByGroupAndId(r4->mapGroup, r4->mapNum);
gRegionMap->mapSecId = mapHeader->regionMapSectionId;
}
gRegionMap->playerIsInCave = FALSE;
@@ -850,7 +850,7 @@ static void sub_80FB600(void)
default:
case 0:
{
- struct MapHeader *mapHeader = get_mapheader_by_bank_and_number(mapGroup, mapNum);
+ struct MapHeader *mapHeader = Overworld_GetMapHeaderByGroupAndId(mapGroup, mapNum);
u16 r1;
gRegionMap->mapSecId = mapHeader->regionMapSectionId;
diff --git a/src/reshow_battle_screen.c b/src/reshow_battle_screen.c
new file mode 100644
index 000000000..343c8f183
--- /dev/null
+++ b/src/reshow_battle_screen.c
@@ -0,0 +1,332 @@
+#include "global.h"
+#include "battle.h"
+#include "battle_anim.h"
+#include "palette.h"
+#include "main.h"
+#include "unknown_task.h"
+#include "text.h"
+#include "rom_8077ABC.h"
+#include "data2.h"
+
+extern struct SpriteTemplate gUnknown_02024E8C;
+extern struct Window gUnknown_03004210;
+extern u16 gUnknown_03004280;
+extern u16 gUnknown_03004288;
+extern u16 gUnknown_030042A4;
+extern u16 gUnknown_030042C0;
+extern u16 gUnknown_030041B0;
+extern u16 gUnknown_030041B4;
+extern u16 gUnknown_030041B8;
+extern u16 gUnknown_030042A0;
+extern u8 gReservedSpritePaletteCount;
+extern u8 gActionSelectionCursor[4];
+extern u8 gBankInMenu;
+extern u16 gBattlePartyID[4];
+extern u8 gNoOfAllBanks;
+extern u16 gBattleTypeFlags;
+extern u8 gObjectBankIDs[4];
+extern u8 gBattleMonForms[4];
+extern u8 gHealthboxIDs[4];
+
+bool8 sub_800E414(u8 a0);
+bool8 sub_8031C30(u8 a0);
+void sub_8031EE8(void);
+void sub_80327CC(void);
+void sub_8032984(u8 a, u16 b);
+void sub_800FCD4(void);
+void BattleLoadOpponentMonSprite(struct Pokemon *, u8 bank);
+void BattleLoadPlayerMonSprite(struct Pokemon *, u8 bank);
+void BattleLoadSubstituteSprite(u8 bank, u8 b);
+void LoadPlayerTrainerBankSprite(u16 a0, u8 bank);
+u8 sub_8077F7C(u8 bank);
+u8 sub_8077F68(u8 bank);
+void nullsub_11(u8 healthboxID, u8 a1);
+void sub_8043DB0(u8 bank);
+u8 battle_make_oam_normal_battle(u8 bank);
+u8 battle_make_oam_safari_battle(void);
+void sub_8045A5C(u8 healthboxID, struct Pokemon*, u8);
+void sub_8043F44(u8 bank);
+void sub_8043DFC(u8 healthboxID);
+
+// this file's functions
+static void CB2_ReshowBattleScreenAfterMenu(void);
+static bool8 LoadAppropiateBankSprite(u8 bank);
+static void sub_807B184(u8 bank);
+static void sub_807B508(u8 bank);
+static void sub_807B06C(void);
+
+#define gReshowState ewram[0x1FFFF]
+#define gHelperState ewram[0x1FFFE]
+
+void nullsub_14(void)
+{
+
+}
+
+void ReshowBattleScreenAfterMenu(void)
+{
+ gPaletteFade.bufferTransferDisabled = 1;
+ SetHBlankCallback(0);
+ SetVBlankCallback(0);
+ REG_MOSAIC = 0;
+ gReshowState = 0;
+ gHelperState = 0;
+ SetMainCallback2(CB2_ReshowBattleScreenAfterMenu);
+}
+
+static void CB2_ReshowBattleScreenAfterMenu(void)
+{
+ switch (gReshowState)
+ {
+ case 0:
+ dp12_8087EA4();
+ SetUpWindowConfig(&gWindowConfig_81E6C58);
+ ResetPaletteFade();
+ InitWindowFromConfig(&gUnknown_03004210, &gWindowConfig_81E6C58);
+ gUnknown_030042A4 = 0;
+ gUnknown_030042A0 = 0;
+ gUnknown_030042C0 = 0;
+ gUnknown_030041B4 = 0;
+ gUnknown_03004288 = 0;
+ gUnknown_03004280 = 0;
+ gUnknown_030041B0 = 0;
+ gUnknown_030041B8 = 0;
+ break;
+ case 1:
+ {
+ const u32 zero = 0;
+ CpuFastSet(&zero, (void*) VRAM, 0x1006000);
+ }
+ break;
+ case 2:
+ if (!sub_800E414(gHelperState))
+ {
+ gHelperState++;
+ gReshowState--;
+ }
+ else
+ gHelperState = 0;
+ break;
+ case 3:
+ ResetSpriteData();
+ break;
+ case 4:
+ FreeAllSpritePalettes();
+ gReservedSpritePaletteCount = 4;
+ break;
+ case 5:
+ sub_8031EE8();
+ break;
+ case 6:
+ if (sub_8031C30(gHelperState))
+ gHelperState = 0;
+ else
+ {
+ gHelperState++;
+ gReshowState--;
+ }
+ break;
+ case 7:
+ if (!LoadAppropiateBankSprite(0))
+ gReshowState--;
+ break;
+ case 8:
+ if (!LoadAppropiateBankSprite(1))
+ gReshowState--;
+ break;
+ case 9:
+ if (!LoadAppropiateBankSprite(2))
+ gReshowState--;
+ break;
+ case 10:
+ if (!LoadAppropiateBankSprite(3))
+ gReshowState--;
+ break;
+ case 11:
+ sub_807B184(0);
+ break;
+ case 12:
+ sub_807B184(1);
+ break;
+ case 13:
+ sub_807B184(2);
+ break;
+ case 14:
+ sub_807B184(3);
+ break;
+ case 15:
+ sub_807B508(0);
+ break;
+ case 16:
+ sub_807B508(1);
+ break;
+ case 17:
+ sub_807B508(2);
+ break;
+ case 18:
+ sub_807B508(3);
+ break;
+ case 19:
+ {
+ u8 opponentBank;
+ u16 species;
+
+ sub_80327CC();
+
+ opponentBank = GetBankByPlayerAI(1);
+ species = GetMonData(&gEnemyParty[gBattlePartyID[opponentBank]], MON_DATA_SPECIES);
+ sub_8032984(opponentBank, species);
+
+ if (IsDoubleBattle())
+ {
+ opponentBank = GetBankByPlayerAI(3);
+ species = GetMonData(&gEnemyParty[gBattlePartyID[opponentBank]], MON_DATA_SPECIES);
+ sub_8032984(opponentBank, species);
+ }
+ sub_802E3E4(gActionSelectionCursor[gBankInMenu], 0);
+ }
+ break;
+ default:
+ SetHBlankCallback(sub_800FCD4);
+ SetVBlankCallback(sub_800FCFC);
+ sub_807B06C();
+ BeginHardwarePaletteFade(0xFF, 0, 0x10, 0, 1);
+ gPaletteFade.bufferTransferDisabled = 0;
+ SetMainCallback2(sub_800F808);
+ break;
+ }
+ gReshowState++;
+}
+
+static void sub_807B06C(void)
+{
+ struct BGCntrlBitfield *regBgcnt1, *regBgcnt2;
+
+ sub_800D6D4();
+
+ regBgcnt1 = (void*)(&REG_BG1CNT);
+ regBgcnt1->charBaseBlock = 0;
+
+ regBgcnt2 = (void*)(&REG_BG2CNT);
+ regBgcnt2->charBaseBlock = 0;
+}
+
+static bool8 LoadAppropiateBankSprite(u8 bank)
+{
+ if (bank < gNoOfAllBanks)
+ {
+ if (GetBankSide(bank))
+ {
+ if (!ewram17800[bank].substituteSprite)
+ BattleLoadOpponentMonSprite(&gEnemyParty[gBattlePartyID[bank]], bank);
+ else
+ BattleLoadSubstituteSprite(bank, 0);
+ }
+ else if (gBattleTypeFlags & BATTLE_TYPE_SAFARI && bank == 0)
+ LoadPlayerTrainerBankSprite(gSaveBlock2.playerGender, 0);
+ else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL && bank == 0)
+ LoadPlayerTrainerBankSprite(2, 0);
+ else if (!ewram17800[bank].substituteSprite)
+ BattleLoadPlayerMonSprite(&gPlayerParty[gBattlePartyID[bank]], bank);
+ else
+ BattleLoadSubstituteSprite(bank, 0);
+
+ gHelperState = 0;
+ }
+ return 1;
+}
+
+static void sub_807B184(u8 bank)
+{
+ if (bank < gNoOfAllBanks)
+ {
+ u8 posY;
+
+ if (ewram17800[bank].substituteSprite)
+ posY = sub_8077F7C(bank);
+ else
+ posY = sub_8077F68(bank);
+ if (GetBankSide(bank))
+ {
+ if (GetMonData(&gEnemyParty[gBattlePartyID[bank]], MON_DATA_HP) == 0)
+ return;
+ GetMonSpriteTemplate_803C56C(GetMonData(&gEnemyParty[gBattlePartyID[bank]], MON_DATA_SPECIES), GetBankIdentity(bank));
+ gObjectBankIDs[bank] = CreateSprite(&gUnknown_02024E8C, sub_8077ABC(bank, 2), posY, sub_8079E90(bank));
+ gSprites[gObjectBankIDs[bank]].oam.paletteNum = bank;
+ gSprites[gObjectBankIDs[bank]].callback = SpriteCallbackDummy;
+ gSprites[gObjectBankIDs[bank]].data0 = bank;
+ gSprites[gObjectBankIDs[bank]].data2 = GetMonData(&gEnemyParty[gBattlePartyID[bank]], MON_DATA_SPECIES);
+ StartSpriteAnim(&gSprites[gObjectBankIDs[bank]], gBattleMonForms[bank]);
+ }
+ else if (gBattleTypeFlags & BATTLE_TYPE_SAFARI && bank == 0)
+ {
+ GetMonSpriteTemplate_803C5A0(gSaveBlock2.playerGender, GetBankIdentity(0));
+ gObjectBankIDs[bank] = CreateSprite(&gUnknown_02024E8C, 0x50,
+ (8 - gTrainerBackPicCoords[gSaveBlock2.playerGender].coords) * 4 + 80,
+ sub_8079E90(0));
+ gSprites[gObjectBankIDs[bank]].oam.paletteNum = bank;
+ gSprites[gObjectBankIDs[bank]].callback = SpriteCallbackDummy;
+ gSprites[gObjectBankIDs[bank]].data0 = bank;
+ }
+ else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL && bank == 0)
+ {
+ GetMonSpriteTemplate_803C5A0(2, GetBankIdentity(0));
+ gObjectBankIDs[bank] = CreateSprite(&gUnknown_02024E8C, 0x50,
+ (8 - gTrainerBackPicCoords[2].coords) * 4 + 80,
+ sub_8079E90(0));
+ gSprites[gObjectBankIDs[bank]].oam.paletteNum = bank;
+ gSprites[gObjectBankIDs[bank]].callback = SpriteCallbackDummy;
+ gSprites[gObjectBankIDs[bank]].data0 = bank;
+ }
+ else
+ {
+ if (GetMonData(&gPlayerParty[gBattlePartyID[bank]], MON_DATA_HP) == 0)
+ return;
+ GetMonSpriteTemplate_803C56C(GetMonData(&gPlayerParty[gBattlePartyID[bank]], MON_DATA_SPECIES), GetBankIdentity(bank));
+ gObjectBankIDs[bank] = CreateSprite(&gUnknown_02024E8C, sub_8077ABC(bank, 2), posY, sub_8079E90(bank));
+ gSprites[gObjectBankIDs[bank]].oam.paletteNum = bank;
+ gSprites[gObjectBankIDs[bank]].callback = SpriteCallbackDummy;
+ gSprites[gObjectBankIDs[bank]].data0 = bank;
+ gSprites[gObjectBankIDs[bank]].data2 = GetMonData(&gPlayerParty[gBattlePartyID[bank]], MON_DATA_SPECIES);
+ StartSpriteAnim(&gSprites[gObjectBankIDs[bank]], gBattleMonForms[bank]);
+ }
+ gSprites[gObjectBankIDs[bank]].invisible = ewram17800[bank].invisible;
+ }
+}
+
+static void sub_807B508(u8 bank)
+{
+ if (bank < gNoOfAllBanks)
+ {
+ u8 healthboxID;
+ if (gBattleTypeFlags & BATTLE_TYPE_SAFARI && bank == 0)
+ healthboxID = battle_make_oam_safari_battle();
+ else if (gBattleTypeFlags & BATTLE_TYPE_WALLY_TUTORIAL && bank == 0)
+ return;
+ else
+ healthboxID = battle_make_oam_normal_battle(bank);
+ gHealthboxIDs[bank] = healthboxID;
+ sub_8043F44(bank);
+ sub_8043DFC(healthboxID);
+ if (GetBankSide(bank))
+ sub_8045A5C(gHealthboxIDs[bank], &gEnemyParty[gBattlePartyID[bank]], 0);
+ else if (gBattleTypeFlags & BATTLE_TYPE_SAFARI)
+ sub_8045A5C(gHealthboxIDs[bank], &gPlayerParty[gBattlePartyID[bank]], 10);
+ else
+ sub_8045A5C(gHealthboxIDs[bank], &gPlayerParty[gBattlePartyID[bank]], 0);
+ if (GetBankIdentity(bank) == 3 || GetBankIdentity(bank) == 2)
+ nullsub_11(gHealthboxIDs[bank], 1);
+ else
+ nullsub_11(gHealthboxIDs[bank], 0);
+ if (GetBankSide(bank))
+ {
+ if (GetMonData(&gEnemyParty[gBattlePartyID[bank]], MON_DATA_HP) == 0)
+ sub_8043DB0(healthboxID);
+ }
+ else if (!(gBattleTypeFlags & BATTLE_TYPE_SAFARI))
+ {
+ if (GetMonData(&gPlayerParty[gBattlePartyID[bank]], MON_DATA_HP) == 0)
+ sub_8043DB0(healthboxID);
+ }
+ }
+}
diff --git a/src/rom3.c b/src/rom3.c
index 803bbf943..3f4860ecc 100644
--- a/src/rom3.c
+++ b/src/rom3.c
@@ -14,6 +14,8 @@
#include "species.h"
#include "task.h"
#include "util.h"
+#include "battle_message.h"
+#include "data2.h"
extern u8 unk_2000000[];
@@ -343,30 +345,30 @@ void sub_800BD54(void)
}
}
-void dp01_prepare_buffer(u8 a, u8 *b, u16 c)
+void PrepareBufferDataTransfer(u8 a, u8 *data, u16 size)
{
int i;
if (gBattleTypeFlags & BATTLE_TYPE_LINK)
{
- dp01_prepare_buffer_wireless_probably(a, c, b);
+ PrepareBufferDataTransferLink(a, size, data);
}
else
{
switch (a)
{
case 0:
- for (i = 0; i < c; i++)
+ for (i = 0; i < size; i++)
{
- gBattleBufferA[gActiveBank][i] = *b;
- b++;
+ gBattleBufferA[gActiveBank][i] = *data;
+ data++;
}
break;
case 1:
- for (i = 0; i < c; i++)
+ for (i = 0; i < size; i++)
{
- gBattleBufferB[gActiveBank][i] = *b;
- b++;
+ gBattleBufferB[gActiveBank][i] = *data;
+ data++;
}
break;
}
@@ -390,12 +392,12 @@ void sub_800BF28(void)
CpuFill16(0, EWRAM_14000, 0x2000);
}
-void dp01_prepare_buffer_wireless_probably(u8 a, u16 b, u8 *c)
+void PrepareBufferDataTransferLink(u8 a, u16 size, u8 *data)
{
s32 r9;
int i;
- r9 = b - b % 4 + 4;
+ r9 = size - size % 4 + 4;
if (gTasks[gUnknown_020238C4].data[14] + r9 + 9 > 0x1000)
{
gTasks[gUnknown_020238C4].data[12] = gTasks[gUnknown_020238C4].data[14];
@@ -409,8 +411,8 @@ void dp01_prepare_buffer_wireless_probably(u8 a, u16 b, u8 *c)
unk_2000000[gTasks[gUnknown_020238C4].data[14] + 0x14005] = (r9 & 0x0000FF00) >> 8;
unk_2000000[gTasks[gUnknown_020238C4].data[14] + 0x14006] = gAbsentBankFlags;
unk_2000000[gTasks[gUnknown_020238C4].data[14] + 0x14007] = gEffectBank;
- for (i = 0; i < b; i++)
- unk_2000000[gTasks[gUnknown_020238C4].data[14] + 0x14008 + i] = c[i];
+ for (i = 0; i < size; i++)
+ unk_2000000[gTasks[gUnknown_020238C4].data[14] + 0x14008 + i] = data[i];
gTasks[gUnknown_020238C4].data[14] = gTasks[gUnknown_020238C4].data[14] + r9 + 8;
}
@@ -570,16 +572,16 @@ void EmitGetAttributes(u8 a, u8 b, u8 c)
gBattleBuffersTransferData[1] = b;
gBattleBuffersTransferData[2] = c;
gBattleBuffersTransferData[3] = 0;
- dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
+ PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4);
}
-void dp01_build_cmdbuf_x01_a_b_0(u8 a, u8 b, u8 c)
+void Emitcmd1(u8 a, u8 b, u8 c)
{
gBattleBuffersTransferData[0] = 1;
gBattleBuffersTransferData[1] = b;
gBattleBuffersTransferData[2] = c;
gBattleBuffersTransferData[3] = 0;
- dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
+ PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4);
}
void EmitSetAttributes(u8 a, u8 b, u8 c, u8 d, void *e)
@@ -591,10 +593,10 @@ void EmitSetAttributes(u8 a, u8 b, u8 c, u8 d, void *e)
gBattleBuffersTransferData[2] = c;
for (i = 0; i < d; i++)
gBattleBuffersTransferData[3 + i] = *(u8*)(e++);
- dp01_prepare_buffer(a, gBattleBuffersTransferData, d + 3);
+ PrepareBufferDataTransfer(a, gBattleBuffersTransferData, d + 3);
}
-void unref_sub_800C6A4(u8 a, u8 b, u8 c, u8 *d)
+void Emitcmd3(u8 a, u8 b, u8 c, u8 *d)
{
int i;
@@ -603,41 +605,41 @@ void unref_sub_800C6A4(u8 a, u8 b, u8 c, u8 *d)
gBattleBuffersTransferData[2] = c;
for (i = 0; i < c; i++)
gBattleBuffersTransferData[3 + i] = *(d++);
- dp01_prepare_buffer(a, gBattleBuffersTransferData, c + 3);
+ PrepareBufferDataTransfer(a, gBattleBuffersTransferData, c + 3);
}
-void dp01_build_cmdbuf_x04_4_4_4(u8 a)
+void EmitLoadPokeSprite(u8 a)
{
gBattleBuffersTransferData[0] = 4;
gBattleBuffersTransferData[1] = 4;
gBattleBuffersTransferData[2] = 4;
gBattleBuffersTransferData[3] = 4;
- dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
+ PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4);
}
-void EmitSwitchInAnim(u8 a, u8 b, u8 c)
+void EmitSendOutPoke(u8 a, u8 b, u8 c)
{
gBattleBuffersTransferData[0] = 5;
gBattleBuffersTransferData[1] = b;
gBattleBuffersTransferData[2] = c;
gBattleBuffersTransferData[3] = 5;
- dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
+ PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4);
}
void EmitReturnPokeToBall(u8 a, u8 b)
{
gBattleBuffersTransferData[0] = 6;
gBattleBuffersTransferData[1] = b;
- dp01_prepare_buffer(a, gBattleBuffersTransferData, 2);
+ PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 2);
}
-void dp01_build_cmdbuf_x07_7_7_7(u8 a)
+void EmitTrainerThrow(u8 a)
{
gBattleBuffersTransferData[0] = 7;
gBattleBuffersTransferData[1] = 7;
gBattleBuffersTransferData[2] = 7;
gBattleBuffersTransferData[3] = 7;
- dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
+ PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4);
}
void EmitTrainerSlide(u8 a)
@@ -646,53 +648,53 @@ void EmitTrainerSlide(u8 a)
gBattleBuffersTransferData[1] = 8;
gBattleBuffersTransferData[2] = 8;
gBattleBuffersTransferData[3] = 8;
- dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
+ PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4);
}
-void dp01_build_cmdbuf_x09_9_9_9(u8 a)
+void EmitTrainerSlideBack(u8 a)
{
gBattleBuffersTransferData[0] = 9;
gBattleBuffersTransferData[1] = 9;
gBattleBuffersTransferData[2] = 9;
gBattleBuffersTransferData[3] = 9;
- dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
+ PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4);
}
-void EmitFaintAnimation(u8 a)
+void Emitcmd10(u8 a)
{
gBattleBuffersTransferData[0] = 10;
gBattleBuffersTransferData[1] = 10;
gBattleBuffersTransferData[2] = 10;
gBattleBuffersTransferData[3] = 10;
- dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
+ PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4);
}
-void dp01_build_cmdbuf_x0B_B_B_B(u8 a)
+void Emitcmd11(u8 a)
{
gBattleBuffersTransferData[0] = 11;
gBattleBuffersTransferData[1] = 11;
gBattleBuffersTransferData[2] = 11;
gBattleBuffersTransferData[3] = 11;
- dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
+ PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4);
}
-void dp01_build_cmdbuf_x0C_C_C_C(u8 a)
+void Emitcmd12(u8 a)
{
gBattleBuffersTransferData[0] = 12;
gBattleBuffersTransferData[1] = 12;
gBattleBuffersTransferData[2] = 12;
gBattleBuffersTransferData[3] = 12;
- dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
+ PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4);
}
-void EmitBallThrowAnim(u8 a, u8 b)
+void EmitBallThrow(u8 a, u8 b)
{
gBattleBuffersTransferData[0] = 13;
gBattleBuffersTransferData[1] = b;
- dp01_prepare_buffer(a, gBattleBuffersTransferData, 2);
+ PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 2);
}
-void unref_sub_800C828(u8 a, u8 b, u8 *c)
+void EmitPuase(u8 a, u8 b, u8 *c)
{
int i;
@@ -700,7 +702,7 @@ void unref_sub_800C828(u8 a, u8 b, u8 *c)
gBattleBuffersTransferData[1] = b;
for (i = 0; i < b * 3; i++)
gBattleBuffersTransferData[2 + i] = *(c++);
- dp01_prepare_buffer(a, gBattleBuffersTransferData, b * 3 + 2);
+ PrepareBufferDataTransfer(a, gBattleBuffersTransferData, b * 3 + 2);
}
void EmitMoveAnimation(u8 a, u16 b, u8 c, u16 d, s32 e, u8 f, struct DisableStruct *g)
@@ -730,314 +732,87 @@ void EmitMoveAnimation(u8 a, u16 b, u8 c, u16 d, s32 e, u8 f, struct DisableStru
gBattleBuffersTransferData[14] = 0;
gBattleBuffersTransferData[15] = 0;
memcpy(&gBattleBuffersTransferData[16], g, sizeof(*g));
- dp01_prepare_buffer(a, gBattleBuffersTransferData, 0x2C);
+ PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 0x2C);
}
-#ifdef NONMATCHING
-void EmitPrintString(u8 a, u16 b)
+void EmitPrintString(u8 a, u16 stringID)
{
- int i;
- //u16 *r12;
+ s32 i;
+ struct StringInfoBattle* stringInfo;
gBattleBuffersTransferData[0] = 16;
gBattleBuffersTransferData[1] = gBattleOutcome;
- gBattleBuffersTransferData[2] = b;
- gBattleBuffersTransferData[3] = (b & 0xFF00) >> 8;
+ gBattleBuffersTransferData[2] = stringID;
+ gBattleBuffersTransferData[3] = (stringID & 0xFF00) >> 8;
+
+ stringInfo = (struct StringInfoBattle*)(&gBattleBuffersTransferData[4]);
+ stringInfo->currentMove = gCurrentMove;
+ stringInfo->lastMove = gUnknown_02024BE8;
+ stringInfo->lastItem = gLastUsedItem;
+ stringInfo->lastAbility = gLastUsedAbility;
+ stringInfo->scrActive = BATTLE_STRUCT->scriptingActive;
+ stringInfo->unk1605E = BATTLE_STRUCT->unk1605E;
+ stringInfo->hpScale = BATTLE_STRUCT->hpScale;
+ stringInfo->StringBank = gStringBank;
+ stringInfo->moveType = gBattleMoves[gCurrentMove].type;
- *((u16 *)&gBattleBuffersTransferData[4]) = gCurrentMove;
- *((u16 *)&gBattleBuffersTransferData[6]) = gUnknown_02024BE8;
- *((u16 *)&gBattleBuffersTransferData[8]) = gLastUsedItem;
-
- gBattleBuffersTransferData[10] = gLastUsedAbility;
- gBattleBuffersTransferData[11] = unk_2000000[0x16000 + 3];
- gBattleBuffersTransferData[12] = unk_2000000[0x16000 + 0x5E];
- gBattleBuffersTransferData[13] = unk_2000000[0x16000 + 0xC1];
- gBattleBuffersTransferData[14] = gStringBank;
- gBattleBuffersTransferData[15] = gBattleMoves[gCurrentMove].type;
for (i = 0; i < 4; i++)
+ stringInfo->abilities[i] = gBattleMons[i].ability;
+ for (i = 0; i < 0x10; i++)
{
- gBattleBuffersTransferData[16 + i] = gBattleMons[i].ability;
- }
- for (i = 0; i < 16; i++)
- {
- gBattleBuffersTransferData[20 + i] = gBattleTextBuff1[i];
- gBattleBuffersTransferData[36 + i] = gBattleTextBuff2[i];
- gBattleBuffersTransferData[52 + i] = gBattleTextBuff3[i];
+ stringInfo->textBuffs[0][i] = gBattleTextBuff1[i];
+ stringInfo->textBuffs[1][i] = gBattleTextBuff2[i];
+ stringInfo->textBuffs[2][i] = gBattleTextBuff3[i];
}
- dp01_prepare_buffer(a, gBattleBuffersTransferData, 0x44);
-}
-#else
-__attribute__((naked))
-void EmitPrintString(u8 a, u16 b)
-{
- 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\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r10, r0\n\
- lsls r1, 16\n\
- lsrs r1, 16\n\
- ldr r2, _0800CA2C @ =gBattleBuffersTransferData\n\
- movs r0, 0x10\n\
- strb r0, [r2]\n\
- ldr r0, _0800CA30 @ =gBattleOutcome\n\
- ldrb r0, [r0]\n\
- strb r0, [r2, 0x1]\n\
- strb r1, [r2, 0x2]\n\
- lsrs r1, 8\n\
- strb r1, [r2, 0x3]\n\
- adds r0, r2, 0x4\n\
- mov r12, r0\n\
- ldr r4, _0800CA34 @ =gCurrentMove\n\
- ldrh r0, [r4]\n\
- strh r0, [r2, 0x4]\n\
- ldr r0, _0800CA38 @ =gUnknown_02024BE8\n\
- ldrh r0, [r0]\n\
- mov r1, r12\n\
- strh r0, [r1, 0x2]\n\
- ldr r0, _0800CA3C @ =gLastUsedItem\n\
- ldrh r0, [r0]\n\
- strh r0, [r1, 0x4]\n\
- ldr r0, _0800CA40 @ =gLastUsedAbility\n\
- ldrb r0, [r0]\n\
- strb r0, [r1, 0x6]\n\
- ldr r1, _0800CA44 @ =0x02000000\n\
- ldr r3, _0800CA48 @ =0x00016003\n\
- adds r0, r1, r3\n\
- ldrb r0, [r0]\n\
- mov r7, r12\n\
- strb r0, [r7, 0x7]\n\
- adds r3, 0x5B\n\
- adds r0, r1, r3\n\
- ldrb r0, [r0]\n\
- strb r0, [r7, 0x8]\n\
- ldr r7, _0800CA4C @ =0x000160c1\n\
- adds r1, r7\n\
- ldrb r0, [r1]\n\
- mov r1, r12\n\
- strb r0, [r1, 0x9]\n\
- ldr r0, _0800CA50 @ =gStringBank\n\
- ldrb r0, [r0]\n\
- strb r0, [r1, 0xA]\n\
- ldr r3, _0800CA54 @ =gBattleMoves\n\
- ldrh r1, [r4]\n\
- lsls r0, r1, 1\n\
- adds r0, r1\n\
- lsls r0, 2\n\
- adds r0, r3\n\
- ldrb r0, [r0, 0x2]\n\
- mov r3, r12\n\
- strb r0, [r3, 0xB]\n\
- movs r3, 0\n\
- mov r9, r2\n\
- ldr r7, _0800CA58 @ =gBattleTextBuff3\n\
- mov r8, r7\n\
- adds r2, 0x10\n\
- ldr r0, _0800CA5C @ =gBattleMons\n\
- adds r4, r0, 0\n\
- adds r4, 0x20\n\
-_0800C9D2:\n\
- adds r1, r2, r3\n\
- ldrb r0, [r4]\n\
- strb r0, [r1]\n\
- adds r4, 0x58\n\
- adds r3, 0x1\n\
- cmp r3, 0x3\n\
- ble _0800C9D2\n\
- movs r3, 0\n\
- mov r5, r12\n\
- adds r5, 0x10\n\
- mov r4, r12\n\
- adds r4, 0x20\n\
- ldr r6, _0800CA60 @ =gBattleTextBuff2\n\
- mov r2, r12\n\
- adds r2, 0x30\n\
-_0800C9F0:\n\
- adds r1, r5, r3\n\
- ldr r7, _0800CA64 @ =gBattleTextBuff1\n\
- adds r0, r3, r7\n\
- ldrb r0, [r0]\n\
- strb r0, [r1]\n\
- adds r1, r4, r3\n\
- adds r0, r3, r6\n\
- ldrb r0, [r0]\n\
- strb r0, [r1]\n\
- adds r1, r2, r3\n\
- mov r7, r8\n\
- adds r0, r3, r7\n\
- ldrb r0, [r0]\n\
- strb r0, [r1]\n\
- adds r3, 0x1\n\
- cmp r3, 0xF\n\
- ble _0800C9F0\n\
- mov r0, r10\n\
- mov r1, r9\n\
- movs r2, 0x44\n\
- bl dp01_prepare_buffer\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\
- .align 2, 0\n\
-_0800CA2C: .4byte gBattleBuffersTransferData\n\
-_0800CA30: .4byte gBattleOutcome\n\
-_0800CA34: .4byte gCurrentMove\n\
-_0800CA38: .4byte gUnknown_02024BE8\n\
-_0800CA3C: .4byte gLastUsedItem\n\
-_0800CA40: .4byte gLastUsedAbility\n\
-_0800CA44: .4byte 0x02000000\n\
-_0800CA48: .4byte 0x00016003\n\
-_0800CA4C: .4byte 0x000160c1\n\
-_0800CA50: .4byte gStringBank\n\
-_0800CA54: .4byte gBattleMoves\n\
-_0800CA58: .4byte gBattleTextBuff3\n\
-_0800CA5C: .4byte gBattleMons\n\
-_0800CA60: .4byte gBattleTextBuff2\n\
-_0800CA64: .4byte gBattleTextBuff1\n\
- .syntax divided\n");
+ PrepareBufferDataTransfer(a, gBattleBuffersTransferData, sizeof(struct StringInfoBattle) + 4);
}
-#endif
-__attribute__((naked))
void EmitPrintStringPlayerOnly(u8 a, u16 stringID)
{
- 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\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- mov r10, r0\n\
- lsls r1, 16\n\
- lsrs r1, 16\n\
- ldr r2, _0800CB28 @ =gBattleBuffersTransferData\n\
- movs r0, 0x11\n\
- strb r0, [r2]\n\
- strb r0, [r2, 0x1]\n\
- strb r1, [r2, 0x2]\n\
- lsrs r1, 8\n\
- strb r1, [r2, 0x3]\n\
- adds r0, r2, 0x4\n\
- mov r12, r0\n\
- ldr r0, _0800CB2C @ =gCurrentMove\n\
- ldrh r0, [r0]\n\
- strh r0, [r2, 0x4]\n\
- ldr r0, _0800CB30 @ =gUnknown_02024BE8\n\
- ldrh r0, [r0]\n\
- mov r1, r12\n\
- strh r0, [r1, 0x2]\n\
- ldr r0, _0800CB34 @ =gLastUsedItem\n\
- ldrh r0, [r0]\n\
- strh r0, [r1, 0x4]\n\
- ldr r0, _0800CB38 @ =gLastUsedAbility\n\
- ldrb r0, [r0]\n\
- strb r0, [r1, 0x6]\n\
- ldr r0, _0800CB3C @ =0x02000000\n\
- ldr r3, _0800CB40 @ =0x00016003\n\
- adds r1, r0, r3\n\
- ldrb r1, [r1]\n\
- mov r7, r12\n\
- strb r1, [r7, 0x7]\n\
- ldr r1, _0800CB44 @ =0x0001605e\n\
- adds r0, r1\n\
- ldrb r0, [r0]\n\
- strb r0, [r7, 0x8]\n\
- movs r3, 0\n\
- mov r9, r2\n\
- ldr r7, _0800CB48 @ =gBattleTextBuff3\n\
- mov r8, r7\n\
- mov r4, r9\n\
- adds r4, 0x10\n\
- ldr r0, _0800CB4C @ =gBattleMons\n\
- adds r2, r0, 0\n\
- adds r2, 0x20\n\
-_0800CACE:\n\
- adds r1, r4, r3\n\
- ldrb r0, [r2]\n\
- strb r0, [r1]\n\
- adds r2, 0x58\n\
- adds r3, 0x1\n\
- cmp r3, 0x3\n\
- ble _0800CACE\n\
- movs r3, 0\n\
- mov r5, r12\n\
- adds r5, 0x10\n\
- mov r4, r12\n\
- adds r4, 0x20\n\
- ldr r6, _0800CB50 @ =gBattleTextBuff2\n\
- mov r2, r12\n\
- adds r2, 0x30\n\
-_0800CAEC:\n\
- adds r1, r5, r3\n\
- ldr r7, _0800CB54 @ =gBattleTextBuff1\n\
- adds r0, r3, r7\n\
- ldrb r0, [r0]\n\
- strb r0, [r1]\n\
- adds r1, r4, r3\n\
- adds r0, r3, r6\n\
- ldrb r0, [r0]\n\
- strb r0, [r1]\n\
- adds r1, r2, r3\n\
- mov r7, r8\n\
- adds r0, r3, r7\n\
- ldrb r0, [r0]\n\
- strb r0, [r1]\n\
- adds r3, 0x1\n\
- cmp r3, 0xF\n\
- ble _0800CAEC\n\
- mov r0, r10\n\
- mov r1, r9\n\
- movs r2, 0x44\n\
- bl dp01_prepare_buffer\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\
- .align 2, 0\n\
-_0800CB28: .4byte gBattleBuffersTransferData\n\
-_0800CB2C: .4byte gCurrentMove\n\
-_0800CB30: .4byte gUnknown_02024BE8\n\
-_0800CB34: .4byte gLastUsedItem\n\
-_0800CB38: .4byte gLastUsedAbility\n\
-_0800CB3C: .4byte 0x02000000\n\
-_0800CB40: .4byte 0x00016003\n\
-_0800CB44: .4byte 0x0001605e\n\
-_0800CB48: .4byte gBattleTextBuff3\n\
-_0800CB4C: .4byte gBattleMons\n\
-_0800CB50: .4byte gBattleTextBuff2\n\
-_0800CB54: .4byte gBattleTextBuff1\n\
- .syntax divided\n");
-}
-
-void dp01_build_cmdbuf_x12_a_bb(u8 a, u8 b, u16 c)
+ s32 i;
+ struct StringInfoBattle* stringInfo;
+
+ gBattleBuffersTransferData[0] = 17;
+ gBattleBuffersTransferData[1] = 17;
+ gBattleBuffersTransferData[2] = stringID;
+ gBattleBuffersTransferData[3] = (stringID & 0xFF00) >> 8;
+
+ stringInfo = (struct StringInfoBattle*)(&gBattleBuffersTransferData[4]);
+ stringInfo->currentMove = gCurrentMove;
+ stringInfo->lastMove = gUnknown_02024BE8;
+ stringInfo->lastItem = gLastUsedItem;
+ stringInfo->lastAbility = gLastUsedAbility;
+ stringInfo->scrActive = BATTLE_STRUCT->scriptingActive;
+ stringInfo->unk1605E = BATTLE_STRUCT->unk1605E;
+
+ for (i = 0; i < 4; i++)
+ stringInfo->abilities[i] = gBattleMons[i].ability;
+ for (i = 0; i < 0x10; i++)
+ {
+ stringInfo->textBuffs[0][i] = gBattleTextBuff1[i];
+ stringInfo->textBuffs[1][i] = gBattleTextBuff2[i];
+ stringInfo->textBuffs[2][i] = gBattleTextBuff3[i];
+ }
+ PrepareBufferDataTransfer(a, gBattleBuffersTransferData, sizeof(struct StringInfoBattle) + 4);
+}
+
+void Emitcmd18(u8 a, u8 b, u16 c)
{
gBattleBuffersTransferData[0] = 18;
gBattleBuffersTransferData[1] = b;
gBattleBuffersTransferData[2] = c;
gBattleBuffersTransferData[3] = (c & 0xFF00) >> 8;
- dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
+ PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4);
}
-void unref_sub_800CB84(u8 a, u8 b)
+void Emitcmd19(u8 a, u8 b)
{
gBattleBuffersTransferData[0] = 19;
gBattleBuffersTransferData[1] = b;
- dp01_prepare_buffer(a, gBattleBuffersTransferData, 2);
+ PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 2);
}
-void sub_800CBA4(u8 a, u8 b, u8 c, u8 *d)
+void Emitcmd20(u8 a, u8 b, u8 c, u8 *d)
{
u32 i;
@@ -1047,17 +822,17 @@ void sub_800CBA4(u8 a, u8 b, u8 c, u8 *d)
gBattleBuffersTransferData[3] = 0;
for (i = 0; i < 20; i++)
gBattleBuffersTransferData[4 + i] = d[i];
- dp01_prepare_buffer(a, gBattleBuffersTransferData, 24);
+ PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 24);
}
-void sub_800CBE0(u8 a, u8 *b)
+void EmitOpenBag(u8 a, u8 *b)
{
int i;
gBattleBuffersTransferData[0] = 21;
for (i = 0; i < 3; i++)
gBattleBuffersTransferData[1 + i] = b[i];
- dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
+ PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4);
}
void EmitChoosePokemon(u8 a, u8 b, u8 c, u8 d, u8 *e)
@@ -1070,16 +845,16 @@ void EmitChoosePokemon(u8 a, u8 b, u8 c, u8 d, u8 *e)
gBattleBuffersTransferData[3] = d;
for (i = 0; i < 3; i++)
gBattleBuffersTransferData[4 + i] = e[i];
- dp01_prepare_buffer(a, gBattleBuffersTransferData, 8); //but only 7 bytes were written
+ PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 8); //but only 7 bytes were written
}
-void dp01_build_cmdbuf_x17_17_17_17(u8 a)
+void Emitcmd23(u8 a)
{
gBattleBuffersTransferData[0] = 23;
gBattleBuffersTransferData[1] = 23;
gBattleBuffersTransferData[2] = 23;
gBattleBuffersTransferData[3] = 23;
- dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
+ PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4);
}
// FIXME: I think this function is supposed to take s16 as its second argument,
@@ -1090,7 +865,7 @@ void EmitHealthBarUpdate(u8 a, u16 b)
gBattleBuffersTransferData[1] = 0;
gBattleBuffersTransferData[2] = (s16)b;
gBattleBuffersTransferData[3] = ((s16)b & 0xFF00) >> 8;
- dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
+ PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4);
}
// FIXME: I think this function is supposed to take s16 as its third argument,
@@ -1101,7 +876,7 @@ void EmitExpBarUpdate(u8 a, u8 b, u16 c)
gBattleBuffersTransferData[1] = b;
gBattleBuffersTransferData[2] = (s16)c;
gBattleBuffersTransferData[3] = ((s16)c & 0xFF00) >> 8;
- dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
+ PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4);
}
void EmitStatusIconUpdate(u8 a, u32 b, u32 c)
@@ -1115,7 +890,7 @@ void EmitStatusIconUpdate(u8 a, u32 b, u32 c)
gBattleBuffersTransferData[6] = (c & 0x0000FF00) >> 8;
gBattleBuffersTransferData[7] = (c & 0x00FF0000) >> 16;
gBattleBuffersTransferData[8] = (c & 0xFF000000) >> 24;
- dp01_prepare_buffer(a, gBattleBuffersTransferData, 9);
+ PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 9);
}
void EmitStatusAnimation(u8 a, u8 b, u32 c)
@@ -1126,17 +901,17 @@ void EmitStatusAnimation(u8 a, u8 b, u32 c)
gBattleBuffersTransferData[3] = (c & 0x0000FF00) >> 8;
gBattleBuffersTransferData[4] = (c & 0x00FF0000) >> 16;
gBattleBuffersTransferData[5] = (c & 0xFF000000) >> 24;
- dp01_prepare_buffer(a, gBattleBuffersTransferData, 6);
+ PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 6);
}
void EmitStatusXor(u8 a, u8 b)
{
gBattleBuffersTransferData[0] = 28;
gBattleBuffersTransferData[1] = b;
- dp01_prepare_buffer(a, gBattleBuffersTransferData, 2);
+ PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 2);
}
-void dp01_build_cmdbuf_x1D_1D_numargs_varargs(u8 a, u16 b, u8 *c)
+void Emitcmd29(u8 a, u16 b, u8 *c)
{
int i;
@@ -1146,10 +921,10 @@ void dp01_build_cmdbuf_x1D_1D_numargs_varargs(u8 a, u16 b, u8 *c)
gBattleBuffersTransferData[3] = (b & 0xFF00) >> 8;
for (i = 0; i < b; i++)
gBattleBuffersTransferData[4 + i] = *(c++);
- dp01_prepare_buffer(a, gBattleBuffersTransferData, b + 4);
+ PrepareBufferDataTransfer(a, gBattleBuffersTransferData, b + 4);
}
-void unref_sub_800CDD4(u8 a, u32 b, u16 c, u8 *d)
+void EmitDMATransfer(u8 a, u32 b, u16 c, u8 *d)
{
int i;
@@ -1162,10 +937,10 @@ void unref_sub_800CDD4(u8 a, u32 b, u16 c, u8 *d)
gBattleBuffersTransferData[6] = (c & 0xFF00) >> 8;
for (i = 0; i < c; i++)
gBattleBuffersTransferData[7 + i] = *(d++);
- dp01_prepare_buffer(a, gBattleBuffersTransferData, c + 7);
+ PrepareBufferDataTransfer(a, gBattleBuffersTransferData, c + 7);
}
-void unref_sub_800CE3C(u8 a, u16 b, u8 *c)
+void Emitcmd31(u8 a, u16 b, u8 *c)
{
int i;
@@ -1174,10 +949,10 @@ void unref_sub_800CE3C(u8 a, u16 b, u8 *c)
gBattleBuffersTransferData[2] = (b & 0xFF00) >> 8;
for (i = 0; i < b; i++)
gBattleBuffersTransferData[3 + i] = *(c++);
- dp01_prepare_buffer(a, gBattleBuffersTransferData, b + 3);
+ PrepareBufferDataTransfer(a, gBattleBuffersTransferData, b + 3);
}
-void unref_sub_800CE84(u8 a, u16 b, u8 *c)
+void Emitcmd32(u8 a, u16 b, u8 *c)
{
int i;
@@ -1186,19 +961,19 @@ void unref_sub_800CE84(u8 a, u16 b, u8 *c)
gBattleBuffersTransferData[2] = (b & 0xFF00) >> 8;
for (i = 0; i < b; i++)
gBattleBuffersTransferData[3 + i] = *(c++);
- dp01_prepare_buffer(a, gBattleBuffersTransferData, b + 3);
+ PrepareBufferDataTransfer(a, gBattleBuffersTransferData, b + 3);
}
-void dp01_build_cmdbuf_x21_a_bb(u8 a, u8 b, u16 c)
+void Emitcmd33(u8 a, u8 b, u16 c)
{
gBattleBuffersTransferData[0] = 33;
gBattleBuffersTransferData[1] = b;
gBattleBuffersTransferData[2] = c;
gBattleBuffersTransferData[3] = (c & 0xFF00) >> 8;
- dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
+ PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4);
}
-void dp01_build_cmdbuf_x22_a_three_bytes(u8 a, u8 b, u8 *c)
+void Emitcmd34(u8 a, u8 b, u8 *c)
{
int i;
@@ -1206,59 +981,59 @@ void dp01_build_cmdbuf_x22_a_three_bytes(u8 a, u8 b, u8 *c)
gBattleBuffersTransferData[1] = b;
for (i = 0; i < 3; i++)
gBattleBuffersTransferData[2 + i] = c[i];
- dp01_prepare_buffer(a, gBattleBuffersTransferData, 5);
+ PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 5);
}
-void dp01_build_cmdbuf_x23_aa_0(u8 a, u16 b)
+void Emitcmd35(u8 a, u16 b)
{
gBattleBuffersTransferData[0] = 35;
gBattleBuffersTransferData[1] = b;
gBattleBuffersTransferData[2] = (b & 0xFF00) >> 8;
gBattleBuffersTransferData[3] = 0;
- dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
+ PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4);
}
-void dp01_build_cmdbuf_x24_aa_0(u8 a, u16 b)
+void Emitcmd36(u8 a, u16 b)
{
gBattleBuffersTransferData[0] = 36;
gBattleBuffersTransferData[1] = b;
gBattleBuffersTransferData[2] = (b & 0xFF00) >> 8;
gBattleBuffersTransferData[3] = 0;
- dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
+ PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4);
}
-void dp01_build_cmdbuf_x25_25_25_25(u8 a)
+void Emitcmd37(u8 a)
{
gBattleBuffersTransferData[0] = 37;
gBattleBuffersTransferData[1] = 37;
gBattleBuffersTransferData[2] = 37;
gBattleBuffersTransferData[3] = 37;
- dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
+ PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4);
}
-void dp01_build_cmdbuf_x26_a(u8 a, u8 b)
+void Emitcmd38(u8 a, u8 b)
{
gBattleBuffersTransferData[0] = 38;
gBattleBuffersTransferData[1] = b;
- dp01_prepare_buffer(a, gBattleBuffersTransferData, 2);
+ PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 2);
}
-void dp01_build_cmdbuf_x27_27_27_27(u8 a)
+void Emitcmd39(u8 a)
{
gBattleBuffersTransferData[0] = 39;
gBattleBuffersTransferData[1] = 39;
gBattleBuffersTransferData[2] = 39;
gBattleBuffersTransferData[3] = 39;
- dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
+ PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4);
}
-void dp01_build_cmdbuf_x28_28_28_28(u8 a)
+void Emitcmd40(u8 a)
{
gBattleBuffersTransferData[0] = 40;
gBattleBuffersTransferData[1] = 40;
gBattleBuffersTransferData[2] = 40;
gBattleBuffersTransferData[3] = 40;
- dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
+ PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4);
}
void EmitHitAnimation(u8 a)
@@ -1267,16 +1042,16 @@ void EmitHitAnimation(u8 a)
gBattleBuffersTransferData[1] = 41;
gBattleBuffersTransferData[2] = 41;
gBattleBuffersTransferData[3] = 41;
- dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
+ PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4);
}
-void dp01_build_cmdbuf_x2A_2A_2A_2A(u8 a)
+void Emitcmd42(u8 a)
{
gBattleBuffersTransferData[0] = 42;
gBattleBuffersTransferData[1] = 42;
gBattleBuffersTransferData[2] = 42;
gBattleBuffersTransferData[3] = 42;
- dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
+ PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4);
}
void EmitEffectivenessSound(u8 a, u16 b)
@@ -1285,16 +1060,16 @@ void EmitEffectivenessSound(u8 a, u16 b)
gBattleBuffersTransferData[1] = b;
gBattleBuffersTransferData[2] = (b & 0xFF00) >> 8;
gBattleBuffersTransferData[3] = 0;
- dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
+ PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4);
}
-void EmitPlaySound(u8 a, u16 b)
+void Emitcmd44(u8 a, u16 b)
{
gBattleBuffersTransferData[0] = 44;
gBattleBuffersTransferData[1] = b;
gBattleBuffersTransferData[2] = (b & 0xFF00) >> 8;
gBattleBuffersTransferData[3] = 0;
- dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
+ PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4);
}
void EmitFaintingCry(u8 a)
@@ -1303,26 +1078,26 @@ void EmitFaintingCry(u8 a)
gBattleBuffersTransferData[1] = 45;
gBattleBuffersTransferData[2] = 45;
gBattleBuffersTransferData[3] = 45;
- dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
+ PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4);
}
-void EmitBattleIntroSlide(u8 a, u8 b)
+void EmitIntroSlide(u8 a, u8 battleTerrain)
{
gBattleBuffersTransferData[0] = 46;
- gBattleBuffersTransferData[1] = b;
- dp01_prepare_buffer(a, gBattleBuffersTransferData, 2);
+ gBattleBuffersTransferData[1] = battleTerrain;
+ PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 2);
}
-void dp01_build_cmdbuf_x2F_2F_2F_2F(u8 a)
+void EmitTrainerBallThrow(u8 a)
{
gBattleBuffersTransferData[0] = 47;
gBattleBuffersTransferData[1] = 47;
gBattleBuffersTransferData[2] = 47;
gBattleBuffersTransferData[3] = 47;
- dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
+ PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4);
}
-void dp01_build_cmdbuf_x30_TODO(u8 a, u8 *b, u8 c)
+void Emitcmd48(u8 a, u8 *b, u8 c)
{
int i;
@@ -1332,25 +1107,25 @@ void dp01_build_cmdbuf_x30_TODO(u8 a, u8 *b, u8 c)
gBattleBuffersTransferData[3] = 48;
for (i = 0; i < 48; i++)
gBattleBuffersTransferData[4 + i] = b[i];
- dp01_prepare_buffer(a, gBattleBuffersTransferData, 52);
+ PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 52);
}
-void dp01_build_cmdbuf_x31_31_31_31(u8 a)
+void Emitcmd49(u8 a)
{
gBattleBuffersTransferData[0] = 49;
gBattleBuffersTransferData[1] = 49;
gBattleBuffersTransferData[2] = 49;
gBattleBuffersTransferData[3] = 49;
- dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
+ PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4);
}
-void dp01_build_cmdbuf_x32_32_32_32(u8 a)
+void Emitcmd50(u8 a)
{
gBattleBuffersTransferData[0] = 50;
gBattleBuffersTransferData[1] = 50;
gBattleBuffersTransferData[2] = 50;
gBattleBuffersTransferData[3] = 50;
- dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
+ PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4);
}
void EmitSpriteInvisibility(u8 a, u8 b)
@@ -1359,7 +1134,7 @@ void EmitSpriteInvisibility(u8 a, u8 b)
gBattleBuffersTransferData[1] = b;
gBattleBuffersTransferData[2] = 51;
gBattleBuffersTransferData[3] = 51;
- dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
+ PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4);
}
void EmitBattleAnimation(u8 a, u8 b, u16 c)
@@ -1368,26 +1143,26 @@ void EmitBattleAnimation(u8 a, u8 b, u16 c)
gBattleBuffersTransferData[1] = b;
gBattleBuffersTransferData[2] = c;
gBattleBuffersTransferData[3] = (c & 0xFF00) >> 8;
- dp01_prepare_buffer(a, gBattleBuffersTransferData, 4);
+ PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 4);
}
void EmitLinkStandbyMsg(u8 a, u8 b)
{
gBattleBuffersTransferData[0] = 53;
gBattleBuffersTransferData[1] = b;
- dp01_prepare_buffer(a, gBattleBuffersTransferData, 2);
+ PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 2);
}
void EmitResetActionMoveSelection(u8 a, u8 b)
{
gBattleBuffersTransferData[0] = 54;
gBattleBuffersTransferData[1] = b;
- dp01_prepare_buffer(a, gBattleBuffersTransferData, 2);
+ PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 2);
}
-void dp01_build_cmdbuf_x37_a(u8 a, u8 b)
+void Emitcmd55(u8 a, u8 b)
{
gBattleBuffersTransferData[0] = 55;
gBattleBuffersTransferData[1] = b;
- dp01_prepare_buffer(a, gBattleBuffersTransferData, 2);
+ PrepareBufferDataTransfer(a, gBattleBuffersTransferData, 2);
}
diff --git a/src/rom6.c b/src/rom6.c
index ff032b6c2..3a5071034 100644
--- a/src/rom6.c
+++ b/src/rom6.c
@@ -6,7 +6,7 @@
#include "field_player_avatar.h"
#include "item_use.h"
#include "pokemon_menu.h"
-#include "rom4.h"
+#include "overworld.h"
#include "script.h"
#include "songs.h"
#include "sound.h"
@@ -17,7 +17,7 @@ extern u16 gScriptLastTalked;
extern void (*gFieldCallback)(void);
extern u8 gLastFieldPokeMenuOpened;
extern void (*gUnknown_03005CE4)(void);
-extern u8 UseRockSmashScript[];
+extern u8 S_UseRockSmash[];
EWRAM_DATA struct MapPosition gUnknown_0203923C = {0};
@@ -64,9 +64,9 @@ static void task08_080C9820(u8 taskId)
if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(&gMapObjects[mapObjId])
|| FieldObjectClearAnimIfSpecialAnimFinished(&gMapObjects[mapObjId]))
{
- if (gMapHeader.mapType == 5)
+ if (gMapHeader.mapType == MAP_TYPE_UNDERWATER)
{
- FieldEffectStart(0x3B);
+ FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT);
gTasks[taskId].func = sub_810B428;
}
else
@@ -82,7 +82,7 @@ static void sub_810B3DC(u8 taskId)
{
if (FieldObjectCheckIfSpecialAnimFinishedOrInactive(&gMapObjects[gPlayerAvatar.mapObjectId]) == TRUE)
{
- FieldEffectStart(0x3B);
+ FieldEffectStart(FLDEFF_FIELD_MOVE_SHOW_MON_INIT);
gTasks[taskId].func = sub_810B428;
}
}
@@ -91,17 +91,17 @@ static void sub_810B428(u8 taskId)
{
if (!FieldEffectActiveListContains(6))
{
- gUnknown_0202FF84[1] = player_get_direction_lower_nybble();
- if (gUnknown_0202FF84[1] == 1)
- gUnknown_0202FF84[2] = 0;
- if (gUnknown_0202FF84[1] == 2)
- gUnknown_0202FF84[2] = 1;
- if (gUnknown_0202FF84[1] == 3)
- gUnknown_0202FF84[2] = 2;
- if (gUnknown_0202FF84[1] == 4)
- gUnknown_0202FF84[2] = 3;
+ 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;
sub_805B980(&gMapObjects[gPlayerAvatar.mapObjectId], GetPlayerAvatarGraphicsIdByCurrentState());
- StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], gUnknown_0202FF84[2]);
+ StartSpriteAnim(&gSprites[gPlayerAvatar.spriteId], gFieldEffectArguments[2]);
FieldEffectActiveListRemove(6);
gTasks[taskId].func = sub_810B4CC;
}
@@ -120,7 +120,7 @@ bool8 SetUpFieldMove_RockSmash(void)
{
if (npc_before_player_of_type(0x56) == TRUE)
{
- gFieldCallback = sub_808AB90;
+ gFieldCallback = FieldCallback_Teleport;
gUnknown_03005CE4 = sub_810B53C;
return TRUE;
}
@@ -132,8 +132,8 @@ bool8 SetUpFieldMove_RockSmash(void)
static void sub_810B53C(void)
{
- gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened;
- ScriptContext1_SetupScript(UseRockSmashScript);
+ gFieldEffectArguments[0] = gLastFieldPokeMenuOpened;
+ ScriptContext1_SetupScript(S_UseRockSmash);
}
int FldEff_RockSmash(void)
@@ -149,15 +149,15 @@ int FldEff_RockSmash(void)
static void sub_810B58C(void)
{
PlaySE(SE_W088);
- FieldEffectActiveListRemove(0x25);
+ FieldEffectActiveListRemove(FLDEFF_USE_ROCK_SMASH);
EnableBothScriptContexts();
}
int SetUpFieldMove_Dig(void)
{
- if (sub_80CA1C8() == TRUE)
+ if (CanUseEscapeRopeOnCurrMap() == TRUE)
{
- gFieldCallback = sub_808AB90;
+ gFieldCallback = FieldCallback_Teleport;
gUnknown_03005CE4 = sub_810B5D8;
return TRUE;
}
@@ -170,8 +170,8 @@ int SetUpFieldMove_Dig(void)
static void sub_810B5D8(void)
{
sub_8053014();
- FieldEffectStart(0x26);
- gUnknown_0202FF84[0] = gLastFieldPokeMenuOpened;
+ FieldEffectStart(FLDEFF_USE_DIG);
+ gFieldEffectArguments[0] = gLastFieldPokeMenuOpened;
}
int FldEff_UseDig(void)
@@ -189,7 +189,7 @@ static void sub_810B634(void)
{
u8 taskId;
- FieldEffectActiveListRemove(0x26);
+ FieldEffectActiveListRemove(FLDEFF_USE_DIG);
if (ShouldDoBrailleDigEffect())
{
DoBrailleDigEffect();
diff --git a/src/rotating_gate.c b/src/rotating_gate.c
index bb3c31dfc..e8ab7e1bf 100644
--- a/src/rotating_gate.c
+++ b/src/rotating_gate.c
@@ -12,11 +12,11 @@
#define ROTATING_GATE_PUZZLE_MAX 14
#define GATE_ARM_MAX_LENGTH 2
-#define GATE_ROTATION(rotationDirection, arm, longArm) \
+#define GATE_ROT(rotationDirection, arm, longArm) \
((rotationDirection & 15) << 4) | ((arm & 7) << 1) | (longArm & 1)
-#define GATE_ROTATION_CLOCKWISE(arm, longArm) GATE_ROTATION(ROTATE_CLOCKWISE, arm, longArm)
-#define GATE_ROTATION_ANTICLOCKWISE(arm, longArm) GATE_ROTATION(ROTATE_ANTICLOCKWISE, arm, longArm)
-#define GATE_ROTATION_NONE 255
+#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 void SpriteCallback_RotatingGate(struct Sprite *sprite);
static u8 RotatingGate_CreateGate(u8 gateId, s16 deltaX, s16 deltaY);
@@ -181,7 +181,8 @@ enum
struct RotatingGatePuzzle
{
- struct Coords16 pos;
+ s16 x;
+ s16 y;
u8 shape;
u8 orientation;
};
@@ -193,32 +194,34 @@ struct Coords8
};
// Fortree
-static const struct RotatingGatePuzzle sRotatingGate_FortreePuzzleConfig[] = {
- { { 12, 5 }, GATE_SHAPE_L4, GATE_ORIENTATION_0 },
- { { 14, 7 }, GATE_SHAPE_L4, GATE_ORIENTATION_270 },
- { { 16, 4 }, GATE_SHAPE_T2, GATE_ORIENTATION_90 },
- { { 15, 14 }, GATE_SHAPE_L2, GATE_ORIENTATION_0 },
- { { 18, 13 }, GATE_SHAPE_T1, GATE_ORIENTATION_180 },
- { { 8, 20 }, GATE_SHAPE_T1, GATE_ORIENTATION_180 },
- { { 16, 20 }, GATE_SHAPE_T4, GATE_ORIENTATION_90 },
+static const struct RotatingGatePuzzle sRotatingGate_FortreePuzzleConfig[] =
+{
+ {12, 5, GATE_SHAPE_L4, GATE_ORIENTATION_0},
+ {14, 7, GATE_SHAPE_L4, GATE_ORIENTATION_270},
+ {16, 4, GATE_SHAPE_T2, GATE_ORIENTATION_90},
+ {15, 14, GATE_SHAPE_L2, GATE_ORIENTATION_0},
+ {18, 13, GATE_SHAPE_T1, GATE_ORIENTATION_180},
+ { 8, 20, GATE_SHAPE_T1, GATE_ORIENTATION_180},
+ {16, 20, GATE_SHAPE_T4, GATE_ORIENTATION_90},
};
// Trickhouse
-static const struct RotatingGatePuzzle sRotatingGate_TrickHousePuzzleConfig[] = {
- { { 13, 3 }, GATE_SHAPE_T1, GATE_ORIENTATION_270 },
- { { 12, 6 }, GATE_SHAPE_T1, GATE_ORIENTATION_180 },
- { { 3, 6 }, GATE_SHAPE_T1, GATE_ORIENTATION_180 },
- { { 3, 9 }, GATE_SHAPE_T2, GATE_ORIENTATION_270 },
- { { 8, 8 }, GATE_SHAPE_L1, GATE_ORIENTATION_90 },
- { { 2, 12 }, GATE_SHAPE_T3, GATE_ORIENTATION_180 },
- { { 9, 13 }, GATE_SHAPE_L2, GATE_ORIENTATION_0 },
- { { 3, 14 }, GATE_SHAPE_L3, GATE_ORIENTATION_90 },
- { { 9, 15 }, GATE_SHAPE_L4, GATE_ORIENTATION_180 },
- { { 3, 18 }, GATE_SHAPE_T2, GATE_ORIENTATION_180 },
- { { 2, 19 }, GATE_SHAPE_T1, GATE_ORIENTATION_0 },
- { { 5, 21 }, GATE_SHAPE_L1, GATE_ORIENTATION_0 },
- { { 9, 19 }, GATE_SHAPE_L4, GATE_ORIENTATION_270 },
- { { 12, 20 }, GATE_SHAPE_T1, GATE_ORIENTATION_90 },
+static const struct RotatingGatePuzzle sRotatingGate_TrickHousePuzzleConfig[] =
+{
+ {13, 3, GATE_SHAPE_T1, GATE_ORIENTATION_270},
+ {12, 6, GATE_SHAPE_T1, GATE_ORIENTATION_180},
+ { 3, 6, GATE_SHAPE_T1, GATE_ORIENTATION_180},
+ { 3, 9, GATE_SHAPE_T2, GATE_ORIENTATION_270},
+ { 8, 8, GATE_SHAPE_L1, GATE_ORIENTATION_90},
+ { 2, 12, GATE_SHAPE_T3, GATE_ORIENTATION_180},
+ { 9, 13, GATE_SHAPE_L2, GATE_ORIENTATION_0},
+ { 3, 14, GATE_SHAPE_L3, GATE_ORIENTATION_90},
+ { 9, 15, GATE_SHAPE_L4, GATE_ORIENTATION_180},
+ { 3, 18, GATE_SHAPE_T2, GATE_ORIENTATION_180},
+ { 2, 19, GATE_SHAPE_T1, GATE_ORIENTATION_0},
+ { 5, 21, GATE_SHAPE_L1, GATE_ORIENTATION_0},
+ { 9, 19, GATE_SHAPE_L4, GATE_ORIENTATION_270},
+ {12, 20, GATE_SHAPE_T1, GATE_ORIENTATION_90},
};
static const u8 sRotatingGateTiles_1[] = INCBIN_U8("graphics/rotating_gates/1.4bpp");
@@ -230,7 +233,8 @@ static const u8 sRotatingGateTiles_7[] = INCBIN_U8("graphics/rotating_gates/7.4b
static const u8 sRotatingGateTiles_0[] = INCBIN_U8("graphics/rotating_gates/0.4bpp");
static const u8 sRotatingGateTiles_4[] = INCBIN_U8("graphics/rotating_gates/4.4bpp");
-static const struct OamData sOamData_RotatingGateLarge = {
+static const struct OamData sOamData_RotatingGateLarge =
+{
.y = 0,
.affineMode = ST_OAM_AFFINE_NORMAL,
.objMode = 0,
@@ -246,7 +250,8 @@ static const struct OamData sOamData_RotatingGateLarge = {
.affineParam = 0,
};
-static const struct OamData sOamData_RotatingGateRegular = {
+static const struct OamData sOamData_RotatingGateRegular =
+{
.y = 0,
.affineMode = ST_OAM_AFFINE_NORMAL,
.objMode = 0,
@@ -262,145 +267,178 @@ static const struct OamData sOamData_RotatingGateRegular = {
.affineParam = 0,
};
-static const struct SpriteSheet sRotatingGatesGraphicsTable[] = {
- { sRotatingGateTiles_0, 0x200, ROTATING_GATE_TILE_TAG + GATE_SHAPE_L1 },
- { sRotatingGateTiles_1, 0x800, ROTATING_GATE_TILE_TAG + GATE_SHAPE_L2 },
- { sRotatingGateTiles_2, 0x800, ROTATING_GATE_TILE_TAG + GATE_SHAPE_L3 },
- { sRotatingGateTiles_3, 0x800, ROTATING_GATE_TILE_TAG + GATE_SHAPE_L4 },
- { sRotatingGateTiles_4, 0x200, ROTATING_GATE_TILE_TAG + GATE_SHAPE_T1 },
- { sRotatingGateTiles_5, 0x800, ROTATING_GATE_TILE_TAG + GATE_SHAPE_T2 },
- { sRotatingGateTiles_6, 0x800, ROTATING_GATE_TILE_TAG + GATE_SHAPE_T3 },
- { sRotatingGateTiles_7, 0x800, ROTATING_GATE_TILE_TAG + GATE_SHAPE_T4 },
- { NULL },
+static const struct SpriteSheet sRotatingGatesGraphicsTable[] =
+{
+ {sRotatingGateTiles_0, 0x200, ROTATING_GATE_TILE_TAG + GATE_SHAPE_L1},
+ {sRotatingGateTiles_1, 0x800, ROTATING_GATE_TILE_TAG + GATE_SHAPE_L2},
+ {sRotatingGateTiles_2, 0x800, ROTATING_GATE_TILE_TAG + GATE_SHAPE_L3},
+ {sRotatingGateTiles_3, 0x800, ROTATING_GATE_TILE_TAG + GATE_SHAPE_L4},
+ {sRotatingGateTiles_4, 0x200, ROTATING_GATE_TILE_TAG + GATE_SHAPE_T1},
+ {sRotatingGateTiles_5, 0x800, ROTATING_GATE_TILE_TAG + GATE_SHAPE_T2},
+ {sRotatingGateTiles_6, 0x800, ROTATING_GATE_TILE_TAG + GATE_SHAPE_T3},
+ {sRotatingGateTiles_7, 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_RotatingGateLarge[] =
+{
+ ANIMCMD_FRAME(0, 0),
+ ANIMCMD_END,
};
-static const union AnimCmd sSpriteAnim_RotatingGateRegular[] = {
+static const union AnimCmd sSpriteAnim_RotatingGateRegular[] =
+{
ANIMCMD_FRAME(0, 0), ANIMCMD_END,
};
-static const union AnimCmd *const sSpriteAnimTable_RotatingGateLarge[] = {
+static const union AnimCmd *const sSpriteAnimTable_RotatingGateLarge[] =
+{
sSpriteAnim_RotatingGateLarge,
};
-static const union AnimCmd *const sSpriteAnimTable_RotatingGateRegular[] = {
+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_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_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_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_Rotated270[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 64, 0),
+ AFFINEANIMCMD_JUMP(0),
};
-static const union AffineAnimCmd sSpriteAffineAnim_RotatingClockwise0to90[] = {
+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[] = {
+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[] = {
+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[] = {
+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[] = {
+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[] = {
+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[] = {
+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[] = {
+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[] = {
+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[] = {
+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[] = {
+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[] = {
+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_RotatingAnticlockwise360to270Faster[] =
+{
+ AFFINEANIMCMD_FRAME(0x100, 0x100, 0, 0),
+ AFFINEANIMCMD_FRAME(0x0, 0x0, 8, 8),
+ AFFINEANIMCMD_END,
};
-static const union AffineAnimCmd sSpriteAffineAnim_RotatingAnticlockwise270to180Faster[] = {
+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[] = {
+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[] = {
+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[] = {
+static const union AffineAnimCmd *const sSpriteAffineAnimTable_RotatingGate[] =
+{
sSpriteAffineAnim_Rotated0,
sSpriteAffineAnim_Rotated90,
sSpriteAffineAnim_Rotated180,
@@ -423,7 +461,8 @@ static const union AffineAnimCmd *const sSpriteAffineAnimTable_RotatingGate[] =
sSpriteAffineAnim_RotatingClockwise270to360Faster,
};
-static const struct SpriteTemplate sSpriteTemplate_RotatingGateLarge = {
+static const struct SpriteTemplate sSpriteTemplate_RotatingGateLarge =
+{
.tileTag = ROTATING_GATE_TILE_TAG,
.paletteTag = 0xFFFF,
.oam = &sOamData_RotatingGateLarge,
@@ -433,7 +472,8 @@ static const struct SpriteTemplate sSpriteTemplate_RotatingGateLarge = {
.callback = SpriteCallback_RotatingGate,
};
-static const struct SpriteTemplate sSpriteTemplate_RotatingGateRegular = {
+static const struct SpriteTemplate sSpriteTemplate_RotatingGateRegular =
+{
.tileTag = ROTATING_GATE_TILE_TAG,
.paletteTag = 0xFFFF,
.oam = &sOamData_RotatingGateRegular,
@@ -449,62 +489,36 @@ static const struct SpriteTemplate sSpriteTemplate_RotatingGateRegular = {
// 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_ROTATION_NONE, GATE_ROTATION_NONE, GATE_ROTATION_NONE, GATE_ROTATION_NONE },
- { GATE_ROTATION_CLOCKWISE(GATE_ARM_WEST, 1),
- GATE_ROTATION_CLOCKWISE(GATE_ARM_WEST, 0),
- GATE_ROTATION_ANTICLOCKWISE(GATE_ARM_EAST, 0),
- GATE_ROTATION_ANTICLOCKWISE(GATE_ARM_EAST, 1) },
- { GATE_ROTATION_NONE, GATE_ROTATION_NONE, GATE_ROTATION_NONE, GATE_ROTATION_NONE },
- { GATE_ROTATION_NONE, GATE_ROTATION_NONE, GATE_ROTATION_NONE, GATE_ROTATION_NONE },
+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_ROTATION_NONE, GATE_ROTATION_NONE, GATE_ROTATION_NONE, GATE_ROTATION_NONE },
- { GATE_ROTATION_NONE, GATE_ROTATION_NONE, GATE_ROTATION_NONE, GATE_ROTATION_NONE },
- { GATE_ROTATION_ANTICLOCKWISE(GATE_ARM_WEST, 1),
- GATE_ROTATION_ANTICLOCKWISE(GATE_ARM_WEST, 0),
- GATE_ROTATION_CLOCKWISE(GATE_ARM_EAST, 0),
- GATE_ROTATION_CLOCKWISE(GATE_ARM_EAST, 1) },
- { GATE_ROTATION_NONE, GATE_ROTATION_NONE, GATE_ROTATION_NONE, GATE_ROTATION_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_ROTATION_NONE,
- GATE_ROTATION_ANTICLOCKWISE(GATE_ARM_NORTH, 1),
- GATE_ROTATION_NONE,
- GATE_ROTATION_NONE },
- { GATE_ROTATION_NONE,
- GATE_ROTATION_ANTICLOCKWISE(GATE_ARM_NORTH, 0),
- GATE_ROTATION_NONE,
- GATE_ROTATION_NONE },
- { GATE_ROTATION_NONE,
- GATE_ROTATION_CLOCKWISE(GATE_ARM_SOUTH, 0),
- GATE_ROTATION_NONE,
- GATE_ROTATION_NONE },
- { GATE_ROTATION_NONE,
- GATE_ROTATION_CLOCKWISE(GATE_ARM_SOUTH, 1),
- GATE_ROTATION_NONE,
- GATE_ROTATION_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_ROTATION_NONE,
- GATE_ROTATION_NONE,
- GATE_ROTATION_CLOCKWISE(GATE_ARM_NORTH, 1),
- GATE_ROTATION_NONE },
- { GATE_ROTATION_NONE,
- GATE_ROTATION_NONE,
- GATE_ROTATION_CLOCKWISE(GATE_ARM_NORTH, 0),
- GATE_ROTATION_NONE },
- { GATE_ROTATION_NONE,
- GATE_ROTATION_NONE,
- GATE_ROTATION_ANTICLOCKWISE(GATE_ARM_SOUTH, 0),
- GATE_ROTATION_NONE },
- { GATE_ROTATION_NONE,
- GATE_ROTATION_NONE,
- GATE_ROTATION_ANTICLOCKWISE(GATE_ARM_SOUTH, 1),
- GATE_ROTATION_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
@@ -519,49 +533,86 @@ static const struct Coords8 sRotatingGate_ArmPositionsAntiClockwiseRotation[] =
// 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[][GATE_ARM_WEST + 1][GATE_ARM_MAX_LENGTH] = {
+static const u8 sRotatingGate_ArmLayout[][4 * 2] =
+{
// L-shape gates
{
- { 1, 0 }, { 1, 0 }, { 0, 0 }, { 0, 0 },
+ 1, 0,
+ 1, 0,
+ 0, 0,
+ 0, 0,
},
{
- { 1, 1 }, { 1, 0 }, { 0, 0 }, { 0, 0 },
+ 1, 1,
+ 1, 0,
+ 0, 0,
+ 0, 0,
},
{
- { 1, 0 }, { 1, 1 }, { 0, 0 }, { 0, 0 },
+ 1, 0,
+ 1, 1,
+ 0, 0,
+ 0, 0,
},
{
- { 1, 1 }, { 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, 0,
+ 1, 0,
+ 1, 0,
+ 0, 0,
},
{
- { 1, 1 }, { 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, 1,
+ 1, 0,
+ 0, 0,
},
{
- { 1, 0 }, { 1, 0 }, { 1, 1 }, { 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, 1,
+ 1, 0,
+ 0, 0,
},
{
- { 1, 1 }, { 1, 0 }, { 1, 1 }, { 0, 0 },
+ 1, 1,
+ 1, 0,
+ 1, 1,
+ 0, 0,
},
{
- { 1, 0 }, { 1, 1 }, { 1, 1 }, { 0, 0 },
+ 1, 0,
+ 1, 1,
+ 1, 1,
+ 0, 0,
},
{
- { 1, 1 }, { 1, 1 }, { 1, 1 }, { 0, 0 },
+ 1, 1,
+ 1, 1,
+ 1, 1,
+ 0, 0,
},
};
@@ -675,8 +726,8 @@ static void RotatingGate_CreateGatesWithinViewport(s16 deltaX, s16 deltaY)
for (i = 0; i < gRotatingGate_PuzzleCount; i++)
{
- x3 = gRotatingGate_PuzzleConfig[i].pos.x + 7;
- y3 = gRotatingGate_PuzzleConfig[i].pos.y + 7;
+ 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)
@@ -697,24 +748,18 @@ static u8 RotatingGate_CreateGate(u8 gateId, s16 deltaX, s16 deltaY)
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->pos.x + 7;
- y = gate->pos.y + 7;
+ x = gate->x + 7;
+ y = gate->y + 7;
sprite = &gSprites[spriteId];
sprite->data0 = gateId;
@@ -769,7 +814,7 @@ static void RotatingGate_HideGatesOutsideViewport(struct Sprite *sprite)
u16 y;
s16 y2;
- sprite->invisible = 0;
+ sprite->invisible = FALSE;
x = sprite->pos1.x + sprite->pos2.x + sprite->centerToCornerVecX + gSpriteCoordOffsetX;
y = sprite->pos1.y + sprite->pos2.y + sprite->centerToCornerVecY + gSpriteCoordOffsetY;
@@ -778,12 +823,12 @@ static void RotatingGate_HideGatesOutsideViewport(struct Sprite *sprite)
if ((s16)x > DISPLAY_WIDTH + 0x10 - 1 || x2 < -0x10)
{
- sprite->invisible = 1;
+ sprite->invisible = TRUE;
}
if ((s16)y > DISPLAY_HEIGHT + 0x10 - 1 || y2 < -0x10)
{
- sprite->invisible = 1;
+ sprite->invisible = TRUE;
}
}
@@ -811,8 +856,8 @@ static void RotatingGate_DestroyGatesOutsideViewport(void)
for (i = 0; i < gRotatingGate_PuzzleCount; i++)
{
- xGate = gRotatingGate_PuzzleConfig[i].pos.x + 7;
- yGate = gRotatingGate_PuzzleConfig[i].pos.y + 7;
+ xGate = gRotatingGate_PuzzleConfig[i].x + 7;
+ yGate = gRotatingGate_PuzzleConfig[i].y + 7;
if (gRotatingGate_GateSpriteIds[i] == MAX_SPRITES)
continue;
@@ -851,8 +896,8 @@ static int RotatingGate_CanRotate(u8 gateId, int rotationDirection)
orientation = RotatingGate_GetGateOrientation(gateId);
shape = gRotatingGate_PuzzleConfig[gateId].shape;
- x = gRotatingGate_PuzzleConfig[gateId].pos.x + 7;
- y = gRotatingGate_PuzzleConfig[gateId].pos.y + 7;
+ 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; i <= GATE_ARM_WEST; i++)
@@ -878,118 +923,119 @@ static int RotatingGate_CanRotate(u8 gateId, int rotationDirection)
return 1;
}
#else
-__attribute__((naked)) static int RotatingGate_CanRotate(u8 a, int puzzleType)
+__attribute__((naked))
+static int RotatingGate_CanRotate(u8 a, int puzzleType)
{
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 _080C7EAC\n\
- ldr r0, _080C7EA8 @ =sRotatingGate_ArmPositionsAntiClockwiseRotation\n\
- mov r10, r0\n\
- b _080C7EB8\n\
- .align 2, 0\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 _080C7EAC\n\
+ ldr r0, _080C7EA8 @ =sRotatingGate_ArmPositionsAntiClockwiseRotation\n\
+ mov r10, r0\n\
+ b _080C7EB8\n\
+ .align 2, 0\n\
_080C7EA8: .4byte sRotatingGate_ArmPositionsAntiClockwiseRotation\n\
_080C7EAC:\n\
- cmp r1, 0x2\n\
- beq _080C7EB4\n\
+ cmp r1, 0x2\n\
+ beq _080C7EB4\n\
_080C7EB0:\n\
- movs r0, 0\n\
- b _080C7F48\n\
+ movs r0, 0\n\
+ b _080C7F48\n\
_080C7EB4:\n\
- ldr r1, _080C7F58 @ =sRotatingGate_ArmPositionsClockwiseRotation\n\
- mov r10, r1\n\
+ ldr r1, _080C7F58 @ =sRotatingGate_ArmPositionsClockwiseRotation\n\
+ mov r10, r1\n\
_080C7EB8:\n\
- adds r0, r4, 0\n\
- bl RotatingGate_GetGateOrientation\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- str r0, [sp]\n\
- ldr r0, _080C7F5C @ =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\
+ adds r0, r4, 0\n\
+ bl RotatingGate_GetGateOrientation\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ str r0, [sp]\n\
+ ldr r0, _080C7F5C @ =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\
_080C7EE8:\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, _080C7F60 @ =sRotatingGate_ArmLayout\n\
- adds r4, r0, r2\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, _080C7F60 @ =sRotatingGate_ArmLayout\n\
+ adds r4, r0, r2\n\
_080C7EFA:\n\
- adds r0, r5, 0\n\
- cmp r5, 0\n\
- bge _080C7F02\n\
- adds r0, r7, 0x3\n\
+ adds r0, r5, 0\n\
+ cmp r5, 0\n\
+ bge _080C7F02\n\
+ adds r0, r7, 0x3\n\
_080C7F02:\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 _080C7F38\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 _080C7EB0\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 _080C7F38\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 _080C7EB0\n\
_080C7F38:\n\
- adds r4, 0x1\n\
- adds r6, 0x1\n\
- cmp r6, 0x1\n\
- ble _080C7EFA\n\
- adds r3, 0x1\n\
- cmp r3, 0x3\n\
- ble _080C7EE8\n\
- movs r0, 0x1\n\
+ adds r4, 0x1\n\
+ adds r6, 0x1\n\
+ cmp r6, 0x1\n\
+ ble _080C7EFA\n\
+ adds r3, 0x1\n\
+ cmp r3, 0x3\n\
+ ble _080C7EE8\n\
+ movs r0, 0x1\n\
_080C7F48:\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\
- .align 2, 0\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\
+ .align 2, 0\n\
_080C7F58: .4byte sRotatingGate_ArmPositionsClockwiseRotation\n\
_080C7F5C: .4byte gRotatingGate_PuzzleConfig\n\
_080C7F60: .4byte sRotatingGate_ArmLayout\n\
@@ -997,7 +1043,6 @@ _080C7F60: .4byte sRotatingGate_ArmLayout\n\
}
#endif
-#ifdef NONMATCHING
static int RotatingGate_HasArm(u8 gateId, u8 armInfo)
{
int isLongArm;
@@ -1010,56 +1055,8 @@ static int RotatingGate_HasArm(u8 gateId, u8 armInfo)
armOrientation = (arm - RotatingGate_GetGateOrientation(gateId) + 4) % 4;
shape = gRotatingGate_PuzzleConfig[gateId].shape;
- return sRotatingGate_ArmLayout[shape][armOrientation][isLongArm];
+ return sRotatingGate_ArmLayout[shape][armOrientation * 2 + isLongArm];
}
-#else
-__attribute__((naked)) static int RotatingGate_HasArm(u8 a, u8 b)
-{
- asm(".syntax unified\n\
- push {r4-r6,lr}\n\
- adds r4, r1, 0\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- adds r6, r0, 0\n\
- lsls r4, 24\n\
- lsrs r5, r4, 24\n\
- lsrs r4, 25\n\
- movs r0, 0x1\n\
- ands r5, r0\n\
- adds r0, r6, 0\n\
- bl RotatingGate_GetGateOrientation\n\
- subs r4, r0\n\
- adds r1, r4, 0x4\n\
- adds r0, r1, 0\n\
- cmp r1, 0\n\
- bge _080C7F8A\n\
- adds r0, r4, 0x7\n\
-_080C7F8A:\n\
- asrs r0, 2\n\
- lsls r0, 2\n\
- subs r0, r1, r0\n\
- ldr r1, _080C7FB0 @ =gRotatingGate_PuzzleConfig\n\
- ldr r2, [r1]\n\
- lsls r1, r6, 3\n\
- adds r1, r2\n\
- ldrb r1, [r1, 0x4]\n\
- ldr r2, _080C7FB4 @ =sRotatingGate_ArmLayout\n\
- lsls r0, 24\n\
- asrs r0, 23\n\
- adds r0, r5\n\
- lsls r1, 3\n\
- adds r0, r1\n\
- adds r0, r2\n\
- ldrb r0, [r0]\n\
- pop {r4-r6}\n\
- pop {r1}\n\
- bx r1\n\
- .align 2, 0\n\
-_080C7FB0: .4byte gRotatingGate_PuzzleConfig\n\
-_080C7FB4: .4byte sRotatingGate_ArmLayout\n\
-.syntax divided\n");
-}
-#endif
static void RotatingGate_TriggerRotationAnimation(u8 gateId, int rotationDirection)
{
@@ -1073,79 +1070,23 @@ static void RotatingGate_TriggerRotationAnimation(u8 gateId, int rotationDirecti
}
}
-#ifdef NONMATCHING
static u8 RotatingGate_GetRotationInfo(u8 direction, s16 x, s16 y)
{
- register const u8(*ptr)[][4] asm("r3");
+ register const u8 *ptr;
if (direction == DIR_NORTH)
- ptr = &sRotatingGate_RotationInfoNorth;
+ ptr = sRotatingGate_RotationInfoNorth;
else if (direction == DIR_SOUTH)
- ptr = &sRotatingGate_RotationInfoSouth;
+ ptr = sRotatingGate_RotationInfoSouth;
else if (direction == DIR_WEST)
- ptr = &sRotatingGate_RotationInfoWest;
+ ptr = sRotatingGate_RotationInfoWest;
else if (direction == DIR_EAST)
- ptr = &sRotatingGate_RotationInfoEast;
+ ptr = sRotatingGate_RotationInfoEast;
else
- return GATE_ROTATION_NONE;
+ return GATE_ROT_NONE;
- return (*ptr)[y][x];
-}
-#else
-__attribute__((naked)) static u8 RotatingGate_GetRotationInfo(u8 a, s16 b, s16 c)
-{
- asm(".syntax unified\n\
- push {lr}\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- adds r3, r0, 0\n\
- lsls r1, 16\n\
- lsrs r1, 16\n\
- lsls r2, 16\n\
- lsrs r2, 16\n\
- cmp r0, 0x2\n\
- bne _080C8008\n\
- ldr r3, _080C8004 @ =sRotatingGate_RotationInfoNorth\n\
- b _080C802A\n\
- .align 2, 0\n\
-_080C8004: .4byte sRotatingGate_RotationInfoNorth\n\
-_080C8008:\n\
- cmp r0, 0x1\n\
- bne _080C8014\n\
- ldr r3, _080C8010 @ =sRotatingGate_RotationInfoSouth\n\
- b _080C802A\n\
- .align 2, 0\n\
-_080C8010: .4byte sRotatingGate_RotationInfoSouth\n\
-_080C8014:\n\
- cmp r0, 0x3\n\
- bne _080C8020\n\
- ldr r3, _080C801C @ =sRotatingGate_RotationInfoWest\n\
- b _080C802A\n\
- .align 2, 0\n\
-_080C801C: .4byte sRotatingGate_RotationInfoWest\n\
-_080C8020:\n\
- cmp r3, 0x4\n\
- beq _080C8028\n\
- movs r0, 0xFF\n\
- b _080C8038\n\
-_080C8028:\n\
- ldr r3, _080C803C @ =sRotatingGate_RotationInfoEast\n\
-_080C802A:\n\
- lsls r0, r2, 16\n\
- lsls r1, 16\n\
- asrs r1, 16\n\
- asrs r0, 14\n\
- adds r0, r1\n\
- adds r0, r3, r0\n\
- ldrb r0, [r0]\n\
-_080C8038:\n\
- pop {r1}\n\
- bx r1\n\
- .align 2, 0\n\
-_080C803C: .4byte sRotatingGate_RotationInfoEast\n\
-.syntax divided\n");
+ return ptr[y * 4 + x];
}
-#endif
void RotatingGate_InitPuzzle(void)
{
@@ -1178,36 +1119,24 @@ void RotatingGate_InitPuzzleAndGraphics(void)
bool8 CheckForRotatingGatePuzzleCollision(u8 direction, s16 x, s16 y)
{
int i;
- s16 gateX;
- s16 gateY;
- register u32 rotationInfo asm("r0");
- int rotationDirection;
- int armInfo;
- s16 centerX;
- s16 centerY;
if (!GetCurrentMapRotatingGatePuzzleType())
- {
- return 0;
- }
-
+ return FALSE;
for (i = 0; i < gRotatingGate_PuzzleCount; i++)
{
- gateX = gRotatingGate_PuzzleConfig[i].pos.x + 7;
- gateY = gRotatingGate_PuzzleConfig[i].pos.y + 7;
+ 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)
{
- centerX = x - gateX + 2;
- centerY = y - gateY + 2;
- rotationInfo = RotatingGate_GetRotationInfo(direction, centerX, centerY);
+ s16 centerX = x - gateX + 2;
+ s16 centerY = y - gateY + 2;
+ u8 rotationInfo = RotatingGate_GetRotationInfo(direction, centerX, centerY);
- if (rotationInfo != GATE_ROTATION_NONE)
+ if (rotationInfo != GATE_ROT_NONE)
{
- rotationDirection = rotationInfo >> 4;
- armInfo = rotationInfo & 0xF;
-
- asm("" ::"r"(armInfo));
+ u8 rotationDirection = ((rotationInfo & 0xF0) >> 4);
+ u8 armInfo = rotationInfo & 0xF;
if (RotatingGate_HasArm(i, armInfo))
{
@@ -1215,14 +1144,12 @@ bool8 CheckForRotatingGatePuzzleCollision(u8 direction, s16 x, s16 y)
{
RotatingGate_TriggerRotationAnimation(i, rotationDirection);
RotatingGate_RotateInDirection(i, rotationDirection);
- return 0;
+ return FALSE;
}
-
- return 1;
+ return TRUE;
}
}
}
}
-
- return 0;
+ return FALSE;
}
diff --git a/src/safari_zone.c b/src/safari_zone.c
index a47c8e951..14fd1ddc4 100644
--- a/src/safari_zone.c
+++ b/src/safari_zone.c
@@ -4,7 +4,7 @@
#include "field_fadetransition.h"
#include "field_player_avatar.h"
#include "main.h"
-#include "rom4.h"
+#include "overworld.h"
#include "script.h"
#include "string_util.h"
#include "text.h"
@@ -51,7 +51,7 @@ void SetSafariZoneFlag(void)
void ResetSafariZoneFlag(void)
{
- FlagReset(SYS_SAFARI_MODE);
+ FlagClear(SYS_SAFARI_MODE);
}
void EnterSafariMode(void)
diff --git a/src/save.c b/src/save.c
index adf39268e..eae3f4470 100644
--- a/src/save.c
+++ b/src/save.c
@@ -3,7 +3,7 @@
#include "gba/flash_internal.h"
#include "save.h"
#include "load_save.h"
-#include "rom4.h"
+#include "overworld.h"
#include "save_failed_screen.h"
#define GETVALIDSTATUSBITFIELD ((1 << ARRAY_COUNT(gSaveSectionLocations)) - 1)
diff --git a/src/scrcmd.c b/src/scrcmd.c
index 66578f350..31a90158a 100644
--- a/src/scrcmd.c
+++ b/src/scrcmd.c
@@ -31,7 +31,7 @@
#include "party_menu.h"
#include "pokemon.h"
#include "rng.h"
-#include "rom4.h"
+#include "overworld.h"
#include "rtc.h"
#include "script.h"
#include "script_menu.h"
@@ -50,11 +50,11 @@ typedef void (*NativeFunc)(void);
extern u32 gUnknown_0202E8AC;
static EWRAM_DATA u32 gUnknown_0202E8B0 = 0;
-static EWRAM_DATA u16 gUnknown_0202E8B4 = 0;
-static EWRAM_DATA u16 gUnknown_0202E8B6 = 0;
-static EWRAM_DATA u16 gUnknown_0202E8B8 = 0;
-static EWRAM_DATA u16 gUnknown_0202E8BA = 0;
-static EWRAM_DATA u16 gUnknown_0202E8BC = 0;
+static EWRAM_DATA u16 sPauseCounter = 0;
+static EWRAM_DATA u16 sMovingNpcId = 0;
+static EWRAM_DATA u16 sMovingNpcMapBank = 0;
+static EWRAM_DATA u16 sMovingNpcMapId = 0;
+static EWRAM_DATA u16 sFieldEffectScriptId = 0;
extern u16 gSpecialVar_0x8000;
extern u16 gSpecialVar_0x8001;
@@ -109,8 +109,8 @@ bool8 ScrCmd_end(struct ScriptContext *ctx)
bool8 ScrCmd_jumpasm(struct ScriptContext *ctx)
{
- u32 addr = ScriptReadWord(ctx);
- SetupNativeScript(ctx, (void *)addr);
+ bool8 (*addr)(void) = (bool8 (*)(void))ScriptReadWord(ctx);
+ SetupNativeScript(ctx, addr);
return TRUE;
}
@@ -542,7 +542,7 @@ bool8 ScrCmd_setflag(struct ScriptContext *ctx)
bool8 ScrCmd_clearflag(struct ScriptContext *ctx)
{
- FlagReset(ScriptReadHalfword(ctx));
+ FlagClear(ScriptReadHalfword(ctx));
return FALSE;
}
@@ -567,8 +567,8 @@ bool8 ScrCmd_lighten(struct ScriptContext *ctx)
bool8 ScrCmd_darken(struct ScriptContext *ctx)
{
- u16 value = VarGet(ScriptReadHalfword(ctx));
- sub_8053CE4(value);
+ u16 flashLevel = VarGet(ScriptReadHalfword(ctx));
+ Overworld_SetFlashLevel(flashLevel);
return FALSE;
}
@@ -598,9 +598,9 @@ bool8 ScrCmd_fadescreendelay(struct ScriptContext *ctx)
bool8 s28_pause_asm()
{
- gUnknown_0202E8B4--;
+ sPauseCounter--;
- if (gUnknown_0202E8B4 == 0)
+ if (sPauseCounter == 0)
return TRUE;
else
return FALSE;
@@ -608,7 +608,7 @@ bool8 s28_pause_asm()
bool8 ScrCmd_pause(struct ScriptContext *ctx)
{
- gUnknown_0202E8B4 = ScriptReadHalfword(ctx);
+ sPauseCounter = ScriptReadHalfword(ctx);
SetupNativeScript(ctx, s28_pause_asm);
return TRUE;
}
@@ -815,7 +815,7 @@ bool8 ScrCmd_playsfx(struct ScriptContext *ctx)
return FALSE;
}
-bool8 s30_music_check_asm()
+static bool8 WaitForSoundEffectFinish()
{
if (!IsSEPlaying())
return TRUE;
@@ -825,7 +825,7 @@ bool8 s30_music_check_asm()
bool8 ScrCmd_checksound(struct ScriptContext *ctx)
{
- SetupNativeScript(ctx, s30_music_check_asm);
+ SetupNativeScript(ctx, WaitForSoundEffectFinish);
return TRUE;
}
@@ -835,14 +835,14 @@ bool8 ScrCmd_fanfare(struct ScriptContext *ctx)
return FALSE;
}
-bool8 s32_fanfare_wait_asm()
+static bool8 WaitForFanfareFinish()
{
return IsFanfareTaskInactive();
}
bool8 ScrCmd_waitfanfare(struct ScriptContext *ctx)
{
- SetupNativeScript(ctx, s32_fanfare_wait_asm);
+ SetupNativeScript(ctx, WaitForFanfareFinish);
return TRUE;
}
@@ -870,15 +870,15 @@ bool8 ScrCmd_fadedefault(struct ScriptContext *ctx)
bool8 ScrCmd_fademusic(struct ScriptContext *ctx)
{
- sub_8053FB0(ScriptReadHalfword(ctx));
+ Overworld_ChangeMusicTo(ScriptReadHalfword(ctx));
return FALSE;
}
bool8 ScrCmd_fadeout(struct ScriptContext *ctx)
{
- u8 val = ScriptReadByte(ctx);
- if (val)
- FadeOutBGMTemporarily(4 * val);
+ u8 speed = ScriptReadByte(ctx);
+ if (speed != 0)
+ FadeOutBGMTemporarily(4 * speed);
else
FadeOutBGMTemporarily(4);
SetupNativeScript(ctx, IsBGMPausedOrStopped);
@@ -887,9 +887,9 @@ bool8 ScrCmd_fadeout(struct ScriptContext *ctx)
bool8 ScrCmd_fadein(struct ScriptContext *ctx)
{
- u8 val = ScriptReadByte(ctx);
- if (val)
- FadeInBGM(4 * val);
+ u8 speed = ScriptReadByte(ctx);
+ if (speed != 0)
+ FadeInBGM(4 * speed);
else
FadeInBGM(4);
return FALSE;
@@ -897,54 +897,56 @@ bool8 ScrCmd_fadein(struct ScriptContext *ctx)
bool8 ScrCmd_move(struct ScriptContext *ctx)
{
- u16 v1 = VarGet(ScriptReadHalfword(ctx));
- void *v2 = (void *)ScriptReadWord(ctx);
- exec_movement(v1, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, v2);
- gUnknown_0202E8B6 = v1;
+ u16 localId = VarGet(ScriptReadHalfword(ctx));
+ void *movementScript = (void *)ScriptReadWord(ctx);
+
+ ScriptMovement_StartObjectMovementScript(localId, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, movementScript);
+ sMovingNpcId = localId;
return FALSE;
}
bool8 ScrCmd_movecoords(struct ScriptContext *ctx)
{
- u16 v1 = VarGet(ScriptReadHalfword(ctx));
- void *v2 = (void *)ScriptReadWord(ctx);
- u8 v3 = ScriptReadByte(ctx);
- u8 v4 = ScriptReadByte(ctx);
- exec_movement(v1, v4, v3, v2);
- gUnknown_0202E8B6 = v1;
+ u16 localId = VarGet(ScriptReadHalfword(ctx));
+ void *movementScript = (void *)ScriptReadWord(ctx);
+ u8 mapGroup = ScriptReadByte(ctx);
+ u8 mapNum = ScriptReadByte(ctx);
+
+ ScriptMovement_StartObjectMovementScript(localId, mapNum, mapGroup, movementScript);
+ sMovingNpcId = localId;
return FALSE;
}
-bool8 s51a_0806B288(void)
+static bool8 WaitForMovementFinish(void)
{
- return sub_80A212C(gUnknown_0202E8B6, gUnknown_0202E8BA, gUnknown_0202E8B8);
+ return ScriptMovement_IsObjectMovementFinished(sMovingNpcId, sMovingNpcMapId, sMovingNpcMapBank);
}
bool8 ScrCmd_waitmove(struct ScriptContext *ctx)
{
- u16 v1 = VarGet(ScriptReadHalfword(ctx));
- if (v1)
- gUnknown_0202E8B6 = v1;
- gUnknown_0202E8B8 = gSaveBlock1.location.mapGroup;
- gUnknown_0202E8BA = gSaveBlock1.location.mapNum;
- SetupNativeScript(ctx, s51a_0806B288);
+ u16 localId = VarGet(ScriptReadHalfword(ctx));
+
+ if (localId != 0)
+ sMovingNpcId = localId;
+ sMovingNpcMapBank = gSaveBlock1.location.mapGroup;
+ sMovingNpcMapId = gSaveBlock1.location.mapNum;
+ SetupNativeScript(ctx, WaitForMovementFinish);
return TRUE;
}
bool8 ScrCmd_waitmovexy(struct ScriptContext *ctx)
{
- u16 v1 = VarGet(ScriptReadHalfword(ctx));
- u8 v2;
- u8 v3;
-
- if (v1)
- gUnknown_0202E8B6 = v1;
-
- v2 = ScriptReadByte(ctx);
- v3 = ScriptReadByte(ctx);
- gUnknown_0202E8B8 = v2;
- gUnknown_0202E8BA = v3;
- SetupNativeScript(ctx, s51a_0806B288);
+ u16 localId = VarGet(ScriptReadHalfword(ctx));
+ u8 mapBank;
+ u8 mapId;
+
+ if (localId != 0)
+ sMovingNpcId = localId;
+ mapBank = ScriptReadByte(ctx);
+ mapId = ScriptReadByte(ctx);
+ sMovingNpcMapBank = mapBank;
+ sMovingNpcMapId = mapId;
+ SetupNativeScript(ctx, WaitForMovementFinish);
return TRUE;
}
@@ -994,7 +996,7 @@ bool8 ScrCmd_movespriteperm(struct ScriptContext *ctx)
u16 v1 = VarGet(ScriptReadHalfword(ctx));
u16 v2 = VarGet(ScriptReadHalfword(ctx));
u32 v3 = VarGet(ScriptReadHalfword(ctx));
- update_saveblock1_field_object_coords(v1, v2, v3);
+ Overworld_SaveMapObjCoords(v1, v2, v3);
return FALSE;
}
@@ -1054,9 +1056,9 @@ bool8 ScrCmd_faceplayer(struct ScriptContext *ctx)
bool8 ScrCmd_spriteface(struct ScriptContext *ctx)
{
- u16 v1 = VarGet(ScriptReadHalfword(ctx));
- u8 v2 = ScriptReadByte(ctx);
- FieldObjectTurnByLocalIdAndMap(v1, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, v2);
+ u16 localId = VarGet(ScriptReadHalfword(ctx));
+ u8 direction = ScriptReadByte(ctx);
+ FieldObjectTurnByLocalIdAndMap(localId, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, direction);
return FALSE;
}
@@ -1064,7 +1066,7 @@ bool8 ScrCmd_spritebehave(struct ScriptContext *ctx)
{
u16 v1 = VarGet(ScriptReadHalfword(ctx));
u8 v2 = ScriptReadByte(ctx);
- update_saveblock1_field_object_movement_behavior(v1, v2);
+ Overworld_SaveMapObjMovementType(v1, v2);
return FALSE;
}
@@ -1112,7 +1114,7 @@ bool8 ScrCmd_lock(struct ScriptContext *ctx)
{
if (gMapObjects[gSelectedMapObject].active)
{
- sub_8064DD8();
+ LockSelectedMapObject();
SetupNativeScript(ctx, sub_8064DB4);
}
else
@@ -1198,9 +1200,9 @@ bool8 ScrCmd_waitbutton(struct ScriptContext *ctx)
bool8 ScrCmd_yesnobox(struct ScriptContext *ctx)
{
- u8 v1 = ScriptReadByte(ctx);
- u8 v2 = ScriptReadByte(ctx);
- if (yes_no_box(v1, v2) == 1)
+ u8 left = ScriptReadByte(ctx);
+ u8 top = ScriptReadByte(ctx);
+ if (ScriptMenu_YesNo(left, top) == TRUE)
{
ScriptContext1_Stop();
return TRUE;
@@ -1213,11 +1215,11 @@ bool8 ScrCmd_yesnobox(struct ScriptContext *ctx)
bool8 ScrCmd_multichoice(struct ScriptContext *ctx)
{
- u8 v1 = ScriptReadByte(ctx);
- u8 v2 = ScriptReadByte(ctx);
- u8 v3 = ScriptReadByte(ctx);
- u8 v4 = ScriptReadByte(ctx);
- if (sub_80B5054(v1, v2, v3, v4) == 1)
+ u8 left = ScriptReadByte(ctx);
+ u8 top = ScriptReadByte(ctx);
+ u8 multichoiceId = ScriptReadByte(ctx);
+ u8 ignoreBPress = ScriptReadByte(ctx);
+ if (ScriptMenu_Multichoice(left, top, multichoiceId, ignoreBPress) == TRUE)
{
ScriptContext1_Stop();
return TRUE;
@@ -1230,12 +1232,12 @@ bool8 ScrCmd_multichoice(struct ScriptContext *ctx)
bool8 ScrCmd_multichoicedef(struct ScriptContext *ctx)
{
- u8 v1 = ScriptReadByte(ctx);
- u8 v2 = ScriptReadByte(ctx);
- u8 v3 = ScriptReadByte(ctx);
- u8 v4 = ScriptReadByte(ctx);
- u8 v5 = ScriptReadByte(ctx);
- if (sub_80B50B0(v1, v2, v3, v5, v4) == 1)
+ u8 left = ScriptReadByte(ctx);
+ u8 top = ScriptReadByte(ctx);
+ u8 multichoiceId = ScriptReadByte(ctx);
+ u8 defaultChoice = ScriptReadByte(ctx);
+ u8 ignoreBPress = ScriptReadByte(ctx);
+ if (ScriptMenu_MultichoiceWithDefault(left, top, multichoiceId, ignoreBPress, defaultChoice) == TRUE)
{
ScriptContext1_Stop();
return TRUE;
@@ -1248,22 +1250,22 @@ bool8 ScrCmd_multichoicedef(struct ScriptContext *ctx)
bool8 ScrCmd_showbox(struct ScriptContext *ctx)
{
- u8 v1 = ScriptReadByte(ctx);
- u8 v2 = ScriptReadByte(ctx);
- u8 v3 = ScriptReadByte(ctx);
- u8 v4 = ScriptReadByte(ctx);
- MenuDrawTextWindow(v1, v2, v3, v4);
+ u8 left = ScriptReadByte(ctx);
+ u8 top = ScriptReadByte(ctx);
+ u8 right = ScriptReadByte(ctx);
+ u8 bottom = ScriptReadByte(ctx);
+ MenuDrawTextWindow(left, top, right, bottom);
return FALSE;
}
bool8 ScrCmd_multichoicerow(struct ScriptContext *ctx)
{
- u8 v1 = ScriptReadByte(ctx);
- u8 v2 = ScriptReadByte(ctx);
- u8 v3 = ScriptReadByte(ctx);
- u8 v4 = ScriptReadByte(ctx);
- u8 v5 = ScriptReadByte(ctx);
- if (sub_80B5578(v1, v2, v3, v5, v4) == 1)
+ u8 left = ScriptReadByte(ctx);
+ u8 top = ScriptReadByte(ctx);
+ u8 multichoiceId = ScriptReadByte(ctx);
+ u8 numColumns = ScriptReadByte(ctx);
+ u8 ignoreBPress = ScriptReadByte(ctx);
+ if (ScriptMenu_MultichoiceGrid(left, top, multichoiceId, ignoreBPress, numColumns) == TRUE)
{
ScriptContext1_Stop();
return TRUE;
@@ -1276,21 +1278,22 @@ bool8 ScrCmd_multichoicerow(struct ScriptContext *ctx)
bool8 ScrCmd_hidebox(struct ScriptContext *ctx)
{
- u8 v1 = ScriptReadByte(ctx);
- u8 v2 = ScriptReadByte(ctx);
- u8 v3 = ScriptReadByte(ctx);
- u8 v4 = ScriptReadByte(ctx);
- MenuZeroFillWindowRect(v1, v2, v3, v4);
+ u8 left = ScriptReadByte(ctx);
+ u8 top = ScriptReadByte(ctx);
+ u8 right = ScriptReadByte(ctx);
+ u8 bottom = ScriptReadByte(ctx);
+ MenuZeroFillWindowRect(left, top, right, bottom);
return FALSE;
}
+// unused
bool8 ScrCmd_clearbox(struct ScriptContext *ctx)
{
- u8 v1 = ScriptReadByte(ctx);
- u8 v2 = ScriptReadByte(ctx);
- u8 v3 = ScriptReadByte(ctx);
- u8 v4 = ScriptReadByte(ctx);
- if (Multichoice(v1, v2, v3, v4) == 1)
+ u8 left = ScriptReadByte(ctx);
+ u8 top = ScriptReadByte(ctx);
+ u8 multichoiceId = ScriptReadByte(ctx);
+ u8 ignoreBPress = ScriptReadByte(ctx);
+ if (Multichoice(left, top, multichoiceId, ignoreBPress) == TRUE)
{
ScriptContext1_Stop();
return TRUE;
@@ -1303,19 +1306,19 @@ bool8 ScrCmd_clearbox(struct ScriptContext *ctx)
bool8 ScrCmd_showpokepic(struct ScriptContext *ctx)
{
- u16 v1 = VarGet(ScriptReadHalfword(ctx));
- u8 v2 = ScriptReadByte(ctx);
- u8 v3 = ScriptReadByte(ctx);
- sub_80B58C4(v1, v2, v3);
+ u16 species = VarGet(ScriptReadHalfword(ctx));
+ u8 x = ScriptReadByte(ctx);
+ u8 y = ScriptReadByte(ctx);
+ ScriptMenu_ShowPokemonPic(species, x, y);
return FALSE;
}
bool8 ScrCmd_hidepokepic(struct ScriptContext *ctx)
{
- void *func = picbox_close();
- if (!func)
- return FALSE;
+ bool8 (*func)(void) = ScriptMenu_GetPicboxWaitFunc();
+ if (func == NULL)
+ return FALSE;
SetupNativeScript(ctx, func);
return TRUE;
}
@@ -1447,29 +1450,29 @@ bool8 ScrCmd_vbuffer(struct ScriptContext *ctx)
bool8 ScrCmd_givepokemon(struct ScriptContext *ctx)
{
- u16 v3 = VarGet(ScriptReadHalfword(ctx));
- u8 v5 = ScriptReadByte(ctx);
- u16 v7 = VarGet(ScriptReadHalfword(ctx));
- u32 v8 = ScriptReadWord(ctx);
- u32 v9 = ScriptReadWord(ctx);
- u8 v10 = ScriptReadByte(ctx);
- gScriptResult = ScriptGiveMon(v3, v5, v7, v8, v9, v10);
+ u16 species = VarGet(ScriptReadHalfword(ctx));
+ u8 level = ScriptReadByte(ctx);
+ u16 item = VarGet(ScriptReadHalfword(ctx));
+ u32 unkParam1 = ScriptReadWord(ctx);
+ u32 unkParam2 = ScriptReadWord(ctx);
+ u8 unkParam3 = ScriptReadByte(ctx);
+ gScriptResult = ScriptGiveMon(species, level, item, unkParam1, unkParam2, unkParam3);
return FALSE;
}
bool8 ScrCmd_giveegg(struct ScriptContext *ctx)
{
- u16 value = VarGet(ScriptReadHalfword(ctx));
- gScriptResult = ScriptGiveEgg(value);
+ u16 species = VarGet(ScriptReadHalfword(ctx));
+ gScriptResult = ScriptGiveEgg(species);
return FALSE;
}
bool8 ScrCmd_setpokemove(struct ScriptContext *ctx)
{
- u8 v2 = ScriptReadByte(ctx);
- u8 v3 = ScriptReadByte(ctx);
- u16 v4 = ScriptReadHalfword(ctx);
- ScriptSetMonMoveSlot(v2, v4, v3);
+ u8 partyIndex = ScriptReadByte(ctx);
+ u8 slot = ScriptReadByte(ctx);
+ u16 move = ScriptReadHalfword(ctx);
+ ScriptSetMonMoveSlot(partyIndex, move, slot);
return FALSE;
}
@@ -1499,7 +1502,7 @@ bool8 ScrCmd_givemoney(struct ScriptContext *ctx)
u32 amount = ScriptReadWord(ctx);
u8 ignore = ScriptReadByte(ctx);
if (!ignore)
- sub_80B79B8(&gSaveBlock1.money, amount);
+ AddMoney(&gSaveBlock1.money, amount);
return FALSE;
}
@@ -1508,7 +1511,7 @@ bool8 ScrCmd_paymoney(struct ScriptContext *ctx)
u32 amount = ScriptReadWord(ctx);
u8 ignore = ScriptReadByte(ctx);
if (!ignore)
- sub_80B79E0(&gSaveBlock1.money, amount);
+ RemoveMoney(&gSaveBlock1.money, amount);
return FALSE;
}
@@ -1523,19 +1526,19 @@ bool8 ScrCmd_checkmoney(struct ScriptContext *ctx)
bool8 ScrCmd_showmoney(struct ScriptContext *ctx)
{
- u8 v2 = ScriptReadByte(ctx);
- u8 v3 = ScriptReadByte(ctx);
+ u8 x = ScriptReadByte(ctx);
+ u8 y = ScriptReadByte(ctx);
u8 ignore = ScriptReadByte(ctx);
if (!ignore)
- sub_80B7C14(gSaveBlock1.money, v2, v3);
+ OpenMoneyWindow(gSaveBlock1.money, x, y);
return FALSE;
}
bool8 ScrCmd_hidemoney(struct ScriptContext *ctx)
{
- u8 v2 = ScriptReadByte(ctx);
- u8 v3 = ScriptReadByte(ctx);
- RemoveMoneyLabelObject(v2, v3);
+ u8 x = ScriptReadByte(ctx);
+ u8 y = ScriptReadByte(ctx);
+ CloseMoneyWindow(x, y);
return FALSE;
}
@@ -1545,7 +1548,7 @@ bool8 ScrCmd_updatemoney(struct ScriptContext *ctx)
u8 v3 = ScriptReadByte(ctx);
u8 ignore = ScriptReadByte(ctx);
if (!ignore)
- sub_80B7BEC(gSaveBlock1.money, v2, v3);
+ UpdateMoneyWindow(gSaveBlock1.money, v2, v3);
return FALSE;
}
@@ -1575,32 +1578,32 @@ bool8 ScrCmd_updatecoins(struct ScriptContext *ctx)
bool8 ScrCmd_trainerbattle(struct ScriptContext *ctx)
{
- ctx->scriptPtr = TrainerBattleConfigure(ctx->scriptPtr);
+ ctx->scriptPtr = BattleSetup_ConfigureTrainerBattle(ctx->scriptPtr);
return FALSE;
}
bool8 ScrCmd_reptrainerbattle(struct ScriptContext *ctx)
{
- sub_80825E4();
+ BattleSetup_StartTrainerBattle();
return TRUE;
}
bool8 ScrCmd_endtrainerbattle(struct ScriptContext *ctx)
{
- ctx->scriptPtr = sub_80826E8();
+ ctx->scriptPtr = BattleSetup_GetScriptAddrAfterBattle();
return FALSE;
}
bool8 ScrCmd_endtrainerbattle2(struct ScriptContext *ctx)
{
- ctx->scriptPtr = sub_8082700();
+ ctx->scriptPtr = BattleSetup_GetTrainerPostBattleScript();
return FALSE;
}
bool8 ScrCmd_checktrainerflag(struct ScriptContext *ctx)
{
u16 index = VarGet(ScriptReadHalfword(ctx));
- ctx->comparisonResult = trainer_flag_check(index);
+ ctx->comparisonResult = HasTrainerAlreadyBeenFought(index);
return FALSE;
}
@@ -1620,16 +1623,16 @@ bool8 ScrCmd_settrainerflag(struct ScriptContext *ctx)
bool8 ScrCmd_setwildbattle(struct ScriptContext *ctx)
{
- u16 v2 = ScriptReadHalfword(ctx);
- u8 v4 = ScriptReadByte(ctx);
- u16 v5 = ScriptReadHalfword(ctx);
- ScriptWildBattle(v2, v4, v5);
+ u16 species = ScriptReadHalfword(ctx);
+ u8 level = ScriptReadByte(ctx);
+ u16 item = ScriptReadHalfword(ctx);
+ CreateScriptedWildMon(species, level, item);
return FALSE;
}
bool8 ScrCmd_dowildbattle(struct ScriptContext *ctx)
{
- StartBattle_ScriptedWild();
+ BattleSetup_StartScriptedWildBattle();
ScriptContext1_Stop();
return TRUE;
}
@@ -1668,13 +1671,13 @@ bool8 ScrCmd_pokecasino(struct ScriptContext *ctx)
bool8 ScrCmd_event_8a(struct ScriptContext *ctx)
{
- u8 v2 = ScriptReadByte(ctx);
- u8 v3 = ScriptReadByte(ctx);
- u8 v4 = ScriptReadByte(ctx);
- if (!v3)
- PlantBerryTree(v2, 0, v4, FALSE);
+ u8 treeId = ScriptReadByte(ctx);
+ u8 berry = ScriptReadByte(ctx);
+ u8 growthStage = ScriptReadByte(ctx);
+ if (berry == 0)
+ PlantBerryTree(treeId, 0, growthStage, FALSE);
else
- PlantBerryTree(v2, v3, v4, FALSE);
+ PlantBerryTree(treeId, berry, growthStage, FALSE);
return FALSE;
}
@@ -1716,21 +1719,21 @@ bool8 ScrCmd_contestlinktransfer(struct ScriptContext *ctx)
bool8 ScrCmd_doanimation(struct ScriptContext *ctx)
{
u16 effectId = VarGet(ScriptReadHalfword(ctx));
- gUnknown_0202E8BC = effectId;
- FieldEffectStart(gUnknown_0202E8BC);
+ sFieldEffectScriptId = effectId;
+ FieldEffectStart(sFieldEffectScriptId);
return FALSE;
}
bool8 ScrCmd_setanimation(struct ScriptContext *ctx)
{
- u8 v2 = ScriptReadByte(ctx);
- gUnknown_0202FF84[v2] = (s16)VarGet(ScriptReadHalfword(ctx));
+ u8 argNum = ScriptReadByte(ctx);
+ gFieldEffectArguments[argNum] = (s16)VarGet(ScriptReadHalfword(ctx));
return FALSE;
}
static bool8 sub_8067B48()
{
- if (!FieldEffectActiveListContains(gUnknown_0202E8BC))
+ if (!FieldEffectActiveListContains(sFieldEffectScriptId))
return TRUE;
else
return FALSE;
@@ -1738,7 +1741,7 @@ static bool8 sub_8067B48()
bool8 ScrCmd_checkanimation(struct ScriptContext *ctx)
{
- gUnknown_0202E8BC = VarGet(ScriptReadHalfword(ctx));
+ sFieldEffectScriptId = VarGet(ScriptReadHalfword(ctx));
SetupNativeScript(ctx, sub_8067B48);
return TRUE;
}
@@ -1758,9 +1761,9 @@ bool8 ScrCmd_checkgender(struct ScriptContext *ctx)
bool8 ScrCmd_pokecry(struct ScriptContext *ctx)
{
- u16 v3 = VarGet(ScriptReadHalfword(ctx));
- u16 v5 = VarGet(ScriptReadHalfword(ctx));
- PlayCry5(v3, v5);
+ u16 species = VarGet(ScriptReadHalfword(ctx));
+ u16 mode = VarGet(ScriptReadHalfword(ctx));
+ PlayCry5(species, mode);
return FALSE;
}
@@ -1772,16 +1775,16 @@ bool8 ScrCmd_waitpokecry(struct ScriptContext *ctx)
bool8 ScrCmd_setmaptile(struct ScriptContext *ctx)
{
- u16 v3 = VarGet(ScriptReadHalfword(ctx));
- u16 v5 = VarGet(ScriptReadHalfword(ctx));
- u16 v7 = VarGet(ScriptReadHalfword(ctx));
+ u16 x = VarGet(ScriptReadHalfword(ctx));
+ u16 y = VarGet(ScriptReadHalfword(ctx));
+ u16 tileId = VarGet(ScriptReadHalfword(ctx));
u16 v8 = VarGet(ScriptReadHalfword(ctx));
- v3 += 7;
- v5 += 7;
+ x += 7;
+ y += 7;
if (!v8)
- MapGridSetMetatileIdAt(v3, v5, v7);
+ MapGridSetMetatileIdAt(x, y, tileId);
else
- MapGridSetMetatileIdAt(v3, v5, v7 | 0xC00);
+ MapGridSetMetatileIdAt(x, y, tileId | 0xC00);
return FALSE;
}
@@ -1791,7 +1794,7 @@ bool8 ScrCmd_setdooropened(struct ScriptContext *ctx)
u16 y = VarGet(ScriptReadHalfword(ctx));
x += 7;
y += 7;
- PlaySE(sub_8058790(x, y));
+ PlaySE(GetDoorSoundEffect(x, y));
FieldAnimateDoorOpen(x, y);
return FALSE;
}
diff --git a/src/script.c b/src/script.c
index 8f12da437..f049b96fc 100644
--- a/src/script.c
+++ b/src/script.c
@@ -40,7 +40,7 @@ u8 SetupBytecodeScript(struct ScriptContext *ctx, const u8 *ptr)
return 1;
}
-void SetupNativeScript(struct ScriptContext *ctx, void *ptr)
+void SetupNativeScript(struct ScriptContext *ctx, bool8 (*ptr)(void))
{
ctx->mode = 2;
ctx->nativePtr = ptr;
@@ -64,7 +64,7 @@ u8 RunScriptCommand(struct ScriptContext *ctx)
case 2:
if (ctx->nativePtr)
{
- if (ctx->nativePtr() == 1)
+ if (ctx->nativePtr() == TRUE)
ctx->mode = 1;
return 1;
}
@@ -228,16 +228,16 @@ void ScriptContext2_RunNewScript(const u8 *ptr)
;
}
-u8 *mapheader_get_tagged_pointer(u8 tag)
+static u8 *mapheader_get_tagged_pointer(u8 tag)
{
u8 *mapScripts = gMapHeader.mapScripts;
- if (!mapScripts)
+ if (mapScripts == NULL)
return NULL;
while (1)
{
- if (!*mapScripts)
+ if (*mapScripts == 0)
return NULL;
if (*mapScripts == tag)
{
@@ -248,14 +248,14 @@ u8 *mapheader_get_tagged_pointer(u8 tag)
}
}
-void mapheader_run_script_by_tag(u8 tag)
+static void mapheader_run_script_by_tag(u8 tag)
{
u8 *ptr = mapheader_get_tagged_pointer(tag);
if (ptr)
ScriptContext2_RunNewScript(ptr);
}
-u8 *mapheader_get_first_match_from_tagged_ptr_list(u8 tag)
+static u8 *mapheader_get_first_match_from_tagged_ptr_list(u8 tag)
{
u8 *ptr = mapheader_get_tagged_pointer(tag);
@@ -316,7 +316,7 @@ void mapheader_run_first_tag4_script_list_match(void)
ScriptContext2_RunNewScript(ptr);
}
-u32 CalculateRamScriptChecksum(void)
+static u32 CalculateRamScriptChecksum(void)
{
u32 i;
u32 sum = 0;
diff --git a/src/script_menu.c b/src/script_menu.c
index f4ac55fb9..e25e74d8c 100644
--- a/src/script_menu.c
+++ b/src/script_menu.c
@@ -1,10 +1,12 @@
#include "global.h"
+#include "script.h"
#include "script_menu.h"
#include "event_data.h"
#include "field_effect.h"
#include "menu.h"
#include "palette.h"
#include "script.h"
+#include "songs.h"
#include "sound.h"
#include "sprite.h"
#include "strings.h"
@@ -13,538 +15,544 @@
// multichoice lists
const struct MenuAction MultichoiceList_00[] =
{
- {(u8 *)OtherText_Petalburg, 0},
- {(u8 *)OtherText_Slateport, 0},
- {(u8 *)gOtherText_CancelNoTerminator, 0},
+ {OtherText_Petalburg, NULL},
+ {OtherText_Slateport, NULL},
+ {gOtherText_CancelNoTerminator, NULL},
};
const struct MenuAction MultichoiceList_02[] =
{
- {(u8 *)OtherText_Enter, 0},
- {(u8 *)OtherText_Info3, 0},
- {(u8 *)gOtherText_CancelNoTerminator, 0},
+ {OtherText_Enter, NULL},
+ {OtherText_Info3, NULL},
+ {gOtherText_CancelNoTerminator, NULL},
};
const struct MenuAction MultichoiceList_03[] =
{
- {(u8 *)OtherText_WhatsAContest, 0},
- {(u8 *)OtherText_TypesOfContest, 0},
- {(u8 *)OtherText_Ranks, 0},
- {(u8 *)gOtherText_CancelNoTerminator, 0},
+ {OtherText_WhatsAContest, NULL},
+ {OtherText_TypesOfContest, NULL},
+ {OtherText_Ranks, NULL},
+ {gOtherText_CancelNoTerminator, NULL},
};
const struct MenuAction MultichoiceList_04[] =
{
- {(u8 *)OtherText_CoolContest, 0},
- {(u8 *)OtherText_BeautyContest, 0},
- {(u8 *)OtherText_CuteContest, 0},
- {(u8 *)OtherText_SmartContest, 0},
- {(u8 *)OtherText_ToughContest, 0},
- {(u8 *)gOtherText_CancelNoTerminator, 0},
+ {OtherText_CoolContest, NULL},
+ {OtherText_BeautyContest, NULL},
+ {OtherText_CuteContest, NULL},
+ {OtherText_SmartContest, NULL},
+ {OtherText_ToughContest, NULL},
+ {gOtherText_CancelNoTerminator, NULL},
};
const struct MenuAction MultichoiceList_06[] =
{
- {(u8 *)OtherText_Decoration, 0},
- {(u8 *)OtherText_PackUp, 0},
- {(u8 *)OtherText_Registry, 0},
- {(u8 *)gOtherText_CancelNoTerminator, 0},
+ {OtherText_Decoration, NULL},
+ {OtherText_PackUp, NULL},
+ {OtherText_Registry, NULL},
+ {gOtherText_CancelNoTerminator, NULL},
};
const struct MenuAction MultichoiceList_05[] =
{
- {(u8 *)OtherText_Decoration, 0},
- {(u8 *)OtherText_PackUp, 0},
- {(u8 *)gOtherText_CancelNoTerminator, 0},
+ {OtherText_Decoration, NULL},
+ {OtherText_PackUp, NULL},
+ {gOtherText_CancelNoTerminator, NULL},
};
const struct MenuAction MultichoiceList_07[] =
{
- {(u8 *)OtherText_Register, 0},
- {(u8 *)OtherText_Registry, 0},
- {(u8 *)OtherText_Information, 0},
- {(u8 *)gOtherText_CancelNoTerminator, 0},
+ {OtherText_Register, NULL},
+ {OtherText_Registry, NULL},
+ {OtherText_Information, NULL},
+ {gOtherText_CancelNoTerminator, NULL},
};
const struct MenuAction MultichoiceList_12[] =
{
- {(u8 *)OtherText_Mach, 0},
- {(u8 *)OtherText_Acro, 0},
+ {OtherText_Mach, NULL},
+ {OtherText_Acro, NULL},
};
const struct MenuAction MultichoiceList_13[] =
{
- {(u8 *)OtherText_Poison, 0},
- {(u8 *)OtherText_Paralysis, 0},
- {(u8 *)OtherText_Sleep, 0},
- {(u8 *)OtherText_Burn, 0},
- {(u8 *)OtherText_Frozen, 0},
- {(u8 *)gOtherText_CancelNoTerminator, 0},
+ {OtherText_Poison, NULL},
+ {OtherText_Paralysis, NULL},
+ {OtherText_Sleep, NULL},
+ {OtherText_Burn, NULL},
+ {OtherText_Frozen, NULL},
+ {gOtherText_CancelNoTerminator, NULL},
};
const struct MenuAction MultichoiceList_14[] =
{
- {(u8 *)OtherText_Dewford, 0},
- {(u8 *)gOtherText_CancelNoTerminator, 0},
+ {OtherText_Dewford, NULL},
+ {gOtherText_CancelNoTerminator, NULL},
};
const struct MenuAction MultichoiceList_16[] =
{
- {(u8 *)OtherText_SawIt, 0},
- {(u8 *)OtherText_NotYet, 0},
+ {OtherText_SawIt, NULL},
+ {OtherText_NotYet, NULL},
};
const struct MenuAction MultichoiceList_17[] =
{
- {(u8 *)OtherText_Yes, 0},
- {(u8 *)OtherText_No, 0},
- {(u8 *)OtherText_Info3, 0},
+ {OtherText_Yes, NULL},
+ {OtherText_No, NULL},
+ {OtherText_Info3, NULL},
};
const struct MenuAction MultichoiceList_18[] =
{
- {(u8 *)OtherText_SingleBattle, 0},
- {(u8 *)OtherText_DoubleBattle, 0},
- {(u8 *)OtherText_MultiBattle, 0},
- {(u8 *)gOtherText_CancelNoTerminator, 0},
+ {OtherText_SingleBattle, NULL},
+ {OtherText_DoubleBattle, NULL},
+ {OtherText_MultiBattle, NULL},
+ {gOtherText_CancelNoTerminator, NULL},
};
const struct MenuAction MultichoiceList_19[] =
{
- {(u8 *)OtherText_Littleroot, 0},
- {(u8 *)OtherText_Slateport, 0},
- {(u8 *)OtherText_Lilycove, 0},
+ {OtherText_Littleroot, NULL},
+ {OtherText_Slateport, NULL},
+ {OtherText_Lilycove, NULL},
};
const struct MenuAction MultichoiceList_20[] =
{
- {(u8 *)OtherText_Yes, 0},
- {(u8 *)OtherText_No, 0},
- {(u8 *)OtherText_Info3, 0},
+ {OtherText_Yes, NULL},
+ {OtherText_No, NULL},
+ {OtherText_Info3, NULL},
};
const struct MenuAction MultichoiceList_23[] =
{
- {(u8 *)OtherText_MakeAChallenge, 0},
- {(u8 *)OtherText_ObtainInformation, 0},
- {(u8 *)gOtherText_CancelNoTerminator, 0},
+ {OtherText_MakeAChallenge, NULL},
+ {OtherText_ObtainInformation, NULL},
+ {gOtherText_CancelNoTerminator, NULL},
};
const struct MenuAction MultichoiceList_24[] =
{
- {(u8 *)OtherText_Lv50_2, 0},
- {(u8 *)OtherText_Lv100_2, 0},
- {(u8 *)gOtherText_CancelNoTerminator, 0},
+ {OtherText_Lv50_2, NULL},
+ {OtherText_Lv100_2, NULL},
+ {gOtherText_CancelNoTerminator, NULL},
};
const struct MenuAction MultichoiceList_25[] =
{
- {(u8 *)OtherText_Zigzagoon, 0},
- {(u8 *)OtherText_Nincada, 0},
- {(u8 *)OtherText_Poochyena, 0},
+ {OtherText_Zigzagoon, NULL},
+ {OtherText_Nincada, NULL},
+ {OtherText_Poochyena, NULL},
};
const struct MenuAction MultichoiceList_26[] =
{
- {(u8 *)OtherText_Nincada2, 0},
- {(u8 *)OtherText_Lotad, 0},
- {(u8 *)OtherText_Roselia, 0},
+ {OtherText_Nincada2, NULL},
+ {OtherText_Lotad, NULL},
+ {OtherText_Roselia, NULL},
};
const struct MenuAction MultichoiceList_27[] =
{
- {(u8 *)OtherText_Shroomish, 0},
- {(u8 *)OtherText_Nincada3, 0},
- {(u8 *)OtherText_Surskit, 0},
+ {OtherText_Shroomish, NULL},
+ {OtherText_Nincada3, NULL},
+ {OtherText_Surskit, NULL},
};
const struct MenuAction MultichoiceList_28[] =
{
- {(u8 *)OtherText_Treecko, 0},
- {(u8 *)OtherText_Torchic, 0},
- {(u8 *)OtherText_Mudkip, 0},
+ {OtherText_Treecko, NULL},
+ {OtherText_Torchic, NULL},
+ {OtherText_Mudkip, NULL},
};
const struct MenuAction MultichoiceList_29[] =
{
- {(u8 *)OtherText_Seedot, 0},
- {(u8 *)OtherText_Shroomish2, 0},
- {(u8 *)OtherText_Spinda, 0},
+ {OtherText_Seedot, NULL},
+ {OtherText_Shroomish2, NULL},
+ {OtherText_Spinda, NULL},
};
const struct MenuAction MultichoiceList_30[] =
{
- {(u8 *)OtherText_Shroomish3, 0},
- {(u8 *)OtherText_Zigzagoon2, 0},
- {(u8 *)OtherText_Wurmple, 0},
+ {OtherText_Shroomish3, NULL},
+ {OtherText_Zigzagoon2, NULL},
+ {OtherText_Wurmple, NULL},
};
const struct MenuAction MultichoiceList_31[] =
{
- {(u8 *)OtherText_PokeBall, 0},
- {(u8 *)OtherText_SuperPotion, 0},
- {(u8 *)OtherText_SamePrice, 0},
+ {OtherText_PokeBall, NULL},
+ {OtherText_SuperPotion, NULL},
+ {OtherText_SamePrice, NULL},
};
const struct MenuAction MultichoiceList_32[] =
{
- {(u8 *)OtherText_Yen135, 0},
- {(u8 *)OtherText_Yen155, 0},
- {(u8 *)OtherText_Yen175, 0},
+ {OtherText_Yen135, NULL},
+ {OtherText_Yen155, NULL},
+ {OtherText_Yen175, NULL},
};
const struct MenuAction MultichoiceList_33[] =
{
- {(u8 *)OtherText_CostMore, 0},
- {(u8 *)OtherText_CostLess, 0},
- {(u8 *)OtherText_SamePrice2, 0},
+ {OtherText_CostMore, NULL},
+ {OtherText_CostLess, NULL},
+ {OtherText_SamePrice2, NULL},
};
const struct MenuAction MultichoiceList_34[] =
{
- {(u8 *)OtherText_MaleSymbol, 0},
- {(u8 *)OtherText_FemaleSymbol, 0},
- {(u8 *)OtherText_Neither, 0},
+ {OtherText_MaleSymbol, NULL},
+ {OtherText_FemaleSymbol, NULL},
+ {OtherText_Neither, NULL},
};
const struct MenuAction MultichoiceList_35[] =
{
- {(u8 *)OtherText_Males, 0},
- {(u8 *)OtherText_Females, 0},
- {(u8 *)OtherText_SameNumber, 0},
+ {OtherText_Males, NULL},
+ {OtherText_Females, NULL},
+ {OtherText_SameNumber, NULL},
};
const struct MenuAction MultichoiceList_36[] =
{
- {(u8 *)OtherText_Male, 0},
- {(u8 *)OtherText_Female, 0},
- {(u8 *)OtherText_ItDepends, 0},
+ {OtherText_Male, NULL},
+ {OtherText_Female, NULL},
+ {OtherText_ItDepends, NULL},
};
const struct MenuAction MultichoiceList_37[] =
{
- {(u8 *)OtherText_Six2, 0},
- {(u8 *)OtherText_Eight2, 0},
- {(u8 *)OtherText_Ten, 0},
+ {OtherText_Six2, NULL},
+ {OtherText_Eight2, NULL},
+ {OtherText_Ten, NULL},
};
const struct MenuAction MultichoiceList_38[] =
{
- {(u8 *)OtherText_One, 0},
- {(u8 *)OtherText_Two, 0},
- {(u8 *)OtherText_Three, 0},
+ {OtherText_One, NULL},
+ {OtherText_Two, NULL},
+ {OtherText_Three, NULL},
};
const struct MenuAction MultichoiceList_39[] =
{
- {(u8 *)OtherText_Six, 0},
- {(u8 *)OtherText_Seven, 0},
- {(u8 *)OtherText_Eight, 0},
+ {OtherText_Six, NULL},
+ {OtherText_Seven, NULL},
+ {OtherText_Eight, NULL},
};
const struct MenuAction MultichoiceList_42[] =
{
- {(u8 *)OtherText_FreshWater, 0},
- {(u8 *)OtherText_SodaPop, 0},
- {(u8 *)OtherText_Lemonade, 0},
- {(u8 *)gOtherText_CancelNoTerminator, 0},
+ {OtherText_FreshWater, NULL},
+ {OtherText_SodaPop, NULL},
+ {OtherText_Lemonade, NULL},
+ {gOtherText_CancelNoTerminator, NULL},
};
const struct MenuAction MultichoiceList_43[] =
{
- {(u8 *)OtherText_HowToRide, 0},
- {(u8 *)OtherText_HowToTurn, 0},
- {(u8 *)OtherText_SandySlopes, 0},
- {(u8 *)gOtherText_CancelNoTerminator, 0},
+ {OtherText_HowToRide, NULL},
+ {OtherText_HowToTurn, NULL},
+ {OtherText_SandySlopes, NULL},
+ {gOtherText_CancelNoTerminator, NULL},
};
const struct MenuAction MultichoiceList_44[] =
{
- {(u8 *)OtherText_Wheelies, 0},
- {(u8 *)OtherText_BunnyHops, 0},
- {(u8 *)OtherText_Jumping, 0},
- {(u8 *)gOtherText_CancelNoTerminator, 0},
+ {OtherText_Wheelies, NULL},
+ {OtherText_BunnyHops, NULL},
+ {OtherText_Jumping, NULL},
+ {gOtherText_CancelNoTerminator, NULL},
};
const struct MenuAction MultichoiceList_45[] =
{
- {(u8 *)OtherText_Satisfied, 0},
- {(u8 *)OtherText_Dissatisfied, 0},
+ {OtherText_Satisfied, NULL},
+ {OtherText_Dissatisfied, NULL},
};
const struct MenuAction MultichoiceList_46[] =
{
- {(u8 *)OtherText_Deepseatooth, 0},
- {(u8 *)OtherText_Deepseascale, 0},
- {(u8 *)gOtherText_CancelNoTerminator, 0},
+ {OtherText_Deepseatooth, NULL},
+ {OtherText_Deepseascale, NULL},
+ {gOtherText_CancelNoTerminator, NULL},
};
const struct MenuAction MultichoiceList_47[] =
{
- {(u8 *)OtherText_BlueFlute2, 0},
- {(u8 *)OtherText_YellowFlute2, 0},
- {(u8 *)OtherText_RedFlute2, 0},
- {(u8 *)OtherText_WhiteFlute2, 0},
- {(u8 *)OtherText_BlackFlute2, 0},
- {(u8 *)OtherText_GlassChair, 0},
- {(u8 *)OtherText_GlassDesk, 0},
- {(u8 *)gOtherText_CancelNoTerminator, 0},
+ {OtherText_BlueFlute2, NULL},
+ {OtherText_YellowFlute2, NULL},
+ {OtherText_RedFlute2, NULL},
+ {OtherText_WhiteFlute2, NULL},
+ {OtherText_BlackFlute2, NULL},
+ {OtherText_GlassChair, NULL},
+ {OtherText_GlassDesk, NULL},
+ {gOtherText_CancelNoTerminator, NULL},
};
const struct MenuAction MultichoiceList_48[] =
{
- {(u8 *)OtherText_TreeckoDoll, 0},
- {(u8 *)OtherText_TorchicDoll, 0},
- {(u8 *)OtherText_MudkipDoll, 0},
- {(u8 *)gOtherText_CancelNoTerminator, 0},
+ {OtherText_TreeckoDoll, NULL},
+ {OtherText_TorchicDoll, NULL},
+ {OtherText_MudkipDoll, NULL},
+ {gOtherText_CancelNoTerminator, NULL},
};
const struct MenuAction MultichoiceList_55[] =
{
- {(u8 *)OtherText_TM32, 0},
- {(u8 *)OtherText_TM29, 0},
- {(u8 *)OtherText_TM35, 0},
- {(u8 *)OtherText_TM24, 0},
- {(u8 *)OtherText_TM13, 0},
- {(u8 *)gOtherText_CancelNoTerminator, 0},
+ {OtherText_TM32, NULL},
+ {OtherText_TM29, NULL},
+ {OtherText_TM35, NULL},
+ {OtherText_TM24, NULL},
+ {OtherText_TM13, NULL},
+ {gOtherText_CancelNoTerminator, NULL},
};
const struct MenuAction MultichoiceList_49[] =
{
- {(u8 *)OtherText_50Coins, 0},
- {(u8 *)OtherText_500Coins, 0},
- {(u8 *)gOtherText_CancelNoTerminator, 0},
+ {OtherText_50Coins, NULL},
+ {OtherText_500Coins, NULL},
+ {gOtherText_CancelNoTerminator, NULL},
};
const struct MenuAction MultichoiceList_50[] =
{
- {(u8 *)OtherText_Excellent, 0},
- {(u8 *)OtherText_NotSoHot, 0},
+ {OtherText_Excellent, NULL},
+ {OtherText_NotSoHot, NULL},
};
const struct MenuAction MultichoiceList_52[] =
{
- {(u8 *)OtherText_Lilycove, 0},
- {(u8 *)OtherText_BattleTower, 0},
- {(u8 *)gOtherText_CancelNoTerminator, 0},
+ {OtherText_Lilycove, NULL},
+ {OtherText_BattleTower, NULL},
+ {gOtherText_CancelNoTerminator, NULL},
};
const struct MenuAction MultichoiceList_53[] =
{
- {(u8 *)OtherText_Slateport, 0},
- {(u8 *)OtherText_Lilycove, 0},
- {(u8 *)gOtherText_CancelNoTerminator, 0},
+ {OtherText_Slateport, NULL},
+ {OtherText_Lilycove, NULL},
+ {gOtherText_CancelNoTerminator, NULL},
};
const struct MenuAction MultichoiceList_54[] =
{
- {(u8 *)OtherText_Right, 0},
- {(u8 *)OtherText_Left, 0},
+ {OtherText_Right, NULL},
+ {OtherText_Left, NULL},
};
const struct MenuAction MultichoiceList_56[] =
{
- {(u8 *)OtherText_Slateport, 0},
- {(u8 *)OtherText_BattleTower, 0},
- {(u8 *)gOtherText_CancelNoTerminator, 0},
+ {OtherText_Slateport, NULL},
+ {OtherText_BattleTower, NULL},
+ {gOtherText_CancelNoTerminator, NULL},
};
const struct MenuAction MultichoiceList_57[] =
{
- {(u8 *)OtherText_1F_2, 0},
- {(u8 *)OtherText_2F_2, 0},
- {(u8 *)OtherText_3F_2, 0},
- {(u8 *)OtherText_4F_2, 0},
- {(u8 *)OtherText_5F_2, 0},
+ {OtherText_1F_2, NULL},
+ {OtherText_2F_2, NULL},
+ {OtherText_3F_2, NULL},
+ {OtherText_4F_2, NULL},
+ {OtherText_5F_2, NULL},
};
const struct MenuAction MultichoiceList_58[] =
{
- {(u8 *)OtherText_RedShard, 0},
- {(u8 *)gOtherText_CancelNoTerminator, 0},
+ {OtherText_RedShard, NULL},
+ {gOtherText_CancelNoTerminator, NULL},
};
const struct MenuAction MultichoiceList_59[] =
{
- {(u8 *)OtherText_YellowShard, 0},
- {(u8 *)gOtherText_CancelNoTerminator, 0},
+ {OtherText_YellowShard, NULL},
+ {gOtherText_CancelNoTerminator, NULL},
};
const struct MenuAction MultichoiceList_60[] =
{
- {(u8 *)OtherText_RedShard, 0},
- {(u8 *)OtherText_YellowShard, 0},
- {(u8 *)gOtherText_CancelNoTerminator, 0},
+ {OtherText_RedShard, NULL},
+ {OtherText_YellowShard, NULL},
+ {gOtherText_CancelNoTerminator, NULL},
};
const struct MenuAction MultichoiceList_61[] =
{
- {(u8 *)OtherText_BlueShard, 0},
- {(u8 *)gOtherText_CancelNoTerminator, 0},
+ {OtherText_BlueShard, NULL},
+ {gOtherText_CancelNoTerminator, NULL},
};
const struct MenuAction MultichoiceList_62[] =
{
- {(u8 *)OtherText_RedShard, 0},
- {(u8 *)OtherText_BlueShard, 0},
- {(u8 *)gOtherText_CancelNoTerminator, 0},
+ {OtherText_RedShard, NULL},
+ {OtherText_BlueShard, NULL},
+ {gOtherText_CancelNoTerminator, NULL},
};
const struct MenuAction MultichoiceList_63[] =
{
- {(u8 *)OtherText_YellowShard, 0},
- {(u8 *)OtherText_BlueShard, 0},
- {(u8 *)gOtherText_CancelNoTerminator, 0},
+ {OtherText_YellowShard, NULL},
+ {OtherText_BlueShard, NULL},
+ {gOtherText_CancelNoTerminator, NULL},
};
const struct MenuAction MultichoiceList_64[] =
{
- {(u8 *)OtherText_RedShard, 0},
- {(u8 *)OtherText_YellowShard, 0},
- {(u8 *)OtherText_BlueShard, 0},
- {(u8 *)gOtherText_CancelNoTerminator, 0},
+ {OtherText_RedShard, NULL},
+ {OtherText_YellowShard, NULL},
+ {OtherText_BlueShard, NULL},
+ {gOtherText_CancelNoTerminator, NULL},
};
const struct MenuAction MultichoiceList_65[] =
{
- {(u8 *)OtherText_GreenShard, 0},
- {(u8 *)gOtherText_CancelNoTerminator, 0},
+ {OtherText_GreenShard, NULL},
+ {gOtherText_CancelNoTerminator, NULL},
};
const struct MenuAction MultichoiceList_66[] =
{
- {(u8 *)OtherText_RedShard, 0},
- {(u8 *)OtherText_GreenShard, 0},
- {(u8 *)gOtherText_CancelNoTerminator, 0},
+ {OtherText_RedShard, NULL},
+ {OtherText_GreenShard, NULL},
+ {gOtherText_CancelNoTerminator, NULL},
};
const struct MenuAction MultichoiceList_67[] =
{
- {(u8 *)OtherText_YellowShard, 0},
- {(u8 *)OtherText_GreenShard, 0},
- {(u8 *)gOtherText_CancelNoTerminator, 0},
+ {OtherText_YellowShard, NULL},
+ {OtherText_GreenShard, NULL},
+ {gOtherText_CancelNoTerminator, NULL},
};
const struct MenuAction MultichoiceList_68[] =
{
- {(u8 *)OtherText_RedShard, 0},
- {(u8 *)OtherText_YellowShard, 0},
- {(u8 *)OtherText_GreenShard, 0},
- {(u8 *)gOtherText_CancelNoTerminator, 0},
+ {OtherText_RedShard, NULL},
+ {OtherText_YellowShard, NULL},
+ {OtherText_GreenShard, NULL},
+ {gOtherText_CancelNoTerminator, NULL},
};
const struct MenuAction MultichoiceList_69[] =
{
- {(u8 *)OtherText_BlueShard, 0},
- {(u8 *)OtherText_GreenShard, 0},
- {(u8 *)gOtherText_CancelNoTerminator, 0},
+ {OtherText_BlueShard, NULL},
+ {OtherText_GreenShard, NULL},
+ {gOtherText_CancelNoTerminator, NULL},
};
const struct MenuAction MultichoiceList_70[] =
{
- {(u8 *)OtherText_RedShard, 0},
- {(u8 *)OtherText_BlueShard, 0},
- {(u8 *)OtherText_GreenShard, 0},
- {(u8 *)gOtherText_CancelNoTerminator, 0},
+ {OtherText_RedShard, NULL},
+ {OtherText_BlueShard, NULL},
+ {OtherText_GreenShard, NULL},
+ {gOtherText_CancelNoTerminator, NULL},
};
const struct MenuAction MultichoiceList_71[] =
{
- {(u8 *)OtherText_YellowShard, 0},
- {(u8 *)OtherText_BlueShard, 0},
- {(u8 *)OtherText_GreenShard, 0},
- {(u8 *)gOtherText_CancelNoTerminator, 0},
+ {OtherText_YellowShard, NULL},
+ {OtherText_BlueShard, NULL},
+ {OtherText_GreenShard, NULL},
+ {gOtherText_CancelNoTerminator, NULL},
};
const struct MenuAction MultichoiceList_72[] =
{
- {(u8 *)OtherText_RedShard, 0},
- {(u8 *)OtherText_YellowShard, 0},
- {(u8 *)OtherText_BlueShard, 0},
- {(u8 *)OtherText_GreenShard, 0},
- {(u8 *)gOtherText_CancelNoTerminator, 0},
+ {OtherText_RedShard, NULL},
+ {OtherText_YellowShard, NULL},
+ {OtherText_BlueShard, NULL},
+ {OtherText_GreenShard, NULL},
+ {gOtherText_CancelNoTerminator, NULL},
};
const struct MenuAction MultichoiceList_01[] =
{
- {(u8 *)gOtherText_CancelNoTerminator, 0},
+ {gOtherText_CancelNoTerminator, NULL},
+};
+
+struct MultichoiceListStruct
+{
+ const struct MenuAction *list;
+ u8 count;
};
const struct MultichoiceListStruct gMultichoiceLists[] =
{
- {(struct MenuAction *)MultichoiceList_00, 3},
- {(struct MenuAction *)MultichoiceList_01, 1},
- {(struct MenuAction *)MultichoiceList_02, 3},
- {(struct MenuAction *)MultichoiceList_03, 4},
- {(struct MenuAction *)MultichoiceList_04, 6},
- {(struct MenuAction *)MultichoiceList_05, 3},
- {(struct MenuAction *)MultichoiceList_06, 4},
- {(struct MenuAction *)MultichoiceList_07, 4},
- {(struct MenuAction *)MultichoiceList_01, 1},
- {(struct MenuAction *)MultichoiceList_01, 1},
- {(struct MenuAction *)MultichoiceList_01, 1},
- {(struct MenuAction *)MultichoiceList_01, 1},
- {(struct MenuAction *)MultichoiceList_12, 2},
- {(struct MenuAction *)MultichoiceList_13, 6},
- {(struct MenuAction *)MultichoiceList_14, 2},
- {(struct MenuAction *)MultichoiceList_01, 1},
- {(struct MenuAction *)MultichoiceList_16, 2},
- {(struct MenuAction *)MultichoiceList_17, 3},
- {(struct MenuAction *)MultichoiceList_18, 4},
- {(struct MenuAction *)MultichoiceList_19, 3},
- {(struct MenuAction *)MultichoiceList_20, 3},
- {(struct MenuAction *)MultichoiceList_01, 1},
- {(struct MenuAction *)MultichoiceList_01, 1},
- {(struct MenuAction *)MultichoiceList_23, 3},
- {(struct MenuAction *)MultichoiceList_24, 3},
- {(struct MenuAction *)MultichoiceList_25, 3},
- {(struct MenuAction *)MultichoiceList_26, 3},
- {(struct MenuAction *)MultichoiceList_27, 3},
- {(struct MenuAction *)MultichoiceList_28, 3},
- {(struct MenuAction *)MultichoiceList_29, 3},
- {(struct MenuAction *)MultichoiceList_30, 3},
- {(struct MenuAction *)MultichoiceList_31, 3},
- {(struct MenuAction *)MultichoiceList_32, 3},
- {(struct MenuAction *)MultichoiceList_33, 3},
- {(struct MenuAction *)MultichoiceList_34, 3},
- {(struct MenuAction *)MultichoiceList_35, 3},
- {(struct MenuAction *)MultichoiceList_36, 3},
- {(struct MenuAction *)MultichoiceList_37, 3},
- {(struct MenuAction *)MultichoiceList_38, 3},
- {(struct MenuAction *)MultichoiceList_39, 3},
- {(struct MenuAction *)MultichoiceList_01, 1},
- {(struct MenuAction *)MultichoiceList_01, 1},
- {(struct MenuAction *)MultichoiceList_42, 4},
- {(struct MenuAction *)MultichoiceList_43, 4},
- {(struct MenuAction *)MultichoiceList_44, 4},
- {(struct MenuAction *)MultichoiceList_45, 2},
- {(struct MenuAction *)MultichoiceList_46, 3},
- {(struct MenuAction *)MultichoiceList_47, 8},
- {(struct MenuAction *)MultichoiceList_48, 4},
- {(struct MenuAction *)MultichoiceList_49, 3},
- {(struct MenuAction *)MultichoiceList_50, 2},
- {(struct MenuAction *)MultichoiceList_01, 1},
- {(struct MenuAction *)MultichoiceList_52, 3},
- {(struct MenuAction *)MultichoiceList_53, 3},
- {(struct MenuAction *)MultichoiceList_54, 2},
- {(struct MenuAction *)MultichoiceList_55, 6},
- {(struct MenuAction *)MultichoiceList_56, 3},
- {(struct MenuAction *)MultichoiceList_57, 5},
- {(struct MenuAction *)MultichoiceList_58, 2},
- {(struct MenuAction *)MultichoiceList_59, 2},
- {(struct MenuAction *)MultichoiceList_60, 3},
- {(struct MenuAction *)MultichoiceList_61, 2},
- {(struct MenuAction *)MultichoiceList_62, 3},
- {(struct MenuAction *)MultichoiceList_63, 3},
- {(struct MenuAction *)MultichoiceList_64, 4},
- {(struct MenuAction *)MultichoiceList_65, 2},
- {(struct MenuAction *)MultichoiceList_66, 3},
- {(struct MenuAction *)MultichoiceList_67, 3},
- {(struct MenuAction *)MultichoiceList_68, 4},
- {(struct MenuAction *)MultichoiceList_69, 3},
- {(struct MenuAction *)MultichoiceList_70, 4},
- {(struct MenuAction *)MultichoiceList_71, 4},
- {(struct MenuAction *)MultichoiceList_72, 5}
+ {MultichoiceList_00, ARRAY_COUNT(MultichoiceList_00)},
+ {MultichoiceList_01, ARRAY_COUNT(MultichoiceList_01)},
+ {MultichoiceList_02, ARRAY_COUNT(MultichoiceList_02)},
+ {MultichoiceList_03, ARRAY_COUNT(MultichoiceList_03)},
+ {MultichoiceList_04, ARRAY_COUNT(MultichoiceList_04)},
+ {MultichoiceList_05, ARRAY_COUNT(MultichoiceList_05)},
+ {MultichoiceList_06, ARRAY_COUNT(MultichoiceList_06)},
+ {MultichoiceList_07, ARRAY_COUNT(MultichoiceList_07)},
+ {MultichoiceList_01, ARRAY_COUNT(MultichoiceList_01)},
+ {MultichoiceList_01, ARRAY_COUNT(MultichoiceList_01)},
+ {MultichoiceList_01, ARRAY_COUNT(MultichoiceList_01)},
+ {MultichoiceList_01, ARRAY_COUNT(MultichoiceList_01)},
+ {MultichoiceList_12, ARRAY_COUNT(MultichoiceList_12)},
+ {MultichoiceList_13, ARRAY_COUNT(MultichoiceList_13)},
+ {MultichoiceList_14, ARRAY_COUNT(MultichoiceList_14)},
+ {MultichoiceList_01, ARRAY_COUNT(MultichoiceList_01)},
+ {MultichoiceList_16, ARRAY_COUNT(MultichoiceList_16)},
+ {MultichoiceList_17, ARRAY_COUNT(MultichoiceList_17)},
+ {MultichoiceList_18, ARRAY_COUNT(MultichoiceList_18)},
+ {MultichoiceList_19, ARRAY_COUNT(MultichoiceList_19)},
+ {MultichoiceList_20, ARRAY_COUNT(MultichoiceList_20)},
+ {MultichoiceList_01, ARRAY_COUNT(MultichoiceList_01)},
+ {MultichoiceList_01, ARRAY_COUNT(MultichoiceList_01)},
+ {MultichoiceList_23, ARRAY_COUNT(MultichoiceList_23)},
+ {MultichoiceList_24, ARRAY_COUNT(MultichoiceList_24)},
+ {MultichoiceList_25, ARRAY_COUNT(MultichoiceList_25)},
+ {MultichoiceList_26, ARRAY_COUNT(MultichoiceList_26)},
+ {MultichoiceList_27, ARRAY_COUNT(MultichoiceList_27)},
+ {MultichoiceList_28, ARRAY_COUNT(MultichoiceList_28)},
+ {MultichoiceList_29, ARRAY_COUNT(MultichoiceList_29)},
+ {MultichoiceList_30, ARRAY_COUNT(MultichoiceList_30)},
+ {MultichoiceList_31, ARRAY_COUNT(MultichoiceList_31)},
+ {MultichoiceList_32, ARRAY_COUNT(MultichoiceList_32)},
+ {MultichoiceList_33, ARRAY_COUNT(MultichoiceList_33)},
+ {MultichoiceList_34, ARRAY_COUNT(MultichoiceList_34)},
+ {MultichoiceList_35, ARRAY_COUNT(MultichoiceList_35)},
+ {MultichoiceList_36, ARRAY_COUNT(MultichoiceList_36)},
+ {MultichoiceList_37, ARRAY_COUNT(MultichoiceList_37)},
+ {MultichoiceList_38, ARRAY_COUNT(MultichoiceList_38)},
+ {MultichoiceList_39, ARRAY_COUNT(MultichoiceList_39)},
+ {MultichoiceList_01, ARRAY_COUNT(MultichoiceList_01)},
+ {MultichoiceList_01, ARRAY_COUNT(MultichoiceList_01)},
+ {MultichoiceList_42, ARRAY_COUNT(MultichoiceList_42)},
+ {MultichoiceList_43, ARRAY_COUNT(MultichoiceList_43)},
+ {MultichoiceList_44, ARRAY_COUNT(MultichoiceList_44)},
+ {MultichoiceList_45, ARRAY_COUNT(MultichoiceList_45)},
+ {MultichoiceList_46, ARRAY_COUNT(MultichoiceList_46)},
+ {MultichoiceList_47, ARRAY_COUNT(MultichoiceList_47)},
+ {MultichoiceList_48, ARRAY_COUNT(MultichoiceList_48)},
+ {MultichoiceList_49, ARRAY_COUNT(MultichoiceList_49)},
+ {MultichoiceList_50, ARRAY_COUNT(MultichoiceList_50)},
+ {MultichoiceList_01, ARRAY_COUNT(MultichoiceList_01)},
+ {MultichoiceList_52, ARRAY_COUNT(MultichoiceList_52)},
+ {MultichoiceList_53, ARRAY_COUNT(MultichoiceList_53)},
+ {MultichoiceList_54, ARRAY_COUNT(MultichoiceList_54)},
+ {MultichoiceList_55, ARRAY_COUNT(MultichoiceList_55)},
+ {MultichoiceList_56, ARRAY_COUNT(MultichoiceList_56)},
+ {MultichoiceList_57, ARRAY_COUNT(MultichoiceList_57)},
+ {MultichoiceList_58, ARRAY_COUNT(MultichoiceList_58)},
+ {MultichoiceList_59, ARRAY_COUNT(MultichoiceList_59)},
+ {MultichoiceList_60, ARRAY_COUNT(MultichoiceList_60)},
+ {MultichoiceList_61, ARRAY_COUNT(MultichoiceList_61)},
+ {MultichoiceList_62, ARRAY_COUNT(MultichoiceList_62)},
+ {MultichoiceList_63, ARRAY_COUNT(MultichoiceList_63)},
+ {MultichoiceList_64, ARRAY_COUNT(MultichoiceList_64)},
+ {MultichoiceList_65, ARRAY_COUNT(MultichoiceList_65)},
+ {MultichoiceList_66, ARRAY_COUNT(MultichoiceList_66)},
+ {MultichoiceList_67, ARRAY_COUNT(MultichoiceList_67)},
+ {MultichoiceList_68, ARRAY_COUNT(MultichoiceList_68)},
+ {MultichoiceList_69, ARRAY_COUNT(MultichoiceList_69)},
+ {MultichoiceList_70, ARRAY_COUNT(MultichoiceList_70)},
+ {MultichoiceList_71, ARRAY_COUNT(MultichoiceList_71)},
+ {MultichoiceList_72, ARRAY_COUNT(MultichoiceList_72)},
};
const u8 *const gUnknown_083CE048[] =
@@ -574,37 +582,50 @@ extern u8 gPCText_WhichPCShouldBeAccessed[];
extern u16 gScriptResult;
-bool8 sub_80B5054(u8 left, u8 top, u8 var3, u8 var4)
+static void Task_HandleMultichoiceInput(u8);
+static void Task_HandleYesNoInput(u8);
+static void Task_HandleMultichoiceGridInput(u8);
+static u16 GetStringWidthInTilesForScriptMenu(const u8 *str);
+static void DrawMultichoiceMenu(u8, u8, u8, const struct MenuAction *list, u8, u8);
+static void StartScriptMenuTask(u8, u8, u8, u8, u8, u8);
+static void sub_80B53B4(u8, u8, u8, const struct MenuAction *list, u8);
+static bool8 IsPicboxClosed(void);
+
+bool8 ScriptMenu_Multichoice(u8 left, u8 top, u8 multichoiceId, u8 ignoreBPress)
{
- if (FuncIsActiveTask(sub_80B52B4) == 1)
+ if (FuncIsActiveTask(Task_HandleMultichoiceInput) == TRUE)
+ {
return FALSE;
+ }
else
{
gScriptResult = 0xFF;
- DrawMultichoiceMenu(left, top, gMultichoiceLists[var3].count, gMultichoiceLists[var3].list, var4, 0);
+ DrawMultichoiceMenu(left, top, gMultichoiceLists[multichoiceId].count, gMultichoiceLists[multichoiceId].list, ignoreBPress, 0);
return TRUE;
}
}
-bool8 sub_80B50B0(u8 left, u8 top, u8 var3, u8 var4, u8 var5)
+bool8 ScriptMenu_MultichoiceWithDefault(u8 left, u8 top, u8 multichoiceId, u8 ignoreBPress, u8 defaultChoice)
{
- if (FuncIsActiveTask(sub_80B52B4) == 1)
+ if (FuncIsActiveTask(Task_HandleMultichoiceInput) == TRUE)
+ {
return FALSE;
+ }
else
{
gScriptResult = 0xFF;
- DrawMultichoiceMenu(left, top, gMultichoiceLists[var3].count, gMultichoiceLists[var3].list, var4, var5);
+ DrawMultichoiceMenu(left, top, gMultichoiceLists[multichoiceId].count, gMultichoiceLists[multichoiceId].list, ignoreBPress, defaultChoice);
return TRUE;
}
}
-u16 GetStringWidthInTilesForScriptMenu(const u8 *str)
+static u16 GetStringWidthInTilesForScriptMenu(const u8 *str)
{
// each tile on screen is 8x8, so it needs the number of tiles and not pixels, hence the division by 8.
return (GetStringWidthGivenWindowConfig((struct WindowConfig *)&gWindowConfig_81E6CE4, str) + 7) / 8;
}
-void DrawMultichoiceMenu(u8 left, u8 top, u8 count, struct MenuAction *list, u8 var4, u8 cursorPos)
+static void DrawMultichoiceMenu(u8 left, u8 top, u8 count, const struct MenuAction *list, u8 ignoreBPress, u8 cursorPos)
{
u16 width = GetStringWidthInTilesForScriptMenu(list[0].text);
u16 newWidth;
@@ -633,75 +654,79 @@ void DrawMultichoiceMenu(u8 left, u8 top, u8 count, struct MenuAction *list, u8
MenuDrawTextWindow(left, top, right, bottom);
PrintMenuItems(left + 1, top + 1, count, list);
InitMenu(0, left + 1, top + 1, count, cursorPos, right - left - 1);
- sub_80B5230(left, top, right, bottom, var4, count);
+ StartScriptMenuTask(left, top, right, bottom, ignoreBPress, count);
}
-void sub_80B5230(u8 left, u8 top, u8 right, u8 bottom, u8 unkVar, u8 count)
+#define tLeft data[0]
+#define tTop data[1]
+#define tRight data[2]
+#define tBottom data[3]
+#define tIgnoreBPress data[4]
+#define tDoWrap data[5]
+
+static void StartScriptMenuTask(u8 left, u8 top, u8 right, u8 bottom, u8 ignoreBPress, u8 count)
{
- u8 taskId = CreateTask(sub_80B52B4, 80);
+ u8 taskId = CreateTask(Task_HandleMultichoiceInput, 80);
- gTasks[taskId].data[0] = left;
- gTasks[taskId].data[1] = top;
- gTasks[taskId].data[2] = right;
- gTasks[taskId].data[3] = bottom;
- gTasks[taskId].data[4] = unkVar;
+ gTasks[taskId].tLeft = left;
+ gTasks[taskId].tTop = top;
+ gTasks[taskId].tRight = right;
+ gTasks[taskId].tBottom = bottom;
+ gTasks[taskId].tIgnoreBPress = ignoreBPress;
if (count > 3)
- gTasks[taskId].data[5] = TRUE;
+ gTasks[taskId].tDoWrap = TRUE;
else
- gTasks[taskId].data[5] = FALSE;
+ gTasks[taskId].tDoWrap = FALSE;
}
-void sub_80B52B4(u8 taskId)
+static void Task_HandleMultichoiceInput(u8 taskId)
{
- s8 var;
+ s8 selection;
if (!gPaletteFade.active)
{
- if (!gTasks[taskId].data[5])
- var = ProcessMenuInputNoWrap();
+ if (!gTasks[taskId].tDoWrap)
+ selection = ProcessMenuInputNoWrap();
else
- var = ProcessMenuInput();
+ selection = ProcessMenuInput();
- if (var != -2)
+ if (selection != -2)
{
- if (var == -1)
+ if (selection == -1)
{
- if (!gTasks[taskId].data[4])
- {
- PlaySE(5);
- gScriptResult = 127;
- }
- else
- {
+ if (gTasks[taskId].tIgnoreBPress)
return;
- }
+ PlaySE(SE_SELECT);
+ gScriptResult = 127;
}
else
{
- gScriptResult = var;
+ gScriptResult = selection;
}
HandleDestroyMenuCursors();
- MenuZeroFillWindowRect(gTasks[taskId].data[0], gTasks[taskId].data[1], gTasks[taskId].data[2], gTasks[taskId].data[3]);
+ MenuZeroFillWindowRect(gTasks[taskId].tLeft, gTasks[taskId].tTop, gTasks[taskId].tRight, gTasks[taskId].tBottom);
DestroyTask(taskId);
EnableBothScriptContexts();
}
}
}
-bool8 Multichoice(u8 var1, u8 var2, u8 var3, u8 var4)
+bool8 Multichoice(u8 left, u8 top, u8 multichoiceId, u8 ignoreBPress)
{
- if (FuncIsActiveTask(sub_80B52B4) == 1)
+ if (FuncIsActiveTask(Task_HandleMultichoiceInput) == TRUE)
+ {
return FALSE;
+ }
else
{
gScriptResult = 0xFF;
- sub_80B53B4(var1, var2, gMultichoiceLists[var3].count, gMultichoiceLists[var3].list, var4);
+ sub_80B53B4(left, top, gMultichoiceLists[multichoiceId].count, gMultichoiceLists[multichoiceId].list, ignoreBPress);
return TRUE;
}
}
-void sub_80B53B4(u8 left, u8 top, u8 count, struct MenuAction *list, u8 var4)
+static void sub_80B53B4(u8 left, u8 top, u8 count, const struct MenuAction *list, u8 ignoreBPress)
{
u16 width = GetStringWidthInTilesForScriptMenu(list[0].text);
u16 newWidth;
@@ -722,22 +747,24 @@ void sub_80B53B4(u8 left, u8 top, u8 count, struct MenuAction *list, u8 var4)
PrintMenuItems(left, top, count, list);
InitMenu(0, left, top, count, 0, right - left - 1);
- sub_80B5230(left, top, right, bottom, var4, count);
+ StartScriptMenuTask(left, top, right, bottom, ignoreBPress, count);
}
-bool8 yes_no_box(u8 var1, u8 var2)
+bool8 ScriptMenu_YesNo(u8 left, u8 top)
{
u8 taskId;
- if (FuncIsActiveTask(task_yes_no_maybe) == 1)
+ if (FuncIsActiveTask(Task_HandleYesNoInput) == TRUE)
+ {
return FALSE;
+ }
else
{
gScriptResult = 0xFF;
- DisplayYesNoMenu(var1, var2, 1);
- taskId = CreateTask(task_yes_no_maybe, 0x50);
- gTasks[taskId].data[0] = var1;
- gTasks[taskId].data[1] = var2;
+ DisplayYesNoMenu(left, top, 1);
+ taskId = CreateTask(Task_HandleYesNoInput, 0x50);
+ gTasks[taskId].tLeft = left;
+ gTasks[taskId].tTop = top;
return TRUE;
}
}
@@ -751,13 +778,13 @@ bool8 IsScriptActive(void)
return TRUE;
}
-void task_yes_no_maybe(u8 taskId)
+static void Task_HandleYesNoInput(u8 taskId)
{
u8 left, top;
- if (gTasks[taskId].data[2] < 5)
+ if (gTasks[taskId].tRight < 5)
{
- gTasks[taskId].data[2]++;
+ gTasks[taskId].tRight++;
return;
}
@@ -767,7 +794,7 @@ void task_yes_no_maybe(u8 taskId)
return;
case -1:
case 1:
- PlaySE(5);
+ PlaySE(SE_SELECT);
gScriptResult = 0;
break;
case 0:
@@ -775,19 +802,19 @@ void task_yes_no_maybe(u8 taskId)
break;
}
- left = gTasks[taskId].data[0];
- top = gTasks[taskId].data[1];
+ left = gTasks[taskId].tLeft;
+ top = gTasks[taskId].tTop;
MenuZeroFillWindowRect(left, top, left + 6, top + 5);
DestroyTask(taskId);
EnableBothScriptContexts();
}
-bool8 sub_80B5578(u8 left, u8 top, u8 multichoiceId, u8 a4, u8 columnCount)
+bool8 ScriptMenu_MultichoiceGrid(u8 left, u8 top, u8 multichoiceId, u8 ignoreBPress, u8 columnCount)
{
u8 bottom = 0;
- if (FuncIsActiveTask(sub_80B5684) == TRUE)
+ if (FuncIsActiveTask(Task_HandleMultichoiceGridInput) == TRUE)
{
return FALSE;
}
@@ -800,7 +827,7 @@ bool8 sub_80B5578(u8 left, u8 top, u8 multichoiceId, u8 a4, u8 columnCount)
sub_807274C(left, top, gMultichoiceLists[multichoiceId].count, 0, gMultichoiceLists[multichoiceId].list, columnCount, 0);
- taskId = CreateTask(sub_80B5684, 80);
+ taskId = CreateTask(Task_HandleMultichoiceGridInput, 80);
if (!((gMultichoiceLists[multichoiceId].count >> 1) < columnCount || (gMultichoiceLists[multichoiceId].count & 1))
|| columnCount == 1 || gMultichoiceLists[multichoiceId].count == columnCount)
@@ -813,58 +840,62 @@ bool8 sub_80B5578(u8 left, u8 top, u8 multichoiceId, u8 a4, u8 columnCount)
}
width = sub_807288C(columnCount);
- gTasks[taskId].data[0] = left;
- gTasks[taskId].data[1] = top;
- gTasks[taskId].data[2] = width + left + 2;
- gTasks[taskId].data[3] = bottom;
- gTasks[taskId].data[4] = a4;
+ gTasks[taskId].tLeft = left;
+ gTasks[taskId].tTop = top;
+ gTasks[taskId].tRight = width + left + 2;
+ gTasks[taskId].tBottom = bottom;
+ gTasks[taskId].tIgnoreBPress = ignoreBPress;
return TRUE;
}
}
-void sub_80B5684(u8 taskId)
+static void Task_HandleMultichoiceGridInput(u8 taskId)
{
- s8 var = sub_80727CC();
+ s8 selection = sub_80727CC();
- if (var != -2)
+ if (selection != -2)
{
- if (var == -1)
+ if (selection == -1)
{
- if (!gTasks[taskId].data[4])
- {
- PlaySE(5);
- gScriptResult = 127;
- }
- else
- {
+ if (gTasks[taskId].tIgnoreBPress)
return;
- }
+ PlaySE(SE_SELECT);
+ gScriptResult = 127;
}
else
{
- gScriptResult = var;
+ gScriptResult = selection;
}
HandleDestroyMenuCursors();
- MenuZeroFillWindowRect(gTasks[taskId].data[0], gTasks[taskId].data[1], gTasks[taskId].data[2], gTasks[taskId].data[3]);
+ MenuZeroFillWindowRect(gTasks[taskId].tLeft, gTasks[taskId].tTop, gTasks[taskId].tRight, gTasks[taskId].tBottom);
DestroyTask(taskId);
EnableBothScriptContexts();
}
}
-bool8 TryCreatePCMenu(void)
+#undef tLeft
+#undef tTop
+#undef tRight
+#undef tBottom
+#undef tIgnoreBPress
+#undef tDoWrap
+
+bool8 ScrSpecial_CreatePCMenu(void)
{
- if (FuncIsActiveTask(sub_80B52B4) == 1)
+ if (FuncIsActiveTask(Task_HandleMultichoiceInput) == TRUE)
+ {
return FALSE;
+ }
else
{
gScriptResult = 0xFF;
- CreatePCMenu();
+ ScriptMenu_CreatePCMenu();
return TRUE;
}
}
#if ENGLISH
-void CreatePCMenu(void)
+void ScriptMenu_CreatePCMenu(void)
{
u16 playersPCWidth = GetStringWidthInTilesForScriptMenu(gPCText_PlayersPC);
u8 width;
@@ -896,239 +927,252 @@ void CreatePCMenu(void)
MenuPrint(gPCText_PlayersPC, 1, 3);
InitMenu(0, 1, 1, numChoices, 0, width + 1);
- sub_80B5230(0, 0, width + 2, 2 * numChoices + 1, 0, numChoices);
+ StartScriptMenuTask(0, 0, width + 2, 2 * numChoices + 1, 0, numChoices);
}
#elif GERMAN
__attribute__((naked))
-void CreatePCMenu(void) {
- asm(".syntax unified\n\
- push {r4-r7,lr}\n\
- sub sp, 0x18\n\
- ldr r0, _080B5748 @ =0x0000084b\n\
- bl FlagGet\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- beq _080B5750\n\
- ldr r0, _080B574C @ =gPCText_LanettesPC\n\
- b _080B5752\n\
- .align 2, 0\n\
+void ScriptMenu_CreatePCMenu(void) {
+ asm(".syntax unified\n\
+ push {r4-r7,lr}\n\
+ sub sp, 0x18\n\
+ ldr r0, _080B5748 @ =0x0000084b\n\
+ bl FlagGet\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ beq _080B5750\n\
+ ldr r0, _080B574C @ =gPCText_LanettesPC\n\
+ b _080B5752\n\
+ .align 2, 0\n\
_080B5748: .4byte 0x0000084b\n\
_080B574C: .4byte gPCText_LanettesPC\n\
_080B5750:\n\
- ldr r0, _080B57E8 @ =gPCText_SomeonesPC\n\
+ ldr r0, _080B57E8 @ =gPCText_SomeonesPC\n\
_080B5752:\n\
- bl GetStringWidthInTilesForScriptMenu\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- str r0, [sp, 0x8]\n\
- movs r4, 0x1\n\
- ldr r0, _080B57EC @ =gPCText_PlayersPC\n\
- bl GetStringWidthInTilesForScriptMenu\n\
- lsls r1, r4, 2\n\
- add r1, sp\n\
- adds r1, 0x8\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- str r0, [r1]\n\
- ldr r0, _080B57F0 @ =gPCText_LogOff\n\
- bl GetStringWidthInTilesForScriptMenu\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- str r0, [sp, 0x10]\n\
- movs r4, 0x3\n\
- ldr r0, _080B57F4 @ =0x00000804\n\
- bl FlagGet\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- beq _080B5798\n\
- ldr r0, _080B57F8 @ =gPCText_HallOfFame\n\
- bl GetStringWidthInTilesForScriptMenu\n\
- lsls r0, 16\n\
- lsrs r0, 16\n\
- str r0, [sp, 0x14]\n\
- movs r4, 0x4\n\
+ bl GetStringWidthInTilesForScriptMenu\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ str r0, [sp, 0x8]\n\
+ movs r4, 0x1\n\
+ ldr r0, _080B57EC @ =gPCText_PlayersPC\n\
+ bl GetStringWidthInTilesForScriptMenu\n\
+ lsls r1, r4, 2\n\
+ add r1, sp\n\
+ adds r1, 0x8\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ str r0, [r1]\n\
+ ldr r0, _080B57F0 @ =gPCText_LogOff\n\
+ bl GetStringWidthInTilesForScriptMenu\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ str r0, [sp, 0x10]\n\
+ movs r4, 0x3\n\
+ ldr r0, _080B57F4 @ =0x00000804\n\
+ bl FlagGet\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ beq _080B5798\n\
+ ldr r0, _080B57F8 @ =gPCText_HallOfFame\n\
+ bl GetStringWidthInTilesForScriptMenu\n\
+ lsls r0, 16\n\
+ lsrs r0, 16\n\
+ str r0, [sp, 0x14]\n\
+ movs r4, 0x4\n\
_080B5798:\n\
- movs r5, 0\n\
- cmp r5, r4\n\
- bge _080B57B4\n\
- add r2, sp, 0x8\n\
- adds r1, r4, 0\n\
+ movs r5, 0\n\
+ cmp r5, r4\n\
+ bge _080B57B4\n\
+ add r2, sp, 0x8\n\
+ adds r1, r4, 0\n\
_080B57A2:\n\
- ldr r0, [r2]\n\
- cmp r5, r0\n\
- bge _080B57AC\n\
- lsls r0, 24\n\
- lsrs r5, r0, 24\n\
+ ldr r0, [r2]\n\
+ cmp r5, r0\n\
+ bge _080B57AC\n\
+ lsls r0, 24\n\
+ lsrs r5, r0, 24\n\
_080B57AC:\n\
- adds r2, 0x4\n\
- subs r1, 0x1\n\
- cmp r1, 0\n\
- bne _080B57A2\n\
+ adds r2, 0x4\n\
+ subs r1, 0x1\n\
+ cmp r1, 0\n\
+ bne _080B57A2\n\
_080B57B4:\n\
- ldr r0, _080B57F4 @ =0x00000804\n\
- bl FlagGet\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- beq _080B57FC\n\
- movs r7, 0x4\n\
- adds r4, r5, 0x2\n\
- lsls r2, r4, 24\n\
- lsrs r2, 24\n\
- movs r0, 0\n\
- movs r1, 0\n\
- movs r3, 0x9\n\
- bl MenuDrawTextWindow\n\
- ldr r0, _080B57F8 @ =gPCText_HallOfFame\n\
- movs r1, 0x1\n\
- movs r2, 0x5\n\
- bl MenuPrint\n\
- ldr r0, _080B57F0 @ =gPCText_LogOff\n\
- movs r1, 0x1\n\
- movs r2, 0x7\n\
- bl MenuPrint\n\
- b _080B5818\n\
- .align 2, 0\n\
+ ldr r0, _080B57F4 @ =0x00000804\n\
+ bl FlagGet\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ beq _080B57FC\n\
+ movs r7, 0x4\n\
+ adds r4, r5, 0x2\n\
+ lsls r2, r4, 24\n\
+ lsrs r2, 24\n\
+ movs r0, 0\n\
+ movs r1, 0\n\
+ movs r3, 0x9\n\
+ bl MenuDrawTextWindow\n\
+ ldr r0, _080B57F8 @ =gPCText_HallOfFame\n\
+ movs r1, 0x1\n\
+ movs r2, 0x5\n\
+ bl MenuPrint\n\
+ ldr r0, _080B57F0 @ =gPCText_LogOff\n\
+ movs r1, 0x1\n\
+ movs r2, 0x7\n\
+ bl MenuPrint\n\
+ b _080B5818\n\
+ .align 2, 0\n\
_080B57E8: .4byte gPCText_SomeonesPC\n\
_080B57EC: .4byte gPCText_PlayersPC\n\
_080B57F0: .4byte gPCText_LogOff\n\
_080B57F4: .4byte 0x00000804\n\
_080B57F8: .4byte gPCText_HallOfFame\n\
_080B57FC:\n\
- movs r7, 0x3\n\
- adds r4, r5, 0x2\n\
- lsls r2, r4, 24\n\
- lsrs r2, 24\n\
- movs r0, 0\n\
- movs r1, 0\n\
- movs r3, 0x7\n\
- bl MenuDrawTextWindow\n\
- ldr r0, _080B5834 @ =gPCText_LogOff\n\
- movs r1, 0x1\n\
- movs r2, 0x5\n\
- bl MenuPrint\n\
+ movs r7, 0x3\n\
+ adds r4, r5, 0x2\n\
+ lsls r2, r4, 24\n\
+ lsrs r2, 24\n\
+ movs r0, 0\n\
+ movs r1, 0\n\
+ movs r3, 0x7\n\
+ bl MenuDrawTextWindow\n\
+ ldr r0, _080B5834 @ =gPCText_LogOff\n\
+ movs r1, 0x1\n\
+ movs r2, 0x5\n\
+ bl MenuPrint\n\
_080B5818:\n\
- adds r6, r4, 0\n\
- ldr r0, _080B5838 @ =0x0000084b\n\
- bl FlagGet\n\
- lsls r0, 24\n\
- cmp r0, 0\n\
- beq _080B5840\n\
- ldr r0, _080B583C @ =gPCText_LanettesPC\n\
- movs r1, 0x1\n\
- movs r2, 0x1\n\
- bl MenuPrint\n\
- b _080B584A\n\
- .align 2, 0\n\
+ adds r6, r4, 0\n\
+ ldr r0, _080B5838 @ =0x0000084b\n\
+ bl FlagGet\n\
+ lsls r0, 24\n\
+ cmp r0, 0\n\
+ beq _080B5840\n\
+ ldr r0, _080B583C @ =gPCText_LanettesPC\n\
+ movs r1, 0x1\n\
+ movs r2, 0x1\n\
+ bl MenuPrint\n\
+ b _080B584A\n\
+ .align 2, 0\n\
_080B5834: .4byte gPCText_LogOff\n\
_080B5838: .4byte 0x0000084b\n\
_080B583C: .4byte gPCText_LanettesPC\n\
_080B5840:\n\
- ldr r0, _080B5888 @ =gPCText_SomeonesPC\n\
- movs r1, 0x1\n\
- movs r2, 0x1\n\
- bl MenuPrint\n\
+ ldr r0, _080B5888 @ =gPCText_SomeonesPC\n\
+ movs r1, 0x1\n\
+ movs r2, 0x1\n\
+ bl MenuPrint\n\
_080B584A:\n\
- ldr r0, _080B588C @ =gPCText_PlayersPC\n\
- movs r1, 0x1\n\
- movs r2, 0x3\n\
- bl MenuPrint\n\
- movs r4, 0\n\
- str r4, [sp]\n\
- adds r0, r5, 0x1\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- str r0, [sp, 0x4]\n\
- movs r0, 0\n\
- movs r1, 0x1\n\
- movs r2, 0x1\n\
- adds r3, r7, 0\n\
- bl InitMenu\n\
- lsls r2, r6, 24\n\
- lsrs r2, 24\n\
- lsls r3, r7, 1\n\
- adds r3, 0x1\n\
- str r4, [sp]\n\
- str r7, [sp, 0x4]\n\
- movs r0, 0\n\
- movs r1, 0\n\
- bl sub_80B5230\n\
- add sp, 0x18\n\
- pop {r4-r7}\n\
- pop {r0}\n\
- bx r0\n\
- .align 2, 0\n\
+ ldr r0, _080B588C @ =gPCText_PlayersPC\n\
+ movs r1, 0x1\n\
+ movs r2, 0x3\n\
+ bl MenuPrint\n\
+ movs r4, 0\n\
+ str r4, [sp]\n\
+ adds r0, r5, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ str r0, [sp, 0x4]\n\
+ movs r0, 0\n\
+ movs r1, 0x1\n\
+ movs r2, 0x1\n\
+ adds r3, r7, 0\n\
+ bl InitMenu\n\
+ lsls r2, r6, 24\n\
+ lsrs r2, 24\n\
+ lsls r3, r7, 1\n\
+ adds r3, 0x1\n\
+ str r4, [sp]\n\
+ str r7, [sp, 0x4]\n\
+ movs r0, 0\n\
+ movs r1, 0\n\
+ bl StartScriptMenuTask\n\
+ add sp, 0x18\n\
+ pop {r4-r7}\n\
+ pop {r0}\n\
+ bx r0\n\
+ .align 2, 0\n\
_080B5888: .4byte gPCText_SomeonesPC\n\
_080B588C: .4byte gPCText_PlayersPC\n\
.syntax divided\n");
}
#endif
-void sub_80B5838(void)
+void ScriptMenu_DisplayPCStartupPrompt(void)
{
MenuDisplayMessageBox();
MenuPrint(gPCText_WhichPCShouldBeAccessed, 2, 15);
}
-void task_picbox(u8 taskId)
+#define tState data[0]
+#define tMonSpecies data[1]
+#define tMonSpriteId data[2]
+#define tWindowX data[3]
+#define tWindowY data[4]
+
+static void Task_PokemonPicWindow(u8 taskId)
{
struct Task *task = &gTasks[taskId];
- switch (task->data[0])
+ switch (task->tState)
{
case 0:
- task->data[0]++;
+ task->tState++;
break;
case 1:
break;
case 2:
- FreeResourcesAndDestroySprite(&gSprites[task->data[2]]);
- task->data[0]++;
+ FreeResourcesAndDestroySprite(&gSprites[task->tMonSpriteId]);
+ task->tState++;
break;
case 3:
- MenuZeroFillWindowRect(task->data[3], task->data[4], task->data[3] + 9, task->data[4] + 10);
+ MenuZeroFillWindowRect(task->tWindowX, task->tWindowY, task->tWindowX + 9, task->tWindowY + 10);
DestroyTask(taskId);
break;
}
}
-bool8 sub_80B58C4(u16 var1, u8 var2, u8 var3)
+bool8 ScriptMenu_ShowPokemonPic(u16 species, u8 x, u8 y)
{
u8 taskId;
- u8 var;
+ u8 spriteId;
- if (FindTaskIdByFunc(task_picbox) != 0xFF)
+ if (FindTaskIdByFunc(Task_PokemonPicWindow) != 0xFF)
+ {
return FALSE;
+ }
else
{
- MenuDrawTextWindow(var2, var3, var2 + 9, var3 + 10);
- taskId = CreateTask(task_picbox, 0x50);
- gTasks[taskId].data[0] = 0;
- gTasks[taskId].data[1] = var1;
- var = CreateMonSprite_PicBox(var1, var2 * 8 + 40, var3 * 8 + 40, 0);
- gTasks[taskId].data[2] = var;
- gTasks[taskId].data[3] = var2;
- gTasks[taskId].data[4] = var3;
- gSprites[var].callback = SpriteCallbackDummy;
- gSprites[var].oam.priority = 0;
+ MenuDrawTextWindow(x, y, x + 9, y + 10);
+ taskId = CreateTask(Task_PokemonPicWindow, 0x50);
+ gTasks[taskId].tState = 0;
+ gTasks[taskId].tMonSpecies = species;
+ spriteId = CreateMonSprite_PicBox(species, x * 8 + 40, y * 8 + 40, 0);
+ gTasks[taskId].tMonSpriteId = spriteId;
+ gTasks[taskId].tWindowX = x;
+ gTasks[taskId].tWindowY = y;
+ gSprites[spriteId].callback = SpriteCallbackDummy;
+ gSprites[spriteId].oam.priority = 0;
return TRUE;
}
-}
+}
-void *picbox_close(void)
+bool8 (*ScriptMenu_GetPicboxWaitFunc(void))(void)
{
- u8 taskId = FindTaskIdByFunc(task_picbox);
+ u8 taskId = FindTaskIdByFunc(Task_PokemonPicWindow);
if (taskId == 0xFF)
return NULL;
-
- gTasks[taskId].data[0]++;
- return (void *)sub_80B59AC;
+ gTasks[taskId].tState++;
+ return IsPicboxClosed;
}
-bool8 sub_80B59AC(void)
+static bool8 IsPicboxClosed(void)
{
- if (FindTaskIdByFunc(task_picbox) == 0xFF)
+ if (FindTaskIdByFunc(Task_PokemonPicWindow) == 0xFF)
return TRUE;
else
return FALSE;
}
+
+#undef tState
+#undef tMonSpecies
+#undef tMonSpriteId
+#undef tWindowX
+#undef tWindowY
diff --git a/src/script_movement.c b/src/script_movement.c
index e25b60a3c..30e10b451 100644
--- a/src/script_movement.c
+++ b/src/script_movement.c
@@ -13,33 +13,33 @@ static bool8 sub_80A21F4(u8, u8, u8 *);
static u8 sub_80A2260(u8, u8);
static bool8 sub_80A2370(u8, u8);
static void sub_80A23C8(u8, u8, u8, u8 *);
-static void sub_80A2408(u8);
+static void UnfreezeObjects(u8);
static void Task_80A244C(u8);
static void sub_80A2490(u8, u8, u8, u8 *);
-bool8 exec_movement(u8 a, u8 b, u8 c, u8 *d)
+bool8 ScriptMovement_StartObjectMovementScript(u8 localId, u8 mapNum, u8 mapGroup, u8 *movementScript)
{
u8 mapObjId;
- if (TryGetFieldObjectIdByLocalIdAndMap(a, b, c, &mapObjId))
+ if (TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapGroup, &mapObjId))
return TRUE;
if (!FuncIsActiveTask(Task_80A244C))
sub_80A2198(50);
- return sub_80A21F4(sub_80A21E0(), mapObjId, d);
+ return sub_80A21F4(sub_80A21E0(), mapObjId, movementScript);
}
-bool8 sub_80A212C(u8 a, u8 b, u8 c)
+bool8 ScriptMovement_IsObjectMovementFinished(u8 localId, u8 mapNum, u8 mapBank)
{
u8 mapObjId;
u8 r4;
u8 r1;
- if (TryGetFieldObjectIdByLocalIdAndMap(a, b, c, &mapObjId))
- return 1;
+ if (TryGetFieldObjectIdByLocalIdAndMap(localId, mapNum, mapBank, &mapObjId))
+ return TRUE;
r4 = sub_80A21E0();
r1 = sub_80A2260(r4, mapObjId);
if (r1 == 16)
- return 1;
+ return TRUE;
return sub_80A2370(r4, r1);
}
@@ -50,7 +50,7 @@ void sub_80A2178(void)
taskId = sub_80A21E0();
if (taskId != 0xFF)
{
- sub_80A2408(taskId);
+ UnfreezeObjects(taskId);
DestroyTask(taskId);
}
}
@@ -70,27 +70,31 @@ static u8 sub_80A21E0(void)
return FindTaskIdByFunc(Task_80A244C);
}
-static bool8 sub_80A21F4(u8 taskId, u8 b, u8 *c)
+static bool8 sub_80A21F4(u8 taskId, u8 mapObjId, u8 *movementScript)
{
u8 r4;
- r4 = sub_80A2260(taskId, b);
+ r4 = sub_80A2260(taskId, mapObjId);
if (r4 != 16)
{
if (sub_80A2370(taskId, r4) == 0)
+ {
return TRUE;
+ }
else
{
- sub_80A23C8(taskId, r4, b, c);
+ sub_80A23C8(taskId, r4, mapObjId, movementScript);
return FALSE;
}
}
r4 = sub_80A2260(taskId, 0xFF);
if (r4 == 16)
+ {
return TRUE;
+ }
else
{
- sub_80A23C8(taskId, r4, b, c);
+ sub_80A23C8(taskId, r4, mapObjId, movementScript);
return FALSE;
}
}
@@ -156,9 +160,9 @@ static bool8 sub_80A2370(u8 taskId, u8 b)
return FALSE;
}
-static void npc_obj_offscreen_culling_and_flag_update(u8 a, u8 *b)
+static void npc_obj_offscreen_culling_and_flag_update(u8 a, u8 *movementScript)
{
- gUnknown_020384F8[a] = b;
+ gUnknown_020384F8[a] = movementScript;
}
static u8 *sub_80A23B8(u8 a)
@@ -166,23 +170,23 @@ static u8 *sub_80A23B8(u8 a)
return gUnknown_020384F8[a];
}
-static void sub_80A23C8(u8 taskId, u8 b, u8 c, u8 *d)
+static void sub_80A23C8(u8 taskId, u8 b, u8 mapObjId, u8 *movementScript)
{
sub_80A2318(taskId, b);
- npc_obj_offscreen_culling_and_flag_update(b, d);
- sub_80A22D0(taskId, b, c);
+ npc_obj_offscreen_culling_and_flag_update(b, movementScript);
+ sub_80A22D0(taskId, b, mapObjId);
}
-static void sub_80A2408(u8 a)
+static void UnfreezeObjects(u8 taskId)
{
- u8 *ptr;
+ u8 *pMapObjId;
u8 i;
- ptr = (u8 *)&gTasks[a].data[1];
- for (i = 0; i < 16; i++, ptr++)
+ pMapObjId = (u8 *)&gTasks[taskId].data[1];
+ for (i = 0; i < 16; i++, pMapObjId++)
{
- if (*ptr != 0xFF)
- UnfreezeMapObject(&gMapObjects[*ptr]);
+ if (*pMapObjId != 0xFF)
+ UnfreezeMapObject(&gMapObjects[*pMapObjId]);
}
}
@@ -199,23 +203,23 @@ static void Task_80A244C(u8 taskId)
}
}
-static void sub_80A2490(u8 taskId, u8 b, u8 c, u8 *d)
+static void sub_80A2490(u8 taskId, u8 b, u8 mapObjId, u8 *d)
{
u8 var;
- if (FieldObjectIsSpecialAnimActive(&gMapObjects[c])
- && !FieldObjectClearAnimIfSpecialAnimFinished(&gMapObjects[c]))
+ if (FieldObjectIsSpecialAnimActive(&gMapObjects[mapObjId])
+ && !FieldObjectClearAnimIfSpecialAnimFinished(&gMapObjects[mapObjId]))
return;
var = *d;
if (var == 0xFE)
{
sub_80A2348(taskId, b);
- FreezeMapObject(&gMapObjects[c]);
+ FreezeMapObject(&gMapObjects[mapObjId]);
}
else
{
- if (!FieldObjectSetSpecialAnim(&gMapObjects[c], var))
+ if (!FieldObjectSetSpecialAnim(&gMapObjects[mapObjId], var))
{
d++;
npc_obj_offscreen_culling_and_flag_update(b, d);
diff --git a/src/script_pokemon_util_80C4BF0.c b/src/script_pokemon_util_80C4BF0.c
index 943569d4f..f98293a90 100644
--- a/src/script_pokemon_util_80C4BF0.c
+++ b/src/script_pokemon_util_80C4BF0.c
@@ -18,7 +18,7 @@
#include "pokedex.h"
#include "pokemon.h"
#include "rng.h"
-#include "rom4.h"
+#include "overworld.h"
#include "script_pokemon_80C4.h"
#include "species.h"
#include "task.h"
@@ -511,7 +511,7 @@ void ScriptRandom(void)
*scriptPtr = random % *scriptPtr;
}
-void HealPlayerParty(void)
+void ScrSpecial_HealPlayerParty(void)
{
u8 i, j;
u8 ppBonuses;
@@ -542,41 +542,39 @@ void HealPlayerParty(void)
}
}
-u8 ScriptGiveMon(u16 species, u8 var, u16 item, u32 var3, u32 var4, u8 var5)
+u8 ScriptGiveMon(u16 species, u8 level, u16 item, u32 unused1, u32 unused2, u8 unused3)
{
- u16 nationalSpecies;
+ u16 nationalDexNum;
int sentToPc;
- u8 array[2];
+ u8 heldItem[2];
struct Pokemon mon;
- CreateMon(&mon, species, var, 32, 0, 0, 0, 0);
- array[0] = item;
- array[1] = item >> 8;
- SetMonData(&mon, MON_DATA_HELD_ITEM, array);
+ CreateMon(&mon, species, level, 32, 0, 0, 0, 0);
+ heldItem[0] = item;
+ heldItem[1] = item >> 8;
+ SetMonData(&mon, MON_DATA_HELD_ITEM, heldItem);
sentToPc = GiveMonToPlayer(&mon);
- nationalSpecies = SpeciesToNationalPokedexNum(species);
+ nationalDexNum = SpeciesToNationalPokedexNum(species);
- // nested if check to fool compiler
switch(sentToPc)
{
- case 0:
- case 1:
- GetSetPokedexFlag(nationalSpecies, 2);
- GetSetPokedexFlag(nationalSpecies, 3);
- return sentToPc;
- default:
- return sentToPc;
+ case 0:
+ case 1:
+ GetSetPokedexFlag(nationalDexNum, 2);
+ GetSetPokedexFlag(nationalDexNum, 3);
+ break;
}
+ return sentToPc;
}
-u8 ScriptGiveEgg(u16 value)
+u8 ScriptGiveEgg(u16 species)
{
struct Pokemon mon;
- u8 data;
+ u8 isEgg;
- sub_8042044(&mon, value, 1);
- data = 1;
- SetMonData(&mon, MON_DATA_IS_EGG, &data);
+ sub_8042044(&mon, species, 1);
+ isEgg = TRUE;
+ SetMonData(&mon, MON_DATA_IS_EGG, &isEgg);
return GiveMonToPlayer(&mon);
}
@@ -622,18 +620,18 @@ bool8 GetNameOfEnigmaBerryInPlayerParty(void)
return hasItem;
}
-void ScriptWildBattle(u16 species, u8 level, u16 item)
+void CreateScriptedWildMon(u16 species, u8 level, u16 item)
{
- u8 data[2];
+ u8 heldItem[2];
ZeroEnemyPartyMons();
CreateMon(&gEnemyParty[0], species, level, 0x20, 0, 0, 0, 0);
if(item)
{
- data[0] = item;
- data[1] = item >> 8;
- SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, data);
+ heldItem[0] = item;
+ heldItem[1] = item >> 8;
+ SetMonData(&gEnemyParty[0], MON_DATA_HELD_ITEM, heldItem);
}
}
diff --git a/src/script_pokemon_util_80F99CC.c b/src/script_pokemon_util_80F99CC.c
index 2b48cc0d8..f930df8e2 100644
--- a/src/script_pokemon_util_80F99CC.c
+++ b/src/script_pokemon_util_80F99CC.c
@@ -9,16 +9,15 @@
#include "party_menu.h"
#include "pokemon.h"
#include "pokemon_summary_screen.h"
-#include "rom4.h"
+#include "overworld.h"
#include "script.h"
#include "script_pokemon_80F9.h"
+#include "songs.h"
#include "sound.h"
#include "string_util.h"
#include "task.h"
#include "text.h"
-
-
extern u8 gPlayerPartyCount;
extern u16 gSpecialVar_0x8004;
extern u16 gSpecialVar_0x8005;
@@ -59,7 +58,7 @@ void sub_80F9A4C(void)
void sub_80F9A8C(u8 taskId)
{
- if(!gPaletteFade.active)
+ if (!gPaletteFade.active)
{
gPaletteFade.bufferTransferDisabled = 1;
OpenPartyMenu((u8) gTasks[taskId].data[0], 0);
@@ -69,10 +68,10 @@ void sub_80F9A8C(u8 taskId)
bool8 sub_80F9ACC(void)
{
- switch(EWRAM_1B000.unk264)
+ switch (EWRAM_1B000.unk264)
{
case 0:
- if(EWRAM_1B000.unk266 < gPlayerPartyCount)
+ if (EWRAM_1B000.unk266 < gPlayerPartyCount)
{
TryCreatePartyMenuMonIcon(EWRAM_1B000.unk260, EWRAM_1B000.unk266, &gPlayerParty[EWRAM_1B000.unk266]);
EWRAM_1B000.unk266++;
@@ -92,7 +91,7 @@ bool8 sub_80F9ACC(void)
EWRAM_1B000.unk264++;
break;
case 3:
- if(sub_806BD58(EWRAM_1B000.unk260, EWRAM_1B000.unk266) != 1)
+ if (sub_806BD58(EWRAM_1B000.unk260, EWRAM_1B000.unk266) != 1)
{
EWRAM_1B000.unk266++;
break;
@@ -116,7 +115,7 @@ bool8 sub_80F9ACC(void)
EWRAM_1B000.unk264++;
break;
case 7: // the only case that can return true.
- if(sub_806B58C(EWRAM_1B000.unk266) != 1)
+ if (sub_806B58C(EWRAM_1B000.unk266) != 1)
{
EWRAM_1B000.unk266++;
break;
@@ -135,9 +134,9 @@ void sub_80F9C00(void)
{
u8 i;
- for(i = 0; i < gPlayerPartyCount; i++)
+ for (i = 0; i < gPlayerPartyCount; i++)
{
- switch(sub_80AE47C(&gPlayerParty[i]))
+ switch (sub_80AE47C(&gPlayerParty[i]))
{
case 0:
case 3:
@@ -154,18 +153,18 @@ void sub_80F9C00(void)
void sub_80F9C6C(u8 var)
{
- if(!gPaletteFade.active)
+ if (!gPaletteFade.active)
{
- switch(sub_806BD80(var))
+ switch (sub_806BD80(var))
{
case 1:
- PlaySE(5);
+ PlaySE(SE_SELECT);
gUnknown_02038694 = sub_806CA38(var);
gSpecialVar_0x8004 = gUnknown_02038694;
sub_8123138(var);
break;
case 2:
- PlaySE(5);
+ PlaySE(SE_SELECT);
gUnknown_02038694 = 0xFF;
gSpecialVar_0x8004 = 0xFF;
sub_8123138(var);
@@ -176,10 +175,10 @@ void sub_80F9C6C(u8 var)
bool8 sub_80F9CE8(void) // this is the same function as sub_80F9ACC except case 6 calls a different function. why
{
- switch(EWRAM_1B000.unk264)
+ switch (EWRAM_1B000.unk264)
{
case 0:
- if(EWRAM_1B000.unk266 < gPlayerPartyCount)
+ if (EWRAM_1B000.unk266 < gPlayerPartyCount)
{
TryCreatePartyMenuMonIcon(EWRAM_1B000.unk260, EWRAM_1B000.unk266, &gPlayerParty[EWRAM_1B000.unk266]);
EWRAM_1B000.unk266++;
@@ -199,7 +198,7 @@ bool8 sub_80F9CE8(void) // this is the same function as sub_80F9ACC except case
EWRAM_1B000.unk264++;
break;
case 3:
- if(sub_806BD58(EWRAM_1B000.unk260, EWRAM_1B000.unk266) != 1)
+ if (sub_806BD58(EWRAM_1B000.unk260, EWRAM_1B000.unk266) != 1)
{
EWRAM_1B000.unk266++;
break;
@@ -223,7 +222,7 @@ bool8 sub_80F9CE8(void) // this is the same function as sub_80F9ACC except case
EWRAM_1B000.unk264++;
break;
case 7: // the only case that can return true.
- if(sub_806B58C(EWRAM_1B000.unk266) != 1)
+ if (sub_806B58C(EWRAM_1B000.unk266) != 1)
{
EWRAM_1B000.unk266++;
break;
@@ -242,9 +241,9 @@ void sub_80F9E1C(void)
{
u8 i;
- for(i = 0; i < gPlayerPartyCount; i++)
+ for (i = 0; i < gPlayerPartyCount; i++)
{
- if(!sub_8040574(&gPlayerParty[i]))
+ if (!sub_8040574(&gPlayerParty[i]))
sub_806BC3C(i, 0x9A);
else
sub_806BC3C(i, 0x8C);
@@ -253,18 +252,18 @@ void sub_80F9E1C(void)
void sub_80F9E64(u8 var)
{
- if(!gPaletteFade.active)
+ if (!gPaletteFade.active)
{
- switch(sub_806BD80(var))
+ switch (sub_806BD80(var))
{
case 1:
- PlaySE(5);
+ PlaySE(SE_SELECT);
gSpecialVar_0x8004 = sub_806CA38(var);
gSpecialVar_0x8005 = sub_8040574(&gPlayerParty[gSpecialVar_0x8004]);
sub_8123138(var);
break;
case 2:
- PlaySE(5);
+ PlaySE(SE_SELECT);
gSpecialVar_0x8004 = 0xFF;
sub_8123138(var);
}
@@ -278,23 +277,23 @@ void sub_80F9EEC(void)
gFieldCallback = sub_8080990;
}
-void sub_80F9F3C(void) // count pokemon moves
+void ScrSpecial_CountPokemonMoves(void) // count pokemon moves
{
u8 i;
gScriptResult = 0;
- for(i = 0; i < 4; i++) // checks MOVE1-MOVE4
- if(GetMonData(&gPlayerParty[gSpecialVar_0x8004], i + 13))
+ for (i = 0; i < 4; i++) // checks MOVE1-MOVE4
+ if (GetMonData(&gPlayerParty[gSpecialVar_0x8004], MON_DATA_MOVE1 + i))
gScriptResult++;
}
-void sub_80F9F84(void)
+void ScrSpecial_GetPokemonNicknameAndMoveName(void)
{
- struct Pokemon *party = &gPlayerParty[gSpecialVar_0x8004];
- u16 data = GetMonData(party, gSpecialVar_0x8005 + 13);
+ struct Pokemon *pkmn = &gPlayerParty[gSpecialVar_0x8004];
+ u16 data = GetMonData(pkmn, MON_DATA_MOVE1 + gSpecialVar_0x8005);
- GetMonNickname(party, gStringVar1);
+ GetMonNickname(pkmn, gStringVar1);
StringCopy(gStringVar2, gMoveNames[data]);
}
@@ -431,7 +430,7 @@ void sub_80FA0DC(void)
SetMonMoveSlot(&gPlayerParty[gSpecialVar_0x8004], 0, gSpecialVar_0x8005);
RemoveMonPPBonus(&gPlayerParty[gSpecialVar_0x8004], gSpecialVar_0x8005);
- for(i = gSpecialVar_0x8005; i < 3; i++)
+ for (i = gSpecialVar_0x8005; i < 3; i++)
sub_80F9FDC(&gPlayerParty[gSpecialVar_0x8004], i, i + 1);
}
@@ -440,6 +439,6 @@ void sub_80FA148(void)
struct Pokemon *party = &gPlayerParty[gSpecialVar_0x8004];
gScriptResult = 0;
- if(GetMonData(party, MON_DATA_IS_EGG))
+ if (GetMonData(party, MON_DATA_IS_EGG))
gScriptResult = 1;
}
diff --git a/src/secret_base.c b/src/secret_base.c
index 4e8331f5c..b2cd1f094 100644
--- a/src/secret_base.c
+++ b/src/secret_base.c
@@ -14,7 +14,7 @@
#include "metatile_behavior.h"
#include "palette.h"
#include "pokemon.h"
-#include "rom4.h"
+#include "overworld.h"
#include "script.h"
#include "string_util.h"
#include "strings.h"
@@ -270,7 +270,7 @@ void sub_80BBAF0(void)
bool8 sub_80BBB24(void)
{
- if (gMapHeader.mapType == 9 && VarGet(VAR_0x4097) == 0)
+ if (gMapHeader.mapType == MAP_TYPE_SECRET_BASE && VarGet(VAR_0x4097) == 0)
return FALSE;
return TRUE;
}
@@ -380,7 +380,7 @@ void sub_80BBDD0(void)
gScriptResult = gMapHeader.events->mapObjects[objid].graphicsId + 0x3f20;
VarSet(gScriptResult, gDecorations[roomdecor[decidx]].tiles[0]);
gScriptResult = gMapHeader.events->mapObjects[objid].localId;
- FlagReset(gSpecialVar_0x8004 + 0xAE);
+ FlagClear(gSpecialVar_0x8004 + 0xAE);
show_sprite(gScriptResult, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup);
sub_805C0F8(gScriptResult, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup, gSpecialVar_0x8006, gSpecialVar_0x8007);
sub_805C78C(gScriptResult, gSaveBlock1.location.mapNum, gSaveBlock1.location.mapGroup);
@@ -690,7 +690,7 @@ _080BBEDA:\n\
adds r0, 0xAE\n\
lsls r0, 16\n\
lsrs r0, 16\n\
- bl FlagReset\n\
+ bl FlagClear\n\
ldr r3, _080BBF9C @ =gScriptResult\n\
ldrb r0, [r3]\n\
mov r4, r10\n\
diff --git a/src/shop.c b/src/shop.c
index 01d675638..375205935 100644
--- a/src/shop.c
+++ b/src/shop.c
@@ -16,68 +16,106 @@
#include "task.h"
#include "tv.h"
#include "unknown_task.h"
+#include "field_map_obj.h"
+#include "field_player_avatar.h"
+#include "fieldmap.h"
+#include "item.h"
+#include "decoration.h"
+#include "items.h"
+#include "songs.h"
+#include "overworld.h"
+#include "decoration_inventory.h"
+#include "field_camera.h"
-struct UnknownShopStruct
-{
- /* 0x0 */ void (* callback) (void);
- /* 0x4 */ u16 *itemList;
- /* 0x8 */ u8 itemCount;
- /* 0x9 */ u8 unk9;
- /* 0xA */ u8 unkA;
- /* 0xB */ u8 unkB;
- /* 0xC */ bool8 unkC;
- // unknown size
-};
+#define ewram18000 ((u16 *)(ewram + 0x18000))
+#define ewram18300 ((u16 *)(ewram + 0x18300))
-extern struct UnknownShopStruct gUnknown_03000708;
-extern struct MenuAction gUnknown_083CC6D0[];
+extern bool8 sub_80A52C4(u8, u8);
-extern u8 gUnknown_083CC6E8[];
-extern u8 gUnknown_083CC6EB[];
+extern u8 ewram[];
extern u8 gBuyMenuFrame_Gfx[];
-
extern u16 gBuyMenuFrame_Tilemap[];
extern u16 gMenuMoneyPal[16];
-extern u16 gUnknown_083CC710[2];
-u8 CreateShopMenu(bool8 var)
+void sub_80B39D0(int var1, int var2, bool32 hasControlCode);
+void sub_80B3A70(void);
+void sub_80B4378(u8);
+void sub_80B43F0(u8);
+void Task_ExitBuyMenu(u8);
+void sub_80B4470(u8);
+void sub_80B2EFC(u8 taskId);
+void sub_80B2F30(u8 taskId);
+void HandleShopMenuQuit(u8 taskId);
+void sub_80B3BF4(u8 taskId);
+void sub_80B3D7C(u8 taskId);
+
+// iwram
+static struct MartInfo gMartInfo;
+
+// ewram
+EWRAM_DATA u32 gMartTotalCost = 0;
+EWRAM_DATA s16 gUnknown_020386A4[16][4] = {0}; // game freak barely uses 2d arrays wtf?
+EWRAM_DATA struct ItemSlot gUnknown_02038724[3] = {0}; // tv.c uses this, so it cant be static
+EWRAM_DATA u8 gUnknown_02038730 = 0;
+EWRAM_DATA u8 gUnknown_02038731 = 0;
+
+// rodata
+static const struct MenuAction2 sBuySellQuitMenuActions[] =
+{
+ { MartText_Buy, sub_80B2EFC },
+ { MartText_Sell, sub_80B2F30 },
+ { MartText_Quit2, HandleShopMenuQuit },
+};
+
+static const u8 gUnknown_083CC6E8[] = {0, 1, 2}; // BUY SELL EXIT
+static const u8 gUnknown_083CC6EB[] = {0, 2}; // BUY EXIT
+
+static const u16 gUnusedMartArray[] = {0x2, 0x3, 0x4, 0xD, 0x121, 0xE, 0xE, 0xE, 0xE, 0xE, 0xE, 0x0, 0x0};
+
+static const struct YesNoFuncTable gUnknown_083CC708[] =
+{
+ sub_80B3BF4,
+ sub_80B3D7C
+};
+
+u8 CreateShopMenu(u8 martType)
{
ScriptContext2_Enable();
- gUnknown_03000708.unkC = var;
- gUnknown_03000708.unk9 = 0;
+ gMartInfo.martType = martType;
+ gMartInfo.cursor = 0;
- if(var == FALSE)
+ if (martType == MART_TYPE_0)
{
- gUnknown_03000708.unkA = 2;
+ gMartInfo.numChoices = 2;
MenuDrawTextWindow(0, 0, 10, 7);
- PrintMenuItemsReordered(1, 1, 3, gUnknown_083CC6D0, (u8 *)gUnknown_083CC6E8);
+ PrintMenuItemsReordered(1, 1, 3, sBuySellQuitMenuActions, gUnknown_083CC6E8);
}
else
{
- gUnknown_03000708.unkA = 1;
+ gMartInfo.numChoices = 1;
MenuDrawTextWindow(0, 0, 10, 5);
- PrintMenuItemsReordered(1, 1, 2, gUnknown_083CC6D0, (u8 *)gUnknown_083CC6EB);
+ PrintMenuItemsReordered(1, 1, 2, sBuySellQuitMenuActions, gUnknown_083CC6EB);
}
- InitMenu(0, 1, 1, gUnknown_03000708.unkA + 1, 0, 9);
+ InitMenu(0, 1, 1, gMartInfo.numChoices + 1, 0, 9); // add 1 for cancel
return CreateTask(sub_80B2E38, 8);
}
void SetShopMenuCallback(void *callbackPtr)
{
- gUnknown_03000708.callback = callbackPtr;
+ gMartInfo.callback = callbackPtr;
}
void SetShopItemsForSale(u16 *items)
{
u16 i = 0;
- gUnknown_03000708.itemList = items;
- gUnknown_03000708.itemCount = 0;
+ gMartInfo.itemList = items;
+ gMartInfo.itemCount = 0;
- while (gUnknown_03000708.itemList[i])
+ while (gMartInfo.itemList[i])
{
- gUnknown_03000708.itemCount++;
+ gMartInfo.itemCount++;
i++;
}
}
@@ -86,37 +124,37 @@ void sub_80B2E38(u8 var)
{
const u8 local = var;
- if(gMain.newAndRepeatedKeys & 0x40)
+ if (gMain.newAndRepeatedKeys & DPAD_UP)
{
- if(gUnknown_03000708.unk9)
+ if (gMartInfo.cursor) // can move cursor up?
{
- PlaySE(0x5);
- gUnknown_03000708.unk9 = MoveMenuCursor(-1);
+ PlaySE(SE_SELECT);
+ gMartInfo.cursor = MoveMenuCursor(-1);
}
}
- else if(gMain.newAndRepeatedKeys & 0x80)
+ else if (gMain.newAndRepeatedKeys & DPAD_DOWN)
{
- if(gUnknown_03000708.unk9 != gUnknown_03000708.unkA)
+ if (gMartInfo.cursor != gMartInfo.numChoices) // can move cursor down?
{
- PlaySE(0x5);
- gUnknown_03000708.unk9 = MoveMenuCursor(1);
+ PlaySE(SE_SELECT);
+ gMartInfo.cursor = MoveMenuCursor(1);
}
}
- else if (gMain.newKeys & 1)
+ else if (gMain.newKeys & A_BUTTON)
{
- PlaySE(0x5);
- if(!gUnknown_03000708.unkC)
+ PlaySE(SE_SELECT);
+ if (gMartInfo.martType == MART_TYPE_0)
{
- gUnknown_083CC6D0[gUnknown_083CC6E8[gUnknown_03000708.unk9]].func(local);
+ sBuySellQuitMenuActions[gUnknown_083CC6E8[gMartInfo.cursor]].func(local);
}
else
{
- gUnknown_083CC6D0[gUnknown_083CC6EB[gUnknown_03000708.unk9]].func(local);
+ sBuySellQuitMenuActions[gUnknown_083CC6EB[gMartInfo.cursor]].func(local);
}
}
- else if(gMain.newKeys & 2)
+ else if (gMain.newKeys & B_BUTTON)
{
- PlaySE(0x5);
+ PlaySE(SE_SELECT);
HandleShopMenuQuit(local);
}
}
@@ -141,17 +179,17 @@ void HandleShopMenuQuit(u8 taskId)
{
HandleDestroyMenuCursors();
MenuZeroFillWindowRect(0, 0, 11, 8);
- sub_80BE3BC(); // in tv.s?
+ sub_80BE3BC();
ScriptContext2_Disable();
DestroyTask(taskId);
- if(gUnknown_03000708.callback)
- gUnknown_03000708.callback(); // run the callback if it exists.
+ if (gMartInfo.callback)
+ gMartInfo.callback(); // run the callback if it exists.
}
void sub_80B2FA0(u8 taskId)
{
- if(!gPaletteFade.active)
+ if (!gPaletteFade.active)
{
SetMainCallback2((void *)((u16)gTasks[taskId].data[8] << 16 | (u16)gTasks[taskId].data[9]));
DestroyTask(taskId);
@@ -160,15 +198,15 @@ void sub_80B2FA0(u8 taskId)
void ReturnToShopMenuAfterExitingSellMenu(u8 taskId)
{
- CreateShopMenu(gUnknown_03000708.unkC);
+ CreateShopMenu(gMartInfo.martType);
DestroyTask(taskId);
}
void Task_ExitSellMenu(u8 taskId)
{
- if(sub_807D770() == 1)
+ if (sub_807D770() == 1)
{
- if(gUnknown_03000708.unkC == 2)
+ if (gMartInfo.martType == MART_TYPE_2)
DisplayItemMessageOnField(taskId, gOtherText_CanIHelpYou, ReturnToShopMenuAfterExitingSellMenu, 0);
else
DisplayItemMessageOnField(taskId, gOtherText_AnythingElse, ReturnToShopMenuAfterExitingSellMenu, 0);
@@ -253,10 +291,10 @@ void BuyMenuDrawGraphics(void)
SetUpWindowConfig(&gWindowConfig_81E6DFC);
InitMenuWindow(&gWindowConfig_81E6DFC);
BuyMenuDrawMapGraphics();
- gUnknown_03000708.unk9 = zero;
- gUnknown_03000708.unkB = zero2;
+ gMartInfo.cursor = zero;
+ gMartInfo.choicesAbove = zero2;
MenuZeroFillWindowRect(0, 0, 0x20, 0x20);
- sub_80B7C14(gSaveBlock1.money, 0, 0);
+ OpenMoneyWindow(gSaveBlock1.money, 0, 0);
sub_80B3764(0, 7);
sub_80B37EC();
sub_80B3270();
@@ -272,9 +310,8 @@ void BuyMenuDrawGraphics(void)
void sub_80B3240(void)
{
- u16 tempArr[2];
+ u16 tempArr[2] = {0x41EE, 0x7FFF};
- memcpy(tempArr, gUnknown_083CC710, sizeof(tempArr));
LoadPalette(&tempArr[1], 0xD1, 2);
LoadPalette(&tempArr[0], 0xD8, 2);
}
@@ -283,7 +320,7 @@ void sub_80B3270(void)
{
sub_80F944C();
- if(gUnknown_03000708.itemCount > 7)
+ if (gMartInfo.itemCount > 7)
{
CreateVerticalScrollIndicators(0, 172, 12);
CreateVerticalScrollIndicators(1, 172, 148);
@@ -293,12 +330,12 @@ void sub_80B3270(void)
void sub_80B32A4(void)
{
- if(gUnknown_03000708.unkB == 0)
+ if (gMartInfo.choicesAbove == 0)
sub_80F979C(0, 1);
else
sub_80F979C(0, 0);
- if(gUnknown_03000708.unkB + 7 >= gUnknown_03000708.itemCount)
+ if (gMartInfo.choicesAbove + 7 >= gMartInfo.itemCount)
sub_80F979C(1, 1);
else
sub_80F979C(1, 0);
@@ -318,13 +355,13 @@ void BuyMenuDrawMapMetatileLayer(u16 *array, s16 offset1, s16 offset2, u16 *arra
array[offset1 + offset2 + 33] = array2[3];
}
-void BuyMenuDrawMapMetatile(int var1, int var2, u16 *var3, s8 var4)
+void BuyMenuDrawMapMetatile(int var1, int var2, u16 *var3, s32 var4)
{
u8 tempVar4 = var4;
s16 offset1 = var1 * 2;
s16 offset2 = (var2 * 0x40) + 0x40;
- switch(tempVar4)
+ switch (tempVar4)
{
case 0: // _080B335C
BuyMenuDrawMapMetatileLayer(gBGTilemapBuffers[2], offset1, offset2, var3);
@@ -340,3 +377,975 @@ void BuyMenuDrawMapMetatile(int var1, int var2, u16 *var3, s8 var4)
break;
}
}
+
+void sub_80B33D0(s16 var1, int var2, u16 *var3)
+{
+ s16 offset1 = var1 * 2;
+ s16 offset2 = (var2 * 0x40) + 0x40;
+
+ BuyMenuDrawMapMetatileLayer(gBGTilemapBuffers[3], offset1, offset2, var3);
+ BuyMenuDrawMapMetatileLayer(gBGTilemapBuffers[2], offset1, offset2, var3 + 4);
+}
+
+void sub_80B3420(void)
+{
+ s16 facingX;
+ s16 facingY;
+ s16 x;
+ s16 y;
+
+ GetXYCoordsOneStepInFrontOfPlayer(&facingX, &facingY);
+ facingX -= 3;
+ facingY -= 3;
+
+ for (y = 0; y < 6; y++)
+ {
+ for (x = 0; x < 7; x++)
+ {
+ u16 metatileId = MapGridGetMetatileIdAt(facingX + x, facingY + y);
+
+ if (y != 5 && x != 6)
+ {
+ s32 r3 = MapGridGetMetatileLayerTypeAt(facingX + x, facingY + y);
+
+ if (metatileId < 512)
+ BuyMenuDrawMapMetatile(x, y, (u16 *)gMapHeader.mapData->primaryTileset->metatiles + metatileId * 8, r3);
+ else
+ BuyMenuDrawMapMetatile(x, y, (u16 *)gMapHeader.mapData->secondaryTileset->metatiles + (metatileId - 512) * 8, r3);
+ }
+ else
+ {
+ if (metatileId < 512)
+ sub_80B33D0(x, y, (u16 *)gMapHeader.mapData->primaryTileset->metatiles + metatileId * 8);
+ else
+ sub_80B33D0(x, y, (u16 *)gMapHeader.mapData->secondaryTileset->metatiles + (metatileId - 512) * 8);
+ }
+
+ if (y == 0 && x != 0 && x != 6)
+ sub_80B32EC(gBGTilemapBuffers[1], x * 2, 64);
+ }
+ }
+}
+
+void BuyMenuDrawMapGraphics(void)
+{
+ sub_80F9020();
+ sub_80B356C();
+ sub_80B368C();
+ sub_80B3420();
+}
+
+void sub_80B356C(void)
+{
+ s16 facingX;
+ s16 facingY;
+ u8 playerHeight;
+ u8 y;
+ u8 x;
+ u8 r8 = 0;
+
+ GetXYCoordsOneStepInFrontOfPlayer(&facingX, &facingY);
+ playerHeight = PlayerGetZCoord();
+ for (y = 0; y < 16; y++)
+ gUnknown_020386A4[y][MAP_OBJ_ID] = 16;
+ for (y = 0; y < 5; y++)
+ {
+ for (x = 0; x < 7; x++)
+ {
+ u8 mapObjId = GetFieldObjectIdByXYZ(facingX - 3 + x, facingY - 2 + y, playerHeight);
+
+ if (mapObjId != 16)
+ {
+ gUnknown_020386A4[r8][MAP_OBJ_ID] = mapObjId;
+ gUnknown_020386A4[r8][X_COORD] = x;
+ gUnknown_020386A4[r8][Y_COORD] = y;
+ if (gMapObjects[mapObjId].mapobj_unk_18 == 1)
+ gUnknown_020386A4[r8][ANIM_NUM] = 0;
+ if (gMapObjects[mapObjId].mapobj_unk_18 == 2)
+ gUnknown_020386A4[r8][ANIM_NUM] = 1;
+ if (gMapObjects[mapObjId].mapobj_unk_18 == 3)
+ gUnknown_020386A4[r8][ANIM_NUM] = 2;
+ if (gMapObjects[mapObjId].mapobj_unk_18 == 4)
+ gUnknown_020386A4[r8][ANIM_NUM] = 3;
+ r8++;
+ }
+ }
+ }
+}
+
+void sub_80B368C(void)
+{
+ u8 i;
+
+ for (i = 0; i < 16; i++) // max objects?
+ {
+ if (gUnknown_020386A4[i][MAP_OBJ_ID] == 16)
+ continue;
+
+ StartSpriteAnim(&gSprites[AddPseudoFieldObject(
+ gMapObjects[gUnknown_020386A4[i][MAP_OBJ_ID]].graphicsId,
+ SpriteCallbackDummy,
+ (u16)gUnknown_020386A4[i][X_COORD] * 16 + 8,
+ (u16)gUnknown_020386A4[i][Y_COORD] * 16 + 32,
+ 2)],
+ gUnknown_020386A4[i][ANIM_NUM]);
+ }
+}
+
+void sub_80B3720(void)
+{
+ s16 i;
+
+ for (i = 0; i < 0x400; i++)
+ {
+ if (ewram18000[i] != 0)
+ gBGTilemapBuffers[1][i] = ewram18000[i] + 0xC3E0;
+ }
+}
+
+void sub_80B3764(int var1, int var2)
+{
+ sub_80B3720();
+ sub_80B39D0(var1, var2, 0);
+ InitMenu(0, 0xE, 0x2, 0x8, gMartInfo.cursor, 0xF);
+}
+
+void sub_80B379C(void)
+{
+ u16 i, j;
+
+ for (i = 0; i < 8; i++)
+ for (j = 0; j < 14; j++)
+ gBGTilemapBuffers[1][32 * (i + 12) + j] = ewram18300[32 * i + j] + 0xC3E0;
+}
+
+void sub_80B37EC(void)
+{
+ sub_80B3A70();
+}
+
+void sub_80B37F8(u8 taskId)
+{
+ u16 itemListIndex = gMartInfo.choicesAbove + gMartInfo.cursor;
+ u16 itemId = gMartInfo.itemList[itemListIndex];
+ u32 price = (ItemId_GetPrice(itemId) >> GetPriceReduction(1));
+
+ PrintMoneyAmount(gTasks[taskId].data[1] * price, 6, 6, 11);
+ gStringVar1[0] = EXT_CTRL_CODE_BEGIN;
+ gStringVar1[1] = 0x14;
+ gStringVar1[2] = 0x6;
+ ConvertIntToDecimalStringN(&gStringVar1[3], gTasks[taskId].data[1], 1, 2);
+ MenuPrint(gOtherText_xString1, 1, 11);
+ sub_80A3FA0(gBGTilemapBuffers[1], 1, 11, 12, 2, 0xC3E1);
+}
+
+void sub_80B389C(u16 itemId, u8 var2, bool32 hasControlCode)
+{
+ u8 *stringPtr = gStringVar1;
+
+ if (hasControlCode != FALSE)
+ {
+ stringPtr[0] = EXT_CTRL_CODE_BEGIN;
+ stringPtr[1] = 0x1;
+ stringPtr[2] = 0x2;
+ stringPtr += 3;
+ }
+
+ CopyItemName(itemId, stringPtr);
+
+ sub_8072A18(&gStringVar1[0], 0x70, var2 << 3, 0x58, 0x1);
+ stringPtr = gStringVar1;
+
+ if (hasControlCode != FALSE)
+ stringPtr = &gStringVar1[3];
+
+ GetMoneyAmountText(stringPtr, (ItemId_GetPrice(itemId) >> GetPriceReduction(1)), 0x4);
+ MenuPrint_PixelCoords(&gStringVar1[0], 0xCA, var2 << 3, 1);
+}
+
+void sub_80B3930(u16 itemId, u8 var2, bool32 hasControlCode)
+{
+ u8 *stringPtr = gStringVar1;
+
+ if (hasControlCode != FALSE)
+ {
+ stringPtr[0] = EXT_CTRL_CODE_BEGIN;
+ stringPtr[1] = 0x1;
+ stringPtr[2] = 0x2;
+ stringPtr += 3;
+ }
+
+ StringCopy(stringPtr, gDecorations[itemId].name);
+ sub_8072A18(&gStringVar1[0], 0x70, var2 << 3, 0x58, 0x1);
+ stringPtr = gStringVar1;
+
+ if (hasControlCode != FALSE)
+ stringPtr = &gStringVar1[3];
+
+ if (gDecorations[itemId].price == 10000)
+ {
+ sub_80B7B34(0x19, var2, hasControlCode); // huh???
+ }
+ else
+ {
+ GetMoneyAmountText(stringPtr, gDecorations[itemId].price, 0x4);
+ MenuPrint_PixelCoords(&gStringVar1[0], 0xCA, var2 << 3, 0x1);
+ }
+}
+
+void sub_80B39D0(int var1, int var2, bool32 hasControlCode)
+{
+ u8 i;
+
+ for (i = var1; i <= var2 && gMartInfo.choicesAbove + i < gMartInfo.itemCount; i++)
+ {
+ if (gMartInfo.martType == MART_TYPE_0)
+ sub_80B389C(gMartInfo.itemList[gMartInfo.choicesAbove + i], (i << 1) + 2, hasControlCode);
+ else
+ sub_80B3930(gMartInfo.itemList[gMartInfo.choicesAbove + i], (i << 1) + 2, hasControlCode);
+ }
+
+ if (i != 8 && gMartInfo.choicesAbove + i == gMartInfo.itemCount)
+ {
+ MenuFillWindowRectWithBlankTile(0xE, (i << 1) + 2, 0x1C, (i << 1) + 3);
+ MenuPrint(gOtherText_CancelNoTerminator, 0xE, (i << 1) + 2);
+ }
+}
+
+void sub_80B3A70(void)
+{
+ if (gMartInfo.choicesAbove + gMartInfo.cursor != gMartInfo.itemCount)
+ {
+ if (gMartInfo.martType == MART_TYPE_0)
+ {
+ sub_8072AB0(ItemId_GetDescription(gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor]),
+ 0x4, 0x68, 0x68, 0x30, 0);
+ }
+ else
+ sub_8072AB0(gDecorations[gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor]].description,
+ 0x4, 0x68, 0x68, 0x30, 0);
+ }
+ else
+ {
+ sub_8072AB0(gOtherText_QuitShopping, 0x4, 0x68, 0x68, 0x30, 0);
+ }
+}
+
+void sub_80B3AEC(u8 taskId)
+{
+ if (gMain.newKeys & A_BUTTON || gMain.newKeys & B_BUTTON)
+ {
+ sub_80B39D0(gMartInfo.cursor, gMartInfo.cursor, 0); // huh???
+ PlaySE(SE_SELECT);
+
+ if (gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor] == ITEM_POKE_BALL && gTasks[taskId].data[1] >= 10 && AddBagItem(ITEM_PREMIER_BALL, 1) == TRUE)
+ DisplayItemMessageOnField(taskId, gOtherText_FreePremierBall, sub_80B4378, 0xC3E1);
+ else
+ sub_80B4378(taskId);
+ }
+}
+
+void sub_80B3B80(u8 taskId)
+{
+ IncrementGameStat(0x26);
+ RemoveMoney(&gSaveBlock1.money, gMartTotalCost);
+ PlaySE(SE_REGI);
+ UpdateMoneyWindow(gSaveBlock1.money, 0, 0);
+ gTasks[taskId].func = sub_80B3AEC;
+}
+
+void sub_80B3BD0(u8 taskId)
+{
+ sub_80B39D0(gMartInfo.cursor, gMartInfo.cursor, 0); // same thing as above?
+ sub_80B4378(taskId);
+}
+
+void sub_80B3BF4(u8 taskId)
+{
+ MenuZeroFillWindowRect(0x7, 0x8, 0xD, 0xD);
+ sub_80A3FA0(gBGTilemapBuffers[1], 8, 9, 4, 4, 0);
+ sub_80B379C();
+ sub_80B3420();
+
+ if (IsEnoughMoney(gSaveBlock1.money, gMartTotalCost))
+ {
+ if (gMartInfo.martType == MART_TYPE_0)
+ {
+ if (AddBagItem(gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor], gTasks[taskId].data[1]))
+ {
+ DisplayItemMessageOnField(taskId, gOtherText_HereYouGo, sub_80B3B80, 0xC3E1);
+ sub_80B4470(taskId);
+ }
+ else
+ DisplayItemMessageOnField(taskId, gOtherText_NoRoomFor, sub_80B3BD0, 0xC3E1);
+ }
+ else // a normal mart is only type 0, so types 1 and 2 are decoration marts.
+ {
+ if (IsThereStorageSpaceForDecoration(gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor]))
+ {
+ if (gMartInfo.martType == MART_TYPE_1)
+ DisplayItemMessageOnField(taskId, gOtherText_HereYouGo2, sub_80B3B80, 0xC3E1);
+ else
+ DisplayItemMessageOnField(taskId, gOtherText_HereYouGo3, sub_80B3B80, 0xC3E1);
+ }
+ else
+ {
+ StringExpandPlaceholders(gStringVar4, gOtherText_SpaceForIsFull);
+ DisplayItemMessageOnField(taskId, gStringVar4, sub_80B3BD0, 0xC3E1);
+ }
+ }
+ }
+ else
+ DisplayItemMessageOnField(taskId, gOtherText_NotEnoughMoney, sub_80B3BD0, 0xC3E1);
+}
+
+void sub_80B3D38(u8 taskId)
+{
+ DisplayYesNoMenu(7, 8, 1);
+ sub_80A3FA0(gBGTilemapBuffers[1], 8, 9, 4, 4, 0xC3E1);
+ DoYesNoFuncWithChoice(taskId, gUnknown_083CC708);
+}
+
+void sub_80B3D7C(u8 taskId)
+{
+ sub_80B39D0(gMartInfo.cursor, gMartInfo.cursor, 0);
+ MenuZeroFillWindowRect(0x7, 0x8, 0xD, 0xD);
+ sub_80A3FA0(gBGTilemapBuffers[1], 0x8, 0x9, 0x4, 0x4, 0);
+ sub_80B4378(taskId);
+}
+
+void sub_80B3DC8(u8 taskId)
+{
+ if (sub_80A52C4(taskId, gMartInfo.curItemCount) == TRUE)
+ sub_80B37F8(taskId);
+
+ if (gMain.newKeys & A_BUTTON)
+ {
+ gMartTotalCost = (ItemId_GetPrice(gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor]) >> GetPriceReduction(1)) * gTasks[taskId].data[1]; // set total cost of your purchase.
+ MenuZeroFillWindowRect(0, 0xA, 0xD, 0xD);
+ sub_80A3FA0(gBGTilemapBuffers[1], 0x1, 0xB, 0xC, 0x2, 0);
+ sub_80B379C();
+ sub_80B3420();
+ CopyItemName(gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor], gStringVar1);
+ ConvertIntToDecimalStringN(gStringVar2, gTasks[taskId].data[1], 0, 0x2);
+ ConvertIntToDecimalStringN(gStringVar3, gMartTotalCost, 0, 0x8);
+ StringExpandPlaceholders(gStringVar4, gOtherText_ThatWillBe);
+ DisplayItemMessageOnField(taskId, gStringVar4, sub_80B3D38, 0xC3E1);
+ }
+ else if (gMain.newKeys & B_BUTTON)
+ {
+ sub_80B39D0(gMartInfo.cursor, gMartInfo.cursor, 0);
+ sub_80B4378(taskId);
+ }
+}
+
+void sub_80B3EFC(u8 taskId)
+{
+ u16 var;
+
+ gTasks[taskId].data[1] = 1;
+ MenuDrawTextWindow(0, 0xA, 0xD, 0xD);
+ sub_80B37F8(taskId);
+
+ var = gSaveBlock1.money / (ItemId_GetPrice(gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor]) >> GetPriceReduction(1));
+ if (var > 99)
+ gMartInfo.curItemCount = 99;
+ else
+ gMartInfo.curItemCount = var;
+
+ gTasks[taskId].func = sub_80B3DC8;
+}
+
+#ifdef NONMATCHING
+void sub_80B3F88(void)
+{
+ u16 *r1;
+ u16 *r2;
+ register u8 *r10 asm("r10");
+ s32 i;
+ s32 j;
+ struct Window *r8 = &gMenuWindow;
+
+ r1 = r8->tilemap;
+ r1 += 0x1EF;
+ r2 = r1;
+ r2 += 64;
+ r10 = r8->tileData;
+
+ for (i = 0; i < 14; i++)
+ {
+ for (j = 0; j < 15; j++)
+ {
+ if ((r1[j] & 0x3FF) <= r8->tileDataStartOffset + 1)
+ r2[j] = r8->tileDataStartOffset + 1;
+ else
+ r2[j] = r1[j] + 0x3C;
+ }
+
+ r1 -= 32;
+ r2 -= 32;
+ }
+
+ {
+ u8 *r1 = r10 + 0x3A20;
+ u8 *r2 = r1 + 0x780;
+ for (i = 0; i < 14; i++)
+ {
+ DmaCopy16(3, r1, r2, 0x1E0);
+ r2 -= 0x3C0;
+ r1 -= 0x3C0;
+ }
+ }
+}
+#else
+__attribute__((naked))
+void sub_80B3F88(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\
+ sub sp, 0x4\n\
+ ldr r0, _080B4020 @ =gMenuWindow\n\
+ mov r8, r0\n\
+ ldr r1, [r0, 0x28]\n\
+ ldr r3, _080B4024 @ =0x000003de\n\
+ adds r1, r3\n\
+ adds r2, r1, 0\n\
+ adds r2, 0x80\n\
+ ldr r7, [r0, 0x24]\n\
+ mov r10, r7\n\
+ ldr r0, _080B4028 @ =0x000003ff\n\
+ mov r9, r0\n\
+ movs r6, 0xD\n\
+_080B3FAC:\n\
+ adds r3, r2, 0\n\
+ subs r3, 0x40\n\
+ str r3, [sp]\n\
+ movs r7, 0x40\n\
+ negs r7, r7\n\
+ adds r7, r1\n\
+ mov r12, r7\n\
+ adds r3, r2, 0\n\
+ adds r4, r1, 0\n\
+ movs r5, 0xE\n\
+_080B3FC0:\n\
+ ldrh r2, [r4]\n\
+ mov r1, r9\n\
+ ands r1, r2\n\
+ mov r7, r8\n\
+ ldrh r0, [r7, 0x1A]\n\
+ adds r0, 0x1\n\
+ cmp r1, r0\n\
+ ble _080B3FD4\n\
+ adds r0, r2, 0\n\
+ adds r0, 0x3C\n\
+_080B3FD4:\n\
+ strh r0, [r3]\n\
+ adds r3, 0x2\n\
+ adds r4, 0x2\n\
+ subs r5, 0x1\n\
+ cmp r5, 0\n\
+ bge _080B3FC0\n\
+ ldr r2, [sp]\n\
+ mov r1, r12\n\
+ subs r6, 0x1\n\
+ cmp r6, 0\n\
+ bge _080B3FAC\n\
+ ldr r1, _080B402C @ =0x00003a20\n\
+ add r1, r10\n\
+ movs r0, 0xF0\n\
+ lsls r0, 3\n\
+ adds r2, r1, r0\n\
+ ldr r3, _080B4030 @ =0x040000d4\n\
+ ldr r5, _080B4034 @ =0x800000f0\n\
+ ldr r4, _080B4038 @ =0xfffffc40\n\
+ movs r6, 0xD\n\
+_080B3FFC:\n\
+ str r1, [r3]\n\
+ str r2, [r3, 0x4]\n\
+ str r5, [r3, 0x8]\n\
+ ldr r0, [r3, 0x8]\n\
+ adds r2, r4\n\
+ adds r1, r4\n\
+ subs r6, 0x1\n\
+ cmp r6, 0\n\
+ bge _080B3FFC\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\
+ .align 2, 0\n\
+_080B4020: .4byte gMenuWindow\n\
+_080B4024: .4byte 0x000003de\n\
+_080B4028: .4byte 0x000003ff\n\
+_080B402C: .4byte 0x00003a20\n\
+_080B4030: .4byte 0x040000d4\n\
+_080B4034: .4byte 0x800000f0\n\
+_080B4038: .4byte 0xfffffc40\n\
+ .syntax divided");
+}
+#endif
+
+#ifdef NONMATCHING
+void sub_80B403C(void)
+{
+ u16 *r1;
+ u16 *r2;
+ u8 *r10;
+ s32 i;
+ s32 j;
+ struct Window *r8 = &gMenuWindow;
+
+ r1 = r8->tilemap;
+ r1 += 0x4F;
+ r2 = r1;
+ r2 += 64;
+ r10 = r8->tileData;
+
+ for (i = 0; i < 14; i++)
+ {
+ for (j = 0; j < 15; j++)
+ {
+ if ((r1[j] & 0x3FF) <= r8->tileDataStartOffset + 1)
+ r2[j] = r8->tileDataStartOffset + 1;
+ else
+ r2[j] = r1[j] + 0x3C;
+ }
+
+ r1 += 32;
+ r2 += 32;
+ }
+
+ {
+ register u8 *r1 asm("r1") = r10 + 0x960;
+ register u8 *r2 asm("r2") = r1;
+
+ r1 += 0x780;
+ for (i = 0; i < 14; i++)
+ {
+ DmaCopy16(3, r1, r2, 0x1E0);
+ r1 += 0x3C0;
+ r2 += 0x3C0;
+ }
+ }
+}
+#else
+__attribute__((naked))
+void sub_80B403C(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\
+ sub sp, 0x4\n\
+ ldr r0, _080B40D8 @ =gMenuWindow\n\
+ mov r8, r0\n\
+ ldr r2, [r0, 0x28]\n\
+ adds r1, r2, 0\n\
+ adds r1, 0x9E\n\
+ adds r2, r1, 0\n\
+ adds r1, 0x80\n\
+ ldr r3, [r0, 0x24]\n\
+ mov r10, r3\n\
+ ldr r7, _080B40DC @ =0x000003ff\n\
+ mov r9, r7\n\
+ movs r6, 0xD\n\
+_080B4060:\n\
+ adds r0, r2, 0\n\
+ adds r0, 0x40\n\
+ str r0, [sp]\n\
+ movs r3, 0x40\n\
+ adds r3, r1\n\
+ mov r12, r3\n\
+ adds r3, r2, 0\n\
+ adds r4, r1, 0\n\
+ movs r5, 0xE\n\
+_080B4072:\n\
+ ldrh r2, [r4]\n\
+ mov r1, r9\n\
+ ands r1, r2\n\
+ mov r7, r8\n\
+ ldrh r0, [r7, 0x1A]\n\
+ adds r0, 0x1\n\
+ cmp r1, r0\n\
+ ble _080B4086\n\
+ adds r0, r2, 0\n\
+ subs r0, 0x3C\n\
+_080B4086:\n\
+ strh r0, [r3]\n\
+ adds r3, 0x2\n\
+ adds r4, 0x2\n\
+ subs r5, 0x1\n\
+ cmp r5, 0\n\
+ bge _080B4072\n\
+ ldr r2, [sp]\n\
+ mov r1, r12\n\
+ subs r6, 0x1\n\
+ cmp r6, 0\n\
+ bge _080B4060\n\
+ movs r1, 0x96\n\
+ lsls r1, 4\n\
+ add r1, r10\n\
+ adds r2, r1, 0\n\
+ movs r0, 0xF0\n\
+ lsls r0, 3\n\
+ adds r1, r0\n\
+ ldr r3, _080B40E0 @ =0x040000d4\n\
+ ldr r5, _080B40E4 @ =0x800000f0\n\
+ movs r4, 0xF0\n\
+ lsls r4, 2\n\
+ movs r6, 0xD\n\
+_080B40B4:\n\
+ str r1, [r3]\n\
+ str r2, [r3, 0x4]\n\
+ str r5, [r3, 0x8]\n\
+ ldr r0, [r3, 0x8]\n\
+ adds r2, r4\n\
+ adds r1, r4\n\
+ subs r6, 0x1\n\
+ cmp r6, 0\n\
+ bge _080B40B4\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\
+ .align 2, 0\n\
+_080B40D8: .4byte gMenuWindow\n\
+_080B40DC: .4byte 0x000003ff\n\
+_080B40E0: .4byte 0x040000d4\n\
+_080B40E4: .4byte 0x800000f0\n\
+ .syntax divided");
+}
+#endif
+
+void sub_80B40E8(u8 taskId) // Mart_DoCursorAction
+{
+ if (!gPaletteFade.active)
+ {
+ if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_UP) // only up can be pressed
+ {
+ if (gMartInfo.cursor == 0)
+ {
+ if (gMartInfo.choicesAbove == 0) // if there are no choices above, dont bother
+ return;
+
+ PlaySE(SE_SELECT);
+ gMartInfo.choicesAbove--; // since cursor is at the top and there are choices above the top, scroll the menu up by updating choicesAbove.
+ sub_80B3F88();
+ sub_80B39D0(0, 0, 0);
+ sub_80B3A70();
+ sub_80B32A4();
+ }
+ else // if the cursor is not 0, choicesAbove cannot be updated yet since the cursor is at the top of the menu, so update cursor.
+ {
+ PlaySE(SE_SELECT);
+ gMartInfo.cursor = MoveMenuCursor(-1); // move cursor up
+ sub_80B3A70();
+ }
+ }
+ else if ((gMain.newAndRepeatedKeys & DPAD_ANY) == DPAD_DOWN) // only down can be pressed
+ {
+ if (gMartInfo.cursor == 7) // are you at the bottom of the menu?
+ {
+ if (gMartInfo.choicesAbove + gMartInfo.cursor == gMartInfo.itemCount) // are you at cancel?
+ return;
+
+ PlaySE(SE_SELECT);
+ gMartInfo.choicesAbove++;
+ sub_80B403C();
+ sub_80B39D0(7, 7, 0);
+ sub_80B3A70();
+ sub_80B32A4();
+ }
+ else if (gMartInfo.cursor != gMartInfo.itemCount)
+ {
+ PlaySE(SE_SELECT);
+ gMartInfo.cursor = MoveMenuCursor(1);
+ sub_80B3A70();
+ }
+ }
+ else if (gMain.newKeys & A_BUTTON)
+ {
+ PlaySE(SE_SELECT);
+
+ if (gMartInfo.choicesAbove + gMartInfo.cursor != gMartInfo.itemCount) // did you not hit CANCEL?
+ {
+ PauseVerticalScrollIndicator(0);
+ PauseVerticalScrollIndicator(1);
+ sub_80F979C(1, 1);
+ sub_80B39D0(gMartInfo.cursor, gMartInfo.cursor, 1);
+ HandleDestroyMenuCursors();
+ MenuZeroFillWindowRect(0, 0xC, 0xD, 0x13);
+
+ if (gMartInfo.martType == MART_TYPE_0)
+ {
+ gMartTotalCost = (ItemId_GetPrice(gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor]) >> GetPriceReduction(1)); // set 1x price
+ if (!IsEnoughMoney(gSaveBlock1.money, gMartTotalCost))
+ {
+ DisplayItemMessageOnField(taskId, gOtherText_NotEnoughMoney, sub_80B3BD0, 0xC3E1); // tail merge
+ }
+ else // _080B42BA
+ {
+ CopyItemName(gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor], gStringVar1);
+ StringExpandPlaceholders(gStringVar4, gOtherText_HowManyYouWant);
+ DisplayItemMessageOnField(taskId, gStringVar4, sub_80B3EFC, 0xC3E1);
+ }
+ }
+ else // _080B428C
+ {
+ gMartTotalCost = gDecorations[gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor]].price;
+
+ if (!IsEnoughMoney(gSaveBlock1.money, gMartTotalCost))
+ {
+ DisplayItemMessageOnField(taskId, gOtherText_NotEnoughMoney, sub_80B3BD0, 0xC3E1); // tail merge
+ }
+ else
+ {
+ StringCopy(gStringVar1, gDecorations[gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor]].name);
+ ConvertIntToDecimalStringN(gStringVar2, gMartTotalCost, 0, 0x8);
+
+ if (gMartInfo.martType == MART_TYPE_1)
+ {
+ StringExpandPlaceholders(gStringVar4, gOtherText_ThatWillBe2);
+ }
+ else
+ {
+ StringExpandPlaceholders(gStringVar4, gOtherText_ThatWillBe3);
+ }
+ DisplayItemMessageOnField(taskId, gStringVar4, sub_80B3D38, 0xC3E1);
+ }
+ }
+ }
+ else
+ sub_80B43F0(taskId);
+ }
+ else if (gMain.newKeys & B_BUTTON) // go back to buy/sell/exit menu
+ {
+ PlaySE(SE_SELECT);
+ sub_80B43F0(taskId);
+ }
+ }
+}
+
+void sub_80B4378(u8 taskId)
+{
+ MenuZeroFillWindowRect(0, 0xE, 0x1D, 0x13);
+ MenuZeroFillWindowRect(0, 0xA, 0xD, 0xD);
+ sub_80A3FA0(gBGTilemapBuffers[1], 0x1, 0xB, 0xC, 0x2, 0);
+ sub_80B3420();
+ sub_80B3764(6, 7);
+ sub_80B37EC();
+ StartVerticalScrollIndicators(0);
+ StartVerticalScrollIndicators(1);
+ sub_80B32A4();
+ gTasks[taskId].func = sub_80B40E8;
+}
+
+void sub_80B43F0(u8 taskId)
+{
+ gFieldCallback = sub_80B3050;
+ BeginNormalPaletteFade(-1, 0, 0, 0x10, 0);
+ gTasks[taskId].func = Task_ExitBuyMenu;
+}
+
+void Task_ExitBuyMenu(u8 taskId)
+{
+ if (!gPaletteFade.active)
+ {
+ CloseMoneyWindow(0, 0);
+ BuyMenuFreeMemory();
+ SetMainCallback2(c2_exit_to_overworld_2_switch);
+ DestroyTask(taskId);
+ }
+}
+
+void sub_80B4470(u8 taskId)
+{
+ u16 i;
+
+ for (i = 0; i < 3; i++)
+ {
+ if (gUnknown_02038724[i].itemId == gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor]
+ && gUnknown_02038724[i].quantity != 0)
+ {
+ if (gUnknown_02038724[i].quantity + gTasks[taskId].data[1] > 255)
+ gUnknown_02038724[i].quantity = 255;
+ else
+ gUnknown_02038724[i].quantity += gTasks[taskId].data[1];
+ return;
+ }
+ }
+
+ if (gUnknown_02038730 < 3)
+ {
+ gUnknown_02038724[gUnknown_02038730].itemId = gMartInfo.itemList[gMartInfo.choicesAbove + gMartInfo.cursor];
+ gUnknown_02038724[gUnknown_02038730].quantity = gTasks[taskId].data[1];
+ gUnknown_02038730++;
+ }
+}
+
+void ClearItemPurchases(void)
+{
+ gUnknown_02038730 = 0;
+ ClearItemSlots(gUnknown_02038724, 3);
+}
+
+void CreatePokemartMenu(u16 *itemList)
+{
+ CreateShopMenu(MART_TYPE_0);
+ SetShopItemsForSale(itemList);
+ ClearItemPurchases();
+ SetShopMenuCallback(EnableBothScriptContexts);
+}
+
+void CreateDecorationShop1Menu(u16 *itemList)
+{
+ CreateShopMenu(MART_TYPE_1);
+ SetShopItemsForSale(itemList);
+ SetShopMenuCallback(EnableBothScriptContexts);
+}
+
+void CreateDecorationShop2Menu(u16 *itemList)
+{
+ CreateShopMenu(MART_TYPE_2);
+ SetShopItemsForSale(itemList);
+ SetShopMenuCallback(EnableBothScriptContexts);
+}
+
+void sub_80B45B4(u8 taskId, const s16 *list, u16 c)
+{
+ s16 r5 = gTasks[taskId].data[4] - 1;
+ s16 r3 = gTasks[taskId].data[5] - 1;
+ s16 r4 = gTasks[taskId].data[1];
+ s16 y;
+ s16 x;
+
+ if (gTasks[taskId].data[2] == 0)
+ {
+ for (y = 0; y < 3; y++)
+ {
+ for (x = 0; x < 3; x++)
+ {
+ s16 metatileId = MapGridGetMetatileIdAt(r5 + x, r3 + y);
+
+ if (list[r4] == metatileId)
+ {
+ if (r4 != 2)
+ MapGridSetMetatileIdAt(r5 + x, r3 + y, c | list[r4 + 1]);
+ else
+ MapGridSetMetatileIdAt(r5 + x, r3 + y, c | list[0]);
+ }
+ }
+ }
+ }
+ else
+ {
+ for (y = 0; y < 3; y++)
+ {
+ for (x = 0; x < 3; x++)
+ {
+ s16 metatileId = MapGridGetMetatileIdAt(r5 + x, r3 + y);
+
+ if (list[2 - r4] == metatileId)
+ {
+ if (r4 != 2)
+ MapGridSetMetatileIdAt(r5 + x, r3 + y, c | list[1 - r4]);
+ else
+ MapGridSetMetatileIdAt(r5 + x, r3 + y, c | list[2]);
+ }
+ }
+ }
+ }
+}
+
+static const u16 gUnknown_083CC714[] = {0x284, 0x282, 0x280};
+static const u16 gUnknown_083CC71A[] = {0x285, 0x283, 0x281};
+static const u16 gUnknown_083CC720[] = {0x28C, 0x28A, 0x288};
+static const u16 gUnknown_083CC726[] = {0x28D, 0x28B, 0x289};
+static const u16 gUnknown_083CC72C[] = {0x2A0, 0x2A2, 0x2A4};
+static const u16 gUnknown_083CC732[] = {0x2A1, 0x2A3, 0x2A5};
+static const u16 gUnknown_083CC738[] = {0x2A8, 0x2AA, 0x2AC};
+
+void sub_80B4710(u8 taskId)
+{
+ s16 *data = gTasks[taskId].data;
+
+ data[3] = 1;
+
+ switch (data[0])
+ {
+ case 0:
+ sub_80B45B4(taskId, gUnknown_083CC714, 0);
+ break;
+ case 1:
+ sub_80B45B4(taskId, gUnknown_083CC71A, 0);
+ break;
+ case 2:
+ sub_80B45B4(taskId, gUnknown_083CC720, 0xC00);
+ break;
+ case 3:
+ sub_80B45B4(taskId, gUnknown_083CC726, 0);
+ break;
+ case 4:
+ sub_80B45B4(taskId, gUnknown_083CC72C, 0xC00);
+ break;
+ case 5:
+ sub_80B45B4(taskId, gUnknown_083CC732, 0);
+ break;
+ case 6:
+ sub_80B45B4(taskId, gUnknown_083CC738, 0);
+ break;
+ }
+
+ data[0] = (data[0] + 1) & 7;
+ if (!data[0])
+ {
+ DrawWholeMapView();
+ data[1] = (data[1] + 1) % 3;
+ data[3] = 0;
+ }
+}
+
+u8 sub_80B47D8(u16 var)
+{
+ u8 taskId = CreateTask(sub_80B4710, 0);
+ s16 *data = gTasks[taskId].data;
+
+ PlayerGetDestCoords(&data[4], &data[5]);
+ data[0] = 0;
+ data[1] = 0;
+ data[2] = var;
+ sub_80B4710(taskId);
+ return taskId;
+}
+
+void sub_80B4824(u8 var)
+{
+ gUnknown_02038731 = sub_80B47D8(var);
+}
+
+void sub_80B483C(void)
+{
+ DestroyTask(gUnknown_02038731);
+}
+
+bool8 sub_80B4850(void)
+{
+ if (gTasks[gUnknown_02038731].data[3] == 0 && gTasks[gUnknown_02038731].data[1] == 2)
+ return FALSE;
+ else
+ return TRUE;
+}
diff --git a/src/sound.c b/src/sound.c
index 8d23b7d7a..91f5e06a3 100644
--- a/src/sound.c
+++ b/src/sound.c
@@ -4,6 +4,7 @@
#include "battle.h"
#include "m4a.h"
#include "main.h"
+#include "pokemon.h"
#include "songs.h"
#include "task.h"
@@ -13,9 +14,6 @@ struct Fanfare
u16 duration;
};
-// FIXME: different prototype than definition
-u32 SpeciesToCryId(u32);
-
extern u16 gBattleTypeFlags;
static EWRAM_DATA struct MusicPlayerInfo *gMPlay_PokemonCry = NULL;
@@ -355,21 +353,9 @@ void PlayCry5(u16 species, u8 mode)
RestoreBGMVolumeAfterPokemonCry();
}
-#define GET_CRY_PTR(a, b)\
-{\
- struct ToneData *tone;\
- if (v0)\
- tone = &a[index];\
- else\
- tone = &b[index];\
- gMPlay_PokemonCry = SetPokemonCryTone(tone);\
- break;\
-}
-
static void PlayCryInternal(u16 species, s8 pan, s8 volume, u8 priority, u8 mode)
{
- u32 cryId;
- u32 v0;
+ bool32 v0;
u32 release;
u32 length;
u32 pitch;
@@ -378,10 +364,7 @@ static void PlayCryInternal(u16 species, s8 pan, s8 volume, u8 priority, u8 mode
u8 table;
species--;
-
- cryId = species;
-
- v0 = 0;
+ v0 = FALSE;
release = 0;
length = 140;
pitch = 15360;
@@ -427,26 +410,28 @@ static void PlayCryInternal(u16 species, s8 pan, s8 volume, u8 priority, u8 mode
SetPokemonCryChorus(chorus);
SetPokemonCryPriority(priority);
- asm("");
- asm("");
- asm("");
- asm("");
- asm("");
- asm("");
- asm("");
-
- cryId = SpeciesToCryId(cryId);
- index = 0x7F;
- asm("" ::: "r0");
- index &= cryId;
- table = cryId >> 7;
+ species = SpeciesToCryId(species);
+ index = species & 0x7F;
+ table = species >> 7;
switch (table)
{
- case 0: GET_CRY_PTR(voicegroup_84537C0, voicegroup_8452590);
- case 1: GET_CRY_PTR(voicegroup_8453DC0, voicegroup_8452B90);
- case 2: GET_CRY_PTR(voicegroup_84543C0, voicegroup_8453190);
- case 3: GET_CRY_PTR(voicegroup_84549C0, voicegroup_8453790);
+ case 0:
+ gMPlay_PokemonCry = SetPokemonCryTone(
+ v0 ? &voicegroup_84537C0[index] : &voicegroup_8452590[index]);
+ break;
+ case 1:
+ gMPlay_PokemonCry = SetPokemonCryTone(
+ v0 ? &voicegroup_8453DC0[index] : &voicegroup_8452B90[index]);
+ break;
+ case 2:
+ gMPlay_PokemonCry = SetPokemonCryTone(
+ v0 ? &voicegroup_84543C0[index] : &voicegroup_8453190[index]);
+ break;
+ case 3:
+ gMPlay_PokemonCry = SetPokemonCryTone(
+ v0 ? &voicegroup_84549C0[index] : &voicegroup_8453790[index]);
+ break;
}
}
diff --git a/src/start_menu.c b/src/start_menu.c
index 411690aff..6e44090df 100644
--- a/src/start_menu.c
+++ b/src/start_menu.c
@@ -15,7 +15,7 @@
#include "pokedex.h"
#include "pokemon_menu.h"
#include "pokenav.h"
-#include "rom4.h"
+#include "overworld.h"
#include "safari_zone.h"
#include "save.h"
#include "save_menu_util.h"
@@ -505,7 +505,7 @@ static u8 RunSaveDialogCallback(void)
return saveDialogCallback();
}
-void InitSaveDialog(void)
+void ScrSpecial_DoSaveDialog(void)
{
sub_807160C();
CreateTask(Task_SaveDialog, 0x50);
@@ -515,7 +515,7 @@ static void DisplaySaveMessageWithCallback(const u8 *ptr, u8 (*func)(void))
{
StringExpandPlaceholders(gStringVar4, ptr);
MenuDisplayMessageBox();
- sub_8072044(gStringVar4);
+ MenuPrintMessageDefaultCoords(gStringVar4);
savingComplete = TRUE;
saveDialogCallback = func;
}
diff --git a/src/strings.c b/src/strings.c
index 219c5bec1..6c8dce9d6 100644
--- a/src/strings.c
+++ b/src/strings.c
@@ -861,7 +861,7 @@ const u8 gOtherText_AtBattleStart[] = _("At the battle’s start.");
const u8 gOtherText_UponWinningBattle[] = _("Upon winning a battle.");
const u8 gOtherText_UponLosingBattle[] = _("Upon losing a battle.");
-// mauville_old_man?
+// mauville_man?
const u8 gOtherText_TheBardsSong[] = _("The BARD’s Song");
const u8 gOtherText_WhatsHipHappening[] = _("What’s hip and happening?");
const u8 gOtherText_Interview[] = _("Interview");
@@ -1781,7 +1781,7 @@ const u8 gOtherText_AtBattleStart[] = _("Zum Kampfbeginn");
const u8 gOtherText_UponWinningBattle[] = _("Über den Sieg");
const u8 gOtherText_UponLosingBattle[] = _("Über die Niederlage");
-// mauville_old_man?
+// mauville_man?
const u8 gOtherText_TheBardsSong[] = _("Das BARDEN-Lied");
const u8 gOtherText_WhatsHipHappening[] = _("Was ist hip? Was ist top?");
const u8 gOtherText_Interview[] = _("Interview");
diff --git a/src/time_events.c b/src/time_events.c
index e1b9a2e9e..accb03db8 100644
--- a/src/time_events.c
+++ b/src/time_events.c
@@ -4,7 +4,7 @@
#include "field_weather.h"
#include "pokemon.h"
#include "rng.h"
-#include "rom4.h"
+#include "overworld.h"
#include "rtc.h"
#include "script.h"
#include "task.h"
@@ -81,13 +81,13 @@ void UpdateShoalTideFlag(void)
1,
};
- 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_type_from_warp0()))
{
RtcCalcLocalTime();
if (tide[gLocalTime.hours])
FlagSet(SYS_SHOAL_TIDE);
else
- FlagReset(SYS_SHOAL_TIDE);
+ FlagClear(SYS_SHOAL_TIDE);
}
}
diff --git a/src/title_screen.c b/src/title_screen.c
index ab0f1d505..2503b0654 100644
--- a/src/title_screen.c
+++ b/src/title_screen.c
@@ -437,99 +437,99 @@ __attribute__((naked))
static void CreatePressStartBanner(s16 x, s16 y)
{
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\
- lsls r0, 16\n\
- ldr r2, _0807C3AC @ =0xffe00000\n\
- adds r0, r2\n\
- lsrs r0, 16\n\
- movs r6, 0\n\
- lsls r1, 16\n\
- mov r10, r1\n\
- mov r8, r10\n\
+ push {r4-r7,lr}\n\
+ mov r7, r10\n\
+ mov r6, r9\n\
+ mov r5, r8\n\
+ push {r5-r7}\n\
+ lsls r0, 16\n\
+ ldr r2, _0807C3AC @ =0xffe00000\n\
+ adds r0, r2\n\
+ lsrs r0, 16\n\
+ movs r6, 0\n\
+ lsls r1, 16\n\
+ mov r10, r1\n\
+ mov r8, r10\n\
_0807C302:\n\
- lsls r5, r0, 16\n\
- asrs r5, 16\n\
- ldr r0, _0807C3B0 @ =sStartCopyrightBannerSpriteTemplate\n\
- adds r1, r5, 0\n\
- mov r3, r8\n\
- asrs r2, r3, 16\n\
- movs r3, 0\n\
- bl CreateSprite\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- lsls r4, r0, 4\n\
- adds r4, r0\n\
- lsls r4, 2\n\
- ldr r0, _0807C3B4 @ =gSprites\n\
- mov r9, r0\n\
- add r4, r9\n\
- adds r0, r4, 0\n\
- adds r1, r6, 0\n\
- bl StartSpriteAnim\n\
- movs r7, 0x1\n\
- strh r7, [r4, 0x2E]\n\
- adds r0, r6, 0x1\n\
- lsls r0, 24\n\
- lsrs r6, r0, 24\n\
- adds r5, 0x20\n\
- lsls r5, 16\n\
- lsrs r0, r5, 16\n\
- cmp r6, 0x2\n\
- bls _0807C302\n\
- ldr r1, _0807C3B0 @ =sStartCopyrightBannerSpriteTemplate\n\
- mov r8, r1\n\
- lsls r5, r0, 16\n\
- asrs r5, 16\n\
- mov r2, r10\n\
- asrs r6, r2, 16\n\
- mov r0, r8\n\
- adds r1, r5, 0\n\
- adds r2, r6, 0\n\
- movs r3, 0\n\
- bl CreateSprite\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- lsls r4, r0, 4\n\
- adds r4, r0\n\
- lsls r4, 2\n\
- add r4, r9\n\
- adds r0, r4, 0\n\
- movs r1, 0x8\n\
- bl StartSpriteAnim\n\
- strh r7, [r4, 0x2E]\n\
- subs r5, 0x60\n\
- lsls r5, 16\n\
- asrs r5, 16\n\
- subs r6, 0x8\n\
- lsls r6, 16\n\
- asrs r6, 16\n\
- mov r0, r8\n\
- adds r1, r5, 0\n\
- adds r2, r6, 0\n\
- movs r3, 0\n\
- bl CreateSprite\n\
- lsls r0, 24\n\
- lsrs r0, 24\n\
- lsls r4, r0, 4\n\
- adds r4, r0\n\
- lsls r4, 2\n\
- add r4, r9\n\
- adds r0, r4, 0\n\
- movs r1, 0x9\n\
- bl StartSpriteAnim\n\
- strh r7, [r4, 0x2E]\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\
- .align 2, 0\n\
+ lsls r5, r0, 16\n\
+ asrs r5, 16\n\
+ ldr r0, _0807C3B0 @ =sStartCopyrightBannerSpriteTemplate\n\
+ adds r1, r5, 0\n\
+ mov r3, r8\n\
+ asrs r2, r3, 16\n\
+ movs r3, 0\n\
+ bl CreateSprite\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ lsls r4, r0, 4\n\
+ adds r4, r0\n\
+ lsls r4, 2\n\
+ ldr r0, _0807C3B4 @ =gSprites\n\
+ mov r9, r0\n\
+ add r4, r9\n\
+ adds r0, r4, 0\n\
+ adds r1, r6, 0\n\
+ bl StartSpriteAnim\n\
+ movs r7, 0x1\n\
+ strh r7, [r4, 0x2E]\n\
+ adds r0, r6, 0x1\n\
+ lsls r0, 24\n\
+ lsrs r6, r0, 24\n\
+ adds r5, 0x20\n\
+ lsls r5, 16\n\
+ lsrs r0, r5, 16\n\
+ cmp r6, 0x2\n\
+ bls _0807C302\n\
+ ldr r1, _0807C3B0 @ =sStartCopyrightBannerSpriteTemplate\n\
+ mov r8, r1\n\
+ lsls r5, r0, 16\n\
+ asrs r5, 16\n\
+ mov r2, r10\n\
+ asrs r6, r2, 16\n\
+ mov r0, r8\n\
+ adds r1, r5, 0\n\
+ adds r2, r6, 0\n\
+ movs r3, 0\n\
+ bl CreateSprite\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ lsls r4, r0, 4\n\
+ adds r4, r0\n\
+ lsls r4, 2\n\
+ add r4, r9\n\
+ adds r0, r4, 0\n\
+ movs r1, 0x8\n\
+ bl StartSpriteAnim\n\
+ strh r7, [r4, 0x2E]\n\
+ subs r5, 0x60\n\
+ lsls r5, 16\n\
+ asrs r5, 16\n\
+ subs r6, 0x8\n\
+ lsls r6, 16\n\
+ asrs r6, 16\n\
+ mov r0, r8\n\
+ adds r1, r5, 0\n\
+ adds r2, r6, 0\n\
+ movs r3, 0\n\
+ bl CreateSprite\n\
+ lsls r0, 24\n\
+ lsrs r0, 24\n\
+ lsls r4, r0, 4\n\
+ adds r4, r0\n\
+ lsls r4, 2\n\
+ add r4, r9\n\
+ adds r0, r4, 0\n\
+ movs r1, 0x9\n\
+ bl StartSpriteAnim\n\
+ strh r7, [r4, 0x2E]\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\
+ .align 2, 0\n\
_0807C3AC: .4byte 0xffe00000\n\
_0807C3B0: .4byte sStartCopyrightBannerSpriteTemplate\n\
_0807C3B4: .4byte gSprites\n\
diff --git a/src/trade.c b/src/trade.c
index cb190d194..0816fe555 100644
--- a/src/trade.c
+++ b/src/trade.c
@@ -37,6 +37,7 @@ struct UnkStructD {
extern const struct InGameTrade gIngameTrades[];
extern const u16 gIngameTradeMail[][10];
+IWRAM_DATA u8 gUnknown_03000508[8];
void sub_804A96C(struct UnkStructD *arg0, u8 left, u8 top, u16 *tilemap, u8 width, u8 height, u16 sp8) {
int y, x;
diff --git a/src/trader.c b/src/trader.c
index ea06058e9..61f48fad8 100644
--- a/src/trader.c
+++ b/src/trader.c
@@ -3,6 +3,7 @@
#include "decoration_inventory.h"
#include "event_data.h"
#include "main.h"
+#include "mauville_man.h"
#include "menu.h"
#include "menu_helpers.h"
#include "script.h"
@@ -36,7 +37,7 @@ void sub_810993C(void)
{
u8 i, j;
u8 buffer[12];
- struct MauvilleOldManTrader *trader = &gSaveBlock1.oldMan.trader;
+ struct MauvilleManTrader *trader = &gSaveBlock1.mauvilleMan.trader;
for (i = 0; i < 3; i++)
{
@@ -55,13 +56,13 @@ void sub_810993C(void)
}
}
-void sub_81099CC(void)
+void TraderSetup(void)
{
u8 i;
- struct MauvilleOldManTrader *trader = &gSaveBlock1.oldMan.trader;
+ struct MauvilleManTrader *trader = &gSaveBlock1.mauvilleMan.trader;
- trader->unk0 = 2;
- trader->unk31 = 0;
+ trader->id = MAUVILLE_MAN_TRADER;
+ trader->alreadyTraded = FALSE;
for (i = 0; i < 4; i++)
{
@@ -74,8 +75,8 @@ void sub_81099CC(void)
void sub_8109A20(void)
{
- struct MauvilleOldManTrader *trader = &gSaveBlock1.oldMan.trader;
- trader->unk31 = 0;
+ struct MauvilleManTrader *trader = &gSaveBlock1.mauvilleMan.trader;
+ trader->alreadyTraded = FALSE;
}
void sub_8109A30(u8 value)
@@ -83,12 +84,12 @@ void sub_8109A30(u8 value)
VarSet(VAR_RECYCLE_GOODS, value);
}
-void sub_8109A48(u8 taskId)
+void CreateAvailableDecorationsMenu(u8 taskId)
{
u8 i;
u8 numChoices = 1;
u8 numDecorations = 0;
- struct MauvilleOldManTrader *trader = &gSaveBlock1.oldMan.trader;
+ struct MauvilleManTrader *trader = &gSaveBlock1.mauvilleMan.trader;
for (i = 0; i < 4; i++)
{
@@ -139,9 +140,9 @@ void sub_8109B34(u8 taskId, u8 decorationId)
EnableBothScriptContexts();
}
-void sub_8109B7C(u8 taskId)
+void Task_HandleGetDecorationMenuInput(u8 taskId)
{
- struct MauvilleOldManTrader *trader = &gSaveBlock1.oldMan.trader;
+ struct MauvilleManTrader *trader = &gSaveBlock1.mauvilleMan.trader;
if (gMain.newKeys & DPAD_UP)
{
@@ -174,13 +175,13 @@ void sub_8109B7C(u8 taskId)
}
}
-void sub_8109C44(void)
+void ScrSpecial_GetTraderTradedFlag(void)
{
- struct MauvilleOldManTrader *trader = &gSaveBlock1.oldMan.trader;
- gScriptResult = trader->unk31;
+ struct MauvilleManTrader *trader = &gSaveBlock1.mauvilleMan.trader;
+ gScriptResult = trader->alreadyTraded;
}
-void sub_8109C58(void)
+void ScrSpecial_DoesPlayerHaveNoDecorations(void)
{
u8 i;
@@ -195,7 +196,7 @@ void sub_8109C58(void)
gScriptResult = TRUE;
}
-void sub_8109C90(void)
+void ScrSpecial_IsDecorationFull(void)
{
gScriptResult = FALSE;
if (gDecorations[gSpecialVar_0x8004].category != gDecorations[gSpecialVar_0x8006].category
@@ -206,7 +207,7 @@ void sub_8109C90(void)
}
}
-void sub_8109CF0(void)
+void ScrSpecial_TraderMenuGiveDecoration(void)
{
CreateTask(sub_80FE7A8, 0);
}
@@ -242,20 +243,20 @@ void sub_8109DAC(u8 taskId)
EnableBothScriptContexts();
}
-void sub_8109DE0(void)
+void ScrSpecial_TraderDoDecorationTrade(void)
{
- struct MauvilleOldManTrader *trader = &gSaveBlock1.oldMan.trader;
+ struct MauvilleManTrader *trader = &gSaveBlock1.mauvilleMan.trader;
sub_81340A8(gSpecialVar_0x8006);
IsThereStorageSpaceForDecoration(gSpecialVar_0x8004);
StringCopy(trader->unk5[gSpecialVar_0x8005], gSaveBlock2.playerName);
trader->unk1[gSpecialVar_0x8005] = gSpecialVar_0x8006;
sub_810993C();
- trader->unk31 = 1;
+ trader->alreadyTraded = TRUE;
}
-void sub_8109E34(void)
+void ScrSpecial_TraderMenuGetDecoration(void)
{
- u8 taskId = CreateTask(sub_8109B7C, 0);
- sub_8109A48(taskId);
+ u8 taskId = CreateTask(Task_HandleGetDecorationMenuInput, 0);
+ CreateAvailableDecorationsMenu(taskId);
}
diff --git a/src/trainer_card.c b/src/trainer_card.c
index 626c5a7bf..bcb62ede6 100644
--- a/src/trainer_card.c
+++ b/src/trainer_card.c
@@ -10,7 +10,7 @@
#include "money.h"
#include "palette.h"
#include "pokedex.h"
-#include "rom4.h"
+#include "overworld.h"
#include "script_pokemon_80C4.h"
#include "songs.h"
#include "sound.h"
@@ -509,7 +509,7 @@ static void sub_8093688(void)
ewram0.var_5 = 0;
ewram0.var_6 = 0;
for (i = 0; i < 4; i++)
- sub_80EB3FC(ewram0.var_20[i], ewram0.var_64.var_28[i]);
+ EasyChat_GetWordText(ewram0.var_20[i], ewram0.var_64.var_28[i]);
sub_80936D4();
}
diff --git a/src/trainer_see.c b/src/trainer_see.c
index feb35c67c..5a8ebbafc 100644
--- a/src/trainer_see.c
+++ b/src/trainer_see.c
@@ -9,113 +9,132 @@
#include "task.h"
#include "util.h"
-extern bool8 (*gIsTrainerInRange[])(struct MapObject *, u16, s16, s16);
-extern bool8 (*gTrainerSeeFuncList[])(u8, struct Task *, struct MapObject *);
-extern bool8 (*gTrainerSeeFuncList2[])(u8, struct Task *, struct MapObject *);
+const u8 gSpriteImage_839B308[] = INCBIN_U8("graphics/unknown_sprites/839B4E0/0.4bpp");
+const u8 gSpriteImage_839B388[] = INCBIN_U8("graphics/unknown_sprites/839B4E0/1.4bpp");
+const u8 gSpriteImage_839B408[] = INCBIN_U8("graphics/unknown_sprites/839B408.4bpp");
+
+u8 GetTrainerApproachDistanceSouth(struct MapObject *trainerObj, s16 range, s16 x, s16 y);
+u8 GetTrainerApproachDistanceNorth(struct MapObject *trainerObj, s16 range, s16 x, s16 y);
+u8 GetTrainerApproachDistanceWest(struct MapObject *trainerObj, s16 range, s16 x, s16 y);
+u8 GetTrainerApproachDistanceEast(struct MapObject *trainerObj, s16 range, s16 x, s16 y);
+
+static u8 (*const sDirectionalApproachDistanceFuncs[])(struct MapObject *, s16, s16, s16) =
+{
+ GetTrainerApproachDistanceSouth,
+ GetTrainerApproachDistanceNorth,
+ GetTrainerApproachDistanceWest,
+ GetTrainerApproachDistanceEast,
+};
extern struct SpriteTemplate gSpriteTemplate_839B510;
extern struct SpriteTemplate gSpriteTemplate_839B528;
bool8 CheckTrainers(void)
{
- u8 i;
+ u8 mapObjId;
- for (i = 0; i < 16; i++)
+ for (mapObjId = 0; mapObjId < 16; mapObjId++)
{
- if ( gMapObjects[i].active )
- if ( gMapObjects[i].trainerType == 1 || gMapObjects[i].trainerType == 3 )
- if ( CheckTrainer(i) )
- return TRUE;
+ if (gMapObjects[mapObjId].active
+ && (gMapObjects[mapObjId].trainerType == 1 || gMapObjects[mapObjId].trainerType == 3)
+ && CheckTrainer(mapObjId))
+ return TRUE;
}
return FALSE;
}
-bool8 CheckTrainer(u8 trainer)
+bool8 CheckTrainer(u8 mapObjId)
{
- u8 *scriptPtr = GetFieldObjectScriptPointerByFieldObjectId(trainer);
+ u8 *scriptPtr = GetFieldObjectScriptPointerByFieldObjectId(mapObjId);
- if (GetTrainerFlagFromScriptPointer(scriptPtr))
- return FALSE;
- else
- {
- struct MapObject *trainerObj = &gMapObjects[trainer];
- u8 canApproach = TrainerCanApproachPlayer(trainerObj);
+ if (GetTrainerFlagFromScriptPointer(scriptPtr))
+ {
+ return FALSE;
+ }
+ else
+ {
+ struct MapObject *trainerObj = &gMapObjects[mapObjId];
+ bool8 canApproach = TrainerCanApproachPlayer(trainerObj);
- if (canApproach != 0)
+ if (canApproach)
{
- TrainerWantsBattle(trainer, scriptPtr);
- sub_80842C8(trainerObj, (canApproach - 1));
- return TRUE;
+ TrainerWantsBattle(mapObjId, scriptPtr);
+ sub_80842C8(trainerObj, (canApproach - 1));
+ return TRUE;
}
- else
- {
- return FALSE;
- }
- }
+ else
+ {
+ return FALSE;
+ }
+ }
}
bool8 TrainerCanApproachPlayer(struct MapObject *trainerObj)
{
s16 x, y;
u8 i;
- u8 playerCoord;
+ u8 approachDistance;
PlayerGetDestCoords(&x, &y);
- if ( trainerObj->trainerType == 1 ) // trainers that don't spin
+ if (trainerObj->trainerType == 1) // can only see in one direction
{
- playerCoord = gIsTrainerInRange[trainerObj->mapobj_unk_18 - 1](trainerObj, trainerObj->trainerRange_berryTreeId, x, y);
- return CheckPathBetweenTrainerAndPlayer((struct MapObject2 *)trainerObj, playerCoord, trainerObj->mapobj_unk_18);
+ approachDistance = sDirectionalApproachDistanceFuncs[trainerObj->mapobj_unk_18 - 1](trainerObj, trainerObj->trainerRange_berryTreeId, x, y);
+ return CheckPathBetweenTrainerAndPlayer((struct MapObject2 *)trainerObj, approachDistance, trainerObj->mapobj_unk_18);
}
- else // spinners
+ else // can see in all directions
{
for (i = 0; i < 4; i++)
{
- playerCoord = gIsTrainerInRange[i](trainerObj, trainerObj->trainerRange_berryTreeId, x, y);
- if ( CheckPathBetweenTrainerAndPlayer((struct MapObject2 *)trainerObj, playerCoord, i + 1) ) // directions are 1-4 instead of 0-3. south north west east
- return playerCoord;
+ approachDistance = sDirectionalApproachDistanceFuncs[i](trainerObj, trainerObj->trainerRange_berryTreeId, x, y);
+ if (CheckPathBetweenTrainerAndPlayer((struct MapObject2 *)trainerObj, approachDistance, i + 1)) // directions are 1-4 instead of 0-3. south north west east
+ return approachDistance;
}
- return FALSE;
}
+ return FALSE;
}
-bool8 IsTrainerInRangeSouth(struct MapObject *trainerObj, s16 vision, s16 x, s16 y)
+// Returns how far south the player is from trainer. 0 if out of trainer's sight.
+u8 GetTrainerApproachDistanceSouth(struct MapObject *trainerObj, s16 range, s16 x, s16 y)
{
- if ( trainerObj->coords2.x == x
- && y > trainerObj->coords2.y
- && y <= trainerObj->coords2.y + vision )
+ if (trainerObj->coords2.x == x
+ && y > trainerObj->coords2.y
+ && y <= trainerObj->coords2.y + range)
return (y - trainerObj->coords2.y);
else
- return FALSE;
+ return 0;
}
-bool8 IsTrainerInRangeNorth(struct MapObject *trainerObj, s16 vision, s16 x, s16 y)
+// Returns how far north the player is from trainer. 0 if out of trainer's sight.
+u8 GetTrainerApproachDistanceNorth(struct MapObject *trainerObj, s16 range, s16 x, s16 y)
{
- if ( trainerObj->coords2.x == x
- && y < trainerObj->coords2.y
- && y >= trainerObj->coords2.y - vision )
+ if (trainerObj->coords2.x == x
+ && y < trainerObj->coords2.y
+ && y >= trainerObj->coords2.y - range)
return (trainerObj->coords2.y - y);
else
- return FALSE;
+ return 0;
}
-bool8 IsTrainerInRangeWest(struct MapObject *trainerObj, s16 vision, s16 x, s16 y)
+// Returns how far west the player is from trainer. 0 if out of trainer's sight.
+u8 GetTrainerApproachDistanceWest(struct MapObject *trainerObj, s16 range, s16 x, s16 y)
{
- if ( trainerObj->coords2.y == y
- && x < trainerObj->coords2.x
- && x >= trainerObj->coords2.x - vision )
+ if (trainerObj->coords2.y == y
+ && x < trainerObj->coords2.x
+ && x >= trainerObj->coords2.x - range)
return (trainerObj->coords2.x - x);
else
- return FALSE;
+ return 0;
}
-bool8 IsTrainerInRangeEast(struct MapObject *trainerObj, s16 vision, s16 x, s16 y)
+// Returns how far east the player is from trainer. 0 if out of trainer's sight.
+u8 GetTrainerApproachDistanceEast(struct MapObject *trainerObj, s16 range, s16 x, s16 y)
{
- if ( trainerObj->coords2.y == y
- && x > trainerObj->coords2.x
- && x <= trainerObj->coords2.x + vision )
+ if (trainerObj->coords2.y == y
+ && x > trainerObj->coords2.x
+ && x <= trainerObj->coords2.x + range)
return (x - trainerObj->coords2.x);
else
- return FALSE;
+ return 0;
}
#ifdef BUGFIX_TRAINERAPPROACH
@@ -124,25 +143,24 @@ bool8 IsTrainerInRangeEast(struct MapObject *trainerObj, s16 vision, s16 x, s16
#define COLLISION_MASK 1
#endif
-bool8 CheckPathBetweenTrainerAndPlayer(struct MapObject2 *trainerObj, u8 playerCoord, u8 direction)
+bool8 CheckPathBetweenTrainerAndPlayer(struct MapObject2 *trainerObj, u8 approachDistance, u8 direction)
{
s16 x, y;
u8 unk19_temp;
u8 unk19b_temp;
u8 i;
- u8 var;
+ u8 collision;
- if (!playerCoord)
+ if (approachDistance == 0)
return FALSE;
x = trainerObj->coords2.x;
y = trainerObj->coords2.y;
- for (i = 0; i <= playerCoord - 1; i++, MoveCoords(direction, &x, &y))
+ for (i = 0; i <= approachDistance - 1; i++, MoveCoords(direction, &x, &y))
{
- var = sub_8060024((struct MapObject *)trainerObj, x, y, direction);
-
- if (var && (var & COLLISION_MASK))
+ collision = sub_8060024((struct MapObject *)trainerObj, x, y, direction);
+ if (collision != 0 && (collision & COLLISION_MASK))
return FALSE;
}
@@ -152,176 +170,212 @@ bool8 CheckPathBetweenTrainerAndPlayer(struct MapObject2 *trainerObj, u8 playerC
trainerObj->mapobj_unk_19 = 0;
trainerObj->mapobj_unk_19b = 0;
- var = npc_block_way((struct MapObject *)trainerObj, x, y, direction);
+ collision = npc_block_way((struct MapObject *)trainerObj, x, y, direction);
trainerObj->mapobj_unk_19 = unk19_temp;
trainerObj->mapobj_unk_19b = unk19b_temp;
- if (var == 4)
- return playerCoord;
+ if (collision == 4)
+ return approachDistance;
return FALSE;
}
-void sub_80842C8(struct MapObject *trainerObj, u8 taskId)
+#define tTrainerObjHi data[1]
+#define tTrainerObjLo data[2]
+
+void sub_80842C8(struct MapObject *trainerObj, u8 b)
{
- struct Task *task = &gTasks[CreateTask(RunTrainerSeeFuncList, 0x50)];
+ u8 taskId = CreateTask(RunTrainerSeeFuncList, 0x50);
+ struct Task *task = &gTasks[taskId];
- task->data[1] = (u32)(trainerObj) >> 16;
- task->data[2] = (u32)(trainerObj);
- task->data[3] = taskId;
+ task->tTrainerObjHi = (u32)(trainerObj) >> 16;
+ task->tTrainerObjLo = (u32)(trainerObj);
+ task->data[3] = b;
}
-void sub_80842FC(TaskFunc func)
+void sub_80842FC(TaskFunc followupFunc)
{
- TaskFunc func2 = RunTrainerSeeFuncList;
- u8 taskId = FindTaskIdByFunc(func2);
+ TaskFunc taskFunc = RunTrainerSeeFuncList;
+ u8 taskId = FindTaskIdByFunc(taskFunc);
- SetTaskFuncWithFollowupFunc(taskId, RunTrainerSeeFuncList, func);
+ SetTaskFuncWithFollowupFunc(taskId, taskFunc, followupFunc);
gTasks[taskId].data[0] = 1;
- func2(taskId);
-}
+ taskFunc(taskId);
+}
+
+static bool8 sub_8084394(u8 taskId, struct Task *task, struct MapObject *trainerObj);
+static bool8 sub_8084398(u8 taskId, struct Task *task, struct MapObject *trainerObj);
+static bool8 sub_80843DC(u8 taskId, struct Task *task, struct MapObject *trainerObj);
+static bool8 sub_808441C(u8 taskId, struct Task *task, struct MapObject *trainerObj);
+static bool8 sub_8084478(u8 taskId, struct Task *task, struct MapObject *trainerObj);
+static bool8 sub_8084534(u8 taskId, struct Task *task, struct MapObject *trainerObj);
+static bool8 sub_8084578(u8 taskId, struct Task *task, struct MapObject *trainerObj);
+static bool8 sub_80845AC(u8 taskId, struct Task *task, struct MapObject *trainerObj);
+static bool8 sub_80845C8(u8 taskId, struct Task *task, struct MapObject *trainerObj);
+static bool8 sub_80845FC(u8 taskId, struct Task *task, struct MapObject *trainerObj);
+static bool8 sub_8084654(u8 taskId, struct Task *task, struct MapObject *trainerObj);
+static bool8 sub_80846C8(u8 taskId, struct Task *task, struct MapObject *trainerObj);
+
+static bool8 (*const gTrainerSeeFuncList[])(u8 taskId, struct Task *task, struct MapObject *trainerObj) =
+{
+ sub_8084394,
+ sub_8084398,
+ sub_80843DC,
+ sub_808441C,
+ sub_8084478,
+ sub_8084534,
+ sub_8084578,
+ sub_80845AC,
+ sub_80845C8,
+ sub_80845FC,
+ sub_8084654,
+ sub_80846C8,
+};
void RunTrainerSeeFuncList(u8 taskId)
{
struct Task *task = &gTasks[taskId];
- struct MapObject *trainerObj = (struct MapObject *)((task->data[1] << 16) | (task->data[2]));
+ struct MapObject *trainerObj = (struct MapObject *)((task->tTrainerObjHi << 16) | (task->tTrainerObjLo));
if (!trainerObj->active)
+ {
SwitchTaskToFollowupFunc(taskId);
+ }
else
- while (gTrainerSeeFuncList[task->data[0]](taskId, task, trainerObj));
+ {
+ while (gTrainerSeeFuncList[task->data[0]](taskId, task, trainerObj))
+ ;
+ }
}
-u8 sub_8084394() // cant be void because it is called with RunTrainerSeeFuncList with arguments.
+static bool8 sub_8084394(u8 taskId, struct Task *task, struct MapObject *trainerObj) // cant be void because it is called with RunTrainerSeeFuncList with arguments.
{
- return 0;
+ return FALSE;
}
-s8 sub_8084398(u8 taskId, struct Task *task, struct MapObject *trainerObj)
+static bool8 sub_8084398(u8 taskId, struct Task *task, struct MapObject *trainerObj)
{
u8 direction;
- FieldObjectGetLocalIdAndMap(trainerObj, (u8 *)&gUnknown_0202FF84[0], (u8 *)&gUnknown_0202FF84[1], (u8 *)&gUnknown_0202FF84[2]);
- FieldEffectStart(0);
-
+ FieldObjectGetLocalIdAndMap(trainerObj, (u8 *)&gFieldEffectArguments[0], (u8 *)&gFieldEffectArguments[1], (u8 *)&gFieldEffectArguments[2]);
+ FieldEffectStart(FLDEFF_EXCLAMATION_MARK_ICON_1);
direction = GetFaceDirectionAnimId(trainerObj->mapobj_unk_18);
-
FieldObjectSetSpecialAnim(trainerObj, direction);
task->data[0]++;
- return 1;
+ return TRUE;
}
-s8 sub_80843DC(u8 taskId, struct Task *task, struct MapObject *trainerObj)
+static bool8 sub_80843DC(u8 taskId, struct Task *task, struct MapObject *trainerObj)
{
if (FieldEffectActiveListContains(0))
- return 0;
+ {
+ return FALSE;
+ }
else
{
task->data[0]++;
- if ((u8)(trainerObj->animPattern - 57) <= 1)
+ if (trainerObj->animPattern == 57 || trainerObj->animPattern == 58)
task->data[0] = 6;
if (trainerObj->animPattern == 63)
task->data[0] = 8;
- return 1;
+ return TRUE;
}
}
-s8 sub_808441C(u8 taskId, struct Task *task, struct MapObject *trainerObj)
+static bool8 sub_808441C(u8 taskId, struct Task *task, struct MapObject *trainerObj)
{
if (!(FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(trainerObj)) || FieldObjectClearAnimIfSpecialAnimFinished(trainerObj))
{
- if (task->data[3])
- {
- FieldObjectSetSpecialAnim(trainerObj, GetGoSpeed0AnimId(trainerObj->mapobj_unk_18));
- task->data[3]--;
- }
- else
- {
- FieldObjectSetSpecialAnim(trainerObj, 0x3E);
- task->data[0]++;
- }
+ if (task->data[3])
+ {
+ FieldObjectSetSpecialAnim(trainerObj, GetGoSpeed0AnimId(trainerObj->mapobj_unk_18));
+ task->data[3]--;
+ }
+ else
+ {
+ FieldObjectSetSpecialAnim(trainerObj, 0x3E);
+ task->data[0]++;
+ }
}
- return 0;
+ return FALSE;
}
-s8 sub_8084478(u8 taskId, struct Task *task, struct MapObject *trainerObj)
+static bool8 sub_8084478(u8 taskId, struct Task *task, struct MapObject *trainerObj)
{
struct MapObject *playerObj;
if (FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(trainerObj) && !FieldObjectClearAnimIfSpecialAnimFinished(trainerObj))
- return 0;
+ return FALSE;
npc_set_running_behaviour_etc(trainerObj, npc_running_behaviour_by_direction(trainerObj->mapobj_unk_18));
sub_805C774(trainerObj, npc_running_behaviour_by_direction(trainerObj->mapobj_unk_18));
sub_805C754(trainerObj);
playerObj = &gMapObjects[gPlayerAvatar.mapObjectId];
- if (FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(playerObj)
- && !FieldObjectClearAnimIfSpecialAnimFinished(playerObj))
- return 0;
+ if (FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(playerObj) && !FieldObjectClearAnimIfSpecialAnimFinished(playerObj))
+ return FALSE;
sub_80597E8();
FieldObjectSetSpecialAnim(&gMapObjects[gPlayerAvatar.mapObjectId], GetFaceDirectionAnimId(GetOppositeDirection(trainerObj->mapobj_unk_18)));
task->data[0]++;
- return 0;
+ return FALSE;
}
-s8 sub_8084534(u8 taskId, struct Task *task, struct MapObject *trainerObj) // technically only 1 parameter, but needs all 3 for TrainerSeeFuncList call.
+static bool8 sub_8084534(u8 taskId, struct Task *task, struct MapObject *trainerObj) // technically only 1 parameter, but needs all 3 for TrainerSeeFuncList call.
{
struct MapObject *playerObj = &gMapObjects[gPlayerAvatar.mapObjectId];
- if ( !FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(playerObj)
- || FieldObjectClearAnimIfSpecialAnimFinished(playerObj) )
- SwitchTaskToFollowupFunc(taskId);
-
- return 0;
+ if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(playerObj)
+ || FieldObjectClearAnimIfSpecialAnimFinished(playerObj))
+ SwitchTaskToFollowupFunc(taskId);
+ return FALSE;
}
-s8 sub_8084578(u8 taskId, struct Task *task, struct MapObject *trainerObj)
+static bool8 sub_8084578(u8 taskId, struct Task *task, struct MapObject *trainerObj)
{
if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(trainerObj)
- || FieldObjectClearAnimIfSpecialAnimFinished(trainerObj))
+ || FieldObjectClearAnimIfSpecialAnimFinished(trainerObj))
{
FieldObjectSetSpecialAnim(trainerObj, 0x59);
task->data[0]++;
}
- return 0;
+ return FALSE;
}
-s8 sub_80845AC(u8 taskId, struct Task *task, struct MapObject *trainerObj)
+static bool8 sub_80845AC(u8 taskId, struct Task *task, struct MapObject *trainerObj)
{
- if ( FieldObjectClearAnimIfSpecialAnimFinished(trainerObj) )
+ if (FieldObjectClearAnimIfSpecialAnimFinished(trainerObj))
task->data[0] = 3;
- return 0;
+ return FALSE;
}
-s8 sub_80845C8(u8 taskId, struct Task *task, struct MapObject *trainerObj)
+static bool8 sub_80845C8(u8 taskId, struct Task *task, struct MapObject *trainerObj)
{
if (!FieldObjectIsSpecialAnimOrDirectionSequenceAnimActive(trainerObj)
- || FieldObjectClearAnimIfSpecialAnimFinished(trainerObj))
+ || FieldObjectClearAnimIfSpecialAnimFinished(trainerObj))
{
FieldObjectSetSpecialAnim(trainerObj, 0x3E);
task->data[0]++;
}
- return 0;
+ return FALSE;
}
-s8 sub_80845FC(u8 taskId, struct Task *task, struct MapObject *trainerObj)
+static bool8 sub_80845FC(u8 taskId, struct Task *task, struct MapObject *trainerObj)
{
if (FieldObjectCheckIfSpecialAnimFinishedOrInactive(trainerObj))
{
- gUnknown_0202FF84[0] = trainerObj->coords2.x;
- gUnknown_0202FF84[1] = trainerObj->coords2.y;
- gUnknown_0202FF84[2] = gSprites[trainerObj->spriteId].subpriority - 1;
- gUnknown_0202FF84[3] = 2;
- task->data[4] = FieldEffectStart(49);
+ gFieldEffectArguments[0] = trainerObj->coords2.x;
+ gFieldEffectArguments[1] = trainerObj->coords2.y;
+ gFieldEffectArguments[2] = gSprites[trainerObj->spriteId].subpriority - 1;
+ gFieldEffectArguments[3] = 2;
+ task->data[4] = FieldEffectStart(FLDEFF_POP_OUT_OF_ASH);
task->data[0]++;
}
- return 0;
+ return FALSE;
}
-s8 sub_8084654(u8 taskId, struct Task *task, struct MapObject *trainerObj)
+static bool8 sub_8084654(u8 taskId, struct Task *task, struct MapObject *trainerObj)
{
struct Sprite *sprite;
@@ -336,17 +390,25 @@ s8 sub_8084654(u8 taskId, struct Task *task, struct MapObject *trainerObj)
FieldObjectSetSpecialAnim(trainerObj, sub_806084C(trainerObj->mapobj_unk_18));
task->data[0]++;
}
- return 0;
+ return FALSE;
}
-s8 sub_80846C8(u8 taskId, struct Task *task, struct MapObject *trainerObj)
+static bool8 sub_80846C8(u8 taskId, struct Task *task, struct MapObject *trainerObj)
{
if (!FieldEffectActiveListContains(49))
task->data[0] = 3;
- return 0;
+ return FALSE;
}
+static bool8 (*const gTrainerSeeFuncList2[])(u8, struct Task *, struct MapObject *) =
+{
+ sub_80845C8,
+ sub_80845FC,
+ sub_8084654,
+ sub_80846C8,
+};
+
void sub_80846E4(u8 taskId)
{
struct Task *task = &gTasks[taskId];
@@ -375,12 +437,14 @@ void sub_8084794(struct MapObject *var)
StoreWordInTwoHalfwords(&gTasks[CreateTask(sub_80846E4, 0)].data[1], (u32)var);
}
-void sub_80847C8(void)
+static void Task_DestroyTrainerApproachTask(u8);
+
+void ScrSpecial_EndTrainerApproach(void)
{
- sub_80842FC(sub_80847D8);
+ sub_80842FC(Task_DestroyTrainerApproachTask);
}
-void sub_80847D8(u8 taskId)
+static void Task_DestroyTrainerApproachTask(u8 taskId)
{
DestroyTask(taskId);
EnableBothScriptContexts();
@@ -421,9 +485,9 @@ void sub_8084894(struct Sprite *sprite, u16 a2, u8 a3)
sprite->oam.priority = 1;
sprite->coordOffsetEnabled = 1;
- sprite->data0 = gUnknown_0202FF84[0];
- sprite->data1 = gUnknown_0202FF84[1];
- sprite->data2 = gUnknown_0202FF84[2];
+ sprite->data0 = gFieldEffectArguments[0];
+ sprite->data1 = gFieldEffectArguments[1];
+ sprite->data2 = gFieldEffectArguments[2];
sprite->data3 = -5;
sprite->data7 = a2;
diff --git a/src/tv.c b/src/tv.c
index 760b6f176..e9b5e850d 100644
--- a/src/tv.c
+++ b/src/tv.c
@@ -15,7 +15,7 @@
#include "species.h"
#include "pokedex.h"
#include "naming_screen.h"
-#include "rom4.h"
+#include "overworld.h"
#include "map_constants.h"
#include "strings.h"
#include "battle.h"
@@ -31,7 +31,7 @@
#include "pokedex.h"
#include "region_map.h"
#include "rng.h"
-#include "rom4.h"
+#include "overworld.h"
#include "rtc.h"
#include "script_menu.h"
#include "species.h"
@@ -235,7 +235,7 @@ void UpdateTVScreensOnMap(int width, int height)
}
else if (FlagGet(SYS_TV_START) && (sub_80BD8B8() != 0xff || sub_80BECA0() != 0xff || IsTVShowInSearchOfTrainersAiring()))
{
- FlagReset(SYS_TV_WATCH);
+ FlagClear(SYS_TV_WATCH);
SetTVMetatilesOnMap(width, height, 0x3);
}
break;
@@ -388,7 +388,7 @@ bool8 GabbyAndTyGetLastQuote(void)
if (gSaveBlock1.gabbyAndTyData.quote == 0xffff)
return FALSE;
- sub_80EB3FC(gStringVar1, gSaveBlock1.gabbyAndTyData.quote);
+ EasyChat_GetWordText(gStringVar1, gSaveBlock1.gabbyAndTyData.quote);
gSaveBlock1.gabbyAndTyData.quote |= 0xffff;
return TRUE;
}
@@ -942,7 +942,6 @@ void sub_80BE97C(bool8 flag)
void sub_80BE9D4(void)
{
- //TVShow *show;
gUnknown_03005D38.var0 = sub_80BF74C(gSaveBlock1.tvShows);
if (gUnknown_03005D38.var0 != -1 && sub_80BF1B4(TVSHOW_FISHING_ADVICE) != 1)
{
@@ -1624,7 +1623,7 @@ void sub_80BF79C(TVShow *arg0)
break;
i++;
}
- sub_80EB3FC(gStringVar3, arg0->recentHappenings.var04[i]);
+ EasyChat_GetWordText(gStringVar3, arg0->recentHappenings.var04[i]);
}
u8 sub_80BF7E8(struct TVShowNameRaterShow *arg0)
@@ -2575,20 +2574,20 @@ void DoTVShowBravoTrainerPokemonProfile(void)
break;
case 3:
TVShowConvertInternationalString(gStringVar1, bravoTrainer->playerName, bravoTrainer->language);
- sub_80EB3FC(gStringVar2, bravoTrainer->var04[0]);
+ EasyChat_GetWordText(gStringVar2, bravoTrainer->var04[0]);
sub_80BF088(2, bravoTrainer->contestResult + 1);
gUnknown_020387E8 = 5;
break;
case 4:
TVShowConvertInternationalString(gStringVar1, bravoTrainer->playerName, bravoTrainer->language);
- sub_80EB3FC(gStringVar2, bravoTrainer->var04[0]);
+ EasyChat_GetWordText(gStringVar2, bravoTrainer->var04[0]);
sub_80BF088(2, bravoTrainer->contestResult + 1);
gUnknown_020387E8 = 5;
break;
case 5:
TVShowConvertInternationalString(gStringVar1, bravoTrainer->playerName, bravoTrainer->language);
CopyContestCategoryToStringVar(1, bravoTrainer->contestCategory);
- sub_80EB3FC(gStringVar3, bravoTrainer->var04[1]);
+ EasyChat_GetWordText(gStringVar3, bravoTrainer->var04[1]);
if (bravoTrainer->var14)
gUnknown_020387E8 = 6;
else
@@ -2597,7 +2596,7 @@ void DoTVShowBravoTrainerPokemonProfile(void)
case 6:
StringCopy(gStringVar1, gSpeciesNames[bravoTrainer->species]);
StringCopy(gStringVar2, gMoveNames[bravoTrainer->var14]);
- sub_80EB3FC(gStringVar3, bravoTrainer->var04[1]);
+ EasyChat_GetWordText(gStringVar3, bravoTrainer->var04[1]);
gUnknown_020387E8 = 7;
break;
case 7:
@@ -2680,7 +2679,7 @@ void DoTVShowBravoTrainerBattleTowerProfile(void)
gUnknown_020387E8 = 11;
break;
case 11:
- sub_80EB3FC(gStringVar1, bravoTrainerTower->var18[0]);
+ EasyChat_GetWordText(gStringVar1, bravoTrainerTower->var18[0]);
if (bravoTrainerTower->var1b == 0)
gUnknown_020387E8 = 12;
else
@@ -2688,7 +2687,7 @@ void DoTVShowBravoTrainerBattleTowerProfile(void)
break;
case 12:
case 13:
- sub_80EB3FC(gStringVar1, bravoTrainerTower->var18[0]);
+ EasyChat_GetWordText(gStringVar1, bravoTrainerTower->var18[0]);
TVShowConvertInternationalString(gStringVar2, bravoTrainerTower->trainerName, bravoTrainerTower->language);
TVShowConvertInternationalString(gStringVar3, bravoTrainerTower->pokemonName, bravoTrainerTower->language);
gUnknown_020387E8 = 14;
@@ -3106,12 +3105,12 @@ void DoTVShowPokemonFanClubOpinions(void)
case 3:
TVShowConvertInternationalString(gStringVar1, fanclubOpinions->playerName, fanclubOpinions->language);
StringCopy(gStringVar2, gSpeciesNames[fanclubOpinions->var02]);
- sub_80EB3FC(gStringVar3, fanclubOpinions->var1C[0]);
+ EasyChat_GetWordText(gStringVar3, fanclubOpinions->var1C[0]);
gUnknown_020387E8 = 4;
break;
case 4:
TVShowConvertInternationalString(gStringVar1, fanclubOpinions->playerName, fanclubOpinions->language);
- sub_80EB3FC(gStringVar3, fanclubOpinions->var1C[1]);
+ EasyChat_GetWordText(gStringVar3, fanclubOpinions->var1C[1]);
TVShowDone();
break;
}
@@ -3176,7 +3175,7 @@ void DoTVShowInSearchOfTrainers(void)
gUnknown_020387E8 = 8;
break;
case 8:
- sub_80EB3FC(gStringVar1, gSaveBlock1.gabbyAndTyData.quote);
+ EasyChat_GetWordText(gStringVar1, gSaveBlock1.gabbyAndTyData.quote);
StringCopy(gStringVar2, gSpeciesNames[gSaveBlock1.gabbyAndTyData.mon1]);
StringCopy(gStringVar3, gSpeciesNames[gSaveBlock1.gabbyAndTyData.mon2]);
gScriptResult = 1;
diff --git a/src/unknown_task.c b/src/unknown_task.c
index 81b89ef92..5ec7fa6bc 100644
--- a/src/unknown_task.c
+++ b/src/unknown_task.c
@@ -2,11 +2,12 @@
#include "data2.h"
#include "task.h"
#include "trig.h"
+#include "unknown_task.h"
struct UnknownStruct1
{
void *src[2];
- void *dest;
+ volatile void *dest;
u32 unkC;
void (*unk10)(void);
u8 srcBank;
@@ -17,14 +18,6 @@ struct UnknownStruct1
u8 filler19[0x7];
};
-struct UnknownStruct2
-{
- void *dest;
- u32 control;
- u8 unk8;
- u8 unk9;
-};
-
static void sub_80896F4(void);
static void sub_8089714(void);
@@ -68,7 +61,7 @@ void dp12_8087EA4(void)
gUnknown_03004DC0.taskId = 0xFF;
}
-void sub_80895F8(struct UnknownStruct2 unk)
+void sub_80895F8(struct UnknownTaskStruct unk)
{
if (unk.control == (((DMA_ENABLE | DMA_START_HBLANK | DMA_REPEAT | DMA_DEST_RELOAD) << 16) | 1))
{
@@ -214,7 +207,7 @@ u8 sub_8089944(u8 a1, u8 a2, u8 a3, u8 a4, u8 a5, u8 a6, u8 a7)
{
int i;
int offset;
- struct UnknownStruct2 unk;
+ struct UnknownTaskStruct unk;
u8 taskId;
dp12_8087EA4();
diff --git a/src/use_pokeblock.c b/src/use_pokeblock.c
index 3aa2f1fa5..e946a9cfc 100644
--- a/src/use_pokeblock.c
+++ b/src/use_pokeblock.c
@@ -1,10 +1,11 @@
//
-// Created by Scott Norton on 5/31/17.
+
+// Modified by Dizzy Egg on 8/15/17.
//
#include "global.h"
#include "main.h"
-#include "rom4.h"
+#include "overworld.h"
#include "string_util.h"
#include "strings.h"
#include "sprite.h"
@@ -16,8 +17,6 @@
#include "sound.h"
#include "songs.h"
#include "pokeblock.h"
-#include "pokeblock_feed.h"
-#include "use_pokeblock.h"
#define GFX_TAG_CONDITIONUPDOWN 0
@@ -29,7 +28,7 @@ const u16 ConditionUpDownPalette[] = INCBIN_U16("graphics/misc/condition_up_down
const u32 ConditionUpDownTiles[] = INCBIN_U32("graphics/misc/condition_up_down.4bpp");
#endif
-const u32 gUnknown_08406118[] = {
+static const u32 sContestStatsMonData[] = {
MON_DATA_COOL,
MON_DATA_TOUGH,
MON_DATA_SMART,
@@ -37,11 +36,11 @@ const u32 gUnknown_08406118[] = {
MON_DATA_BEAUTY
};
-const u8 gUnknown_0840612C[] = {
+static const u8 gUnknown_0840612C[] = {
0, 4, 3, 2, 1
};
-const u8 *const gUnknown_08406134[] = {
+static const u8 *const sContextStatNames[] = {
OtherText_Coolness,
OtherText_Toughness,
OtherText_Smartness,
@@ -49,18 +48,18 @@ const u8 *const gUnknown_08406134[] = {
OtherText_Beauty
};
-const struct SpriteSheet gSpriteSheet_ConditionUpDown = {
+static const struct SpriteSheet gSpriteSheet_ConditionUpDown = {
(u8 *)ConditionUpDownTiles,
sizeof ConditionUpDownTiles,
GFX_TAG_CONDITIONUPDOWN
};
-const struct SpritePalette gSpritePalette_ConditionUpDown = {
+static const struct SpritePalette gSpritePalette_ConditionUpDown = {
ConditionUpDownPalette,
GFX_TAG_CONDITIONUPDOWN
};
-const s16 gUnknown_08406158[][2] = {
+static const s16 gUnknown_08406158[][2] = {
{0x9c, 0x1e},
{0x75, 0x35},
{0x75, 0x70},
@@ -68,28 +67,28 @@ const s16 gUnknown_08406158[][2] = {
{0xc5, 0x35}
};
-const struct OamData gOamData_840616C = {
+static const struct OamData gOamData_840616C = {
.shape = 1,
.size = 2,
.priority = 1
};
-const union AnimCmd gSpriteAnim_8406174[] = {
+static const union AnimCmd gSpriteAnim_8406174[] = {
ANIMCMD_FRAME(0, 5),
ANIMCMD_END
};
-const union AnimCmd gSpriteAnim_840617C[] = {
+static const union AnimCmd gSpriteAnim_840617C[] = {
ANIMCMD_FRAME(8, 5),
ANIMCMD_END
};
-const union AnimCmd *const gSpriteAnimTable_8406184[] = {
+static const union AnimCmd *const gSpriteAnimTable_8406184[] = {
gSpriteAnim_8406174,
gSpriteAnim_840617C
};
-const struct SpriteTemplate gSpriteTemplate_840618C = {
+static const struct SpriteTemplate gSpriteTemplate_840618C = {
GFX_TAG_CONDITIONUPDOWN,
GFX_TAG_CONDITIONUPDOWN,
&gOamData_840616C,
@@ -99,47 +98,44 @@ const struct SpriteTemplate gSpriteTemplate_840618C = {
SpriteCallbackDummy
};
-asm(".text\n"
- ".include \"constants/gba_constants.inc\"");
-
static EWRAM_DATA struct UnkPokenavStruct_Sub1 *gUnknown_02039304 = NULL;
static EWRAM_DATA MainCallback gUnknown_02039308 = NULL;
static EWRAM_DATA struct Pokeblock *gUnknown_0203930C = NULL;
-EWRAM_DATA u8 gUnknown_02039310 = 0;
-EWRAM_DATA s16 gUnknown_02039312 = 0;
+EWRAM_DATA u8 gPokeblockMonID = 0;
+EWRAM_DATA s16 gPokeblockGain = 0;
extern u16 gKeyRepeatStartDelay;
extern u16 gScriptItemId; // FIXME: remove after merge of #349 Pokeblock
-void launch_c3_walk_stairs_and_run_once(void (*const)(void));
-void sub_81361E4(void);
-void sub_813622C(void);
-void sub_8136244(void);
-void sub_8136264(void);
-void sub_8136294(void);
-void sub_81365A0(void);
-void sub_81365C8(void);
-void sub_8136638(void);
-void sub_81368A4(void);
+static void launch_c3_walk_stairs_and_run_once(void (*const)(void));
+static void sub_81361E4(void);
+static void sub_813622C(void);
+static void sub_8136244(void);
+static void sub_8136264(void);
+static void sub_8136294(void);
+static void sub_81365A0(void);
+static void sub_81365C8(void);
+static void sub_8136638(void);
+static void sub_81368A4(void);
void sub_8089668(void);
-void sub_8136B44(void);
-u8 sub_81370E4(u8);
-void sub_8136BB8(void);
-s8 sub_8136C40(void);
-bool8 sub_8137058(void);
-void sub_8136D60(void);
-void sub_8136808(void);
-void sub_8136D8C(void);
-u8 sub_81370A4(u8);
-void sub_81369CC(void);
-void sub_8136EF0(void);
-void sub_8137138(void);
-void sub_8136C6C(void);
-bool8 sub_8136D00(void);
-void sub_8136DC0(u8 *, u8, s16);
-void sub_8136DA0(const u8 *);
-void sub_8136F74(struct Pokeblock *, struct Pokemon *);
-void sub_81371DC(struct Sprite *);
+static void sub_8136B44(void);
+static u8 sub_81370E4(u8);
+static void sub_8136BB8(void);
+static s8 sub_8136C40(void);
+static bool8 sub_8137058(void);
+static void sub_8136D60(void);
+static void sub_8136808(void);
+static void sub_8136D8C(void);
+static u8 sub_81370A4(u8);
+static void sub_81369CC(void);
+static void sub_8136EF0(void);
+static void sub_8137138(void);
+static void sub_8136C6C(void);
+static bool8 sub_8136D00(void);
+static void Pokeblock_BufferEnhancedStatText(u8 *, u8, s16);
+static void Pokeblock_MenuWindowTextPrint(const u8 *);
+static void sub_8136F74(struct Pokeblock *, struct Pokemon *);
+static void sub_81371DC(struct Sprite *);
void sub_8136130(struct Pokeblock *pokeblock, MainCallback callback)
{
@@ -151,18 +147,18 @@ void sub_8136130(struct Pokeblock *pokeblock, MainCallback callback)
SetMainCallback2(sub_8136244);
}
-void sub_8136174(void)
+static void sub_8136174(void)
{
gUnknown_02039304->pokeblock = gUnknown_0203930C;
gUnknown_02039304->callback = gUnknown_02039308;
- gUnknown_02039310 = sub_81370E4(gUnknown_02039310);
- gUnknown_02039304->unk56 = gUnknown_02039310 < 4 ? 0 : 1;
+ gPokeblockMonID = sub_81370E4(gPokeblockMonID);
+ gUnknown_02039304->unk56 = gPokeblockMonID < 4 ? 0 : 1;
gUnknown_083DFEC4->unkD162[0] = 2;
launch_c3_walk_stairs_and_run_once(sub_8136294);
SetMainCallback2(sub_81361E4);
}
-void sub_81361E4(void)
+static void sub_81361E4(void)
{
gUnknown_02039304->unk0();
AnimateSprites();
@@ -176,7 +172,7 @@ void sub_81361E4(void)
}
}
-void sub_813622C(void)
+static void sub_813622C(void)
{
sub_81368A4();
AnimateSprites();
@@ -184,7 +180,7 @@ void sub_813622C(void)
UpdatePaletteFade();
}
-void sub_8136244(void)
+static void sub_8136244(void)
{
gUnknown_02039304->unk0();
AnimateSprites();
@@ -192,7 +188,7 @@ void sub_8136244(void)
UpdatePaletteFade();
}
-void sub_8136264(void)
+static void sub_8136264(void)
{
LoadOam();
ProcessSpriteCopyRequests();
@@ -201,13 +197,13 @@ void sub_8136264(void)
sub_8089668();
}
-void launch_c3_walk_stairs_and_run_once(void (*const func)(void))
+static void launch_c3_walk_stairs_and_run_once(void (*const func)(void))
{
gUnknown_02039304->unk0 = func;
gUnknown_02039304->unk50 = 0;
}
-void sub_8136294(void)
+static void sub_8136294(void)
{
bool32 c1LinkRelatedActive;
switch (gUnknown_02039304->unk50)
@@ -346,7 +342,7 @@ void sub_8136294(void)
}
}
-void sub_81365A0(void)
+static void sub_81365A0(void)
{
while (!gUnknown_02039304->unk55)
{
@@ -354,7 +350,7 @@ void sub_81365A0(void)
}
}
-void sub_81365C8(void)
+static void sub_81365C8(void)
{
switch (gUnknown_02039304->unk50)
{
@@ -374,7 +370,7 @@ void sub_81365C8(void)
}
}
-void sub_8136638(void)
+static void sub_8136638(void)
{
switch (gUnknown_02039304->unk50)
{
@@ -464,12 +460,12 @@ void sub_8136638(void)
}
}
-void sub_8136808(void)
+static void sub_8136808(void)
{
switch (gUnknown_02039304->unk50)
{
case 0:
- gUnknown_02039310 = sub_81370A4(gUnknown_083DFEC4->unk87DC);
+ gPokeblockMonID = sub_81370A4(gUnknown_083DFEC4->unk87DC);
gUnknown_02039308 = gUnknown_02039304->callback;
gUnknown_0203930C = gUnknown_02039304->pokeblock;
BeginNormalPaletteFade(-1, 0, 0, 16, 0);
@@ -479,18 +475,18 @@ void sub_8136808(void)
if (!gPaletteFade.active)
{
gMain.savedCallback = sub_8136174;
- SetMainCallback2(sub_8147ADC);
+ SetMainCallback2(CB2_PreparePokeblockFeedScene);
}
break;
}
}
-void sub_81368A4(void)
+static void sub_81368A4(void)
{
switch (gUnknown_02039304->unk50)
{
case 0:
- if (gUnknown_083DFEC4->unk87DC != gUnknown_02039310)
+ if (gUnknown_083DFEC4->unk87DC != gPokeblockMonID)
{
sub_80F5060(gUnknown_02039304->unk56);
gUnknown_02039304->unk50++;
@@ -538,7 +534,7 @@ void sub_81368A4(void)
}
}
-void sub_81369CC(void)
+static void sub_81369CC(void)
{
switch (gUnknown_02039304->unk50)
{
@@ -578,14 +574,14 @@ void sub_81369CC(void)
case 5:
if (gMain.newKeys & (A_BUTTON | B_BUTTON) && !sub_8136D00())
{
- sub_810CA6C((u8)gScriptItemId);
+ PokeblockClearIfExists((u8)gScriptItemId);
launch_c3_walk_stairs_and_run_once(sub_8136B44);
}
break;
}
}
-void sub_8136B44(void)
+static void sub_8136B44(void)
{
switch (gUnknown_02039304->unk50)
{
@@ -609,7 +605,7 @@ void sub_8136B44(void)
}
}
-void sub_8136BB8(void)
+static void sub_8136BB8(void)
{
GetMonData(&gPlayerParty[sub_81370A4(gUnknown_083DFEC4->unk87DC)], MON_DATA_NICKNAME, gUnknown_02039304->stringBuffer);
StringGetEnd10(gUnknown_02039304->stringBuffer);
@@ -621,7 +617,7 @@ void sub_8136BB8(void)
MoveMenuCursor(0);
}
-s8 sub_8136C40(void)
+static s8 sub_8136C40(void)
{
s8 retval = ProcessMenuInputNoWrap();
if ((u8)(retval + 1) < 3)
@@ -632,124 +628,68 @@ s8 sub_8136C40(void)
return retval;
}
-void sub_8136C6C(void)
+static void sub_8136C6C(void)
{
BasicInitMenuWindow(&gWindowConfig_81E709C);
MenuDrawTextWindow(0, 16, 29, 19);
for (gUnknown_02039304->unk53 = 0; gUnknown_02039304->unk53 < 5 && gUnknown_02039304->unk61[gUnknown_02039304->unk53] == 0; gUnknown_02039304->unk53++);
if (gUnknown_02039304->unk53 < 5)
{
- sub_8136DC0(gUnknown_02039304->stringBuffer, gUnknown_02039304->unk53, gUnknown_02039304->unk61[gUnknown_02039304->unk53]);
+ Pokeblock_BufferEnhancedStatText(gUnknown_02039304->stringBuffer, gUnknown_02039304->unk53, gUnknown_02039304->unk61[gUnknown_02039304->unk53]);
}
else
{
- sub_8136DC0(gUnknown_02039304->stringBuffer, gUnknown_02039304->unk53, 0);
+ Pokeblock_BufferEnhancedStatText(gUnknown_02039304->stringBuffer, gUnknown_02039304->unk53, 0);
}
- sub_8136DA0(gUnknown_02039304->stringBuffer);
+ Pokeblock_MenuWindowTextPrint(gUnknown_02039304->stringBuffer);
}
-#ifdef NONMATCHING
-bool8 sub_8136D00(void)
+static bool8 sub_8136D00(void)
{
while (1)
{
- if (++gUnknown_02039304->unk53 >= 5)
+ gUnknown_02039304->unk53++;
+ if (gUnknown_02039304->unk53 < 5)
{
- break;
+ if (gUnknown_02039304->unk61[gUnknown_02039304->unk53] != 0)
+ break;
}
- if (gUnknown_02039304->unk61[gUnknown_02039304->unk53] != 0)
+ else
{
- sub_8136DC0(gUnknown_02039304->stringBuffer, gUnknown_02039304->unk53, gUnknown_02039304->unk61[gUnknown_02039304->unk53]);
- sub_8136DA0(gUnknown_02039304->stringBuffer);
- return TRUE;
+ gUnknown_02039304->unk53 = 5;
+ return FALSE;
}
}
- gUnknown_02039304->unk53 = 5;
- return FALSE;
-}
-#else
-__attribute__((naked))
-bool8 sub_8136D00(void)
-{
- asm_unified("\tpush {r4,r5,lr}\n"
- "\tldr r4, _08136D30 @ =gUnknown_02039304\n"
- "\tadds r3, r4, 0\n"
- "\tmovs r5, 0x5\n"
- "_08136D08:\n"
- "\tldr r0, [r3]\n"
- "\tadds r0, 0x53\n"
- "\tldrb r1, [r0]\n"
- "\tadds r1, 0x1\n"
- "\tstrb r1, [r0]\n"
- "\tldr r2, [r3]\n"
- "\tadds r1, r2, 0\n"
- "\tadds r1, 0x53\n"
- "\tldrb r0, [r1]\n"
- "\tcmp r0, 0x4\n"
- "\tbhi _08136D34\n"
- "\tadds r0, r2, 0\n"
- "\tadds r0, 0x61\n"
- "\tldrb r1, [r1]\n"
- "\tadds r0, r1\n"
- "\tldrb r0, [r0]\n"
- "\tcmp r0, 0\n"
- "\tbne _08136D3A\n"
- "\tb _08136D08\n"
- "\t.align 2, 0\n"
- "_08136D30: .4byte gUnknown_02039304\n"
- "_08136D34:\n"
- "\tstrb r5, [r1]\n"
- "\tmovs r0, 0\n"
- "\tb _08136D5A\n"
- "_08136D3A:\n"
- "\tldr r2, [r4]\n"
- "\tadds r0, r2, 0\n"
- "\tadds r0, 0x10\n"
- "\tadds r1, r2, 0\n"
- "\tadds r1, 0x53\n"
- "\tldrb r1, [r1]\n"
- "\tadds r2, 0x61\n"
- "\tadds r2, r1\n"
- "\tldrb r2, [r2]\n"
- "\tbl sub_8136DC0\n"
- "\tldr r0, [r4]\n"
- "\tadds r0, 0x10\n"
- "\tbl sub_8136DA0\n"
- "\tmovs r0, 0x1\n"
- "_08136D5A:\n"
- "\tpop {r4,r5}\n"
- "\tpop {r1}\n"
- "\tbx r1");
+ Pokeblock_BufferEnhancedStatText(gUnknown_02039304->stringBuffer, gUnknown_02039304->unk53, gUnknown_02039304->unk61[gUnknown_02039304->unk53]);
+ Pokeblock_MenuWindowTextPrint(gUnknown_02039304->stringBuffer);
+ return TRUE;
}
-#endif
-void sub_8136D60(void)
+static void sub_8136D60(void)
{
BasicInitMenuWindow(&gWindowConfig_81E709C);
MenuDrawTextWindow(0, 16, 29, 19);
MenuPrint(gOtherText_WontEat, 1, 17);
}
-void sub_8136D8C(void)
+static void sub_8136D8C(void)
{
MenuZeroFillScreen();
BasicInitMenuWindow(&gWindowConfig_81E7080);
}
-void sub_8136DA0(const u8 *message)
+static void Pokeblock_MenuWindowTextPrint(const u8 *message)
{
MenuDrawTextWindow(0, 16, 29, 19);
MenuPrint(message, 1, 17);
}
#ifdef NONMATCHING
-void sub_8136DC0(u8 *dest, u8 a1, s16 a2)
+static void Pokeblock_BufferEnhancedStatText(u8 *dest, u8 statID, s16 a2)
{
- u16 v0 = a2;
if (a2 != 0)
{
- if ((v0 = max(a2, 0)) == 0);
- StringCopy(dest, gUnknown_08406134[a1]);
+ StringCopy(dest, sContextStatNames[statID]);
StringAppend(dest, gOtherText_WasEnhanced);
}
else
@@ -759,7 +699,7 @@ void sub_8136DC0(u8 *dest, u8 a1, s16 a2)
}
#else
__attribute__((naked))
-void sub_8136DC0(u8 *dest, u8 a1, s16 a2)
+static void Pokeblock_BufferEnhancedStatText(u8 *dest, u8 a1, s16 a2)
{
asm_unified("\tpush {r4,lr}\n"
"\tadds r4, r0, 0\n"
@@ -775,7 +715,7 @@ void sub_8136DC0(u8 *dest, u8 a1, s16 a2)
"\tmovs r0, 0\n"
"_08136DD8:\n"
"\tlsls r0, 16\n"
- "\tldr r1, _08136DF4 @ =gUnknown_08406134\n"
+ "\tldr r1, _08136DF4 @ =sContextStatNames\n"
"\tlsls r0, r3, 2\n"
"\tadds r0, r1\n"
"\tldr r1, [r0]\n"
@@ -786,7 +726,7 @@ void sub_8136DC0(u8 *dest, u8 a1, s16 a2)
"\tbl StringAppend\n"
"\tb _08136E04\n"
"\t.align 2, 0\n"
- "_08136DF4: .4byte gUnknown_08406134\n"
+ "_08136DF4: .4byte sContextStatNames\n"
"_08136DF8: .4byte gOtherText_WasEnhanced\n"
"_08136DFC:\n"
"\tldr r1, _08136E0C @ =gOtherText_NothingChanged\n"
@@ -801,16 +741,16 @@ void sub_8136DC0(u8 *dest, u8 a1, s16 a2)
}
#endif
-void sub_8136E10(struct Pokemon *pokemon, u8 *data)
+static void Pokeblock_GetMonContestStats(struct Pokemon *pokemon, u8 *data)
{
u16 i;
for (i=0; i<5; i++)
{
- data[i] = GetMonData(pokemon, gUnknown_08406118[i]);
+ data[i] = GetMonData(pokemon, sContestStatsMonData[i]);
}
}
-void sub_8136E40(struct Pokeblock *pokeblock, struct Pokemon *pokemon)
+static void sub_8136E40(struct Pokeblock *pokeblock, struct Pokemon *pokemon)
{
u16 i;
s16 cstat;
@@ -820,14 +760,14 @@ void sub_8136E40(struct Pokeblock *pokeblock, struct Pokemon *pokemon)
sub_8136F74(pokeblock, pokemon);
for (i=0; i<5; i++)
{
- data = GetMonData(pokemon, gUnknown_08406118[i]);
+ data = GetMonData(pokemon, sContestStatsMonData[i]);
cstat = data + gUnknown_02039304->unk66[i];
if (cstat < 0)
cstat = 0;
if (cstat > 255)
cstat = 255;
data = cstat;
- SetMonData(pokemon, gUnknown_08406118[i], &data);
+ SetMonData(pokemon, sContestStatsMonData[i], &data);
}
cstat = (u8)GetMonData(pokemon, MON_DATA_SHEEN);
cstat = cstat + pokeblock->feel;
@@ -838,21 +778,21 @@ void sub_8136E40(struct Pokeblock *pokeblock, struct Pokemon *pokemon)
}
}
-void sub_8136EF0(void)
+static void sub_8136EF0(void)
{
u16 i;
struct Pokemon *pokemon = gPlayerParty;
pokemon += gUnknown_083DFEC4->unk893c[gUnknown_083DFEC4->unk87DC].partyIdx;
- sub_8136E10(pokemon, gUnknown_02039304->unk57);
+ Pokeblock_GetMonContestStats(pokemon, gUnknown_02039304->unk57);
sub_8136E40(gUnknown_02039304->pokeblock, pokemon);
- sub_8136E10(pokemon, gUnknown_02039304->unk5c);
+ Pokeblock_GetMonContestStats(pokemon, gUnknown_02039304->unk5c);
for (i=0; i<5; i++)
{
gUnknown_02039304->unk61[i] = gUnknown_02039304->unk5c[i] - gUnknown_02039304->unk57[i];
}
}
-void sub_8136F74(struct Pokeblock *pokeblock, struct Pokemon *pokemon)
+static void sub_8136F74(struct Pokeblock *pokeblock, struct Pokemon *pokemon)
{
s8 direction;
s8 i;
@@ -864,9 +804,9 @@ void sub_8136F74(struct Pokeblock *pokeblock, struct Pokemon *pokemon)
gUnknown_02039304->unk66[2] = pokeblock->bitter;
gUnknown_02039304->unk66[3] = pokeblock->sweet;
gUnknown_02039304->unk66[4] = pokeblock->dry;
- if (gUnknown_02039312 > 0)
+ if (gPokeblockGain > 0)
direction = 1;
- else if (gUnknown_02039312 < 0)
+ else if (gPokeblockGain < 0)
direction = -1;
else
return;
@@ -884,7 +824,7 @@ void sub_8136F74(struct Pokeblock *pokeblock, struct Pokemon *pokemon)
}
}
-bool8 sub_8137058(void)
+static bool8 sub_8137058(void)
{
struct Pokemon *pokemon = gPlayerParty;
pokemon += gUnknown_083DFEC4->unk893c[gUnknown_083DFEC4->unk87DC].partyIdx;
@@ -893,7 +833,7 @@ bool8 sub_8137058(void)
return FALSE;
}
-u8 sub_81370A4(u8 a0)
+static u8 sub_81370A4(u8 a0)
{
u8 i;
for (i=0; i<PARTY_SIZE; i++)
@@ -908,7 +848,7 @@ u8 sub_81370A4(u8 a0)
return 0;
}
-u8 sub_81370E4(u8 a0)
+static u8 sub_81370E4(u8 a0)
{
u8 ct;
u8 i;
@@ -927,7 +867,7 @@ u8 sub_8137124(u8 a0)
return sub_81370A4(a0);
}
-void sub_8137138(void)
+static void sub_8137138(void)
{
u16 flavor;
u8 spriteidx;
@@ -951,7 +891,7 @@ void sub_8137138(void)
}
}
-void sub_81371DC(struct Sprite *sprite)
+static void sub_81371DC(struct Sprite *sprite)
{
if (sprite->data0 <= 5)
sprite->pos2.y -= 2;
diff --git a/src/wild_encounter.c b/src/wild_encounter.c
index 96f47c067..390898917 100644
--- a/src/wild_encounter.c
+++ b/src/wild_encounter.c
@@ -5,11 +5,12 @@
#include "event_data.h"
#include "field_player_avatar.h"
#include "fieldmap.h"
+#include "map_constants.h"
#include "metatile_behavior.h"
#include "pokeblock.h"
#include "rng.h"
#include "roamer.h"
-#include "rom4.h"
+#include "overworld.h"
#include "safari_zone.h"
#include "script.h"
#include "species.h"
@@ -2901,7 +2902,7 @@ const struct WildPokemonInfo Underwater2_WaterMonsInfo = {4, Underwater2_WaterMo
extern u16 gRoute119WaterTileData[];
extern u16 gScriptResult;
extern struct WildPokemon gWildFeebasRoute119Data;
-extern u8 Event_RepelWoreOff[];
+extern u8 S_RepelWoreOff[];
EWRAM_DATA static u8 sWildEncountersDisabled = 0;
EWRAM_DATA static u32 sFeebasRngValue = 0;
@@ -2911,7 +2912,7 @@ EWRAM_DATA static u32 sFeebasRngValue = 0;
static u16 FeebasRandom(void);
static void FeebasSeedRng(u16 seed);
-static bool8 RepelCheck(u8 level);
+static bool8 IsWildLevelAllowedByRepel(u8 level);
static void ApplyFluteEncounterRateMod(u32 *encRate);
static void ApplyCleanseTagEncounterRateMod(u32 *encRate);
@@ -2952,7 +2953,8 @@ static bool8 CheckFeebas(void)
u8 route119section = 0;
u16 waterTileNum;
- if (gSaveBlock1.location.mapGroup == 0 && gSaveBlock1.location.mapNum == 0x22)
+ if (gSaveBlock1.location.mapGroup == MAP_GROUP_ROUTE119
+ && gSaveBlock1.location.mapNum == MAP_ID_ROUTE119)
{
GetXYCoordsOneStepInFrontOfPlayer(&x, &y);
x -= 7;
@@ -3161,7 +3163,7 @@ static u8 PickWildMonNature(void)
}
for (i = 0; i < 25; i++)
{
- if (sub_810CAE4(natures[i], safariPokeblock) > 0)
+ if (PokeblockGetGain(natures[i], safariPokeblock) > 0)
return natures[i];
}
}
@@ -3193,7 +3195,7 @@ static bool8 GenerateWildMon(struct WildPokemonInfo *wildMonInfo, u8 area, bool8
break;
}
level = ChooseWildMonLevel(&wildMonInfo->wildPokemon[wildMonIndex]);
- if (checkRepel == TRUE && RepelCheck(level) == FALSE)
+ if (checkRepel == TRUE && IsWildLevelAllowedByRepel(level) == FALSE)
return FALSE;
else
{
@@ -3215,7 +3217,7 @@ static bool8 SetUpMassOutbreakEncounter(bool8 checkRepel)
{
u16 i;
- if (checkRepel == TRUE && RepelCheck(gSaveBlock1.outbreakPokemonLevel) == 0)
+ if (checkRepel == TRUE && IsWildLevelAllowedByRepel(gSaveBlock1.outbreakPokemonLevel) == FALSE)
return FALSE;
else
{
@@ -3302,9 +3304,9 @@ bool8 StandardWildEncounter(u16 a, u16 b)
if (TryStartRoamerEncounter() == TRUE)
{
roamer = &gSaveBlock1.roamer;
- if (RepelCheck(roamer->level))
+ if (IsWildLevelAllowedByRepel(roamer->level))
{
- StartBattle_Roamer();
+ BattleSetup_StartRoamerBattle();
return 1;
}
}
@@ -3312,7 +3314,7 @@ bool8 StandardWildEncounter(u16 a, u16 b)
{
if (DoMassOutbreakEncounterTest() == TRUE && SetUpMassOutbreakEncounter(1) == TRUE)
{
- CheckForSafariZoneAndProceed();
+ BattleSetup_StartWildBattle();
return 1;
}
if (GenerateWildMon(gWildMonHeaders[headerNum].landMonsInfo, 0, TRUE) == TRUE)
@@ -3336,9 +3338,9 @@ bool8 StandardWildEncounter(u16 a, u16 b)
if (TryStartRoamerEncounter() == TRUE)
{
roamer = &gSaveBlock1.roamer;
- if (RepelCheck(roamer->level))
+ if (IsWildLevelAllowedByRepel(roamer->level))
{
- StartBattle_Roamer();
+ BattleSetup_StartRoamerBattle();
return 1;
}
}
@@ -3349,7 +3351,7 @@ bool8 StandardWildEncounter(u16 a, u16 b)
{
label:
//_0808527A
- CheckForSafariZoneAndProceed();
+ BattleSetup_StartWildBattle();
return 1;
}
}
@@ -3361,7 +3363,7 @@ bool8 StandardWildEncounter(u16 a, u16 b)
return 0;
}
-void RockSmashWildEncounter(void)
+void ScrSpecial_RockSmashWildEncounter(void)
{
u16 headerNum = GetCurrentMapWildMonHeader();
@@ -3377,7 +3379,7 @@ void RockSmashWildEncounter(void)
else if (DoWildEncounterTest(wildPokemonInfo->encounterRate, 1) == TRUE
&& GenerateWildMon(wildPokemonInfo, 2, TRUE) == TRUE)
{
- CheckForSafariZoneAndProceed();
+ BattleSetup_StartWildBattle();
gScriptResult = 1;
return;
}
@@ -3403,14 +3405,14 @@ bool8 SweetScentWildEncounter(void)
return FALSE;
if (TryStartRoamerEncounter() == TRUE)
{
- StartBattle_Roamer();
+ BattleSetup_StartRoamerBattle();
return TRUE;
}
if (DoMassOutbreakEncounterTest() == TRUE)
- SetUpMassOutbreakEncounter(0);
+ SetUpMassOutbreakEncounter(FALSE);
else
GenerateWildMon(wildPokemonInfo, 0, FALSE);
- CheckForSafariZoneAndProceed();
+ BattleSetup_StartWildBattle();
return TRUE;
}
else if (MetatileBehavior_IsWaterWildEncounter(MapGridGetMetatileBehaviorAt(x, y)) == 1)
@@ -3420,18 +3422,18 @@ bool8 SweetScentWildEncounter(void)
return FALSE;
if (TryStartRoamerEncounter() == TRUE)
{
- StartBattle_Roamer();
+ BattleSetup_StartRoamerBattle();
return TRUE;
}
GenerateWildMon(wildPokemonInfo, 1, FALSE);
- CheckForSafariZoneAndProceed();
+ BattleSetup_StartWildBattle();
return TRUE;
}
}
return FALSE;
}
-bool8 GetFishingWildMonListHeader(void)
+bool8 DoesCurrentMapHaveFishingMons(void)
{
u16 headerNum = GetCurrentMapWildMonHeader();
@@ -3460,7 +3462,7 @@ void FishingWildEncounter(u8 rod)
}
IncrementGameStat(12);
sub_80BEA50(species);
- CheckForSafariZoneAndProceed();
+ BattleSetup_StartWildBattle();
}
u16 GetLocalWildMon(bool8 *isWaterMon)
@@ -3497,7 +3499,7 @@ u16 GetLocalWildMon(bool8 *isWaterMon)
}
}
-u16 GetMirageIslandMon(void)
+u16 GetLocalWaterMon(void)
{
u16 headerNum = GetCurrentMapWildMonHeader();
@@ -3521,20 +3523,21 @@ bool8 UpdateRepelCounter(void)
VarSet(VAR_REPEL_STEP_COUNT, steps);
if (steps == 0)
{
- ScriptContext1_SetupScript(Event_RepelWoreOff);
+ ScriptContext1_SetupScript(S_RepelWoreOff);
return TRUE;
}
}
return FALSE;
}
-//Returns FALSE if Repel prevents wild Pokemon at the specified level from appearing
-static bool8 RepelCheck(u8 level)
+static bool8 IsWildLevelAllowedByRepel(u8 wildLevel)
{
u8 i;
if (!VarGet(VAR_REPEL_STEP_COUNT))
+ {
return TRUE;
+ }
else
{
for (i = 0; i < 6; i++)
@@ -3542,7 +3545,9 @@ static bool8 RepelCheck(u8 level)
// UB: Too few arguments for function 'GetMonData'
if (GetMonData(&gPlayerParty[i], MON_DATA_HP) && !GetMonData(&gPlayerParty[i], MON_DATA_IS_EGG))
{
- if (level < (u8)GetMonData(&gPlayerParty[i], MON_DATA_LEVEL))
+ u8 ourLevel = GetMonData(&gPlayerParty[i], MON_DATA_LEVEL);
+
+ if (wildLevel < ourLevel)
return FALSE;
else
return TRUE;
diff --git a/sym_bss.txt b/sym_bss.txt
index 3f9757d64..aa16612ed 100644
--- a/sym_bss.txt
+++ b/sym_bss.txt
@@ -4,38 +4,11 @@
.include "src/string_util.o"
.include "src/link.o"
.include "src/rtc.o"
-
-@ daycare
-
- .align 2
-gUnknown_03000470: @ 3000470
- .space 0x68
-
-gUnknown_030004D8: @ 30004D8
- .space 0x8
-
-gUnknown_030004E0: @ 30004E0
- .space 0x8
-
-gUnknown_030004E8: @ 30004E8
- .space 0x18
-
-gUnknown_03000500: @ 3000500
- .space 0x8
-
-@ trade
-
-gUnknown_03000508: @ 3000508
- .space 0x8
-
+ .include "src/daycare.o"
+ .include "src/trade.o"
.include "src/berry_blender.o"
.include "src/play_time.o"
- .include "src/rom4.o"
-
- @ unused variable?
- .align 2
- .space 0x4
-
+ .include "src/overworld.o"
.include "src/field_camera.o"
.include "src/field_map_obj.o"
.include "src/field_message_box.o"
@@ -45,58 +18,19 @@ gUnknown_03000508: @ 3000508
.include "src/menu.o"
.include "src/tileset_anim.o"
.include "src/sound.o"
-
-@ field_weather
-
-gUnknown_030006DC: @ 30006DC
- .space 0x4
-
+ .include "src/field_weather.o"
.include "src/field_effect.o"
.include "src/item_menu.o"
-
-@ shop
-
-gUnknown_03000708: @ 3000708
- .space 0x10
-
+ .include "src/shop.o"
.include "src/record_mixing.o"
.include "src/tv.o"
-
- @ unused variable?
- .align 2
- .space 0x4
-
-@ battle_anim_80CA710
-
-gUnknown_03000728: @ 3000728
- .space 0x8
-
-gUnknown_03000730: @ 3000730
- .space 0x10
-
-@ easy_chat
-
-gUnknown_03000740: @ 3000740
- .space 0x4
-
-@ pokenav
-
-gUnknown_03000744: @ 3000744
- .space 0x4
-
-@ mauville_old_man
-
-gUnknown_03000748: @ 3000748
- .space 0x4
-
+ .include "src/battle_anim_80CA710.o"
+ .include "src/easy_chat.o"
+ .include "src/pokenav.o"
+ .include "src/mauville_man.o"
.include "src/menu_helpers.o"
.include "src/contest_painting.o"
.include "src/pokeblock.o"
-
- @ unused variable?
- .align 2
- .space 0x4
-
.include "src/field_specials.o"
.include "src/learn_move.o"
.include "src/player_pc.o"
diff --git a/sym_common.txt b/sym_common.txt
index 4dd235faf..d9da3ec3b 100644
--- a/sym_common.txt
+++ b/sym_common.txt
@@ -118,7 +118,7 @@ gUnknown_03004828: @ 3004828
.space 0x8
.include "berry_blender.o"
- .include "rom4.o"
+ .include "overworld.o"
.include "fieldmap.o"
.include "field_camera.o"
.include "field_map_obj.o"
@@ -160,14 +160,7 @@ gUnknown_03005560: @ 3005560
gUnknown_030056A0: @ 30056A0
.space 0x640
-@ pokemon_menu
-
-gLastFieldPokeMenuOpened: @ 3005CE0
- .space 0x4
-
-gUnknown_03005CE4: @ 3005CE4
- .space 0x4
-
+ .include "pokemon_menu.o"
.include "pokedex.o"
@ pokemon_summary_screen
@@ -244,12 +237,7 @@ gUnknown_03005E0C: @ 3005E0C
.space 0x4
.include "contest_painting.o"
-
-@ evolution_scene
-
- .align 2
-gUnknown_03005E94: @ 3005E94
- .space 0x4
+ .include "evolution_scene.o"
@ pokedex_cry_screen
@@ -274,40 +262,7 @@ gUnknown_03005F10: @ 3005F10
gUnknown_03005F14: @ 3005F14
.space 0xC
-@ pokeblock_feed
-
-gUnknown_03005F20: @ 3005F20
- .space 0x4
-
-gUnknown_03005F24: @ 3005F24
- .space 0x4
-
-gUnknown_03005F28: @ 3005F28
- .space 0x4
-
-gUnknown_03005F2C: @ 3005F2C
- .space 0x4
-
-gUnknown_03005F30: @ 3005F30
- .space 0x4
-
-gUnknown_03005F34: @ 3005F34
- .space 0x8
-
-gUnknown_03005F3C: @ 3005F3C
- .space 0x4
-
-gUnknown_03005F40: @ 3005F40
- .space 0x10
-
-gUnknown_03005F50: @ 3005F50
- .space 0x44
-
-gUnknown_03005F94: @ 3005F94
- .space 0xC
-
-gUnknown_03005FA0: @ 3005FA0
- .space 0x30
+ .include "pokeblock_feed.o"
.include "m4a_2.o"
.include "agb_flash.o"
diff --git a/sym_ewram.txt b/sym_ewram.txt
index 53481ff2e..040173cfd 100644
--- a/sym_ewram.txt
+++ b/sym_ewram.txt
@@ -287,7 +287,7 @@ gPID_perBank: @ 2024E70
gBattleMovePower: @ 2024E80
.space 0x2
-word_2024E82: @ 2024E82
+gMoveToLearn: @ 2024E82
.space 0x2
gBattleMonForms: @ 2024E84
@@ -310,7 +310,7 @@ gUnknown_020297D8: @ 20297D8
.include "src/berry_blender.o"
.include "src/new_game.o"
- .include "src/rom4.o"
+ .include "src/overworld.o"
.include "src/fieldmap.o"
.include "src/field_camera.o"
.include "src/field_player_avatar.o"
@@ -374,17 +374,8 @@ gUnknown_0202FF58: @ 202FF58
gUnknown_0202FFA4: @ 202FFA4
.space 0x4
-@ pokemon_menu
-
-gUnknown_0202FFA8: @ 202FFA8
- .space 0x1
-
-gUnknown_0202FFA9: @ 202FFA9
- .space 0x1
-
-gUnknown_0202FFAA: @ 202FFAA
- .space 0xA
+ .include "src/pokemon_menu.o"
.include "src/pokedex.o"
.include "src/trainer_card.o"
.include "src/pokemon_storage_system.o"
@@ -510,29 +501,7 @@ gScriptContestCategory: @ 203869C
gScriptContestRank: @ 203869E
.space 0x2
-@ shop
-
-gUnknown_020386A0: @ 20386A0
- .space 0x4
-
-gUnknown_020386A4: @ 20386A4
- .space 0x4
-
-gUnknown_020386A8: @ 20386A8
- .space 0x2
-
-gUnknown_020386AA: @ 20386AA
- .space 0x7A
-
-gUnknown_02038724: @ 2038724
- .space 0xC
-
-gUnknown_02038730: @ 2038730
- .space 0x1
-
-gUnknown_02038731: @ 2038731
- .space 0x3
-
+ .include "src/shop.o"
.include "src/money.o"
@ record_mixing
@@ -576,13 +545,7 @@ gUnknown_020388B4: @ 20388B4
.space 0x4
.include "src/mon_markings.o"
-
-@ mauville_old_man
-
- .align 2
-gUnknown_020388BC: @ 20388BC
- .space 0x4
-
+ .include "src/mauville_man.o"
.include "src/menu_helpers.o"
.include "src/region_map.o"
.include "src/decoration.o"
@@ -655,12 +618,7 @@ gUnknown_0203927D: @ 203927D
.include "src/berry_tag_screen.o"
.include "src/mystery_event_menu.o"
.include "src/save_failed_screen.o"
-
-@ pokeblock_feed
-
- .align 2
-gUnknown_02039350: @ 2039350
- .space 0x8
+ .include "src/pokeblock_feed.o"
@ intro_credits_graphics